Merge remote-tracking branch 'origin/upstream-experimental' into upstream
diff --git a/ChangeLog b/ChangeLog
index 9478081..2ae7cbf 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,33 +1,6245 @@
-=== release 1.4.5 ===
+=== release 1.5.91 ===
 
-2014-12-18  Sebastian Dröge <slomo@coaxion.net>
+2015-09-18  Sebastian Dröge <slomo@coaxion.net>
 
 	* configure.ac:
-	  releasing 1.4.5
+	  releasing 1.5.91
 
-2014-12-09 22:47:31 -0300  Thiago Santos <thiagoss@osg.samsung.com>
+2015-09-18 17:48:49 +0200  Christophe Fergeau <cfergeau@redhat.com>
 
-	* gst-libs/gst/audio/gstaudiodecoder.c:
-	  audiodecoder: do not use fixed caps on source pad
-	  decoders can change the caps on their source pads, so they don't
-	  use fixed caps. Having fixed caps can cause renegotiation issues.
+	* gst-libs/gst/app/gstappsink.c:
+	* gst-libs/gst/app/gstappsink.h:
+	  appsink: Fix 'steaming' typo in API doc
+	  There are several occurrences of 'steaming' where 'streaming' was meant.
 
-2014-12-09 22:46:42 -0300  Thiago Santos <thiagoss@osg.samsung.com>
+2015-09-18 11:49:59 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+	* po/vi.po:
+	* po/zh_CN.po:
+	  po: Update translations
+
+2015-09-18 10:59:46 +0530  Ravi Kiran K N <ravi.kiran@samsung.com>
+
+	* tests/examples/playback/playback-test.c:
+	  playback-test: avoid critical on exit
+	  Only free vis_entries array when not null on exit.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=755201
+
+2015-09-18 09:48:18 +0530  Prashant Gotarne <ps.gotarne@samsung.com>
+
+	* ext/pango/gstbasetextoverlay.c:
+	  basetextoverlay: fix typo in debug log message
+	  https://bugzilla.gnome.org/show_bug.cgi?id=755198
+
+2015-09-17 14:27:33 +0900  Vineeth T M <vineeth.tm@samsung.com>
+
+	* gst-libs/gst/audio/gstaudiosink.c:
+	* gst/tcp/gstmultisocketsink.c:
+	  audiosink, multisocketsink: Fix error leak during failures
+	  https://bugzilla.gnome.org/show_bug.cgi?id=755143
+
+2015-09-16 19:53:35 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+	* gst/playback/gsturidecodebin.c:
+	  uridecodebin: Use the correct caps name for MS Smooth Streaming manifests
+	  Thanks to John Chang <r97922153@gmail.com> for reporting.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=755098
+
+2015-09-15 15:26:44 +0100  Tim-Philipp Müller <tim@centricular.com>
+
+	* gst-libs/gst/app/gstappsink.c:
+	  appsink: minor docs fix
+
+2015-09-11 23:36:47 +0100  Tim-Philipp Müller <tim@centricular.com>
+
+	* gst-libs/gst/video/gstvideopool.c:
+	  videopool: ensure allocation alignment is consistent with video alignment requirements
+	  Make sure GstAllocationParams alignment is not less than
+	  any alignment requirement specified via GstVideoAlignment.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=754120
+
+2015-09-14 09:36:20 +0900  Vineeth TM <vineeth.tm@samsung.com>
+
+	* sys/xvimage/xvimagesink.c:
+	  xvimagesink: fix error leak when context creation fails
+	  When context creation fails, error is getting leaked.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=754973
+
+2015-09-11 23:28:37 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+	* gst/playback/gstplaybin2.c:
+	  playback: Add POINTER_TO_ULONG() macro for consistency
+
+2015-09-11 23:48:05 +0900  Kouhei Sutou <kou@clear-code.com>
+
+	* gst/playback/gstplaybin2.c:
+	  playback: fix build error for 64bit Windows build by MinGW
+	  Casting to gpointer from gulong generates the following warning with
+	  64bit Windows target MinGW:
+	  gstplaybin2.c: In function 'pad_added_cb':
+	  gstplaybin2.c:3476:7: error: cast to pointer from integer of different size [-Werror=int-to-pointer-cast]
+	  (gpointer) group_id_probe_handler);
+	  ^
+	  cc1: all warnings being treated as errors
+	  We should cast to guintptr from gulong before we cast to gpointer.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=754755
+
+2015-09-09 19:00:33 -0300  Thiago Santos <thiagoss@osg.samsung.com>
+
+	* gst-libs/gst/video/video-format.c:
+	  video-format: add missing alpha flag for some formats
+	  Some formats didn't have the alpha flag marked, use the correct
+	  macro so they get it right.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=754808
+
+2015-09-09 12:33:02 +0300  Sebastian Dröge <sebastian@centricular.com>
+
+	* gst-libs/gst/app/gstappsrc.c:
+	  appsrc: Always take the mutex before flushing the queue
+	  Otherwise the application might push new buffers into the queue while we're
+	  flushing, potentially causing the GQueue data structure to become inconsistent
+	  and causing crashes soon after.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=754597
+
+2015-09-08 01:35:19 +0530  Vikram Fugro <vikram.fugro@gmail.com>
+
+	* gst-libs/gst/app/gstappsrc.c:
+	* tests/check/elements/appsrc.c:
+	  appsrc: retain the latest caps in queue when flushing
+	  - Retain the latest caps in the internal queue, when
+	  flushing.
+	  - Add a unit test case for the same.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=754597
+
+2015-09-07 00:19:09 +0100  Tim-Philipp Müller <tim@centricular.com>
+
+	* gst-libs/gst/video/video-format.h:
+	  video: improve GstVideoFormatUnpack docs
+	  https://bugzilla.gnome.org/show_bug.cgi?id=754650
+
+2015-09-06 18:17:15 +0900  Kouhei Sutou <kou@clear-code.com>
+
+	* gst-libs/gst/video/video-dither.c:
+	  libs: Fix build error on MinGW where "%ll" is not available
+	  "ll" isn't available on MinGW. We can use G_GINT64_MODIFIER for portable
+	  64bit size data modifier.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=754630
+
+2015-08-31 10:46:43 +0200  Havard Graff <havard.graff@gmail.com>
+
+	* gst-libs/gst/Makefile.am:
+	  libs: build rtp after audio
+	  The dependency setup does not seem to work for all systems,
+	  causing the build to fail with:
+	  gstrtpbaseaudiopayload.c:65:0:
+	  fatal error: gst/audio/audio-enumtypes.h: No such file or directory
+	  My setup:
+	  gcc (Ubuntu 4.8.4-2ubuntu1~14.04) 4.8.4
+	  autoconf (GNU Autoconf) 2.69
+	  automake (GNU automake) 1.14.1
+	  libtool (GNU libtool) 2.4.2
+	  https://bugzilla.gnome.org/show_bug.cgi?id=754344
+
+2015-08-31 10:49:41 +0100  Tim-Philipp Müller <tim@centricular.com>
+
+	* gst-libs/gst/Makefile.am:
+	  libs: rtp is no longer an independent subdir
+	  https://bugzilla.gnome.org/show_bug.cgi?id=754344
+
+2015-09-03 17:55:10 +0200  Wim Taymans <wtaymans@redhat.com>
+
+	* gst/videoscale/gstvideoscale.c:
+	  videoscale: fix gamma-decode option
+	  We need to use the enum to configure the option now.
+
+2015-09-03 08:58:08 +0530  Prashant Gotarne <ps.gotarne@samsung.com>
+
+	* ext/pango/gstbasetextoverlay.c:
+	  basetextoverlay: FIX crash if padding greater than video size
+	  Skipping rendering of textimage if overlay is completely
+	  outside video frame.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=754429
+
+2015-08-31 11:09:09 +0200  Philippe Normand <philn@igalia.com>
+
+	* gst-libs/gst/app/gstappsrc.c:
+	  appsrc: remove duplicate get_size vfunc assignment
+
+2015-08-29 21:38:52 +0200  George Kiagiadakis <george.kiagiadakis@collabora.com>
+
+	* gst-libs/gst/allocators/allocators.h:
+	  allocators: include gstfdmemory.h in the main library header, allocators.h
+
+2015-08-29 10:44:28 +0100  Tim-Philipp Müller <tim@centricular.com>
+
+	* gst-libs/gst/audio/gstaudiobasesink.c:
+	  audiobasesink: fix misleading error message debug detail
+	  https://bugzilla.gnome.org/show_bug.cgi?id=754260
+
+2015-08-28 09:36:15 -0300  Thiago Santos <thiagoss@osg.samsung.com>
+
+	* gst/playback/gstplaysinkconvertbin.c:
+	  playsinkconvertbin: implement accept-caps handler
+	  The default one will just go through the internal elements which might
+	  just be identity when it is in passthrough which will lead to the query
+	  being handled by the downstream sink, ignoring all that playsinkconvertbin
+	  could actually handle and convert.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=754235
+
+2015-08-27 23:08:51 +0200  Carlos Rafael Giani <dv@pseudoterminal.org>
+
+	* docs/libs/gst-plugins-base-libs-sections.txt:
+	* gst-libs/gst/audio/gstaudiobasesink.h:
+	  audiobasesink: Fix incorrect/missing custom slaving method documentation
+	  https://bugzilla.gnome.org/show_bug.cgi?id=754199
+
+2015-08-19 21:19:05 +0900  Eunhae Choi <eunhae1.choi@samsung.com>
+
+	* gst/subparse/gstsubparse.c:
+	  subparse: use g_clear_error instead of g_error_free
+	  To avoid invalid pointer accees the err pointer should be set to NULL.
+	  By using g_clear_error() it calls free and clear the pointer.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=753817
+
+=== release 1.5.90 ===
+
+2015-08-19 13:10:23 +0300  Sebastian Dröge <sebastian@centricular.com>
+
+	* ChangeLog:
+	* NEWS:
+	* RELEASE:
+	* configure.ac:
+	* docs/plugins/gst-plugins-base-plugins.args:
+	* docs/plugins/inspect/plugin-adder.xml:
+	* docs/plugins/inspect/plugin-alsa.xml:
+	* docs/plugins/inspect/plugin-app.xml:
+	* docs/plugins/inspect/plugin-audioconvert.xml:
+	* docs/plugins/inspect/plugin-audiorate.xml:
+	* docs/plugins/inspect/plugin-audioresample.xml:
+	* docs/plugins/inspect/plugin-audiotestsrc.xml:
+	* docs/plugins/inspect/plugin-cdparanoia.xml:
+	* docs/plugins/inspect/plugin-encoding.xml:
+	* docs/plugins/inspect/plugin-gio.xml:
+	* docs/plugins/inspect/plugin-libvisual.xml:
+	* docs/plugins/inspect/plugin-ogg.xml:
+	* docs/plugins/inspect/plugin-pango.xml:
+	* docs/plugins/inspect/plugin-playback.xml:
+	* docs/plugins/inspect/plugin-subparse.xml:
+	* docs/plugins/inspect/plugin-tcp.xml:
+	* docs/plugins/inspect/plugin-theora.xml:
+	* docs/plugins/inspect/plugin-typefindfunctions.xml:
+	* docs/plugins/inspect/plugin-videoconvert.xml:
+	* docs/plugins/inspect/plugin-videorate.xml:
+	* docs/plugins/inspect/plugin-videoscale.xml:
+	* docs/plugins/inspect/plugin-videotestsrc.xml:
+	* docs/plugins/inspect/plugin-volume.xml:
+	* docs/plugins/inspect/plugin-vorbis.xml:
+	* docs/plugins/inspect/plugin-ximagesink.xml:
+	* docs/plugins/inspect/plugin-xvimagesink.xml:
+	* gst-plugins-base.doap:
+	* win32/common/_stdint.h:
+	* win32/common/config.h:
+	* win32/common/video-enumtypes.c:
+	* win32/common/video-enumtypes.h:
+	  Release 1.5.90
+
+2015-08-19 12:39:17 +0300  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/lt.po:
+	* po/lv.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:
+	  Update .po files
+
+2015-08-19 11:23:09 +0300  Sebastian Dröge <sebastian@centricular.com>
+
+	* po/cs.po:
+	* po/da.po:
+	* po/de.po:
+	* po/hu.po:
+	* po/nb.po:
+	* po/pl.po:
+	* po/ru.po:
+	* po/uk.po:
+	* po/zh_CN.po:
+	  po: Update translations
+
+2015-08-19 08:37:46 +0900  Vineeth TM <vineeth.tm@samsung.com>
+
+	* tools/gst-discoverer.c:
+	  tools: discoverer: When info is NULL just print error and return
+	  In case discover_uri returns NULL info, passing the info to discoverer APIs
+	  result in critical assertion errors. Hence instead of passing NULL info along,
+	  print the error and return.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=753701
+
+2015-08-18 18:47:22 +0300  Sebastian Dröge <sebastian@centricular.com>
+
+	* gst/playback/gstdecodebin2.c:
+	  Revert "decodebin: Handle the preroll multi-queue size"
+	  This reverts commit 5c8ef0ea05123506dfc35c70c8b165bca7435dad.
+
+2015-08-18 18:47:21 +0300  Sebastian Dröge <sebastian@centricular.com>
+
+	* gst/playback/gstdecodebin2.c:
+	  Revert "decodebin: Store extra_buffer_required per group, not globally"
+	  This reverts commit 1ea81114ea6bd48b581f19002018680933aa7a12.
+
+2015-08-18 18:47:18 +0300  Sebastian Dröge <sebastian@centricular.com>
+
+	* gst/playback/gstdecodebin2.c:
+	  Revert "decodebin: If extra buffers are going to be required, we're still prerolling"
+	  This reverts commit a3b24f0241bd55a005a072ba8ddcd53e0fdbf827.
+
+2015-08-18 16:28:42 +0300  Sebastian Dröge <sebastian@centricular.com>
 
 	* gst-libs/gst/video/gstvideodecoder.c:
-	  videodecoder: do not use fixed caps on source pad
-	  decoders can change the caps on their source pads, so they don't
-	  use fixed caps. Having fixed caps can cause renegotiation issues.
+	* gst-libs/gst/video/gstvideoencoder.c:
+	  video(en|de)coder: Return TRUE when we consumed a tag event without creating a new event
+	  Fixes spurious flow errors that especially break gst-validate.
 
-2014-12-16 15:03:55 +0100  Sebastian Dröge <sebastian@centricular.com>
+2015-08-18 16:01:28 +0300  Sebastian Dröge <sebastian@centricular.com>
 
-	* gst-libs/gst/video/gstvideosink.c:
+	* gst-libs/gst/audio/gstaudiodecoder.c:
+	  audiodecoder: If there are no tags, don't try to do event handling on a NULL event
+	  Fixes some crashes.
+
+2015-08-18 15:58:57 +0300  Sebastian Dröge <sebastian@centricular.com>
+
+	* gst-libs/gst/audio/gstaudioencoder.c:
+	  audioencoder: If there are no tags, don't try to do event handling on a NULL event
+	  Fixes some crashes.
+
+2015-08-18 13:50:17 +0300  Vivia Nikolaidou <vivia@ahiru.eu>
+
+	* tools/gst-play.c:
+	  tools: gst-play: Use g_build_filename instead of g_strconcat
+	  When running gst-play against a directory name, and suffix the path with a
+	  directory separator (e.g. tab completion), gst-play was printing two directory
+	  separators in a row. g_build_filename fixes this, and additionally allows for
+	  both '/' and '\' as separators on Windows.
+
+2015-08-18 15:16:25 +0300  Sebastian Dröge <sebastian@centricular.com>
+
+	* gst/playback/gstdecodebin2.c:
+	  decodebin: If extra buffers are going to be required, we're still prerolling
+
+2015-08-18 15:01:33 +0300  Sebastian Dröge <sebastian@centricular.com>
+
+	* gst/playback/gstdecodebin2.c:
+	  decodebin: Store extra_buffer_required per group, not globally
+	  It's only relevant for each group, and by storing it in the group
+	  we have locking and everything else like for the other buffering-related
+	  variables. Locking looks a bit fishy still, but it was like that for a long
+	  time already so shouldn't be worse than before.
+
+2015-07-30 10:33:25 +0900  Myoungsun Lee <ohmygod0327@gmail.com>
+
+	* gst/playback/gstdecodebin2.c:
+	  decodebin: Handle the preroll multi-queue size
+	  Overview:
+	  There are some of interleaved streams which has long-term location of audio data.
+	  It mean the audio data is located far away more than multiqueue size.
+	  In this case, because of multiqueue overrun, the pipeline is stopped.
+	  To prevent hanging-like state, the decodebin needs to handle the queue size.
+	  Caused:
+	  The multiqueue size is not enough, the pipeline will stay being stalled status
+	  and decodebin cannot complete to build decode chain.
+	  In this issue file, decodebin did not receive no_more_pads signal or audio data yet.
+	  Steps to Reproduce:
+	  play the high-resolution(4K file) files or some streaming media(push mode).
+	  Actual Results:
+	  There is no audio or subtitle.
+	  We can see only video or infinite loading.
+	  Resolution:
+	  Decodebin detect this problem, and add extra buffer size to multiqueue.
+	  The multiqueue is larger than before, the next data can be pushed the downstream element.
+	  Additional Information:
+	  The max-preroll extra buffer size is set 8MB.
+	  We can use total pre-roll buffer 10MB.
+	  Only first overrun callback can handle multiqueue size.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=733235
+
+2015-08-18 12:29:29 +0100  Tim-Philipp Müller <tim@centricular.com>
+
+	* gst-libs/gst/video/gstvideoencoder.c:
+	  videoencoder: fix tag handling
+	  Merge upstream tags with encoder tags and update whenever
+	  any of those changes.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=679768
+
+2015-08-18 11:45:24 +0100  Tim-Philipp Müller <tim@centricular.com>
+
+	* gst-libs/gst/audio/gstaudioencoder.c:
+	  audioencoder: fix tag handling
+	  Merge upstream tags with encoder tags and update whenever
+	  any of those changes.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=679768
+
+2015-08-18 12:56:33 +0300  Sebastian Dröge <sebastian@centricular.com>
+
+	* gst/typefind/gsttypefindfunctions.c:
+	  typefindfunctions: Add typefinder for TTML+XML
+	  Used in DASH among other things, as SMPTE Timed Text.
+
+2015-08-18 09:06:39 +0900  Vineeth TM <vineeth.tm@samsung.com>
+
+	* gst-libs/gst/pbutils/gstdiscoverer.c:
+	  pbutils: discoverer: Set GError when NULL info is being returned.
+	  When discovering the URI, if info is NULL, then instead of just returning NULL,
+	  set the GError, so the error can be printed and notified.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=753701
+
+2015-08-17 11:18:25 +0900  Vineeth TM <vineeth.tm@samsung.com>
+
+	* tools/gst-discoverer.c:
+	  discoverer: free context and error during failures
+	  When g_option_context_parse or gst_discoverer_new fails, then there will
+	  be memory leaks for ctx and err variables. Free'ing the same.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=753701
+
+2015-08-16 18:28:09 +0100  Tim-Philipp Müller <tim@centricular.com>
+
+	* gst-libs/gst/audio/gstaudiodecoder.c:
+	  audiodecoder: try harder to avoid sending unnecessary tag updates
+
+2015-08-16 17:55:22 +0100  Tim-Philipp Müller <tim@centricular.com>
+
+	* gst-libs/gst/video/gstvideodecoder.c:
+	  videodecoder: fix tag handling
+	  Before we just merged everything in pretty much random ways
+	  ad-hoc instead of keeping state properly. In 0.10 that was
+	  how it worked, but in 1.x the tag events sent should always
+	  reflect the latest state and replace any previous tags.
+	  So save the upstream (stream) tags, and save the tags set
+	  by the decoder subclass with merge mode, and then update
+	  the merged tags whenever either of those two changes.
+	  This slightly changes the behaviour of gst_video_decoder_merge_tags()
+	  in case it is called multiple times, since now any call replaces
+	  the previously-set tags. However, it leads to much more predictable
+	  outcomes, and also we are not aware of any subclass which sets this
+	  multiple times and expects all the tags set to be merged.
+	  If more complex tag merging scenarios are required, we'll have
+	  to add a new vfunc for that or the subclass has to intercept
+	  the upstream tags itself and send merged tags itself.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=679768
+
+2015-08-14 17:59:29 +0100  Tim-Philipp Müller <tim@centricular.com>
+
+	* tests/check/libs/audiodecoder.c:
+	  tests: audiodecoder: add unit test for tag handling
+	  https://bugzilla.gnome.org/show_bug.cgi?id=679768
+
+2015-08-14 17:44:59 +0100  Tim-Philipp Müller <tim@centricular.com>
+
+	* gst-libs/gst/audio/gstaudiodecoder.c:
+	  audiodecoder: fix tag handling
+	  Before we just merged everything in pretty much random ways
+	  ad-hoc instead of keeping state properly. In 0.10 that was
+	  how it worked, but in 1.x the tag events sent should always
+	  reflect the latest state and replace any previous tags.
+	  So save the upstream (stream) tags, and save the tags set
+	  by the decoder subclass with merge mode, and then update
+	  the merged tags whenever either of those two changes.
+	  This slightly changes the behaviour of gst_audio_decoder_merge_tags()
+	  in case it is called multiple times, since now any call replaces
+	  the previously-set tags. However, it leads to much more predictable
+	  outcomes, and also we are not aware of any subclass which sets this
+	  multiple times and expects all the tags set to be merged.
+	  If more complex tag merging scenarios are required, we'll have
+	  to add a new vfunc for that or the subclass has to intercept
+	  the upstream tags itself and send merged tags itself.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=679768
+
+2015-08-15 22:23:15 -0300  Thiago Santos <thiagoss@osg.samsung.com>
+
+	* ext/vorbis/gstvorbisenc.c:
+	  vorbisenc: use template subset check for accept-caps
+	  It is faster than doing a query that propagates downstream and
+	  should be enough
+
+2015-08-16 12:20:51 -0300  Thiago Santos <thiagoss@osg.samsung.com>
+
+	* ext/vorbis/gstvorbisenc.c:
+	  vorbisenc: use more accurate sink pad template caps
+	  Removes the need for custom caps query handling and makes it more
+	  correct from the beginning on the template. It is a bit uglier
+	  to read because there is 1 entry per channel but makes code easier
+	  to maintain.
+
+2015-08-15 22:22:41 -0300  Thiago Santos <thiagoss@osg.samsung.com>
+
+	* ext/theora/gsttheoraenc.c:
+	  theoraenc: use template subset check for accept-caps
+	  It is faster than doing a query that propagates downstream and
+	  should be enough
+
+2015-08-16 08:12:01 -0300  Thiago Santos <thiagoss@osg.samsung.com>
+
+	* gst-libs/gst/audio/gstaudioencoder.c:
+	* gst-libs/gst/audio/gstaudioencoder.h:
+	  audioencoder: add src and sink query methods
+	  Allows subclasses to do their own handling of GstQuery and still
+	  chain up to the parent class to handle the ones that they don't want
+	  to handle
+
+2015-08-16 12:53:02 +0200  Edward Hervey <bilboed@bilboed.com>
+
+	* gst/playback/gstdecodebin2.c:
+	  decodebin: Fix list iteration
+	  We were using the wrong variable ...
+	  CID #1316477
+
+2015-05-04 11:19:28 +0200  Edward Hervey <edward@centricular.com>
+
+	* gst/playback/gstdecodebin2.c:
+	  decodebin2: Handle flushing with multiple decode groups
+	  When an upstream element wants to flush downstream, we need to take
+	  all chains/groups into consideration.
+	  To that effect, when a FLUSH_START event is seen, after having it
+	  sent downstream we mark all those chains/groups as "drained" (as if
+	  they had seen a EOS event on the endpads).
+	  When a FLUSH_STOP event is received, we check if we need to switch groups.
+	  This is done by checking if there are next groups. If so, we will switch
+	  over to the latest next_group. The actual switch will be done when
+	  that group is blocked.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=606382
+
+2015-04-29 15:56:39 +0200  Edward Hervey <edward@centricular.com>
+
+	* gst/playback/gstdecodebin2.c:
+	  decodebin2: Forward event/queries for unlinked groups
+	  When upstream events/queries reach sinkpads of unlinked groups (i.e.
+	  no longer linked to the upstream demuxer), this patch attempts to find
+	  the linked group and forward it upstream of that group.
+	  This is done by adding upstream event/query probes on new group sinkpads
+	  and then:
+	  * Checking if the pad is linked or not (has a peer or not)
+	  * If there is a peer, just let the event/query follow through normally
+	  * If there is no peer, we find a pad to which to proxy it and return
+	  GST_PROBE_HANDLED if it succeeded (allowing the event/query to be properly
+	  returned to the initial called)
+	  Note that this is definitely not thread-safe for the time being
+	  https://bugzilla.gnome.org/show_bug.cgi?id=606382
+
+2015-08-15 08:18:59 -0300  Thiago Santos <thiagoss@osg.samsung.com>
+
+	* gst-libs/gst/audio/gstaudiodecoder.c:
+	* gst-libs/gst/audio/gstaudiodecoder.h:
+	* win32/common/libgstaudio.def:
+	  Revert "audiodecoder: expose default query handling function"
+	  Apparently I forgot how gobject works, there is no need to expose
+	  it directly as one can call it from the parent_class pointer
+	  This reverts commit 8a64592481dab985ca520a5b1cb394a609275c60.
+
+2015-08-15 08:14:00 -0300  Thiago Santos <thiagoss@osg.samsung.com>
+
+	* gst-libs/gst/video/gstvideodecoder.c:
+	* gst-libs/gst/video/gstvideodecoder.h:
+	* win32/common/libgstvideo.def:
+	  Revert "videodecoder: expose default query handling function"
+	  Apparently I forgot how gobject works, there is no need to expose
+	  it directly as one can call it from the parent_class pointer
+	  This reverts commit ea9b6a7e3c4eea512650adf530b7f1acb0eccd84.
+
+2015-08-15 07:41:24 -0300  Thiago Santos <thiagoss@osg.samsung.com>
+
+	* ext/vorbis/gstvorbisdec.c:
+	  vorbisdec: use default pad accept-caps handling
+	  Avoids useless check of downstream caps when handling an
+	  accept-caps query
+
+2015-08-15 07:40:55 -0300  Thiago Santos <thiagoss@osg.samsung.com>
+
+	* ext/theora/gsttheoradec.c:
+	  theoradec: use default pad accept-caps handling
+	  Avoids useless check of downstream caps when handling an
+	  accept-caps query
+
+2015-08-15 07:31:54 -0300  Thiago Santos <thiagoss@osg.samsung.com>
+
+	* gst-libs/gst/audio/gstaudiodecoder.c:
+	* gst-libs/gst/audio/gstaudiodecoder.h:
+	* win32/common/libgstaudio.def:
+	  audiodecoder: add option to use default pad accept-caps handling
+	  Add gst_audio_decoder_set_use_default_pad_acceptcaps() to allow
+	  subclasses to make videodecoder use the default pad acceptcaps
+	  handling instead of resorting to the caps query that is, usually,
+	  less efficient and unecessary
+	  API: gst_audio_decoder_set_use_default_pad_acceptcaps
+
+2015-08-15 07:20:25 -0300  Thiago Santos <thiagoss@osg.samsung.com>
+
+	* gst-libs/gst/video/gstvideodecoder.c:
+	* gst-libs/gst/video/gstvideodecoder.h:
+	* win32/common/libgstvideo.def:
+	  videodecoder: add option to use default pad accept-caps handling
+	  Add gst_video_decoder_set_use_default_pad_acceptcaps() to allow
+	  subclasses to make videodecoder use the default pad acceptcaps
+	  handling instead of resorting to the caps query that is, usually,
+	  less efficient and unecessary
+	  API: gst_video_decoder_set_use_default_pad_acceptcaps
+
+2015-08-15 23:33:14 +1000  Jan Schmidt <jan@centricular.com>
+
+	* gst-libs/gst/rtp/gstrtpbasedepayload.c:
+	  rtpbasedepayload: Make stats creation threadsafe, fix a CRITICAL
+	  Use the object lock to protect the internal segment when updating
+	  against access from getting the stats property.
+	  Fix a critical in gst-inspect or when retrieving the stats
+	  before any segment has arrived by checking whether the
+	  segment has been initted..
+
+2015-08-12 03:00:15 +1000  Jan Schmidt <jan@centricular.com>
+
+	* gst/typefind/gsttypefindfunctions.c:
+	  typefind: Make the H.264 typefind a tiny bit more lenient.
+	  When we see prefix NALs before a Subset SPS has been spotted,
+	  it might just be because the stream was truncated at the
+	  start, so don't count those as either 'bad' or 'good' packets.
+
+2015-08-14 18:43:03 +0200  George Kiagiadakis <george.kiagiadakis@collabora.com>
+
+	* gst-libs/gst/app/gstappsink.c:
+	  appsink: unref the preroll buffer and cleanup the segments on stop()
+	  Just for consistency. No need to keep data around.
+
+2015-08-14 18:35:22 +0200  George Kiagiadakis <george.kiagiadakis@collabora.com>
+
+	* gst-libs/gst/app/gstappsink.c:
+	  appsink: do not update preroll_caps unless the sink is prerolling
+	  Just for consistency with the preroll_segment
+
+2015-08-14 18:06:03 +0200  George Kiagiadakis <george.kiagiadakis@collabora.com>
+
+	* tests/check/elements/appsink.c:
+	  tests/appsink: add test to ensure that the segment returned by pull-preroll/sample is correct
+	  https://bugzilla.gnome.org/show_bug.cgi?id=751147
+
+2015-06-18 12:30:24 +0200  George Kiagiadakis <george.kiagiadakis@collabora.com>
+
+	* gst-libs/gst/app/gstappsink.c:
+	  appsink: put the correct segment in the preroll sample
+	  last_segment is only being updated in dequeue_buffer(),
+	  which is only called from _pull_sample(). _pull_preroll()
+	  simply re-uses an old or dummy segment while the actual
+	  one sits and waits in the queue.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=751147
+
+2015-08-14 08:59:51 -0300  Thiago Santos <thiagoss@osg.samsung.com>
+
+	* gst-libs/gst/video/gstvideodecoder.c:
+	* gst-libs/gst/video/gstvideodecoder.h:
+	* win32/common/libgstvideo.def:
+	  videodecoder: expose default query handling function
+	  Subclasses can use it to select what queries they want to handle
+	  and forward the rest to the default handling function.
+	  API: gst_video_decoder_sink_query_default
+	  https://bugzilla.gnome.org/show_bug.cgi?id=753623
+
+2015-08-14 08:58:58 -0300  Thiago Santos <thiagoss@osg.samsung.com>
+
+	* gst-libs/gst/audio/gstaudiodecoder.c:
+	* gst-libs/gst/audio/gstaudiodecoder.h:
+	* win32/common/libgstaudio.def:
+	  audiodecoder: expose default query handling function
+	  Subclasses can use it to select what queries they want to handle
+	  and forward the rest to the default handling function.
+	  API: gst_audio_decoder_sink_query_default
+	  https://bugzilla.gnome.org/show_bug.cgi?id=753623
+
+2015-08-14 11:11:10 +0200  Edward Hervey <bilboed@bilboed.com>
+
+	* tests/check/generic/states.c:
+	  check: Rename states unit test
+	  Makes it easier to differentiate from other modules states unit test
+
+2015-08-14 05:48:31 -0300  Thiago Santos <thiagoss@osg.samsung.com>
+
+	* gst/playback/gstplaysinkconvertbin.c:
+	  playsinkconvertbin: remove accept-caps handling
+	  Just let the internal element of the bin do it instead of forcing a
+	  caps query to do it.
+
+2015-08-13 13:52:17 -0300  Thiago Santos <thiagoss@osg.samsung.com>
+
+	* gst/videorate/gstvideorate.c:
+	  videorate: fixate the pixel-aspect-ratio
+	  If the pixel-aspect-ratio is not fixed, try to get it as close
+	  to 1/1 as possible
+	  https://bugzilla.gnome.org/show_bug.cgi?id=748635
+
+2015-08-11 15:09:10 +0100  Tim-Philipp Müller <tim@centricular.com>
+
+	* ext/theora/gsttheoraenc.c:
+	  theoraenc: mention videorate is often needed in docs
+	  https://bugzilla.gnome.org/show_bug.cgi?id=748877
+
+2015-08-11 14:10:57 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+	* gst-libs/gst/Makefile.am:
+	  rtp: Depend on the audio library
+
+2015-07-01 16:25:13 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+	* gst-libs/gst/rtp/gstrtpbaseaudiopayload.c:
+	  rtpbaseaudiopayload: Copy metadata in the (de)payloader, but only the relevant ones
+	  The payloader didn't copy anything so far, the depayloader copied every
+	  possible meta. Let's make it consistent and just copy all metas without
+	  tags or with only the audio tag.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=751774
+
+2015-08-10 22:03:48 +0200  Joan Pau Beltran <joanpau.beltran@socib.cat>
+
+	* gst/videorate/gstvideorate.c:
+	  videorate: add support for bayer formats
+	  Since the videorate element just duplicates or drops frames
+	  to achieve the desired framerate, it can accept video/x-bayer media
+	  (in any format), which are not present in the current caps.
+	  Just add "video/x-bayer(ANY);" to the caps of the static pad template
+	  (fixing line style to pass the indent commit hook).
+	  https://bugzilla.gnome.org/show_bug.cgi?id=753483
+
+2015-08-05 15:32:54 -0400  Nicolas Dufresne <nicolas.dufresne@collabora.com>
+
+	* gst-libs/gst/rtp/gstrtpbasedepayload.c:
+	  basedepayloader: Don't re-timestamp with running-time
+	  There was a confusion, six depayloaders where passing through the
+	  timestamp while the base class was re-timestamping to running
+	  time. This inconstancy has been unnoticed has in most use cases
+	  the incoming segment is [0, inifnity] in which case timestamps are
+	  the same as running time. With DTS/PTS shifting added (to avoid
+	  negative values) and pcapparse sending a different segment this
+	  started being an issue.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=753037
+
+2015-08-10 09:49:19 -0300  Thiago Santos <thiagoss@osg.samsung.com>
+
+	  videoencoder: remove empty line to make g-i-scanner happy
+	  gstvideoencoder.h:228: Warning: GstVideo: "@transform_meta"
+	  parameter unexpected at this location:
+	  * @transform_meta: Optional. Transform the metadata on ...
+
+2015-08-10 08:17:09 -0300  Thiago Santos <thiagoss@osg.samsung.com>
+
+	* gst-libs/gst/video/gstvideodecoder.c:
+	  videodecoder: documentation cleanup
+	  Remove some whitespace and break lines longer than 80 columns
+
+2015-08-10 00:21:42 -0300  Thiago Santos <thiagoss@osg.samsung.com>
+
+	* tests/check/libs/audiodecoder.c:
+	  tests: audiodecoder: add test to make sure gap is pushed before segment
+	  https://bugzilla.gnome.org/show_bug.cgi?id=753360
+
+2015-08-09 23:23:05 -0300  Thiago Santos <thiagoss@osg.samsung.com>
+
+	* gst-libs/gst/video/gstvideodecoder.c:
+	* tests/check/libs/videodecoder.c:
+	  videodecoder: push pending events before gap
+	  Push all pending events before pushing the gap. This ensures the
+	  segment is pushed before the gap so it can be properly translated
+	  to the running time
+	  Includes unit test.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=753360
+
+2015-07-30 16:39:03 -0400  Olivier Crête <olivier.crete@collabora.com>
+
+	* ext/ogg/gstoggdemux.c:
+	  oggdemux: Set chain pointers to NULL
+	  Otherwise, they will refer to freed memory
+	  https://bugzilla.gnome.org/show_bug.cgi?id=753078
+
+2015-07-31 13:31:56 +0900  Vineeth TM <vineeth.tm@samsung.com>
+
+	* gst/playback/gstdecodebin2.c:
+	  decodebin: fix deadend_details string leak
+	  deadend_details need not be returned when the pad is not a deadend.
+	  Hence checking if res value is TRUE and clearing the string instead of
+	  passing it on
+	  https://bugzilla.gnome.org/show_bug.cgi?id=753088
+
+2015-08-04 14:41:10 -0400  Nicolas Dufresne <nicolas.dufresne@collabora.com>
+
+	* gst/videotestsrc/gstvideotestsrc.c:
+	  videotestsrc: Don't set DTS on buffer
+	  DTS is for encoded data and have no meaning for raw. It better to not
+	  set it, as it's confusing.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=752791
+
+2015-07-30 18:43:19 -0400  Olivier Crête <olivier.crete@collabora.com>
+
+	* ext/ogg/gstoggdemux.c:
+	  oggdemux: Return FLUSHING if pad if flushing
+	  If the initial seek fails because the pad is
+	  flushing, then return GST_FLOW_FLUSHING instead
+	  of an error.
+
+2015-07-30 15:16:57 +0100  Brian Peters <brianfpeters@gmail.com>
+
+	* gst-libs/gst/rtp/gstrtpbuffer.c:
+	  rtpbuffer: avoid accessing NULL buffer even more
+	  Previous commit was incompletely applied.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=753001
+
+2015-07-30 14:30:44 +0100  Brian Peters <brianfpeters@gmail.com>
+
+	* gst-libs/gst/rtp/gstrtpbuffer.c:
+	  rtp: buffer: don't access NULL buffer pointer
+	  unmap will set rtpbuffer->buffer to NULL, so we need to
+	  save the pointer to access it while the RTP buffer is
+	  unmapped.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=753001
+
+2015-07-30 12:50:56 +0100  Tim-Philipp Müller <tim@centricular.com>
+
+	* gst-libs/gst/rtp/gstrtpbasedepayload.c:
+	  rtpbasedepayload: fix leaks in error code paths
+	  This was introduced when reshuffling the buffer unmaps
+	  in commit bc14cdf529e21356ea7b2c8f34614958a91f7260
+	  rtp: rtpbasedepayload: add process_rtp_packet() vfunc
+	  Fixes make check-valgrind.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=750235
+
+2015-07-28 13:57:20 +0300  Sebastian Dröge <sebastian@centricular.com>
+
+	* ext/pango/gstbasetextoverlay.c:
+	  textoverlay: Query downstream caps for checking if caps features are supported, not just accept-caps
+	  accept-caps is not recursive and might stop at the next downstream element,
+	  while caps queries are generally recursive. The next element might accept any
+	  capsfeatures we want, but that doesn't mean that further downstream it will
+	  also work.
+	  Additionally for the future:
+	  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.
+
+2015-07-23 15:28:42 -0400  Nicolas Dufresne <nicolas.dufresne@collabora.co.uk>
+
+	* ext/pango/gstbasetextoverlay.c:
+	* ext/pango/gstbasetextoverlay.h:
+	  basetextoverlay: Use the extents rectangle for positioning
+	  the extents rectangle is what you need to know to properly position
+	  a buffer that has been rendered in a surface of the ink rectangle
+	  size. This patch make the placement on par with the placement we had
+	  before without having to over allocate.
+	  This patch also enable placement for vertical rendering. Note that
+	  the halginement, valighment and line-alignment default are set to
+	  the previous default when this property is set. This is for backward
+	  compatibility, you can change the value after setting vertical render.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=728636
+
+2015-07-23 15:19:47 -0400  Nicolas Dufresne <nicolas.dufresne@collabora.co.uk>
+
+	* ext/pango/gstbasetextoverlay.c:
+	  basetextoverlay: Fix clipping issues
+	  This patch uses the ink rectangle in order to compute the size
+	  of the surface require to render. It also correctly compute the
+	  transformation matrix as the ink_rect position might not be at
+	  0, 0. Additionally, shadow_offset and outline_offset (which is
+	  in fact the diameter of a dot, not a really an offset) is now
+	  taken into account. Redundant matrix operation has been removed
+	  for the vertical rendering.
+	  Take note that the matrix operation in cairo are excuted in
+	  reverse order.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=728636
+
+2015-07-24 10:15:21 +0100  Tim-Philipp Müller <tim@centricular.com>
+
+	* tools/gst-play.c:
+	  tools: gst-play: seek at least in steps of a second
+	  In case of very short files we might end up seeking in
+	  steps of a fraction of a second, which is silly and gives
+	  the impression that seeking doesn't actually work. Make
+	  minimum seek step a second instead.
+
+2015-07-22 16:19:48 -0400  Nicolas Dufresne <nicolas.dufresne@collabora.com>
+
+	* ext/pango/gstbasetextoverlay.c:
+	  basetextoverlay: Improve further the negotiation function
+	  * Only send the caps event once if the query had support for the
+	  overlay composition meta.
+	  * Only do the allocation query if it is supported through caps.
+	  * Send overlay_caps before doing allocation query rather then normal
+	  caps
+	  https://bugzilla.gnome.org/show_bug.cgi?id=751157
+
+2015-07-22 20:50:10 +0200  Rico Tzschichholz <ricotz@ubuntu.com>
+
+	* ext/pango/Makefile.am:
+	  basetextoverlay: Add missing linking against -lm
+
+2015-07-21 18:40:59 -0400  Nicolas Dufresne <nicolas.dufresne@collabora.com>
+
+	* ext/pango/gstbasetextoverlay.c:
+	* ext/pango/gstbasetextoverlay.h:
+	  basetextoverlay: Ensure meta coordinate are in stream scale
+	  The GstVideoOverlayComposition meta coordinates should always be
+	  in stream scale, regardless of the window size downstream. This
+	  way the sink can always scale the composition if the window size
+	  have changed after a buffer (with his meta) was rendered before.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=751157
+
+2015-07-21 14:12:41 -0400  Nicolas Dufresne <nicolas.dufresne@collabora.com>
+
+	* ext/pango/gstbasetextoverlay.c:
+	* ext/pango/gstbasetextoverlay.h:
+	  basetextoverlay: Reorder and cleanup class attribute
+	  Also add a minimum amount of comment so we can understand what
+	  is doing what.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=751157
+
+2015-07-15 21:56:17 +0300  Ville Skyttä <ville.skytta@iki.fi>
+
+	* gst/typefind/gsttypefindfunctions.c:
+	  typefind: Treat *.umx (Unreal Music Package) as audio/x-mod
+	  https://bugzilla.gnome.org//show_bug.cgi?id=752436
+
+2015-07-20 16:25:10 -0400  Nicolas Dufresne <nicolas.dufresne@collabora.co.uk>
+
+	* ext/pango/gstbasetextoverlay.c:
+	  basetextoverlay: Fix upstream composition handling
+	  We need to update the render when upstream composition changes
+	  or if it was removed.
+	  http://bugzilla.gnome.org/show_bug.cgi?id=751157
+
+2015-07-20 16:20:24 -0400  Nicolas Dufresne <nicolas.dufresne@collabora.co.uk>
+
+	* ext/pango/gstbasetextoverlay.c:
+	  basetextoverlay: Clear reconfigure flags before negotation
+	  This avoids negotiating twice. Current the _setcaps() patch does
+	  not clear the initial reconfigure flags, which lead to systematic
+	  double renegotiation.
+	  http://bugzilla.gnome.org/show_bug.cgi?id=751157
+
+2015-07-20 15:55:07 -0400  Nicolas Dufresne <nicolas.dufresne@collabora.co.uk>
+
+	* ext/pango/gstbasetextoverlay.c:
+	  basetestoverlay: Always query window dimension
+	  Remove the optimization to skip allocation query so we can
+	  always have the latest window size information. Also, correctly
+	  deal with the case where there is no window size information.
+	  http://bugzilla.gnome.org/show_bug.cgi?id=751157
+
+2015-07-20 15:11:06 -0400  Nicolas Dufresne <nicolas.dufresne@collabora.co.uk>
+
+	* ext/pango/gstbasetextoverlay.c:
+	  basetextoverlay: Send caps before doing allocation query
+	  This is currently a limitation of BaseTransform base class. Which means
+	  pretty much every filters out there.
+	  http://bugzilla.gnome.org/show_bug.cgi?id=751157
+
+2015-06-18 06:31:00 +0200  Lubosz Sarnecki <lubosz.sarnecki@collabora.co.uk>
+
+	* ext/pango/gstbasetextoverlay.c:
+	  basetextoverlay: Log GstVideoOverlayComposition negotiation
+	  https://bugzilla.gnome.org/show_bug.cgi?id=751157
+
+2015-03-25 14:10:10 +0100  Lubosz Sarnecki <lubosz.sarnecki@collabora.co.uk>
+
+	* ext/pango/gstbasetextoverlay.c:
+	* ext/pango/gstbasetextoverlay.h:
+	  basetextoverlay: Receive window size event and adjust rendering
+	  * cache window size event and update handle ratio
+	  * init width with 1, don't use 0
+	  * don't update overlay when receiving same window size
+	  * receive window size from allocation query
+	  https://bugzilla.gnome.org/show_bug.cgi?id=751157
+
+2015-03-19 17:59:16 +0100  Lubosz Sarnecki <lubosz.sarnecki@collabora.co.uk>
+
+	* ext/pango/gstbasetextoverlay.c:
+	* ext/pango/gstbasetextoverlay.h:
+	  basetestoverlay: Pass down meta buffers from upstream that supports GstVideoOverlayComposition
+	  This makes pipelines with multiple textoverlay elements possible.
+	  The meta data is collected from the upstream textoverlay element,
+	  merged into a new GstVideoOverlayComposition and passed down downstream.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=751157
+
+2015-07-10 12:49:01 -0400  Nicolas Dufresne <nicolas.dufresne@collabora.co.uk>
+
+	* gst-libs/gst/rtp/gstrtpbasedepayload.c:
+	  depayloader: Use input segment start
+	  When there is no clock_base provided, the start position is
+	  set to 0 instead of the original segment start value. This
+	  would break synchronization if start was not 0.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=752228
+
+2015-07-16 21:26:30 +0100  Tim-Philipp Müller <tim@centricular.com>
+
+	* gst/typefind/gsttypefindfunctions.c:
+	  typefindfunctions: add DASH MPD typefinder
+	  Moved from dashdemux plugin in -bad.
+
+2015-07-16 10:07:45 +0900  Vineeth T M <vineeth.tm@samsung.com>
+
+	* tests/examples/seek/jsseek.c:
+	  jsseek: fix memory leaks
+	  ctx, list and visual_entries are not being freed
+	  resulting in memory leaks
+	  https://bugzilla.gnome.org/show_bug.cgi?id=752454
+
+2015-07-16 17:15:33 +0100  Tim-Philipp Müller <tim@centricular.com>
+
+	* ext/ogg/gstogmparse.c:
+	* ext/pango/gsttextrender.c:
+	* gst/subparse/gstsubparse.c:
+	* gst/videoconvert/gstvideoconvert.c:
+	  Update mailing list address from sourceforge to freedesktop
+
+2015-07-16 10:54:29 +0100  Tim-Philipp Müller <tim@centricular.com>
+
+	* tools/gst-device-monitor.c:
+	  tools: gst-device-monitor: fix props leak
+	  CID 1311942
+
+2015-07-15 18:22:28 +0200  Wim Taymans <wtaymans@redhat.com>
+
+	* tools/gst-device-monitor.c:
+	  device-monitor: print device properties
+
+2015-07-15 12:45:10 +0200  Wim Taymans <wtaymans@redhat.com>
+
+	* gst-libs/gst/video/gstvideometa.c:
+	* gst-libs/gst/video/gstvideopool.c:
+	* gst-libs/gst/video/video-chroma.c:
+	* gst-libs/gst/video/video-color.c:
+	* gst-libs/gst/video/video-converter.c:
+	* gst-libs/gst/video/video-info.c:
+	* gst-libs/gst/video/video-resampler.c:
+	* gst-libs/gst/video/video-scaler.c:
+	* gst-libs/gst/video/videooverlay.c:
+	* gst/videoscale/gstvideoscale.c:
+	* gst/videotestsrc/videotestsrc.c:
+	  video: improve logging
+	  Add logging categories for most video objects.
+	  Remove some useless debug lines in video-info and videotestsrc.
+	  Add a performance debug line in the video scaler.
+
+2015-07-15 12:46:07 +0900  Vineeth TM <vineeth.tm@samsung.com>
+
+	* tests/examples/seek/jsseek.c:
+	  jsseek: fix tag list leak
+	  tags are being leaked while updating the streams in jsseek
+	  https://bugzilla.gnome.org/show_bug.cgi?id=752400
+
+2015-07-15 10:50:46 +0900  Vineeth TM <vineeth.tm@samsung.com>
+
+	* tests/examples/playback/playback-test.c:
+	  playback-test: fix tag list leak
+	  tags are being leaked while updating the streams in playback-test
+	  https://bugzilla.gnome.org/show_bug.cgi?id=752397
+
+2015-07-14 17:17:34 -0400  Olivier Crête <olivier.crete@collabora.com>
+
+	* gst-libs/gst/rtsp/gstrtsptransport.h:
+	  rtsp: Include generated enum types in gstrtsptransport.h
+	  GST_TYPE_RTSP_LOWER_TRANS used to be defined in there, not
+	  including the generated file makes older gst-p-good fail to build,
+	  so it constitues an API break.
+
+2015-07-14 15:58:43 +0200  Wim Taymans <wtaymans@redhat.com>
+
+	* gst/tcp/gstsocketsrc.c:
+	* gst/tcp/gstsocketsrc.h:
+	  socketsrc: add caps property
+	  Add caps property that allows the src to easily negotiate a format.
+
+2015-07-14 13:00:03 +0900  Vineeth T M <vineeth.tm@samsung.com>
+
+	* tests/examples/playback/playback-test.c:
+	  playback-test: fix memory leak
+	  context during main and filter list during init
+	  visualization are not being freed resulting in memory leak
+	  and app->vis_entries
+	  https://bugzilla.gnome.org/show_bug.cgi?id=752359
+
+2015-07-14 00:03:10 -0300  Thiago Santos <thiagoss@osg.samsung.com>
+
+	* gst/playback/gstdecodebin2.c:
+	  decodebin: only try to expose complete groups
+	  When switching to a new chain it might be that this new chain
+	  is not yet ready to be exposed so check it before exposing.
+	  Can happen with mpegts that might delay adding pads or pushing data
+	  until it has found the PMT/PAT/PCR and that may take a while depending
+	  on the stream.
+	  It happened frequently with HLS:
+	  http://vevoplaylist-live.hls.adaptive.level3.net/vevo/ch1/appleman.m3u8
+
+2015-07-14 00:02:40 -0300  Thiago Santos <thiagoss@osg.samsung.com>
+
+	* gst/playback/gstdecodebin2.c:
+	  decodebin: fix typo
+	  Hided -> hid
+
+2015-05-27 18:55:20 +0100  Tim-Philipp Müller <tim@centricular.com>
+
+	* gst-libs/gst/rtp/gstrtpbasedepayload.c:
+	* gst-libs/gst/rtp/gstrtpbasedepayload.h:
+	  rtp: rtpbasedepayload: add process_rtp_packet() vfunc
+	  Add process_rtp_packet() vfunc that works just like the
+	  existing process() vfunc only that it takes the GstRTPBuffer
+	  that the base class has already mapped (with MAP_READ),
+	  which means that the subclass doesn't have to map it again,
+	  which allows more performant processing of input buffers
+	  for most RTP depayloaders.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=750235
+
+2015-07-10 11:53:24 +0300  Sebastian Dröge <sebastian@centricular.com>
+
+	* gst/playback/gstplaysink.c:
+	  playsink: Require the streamvolume interface on the sink when using the sink's volume/mute properties
+	  If the sink has properties named volume and mute, we have no idea about their
+	  meaning. The streamvolume interface standardizes the meaning.
+	  In the case of osxaudiosink for example, the current volume property has a
+	  range of 0.0 to 1.0, but we need 0.0 to 10.0 or similar. Also osxaudiosink
+	  has no mute property. As such, the volume element should be used here instead.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=752156
+
+2015-07-09 10:47:20 -0400  Nicolas Dufresne <nicolas.dufresne@collabora.co.uk>
+
+	* gst-libs/gst/video/video-frame.h:
+	  doc/build: Fix doc typos
+	  This minor update should workaround a build system bug. While the
+	  makefile has been updated to generate more enum type, there is nothing
+	  that updates the header and would lead to the generated code to be
+	  produced again. This minor doc fix should ensure no one get a build with
+	  missing symbols.
+
+2015-07-09 17:20:55 +0300  Sebastian Dröge <sebastian@centricular.com>
+
+	* win32/common/libgstvideo.def:
+	  Revert "win32 def: Remove video flags symbol that don't exist"
+	  This reverts commit b20cc6a02a007521eabceeceb60356e5a252f38a.
+	  They are actually there in the autogenerated enum header/source file.
+
+2015-07-09 10:15:11 -0400  Nicolas Dufresne <nicolas.dufresne@collabora.co.uk>
+
+	* win32/common/libgstvideo.def:
+	  win32 def: Remove video flags symbol that don't exist
+	  There has been a some refactoring and these symbols don't exist anynmore.
+	  So remove it from the win32 def. This should fix distcheck.
+
+2015-07-07 19:56:52 +0100  Tim-Philipp Müller <tim@centricular.com>
+
+	* gst-libs/gst/rtp/gstrtpbasedepayload.c:
+	  rtpbasedepayload: fix typo in comment
+
+2015-07-07 15:05:59 +0100  Tim-Philipp Müller <tim@centricular.com>
+
+	* gst-libs/gst/rtp/gstrtpbasedepayload.c:
+	  rtpbasepayload: fix possible segment event leak
+	  Need to clear it when shutting down, not when starting up.
+	  Fixes leak in rtp-payloading unit test.
+
+2015-07-07 22:23:57 +0900  Hyunjun Ko <zzoonis@gmail.com>
+
+	* gst-libs/gst/audio/gstaudiometa.c:
+	* gst-libs/gst/video/gstvideometa.c:
+	* gst-libs/gst/video/video-overlay-composition.c:
+	  video/audio meta: transform_func: return FALSE if not supported or failed
+	  https://bugzilla.gnome.org/show_bug.cgi?id=751778
+
+2015-07-07 19:55:44 +0900  Vineeth T M <vineeth.tm@samsung.com>
+
+	* sys/xvimage/xvimagesink.c:
+	  xvimagesink: refactor to use gst_pad_push_event
+	  Right now navigation events are being sent via gst_pad_send_event
+	  after getting the peer pad of the sinkpad.
+	  But the same functionality can be done using gst_pad_push_event
+	  without need of getting peer pad in xvimagesink.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=752059
+
+2015-07-07 14:32:25 +0300  Sebastian Dröge <sebastian@centricular.com>
+
+	* gst-libs/gst/video/Makefile.am:
+	* win32/common/libgstvideo.def:
+	  video: Add some more GTypes for enums
+
+2015-07-02 07:36:12 +0200  Tobias Mueller <muelli@cryptobitch.de>
+
+	* gst-libs/gst/video/video-scaler.c:
+	  GstVideoScaler: Initialised scaling functions to get rid of compiler messages
+	  E.g.
+	  video-scaler.c: In function 'gst_video_scaler_horizontal':
+	  video-scaler.c:1332:3: error: 'func' may be used uninitialized in this function [-Werror=maybe-uninitialized]
+	  func (scale, src, dest, dest_offset, width, n_elems);
+	  ^
+	  video-scaler.c: In function 'gst_video_scaler_vertical':
+	  video-scaler.c:1373:3: error: 'func' may be used uninitialized in this function [-Werror=maybe-uninitialized]
+	  func (scale, src_lines, dest, dest_offset, width, n_elems);
+	  ^
+	  GCC's analyses seem to be correct, for the simple fact that if you pass
+	  get_functions a known format, but no hscale or vscale, it'll return
+	  True without having done anything.
+	  Some callers check for the scale values to be not NULL, but then
+	  hscale->resampler.max_taps could return 0.
+	  A different approach to the one presented in this patch is to check
+	  for those max_taps, too, before calling get_functions.
+	  Fixes https://bugzilla.gnome.org/show_bug.cgi?id=752051
+
+2015-07-07 19:45:43 +0900  Vineeth T M <vineeth.tm@samsung.com>
+
+	* sys/ximage/ximagesink.c:
+	  ximagesink: Post navigation events as message on the bus
+	  post unhandled events to bus, so that
+	  application can utilise the same if needed
+	  https://bugzilla.gnome.org/show_bug.cgi?id=752043
+
+2015-07-07 19:35:40 +0900  Vineeth T M <vineeth.tm@samsung.com>
+
+	* sys/ximage/ximagesink.c:
+	  ximagesink: fix navigation event leak
+	  Create event only when pad is created
+	  and send the event to pad.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=752041
+
+2015-07-07 09:31:01 +0900  Vineeth TM <vineeth.tm@samsung.com>
+
+	* sys/xvimage/xvimagesink.c:
+	  xvimagesink: fix pad memory leak
+	  pad is not being freed when xwindow is not created
+	  https://bugzilla.gnome.org/show_bug.cgi?id=752042
+
+2015-07-07 08:53:09 +0900  Vineeth TM <vineeth.tm@samsung.com>
+
+	* tools/gst-play.c:
+	  gst-play: fix memory leak
+	  In gst-play, for GST_MESSAGE_ELEMENT bus message,
+	  event is being allocated through
+	  gst_navigation_message_parse_event, but not freed.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=752040
+
+2015-07-03 21:48:52 +0200  Stefan Sauer <ensonic@users.sf.net>
+
+	* docs/plugins/gst-plugins-base-plugins-sections.txt:
+	* sys/ximage/ximage.c:
+	* sys/ximage/ximagepool.c:
+	* sys/ximage/ximagepool.h:
+	* sys/ximage/ximagesink.c:
+	* sys/ximage/ximagesink.h:
+	* sys/xvimage/xvcontext.c:
+	* sys/xvimage/xvimage.c:
+	* sys/xvimage/xvimagepool.c:
+	* sys/xvimage/xvimagesink.c:
+	* sys/xvimage/xvimagesink.h:
+	  x/xv_image_sink: rename for consitency
+	  Insert '_' to match the CamelCase. This is needed so that the plugin docs can
+	  guess the names from the type name.
+
+2015-07-03 21:35:32 +0200  Stefan Sauer <ensonic@users.sf.net>
+
+	* docs/plugins/gst-plugins-base-plugins-docs.sgml:
+	  docs: update master doc for plugins
+
+2015-07-06 10:05:53 -0300  Thiago Santos <thiagoss@osg.samsung.com>
+
+	* gst/typefind/gsttypefindfunctions.c:
+	  typefind: also check moof to recognize video/quicktime
+	  Helps recognizing fragmented files with the right type
+
+2015-07-06 15:36:07 +0300  Sebastian Dröge <sebastian@centricular.com>
+
+	* docs/libs/gst-plugins-base-libs-sections.txt:
+	* win32/common/libgstvideo.def:
+	  docs: Add new symbols to the docs and .def files
+
+2015-07-06 12:53:15 +0300  Sebastian Dröge <sebastian@centricular.com>
+
+	* gst-libs/gst/audio/audio-info.h:
+	* gst-libs/gst/video/video-info.h:
+	  {audio,video}info: Add GST_TYPE_{AUDIO,VIDEO}_INFO macros
+
+2015-07-06 11:36:58 +0200  Marcin Kolny <marcin.kolny@flytronic.pl>
+
+	* gst-libs/gst/video/video-info.c:
+	* gst-libs/gst/video/video-info.h:
+	  video-info: implement GstVideoInfo as boxed type
+	  GstVideoInfo usually is created on the stack, but boxed type can be useful
+	  for bindings.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=752011
+
+2015-07-02 20:50:00 +0200  Stian Selnes <stian@pexip.com>
+
+	* gst-libs/gst/rtp/gstrtcpbuffer.c:
+	* tests/check/libs/rtp.c:
+	  rtcpbuffer: Fix validation of packets with padding
+	  The padding (if any) is included in the length of the last packet, see
+	  RFC 3550.
+	  Section 6.4.1:
+	  padding (P): 1 bit
+	  If the padding bit is set, this individual RTCP packet contains
+	  some additional padding octets at the end which are not part of
+	  the control information but are included in the length field. The
+	  last octet of the padding is a count of how many padding octets
+	  should be ignored, including itself (it will be a multiple of
+	  four).
+	  Section A.2:
+	  *  The padding bit (P) should be zero for the first packet of a
+	  compound RTCP packet because padding should only be applied, if it
+	  is needed, to the last packet.
+	  *  The length fields of the individual RTCP packets must add up to
+	  the overall length of the compound RTCP packet as received.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=751883
+
+2015-07-01 17:09:35 +0200  Stian Selnes <stian@pexip.com>
+
+	* gst-libs/gst/video/gstvideodecoder.c:
+	  videodecoder: Fix setting default pixel-aspect-ratio
+	  It's needed to check if pixel-aspect-ratio exists before fixating.
+	  It does not exist if input caps is not set yet and allowed caps
+	  does not contain pixel-aspect-ratio (e.g. when using GST_VIDEO_CAPS_MAKE)
+	  https://bugzilla.gnome.org/show_bug.cgi?id=751932
+
+2015-07-03 21:58:04 +0200  Stefan Sauer <ensonic@users.sf.net>
+
+	* common:
+	  Automatic update of common submodule
+	  From f74b2df to 9aed1d7
+
+2015-07-03 21:16:27 +0200  Stefan Sauer <ensonic@users.sf.net>
+
+	* docs/plugins/gst-plugins-base-plugins-sections.txt:
+	* ext/cdparanoia/gstcdparanoiasrc.h:
+	* gst/adder/gstadder.h:
+	* gst/tcp/gstmultisocketsink.h:
+	  docs: order and canonicalize the -sections.txt file
+	  Have all sections in alphabetical order. Also make the macro order consistent.
+	  This is a preparation for generating the file. Remove GET_CLASS macro for
+	  some elements, since it is not used and the header is not installed.
+
+2015-07-03 21:09:29 +0200  Stefan Sauer <ensonic@users.sf.net>
+
+	* ext/cdparanoia/gstcdparanoiasrc.h:
+	  cdparanoiasrc: remove unused defines
+
+2015-07-03 21:08:03 +0200  Stefan Sauer <ensonic@users.sf.net>
+
+	* gst/videoscale/gstvideoscale.c:
+	* gst/videoscale/gstvideoscale.h:
+	  videoscale: fix debug categories
+	  Use a local category for the default category and fix the import for the
+	  performance category.
+
+2015-07-02 10:47:45 -0400  Nicolas Dufresne <nicolas.dufresne@collabora.com>
+
+	* ext/pango/gstbasetextoverlay.c:
+	  basetextoverlay: Fix bug with unused upstream_has_meta
+	  The intention was to skip the allocation query if upstream has decided
+	  to use the overlay meta feature in the caps. We can safely assume that
+	  upstream have done that query already before making this decision. This
+	  is an optimization since doing allocation queries is relatively
+	  expensive.
+	  CID #1308943
+
+2015-07-02 10:27:39 -0400  Nicolas Dufresne <nicolas.dufresne@collabora.com>
+
+	* ext/pango/gstbasetextoverlay.c:
+	  Revert "basetextoverlay: remove dead code"
+	  This reverts commit e863e5f8a98ceec0ec0bd24274bbae8795e0ab75.
+
+2015-07-02 14:52:47 +0100  Luis de Bethencourt <luis.bg@samsung.com>
+
+	* ext/pango/gstbasetextoverlay.c:
+	  basetextoverlay: remove dead code
+	  upstream_has_meta is set to FALSE and never changed. The two checks for if
+	  upstream_has_meta will never go to the true branch. Removing the boolean
+	  and the true branches of these checks.
+	  CID #1308943
+
+2015-07-02 13:15:58 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+	* gst-libs/gst/audio/gstaudioencoder.c:
+	  audioencoder: Don't try to get buffers from an empty adapter
+
+2015-07-01 10:58:07 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+	* gst-libs/gst/audio/gstaudiodecoder.c:
+	* gst-libs/gst/audio/gstaudioencoder.c:
+	* gst-libs/gst/video/gstvideodecoder.c:
+	* gst-libs/gst/video/gstvideoencoder.c:
+	  {audio,video}{en,de}oder: Also copy POOL metas and make sure to copy over metas when creating subbuffers
+	  POOL meta just means that this specific instance of the meta is related to a
+	  pool, a copy should be made when reasonable and the flag should just not be
+	  set in the copy.
+
+2015-06-29 18:00:17 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+	* gst-libs/gst/audio/gstaudiodecoder.c:
+	* gst-libs/gst/audio/gstaudiodecoder.h:
+	  audiodecoder: Add transform_meta() vfunc with default implementation
+	  The default implementation copies all metadata without tags, and metadata
+	  with only the audio tag. Same behaviour as in GstAudioFilter.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=742385
+
+2015-06-29 17:38:38 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+	* gst-libs/gst/audio/gstaudioencoder.c:
+	* gst-libs/gst/audio/gstaudioencoder.h:
+	  audioencoder: Add transform_meta() vfunc with default implementation
+	  The default implementation copies all metadata without tags, and metadata
+	  with only the audio tag. Same behaviour as in GstAudioFilter.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=742385
+
+2015-06-29 15:58:38 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+	* gst-libs/gst/video/gstvideodecoder.c:
+	* gst-libs/gst/video/gstvideodecoder.h:
+	  videodecoder: Add transform_meta() vfunc with default implementation
+	  The default implementation copies all metadata without tags, and metadata
+	  with only the video tag. Same behaviour as in GstVideoFilter.
+	  This currently does not work if the ::parse() vfunc is implemented as all
+	  metas are getting lost inside GstAdapter.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=742385
+
+2015-06-29 13:59:25 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+	* gst-libs/gst/video/gstvideoencoder.c:
+	* gst-libs/gst/video/gstvideoencoder.h:
+	  videoencoder: Add transform_meta() vfunc with default implementation
+	  The default implementation copies all metadata without tags, and metadata
+	  with only the video tag. Same behaviour as in GstVideoFilter.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=742385
+
+2015-06-30 10:37:27 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+	* gst-libs/gst/rtp/gstrtpbaseaudiopayload.c:
+	  rtpbaseaudiopayload: Don't copy memory if not needed, just append payload to the RTP buffer
+
+2015-06-30 07:26:00 +0900  danny song <danny.song.ga@gmail.com>
+
+	* gst/playback/gstplaybin2.c:
+	  playbin: remove unnecessary break
+	  https://bugzilla.gnome.org/show_bug.cgi?id=751690
+
+2015-06-29 16:16:06 +0100  Luis de Bethencourt <luis@debethencourt.com>
+
+	* gst-libs/gst/video/video-scaler.c:
+	  videoscaler: remove check for below zero for unsigned value
+	  CLAMP checks both if value is '< 0' and '> max'. Value will never be a negative
+	  number since it is a division of an unsigned integer (i). Removing that check
+	  and only checking if it is bigger than max and setting it appropriately.
+	  CID #1308950
+
+2015-06-29 13:06:59 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+	* gst/audioresample/gstaudioresample.c:
+	  audioresample: Also copy metas if their API has no tags attached to it
+	  This is the default basetransform behaviour, being more strict than that
+	  is not really useful.
+
+2015-06-29 13:06:49 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+	* gst/audioconvert/gstaudioconvert.c:
+	  audioconvert: Also copy metas if their API has no tags attached to it
+	  This is the default basetransform behaviour, being more strict than that
+	  is not really useful.
+
+2015-06-29 13:06:33 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+	* gst-libs/gst/audio/gstaudiofilter.c:
+	  audiofilter: Also copy metas if their API has no tags attached to it
+	  This is the default basetransform behaviour, being more strict than that
+	  is not really useful.
+
+2015-06-29 13:05:54 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+	* gst-libs/gst/video/gstvideofilter.c:
+	  videofilter: Also copy metas if their API has no tags attached to it
+	  This is the default basetransform behaviour, being more strict than that
+	  is not really useful.
+
+2015-06-25 00:04:11 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+	* configure.ac:
+	  Back to development
+
+=== release 1.5.2 ===
+
+2015-06-24 23:24:01 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+	* ChangeLog:
+	* NEWS:
+	* RELEASE:
+	* configure.ac:
+	* docs/plugins/gst-plugins-base-plugins.args:
+	* docs/plugins/inspect/plugin-adder.xml:
+	* docs/plugins/inspect/plugin-alsa.xml:
+	* docs/plugins/inspect/plugin-app.xml:
+	* docs/plugins/inspect/plugin-audioconvert.xml:
+	* docs/plugins/inspect/plugin-audiorate.xml:
+	* docs/plugins/inspect/plugin-audioresample.xml:
+	* docs/plugins/inspect/plugin-audiotestsrc.xml:
+	* docs/plugins/inspect/plugin-cdparanoia.xml:
+	* docs/plugins/inspect/plugin-encoding.xml:
+	* docs/plugins/inspect/plugin-gio.xml:
+	* docs/plugins/inspect/plugin-libvisual.xml:
+	* docs/plugins/inspect/plugin-ogg.xml:
+	* docs/plugins/inspect/plugin-pango.xml:
+	* docs/plugins/inspect/plugin-playback.xml:
+	* docs/plugins/inspect/plugin-subparse.xml:
+	* docs/plugins/inspect/plugin-tcp.xml:
+	* docs/plugins/inspect/plugin-theora.xml:
+	* docs/plugins/inspect/plugin-typefindfunctions.xml:
+	* docs/plugins/inspect/plugin-videoconvert.xml:
+	* docs/plugins/inspect/plugin-videorate.xml:
+	* docs/plugins/inspect/plugin-videoscale.xml:
+	* docs/plugins/inspect/plugin-videotestsrc.xml:
+	* docs/plugins/inspect/plugin-volume.xml:
+	* docs/plugins/inspect/plugin-vorbis.xml:
+	* docs/plugins/inspect/plugin-ximagesink.xml:
+	* docs/plugins/inspect/plugin-xvimagesink.xml:
+	* gst-plugins-base.doap:
+	* win32/common/_stdint.h:
+	* win32/common/config.h:
+	* win32/common/video-enumtypes.c:
+	* win32/common/video-enumtypes.h:
+	  Release 1.5.2
+
+2015-06-24 22:49:29 +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/lt.po:
+	* po/lv.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:
+	  Update .po files
+
+2015-06-24 11:14:21 +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/lt.po:
+	* po/lv.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
+
+2015-06-17 18:03:09 +0800  Song Bing <b06498@freescale.com>
+
+	* gst/playback/gststreamsynchronizer.c:
+	  streamsynchronizer: Unblock EOS wait when track switching.
+	  sink_event () will blocked on EOS event. which will cause can't
+	  send event when switch EOS track to non-EOS one.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=750761
+
+2015-06-22 20:54:18 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+	* gst/playback/gststreamsynchronizer.c:
+	  streamsynchronizer: Don't wait for sparse streams when doing stream switches
+	  Their stream-start event might come a bit later, like just before the first
+	  buffer... and queues might run full before that happens.
+
+2015-06-22 20:29:52 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+	* gst/playback/gststreamsynchronizer.c:
+	  streamsynchronizer: Add some more debug output
+
+2015-06-22 20:17:56 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+	* gst/playback/gststreamsynchronizer.c:
+	  streamsynchronizer: Reset group start time when flushing
+	  We reset the group start time to the running time of the start of the other
+	  streams that are not flushed. This fixes seeking in gapless mode after the
+	  first track has played.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=750013
+
+2015-06-22 19:51:32 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+	* gst-libs/gst/rtsp/gstrtspconnection.c:
+	  rtspconnection: Only drop everything after the ; of a session header in requests
+	  For responses it is actually allowed and used to signal the timeout to the
+	  client!
+	  https://bugzilla.gnome.org/show_bug.cgi?id=736267
+
+2015-06-18 17:38:09 +0800  Lyon Wang <lyon.wang@freescale.com>
+
+	* gst-libs/gst/audio/gstaudioringbuffer.c:
+	  audioringbuffer: Fix alaw/mulaw channel positions
+	  For alaw/mulaw we should also try to initialize the channel positions in the
+	  ringbuffer's audio info. This allow pulsesink to directly use the channel
+	  positions instead of using the default zero-initialized ones, which doesn't
+	  work well.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=751144
+
+2015-06-22 16:53:06 +0200  Wim Taymans <wtaymans@redhat.com>
+
+	* tests/check/libs/libsabi.c:
+	  tests: fix cpp directives
+
+2015-06-22 15:59:42 +0200  Wim Taymans <wtaymans@redhat.com>
+
+	* tests/check/Makefile.am:
+	* tests/check/libs/libsabi.c:
+	* tests/check/libs/struct_ppc64.h:
+	  tests: add PPC64 abi struct sizes
+
+2015-06-22 14:51:07 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+	* gst/playback/gstplaybin2.c:
+	  playbin: Reset suburi also when receiving an error message from the sub uridecodebin
+	  http://bugzilla.gnome.org/show_bug.cgi?id=751118
+
+2015-06-17 10:20:54 -0500  Brijesh Singh <brijesh.ksingh@gmail.com>
+
+	* gst/playback/gstplaybin2.c:
+	  playbin: free group->suburi on failure
+	  If suburidecodebin is failed to negotiate (e.g file does not exist)
+	  then free internal suburi variable so that 'current-suburi' property
+	  returns correct status.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=751118
+
+2015-06-15 16:08:10 +0200  Guillaume Desmottes <guillaume.desmottes@collabora.co.uk>
+
+	* ext/ogg/gstoggdemux.c:
+	  oggdemux: set building_chain to NULL when deactivating chain
+	  The chain is about to be invalidated so we shouldn't keep it around.
+	  Prevent a double free crash when the demuxer is being finalized.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=751000
+
+2015-06-19 19:51:25 +0900  Vineeth T M <vineeth.tm@samsung.com>
+
+	* tools/gst-play.c:
+	  tools: gst-play: fix seeking issue
+	  For positive seeking segment.stop value will be -1,
+	  when we change rate to -1, then the stop value will be udpated
+	  with the current position. And then again if we change rate to 1,
+	  the segment.stop value does not get updated and remains as position
+	  where we last changed rate to -1. Hence playback stops at that point.
+	  In case of positive rates, call gst_element_new_seek with correct values
+	  https://bugzilla.gnome.org/show_bug.cgi?id=751213
+
+2015-06-18 21:02:48 -0400  Nicolas Dufresne <nicolas.dufresne@collabora.co.uk>
+
+	* gst-libs/gst/rtp/gstrtphdrext.c:
+	  doc: Fix gsttrtphdrext section name
+
+2015-06-18 18:23:45 -0400  Nicolas Dufresne <nicolas.dufresne@collabora.com>
+
+	* win32/common/libgstvideo.def:
+	  video: Add missing new symbol to win32 def file
+	  Fixes make distcheck
+
+2015-06-19 02:19:12 +1000  Jan Schmidt <jan@centricular.com>
+
+	* docs/libs/gst-plugins-base-libs-sections.txt:
+	  Add gst_video_multiview_guess_half_aspect() to the docs
+
+2015-06-15 16:04:55 +1000  Jan Schmidt <jan@centricular.com>
+
+	* gst-libs/gst/video/video-multiview.c:
+	* gst-libs/gst/video/video-multiview.h:
+	  multiview: Add gst_video_multiview_guess_half_aspect()
+	  Add a utility function that, given a video size and a
+	  packed stereoscopic mode, attempts to guess if the video
+	  is packed at half resolution per view or not, since
+	  very few videos provide the information.
+
+2015-06-17 17:09:46 +0200  Wim Taymans <wtaymans@redhat.com>
+
+	* gst-libs/gst/video/video-converter.c:
+	  video-converter: make sure we draw enough border for YUY2 formats
+	  Round width up to 2 so that we draw all border pixels for YUY2 formats
+
+2015-06-17 16:43:03 +0200  Wim Taymans <wtaymans@redhat.com>
+
+	* gst-libs/gst/video/video-scaler.c:
+	  video-scaler: fix scaling of odd width for YUY2 formats
+	  We need to scale groups of 4 bytes for YUY2 formats so round up to 4.
+	  It's possible that there is no Y byte for the last pixel so make sure
+	  we clamp correctly.
+
+2015-06-17 10:02:08 +0200  Thibault Saunier <tsaunier@gnome.org>
+
+	* gst-libs/gst/pbutils/gstdiscoverer-types.c:
+	  discoverer: Fix a wrong naming in the documentation
+	  gst_discoverer_stream_get_missing_elements_installer_details does not
+	  exist, one should use gst_discoverer_info_get_missing_elements_installer_details
+
+2015-06-16 18:04:57 -0400  Nicolas Dufresne <nicolas.dufresne@collabora.co.uk>
+
+	* gst-libs/gst/app/Makefile.am:
+	* gst-libs/gst/audio/Makefile.am:
+	* gst-libs/gst/pbutils/Makefile.am:
+	* gst-libs/gst/riff/Makefile.am:
+	* gst-libs/gst/rtp/Makefile.am:
+	* gst-libs/gst/rtsp/Makefile.am:
+	* gst-libs/gst/tag/Makefile.am:
+	* gst-libs/gst/video/Makefile.am:
+	  gi: Use INTROSPECTION_INIT for --add-init-section
+	  This new define was added to common. The new init section fixed
+	  compilation warning found in the init line that was spread across
+	  all files.
+
+2015-06-16 17:47:24 -0400  Nicolas Dufresne <nicolas.dufresne@collabora.co.uk>
+
+	* common:
+	  Automatic update of common submodule
+	  From 6015d26 to f74b2df
+
+2015-06-16 22:32:49 +0100  Tim-Philipp Müller <tim@centricular.com>
+
+	* tools/gst-play.c:
+	  tools: gst-play: error out instead of crashing if there's no playbin element
+
+2015-06-16 16:08:39 -0400  Nicolas Dufresne <nicolas.dufresne@collabora.com>
+
+	* gst-libs/gst/video/video-chroma.c:
+	* gst-libs/gst/video/video-converter.c:
+	* gst-libs/gst/video/video-dither.c:
+	* gst-libs/gst/video/video-scaler.c:
+	  gi: Skip Scaler, Chroma, Conveter, Dither constructor
+	  Please box these types before removing the skip mark.
+
+2015-06-16 16:07:27 -0400  Nicolas Dufresne <nicolas.dufresne@collabora.com>
+
+	* gst-libs/gst/video/gstvideometa.c:
+	* gst-libs/gst/video/video-overlay-composition.c:
+	  gi: Add (transfer none) for various video meta
+	  These method chains gst_buffer_add_meta() which is also transfer
+	  none.
+
+2015-06-16 15:50:13 -0400  Nicolas Dufresne <nicolas.dufresne@collabora.com>
+
+	* gst-libs/gst/rtsp/gstrtspconnection.c:
+	  gi: Fix warnings in GstRtsp
+	  * The custom GSource is not boxed (skip for now)
+	  * The comment block has wrong name for _read_socket()
+
+2015-06-16 15:16:33 -0400  Nicolas Dufresne <nicolas.dufresne@collabora.com>
+
+	* gst-libs/gst/riff/Makefile.am:
+	  gi: Don't produce gir and typlib for GstRiff
+	  The API does not follow the type naming convention. Re-enable
+	  only if one take the time to box and rename (see (rename-to SYMBOL)
+	  annotation) all types.
+
+2015-06-16 14:36:44 -0400  Nicolas Dufresne <nicolas.dufresne@collabora.com>
+
+	* gst-libs/gst/fft/gstfftf32.c:
+	* gst-libs/gst/fft/gstfftf64.c:
+	* gst-libs/gst/fft/gstffts16.c:
+	* gst-libs/gst/fft/gstffts32.c:
+	  gi: Skip fft constructor for now
+	  These types have never been boxed, hence cannot be used
+	  safely in interpreted languages. This fixes warnings.
+
+2015-06-16 14:34:04 -0400  Nicolas Dufresne <nicolas.dufresne@collabora.com>
+
+	* gst-libs/gst/audio/audio-info.c:
+	* gst-libs/gst/audio/gstaudiobasesink.h:
+	* gst-libs/gst/audio/gstaudiometa.c:
+	  gi: Fix warnings in libgstaudio
+	  * Duplicate section
+	  * Miss-named parameter
+	  * Missing transfer none annotation for meta
+
+2015-05-27 12:20:19 +0300  Lazar Claudiu <lazar.claudiu.florin@gmail.com>
+
+	* ext/pango/gstbasetextoverlay.c:
+	* ext/pango/gstbasetextoverlay.h:
+	  basetextoverlay: add "draw-shadow" and "draw-outline" properties
+	  https://bugzilla.gnome.org/show_bug.cgi?id=749823
+
+2015-06-13 13:41:35 +0100  Tim-Philipp Müller <tim@centricular.com>
+
+	* gst-libs/gst/video/gstvideoencoder.c:
+	  videoencoder: fix gtk-doc chunk for new function
+
+2015-05-12 14:12:52 -0400  Nicolas Dufresne <nicolas.dufresne@collabora.co.uk>
+
+	* ext/pango/gstbasetextoverlay.c:
+	  basetextoverlay: Rewrite negotiation method
+	  This cleanup the negotiation function by properly splitting the probe
+	  and the decisions. This allow handling correctly pipeline where upstream
+	  caps have special memory type. An example pipeline is:
+	  gltestsrc ! textoverlay text=bla ! fakesink
+	  The upstream caps will be memory:GLMemory, which isn't supported by the
+	  blitter.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=749243
+
+2015-06-05 14:30:12 -0400  Nicolas Dufresne <nicolas.dufresne@collabora.co.uk>
+
+	* sys/xvimage/xvimagesink.c:
+	  xvimagesink: Don't share internal pool
+	  Sharing the internal pool results in situation where the pool may have
+	  two upstream owners. This creates a race upon deactivation. Instead,
+	  always offer a new pool, and keep the internal pool internal in case
+	  we absolutely need it.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=748344
+
+2015-06-05 14:28:41 -0400  Nicolas Dufresne <nicolas.dufresne@collabora.co.uk>
+
+	* sys/ximage/ximagesink.c:
+	  ximagesink: Don't share internal pool
+	  Sharing the internal pool results in situation where the pool may have
+	  two upstream owners. This create a race upon deactivation. Instead,
+	  always offer a new pool, and keep the internal pool internal in case
+	  we absolutely need it.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=748344
+
+2014-11-26 21:06:57 +0100  Matej Knopp <matej.knopp@gmail.com>
+
+	* gst-libs/gst/video/gstvideoencoder.c:
+	* gst-libs/gst/video/gstvideoencoder.h:
+	* win32/common/libgstvideo.def:
+	  videoencoder: Add gst_video_encoder_set_min_pts()
+	  For streams with reordered frames this can be used to ensure that there
+	  is enough time to accomodate first DTS, which may be less than first PTS
+	  https://bugzilla.gnome.org/show_bug.cgi?id=740575
+
+2015-06-12 19:58:34 +0100  Tim-Philipp Müller <tim@centricular.com>
+
+	* win32/common/libgstvideo.def:
+	  Update .def file for new API
+
+2015-06-13 01:35:52 +1000  Jan Schmidt <jan@centricular.com>
+
+	* gst-libs/gst/video/gstvideodecoder.c:
+	  videodecoder: Copy multiview-mode, flags and view count from ref info
+	  When copying info from the reference input state, duplicate
+	  all the fields of the video info. The sub-class will have the
+	  chance to override them later.
+
+2015-06-12 16:57:39 +0200  Wim Taymans <wtaymans@redhat.com>
+
+	* gst-libs/gst/video/video-scaler.c:
+	  video-scaler: enforce same taps when combining scalers
+
+2015-06-12 16:52:27 +0200  Wim Taymans <wtaymans@redhat.com>
+
+	* gst-libs/gst/video/video-scaler.c:
+	  video-scaler: make sure to clamp to max width
+	  When estimating the area that should first be vertically scaled, make
+	  sure we clamp to the max input size or else we get invalid reads.
+
+2015-06-12 16:47:03 +0200  Wim Taymans <wtaymans@redhat.com>
+
+	* gst-libs/gst/video/video-converter.c:
+	* gst-libs/gst/video/video-scaler.c:
+	* gst-libs/gst/video/video-scaler.h:
+	  video-scaler: Enforce same taps on Y and UV scalers for merged formats
+	  Make sure we have the same number of taps for the Y and UV scalers so
+	  that the scalers can be merged correctly.
+	  Fixes https://bugzilla.gnome.org/show_bug.cgi?id=749764
+
+2015-06-12 12:50:35 +0530  Arun Raghavan <git@arunraghavan.net>
+
+	* gst-libs/gst/rtsp/gstrtspconnection.c:
+	  rtsp: Add a FIXME 2.0 for gst_rtsp_connection_create_from_socket()
+	  There's a couple of redundant arguments from the pre-GIO days.
+
+2015-06-11 23:32:55 +0100  Tim-Philipp Müller <tim@centricular.com>
+
+	* gst/typefind/gsttypefindfunctions.c:
+	  typefinding: check for full UTF-8 BOM in MSS typefinder
+	  https://bugzilla.gnome.org/show_bug.cgi?id=750802
+
+2015-06-11 18:14:47 +0200  Philippe Normand <philn@igalia.com>
+
+	* gst/typefind/gsttypefindfunctions.c:
+	  typefindfunctions: UTF-8 MSS Manifest detection support
+	  Check if the first bytes of data contain an UTF-8 BOM.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=750802
+
+2015-06-11 16:18:51 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+	* gst/playback/gstplaybin2.c:
+	  playbin: Check in autoplug_continue against the subtitle factory caps correctly
+	  6a2f017bfa9cb73c6db65eea0b84b1d5b56febb7 changed it to check the subtitle
+	  factory caps if there is a text-sink but we fail to get its sinkpad. What
+	  actually should be done here is to use the factory caps if there is no
+	  text-sink at all.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=750785
+
+2015-06-11 23:01:48 +1000  Jan Schmidt <jan@centricular.com>
+
+	* gst/playback/gstplaybin2.c:
+	  playbin: Fix some warnings with clang around multiview enums
+	  There is the GstVideoMultiviewMode enum and the
+	  GstVideoMultiviewFramePacking, which is a subset of the
+	  multiview modes, with the same values as the corresponding
+	  types from the full enum. Do some casts and use the right
+	  times to avoid implicitly using/passing GstVideoMultiviewFramePacking
+	  when a GstVideoMultiviewMode is needed.
+
+2015-06-11 12:21:08 +1000  Jan Schmidt <jan@centricular.com>
+
 	* tests/check/libs/video.c:
-	  Revert "video: Fix non-default usage of gst_video_sink_center_rect"
-	  This reverts commit 899461d722e45f591eeddf33c405677170d63de4.
-	  There seems to be a lot of code out there that does not properly initialize
-	  the rectangles and then causes undefined behaviour. Including our video sinks.
-	  Let's keep this out of 1.4, fix everything everywhere and keep it in 1.6
+	  tests: Fix video libs test for multiview GstVideoInfo change
+	  The GstVideoInfo struct was changed late in integrating the
+	  multiview changes, and I forgot to run and fix the unit test.
+
+2015-06-11 11:12:39 +1000  Jan Schmidt <jan@centricular.com>
+
+	* gst/playback/gstplaybin2.c:
+	  playbin: Implement multiview frame-packing overrides
+	  Add GstVideoMultiviewFramePacking enum, and the
+	  video-multiview-mode and video-multiview-flags
+	  properties on playbin.
+	  Use a pad probe to replace the multiview information in
+	  video caps sent out from uridecodebin.
+	  This is a part implementation only - for full
+	  correctness, it should also modify caps in caps events,
+	  accept-caps and allocation queries.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=611157
+
+2015-06-11 11:12:39 +1000  Jan Schmidt <jan@centricular.com>
+
+	* docs/libs/gst-plugins-base-libs-sections.txt:
+	* gst-libs/gst/video/Makefile.am:
+	* gst-libs/gst/video/gstvideoencoder.c:
+	* gst-libs/gst/video/video-frame.h:
+	* gst-libs/gst/video/video-info.c:
+	* gst-libs/gst/video/video-info.h:
+	* gst-libs/gst/video/video-multiview.c:
+	* gst-libs/gst/video/video-multiview.h:
+	* gst-libs/gst/video/video.h:
+	* tests/check/libs/video.c:
+	* win32/common/libgstvideo.def:
+	  video: Add multiview/stereo support
+	  Add flags and enums to support multiview signalling in
+	  GstVideoInfo and GstVideoFrame, and the caps serialisation and
+	  deserialisation.
+	  videoencoder: Copy multiview settings from reference input state
+	  Add gst_video_multiview_* support API and GstVideoMultiviewMeta meta
+	  https://bugzilla.gnome.org/show_bug.cgi?id=611157
+
+2015-06-10 14:33:01 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+	* gst-libs/gst/rtp/gstrtpbaseaudiopayload.c:
+	  rtpbaseaudiopayload: Use GST_BUFFER_PTS() instead of GST_BUFFER_TIMESTAMP()
+
+2015-06-10 12:26:38 +0200  Víctor Manuel Jáquez Leal <vjaquez@igalia.com>
+
+	* gst/playback/gstplaysink.c:
+	  playsink: fix the channel of color balance element
+	  When traversing the color balance element channel list to find the one that
+	  matches with the playsink proxy, the assignation was set to iterator of the
+	  playsink proxy, not the balance element. Thus, the mapping to the values of
+	  the balance element channel was wrong.
+	  This patch fixes the assignation of the color balance element channel, so the
+	  mapping to the channel of the color balance element is fixed.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=750691
+
+2015-06-10 15:50:12 +0900  Vineeth TM <vineeth.tm@samsung.com>
+
+	* gst/playback/gstplaysink.c:
+	  playsink: cannot enable text flag while playing
+	  when text playbin is not enabled in the beginning, then
+	  video_srcpad_stream_synchronizer gets linked to videochain->sinkpad
+	  and when we try to enable text bin during play, since it is already linked to videochain,
+	  text chain does not get linked properly. Hence unlinking the same
+	  before linking to text chain
+	  https://bugzilla.gnome.org/show_bug.cgi?id=748908
+
+2015-06-10 09:59:49 +0200  Edward Hervey <bilboed@bilboed.com>
+
+	* win32/common/libgstrtsp.def:
+	  win32: Update defs file
+
+2015-06-05 22:04:24 -0400  Xavier Claessens <xavier.claessens@collabora.com>
+
+	* docs/libs/gst-plugins-base-libs-sections.txt:
+	* gst-libs/gst/rtsp/gstrtspconnection.c:
+	* gst-libs/gst/rtsp/gstrtspconnection.h:
+	  GstRTSPConnection: Add GTlsInteraction support
+	  https://bugzilla.gnome.org/show_bug.cgi?id=750471
+
+2015-06-09 21:24:07 +0300  Vivia Nikolaidou <vivia@ahiru.eu>
+
+	* tools/gst-play.c:
+	  tools: gst-play: don't print 64 whitespaces next to the time indication
+	  Printing 64 whitespaces to erase the "Paused" message (after \r) would make
+	  it wrap to the next line on shorter terminals. Instead we only print the
+	  amount of spaces needed. Also mark the "Paused" string for translation
+	  while we're at it.
+
+2015-06-09 14:31:15 +0200  Stefan Sauer <ensonic@users.sf.net>
+
+	* Makefile.am:
+	  cruft: add the obsolete tmpl dir to cruft-dirs
+
+2015-06-09 22:03:37 +1000  Jan Schmidt <jan@centricular.com>
+
+	* win32/common/libgstaudio.def:
+	  Update win32 exports
+
+2013-12-09 18:46:14 +0100  Carlos Rafael Giani <dv@pseudoterminal.org>
+
+	* ext/alsa/gstalsasink.c:
+	  alsa: report recoverable device failures to base class
+	  This gives custom slave methods in the base class a chance to
+	  resynchronize themselves
+	  Signed-off-by: Carlos Rafael Giani <dv@pseudoterminal.org>
+	  https://bugzilla.gnome.org/show_bug.cgi?id=708362
+
+2013-12-09 17:08:15 +0100  Carlos Rafael Giani <dv@pseudoterminal.org>
+
+	* gst-libs/gst/audio/gstaudiobasesink.c:
+	* gst-libs/gst/audio/gstaudiobasesink.h:
+	  audiobasesink: added custom clock slaving method
+	  This new clock slaving method allows for installing a callback that is
+	  invoked during playback. Inside this callback, a custom slaving
+	  mechanism can be used (for example, a control loop adjusting a PLL or an
+	  asynchronous resampler). Upon request, it can skew the playout pointer
+	  just like the "skew" method. This is useful if the clocks drifted apart
+	  too much, and a quick reset is necessary.
+	  Signed-off-by: Carlos Rafael Giani <dv@pseudoterminal.org>
+	  https://bugzilla.gnome.org/show_bug.cgi?id=708362
+
+2015-06-09 11:30:15 +0200  Edward Hervey <bilboed@bilboed.com>
+
+	* common:
+	  Automatic update of common submodule
+	  From d9a3353 to 6015d26
+
+2015-06-09 10:16:34 +0100  Tim-Philipp Müller <tim@centricular.com>
+
+	* tools/gst-play-1.0.1:
+	* tools/gst-play.c:
+	  tools: gst-play: add shortcuts to switch audio/subtitle/video tracks
+
+2014-11-05 09:41:36 +0200  Sreerenj Balachandran <sreerenj.balachandran@intel.com>
+
+	* gst/playback/gstplaybackutils.c:
+	  playback: Skip 'ANY' capsfeature while finding the count of common capsfeatures
+	  https://bugzilla.gnome.org/show_bug.cgi?id=687182
+
+2014-11-05 09:40:43 +0200  Sreerenj Balachandran <sreerenj.balachandran@intel.com>
+
+	* gst/playback/Makefile.am:
+	* gst/playback/gstplaybackutils.c:
+	* gst/playback/gstplaybackutils.h:
+	* gst/playback/gstplaybin2.c:
+	  playback: Add gstplaybackutils.{h,c} to deploy the common subroutines
+	  Bring some of the helper functions in gstplaybin2.c to new files
+	  gstplaybackutils.{h,c} which can be utilized by other files
+	  in gst/playback too.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=687182
+
+2015-06-08 23:07:47 +0200  Stefan Sauer <ensonic@users.sf.net>
+
+	* common:
+	  Automatic update of common submodule
+	  From d37af32 to d9a3353
+
+2015-06-08 20:32:02 +0300  Vivia Nikolaidou <vivia@ahiru.eu>
+
+	* tools/gst-play.c:
+	  tools: gst-play: sort directory entries
+	  When adding a directory to the playlist, the order would be whatever
+	  g_dir_read_name returned. Sorting these using natural sort order.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=750585
+
+2015-06-08 20:17:07 +0100  Tim-Philipp Müller <tim@centricular.com>
+
+	* sys/ximage/ximagesink.c:
+	* sys/xvimage/xvcontext.c:
+	  ximagesink, xvimagesink: fix string leaks when setting class hint
+	  https://bugzilla.gnome.org/show_bug.cgi?id=750455
+
+2015-06-08 13:01:43 -0400  Nicolas Dufresne <nicolas.dufresne@collabora.com>
+
+	* gst-libs/gst/video/video-color.c:
+	  video: Allow using bt2020 by name in colorimetry
+	  As the lookup stops at the first element in the array with a NULL
+	  name, bt2020 could not be used by name. Moving up this entry
+	  fixes the issue.
+
+2015-06-05 16:01:05 +0100  Luis de Bethencourt <luis.bg@samsung.com>
+
+	* sys/ximage/ximagesink.c:
+	  ximagesink: set WM_CLASS of window
+	  Set WM_CLASS of the ximagesink window so window managers can apply rules
+	  based on xprop filtering.
+
+2015-06-05 15:58:39 +0100  Luis de Bethencourt <luis.bg@samsung.com>
+
+	* sys/xvimage/xvcontext.c:
+	  xvimagesink: set WM_CLASS of window
+	  Set WM_CLASS of the xvimagesink window so window managers can apply rules
+	  based on xprop filtering.
+
+2015-06-07 23:06:08 +0200  Stefan Sauer <ensonic@users.sf.net>
+
+	* common:
+	  Automatic update of common submodule
+	  From 21ba2e5 to d37af32
+
+2015-06-07 18:49:48 +0100  Luis de Bethencourt <luis.bg@samsung.com>
+
+	* ext/libvisual/gstaudiovisualizer.c:
+	  libvisual: clean dereferences of private structures
+	  https://bugzilla.gnome.org/show_bug.cgi?id=742875
+
+2015-06-07 18:23:23 +0100  Luis de Bethencourt <luis.bg@samsung.com>
+
+	* ext/libvisual/gstaudiovisualizer.c:
+	* ext/libvisual/gstaudiovisualizer.h:
+	  libvisual: make private all variable subclasses don't need
+	  https://bugzilla.gnome.org/show_bug.cgi?id=742875
+
+2015-06-07 17:31:55 +0200  Stefan Sauer <ensonic@users.sf.net>
+
+	* common:
+	  Automatic update of common submodule
+	  From c408583 to 21ba2e5
+
+2015-06-07 17:00:05 +0200  Stefan Sauer <ensonic@users.sf.net>
+
+	* docs/libs/Makefile.am:
+	* docs/plugins/Makefile.am:
+	  docs: remove variables that we define in the snippet from common
+	  This is syncing our Makefile.am with upstream gtkdoc.
+
+2015-06-07 17:16:13 +0200  Stefan Sauer <ensonic@users.sf.net>
+
+	* autogen.sh:
+	* common:
+	  Automatic update of common submodule
+	  From 241fcb7 to c408583
+
+2015-06-07 16:44:31 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+	* configure.ac:
+	  Back to development
+
+=== release 1.5.1 ===
+
+2015-06-07 10:04:41 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+	* ChangeLog:
+	* NEWS:
+	* RELEASE:
+	* configure.ac:
+	* docs/plugins/gst-plugins-base-plugins.args:
+	* docs/plugins/gst-plugins-base-plugins.hierarchy:
+	* docs/plugins/gst-plugins-base-plugins.signals:
+	* docs/plugins/inspect/plugin-adder.xml:
+	* docs/plugins/inspect/plugin-alsa.xml:
+	* docs/plugins/inspect/plugin-app.xml:
+	* docs/plugins/inspect/plugin-audioconvert.xml:
+	* docs/plugins/inspect/plugin-audiorate.xml:
+	* docs/plugins/inspect/plugin-audioresample.xml:
+	* docs/plugins/inspect/plugin-audiotestsrc.xml:
+	* docs/plugins/inspect/plugin-cdparanoia.xml:
+	* docs/plugins/inspect/plugin-encoding.xml:
+	* docs/plugins/inspect/plugin-gio.xml:
+	* docs/plugins/inspect/plugin-libvisual.xml:
+	* docs/plugins/inspect/plugin-ogg.xml:
+	* docs/plugins/inspect/plugin-pango.xml:
+	* docs/plugins/inspect/plugin-playback.xml:
+	* docs/plugins/inspect/plugin-subparse.xml:
+	* docs/plugins/inspect/plugin-tcp.xml:
+	* docs/plugins/inspect/plugin-theora.xml:
+	* docs/plugins/inspect/plugin-typefindfunctions.xml:
+	* docs/plugins/inspect/plugin-videoconvert.xml:
+	* docs/plugins/inspect/plugin-videorate.xml:
+	* docs/plugins/inspect/plugin-videoscale.xml:
+	* docs/plugins/inspect/plugin-videotestsrc.xml:
+	* docs/plugins/inspect/plugin-volume.xml:
+	* docs/plugins/inspect/plugin-vorbis.xml:
+	* docs/plugins/inspect/plugin-ximagesink.xml:
+	* docs/plugins/inspect/plugin-xvimagesink.xml:
+	* gst-plugins-base.doap:
+	* win32/common/_stdint.h:
+	* win32/common/config.h:
+	* win32/common/gstrtsp-enumtypes.c:
+	* win32/common/gstrtsp-enumtypes.h:
+	* win32/common/pbutils-enumtypes.c:
+	* win32/common/pbutils-enumtypes.h:
+	* win32/common/video-enumtypes.c:
+	* win32/common/video-enumtypes.h:
+	  Release 1.5.1
+
+2015-06-07 09:35:03 +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/lt.po:
+	* po/lv.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
+
+2015-06-05 16:44:08 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+	* gst-libs/gst/rtp/gstrtpbasepayload.c:
+	  rtpbasepayload: Always prefer downstream's ssrc suggestion if any
+	  Otherwise ssrc changes via rtpsession's (deprecated!) internal-ssrc property
+	  are not possible anymore. rtpsession was now patched to only suggest an ssrc
+	  if it makes sense to do so.
+	  In 2.0 we should get rid of all the properties that are also negotiated via
+	  caps, the code and behaviour is too confusing otherwise.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=749581
+
+2015-06-05 10:16:56 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+	* docs/libs/gst-plugins-base-libs-sections.txt:
+	* gst-libs/gst/rtp/gstrtcpbuffer.c:
+	* win32/common/libgstrtp.def:
+	  rtcpbuffer: Improve documentation of new functions a bit
+	  Also actually add them to the documentation.
+
+2015-06-03 11:20:35 +0200  Jose Antonio Santos Cadenas <santoscadenas@gmail.com>
+
+	* gst-libs/gst/rtp/gstrtcpbuffer.c:
+	* gst-libs/gst/rtp/gstrtcpbuffer.h:
+	* tests/check/libs/rtp.c:
+	  rtcpbuffer: Update package validation to support reduced size rtcp packets
+	  According to this section of the rfc.
+	  https://tools.ietf.org/html/rfc5506#section-3.4.2
+	  The validation should be updated to accept more types of RTCP
+	  packages, with this mask change feedback packages will be also
+	  accepted.
+	  Change-Id: If5ead59e03c7c60bbe45a9b09f3ff680e7fa4868
+
+2015-06-04 19:03:51 +0200  Mathieu Duponchelle <mathieu.duponchelle@opencreed.com>
+
+	* gst/audioresample/gstaudioresample.c:
+	  audioresample: copy metadata that only has the "audio" tag.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=750406
+
+2015-06-04 19:00:45 +0200  Mathieu Duponchelle <mathieu.duponchelle@opencreed.com>
+
+	* gst-libs/gst/audio/gstaudiofilter.c:
+	  audiofilter: copy metadata that only has the "audio" tag.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=750406
+
+2015-06-04 17:59:17 +0200  Mathieu Duponchelle <mathieu.duponchelle@opencreed.com>
+
+	* gst/audioconvert/gstaudioconvert.c:
+	  audioconvert: copy metadata that only has the "audio" tag.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=750406
+
+2015-05-20 18:16:07 +0200  Mathieu Duponchelle <mathieu.duponchelle@opencreed.com>
+
+	* gst-libs/gst/pbutils/gstdiscoverer.c:
+	  discoverer: Serialize the top level DiscovererInfo
+	  Which contains fields such as duration, uri and tags.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=749673
+
+2015-06-04 16:31:12 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+	* gst-libs/gst/pbutils/codec-utils.c:
+	  codec-utils: Add AAC channel configurations 11, 12 and 14 and levels 6 and 7
+
+2015-06-02 16:14:39 +0200  Edward Hervey <edward@centricular.com>
+
+	* tests/check/generic/clock-selection.c:
+	* tests/check/libs/allocators.c:
+	* tests/check/libs/audio.c:
+	* tests/check/libs/fft.c:
+	* tests/check/libs/navigation.c:
+	* tests/check/libs/rtp.c:
+	* tests/check/libs/rtsp.c:
+	* tests/check/libs/rtspconnection.c:
+	* tests/check/libs/tag.c:
+	* tests/check/libs/xmpwriter.c:
+	* tests/check/pipelines/basetime.c:
+	* tests/check/pipelines/capsfilter-renegotiation.c:
+	* tests/check/pipelines/gio.c:
+	* tests/check/pipelines/simple-launch-lines.c:
+	* tests/check/pipelines/theoraenc.c:
+	* tests/check/pipelines/vorbisdec.c:
+	* tests/check/pipelines/vorbisenc.c:
+	  check: Use GST_CHECK_MAIN () macro everywhere
+	  Makes source code smaller, and ensures we go through common initialization
+	  path (like the one that sets up XML unit test output ...)
+
+2015-06-02 12:47:50 +0100  Tim-Philipp Müller <tim@centricular.com>
+
+	* gst-libs/gst/pbutils/descriptions.c:
+	  pbutils: add description for video/x-cavs caps
+	  https://bugzilla.gnome.org/show_bug.cgi?id=727731
+
+2015-06-02 12:28:19 +0200  Edward Hervey <bilboed@bilboed.com>
+
+	* win32/common/libgstpbutils.def:
+	  win32: Update def file for new encoding API
+
+2015-05-29 14:15:31 +0100  Tim-Philipp Müller <tim@centricular.com>
+
+	* gst-libs/gst/rtp/gstrtpbuffer.c:
+	  rtpbuffer: optimise payload mapping for buffers with one memory
+	  Micro-optimisation: if the buffer consist of just one memory, we
+	  know we have already mapped that memory to read the headers, so
+	  no need to map it another time to get to the payload data, we
+	  can just set up the payload data details right there and then
+	  and avoid another map call in gst_rtp_buffer_get_payload().
+	  Adds up when receiving RTP-payloaded raw video which can easily
+	  be thousands of packets per frame.
+
+2015-05-21 13:59:55 +0100  Tim-Philipp Müller <tim@centricular.com>
+
+	* gst-libs/gst/rtp/gstrtpbasedepayload.c:
+	* gst-libs/gst/rtp/gstrtpbasedepayload.h:
+	  rtpbasedepayload: provide chain_list function on sink pad
+	  Implement a chain_list function, which avoids lots of locking
+	  compared to the default fallback implementation in GstPad.
+	  We may also want to do some more sophisticated timestamp
+	  tracking here at some point, but for now leave it up to the
+	  jitterbuffer and/or subclasses (in case buffers in the
+	  buffer list have no timestamp set on them, there may only
+	  be a timestamp for the whole list on the first buffer).
+	  This provides the exact same behaviour as the default
+	  fallback implementation.
+
+2015-05-07 10:26:47 +0200  Thibault Saunier <tsaunier@gnome.org>
+
+	* docs/libs/gst-plugins-base-libs-sections.txt:
+	* gst-libs/gst/pbutils/encoding-profile.c:
+	* gst-libs/gst/pbutils/encoding-profile.h:
+	* gst/encoding/gstencodebin.c:
+	  encodebin: Add a way to enable/disabled a GstEncodingProfile
+	  Summary:
+	  So that the user can easily use the same encoding profile to render
+	  with/without audio/video stream.
+	  API:
+	  gst_encoding_profile_is_disabled
+	  gst_encoding_pofile_set_enabled
+	  https://bugzilla.gnome.org/show_bug.cgi?id=749056
+
+2015-05-30 15:34:51 +0100  Luis de Bethencourt <luis.bg@samsung.com>
+
+	* tools/gst-play.c:
+	  tools: gst-play: remove unnecessary variable
+	  The second assignment of sret is never used. We can remove the first assignment
+	  and use the value directly instead.
+
+2015-05-30 08:12:03 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+	* gst-libs/gst/tag/id3v2frames.c:
+	  id3v2frames: Fix compiler warnings
+	  id3v2frames.c:951:20: error: unused variable 'utf16enc' [-Werror,-Wunused-const-variable]
+	  static const gchar utf16enc[] = "UTF-16";
+	  ^
+	  id3v2frames.c:952:20: error: unused variable 'utf16leenc' [-Werror,-Wunused-const-variable]
+	  static const gchar utf16leenc[] = "UTF-16LE";
+	  ^
+	  id3v2frames.c:953:20: error: unused variable 'utf16beenc' [-Werror,-Wunused-const-variable]
+	  static const gchar utf16beenc[] = "UTF-16BE";
+	  ^
+
+2015-05-30 01:03:46 +1000  Jan Schmidt <jan@centricular.com>
+
+	* docs/design/part-stereo-multiview-video.markdown:
+	  part-stereo-multiview-video: Add a section of open design questions
+
+2015-05-30 00:58:38 +1000  Jan Schmidt <jan@centricular.com>
+
+	* gst-libs/gst/video/video-format.h:
+	  video-format: Fix minor docs typo
+
+2015-03-16 19:37:26 +1100  Jan Schmidt <jan@centricular.com>
+
+	* gst/videotestsrc/gstvideotestsrc.h:
+	  videotestsrc: Document the solid-color pattern
+
+2015-03-16 19:28:35 +1100  Jan Schmidt <jan@centricular.com>
+
+	* gst/playback/gstplay-enum.h:
+	  playback: Document GST_PLAY_FLAG_SOFT_COLORBALANCE
+
+2014-10-09 01:13:29 +1100  Jan Schmidt <jan@centricular.com>
+
+	* gst-libs/gst/video/gstvideometa.c:
+	* gst-libs/gst/video/gstvideometa.h:
+	* win32/common/libgstvideo.def:
+	  video: Make gst_buffer_get_video_meta() a real function, Return lowest id
+	  Instead of returning the first video meta found on a buffer, return the
+	  one with the lowest id (which is usually the same thing, except on
+	  multi-view buffers)
+
+2015-05-29 15:30:41 +0100  Tim-Philipp Müller <tim@centricular.com>
+
+	* gst-libs/gst/pbutils/gstdiscoverer.c:
+	  discoverer: don't crash on unknown info types when deserializing
+	  Handle unknown info types when deserializing instead of
+	  dereferencing NULL pointers.
+	  Coverity CID 1302394
+
+2015-05-29 13:15:59 +0200  George Kiagiadakis <george.kiagiadakis@collabora.com>
+
+	* gst-libs/gst/sdp/gstsdpmessage.c:
+	  sdp: prevent the sdp message parser from reading past the end of the buffer
+	  Otherwise, a malformed SDP message could crash the application,
+	  or even maliciously gather data from the memory located after
+	  this buffer...
+	  https://bugzilla.gnome.org/show_bug.cgi?id=750096
+
+2015-05-28 19:49:31 +0200  George Kiagiadakis <george.kiagiadakis@collabora.com>
+
+	* tests/check/elements/videorate.c:
+	  tests: add test for videorate caps renegotiation after a framerate has been calculated and added to caps
+	  The original 0/1 framerate must still be allowed to be configured
+	  on the upstream side of videorate, otherwise future caps renegotiation
+	  is going to fail.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=750032
+
+2015-05-28 12:51:35 +0200  George Kiagiadakis <george.kiagiadakis@collabora.com>
+
+	* gst/videorate/gstvideorate.c:
+	  videorate: update the caps framerate only in the GST_PAD_SINK transform_caps direction
+	  When a stream has a variable framerate, videorate calculates it and
+	  forces it on the output caps. However, the code in _transform_caps()
+	  currently also does that if the transform is going in the opposite
+	  direction (GST_PAD_SRC), so during a renegotiation it tries to force
+	  upstream to use the calculated framerate and it fails.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=750032
+
+2015-05-26 08:06:50 -0300  Thiago Santos <thiagoss@osg.samsung.com>
+
+	* gst/playback/gstplaysink.c:
+	  playsink: use queue to avoid lock in audiotee audio branches
+	  This part of pipeline is:
+	  tee name=t ! visualizationbin ! streamsynchronizer name=s
+	  t. ! s.
+	  streamsynchronizer might block and it could starve the visualization
+	  branch of the pipeline when it is enabled.
+	  The visualization bin has queues internally but the other branch
+	  that links the audiotee directly to the synchronizer is vulnerable
+	  to block. Adding a queue between "t. ! s." fixes deadlocks.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=749676
+
+2015-05-26 13:11:00 +0300  Claudiu Florin Lazar <lazar.claudiu.florin@gmail.com>
+
+	* ext/pango/gstbasetextoverlay.c:
+	  basetextoverlay: make deltax and deltay properties controllable
+	  This will be more useful once we have absolute direct
+	  control bindings.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=749824
+
+2015-05-05 18:01:46 +0200  Guillaume Desmottes <guillaume.desmottes@collabora.co.uk>
+
+	* ext/ogg/gstoggdemux.c:
+	  oggdemux: fix chain leak
+	  Don't leak the building_chain when destroying.
+	  Fix leaks with the validate.http.playback.reverse_playback.vorbis_theora_1_ogg
+	  scenario.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=748964
+
+2015-05-25 22:37:56 +0100  Tim-Philipp Müller <tim@centricular.com>
+
+	* gst-libs/gst/tag/id3v2frames.c:
+	  tag: id3v2: fix parsing of UTF-16 text on systems with crippled iconv
+	  Use g_utf16_to_utf8() instead of the more generic g_convert(), so
+	  that we can extract text in UTF-16 format even on embedded systems
+	  with crippled iconv support.
+	  This code path is exercised by the id3demux test_unsync_v23
+	  check in gst-plugins-good.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=741144
+
+2015-05-25 22:37:06 +0100  Tim-Philipp Müller <tim@centricular.com>
+
+	* .gitignore:
+	  Add new generated rtp enum files to .gitignore
+
+2015-05-24 18:58:21 +0100  Tim-Philipp Müller <tim@centricular.com>
+
+	* tools/gst-play.c:
+	  tools: gst-play: keep configured playback rate and trick mode when seeking
+	  Instead of resetting rate to 1.0
+
+2015-05-24 18:47:25 +0100  Tim-Philipp Müller <tim@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/lt.po:
+	* po/lv.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 for new translatable strings
+
+2015-05-24 18:46:21 +0100  Tim-Philipp Müller <tim@centricular.com>
+
+	* tools/gst-play.c:
+	  tools: gst-play: mark more strings for translation
+
+2015-05-23 01:50:11 +0900  danny song <danny.song.ga@gmail.com>
+
+	* tools/gst-play.c:
+	  tools: gst-play: add keyboard shortcut help
+	  https://bugzilla.gnome.org/show_bug.cgi?id=749740
+
+2015-05-23 12:02:26 +0100  Tim-Philipp Müller <tim@centricular.com>
+
+	* tests/check/Makefile.am:
+	  tests: add back videoscale unit test
+	  Has been removed in 835422b2 as part of porting
+	  things over to the new videoscale API.
+
+2015-05-21 12:10:40 +0100  Tim-Philipp Müller <tim@centricular.com>
+
+	* tools/gst-play-1.0.1:
+	* tools/gst-play.c:
+	  tools: gst-play: enable interative mode by default
+	  And change --interactive option to --no-interactive.
+
+2015-05-21 13:07:50 +0300  Sebastian Dröge <sebastian@centricular.com>
+
+	* gst-libs/gst/rtp/Makefile.am:
+	  rtp: Clean G-I files on make clean too
+
+2015-05-20 16:23:46 +0300  Sebastian Dröge <sebastian@centricular.com>
+
+	* gst-libs/gst/rtp/Makefile.am:
+	  rtp: Add builddir to the include path for gobject-introspection
+	  And also add missing headers/sources
+	  https://bugzilla.gnome.org/show_bug.cgi?id=749632
+
+2015-05-20 15:40:53 +0300  Sebastian Dröge <sebastian@centricular.com>
+
+	* win32/common/libgstrtp.def:
+	* win32/common/libgstrtsp.def:
+	  win32: Update exports
+
+2015-05-20 13:36:30 +0300  Sebastian Dröge <sebastian@centricular.com>
+
+	* gst-libs/gst/rtp/Makefile.am:
+	* gst-libs/gst/rtp/gstrtpdefs.h:
+	* gst-libs/gst/rtp/rtp.h:
+	  rtp: Add GstRTPProfile enum
+
+2015-05-20 13:35:13 +0300  Sebastian Dröge <sebastian@centricular.com>
+
+	* gst-libs/gst/rtsp/gstrtsptransport.h:
+	  rtsp: Add FIXME 2.0 comment about GstRTSPTransport being an enum instead of flags
+
+2015-05-20 13:33:42 +0300  Sebastian Dröge <sebastian@centricular.com>
+
+	* gst-libs/gst/rtsp/Makefile.am:
+	* gst-libs/gst/rtsp/gstrtsptransport.c:
+	* gst-libs/gst/rtsp/gstrtsptransport.h:
+	  rtsp: Use glib-mkenums to generate GstRTSPProfile and GstRTSPLowerTrans GTypes
+
+2015-05-20 10:22:48 +0100  Tim-Philipp Müller <tim@centricular.com>
+
+	* ext/ogg/gstoggdemux.c:
+	  Revert "oggdemux: Prevent seeks when _SCHEDULING_FLAG_SEQUENTIAL is set"
+	  This reverts commit 76647f2710d718e27f207b005956b7dba72c2d19.
+	  Avoiding pull mode activation is a feature regression, and
+	  demuxers should always use pull mode where that is possible,
+	  e.g. if there's an upstream queue2 with a ring buffer or
+	  a download buffer.
+	  This patch made reverse playback no longer possible over http.
+	  If the goal is to minimise seeks, then that can still be done
+	  by making the demuxer behave differently in pull mode if
+	  the SEQUENTIAL flag is set. If there are bugs, like the demuxer
+	  needlessly scanning the entire file on start-up in pull mode,
+	  then those should be fixed instead.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=746010
+
+2015-05-19 19:48:54 +0100  Tim-Philipp Müller <tim@centricular.com>
+
+	* win32/common/libgstpbutils.def:
+	  win32: update .def file for new API
+
+2014-10-24 17:49:37 +0100  Tim-Philipp Müller <tim@centricular.com>
+
+	* gst-libs/gst/rtsp/gstrtspconnection.c:
+	  rtsp: don't use soon-to-be-deprecated g_cancellable_reset()
+	  From the API documentation: "Note that it is generally not
+	  a good idea to reuse an existing cancellable for more
+	  operations after it has been cancelled once, as this
+	  function might tempt you to do. The recommended practice
+	  is to drop the reference to a cancellable after cancelling
+	  it, and let it die with the outstanding async operations.
+	  You should create a fresh cancellable for further async
+	  operations."
+	  https://bugzilla.gnome.org/show_bug.cgi?id=739132
+
+2014-10-24 17:49:23 +0100  Tim-Philipp Müller <tim@centricular.com>
+
+	* gst/gio/gstgiobasesink.c:
+	* gst/gio/gstgiobasesrc.c:
+	  gio: don't use soon-to-be-deprecated g_cancellable_reset()
+	  From the API documentation: "Note that it is generally not
+	  a good idea to reuse an existing cancellable for more
+	  operations after it has been cancelled once, as this
+	  function might tempt you to do. The recommended practice
+	  is to drop the reference to a cancellable after cancelling
+	  it, and let it die with the outstanding async operations.
+	  You should create a fresh cancellable for further async
+	  operations."
+	  https://bugzilla.gnome.org/show_bug.cgi?id=739132
+
+2014-10-24 17:48:54 +0100  Tim-Philipp Müller <tim@centricular.com>
+
+	* gst/tcp/gstmultioutputsink.c:
+	* gst/tcp/gstmultisocketsink.c:
+	* gst/tcp/gsttcpclientsink.c:
+	* gst/tcp/gsttcpclientsrc.c:
+	* gst/tcp/gsttcpserversrc.c:
+	  tcp: don't use soon-to-be-deprecated g_cancellable_reset()
+	  From the API documentation: "Note that it is generally not
+	  a good idea to reuse an existing cancellable for more
+	  operations after it has been cancelled once, as this
+	  function might tempt you to do. The recommended practice
+	  is to drop the reference to a cancellable after cancelling
+	  it, and let it die with the outstanding async operations.
+	  You should create a fresh cancellable for further async
+	  operations."
+	  https://bugzilla.gnome.org/show_bug.cgi?id=739132
+
+2015-05-19 18:53:09 +0200  Mathieu Duponchelle <mathieu.duponchelle@opencreed.com>
+
+	* gst-libs/gst/pbutils/gstdiscoverer.h:
+	  gstdiscoverer: Add since annotation.
+	  Forgot to add the since annotation to the
+	  GstDiscovererSerializeFlags in the previous commit.
+
+2015-05-03 03:18:28 +0200  Mathieu Duponchelle <mathieu.duponchelle@opencreed.com>
+
+	* docs/libs/gst-plugins-base-libs-sections.txt:
+	* gst-libs/gst/pbutils/gstdiscoverer.c:
+	* gst-libs/gst/pbutils/gstdiscoverer.h:
+	* tests/check/libs/discoverer.c:
+	* win32/common/libgstpbutils.def:
+	  discoverer: Add serialization methods.
+	  [API] gst_discoverer_info_to_variant
+	  [API] gst_discoverer_info_from_variant
+	  [API] GstDiscovererSerializeFlags
+	  + Serializes as a GVariant
+	  + Adds a test
+	  + Does not serialize potential GstToc (s)
+	  https://bugzilla.gnome.org/show_bug.cgi?id=748814
+
+2015-05-19 16:32:38 +0300  Sebastian Dröge <sebastian@centricular.com>
+
+	* gst-libs/gst/rtp/gstrtpbasepayload.c:
+	  rtpbasepayload: Try harder to reuse previously configured caps values and give more preference to anything set as properties
+	  This affects the pt, ssrc, seqnum-offset and timestamp-offset properties. If
+	  they were set from a property, or we configured caps before, we try to use
+	  that value for them. Even if the first structure of the downstream caps
+	  specifies a different value, we check if the value is supported by other
+	  structures.
+	  Only if all this fails, we use the values given by downstream in the first
+	  structure, i.e. if no properties were set and these are the first caps we
+	  negotiate or downstream does not support our values.
+	  By doing this we ensure that we don't spuriously change ssrcs or other fields
+	  in the middle of the stream (and also consider property values more). Ssrc
+	  changes would currently happen after sending an RTX packet (thus creating a
+	  new internal source inside the rtpsession), and then renegotiating the
+	  payloader (which then gets the RTX ssrc from rtpsession).
+	  https://bugzilla.gnome.org/show_bug.cgi?id=749581
+
+2015-05-18 21:09:25 +0200  Stefan Sauer <ensonic@users.sf.net>
+
+	* docs/libs/gst-plugins-base-libs-sections.txt:
+	* gst-libs/gst/video/video-scaler.c:
+	  docs: a random set of trivial fixes for the library docs
+	  Warnings down to 35, unused symbols doen to 112.
+
+2015-05-18 20:56:28 +0200  Stefan Sauer <ensonic@users.sf.net>
+
+	* docs/libs/gst-plugins-base-libs-docs.sgml:
+	* docs/libs/gst-plugins-base-libs-sections.txt:
+	* gst-libs/gst/allocators/gstfdmemory.c:
+	* gst-libs/gst/allocators/gstfdmemory.h:
+	  docs: add fdmemory to docs
+
+2015-05-18 20:45:45 +0200  Stefan Sauer <ensonic@users.sf.net>
+
+	* docs/libs/gst-plugins-base-libs-sections.txt:
+	* gst-libs/gst/allocators/gstfdmemory.h:
+	* gst-libs/gst/video/colorbalance.h:
+	* gst-libs/gst/video/video-scaler.c:
+	  docs: a random set of trivial fixes for the library docs
+	  All those where super straight forward from the warnings gtkdoc prints. It kind
+	  of makes sense to apply them before the list of warnings is >100 and people
+	  complain that gtkdoc is noisy.
+
+2015-05-18 20:31:30 +0200  Stefan Sauer <ensonic@users.sf.net>
+
+	* docs/libs/gst-plugins-base-libs-sections.txt:
+	* gst-libs/gst/sdp/gstmikey.h:
+	  mikey: fix a bunch of doc warnings
+	  Rename header/source mismatch of parameters. Update the exposed API in
+	  sections.txt.
+
+2015-05-18 20:01:49 +0200  Stefan Sauer <ensonic@users.sf.net>
+
+	* gst/playback/gstplaybin2.c:
+	  Revert "doc: Workaround gtkdoc issue"
+	  This reverts commit df7ef3c35d34352257a28307c07d4673f239452e.
+	  This is fixed by the gtk-doc 1.23 release.
+
+2015-05-18 11:23:16 +0100  Tim-Philipp Müller <tim@centricular.com>
+
+	* gst-libs/gst/app/gstappsrc.c:
+	* tests/check/elements/appsrc.c:
+	  appsrc: optimise caps changing when previously-set caps have not taken effect yet
+	  Only negotiate/change caps once when setting caps twice and
+	  the first-set caps have not been used yet.
+	  Based on patch by Eunhae Choi.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=747517
+
+2015-05-18 16:16:10 +0900  Vineeth T M <vineeth.tm@samsung.com>
+
+	* sys/xvimage/xvimagesink.c:
+	  xvimagesink: fix pool leak
+	  During set caps when config fails, the referenced newpool
+	  is not unref ed.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=749530
+
+2015-05-18 15:45:01 +0900  eunhae choi <eunhae1.choi@samsung.com>
+
+	* gst/playback/gstplaybin2.c:
+	  playbin: check the flags before set again
+	  check the previous flags of playsink to avoid the reconfigure of playsink repeatedly
+	  https://bugzilla.gnome.org/show_bug.cgi?id=749528
+
+2015-05-16 23:33:55 -0400  Nicolas Dufresne <nicolas.dufresne@collabora.co.uk>
+
+	* gst/playback/gstplaybin2.c:
+	  doc: Workaround gtkdoc issue
+	  With gtkdoc 1.22, the XML generator fails when a itemizedlist is
+	  followed by a refsect2. Workaround the issue by wrapping the refsect2
+	  into para.
+
+2015-05-15 14:49:47 +0200  Stefan Sauer <ensonic@users.sf.net>
+
+	* gst/playback/gstplaybin2.c:
+	* gst/playback/gstsubtitleoverlay.c:
+	  playback: use the new gst_object api
+	  Use gst_object_has_as_anchestor instead of the now deprecated _has_ancestor.
+
+2015-05-10 11:42:21 +0100  Tim-Philipp Müller <tim@centricular.com>
+
+	* ext/ogg/gstoggmux.c:
+	  docs: fix up example pipeline
+
+2015-05-09 22:33:26 +0100  Tim-Philipp Müller <tim@centricular.com>
+
+	* ext/alsa/gstalsasink.c:
+	* ext/alsa/gstalsasrc.c:
+	* ext/ogg/gstoggdemux.c:
+	* ext/pango/gstbasetextoverlay.c:
+	* ext/pango/gstclockoverlay.c:
+	* ext/pango/gsttextoverlay.c:
+	* ext/pango/gsttextrender.c:
+	* ext/pango/gsttimeoverlay.c:
+	* ext/theora/gsttheoradec.c:
+	* ext/theora/gsttheoraenc.c:
+	* ext/theora/gsttheoraparse.c:
+	* ext/vorbis/gstvorbisdec.c:
+	* ext/vorbis/gstvorbisenc.c:
+	* ext/vorbis/gstvorbisparse.c:
+	* ext/vorbis/gstvorbistag.c:
+	* gst/adder/gstadder.c:
+	* gst/audioconvert/gstaudioconvert.c:
+	* gst/audiorate/gstaudiorate.c:
+	* gst/audioresample/gstaudioresample.c:
+	* gst/audiotestsrc/gstaudiotestsrc.c:
+	* gst/gio/gstgiosink.c:
+	* gst/gio/gstgiosrc.c:
+	* gst/playback/gstplaybin2.c:
+	* gst/playback/gstsubtitleoverlay.c:
+	* gst/tcp/gsttcpclientsink.c:
+	* gst/tcp/gsttcpclientsrc.c:
+	* gst/tcp/gsttcpserversink.c:
+	* gst/tcp/gsttcpserversrc.c:
+	* gst/videoconvert/gstvideoconvert.c:
+	* gst/videorate/gstvideorate.c:
+	* gst/videoscale/gstvideoscale.c:
+	* gst/videotestsrc/gstvideotestsrc.c:
+	* gst/volume/gstvolume.c:
+	* sys/ximage/ximagesink.c:
+	* sys/xvimage/xvimagesink.c:
+	  docs: update element example pipelines
+	  - gst-launch -> gst-launch-1.0
+	  - use autoaudiosink and audiovideosink more often
+	  - review pipeline examples and descriptions
+
+2015-05-10 10:51:09 +1000  Jan Schmidt <jan@centricular.com>
+
+	* win32/common/libgstvideo.def:
+	  video: Update win32 exports for new libgstvideo API
+
+2015-05-08 15:21:16 +0300  Vivia Nikolaidou <vivia@ahiru.eu>
+
+	* gst/videoconvert/gstvideoconvert.c:
+	* gst/videoconvert/gstvideoconvert.h:
+	  videoconvert: Expose some properties from the videoconverter API
+	  Expose chroma resampler, alpha mode, alpha value, chroma mode, matrix mode,
+	  gamma mode and primaries mode from the videoconverter API.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=749105
+
+2015-05-08 14:57:03 +0300  Vivia Nikolaidou <vivia@ahiru.eu>
+
+	* gst-libs/gst/video/video-converter.c:
+	* gst-libs/gst/video/video-converter.h:
+	* gst-libs/gst/video/video-resampler.h:
+	* gst/videoscale/gstvideoscale.c:
+	  video-converter: Change some implicit string enums to real enums
+	  GST_VIDEO_CONVERTER_OPT_ALPHA_MODE, GST_VIDEO_CONVERTER_OPT_CHROMA_MODE,
+	  GST_VIDEO_CONVERTER_OPT_MATRIX_MODE, GST_VIDEO_CONVERTER_OPT_GAMMA_MODE and
+	  GST_VIDEO_CONVERTER_OPT_PRIMARIES_MODE were G_TYPE_STRING with only a few valid
+	  options. Changed those to real enums.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=749104
+
+2015-05-08 15:06:34 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+	* gst-libs/gst/audio/gstaudiodecoder.c:
+	  audiodecoder: Also negotiate with downstream if needed before handling a GAP event
+
+2015-05-08 15:02:48 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+	* gst-libs/gst/video/gstvideodecoder.c:
+	  videodecoder: Also negotiate with downstream if needed before handling a GAP event
+
+2015-05-06 12:40:48 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+	* gst-libs/gst/video/gstvideodecoder.c:
+	  videodecoder: Try to be smarter when clipping buffers without duration/framerate to the segment
+	  2 second frame duration is rather unlikely... but if we don't clip
+	  away buffers that far before the segment we can cause the pipeline to
+	  lockup. This can happen if audio is properly clipped, and thus the
+	  audio sink does not preroll yet but the video sink prerolls because
+	  we already outputted a buffer here... and then queues run full.
+	  In the worst case we will clip one buffer too many here now if no
+	  framerate is given, no buffer duration is given and the actual
+	  framerate is less than 0.5fps.
+	  Fixes seeking on HLS/DASH streams, when seeking into the middle of
+	  fragments and having no framerate/buffer duration.
+
+2015-05-04 17:59:30 +0200  Guillaume Desmottes <guillaume.desmottes@collabora.co.uk>
+
+	* sys/xvimage/xvimagesink.c:
+	  xvimagesink: fix navigation event leak when early returning
+	  Create the event *after* the early return check so it's not leaked.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=748903
+
+2015-05-04 18:00:18 +0200  Guillaume Desmottes <guillaume.desmottes@collabora.co.uk>
+
+	* sys/xvimage/xvimagesink.c:
+	  xvimagesink: fix navigation event leak when not handled
+	  gst_navigation_message_new_event() is *not* consuming the event so we should
+	  always drop our extra reference.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=748903
+
+2015-05-04 17:58:38 +0200  Guillaume Desmottes <guillaume.desmottes@collabora.co.uk>
+
+	* gst-libs/gst/video/navigation.c:
+	  navigation: fix structure leak if subclass doesn't implement send_event()
+	  The send_event() implementation is supposed to consume @structure.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=748903
+
+2015-05-05 15:35:46 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+	* gst/playback/gststreamsynchronizer.c:
+	  streamsynchronizer: Don't override segment.base from upstream with 0
+	  Upstream might want to use it to properly map timestamps to running/stream
+	  times, if we just override it with 0 synchronization will be just wrong.
+	  For this we remove some old 0.10 code related to segment accumulation, and
+	  remove some more code that is useless now, and accumulate the group start time
+	  (aka segment.base offset) manually now.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=635701
+
+2015-05-05 13:14:12 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+	* gst-libs/gst/rtp/gstrtpbasedepayload.c:
+	  rtpbasedepayload: Add some debug output
+
+2015-03-19 10:50:22 +0100  Aurélien Zanelli <aurelien.zanelli@parrot.com>
+
+	* docs/design/part-mediatype-video-raw.txt:
+	* gst-libs/gst/video/video-converter.c:
+	* gst-libs/gst/video/video-format.c:
+	* gst-libs/gst/video/video-format.h:
+	* gst-libs/gst/video/video-info.c:
+	* gst-libs/gst/video/video-scaler.c:
+	  video: add NV61 format support
+	  https://bugzilla.gnome.org/show_bug.cgi?id=746466
+
+2015-05-04 20:33:23 +0100  Tim-Philipp Müller <tim@centricular.com>
+
+	* docs/libs/gst-plugins-base-libs-sections.txt:
+	  docs: add new video API to docs
+
+2015-05-04 02:18:22 +1000  Jan Schmidt <jan@centricular.com>
+
+	* gst-libs/gst/video/video-info.c:
+	* gst-libs/gst/video/video-info.h:
+	  video: check colorimetry and chroma_site equality in gst_video_info_is_equal()
+	  Add VideoInfo accessors for colorimetry and chroma_site and use them
+	  when checking the equality of two GstVideoInfo
+
+2015-05-04 02:10:17 +1000  Jan Schmidt <jan@centricular.com>
+
+	* gst-libs/gst/video/video-color.c:
+	* gst-libs/gst/video/video-color.h:
+	* win32/common/libgstvideo.def:
+	  video-color: Add gst_video_colorimetry_is_equal()
+	  Add a function for comparing the equality of 2 colorimetry
+	  structures.
+
+2015-04-10 16:05:45 +0900  Young Han Lee <y.lee@lge.com>
+
+	* ext/ogg/gstoggdemux.c:
+	  oggdemux: remove unused code
+	  These lines have done nothing for about 10 years.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=748820
+
+2015-04-10 15:24:28 +0300  Sreerenj Balachandran <sreerenj.balachandran@intel.com>
+
+	* gst-libs/gst/pbutils/codec-utils.c:
+	  pbutils: Use more strict profile checking for hevc
+	  Use the profile_idc value to set the profile string in caps.
+	  Don't use compatibility flags for this purpose.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=747613
+
+2015-04-30 14:55:14 +0530  Ravi Kiran K N <ravi.kiran@samsung.com>
+
+	* gst-libs/gst/video/video-converter.c:
+	  video-converter: Remove unused macro
+	  Remove unused macro GET_TMP_LINE
+	  https://bugzilla.gnome.org/show_bug.cgi?id=748687
+
+2015-04-29 15:44:59 +0100  Tim-Philipp Müller <tim@centricular.com>
+
+	* tools/gst-play.c:
+	  gst-play: add some more key navigation mappings
+	  And don't feed multi-character key descriptors to the
+	  event handler, it won't be what it expects.
+
+2015-04-29 15:30:02 +0100  Tim-Philipp Müller <tim@centricular.com>
+
+	* gst-libs/gst/video/navigation.c:
+	* gst-libs/gst/video/navigation.h:
+	* win32/common/libgstvideo.def:
+	  navigation: sprinkle some since markers and add new API to .def file
+	  https://bugzilla.gnome.org/show_bug.cgi?id=747245
+
+2015-04-02 16:16:58 +0200  Edward Hervey <edward@centricular.com>
+
+	* tools/gst-play.c:
+	  tools: Add mouse/keyboard handling from messages
+	  Allows the user to control playback with the window in focus
+	  https://bugzilla.gnome.org/show_bug.cgi?id=747245
+
+2015-04-02 16:10:32 +0200  Edward Hervey <edward@centricular.com>
+
+	* sys/xvimage/xvimagesink.c:
+	  xvimagesink: Post unhandled navigation events on the bus
+	  https://bugzilla.gnome.org/show_bug.cgi?id=747245
+
+2015-04-02 16:09:13 +0200  Edward Hervey <edward@centricular.com>
+
+	* gst-libs/gst/video/navigation.c:
+	* gst-libs/gst/video/navigation.h:
+	  video: Add a new "event" navigation message type
+	  This will be useful for elements that wish to post unhandled navigation
+	  events on the bus to give the application a chance to do something with
+	  it
+	  https://bugzilla.gnome.org/show_bug.cgi?id=747245
+
+2015-04-28 12:01:02 +0200  Wim Taymans <wtaymans@redhat.com>
+
+	* gst-libs/gst/video/video-info.c:
+	* gst-libs/gst/video/video-info.h:
+	* win32/common/libgstvideo.def:
+	  video-info: expose InterlaceMode conversion to/from string
+	  Expose the methods used to convert a GstVideoInterlaceMode to and
+	  from a string.
+
+2015-04-27 11:26:10 +0100  Luis de Bethencourt <luis.bg@samsung.com>
+
+	* gst/audioconvert/gstaudioconvert.c:
+	* gst/audiorate/gstaudiorate.c:
+	* gst/encoding/gstsmartencoder.c:
+	  Rename property enums from ARG_ to PROP_
+	  Property enum items should be named PROP_ for consistency and readability.
+
+2015-04-27 11:06:58 +0200  Matthieu Bouron <matthieu.bouron@collabora.com>
+
+	* gst/videoconvert/gstvideoconvert.c:
+	  videoconvert: Keep colorimetry and chroma-site fields if passthrough
+	  https://bugzilla.gnome.org/show_bug.cgi?id=748141
+
+2015-04-27 10:08:17 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+	* gst-libs/gst/audio/gstaudiosink.h:
+	* gst-libs/gst/audio/gstaudiosrc.h:
+	  audio: Change the remaining "samples" in the ::delay() vfunc docs to "frames"
+	  https://bugzilla.gnome.org/show_bug.cgi?id=748289
+
+2015-04-26 20:13:01 +0100  Tim-Philipp Müller <tim@centricular.com>
+
+	* tests/check/pipelines/tcp.c:
+	  tests: tcp: remove SOCK_CLOEXEC which causes build problems on OS/X
+	  It's not needed here.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=747692
+
+2015-04-26 21:08:14 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+	* gst-libs/gst/audio/gstaudioringbuffer.h:
+	* gst-libs/gst/audio/gstaudiosink.h:
+	* gst-libs/gst/audio/gstaudiosrc.h:
+	  audio: The delay vfunc returns the number of frames, not samples
+	  https://bugzilla.gnome.org/show_bug.cgi?id=748289
+
+2015-04-26 17:49:33 +0100  Tim-Philipp Müller <tim@centricular.com>
+
+	* Android.mk:
+	* android/NOTICE:
+	* android/alsa.mk:
+	* android/app.mk:
+	* android/app_plugin.mk:
+	* android/audio.mk:
+	* android/audioconvert.mk:
+	* android/audioresample.mk:
+	* android/audiotestsrc.mk:
+	* android/decodebin.mk:
+	* android/decodebin2.mk:
+	* android/gdp.mk:
+	* android/pbutils.mk:
+	* android/playbin.mk:
+	* android/queue2.mk:
+	* android/riff.mk:
+	* android/rtp.mk:
+	* android/rtsp.mk:
+	* android/sdp.mk:
+	* android/tag.mk:
+	* android/tcp.mk:
+	* android/typefindfunctions.mk:
+	* android/video.mk:
+	* android/videoconvert.mk:
+	* android/videoscale.mk:
+	* android/videotestsrc.mk:
+	* ext/ogg/Makefile.am:
+	* ext/vorbis/Makefile.am:
+	* gst-libs/gst/allocators/Makefile.am:
+	* gst-libs/gst/app/Makefile.am:
+	* gst-libs/gst/audio/Makefile.am:
+	* gst-libs/gst/fft/Makefile.am:
+	* gst-libs/gst/pbutils/Makefile.am:
+	* gst-libs/gst/riff/Makefile.am:
+	* gst-libs/gst/rtp/Makefile.am:
+	* gst-libs/gst/rtsp/Makefile.am:
+	* gst-libs/gst/sdp/Makefile.am:
+	* gst-libs/gst/tag/Makefile.am:
+	* gst-libs/gst/video/Makefile.am:
+	* gst/adder/Makefile.am:
+	* gst/app/Makefile.am:
+	* gst/audioconvert/Makefile.am:
+	* gst/audiorate/Makefile.am:
+	* gst/audioresample/Makefile.am:
+	* gst/audiotestsrc/Makefile.am:
+	* gst/encoding/Makefile.am:
+	* gst/playback/Makefile.am:
+	* gst/tcp/Makefile.am:
+	* gst/typefind/Makefile.am:
+	* gst/videoconvert/Makefile.am:
+	* gst/videorate/Makefile.am:
+	* gst/videoscale/Makefile.am:
+	* gst/videotestsrc/Makefile.am:
+	* gst/volume/Makefile.am:
+	* tools/Makefile.am:
+	  Remove obsolete Android build cruft
+	  This is not needed any longer.
+
+2015-04-26 14:37:56 +0100  Tim-Philipp Müller <tim@centricular.com>
+
+	* tests/check/gst/typefindfunctions.c:
+	  tests: typefindfunctions: add test for UTF-16 MSS manifest typefinding
+
+2015-04-26 14:44:33 +0100  Tim-Philipp Müller <tim@centricular.com>
+
+	* gst/typefind/gsttypefindfunctions.c:
+	  typefinding: don't read more data than needed in MSS typefinder
+
+2015-04-26 14:27:30 +0100  Tim-Philipp Müller <tim@centricular.com>
+
+	* gst/typefind/gsttypefindfunctions.c:
+	  typefinding: detect MSS manifests without using g_convert()
+	  Embedded systems often have limited charset conversion
+	  functionality, so don't rely on g_convert() (i.e. iconv)
+	  for UTF-16 to UTF-8 conversions, we can easily enough do
+	  that ourselves by converting to native endianness and
+	  then using GLib's helper functions.
+
+2015-04-25 18:45:50 +0200  Stefan Sauer <ensonic@users.sf.net>
+
+	* ext/libvisual/gstaudiovisualizer.c:
+	* ext/libvisual/gstaudiovisualizer.h:
+	  audiovisualizer: fix the license from GPL to LGPL
+	  This was a copy'n'paste buf in the initial commit done by myself.
+
+2015-04-24 14:59:21 +0200  Guillaume Desmottes <guillaume.desmottes@collabora.co.uk>
+
+	* gst-libs/gst/tag/gstxmptag.c:
+	  xmptag: fix invalid reads in GST_DEBUG statement
+	  Don't try to print a string that is not NUL-terminated. This
+	  log line does not really seem useful so let's just drop it.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=748413
+
+2015-04-24 17:10:59 +0100  Luis de Bethencourt <luis.bg@samsung.com>
+
+	* gst/audiotestsrc/gstaudiotestsrc.c:
+	* gst/encoding/gstencodebin.c:
+	* gst/playback/gstdecodebin2.c:
+	* gst/playback/gstplaybin2.c:
+	* gst/playback/gstplaysink.c:
+	* gst/playback/gsturidecodebin.c:
+	* gst/tcp/gstmultifdsink.c:
+	* gst/tcp/gstmultihandlesink.c:
+	* gst/tcp/gstmultioutputsink.c:
+	* gst/videotestsrc/gstvideotestsrc.c:
+	  remove unused enum items PROP_LAST
+	  This were probably added to the enums due to cargo cult programming and are
+	  unused. Removing them.
+
+2015-04-03 00:44:12 +0900  Wonchul Lee <chul0812@gmail.com>
+
+	* gst-libs/gst/audio/gstaudiodecoder.c:
+	* gst-libs/gst/audio/gstaudiodecoder.h:
+	  audiodecoder: Add sink and src query virtual method
+	  API: GstAudioDecoderClass::src_query()
+	  API: GstAudioDecoderClass::sink_query()
+	  https://bugzilla.gnome.org/show_bug.cgi?id=747293
+
+2015-04-23 15:57:37 +0100  Tim-Philipp Müller <tim@centricular.com>
+
+	* tests/check/Makefile.am:
+	  tests: define GST_CHECK_TEST_ENVIRONMENT_BEACON
+	  Make sure the test environment is set up.
+	  https://bugzilla.gnome.org//show_bug.cgi?id=747624
+
+2015-04-23 15:42:41 +0100  Tim-Philipp Müller <tim@centricular.com>
+
+	* configure.ac:
+	  configure: bump automake requirement to 1.14 and autoconf to 2.69
+	  This is only required for builds from git, people can still
+	  build tarballs if they only have older autotools.
+	  https://bugzilla.gnome.org//show_bug.cgi?id=747624
+
+2015-04-23 15:14:07 +0100  Tim-Philipp Müller <tim@centricular.com>
+
+	* .gitignore:
+	* tests/check/libs/.gitignore:
+	* tests/check/pipelines/.gitignore:
+	  Update .gitignore
+
+2015-04-23 09:50:12 +0530  Ravi Kiran K N <ravi.kiran@samsung.com>
+
+	* gst-libs/gst/video/video-converter.c:
+	  video-converter: n_lines member should be a guint not a boolean
+	  https://bugzilla.gnome.org/show_bug.cgi?id=748348
+
+2015-04-21 15:27:57 +0200  Guillaume Desmottes <guillaume.desmottes@collabora.co.uk>
+
+	* ext/ogg/gstoggdemux.c:
+	  oggdemux: fix event leaks
+	  gst_event_replace() takes its own reference on the event so we should drop
+	  ours after creating and storing an event using it.
+	  This fix leaks which can be reproduced using the
+	  validate.http.media_check.vorbis_theora_1_ogg scenario.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=748247
+
+2015-04-22 10:34:09 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+	* INSTALL:
+	  Remove INSTALL file
+	  autotools automatically generate this, and when using different versions
+	  for autogen.sh there will always be changes to a file tracked by git.
+
+2015-04-22 10:33:58 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+	* LICENSE_readme:
+	  Remove LICENSE_readme
+	  It's completely outdated and just confusing, better if people are
+	  forced to look at the actual code in question than trusting this file.
+
+2015-04-21 13:31:44 +0200  Wim Taymans <wtaymans@redhat.com>
+
+	* gst-libs/gst/video/video-scaler.c:
+	  video-scaler: fix YUY2 scaling some more
+	  Take into account the different steps between Y and UV when calculating
+	  the line size for vertical resampling or else we might not resample
+	  enough pixels and leave bad lines.
+	  Fixes https://bugzilla.gnome.org/show_bug.cgi?id=747790
+
+2015-04-21 13:16:29 +0200  Wim Taymans <wtaymans@redhat.com>
+
+	* gst-libs/gst/video/video-scaler.c:
+	  video-scaler: scale enough pixels in YUY2 (and friends) mode
+	  Fixes https://bugzilla.gnome.org/show_bug.cgi?id=747790
+
+2015-04-17 16:21:05 +0900  Hyunjun Ko <zzoon.ko@samsung.com>
+
+	* tests/check/libs/rtpbasedepayload.c:
+	  tests: rtpbasedepayload: fix crash in test when passing varargs
+	  Need to pass 64 bits where 64 bits are expected.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=748027
+
+2015-04-17 11:18:22 +0530  Ravi Kiran K N <ravi.kiran@samsung.com>
+
+	* gst-libs/gst/video/video-converter.c:
+	  video-converter: Remove unused variables
+	  Remove unused variables n_taps, max_taps in setup_scale()
+	  https://bugzilla.gnome.org/show_bug.cgi?id=748021
+
+2015-04-16 10:03:05 -0300  Thiago Santos <thiagoss@osg.samsung.com>
+
+	* gst-libs/gst/video/gstvideoutils.h:
+	  video: add missing part of documentation text
+
+2015-03-31 13:26:21 +0200  Guillaume Desmottes <guillaume.desmottes@collabora.co.uk>
+
+	* gst-libs/gst/pbutils/gstdiscoverer.c:
+	  discoverer: fix GstToc leak when parsing toc messages
+	  gst_message_parse_toc() returns a reffed GstToc which is owned by the
+	  GstDiscovererInfo. But we have to make sure we unref its previous value before
+	  setting the new one.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=747103
+
+2015-04-17 11:45:34 +0200  Edward Hervey <edward@centricular.com>
+
+	* win32/common/libgstallocators.def:
+	  win32: Update defs for new API
+
+2015-04-17 09:31:40 +0200  Wim Taymans <wtaymans@redhat.com>
+
+	* gst-libs/gst/allocators/gstdmabuf.c:
+	* gst-libs/gst/allocators/gstfdmemory.c:
+	* gst-libs/gst/allocators/gstfdmemory.h:
+	  allocators: make GstFdAllocator non-abstract
+	  Make the GstFdAllocator non-abstract because it is perfectly possible
+	  to make memory from a generic fd. Mark the memory as simply "fd".
+
+2015-04-15 11:24:17 +0200  Bernhard Miller <bernhard.miller@streamunlimited.com>
+
+	* gst/audioconvert/gstchannelmix.c:
+	  audioconvert: fix mixed usage of gint and gint32 in int matrix
+	  This is a fixup for b2db18cda2e4e7951655cb2a34108a8523b6eca9
+	  audioconvert: avoid float calculations when mixing integer-formatted channels
+	  The int matrix was using gint and gint32 synonymously, which can theoretically
+	  cause problems if gint and gint32 are actually different types.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=747005
+
+2015-04-14 12:47:07 +0100  Tim-Philipp Müller <tim@centricular.com>
+
+	* common:
+	* gst/gio/gstgio.c:
+	  gio: fix gvfs plugin dependencies
+	  Try harder to look for gvfs backend changes in the right
+	  place, to make sure the plugin gets reloaded when backends
+	  are removed or installed. We watch the gvfs mounts directory
+	  because the files there contain absolute paths to the
+	  backend executables, and those may not be in the usual gio
+	  path.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=747841
+
+2015-04-14 15:08:09 +0100  Luis de Bethencourt <luis.bg@samsung.com>
+
+	* tests/examples/seek/scrubby.c:
+	  examples: disconnect scale callback in scrubby
+	  When the position slider's button is released, disconnect the "value_changed"
+	  callback to avoid triggering false seek callbacks.
+
+2015-04-13 17:35:36 +0100  Luis de Bethencourt <luis.bg@samsung.com>
+
+	* tests/examples/seek/scrubby.c:
+	  examples: keep scrubby command consistent
+	  scrubby has two options, wav and playbin. Wav takes a file location so make
+	  the playbin option take a file location as well instead of an uri. This also
+	  means the usage help string will be correct for the playbin option.
+
+2015-04-13 17:28:45 +0100  Luis de Bethencourt <luis.bg@samsung.com>
+
+	* tests/examples/seek/scrubby.c:
+	  examples: no need to set intermediate states
+
+2015-04-13 16:09:26 +0100  Luis de Bethencourt <luis.bg@samsung.com>
+
+	* tests/examples/seek/scrubby.c:
+	  examples: wavparse doesn't need dynamic linking
+	  In scrubby, there is no need to link wavparse with the sink dynamically.
+	  The pad is available when the element is generated.
+	  Change video and audio sinks to the automatically detected sinks.
+
+2015-04-11 19:51:54 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+	* gst-libs/gst/video/gstvideodecoder.c:
+	  videodecoder: Break instead of return if default negotiation on GAP events fails
+	  Otherwise we're going to leak the event.
+
+2015-04-11 00:03:29 +0100  Tim-Philipp Müller <tim@centricular.com>
+
+	* gst/app/Makefile.am:
+	* gst/videorate/Makefile.am:
+	  app, videorate: fix CFLAGS and LIBADD order
+	  Make sure local headers are included before installed -base.
+
+2015-04-10 14:30:36 +0100  Luis de Bethencourt <luis.bg@samsung.com>
+
+	* tests/examples/playrec/playrec.c:
+	  examples: remove reference to 0.10 in playrec
+
+2015-04-10 13:41:39 +0100  Luis de Bethencourt <luis.bg@samsung.com>
+
+	* tests/examples/overlay/gtk-videooverlay.c:
+	  examples: remove deprecated function in gtk-videooverlay
+	  gtk_widget_set_double_buffered () has been deprecated since GTK 3.14.
+	  Also, widgets are realized automatically and gtk_wiget_realize () is only
+	  meant to be used in widget implementations.
+
+2015-04-09 17:03:11 +0200  Guillaume Desmottes <guillaume.desmottes@collabora.co.uk>
+
+	* ext/pango/gstbasetextoverlay.c:
+	  basetextoverlay: fix buffer leak in chain function
+	  If we don't consume the buffer by passing its reference to
+	  overlay->text_buffer then we need to unref it.
+	  Fix a leak with validate.file.playback.fast_forward.test5_mkv
+	  when running inside Valgrind.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=747602
+
+2015-04-08 18:32:29 +0300  Ilya Konstantinov <ilya.konstantinov@gmail.com>
+
+	* gst-libs/gst/app/gstappsrc.c:
+	  appsrc: docs grammar fixes
+	  https://bugzilla.gnome.org/show_bug.cgi?id=747516
+
+2015-04-09 16:49:44 +0100  Luis de Bethencourt <luis.bg@samsung.com>
+
+	* tests/examples/gio/giosrc-mounting.c:
+	  examples: add example description to giosrc-mounting
+	  Also, use GST_MESSAGE_TYPE instead of accessing the GstMessage structure
+
+2015-04-09 13:00:02 +0100  Vincent Penquerc'h <vincent.penquerch@collabora.co.uk>
+
+	* gst-libs/gst/audio/gstaudiobasesink.c:
+	  audiobasesink: fix ring buffer leak on open failure
+
+2015-04-09 12:59:38 +0100  Vincent Penquerc'h <vincent.penquerch@collabora.co.uk>
+
+	* gst-libs/gst/audio/gstaudiobasesrc.c:
+	  audiobasesrc: fix ring buffer leak on open failure
+
+2015-04-09 11:23:25 +0100  Luis de Bethencourt <luis.bg@samsung.com>
+
+	* tests/examples/encoding/encoding.c:
+	  examples: reuse variables in encoding example
+
+2015-04-08 20:49:24 -0700  Sebastian Dröge <sebastian@centricular.com>
+
+	* gst-libs/gst/audio/gstaudiodecoder.c:
+	  audiodecoder: Don't post error messages while holding the stream lock
+
+2015-04-08 20:48:39 -0700  Sebastian Dröge <sebastian@centricular.com>
+
+	* gst-libs/gst/audio/gstaudiodecoder.c:
+	  audiodecoder: Don't get and parse the current srcpad caps
+	  We only get here if we don't have any srcpad caps, and we're going
+	  to override the GstAudioInfo a few lines below anyway without ever
+	  using it if for whatever reason we get caps here.
+
+2015-04-08 20:45:58 -0700  Sebastian Dröge <sebastian@centricular.com>
+
+	* gst-libs/gst/video/gstvideodecoder.c:
+	  videodecoder: Try to invent default caps instead of setting none at all when getting a GAP event before CAPS
+	  Otherwise we would forward the GAP event without ever providing any caps,
+	  which then would make decodebin expose a srcpad without any caps set. That's
+	  confusing for applications and can lead to all kinds of interesting bugs.
+	  Instead do the same as already is done in GstAudioDecoder, and try to invent
+	  caps based on the sinkpad caps and the caps allowed by downstream and the
+	  srcpad template caps.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=747190
+
+2015-04-08 20:44:15 -0700  Sebastian Dröge <sebastian@centricular.com>
+
+	* gst/playback/gstdecodebin2.c:
+	  decodebin: Also log the pointer value of sticky events in debug output
+	  Makes it easier to follow them in the debug logs.
+
+2015-04-08 17:12:22 +0100  Luis de Bethencourt <luis.bg@samsung.com>
+
+	* tests/examples/dynamic/addstream.c:
+	  examples: remove unused return value in addstream
+	  Removing unused return value of pause_play_stream ().
+	  Fixing code style to satisfy the git hook.
+
+2015-04-08 15:31:39 +0100  Luis de Bethencourt <luis.bg@samsung.com>
+
+	* tests/examples/dynamic/sprinkle.c:
+	  examples: avoid sprinkle running endlessly
+	  Quit sprinkle when there are no more frequencies to remove.
+	  Also rename for readability the check for linking elements.
+
+2015-04-08 16:15:43 +0200  Edward Hervey <edward@centricular.com>
+
+	* common:
+	* tests/check/Makefile.am:
+	  tests: Use AM_TESTS_ENVIRONMENT
+	  Needed by the new automake test runner
+
+2015-04-07 16:43:59 +0100  Tim-Philipp Müller <tim@centricular.com>
+
+	* gst-libs/gst/rtp/gstrtcpbuffer.h:
+	  rtp: rtcpbuffer: fix typo in enum
+	  and in docs. Spotted by Rob Swain.
+
+2015-04-07 15:32:35 +0100  Luis de Bethencourt <luis.bg@samsung.com>
+
+	* tests/examples/app/appsink-src2.c:
+	  tests: remove unused filename string from appsink-src2
+
+2015-04-07 15:30:30 +0100  Luis de Bethencourt <luis.bg@samsung.com>
+
+	* tests/examples/app/appsink-src.c:
+	  tests: check file exists before running appsink-src
+
+2015-04-07 15:16:41 +0100  Luis de Bethencourt <luis.bg@samsung.com>
+
+	* tests/examples/app/appsink-src.c:
+	* tests/examples/app/appsink-src2.c:
+	* tests/examples/app/appsrc_ex.c:
+	  tests: add missing license headers for example apps
+
+2015-04-06 19:20:00 -0700  Sebastian Dröge <sebastian@centricular.com>
+
+	* gst-libs/gst/audio/gstaudiodecoder.c:
+	* gst-libs/gst/video/gstvideodecoder.c:
+	  {audio,video}decoder: Forward SEGMENT_DONE events immediately and drain decoders
+	  Otherwise we're going to wait with draining until the next data comes, which
+	  is a bit suboptimal and might take a long time... or maybe never happens.
+
+2015-04-05 13:53:38 +0100  Tim-Philipp Müller <tim@centricular.com>
+
+	* tests/check/elements/appsrc.c:
+	  tests: appsrc: clean up block_deadlock test and make it work in valgrind
+	  Remove all the bus watch and main loop code from the block_deadlock
+	  test, it's not needed: neither pipeline will ever post an EOS or ERROR
+	  message on the bus, and we're the only ones posting an error, from a
+	  timeout. Might just as well just sleep for a bit and then do whatever
+	  we want to do.
+	  Don't gratuitiously set tcase timeout, just use whatever is the
+	  default (or set via the environment).
+	  Make individual pipeline runs shorter.
+	  Check for valgrind and only do a handful iterations when running
+	  in valgrind, not 100 (each iteration takes about 4s on a core i7).
+	  Make videotestsrc output smaller buffers than the default resolution,
+	  we don't care about the buffer contents here anyway.
+	  Fixes test timeouts when run in valgrind.
+
+2015-04-05 12:30:39 +0100  Tim-Philipp Müller <tim@centricular.com>
+
+	* tests/check/elements/multisocketsink.c:
+	  tests: multisocketsink: fix flaky unit test
+	  On slower systems, or under high system load (e.g. check-valgrind),
+	  the sending_buffers_with_9_gstmemories test would sometimes fail,
+	  because the read call only returns 32 bytes instead of the full
+	  36 bytes expected. This is because multisocketsink might end up
+	  doing a partial write of 32 bytes first, and then write the
+	  missing 4 bytes later, but since we don't wait for all of data
+	  to be written, there's a short window where our read call in the
+	  unit test might then only receive the 32 bytes written so far,
+	  which makes it deeply unhappy.
+	  Instead, make sure we loop to read all bytes.
+
+2015-04-04 21:38:40 +0100  Tim-Philipp Müller <tim@centricular.com>
+
+	* gst/tcp/gstmultisocketsink.c:
+	  tcpserversink: don't error out if clients send us something, just ignore it
+	  We don't expect clients to send us any data, but if they do, just
+	  ignore it. Web browsers might send us an HTTP request for example,
+	  but some will still be happy if we just send them data without
+	  a proper HTTP response.
+	  There was a bug in the reading code path. We only have a small
+	  read buffer and would provoke an EWOULDBLOCK trying to read
+	  because we don't bail out of the loop early enough.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=743834
+
+2015-04-04 01:23:48 +0100  Tim-Philipp Müller <tim@centricular.com>
+
+	* tests/check/pipelines/basetime.c:
+	  tests: basetime: fix timeouts when running under valgrind
+	  This test sets a rather short timeout, increase this when
+	  we run under valgrind. Also add a short sleep to the
+	  fakesrc ! fakesink pipeline to avoid thrashing the CPU,
+	  which would often not stop the main loop when it should.
+	  Also fix wrong (0.10) return value from pad probe callback.
+
+2015-04-04 00:46:46 +0100  Tim-Philipp Müller <tim@centricular.com>
+
+	* gst/videorate/gstvideorate.c:
+	  videorate: downgrade left-over ERROR debug message
+
+2015-04-04 00:42:52 +0100  Tim-Philipp Müller <tim@centricular.com>
+
+	* gst/videorate/gstvideorate.c:
+	* tests/check/elements/videorate.c:
+	  videorate: fix a couple of memory leaks
+	  tests: videorate: fix leak in unit test
+
+2015-04-03 18:18:32 -0400  Nicolas Dufresne <nicolas.dufresne@collabora.com>
+
+	* docs/libs/gst-plugins-base-libs-sections.txt:
+	  doc: Add gst_video_encoder_get_allocator() to doc
+
+2015-04-03 21:00:53 +0100  Tim-Philipp Müller <tim@centricular.com>
+
+	* gst-libs/gst/tag/gstexiftag.c:
+	  tag: exiftag: don't try to convert utf-8 to latin1 if string is ASCII already
+	  Bypass g_convert/iconv if there's nothing to convert. That way,
+	  conversion won't fail on systems where iconv doesn't support
+	  converting utf-8 to latin1 and there's nothing to convert.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=723252
+
+2015-04-03 18:57:43 +0100  Tim-Philipp Müller <tim@centricular.com>
+
+	* autogen.sh:
+	* common:
+	  Automatic update of common submodule
+	  From bc76a8b to c8fb372
+
+2015-03-12 16:01:48 +0000  Vincent Penquerc'h <vincent.penquerch@collabora.co.uk>
+
+	* ext/ogg/gstoggdemux.c:
+	* ext/ogg/gstoggdemux.h:
+	  oggdemux: fix wrong duration on partial streams with a skeleton index
+	  When a stream has a skeleton index, the stream time is taken from that
+	  index. However, when part of the stream is captured, the index is
+	  invalid as its offsets are now wrong. To avoid this, we ignore the index
+	  when the last offset points beyond the end of the stream (when its
+	  byte length is known).
+	  https://bugzilla.gnome.org/show_bug.cgi?id=744070
+
+2015-03-18 16:32:53 +0000  Vincent Penquerc'h <vincent.penquerch@collabora.co.uk>
+
+	* ext/pango/gstbasetextoverlay.c:
+	  textoverlay: fix disappearing text with high deltax
+	  When deltax is large enough to cause the text to push past the
+	  width of the frame, it would disappear due to a bug in setting
+	  the layout width.
+	  While there, fix a log printing an incorrect width to set.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=739689
+
+2014-12-17 12:17:09 +0000  Vincent Penquerc'h <vincent.penquerch@collabora.co.uk>
+
+	* ext/ogg/gstoggmux.c:
+	  oggmux: fix deadlock when not pulling a buffer from collectpads
+	  oggmux keeps a cached buffer per pad, and pulls buffers from
+	  collectpads to this cached buffer for all pads before processing
+	  the best pad. In some cases, the move from collectpads buffer
+	  to cached buffer is delayed till next call. However, when there
+	  is only one pad, this can't be delayed till next call as there
+	  will be a deadlock since collectpads has no other pad to push to.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=740565
+
+2015-03-25 15:36:38 +0000  Vincent Penquerc'h <vincent.penquerch@collabora.co.uk>
+
+	* gst/playback/gstdecodebin2.c:
+	  decodebin2: fix deadlock on chain shutdown
+	  When shutting down the chain, we can get a deadlock when removing
+	  a pad, if that chain was being busy streaming but blocked (eg, while
+	  waiting for a queue to have free space).
+	  https://bugzilla.gnome.org/show_bug.cgi?id=746480
+
+2015-04-03 13:20:58 +0100  Luis de Bethencourt <luis.bg@samsung.com>
+
+	* tests/examples/seek/scrubby.c:
+	  examples: add license header to scrubby
+
+2015-03-19 10:48:15 +0000  Vincent Penquerc'h <vincent.penquerch@collabora.co.uk>
+
+	* gst-libs/gst/audio/gstaudiodecoder.c:
+	* gst-libs/gst/video/gstvideodecoder.c:
+	  audio,video: use gst_segment_is_equal instead of memcmp
+	  memcmp will blindly compare the reserved fields, as well as any
+	  padding the compiler may choose to sprinkle in GstSegment.
+	  Fixes valgrind complaints in unit tests, as well as some found via
+	  https://bugzilla.gnome.org/show_bug.cgi?id=738216
+
+2014-04-04 12:32:14 +0100  Vincent Penquerc'h <vincent.penquerch@collabora.co.uk>
+
+	* sys/xvimage/xvimageallocator.c:
+	  xvimagsink: fix failure to allocate large shared memory blocks
+	  A previous patch increased allocations by 15 bytes in order to ensure
+	  16 byte alignment for g_malloc blocks. However, shared memory is
+	  already block aligned, and this extra 15 bytes caused allocation
+	  to fail when we were already allocating to the shared memory limit,
+	  which is a lot smaller than typical available RAM.
+	  Fix this by removing the alignment slack when allocating shared
+	  memory.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=706066
+
+2014-04-04 12:40:14 +0100  Vincent Penquerc'h <vincent.penquerch@collabora.co.uk>
+
+	* sys/ximage/ximagepool.c:
+	  ximage: do not allocate extra alignment slack for shared memory
+	  A previous patch increased allocations by 15 bytes in order to ensure
+	  16 byte alignment for g_malloc blocks. However, shared memory is
+	  already block aligned, and this extra 15 bytes is not needed. Since
+	  shared memory limits are low compared to RAM, we remove this waste.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=727236
+
+2015-04-03 13:56:28 +0900  Chihyoung Kim <chihyoung2.kim@lge.com>
+
+	* configure.ac:
+	  tests: require Gtk+ 3.10 for examples
+	  Fixes build of playback and seek tests when an
+	  older Gtk+ version is present on the system.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=747283
+
+2014-12-09 13:18:42 +0100  Thibault Saunier <tsaunier@gnome.org>
+
+	* gst/videorate/gstvideorate.c:
+	* gst/videorate/gstvideorate.h:
+	* tests/check/elements/videorate.c:
+	  videorate: Detect framerate if not forced to variable downstream
+	  In case upstream does not provide videorate with framerate information,
+	  it will detect the current framerate from the buffer it received,
+	  but if downstream forces the use of variable framerate (most probably
+	  through the use of a caps filter with framerate = 0 / 1), videorate will
+	  respect that.
+	  And add some unit tests
+	  https://bugzilla.gnome.org/show_bug.cgi?id=734424
+
+2014-12-09 11:31:30 +0100  Thibault Saunier <tsaunier@gnome.org>
+
+	* gst/videorate/gstvideorate.c:
+	  videorate: Do not loop forever pushing first buffer when variable framerate
+	  In the case the framerate is variable (represented by framerate=0/1),
+	  we currently end up loop pushing the first buffer and then recompute
+	  diff1 and diff2 without updating the videorate->next_ts at all
+	  leading to infinitely looping pushing that first buffer.
+	  In the case of variable framerate, we should just compute the next_ts
+	  as previous_pts + previous_duration.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=734424
+
+2015-04-02 14:32:15 +0100  Luis de Bethencourt <luis.bg@samsung.com>
+
+	* tests/examples/playback/playback-test.c:
+	  playback-test: update deprecated API
+
+2015-04-02 11:33:12 +0100  Luis de Bethencourt <luis.bg@samsung.com>
+
+	* tests/icles/test-colorkey.c:
+	* tests/icles/test-videooverlay.c:
+	  tests: fix deprecated API in colorkey and videooverlay
+
+2015-04-02 11:14:08 +0100  Luis de Bethencourt <luis.bg@samsung.com>
+
+	* tests/examples/seek/scrubby.c:
+	  examples: fix deprecated API in scrubby
+
+2015-03-19 14:34:07 +0100  Guillaume Desmottes <guillaume.desmottes@collabora.co.uk>
+
+	* ext/ogg/gstoggdemux.c:
+	  oggdemux: don't use GST_ERROR() for debug messages
+	  Fix https://bugzilla.gnome.org/show_bug.cgi?id=746457
+
+2015-04-01 15:58:28 +0100  Luis de Bethencourt <luis.bg@samsung.com>
+
+	* tests/examples/audio/volume.c:
+	  tests: use elapsed label of volume example
+
+2015-03-30 11:24:46 +0200  Bernhard Miller <bernhard.miller@streamunlimited.com>
+
+	* gst/audioconvert/audioconvert.h:
+	* gst/audioconvert/gstchannelmix.c:
+	  audioconvert: avoid float calculations when mixing integer-formatted channels
+	  The patch calculates a second channel mixing matrix from the current one. The
+	  matrix contains the original values * (2^10) as integers. This matrix is used
+	  when integer-formatted channels are mixed.
+	  On a ARM Cortex-A8, single core, 800MHz this improves performance in a
+	  testcase from 29s to 9s for downmixing 6 channels to stereo.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=747005
+
+2015-04-01 15:02:13 +0100  Luis de Bethencourt <luis.bg@samsung.com>
+
+	* tests/examples/audio/volume.c:
+	  tests: fix deprecated API in audio volume example
+
+2015-04-01 14:37:23 +0100  Luis de Bethencourt <luis.bg@samsung.com>
+
+	* tests/examples/seek/jsseek.c:
+	  jsseek: update deprecated GTK API
+
+2015-04-01 13:50:51 +0100  Luis de Bethencourt <luis.bg@samsung.com>
+
+	* tests/examples/seek/jsseek.c:
+	  jsseek: switch deprecated GtkTable for GtkGrid
+
+2015-04-01 11:01:57 +0100  Luis de Bethencourt <luis.bg@samsung.com>
+
+	* tests/examples/audio/audiomix.c:
+	  tests: update deprecated GTK API in audiomix
+
+2015-03-31 11:21:25 +0200  Edward Hervey <bilboed@bilboed.com>
+
+	* gst-libs/gst/allocators/Makefile.am:
+	* gst-libs/gst/app/Makefile.am:
+	* gst-libs/gst/audio/Makefile.am:
+	* gst-libs/gst/fft/Makefile.am:
+	* gst-libs/gst/pbutils/Makefile.am:
+	* gst-libs/gst/riff/Makefile.am:
+	* gst-libs/gst/rtp/Makefile.am:
+	* gst-libs/gst/rtsp/Makefile.am:
+	* gst-libs/gst/sdp/Makefile.am:
+	* gst-libs/gst/tag/Makefile.am:
+	* gst-libs/gst/video/Makefile.am:
+	  introspection: Don't use g-ir-scanner cache at compile time
+	  It pollutes user directories and we don't need to cache it
+	  https://bugzilla.gnome.org/show_bug.cgi?id=747095
+
+2014-04-10 12:03:05 +0100  Vincent Penquerc'h <vincent.penquerch@collabora.co.uk>
+
+	* gst-libs/gst/tag/id3v2frames.c:
+	  id3v2: ignore RVA2 tags with more than 64 peak bits
+	  The spec for this does not say nor imply how this should be
+	  interpreted.  The previous code would try to shift by 64 bits,
+	  which is undefined.
+	  Coverity 1195119
+	  https://bugzilla.gnome.org/show_bug.cgi?id=727955
+
+2015-03-30 10:50:45 +0100  Luis de Bethencourt <luis.bg@samsung.com>
+
+	* gst/playback/gstplaybin2.c:
+	  playbin: avoid possible deference of null pointer
+	  For safety, check the pointer playbin->curr_group is valid before
+	  reading parameters of the structure.
+	  CID #1291624
+
+2015-03-28 16:59:23 +0100  Mark Nauwelaerts <mnauw@users.sourceforge.net>
+
+	* ext/ogg/gstoggdemux.c:
+	  oggdemux: resurrect some flow return handling
+	  https://bugzilla.gnome.org/show_bug.cgi?id=744572
+
+2015-03-27 20:16:28 +0100  Nicola Murino <nicola.murino@gmail.com>
+
+	* gst-libs/gst/app/gstappsrc.c:
+	  appsrc: handle a sample not having caps or a buffer more gracefully
+	  https://bugzilla.gnome.org/show_bug.cgi?id=746908
+
+2015-03-27 16:22:36 -0400  Nicolas Dufresne <nicolas.dufresne@collabora.com>
+
+	* gst-libs/gst/rtp/gstrtpbasedepayload.c:
+	* tests/check/libs/rtpbasedepayload.c:
+	  basedepay: Handle initial gaps and no clock-base
+	  When generating segment, we can't assume the first buffer is actually
+	  the first expected one. If it's not, we need to adjust the segment to
+	  start a bit before.
+	  Additionally, we if don't know when the stream is suppose to have
+	  started (no clock-base in caps), it means we need to keep everything in
+	  running time and only rely on jitterbuffer to synchronize.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=635701
+
+2015-03-26 23:53:44 -0300  Thiago Santos <thiagoss@osg.samsung.com>
+
+	* gst/playback/gstdecodebin2.c:
+	  decodebin: improve debug message by printing the object
+	  Print the pad object that EOS'd too early
+
+2015-03-27 13:39:43 +0800  Song Bing <b06498@freescale.com>
+
+	* gst-libs/gst/video/gstvideoencoder.c:
+	  videoencoder: Keep sticky events around when doing a soft reset
+	  The current code will first discard all frames, and then tries to copy
+	  all sticky events from the (now discarded) frames. Let's change the order.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=746865
+
+2015-03-26 18:03:12 -0700  David Schleef <ds@schleef.org>
+
+	* gst-libs/gst/riff/riff-ids.h:
+	  riff: Add FLLR tag
+
+2015-03-25 18:40:25 -0400  Nicolas Dufresne <nicolas.dufresne@collabora.com>
+
+	* gst-libs/gst/rtp/gstrtpbasedepayload.c:
+	* tests/check/libs/rtpbasedepayload.c:
+	  basedepayload: Fix generated segment
+	  This fixes playback position in RTSP.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=635701
+
+2015-03-25 08:20:03 -0300  Thiago Santos <thiagoss@osg.samsung.com>
+
+	* gst/playback/gstplaybin2.c:
+	  playbin: ignore new pads if it is shutting down
+	  If a new pad is added after playbin has been put to READY/NULL it
+	  should ignore new pads as it is shutting down.
+	  This can happen when the pipeline fails to preroll (is still in READY)
+	  and the user gives up on waiting or an error that doesn't reach
+	  the demuxer occurs (on some event handling) and it will continue to
+	  work and exposing pads while playbin has been put to NULL.
+	  Without this check an input-selector is created and set to PAUSED
+	  state, preventing playbin from properly shutting down in case it
+	  has data blocked inside it.
+
+2015-03-24 15:47:20 -0400  Nicolas Dufresne <nicolas.dufresne@collabora.co.uk>
+
+	* ext/theora/gsttheoradec.c:
+	  Revert "theoradec: Disable usage of crop meta"
+	  This reverts commit da52868f468bd75ddb595a3eb52aaa38ecbbac41.
+
+2015-03-24 15:18:36 -0400  Nicolas Dufresne <nicolas.dufresne@collabora.co.uk>
+
+	* gst/videorate/gstvideorate.c:
+	  videorate: Don't leak the pools
+	  gst_query_set_nth_alloction_pool() is transfer none on the pool, so we must
+	  unref the pool when done.
+
+2015-03-01 11:44:22 -0500  Nicolas Dufresne <nicolas.dufresne@collabora.co.uk>
+
+	* ext/theora/gsttheoradec.c:
+	  theoradec: Disable usage of crop meta
+	  This is a temporary workaround that simply disables usage of crop
+	  meta for now.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=741030
+
+2015-03-24 17:28:51 +0200  Ilya Konstantinov <ilya.konstantinov@gmail.com>
+
+	* gst/audioconvert/gstaudioquantize.c:
+	  audioconvert: Eliminate unsigned quantizers
+	  audio_convert_convert unpacks to default format (signed) before calling
+	  quantize, and the unsigned variants were equivalent to signed anyway,
+	  so we just get rid of them.
+
+2015-03-24 03:01:22 +0200  Ilya Konstantinov <ilya.konstantinov@gmail.com>
+
+	* gst/audioconvert/gstaudioquantize.c:
+	* gst/audioconvert/gstfastrandom.h:
+	  audioconvert: Avoid int division in quantization
+	  Since range size is always 2^n, we can simply use modulo (implemented
+	  with a bitmask).
+	  The previous implementation used 64-bit integer division, which is
+	  done in software on ARMv7. Although the divisor was constant, the
+	  division could not be transformed into "multiplication by magic number"
+	  since the dividend was 64-bit.
+	  The now-unused and not-so-fast gst_fast_random_(u)int32_range functions
+	  were removed.
+	  Also, implementing bug fixes:
+	  1) ADD_DITHER_TPDF_HF_I no longer discards bias.
+	  2) We change TPDF's noise range to be the same as RPDF's. Previously,
+	  RPDF's noise ranged:
+	  { bias - dither, bias + dither }
+	  while TPDF's noise ranged:
+	  { bias/2 - dither/2, bias/2 + dither/2 - 1 } +
+	  { bias/2 - dither/2, bias/2 + dither/2 - 1 } =
+	  { bias - dither, bias + dither - 2 }
+	  Now, both range:
+	  { bias - dither, bias + dither - 1 }
+	  https://bugzilla.gnome.org/show_bug.cgi?id=746661
+
+2015-02-16 09:25:03 +1000  Duncan Palmer <dpalmer@digisoft.tv>
+
+	* gst/playback/gstdecodebin2.c:
+	  decodebin2: Set multiqueue sizes before use-buffering.
+	  This fixes a race where the use-buffering property on a multiqueue was
+	  set before the queue depth was changed from it's high preroll limits to
+	  lower playback limits. This resulted in buffering messages being emitted
+	  by the multiqueue in the short window between use-buffering being
+	  set and the queue depth being reset.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=744308
+
+2015-03-24 10:46:44 +0000  Luis de Bethencourt <luis.bg@samsung.com>
+
+	* gst-libs/gst/allocators/gstfdmemory.c:
+	  Revert "fdmemory: freed pointer will always be 0"
+	  This reverts commit 7fbcefb753f944a79eae6957ea2789c960eb9eea.
+
+2015-03-24 10:19:05 +0000  Luis de Bethencourt <luis.bg@samsung.com>
+
+	* gst-libs/gst/allocators/gstfdmemory.c:
+	  fdmemory: freed pointer will always be 0
+
+2015-03-20 17:45:03 +0900  Wonchul Lee <chul0812@gmail.com>
+
+	* ext/ogg/gstoggdemux.c:
+	  oggdemux: Fix compiler warning
+	  gstoggdemux.c:1233:11: error: format specifies type 'long' but the argument has type 'ogg_int64_t' (aka 'long long') [-Werror,-Wformat]
+	  granule);
+	  ^~~~~~~
+	  https://bugzilla.gnome.org/show_bug.cgi?id=746512
+
+2015-03-19 13:31:07 +0100  Wim Taymans <wtaymans@redhat.com>
+
+	* win32/common/libgstallocators.def:
+	  defs: update
+
+2015-03-19 12:42:23 +0100  Wim Taymans <wtaymans@redhat.com>
+
+	* gst-libs/gst/video/video-converter.c:
+	  video-convert: fix clamping for 16 bits alpha mult
+
+2015-03-18 20:38:20 +0000  Tim-Philipp Müller <tim@centricular.com>
+
+	* gst-libs/gst/video/video-frame.c:
+	  video-frame: fix height/width assertions
+	  As commit 274984e8 states:
+	  When doing CROP META it is expected that the width and/or height
+	  in the GstVideoMeta is bigger or equal to the caps negotiated size.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=741030
+
+2015-03-18 15:12:03 +0100  Wim Taymans <wtaymans@redhat.com>
+
+	* gst-libs/gst/allocators/Makefile.am:
+	* gst-libs/gst/allocators/gstdmabuf.c:
+	* gst-libs/gst/allocators/gstfdmemory.c:
+	* gst-libs/gst/allocators/gstfdmemory.h:
+	  fdmemory: make a base class for allocating fd-backed memory
+	  Make a base class that can help with allocating fd-backed memory.
+	  Make dmabuf extend from the base class.
+	  We can now make methods to check if memory has an fd and get the fd for
+	  all the different types of fd-backed memory.
+
+2015-03-16 20:41:19 +0100  Sebastian Dröge <sebastian@centricular.com>
+
+	* tests/check/elements/multisocketsink.c:
+	  multisocketsink: Allocate enough memory on the stack in the test
+	  Otherwise we just overwrite other things on the stack and cause crashes.
+
+2015-03-16 11:53:24 +0000  Vincent Penquerc'h <vincent.penquerch@collabora.co.uk>
+
+	* ext/ogg/gstoggdemux.c:
+	  oggdemux: fix playback regression on streams with clipped data at start
+	  The code that was calculating the start granule from packet durations
+	  was interpreting a negative value as an error, but this is actually a
+	  valid case, to indicate clipping of data at start.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=743900
+
+2015-03-15 17:27:33 +0100  Wim Taymans <wtaymans@redhat.com>
+
+	* gst-libs/gst/allocators/gstdmabuf.c:
+	* gst-libs/gst/allocators/gstfdmemory.c:
+	* gst-libs/gst/allocators/gstfdmemory.h:
+	  fdmemory: add flags to control behaviour
+	  Add some flags to the GstFdMemory to control how memory is mapped and
+	  unmapped.
+
+2015-03-15 16:41:21 +0100  Wim Taymans <wtaymans@redhat.com>
+
+	* tests/check/Makefile.am:
+	* tests/check/libs/allocators.c:
+	  allocators: add allocators test
+
+2015-03-15 15:16:23 +0100  Wim Taymans <wtaymans@redhat.com>
+
+	* gst-libs/gst/allocators/Makefile.am:
+	* gst-libs/gst/allocators/gstdmabuf.c:
+	* gst-libs/gst/allocators/gstfdmemory.c:
+	* gst-libs/gst/allocators/gstfdmemory.h:
+	  fdmemory: add fd backed GstMemory to separate file
+	  Make a separate file for the code to handle the fd backed memory.
+	  This would make it possible later to add other allocators also using
+	  fd backed memory.
+
+2015-03-14 18:08:15 +0000  Thiago Santos <thiagoss@osg.samsung.com>
+
+	* gst/playback/gststreamsynchronizer.c:
+	  streamsynchronizer: fix deadlock condition
+	  The variables could have changed when the lock was released
+	  to push a gap event. Streamsynchronizer needs to check them
+	  again before going to sleep.
+	  Bonus: fix a comment typo
+
+2015-03-13 18:07:12 +0000  Ramiro Polla <ramiro.polla@collabora.co.uk>
+
+	* gst/playback/gstplaysink.c:
+	  playsink: remove redundant else statements
+
+2015-03-13 18:23:46 +0000  Ramiro Polla <ramiro.polla@collabora.co.uk>
+
+	* gst/playback/gstplaybin2.c:
+	  playbin: don't escape percent sign in documentation code sample
+
+2014-11-03 12:47:18 +0000  William Manley <will@williammanley.net>
+
+	* configure.ac:
+	* tests/check/Makefile.am:
+	* tests/check/pipelines/tcp.c:
+	  Add test_that_multisocketsink_and_socketsrc_preserve_meta
+	  This test is in a seperate commit to the previous two because it depends
+	  on and tests the functionality in both.
+
+2015-03-13 16:19:28 +0000  William Manley <will@williammanley.net>
+
+	* gst/tcp/gstsocketsrc.c:
+	  socketsrc: Add support for GstNetControlMessageMeta
+	  multisocketsink now understands the new GstNetControlMessageMeta to allow
+	  sending control messages (ancillary data) with data when writing to Unix
+	  domain sockets.
+	  Thanks to glib's `GSocketControlMessage` abstraction the code introduced
+	  in this commit is entirely portable and doesn't introduce and additional
+	  dependencies or conditionally compiled code, even if it is unlikely to be
+	  of much use on non-UNIX systems.
+
+2014-10-30 17:53:15 +0000  William Manley <will@williammanley.net>
+
+	* configure.ac:
+	* gst/tcp/gstmultisocketsink.c:
+	  multisocketsink: Add support for GstNetControlMessageMeta
+	  multisocketsink now understands the new GstNetControlMessageMeta to allow
+	  sending control messages (ancillary data) with data when writing to Unix
+	  domain sockets.
+	  A later commit will introduce a new socketsrc element which will similarly
+	  understand `GstNetControlMessageMeta`.  This, when used with a
+	  `GSocketControlMessage` of type `GUnixFDMessage` will allow GStreamer to
+	  send and receive file-descriptions in ancillary data, the first step to
+	  using memfds to implement zero-copy video IPC.
+	  Thanks to glib's `GSocketControlMessage` abstraction the code introduced
+	  in this commit is entirely portable and doesn't introduce and additional
+	  dependencies or conditionally compiled code, even if it is unlikely to be
+	  of much use on non-UNIX systems.
+
+2015-03-13 13:56:13 +0000  William Manley <will@williammanley.net>
+
+	* gst/tcp/gstsocketsrc.c:
+	* gst/tcp/gstsocketsrc.h:
+	* tests/check/pipelines/tcp.c:
+	  socketsrc: Add `connection-closed-by-peer` signal
+	  This provides notification that the socket in use was closed by the peer
+	  and gives an opportunity to replace it with a new one which is not
+	  closed, allowing reading from many sockets in order.
+	  I use this in pulsevideo to implement reconnection logic to handle the
+	  pulsevideo service dieing, such that is can be restarted without
+	  disrupting downstream.
+	  Fixes https://bugzilla.gnome.org/show_bug.cgi?id=739546
+
+2015-03-13 13:43:59 +0000  William Manley <will@williammanley.net>
+
+	* gst/tcp/gstsocketsrc.c:
+	  socketsrc: Tidy up usage of `g_object_unref`/`g_clear_object` and locking
+	  This is clearer, and should make future changes safer.  No functional
+	  change intended.
+	  See https://bugzilla.gnome.org/show_bug.cgi?id=739546
+
+2015-03-13 13:30:48 +0000  William Manley <will@williammanley.net>
+
+	* gst/tcp/gstsocketsrc.c:
+	  socketsrc: Refactor to simplify
+	  * Don't bother polling, just do a blocking read, the `GCancellable` will
+	  take care of unlocking.  This should also be faster on MS Windows where
+	  the GIO documentation for `g_socket_get_available_bytes` states: "Note
+	  that on Windows, this function is rather inefficient in the UDP case".
+	  * Implement `GstPushSrc.fill` rather than `GstPushSrc.create`.  This means
+	  that we will be using the downstream allocator which may be more
+	  efficient.  It also means that socketsrc is likely to respect its
+	  "blocksize" property (assuming that there is enough data available).
+	  See https://bugzilla.gnome.org/show_bug.cgi?id=739546
+
+2014-11-03 02:47:14 +0000  William Manley <will@williammanley.net>
+
+	* docs/plugins/Makefile.am:
+	* docs/plugins/gst-plugins-base-plugins-docs.sgml:
+	* docs/plugins/gst-plugins-base-plugins-sections.txt:
+	* docs/plugins/inspect/plugin-tcp.xml:
+	* gst/tcp/Makefile.am:
+	* gst/tcp/gstsocketsrc.c:
+	* gst/tcp/gstsocketsrc.h:
+	* gst/tcp/gsttcpplugin.c:
+	* tests/check/pipelines/tcp.c:
+	* win32/vs7/libgsttcp.vcproj:
+	* win32/vs8/libgsttcp.vcproj:
+	  tcp: Add element socketsrc
+	  `socketsrc` can be considered a source counterpart to `multisocketsink`.
+	  It can be considered a generalization of `tcpclientsrc` and
+	  `tcpserversrc`:  it contains all the logic required to communicate over
+	  the socket but none of the logic for creating the sockets/establishing
+	  the connection in the first place, allowing the user to accomplish this
+	  externally in whatever manner they wish making it applicable to other
+	  types of sockets besides TCP.
+	  This commit essentially copies the implementation directly from
+	  tcpserversrc.  Later patches will tidy the implementation up and
+	  re-implement `tcpclientsrc` and `tcpserversrc` in terms of `socketsrc`.
+	  See https://bugzilla.gnome.org/show_bug.cgi?id=739546
+
+2015-03-13 23:24:23 +0530  Arun Raghavan <git@arunraghavan.net>
+
+	* gst-libs/gst/audio/gstaudioringbuffer.c:
+	  audioringbuffer: Log with the ringbuffer object where possible
+
+2015-03-13 12:49:31 +0000  William Manley <will@williammanley.net>
+
+	* gst/tcp/gstmultisocketsink.c:
+	* tests/check/elements/multisocketsink.c:
+	  multisocketsink: Map `GstMemory`s individually when sending
+	  If a buffer is made up of non-contiguous `GstMemory`s `gst_buffer_map`
+	  has to copy all the data into a new `GstMemory` which is contiguous.  By
+	  mapping all the `GstMemory`s individually and then using scatter-gather
+	  IO we avoid this situation.
+	  This is a preparatory step for adding support to multisocketsink for
+	  sending file descriptors, where a GstBuffer may be made up of several
+	  `GstMemory`s, some of which are backed by a memfd or file, but I think this
+	  patch is valid and useful on its own.
+	  Fixes https://bugzilla.gnome.org/show_bug.cgi?id=746150
+
+2015-03-13 10:30:43 +0000  Nicolas Dufresne <nicolas.dufresne@collabora.com>
+
+	* gst-libs/gst/video/video-frame.c:
+	  video-frame: Relax width/height assertion
+	  When doing CROP META it is exepcted that the width and/or height in the
+	  GstVideoMeta is bigger or equal to the caps negotiated size.
+
+2015-03-12 16:32:31 +0000  Nicolas Dufresne <nicolas.dufresne@collabora.com>
+
+	* gst-libs/gst/video/gstvideopool.c:
+	  videopool: Choose the biggest buffer size
+	  We should respect what has been negotiated.
+
+2015-03-12 10:06:15 +0000  Vincent Penquerc'h <vincent.penquerch@collabora.co.uk>
+
+	* ext/ogg/gstoggdemux.c:
+	  oggdemux: recover from EOS when searching for chain in push mode
+	  If we get EOS when we're trying to build a chain, we disable seeking
+	  and continue instead of posting an error. This can happen for corner
+	  cases such as a stream with a video that stops before the end, for
+	  instance.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=745980
+
+2015-03-11 16:46:38 +0000  Vincent Penquerc'h <vincent.penquerch@collabora.co.uk>
+
+	* ext/ogg/gstoggdemux.c:
+	  oggdemux: fix seeking in files with a "missing" stream
+	  When looking for pages when seeking, we stop looking for non sparse
+	  streams if we don't find one within a given threshold. This fixes
+	  seeking filling up queues and blocking in corner cases such as an
+	  audio file with a pathological 1 frame video stream (yes, I saw one).
+	  https://bugzilla.gnome.org/show_bug.cgi?id=745980
+
+2015-03-13 01:06:57 +1100  Jan Schmidt <jan@centricular.com>
+
+	* docs/libs/gst-plugins-base-libs-docs.sgml:
+	* docs/libs/gst-plugins-base-libs-sections.txt:
+	* gst-libs/gst/video/gstvideometa.c:
+	* gst-libs/gst/video/video-chroma.c:
+	* gst-libs/gst/video/video-converter.c:
+	* gst-libs/gst/video/video-dither.c:
+	* gst-libs/gst/video/video-resampler.c:
+	* gst-libs/gst/video/video-resampler.h:
+	* gst-libs/gst/video/video-scaler.c:
+	* gst/videoscale/gstvideoscale.h:
+	  docs: Add new video functions and objects. Cleanup a little.
+	  Add GstVideoChroma, GstVideoDither, GstVideoScaler and friends to the docs.
+	  Remove and clean up a few obsolete/deleted refs and typos
+
+2015-03-12 12:17:11 +0000  Sebastian Dröge <sebastian@centricular.com>
+
+	* gst/playback/gstplaybin2.c:
+	  playbin: Disconnect signals and invalidate group if it fails to activate
+	  Otherwise playbin might move to the group directly after EOS of the next
+	  group, and then error out again.
+
+2015-02-01 03:39:07 +1100  Jan Schmidt <jan@centricular.com>
+
+	* ext/theora/gsttheoradec.c:
+	* ext/theora/gsttheoradec.h:
+	  theoradec: Fix decoding in the presence of GstVideoCropMeta
+	  Store the video info of the internal frame decode width/height
+	  separate to the exposed (cropped) frame info, so that it can be
+	  used for mapping the downstream allocated video frame buffer correctly
+	  when using GstVideoCropMeta.
+	  Fixes playback of files with sizes that aren't a multiple of 16-pixels
+	  width or height.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=741030
+
+2015-03-03 15:18:04 +0800  Song Bing <b06498@freescale.com>
+
+	* tests/check/pipelines/streamsynchronizer.c:
+	  streamsynchronizer: Should wait state change complete before start another state change
+	  Should wait state change complete before start another state change.
+	  Can't ensure can received async-done message when state change from PLAYING to PAUSED.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=736655
+
+2015-02-27 16:40:23 +0800  Song Bing <b06498@freescale.com>
+
+	* gst/playback/gststreamsynchronizer.c:
+	  streamsynchronizer: Remove unnecessary ERROR message.
+	  Remove unnecessary ERROR message.
+	  Push GAP will fail as flushing. Needn't ERROR message.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=736655
+
+2015-03-05 17:42:53 +0000  Vincent Penquerc'h <vincent.penquerch@collabora.co.uk>
+
+	* ext/ogg/gstoggdemux.c:
+	* ext/ogg/gstoggdemux.h:
+	  oggdemux: do not send seek events from the streaming thread
+	  This will usually deadlock, despite this patch being in master for
+	  quite some time and working fine. Nevertheless, we deem it to be
+	  not working, disregarding facts.
+	  As such, we fix it by keeping track of seek events, and sending
+	  them upstream from a separate thread. Buffers are then discarded
+	  till we get a new segment with the expected seqnum.
+
+2015-02-23 13:07:41 +0000  Vincent Penquerc'h <vincent.penquerch@collabora.co.uk>
+
+	* ext/ogg/gstoggdemux.c:
+	* ext/ogg/gstoggdemux.h:
+	  oggdemux: set correct seqnum on segment events after a seek in push mode
+	  There is already a seqnum field for this, which was used to overwrite
+	  the seqnum that was set by the push specific code.
+
+2015-02-23 11:30:36 +0000  Vincent Penquerc'h <vincent.penquerch@collabora.co.uk>
+
+	* ext/ogg/gstoggdemux.c:
+	  oggdemux: try harder to query duration from upstream
+	  READY->PAUSED can be too early as souphttpsrc can get the HTTP
+	  headers after this. Try again in the chain function.
+	  Also use seeking query to disable seeking if upstream reports
+	  being unseekable.
+
+2014-10-31 10:55:14 +0000  Vincent Penquerc'h <vincent.penquerch@collabora.co.uk>
+
+	* ext/ogg/gstoggdemux.c:
+	  oggdemux: add non flushing time seeking in push mode
+	  Some resetting code has to be done in the NEW_SEGMENT
+	  event handler, instead of the missing FLUSH_STOP one.
+	  Segment base was also wrongly accounted for. This was hidden
+	  by the fact that flushing resets the base.
+	  A discontinuity is now also signalled on seeking. We have to
+	  also ensure that the discontinuity "sticks" till a buffer
+	  with a valid timestamp goes out, or the audio decoder base
+	  class will ignore the discontinuity for purposes of keeping
+	  track of the current time.
+	  This allows using non flushing segment seeks for looping
+	  HTML audio in particular, and more generally non flushing seeks.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=729198
+
+2015-02-04 17:13:44 +0000  Vincent Penquerc'h <vincent.penquerch@collabora.co.uk>
+
+	* ext/ogg/gstoggdemux.c:
+	  oggdemux: fix wrong first granule
+	  The code was using the first nonnegative granulepos to seed the
+	  granule tracking, which appeared to work since headers have zero
+	  granulepos. However, this does not work for files with a hole at
+	  start, which are common in live streaming.
+	  The correct behavior is to look for the first granule, and subtract
+	  the duration of all the packets finishing on this page.
+	  The function which does this relies on the fact that the ogg_stream
+	  structure can be duplicated by shallow copy, in order to pull the
+	  packets from the first page(s) on the copy without affecting the
+	  original stream state.
+
+2015-03-11 09:48:20 +0100  Wim Taymans <wtaymans@redhat.com>
+
+	* gst-libs/gst/video/video-converter.c:
+	  video-converter: fix border handling of YUY2 and friends
+	  Don't draw the border in groups of 4 pixels for YUY2 but instead in
+	  groups of 2 with alternating U and V. This avoids a crash on odd width
+	  borders.
+
+2015-03-11 09:47:23 +0100  Wim Taymans <wtaymans@redhat.com>
+
+	* gst-libs/gst/video/video-converter.c:
+	  video-converter: force yuv conversion for border
+	  Make sure we always do yuv conversion for the border.
+
+2015-03-10 17:29:51 +0100  Wim Taymans <wtaymans@redhat.com>
+
+	* gst-libs/gst/video/video-format.c:
+	  video-format: fix A422 subsampling description
+
+2015-03-10 15:12:30 +0100  Wim Taymans <wtaymans@redhat.com>
+
+	* gst-libs/gst/video/video-converter.c:
+	  video-converter: add table based matrix8 implementation
+	  Based on patch from Mozzhuhin Andrey <nopscmn at gmail.com>
+	  Add a table based matrix8 multiplication implementation. The algorithm
+	  does not do any clipping so we need to make sure we never call this on
+	  input that might need to be clipped. In general, this algorithm is
+	  2 times faster than the orc optimized one and would be chosen for all
+	  RGB -> YUV conversions and some YUV->YUV and RGB->RGB conversions.
+	  Fixes https://bugzilla.gnome.org/show_bug.cgi?id=732186
+
+2015-03-10 11:55:11 +0100  Wim Taymans <wtaymans@redhat.com>
+
+	* gst/videotestsrc/gstvideotestsrc.c:
+	* gst/videotestsrc/gstvideotestsrc.h:
+	* gst/videotestsrc/videotestsrc.c:
+	* gst/videotestsrc/videotestsrc.h:
+	  videotestsrc: add all colors mode
+
+2015-03-10 10:19:22 +0100  Sebastian Dröge <sebastian@centricular.com>
+
+	* gst-libs/gst/video/video-converter.c:
+	* gst-libs/gst/video/video-format.c:
+	* gst-libs/gst/video/video-format.h:
+	* gst-libs/gst/video/video-info.c:
+	  video: Add support for 10 bit planar AYUV formats
+
+2015-03-10 09:27:08 +0000  Tim-Philipp Müller <tim@centricular.com>
+
+	* ext/vorbis/gstvorbisparse.c:
+	* gst-libs/gst/rtsp/gstrtsprange.c:
+	* gst/playback/gstsubtitleoverlay.c:
+	* gst/volume/gstvolume.c:
+	* sys/xvimage/xvimagepool.c:
+	* tests/check/libs/rtpbasedepayload.c:
+	* tests/check/libs/video.c:
+	  Fix double semicolons
+
+2015-03-09 21:35:59 -0400  Olivier Crete <olivier.crete@collabora.com>
+
+	* gst/videorate/gstvideorate.c:
+	  videorate: Accept any capsfeatures
+
+2015-03-09 16:28:02 +0100  Wim Taymans <wtaymans@redhat.com>
+
+	* gst-libs/gst/video/video-info.c:
+	  video-info: validate parsed colorimetry
+	  Validate the parsed colorimetry and reset to defaults when we get RGB
+	  with a matrix or YUV without a matrix.
+
+2015-03-09 16:01:19 +0100  Wim Taymans <wtaymans@redhat.com>
+
+	* gst-libs/gst/video/video-converter.c:
+	  video-converter: detect identity matrix
+	  Do nothing if we have an identity matrix conversion.
+
+2015-03-09 15:58:50 +0100  Wim Taymans <wtaymans@redhat.com>
+
+	* gst-libs/gst/video/video-info.c:
+	  video-info: use default colorimetry on error
+	  When we fail to parse the colorimetry property, fall back to the default
+	  colorimetry for the format and dimension instead of leaving things
+	  undefined.
+
+2015-03-09 11:25:41 +0000  Luis de Bethencourt <luis.bg@samsung.com>
+
+	* gst-libs/gst/video/gstvideoencoder.c:
+	  videoencoder: unused value
+	  Value set in ret is immediately overwritten in the next line outside of the if
+	  block. Run reset but don't store return.
+	  CID #1226470
+
+2015-03-09 12:13:44 +0100  Wim Taymans <wtaymans@redhat.com>
+
+	* gst-libs/gst/video/video-converter.c:
+	  video-converter: only convert to/from rgb when needed
+	  Only use the YUV->RGB matrix when we have YUV as input and only use the
+	  matrix when we need to make YUV output.
+	  Fixes https://bugzilla.gnome.org/show_bug.cgi?id=745780
+
+2015-03-09 11:12:46 +0100  Sebastian Dröge <sebastian@centricular.com>
+
+	* gst-libs/gst/rtp/gstrtpbuffer.c:
+	  rtpbuffer: Link to an explanation why the seqnum comparison function does the right thing even for wraparounds
+
+2015-02-22 21:13:35 +0100  Mark Nauwelaerts <mnauw@users.sourceforge.net>
+
+	* gst-libs/gst/video/gstvideodecoder.c:
+	  videodecoder: only return EOS upon clipping if applicable
+	  See also https://bugzilla.gnome.org/show_bug.cgi?id=709224
+
+2015-02-22 21:11:50 +0100  Mark Nauwelaerts <mnauw@users.sourceforge.net>
+
+	* gst-libs/gst/audio/gstaudiodecoder.c:
+	  audiodecoder: only return EOS upon clipping if applicable
+	  See also https://bugzilla.gnome.org/show_bug.cgi?id=709224
+
+2015-03-07 16:49:07 +0100  Sebastian Dröge <sebastian@centricular.com>
+
+	* gst-libs/gst/video/video-orc-dist.c:
+	* gst-libs/gst/video/video-orc-dist.h:
+	  video: Update orc generated C files
+
+2015-03-06 12:54:56 +0100  Wim Taymans <wtaymans@redhat.com>
+
+	* gst-libs/gst/video/video-converter.c:
+	  video-converter: add transfer full annotation for config
+
+2015-03-06 09:30:51 +0530  Ravi Kiran K N <ravi.kiran@samsung.com>
+
+	* gst-libs/gst/video/video-converter.c:
+	  video-converter: correct right-border location for YUY2, YVYU, UYVY
+	  Remove 'r_border /= 2' in convert_fill_border(). It doesn't
+	  take the right border to correct location.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=745719
+
+2015-03-05 12:31:06 +0100  Sebastian Dröge <sebastian@centricular.com>
+
+	* gst/volume/gstvolume.c:
+	  volume: Explicitly cast integers to doubles and then back to integers after multiplication
+	  gcc 4.9.1 on ARM seems to have a bug that causes it to cast the float to an
+	  integer first, resulting in a 0 scale factor for volume < 1.0.
+	  As a side effect this change here will also improve accuracy of the result a
+	  bit because we go via doubles instead of floats.
+	  https://gcc.gnu.org/bugzilla/show_bug.cgi?id=65325
+	  https://bugzilla.gnome.org/show_bug.cgi?id=745667
+
+2015-03-05 09:52:18 +0100  Wim Taymans <wtaymans@redhat.com>
+
+	* gst-libs/gst/video/video-converter.c:
+	  video-converter: avoid scaler when size is unchanged
+
+2015-03-04 16:45:35 +0100  Wim Taymans <wtaymans@redhat.com>
+
+	* gst-libs/gst/video/video-orc.orc:
+	* gst-libs/gst/video/video-scaler.c:
+	  video-scaler: add horizontal 2tap u16 orc function
+	  Add slightly faster u16 horizontal resampler orc function.
+
+2015-03-04 12:28:47 +0100  Wim Taymans <wtaymans@redhat.com>
+
+	* tests/check/libs/video.c:
+	  check: add another generic converter test
+	  Run conversion and scaling with borders.
+
+2015-03-04 12:21:33 +0100  Wim Taymans <wtaymans@redhat.com>
+
+	* gst-libs/gst/video/video-converter.c:
+	* tests/check/libs/video.c:
+	  video-converter: don't reuse the input line when adding borders
+	  When we need to add borders, we need a writable input line, so
+	  don't reuse the source memory directly.
+	  Fixes https://bugzilla.gnome.org/show_bug.cgi?id=745207
+
+2015-03-03 16:36:20 -0500  Nicolas Dufresne <nicolas.dufresne@collabora.com>
+
+	* ext/pango/gstbasetextoverlay.c:
+	  textoverlay: Re-render if video size changed
+	  https://bugzilla.gnome.org/show_bug.cgi?id=745554
+
+2015-03-03 22:56:37 +0530  Arun Raghavan <arun@centricular.com>
+
+	* gst-libs/gst/audio/gstaudiobasesink.c:
+	* gst-libs/gst/audio/gstaudiosink.c:
+	  audiobasesink: Reset audio clock if necessary
+	  When the ringbuffer is deactivated and then acquired, if the audio clock
+	  provided by the sink gets reset to zero, we need to add an offset to the
+	  clock to make sure that subsequent samples are written out at the right
+	  times. While we need to leave this to derived classes to take care of
+	  when they provide their own clock (since that clock may or may not be
+	  reset to zero), we can do this ourselves if we know the provided clock
+	  is our own (which does reset to zero on a re-acquire).
+
+2015-03-02 16:42:23 +0100  Wim Taymans <wtaymans@redhat.com>
+
+	* gst-libs/gst/video/video-converter.c:
+	  video-converter: avoid making scalers for outsize == 0
+
+2015-03-02 16:33:09 +0100  Wim Taymans <wtaymans@redhat.com>
+
+	* gst-libs/gst/video/video-converter.c:
+	* gst-libs/gst/video/video-scaler.c:
+	  video-converter: v-resample enough pixels
+	  When we are using the fast linear resampler, use the ->inc to calculate
+	  the first and last pixel we need so that we can do vertical resampling
+	  on the right amount of pixels.
+
+2015-03-02 15:07:34 +0100  Wim Taymans <wtaymans@redhat.com>
+
+	* gst-libs/gst/video/video-orc-dist.c:
+	* gst-libs/gst/video/video-orc.orc:
+	  video-orc: fix unpack functions for RGB/RGB15 on BE
+	  Fixes https://bugzilla.gnome.org/show_bug.cgi?id=745337
+
+2015-03-02 13:27:23 +0100  Wim Taymans <wtaymans@redhat.com>
+
+	* gst-libs/gst/video/video-format.c:
+	* gst-libs/gst/video/video-orc-dist.c:
+	* gst-libs/gst/video/video-orc-dist.h:
+	* gst-libs/gst/video/video-orc.orc:
+	  video-format: more fixes for big endian
+
+2015-03-02 12:26:23 +0100  Wim Taymans <wtaymans@redhat.com>
+
+	* gst-libs/gst/video/video-format.c:
+	* gst-libs/gst/video/video-orc-dist.c:
+	* gst-libs/gst/video/video-orc-dist.h:
+	* gst-libs/gst/video/video-orc.orc:
+	  video-format: add big-endian versions of RGB/BGR 15/16 pack/unpack
+	  Fixes https://bugzilla.gnome.org/show_bug.cgi?id=745337
+
+2015-02-28 13:31:41 +0000  Tim-Philipp Müller <tim@centricular.com>
+
+	* tools/gst-play.c:
+	  gst-play: fix compiler warning
+	  ‘return’ with no value, in function returning non-void
+
+2015-02-28 12:26:21 +0000  Tim-Philipp Müller <tim@centricular.com>
+
+	* tools/gst-play-1.0.1:
+	* tools/gst-play.c:
+	  gst-play: add keyboard shortcut to cycle through trick modes
+	  Make "t" activate trick modes and cycle through the various
+	  modes.
+
+2015-02-28 11:37:27 +0000  Tim-Philipp Müller <tim@centricular.com>
+
+	* tools/gst-play.c:
+	  gst-play: fix indentation
+	  Prevent gst-indent from messing up indentation, it
+	  really doesn't like the G_GNUC_PRINTF thing here.
+
+2015-02-27 20:22:59 +0000  Tim-Philipp Müller <tim@centricular.com>
+
+	* tests/check/libs/audiodecoder.c:
+	* tests/check/libs/audioencoder.c:
+	* tests/check/libs/videodecoder.c:
+	* tests/check/libs/videoencoder.c:
+	  tests: fix crashes in {audio,video}{decoder,encoder} tests on 32-bit
+	  Don't feed 64-bit integer variable into vararg function that expects
+	  an unsigned integer to go with GST_TAG_TRACK_NUMBER. This would
+	  cause crashes on 32-bit platforms, and if not that then test
+	  failures if the comparisons fail later (at least on big endian
+	  platforms).
+
+2015-02-27 15:07:36 -0500  Olivier Crête <olivier.crete@collabora.com>
+
+	* gst-libs/gst/pbutils/descriptions.c:
+	  pbutils: description: Make static strings static
+	  Otherwise, they're not guaranteed to still be valid when leaving the scope.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=673976
+
+2015-02-27 14:28:35 +0000  Tim-Philipp Müller <tim@centricular.com>
+
+	* tests/check/libs/pbutils.c:
+	  tests: pbutils: more checking of returned description strings
+	  https://bugzilla.gnome.org/show_bug.cgi?id=673976
+
+2015-02-27 00:36:43 +0530  Arun Raghavan <arun@accosted.net>
+
+	* gst/adder/gstadder.c:
+	  adder: Drop custom latency querying logic
+	  The default latency query handler now implements the same logic already.
+
+2015-02-26 14:47:28 +0000  Luis de Bethencourt <luis.bg@samsung.com>
+
+	* gst-libs/gst/video/video-converter.c:
+	  video-converter: remove check for below zero for unsigned int
+	  CLAMP checks both if value is '< 0' and '> max'. Value will never be a negative
+	  number since it in an unsigned integer. Removing that check and only checking
+	  if it is bigger than max and setting it appropriately.
+	  CID #1271606
+
+2015-02-26 12:06:23 +0100  Edward Hervey <bilboed@bilboed.com>
+
+	* gst/playback/gstdecodebin2.c:
+	  playback: Fix broken GList modification
+	  When we modify a GList (via g_list_delete_link), always reassign the
+	  new head to the original GList. Otherwise we end up with
+	  filtered_errors being corrupt (the head might have been the element
+	  removed)
+
+2015-02-26 11:06:35 +0000  Tim-Philipp Müller <tim@centricular.com>
+
+	* tools/gst-play-1.0.1:
+	  gst-play: add new keyboard shortcuts to man page
+
+2015-02-26 10:57:56 +0000  Tim-Philipp Müller <tim@centricular.com>
+
+	* tools/gst-play.c:
+	  gst-play: more fine-grained playback rate control
+	  Use smaller steps for lower rates to allow more
+	  fine-grained control. Handle jump across 0 properly
+	  from both sides (just flip direction where we would
+	  have gone down to 0 instead). Don't artificially
+	  limit rates to +/- 10x. Print new rate.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=745174
+
+2015-02-26 10:20:20 +0000  Tim-Philipp Müller <tim@centricular.com>
+
+	* tools/gst-play.c:
+	  gst-play: stash current playback rate in app structure
+	  https://bugzilla.gnome.org/show_bug.cgi?id=745174
+
+2015-02-25 18:52:11 +0100  Víctor Manuel Jáquez Leal <vjaquez@igalia.com>
+
+	* tools/gst-play.c:
+	  gst-play: support changing the playback rate in interactive mode
+	  It is fun to have this feature, also it is useful for testing decoders.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=745174
+
+2015-02-25 17:00:34 +0100  Wim Taymans <wtaymans@redhat.com>
+
+	* gst-libs/gst/video/video-converter.c:
+	  video-converter: we can use the scaler without scalers to copy
+
+2015-02-25 16:50:02 +0100  Wim Taymans <wtaymans@redhat.com>
+
+	* gst-libs/gst/video/video-converter.c:
+	  video-converter: only make a scaler when we are scaling
+	  Only make a scaler when we are actually doing any scaling. Without
+	  scalers, the scale function will simply do a copy.
+
+2015-02-25 16:49:20 +0100  Wim Taymans <wtaymans@redhat.com>
+
+	* gst-libs/gst/video/video-scaler.c:
+	  video-scaler: add support for copy
+	  When no scalers are given, simply do a copy of the requested area.
+
+2015-02-25 16:15:52 +0100  Wim Taymans <wtaymans@redhat.com>
+
+	* gst-libs/gst/video/video-converter.c:
+	  video-converter: activate scaler fastpath depending on method
+	  Only activate the scaler fastpath for x2 up and downscale when the
+	  scaler method is respectively nearest and linear because that is what
+	  those fastpaths really implement.
+
+2015-02-25 15:33:26 +0100  Wim Taymans <wtaymans@redhat.com>
+
+	* gst-libs/gst/video/video-scaler.c:
+	  video-scaler: add scaler optimization
+	  If we are vertically downscaling, it is better to first downscale and
+	  then do the horizontal scaling in most cases.
+
+2015-02-25 15:32:57 +0100  Wim Taymans <wtaymans@redhat.com>
+
+	* gst-libs/gst/video/video-scaler.c:
+	  video-scaler: remove unused case
+
+2015-02-25 11:38:17 +0100  Wim Taymans <wtaymans@redhat.com>
+
+	* gst-libs/gst/video/video-converter.c:
+	* gst-libs/gst/video/video-converter.h:
+	  video-converter: don't overwrite border alpha
+	  Let border alpha and image alpha be independent.
+
+2015-02-24 17:33:57 +0100  Wim Taymans <wtaymans@redhat.com>
+
+	* gst-libs/gst/video/video-converter.c:
+	  video-converter: use 1.0 as default alpha
+
+2015-02-24 17:26:31 +0100  Wim Taymans <wtaymans@redhat.com>
+
+	* gst-libs/gst/video/video-converter.c:
+	* gst-libs/gst/video/video-converter.h:
+	* gst-libs/gst/video/video-orc-dist.c:
+	* gst-libs/gst/video/video-orc-dist.h:
+	* gst-libs/gst/video/video-orc.orc:
+	  video-converter: add alpha handling
+	  Add support for alpha. Make it possible to copy, set and multiply the
+	  alpha value of a frame during conversion.
+	  Set the border alpha to 0xff by default.
+	  Go over some of the fastpaths and add alpha handling.
+	  Fixes https://bugzilla.gnome.org/show_bug.cgi?id=745006
+
+2015-02-24 17:20:53 +0100  Wim Taymans <wtaymans@redhat.com>
+
+	* gst-libs/gst/video/video-converter.c:
+	  video-converter: fix chroma subsampling
+	  Also adjust the output line number with the offset.
+
+2015-02-24 10:01:18 +0100  Wim Taymans <wtaymans@redhat.com>
+
+	* gst-libs/gst/video/video-converter.c:
+	  video-converter: disable fastpath when scaling and gamma
+	  Disable the fastpath when scaling and doing gamma remap.
+
+2015-02-24 09:54:18 +0100  Wim Taymans <wtaymans@redhat.com>
+
+	* gst-libs/gst/video/video-converter.c:
+	  video-converter: don't do gamma on alpha channel
+	  The alpha channel is not supposed to be gamma encoded.
+
+2015-02-24 16:06:08 +0000  Vincent Penquerc'h <vincent.penquerch@collabora.co.uk>
+
+	* gst/playback/gstdecodebin2.c:
+	  decodebin: fix deadlock when resetting buffering
+	  This function is static, and only ever called with the expose lock
+	  taken. It thus has no reason to take this lock itself.
+	  This was introduced by one of my locking fixes from 741355.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=741355
+
+2015-02-24 12:38:10 +0000  Tim-Philipp Müller <tim@centricular.com>
+
+	* gst-libs/gst/video/video-converter.c:
+	  video-converter: minor docs fix
+
+2014-05-27 13:54:06 +0000  Vincent Penquerc'h <vincent.penquerch@collabora.co.uk>
+
+	* gst/playback/gstplaybin2.c:
+	  playbin: forward template and ring buffer settings to existing decodebins
+	  https://bugzilla.gnome.org/show_bug.cgi?id=744844
+
+2015-02-23 17:24:52 +0000  Luis de Bethencourt <luis.bg@samsung.com>
+
+	* gst/playback/gstdecodebin2.c:
+	  decodebin: move null check
+	  Check if dbin->decode_chain is NULL before running drain_and_switch_chains()
+	  because if it is, we shouldn't run that function or it will segfault.
+	  CID #1271074
+
+2015-02-23 01:32:14 +1100  Jan Schmidt <jan@centricular.com>
+
+	* gst-libs/gst/audio/gstaudiodecoder.c:
+	  audiodecoder: Don't send pending events before decode
+	  Make sure to update the output segment to track the segment
+	  we're decoding in, but don't actually push it downstream until
+	  after buffers are decoded.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=744806
+
+2015-02-08 05:19:25 +1100  Jan Schmidt <jan@centricular.com>
+
+	* gst-libs/gst/video/gstvideodecoder.c:
+	* gst-libs/gst/video/gstvideodecoder.h:
+	  videodecoder: Add drain() vfunc
+	  drain() is a new vfunc which does what finish() does, while
+	  explicitly requiring the decoder be able to continue processing
+	  data afterward.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=734617
+
+2015-02-22 16:57:57 +0100  Mark Nauwelaerts <mnauw@users.sourceforge.net>
+
+	* gst-libs/gst/video/gstvideodecoder.c:
+	  Revert "videodecoder: drain current segment upon new one to ensure correct flow return"
+	  This reverts commit cc1b4eaf9ebe4568f9c2c64338cef1b2edbdca3f.
+	  See https://bugzilla.gnome.org/show_bug.cgi?id=734617
+
+2015-02-22 16:57:50 +0100  Mark Nauwelaerts <mnauw@users.sourceforge.net>
+
+	* gst-libs/gst/audio/gstaudiodecoder.c:
+	  Revert "audiodecoder: drain current segment upon new one to ensure correct flow return"
+	  This reverts commit 696b8cdc40f033ff0a45ebe620279130152fb2f8.
+	  See https://bugzilla.gnome.org/show_bug.cgi?id=734617
+
+2015-02-21 17:42:08 +0100  Mark Nauwelaerts <mnauw@users.sourceforge.net>
+
+	* gst-libs/gst/video/gstvideodecoder.c:
+	  videodecoder: drain current segment upon new one to ensure correct flow return
+	  See also https://bugzilla.gnome.org/show_bug.cgi?id=709224
+
+2015-02-21 17:41:50 +0100  Mark Nauwelaerts <mnauw@users.sourceforge.net>
+
+	* gst-libs/gst/audio/gstaudiodecoder.c:
+	  audiodecoder: drain current segment upon new one to ensure correct flow return
+	  See also https://bugzilla.gnome.org/show_bug.cgi?id=709224
+
+2015-02-20 12:34:11 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+	* gst/playback/gstdecodebin2.c:
+	  decodebin: Only consider non-parser factories for generating the post-parser capsfilter caps
+	  Otherwise if there are multiple parsers we would most likely break negotiation
+	  of the stream-format/alignment wanted by the decoders as parsers generally
+	  support all possible stream-formats and alignments.
+
+2015-02-19 15:51:19 -0300  Thiago Santos <thiagoss@osg.samsung.com>
+
+	* gst-libs/gst/audio/gstaudiodecoder.c:
+	* gst-libs/gst/audio/gstaudioencoder.c:
+	* gst-libs/gst/video/gstvideodecoder.c:
+	* gst-libs/gst/video/gstvideoencoder.c:
+	  audio: video: fix a few GI annotations
+	  transfer-full -> transfer full
+	  @Since -> Since
+
+2015-02-05 12:07:50 +0000  Vincent Penquerc'h <vincent.penquerch@collabora.co.uk>
+
+	* gst/playback/gstdecodebin2.c:
+	  decodebin: fix deadlock between downward state change and pad addition
+	  If caps on a newly added pad are NULL, analyze_new_pad will try to
+	  acquire the chain lock to add a probe to the pad so the chain can
+	  be built later. This comes from the streaming thread, in response
+	  to headers or other buffers causing this pad to be added, so the
+	  stream lock is taken.
+	  Meanwhile, another thread might be destroying the chain from a
+	  downward state change. This will cause the chain to be freed with
+	  the chain lock taken, and some elements are set to NULL here, which
+	  can include the parser. This causes pad deactivation, which tries
+	  to take the element's pad's stream lock, deadlocking.
+	  Fix this by keeping track of which elements need setting to NULL,
+	  and only do this after the chain lock is released. Only the chain
+	  manipulation needs to be locked, not the elements' state changes.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=741355
+
+2015-02-04 11:46:09 +0000  Vincent Penquerc'h <vincent.penquerch@collabora.co.uk>
+
+	* gst/playback/gstdecodebin2.c:
+	  decodebin: guard against the decode chain going while a pad is added
+	  https://bugzilla.gnome.org/show_bug.cgi?id=741355
+
+2015-02-03 17:06:43 +0000  Vincent Penquerc'h <vincent.penquerch@collabora.co.uk>
+
+	* gst/playback/gstdecodebin2.c:
+	  decodebin: possible fix for deadlock when spamming "next song"
+	  There was a deadlock between a thread changing decodebin/demuxer
+	  state from PAUSED to READY, and another thread pushing data
+	  when starting.
+	  From the stack trace at
+	  https://bug741355.bugzilla-attachments.gnome.org/attachment.cgi?id=292471,
+	  I deduce the following is happening, though I did not reproduce the
+	  problem so I'm not sure this patch fixes it.
+	  The streaming thread (thread 2 in that stack trace) takes the demuxer's
+	  sink pad's stream lock in gst_ogg_demux_perform_seek_pull and will
+	  activate a new chain. This ends up causing the expose lock being taken
+	  in _pad_added_cb in decodebin.
+	  Meanwhile, a state changed is triggered on thread 1, which takes the
+	  expose lock in decodebin in gst_decode_bin_change_state, then frees
+	  the previous chain, which ends up calling gst_pad_stop_task on the
+	  demuxer's task, which in turn takes the demuxer's sink pad's stream
+	  lock, deadlocking as both threads are now waiting for each other.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=741355
+
+2015-02-18 20:58:15 -0300  Thiago Santos <thiagoss@osg.samsung.com>
+
+	* gst-libs/gst/tag/gsttagdemux.c:
+	  tagdemux: ensure tags have been fetched before pulling data
+	  Otherwise upstream can get confused about offsets as there will
+	  be a jump once the tags have been parsed due to the stripped area.
+	  If upstream pulls from 0 to 100, and then tagdemux does the
+	  tag reading and finds out that the first 200 bytes are the tag, the
+	  next pull from upstream will have an offset of 200 bytes. So
+	  upstream will get the following data:
+	  0 - 100, 300 - (EOS), as it will continue requesting from where
+	  it has last stopped, but tagdemux will add an offset to skip the
+	  tags.
+	  This patch makes sure that the tags have been parsed and skipped
+	  since the first pull range call.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=744580
+
+2015-02-19 01:30:05 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+	* gst/playback/gsturidecodebin.c:
+	  uridecodebin: Reset the default query return value when the iterator has to resync
+
+2015-02-19 01:21:47 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+	* gst/playback/gsturidecodebin.c:
+	  uridecodebin: Let the latency query fail if one of the source queries fails
+
+2015-02-18 11:34:15 +0000  Tim-Philipp Müller <tim@centricular.com>
+
+	* gst-libs/gst/pbutils/descriptions.c:
+	  pbutils: description: fix MPEG-2 video profiles in description
+	  We would accidentally use the profile nick as profile name
+	  in the description for MPEG video that's not version 4.
+
+2015-01-29 18:49:45 -0500  Olivier Crête <olivier.crete@collabora.com>
+
+	* gst/playback/gsturidecodebin.c:
+	  uridecodebin: Pass object, not GValue to debug print
+
+2015-02-16 23:54:28 +0000  Tim-Philipp Müller <tim@centricular.com>
+
+	* ext/libvisual/gstaudiovisualizer.c:
+	  audiovisualizer: don't use private GMutex implementation details
+	  Don't use private GMutex implementation details to check
+	  whether it has been freed already or not. Just turn dispose
+	  function into finalize function which will only be called
+	  once, that way we can just clear the mutex unconditionally.
+
+2015-02-15 13:51:36 +0800  Song Bing <b06498@freescale.com>
+
+	* gst/playback/gststreamsynchronizer.c:
+	  streamsynchronizer: Use the same waiting function for EOS and stream switches
+	  Also improve the waiting condition for stream switches, which was assuming
+	  before that the condition variable will only stop waiting once when it is
+	  signaled. But the documentation says that there might be spurious wakeups.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=736655
+
+2015-01-26 11:14:13 +0800  Song Bing <b06498@freescale.com>
+
+	* tests/check/Makefile.am:
+	* tests/check/pipelines/streamsynchronizer.c:
+	  streamsynchronizer: Unit test for streamsynchronizer's EOS handling
+	  Test that a pipeline can change from PLAYING to PAUSED and back in
+	  the following scenarios:
+	  1. One track reach EOS after pushed some buffers while another track
+	  still pushes buffers
+	  2. One track reach EOS without buffers while another track still pushes
+	  buffers
+	  https://bugzilla.gnome.org/show_bug.cgi?id=736655
+
+2015-01-12 17:40:25 +0800  Song Bing <b06498@freescale.com>
+
+	* gst/playback/gststreamsynchronizer.c:
+	  streamsynchronizer: Send GAP events from the pads' streaming threads
+	  Change the GAP events that are currently sent from the chain function of
+	  the current pad to all other EOS pads. They should instead be sent from
+	  their own streaming threads.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=736655
+
+2015-01-12 16:08:33 +0800  Song Bing <b06498@freescale.com>
+
+	* gst/playback/gststreamsynchronizer.c:
+	* gst/playback/gststreamsynchronizer.h:
+	  streamsynchronizer: Send GAP event to finish preroll when change state from PLAYING to PAUSED
+	  Wait in the event function when EOS is received until all pads are EOS
+	  and then forward the EOS event from each pads own event function.
+	  Also send a new GAP event for EOS pads from the event function whenever
+	  going from PLAYING->PAUSED by shortly waking up the GCond. This is needed
+	  to allow sinks to pre-roll again, as they did not receive EOS yet because
+	  we blocked that, but also will never get data again.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=736655
+
+2015-02-16 09:48:03 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+	* gst-libs/gst/pbutils/codec-utils.c:
+	  Revert "codec-utils: Handle the two rext profiles for h265"
+	  This reverts commit 19b93566801a56e7b043a670b7edcf8f2da06619.
+	  These two "profiles" are actually a complete set of profiles, which we will
+	  need to handle separately. Unfortunately it seems like we need information
+	  from the SPS to detect the exact profile.
+
+2015-02-15 20:08:36 +0000  Tim-Philipp Müller <tim@centricular.com>
+
+	* gst-libs/gst/pbutils/descriptions.c:
+	  pbutils: description: move some code into utility function
+
+2015-02-15 20:05:13 +0000  Tim-Philipp Müller <tim@centricular.com>
+
+	* gst-libs/gst/pbutils/descriptions.c:
+	* tests/check/libs/pbutils.c:
+	  pbutils: descriptions: add H.265 profile to description if available
+	  https://bugzilla.gnome.org/show_bug.cgi?id=673976
+
+2015-02-15 19:03:38 +0000  Tim-Philipp Müller <tim@centricular.com>
+
+	* gst-libs/gst/pbutils/descriptions.c:
+	* tests/check/libs/pbutils.c:
+	  pbutils: descriptions: add MPEG-4 video profile to description if available
+	  https://bugzilla.gnome.org/show_bug.cgi?id=673976
+
+2015-02-15 18:37:38 +0000  Tim-Philipp Müller <tim@centricular.com>
+
+	* gst-libs/gst/pbutils/descriptions.c:
+	* tests/check/libs/pbutils.c:
+	  pbutils: descriptions: add Dirac/VC-2 profile to description if available
+	  https://bugzilla.gnome.org/show_bug.cgi?id=673976
+
+2015-02-15 18:14:18 +0000  Tim-Philipp Müller <tim@centricular.com>
+
+	* gst-libs/gst/pbutils/descriptions.c:
+	* tests/check/libs/pbutils.c:
+	  pbutils: descriptions: add H.264 profile to description if available
+	  https://bugzilla.gnome.org/show_bug.cgi?id=673976
+
+2015-02-13 22:56:00 +0000  Tim-Philipp Müller <tim@centricular.com>
+
+	* gst-libs/gst/pbutils/install-plugins.c:
+	  install-plugins: fix indentation and add Since marker
+	  Forgot to squash this into the actual patch before pushing.
+
+2015-02-13 22:49:04 +0000  Tim-Philipp Müller <tim@centricular.com>
+
+	* docs/libs/gst-plugins-base-libs-sections.txt:
+	* win32/common/libgstpbutils.def:
+	  install-plugins: add new API to exports .def and to docs
+	  https://bugzilla.gnome.org/show_bug.cgi?id=744465
+
+2015-02-03 10:47:11 +0100  Kalev Lember <kalevlember@gmail.com>
+
+	* gst-libs/gst/pbutils/install-plugins.c:
+	* gst-libs/gst/pbutils/install-plugins.h:
+	  install-plugins: Add API to suppress confirmation before searching
+	  The new gst_install_plugins_context_set_confirm_search() API can be used
+	  to pass a hint to modify the behaviour of the external installer
+	  process.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=744465
+
+2015-02-02 16:16:46 +0100  Kalev Lember <kalevlember@gmail.com>
+
+	* gst-libs/gst/pbutils/install-plugins.c:
+	* gst-libs/gst/pbutils/install-plugins.h:
+	  install-plugins: Add API for passing desktop ID and startup ID
+	  The new gst_install_plugins_context_set_desktop_id() and
+	  gst_install_plugins_context_set_startup_notification_id() API can be
+	  used to pass extra details to the external installer process.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=744465
+
+2015-02-12 12:08:16 +0100  Wim Taymans <wtaymans@redhat.com>
+
+	* gst-libs/gst/video/video-orc-dist.c:
+	* gst-libs/gst/video/video-orc-dist.h:
+	  video-orc: update with new methods
+
+2015-02-12 11:38:20 +0100  Wim Taymans <wtaymans@redhat.com>
+
+	* gst-libs/gst/video/video-format.c:
+	* gst-libs/gst/video/video-orc.orc:
+	  video-format: add orc function for RGB15/16 unpack
+
+2015-02-10 21:57:02 -0800  Stefan Sauer <ensonic@users.sf.net>
+
+	* gst/playback/gstplaybin2.c:
+	  playbin: improve debug log
+	  Log the human readable pad_link_return desc as well.
+
+2015-02-11 15:57:54 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+	* gst-libs/gst/pbutils/codec-utils.c:
+	  codec-utils: Handle the two rext profiles for h265
+	  These values are for now taken from x265 and need to be checked against
+	  the spec. Especially we need to check if information from other fields
+	  need to be taken into consideration too, e.g. the bit depth and chroma
+	  index from the SPS.
+	  This however makes 4:4:4 output of x265enc actually work.
+
+2015-02-11 13:43:11 +0100  Sebastian Dröge <sebastian@centricular.com>
+
+	* gst-libs/gst/app/gstappsrc.c:
+	* gst-libs/gst/audio/gstaudiobasesink.c:
+	* gst-libs/gst/audio/gstaudiodecoder.c:
+	* gst-libs/gst/audio/gstaudioencoder.c:
+	* gst-libs/gst/video/gstvideodecoder.c:
+	* gst-libs/gst/video/gstvideoencoder.c:
+	* gst/adder/gstadder.c:
+	* gst/playback/gsturidecodebin.c:
+	  Improve and fix LATENCY query handling
+	  This now follows the design docs everywhere, especially the maximum latency
+	  handling.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=744106
+
+2015-02-11 13:32:25 +0100  Wim Taymans <wtaymans@redhat.com>
+
+	* gst-libs/gst/video/video-converter.c:
+	* gst-libs/gst/video/video-scaler.c:
+	* gst-libs/gst/video/video-scaler.h:
+	* win32/common/libgstvideo.def:
+	  video-scaler: add 2d scaler
+	  Make a convenience function that combines 2 scalers to perform a 2d
+	  scale. This removes quite a bit of overhead in method calls when doing a
+	  typical scale and it also can reuse a piece of unused memory in the
+	  vertical scaler.
+	  Use the 2d scaler in video-converter and remove the other scalers and
+	  temp memory.
+
+2015-02-10 16:43:03 +0100  Wim Taymans <wtaymans@redhat.com>
+
+	* gst-libs/gst/video/video-converter.c:
+	  video-converter: Fix YUY2 formats and friends
+	  Only merge scalers for selected formats.
+	  Use nearest neighbour scaling for chroma when doing nearest neighbour
+	  for the luma.
+	  Also fastpath GRAY16_OE in nearest neighbour.
+	  configure parameters correctly for packed fastpath.
+
+2015-02-10 16:40:21 +0100  Wim Taymans <wtaymans@redhat.com>
+
+	* gst-libs/gst/video/video-scaler.c:
+	  video-scaler: Small performance tweaks
+	  Small performance tweaks for RGB and friends.
+	  Add, but ifdef out, alternative nearest neighbour scaling, it is slower
+	  than the current table based version.
+	  Use memcpy instead of orc_memcpy because it is measurably faster.
+	  Fix YUY2 and friends vertical scaling.
+
+2015-02-10 16:44:38 +0100  Sebastian Dröge <sebastian@centricular.com>
+
+	* gst-libs/gst/video/video-scaler.c:
+	  video-scaler: Guard against (impossible) bits!=16 && bits!=8 case to fix compiler warning with clang
+	  video-scaler.c:1331:14: error: variable 'func' is used uninitialized whenever 'if' condition is false
+	  [-Werror,-Wsometimes-uninitialized]
+	  } else if (bits == 16) {
+	  ^~~~~~~~~~
+	  video-scaler.c:1348:3: note: uninitialized use occurs here
+	  func (scale, src_lines, dest, dest_offset, width, n_elems);
+	  ^~~~
+	  video-scaler.c:1331:10: note: remove the 'if' if its condition is always true
+	  } else if (bits == 16) {
+	  ^~~~~~~~~~~~~~~~
+	  video-scaler.c:1260:27: note: initialize the variable 'func' to silence this warning
+	  GstVideoScalerVFunc func;
+	  ^
+	  = NULL
+
+2015-02-10 16:38:05 +0100  Sebastian Dröge <sebastian@centricular.com>
+
+	* gst-libs/gst/video/video-converter.c:
+	  video-converter: Use correct enum type to fix compiler warnings with clang
+	  video-converter.c:3406:12: error: implicit conversion from enumeration type 'GstVideoFormat' to different
+	  enumeration type 'GstFormat' [-Werror,-Wenum-conversion]
+	  format = convert->fformat[plane];
+	  ~ ^~~~~~~~~~~~~~~~~~~~~~~
+	  video-converter.c:3413:44: error: implicit conversion from enumeration type 'GstFormat' to different enumeration
+	  type 'GstVideoFormat' [-Werror,-Wenum-conversion]
+	  gst_video_scaler_horizontal (h_scaler, format,
+	  ~~~~~~~~~~~~~~~~~~~~~~~~~~~            ^~~~~~
+	  video-converter.c:3471:12: error: implicit conversion from enumeration type 'GstVideoFormat' to different
+	  enumeration type 'GstFormat' [-Werror,-Wenum-conversion]
+	  format = convert->fformat[plane];
+	  ~ ^~~~~~~~~~~~~~~~~~~~~~~
+	  video-converter.c:3487:42: error: implicit conversion from enumeration type 'GstFormat' to different enumeration
+	  type 'GstVideoFormat' [-Werror,-Wenum-conversion]
+	  gst_video_scaler_vertical (v_scaler, format, lines, d + out_x, i,
+	  ~~~~~~~~~~~~~~~~~~~~~~~~~            ^~~~~~
+	  video-converter.c:3551:12: error: implicit conversion from enumeration type 'GstVideoFormat' to different
+	  enumeration type 'GstFormat' [-Werror,-Wenum-conversion]
+	  format = convert->fformat[plane];
+	  ~ ^~~~~~~~~~~~~~~~~~~~~~~
+	  video-converter.c:3569:46: error: implicit conversion from enumeration type 'GstFormat' to different enumeration
+	  type 'GstVideoFormat' [-Werror,-Wenum-conversion]
+	  gst_video_scaler_horizontal (h_scaler, format,
+	  ~~~~~~~~~~~~~~~~~~~~~~~~~~~            ^~~~~~
+	  video-converter.c:3577:42: error: implicit conversion from enumeration type 'GstFormat' to different enumeration
+	  type 'GstVideoFormat' [-Werror,-Wenum-conversion]
+	  gst_video_scaler_vertical (v_scaler, format, lines, d + out_x, i,
+	  ~~~~~~~~~~~~~~~~~~~~~~~~~            ^~~~~~
+
+2015-02-10 15:25:04 +0000  Luis de Bethencourt <luis.bg@samsung.com>
+
+	* gst-libs/gst/video/video-scaler.c:
+	  video-converter: bits variable always set
+	  In function gst_video_scaler_vertical() the bits variable is always
+	  set to either 8 or 16 in every possible format. No need to initialize it.
+	  If the format isn't valid it goes to no_func, so there is no need to
+	  handle the case of bits not being 8 or 16.
+	  CID #1268401
+
+2015-02-10 11:15:22 +0100  Wim Taymans <wtaymans@redhat.com>
+
+	* gst-libs/gst/video/video-converter.c:
+	  video-converter: only enable backlog for interlaced video
+	  Skip lines we don't need.
+
+2015-02-10 09:30:44 +0100  Wim Taymans <wtaymans@redhat.com>
+
+	* gst-libs/gst/video/video-converter.c:
+	  video-converter: add fastpath for NV formats
+
+2015-02-10 09:20:12 +0100  Wim Taymans <wtaymans@redhat.com>
+
+	* gst-libs/gst/video/video-format.c:
+	  video-format: fix pstride of NV16 and NV24 formats
+
+2015-02-09 18:01:30 +0000  Tim-Philipp Müller <tim@centricular.com>
+
+	* gst-libs/gst/rtsp/gstrtspmessage.c:
+	* tests/check/libs/rtsp.c:
+	  rtspmessage: map headers we know that are added by string to their enum
+	  That way we can look them up by their field enum later as well.
+
+2015-02-09 17:49:12 +0000  Tim-Philipp Müller <tim@centricular.com>
+
+	* tests/check/libs/rtsp.c:
+	  tests: rtsp: add some unit tests for new GstRTSPMessage API
+
+2015-02-09 16:24:19 +0000  Tim-Philipp Müller <tim@centricular.com>
+
+	* docs/libs/gst-plugins-base-libs-sections.txt:
+	* gst-libs/gst/rtsp/gstrtspmessage.c:
+	* gst-libs/gst/rtsp/gstrtspmessage.h:
+	* win32/common/libgstrtsp.def:
+	  rtspmessage: add API to add and get custom headers
+	  Add API to add and get custom headers that are not
+	  covered by our header fields enum. This is backwards
+	  compatible in that it will also work for our defined
+	  fields, so if we ever add a new header field to the
+	  enum, get_header_by_name() for the same header string
+	  will still work.
+	  API: gst_rtsp_message_add_header_by_name()
+	  API: gst_rtsp_message_take_header_by_name()
+	  API: gst_rtsp_message_remove_header_by_name()
+	  API: gst_rtsp_message_get_header_by_name()
+
+2015-02-09 17:51:00 +0100  Wim Taymans <wtaymans@redhat.com>
+
+	* gst-libs/gst/video/video-converter.c:
+	* gst-libs/gst/video/video-converter.h:
+	* gst-libs/gst/video/video-orc-dist.c:
+	* gst-libs/gst/video/video-orc-dist.h:
+	* gst-libs/gst/video/video-orc.orc:
+	  video-converter: Add more fastpaths
+	  Add fastpaths for all planar conversion and scaling.
+	  Improve gray and alpha handling.
+	  Add option to specify the chroma resampler method and set to linear as
+	  default.
+
+2015-02-09 13:20:43 +0100  Wim Taymans <wtaymans@redhat.com>
+
+	* gst-libs/gst/video/video-converter.c:
+	  video-converter: add generic planar scaler/converter
+	  Add code to convert and scale between any planar format and use it in
+	  the fastpaths of some planare converters.
+
+2015-02-09 10:20:37 +0100  Sebastian Dröge <sebastian@centricular.com>
+
+	* gst-libs/gst/video/video-converter.c:
+	  video-converter: Fix compiler warnings by using the correct enum type
+	  video-converter.c:3645:24: error: implicit conversion from enumeration type
+	  'GstFormat' to different enumeration type 'GstVideoFormat'
+	  [-Werror,-Wenum-conversion]
+	  convert->fformat = fformat;
+	  ~ ^~~~~~~
+	  video-converter.c:3667:24: error: implicit conversion from enumeration type
+	  'GstFormat' to different enumeration type 'GstVideoFormat'
+	  [-Werror,-Wenum-conversion]
+	  convert->fformat = fformat;
+	  ~ ^~~~~~~
+	  video-converter.c:3963:50: error: implicit conversion from enumeration type
+	  'const GstVideoFormat' to different enumeration type 'GstFormat'
+	  [-Werror,-Wenum-conversion]
+	  if (!setup_scale (convert, transforms[i].fformat))
+	  ~~~~~~~~~~~           ~~~~~~~~~~~~~~^~~~~~~
+
+2015-02-07 03:56:05 +1100  Jan Schmidt <jan@centricular.com>
+
+	* ext/ogg/gstoggmux.c:
+	  oggmux: Don't pass GstCollectData as a GstObject to GST_DEBUG
+
+2015-02-06 13:39:04 +0100  Wim Taymans <wtaymans@redhat.com>
+
+	* gst-libs/gst/video/video-converter.c:
+	* gst-libs/gst/video/video-scaler.c:
+	  video-converter: add more scaler fastpaths
+
+2015-02-06 13:25:51 +0100  Wim Taymans <wtaymans@redhat.com>
+
+	* gst-libs/gst/video/video-orc.orc:
+	  video-orc: fix loading of param
+	  param loading ignores the x4, loading only part of the param.
+
+2015-02-06 12:35:01 +0100  Wim Taymans <wtaymans@redhat.com>
+
+	* gst-libs/gst/video/video-converter.c:
+	  video-converter: add border and crop to more fastpaths
+
+2015-02-06 12:28:54 +0100  Wim Taymans <wtaymans@redhat.com>
+
+	* gst-libs/gst/video/video-converter.c:
+	  video-converter: fix border for YUY2 and friends
+	  Convert as many pixels as the max subsampling so that we convert a
+	  complete group of pixels.
+
+2015-02-06 15:39:14 +0530  Ravi Kiran K N <ravi.kiran@samsung.com>
+
+	* gst-libs/gst/video/video-converter.c:
+	  video-converter: support AYUV border
+	  Convert the border color from ARGB to AYUV, using
+	  colorimetry matrix when output format is YUV.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=741640
+
+2015-02-06 10:57:14 +0100  Wim Taymans <wtaymans@redhat.com>
+
+	* gst-libs/gst/video/video-converter.c:
+	  video-converter: fix swapped border width
+	  And also do nothing when there is no border.
+
+2015-02-06 10:56:21 +0100  Wim Taymans <wtaymans@redhat.com>
+
+	* gst-libs/gst/video/video-converter.c:
+	  video-converter: actually draw the border in some fastpaths
+	  Don't forget to draw the border after doing the fastpath conversion.
+
+2015-02-06 10:53:20 +0100  Wim Taymans <wtaymans@redhat.com>
+
+	* gst-libs/gst/video/video-converter.c:
+	  video-converter: clamp width and heigth
+	  Clamp the width and height based on the in and out offsets.
+
+2015-02-06 10:50:09 +0100  Wim Taymans <wtaymans@redhat.com>
+
+	* gst-libs/gst/video/video-format.c:
+	  video-format: add unaligned fallbacks
+	  Add fallback C implementations for when we can't call the ORC function
+	  because of bad alignment.
+
+2015-01-28 05:20:19 +1100  Jan Schmidt <jan@centricular.com>
+
+	* gst-libs/gst/audio/gstaudiodecoder.c:
+	  audiodecoder: Where possible, skip decode for GST_SEGMENT_FLAG_TRICKMODE_NO_AUDIO
+	  If we have timestamps on input buffers and are in trickmode no-audio
+	  mode, then don't pass anything to the subclass for decode and simply
+	  send gap events downstream
+	  Only for forward playback for now - reverse requires accumulating
+	  GAP events and pushing out in reverse order.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=735666
+
+2015-02-05 17:44:59 +1100  Jan Schmidt <jan@centricular.com>
+
+	* gst-libs/gst/audio/gstaudiobasesink.c:
+	  audiobasesink: Re-work GAP buffer and trick-mode handling
+	  In trickmode no-audio mode, or when receiving a GAP buffer,
+	  discard the contents and render as a GAP event instead.
+	  Make sure when rendering a gap event that the ring buffer will
+	  restart on PAUSED->PLAYING by setting the eos_rendering flag.
+	  This mostly reverts commit 8557ee and replaces it. The problem
+	  with the previous approach is that it hangs in wait_preroll()
+	  on a PLAYING-PAUSED transition because it doesn't commit state
+	  properly.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=735666
+
+2015-02-03 20:38:44 +1100  Jan Schmidt <jan@centricular.com>
+
+	* ext/ogg/gstoggdemux.c:
+	  oggdemux: Add a little timestamping debug output
+
+2015-02-03 01:19:05 +1100  Jan Schmidt <jan@centricular.com>
+
+	* ext/theora/gsttheoradec.c:
+	  theora: If no header packets in stream, look for them in the caps
+	  Makes theora work in cases where the header packets are only in the caps
+	  (because theoradec was connected to oggdemux late and missed the
+	  beginning of the stream)
+
+2015-02-02 22:23:51 +1100  Jan Schmidt <jan@centricular.com>
+
+	* ext/theora/gsttheoradec.c:
+	  theora: Remove FIXME and return GST_CUSTOM_FLOW_DROP for header packet handling
+	  This FIXME is easily fixed :)
+
+2015-01-31 05:12:10 +1100  Jan Schmidt <jan@centricular.com>
+
+	* gst-libs/gst/audio/gstaudiodecoder.c:
+	  audiodecoder: Remove pointless else{} around some code
+
+2015-01-31 05:09:46 +1100  Jan Schmidt <jan@centricular.com>
+
+	* gst-libs/gst/audio/gstaudiodecoder.c:
+	  audiodecoder: Fix reverse playback when there's only one gather set.
+	  The decoder can fail to drain on EOS if there was only one gather
+	  set, because it will never have sent the segment event downstream
+	  and set the output segment, and fail to detect that the rate < 0.0
+	  Make sure to send pending events before sending all the gather data
+	  for decode.
+
+2014-10-09 03:31:58 +1100  Jan Schmidt <jan@centricular.com>
+
+	* gst-libs/gst/video/video-frame.h:
+	  video: Fix simple typo in GstVideoFrameMapFlags docs
+
+2015-02-05 17:49:55 +0100  Wim Taymans <wtaymans@redhat.com>
+
+	* gst-libs/gst/video/video-converter.c:
+	  video-converter: add crop and border to some fastpaths
+
+2015-02-05 17:18:20 +0100  Wim Taymans <wtaymans@redhat.com>
+
+	* gst-libs/gst/video/video-converter.c:
+	* gst-libs/gst/video/video-orc-dist.c:
+	* gst-libs/gst/video/video-orc-dist.h:
+	* gst-libs/gst/video/video-orc.orc:
+	  video-converter: add support for borders in scale fastpath
+	  Add support for borders and cropping in the scaler fastpaths.
+
+2015-02-05 15:03:24 +0100  Wim Taymans <wtaymans@redhat.com>
+
+	* gst-libs/gst/video/video-converter.c:
+	  video-converter: disable fastpath for crop and border
+	  Add crop and border properties to the fastpath table and only select
+	  fastpath functions when it can handle the cropping or borders.
+	  Fixes https://bugzilla.gnome.org/show_bug.cgi?id=744028
+
+2015-02-04 18:01:51 +0100  Wim Taymans <wtaymans@redhat.com>
+
+	* gst-libs/gst/video/video-converter.c:
+	* gst-libs/gst/video/video-scaler.c:
+	  video-converter: add fastpath for some gray formats
+
+2015-02-04 17:44:31 +0100  Wim Taymans <wtaymans@redhat.com>
+
+	* gst-libs/gst/video/video-converter.c:
+	* gst-libs/gst/video/video-scaler.c:
+	  video-converter: add fastpath for some more RGB formats
+	  Add fastpath for RGB and BGR.
+	  Add fastpath for nearest resampling for RGB15 and RGB16 formats.
+
+2015-02-04 16:37:22 +0100  Wim Taymans <wtaymans@redhat.com>
+
+	* gst-libs/gst/video/video-converter.c:
+	  video-converter: skip lines we don't need
+	  Make sure to skip unused lines instead of doing a useless horizontal
+	  resampling.
+
+2015-02-04 12:08:21 +0000  Luis de Bethencourt <luis.bg@samsung.com>
+
+	* gst/videoscale/gstvideoscale.c:
+	  videoscale: fix memory leak
+	  In gst_video_scale_fixate_caps () it can goto done without freeing the memory
+	  of the tmp GstStructure. This makes it go out of scope and leak.
+	  CID #1265766
+
+2015-02-04 11:25:54 +0000  Luis de Bethencourt <luis.bg@samsung.com>
+
+	* gst-libs/gst/video/video-resampler.c:
+	  video-resampler: make sure params.envelope is initialized
+	  In gst_video_resampler_init () if method is GST_VIDEO_RESAMPLER_METHOD_NEAREST
+	  then params.envelope is not initialized but still used later in line 382.
+	  Make sure this variable is initiliazed to avoid undefined behaviour.
+	  CID #1256568
+
+2015-02-03 12:23:06 +0100  Sebastian Dröge <sebastian@centricular.com>
+
+	* gst-libs/gst/video/gstvideodecoder.c:
+	* gst-libs/gst/video/gstvideoencoder.c:
+	  video{enc,dec}oder: Don't reset latency all the time and handle max=GST_CLOCK_TIME_NONE correctly
+	  max=NONE means that *this* element has no maximum latency. If upstream had a
+	  maximum latency we must not override it with NONE.
+
+2015-02-03 12:15:25 +0100  Sebastian Dröge <sebastian@centricular.com>
+
+	* gst-libs/gst/audio/gstaudiodecoder.c:
+	* gst-libs/gst/audio/gstaudioencoder.c:
+	  audio{enc,dec}oder: Always directly post latency messages on the bus when the subclass sets the latency
+	  Instead of doing it only in setcaps for the encoder, and never at all for the
+	  decoder.
+
+2015-02-03 12:12:18 +0100  Sebastian Dröge <sebastian@centricular.com>
+
+	* gst-libs/gst/audio/gstaudiodecoder.c:
+	* gst-libs/gst/audio/gstaudioencoder.c:
+	  audio{enc,dec}oder: Handle max_latency == GST_CLOCK_TIME_NONE
+	  And initialize the latencies with 0 and NONE.
+
+2015-01-28 05:26:06 +1100  Jan Schmidt <jan@centricular.com>
+
+	* gst-libs/gst/audio/gstaudiobasesink.c:
+	  audiobasesink: Don't render a GAP silence buffer
+	  Don't render out silence samples to a buffer, just
+	  start the clock running, since any buffer with the
+	  GAP flag will be discarded in render() now anyway.
+
+2015-01-28 22:42:17 +1100  Jan Schmidt <jan@centricular.com>
+
+	* gst-libs/gst/audio/gstaudiobasesink.c:
+	  audiobasesink: Make sure the ringbuffer is started before waiting
+	  Don't call the basesink wait_event implementation until we're sure
+	  the ringbuffer is running, because it might wait on a non-running
+	  clock.
+
+2015-01-27 02:04:22 +1100  Jan Schmidt <jan@centricular.com>
+
+	* gst-libs/gst/audio/gstaudiobasesink.c:
+	  audiobasesink: drop GAP buffers, or all buffers in trickmode no-audio mode
+	  Make the base audio sink throw away buffers marked GAP, or all
+	  incoming buffers when performing a trick play with
+	  GST_SEGMENT_TRICKMODE_NO_AUDIO flag set, and make sure to start
+	  the ringbuffer when that happens so the clock starts running.
+	  Preserve the timing calculations when rendering, so state is all
+	  updated the same, but just don't render samples.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=735666
+
+2015-01-29 17:58:27 +0000  Vincent Penquerc'h <vincent.penquerch@collabora.co.uk>
+
+	* ext/ogg/gstoggdemux.c:
+	  oggdemux: do not throw a flow error on flushing
+	  If the streaming task attempts to read a chain while the pipeline
+	  is stopping (which can happen if the pipeline stops shortly after
+	  start or a new URI being setup in gapless playback case), it will
+	  see a flushing return from upstream, and should then also return
+	  flushing to the caller, rather than emit a flow error.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=722442
+
+2015-01-28 17:44:57 +0100  Sebastian Dröge <sebastian@centricular.com>
+
+	* gst-libs/gst/video/video-converter.c:
+	  video-converter: Fix compiler warnings
+	  video-converter.c:3073:48: error: implicit conversion from enumeration type 'GstFormat' to different enumeration type 'GstVideoFormat'
+	  [-Werror,-Wenum-conversion]
+	  gst_video_scaler_horizontal (h_scaler, format,
+	  ~~~~~~~~~~~~~~~~~~~~~~~~~~~            ^~~~~~
+	  video-converter.c:3081:44: error: implicit conversion from enumeration type 'GstFormat' to different enumeration type 'GstVideoFormat'
+	  [-Werror,-Wenum-conversion]
+	  gst_video_scaler_vertical (v_scaler, format, lines, d, i, out_w);
+	  ~~~~~~~~~~~~~~~~~~~~~~~~~            ^~~~~~
+	  video-converter.c:3137:24: error: implicit conversion from enumeration type 'const GstVideoFormat' to different enumeration type 'GstFormat'
+	  [-Werror,-Wenum-conversion]
+	  convert->fformat = GST_VIDEO_INFO_FORMAT (in_info);
+	  ~ ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+	  ../../../gst-libs/gst/video/video-info.h:125:43: note: expanded from macro 'GST_VIDEO_INFO_FORMAT'
+	  ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+	  ../../../gst-libs/gst/video/video-format.h:361:59: note: expanded from macro 'GST_VIDEO_FORMAT_INFO_FORMAT'
+	  ~~~~~~~~^~~~~~
+	  video-converter.c:3157:24: error: implicit conversion from enumeration type 'GstVideoFormat' to different enumeration type 'GstFormat'
+	  [-Werror,-Wenum-conversion]
+	  convert->fformat = GST_VIDEO_FORMAT_GRAY8;
+
+2015-01-28 17:43:59 +0100  Sebastian Dröge <sebastian@centricular.com>
+
+	* gst-libs/gst/video/video-orc-dist.c:
+	* gst-libs/gst/video/video-orc-dist.h:
+	  video: Update orc files
+
+2015-01-28 17:37:35 +0100  Wim Taymans <wtaymans@redhat.com>
+
+	* win32/common/libgstvideo.def:
+	  defs: update
+
+2015-01-28 17:32:12 +0100  Wim Taymans <wtaymans@redhat.com>
+
+	* gst-libs/gst/video/video-converter.c:
+	* gst-libs/gst/video/video-orc.orc:
+	* gst-libs/gst/video/video-scaler.c:
+	* gst-libs/gst/video/video-scaler.h:
+	  video-converter: add fast-path scaler for some packed YUV formats
+	  Add fast path scaling for YUY2 and other packed YUV formats. Add a new
+	  method to merge the scalers of the Y and UV components into one scaler.
+	  Add faster horizontal 2tap scaler.
+	  See https://bugzilla.gnome.org/show_bug.cgi?id=741987
+
+2015-01-28 17:30:53 +0100  Wim Taymans <wtaymans@redhat.com>
+
+	* gst/videoscale/gstvideoscale.c:
+	  videoscale: don't do dithering
+
+2015-01-28 17:30:14 +0100  Wim Taymans <wtaymans@redhat.com>
+
+	* gst-libs/gst/video/video-converter.h:
+	  video-converter: the default is BAYER dithering
+
+2015-01-28 17:29:45 +0100  Wim Taymans <wtaymans@redhat.com>
+
+	* gst-libs/gst/video/video-converter.c:
+	  video-converter: don't do dither when set to NONE
+
+2015-01-28 11:38:16 +0100  Wim Taymans <wtaymans@redhat.com>
+
+	* gst-libs/gst/video/video-scaler.c:
+	  video-scaler: fix taps calculation for pstride == 1
+	  Take pstride into consideration when calculating the scaler taps.
+
+2015-01-28 04:51:25 +1100  Jan Schmidt <jan@centricular.com>
+
+	* gst-libs/gst/audio/gstaudiobasesink.c:
+	  audiobasesink: Make sure the ringbuffer really starts when we need it to
+	  Some audio sink sub-classes (pulsesink) don't start their clock
+	  when the ringbuffer starts, but always have to on EOS. When we
+	  explicitly need to start the ringbuffer, make sure sub-classes will
+	  do it by (ab)using the existing eos_rendering flag.
+
+2014-12-11 01:54:07 +1100  Jan Schmidt <jan@centricular.com>
+
+	* tests/examples/playback/playback-test.c:
+	  playback-test: Support new skip seek flags
+	  Support the new SEEK_TRICKMODE_KEY_UNITS and SEEK_TRICKMODE_NO_AUDIO
+	  flags added to core
+	  https://bugzilla.gnome.org/show_bug.cgi?id=735666
+
+2015-01-27 13:39:14 +0000  Luis de Bethencourt <luis.bg@samsung.com>
+
+	* gst-libs/gst/audio/gstaudiopack-dist.c:
+	* gst-libs/gst/video/video-orc-dist.c:
+	* gst-libs/gst/video/video-orc-dist.h:
+	* gst/adder/gstadderorc-dist.c:
+	* gst/audioconvert/gstaudioconvertorc-dist.c:
+	* gst/videotestsrc/gstvideotestsrcorc-dist.c:
+	* gst/volume/gstvolumeorc-dist.c:
+	  orc: update orc files
+
+2015-01-27 10:28:35 +0100  Wim Taymans <wtaymans@redhat.com>
+
+	* gst-libs/gst/video/video-converter.c:
+	  video-converter: add fastpath for planar scaling
+	  Add fastpaths for scaling of planar subsampled formats.
+	  See https://bugzilla.gnome.org/show_bug.cgi?id=741987
+
+2015-01-27 10:04:11 +0100  Wim Taymans <wtaymans@redhat.com>
+
+	* gst-libs/gst/video/video-orc.orc:
+	* gst-libs/gst/video/video-scaler.c:
+	  video-scaler: add support for monochroma formats
+	  Add support for scaling of images with pstride == 1. This can be used
+	  to scale individual planes later.
+	  Rework some of the scaling code to take the pstride as a parameter.
+
+2015-01-27 09:51:47 +0100  Wim Taymans <wtaymans@redhat.com>
+
+	* gst/videoscale/gstvideoscale.c:
+	  videoscale: disable chroma and matrix operations
+	  Ignore chroma subsampling and color matrix transformations like the
+	  old videoscale used to do. This is to make the performance like it was
+	  before.
+	  See https://bugzilla.gnome.org/show_bug.cgi?id=741987
+
+2015-01-26 12:52:40 +0100  Wim Taymans <wtaymans@redhat.com>
+
+	* gst-libs/gst/video/video-format.c:
+	  video-format: fix GBR unpack
+
+2015-01-27 01:31:50 +1100  Jan Schmidt <jan@centricular.com>
+
+	* gst-libs/gst/audio/gstaudiodecoder.c:
+	* gst-libs/gst/audio/gstaudiodecoder.h:
+	  audiodecoder: Fix typo in documentation
+	  Fix a couple of harmless warnings in the gtk-doc parsing
+
+2015-01-23 12:46:41 +0100  Edward Hervey <bilboed@bilboed.com>
+
+	* gst-libs/gst/video/video-dither.c:
+	  video: Fix leaked dither object in error cases
+	  Coverity CID : 1256564
+
+2015-01-21 15:22:15 +0000  Luis de Bethencourt <luis.bg@samsung.com>
+
+	* ext/libvisual/gstaudiovisualizer.c:
+	  visual: fix caps leak
+	  Fix leak of caps event and of caps objects when setting caps on sink and src
+	  pads. Sync audiovisualizer class implementation to the one in gst-plugins-bad.
+	  This commit matches c5ef1bee7318f057aa1f542d5a1474b75e85131a in that module.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=742875
+
+2015-01-21 14:46:15 +0000  Luis de Bethencourt <luis.bg@samsung.com>
+
+	* ext/libvisual/gstaudiovisualizer.c:
+	  visual: post QoS messages when dropping frames due to QoS
+	  https://bugzilla.gnome.org/show_bug.cgi?id=742875
+
+2015-01-21 09:49:47 +0100  Sebastian Dröge <sebastian@centricular.com>
+
+	* ext/cdparanoia/gstcdparanoiasrc.h:
+	* gst-libs/gst/video/video-format.c:
+	* gst/audioconvert/audioconvert.c:
+	* gst/audioconvert/gstaudioquantize.c:
+	* gst/audioresample/gstaudioresample.c:
+	* gst/audioresample/resample.c:
+	  Constify some static arrays everywhere
+
+2015-01-21 09:42:21 +0100  Sebastian Dröge <sebastian@centricular.com>
+
+	* ext/alsa/gstalsa.c:
+	  alsa: Constify channel position table
+
+2015-01-21 09:41:23 +0100  Sebastian Dröge <sebastian@centricular.com>
+
+	* ext/alsa/gstalsa.c:
+	  alsa: Fix indention
+
+2015-01-21 08:33:57 +0100  Thomas Roos <thomas.roos@industronic.de>
+
+	* ext/alsa/gstalsa.c:
+	  alsa: Allow to use 8 bit samples with ALSA
+	  8 bit samples have no (0) as endianness, not the native endianness.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=739446
+
+2015-01-21 09:39:30 +0100  Sebastian Dröge <sebastian@centricular.com>
+
+	* gst-libs/gst/audio/audio-format.c:
+	  audio-format: Constify the audio format table
+
+2015-01-21 09:37:30 +0100  Sebastian Dröge <sebastian@centricular.com>
+
+	* gst-libs/gst/audio/gstaudiosrc.c:
+	  audiosrc: Fill in the correct silence
+	  For unsigned raw formats this is not all zeroes, and for non-raw formats
+	  we just continue to assume all zeroes for now.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=739446
+
+2015-01-21 08:47:26 +0100  Thomas Roos <thomas.roos@industronic.de>
+
+	* gst-libs/gst/audio/gstaudiosink.c:
+	  audiosink: Fill in the correct silence
+	  For unsigned raw formats this is not all zeroes, and for non-raw formats
+	  we just continue to assume all zeroes for now.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=739446
+
+2015-01-20 19:14:21 +0100  Sebastian Dröge <sebastian@centricular.com>
+
+	* gst-libs/gst/app/gstappsink.c:
+	  appsink: Only emit EOS signal after all buffers are consumed
+	  Otherwise the application will possibly shut down the pipeline already
+	  because EOS is received, while there are still some buffers pending.
+
+2015-01-20 15:08:24 +0000  Vincent Penquerc'h <vincent.penquerch@collabora.co.uk>
+
+	* gst/playback/gstdecodebin2.c:
+	  dcodebin2: fix lock/unlock mismatch on multiqueue overrun
+
+2015-01-13 16:07:06 +0100  Jan Alexander Steffens (heftig) <jsteffens@make.tv>
+
+	* gst/audioresample/resample.c:
+	  audioresample: Try to prevent endless looping
+	  Speex may decide not to consume any samples because it can't write any. I've
+	  seen a hang during draining caused by the resample loop never terminating.
+	  In that case, resampling happened as normal until olen was 0 but ilen was
+	  still 1. _process_native then reduced ichunk to 0, so ilen never decreased
+	  below 1 and the loop never terminated.
+	  Instead of reverting 684cf44 ({audioresample: don't skip input samples),
+	  break only if all output samples have been produced and speex refuses
+	  to consume any more input samples.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=732908
+
+2015-01-19 11:17:18 +0100  Sebastian Dröge <sebastian@centricular.com>
+
+	* gst/videorate/Makefile.am:
+	  videorate: Add $(GST_PLUGINS_BASE_CFLAGS) to be able to find gst/video/video.h
+
+2015-01-18 14:58:36 -0500  Nicolas Dufresne <nicolas.dufresne@collabora.co.uk>
+
+	* gst/videorate/Makefile.am:
+	* gst/videorate/gstvideorate.c:
+	  videorate: Implement allocation query
+	  The videorate element keeps 1 buffer internally. This buffer need
+	  to be requested during allocation query otherwise the pipeline may
+	  stall.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=738302
+
+2015-01-18 14:17:07 -0500  Nicolas Dufresne <nicolas.dufresne@collabora.co.uk>
+
+	* gst/videorate/Makefile.am:
+	* gst/videorate/gstvideorate.c:
+	  Revert "videorate: Implement allocation query"
+	  This reverts commit 3c04db4a307048db70ee1d08c1d62e26ad9569d8.
+
+2015-01-18 11:02:00 -0500  Nicolas Dufresne <nicolas.dufresne@collabora.co.uk>
+
+	* gst/videorate/Makefile.am:
+	* gst/videorate/gstvideorate.c:
+	  videorate: Implement allocation query
+	  VideRate keeps 1 buffer in order to duplicate base on closest buffer
+	  relative to targeted time. This extra buffer need to be request
+	  otherwise the pipeline may stall when fixed size buffer pool is used.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=738302
+
+2015-01-17 14:51:48 +0100  Sebastian Dröge <sebastian@centricular.com>
+
+	* gst/playback/gstdecodebin2.c:
+	  decodebin: Fix compilation
+
+2015-01-12 14:38:09 +0100  Branislav Katreniak <bkatreniak@nuvotechnologies.com>
+
+	* gst/playback/gstdecodebin2.c:
+	  decodebin: do call set_queue_size in no_more_pads_cb
+	  Consider pipeline: gst-launch-1.0 playbin uri=http://example.com/a.ogg
+	  Consider 128kbit audio stream.
+	  As soon as uridecodebin detects the bitrate, it configures its input
+	  queue2 max-size to 32000 bytes.
+	  The 2MB buffer in multiqueue is nearly 2 orders of magnitude bigger.
+	  This non-deterministically drives queue2 buffer anywhere from
+	  100% to 0% until multiqueue is filled.
+	  This patch sets multiqueue size to 5 buffers early in no_more_pads_cb.
+	  Partly reverts commit db771185ed750627a6a1824c42b651d739e1b4a4.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=740689
+
+2015-01-16 15:21:14 +0000  Vincent Penquerc'h <vincent.penquerch@collabora.co.uk>
+
+	* gst/playback/gstdecodebin2.c:
+	  decodebin: free old groups when switching groups
+	  Old groups are freed with one switch's delay when switching groups.
+	  They're freed in a scratch thread to avoid delaying the switch.
+
+2014-12-12 17:02:35 +0000  Vincent Penquerc'h <vincent.penquerch@collabora.co.uk>
+
+	* ext/ogg/gstoggmux.c:
+	  oggmux: fix clipped duration determination for non 0 based segments
+	  https://bugzilla.gnome.org/show_bug.cgi?id=740422
+
+2015-01-15 10:51:37 +0100  Sebastian Dröge <sebastian@centricular.com>
+
+	* gst-libs/gst/audio/gstaudioutilsprivate.c:
+	  audio: Keep caps features when building the downstream filter
+	  Based on 5fd4e3e0b6cc4f30d7b1489a105db946b43f1a9f for video
+	  by Alessandro Decina.
+
+2015-01-15 13:54:14 +1100  Alessandro Decina <alessandro.d@gmail.com>
+
+	* gst-libs/gst/video/gstvideoutilsprivate.c:
+	  videoutils: keep caps features in account when building the downstream filter
+	  See 00c2ce6 and https://bugzilla.gnome.org/show_bug.cgi?id=741263 for reference.
+
+2015-01-14 10:35:34 -0300  Thiago Santos <thiagoss@osg.samsung.com>
+
+	* tests/examples/playback/playback-test.c:
+	  examples: playback: add labels with supported seek range
+	  Add the supported seeking range in the advanced seek area.
+	  Also implement seeking querying the pipeline to retrieve those
+	  values and show to the user. It is done in a smaller frequency
+	  compared to the position/duration querying.
+
+2015-01-13 19:25:52 -0300  Thiago Santos <thiagoss@osg.samsung.com>
+
+	* gst/playback/gstdecodebin2.c:
+	  decodebin: disable pad link checks as it has already been done
+	  Decodebin has already added the element to the bin and should only
+	  select caps compatible pads. It should disable the pad link checks
+	  to avoid doing those again.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=742885
+
+2015-01-13 16:58:34 +0000  Luis de Bethencourt <luis.bg@samsung.com>
+
+	* ext/libvisual/gstaudiovisualizer.c:
+	  visual: cleanup
+	  Shameful fix to a silly mistake in the previous commit. Above email address for
+	  any mockery
+
+2015-01-13 16:36:09 +0000  Luis de Bethencourt <luis.bg@samsung.com>
+
+	* ext/libvisual/gstaudiovisualizer.c:
+	  visual: handle the return of the setup function
+	  Make the baseclass future proof by handling the gboolean return of the setup
+	  function. So if/when a child class uses this the base class is ready.
+
+2015-01-13 16:09:49 +0000  Luis de Bethencourt <luis.bg@samsung.com>
+
+	* ext/libvisual/gstaudiovisualizer.c:
+	  Revert "visual: remove unnecessary variable"
+	  This reverts commit a91d521a3602f33083405467db9454d422b9da1b.
+	  Being a base class it is better to check the value instead of ignoring it since
+	  a child class could be created that returns valuable information.
+
+2015-01-13 15:07:56 +0000  Luis de Bethencourt <luis.bg@samsung.com>
+
+	* ext/libvisual/gstaudiovisualizer.c:
+	  visual: remove unnecessary variable
+	  klass->setup (scope) will always return TRUE since all children of this class
+	  do so, no need to store the return. Besides, the value is overwritten a few
+	  lines down before it is ever used. Save the unnecessary memory and instructions.
+	  CID #1226467
+
+2015-01-12 15:27:18 +0000  Luis de Bethencourt <luis.bg@samsung.com>
+
+	* ext/libvisual/gstaudiovisualizer.c:
+	  visual: use unused value
+	  ret is assigned but not used and in the next cycle of the loop it is overwritten
+	  with default_prepare_output_buffer (). If there is a flow error the function
+	  should return instead.
+	  CID #1226475
+
+2015-01-12 15:56:06 +0100  Stefan Sauer <ensonic@users.sf.net>
+
+	* common:
+	  Automatic update of common submodule
+	  From f2c6b95 to bc76a8b
+
+2015-01-08 21:20:14 +0100  Mark Nauwelaerts <mnauw@users.sourceforge.net>
+
+	* gst-libs/gst/audio/gstaudioringbuffer.c:
+	  audioringbuffer: start ringbuffer if needed upon commit
+	  ... to provide for a running clock.
+
+2015-01-02 14:34:41 +0100  Mark Nauwelaerts <mnauw@users.sourceforge.net>
+
+	* gst-libs/gst/video/gstvideoencoder.c:
+	  videoencoder: fix comment typo
+
+2015-01-09 15:38:09 +0000  Luis de Bethencourt <luis.bg@samsung.com>
+
+	* gst-libs/gst/video/video-dither.c:
+	  video-dither: remove check for below zero for unsigned value
+	  CLAMP checks both if value is '< 0' and '> max'. Value will never be a negative
+	  number since it is an unsigned integer. Removing that check and only checking if
+	  it is bigger than max and setting it appropriately.
+	  CID 1256559
+
+2015-01-09 15:28:06 +0000  Luis de Bethencourt <luis.bg@samsung.com>
+
+	* gst-libs/gst/video/video-resampler.c:
+	  video-resampler: remove check for below zero for unsigned value
+	  CLAMP checks both if n_taps is '< 0' and '> max_taps'. n_taps will never be a
+	  negative number because it is an unsigned integer. Removing that check and only
+	  making sure it isn't set bigger than max.
+	  CID 1256558
+
+2015-01-08 10:45:46 +0100  Sebastian Dröge <sebastian@centricular.com>
+
+	* gst-libs/gst/video/video-color.c:
+	* gst-libs/gst/video/video-color.h:
+	* gst-libs/gst/video/video-info.c:
+	  video: Add support for BT2020 colorspace (UHD)
+
+2015-01-07 15:54:58 +0100  Wim Taymans <wtaymans@redhat.com>
+
+	* gst-libs/gst/video/video-scaler.c:
+	  video-scaler: remove useless debug
+
+2015-01-07 15:52:57 +0100  Wim Taymans <wtaymans@redhat.com>
+
+	* gst-libs/gst/video/video-converter.c:
+	* gst-libs/gst/video/video-converter.h:
+	  video-converter: add options to control chroma resampling
+	  Add an option to disable chroma resampling.
+	  Improve the matrix option values so that you can choose to use the input
+	  or output matrix or disable conversion.
+
+2015-01-02 15:27:23 +0000  Tim-Philipp Müller <tim@centricular.com>
+
+	* ext/ogg/gstoggmux.c:
+	  oggmux: remove unused enum
+
+2014-12-31 19:40:20 +0000  Tim-Philipp Müller <tim@centricular.com>
+
+	* ext/ogg/gstoggmux.c:
+	  oggmux: fix silly GQueue iteration code
+
+2014-12-26 20:48:55 +0000  Sam Thursfield <sam@afuera.me.uk>
+
+	* gst-libs/gst/pbutils/gstdiscoverer-types.c:
+	  Fix documentation that incorrectly says a return value should be freed
+	  The gst_discoverer_info_get_missing_elements_installer_details()
+	  documentation and annotation says that the return value should be freed
+	  with g_strfreev(), but actually it's owned by the GstDiscovereInfo
+	  object and should definitely not get freed by the caller as well.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=742006
+
+2014-12-27 14:44:51 +0530  Nirbheek Chauhan <nirbheek@centricular.com>
+
+	* gst-libs/gst/audio/gstaudiobasesrc.c:
+	  audiobasesrc: Explicitly document that buffer-time and latency-time may be ignored
+
+2014-12-26 18:55:08 -0300  Thiago Santos <thiagoss@osg.samsung.com>
+
+	* ext/ogg/gstoggmux.c:
+	  oggmux: only clip by duration if end of buffer is ahead of segment
+	  It might happen that the timestamp is before the segment and the
+	  check would succeed. In this case reducing the duration makes no
+	  sense and would lead to broken results.
+
+2014-12-22 22:04:41 +0100  Sebastian Dröge <sebastian@centricular.com>
+
+	* gst/videotestsrc/gstvideotestsrc.c:
+	  videotestsrc: Report our latency properly in live mode
+	  While we have no latency at all in theory, any other live source has the
+	  duration of one buffer as minimum latency. Do the same in videotestsrc.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=741879
+
+2014-12-22 22:00:26 +0100  Sebastian Dröge <sebastian@centricular.com>
+
+	* gst/audiotestsrc/gstaudiotestsrc.c:
+	  audiotestsrc: Report our latency properly in live mode
+	  While we have no latency at all in theory, any other live source has the
+	  duration of one buffer as minimum latency. Do the same in audiotestsrc.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=741879
+
+2014-12-22 09:25:04 -0500  Song Bing <b06498@freescale.com>
+
+	* gst-libs/gst/video/gstvideopool.c:
+	* sys/ximage/ximagepool.c:
+	* sys/xvimage/xvimagepool.c:
+	  videopool: update video alignment after applying
+	  Video buffer pool will update video alignment to respect stride alignment
+	  requirement. But haven't updated it to video alignment in configure.
+	  Which will cause user get wrong video alignment.
+	  Fixes https://bugzilla.gnome.org/show_bug.cgi?id=741501
+
+2014-11-28 14:36:23 -0300  Thiago Santos <thiago.sousa.santos@collabora.com>
+
+	* gst-libs/gst/audio/gstaudiobasesink.c:
+	  audiobasesink: get the internal time before the clock reset
+	  Otherwise calls to get the clock time might change its internal state
+	  and the internal/external time for calibration get unbalanced leading to
+	  a clock jump
+	  https://bugzilla.gnome.org/show_bug.cgi?id=740834
+
+2014-12-22 11:45:53 +0100  Sebastian Dröge <sebastian@centricular.com>
+
+	* MAINTAINERS:
+	  MAINTAINERS: Update my mail address
+
+2014-12-22 11:38:20 +0100  Sebastian Dröge <sebastian@centricular.com>
+
+	* gst-libs/gst/video/gstvideodecoder.c:
+	* gst-libs/gst/video/gstvideoencoder.c:
+	  video{en,de}coder: Call reset() before the start() vfunc
+	  This makes sure that the element is in the same state before start() is called
+	  the very first time and every future call after the element was used already.
+	  Also it ensure that we always have a clean state before start(), cleaned the
+	  same way in every case.
+
+2014-12-22 11:36:58 +0100  Sebastian Dröge <sebastian@centricular.com>
+
+	* gst-libs/gst/audio/gstaudioencoder.c:
+	  audioencoder: Call reset() before the start() vfunc to guarantee a clean state
+	  The same was done already in the decoder, and we cleaned some state just above
+	  manually that would also be taken care of by reset().
+	  This makes sure that the element is in the same state before start() is called
+	  the very first time and every future call after the element was used already.
+
+2014-12-22 11:33:14 +0100  Sebastian Dröge <sebastian@centricular.com>
+
+	* gst-libs/gst/video/gstvideodecoder.c:
+	* gst-libs/gst/video/gstvideoencoder.c:
+	  video{en,de}coder: Reset the codec after calling the stop() vfunc
+	  The stop() vfunc might mess with some of our fields we have just
+	  reset, which could cause memory leaks or invalid state taken over
+	  to later.
+	  Also the stop() vfunc, or anything called until it from another thread,
+	  might want to be able to use the fields that were just resetted and
+	  become confused because of that.
+	  In the decoder we already had a workaround for things like this happening,
+	  this workaround is not needed anymore.
+
+2014-12-22 10:45:37 +0100  Sebastian Dröge <sebastian@centricular.com>
+
+	* gst-libs/gst/audio/gstaudiobasesink.c:
+	* gst-libs/gst/audio/gstaudiobasesrc.c:
+	  audiobase{sink,src}: Don't hold the object lock while calling create_ringbuffer() vfunc
+	  The implementation of that vfunc might want to use the object lock for
+	  something too. It's generally not a good idea to keep the object lock while
+	  calling any function implemented elsewhere.
+	  Also the ringbuffer can only be NULL at this point, remove a useless if block.
+	  And in the sink actually hold the object lock while setting the ringbuffer on
+	  the instance. Code accessing this is expected to use the object lock, so do it
+	  here ourselves too.
+
+2014-12-18 13:24:22 +0100  Sebastian Dröge <sebastian@centricular.com>
+
+	* gst-libs/gst/riff/riff-media.c:
+	  riff-media: Error out early if we observe an invalid audio format
+
+2014-12-18 13:22:17 +0100  Sebastian Dröge <sebastian@centricular.com>
+
+	* gst-libs/gst/riff/riff-media.c:
+	  riff: Also handle invalid block aligns for raw audio
+	  Fixes audio playback of
+	  http://demo.archermind.com/Test%20Sample/Video/MPEG%204/Divx3/Low-Motion/576-320.avi
+	  Audio and video together is still broken because of other issues.
+
+2014-12-18 10:57:13 +0100  Edward Hervey <bilboed@bilboed.com>
+
+	* gst-libs/gst/audio/Makefile.am:
+	  audio: Fix private header include/dist
+	  We want to dist it, but we don't want to install it.
+	  Fixes make dist/distcheck
+
+2014-12-18 10:53:20 +0100  Sebastian Dröge <sebastian@centricular.com>
+
+	* common:
+	  Automatic update of common submodule
+	  From ef1ffdc to f2c6b95
+
+2014-12-17 19:14:38 -0300  Thiago Santos <thiagoss@osg.samsung.com>
+
+	* gst-libs/gst/audio/gstaudioencoder.c:
+	* gst-libs/gst/video/gstvideoencoder.c:
+	  video: audio: fix GI annotations for proxy caps function
+	  Add the annotations to parameters that can be null and also for stating
+	  the ownership of the returned caps
+
+2014-12-17 15:21:48 -0300  Thiago Santos <thiagoss@osg.samsung.com>
+
+	* tests/check/libs/audiodecoder.c:
+	  tests: audiodecoder: tests for caps query implementation
+	  Copied from videodecoder tests and updated to audio features
+
+2014-12-17 15:21:16 -0300  Thiago Santos <thiagoss@osg.samsung.com>
+
+	* gst-libs/gst/audio/gstaudiodecoder.c:
+	* gst-libs/gst/audio/gstaudiodecoder.h:
+	* win32/common/libgstaudio.def:
+	  audiodecoder: expose getcaps virtual function
+	  Allows subclasses to do custom caps query replies.
+	  Also exposes the standard caps query handler so subclasses can just
+	  extend on top of it instead of reimplementing the caps query proxying.
+
+2014-12-16 18:36:57 -0300  Thiago Santos <thiagoss@osg.samsung.com>
+
+	* gst-libs/gst/audio/gstaudiodecoder.c:
+	  audiodecoder: implement caps and accept-caps queries
+	  Allows decoders to proxy downstream restrictions on caps.
+	  Also implements accept-caps query to prevent regressions caused by the
+	  new fields on the return of a caps query that would cause the accept-caps
+	  to fail as it uses subset caps comparisons
+
+2014-12-16 11:13:40 -0300  Thiago Santos <thiagoss@osg.samsung.com>
+
+	* gst-libs/gst/audio/Makefile.am:
+	* gst-libs/gst/audio/gstaudioencoder.c:
+	* gst-libs/gst/audio/gstaudioutilsprivate.c:
+	* gst-libs/gst/audio/gstaudioutilsprivate.h:
+	  audioencoder: refactor getcaps proxy function to be reusable
+	  Makes the audioencoder's getcaps function that proxies downstream
+	  restriction available to other elements in the audio module to use it
+
+2014-12-17 14:18:03 -0300  Thiago Santos <thiagoss@osg.samsung.com>
+
+	* gst-libs/gst/video/gstvideodecoder.c:
+	* gst-libs/gst/video/gstvideodecoder.h:
+	* tests/check/libs/videodecoder.c:
+	* win32/common/libgstvideo.def:
+	  videodecoder: expose getcaps virtual function
+	  Allows subclasses to do custom caps query replies.
+	  Also exposes the standard caps query handler so subclasses can just
+	  extend on top of it instead of reimplementing the caps query proxying.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=741263
+
+2014-12-15 18:46:21 -0300  Thiago Santos <thiagoss@osg.samsung.com>
+
+	* gst-libs/gst/video/gstvideodecoder.c:
+	  videodecoder: accept-caps should only require fields from the template
+	  With the new caps query results the caps returned might have extra fields
+	  that are not required by the decoder (framerate for image decoders) and it
+	  causes a regression making, for example, jpegdec reject caps that don't
+	  have framerates.
+	  The accept-caps implementation will do 2 checks:
+	  1) Do subset check with the template caps, making sure all the required
+	  fields that are present on the template are present on the received caps.
+	  2) Do a intersection check with the result of a caps query, making sure
+	  that downstream can accept the fields in the received caps.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=741263
+
+2014-12-09 16:08:12 -0300  Thiago Santos <thiagoss@osg.samsung.com>
+
+	* gst-libs/gst/video/gstvideoutilsprivate.c:
+	  videoutils: proxy filter when doing a caps query downstream
+	  Allows downstream to use the filter and possibly reduce caps complexity
+	  to speed up negotiation
+	  https://bugzilla.gnome.org/show_bug.cgi?id=741263
+
+2014-12-09 16:05:27 -0300  Thiago Santos <thiagoss@osg.samsung.com>
+
+	* gst-libs/gst/video/gstvideoutilsprivate.c:
+	  videoutils: return empty if the element has no possible allowed caps
+	  Instead of returning the template caps and having a failure happen
+	  later because there are no possible caps
+	  https://bugzilla.gnome.org/show_bug.cgi?id=741263
+
+2014-12-08 16:33:33 -0300  Thiago Santos <thiagoss@osg.samsung.com>
+
+	* gst-libs/gst/video/Makefile.am:
+	* gst-libs/gst/video/gstvideodecoder.c:
+	* gst-libs/gst/video/gstvideoencoder.c:
+	* gst-libs/gst/video/gstvideoutilsprivate.c:
+	* gst-libs/gst/video/gstvideoutilsprivate.h:
+	* tests/check/libs/videodecoder.c:
+	  videodecoder: implement caps query
+	  Refactor the encoder's caps query proxying function to a common place
+	  and use it in the videodecoder to proxy downstream restrictions.
+	  The new function is private to the gstvideo lib.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=741263
+
+2014-12-17 12:01:19 +0000  Tim-Philipp Müller <tim@centricular.com>
+
+	* configure.ac:
+	  configure: require release version of orc now that there is one
 
 2014-12-16 12:57:55 +0100  Wim Taymans <wtaymans@redhat.com>
 
@@ -50,6 +6262,12 @@
 	  work in the release_buffer method.
 	  Fixes https://bugzilla.gnome.org/show_bug.cgi?id=741420
 
+2014-12-15 20:57:14 +0100  Sebastian Dröge <sebastian@centricular.com>
+
+	* gst-libs/gst/audio/gstaudiobasesink.h:
+	* gst-libs/gst/audio/gstaudiobasesrc.h:
+	  audiobasesrc/sink: Add _CAST macros
+
 2014-12-15 14:10:17 +0100  Edward Hervey <bilboed@bilboed.com>
 
 	* gst-libs/gst/video/gstvideosink.c:
@@ -57,6 +6275,17 @@
 	  video: Fix non-default usage of gst_video_sink_center_rect
 	  Make sure we take into account non-0 x/y destination rectangles
 
+2014-12-15 12:12:44 +0000  Tim-Philipp Müller <tim@centricular.com>
+
+	* tests/examples/playback/playback-test.c:
+	  examples: improve playback-test help text a little
+	  And allow pipeline type to be specified as string.
+
+2014-12-15 10:35:35 +0100  Sebastian Dröge <sebastian@centricular.com>
+
+	* ext/pango/gstbasetextoverlay.h:
+	  pango: Add license/copyright header to header file
+
 2014-12-15 09:45:43 +0100  Sebastian Dröge <sebastian@centricular.com>
 
 	* gst/playback/gstdecodebin2.c:
@@ -64,11 +6293,51 @@
 	  This reverts commit a391dfe17f1a325f60e1d51a6d40c1a68eb196de.
 	  It breaks gapless playback: https://bugzilla.gnome.org/show_bug.cgi?id=740045
 
-2014-11-28 13:29:37 +0000  Tim-Philipp Müller <tim@centricular.com>
+2014-12-09 03:18:37 +0100  Matej Knopp <matej.knopp@gmail.com>
 
-	* tests/check/Makefile.am:
-	  tests: don't run orc/* tests under valgrind
-	  They just seem to blow up for some reason that needs investigating.
+	* gst/audiorate/gstaudiorate.c:
+	  audiorate: Fill gap events
+	  https://bugzilla.gnome.org/show_bug.cgi?id=741281
+
+2014-12-10 16:10:58 +0530  Sanjay NM <sanjay.nm@samsung.com>
+
+	* gst-libs/gst/audio/gstaudiodecoder.c:
+	  audio: Add error handling to gst_audio_decoder_drain()
+	  https://bugzilla.gnome.org/show_bug.cgi?id=740686
+
+2014-12-13 16:14:49 +0100  Sebastian Dröge <sebastian@centricular.com>
+
+	* gst-libs/gst/audio/gstaudioclock.c:
+	  audioclock: Fix redundant definitions compiler warning
+	  gstaudioclock.c:51:31: error: redundant redeclaration of 'gst_audio_clock_init' [-Werror=redundant-decls]
+	  G_DEFINE_TYPE (GstAudioClock, gst_audio_clock, GST_TYPE_SYSTEM_CLOCK);
+	  gstaudioclock.c:51:31: error: redundant redeclaration of 'gst_audio_clock_class_init' [-Werror=redundant-decls]
+	  G_DEFINE_TYPE (GstAudioClock, gst_audio_clock, GST_TYPE_SYSTEM_CLOCK);
+
+2014-12-13 16:04:40 +0100  Sebastian Dröge <sebastian@centricular.com>
+
+	* gst-libs/gst/audio/gstaudioclock.c:
+	  audioclock: No need to get the parent class in class_init, G_DEFINE_TYPE does that for us
+
+2014-12-13 16:01:44 +0100  Sebastian Dröge <sebastian@centricular.com>
+
+	* gst-libs/gst/audio/gstaudioclock.c:
+	  audioclock: Use G_DEFINE_TYPE instead of a custom get_type() function
+
+2014-12-12 08:32:15 -0800  Zaheer Abbas Merali <zaheermerali@gmail.com>
+
+	* gst-libs/gst/rtp/gstrtcpbuffer.c:
+	  rtcpbuffer: fix spelling of word in comment
+
+2014-12-12 14:59:49 +0000  Tim-Philipp Müller <tim@centricular.com>
+
+	* tests/check/libs/rtpbasedepayload.c:
+	  tests: rtpbasepayload: fix indentation
+
+2014-12-12 14:59:03 +0000  Tim-Philipp Müller <tim@centricular.com>
+
+	* tests/check/libs/audiodecoder.c:
+	  tests: audiodecoder: fix indentation
 
 2014-12-12 14:56:36 +0000  Tim-Philipp Müller <tim@centricular.com>
 
@@ -80,6 +6349,41 @@
 	  passed, so we must unref the caps afterwards.
 	  Fixes leaks when running test in valgrind in 1.4 branch.
 
+2014-12-12 10:02:43 +0100  Sebastian Dröge <sebastian@centricular.com>
+
+	* gst-libs/gst/video/video-orc-dist.c:
+	  video: Update disted orc source files
+
+2014-12-12 10:01:36 +0100  Sebastian Dröge <sebastian@centricular.com>
+
+	* gst-libs/gst/video/video-converter.c:
+	  Revert "video-converter: Fix compiler warning because of missing prototype of non-static function"
+	  This reverts commit 406f32a9468c837a4d71f988de10dc2198a8edc9.
+	  The problem was apparently that my video-orc.h was not updated and did not
+	  include the prototype for that function. Only a "make clean" caused it to
+	  be regenerated.
+
+2014-12-12 09:51:05 +0100  Sebastian Dröge <sebastian@centricular.com>
+
+	* gst-libs/gst/video/video-converter.c:
+	  video-converter: Fix compiler warning because of missing prototype of non-static function
+	  video-converter.c:838:1: error: no previous prototype for function
+	  '_custom_video_orc_matrix8' [-Werror,-Wmissing-prototypes]
+
+2014-12-09 22:47:31 -0300  Thiago Santos <thiagoss@osg.samsung.com>
+
+	* gst-libs/gst/audio/gstaudiodecoder.c:
+	  audiodecoder: do not use fixed caps on source pad
+	  decoders can change the caps on their source pads, so they don't
+	  use fixed caps. Having fixed caps can cause renegotiation issues.
+
+2014-12-09 22:46:42 -0300  Thiago Santos <thiagoss@osg.samsung.com>
+
+	* gst-libs/gst/video/gstvideodecoder.c:
+	  videodecoder: do not use fixed caps on source pad
+	  decoders can change the caps on their source pads, so they don't
+	  use fixed caps. Having fixed caps can cause renegotiation issues.
+
 2014-12-11 13:45:38 +0100  Thibault Saunier <tsaunier@gnome.org>
 
 	* gst/playback/gstplaybin2.c:
@@ -96,6 +6400,12 @@
 	  leak.
 	  https://bugzilla.gnome.org/show_bug.cgi?id=741198
 
+2014-12-10 16:42:12 +0100  Wim Taymans <wtaymans@redhat.com>
+
+	* gst-libs/gst/video/video-orc.orc:
+	  video-orc: make RGB pack/unpack faster
+	  Avoid all the merging and splitting and use a pair of shifts and or
+
 2014-12-11 01:53:15 +1100  Jan Schmidt <jan@centricular.com>
 
 	* gst-libs/gst/video/gstvideodecoder.h:
@@ -108,6 +6418,53 @@
 	  rtspconnection: No remove child if destroyed.
 	  Fixes https://bugzilla.gnome.org/show_bug.cgi?id=740730
 
+2014-12-08 18:53:35 +1100  Jan Schmidt <jan@centricular.com>
+
+	* tests/icles/test-reverseplay.c:
+	  reverse-play: fix seek to end when starting reverse
+	  Start reverse playback by actually seeking to the end of
+	  the file.
+
+2014-12-06 21:02:37 +0100  Wim Taymans <wtaymans@redhat.com>
+
+	* gst-libs/gst/video/video-converter.c:
+	  video-converter: set bits and format after conversion
+	  Update the current format, bits and pstride.
+	  Fixes https://bugzilla.gnome.org/show_bug.cgi?id=741187
+
+2014-12-05 22:09:45 -0300  Thiago Santos <thiagoss@osg.samsung.com>
+
+	* gst-libs/gst/video/video-converter.c:
+	  video-converter: free dither_lines
+	  Avoid a memory leak
+
+2014-12-05 18:16:53 -0500  Nicolas Dufresne <nicolas.dufresne@collabora.com>
+
+	* configure.ac:
+	  Bump ORC requirement to 4.22.1
+	  We now depend on git commit f1cfa5, "orcc: allow setting custom
+	  backup function"
+
+2014-12-05 14:51:28 +0100  Wim Taymans <wtaymans@redhat.com>
+
+	* gst-libs/gst/video/video-converter.c:
+	* gst-libs/gst/video/video-orc-dist.c:
+	* gst-libs/gst/video/video-orc-dist.h:
+	* gst-libs/gst/video/video-orc.orc:
+	  video-converter: use custom backup function
+	  Use the new orc feature to set a custom backup function.
+
+2014-12-05 12:18:42 +0100  Wim Taymans <wtaymans@redhat.com>
+
+	* gst-libs/gst/video/video-converter.c:
+	* gst-libs/gst/video/video-orc.orc:
+	  video-converter: improve matrix8 function
+	  Avoid using a constant.
+	  Avoid doing saturated adds, results are not supposed to overflow here.
+	  Rework the C backup function a little in preparation for custom backup
+	  functions in ORC.
+	  See https://bugzilla.gnome.org/show_bug.cgi?id=741015
+
 2014-11-28 15:06:27 +0100  Mathieu Duponchelle <mathieu.duponchelle@opencreed.com>
 
 	* gst-libs/gst/audio/gstaudiodecoder.c:
@@ -118,6 +6475,51 @@
 	  + Adds a test.
 	  https://bugzilla.gnome.org/show_bug.cgi?id=740853
 
+2014-11-27 05:53:20 +0100  Mathieu Duponchelle <mathieu.duponchelle@opencreed.com>
+
+	* ext/ogg/gstoggdemux.c:
+	  oggdemux: Fix seeking before the first frame.
+	  The previous code was setting keytarget to target
+	  to make sure the keyframe found for each pad was
+	  indeed before the target.
+	  Then if target == keytarget, it assumed a keyframe had been
+	  found, which was not the case if target was before the first frame
+	  in the file.
+	  This patch checks that a keyframe was indeed found, and if not
+	  seeks to 0, without bisecting again.
+	  Assuming default gst qa assets in $HOME/gst-validate
+	  seek_before_first_frame.scenario:
+	  description, seek=true, handles-states=true
+	  pause, playback-time=0.0
+	  seek, playback-time=0.0, start=0.0, flags=accurate+flush
+	  seek, playback-time=0.0, start=0.01, flags=accurate+flush
+	  seek, playback-time=0.0, start=0.1, flags=accurate+flush
+	  GST_DEBUG=*theoradec*:2 gst-validate-1.0 playbin \
+	  uri=file://$HOME/gst-validate/gst-qa-assets/medias/ogg/vorbis_theora.0.ogg \
+	  --set-scenario seek_before_first_frame.scenario
+	  https://bugzilla.gnome.org/show_bug.cgi?id=741097
+
+2014-10-08 08:54:57 +0200  Edward Hervey <bilboed@bilboed.com>
+
+	* gst/playback/gstplaybin2.c:
+	  playbin: Only check sinks which are in >= GST_STATE_READY
+	  Otherwise we endup with bogus caps intersection (from the pad template
+	  caps and not from what the actual hardware/device supports)
+	  https://bugzilla.gnome.org/show_bug.cgi?id=738131
+
+2014-12-03 10:15:18 +0100  Wim Taymans <wtaymans@redhat.com>
+
+	* gst-libs/gst/video/video-converter.c:
+	  video-converter: fix chroma resampling check
+	  Decide if we need chroma resampling by checking if we have a progressive
+	  or interlaced chroma resampler.
+
+2014-12-03 10:14:34 +0100  Wim Taymans <wtaymans@redhat.com>
+
+	* gst-libs/gst/video/video-converter.c:
+	  video-converter: only do dithering when needed
+	  Only do dithering when one of the quantizers is > 1.
+
 2014-12-02 15:58:00 -0500  Chad <crh184@psu.edu>
 
 	* gst/audiorate/gstaudiorate.c:
@@ -126,6 +6528,53 @@
 	  which accumulates over time.
 	  https://bugzilla.gnome.org/show_bug.cgi?id=741045
 
+2014-12-02 13:39:52 +0100  Wim Taymans <wtaymans@redhat.com>
+
+	* win32/common/libgstvideo.def:
+	  defs: update defs file
+
+2014-12-02 11:51:19 +0100  Wim Taymans <wtaymans@redhat.com>
+
+	* gst/videoconvert/gstvideoconvert.c:
+	* gst/videoconvert/gstvideoconvert.h:
+	  videoconvert: add dither-bits option
+	  Fix the dither option.
+	  Add a new option to set the quantizer
+
+2014-12-02 11:48:11 +0100  Wim Taymans <wtaymans@redhat.com>
+
+	* gst-libs/gst/video/video-scaler.c:
+	  video-scaler: add where orc functions could go
+	  Add the disabled orc functions in #if 0 lines for when we can enable
+	  them.
+
+2014-12-02 11:40:59 +0100  Wim Taymans <wtaymans@redhat.com>
+
+	* gst-libs/gst/video/video-converter.c:
+	* gst-libs/gst/video/video-converter.h:
+	* gst-libs/gst/video/video-dither.c:
+	  video-converter: add dithering
+	  Use the new dither object to perform dithering.
+	  Add option to select dithering method.
+	  Add option to quantize to a specific value
+
+2014-12-02 11:39:42 +0100  Wim Taymans <wtaymans@redhat.com>
+
+	* gst-libs/gst/video/video-converter.c:
+	  video-converter: add palette when needed
+
+2014-12-02 11:32:28 +0100  Wim Taymans <wtaymans@redhat.com>
+
+	* gst-libs/gst/video/Makefile.am:
+	* gst-libs/gst/video/video-dither.c:
+	* gst-libs/gst/video/video-dither.h:
+	* gst-libs/gst/video/video-orc-dist.c:
+	* gst-libs/gst/video/video-orc-dist.h:
+	* gst-libs/gst/video/video-orc.orc:
+	* gst-libs/gst/video/video.h:
+	  video-dither: add video dither helper object
+	  Add a new object that implements various dithering methods.
+
 2014-12-01 22:28:52 -0300  Thiago Santos <thiagoss@osg.samsung.com>
 
 	* tools/gst-play.c:
@@ -140,6 +6589,235 @@
 	  NetBSD does not have ESTRPIPE.
 	  https://bugzilla.gnome.org/show_bug.cgi?id=740952
 
+2014-11-28 14:28:06 +0100  Sebastian Dröge <sebastian@centricular.com>
+
+	* ext/alsa/gstalsasrc.c:
+	* ext/ogg/gstoggmux.c:
+	* ext/vorbis/gstvorbisdec.c:
+	* gst-libs/gst/audio/gstaudioringbuffer.c:
+	* gst-libs/gst/rtsp/gstrtspconnection.c:
+	* gst-libs/gst/tag/gsttagdemux.c:
+	* gst-libs/gst/tag/id3v2frames.c:
+	* gst-libs/gst/video/navigation.c:
+	* gst-libs/gst/video/video-converter.c:
+	* gst/adder/gstadder.c:
+	* gst/encoding/gstencodebin.c:
+	* gst/playback/gstdecodebin2.c:
+	* gst/playback/gstplaysink.c:
+	* gst/playback/gstsubtitleoverlay.c:
+	* gst/playback/gsturidecodebin.c:
+	* gst/subparse/gstsubparse.c:
+	* gst/tcp/gstmultihandlesink.c:
+	* gst/tcp/gstmultioutputsink.c:
+	* tests/examples/playback/playback-test.c:
+	* tests/examples/seek/jsseek.c:
+	* tools/gst-discoverer.c:
+	  Don't compare booleans for equality to TRUE and FALSE
+	  TRUE is 1, but every other non-zero value is also considered true. Comparing
+	  for equality with TRUE would only consider 1 but not the others.
+
+2014-11-16 15:54:56 +0100  Thibault Saunier <tsaunier@gnome.org>
+
+	* docs/libs/gst-plugins-base-libs-sections.txt:
+	* gst-libs/gst/pbutils/encoding-profile.c:
+	* gst-libs/gst/pbutils/encoding-profile.h:
+	* gst/encoding/gstencodebin.c:
+	* win32/common/libgstpbutils.def:
+	  encodebin: Add a way to disable caps renegotiation for output stream format
+	  In some cases, the user might want the stream outputted by encodebin to
+	  be in the exact same format during all the stream. We should let the
+	  user specify when this is the case. This commit add some API in the
+	  GstEncodingProfile to determine whether the format can be renegotiated
+	  after the encoding started or not.
+	  API:
+	  gst_encoding_profile_set_allow_dynamic_output
+	  gst_encoding_profile_get_allow_dynamic_output
+	  https://bugzilla.gnome.org/show_bug.cgi?id=740214
+
+2014-11-28 13:31:39 +0000  Tim-Philipp Müller <tim@centricular.com>
+
+	* tests/check/Makefile.am:
+	  tests: remove libs/video and videoconvert test from valgrind blacklist
+	  Seem to work fine.
+
+2014-11-28 13:29:37 +0000  Tim-Philipp Müller <tim@centricular.com>
+
+	* tests/check/Makefile.am:
+	  tests: don't run orc/* tests under valgrind
+	  They just seem to blow up for some reason that needs investigating.
+
+2014-11-28 13:11:33 +0000  Tim-Philipp Müller <tim@centricular.com>
+
+	* gst-libs/gst/tag/gsttagmux.c:
+	  tagmux: fix criticals when there are no tags at all
+
+2014-11-21 01:47:35 +1100  Jan Schmidt <jan@centricular.com>
+
+	* tests/icles/test-reverseplay.c:
+	  test-reverseplay: Use uridecodebin for input
+	  Work with any installed URI handler
+	  Add some more debug output
+
+2014-11-28 10:27:28 +0100  Sebastian Dröge <sebastian@centricular.com>
+
+	* gst-libs/gst/video/video-frame.c:
+	  video-frame: Mapping a frame with inconsistent values between GstVideoMeta and GstVideoInfo is a bug
+	  It will cause the frame to be initialized with inconsistent values that then
+	  later can cause crashes or any other kind of interesting and hard to debug
+	  bugs.
+
+2014-11-27 17:10:31 +0100  Edward Hervey <bilboed@bilboed.com>
+
+	* common:
+	  Automatic update of common submodule
+	  From 7bb2bce to ef1ffdc
+
+2014-11-27 15:28:36 +0000  Tim-Philipp Müller <tim@centricular.com>
+
+	* gst-libs/gst/video/video-blend.c:
+	  video-blend: make use of x offset when unpacking overlay image pixels
+	  Now that it's implemented we can use it, which is a minor
+	  optimisation when the image to overlay gets cropped on the
+	  left.
+
+2014-11-27 15:04:12 +0000  Tim-Philipp Müller <tim@centricular.com>
+
+	* gst-libs/gst/video/video-format.c:
+	  video-format: sprinkle some 'restrict' keywords in pack/unpack functions
+	  In cases where we just call orc directly this is somewhat
+	  superfluous, but let's do it anyway for consistency. In
+	  other cases the compiler can hopefully use this to optimise
+	  memory access a little.
+
+2014-11-27 13:01:03 +0100  Wim Taymans <wtaymans@redhat.com>
+
+	* gst-libs/gst/video/video-format.c:
+	  video-format: handle x offset in unpack
+	  Add support for x offset in almost all unpack methods.
+	  Fix naming of source and dest pixels.
+	  Add const to source pixels.
+
+2014-11-27 10:51:58 +0100  Wim Taymans <wtaymans@redhat.com>
+
+	* gst-libs/gst/video/video-format.c:
+	  video-format: improve unpack i420
+	  unpack_i420 does not need extra code to handle odd widths, the orc code
+	  already handles it fine.
+
+2014-11-27 09:45:07 +0100  Wim Taymans <wtaymans@redhat.com>
+
+	* gst/videoscale/gstvideoscale.c:
+	  videoscale: use old property name
+	  Unbreak ABI by changing to the old property name again.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=740798
+
+2014-11-25 13:39:07 +0100  Thibault Saunier <tsaunier@gnome.org>
+
+	* gst/playback/gstdecodebin2.c:
+	  decodebin: Analyze source pad before setting to PAUSED for 'simple demuxers'
+	  Before we were setting them to PAUSED and (much) later connecting to
+	  their source pad caps notify signal.
+	  There was a race where that demuxer was pushing a caps and later a buffer
+	  on its source pad when we were not even connected to its source pad caps notify
+	  signal leading to decodebin missing the information and not keeping on
+	  building the pipeline on CAPS event thus the demuxer was posting an ERROR
+	  (not linked) message on the bus. This need to be done for 'simple
+	  demuxers' because those have one ALWAYS source pad, not like usual demuxers
+	  that have several dynamic source pads.
+	  A "simple demuxer" is a demuxer that has one and only one ALWAYS source
+	  pad.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=740693
+
+2014-11-25 16:46:50 +0100  Mathieu Duponchelle <mathieu.duponchelle@opencreed.com>
+
+	* gst/playback/gstdecodebin2.c:
+	  decodebin2: Take STREAM_LOCK before sending sticky events.
+	  There was a race where:
+	  1) we would put the element to PAUSED
+	  2) It would get data sent to it from upstream
+	  3) It would thus send caps
+	  3) caps_notify_cb would continue autoplugging
+	  4) caps would flow downstream, the last pad would get exposed
+	  5) we were still not done sending the sticky events
+	  Taking the stream lock on the new element's sinkpad and only
+	  releasing it when sticky events have all been sent prevents
+	  the caps from reaching the source pad of the element before
+	  we're all set.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=740694
+
+2014-08-06 19:31:25 +0100  Tim-Philipp Müller <tim@centricular.com>
+
+	* gst/typefind/gsttypefindfunctions.c:
+	  typefindfunctions: detect mp4 common file format variant
+	  Used e.g. by UltraViolet.
+
+2014-11-25 22:01:08 +0000  Tim-Philipp Müller <tim@centricular.com>
+
+	* ext/alsa/gstalsasrc.c:
+	  alsasrc: debug message fixes
+	  In the same vein as 74e9640a.
+
+2014-11-25 17:42:07 +0100  Wim Taymans <wtaymans@redhat.com>
+
+	* gst-libs/gst/video/video-scaler.c:
+	  video-scale: combine adds when max_taps equals combine size
+	  When the amount of pixels/lines matches the amount we can combine,
+	  combine the adds and multiplies and do the scale as a separate
+	  operation.
+
+2014-11-25 17:25:02 +0100  Wim Taymans <wtaymans@redhat.com>
+
+	* gst-libs/gst/video/video-orc-dist.c:
+	* gst-libs/gst/video/video-orc-dist.h:
+	* gst-libs/gst/video/video-orc.orc:
+	* gst-libs/gst/video/video-scaler.c:
+	  video-scaler: combine scaling operations
+	  Combine add and scale of multiple lines/pixels to reduce the amount of
+	  read and writes to temporary memory.
+
+2014-11-25 14:45:23 +0000  Tim-Philipp Müller <tim@centricular.com>
+
+	* ext/pango/gsttimeoverlay.c:
+	* ext/pango/gsttimeoverlay.h:
+	  timeoverlay: add "time-line" property
+	  So we can also show running time or stream time, not just the
+	  buffer time stamps.
+
+2014-11-25 11:54:51 +0100  Wim Taymans <wtaymans@redhat.com>
+
+	* gst/videoscale/gstvideoscale.c:
+	* gst/videoscale/gstvideoscale.h:
+	  videoscale: add property to do scaling after gamma-decode
+
+2014-11-25 11:28:42 +0100  Wim Taymans <wtaymans@redhat.com>
+
+	* gst/videoscale/gstvideoscale.c:
+	* gst/videoscale/gstvideoscale.h:
+	  videoscale: add more scaling filters
+	  Adjust the filter parameters so that they use the same number of taps
+	  and method as the old ones.
+	  Add some new filters
+
+2014-11-25 10:36:13 +0100  Wim Taymans <wtaymans@redhat.com>
+
+	* gst-libs/gst/video/video-resampler.c:
+	  video-resampler: remove print
+
+2014-11-25 10:32:02 +0100  Wim Taymans <wtaymans@redhat.com>
+
+	* gst-libs/gst/video/video-resampler.c:
+	  video-resampler: improve variable taps
+	  Improve quality of variable taps on all methods by reusing the lanczos
+	  parameters where possible.
+
+2014-11-25 09:11:31 +0100  Wim Taymans <wtaymans@redhat.com>
+
+	* gst-libs/gst/video/video-resampler.c:
+	  video-resampler: Fix lanczos parameters for variable taps
+	  when using variable taps and when we are limiting the number of taps,
+	  recalculate the lanczos parameters to match the clamped value.
+	  Set the max number of taps to 128
+
 2014-11-25 11:38:34 +0300  Andrei Sarakeev <sarakusha@gmail.com>
 
 	* gst/playback/gstplaysink.c:
@@ -176,6 +6854,30 @@
 	  typefindfunctions: add audio/audible typefinder
 	  https://bugzilla.gnome.org/show_bug.cgi?id=715050
 
+2014-06-16 11:46:18 +0200  Branislav Katreniak <bkatreniak@nuvotechnologies.com>
+
+	* ext/alsa/gstalsasink.c:
+	* ext/alsa/gstalsasrc.c:
+	  alsa: Change the log messages in xrun_recovery() from DEBUG to WARNING
+	  xrun_recovery() runs when there is an error
+	  https://bugzilla.gnome.org/show_bug.cgi?id=740615
+
+2014-11-24 12:47:11 +0100  Wim Taymans <wtaymans@redhat.com>
+
+	* gst-libs/gst/video/video-converter.c:
+	  video-converter: keep track of required temp lines
+	  Make a small object to hold a pool of allocated temp lines.
+	  Keep track of how many temp lines each conversion stage needs and use
+	  this to allocate just enough temp lines from the temp lines object. from
+	  the temp lines object.
+
+2014-11-24 12:45:02 +0100  Wim Taymans <wtaymans@redhat.com>
+
+	* gst-libs/gst/video/video-converter.c:
+	  video-converter: use err line in fastpath
+	  Use the error line for temporary storage in the fastpath so that we
+	  don't have to allocate any other temp lines.
+
 2014-11-22 21:51:33 +0100  Matej Knopp <matej.knopp@gmail.com>
 
 	* gst-libs/gst/video/gstvideoencoder.c:
@@ -183,43 +6885,338 @@
 	  It is valid for streams with b-frames
 	  https://bugzilla.gnome.org/show_bug.cgi?id=740556
 
-2014-07-26 14:52:01 +0100  Tim-Philipp Müller <tim@centricular.com>
+2014-11-21 16:06:54 +0100  Wim Taymans <wtaymans@redhat.com>
 
-	* gst/playback/gstplaybin2.c:
-	  playbin: fix 'attempt to unlock mutex that was not locked' in error code path
-	  Fixes playbin unit test with latest GLib.
+	* gst-libs/gst/video/video-converter.c:
+	  video-converter: handle mixed interlaced
+	  When dealing with mixed interlaced, setup a scaler and chroma-resampler
+	  for both interlaced and progressive frames and switch between them
+	  depending on the interlace mode of the input frame.
 
-2014-11-09 14:44:36 +0000  Tim-Philipp Müller <tim@centricular.com>
+2014-11-21 16:04:11 +0100  Wim Taymans <wtaymans@redhat.com>
 
-	* gst-libs/gst/pbutils/descriptions.c:
-	  pbutils: add description for Apple Core Audio Format
-	  https://bugzilla.gnome.org/show_bug.cgi?id=739840
+	* gst-libs/gst/video/video-converter.c:
+	  video-converter: Cleanup options parsing
+	  Cleanup option parsing
+	  Add some debug
 
-2014-11-09 12:53:32 +0100  Peter G. Baum <peter@dr-baum.net>
+2014-11-21 15:59:47 +0100  Wim Taymans <wtaymans@redhat.com>
 
-	* gst/typefind/gsttypefindfunctions.c:
-	  typefind: recognize Apple Core Audio Format
-	  (CAF) Specification 1.0
-	  https://bugzilla.gnome.org/show_bug.cgi?id=739840
+	* gst-libs/gst/video/video-converter.c:
+	  video-converter: there is no need to apply x offset to temp lines
 
-2014-11-06 14:14:22 +0000  William Manley <will@williammanley.net>
+2014-11-21 15:58:34 +0100  Wim Taymans <wtaymans@redhat.com>
 
-	* gst/tcp/gstmultihandlesink.c:
-	* gst/tcp/gsttcpserversink.c:
-	  tcpserversink: Don't leak a `GSocket` and a `GInetSocketAddress`
-	  when accepting a connection.
-	  Discovered by `make check-valgrind` with the new `socketintegrationtest`.
-	  https://bugzilla.gnome.org/show_bug.cgi?id=739544
+	* gst-libs/gst/video/video-scaler.c:
+	  video-scaler: ensure both fields have the same number of taps
 
-=== release 1.4.4 ===
+2014-11-21 11:15:04 +0100  Wim Taymans <wtaymans@redhat.com>
 
-2014-11-06 12:52:52 +0100  Sebastian Dröge <sebastian@centricular.com>
+	* gst-libs/gst/video/video-converter.c:
+	  video-converter: rework the options a little
+	  Rework the options a little to make it nicer to set defaults.
 
-	* ChangeLog:
-	* NEWS:
-	* RELEASE:
-	* configure.ac:
+2014-11-21 11:12:50 +0100  Wim Taymans <wtaymans@redhat.com>
+
+	* gst-libs/gst/video/video-resampler.c:
+	* gst-libs/gst/video/video-resampler.h:
+	  video-resampler: add option to limits taps
+	  Add an option to limit the number of taps to use in automatic mode. The
+	  problem is that for lanczos, we might use more taps than what we can
+	  handle with the current precision.
+	  Rework the other options a little to make it nicer to set defaults.
+
+2014-11-20 18:20:00 +0100  Wim Taymans <wtaymans@redhat.com>
+
+	* gst-libs/gst/video/video-orc-dist.c:
+	* gst-libs/gst/video/video-orc-dist.h:
+	  video: update orc files
+
+2014-11-20 15:53:23 +0100  Edward Hervey <bilboed@bilboed.com>
+
+	* win32/common/libgstvideo.def:
+	  win32: Update defs file
+
+2014-11-19 21:18:04 +0900  Hyunjun Ko <zzoonis@gmail.com>
+
+	* gst-libs/gst/rtsp/gstrtspconnection.h:
+	  rtspconnection: fix warning on param name mismatch
+	  https://bugzilla.gnome.org/show_bug.cgi?id=740013
+
+2014-11-18 00:04:59 +1100  Jan Schmidt <jan@centricular.com>
+
+	* tests/icles/.gitignore:
+	* tests/icles/Makefile.am:
+	* tests/icles/test-reverseplay.c:
+	  tests: Add reverse playback verification test
+	  Plays a requested URI forward to EOS, then backward and
+	  checks that the same timestamp range(s) are covered.
+
+2014-11-12 15:23:37 +0100  Sebastian Dröge <sebastian@centricular.com>
+
+	* gst/videorate/gstvideorate.c:
+	  videorate: Operate in a zero-latency mode if drop-only is set to TRUE
+	  There's no reason why we would have to wait for the next buffer to decide
+	  whether to output the current one or not. We just have to check if the
+	  current one is earlier than our expected next time, which is the previous
+	  frame timestamp plus the expected frame duration.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=740018
+
+2014-11-19 14:38:03 +0100  Sebastian Dröge <sebastian@centricular.com>
+
+	* gst-libs/gst/video/video-converter.c:
+	  video-converter: Use correct enum, GstVideoFormat instead of GstFormat
+
+2014-11-19 13:25:13 +0100  Wim Taymans <wtaymans@redhat.com>
+
+	* gst-libs/gst/video/video-converter.c:
+	  video-converter: fix size check
+	  Add some debug, fix size check that decides what scaling to do first and
+	  when to do conversion.
+
+2014-11-19 12:53:03 +0100  Wim Taymans <wtaymans@redhat.com>
+
+	* gst-libs/gst/video/video-converter.c:
+	  video-converter: avoid primaries conversion when asked
+	  Don't do conversion between primaries when the option is disabled.
+	  Only do some matrix code when needed.
+
+2014-11-19 12:41:21 +0100  Wim Taymans <wtaymans@redhat.com>
+
+	* gst-libs/gst/video/video-info.c:
+	  video-info: add a note about subsampled formats
+	  Add a note about gst_video_info_set_format() and interlaced formats.
+
+2014-11-19 12:05:02 +0100  Wim Taymans <wtaymans@redhat.com>
+
+	* gst-libs/gst/video/video-converter.c:
+	* gst-libs/gst/video/video-info.c:
+	  video-info: handle interlaced size correctly
+	  Refactor GstVideoInfo init, make function to set default colorimetry.
+	  Call fill_planes after we configure the GstVideoInfo with parameters
+	  from the caps.
+	  The size of the chroma planes for interlaced vertically subsampled
+	  formats needs to be rounded up to 2, we have 2 fields with each
+	  the same anount of chroma lines.
+
+2014-11-19 12:04:02 +0100  Wim Taymans <wtaymans@redhat.com>
+
+	* gst-libs/gst/video/video-color.c:
+	  video-color: return FALSE on unparsable colorimetry
+
+2014-11-19 09:40:05 +0100  Wim Taymans <wtaymans@redhat.com>
+
+	* gst-libs/gst/video/video-format.c:
+	  video-format: handle unpack interlaced subsampled formats
+	  For interlaced vertically subsampled formats the check for even lines
+	  needs to take into account the two fields.
+
+2014-11-19 09:39:32 +0100  Wim Taymans <wtaymans@redhat.com>
+
+	* gst-libs/gst/video/video-scaler.c:
+	  video-scaler: fix interlaced shift
+
+2014-11-19 09:30:14 +0100  Wim Taymans <wtaymans@redhat.com>
+
+	* gst-libs/gst/video/video-converter.c:
+	  video-converter: keep a small backlog of lines
+	  Allow lines to jump backwards slightly, usefull for interlaced content.
+
+2014-11-19 09:28:52 +0100  Wim Taymans <wtaymans@redhat.com>
+
+	* gst-libs/gst/video/video-chroma.c:
+	  video-chroma: Fix interlaced chroma resampling
+	  Use the interlaced flag to select the right resampler.
+
+2014-11-18 16:36:08 +0100  Wim Taymans <wtaymans@redhat.com>
+
+	* gst-libs/gst/video/video-resampler.c:
+	* gst-libs/gst/video/video-scaler.c:
+	  video: add some more debuging
+
+2014-11-18 16:35:13 +0100  Wim Taymans <wtaymans@redhat.com>
+
+	* gst-libs/gst/video/video-scaler.c:
+	  video-scaler: fix interlacing some more
+	  Use the right phase.
+	  Take the right lines from interlaced content.
+
+2014-11-18 12:53:06 +0100  Wim Taymans <wtaymans@redhat.com>
+
+	* gst-libs/gst/video/video-converter.c:
+	* gst-libs/gst/video/video-converter.h:
+	  video-converter: fix dither method
+
+2014-11-18 12:52:27 +0100  Wim Taymans <wtaymans@redhat.com>
+
+	* gst-libs/gst/video/video-converter.c:
+	  video-converter: fix some leaks
+	  And remove some unused fields.
+
+2014-11-18 12:20:26 +0100  Wim Taymans <wtaymans@redhat.com>
+
+	* gst-libs/gst/video/video-converter.c:
+	* gst-libs/gst/video/video-converter.h:
+	  video-converter: add support for gamma and primaries
+	  Keep only 1 structure with all matrix information.
+	  Add structure to hold gamma information.
+	  Add more options to control gamma, primaries and color matrix handling.
+	  Add functions to compute transformations to and from XYZ and use this
+	  to convert between primaries.
+	  Merge gamma into the convert to and from RGB stage.
+	  Fix border val.
+	  Simplify the fastpath table, remove unused fields, add some more checks.
+
+2014-11-18 11:09:40 +0100  Wim Taymans <wtaymans@redhat.com>
+
+	* gst-libs/gst/video/video-color.c:
+	* gst-libs/gst/video/video-color.h:
+	  video-color: add method to get primaries info
+
+2014-11-18 11:08:10 +0100  Wim Taymans <wtaymans@redhat.com>
+
+	* gst-libs/gst/video/video-color.c:
+	* gst-libs/gst/video/video-info.c:
+	  video-color: fix default 601 primaries
+
+2014-11-18 11:06:20 +0100  Wim Taymans <wtaymans@redhat.com>
+
+	* gst-libs/gst/video/video-scaler.c:
+	  video-scaler: fix interlaced taps setup
+
+2014-11-14 09:15:22 +0100  Wim Taymans <wtaymans@redhat.com>
+
+	* gst-libs/gst/video/video-color.c:
+	* gst-libs/gst/video/video-color.h:
+	* gst-libs/gst/video/video-info.c:
+	  video-color: make sRGB colorimetry the default for RGB
+
+2014-11-13 12:03:26 +0100  Wim Taymans <wtaymans@redhat.com>
+
+	* gst-libs/gst/video/video-converter.c:
+	  video-converter: split YUV to and from RGB conversions
+	  Prepare for doing full gamma corrected conversion and scaling by first
+	  splitting the conversions from and to RGB into separate steps.
+	  split scaling in downscaling and upscaling steps to be performed before
+	  and after conversion respectively.
+
+2014-11-13 12:02:07 +0100  Wim Taymans <wtaymans@redhat.com>
+
+	* gst-libs/gst/video/video-converter.c:
+	  video-converter: don't convert too much
+	  because we do conversion after downscaling we only need to convert the
+	  smallest width.
+
+2014-11-13 12:00:05 +0100  Wim Taymans <wtaymans@redhat.com>
+
+	* gst-libs/gst/video/video-converter.c:
+	* gst-libs/gst/video/video-orc.orc:
+	  video-converter: add orc splat functions to draw border
+
+2014-11-05 21:52:44 +0000  Tim-Philipp Müller <tim@centricular.com>
+
+	* ext/pango/gstbasetextoverlay.c:
+	  Revert "basetextoverlay: Fix segfault when overlay outside the frame"
+	  This is not correct. overlay->silent is a property and we
+	  should not just flip the property forever because one text
+	  we render is outside of the frame. The next one might not
+	  be, the positioning properties can be changed after all.
+	  The lower layers should handle clipping, and now do.
+	  This reverts commit 1cc311156cc3908d1d9888fbcda67305fc647337.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=738984
+	  https://bugzilla.gnome.org/show_bug.cgi?id=739281
+
+2014-11-05 21:46:47 +0000  Tim-Philipp Müller <tim@centricular.com>
+
+	* ext/pango/gstbasetextoverlay.c:
+	  Revert "basetextoverlay: segfault when xpos >= video size"
+	  This is not right, even if it might avoid a crash. We don't
+	  want to just set xpos/ypos to 0 in those cases. Clipping
+	  should be done properly, see bug #739281 for that.
+	  This reverts commit 900d0267d511e9553eec44d948d7e33ead7dc903.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=738984
+	  https://bugzilla.gnome.org/show_bug.cgi?id=739281
+
+2014-11-16 23:26:45 +0000  Tim-Philipp Müller <tim@centricular.com>
+
+	* gst-libs/gst/video/video-blend.c:
+	  video-blend: minor optimisation
+	  Only need to run matrix on those pixels which
+	  will actually be used.
+
+2014-11-16 19:28:54 +0000  Tim-Philipp Müller <tim@centricular.com>
+
+	* tests/icles/Makefile.am:
+	* tests/icles/test-overlay-blending.c:
+	  tests: make overlay blending test slightly less boring
+
+2014-11-16 16:34:31 +0000  Tim-Philipp Müller <tim@centricular.com>
+
+	* gst-libs/gst/video/video-blend.c:
+	  video-blend: fix clipping of overlay images on the left
+	  Fix clipping of images that are partially left of the video
+	  surface, they would get clipped on the right side instead of
+	  the left side, because the video unpack functions currently
+	  ignore the x offset parameter. Work around that until that
+	  is implemented.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=739281
+
+2014-11-16 16:31:45 +0000  Tim-Philipp Müller <tim@centricular.com>
+
+	* gst-libs/gst/video/video-blend.c:
+	  video-blend: fix allocation of temp src line for wide sources
+	  Fix allocation of temporary source line buffers for source
+	  images that are wider than the video overlay surface.
+
+2014-11-16 01:34:09 +0000  Tim-Philipp Müller <tim@centricular.com>
+
+	* tests/icles/.gitignore:
+	* tests/icles/Makefile.am:
+	* tests/icles/test-overlay-blending.c:
+	  tests: add visual overlay composition blending test
+	  Shows visual result of blending a logo on top of
+	  a video surface, esp. when the logo is partially
+	  outside of the video surface and needs to be
+	  clipped.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=739281
+
+2014-11-16 01:32:55 +0000  Tim-Philipp Müller <tim@centricular.com>
+
+	* tests/check/libs/video.c:
+	  tests: fix leak in video unit test
+
+2014-11-10 16:36:35 +0530  Vineeth T M <vineeth.tm@samsung.com>
+
+	* gst-libs/gst/video/video-blend.c:
+	  video-blend: fix blending of rectangles partially or fully outside of the video
+	  In case of overlay being completely or partially outside
+	  the video frame, the offset calculations are not right,
+	  which resulted in the overlay not being displayed as
+	  expected, or crashes due to invalid memory access.
+	  When the overlay rectangle is completely outside,
+	  we need not render the overlay at all.
+	  For partial display of overlay rectangles, src_yoff
+	  was not being calculated, hence it was always clipping
+	  the bottom half of the overlay, By calculating the
+	  src_yoff, now the overlay is clipped properly.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=739281
+
+2014-11-10 12:12:42 +0530  Vineeth T M <vineeth.tm@samsung.com>
+
+	* tests/check/libs/video.c:
+	  tests: video: add video blend test
+	  Add test to check rendering of overlays of different sizes
+	  that are completely or partially outside the video surface.
+	  Once the overlay is blended to the video, verify if the
+	  position of the blended overlay is as expected, by comparing
+	  the pixels of the blended video with the expected values.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=739281
+
+2014-11-15 23:15:06 +0000  Tim-Philipp Müller <tim@centricular.com>
+
+	* docs/plugins/gst-plugins-base-plugins.args:
 	* docs/plugins/gst-plugins-base-plugins.hierarchy:
+	* docs/plugins/gst-plugins-base-plugins.signals:
 	* docs/plugins/inspect/plugin-adder.xml:
 	* docs/plugins/inspect/plugin-alsa.xml:
 	* docs/plugins/inspect/plugin-app.xml:
@@ -246,52 +7243,247 @@
 	* docs/plugins/inspect/plugin-vorbis.xml:
 	* docs/plugins/inspect/plugin-ximagesink.xml:
 	* docs/plugins/inspect/plugin-xvimagesink.xml:
-	* gst-plugins-base.doap:
-	* win32/common/_stdint.h:
-	* win32/common/config.h:
-	  Release 1.4.4
+	  docs: update to git
 
-2014-11-06 12:36:18 +0100  Sebastian Dröge <sebastian@centricular.com>
+2014-11-15 23:13:42 +0000  Tim-Philipp Müller <tim@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/lt.po:
-	* po/lv.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:
-	  Update .po files
+	* gst/gio/gstgiostreamsink.c:
+	* gst/gio/gstgiostreamsrc.c:
+	* gst/playback/gstplaybin2.c:
+	  docs: fix some gtk-doc warnings
+	  Deprecated entities found in documentation for xyz:Long_description
+	  .
+
+2014-11-12 09:57:38 +0100  Wim Taymans <wtaymans@redhat.com>
+
+	* gst-libs/gst/video/video-converter.c:
+	  video-converter: take offset into account when unpacking
+	  When we can directly take the input line from the source frame when
+	  unpacking, also take into account the x offset.
+
+2014-11-12 09:57:12 +0100  Wim Taymans <wtaymans@redhat.com>
+
+	* gst-libs/gst/video/video-converter.c:
+	  video-converter: add some notes
+
+2014-11-11 16:19:03 +0100  Wim Taymans <wtaymans@redhat.com>
+
+	* docs/libs/gst-plugins-base-libs-sections.txt:
+	* win32/common/libgstvideo.def:
+	  defs: update defs and docs
+
+2014-11-11 16:11:15 +0100  Wim Taymans <wtaymans@redhat.com>
+
+	* gst-libs/gst/video/video-color.c:
+	* gst-libs/gst/video/video-color.h:
+	* tests/check/libs/video.c:
+	  video-color: add gamma encode/decode functions
+	  Add functions to encode and decode gamma.
+	  Add unit test to check that encode and decode are eachothers inverse
+	  and that the limits are respected.
+
+2014-11-10 14:53:13 +0100  Wim Taymans <wtaymans@redhat.com>
+
+	* tests/check/libs/video.c:
+	  test: add scaling test
+	  Sort pack and unpack performance measurements
+
+2014-11-10 12:01:48 +0100  Wim Taymans <wtaymans@redhat.com>
+
+	* gst-libs/gst/video/video-orc-dist.c:
+	* gst-libs/gst/video/video-orc.orc:
+	  video-orc: update disted file
+	  and disable one failing function
+
+2014-10-24 17:08:43 +0200  Wim Taymans <wtaymans@redhat.com>
+
+	* gst/videoscale/Makefile.am:
+	* gst/videoscale/gstvideoscale.c:
+	* gst/videoscale/gstvideoscale.h:
+	* gst/videoscale/gstvideoscaleorc-dist.c:
+	* gst/videoscale/gstvideoscaleorc-dist.h:
+	* gst/videoscale/gstvideoscaleorc.orc:
+	* gst/videoscale/vs_4tap.c:
+	* gst/videoscale/vs_4tap.h:
+	* gst/videoscale/vs_fill_borders.c:
+	* gst/videoscale/vs_fill_borders.h:
+	* gst/videoscale/vs_image.c:
+	* gst/videoscale/vs_image.h:
+	* gst/videoscale/vs_lanczos.c:
+	* gst/videoscale/vs_scanline.c:
+	* gst/videoscale/vs_scanline.h:
+	* tests/check/Makefile.am:
+	  videoscale: port to new API
+
+2014-11-10 11:40:11 +0100  Wim Taymans <wtaymans@redhat.com>
+
+	* gst-libs/gst/video/video-orc.orc:
+	  video-orc: use faster saturating conversions
+	  saturating conversions are generally faster.
+
+2014-11-07 15:45:04 +0100  Wim Taymans <wtaymans@redhat.com>
+
+	* gst-libs/gst/video/video-chroma.c:
+	* gst-libs/gst/video/video-orc.orc:
+	  video-chroma: add ORC version of UP_H2_CS
+	  It is however slower than the C version and thus disabled.
+
+2014-11-09 14:44:36 +0000  Tim-Philipp Müller <tim@centricular.com>
+
+	* gst-libs/gst/pbutils/descriptions.c:
+	  pbutils: add description for Apple Core Audio Format
+	  https://bugzilla.gnome.org/show_bug.cgi?id=739840
+
+2014-11-09 12:53:32 +0100  Peter G. Baum <peter@dr-baum.net>
+
+	* gst/typefind/gsttypefindfunctions.c:
+	  typefind: recognize Apple Core Audio Format
+	  (CAF) Specification 1.0
+	  https://bugzilla.gnome.org/show_bug.cgi?id=739840
+
+2014-11-09 10:47:14 +0100  Sebastian Dröge <sebastian@centricular.com>
+
+	* tests/check/pipelines/capsfilter-renegotiation.c:
+	  capsfilter-renegotiation: Use assertions from libcheck for more information on failures
+
+2014-11-07 12:06:10 +0100  Wim Taymans <wtaymans@redhat.com>
+
+	* gst-libs/gst/video/video-chroma.c:
+	* gst-libs/gst/video/video-orc-dist.c:
+	* gst-libs/gst/video/video-orc-dist.h:
+	* gst-libs/gst/video/video-orc.orc:
+	* tests/check/libs/video.c:
+	  video-chroma: ORCify 2x vertical upsampling
+	  Make an ORC version of the 2x vertical upsampling code.
+	  Improve unit tests, test chroma up and down sampling.
+	  memset buffer in conversion to make valgrind happy.
+
+2014-11-06 14:14:22 +0000  William Manley <will@williammanley.net>
+
+	* gst/tcp/gstmultihandlesink.c:
+	* gst/tcp/gsttcpserversink.c:
+	  tcpserversink: Don't leak a `GSocket` and a `GInetSocketAddress`
+	  when accepting a connection.
+	  Discovered by `make check-valgrind` with the new `socketintegrationtest`.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=739544
+
+2014-11-03 01:08:27 +0000  William Manley <will@williammanley.net>
+
+	* tests/check/Makefile.am:
+	* tests/check/pipelines/.gitignore:
+	* tests/check/pipelines/tcp.c:
+	  tests: Add TCP pipelines test
+	  There don't seem to be any unit tests for the socket handling elements.  As
+	  I am about to attempt some refactorings I've added some basic tests which
+	  exercise some of the happy-paths in tcpclientsrc, tcpserversrc,
+	  tcpserversink and tcpclientsink.  They should let me know if I've caused
+	  serious breakage.
+	  They are far from exhaustive but are sufficient for me to have caught a few
+	  memory-leaks in the existing code.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=739544
+
+2014-11-06 18:18:50 +0100  Wim Taymans <wtaymans@redhat.com>
+
+	* tests/check/libs/video.c:
+	  tests: add video conversion test
+	  Go through all conversions and make a list of performance.
+
+2014-11-06 18:13:12 +0100  Wim Taymans <wtaymans@redhat.com>
+
+	* gst-libs/gst/video/video-info.c:
+	  video-info: use h-cosited chroma for HD video by default
+
+2014-11-06 18:09:04 +0100  Wim Taymans <wtaymans@redhat.com>
+
+	* gst-libs/gst/video/video-converter.c:
+	  video-converter: clamp lines
+
+2014-11-06 16:29:16 +0100  Wim Taymans <wtaymans@redhat.com>
+
+	* gst-libs/gst/video/video-orc-dist.c:
+	* gst-libs/gst/video/video-orc-dist.h:
+	  video-orc: update disted files
+
+2014-11-06 16:18:25 +0100  Wim Taymans <wtaymans@redhat.com>
+
+	* gst-libs/gst/video/video-converter.c:
+	* gst-libs/gst/video/video-orc.orc:
+	  video-converter: ORCify 8<->16 conversion
+
+2014-11-06 15:30:02 +0100  Wim Taymans <wtaymans@redhat.com>
+
+	* gst-libs/gst/video/video-converter.c:
+	  video-converter: unpack into the destination when needed
+	  Make sure we write into the destination line when we can propose the
+	  dest allocator.
+
+2014-11-06 15:29:50 +0100  Wim Taymans <wtaymans@redhat.com>
+
+	* gst-libs/gst/video/video-converter.c:
+	  video-converter: add more debug
+
+2014-11-06 15:01:27 +0100  Sebastian Dröge <sebastian@centricular.com>
+
+	* gst-libs/gst/video/video-orc-dist.c:
+	* gst-libs/gst/video/video-orc-dist.h:
+	  video: Update disted orc files
+
+2014-11-06 13:08:42 +0100  Wim Taymans <wtaymans@redhat.com>
+
+	* gst-libs/gst/video/video-chroma.c:
+	* gst-libs/gst/video/video-orc.orc:
+	* tests/check/libs/video.c:
+	  video-chroma: optimize chroma subsampling a little
+	  Combine multiplies in 4x filters.
+	  Rename conversion functions to make them nicer in orc.
+	  Add ORC versions for various downsampling algorithms
+	  Add unit test chroma resampler
+
+2014-11-06 10:43:11 +0100  Wim Taymans <wtaymans@redhat.com>
+
+	* tests/check/libs/video.c:
+	  tests: make pack/unpack test
+	  Make a more complete pack/unpack test, check if the image after
+	  pack/unpack has the same color and precision, and has correctly
+	  duplicated subsampled pixels.
+
+2014-11-06 10:42:09 +0100  Wim Taymans <wtaymans@redhat.com>
+
+	* tests/check/libs/video.c:
+	  tests: get the correct number of video formats
+	  Make a method to get the number of formats (including the last one).
+
+2014-11-06 09:44:14 +0100  Wim Taymans <wtaymans@redhat.com>
+
+	* gst-libs/gst/video/video-format.h:
+	  video-format: update some docs and add a FIXME(2.0)
+
+2014-11-06 09:38:06 +0100  Wim Taymans <wtaymans@redhat.com>
+
+	* gst-libs/gst/video/video-format.c:
+	  video-format: add range extension to BGR_10XE format
+
+2014-11-06 09:34:59 +0100  Wim Taymans <wtaymans@redhat.com>
+
+	* gst-libs/gst/video/video-format.c:
+	* gst-libs/gst/video/video-orc.orc:
+	  video-format: fix pack of 4:2:0 formats
+	  When packing 4:2:0 formats, we need to take the chroma from the even
+	  lines, for the odd lines we only take luminance.
+
+2014-11-06 09:32:21 +0100  Wim Taymans <wtaymans@redhat.com>
+
+	* gst-libs/gst/video/video-format.c:
+	  video-format: fix range extension of UYVP
+	  We need to shift the top 6 bits to the lower 6 bits
+
+2014-11-06 09:28:06 +0100  Wim Taymans <wtaymans@redhat.com>
+
+	* gst-libs/gst/video/video-chroma.c:
+	  video-chroma: do h subsampling after v subsampling
+	  We only need to do the horizontal subsampling on 1 line if we do it
+	  after vertical subsampling and we also avoid doing vertical subsampling
+	  on unused pixels.
 
 2014-11-06 09:39:08 +0000  Tim-Philipp Müller <tim@centricular.com>
 
@@ -300,6 +7492,602 @@
 	  Fixes 'make check' on debian powerpc32 buildbot:
 	  libs/libsabi.c:95:26: fatal error: struct_ppc32.h: No such file or directory
 
+2014-11-05 04:34:44 +0900  Danny Song <danny.song.ga@gmail.com>
+
+	* tests/check/elements/adder.c:
+	  test : fix leaks in adder unit test
+	  https://bugzilla.gnome.org/show_bug.cgi?id=739640
+
+2014-11-05 11:54:31 +0100  Wim Taymans <wtaymans@redhat.com>
+
+	* gst-libs/gst/video/video-converter.c:
+	  video-converter: keep separate lines with border
+	  Make separate with a border around them so that we can avoid a memcpy.
+
+2014-11-05 11:52:21 +0100  Wim Taymans <wtaymans@redhat.com>
+
+	* gst-libs/gst/video/video-scaler.c:
+	  video-scaler: avoid memcpy when not needed
+
+2014-11-05 11:51:44 +0100  Wim Taymans <wtaymans@redhat.com>
+
+	* gst-libs/gst/video/video-converter.c:
+	  video-converter: pass output line correctly
+
+2014-11-04 09:30:45 +0100  Wim Taymans <wtaymans@redhat.com>
+
+	* gst-libs/gst/video/video-converter.c:
+	  video-converter: rework the converter to allow more optimizations
+	  Rework the converter, keep track of the conversion steps by chaining the
+	  cache objects together. We can then walk the chain and decide the
+	  optimal allocation pattern.
+	  Remove the free function, we're not going to need this anytime soon.
+	  Keep track of what output line we're constructing so that we can let the
+	  allocator return a line directly into the target image when possible.
+	  Directly read from the source pixels when possible.
+
+2014-11-04 11:03:50 +0100  Wim Taymans <wtaymans@redhat.com>
+
+	* gst-libs/gst/video/video-scaler.c:
+	  video-scaler: fix temp line allocation
+	  We need to allocate the templine with the amount of pixels we are going
+	  to handle, which we only know for the vertical resampler when we are
+	  asked to resample.
+
+2014-11-04 11:02:49 +0100  Wim Taymans <wtaymans@redhat.com>
+
+	* gst-libs/gst/video/video-scaler.c:
+	  video-scaler: fix taps in interlaced mode
+
+2014-11-04 11:01:52 +0100  Wim Taymans <wtaymans@redhat.com>
+
+	* gst-libs/gst/video/video-scaler.c:
+	  video-scaler: fix phases in interlaced mode
+
+2014-11-04 09:29:58 +0100  Wim Taymans <wtaymans@redhat.com>
+
+	* gst-libs/gst/video/video-orc.orc:
+	  video-orc: fix v_2tap_u16
+
+2014-11-03 16:18:41 +0100  Wim Taymans <wtaymans@redhat.com>
+
+	* gst-libs/gst/video/video-converter.c:
+	  video-converter: add extra pixels for the border
+	  We need extra pixels for the border.
+
+2014-11-03 15:36:26 +0100  Wim Taymans <wtaymans@redhat.com>
+
+	* gst-libs/gst/video/video-orc.orc:
+	* gst-libs/gst/video/video-scaler.c:
+	  video-scaler: add support for 16bits formats
+	  Add scaler functions for 16 bits formats.
+	  Rename the scaler functions so that 16bits versions don't look too
+	  weird.
+	  Remove old unused h_2tap functions
+	  Fix v_ntap functions, it was using 1 tap too little.
+
+2014-11-03 15:33:24 +0100  Wim Taymans <wtaymans@redhat.com>
+
+	* gst-libs/gst/video/video-converter.c:
+	  video-converter: Add support for 16 bits formats
+	  Rework the way we track the current state of the video through the
+	  different conversion phases and use this to make sure we use the right
+	  format and pstride where needed.
+
+2014-10-22 13:37:40 +0100  William Manley <will@williammanley.net>
+
+	* gst-libs/gst/allocators/gstdmabuf.c:
+	  docs: gst_dmabuf_allocator_alloc: Improve documentation
+	  https://bugzilla.gnome.org/show_bug.cgi?id=739545
+
+2014-11-03 10:07:56 +0100  Wim Taymans <wtaymans@redhat.com>
+
+	* gst-libs/gst/video/video-orc.orc:
+	  video-orc: comment out unused function
+	  A faster version of 4tap horizontal scaling causes segfaults in ORC
+	  presumably because it uses too many registers so disable it to avoid
+	  crashing in the ORC tests.
+
+2014-11-02 21:45:30 +0100  Andreas Frisch <fraxinas@opendreambox.org>
+
+	* gst/playback/gstsubtitleoverlay.c:
+	  subtitleoverlay: return available factory CAPS instead of ANY on CAPS query
+	  https://bugzilla.gnome.org/show_bug.cgi?id=739536
+
+2014-11-03 08:12:44 +0100  Sebastian Dröge <sebastian@centricular.com>
+
+	* gst-libs/gst/video/video-scaler.c:
+	  video-scaler: Fix compiler warning
+	  video-scaler.c:151:58: error: implicit conversion from enumeration type
+	  'GstVideoScalerFlags' to different enumeration type
+	  'GstVideoResamplerFlags' [-Werror,-Wenum-conversion]
+	  gst_video_resampler_init (&scale->resampler, method, flags, out_size,
+	  ~~~~~~~~~~~~~~~~~~~~~~~~                             ^~~~~
+
+2014-11-01 20:08:01 +0000  Luis de Bethencourt <luis.bg@samsung.com>
+
+	* gst-libs/gst/rtp/gstrtpbuffer.c:
+	  rtp: Do not use deprecated gtk-doc 'Rename to' tag
+	  GObject introspection GTK-Doc tag "Rename to" has been deprecated, changing to
+	  rename-to annotation.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=739514
+
+2014-11-01 14:58:13 +0000  Tim-Philipp Müller <tim@centricular.com>
+
+	* gst-libs/gst/video/video-scaler.c:
+	* gst-libs/gst/video/video-scaler.h:
+	  video: fix some g-i / gtk-doc warnings
+
+2014-11-01 14:47:26 +0000  Tim-Philipp Müller <tim@centricular.com>
+
+	* gst-libs/gst/video/video-orc-dist.c:
+	* gst-libs/gst/video/video-orc-dist.h:
+	  video: update disted orc backup functions
+	  Fixes build without orc.
+
+2014-11-01 14:28:55 +0000  Tim-Philipp Müller <tim@centricular.com>
+
+	* docs/libs/gst-plugins-base-libs-sections.txt:
+	* gst-libs/gst/video/video-blend.c:
+	  video: add video blend helper functions to docs
+	  I don't think those were ever meant to be made public,
+	  but they are, so we might as well document them.
+
+2014-11-01 13:14:32 +0100  Wim Taymans <wtaymans@redhat.com>
+
+	* gst-libs/gst/video/video-orc.orc:
+	* gst-libs/gst/video/video-scaler.c:
+	  video-scaler: ORCify vertical ntap function
+
+2014-11-01 12:58:01 +0100  Wim Taymans <wtaymans@redhat.com>
+
+	* gst-libs/gst/video/video-scaler.c:
+	  video-scaler: handle 4tap interlaced
+
+2014-10-31 16:53:06 +0100  Wim Taymans <wtaymans@redhat.com>
+
+	* gst-libs/gst/video/video-orc-dist.c:
+	* gst-libs/gst/video/video-orc-dist.h:
+	  video-orc: update dist files
+
+2014-10-31 16:49:43 +0100  Wim Taymans <wtaymans@redhat.com>
+
+	* gst-libs/gst/video/video-orc.orc:
+	* gst-libs/gst/video/video-scaler.c:
+	  video-scaler: add ORC optimized ntap horizontal scalers
+
+2014-10-29 16:28:28 +0530  Ravi Kiran K N <ravi.kiran@samsung.com>
+
+	* tests/icles/playback/test.c:
+	* tests/icles/playback/test2.c:
+	* tests/icles/playback/test4.c:
+	  tests/playback: quit from main loop
+	  Listen for eos and error signal to quit main loop.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=739346
+
+2014-10-29 16:26:07 +0530  Ravi Kiran K N <ravi.kiran@samsung.com>
+
+	* tests/icles/playback/test2.c:
+	* tests/icles/playback/test4.c:
+	  tests/playback: correct state change checking
+	  Correct the test apps check if result of state change is not failure as the
+	  state change can happen async
+	  https://bugzilla.gnome.org/show_bug.cgi?id=739346
+
+2014-10-31 22:52:43 +1100  Jan Schmidt <jan@centricular.com>
+
+	* gst-libs/gst/video/video-orc-dist.c:
+	* gst-libs/gst/video/video-orc-dist.h:
+	  video: Update disted orc files for new functions.
+	  Fixes the build when building without ORC
+
+2014-10-31 11:07:06 +0100  Wim Taymans <wtaymans@redhat.com>
+
+	* gst-libs/gst/video/video-converter.c:
+	  video-converter: align offsets to subsampling
+	  Only apply an offset that is a multiple of the subsampling. To handle
+	  arbitrary offsets in the future, we need to be able to chroma-resample
+	  part of the borders.
+
+2014-10-31 10:38:15 +0100  Wim Taymans <wtaymans@redhat.com>
+
+	* gst-libs/gst/video/video-converter.c:
+	  video-converter: clamp output lines
+
+2014-10-31 10:34:46 +0100  Wim Taymans <wtaymans@redhat.com>
+
+	* gst-libs/gst/video/video-format.c:
+	  video-format: add alignment checks
+	  Some of the ORC functions need specific alignment
+
+2014-10-31 10:33:42 +0100  Wim Taymans <wtaymans@redhat.com>
+
+	* gst-libs/gst/video/video-scaler.c:
+	  video-scaler: fix offset check
+
+2014-10-30 18:41:01 +0100  Wim Taymans <wtaymans@redhat.com>
+
+	* gst-libs/gst/video/video-converter.c:
+	  video-converter: also chroma up/downsample when scaling
+
+2014-10-30 18:40:43 +0100  Wim Taymans <wtaymans@redhat.com>
+
+	* gst-libs/gst/video/video-converter.c:
+	  video-converter: clamp input lines correctly
+
+2014-10-30 23:53:39 +0000  Tim-Philipp Müller <tim@centricular.com>
+
+	* gst-libs/gst/video/video-scaler.c:
+	  video-scaler: fix build without orc
+	  https://bugzilla.gnome.org/show_bug.cgi?id=739433
+
+2014-10-30 17:30:33 +0100  Wim Taymans <wtaymans@redhat.com>
+
+	* gst-libs/gst/video/video-converter.c:
+	  video-converter: add border color
+
+2014-10-30 16:57:20 +0100  Wim Taymans <wtaymans@redhat.com>
+
+	* gst-libs/gst/video/video-converter.c:
+	* gst-libs/gst/video/video-converter.h:
+	  video-converter: add support for src/dest regions
+	  Add support for cropping the source and placing the converted image
+	  into a rectangle in the destination frame.
+	  Add an option to add a border and border color.
+
+2014-06-05 14:50:15 +0100  Vincent Penquerc'h <vincent.penquerch@collabora.co.uk>
+
+	* ext/vorbis/gstvorbisenc.c:
+	  vorbisenc: push an updated segment stop time when we know it
+	  When encoding, libvorbis will tell us how many samples are encoded
+	  in the buffer it returns. This number may be less than the maximum
+	  of samples in the block, if this is the last packet. In we have no
+	  segment end time, we set it to the end time of that last sample to
+	  tell downstream that the buffer contains less samples.
+
+2014-06-05 14:54:31 +0100  Vincent Penquerc'h <vincent.penquerch@collabora.co.uk>
+
+	* ext/ogg/gstoggmux.c:
+	  oggmux: set correct granpos on last page when samples are clipped
+	  Samples may be clipped at the end, and this is conveyed by a
+	  granulepos that's smaller than it would otherwise be. Use the
+	  segment stop time to detect this, and calculate the right
+	  granulepos.
+
+2014-06-05 11:26:08 +0100  Vincent Penquerc'h <vincent.penquerch@collabora.co.uk>
+
+	* ext/ogg/gstoggdemux.c:
+	* ext/ogg/gstoggdemux.h:
+	  oggdemux: fix last buffer timestamp when samples are clipped
+	  The end of a stream can be clipped by setting the granulepos of
+	  the last page to a lower value that it otherwise would be.
+
+2014-10-30 14:48:45 +0100  Wim Taymans <wtaymans@redhat.com>
+
+	* tests/check/libs/video.c:
+	  tests: fix test
+
+2014-10-03 12:42:46 +0100  Vincent Penquerc'h <vincent.penquerch@collabora.co.uk>
+
+	* tools/gst-discoverer.c:
+	  gst-discoverer: error out on failure to copy
+	  This should not really fail, but let's check return value
+	  anyway as it guards against future changes.
+	  Coverity 1135731
+
+2014-10-03 12:28:30 +0100  Vincent Penquerc'h <vincent.penquerch@collabora.co.uk>
+
+	* gst-libs/gst/rtp/gstrtpbuffer.c:
+	  rtpbuffer: add a const where appropriate
+
+2014-10-03 12:08:05 +0100  Vincent Penquerc'h <vincent.penquerch@collabora.co.uk>
+
+	* gst/typefind/gsttypefindfunctions.c:
+	  typefind: remove unneeded test
+	  We've already bailed out if we have less than 5 bytes.
+	  Coverity 1226441
+
+2014-10-30 11:33:17 +0000  Tim-Philipp Müller <tim@centricular.com>
+
+	* win32/common/libgstvideo.def:
+	  Update libgstvideo.def for resampler -> video_resample renaming
+
+2014-10-30 11:46:14 +0100  Wim Taymans <wtaymans@redhat.com>
+
+	* gst-libs/gst/video/video-orc.orc:
+	* gst-libs/gst/video/video-scaler.c:
+	  video-scaler: add more ORC functions
+	  Add the old ORC functions for nearest and linear. Label them as Low
+	  quality because they are not as accurate but ORC lacks opcodes to
+	  express this for now.
+
+2014-10-30 11:43:52 +0100  Wim Taymans <wtaymans@redhat.com>
+
+	* gst-libs/gst/video/Makefile.am:
+	* gst-libs/gst/video/resampler.c:
+	* gst-libs/gst/video/resampler.h:
+	* gst-libs/gst/video/video-converter.c:
+	* gst-libs/gst/video/video-resampler.c:
+	* gst-libs/gst/video/video-resampler.h:
+	* gst-libs/gst/video/video-scaler.c:
+	* gst-libs/gst/video/video-scaler.h:
+	  video-scaler: rename resampler to video-resampler
+	  Prefix the resampler with video-. It we would like to reuse the
+	  resampler for audio later, we can copy/move it and deprecate this
+	  one.
+
+2014-10-29 17:38:33 +0100  Wim Taymans <wtaymans@redhat.com>
+
+	* gst-libs/gst/video/video-converter.c:
+	* gst-libs/gst/video/video-scaler.c:
+	* gst-libs/gst/video/video-scaler.h:
+	  video-scaler: remove color range argument
+	  We just need to clip to the format limits, if there is extra headroom in
+	  the range we can use that without problems.
+
+2014-10-29 17:14:51 +0100  Wim Taymans <wtaymans@redhat.com>
+
+	* win32/common/libgstvideo.def:
+	  defs: update defs
+
+2014-10-29 16:20:56 +0100  Wim Taymans <wtaymans@redhat.com>
+
+	* gst-libs/gst/video/video-orc-dist.c:
+	* gst-libs/gst/video/video-orc-dist.h:
+	* gst-libs/gst/video/video-orc.orc:
+	* gst-libs/gst/video/video-scaler.c:
+	  video-scaler: add ORC optimized versions
+	  Add ORC optimized versions of 2 and 4tap vertical scaling. Provide
+	  a high quality 12 bits and a low quality 6 bits version.
+
+2014-10-29 16:13:02 +0100  Wim Taymans <wtaymans@redhat.com>
+
+	* gst-libs/gst/video/video-scaler.c:
+	  video-scaler: add precision to make_s16_taps
+
+2014-10-29 13:19:00 +0100  Wim Taymans <wtaymans@redhat.com>
+
+	* gst-libs/gst/video/video-converter.c:
+	  video-converter: copy config fields
+	  When setting a new config, copy all the fields into our own config and
+	  not only the ones we know about.
+
+2014-10-29 13:17:39 +0100  Wim Taymans <wtaymans@redhat.com>
+
+	* gst-libs/gst/video/resampler.c:
+	* gst-libs/gst/video/resampler.h:
+	* gst-libs/gst/video/video-scaler.c:
+	  resampler: make offset/phase/n_taps uint32
+	  Make various resizer fields uint32 so that we can use them in ORC
+	  functions later.
+
+2014-10-27 11:59:14 +0100  Wim Taymans <wtaymans@redhat.com>
+
+	* gst-libs/gst/video/video-converter.c:
+	  video-converter: don't convert too much
+	  Always convert the smallest width.
+
+2014-10-27 10:13:47 +0100  Wim Taymans <wtaymans@redhat.com>
+
+	* gst-libs/gst/video/resampler.c:
+	* gst-libs/gst/video/video-scaler.c:
+	* tests/check/libs/video.c:
+	  resampler: make shift easier to use
+
+2014-10-26 05:58:56 +0100  Wim Taymans <wtaymans@redhat.com>
+
+	* gst-libs/gst/video/resampler.c:
+	* gst-libs/gst/video/resampler.h:
+	* gst-libs/gst/video/video-converter.c:
+	  resampler: add parameters to cubic filter
+	  Improve cubic filter and add parameters. Switch to mitchell filter
+	  by default.
+
+2014-10-24 16:51:37 +0200  Wim Taymans <wtaymans@redhat.com>
+
+	* gst-libs/gst/video/Makefile.am:
+	* gst-libs/gst/video/video-converter.c:
+	* gst-libs/gst/video/video-converter.h:
+	* gst-libs/gst/video/video-scaler.c:
+	* gst-libs/gst/video/video-scaler.h:
+	* tests/check/libs/video.c:
+	  video-scaler: add extra options
+
+2014-10-24 16:42:11 +0200  Wim Taymans <wtaymans@redhat.com>
+
+	* gst-libs/gst/video/video-converter.c:
+	* gst-libs/gst/video/video-converter.h:
+	  video-converter: define some options
+
+2014-10-24 16:23:53 +0200  Wim Taymans <wtaymans@redhat.com>
+
+	* gst-libs/gst/video/resampler.c:
+	* gst-libs/gst/video/resampler.h:
+	  resampler: add some options
+
+2014-10-24 15:42:31 +0200  Wim Taymans <wtaymans@redhat.com>
+
+	* gst-libs/gst/video/resampler.c:
+	  resampler: limit max number of taps
+	  Don't use more taps than the input size.
+
+2014-10-24 15:28:22 +0200  Wim Taymans <wtaymans@redhat.com>
+
+	* gst-libs/gst/video/video-converter.c:
+	  video-converter: add scaling support
+	  Add scaling support for the video-converter object
+
+2014-10-24 15:25:33 +0200  Wim Taymans <wtaymans@redhat.com>
+
+	* gst-libs/gst/video/Makefile.am:
+	* gst-libs/gst/video/video-scaler.c:
+	* gst-libs/gst/video/video-scaler.h:
+	* gst-libs/gst/video/video.h:
+	* tests/check/libs/video.c:
+	  video-scaler: add video scaler helper object
+	  Add a video scaler object build on top of the resampler. It has
+	  implementation to deal with interlaced video as well as horizontal and
+	  vertical scaling functions.
+
+2014-10-24 13:01:12 +0200  Wim Taymans <wtaymans@redhat.com>
+
+	* gst-libs/gst/video/Makefile.am:
+	* gst-libs/gst/video/resampler.c:
+	* gst-libs/gst/video/resampler.h:
+	  video: add generic resampler
+	  Add an object that can generate a set of resample filter coefficients.
+
+2014-10-24 12:11:43 +0200  Wim Taymans <wtaymans@redhat.com>
+
+	* gst-libs/gst/video/video-converter.c:
+	  video-converter: rework the generic converter function
+	  Use a LineCache object to track and process lines between unpack,
+	  upsample, convert, downsample and pack stages. This simplifies the
+	  main core processing function a lot and allows for future additions
+	  easily.
+	  Add support for interlaced formats in chroma up and downsampling.
+
+2014-10-24 11:45:13 +0200  Wim Taymans <wtaymans@redhat.com>
+
+	* gst-libs/gst/video/video-converter.c:
+	* gst-libs/gst/video/video-converter.h:
+	* gst/videoconvert/gstvideoconvert.c:
+	  video-convert: swap src and dest
+	  It is more natural and consistent with other uses.
+
+2014-10-24 11:35:31 +0200  Wim Taymans <wtaymans@redhat.com>
+
+	* gst-libs/gst/video/video-chroma.c:
+	  video-chroma: fix typo
+
+2014-10-27 17:56:51 +0100  Sebastian Dröge <sebastian@centricular.com>
+
+	* common:
+	  Automatic update of common submodule
+	  From 84d06cd to 7bb2bce
+
+2014-10-23 14:41:13 +0530  Vineeth T M <vineeth.tm@samsung.com>
+
+	* gst-libs/gst/video/video-blend.c:
+	  video-blend: segfault when xpos >= video size
+	  When the xpos is given as greater than or equal to the video size,
+	  we get a segfault, due to improper condition.
+	  Hence adding proper conditions.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=738984
+
+2014-10-23 14:38:07 +0530  Vineeth T M <vineeth.tm@samsung.com>
+
+	* ext/pango/gstbasetextoverlay.c:
+	  basetextoverlay: segfault when xpos >= video size
+	  When the xpos is given as greater than or equal to the video size,
+	  we get a segfault, due to improper condition.
+	  Hence adding proper conditions.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=738984
+
+2014-10-26 21:31:36 +0000  Tim-Philipp Müller <tim@centricular.com>
+
+	* tests/examples/app/.gitignore:
+	  examples: add new appsink example to .gitignore
+
+2014-10-26 11:04:47 +0100  Sebastian Dröge <sebastian@centricular.com>
+
+	* gst/playback/gstdecodebin2.c:
+	  Revert "decodebin: fix the autoplugging of parser elements"
+	  This reverts commit 2b0d3927410ae24e6b0fce100bd4ebbbe805a66f.
+	  This breaks cases where an actual second parser is required after the parser,
+	  e.g. to do timestamp corrections.
+	  See https://bugzilla.gnome.org/show_bug.cgi?id=738416
+
+2014-10-26 11:04:38 +0100  Sebastian Dröge <sebastian@centricular.com>
+
+	* gst/playback/gstdecodebin2.c:
+	  Revert "decodebin: Fix locking"
+	  This reverts commit aa94d5dc9aa6ef381da6b60a67f218117c662958.
+
+2014-10-24 13:09:42 +0100  Tim-Philipp Müller <tim@centricular.com>
+
+	* tests/check/elements/playbin-complex.c:
+	  tests: fix playbin-complex test on big endian
+
+2014-10-24 13:04:07 +0100  Tim-Philipp Müller <tim@centricular.com>
+
+	* tests/check/libs/struct_ppc32.h:
+	  tests: fix expected GstRTSPTimeRange structure size for ABI test for ppc32
+	  Also see https://bugzilla.gnome.org/show_bug.cgi?id=695276
+
+2014-10-24 12:26:40 +0100  Tim-Philipp Müller <tim@centricular.com>
+
+	* tests/check/elements/adder.c:
+	  tests: fix adder check on big-endian
+
+2014-10-24 10:17:47 +0100  Tim-Philipp Müller <tim@centricular.com>
+
+	* android/rtsp.mk:
+	* gst-libs/gst/rtsp/.gitignore:
+	* gst-libs/gst/rtsp/Makefile.am:
+	* gst-libs/gst/rtsp/gstrtsp-marshal.list:
+	* gst-libs/gst/rtsp/gstrtspextension.c:
+	  rtsp: use generic marshaller
+
+2014-10-23 11:22:35 +0200  Thibault Saunier <tsaunier@gnome.org>
+
+	* ext/pango/gstbasetextoverlay.c:
+	  basetextoverlay: Make GstBaseTextOverlay::font-desc readable
+
+2014-10-21 13:01:16 +0100  Tim-Philipp Müller <tim@centricular.com>
+
+	* common:
+	  Automatic update of common submodule
+	  From a8c8939 to 84d06cd
+
+2014-10-21 13:30:27 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+	* gst/playback/gstdecodebin2.c:
+	  decodebin: Fix locking
+	  The chain mutex needs to be locked when looking at chain->elements. Move code
+	  around a bit to require only one lock() and unlock().
+
+2014-10-21 12:58:41 +0300  Sreerenj Balachandran <sreerenj.balachandran@intel.com>
+
+	* gst/playback/gstdecodebin2.c:
+	  decodebin: fix the autoplugging of parser elements
+	  If there are two parser elements available for the same media format,
+	  then decodebin is autoplugging an extra capsfilter and parser irrespective
+	  of caps and rank. So restrict the decodebin from autoplugging multiple parser
+	  elements back to back in adjacent positions with in a single DecodeChain
+	  for the same media format.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=738416
+
+2014-10-21 12:57:59 +0200  Stefan Sauer <ensonic@users.sf.net>
+
+	* README:
+	* common:
+	  Automatic update of common submodule
+	  From 6e75498 to a8c8939
+
+2014-10-21 14:43:30 +0530  Vineeth T M <vineeth.tm@samsung.com>
+
+	* gst/videotestsrc/gstvideotestsrc.c:
+	* gst/videotestsrc/gstvideotestsrc.h:
+	  videotestsrc: assertion error
+	  timestamp_offset is being declared as an int64 variable,
+	  for which the min
+	  value of G_MININT64 is -9223372036854775808
+	  Changing the minimum and maximum limit for the offset variable.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=738568
+
+2014-10-13 00:03:55 +0300  Sreerenj Balachandran <sreerenj.balachandran@intel.com>
+
+	* gst/playback/gstdecodebin2.c:
+	  decodebin: optimize the code a bit by avoiding unnecessary string comparisons
+	  https://bugzilla.gnome.org/show_bug.cgi?id=738416
+
+2014-10-13 00:03:20 +0300  Sreerenj Balachandran <sreerenj.balachandran@intel.com>
+
+	* gst/playback/gstdecodebin2.c:
+	  decodebin: Fix typo in comment
+	  https://bugzilla.gnome.org/show_bug.cgi?id=738416
+
 2014-10-01 15:04:09 -0700  Aleix Conchillo Flaqué <aleix@oblong.com>
 
 	* gst-libs/gst/rtsp/gstrtspconnection.c:
@@ -314,23 +8102,138 @@
 	  appsink: Fix gst_app_sink_pull() docs to transfer full for the return value
 	  Also we get a GstSample, not a GstBuffer here.
 
+2014-10-17 12:10:44 +0200  Stefan Sauer <ensonic@users.sf.net>
+
+	* gst/typefind/gsttypefindfunctions.c:
+	  typefind: use gslice for typefine data
+	  Also use our free function in the failure case.
+
+2014-10-13 15:58:56 +0100  Tim-Philipp Müller <tim@centricular.com>
+
+	* gst/encoding/gstencodebin.c:
+	  encodebin: fix some leaks in error code path
+	  Fixes test_encodebin_sink_pads_nopreset_static
+	  running under valgrind.
+
+2014-10-13 05:08:41 +0100  Tim-Philipp Müller <tim@centricular.com>
+
+	* Makefile.am:
+	* common:
+	  tests: parallelise 'make valgrind'
+	  Use $(MAKE) instead of 'make' inside the Makefile,
+	  otherwise the make will run as if -j1 had been
+	  specified and complain about the job server not
+	  being available, and with $(MAKE) in inherits the
+	  parent make's settings it seems.
+	  Upgrade common submodule for parallel check-valgrind.
+
+2014-10-03 12:57:52 +0200  Peter G. Baum <peter@dr-baum.net>
+
+	* gst-libs/gst/riff/riff-media.c:
+	  riff-media: allow more channel_masks
+	  Allow partial valid channel masks.
+	  Set channel mask to 0 for non-valid channel masks.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=733405
+
+2014-10-03 12:54:17 +0200  Peter G. Baum <peter@dr-baum.net>
+
+	* gst-libs/gst/audio/audio-channels.c:
+	  audio-channels: allow partially valid channel_mask
+	  Since WAVEFORMATEXTENSIBLE allows to have more channels than
+	  bits in the channel mask we should allow this, too, to avoid
+	  loss of information.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=733405
+
 2014-10-13 22:24:31 -0300  Thiago Santos <thiago.sousa.santos@collabora.com>
 
 	* gst-libs/gst/audio/gstaudiodecoder.c:
 	  audiodecoder: should post DECODE errors and not ENCODE
 	  Fix error code for audio decoder
 
+2014-10-10 18:49:29 +0100  Luis de Bethencourt <luis.bg@samsung.com>
+
+	* gst-libs/gst/video/video-blend.c:
+	  videoblend: Avoid assigning a negative value to a guint
+	  There are some few but certain conditions where it is possible for the
+	  dest_width to be smaller than x. So we check this before assigning a negative
+	  value to src_width, which is a unsigned and would be promoted to a number that
+	  can segfault videoblend.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=738242
+
+2014-10-10 10:05:19 +0530  Luis de Bethencourt <luis.bg@samsung.com>
+
+	* ext/pango/gstbasetextoverlay.c:
+	  basetextoverlay: Fix segfault when overlay outside the frame
+	  When the textoverlay is set outside the video frame by deltax or deltay the
+	  calculation segfaults, but it is also  unnecessary since it doesn't need to be
+	  displayed. So we should clip the text.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=738242
+
+2014-10-10 17:32:41 -0400  Olivier Crête <olivier.crete@ocrete.ca>
+
+	* gst-libs/gst/pbutils/missing-plugins.c:
+	  pbutils: Rename clock-base/seqnum-base to timestamp-offset/seqnum-offset
+	  To match how they were renamed elsewhere.
+
 2014-10-10 12:14:17 +0300  Heinrich Fink <hfink@toolsonair.com>
 
 	* gst/playback/gstplaysink.c:
 	  playsink: Use correct property enum value for video-filter property installation
 
+2014-10-08 16:50:52 +0100  Luis de Bethencourt <luis.bg@samsung.com>
+
+	* gst/videoscale/gstvideoscale.c:
+	  videoscale: remove FIXME about NV21 support
+	  NV21 is already supported so removing FIXME about adding support for it.
+
+2014-10-08 11:26:24 +0200  Wim Taymans <wtaymans@redhat.com>
+
+	* gst/videotestsrc/gstvideotestsrc.c:
+	* gst/videotestsrc/gstvideotestsrc.h:
+	* gst/videotestsrc/videotestsrc.c:
+	* gst/videotestsrc/videotestsrc.h:
+	  videotestsrc: add gradient pattern
+	  Makes a gradient between background and foreground color.
+
+2014-10-06 15:17:42 +0200  Wim Taymans <wtaymans@redhat.com>
+
+	* gst-libs/gst/video/video-chroma.c:
+	  video-chroma: improve 4x downsampling coefficients
+
+2014-10-06 22:13:00 +0200  Peter G. Baum <peter@dr-baum.net>
+
+	* gst/audioresample/gstaudioresample.h:
+	  audioresample: remove unused variables
+	  https://bugzilla.gnome.org/show_bug.cgi?id=738026
+
+2014-10-07 05:50:56 +0900  Danny Song <danny.song.ga@gmail.com>
+
+	* gst/typefind/gsttypefindfunctions.c:
+	  typefindfunctions: Remove leftover #define from 0.10
+	  https://bugzilla.gnome.org/show_bug.cgi?id=738018
+
 2014-10-07 12:10:42 +0400  Andrei Sarakeev <sarakusha@gmail.com>
 
 	* gst/playback/gstdecodebin2.c:
 	  decodebin: Only emit the drain signal for the main decode chain, not any subchains
 	  https://bugzilla.gnome.org/show_bug.cgi?id=738064
 
+2014-10-06 10:15:13 +0300  Sebastian Dröge <sebastian@centricular.com>
+
+	* gst/playback/gstdecodebin2.c:
+	  decodebin: Free factories array when delaying autoplugging due to non-final caps
+
+2014-10-06 10:11:05 +0300  Sebastian Dröge <sebastian@centricular.com>
+
+	* gst-libs/gst/video/video-converter.c:
+	  videoconverter: Free the converter config in free()
+
+2014-10-02 21:20:48 +0200  Aurélien Zanelli <aurelien.zanelli@darkosphere.fr>
+
+	* gst/playback/gstdecodebin2.c:
+	  decodebin: unref decode pad after usage
+	  https://bugzilla.gnome.org/show_bug.cgi?id=737757
+
 2014-10-04 23:09:19 +0300  Sebastian Dröge <sebastian@centricular.com>
 
 	* gst-libs/gst/video/gstvideoencoder.c:
@@ -351,6 +8254,23 @@
 	  without any particular reordering.
 	  https://bugzilla.gnome.org/show_bug.cgi?id=737742
 
+2014-03-04 16:51:11 +0200  Andres Gomez <agomez@igalia.com>
+
+	* gst/playback/gsturidecodebin.c:
+	  uridecodebin: Removed setting "iradio-mode" property in the source element
+	  The "iradio-mode" property used to have a default FALSE value in HTTP
+	  source elements but now it should default to TRUE or just do not exist
+	  as a property so it is not really needed to set it any more in
+	  uridecodebin.
+	  Apart from that this code could've never worked as uridecodebin looks for a
+	  string-typed iradio-mode property, but it's a boolean in all sources.
+	  Fixes https://bugzilla.gnome.org/show_bug.cgi?id=725383
+
+2014-10-02 02:46:58 +1000  Jan Schmidt <jan@centricular.com>
+
+	* docs/design/part-stereo-multiview-video.markdown:
+	  design: Add a proposal for handling stereoscopic 3D and multiview
+
 2014-10-01 11:16:30 +0200  Aurélien Zanelli <aurelien.zanelli@parrot.com>
 
 	* gst-libs/gst/video/gstvideoencoder.c:
@@ -358,6 +8278,157 @@
 	  Otherwise, frame is leaked.
 	  https://bugzilla.gnome.org/show_bug.cgi?id=737706
 
+2014-09-25 17:32:32 +0200  Wim Taymans <wtaymans@redhat.com>
+
+	* gst-libs/gst/video/video-converter.c:
+	* gst-libs/gst/video/video-orc-dist.c:
+	* gst-libs/gst/video/video-orc-dist.h:
+	* gst-libs/gst/video/video-orc.orc:
+	  video-converter: add orc optimized matrix8 function
+	  Add an ORC implementation of the matrix8 function.
+	  Regenerate video-orc-dist.[ch]
+
+2014-09-29 19:45:22 +0530  Arun Raghavan <arun@accosted.net>
+
+	* gst-libs/gst/audio/gstaudiobasesink.c:
+	  audio: Fix up a comment in GstAudioBaseSink
+	  Rewrote the comment to not be PulseAudio-specific.
+
+2014-09-27 20:05:38 +0200  Rico Tzschichholz <ricotz@ubuntu.com>
+
+	* gst-libs/gst/video/Makefile.am:
+	  video: Make sure to link against libm
+
+2014-09-27 15:58:51 +0100  Tim-Philipp Müller <tim@centricular.com>
+
+	* sys/xvimage/xvimagepool.c:
+	* sys/xvimage/xvimagepool.h:
+	  xvimagesink: get rid of unnecessary private struct for pool
+
+2014-09-27 15:53:43 +0100  Tim-Philipp Müller <tim@centricular.com>
+
+	* sys/ximage/ximagepool.c:
+	* sys/ximage/ximagepool.h:
+	  ximagesink: get rid of unnecessary private struct for pool
+	  This is not exposed as API after all.
+
+2014-09-24 20:38:31 +0530  Arun Raghavan <arun@accosted.net>
+
+	* gst-libs/gst/audio/gstaudioiec61937.c:
+	  audio: Trivial comment for unhandled MPEG-2 payloading case
+	  The spec mentions a version of the MPEG-2 frame with a base frame and
+	  extension frame. I don't have IEC 13818-3 to figure out what that is,
+	  and don't see any references in search results, so it's a FIXME for now.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=736797
+
+2014-09-24 20:11:49 +0530  Arun Raghavan <arun@accosted.net>
+
+	* gst-libs/gst/audio/gstaudioiec61937.c:
+	  audio: Fixes for MPEG-2 LSF IEC61937 payloading
+	  The low sample frequency case for MPEG-2 is <=12kHz (the 32kHz number
+	  applies to MPEG-1).
+	  https://bugzilla.gnome.org/show_bug.cgi?id=736797
+
+2014-09-17 17:40:04 +0530  Anuj Jaiswal <anuj.jaiswal@samsung.com>
+
+	* gst-libs/gst/audio/gstaudioiec61937.c:
+	  audio: correct condition for MPEG case.
+	  Signed-off-by: Anuj Jaiswal <anuj.jaiswal@samsung.com>
+	  https://bugzilla.gnome.org/show_bug.cgi?id=736797
+
+2014-09-26 18:14:11 +0200  Wim Taymans <wtaymans@redhat.com>
+
+	* gst-libs/gst/video/video-converter.c:
+	* gst-libs/gst/video/video-orc.orc:
+	  video: improve YUV -> RGB conversion
+	  Reorganize orc instructions to free up some registers.
+	  We can reuse the ORC code to implement the generic AYUV->ARGB matrix.
+
+2014-09-26 16:35:51 +0200  Wim Taymans <wtaymans@redhat.com>
+
+	* gst/videotestsrc/gstvideotestsrcorc.orc:
+	  videotestsrc: storel is better then copyl
+	  It is better to use storel to splat the variable into the destination.
+	  ORC doesn't know when a variable is last written to so it can't yet optimize
+	  away the copy operation.
+
+2014-09-26 15:00:12 +0100  Luis de Bethencourt <luis.bg@samsung.com>
+
+	* gst/videoscale/vs_lanczos.c:
+	  videoscale: avoid recalculating values
+	  Avoid recalculating values used multiple times as base of index. Plus some style
+	  fixes.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=737400
+
+2014-09-26 09:14:51 +0530  Ravi Kiran K N <ravi.kiran@samsung.com>
+
+	* gst/videoscale/gstvideoscale.c:
+	* gst/videoscale/vs_image.h:
+	* gst/videoscale/vs_lanczos.c:
+	  videoscale: support lanczos method for NV formats
+	  Support lanczos scaling method for NV12 and NV21 formats.
+	  Scale the 'Y' plane and scale 'NV' plane.
+	  Implementation for submethods - int16, int32, float and double
+	  https://bugzilla.gnome.org/show_bug.cgi?id=737400
+
+2014-09-25 15:19:21 +0100  Tim-Philipp Müller <tim@centricular.com>
+
+	* gst-libs/gst/video/video-orc-dist.c:
+	* gst-libs/gst/video/video-orc-dist.h:
+	  video: update disted orc backup files
+
+2014-09-24 16:19:30 +0200  Wim Taymans <wtaymans@redhat.com>
+
+	* docs/libs/gst-plugins-base-libs-sections.txt:
+	* gst-libs/gst/video/Makefile.am:
+	* gst-libs/gst/video/video-converter.c:
+	* gst-libs/gst/video/video-converter.h:
+	* gst-libs/gst/video/video-convertor.c:
+	* gst-libs/gst/video/video-convertor.h:
+	* gst-libs/gst/video/video.h:
+	* gst/videoconvert/gstvideoconvert.c:
+	* gst/videoconvert/gstvideoconvert.h:
+	* win32/common/libgstvideo.def:
+	  video: convertor -> converter
+
+2014-09-24 15:49:42 +0200  Wim Taymans <wtaymans@redhat.com>
+
+	* docs/libs/gst-plugins-base-libs-sections.txt:
+	* gst-libs/gst/video/Makefile.am:
+	* gst-libs/gst/video/video-convertor.c:
+	* gst-libs/gst/video/video-convertor.h:
+	* gst-libs/gst/video/video-orc.orc:
+	* gst-libs/gst/video/video.h:
+	* gst/videoconvert/Makefile.am:
+	* gst/videoconvert/gstcms.c:
+	* gst/videoconvert/gstcms.h:
+	* gst/videoconvert/gstvideoconvert.c:
+	* gst/videoconvert/gstvideoconvert.h:
+	* gst/videoconvert/gstvideoconvertorc-dist.c:
+	* gst/videoconvert/gstvideoconvertorc-dist.h:
+	* gst/videoconvert/gstvideoconvertorc.orc:
+	* gst/videoconvert/videoconvert.c:
+	* gst/videoconvert/videoconvert.h:
+	* tests/check/Makefile.am:
+	* win32/common/libgstvideo.def:
+	  video: move videoconvert code to video library
+	  Move the conversion code used in videoconvert to the video library
+	  and expose a simple but generic API to do arbitrary conversion. It can
+	  currently do colorspace conversion but the plan is to add videoscale to
+	  it as well.
+	  See https://bugzilla.gnome.org/show_bug.cgi?id=732415
+
+2014-09-24 11:04:15 +0200  Wim Taymans <wtaymans@redhat.com>
+
+	* docs/libs/gst-plugins-base-libs-sections.txt:
+	* gst-libs/gst/video/video-color.c:
+	* gst-libs/gst/video/video-color.h:
+	* gst/videoconvert/videoconvert.c:
+	* win32/common/libgstvideo.def:
+	  video-color: add gst_video_color_matrix_get_Kr_Kb()
+	  Move the function to get the color matrix coefficients from
+	  videoconvert to the video library.
+
 2014-09-23 14:14:36 -0300  Thiago Santos <thiagoss@osg.samsung.com>
 
 	* gst-libs/gst/audio/gstaudiosink.c:
@@ -381,87 +8452,11 @@
 	  writing in the ringbuffer to the new start (0 again)
 	  https://bugzilla.gnome.org/show_bug.cgi?id=737055
 
-=== release 1.4.3 ===
+2014-09-21 13:16:43 +0200  Ognyan Tonchev <otonchev@gmail.com>
 
-2014-09-24 12:27:17 +0300  Sebastian Dröge <sebastian@centricular.com>
-
-	* ChangeLog:
-	* NEWS:
-	* RELEASE:
-	* configure.ac:
-	* docs/plugins/inspect/plugin-adder.xml:
-	* docs/plugins/inspect/plugin-alsa.xml:
-	* docs/plugins/inspect/plugin-app.xml:
-	* docs/plugins/inspect/plugin-audioconvert.xml:
-	* docs/plugins/inspect/plugin-audiorate.xml:
-	* docs/plugins/inspect/plugin-audioresample.xml:
-	* docs/plugins/inspect/plugin-audiotestsrc.xml:
-	* docs/plugins/inspect/plugin-cdparanoia.xml:
-	* docs/plugins/inspect/plugin-encoding.xml:
-	* docs/plugins/inspect/plugin-gio.xml:
-	* docs/plugins/inspect/plugin-ivorbisdec.xml:
-	* docs/plugins/inspect/plugin-libvisual.xml:
-	* docs/plugins/inspect/plugin-ogg.xml:
-	* docs/plugins/inspect/plugin-pango.xml:
-	* docs/plugins/inspect/plugin-playback.xml:
-	* docs/plugins/inspect/plugin-subparse.xml:
-	* docs/plugins/inspect/plugin-tcp.xml:
-	* docs/plugins/inspect/plugin-theora.xml:
-	* docs/plugins/inspect/plugin-typefindfunctions.xml:
-	* docs/plugins/inspect/plugin-videoconvert.xml:
-	* docs/plugins/inspect/plugin-videorate.xml:
-	* docs/plugins/inspect/plugin-videoscale.xml:
-	* docs/plugins/inspect/plugin-videotestsrc.xml:
-	* docs/plugins/inspect/plugin-volume.xml:
-	* docs/plugins/inspect/plugin-vorbis.xml:
-	* docs/plugins/inspect/plugin-ximagesink.xml:
-	* docs/plugins/inspect/plugin-xvimagesink.xml:
-	* gst-plugins-base.doap:
-	* win32/common/_stdint.h:
-	* win32/common/config.h:
-	  Release 1.4.3
-
-2014-09-24 11:22:53 +0300  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/lt.po:
-	* po/lv.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:
-	  Update .po files
+	* gst-libs/gst/video/gstvideopool.c:
+	  videopool: add missing annotation for gst_video_buffer_pool_new()
+	  https://bugzilla.gnome.org/show_bug.cgi?id=737072
 
 2014-09-23 23:12:19 +0300  Sebastian Dröge <sebastian@centricular.com>
 
@@ -474,164 +8469,46 @@
 	  videoscale: Use width instead of stride in buffer offset calculation
 	  https://bugzilla.gnome.org/show_bug.cgi?id=736944
 
-2014-08-08 20:01:20 +1000  Jan Schmidt <jan@centricular.com>
-
-	* gst-libs/gst/video/gstvideodecoder.c:
-	* gst-libs/gst/video/gstvideodecoder.h:
-	  videodecoder: Reset last_timestamp_out on new segment
-	  Reset last_timestamp_out when applying the output segment
-	  change, to avoid decoder confusion over new timestamp timelines when
-	  a seamless segment change happens.
-	  Move some locks/unlocks to later when they're actually needed.
-	  https://bugzilla.gnome.org/show_bug.cgi?id=734617
-
-2014-09-11 22:19:05 +0100  Tim-Philipp Müller <tim@centricular.com>
-
-	* sys/xvimage/xvcontext.c:
-	* sys/xvimage/xvcontext.h:
-	  xvimagesink: only try to set XV_ITURBT_709 port attribute if it exists
-	  Don't try to set port attribute that's not advertised by the
-	  adaptor. Fixes videotestsrc ! xvimagesink aborting with
-	  X Error of failed request:  BadMatch (invalid parameter attributes)
-	  Major opcode of failed request:  151 (XVideo)
-	  Minor opcode of failed request:  13 ()
-	  on intel HD4600 graphics with kernel 3.16, xserver 1.15,
-	  intel driver 2.21.15.
-
-=== release 1.4.2 ===
-
-2014-09-19 14:21:22 +0300  Sebastian Dröge <sebastian@centricular.com>
-
-	* ChangeLog:
-	* NEWS:
-	* RELEASE:
-	* configure.ac:
-	* docs/plugins/inspect/plugin-adder.xml:
-	* docs/plugins/inspect/plugin-alsa.xml:
-	* docs/plugins/inspect/plugin-app.xml:
-	* docs/plugins/inspect/plugin-audioconvert.xml:
-	* docs/plugins/inspect/plugin-audiorate.xml:
-	* docs/plugins/inspect/plugin-audioresample.xml:
-	* docs/plugins/inspect/plugin-audiotestsrc.xml:
-	* docs/plugins/inspect/plugin-cdparanoia.xml:
-	* docs/plugins/inspect/plugin-encoding.xml:
-	* docs/plugins/inspect/plugin-gio.xml:
-	* docs/plugins/inspect/plugin-ivorbisdec.xml:
-	* docs/plugins/inspect/plugin-libvisual.xml:
-	* docs/plugins/inspect/plugin-ogg.xml:
-	* docs/plugins/inspect/plugin-pango.xml:
-	* docs/plugins/inspect/plugin-playback.xml:
-	* docs/plugins/inspect/plugin-subparse.xml:
-	* docs/plugins/inspect/plugin-tcp.xml:
-	* docs/plugins/inspect/plugin-theora.xml:
-	* docs/plugins/inspect/plugin-typefindfunctions.xml:
-	* docs/plugins/inspect/plugin-videoconvert.xml:
-	* docs/plugins/inspect/plugin-videorate.xml:
-	* docs/plugins/inspect/plugin-videoscale.xml:
-	* docs/plugins/inspect/plugin-videotestsrc.xml:
-	* docs/plugins/inspect/plugin-volume.xml:
-	* docs/plugins/inspect/plugin-vorbis.xml:
-	* docs/plugins/inspect/plugin-ximagesink.xml:
-	* docs/plugins/inspect/plugin-xvimagesink.xml:
-	* gst-plugins-base.doap:
-	* win32/common/_stdint.h:
-	* win32/common/config.h:
-	  Release 1.4.2
-
-2014-09-19 10:51:45 +0300  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/lt.po:
-	* po/lv.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:
-	  Update .po files
-
-2014-09-19 09:58:48 +0300  Sebastian Dröge <sebastian@centricular.com>
-
-	* po/da.po:
-	* po/sr.po:
-	  po: Update translations
-
-2014-09-18 12:29:37 +0400  Andrei Sarakeev <sarakusha@gmail.com>
-
-	* gst/playback/gstplaybin2.c:
-	  playbin: Don't leak input-selector sinkpads
-	  https://bugzilla.gnome.org/show_bug.cgi?id=736861
-
-2014-09-17 14:18:49 +0200  Ognyan Tonchev <ognyan@axis.com>
+2014-09-23 11:56:33 +0200  Stefan Sauer <ensonic@users.sf.net>
 
 	* gst-libs/gst/audio/gstaudioencoder.c:
-	  audioencoder: do not leak events when flushing them
-	  https://bugzilla.gnome.org/show_bug.cgi?id=736796
+	  audioencoder: reshuffle code in error handling
+	  Move the assert to the error handling block at the end of the function so the
+	  the logging is still triggered. Reword the logging slightly and add another
+	  comment to hint what went wrong.
+	  Fixes #737138
 
-2014-09-17 14:34:25 +0200  Ognyan Tonchev <ognyan@axis.com>
-
-	* gst/encoding/gststreamsplitter.c:
-	  streamsplitter: do not leak events when flushing them
-	  https://bugzilla.gnome.org/show_bug.cgi?id=736796
-
-2014-09-17 14:11:21 +0200  Ognyan Tonchev <ognyan@axis.com>
-
-	* gst-libs/gst/video/gstvideodecoder.c:
-	  videodecoder: do not leak events when flushing them
-	  https://bugzilla.gnome.org/show_bug.cgi?id=736796
-
-2014-09-18 12:39:48 +0300  Sebastian Dröge <sebastian@centricular.com>
-
-	* gst-libs/gst/audio/gstaudiodecoder.c:
-	  audiodecoder: Simplify code a bit
-
-2014-09-17 14:08:17 +0200  Ognyan Tonchev <ognyan@axis.com>
+2014-09-22 20:15:13 +0200  Stefan Sauer <ensonic@users.sf.net>
 
 	* gst-libs/gst/video/gstvideoencoder.c:
-	  videoencoder: do not leak events when flushing them
-	  https://bugzilla.gnome.org/show_bug.cgi?id=736796
+	  videoencoder: log the timestamps if we are unhappy about them
+	  When complaining about the DTS!=PTS on keyframes log the actualy timestamps.
 
-2014-09-17 12:17:53 +0200  Ognyan Tonchev <ognyan@axis.com>
+2014-09-22 10:42:47 +0200  Wim Taymans <wtaymans@redhat.com>
 
-	* gst-libs/gst/audio/gstaudiodecoder.c:
-	  audiodecoder: Don't leak events
-	  https://bugzilla.gnome.org/show_bug.cgi?id=736788
+	* tests/check/Makefile.am:
+	  tests: add orc test for videoconvert
 
-2014-09-17 12:17:27 +0200  Ognyan Tonchev <ognyan@axis.com>
+2014-09-22 10:40:01 +0300  Sebastian Dröge <sebastian@centricular.com>
 
-	* tests/check/libs/audiodecoder.c:
-	  audiodecoder: extend flush_events test to check for event leaks
-	  https://bugzilla.gnome.org/show_bug.cgi?id=736788
+	* tools/gst-play.c:
+	  gst-play: Fix format string compiler warning
+	  gst-play.c:92:28: error: format string is not a string literal
+	  [-Werror,-Wformat-nonliteral]
+	  len = g_vasprintf (&str, format, args);
+	  ^~~~~~
+
+2014-09-19 14:58:20 +0200  Edward Hervey <bilboed@bilboed.com>
+
+	* tests/examples/overlay/gtk-videooverlay.c:
+	  example/overlay: Specify minimum gdk version
+	  Avoids deprecation warnings (such as for gtk_widget_set_double_buffered()
+	  which became deprecated from 3.14)
+
+2014-09-19 18:29:54 +0100  Tim-Philipp Müller <tim@centricular.com>
+
+	* tools/gst-play.c:
+	  gst-play: add --quiet option to suppress output
 
 2014-09-05 13:49:46 -0300  Thiago Santos <thiagoss@osg.samsung.com>
 
@@ -643,24 +8520,60 @@
 	  query failed.
 	  https://bugzilla.gnome.org/show_bug.cgi?id=735844
 
-2013-01-31 13:49:00 +0100  Arnaud Vrac <avrac@freebox.fr>
+2014-09-18 15:45:43 +0530  Sanjay NM <sanjay.nm@samsung.com>
 
-	* ext/pango/gstbasetextoverlay.c:
-	  basetextoverlay: get framerate from previously parsed video info
+	* gst/videoscale/gstvideoscale.c:
+	* gst/videoscale/vs_4tap.c:
+	* gst/videoscale/vs_4tap.h:
+	  videoscale: Added NV support for 4Tap resize
+	  https://bugzilla.gnome.org/show_bug.cgi?id=736845
 
-2013-01-31 13:47:35 +0100  Arnaud Vrac <avrac@freebox.fr>
+2014-09-18 12:29:37 +0400  Andrei Sarakeev <sarakusha@gmail.com>
 
-	* ext/pango/gstbasetextoverlay.c:
-	  basetextoverlay: do not ask for a bufferpool when checking for composition meta
+	* gst/playback/gstplaybin2.c:
+	  playbin: Don't leak input-selector sinkpads
+	  https://bugzilla.gnome.org/show_bug.cgi?id=736861
 
-2014-09-04 15:06:31 +0200  Arnaud Vrac <avrac@freebox.fr>
+2014-09-18 12:39:48 +0300  Sebastian Dröge <sebastian@centricular.com>
 
-	* ext/pango/gstbasetextoverlay.c:
-	  basetextoverlay: schedule reconfigure on source pad when negotiation fails
-	  The source pad might be flushing while negotiating, resulting in
-	  set_caps or the ALLOCATION query failing. In this case set the
-	  reconfigure flag on the source pad so that negotiation is retried on the
-	  next buffer.
+	* gst-libs/gst/audio/gstaudiodecoder.c:
+	  audiodecoder: Simplify code a bit
+
+2014-09-17 14:34:25 +0200  Ognyan Tonchev <ognyan@axis.com>
+
+	* gst/encoding/gststreamsplitter.c:
+	  streamsplitter: do not leak events when flushing them
+	  https://bugzilla.gnome.org/show_bug.cgi?id=736796
+
+2014-09-17 14:18:49 +0200  Ognyan Tonchev <ognyan@axis.com>
+
+	* gst-libs/gst/audio/gstaudioencoder.c:
+	  audioencoder: do not leak events when flushing them
+	  https://bugzilla.gnome.org/show_bug.cgi?id=736796
+
+2014-09-17 14:11:21 +0200  Ognyan Tonchev <ognyan@axis.com>
+
+	* gst-libs/gst/video/gstvideodecoder.c:
+	  videodecoder: do not leak events when flushing them
+	  https://bugzilla.gnome.org/show_bug.cgi?id=736796
+
+2014-09-17 14:08:17 +0200  Ognyan Tonchev <ognyan@axis.com>
+
+	* gst-libs/gst/video/gstvideoencoder.c:
+	  videoencoder: do not leak events when flushing them
+	  https://bugzilla.gnome.org/show_bug.cgi?id=736796
+
+2014-09-17 12:17:27 +0200  Ognyan Tonchev <ognyan@axis.com>
+
+	* tests/check/libs/audiodecoder.c:
+	  audiodecoder: extend flush_events test to check for event leaks
+	  https://bugzilla.gnome.org/show_bug.cgi?id=736788
+
+2014-09-17 12:17:53 +0200  Ognyan Tonchev <ognyan@axis.com>
+
+	* gst-libs/gst/audio/gstaudiodecoder.c:
+	  audiodecoder: Don't leak events
+	  https://bugzilla.gnome.org/show_bug.cgi?id=736788
 
 2014-09-16 13:32:52 +0200  Ognyan Tonchev <ognyan@axis.com>
 
@@ -683,12 +8596,54 @@
 	  audioconvert/videoconvert elements.
 	  https://bugzilla.gnome.org/show_bug.cgi?id=735748
 
+2014-09-16 01:07:18 +0300  Sebastian Dröge <sebastian@centricular.com>
+
+	* gst-libs/gst/video/video-frame.c:
+	  video-frame: Don't ref buffers twice when mapping
+
+2014-09-16 00:41:55 +0300  Sebastian Dröge <sebastian@centricular.com>
+
+	* gst-libs/gst/app/gstappsink.h:
+	* gst-libs/gst/app/gstappsrc.h:
+	  app: Add FIXME comment for making the instance/class structs private
+
+2014-09-15 21:51:15 +0100  Tim-Philipp Müller <tim@centricular.com>
+
+	* gst-libs/gst/app/gstappsrc.h:
+	  appsrc: fix recent ABI breakage caused by GstAppSrc structure size increase
+	  Also fixes 'make check'.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=728379
+
 2014-09-15 16:23:57 +0200  Ognyan Tonchev <ognyan@axis.com>
 
 	* gst-libs/gst/video/gstvideodecoder.c:
 	  videodecoder: do not leak pool and allocator in error case
 	  https://bugzilla.gnome.org/show_bug.cgi?id=736679
 
+2014-09-12 14:41:01 +0300  Sebastian Dröge <sebastian@centricular.com>
+
+	* gst-libs/gst/video/gstvideofilter.c:
+	  videofilter: Use new GST_VIDEO_FRAME_MAP_FLAG_NO_REF
+	  https://bugzilla.gnome.org/show_bug.cgi?id=736118
+
+2014-09-12 14:39:16 +0300  Sebastian Dröge <sebastian@centricular.com>
+
+	* gst-libs/gst/video/video-frame.c:
+	* gst-libs/gst/video/video-frame.h:
+	  video-frame: Add GST_VIDEO_FRAME_MAP_FLAG_NO_REF
+	  This makes sure that the buffer is not reffed another time when
+	  storing it in the GstVideoFrame, keeping it writable if it was
+	  writable.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=736118
+
+2014-09-12 14:27:44 +0300  Sebastian Dröge <sebastian@centricular.com>
+
+	* gst-libs/gst/video/gstvideofilter.c:
+	  videofilter: Unref buffers before calling the transform_frame functions
+	  GstVideoFrame has another reference, so the buffer looks unwriteable,
+	  meaning that we can't attach any metas or anything to it
+	  https://bugzilla.gnome.org/show_bug.cgi?id=736118
+
 2014-09-05 09:54:10 -0700  Garg <aksg86@gmail.com>
 
 	* gst-libs/gst/audio/gstaudiobasesink.c:
@@ -714,13 +8669,33 @@
 	  gst_pulsesink_get_time to continue.
 	  https://bugzilla.gnome.org/show_bug.cgi?id=736071
 
-2014-09-12 14:27:44 +0300  Sebastian Dröge <sebastian@centricular.com>
+2014-09-04 11:56:50 +0200  Nicola Murino <nicola.murino@gmail.com>
 
-	* gst-libs/gst/video/gstvideofilter.c:
-	  videofilter: Unref buffers before calling the transform_frame functions
-	  GstVideoFrame has another reference, so the buffer looks unwriteable,
-	  meaning that we can't attach any metas or anything to it
-	  https://bugzilla.gnome.org/show_bug.cgi?id=736118
+	* tests/examples/app/Makefile.am:
+	* tests/examples/app/appsink-src2.c:
+	  appsrc: Add example that shows gst_app_src_push_sample() usage
+
+2014-09-05 11:14:51 +0200  Nicola Murino <nicola.murino@gmail.com>
+
+	* docs/libs/gst-plugins-base-libs-sections.txt:
+	* gst-libs/gst/app/gstappsrc.c:
+	* gst-libs/gst/app/gstappsrc.h:
+	* win32/common/libgstapp.def:
+	  appsrc: Add push_sample() convenience function for easy appsink -> appsrc use
+	  https://bugzilla.gnome.org/show_bug.cgi?id=728379
+
+2014-09-11 22:19:05 +0100  Tim-Philipp Müller <tim@centricular.com>
+
+	* sys/xvimage/xvcontext.c:
+	* sys/xvimage/xvcontext.h:
+	  xvimagesink: only try to set XV_ITURBT_709 port attribute if it exists
+	  Don't try to set port attribute that's not advertised by the
+	  adaptor. Fixes videotestsrc ! xvimagesink aborting with
+	  X Error of failed request:  BadMatch (invalid parameter attributes)
+	  Major opcode of failed request:  151 (XVideo)
+	  Minor opcode of failed request:  13 ()
+	  on intel HD4600 graphics with kernel 3.16, xserver 1.15,
+	  intel driver 2.21.15.
 
 2014-09-11 16:58:35 -0300  Thiago Santos <thiagoss@osg.samsung.com>
 
@@ -729,6 +8704,16 @@
 	  Use the object lock to avoid concurrent processing which leads
 	  to small disasters (assertions or crashes)
 
+2014-09-09 11:37:26 +0200  Ognyan Tonchev <ognyan@axis.com>
+
+	* gst-libs/gst/rtsp/gstrtspconnection.c:
+	  rtspconnection: ignore timeout in session request header
+	  The timeout parameter is only allowed in a session response header
+	  but some clients, like Honeywell VMS applications, send it as part
+	  of the session request header. Ignore everything from the semicolon
+	  to the end of the line when parsing session id.
+	  Fixes https://bugzilla.gnome.org/show_bug.cgi?id=736267
+
 2014-03-28 13:02:54 +0100  George Kiagiadakis <george.kiagiadakis@collabora.com>
 
 	* gst/playback/gstplaybin2.c:
@@ -758,14 +8743,55 @@
 	  ensure that this is the case.
 	  https://bugzilla.gnome.org/show_bug.cgi?id=732908
 
-2014-08-27 13:45:57 +0200  Göran Jönsson <goranjn@axis.com>
+2013-01-31 13:49:00 +0100  Arnaud Vrac <avrac@freebox.fr>
 
-	* gst-libs/gst/rtsp/gstrtspconnection.c:
-	  rtspconnection: Protect readsrc, writesrc and controllsrc with a mutex
-	  Fixes a crash when controlsrc, readsrc or writesrc are modified from
-	  gst_rtsp_source_dispatch_read/write and gst_rtsp_watch_reset at the
-	  same time.
-	  https://bugzilla.gnome.org/show_bug.cgi?id=735569
+	* ext/pango/gstbasetextoverlay.c:
+	  basetextoverlay: get framerate from previously parsed video info
+
+2013-01-31 13:47:35 +0100  Arnaud Vrac <avrac@freebox.fr>
+
+	* ext/pango/gstbasetextoverlay.c:
+	  basetextoverlay: do not ask for a bufferpool when checking for composition meta
+
+2014-09-04 15:06:31 +0200  Arnaud Vrac <avrac@freebox.fr>
+
+	* ext/pango/gstbasetextoverlay.c:
+	  basetextoverlay: schedule reconfigure on source pad when negotiation fails
+	  The source pad might be flushing while negotiating, resulting in
+	  set_caps or the ALLOCATION query failing. In this case set the
+	  reconfigure flag on the source pad so that negotiation is retried on the
+	  next buffer.
+
+2013-01-31 15:38:18 +0100  Arnaud Vrac <avrac@freebox.fr>
+
+	* ext/pango/gstbasetextoverlay.c:
+	  basetextoverlay: just forward the seek event to sink pads like other events
+	  https://bugzilla.gnome.org/show_bug.cgi?id=735844
+
+2014-09-04 12:13:45 +0200  Nicola Murino <nicola.murino@gmail.com>
+
+	* ext/pango/gstbasetextoverlay.c:
+	  basetextoverlay: remove unneeded cairo transparence setting
+	  he code here:
+	  http://cgit.freedesktop.org/gstreamer/gst-plugins-base/tree/ext/pango/gstbasetextoverlay.c#n1554
+	  should make transparent the box that contains the text, I think this code is
+	  not correct, it should be:
+	  if (overlay->want_shading) {
+	  double alpha = overlay->shading_value / 255.0;
+	  cairo_paint_with_alpha (cr, alpha);
+	  }
+	  however I think this code could be removed, we already do a shaded background,
+	  why shade the box behind the text with cairo too? only one shading is needed so
+	  we must shade with cairo or with methods like these:
+	  http://cgit.freedesktop.org/gstreamer/gst-plugins-base/tree/ext/pango/gstbasetextoverlay.c#n1642
+	  not both
+	  https://bugzilla.gnome.org/show_bug.cgi?id=736028
+
+2014-09-02 13:10:34 +0200  Nicola Murino <nicola.murino@gmail.com>
+
+	* ext/pango/gstbasetextoverlay.c:
+	  basetextoverlay: Make shading_value a property
+	  https://bugzilla.gnome.org/show_bug.cgi?id=735879
 
 2014-09-03 15:23:26 +0530  Vineeth T M <vineeth.tm@samsung.com>
 
@@ -775,6 +8801,21 @@
 	  and the same was being freed, which resulted in the crash
 	  https://bugzilla.gnome.org/show_bug.cgi?id=735952
 
+2014-09-02 15:37:38 +0300  Sebastian Dröge <sebastian@centricular.com>
+
+	* gst/playback/gstdecodebin2.c:
+	  decodebin: Also include the raw caps in the error message, not just the human readable description
+
+2014-09-02 12:59:18 +0300  Sebastian Dröge <sebastian@centricular.com>
+
+	* gst/playback/gstdecodebin2.c:
+	  decodebin: Include codec description for missing plugins in the error message
+	  If we had plugins and an error occurred we only include the error message
+	  caused by this, otherwise we will include the codec description as generated
+	  from the caps.
+	  This allows to detect which exact codec was missing instead of getting a
+	  generic "no suitable decoders found" error message.
+
 2014-09-01 15:23:27 -0300  Thiago Santos <thiagoss@osg.samsung.com>
 
 	* tests/check/elements/textoverlay.c:
@@ -799,6 +8840,16 @@
 	  otherwise there isn't much that can be done.
 	  https://bugzilla.gnome.org/show_bug.cgi?id=735800
 
+2014-09-01 15:06:51 +0200  Guillaume Desmottes <guillaume.desmottes@collabora.co.uk>
+
+	* ext/ogg/gstoggdemux.c:
+	  oggdemux: don't set segment.base in pad_submit_packet()
+	  Setting segment.base in the segment sent from gst_ogg_demux_handle_page() is
+	  enough to ensure that chained oggs are played corretly (see bgo#706569).
+	  Tweaking the base in gst_ogg_pad_submit_packet() as well result in delays when
+	  playing a file with start != -1.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=735808
+
 2014-09-01 12:28:24 +0300  Sebastian Dröge <sebastian@centricular.com>
 
 	* ext/pango/gstbasetextoverlay.c:
@@ -808,107 +8859,107 @@
 	  Specifically this pipeline was deadlocking:
 	  gst-launch-1.0 videotestsrc ! textoverlay ! textoverlay ! fakesink
 
-=== release 1.4.1 ===
+2014-08-29 14:00:06 +0200  Guillaume Desmottes <guillaume.desmottes@collabora.co.uk>
 
-2014-08-27 15:04:06 +0300  Sebastian Dröge <sebastian@centricular.com>
+	* ext/ogg/gstoggdemux.c:
+	  oggdemux: accumulate base time
+	  Base time should be accumulated so non flushing seeks have the expected base.
+	  Not accumulating result in segments appearing as "too late" and so are not
+	  played by the sink.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=735509
 
-	* ChangeLog:
-	* NEWS:
-	* RELEASE:
-	* configure.ac:
-	* docs/plugins/inspect/plugin-adder.xml:
-	* docs/plugins/inspect/plugin-alsa.xml:
-	* docs/plugins/inspect/plugin-app.xml:
-	* docs/plugins/inspect/plugin-audioconvert.xml:
-	* docs/plugins/inspect/plugin-audiorate.xml:
-	* docs/plugins/inspect/plugin-audioresample.xml:
-	* docs/plugins/inspect/plugin-audiotestsrc.xml:
-	* docs/plugins/inspect/plugin-cdparanoia.xml:
-	* docs/plugins/inspect/plugin-encoding.xml:
-	* docs/plugins/inspect/plugin-gio.xml:
-	* docs/plugins/inspect/plugin-ivorbisdec.xml:
-	* docs/plugins/inspect/plugin-libvisual.xml:
-	* docs/plugins/inspect/plugin-ogg.xml:
-	* docs/plugins/inspect/plugin-pango.xml:
-	* docs/plugins/inspect/plugin-playback.xml:
-	* docs/plugins/inspect/plugin-subparse.xml:
-	* docs/plugins/inspect/plugin-tcp.xml:
-	* docs/plugins/inspect/plugin-theora.xml:
-	* docs/plugins/inspect/plugin-typefindfunctions.xml:
-	* docs/plugins/inspect/plugin-videoconvert.xml:
-	* docs/plugins/inspect/plugin-videorate.xml:
-	* docs/plugins/inspect/plugin-videoscale.xml:
-	* docs/plugins/inspect/plugin-videotestsrc.xml:
-	* docs/plugins/inspect/plugin-volume.xml:
-	* docs/plugins/inspect/plugin-vorbis.xml:
-	* docs/plugins/inspect/plugin-ximagesink.xml:
-	* docs/plugins/inspect/plugin-xvimagesink.xml:
-	* gst-plugins-base.doap:
-	* win32/common/_stdint.h:
-	* win32/common/config.h:
-	  Release 1.4.1
+2014-08-29 19:15:56 +0100  Tim-Philipp Müller <tim@centricular.com>
 
-2014-08-27 14:27:28 +0300  Sebastian Dröge <sebastian@centricular.com>
+	* ext/pango/gstbasetextoverlay.c:
+	  textoverlay: remove code that can't be reached
+	  If this code could ever be reached, it would leak
+	  memory (CID 1231978), but gst_caps_get_features()
+	  never returns NULL, so that can't happen.
 
-	* 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/lt.po:
-	* po/lv.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:
-	  Update .po files
+2014-08-29 18:18:10 +0100  Tim-Philipp Müller <tim@centricular.com>
 
-2014-08-27 12:30:10 +0300  Sebastian Dröge <sebastian@centricular.com>
+	* gst/encoding/gstencodebin.c:
+	  encoding: remove assignment that's no longer needed
+	  CID 1231980
 
-	* po/de.po:
-	* po/hu.po:
-	* po/id.po:
-	* po/nb.po:
-	* po/nl.po:
-	* po/pl.po:
-	* po/ru.po:
-	* po/sv.po:
-	* po/uk.po:
-	* po/vi.po:
-	  po: Update translations
+2014-07-23 21:25:24 +0200  Peter G. Baum <peter@dr-baum.net>
+
+	* gst-libs/gst/riff/riff-ids.h:
+	* gst-libs/gst/riff/riff-read.c:
+	  riff: Recognize RF64 as RIFF file
+	  https://bugzilla.gnome.org/show_bug.cgi?id=735631
+
+2014-08-27 13:45:57 +0200  Göran Jönsson <goranjn@axis.com>
+
+	* gst-libs/gst/rtsp/gstrtspconnection.c:
+	  rtspconnection: Protect readsrc, writesrc and controllsrc with a mutex
+	  Fixes a crash when controlsrc, readsrc or writesrc are modified from
+	  gst_rtsp_source_dispatch_read/write and gst_rtsp_watch_reset at the
+	  same time.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=735569
+
+2014-08-28 17:13:05 +0300  Sebastian Dröge <sebastian@centricular.com>
+
+	* gst/playback/gstplaysinkconvertbin.c:
+	  playsinkconvertbin: setcaps() always returns TRUE and the return value is unused
+	  Change it to a void return value. The caps are forwarded afterwards via
+	  gst_pad_event_default() and not inside this function.
+	  CID 1226477
+
+2014-08-28 17:06:22 +0300  Sebastian Dröge <sebastian@centricular.com>
+
+	* gst-libs/gst/video/gstvideodecoder.c:
+	  videodecoder: Fix broken boolean expression
+	  We can seek with end_type==NONE and end_type==SET && end_position=-1. The
+	  check for end_type!=NONE made the second condition impossible.
+	  CID 1226440
+
+2014-08-28 17:00:26 +0300  Sebastian Dröge <sebastian@centricular.com>
+
+	* gst-libs/gst/audio/gstaudiodecoder.c:
+	  audiodecoder: Fix broken boolean expression
+	  We can seek with end_type==NONE and end_type==SET && end_position=-1. The
+	  check for end_type!=NONE made the second condition impossible.
+	  CID 1226439
+
+2014-08-25 20:59:40 +0300  Sebastian Dröge <sebastian@centricular.com>
+
+	* gst/playback/gstdecodebin2.c:
+	* gst/playback/gsturidecodebin.c:
+	  decodebin: Include information from the error messages of tried but failed elements in the missing plugin errors
+
+2014-08-25 16:22:46 +0300  Sebastian Dröge <sebastian@centricular.com>
+
+	* gst/playback/gstdecodebin2.c:
+	  decodebin: Initialize local variables for every retry
+
+2014-08-25 15:15:06 +0300  Sebastian Dröge <sebastian@centricular.com>
+
+	* gst/playback/gstdecodebin2.c:
+	  decodebin: Remove error case that resulted in two error messages
+	  We already send one in gst_decode_bin_expose() for this case. Only
+	  if we're unable to typefind the caps another error message is needed.
+
+2014-08-24 22:36:59 +0100  Tim-Philipp Müller <tim@centricular.com>
+
+	* gst/typefind/gsttypefindfunctions.c:
+	  typefinding: tighten checks for 'freeform mp3' a little
+	  Freeform mp3s typically have bitrates higher than the
+	  otherwise max allowed rate. Prevents misdetection of
+	  some truetype font files as mp3.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=732923
 
 2014-08-25 13:14:36 +0300  Sebastian Dröge <sebastian@centricular.com>
 
 	* gst-libs/gst/audio/gstaudiodecoder.c:
 	  audiodecoder: Don't ignore ::start/stop return values
 
+2014-08-18 13:04:31 +0100  Tim-Philipp Müller <tim@centricular.com>
+
+	* gst-plugins-base.spec.in:
+	  spec: add gst-device-monitor-1.0 to RPM .spec file
+	  https://bugzilla.gnome.org/show_bug.cgi?id=734944
+
 2014-08-14 16:57:01 -0300  Thiago Santos <thiagoss@osg.samsung.com>
 
 	* gst/playback/gstplaysinkconvertbin.c:
@@ -918,6 +8969,78 @@
 	  sink doesn't support them
 	  https://bugzilla.gnome.org/show_bug.cgi?id=734822
 
+2014-08-15 13:31:53 +0200  Thibault Saunier <tsaunier@gnome.org>
+
+	* gst-libs/gst/pbutils/gstdiscoverer.c:
+	  discoverer: Set 'processing = FALSE' when done discovering SYNC
+	  This avoids a race where we would get new tag but we are already
+	  prerolled and analyzing results.
+	  It is the way it is supposed to be handled as stated in comment:
+	  "If preroll is complete, drop these tags - the collected information is
+	  possibly already being processed and adding more tags would be racy"
+
+2014-08-14 17:21:44 -0300  Thiago Santos <thiagoss@osg.samsung.com>
+
+	* win32/common/libgstvideo.def:
+	  gstvideo: add missing entry to win32 .def
+	  gst_video_guess_framerate
+
+2014-08-14 23:53:16 +1000  Jan Schmidt <jan@centricular.com>
+
+	* docs/libs/gst-plugins-base-libs-sections.txt:
+	* gst-libs/gst/video/video.c:
+	* gst-libs/gst/video/video.h:
+	  video: Add gst_video_guess_framerate() function
+	  Takes a nominal frame duration and returns a standard
+	  FPS if it matches closely enough (< 0.1%), or else
+	  calculates a framerate that'll do.
+
+2014-08-15 01:04:45 +1000  Jan Schmidt <jan@centricular.com>
+
+	* docs/libs/gst-plugins-base-libs-sections.txt:
+	* gst-libs/gst/video/gstvideometa.h:
+	* gst-libs/gst/video/gstvideoutils.h:
+	* gst-libs/gst/video/video-format.c:
+	* gst-libs/gst/video/video-frame.h:
+	* gst-libs/gst/video/video-overlay-composition.c:
+	  video: Various simple docs fixes
+
+2014-08-08 20:01:20 +1000  Jan Schmidt <jan@centricular.com>
+
+	* gst-libs/gst/video/gstvideodecoder.c:
+	* gst-libs/gst/video/gstvideodecoder.h:
+	  videodecoder: Reset last_timestamp_out on new segment
+	  Reset last_timestamp_out when applying the output segment
+	  change, to avoid decoder confusion over new timestamp timelines when
+	  a seamless segment change happens.
+	  Move some locks/unlocks to later when they're actually needed.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=734617
+
+2014-07-14 12:29:50 -0300  Thiago Santos <ts.santos@sisa.samsung.com>
+
+	* gst/playback/gstdecodebin2.c:
+	  decodebin: handle group switching for deadend group
+	  Gracefully handle switching groups that all pads are deadend.
+	  This can happen when quickly switching programs on mpegts as the
+	  output is unaligned it can happen that not enough data was accumulated at
+	  parsers to generate any buffers, causing the stream to receive EOS before
+	  any data can be decoded.
+	  To handle this scenario, the _expose function now also gets if there is
+	  any next group to be exposed along with the list of endpads. If there are
+	  no endpads and there is another group to expose it will switch to this next
+	  group and then retry exposing the streams.
+	  Also, the requirement to only switch from the chain that has the endpad had
+	  to be modified to care for when the drainpad is NULL
+	  https://bugzilla.gnome.org/show_bug.cgi?id=733169
+
+2014-07-11 18:51:44 -0300  Thiago Santos <ts.santos@sisa.samsung.com>
+
+	* gst/playback/gstdecodebin2.c:
+	  decodebin: consider all deadend pads as drained
+	  Otherwise when switching out a group with a deadend pad it will block
+	  as it would be waiting for EOS on a deadend that already got one
+	  https://bugzilla.gnome.org/show_bug.cgi?id=733169
+
 2014-08-12 13:41:04 -0300  Thiago Santos <thiagoss@osg.samsung.com>
 
 	* ext/pango/gstbasetextoverlay.c:
@@ -931,6 +9054,32 @@
 	  not handled by our converters.
 	  https://bugzilla.gnome.org/show_bug.cgi?id=734683
 
+2014-08-12 23:18:57 +1000  Jan Schmidt <jan@centricular.com>
+
+	* gst-libs/gst/audio/gstaudiodecoder.c:
+	  audiodecoder: Don't drain and flush on SEGMENT events.
+	  As was done for the base video decoder in commit 695675, don't
+	  flush out the decoder on a new SEGMENT event. Segment events
+	  may be a new segment, but are also often segment updates for
+	  the current segment where the old data should be kept. For new
+	  segments, a STREAM_START event will already trigger a drain, but
+	  make sure to flush any remaining partial data then as well.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=734666
+
+2014-08-11 10:15:14 +0530  Sanjay NM <sanjay.nm@samsung.com>
+
+	* gst/videoscale/gstvideoscale.c:
+	  videoscale: Add NV21 support
+	  https://bugzilla.gnome.org/show_bug.cgi?id=734650
+
+2014-08-11 18:21:26 +0200  Matthieu Crapet <mcrapet@gmail.com>
+
+	* tests/icles/playback/decodetest.c:
+	* tests/icles/playback/test.c:
+	* tests/icles/playback/test5.c:
+	  tests: fix decodebin signal used in icles/playback/ decodetest, test and test5
+	  Since release 1.1.4, "new-decoded-pad" no longer exists.
+
 2014-08-08 12:46:47 -0300  Thiago Santos <thiagoss@osg.samsung.com>
 
 	* ext/pango/gstbasetextoverlay.c:
@@ -958,6 +9107,129 @@
 	  Avoids returning values that upstream can't produce
 	  https://bugzilla.gnome.org/show_bug.cgi?id=733916
 
+2014-07-30 16:59:15 -0300  Thiago Santos <thiagoss@osg.samsung.com>
+
+	* gst/encoding/gstencodebin.c:
+	* tests/check/elements/encodebin.c:
+	  encodebin: delay missing encoder error as passthrough is still possible
+	  Set up a fakesink with a pad probe to replace the missing encoder to detect
+	  if encoding was really required and only error out in this case. Otherwise
+	  just let passthrough branch work.
+	  This delays the error posting from the set_state function to when buffers
+	  are really flowing. Unit test updated accordingly
+	  https://bugzilla.gnome.org/show_bug.cgi?id=650652
+
+2014-08-11 10:57:43 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+	* gst/playback/gstdecodebin2.c:
+	  decodebin: Remove buffering special casing for adaptive streaming demuxers
+	  They output smaller buffers now and we should be able to handle the buffering
+	  limits like in every other situation now.
+
+2014-08-07 10:44:03 +0200  Jan Alexander Steffens (heftig) <jan.steffens@gmail.com>
+
+	* gst-libs/gst/video/gstvideodecoder.c:
+	  videodecoder: Don't set decoding timestamps on raw video
+	  https://bugzilla.gnome.org/show_bug.cgi?id=733720
+
+2014-08-07 18:10:41 +0300  George Kiagiadakis <george.kiagiadakis@collabora.com>
+
+	* gst-libs/gst/video/gstvideodecoder.c:
+	  videodecoder: In reverse playback, flush the output queue after decoding each keyframe chain
+	  This fixes the reverse playback scenario when upstream is not fully
+	  parsing the stream and does not send every keyframe chain separately
+	  with the DISCONT flag on the keyframe.
+	  To explain this, let's suppose we have this stream:
+	  0 1 2 3 4 5 6 7 8
+	  K     K     K
+	  In most circumstances, the upstream parser will chain in the
+	  decoder the buffers in the following order:
+	  6 7 8 3 4 5 0 1 2
+	  D     D     D
+	  In this case, GstVideoDecoder will flush the parse queue every time
+	  it receives discont (D) and we will eventually get in the output queue:
+	  (flush here) 8 7 6  (flush here) 5 4 3 (flush here) 2 1 0
+	  In case the upstream parser doesn't do this work, though,
+	  GstVideoDecoder will receive the whole stream at once and will flush
+	  the parse queue afterwards:
+	  0 1 2 3 4 5 6 7 8
+	  D
+	  During the flush, it will look backwards for keyframes and will
+	  decode in this order:
+	  6 7 8 3 4 5 0 1 2
+	  This is the same order that it would receive from upstream if
+	  upstream was parsing and looking for the keyframes, only that now
+	  there is no flushing of the output queue in between keyframes,
+	  which will result in the output queue looking like this:
+	  2 1 0 6 5 3 8 7 6
+	  This will confuse downstream obviously and will play incorrectly.
+	  This patch forces the decoder to flush the output queue every time
+	  it picks a new keyframe to decode, so it will end up decoding 6 7 8
+	  and then flushing before picking 3 for decoding, so the output will
+	  get 8 7 6 before 6 5 3 and the video will play back correctly.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=734441
+
+2014-08-10 17:30:18 +0100  Tim-Philipp Müller <tim@centricular.com>
+
+	* configure.ac:
+	  configure: use pkg-config to detect x11 and xv libs
+	  AC_PATH_XTRA macro unnecessarily pulls in libSM and libICE.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=731047
+
+2014-08-10 17:27:14 +0100  Tim-Philipp Müller <tim@centricular.com>
+
+	* sys/xvimage/xvimageallocator.c:
+	  xvimage: fix crash when outputting debug log
+	  Can't print a GstMemory via GST_PTR_FORMAT, it will crash
+	  inside GObject checking if it's a GObject, and we can't
+	  check generically whether it's a derived GstMemory type,
+	  as boxed types don't allowe derivation.
+
+2014-08-09 14:14:48 +0200  Sebastian Rasmussen <sebras@hotmail.com>
+
+	* gst-libs/gst/audio/gstaudioencoder.c:
+	  audioencoder: Mark caps argument as not being transferred
+	  https://bugzilla.gnome.org/show_bug.cgi?id=734540
+
+2014-08-09 14:20:32 +0200  Sebastian Rasmussen <sebras@hotmail.com>
+
+	* ext/vorbis/gstvorbisenc.c:
+	  vorbisenc: Improve annotation of internal function
+	  https://bugzilla.gnome.org/show_bug.cgi?id=734541
+
+2014-08-06 13:41:46 +0200  Sebastian Rasmussen <sebras@hotmail.com>
+
+	* tests/check/elements/appsrc.c:
+	* tests/examples/app/appsink-src.c:
+	* tests/examples/audio/audiomix.c:
+	* tests/examples/audio/volume.c:
+	* tests/examples/dynamic/codec-select.c:
+	* tests/examples/seek/scrubby.c:
+	* tests/examples/snapshot/snapshot.c:
+	* tests/icles/stress-videooverlay.c:
+	* tests/icles/test-textoverlay.c:
+	  tests: Add missing unrefs of objects after use
+	  Unreffing the objects returned by gst_bin_get_by_name() and
+	  gst_pipeline_get_use() were missing in several tests, so add these.
+	  Fixes https://bugzilla.gnome.org/show_bug.cgi?id=734359
+
+2014-08-06 13:22:56 +0200  Sebastian Rasmussen <sebras@hotmail.com>
+
+	* ext/ogg/gstoggdemux.c:
+	  oggdemux: Unref peer pad after use in error case
+	  Fixes https://bugzilla.gnome.org/show_bug.cgi?id=734350
+
+2014-08-06 10:07:42 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+	* gst-libs/gst/app/gstappsrc.c:
+	  appsrc: Some minor fixes and cleanup
+
+2014-08-06 09:59:32 -0400  Wang Xin-yu (王昕宇) <comicfans44@gmail.com>
+
+	* gst-libs/gst/app/gstappsrc.c:
+	  appsrc: Make caps set action queued together with buffer
+	  https://bugzilla.gnome.org/show_bug.cgi?id=729760
+
 2014-08-01 15:00:46 +0200  Sebastian Dröge <sebastian@centricular.com>
 
 	* gst/playback/gstplaybin2.c:
@@ -966,6 +9238,21 @@
 	  that our pad references are gone now.
 	  Probably fixes https://bugzilla.gnome.org/show_bug.cgi?id=733165
 
+2014-07-30 20:53:53 +0300  Mohammed Sameer <msameer@foolab.org>
+
+	* gst/playback/gststreamsynchronizer.c:
+	  streamsynchronizer: don't unset DISCONT flag
+	  Unsetting DISCONT flag means we need to copy the buffer. This copy operation
+	  mandates that all GstMemory should be copy-able which is not always the case
+	  https://bugzilla.gnome.org/show_bug.cgi?id=727409
+
+2014-07-31 18:40:59 +0200  Edward Hervey <edward@collabora.com>
+
+	* Makefile.am:
+	* common:
+	  Makefile: Add usage of build-checks step
+	  Allows building checks without running them
+
 2014-07-31 16:09:41 +0200  Edward Hervey <bilboed@bilboed.com>
 
 	* tests/check/libs/rtpbasedepayload.c:
@@ -983,6 +9270,192 @@
 	  pipeline back to NULL instead of READY.
 	  https://bugzilla.gnome.org/show_bug.cgi?id=733976
 
+2014-07-29 14:20:42 -0300  Thiago Santos <ts.santos@osg.sisa.samsung.com>
+
+	* gst/playback/gstdecodebin2.c:
+	  decodebin: add missing 'time' word to debug message
+	  It prints the buffers, bytes and time limits, but 'time' was missing
+	  from the string.
+
+2014-07-28 16:56:08 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+	* gst/playback/gstplaybin2.c:
+	  playbin: Pass through NO_PREROLL state change returns
+	  Fixes playback of live pipelines.
+
+2014-07-28 16:55:17 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+	* gst/playback/gsturidecodebin.c:
+	  uridecodebin: Pass through NO_PREROLL state change returns
+	  Fixes playback of live pipelines.
+
+2014-07-26 14:52:01 +0100  Tim-Philipp Müller <tim@centricular.com>
+
+	* gst/playback/gstplaybin2.c:
+	  playbin: fix 'attempt to unlock mutex that was not locked' in error code path
+	  Fixes playbin unit test with latest GLib.
+
+2014-07-08 16:59:37 -0400  Nicolas Dufresne <nicolas.dufresne@collabora.com>
+
+	* gst-libs/gst/video/gstvideoencoder.c:
+	  videoencoder: Don't delay set_format
+	  This prevent implementing allocation query, as the format need to be
+	  known in order to determin the size and number of buffers needed.
+	  Note: This may lead to few regressions that will need fixing
+	  https://bugzilla.gnome.org/show_bug.cgi?id=732288
+
+2014-07-23 19:51:36 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+	* gst/playback/gstdecodebin2.c:
+	  decodebin: Don't unref caps for which we don't own a reference... get one first
+	  https://bugzilla.gnome.org/show_bug.cgi?id=733615
+
+2014-07-23 12:36:15 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+	* gst/playback/gstplaybin2.c:
+	  playbin: Go asynchronously from READY to PAUSED
+	  We now add all our elements to uridecodebin *after*
+	  GstBin::change_state(READY->PAUSED), so we need to post async-start
+	  and async-done messages ourselves if we want to work async.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=733495
+
+2014-07-23 12:27:36 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+	* gst/playback/gsturidecodebin.c:
+	  uridecodebin: Go asynchronously from READY to PAUSED
+	  We now add all our elements to uridecodebin *after*
+	  GstBin::change_state(READY->PAUSED), so we need to post async-start
+	  and async-done messages ourselves if we want to work async.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=733495
+
+2014-07-21 15:54:05 +0300  Vivia Nikolaidou <n.vivia@gmail.com>
+
+	* tools/gst-discoverer.c:
+	  discoverer: Pretty-print topology tags
+	  Call the code used in properties for topology tags too.
+	  Side-effect achieved: more tags printed, buffers (e.g. images) shortened.
+
+2014-07-21 13:53:17 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+	* tools/gst-discoverer.c:
+	  discoverer: Fix code style a bit
+	  if (...)
+	  one_line;
+	  else if (...) {
+	  many_lines;
+	  } else
+	  one_line;
+	  looks a bit confusing.
+
+2014-07-21 13:48:31 +0300  Vivia Nikolaidou <n.vivia@gmail.com>
+
+	* tools/gst-discoverer.c:
+	  discoverer: prettier image tag printing
+	  Rather than dumping the serialized sample value, the code now
+	  prints the number of bytes in the buffer, then the caps in a
+	  human-readable format.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=733482
+
+2014-07-10 12:39:46 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+	* gst-libs/gst/audio/gstaudiodecoder.c:
+	  audiodecoder: Handle CAPS events immediately instead of delaying them
+	  https://bugzilla.gnome.org/show_bug.cgi?id=733147
+
+2014-07-11 21:51:05 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+	* gst-libs/gst/video/gstvideodecoder.c:
+	  videodecoder: Handle CAPS events immediately instead of delaying them
+	  https://bugzilla.gnome.org/show_bug.cgi?id=733147
+
+2014-07-15 17:34:01 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+	* tests/check/elements/playbin.c:
+	  playbin: Fix unit test for last change
+	  It will successfully asynchronously go to PAUSED now and
+	  later fail.
+
+2014-07-15 17:23:24 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+	* gst/playback/gsturidecodebin.c:
+	  uridecodebin: Create new sources after chaining up to the parent class
+	  Otherwise we start the new sources already before the parent class
+	  got ready to start.
+
+2014-07-15 17:20:05 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+	* gst/playback/gstplaybin2.c:
+	  playbin: Create new sources after chaining up to the parent class
+	  Otherwise we start the new sources already before the parent class
+	  got ready to start.
+
+2014-07-10 16:26:08 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+	* tests/check/elements/playbin-complex.c:
+	  playbin-complex: Change template name from %d to the more common %u
+
+2014-07-10 16:24:36 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+	* gst/playback/gstdecodebin2.c:
+	  decodebin: Link Parser/Converter directly and already connect to pad-added and other signals before setting elements to PAUSED
+	  otherwise we're going to
+	  a) start Parser/Converter before they are linked to their capsfilter,
+	  breaking their negotiation of a proper stream format
+	  b) start demuxers without having connected to their pad-added signals. We
+	  miss pads and in the worst case don't link any pads at all
+
+2014-07-10 12:51:22 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+	* gst/playback/gstdecodebin2.c:
+	  decodebin: Send sticky events to the new element after setting it to PAUSED
+	  ... and if this fails for whatever reason we skip the element and instead
+	  try with the next element. This allows us to handle elements that fail
+	  when setting caps on them by just skipping to the next alternative element.
+
+2014-07-10 12:50:17 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+	* gst/playback/gstdecodebin2.c:
+	  decodebin: Only link elements further after setting them to PAUSED
+	  They might fail to go to PAUSED, and when connecting them further
+	  we might already expose their srcpads on decodebin if we're unlucky.
+	  This prevents us to handle failures going to PAUSED gracefully.
+
+2014-07-10 12:22:35 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+	* gst/playback/gstdecodebin2.c:
+	  decodebin: Remove ERROR message filter after we set the element to PAUSED
+	  This allows us to catch more errors gracefully and switch to an alternative
+	  element instead.
+
+2014-07-10 12:17:52 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+	* gst/playback/gstdecodebin2.c:
+	  decodebin: Only continue autoplugging once the pad has final caps
+	  If the caps query returned us fixed caps this doesn't mean yet
+	  that these caps are actually complete (fields might be missing).
+	  It allows to do us some decisions, but the selection of the next
+	  element should be delayed as only complete caps allow proper selection
+	  of the next element.
+
+2014-07-10 12:03:46 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+	* gst/playback/gstdecodebin2.c:
+	  decodebin: Consider the caps after the capsfilter after parsers for autoplugging
+	  Otherwise we might try to continue autoplugging e.g. for a specific
+	  stream-format although the parser could convert to something else, thus giving
+	  us potentially less options for decoders.
+
+2014-07-21 00:17:38 +0100  Tim-Philipp Müller <tim@centricular.com>
+
+	* gst-libs/gst/pbutils/missing-plugins.c:
+	  pbutils: fix missing plugin description for missing elements
+	  CID: 1226445
+
+2014-07-19 18:04:35 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+	* configure.ac:
+	  Back to development
+
 === release 1.4.0 ===
 
 2014-07-19 17:04:57 +0200  Sebastian Dröge <sebastian@centricular.com>
diff --git a/INSTALL b/INSTALL
index b42a17a..2099840 100644
--- a/INSTALL
+++ b/INSTALL
@@ -1,48 +1,80 @@
+Installation Instructions
+*************************
+
+Copyright (C) 1994-1996, 1999-2002, 2004-2013 Free Software Foundation,
+Inc.
+
+   Copying and distribution of this file, with or without modification,
+are permitted in any medium without royalty provided the copyright
+notice and this notice are preserved.  This file is offered as-is,
+without warranty of any kind.
+
 Basic Installation
 ==================
 
-   These are generic installation instructions.
+   Briefly, the shell command `./configure && make && make install'
+should configure, build, and install this package.  The following
+more-detailed instructions are generic; see the `README' file for
+instructions specific to this package.  Some packages provide this
+`INSTALL' file but do not implement all of the features documented
+below.  The lack of an optional feature in a given package is not
+necessarily a bug.  More recommendations for GNU packages can be found
+in *note Makefile Conventions: (standards)Makefile Conventions.
 
    The `configure' shell script attempts to guess correct values for
 various system-dependent variables used during compilation.  It uses
 those values to create a `Makefile' in each directory of the package.
 It may also create one or more `.h' files containing system-dependent
 definitions.  Finally, it creates a shell script `config.status' that
-you can run in the future to recreate the current configuration, a file
-`config.cache' that saves the results of its tests to speed up
-reconfiguring, and a file `config.log' containing compiler output
-(useful mainly for debugging `configure').
+you can run in the future to recreate the current configuration, and a
+file `config.log' containing compiler output (useful mainly for
+debugging `configure').
+
+   It can also use an optional file (typically called `config.cache'
+and enabled with `--cache-file=config.cache' or simply `-C') that saves
+the results of its tests to speed up reconfiguring.  Caching is
+disabled by default to prevent problems with accidental use of stale
+cache files.
 
    If you need to do unusual things to compile the package, please try
 to figure out how `configure' could check whether to do them, and mail
 diffs or instructions to the address given in the `README' so they can
-be considered for the next release.  If at some point `config.cache'
-contains results you don't want to keep, you may remove or edit it.
+be considered for the next release.  If you are using the cache, and at
+some point `config.cache' contains results you don't want to keep, you
+may remove or edit it.
 
-   The file `configure.in' is used to create `configure' by a program
-called `autoconf'.  You only need `configure.in' if you want to change
-it or regenerate `configure' using a newer version of `autoconf'.
+   The file `configure.ac' (or `configure.in') is used to create
+`configure' by a program called `autoconf'.  You need `configure.ac' if
+you want to change it or regenerate `configure' using a newer version
+of `autoconf'.
 
-The simplest way to compile this package is:
+   The simplest way to compile this package is:
 
   1. `cd' to the directory containing the package's source code and type
-     `./configure' to configure the package for your system.  If you're
-     using `csh' on an old version of System V, you might need to type
-     `sh ./configure' instead to prevent `csh' from trying to execute
-     `configure' itself.
+     `./configure' to configure the package for your system.
 
-     Running `configure' takes awhile.  While running, it prints some
-     messages telling which features it is checking for.
+     Running `configure' might take a while.  While running, it prints
+     some messages telling which features it is checking for.
 
   2. Type `make' to compile the package.
 
   3. Optionally, type `make check' to run any self-tests that come with
-     the package.
+     the package, generally using the just-built uninstalled binaries.
 
   4. Type `make install' to install the programs and any data files and
-     documentation.
+     documentation.  When installing into a prefix owned by root, it is
+     recommended that the package be configured and built as a regular
+     user, and only the `make install' phase executed with root
+     privileges.
 
-  5. You can remove the program binaries and object files from the
+  5. Optionally, type `make installcheck' to repeat any self-tests, but
+     this time using the binaries in their final installed location.
+     This target does not install anything.  Running this target as a
+     regular user, particularly if the prior `make install' required
+     root privileges, verifies that the installation completed
+     correctly.
+
+  6. You can remove the program binaries and object files from the
      source code directory by typing `make clean'.  To also remove the
      files that `configure' created (so you can compile the package for
      a different kind of computer), type `make distclean'.  There is
@@ -51,62 +83,119 @@
      all sorts of other programs in order to regenerate files that came
      with the distribution.
 
+  7. Often, you can also type `make uninstall' to remove the installed
+     files again.  In practice, not all packages have tested that
+     uninstallation works correctly, even though it is required by the
+     GNU Coding Standards.
+
+  8. Some packages, particularly those that use Automake, provide `make
+     distcheck', which can by used by developers to test that all other
+     targets like `make install' and `make uninstall' work correctly.
+     This target is generally not run by end users.
+
 Compilers and Options
 =====================
 
    Some systems require unusual options for compilation or linking that
-the `configure' script does not know about.  You can give `configure'
-initial values for variables by setting them in the environment.  Using
-a Bourne-compatible shell, you can do that on the command line like
-this:
-     CC=c89 CFLAGS=-O2 LIBS=-lposix ./configure
+the `configure' script does not know about.  Run `./configure --help'
+for details on some of the pertinent environment variables.
 
-Or on systems that have the `env' program, you can do it like this:
-     env CPPFLAGS=-I/usr/local/include LDFLAGS=-s ./configure
+   You can give `configure' initial values for configuration parameters
+by setting variables in the command line or in the environment.  Here
+is an example:
+
+     ./configure CC=c99 CFLAGS=-g LIBS=-lposix
+
+   *Note Defining Variables::, for more details.
 
 Compiling For Multiple Architectures
 ====================================
 
    You can compile the package for more than one kind of computer at the
 same time, by placing the object files for each architecture in their
-own directory.  To do this, you must use a version of `make' that
-supports the `VPATH' variable, such as GNU `make'.  `cd' to the
+own directory.  To do this, you can use GNU `make'.  `cd' to the
 directory where you want the object files and executables to go and run
 the `configure' script.  `configure' automatically checks for the
-source code in the directory that `configure' is in and in `..'.
+source code in the directory that `configure' is in and in `..'.  This
+is known as a "VPATH" build.
 
-   If you have to use a `make' that does not supports the `VPATH'
-variable, you have to compile the package for one architecture at a time
-in the source code directory.  After you have installed the package for
-one architecture, use `make distclean' before reconfiguring for another
-architecture.
+   With a non-GNU `make', it is safer to compile the package for one
+architecture at a time in the source code directory.  After you have
+installed the package for one architecture, use `make distclean' before
+reconfiguring for another architecture.
+
+   On MacOS X 10.5 and later systems, you can create libraries and
+executables that work on multiple system types--known as "fat" or
+"universal" binaries--by specifying multiple `-arch' options to the
+compiler but only a single `-arch' option to the preprocessor.  Like
+this:
+
+     ./configure CC="gcc -arch i386 -arch x86_64 -arch ppc -arch ppc64" \
+                 CXX="g++ -arch i386 -arch x86_64 -arch ppc -arch ppc64" \
+                 CPP="gcc -E" CXXCPP="g++ -E"
+
+   This is not guaranteed to produce working output in all cases, you
+may have to build one architecture at a time and combine the results
+using the `lipo' tool if you have problems.
 
 Installation Names
 ==================
 
-   By default, `make install' will install the package's files in
-`/usr/local/bin', `/usr/local/man', etc.  You can specify an
-installation prefix other than `/usr/local' by giving `configure' the
-option `--prefix=PATH'.
+   By default, `make install' installs the package's commands under
+`/usr/local/bin', include files under `/usr/local/include', etc.  You
+can specify an installation prefix other than `/usr/local' by giving
+`configure' the option `--prefix=PREFIX', where PREFIX must be an
+absolute file name.
 
    You can specify separate installation prefixes for
 architecture-specific files and architecture-independent files.  If you
-give `configure' the option `--exec-prefix=PATH', the package will use
-PATH as the prefix for installing programs and libraries.
-Documentation and other data files will still use the regular prefix.
+pass the option `--exec-prefix=PREFIX' to `configure', the package uses
+PREFIX as the prefix for installing programs and libraries.
+Documentation and other data files still use the regular prefix.
 
    In addition, if you use an unusual directory layout you can give
-options like `--bindir=PATH' to specify different values for particular
+options like `--bindir=DIR' to specify different values for particular
 kinds of files.  Run `configure --help' for a list of the directories
-you can set and what kinds of files go in them.
+you can set and what kinds of files go in them.  In general, the
+default for these options is expressed in terms of `${prefix}', so that
+specifying just `--prefix' will affect all of the other directory
+specifications that were not explicitly provided.
+
+   The most portable way to affect installation locations is to pass the
+correct locations to `configure'; however, many packages provide one or
+both of the following shortcuts of passing variable assignments to the
+`make install' command line to change installation locations without
+having to reconfigure or recompile.
+
+   The first method involves providing an override variable for each
+affected directory.  For example, `make install
+prefix=/alternate/directory' will choose an alternate location for all
+directory configuration variables that were expressed in terms of
+`${prefix}'.  Any directories that were specified during `configure',
+but not in terms of `${prefix}', must each be overridden at install
+time for the entire installation to be relocated.  The approach of
+makefile variable overrides for each directory variable is required by
+the GNU Coding Standards, and ideally causes no recompilation.
+However, some platforms have known limitations with the semantics of
+shared libraries that end up requiring recompilation when using this
+method, particularly noticeable in packages that use GNU Libtool.
+
+   The second method involves providing the `DESTDIR' variable.  For
+example, `make install DESTDIR=/alternate/directory' will prepend
+`/alternate/directory' before all installation names.  The approach of
+`DESTDIR' overrides is not required by the GNU Coding Standards, and
+does not work on platforms that have drive letters.  On the other hand,
+it does better at avoiding recompilation issues, and works well even
+when some directory options were not specified in terms of `${prefix}'
+at `configure' time.
+
+Optional Features
+=================
 
    If the package supports it, you can cause programs to be installed
 with an extra prefix or suffix on their names by giving `configure' the
 option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'.
 
-Optional Features
-=================
-
    Some packages pay attention to `--enable-FEATURE' options to
 `configure', where FEATURE indicates an optional part of the package.
 They may also pay attention to `--with-PACKAGE' options, where PACKAGE
@@ -119,25 +208,80 @@
 you can use the `configure' options `--x-includes=DIR' and
 `--x-libraries=DIR' to specify their locations.
 
+   Some packages offer the ability to configure how verbose the
+execution of `make' will be.  For these packages, running `./configure
+--enable-silent-rules' sets the default to minimal output, which can be
+overridden with `make V=1'; while running `./configure
+--disable-silent-rules' sets the default to verbose, which can be
+overridden with `make V=0'.
+
+Particular systems
+==================
+
+   On HP-UX, the default C compiler is not ANSI C compatible.  If GNU
+CC is not installed, it is recommended to use the following options in
+order to use an ANSI C compiler:
+
+     ./configure CC="cc -Ae -D_XOPEN_SOURCE=500"
+
+and if that doesn't work, install pre-built binaries of GCC for HP-UX.
+
+   HP-UX `make' updates targets which have the same time stamps as
+their prerequisites, which makes it generally unusable when shipped
+generated files such as `configure' are involved.  Use GNU `make'
+instead.
+
+   On OSF/1 a.k.a. Tru64, some versions of the default C compiler cannot
+parse its `<wchar.h>' header file.  The option `-nodtk' can be used as
+a workaround.  If GNU CC is not installed, it is therefore recommended
+to try
+
+     ./configure CC="cc"
+
+and if that doesn't work, try
+
+     ./configure CC="cc -nodtk"
+
+   On Solaris, don't put `/usr/ucb' early in your `PATH'.  This
+directory contains several dysfunctional programs; working variants of
+these programs are available in `/usr/bin'.  So, if you need `/usr/ucb'
+in your `PATH', put it _after_ `/usr/bin'.
+
+   On Haiku, software installed for all users goes in `/boot/common',
+not `/usr/local'.  It is recommended to use the following options:
+
+     ./configure --prefix=/boot/common
+
 Specifying the System Type
 ==========================
 
-   There may be some features `configure' can not figure out
-automatically, but needs to determine by the type of host the package
-will run on.  Usually `configure' can figure that out, but if it prints
-a message saying it can not guess the host type, give it the
-`--host=TYPE' option.  TYPE can either be a short name for the system
-type, such as `sun4', or a canonical name with three fields:
+   There may be some features `configure' cannot figure out
+automatically, but needs to determine by the type of machine the package
+will run on.  Usually, assuming the package is built to be run on the
+_same_ architectures, `configure' can figure that out, but if it prints
+a message saying it cannot guess the machine type, give it the
+`--build=TYPE' option.  TYPE can either be a short name for the system
+type, such as `sun4', or a canonical name which has the form:
+
      CPU-COMPANY-SYSTEM
 
-See the file `config.sub' for the possible values of each field.  If
-`config.sub' isn't included in this package, then this package doesn't
-need to know the host type.
+where SYSTEM can have one of these forms:
 
-   If you are building compiler tools for cross-compiling, you can also
-use the `--target=TYPE' option to select the type of system they will
-produce code for and the `--build=TYPE' option to select the type of
-system on which you are compiling the package.
+     OS
+     KERNEL-OS
+
+   See the file `config.sub' for the possible values of each field.  If
+`config.sub' isn't included in this package, then this package doesn't
+need to know the machine type.
+
+   If you are _building_ compiler tools for cross-compiling, you should
+use the option `--target=TYPE' to select the type of system they will
+produce code for.
+
+   If you want to _use_ a cross compiler, that generates code for a
+platform different from the build platform, you should specify the
+"host" platform (i.e., that on which the generated programs will
+eventually be run) with `--host=TYPE'.
 
 Sharing Defaults
 ================
@@ -150,19 +294,56 @@
 `CONFIG_SITE' environment variable to the location of the site script.
 A warning: not all `configure' scripts look for a site script.
 
-Operation Controls
+Defining Variables
 ==================
 
+   Variables not defined in a site shell script can be set in the
+environment passed to `configure'.  However, some packages may run
+configure again during the build, and the customized values of these
+variables may be lost.  In order to avoid this problem, you should set
+them in the `configure' command line, using `VAR=value'.  For example:
+
+     ./configure CC=/usr/local2/bin/gcc
+
+causes the specified `gcc' to be used as the C compiler (unless it is
+overridden in the site shell script).
+
+Unfortunately, this technique does not work for `CONFIG_SHELL' due to
+an Autoconf limitation.  Until the limitation is lifted, you can use
+this workaround:
+
+     CONFIG_SHELL=/bin/bash ./configure CONFIG_SHELL=/bin/bash
+
+`configure' Invocation
+======================
+
    `configure' recognizes the following options to control how it
 operates.
 
-`--cache-file=FILE'
-     Use and save the results of the tests in FILE instead of
-     `./config.cache'.  Set FILE to `/dev/null' to disable caching, for
-     debugging `configure'.
-
 `--help'
-     Print a summary of the options to `configure', and exit.
+`-h'
+     Print a summary of all of the options to `configure', and exit.
+
+`--help=short'
+`--help=recursive'
+     Print a summary of the options unique to this package's
+     `configure', and exit.  The `short' variant lists options used
+     only in the top level, while the `recursive' variant lists options
+     also present in any nested packages.
+
+`--version'
+`-V'
+     Print the version of Autoconf used to generate the `configure'
+     script, and exit.
+
+`--cache-file=FILE'
+     Enable the cache: use and save the results of the tests in FILE,
+     traditionally `config.cache'.  FILE defaults to `/dev/null' to
+     disable caching.
+
+`--config-cache'
+`-C'
+     Alias for `--cache-file=config.cache'.
 
 `--quiet'
 `--silent'
@@ -175,8 +356,15 @@
      Look for the package's source code in directory DIR.  Usually
      `configure' can determine that directory automatically.
 
-`--version'
-     Print the version of Autoconf used to generate the `configure'
-     script, and exit.
+`--prefix=DIR'
+     Use DIR as the installation prefix.  *note Installation Names::
+     for more details, including other options available for fine-tuning
+     the installation locations.
 
-`configure' also accepts some other, not widely useful, options.
+`--no-create'
+`-n'
+     Run the configure checks, but stop before creating any output
+     files.
+
+`configure' also accepts some other, not widely useful, options.  Run
+`configure --help' for more details.
diff --git a/Makefile.am b/Makefile.am
index 8cb3333..5fc3e10 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -44,14 +44,18 @@
 include $(top_srcdir)/common/po.mak
 
 check-valgrind:
-	cd tests/check && make check-valgrind
+	$(MAKE) -C tests/check check-valgrind
 
 if HAVE_GST_CHECK
 check-torture:
-	cd tests/check && make torture
+	$(MAKE) -C tests/check torture
+build-checks:
+	$(MAKE) -C tests/check build-checks
 else
 check-torture:
 	true
+build-checks:
+	true
 endif
 
 WIN32_COPY = \
@@ -85,6 +89,7 @@
 	$(top_builddir)/tools/gst-discoverer
 
 CRUFT_DIRS = \
+	$(top_srcdir)/docs/plugins/tmpl \
 	$(top_srcdir)/ext/gio \
 	$(top_srcdir)/gst/gdp \
 	$(top_srcdir)/sys/v4l \
diff --git a/Makefile.in b/Makefile.in
index e1eec36..1710fe7 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -1,7 +1,7 @@
-# Makefile.in generated by automake 1.14.1 from Makefile.am.
+# Makefile.in generated by automake 1.15 from Makefile.am.
 # @configure_input@
 
-# Copyright (C) 1994-2013 Free Software Foundation, Inc.
+# 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,
@@ -25,7 +25,17 @@
 #
 # set CRUFT_FILES and/or CRUFT_DIRS in your Makefile.am when you include this
 VPATH = @srcdir@
-am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)'
+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 \
       ?) ;; \
@@ -89,15 +99,6 @@
 build_triplet = @build@
 host_triplet = @host@
 target_triplet = @target@
-DIST_COMMON = $(top_srcdir)/common/win32.mak \
-	$(top_srcdir)/common/release.mak $(top_srcdir)/common/po.mak \
-	$(top_srcdir)/common/coverage/lcov.mak \
-	$(top_srcdir)/common/cruft.mak INSTALL NEWS README AUTHORS \
-	ChangeLog $(srcdir)/Makefile.in $(srcdir)/Makefile.am \
-	$(top_srcdir)/configure $(am__configure_deps) \
-	$(srcdir)/config.h.in $(srcdir)/gst-plugins-base.spec.in \
-	ABOUT-NLS COPYING COPYING.LIB compile config.guess \
-	config.rpath config.sub depcomp install-sh missing ltmain.sh
 subdir = .
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
 am__aclocal_m4_deps = $(top_srcdir)/common/m4/as-ac-expand.m4 \
@@ -119,7 +120,6 @@
 	$(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-x11.m4 \
 	$(top_srcdir)/common/m4/gst.m4 \
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
@@ -136,6 +136,8 @@
 	$(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(top_srcdir)/configure \
+	$(am__configure_deps) $(am__DIST_COMMON)
 am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \
  configure.lineno config.status.lineno
 mkinstalldirs = $(install_sh) -d
@@ -198,6 +200,14 @@
 ETAGS = etags
 CTAGS = ctags
 CSCOPE = cscope
+am__DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/config.h.in \
+	$(srcdir)/gst-plugins-base.spec.in \
+	$(top_srcdir)/common/coverage/lcov.mak \
+	$(top_srcdir)/common/cruft.mak $(top_srcdir)/common/po.mak \
+	$(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
 DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
 distdir = $(PACKAGE)-$(VERSION)
 top_distdir = $(distdir)
@@ -299,6 +309,8 @@
 GIO_CFLAGS = @GIO_CFLAGS@
 GIO_LDFLAGS = @GIO_LDFLAGS@
 GIO_LIBS = @GIO_LIBS@
+GIO_UNIX_2_0_CFLAGS = @GIO_UNIX_2_0_CFLAGS@
+GIO_UNIX_2_0_LIBS = @GIO_UNIX_2_0_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
@@ -328,6 +340,8 @@
 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_OPTION_CFLAGS = @GST_OPTION_CFLAGS@
 GST_OPTION_CXXFLAGS = @GST_OPTION_CXXFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
@@ -355,7 +369,6 @@
 GTK_X11_CFLAGS = @GTK_X11_CFLAGS@
 GTK_X11_LIBS = @GTK_X11_LIBS@
 HAVE_CDPARANOIA = @HAVE_CDPARANOIA@
-HAVE_X = @HAVE_X@
 HAVE_XSHM = @HAVE_XSHM@
 HAVE_ZLIB = @HAVE_ZLIB@
 HTML_DIR = @HTML_DIR@
@@ -370,6 +383,7 @@
 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@
@@ -459,13 +473,12 @@
 XGETTEXT = @XGETTEXT@
 XGETTEXT_015 = @XGETTEXT_015@
 XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
-XMKMF = @XMKMF@
+XSHM_CFLAGS = @XSHM_CFLAGS@
 XSHM_LIBS = @XSHM_LIBS@
+XVIDEO_CFLAGS = @XVIDEO_CFLAGS@
 XVIDEO_LIBS = @XVIDEO_LIBS@
 X_CFLAGS = @X_CFLAGS@
-X_EXTRA_LIBS = @X_EXTRA_LIBS@
 X_LIBS = @X_LIBS@
-X_PRE_LIBS = @X_PRE_LIBS@
 ZLIB_CFLAGS = @ZLIB_CFLAGS@
 ZLIB_LIBS = @ZLIB_LIBS@
 abs_builddir = @abs_builddir@
@@ -518,6 +531,7 @@
 psdir = @psdir@
 pyexecdir = @pyexecdir@
 pythondir = @pythondir@
+runstatedir = @runstatedir@
 sbindir = @sbindir@
 sharedstatedir = @sharedstatedir@
 srcdir = @srcdir@
@@ -592,6 +606,7 @@
 	$(top_builddir)/tools/gst-discoverer
 
 CRUFT_DIRS = \
+	$(top_srcdir)/docs/plugins/tmpl \
 	$(top_srcdir)/ext/gio \
 	$(top_srcdir)/gst/gdp \
 	$(top_srcdir)/sys/v4l \
@@ -616,7 +631,6 @@
 	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu Makefile'; \
 	$(am__cd) $(top_srcdir) && \
 	  $(AUTOMAKE) --gnu Makefile
-.PRECIOUS: Makefile
 Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
 	@case '$?' in \
 	  *config.status*) \
@@ -626,7 +640,7 @@
 	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \
 	    cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \
 	esac;
-$(top_srcdir)/common/win32.mak $(top_srcdir)/common/release.mak $(top_srcdir)/common/po.mak $(top_srcdir)/common/coverage/lcov.mak $(top_srcdir)/common/cruft.mak:
+$(top_srcdir)/common/win32.mak $(top_srcdir)/common/release.mak $(top_srcdir)/common/po.mak $(top_srcdir)/common/coverage/lcov.mak $(top_srcdir)/common/cruft.mak $(am__empty):
 
 $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
 	$(SHELL) ./config.status --recheck
@@ -852,15 +866,15 @@
 	$(am__post_remove_distdir)
 
 dist-tarZ: distdir
-	@echo WARNING: "Support for shar distribution archives is" \
-	               "deprecated." >&2
+	@echo WARNING: "Support for distribution archives compressed with" \
+		       "legacy program 'compress' is deprecated." >&2
 	@echo WARNING: "It will be removed altogether in Automake 2.0" >&2
 	tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z
 	$(am__post_remove_distdir)
 
 dist-shar: distdir
-	@echo WARNING: "Support for distribution archives compressed with" \
-		       "legacy program 'compress' is deprecated." >&2
+	@echo WARNING: "Support for shar distribution archives is" \
+	               "deprecated." >&2
 	@echo WARNING: "It will be removed altogether in Automake 2.0" >&2
 	shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz
 	$(am__post_remove_distdir)
@@ -896,18 +910,18 @@
 	esac
 	chmod -R a-w $(distdir)
 	chmod u+w $(distdir)
-	mkdir $(distdir)/_build $(distdir)/_inst
+	mkdir $(distdir)/_build $(distdir)/_build/sub $(distdir)/_inst
 	chmod a-w $(distdir)
 	test -d $(distdir)/_build || exit 0; \
 	dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \
 	  && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \
 	  && $(MAKE) $(AM_MAKEFLAGS) distcheck-hook \
 	  && am__cwd=`pwd` \
-	  && $(am__cd) $(distdir)/_build \
-	  && ../configure \
+	  && $(am__cd) $(distdir)/_build/sub \
+	  && ../../configure \
 	    $(AM_DISTCHECK_CONFIGURE_FLAGS) \
 	    $(DISTCHECK_CONFIGURE_FLAGS) \
-	    --srcdir=.. --prefix="$$dc_install_base" \
+	    --srcdir=../.. --prefix="$$dc_install_base" \
 	  && $(MAKE) $(AM_MAKEFLAGS) \
 	  && $(MAKE) $(AM_MAKEFLAGS) dvi \
 	  && $(MAKE) $(AM_MAKEFLAGS) check \
@@ -1085,6 +1099,8 @@
 	mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
 	tags tags-am uninstall uninstall-am
 
+.PRECIOUS: Makefile
+
 
 win32-debug:
 	@echo; \
@@ -1187,12 +1203,16 @@
 	$(top_srcdir)/common/download-translations $(PACKAGE)
 
 check-valgrind:
-	cd tests/check && make check-valgrind
+	$(MAKE) -C tests/check check-valgrind
 
 @HAVE_GST_CHECK_TRUE@check-torture:
-@HAVE_GST_CHECK_TRUE@	cd tests/check && make torture
+@HAVE_GST_CHECK_TRUE@	$(MAKE) -C tests/check torture
+@HAVE_GST_CHECK_TRUE@build-checks:
+@HAVE_GST_CHECK_TRUE@	$(MAKE) -C tests/check build-checks
 @HAVE_GST_CHECK_FALSE@check-torture:
 @HAVE_GST_CHECK_FALSE@	true
+@HAVE_GST_CHECK_FALSE@build-checks:
+@HAVE_GST_CHECK_FALSE@	true
 
 win32-update:
 	for f in $(WIN32_COPY); do cp -v $$f win32/common; done; \
diff --git a/NEWS b/NEWS
index a428115..b26bdf8 100644
--- a/NEWS
+++ b/NEWS
@@ -1,2 +1,2 @@
-This is GStreamer Base Plugins 1.4.5
+This is GStreamer Base Plugins 1.5.91
 
diff --git a/README b/README
index da0cab4..f175b1b 100644
--- a/README
+++ b/README
@@ -1,4 +1,4 @@
-GStreamer 1.3.x development series
+GStreamer 1.5.x development series
 
 WHAT IT IS
 ----------
diff --git a/RELEASE b/RELEASE
index d588243..bc236d0 100644
--- a/RELEASE
+++ b/RELEASE
@@ -1,27 +1,16 @@
 
-Release notes for GStreamer Base Plugins 1.4.5
-
-The GStreamer team is pleased to announce a bugfix release of the stable
-1.4 release series. The 1.4 release series is adding new features on top
-of the 1.2 series and is part of the API and ABI-stable 1.x release
-series of the GStreamer multimedia framework that contains new features.
-The 1.4.x bugfix releases only contain important bugfixes compared to 1.4.0.
+Release notes for GStreamer Base Plugins 1.5.91
 
 
-Binaries for Android, iOS, Mac OS X and Windows are provided by the
-GStreamer project for this release.
+The GStreamer team is pleased to announce the second release candidate for the
+stable 1.6 release series. The 1.6 release series is adding new features on top of
+the 1.0, 1.2 and 1.4 series and is part of the API and ABI-stable 1.x release
+series of the GStreamer multimedia framework. The final 1.6.0 release is planned
+in the next few days unless any major bugs are found.
 
 
-The 1.x series is a stable series targeted at end users. It is not API
-or ABI compatible with the 0.10.x series. It can, however, be installed
-in parallel with the 0.10.x series and will not affect an existing
-0.10.x installation.
-
-
-The stable 1.4.x release series is API and ABI compatible with 1.0.x and
-any other 1.x release series in the future. Compared to 1.0.x it contains
-some new features and more intrusive changes that were considered too
-risky as a bugfix.
+Binaries for Android, iOS, Mac OS X and Windows will be provided separately by
+the GStreamer project.
 
 
 
@@ -71,17 +60,23 @@
 
 Bugs fixed in this release
      
-      * 741420 : video pools: should update size in configuration after applying alignment
-      * 715050 : add typefinder for audio/x-audible
-      * 739544 : tcp: Add test and fix memory leak in tcp elements
-      * 739840 : typefind should recognize Apple Core Audio Format (CAF)
-      * 740556 : videodecoder: don't complain when DTS != PTS on keyframes
-      * 740675 : playsink: continues playback, reset mute property
-      * 740730 : rtspconnection: don't remove child source if parent source is already destroyed
-      * 740853 : audiodecoder: Push pending events before sending EOS.
-      * 740952 : alsa: NetBSD fixes
-      * 741045 : audiorate can can lose timestamp precision in some cases
-      * 741198 : playbin: leaks GstPads
+      * 734617 : videodecoder: Call the child class finish() function on stream changes
+      * 740387 : [REGRESSION] videoscale: The port to the new scaling API broke some file playback
+      * 744806 : audiodecoder: early call to drain() causes segment event to be sent before caps
+      * 753817 : subparse: SIGSEGV with abnormal file
+      * 753850 : gl: overlay composition negotation with the sink fails
+      * 754199 : audiobasesink: patch for missing/incorrect documentation about the custom slaving method
+      * 754235 : playsinkconvertbin: regression after removing accept-caps handler
+      * 754429 : basetextoverlay: crash in basetextoverlay for padding greater than video size
+      * 754597 : appsrc: fails to push the caps at the start of the data flow when configured in seekable/random-access mode
+      * 754630 : libs: " ll " printf modifier isn't available on MinGW
+      * 754755 : playbin: Compiler warning with 64bit Windows target MinGW, cast to pointer from integer of different size
+      * 754808 : video: missing alpha flag for some formats
+      * 754973 : xvimagesink: fix error leak when context creation fails
+      * 755098 : uridecodebin: Smooth Streaming's media type does not match
+      * 755143 : audiosink, multisocketsink: Fix error leak during failures
+      * 755198 : basetextoverlay: trivial fix in debug message
+      * 755201 : playback-test: Dont free null array on exit
 
 ==== Download ====
 
@@ -118,21 +113,20 @@
         
 Contributors to this release
     
-      * Andrei Sarakeev
-      * Chad
-      * Edward Hervey
-      * Göran Jönsson
-      * Jan Schmidt
-      * Jonathan Matthew
-      * Matej Knopp
-      * Mathieu Duponchelle
-      * Peter G. Baum
+      * Carlos Rafael Giani
+      * Christophe Fergeau
+      * Eunhae Choi
+      * George Kiagiadakis
+      * Havard Graff
+      * Kouhei Sutou
+      * Philippe Normand
+      * Prashant Gotarne
+      * Ravi Kiran K N
       * Sebastian Dröge
-      * Song Bing
       * Thiago Santos
-      * Thibault Saunier
-      * Thomas Klausner
       * Tim-Philipp Müller
-      * William Manley
+      * Vikram Fugro
+      * Vineeth T M
+      * Vineeth TM
       * Wim Taymans
  
\ No newline at end of file
diff --git a/aclocal.m4 b/aclocal.m4
index 340ed35..b833ab2 100644
--- a/aclocal.m4
+++ b/aclocal.m4
@@ -1,6 +1,6 @@
-# generated automatically by aclocal 1.14.1 -*- Autoconf -*-
+# generated automatically by aclocal 1.15 -*- Autoconf -*-
 
-# Copyright (C) 1996-2013 Free Software Foundation, Inc.
+# Copyright (C) 1996-2014 Free Software Foundation, Inc.
 
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
@@ -20,7 +20,7 @@
 If you have problems, you may need to regenerate the build system entirely.
 To do so, use the procedure documented by the package, typically 'autoreconf'.])])
 
-# Copyright (C) 2002-2013 Free Software Foundation, Inc.
+# Copyright (C) 2002-2014 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
@@ -32,10 +32,10 @@
 # generated from the m4 files accompanying Automake X.Y.
 # (This private macro should not be called outside this file.)
 AC_DEFUN([AM_AUTOMAKE_VERSION],
-[am__api_version='1.14'
+[am__api_version='1.15'
 dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to
 dnl require some minimum version.  Point them to the right macro.
-m4_if([$1], [1.14.1], [],
+m4_if([$1], [1.15], [],
       [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl
 ])
 
@@ -51,14 +51,14 @@
 # Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced.
 # This function is AC_REQUIREd by AM_INIT_AUTOMAKE.
 AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION],
-[AM_AUTOMAKE_VERSION([1.14.1])dnl
+[AM_AUTOMAKE_VERSION([1.15])dnl
 m4_ifndef([AC_AUTOCONF_VERSION],
   [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl
 _AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))])
 
 # AM_AUX_DIR_EXPAND                                         -*- Autoconf -*-
 
-# Copyright (C) 2001-2013 Free Software Foundation, Inc.
+# Copyright (C) 2001-2014 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
@@ -110,7 +110,7 @@
 
 # AM_CONDITIONAL                                            -*- Autoconf -*-
 
-# Copyright (C) 1997-2013 Free Software Foundation, Inc.
+# Copyright (C) 1997-2014 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
@@ -141,7 +141,7 @@
 Usually this means the macro was only invoked conditionally.]])
 fi])])
 
-# Copyright (C) 1999-2013 Free Software Foundation, Inc.
+# Copyright (C) 1999-2014 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
@@ -332,7 +332,7 @@
 
 # Generate code to set up dependency tracking.              -*- Autoconf -*-
 
-# Copyright (C) 1999-2013 Free Software Foundation, Inc.
+# Copyright (C) 1999-2014 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
@@ -408,7 +408,7 @@
 
 # Do all the work for Automake.                             -*- Autoconf -*-
 
-# Copyright (C) 1996-2013 Free Software Foundation, Inc.
+# Copyright (C) 1996-2014 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
@@ -498,8 +498,8 @@
 # <http://lists.gnu.org/archive/html/automake/2012-07/msg00001.html>
 # <http://lists.gnu.org/archive/html/automake/2012-07/msg00014.html>
 AC_SUBST([mkdir_p], ['$(MKDIR_P)'])
-# We need awk for the "check" target.  The system "awk" is bad on
-# some platforms.
+# We need awk for the "check" target (and possibly the TAP driver).  The
+# system "awk" is bad on some platforms.
 AC_REQUIRE([AC_PROG_AWK])dnl
 AC_REQUIRE([AC_PROG_MAKE_SET])dnl
 AC_REQUIRE([AM_SET_LEADING_DOT])dnl
@@ -573,6 +573,9 @@
     AC_MSG_ERROR([Your 'rm' program is bad, sorry.])
   fi
 fi
+dnl The trailing newline in this macro's definition is deliberate, for
+dnl backward compatibility and to allow trailing 'dnl'-style comments
+dnl after the AM_INIT_AUTOMAKE invocation. See automake bug#16841.
 ])
 
 dnl Hook into '_AC_COMPILER_EXEEXT' early to learn its expansion.  Do not
@@ -602,7 +605,7 @@
 done
 echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count])
 
-# Copyright (C) 2001-2013 Free Software Foundation, Inc.
+# Copyright (C) 2001-2014 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
@@ -613,7 +616,7 @@
 # Define $install_sh.
 AC_DEFUN([AM_PROG_INSTALL_SH],
 [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
-if test x"${install_sh}" != xset; then
+if test x"${install_sh+set}" != xset; then
   case $am_aux_dir in
   *\ * | *\	*)
     install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;;
@@ -623,7 +626,7 @@
 fi
 AC_SUBST([install_sh])])
 
-# Copyright (C) 2003-2013 Free Software Foundation, Inc.
+# Copyright (C) 2003-2014 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
@@ -645,7 +648,7 @@
 # Add --enable-maintainer-mode option to configure.         -*- Autoconf -*-
 # From Jim Meyering
 
-# Copyright (C) 1996-2013 Free Software Foundation, Inc.
+# Copyright (C) 1996-2014 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
@@ -680,7 +683,7 @@
 
 # Check to see how 'make' treats includes.	            -*- Autoconf -*-
 
-# Copyright (C) 2001-2013 Free Software Foundation, Inc.
+# Copyright (C) 2001-2014 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
@@ -730,7 +733,7 @@
 
 # Fake the existence of programs that GNU maintainers use.  -*- Autoconf -*-
 
-# Copyright (C) 1997-2013 Free Software Foundation, Inc.
+# Copyright (C) 1997-2014 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
@@ -767,7 +770,7 @@
 fi
 ])
 
-# Copyright (C) 2003-2013 Free Software Foundation, Inc.
+# Copyright (C) 2003-2014 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
@@ -801,7 +804,7 @@
 
 # Helper functions for option handling.                     -*- Autoconf -*-
 
-# Copyright (C) 2001-2013 Free Software Foundation, Inc.
+# Copyright (C) 2001-2014 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
@@ -830,7 +833,7 @@
 AC_DEFUN([_AM_IF_OPTION],
 [m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])])
 
-# Copyright (C) 1999-2013 Free Software Foundation, Inc.
+# Copyright (C) 1999-2014 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
@@ -877,7 +880,7 @@
 # For backward compatibility.
 AC_DEFUN_ONCE([AM_PROG_CC_C_O], [AC_REQUIRE([AC_PROG_CC])])
 
-# Copyright (C) 1999-2013 Free Software Foundation, Inc.
+# Copyright (C) 1999-2014 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
@@ -1112,7 +1115,7 @@
 sys.exit(sys.hexversion < minverhex)"
   AS_IF([AM_RUN_LOG([$1 -c "$prog"])], [$3], [$4])])
 
-# Copyright (C) 2001-2013 Free Software Foundation, Inc.
+# Copyright (C) 2001-2014 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
@@ -1131,7 +1134,7 @@
 
 # Check to make sure that the build environment is sane.    -*- Autoconf -*-
 
-# Copyright (C) 1996-2013 Free Software Foundation, Inc.
+# Copyright (C) 1996-2014 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
@@ -1212,7 +1215,7 @@
 rm -f conftest.file
 ])
 
-# Copyright (C) 2009-2013 Free Software Foundation, Inc.
+# Copyright (C) 2009-2014 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
@@ -1272,7 +1275,7 @@
 _AM_SUBST_NOTMAKE([AM_BACKSLASH])dnl
 ])
 
-# Copyright (C) 2001-2013 Free Software Foundation, Inc.
+# Copyright (C) 2001-2014 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
@@ -1300,7 +1303,7 @@
 INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s"
 AC_SUBST([INSTALL_STRIP_PROGRAM])])
 
-# Copyright (C) 2006-2013 Free Software Foundation, Inc.
+# Copyright (C) 2006-2014 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
@@ -1319,7 +1322,7 @@
 
 # Check how to create a tarball.                            -*- Autoconf -*-
 
-# Copyright (C) 2004-2013 Free Software Foundation, Inc.
+# Copyright (C) 2004-2014 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
@@ -1469,7 +1472,6 @@
 m4_include([common/m4/gst-platform.m4])
 m4_include([common/m4/gst-plugin-docs.m4])
 m4_include([common/m4/gst-plugindir.m4])
-m4_include([common/m4/gst-x11.m4])
 m4_include([common/m4/gst.m4])
 m4_include([common/m4/gtk-doc.m4])
 m4_include([common/m4/introspection.m4])
diff --git a/autogen.sh b/autogen.sh
index a02e711..430ff0d 100755
--- a/autogen.sh
+++ b/autogen.sh
@@ -13,7 +13,6 @@
 olddir=`pwd`
 cd "$srcdir"
 
-DIE=0
 package=gst-plugins-base
 srcfile=gst-plugins-base.doap
 
@@ -56,24 +55,25 @@
 autogen_options $@
 
 printf "+ check for build tools"
-if test ! -z "$NOCHECK"; then echo ": skipped version checks"; else  echo; fi
-version_check "autoconf" "$AUTOCONF autoconf autoconf270 autoconf269 autoconf268 " \
-              "ftp://ftp.gnu.org/pub/gnu/autoconf/" 2 68 || DIE=1
-version_check "automake" "$AUTOMAKE automake automake-1.11" \
-              "ftp://ftp.gnu.org/pub/gnu/automake/" 1 11 || DIE=1
-version_check "autopoint" "autopoint" \
-              "ftp://ftp.gnu.org/pub/gnu/gettext/" 0 17 || DIE=1
-version_check "libtoolize" "$LIBTOOLIZE libtoolize glibtoolize" \
-              "ftp://ftp.gnu.org/pub/gnu/libtool/" 2 2 6 || DIE=1
-version_check "pkg-config" "" \
-              "http://www.freedesktop.org/software/pkgconfig" 0 8 0 || DIE=1
+if test -z "$NOCHECK"; then
+  echo
 
-die_check $DIE
+  printf "  checking for autoreconf ... "
+  echo
+  which "autoreconf" 2>/dev/null || {
+    echo "not found! Please install the autoconf package."
+    exit 1
+  }
 
-aclocal_check || DIE=1
-autoheader_check || DIE=1
-
-die_check $DIE
+  printf "  checking for pkg-config ... "
+  echo
+  which "pkg-config" 2>/dev/null || {
+    echo "not found! Please install pkg-config."
+    exit 1
+  }
+else
+  echo ": skipped version checks"
+fi
 
 # if no arguments specified then this will be printed
 if test -z "$*" && test -z "$NOCONFIGURE"; then
@@ -87,23 +87,14 @@
 toplevel_check $srcfile
 
 # autopoint
-if test -d po ; then
-  tool_run "$autopoint" "--force"
+if test -d po && grep ^AM_GNU_GETTEXT_VERSION configure.ac >/dev/null ; then
+  tool_run "autopoint" "--force"
 fi
 
 # aclocal
 if test -f acinclude.m4; then rm acinclude.m4; fi
 
-tool_run "$libtoolize" "--copy --force"
-tool_run "$aclocal" "-I m4 -I common/m4 $ACLOCAL_FLAGS"
-tool_run "$autoheader"
-
-# touch the stamp-h.in build stamp so we don't re-run autoheader in maintainer mode
-echo timestamp > stamp-h.in 2> /dev/null
-
-tool_run "$autoconf"
-debug "automake: $automake"
-tool_run "$automake" "--add-missing --copy"
+autoreconf --force --install || exit 1
 
 test -n "$NOCONFIGURE" && {
   echo "+ skipping configure stage for package $package, as requested."
diff --git a/common/Makefile.am b/common/Makefile.am
index 25966fc..1eac7d8 100644
--- a/common/Makefile.am
+++ b/common/Makefile.am
@@ -8,7 +8,7 @@
 	parallel-subdirs.mak \
 	gst-autogen.sh \
 	check-exports \
-	c-to-xml.py mangle-tmpl.py scangobj-merge.py \
+	c-to-xml.py mangle-db.py scangobj-merge.py \
 	gtk-doc-plugins.mak \
 	plugins.xsl gstdoc-scangobj \
 	gst.supp check.mak \
diff --git a/common/Makefile.in b/common/Makefile.in
index 1c01776..ea2b695 100644
--- a/common/Makefile.in
+++ b/common/Makefile.in
@@ -1,7 +1,7 @@
-# Makefile.in generated by automake 1.14.1 from Makefile.am.
+# Makefile.in generated by automake 1.15 from Makefile.am.
 # @configure_input@
 
-# Copyright (C) 1994-2013 Free Software Foundation, Inc.
+# 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,
@@ -14,7 +14,17 @@
 
 @SET_MAKE@
 VPATH = @srcdir@
-am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)'
+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 \
       ?) ;; \
@@ -79,8 +89,6 @@
 host_triplet = @host@
 target_triplet = @target@
 subdir = common
-DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am ChangeLog \
-	README
 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 \
@@ -101,7 +109,6 @@
 	$(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-x11.m4 \
 	$(top_srcdir)/common/m4/gst.m4 \
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
@@ -118,6 +125,7 @@
 	$(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
 mkinstalldirs = $(install_sh) -d
 CONFIG_HEADER = $(top_builddir)/config.h
 CONFIG_CLEAN_FILES =
@@ -177,6 +185,7 @@
 ETAGS = etags
 CTAGS = ctags
 DIST_SUBDIRS = $(SUBDIRS)
+am__DIST_COMMON = $(srcdir)/Makefile.in ChangeLog README
 DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
 am__relativize = \
   dir0=`pwd`; \
@@ -262,6 +271,8 @@
 GIO_CFLAGS = @GIO_CFLAGS@
 GIO_LDFLAGS = @GIO_LDFLAGS@
 GIO_LIBS = @GIO_LIBS@
+GIO_UNIX_2_0_CFLAGS = @GIO_UNIX_2_0_CFLAGS@
+GIO_UNIX_2_0_LIBS = @GIO_UNIX_2_0_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
@@ -291,6 +302,8 @@
 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_OPTION_CFLAGS = @GST_OPTION_CFLAGS@
 GST_OPTION_CXXFLAGS = @GST_OPTION_CXXFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
@@ -318,7 +331,6 @@
 GTK_X11_CFLAGS = @GTK_X11_CFLAGS@
 GTK_X11_LIBS = @GTK_X11_LIBS@
 HAVE_CDPARANOIA = @HAVE_CDPARANOIA@
-HAVE_X = @HAVE_X@
 HAVE_XSHM = @HAVE_XSHM@
 HAVE_ZLIB = @HAVE_ZLIB@
 HTML_DIR = @HTML_DIR@
@@ -333,6 +345,7 @@
 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@
@@ -422,13 +435,12 @@
 XGETTEXT = @XGETTEXT@
 XGETTEXT_015 = @XGETTEXT_015@
 XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
-XMKMF = @XMKMF@
+XSHM_CFLAGS = @XSHM_CFLAGS@
 XSHM_LIBS = @XSHM_LIBS@
+XVIDEO_CFLAGS = @XVIDEO_CFLAGS@
 XVIDEO_LIBS = @XVIDEO_LIBS@
 X_CFLAGS = @X_CFLAGS@
-X_EXTRA_LIBS = @X_EXTRA_LIBS@
 X_LIBS = @X_LIBS@
-X_PRE_LIBS = @X_PRE_LIBS@
 ZLIB_CFLAGS = @ZLIB_CFLAGS@
 ZLIB_LIBS = @ZLIB_LIBS@
 abs_builddir = @abs_builddir@
@@ -481,6 +493,7 @@
 psdir = @psdir@
 pyexecdir = @pyexecdir@
 pythondir = @pythondir@
+runstatedir = @runstatedir@
 sbindir = @sbindir@
 sharedstatedir = @sharedstatedir@
 srcdir = @srcdir@
@@ -502,7 +515,7 @@
 	parallel-subdirs.mak \
 	gst-autogen.sh \
 	check-exports \
-	c-to-xml.py mangle-tmpl.py scangobj-merge.py \
+	c-to-xml.py mangle-db.py scangobj-merge.py \
 	gtk-doc-plugins.mak \
 	plugins.xsl gstdoc-scangobj \
 	gst.supp check.mak \
@@ -530,7 +543,6 @@
 	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu common/Makefile'; \
 	$(am__cd) $(top_srcdir) && \
 	  $(AUTOMAKE) --gnu common/Makefile
-.PRECIOUS: Makefile
 Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
 	@case '$?' in \
 	  *config.status*) \
@@ -825,6 +837,8 @@
 	mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \
 	ps ps-am tags tags-am uninstall uninstall-am
 
+.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.
diff --git a/common/check.mak b/common/check.mak
index 611546a..8a90b5d 100644
--- a/common/check.mak
+++ b/common/check.mak
@@ -16,37 +16,38 @@
 # run any given test by running make test.check
 # if the test fails, run it again at at least debug level 2
 %.check: %
-	@$(TESTS_ENVIRONMENT)					\
+	@$(AM_TESTS_ENVIRONMENT)					\
 	CK_DEFAULT_TIMEOUT=20					\
 	$* ||							\
-	$(TESTS_ENVIRONMENT)					\
+	$(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: %
-	@$(TESTS_ENVIRONMENT)					\
+	@$(AM_TESTS_ENVIRONMENT)					\
 	CK_DEFAULT_TIMEOUT=20					\
 	$*
 
 # run any given test in a loop
 %.torture: %
 	@for i in `seq 1 $(LOOPS)`; do				\
-	$(TESTS_ENVIRONMENT)					\
+	$(AM_TESTS_ENVIRONMENT)					\
 	CK_DEFAULT_TIMEOUT=20					\
 	$*; done
 
 # run any given test in an infinite loop
 %.forever: %
 	@while true; do						\
-	$(TESTS_ENVIRONMENT)					\
+	$(AM_TESTS_ENVIRONMENT)					\
 	CK_DEFAULT_TIMEOUT=20					\
 	$* || break; done
 
 # valgrind any given test by running make test.valgrind
 %.valgrind: %
-	@$(TESTS_ENVIRONMENT)					\
+	@valgrind_log=$(subst /,-,$*-valgrind.log);		\
+	$(AM_TESTS_ENVIRONMENT)					\
 	CK_DEFAULT_TIMEOUT=360					\
 	G_SLICE=always-malloc					\
 	$(LIBTOOL) --mode=execute				\
@@ -55,16 +56,16 @@
 	--tool=memcheck --leak-check=full --trace-children=yes	\
 	--show-possibly-lost=no                                 \
 	--leak-resolution=high --num-callers=20			\
-	./$* 2>&1 | tee valgrind.log
-	@if grep "==" valgrind.log > /dev/null 2>&1; then	\
-	    rm valgrind.log;					\
+	./$* 2>&1 | tee $$valgrind_log ;			\
+	if grep "==" $$valgrind_log > /dev/null 2>&1; then	\
+	    rm $$valgrind_log;					\
 	    exit 1;						\
-	fi
-	@rm valgrind.log
+	fi ;							\
+	rm $$valgrind_log
 
 # valgrind any given test and generate suppressions for it
 %.valgrind.gen-suppressions: %
-	@$(TESTS_ENVIRONMENT)					\
+	@$(AM_TESTS_ENVIRONMENT)					\
 	CK_DEFAULT_TIMEOUT=360					\
 	G_SLICE=always-malloc					\
 	$(LIBTOOL) --mode=execute				\
@@ -94,7 +95,7 @@
 
 # gdb any given test by running make test.gdb
 %.gdb: %
-	@$(TESTS_ENVIRONMENT)					\
+	@$(AM_TESTS_ENVIRONMENT)					\
 	CK_FORK=no						\
 	$(LIBTOOL) --mode=execute				\
 	gdb $*
@@ -150,19 +151,13 @@
 # valgrind all tests
 valgrind: $(TESTS)
 	@echo "Valgrinding tests ..."
-	@failed=0;							\
+	@failed=0; valgrind_targets="";					\
 	for t in $(filter-out $(VALGRIND_TESTS_DISABLE),$(TESTS)); do	\
-		$(MAKE) $$t.valgrind;					\
-		if test "$$?" -ne 0; then                               \
-			echo "Valgrind error for test $$t";		\
-			failed=`expr $$failed + 1`;			\
-			whicht="$$whicht $$t";				\
-		fi;							\
+	  valgrind_targets="$$valgrind_targets $$t.valgrind";		\
 	done;								\
-	if test "$$failed" -ne 0; then					\
-		echo "$$failed tests had leaks or errors under valgrind:";	\
-		echo "$$whicht";					\
-		false;							\
+	if ! $(MAKE) $$valgrind_targets ; then				\
+	  echo "Some tests had leaks or errors under valgrind";		\
+	  false;							\
 	fi
 
 # valgrind all tests until failure
@@ -210,11 +205,14 @@
 GST_INSPECT = $(GST_TOOLS_DIR)/gst-inspect-$(GST_API_VERSION)
 inspect:
 	@echo "Inspecting features ..."
-	@for e in `$(TESTS_ENVIRONMENT) $(GST_INSPECT) | head -n -2 	\
+	@for e in `$(AM_TESTS_ENVIRONMENT) $(GST_INSPECT) | head -n -2 	\
 	  | cut -d: -f2`;						\
 	  do echo Inspecting $$e;					\
 	     $(GST_INSPECT) $$e > /dev/null 2>&1; done
 
+# build all tests
+build-checks: $(TESTS)
+
 help:
 	@echo
 	@echo "make check                         -- run all checks"
@@ -237,6 +235,7 @@
 	@echo "make (dir)/(test).valgrind.gen-suppressions -- generate suppressions"
 	@echo "                                               and save to suppressions.log"
 	@echo "make inspect                       -- inspect all plugin features"
+	@echo "make build-checks                  -- build all checks (but don't run them)"
 	@echo
 	@echo
 	@echo "Additionally, you can use the GST_CHECKS environment variable to"
diff --git a/common/gst-autogen.sh b/common/gst-autogen.sh
index 78cab66..71049e6 100644
--- a/common/gst-autogen.sh
+++ b/common/gst-autogen.sh
@@ -20,216 +20,6 @@
   fi
 }
 
-version_get ()
-# based on the command's version output, set variables
-# _MAJOR, _MINOR, _MICRO, _VERSION, using the given prefix as variable prefix
-#
-# arg 1: command binary name
-# arg 2: (uppercased) variable name prefix
-{
-  COMMAND=$1
-  VARPREFIX=`echo $2 | tr .,- _`
-  local ${VARPREFIX}_VERSION
-
-  # strip everything that's not a digit, then use cut to get the first field
-  pkg_version=`$COMMAND --version|head -n 1|sed 's/^.*)[^0-9]*//'|cut -d' ' -f1`
-  debug "pkg_version $pkg_version"
-  # remove any non-digit characters from the version numbers to permit numeric
-  # comparison
-  pkg_major=`echo $pkg_version | cut -d. -f1 | sed s/[a-zA-Z\-].*//g`
-  pkg_minor=`echo $pkg_version | cut -d. -f2 | sed s/[a-zA-Z\-].*//g`
-  pkg_micro=`echo $pkg_version | cut -d. -f3 | sed s/[a-zA-Z\-].*//g`
-  test -z "$pkg_major" && pkg_major=0
-  test -z "$pkg_minor" && pkg_minor=0
-  test -z "$pkg_micro" && pkg_micro=0
-  debug "found major $pkg_major minor $pkg_minor micro $pkg_micro"
-  eval ${VARPREFIX}_MAJOR=$pkg_major
-  eval ${VARPREFIX}_MINOR=$pkg_minor
-  eval ${VARPREFIX}_MICRO=$pkg_micro
-  eval ${VARPREFIX}_VERSION=$pkg_version
-}
-
-version_compare ()
-# Checks whether the version of VARPREFIX is equal to or
-# newer than the requested version
-# arg1: VARPREFIX
-# arg2: MAJOR
-# arg3: MINOR
-# arg4: MICRO
-{
-  VARPREFIX=`echo $1 | tr .,- _`
-  MAJOR=$2
-  MINOR=$3
-  MICRO=$4
-
-  eval pkg_major=\$${VARPREFIX}_MAJOR;
-  eval pkg_minor=\$${VARPREFIX}_MINOR;
-  eval pkg_micro=\$${VARPREFIX}_MICRO;
-
-  #start checking the version
-  debug "version_compare: $VARPREFIX against $MAJOR.$MINOR.$MICRO"
-
-    # reset check
-    WRONG=
-
-    if [ ! "$pkg_major" -gt "$MAJOR" ]; then
-      debug "major: $pkg_major <= $MAJOR"
-      if [ "$pkg_major" -lt "$MAJOR" ]; then
-        debug "major: $pkg_major < $MAJOR"
-        WRONG=1
-      elif [ ! "$pkg_minor" -gt "$MINOR" ]; then
-        debug "minor: $pkg_minor <= $MINOR"
-        if [ "$pkg_minor" -lt "$MINOR" ]; then
-          debug "minor: $pkg_minor < $MINOR"
-          WRONG=1
-        elif [ "$pkg_micro" -lt "$MICRO" ]; then
-          debug "micro: $pkg_micro < $MICRO"
-	  WRONG=1
-        fi
-      fi
-    fi
-    if test ! -z "$WRONG"; then
-      debug "version_compare: $VARPREFIX older than $MAJOR.$MINOR.$MICRO"
-      return 1
-    fi
-    debug "version_compare: $VARPREFIX equal to/newer than $MAJOR.$MINOR.$MICRO"
-    return 0
-}
-
-
-version_check ()
-# check the version of a package
-# first argument : package name (executable)
-# second argument : optional path where to look for it instead
-# third argument : source download url
-# rest of arguments : major, minor, micro version
-# all consecutive ones : suggestions for binaries to use
-# (if not specified in second argument)
-{
-  PACKAGE=$1
-  PKG_PATH=$2
-  URL=$3
-  MAJOR=$4
-  MINOR=$5
-  MICRO=$6
-
-  # for backwards compatibility, we let PKG_PATH=PACKAGE when PKG_PATH null
-  if test -z "$PKG_PATH"; then PKG_PATH=$PACKAGE; fi
-  debug "major $MAJOR minor $MINOR micro $MICRO"
-  VERSION=$MAJOR
-  if test ! -z "$MINOR"; then VERSION=$VERSION.$MINOR; else MINOR=0; fi
-  if test ! -z "$MICRO"; then VERSION=$VERSION.$MICRO; else MICRO=0; fi
-
-  debug "major $MAJOR minor $MINOR micro $MICRO"
-
-  for SUGGESTION in $PKG_PATH; do
-    COMMAND="$SUGGESTION"
-
-    # don't check if asked not to
-    test -z "$NOCHECK" && {
-      printf "  checking for $COMMAND >= $VERSION ... "
-    } || {
-      # we set a var with the same name as the package, but stripped of
-      # unwanted chars
-      VAR=`echo $PACKAGE | sed 's/-//g'`
-      debug "setting $VAR"
-      eval $VAR="$COMMAND"
-      return 0
-    }
-
-    which $COMMAND > /dev/null 2>&1
-    if test $? -eq 1;
-    then 
-      debug "$COMMAND not found"
-      continue
-    fi
-
-    VARPREFIX=`echo $COMMAND | sed 's/-//g' | tr [:lower:] [:upper:]`
-    version_get $COMMAND $VARPREFIX
-
-    version_compare $VARPREFIX $MAJOR $MINOR $MICRO
-    if test $? -ne 0; then
-      echo "found $pkg_version, not ok !"
-      continue
-    else
-      echo "found $pkg_version, ok."
-      # we set a var with the same name as the package, but stripped of
-      # unwanted chars
-      VAR=`echo $PACKAGE | sed 's/-//g'`
-      debug "setting $VAR"
-      eval $VAR="$COMMAND"
-      return 0
-    fi
-  done
-
-  echo "$PACKAGE not found !"
-  echo "You must have $PACKAGE installed to compile $package."
-  echo "Download the appropriate package for your distribution,"
-  echo "or get the source tarball at $URL"
-  return 1;
-}
-
-aclocal_check ()
-{
-  # normally aclocal is part of automake
-  # so we expect it to be in the same place as automake
-  # so if a different automake is supplied, we need to adapt as well
-  # so how's about replacing automake with aclocal in the set var,
-  # and saving that in $aclocal ?
-  # note, this will fail if the actual automake isn't called automake*
-  # or if part of the path before it contains it
-  if [ -z "$automake" ]; then
-    echo "Error: no automake variable set !"
-    return 1
-  else
-    aclocal=`echo $automake | sed s/automake/aclocal/`
-    debug "aclocal: $aclocal"
-    if [ "$aclocal" != "aclocal" ];
-    then
-      CONFIGURE_DEF_OPT="$CONFIGURE_DEF_OPT --with-aclocal=$aclocal"
-    fi
-    if [ ! -x `which $aclocal` ]; then
-      echo "Error: cannot execute $aclocal !"
-      return 1
-    fi
-  fi
-}
-
-autoheader_check ()
-{
-  # same here - autoheader is part of autoconf
-  # use the same voodoo
-  if [ -z "$autoconf" ]; then
-    echo "Error: no autoconf variable set !"
-    return 1
-  else
-    autoheader=`echo $autoconf | sed s/autoconf/autoheader/`
-    debug "autoheader: $autoheader"
-    if [ "$autoheader" != "autoheader" ];
-    then
-      CONFIGURE_DEF_OPT="$CONFIGURE_DEF_OPT --with-autoheader=$autoheader"
-    fi
-    if [ ! -x `which $autoheader` ]; then
-      echo "Error: cannot execute $autoheader !"
-      return 1
-    fi
-  fi
-
-}
-
-die_check ()
-{
-  # call with $DIE
-  # if set to 1, we need to print something helpful then die
-  DIE=$1
-  if test "x$DIE" = "x1";
-  then
-    echo
-    echo "- Please get the right tools before proceeding."
-    echo "- Alternatively, if you're sure we're wrong, run with --nocheck."
-    exit 1
-  fi
-}
 
 autogen_options ()
 {
diff --git a/common/gst-indent b/common/gst-indent
index 732b2ba..b5e808f 100755
--- a/common/gst-indent
+++ b/common/gst-indent
@@ -9,13 +9,19 @@
 
 version=`gnuindent --version 2>/dev/null`
 if test "x$version" = "x"; then
-  version=`indent --version 2>/dev/null`
+  version=`gindent --version 2>/dev/null`
   if test "x$version" = "x"; then
-    echo "GStreamer git pre-commit hook:"
-    echo "Did not find GNU indent, please install it before continuing."
-    exit 1
+    version=`indent --version 2>/dev/null`
+    if test "x$version" = "x"; then
+      echo "GStreamer git pre-commit hook:"
+      echo "Did not find GNU indent, please install it before continuing."
+      exit 1
+    else
+      INDENT=indent
+    fi
+  else
+    INDENT=gindent
   fi
-  INDENT=indent
 else
   INDENT=gnuindent
 fi
diff --git a/common/gst.supp b/common/gst.supp
index 2c60392..81f98a9 100644
--- a/common/gst.supp
+++ b/common/gst.supp
@@ -3965,3 +3965,58 @@
    ...
    fun:g_quark_from*_string
 }
+
+{
+  <timer_create suppressions for earlier valgrind versions that complain>
+  Memcheck:Param
+  timer_create(evp)
+  fun:timer_create@@GLIBC_2.3.3
+}
+
+{
+   closures aren't valgrind friendly (bgo#739850)
+   Memcheck:Leak
+   match-leak-kinds: possible
+   fun:calloc
+   ...
+   fun:g_cclosure_new
+}
+
+{
+   closures aren't valgrind friendly (bgo#739850)
+   Memcheck:Leak
+   match-leak-kinds: possible
+   fun:malloc
+   ...
+   fun:g_closure_add_invalidate_notifier
+}
+
+{
+   closures aren't valgrind friendly (bgo#739850)
+   Memcheck:Leak
+   match-leak-kinds: possible
+   fun:calloc
+   ...
+   fun:g_closure_new_simple
+}
+
+{
+   glib/giomodules2 (from libsoup.supp)
+   Memcheck:Leak
+   ...
+   fun:_g_io_module_get_default
+}
+
+{
+   <valgrind bug when trying to parse "infinity" from "interleaved">
+   Memcheck:Addr8
+   fun:__GI___strncasecmp_l
+   fun:____strtod_l_internal
+   fun:gst_value_deserialize_double
+}
+
+{
+   <glibc overreads/conditionals>
+   Memcheck:Addr8
+   fun:do_lookup_x
+}
diff --git a/common/gstdoc-scangobj b/common/gstdoc-scangobj
index 4ad9786..906857c 100755
--- a/common/gstdoc-scangobj
+++ b/common/gstdoc-scangobj
@@ -110,6 +110,8 @@
 my $new_prerequisites_filename = "$OUTPUT_DIR/$MODULE.prerequisites.new";
 my $old_args_filename = "$OUTPUT_DIR/$MODULE.args";
 my $new_args_filename = "$OUTPUT_DIR/$MODULE.args.new";
+my $old_sections_filename = "$OUTPUT_DIR/$MODULE-sections";
+my $new_sections_filename = "$OUTPUT_DIR/$MODULE-sections.new";
 
 my $debug_log="g_message";
 if (!defined($VERBOSE) or $VERBOSE eq "0") {
@@ -437,32 +439,30 @@
 const gchar *interfaces_filename = "$new_interfaces_filename";
 const gchar *prerequisites_filename = "$new_prerequisites_filename";
 const gchar *args_filename = "$new_args_filename";
+const gchar *sections_filename = "$new_sections_filename";
 
 
 static void output_signals (void);
-static void output_object_signals (FILE *fp,
-				   GType object_type);
-static void output_object_signal (FILE *fp,
-				  const gchar *object_class_name,
+static void output_object_signals (FILE *fp, GType object_type);
+static void output_object_signal (FILE *fp, const gchar *object_class_name,
 				  guint signal_id);
-static const gchar * get_type_name (GType type,
-			            gboolean * is_pointer);
+static const gchar * get_type_name (GType type, gboolean * is_pointer);
 static void output_object_hierarchy (void);
-static void output_hierarchy (FILE *fp,
-			      GType type,
-			      guint level);
+static void output_hierarchy (FILE *fp, GType type, guint level);
 
 static void output_object_interfaces (void);
-static void output_interfaces (FILE *fp,
-			       GType type);
+static void output_interfaces (FILE *fp, GType type);
 
 static void output_interface_prerequisites (void);
-static void output_prerequisites (FILE *fp,
-			          GType type);
+static void output_prerequisites (FILE *fp, GType type);
 
 static void output_args (void);
 static void output_object_args (FILE *fp, GType object_type);
 
+static void output_sections (void);
+static void output_object_section (FILE *fp, GType object_type);
+
+
 int
 main (G_GNUC_UNUSED int argc, G_GNUC_UNUSED char *argv[])
 {
@@ -475,6 +475,8 @@
   output_object_interfaces ();
   output_interface_prerequisites ();
   output_args ();
+  
+  output_sections ();
 
   return 0;
 }
@@ -1570,6 +1572,139 @@
     break;
   }
 }
+
+static void
+output_sections (void)
+{
+  FILE *fp;
+  gint i;
+
+  fp = fopen (sections_filename, "w");
+  if (fp == NULL)
+    {
+      g_warning ("Couldn't open output file: %s : %s", sections_filename, g_strerror(errno));
+      return;
+    }
+
+  for (i = 0; object_types[i]; i++) { }
+  qsort (object_types, i, sizeof (GType), compare_types);
+    
+  for (i = 0; object_types[i]; i++) {
+    output_object_section (fp, object_types[i]);
+  }
+
+  fclose (fp);
+}
+
+static gboolean
+find_by_type (GstPluginFeature *f, gpointer data) {
+  return (GST_IS_ELEMENT_FACTORY(f) && 
+      ((GType)data == gst_element_factory_get_element_type (GST_ELEMENT_FACTORY(f))));
+}
+
+static void
+output_object_section (FILE *fp, GType object_type)
+{
+  /* e.g. GstFakeSink */
+  const gchar *tn = g_type_name (object_type);
+  const gchar *cct = &tn[3]; /* cut 'Gst' */
+  gchar *title, *lct, *uct;
+  gint i, j, l = strlen(cct);
+  gpointer class;
+  GParamSpec **properties;
+  guint n_properties;
+  const gchar *ptn;
+  gchar *ptns;
+  GString *strbuf = g_string_new (NULL);
+  GList *fl;
+  GstPluginFeature *f = NULL;
+  gboolean need_unserscore = TRUE, have_abbrev = FALSE;
+  
+  fl = gst_registry_feature_filter (gst_registry_get(), find_by_type, TRUE, 
+    (gpointer)object_type);
+  if (fl) {
+    f = fl->data;
+    g_list_free(fl);
+  }
+  if (f) {
+    title = g_strdup (gst_plugin_feature_get_name(f));
+    g_object_unref (f);
+  } else {
+    title = g_ascii_strdown(cct, -1);
+  }
+  
+  /* turn CamelCase into '_' separated all lower, resulting string is atmost
+   * twice as long, special casing for abbevs like GstTCPClientSink */
+  lct = g_malloc(2*l);
+  for (i = 0, j = 0; i < l; i++) {
+    if (g_ascii_isupper (cct[i])) {
+      if (need_unserscore) {
+        if (i > 0) {
+          lct[j++] = '_';
+        }
+      } else {
+        have_abbrev = TRUE;
+      }
+      lct[j++] = g_ascii_tolower(cct[i]);
+      need_unserscore = FALSE;
+    } else {
+      if (have_abbrev) {
+        lct[j] = lct[j-1];
+        lct[j-1] = '_';
+        j++;
+        have_abbrev = FALSE;
+      }
+      lct[j++] = cct[i];
+      need_unserscore = TRUE;
+    }
+  }
+  lct[j] = '\\0';
+  uct = g_ascii_strup(lct, -1);
+  
+  /* scan properties and find local enums */
+  class = g_type_class_peek (object_type);
+  properties = g_object_class_list_properties (class, &n_properties);
+  qsort (properties, n_properties, sizeof (GParamSpec *), compare_param_specs);
+  for (i = 0; i < n_properties; i++) {
+    GParamSpec *spec = properties[i];
+    if (!(G_IS_PARAM_SPEC_ENUM (spec) || G_IS_PARAM_SPEC_FLAGS (spec))) {
+      continue;
+    }
+    ptn = g_type_name(spec->value_type);
+    // does it start with tn?
+    if (strncmp(tn, ptn, strlen(tn))) {
+      continue;
+    }
+    g_string_append_c(strbuf, '\\n');
+    g_string_append(strbuf, ptn);
+  }
+  ptns = g_string_free (strbuf, FALSE);
+
+  /* later we can remove the SUBSECTION Standart/Private, since we only need to
+   * highlight what is public API */
+  fprintf (fp, "<SECTION>\\n"
+               "<FILE>element-%s</FILE>\\n"
+               "<TITLE>%s</TITLE>\\n"
+               "Gst%s%s\\n"
+               "<SUBSECTION Standard>\\n"
+               "Gst%sClass\\n"
+               "GST_%s\\n"
+               "GST_%s_CAST\\n"
+               "GST_IS_%s\\n"
+               "GST_%s_CLASS\\n"
+               "GST_IS_%s_CLASS\\n"
+               "GST_TYPE_%s\\n"
+               "<SUBSECTION Private>\\n"
+               "gst_%s_get_type\\n"
+               "</SECTION>\\n\\n",
+               title, title, cct, ptns, 
+               cct, uct, uct, uct, uct, uct, uct, lct);
+  g_free (title);
+  g_free (lct);
+  g_free (uct);
+  g_free (ptns);
+}
+
 EOT
 
 close OUTPUT;
@@ -1614,4 +1749,4 @@
 #&UpdateFileIfChanged ($old_prerequisites_filename, $new_prerequisites_filename, 0);
 #&UpdateFileIfChanged ($old_signals_filename, $new_signals_filename, 0);
 #&UpdateFileIfChanged ($old_args_filename, $new_args_filename, 0);
-
+#&UpdateFileIfChanged ($old_sections_filename, $new_sections_filename, 0);
diff --git a/common/gtk-doc-plugins.mak b/common/gtk-doc-plugins.mak
index f19e7d7..997a672 100644
--- a/common/gtk-doc-plugins.mak
+++ b/common/gtk-doc-plugins.mak
@@ -16,6 +16,16 @@
 update: scanobj-update
 	$(MAKE) check-outdated-docs
 
+if GTK_DOC_USE_LIBTOOL
+GTKDOC_CC = $(LIBTOOL) --tag=CC --mode=compile $(CC) $(INCLUDES) $(GTKDOC_DEPS_CFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+GTKDOC_LD = $(LIBTOOL) --tag=CC --mode=link $(CC) $(GTKDOC_DEPS_LIBS) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS)
+GTKDOC_RUN = $(LIBTOOL) --mode=execute
+else
+GTKDOC_CC = $(CC) $(INCLUDES) $(GTKDOC_DEPS_CFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+GTKDOC_LD = $(CC) $(GTKDOC_DEPS_LIBS) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS)
+GTKDOC_RUN =
+endif
+
 # We set GPATH here; this gives us semantics for GNU make
 # which are more like other make's VPATH, when it comes to
 # whether a source that is a target of one rule is then
@@ -44,11 +54,9 @@
 # maintainers and result is commited to git
 DOC_STAMPS =				\
 	scan-build.stamp		\
-	tmpl-build.stamp		\
 	sgml-build.stamp		\
 	html-build.stamp		\
 	scan.stamp			\
-	tmpl.stamp			\
 	sgml.stamp			\
 	html.stamp
 
@@ -122,7 +130,7 @@
 	    scanobj_options="--verbose"; \
 	fi; \
 	$(INSPECT_ENVIRONMENT) 					\
-	CC="$(GTKDOC_CC)" LD="$(GTKDOC_LD)"				\
+	CC="$(GTKDOC_CC)" LD="$(GTKDOC_LD)" RUN="$(GTKDOC_RUN)"	\
 	CFLAGS="$(GTKDOC_CFLAGS) $(CFLAGS) $(WARNING_CFLAGS)"	\
 	LDFLAGS="$(GTKDOC_LIBS) $(LDFLAGS)"				\
 	$(GST_DOC_SCANOBJ) $$scanobj_options --type-init-func="gst_init(NULL,NULL)"	\
@@ -161,29 +169,9 @@
 	    --ignore-headers="$(IGNORE_HFILES)";			\
 	touch scan-build.stamp
 
-#### update templates; done on every build ####
-
-# in a non-srcdir build, we need to copy files from the previous step
-# and the files from previous runs of this step
-tmpl-build.stamp: $(DOC_MODULE)-decl.txt $(SCANOBJ_FILES) $(DOC_MODULE)-sections.txt $(DOC_OVERRIDES)
-	@echo '  DOC   Rebuilding template files'
-	@if test x"$(srcdir)" != x. ; then				\
-	    for f in $(SCANOBJ_FILES) $(SCAN_FILES);			\
-	    do								\
-	        if test -e $(srcdir)/$$f; then cp -u $(srcdir)/$$f . ; fi;	\
-	    done;							\
-	fi
-	@gtkdoc-mktmpl --module=$(DOC_MODULE)
-	@$(PYTHON) \
-		$(top_srcdir)/common/mangle-tmpl.py $(srcdir)/$(INSPECT_DIR) tmpl
-	@touch tmpl-build.stamp
-
-tmpl.stamp: tmpl-build.stamp
-	@true
-
 #### xml ####
 
-sgml-build.stamp: tmpl.stamp scan-build.stamp $(CFILE_GLOB) $(top_srcdir)/common/plugins.xsl $(expand_content_files)
+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 \
@@ -199,6 +187,7 @@
 		--output-format=xml \
 		--ignore-files="$(IGNORE_HFILES) $(IGNORE_CFILES)" \
 		$(MKDB_OPTIONS)
+	@$(PYTHON) $(top_srcdir)/common/mangle-db.py xml
 	@cp ../version.entities xml
 	@touch sgml-build.stamp
 
diff --git a/common/gtk-doc.mak b/common/gtk-doc.mak
index 9d76889..f8edf40 100644
--- a/common/gtk-doc.mak
+++ b/common/gtk-doc.mak
@@ -3,7 +3,16 @@
 ###########################################################################
 # thomas: except of course that we did
 
-# thomas: copied from glib-2
+if GTK_DOC_USE_LIBTOOL
+GTKDOC_CC = $(LIBTOOL) --tag=CC --mode=compile $(CC) $(INCLUDES) $(GTKDOC_DEPS_CFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+GTKDOC_LD = $(LIBTOOL) --tag=CC --mode=link $(CC) $(GTKDOC_DEPS_LIBS) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS)
+GTKDOC_RUN = $(LIBTOOL) --mode=execute
+else
+GTKDOC_CC = $(CC) $(INCLUDES) $(GTKDOC_DEPS_CFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+GTKDOC_LD = $(CC) $(GTKDOC_DEPS_LIBS) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS)
+GTKDOC_RUN =
+endif
+
 # We set GPATH here; this gives us semantics for GNU make
 # which are more like other make's VPATH, when it comes to
 # whether a source that is a target of one rule is then
@@ -81,15 +90,22 @@
 		--ignore-headers="$(IGNORE_HFILES)"
 	@if grep -l '^..*$$' $(DOC_MODULE).types > /dev/null; then	\
 	    echo "  DOC   Introspecting gobjects"; \
+	    scanobj_options=""; \
+	    gtkdoc-scangobj 2>&1 --help | grep  >/dev/null "\-\-verbose"; \
+	    if test "$$?" = "0"; then \
+	        if test "x$(V)" = "x1"; then \
+	            scanobj_options="--verbose"; \
+	        fi; \
+	    fi; \
 	    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)"				\
+	    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)"	\
-	        --module=$(DOC_MODULE) ;				\
+	        $$scanobj_options --module=$(DOC_MODULE) ;				\
 	else								\
 	    for i in $(SCANOBJ_FILES) ; do				\
 	       test -f $$i || touch $$i ;				\
diff --git a/common/m4/Makefile.am b/common/m4/Makefile.am
index 3d387ee..cdcec8c 100644
--- a/common/m4/Makefile.am
+++ b/common/m4/Makefile.am
@@ -11,6 +11,7 @@
 	as-python.m4 \
 	as-version.m4 \
 	ax_create_stdint_h.m4 \
+	ax_pthread.m4 \
 	glib-gettext.m4 \
 	gst-arch.m4 \
 	gst-args.m4 \
diff --git a/common/m4/Makefile.in b/common/m4/Makefile.in
index d372908..a478121 100644
--- a/common/m4/Makefile.in
+++ b/common/m4/Makefile.in
@@ -1,7 +1,7 @@
-# Makefile.in generated by automake 1.14.1 from Makefile.am.
+# Makefile.in generated by automake 1.15 from Makefile.am.
 # @configure_input@
 
-# Copyright (C) 1994-2013 Free Software Foundation, Inc.
+# 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,
@@ -14,7 +14,17 @@
 
 @SET_MAKE@
 VPATH = @srcdir@
-am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)'
+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 \
       ?) ;; \
@@ -79,7 +89,6 @@
 host_triplet = @host@
 target_triplet = @target@
 subdir = common/m4
-DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am README
 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 \
@@ -100,7 +109,6 @@
 	$(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-x11.m4 \
 	$(top_srcdir)/common/m4/gst.m4 \
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
@@ -117,6 +125,7 @@
 	$(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
 mkinstalldirs = $(install_sh) -d
 CONFIG_HEADER = $(top_builddir)/config.h
 CONFIG_CLEAN_FILES =
@@ -141,6 +150,7 @@
     *) (install-info --version) >/dev/null 2>&1;; \
   esac
 am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+am__DIST_COMMON = $(srcdir)/Makefile.in README
 DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
 ACLOCAL = @ACLOCAL@
 ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@
@@ -201,6 +211,8 @@
 GIO_CFLAGS = @GIO_CFLAGS@
 GIO_LDFLAGS = @GIO_LDFLAGS@
 GIO_LIBS = @GIO_LIBS@
+GIO_UNIX_2_0_CFLAGS = @GIO_UNIX_2_0_CFLAGS@
+GIO_UNIX_2_0_LIBS = @GIO_UNIX_2_0_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
@@ -230,6 +242,8 @@
 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_OPTION_CFLAGS = @GST_OPTION_CFLAGS@
 GST_OPTION_CXXFLAGS = @GST_OPTION_CXXFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
@@ -257,7 +271,6 @@
 GTK_X11_CFLAGS = @GTK_X11_CFLAGS@
 GTK_X11_LIBS = @GTK_X11_LIBS@
 HAVE_CDPARANOIA = @HAVE_CDPARANOIA@
-HAVE_X = @HAVE_X@
 HAVE_XSHM = @HAVE_XSHM@
 HAVE_ZLIB = @HAVE_ZLIB@
 HTML_DIR = @HTML_DIR@
@@ -272,6 +285,7 @@
 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@
@@ -361,13 +375,12 @@
 XGETTEXT = @XGETTEXT@
 XGETTEXT_015 = @XGETTEXT_015@
 XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
-XMKMF = @XMKMF@
+XSHM_CFLAGS = @XSHM_CFLAGS@
 XSHM_LIBS = @XSHM_LIBS@
+XVIDEO_CFLAGS = @XVIDEO_CFLAGS@
 XVIDEO_LIBS = @XVIDEO_LIBS@
 X_CFLAGS = @X_CFLAGS@
-X_EXTRA_LIBS = @X_EXTRA_LIBS@
 X_LIBS = @X_LIBS@
-X_PRE_LIBS = @X_PRE_LIBS@
 ZLIB_CFLAGS = @ZLIB_CFLAGS@
 ZLIB_LIBS = @ZLIB_LIBS@
 abs_builddir = @abs_builddir@
@@ -420,6 +433,7 @@
 psdir = @psdir@
 pyexecdir = @pyexecdir@
 pythondir = @pythondir@
+runstatedir = @runstatedir@
 sbindir = @sbindir@
 sharedstatedir = @sharedstatedir@
 srcdir = @srcdir@
@@ -445,6 +459,7 @@
 	as-python.m4 \
 	as-version.m4 \
 	ax_create_stdint_h.m4 \
+	ax_pthread.m4 \
 	glib-gettext.m4 \
 	gst-arch.m4 \
 	gst-args.m4 \
@@ -488,7 +503,6 @@
 	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu common/m4/Makefile'; \
 	$(am__cd) $(top_srcdir) && \
 	  $(AUTOMAKE) --gnu common/m4/Makefile
-.PRECIOUS: Makefile
 Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
 	@case '$?' in \
 	  *config.status*) \
@@ -663,6 +677,8 @@
 	mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
 	tags-am uninstall uninstall-am
 
+.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.
diff --git a/common/m4/ax_pthread.m4 b/common/m4/ax_pthread.m4
new file mode 100644
index 0000000..d383ad5
--- /dev/null
+++ b/common/m4/ax_pthread.m4
@@ -0,0 +1,332 @@
+# ===========================================================================
+#        http://www.gnu.org/software/autoconf-archive/ax_pthread.html
+# ===========================================================================
+#
+# SYNOPSIS
+#
+#   AX_PTHREAD([ACTION-IF-FOUND[, ACTION-IF-NOT-FOUND]])
+#
+# DESCRIPTION
+#
+#   This macro figures out how to build C programs using POSIX threads. It
+#   sets the PTHREAD_LIBS output variable to the threads library and linker
+#   flags, and the PTHREAD_CFLAGS output variable to any special C compiler
+#   flags that are needed. (The user can also force certain compiler
+#   flags/libs to be tested by setting these environment variables.)
+#
+#   Also sets PTHREAD_CC to any special C compiler that is needed for
+#   multi-threaded programs (defaults to the value of CC otherwise). (This
+#   is necessary on AIX to use the special cc_r compiler alias.)
+#
+#   NOTE: You are assumed to not only compile your program with these flags,
+#   but also link it with them as well. e.g. you should link with
+#   $PTHREAD_CC $CFLAGS $PTHREAD_CFLAGS $LDFLAGS ... $PTHREAD_LIBS $LIBS
+#
+#   If you are only building threads programs, you may wish to use these
+#   variables in your default LIBS, CFLAGS, and CC:
+#
+#     LIBS="$PTHREAD_LIBS $LIBS"
+#     CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
+#     CC="$PTHREAD_CC"
+#
+#   In addition, if the PTHREAD_CREATE_JOINABLE thread-attribute constant
+#   has a nonstandard name, defines PTHREAD_CREATE_JOINABLE to that name
+#   (e.g. PTHREAD_CREATE_UNDETACHED on AIX).
+#
+#   Also HAVE_PTHREAD_PRIO_INHERIT is defined if pthread is found and the
+#   PTHREAD_PRIO_INHERIT symbol is defined when compiling with
+#   PTHREAD_CFLAGS.
+#
+#   ACTION-IF-FOUND is a list of shell commands to run if a threads library
+#   is found, and ACTION-IF-NOT-FOUND is a list of commands to run it if it
+#   is not found. If ACTION-IF-FOUND is not specified, the default action
+#   will define HAVE_PTHREAD.
+#
+#   Please let the authors know if this macro fails on any platform, or if
+#   you have any other suggestions or comments. This macro was based on work
+#   by SGJ on autoconf scripts for FFTW (http://www.fftw.org/) (with help
+#   from M. Frigo), as well as ac_pthread and hb_pthread macros posted by
+#   Alejandro Forero Cuervo to the autoconf macro repository. We are also
+#   grateful for the helpful feedback of numerous users.
+#
+#   Updated for Autoconf 2.68 by Daniel Richard G.
+#
+# LICENSE
+#
+#   Copyright (c) 2008 Steven G. Johnson <stevenj@alum.mit.edu>
+#   Copyright (c) 2011 Daniel Richard G. <skunk@iSKUNK.ORG>
+#
+#   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/>.
+#
+#   As a special exception, the respective Autoconf Macro's copyright owner
+#   gives unlimited permission to copy, distribute and modify the configure
+#   scripts that are the output of Autoconf when processing the Macro. You
+#   need not follow the terms of the GNU General Public License when using
+#   or distributing such scripts, even though portions of the text of the
+#   Macro appear in them. The GNU General Public License (GPL) does govern
+#   all other use of the material that constitutes the Autoconf Macro.
+#
+#   This special exception to the GPL applies to versions of the Autoconf
+#   Macro released by the Autoconf Archive. When you make and distribute a
+#   modified version of the Autoconf Macro, you may extend this special
+#   exception to the GPL to apply to your modified version as well.
+
+#serial 21
+
+AU_ALIAS([ACX_PTHREAD], [AX_PTHREAD])
+AC_DEFUN([AX_PTHREAD], [
+AC_REQUIRE([AC_CANONICAL_HOST])
+AC_LANG_PUSH([C])
+ax_pthread_ok=no
+
+# We used to check for pthread.h first, but this fails if pthread.h
+# requires special compiler flags (e.g. on True64 or Sequent).
+# It gets checked for in the link test anyway.
+
+# First of all, check if the user has set any of the PTHREAD_LIBS,
+# etcetera environment variables, and if threads linking works using
+# them:
+if test x"$PTHREAD_LIBS$PTHREAD_CFLAGS" != x; then
+        save_CFLAGS="$CFLAGS"
+        CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
+        save_LIBS="$LIBS"
+        LIBS="$PTHREAD_LIBS $LIBS"
+        AC_MSG_CHECKING([for pthread_join in LIBS=$PTHREAD_LIBS with CFLAGS=$PTHREAD_CFLAGS])
+        AC_TRY_LINK_FUNC([pthread_join], [ax_pthread_ok=yes])
+        AC_MSG_RESULT([$ax_pthread_ok])
+        if test x"$ax_pthread_ok" = xno; then
+                PTHREAD_LIBS=""
+                PTHREAD_CFLAGS=""
+        fi
+        LIBS="$save_LIBS"
+        CFLAGS="$save_CFLAGS"
+fi
+
+# We must check for the threads library under a number of different
+# names; the ordering is very important because some systems
+# (e.g. DEC) have both -lpthread and -lpthreads, where one of the
+# libraries is broken (non-POSIX).
+
+# Create a list of thread flags to try.  Items starting with a "-" are
+# C compiler flags, and other items are library names, except for "none"
+# which indicates that we try without any flags at all, and "pthread-config"
+# which is a program returning the flags for the Pth emulation library.
+
+ax_pthread_flags="pthreads none -Kthread -kthread lthread -pthread -pthreads -mthreads pthread --thread-safe -mt pthread-config"
+
+# The ordering *is* (sometimes) important.  Some notes on the
+# individual items follow:
+
+# pthreads: AIX (must check this before -lpthread)
+# none: in case threads are in libc; should be tried before -Kthread and
+#       other compiler flags to prevent continual compiler warnings
+# -Kthread: Sequent (threads in libc, but -Kthread needed for pthread.h)
+# -kthread: FreeBSD kernel threads (preferred to -pthread since SMP-able)
+# lthread: LinuxThreads port on FreeBSD (also preferred to -pthread)
+# -pthread: Linux/gcc (kernel threads), BSD/gcc (userland threads)
+# -pthreads: Solaris/gcc
+# -mthreads: Mingw32/gcc, Lynx/gcc
+# -mt: Sun Workshop C (may only link SunOS threads [-lthread], but it
+#      doesn't hurt to check since this sometimes defines pthreads too;
+#      also defines -D_REENTRANT)
+#      ... -mt is also the pthreads flag for HP/aCC
+# pthread: Linux, etcetera
+# --thread-safe: KAI C++
+# pthread-config: use pthread-config program (for GNU Pth library)
+
+case ${host_os} in
+        solaris*)
+
+        # On Solaris (at least, for some versions), libc contains stubbed
+        # (non-functional) versions of the pthreads routines, so link-based
+        # tests will erroneously succeed.  (We need to link with -pthreads/-mt/
+        # -lpthread.)  (The stubs are missing pthread_cleanup_push, or rather
+        # a function called by this macro, so we could check for that, but
+        # who knows whether they'll stub that too in a future libc.)  So,
+        # we'll just look for -pthreads and -lpthread first:
+
+        ax_pthread_flags="-pthreads pthread -mt -pthread $ax_pthread_flags"
+        ;;
+
+        darwin*)
+        ax_pthread_flags="-pthread $ax_pthread_flags"
+        ;;
+esac
+
+# Clang doesn't consider unrecognized options an error unless we specify
+# -Werror. We throw in some extra Clang-specific options to ensure that
+# this doesn't happen for GCC, which also accepts -Werror.
+
+AC_MSG_CHECKING([if compiler needs -Werror to reject unknown flags])
+save_CFLAGS="$CFLAGS"
+ax_pthread_extra_flags="-Werror"
+CFLAGS="$CFLAGS $ax_pthread_extra_flags -Wunknown-warning-option -Wsizeof-array-argument"
+AC_COMPILE_IFELSE([AC_LANG_PROGRAM([int foo(void);],[foo()])],
+                  [AC_MSG_RESULT([yes])],
+                  [ax_pthread_extra_flags=
+                   AC_MSG_RESULT([no])])
+CFLAGS="$save_CFLAGS"
+
+if test x"$ax_pthread_ok" = xno; then
+for flag in $ax_pthread_flags; do
+
+        case $flag in
+                none)
+                AC_MSG_CHECKING([whether pthreads work without any flags])
+                ;;
+
+                -*)
+                AC_MSG_CHECKING([whether pthreads work with $flag])
+                PTHREAD_CFLAGS="$flag"
+                ;;
+
+                pthread-config)
+                AC_CHECK_PROG([ax_pthread_config], [pthread-config], [yes], [no])
+                if test x"$ax_pthread_config" = xno; then continue; fi
+                PTHREAD_CFLAGS="`pthread-config --cflags`"
+                PTHREAD_LIBS="`pthread-config --ldflags` `pthread-config --libs`"
+                ;;
+
+                *)
+                AC_MSG_CHECKING([for the pthreads library -l$flag])
+                PTHREAD_LIBS="-l$flag"
+                ;;
+        esac
+
+        save_LIBS="$LIBS"
+        save_CFLAGS="$CFLAGS"
+        LIBS="$PTHREAD_LIBS $LIBS"
+        CFLAGS="$CFLAGS $PTHREAD_CFLAGS $ax_pthread_extra_flags"
+
+        # Check for various functions.  We must include pthread.h,
+        # since some functions may be macros.  (On the Sequent, we
+        # need a special flag -Kthread to make this header compile.)
+        # We check for pthread_join because it is in -lpthread on IRIX
+        # while pthread_create is in libc.  We check for pthread_attr_init
+        # due to DEC craziness with -lpthreads.  We check for
+        # pthread_cleanup_push because it is one of the few pthread
+        # functions on Solaris that doesn't have a non-functional libc stub.
+        # We try pthread_create on general principles.
+        AC_LINK_IFELSE([AC_LANG_PROGRAM([#include <pthread.h>
+                        static void routine(void *a) { a = 0; }
+                        static void *start_routine(void *a) { return a; }],
+                       [pthread_t th; pthread_attr_t attr;
+                        pthread_create(&th, 0, start_routine, 0);
+                        pthread_join(th, 0);
+                        pthread_attr_init(&attr);
+                        pthread_cleanup_push(routine, 0);
+                        pthread_cleanup_pop(0) /* ; */])],
+                [ax_pthread_ok=yes],
+                [])
+
+        LIBS="$save_LIBS"
+        CFLAGS="$save_CFLAGS"
+
+        AC_MSG_RESULT([$ax_pthread_ok])
+        if test "x$ax_pthread_ok" = xyes; then
+                break;
+        fi
+
+        PTHREAD_LIBS=""
+        PTHREAD_CFLAGS=""
+done
+fi
+
+# Various other checks:
+if test "x$ax_pthread_ok" = xyes; then
+        save_LIBS="$LIBS"
+        LIBS="$PTHREAD_LIBS $LIBS"
+        save_CFLAGS="$CFLAGS"
+        CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
+
+        # Detect AIX lossage: JOINABLE attribute is called UNDETACHED.
+        AC_MSG_CHECKING([for joinable pthread attribute])
+        attr_name=unknown
+        for attr in PTHREAD_CREATE_JOINABLE PTHREAD_CREATE_UNDETACHED; do
+            AC_LINK_IFELSE([AC_LANG_PROGRAM([#include <pthread.h>],
+                           [int attr = $attr; return attr /* ; */])],
+                [attr_name=$attr; break],
+                [])
+        done
+        AC_MSG_RESULT([$attr_name])
+        if test "$attr_name" != PTHREAD_CREATE_JOINABLE; then
+            AC_DEFINE_UNQUOTED([PTHREAD_CREATE_JOINABLE], [$attr_name],
+                               [Define to necessary symbol if this constant
+                                uses a non-standard name on your system.])
+        fi
+
+        AC_MSG_CHECKING([if more special flags are required for pthreads])
+        flag=no
+        case ${host_os} in
+            aix* | freebsd* | darwin*) flag="-D_THREAD_SAFE";;
+            osf* | hpux*) flag="-D_REENTRANT";;
+            solaris*)
+            if test "$GCC" = "yes"; then
+                flag="-D_REENTRANT"
+            else
+                # TODO: What about Clang on Solaris?
+                flag="-mt -D_REENTRANT"
+            fi
+            ;;
+        esac
+        AC_MSG_RESULT([$flag])
+        if test "x$flag" != xno; then
+            PTHREAD_CFLAGS="$flag $PTHREAD_CFLAGS"
+        fi
+
+        AC_CACHE_CHECK([for PTHREAD_PRIO_INHERIT],
+            [ax_cv_PTHREAD_PRIO_INHERIT], [
+                AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <pthread.h>]],
+                                                [[int i = PTHREAD_PRIO_INHERIT;]])],
+                    [ax_cv_PTHREAD_PRIO_INHERIT=yes],
+                    [ax_cv_PTHREAD_PRIO_INHERIT=no])
+            ])
+        AS_IF([test "x$ax_cv_PTHREAD_PRIO_INHERIT" = "xyes"],
+            [AC_DEFINE([HAVE_PTHREAD_PRIO_INHERIT], [1], [Have PTHREAD_PRIO_INHERIT.])])
+
+        LIBS="$save_LIBS"
+        CFLAGS="$save_CFLAGS"
+
+        # More AIX lossage: compile with *_r variant
+        if test "x$GCC" != xyes; then
+            case $host_os in
+                aix*)
+                AS_CASE(["x/$CC"],
+                  [x*/c89|x*/c89_128|x*/c99|x*/c99_128|x*/cc|x*/cc128|x*/xlc|x*/xlc_v6|x*/xlc128|x*/xlc128_v6],
+                  [#handle absolute path differently from PATH based program lookup
+                   AS_CASE(["x$CC"],
+                     [x/*],
+                     [AS_IF([AS_EXECUTABLE_P([${CC}_r])],[PTHREAD_CC="${CC}_r"])],
+                     [AC_CHECK_PROGS([PTHREAD_CC],[${CC}_r],[$CC])])])
+                ;;
+            esac
+        fi
+fi
+
+test -n "$PTHREAD_CC" || PTHREAD_CC="$CC"
+
+AC_SUBST([PTHREAD_LIBS])
+AC_SUBST([PTHREAD_CFLAGS])
+AC_SUBST([PTHREAD_CC])
+
+# Finally, execute ACTION-IF-FOUND/ACTION-IF-NOT-FOUND:
+if test x"$ax_pthread_ok" = xyes; then
+        ifelse([$1],,[AC_DEFINE([HAVE_PTHREAD],[1],[Define if you have POSIX threads libraries and header files.])],[$1])
+        :
+else
+        ax_pthread_ok=no
+        $2
+fi
+AC_LANG_POP
+])dnl AX_PTHREAD
diff --git a/common/m4/gst-arch.m4 b/common/m4/gst-arch.m4
index 077a20b..4ad7680 100644
--- a/common/m4/gst-arch.m4
+++ b/common/m4/gst-arch.m4
@@ -45,9 +45,15 @@
     xalpha*)
       HAVE_CPU_ALPHA=yes
       AC_DEFINE(HAVE_CPU_ALPHA, 1, [Define if the target CPU is an Alpha]) ;;
+    xarc*)
+      HAVE_CPU_ARC=yes
+      AC_DEFINE(HAVE_CPU_ARC, 1, [Define if the target CPU is an ARC]) ;;
     xarm*)
       HAVE_CPU_ARM=yes
       AC_DEFINE(HAVE_CPU_ARM, 1, [Define if the target CPU is an ARM]) ;;
+    xaarch64*)
+      HAVE_CPU_AARCH64=yes
+      AC_DEFINE(HAVE_CPU_AARCH64, 1, [Define if the target CPU is AARCH64]) ;;
     xsparc*)
       HAVE_CPU_SPARC=yes
       AC_DEFINE(HAVE_CPU_SPARC, 1, [Define if the target CPU is a SPARC]) ;;
@@ -84,6 +90,7 @@
   AM_CONDITIONAL(HAVE_CPU_PPC,        test "x$HAVE_CPU_PPC" = "xyes")
   AM_CONDITIONAL(HAVE_CPU_PPC64,      test "x$HAVE_CPU_PPC64" = "xyes")
   AM_CONDITIONAL(HAVE_CPU_ALPHA,      test "x$HAVE_CPU_ALPHA" = "xyes")
+  AM_CONDITIONAL(HAVE_CPU_ARC,        test "x$HAVE_CPU_ARC" = "xyes")
   AM_CONDITIONAL(HAVE_CPU_ARM,        test "x$HAVE_CPU_ARM" = "xyes")
   AM_CONDITIONAL(HAVE_CPU_SPARC,      test "x$HAVE_CPU_SPARC" = "xyes")
   AM_CONDITIONAL(HAVE_CPU_HPPA,       test "x$HAVE_CPU_HPPA" = "xyes")
@@ -104,7 +111,7 @@
   AC_MSG_CHECKING([if unaligned memory access works correctly])
   if test x"$as_cv_unaligned_access" = x ; then
     case $host in
-      alpha*|arm*|hp*|mips*|sh*|sparc*|ia64*)
+      alpha*|arc*|arm*|aarch64*|hp*|mips*|sh*|sparc*|ia64*)
         _AS_ECHO_N([(blacklisted) ])
         as_cv_unaligned_access=no
 	;;
diff --git a/common/m4/gst-error.m4 b/common/m4/gst-error.m4
index bce80d2..d6487cc 100644
--- a/common/m4/gst-error.m4
+++ b/common/m4/gst-error.m4
@@ -76,14 +76,6 @@
             ])
           done
       ])
-    else
-      dnl Add -fno-strict-aliasing for GLib versions before 2.19.8
-      dnl as before G_LOCK and friends caused strict aliasing compiler
-      dnl warnings.
-      PKG_CHECK_EXISTS([glib-2.0 < 2.19.8], [
-        AS_COMPILER_FLAG(-fno-strict-aliasing,
-            ERROR_CFLAGS="$ERROR_CFLAGS -fno-strict-aliasing")
-	])
     fi
   fi
 
diff --git a/common/m4/gst-glib2.m4 b/common/m4/gst-glib2.m4
index 63f0f46..5b9cd8b 100644
--- a/common/m4/gst-glib2.m4
+++ b/common/m4/gst-glib2.m4
@@ -120,6 +120,10 @@
   GIO_LIBDIR="`$PKG_CONFIG --variable=libdir gio-2.0`"
   AC_DEFINE_UNQUOTED(GIO_LIBDIR, "$GIO_LIBDIR",
       [The GIO library directory.])
+  GIO_PREFIX="`$PKG_CONFIG --variable=prefix gio-2.0`"
+  AC_DEFINE_UNQUOTED(GIO_PREFIX, "$GIO_PREFIX",
+      [The GIO install prefix.])
+
   AC_SUBST(GIO_CFLAGS)
   AC_SUBST(GIO_LIBS)
   AC_SUBST(GIO_LDFLAGS)
diff --git a/common/m4/gst-parser.m4 b/common/m4/gst-parser.m4
index b002047..382ef72 100644
--- a/common/m4/gst-parser.m4
+++ b/common/m4/gst-parser.m4
@@ -15,7 +15,7 @@
   bison_version=`$BISON_PATH --version | head -n 1 |  sed 's/^[[^0-9]]*//' | sed 's/[[^0-9]]*$//' | cut -d' ' -f1`
   AC_MSG_CHECKING([bison version $bison_version >= $bison_min_version])
 
-  if perl -we "exit ((v$bison_version ge v$bison_min_version) ? 0 : 1)"; then
+  if perl -we "exit (('v$bison_version' ge 'v$bison_min_version') ? 0 : 1)"; then
     AC_MSG_RESULT([yes])
   else
     AC_MSG_ERROR([no])
diff --git a/common/m4/gst-x11.m4 b/common/m4/gst-x11.m4
index d3baf2d..c41ddff 100644
--- a/common/m4/gst-x11.m4
+++ b/common/m4/gst-x11.m4
@@ -9,7 +9,11 @@
   CPPFLAGS="$CPPFLAGS $X_CFLAGS"
 
   dnl now try to find the HEADER
-  AC_CHECK_HEADER(X11/Xlib.h, HAVE_X="yes", HAVE_X="no")
+  HAVE_X="no"
+  AC_CHECK_HEADER([X11/Xlib.h], [
+    dnl and then the library with the most uniquitous function
+    AC_CHECK_LIB(X11, [XSync], [HAVE_X="yes"], [], [$X_LIBS $X_PRE_LIBS $X_EXTRA_LIBS])
+  ], [], [AC_INCLUDES_DEFAULT])
 
   if test "x$HAVE_X" = "xno"
   then
diff --git a/common/m4/introspection.m4 b/common/m4/introspection.m4
index 589721c..162be57 100644
--- a/common/m4/introspection.m4
+++ b/common/m4/introspection.m4
@@ -62,6 +62,7 @@
        INTROSPECTION_CFLAGS=`$PKG_CONFIG --cflags gobject-introspection-1.0`
        INTROSPECTION_LIBS=`$PKG_CONFIG --libs gobject-introspection-1.0`
        INTROSPECTION_MAKEFILE=`$PKG_CONFIG --variable=datadir gobject-introspection-1.0`/gobject-introspection-1.0/Makefile.introspection
+       INTROSPECTION_INIT="extern void gst_init(gint*,gchar**); gst_init(NULL,NULL);"
     fi
     AC_SUBST(INTROSPECTION_SCANNER)
     AC_SUBST(INTROSPECTION_COMPILER)
@@ -71,6 +72,7 @@
     AC_SUBST(INTROSPECTION_CFLAGS)
     AC_SUBST(INTROSPECTION_LIBS)
     AC_SUBST(INTROSPECTION_MAKEFILE)
+    AC_SUBST(INTROSPECTION_INIT)
 
     AM_CONDITIONAL(HAVE_INTROSPECTION, test "x$found_introspection" = "xyes")
 ])
diff --git a/common/mangle-db.py b/common/mangle-db.py
new file mode 100644
index 0000000..463e5bc
--- /dev/null
+++ b/common/mangle-db.py
@@ -0,0 +1,71 @@
+# -*- Mode: Python -*-
+# vi:si:et:sw=4:sts=4:ts=4
+
+"""
+Insert includes for the element-*-details.xml files into the related docbook
+files.
+"""
+
+from __future__ import print_function, unicode_literals
+
+import codecs
+import glob
+import os
+import sys
+
+import xml.dom.minidom
+
+def patch(related, details):
+    try:
+        doc = xml.dom.minidom.parse(related)
+    except IOError:
+        return
+
+    # find the insertion point
+    elem = None
+    for e in doc.childNodes:
+        if e.nodeType == e.ELEMENT_NODE and e.localName == 'refentry':
+            elem = e
+            break
+    if elem == None:
+        return
+
+    elem2 = None
+    for e in elem.childNodes:
+        if e.nodeType == e.ELEMENT_NODE and e.localName == 'refsect1':
+            id = e.getAttributeNode('id')
+            role = e.getAttributeNode('role')
+            if id and id.nodeValue.endswith('.description') and role and role.nodeValue == 'desc':
+                elem2 = e
+                break
+    if elem2 == None:
+        return
+
+    # insert include
+    include = doc.createElement('include')
+    include.setAttribute('xmlns', 'http://www.w3.org/2003/XInclude')
+    include.setAttribute('href', details)
+    fallback = doc.createElement('fallback')
+    fallback.setAttribute('xmlns', 'http://www.w3.org/2003/XInclude')
+    include.appendChild(fallback)
+    elem2.appendChild(include)
+
+    # store patched file
+    result = codecs.open(related, mode="w", encoding="utf-8")
+    #result = open(related, "wb")
+    doc.writexml(result)
+    result.close()
+
+def main():
+    if not len(sys.argv) == 2:
+        sys.stderr.write('Please specify the xml/ dir')
+        sys.exit(1)
+
+    xmldir = sys.argv[1]
+
+    # parse all *-details.xml files and patch includes into the corresponding
+    # xml files
+    for details in glob.glob("%s/element-*-details.xml" % xmldir):
+        patch (details.replace("-details", ""), os.path.basename(details))
+
+main()
diff --git a/common/mangle-tmpl.py b/common/mangle-tmpl.py
deleted file mode 100644
index 51ea8c2..0000000
--- a/common/mangle-tmpl.py
+++ /dev/null
@@ -1,165 +0,0 @@
-# -*- Mode: Python -*-
-# vi:si:et:sw=4:sts=4:ts=4
-
-"""
-use the output from gst-xmlinspect.py to mangle tmpl/*.sgml and
-insert/overwrite Short Description and Long Description
-"""
-
-# FIXME: right now it uses pygst and scans on its own;
-# we really should use inspect/*.xml instead since the result of
-# gst-xmlinspect.py is committed by the docs maintainer, who can be
-# expected to have pygst, but this step should be done for every docs build,
-# so no pygst allowed
-
-# read in inspect/*.xml
-# for every tmpl/element-(name).xml: mangle with details from element
-
-from __future__ import print_function, unicode_literals
-
-import glob
-import re
-import sys
-import os
-
-class Tmpl:
-    def __init__(self, filename):
-        self.filename = filename
-        self._sectionids = []
-        self._sections = {}
-
-    def read(self):
-        """
-        Read and parse the sections from the given file.
-        """
-        lines = open(self.filename).readlines()
-        matcher = re.compile("<!-- ##### SECTION (\S+) ##### -->\n")
-        id = None
-
-        for line in lines:
-            match = matcher.search(line)
-            if match:
-                id = match.expand("\\1")
-                self._sectionids.append(id)
-                self._sections[id] = []
-            else:
-                if not id:
-                    sys.stderr.write(
-                        "WARNING: line before a SECTION header: %s" % line)
-                else:
-                    self._sections[id].append(line)
-
-    def get_section(self, id):
-        """
-        Get the content from the given section.
-        """
-        return self._sections[id]
-
-    def set_section(self, id, content):
-        """
-        Replace the given section id with the given content.
-        """
-        self._sections[id] = content
-
-    def output(self):
-        """
-        Return the output of the current template in the tmpl/*.sgml format.
-        """
-        lines = []
-        for id in self._sectionids:
-            lines.append("<!-- ##### SECTION %s ##### -->\n" % id)
-            for line in self._sections[id]:
-                lines.append(line)
-
-        return "".join(lines)
-
-    def write(self, backup=False):
-        """
-        Write out the template file again, backing up the previous one.
-        """
-        if backup:
-            target = self.filename + ".mangle.bak"
-            os.rename(self.filename, target)
-
-        handle = open(self.filename, "w")
-        handle.write(self.output())
-        handle.close()
-
-import xml.dom.minidom
-
-def get_elements(file):
-    elements = {}
-    doc = xml.dom.minidom.parse(file)
-
-    elem = None
-    for e in doc.childNodes:
-        if e.nodeType == e.ELEMENT_NODE and e.localName == 'plugin':
-            elem = e
-            break
-    if elem == None:
-        return None
-
-    elem2 = None
-    for e in elem.childNodes:
-        if e.nodeType == e.ELEMENT_NODE and e.localName == 'elements':
-            elem2 = e
-            break
-    if elem2 == None:
-        return None
-
-    elem = elem2
-
-    for e in elem.childNodes:
-        if e.nodeType == e.ELEMENT_NODE and e.localName == 'element':
-            name = None
-            description = None
-
-            for e2 in e.childNodes:
-                if e2.nodeType == e2.ELEMENT_NODE and e2.localName == 'name':
-                    name = e2.childNodes[0].nodeValue.encode("UTF-8")
-                elif e2.nodeType == e2.ELEMENT_NODE and e2.localName == 'description':
-                    if e2.childNodes:
-                      description = e2.childNodes[0].nodeValue.encode("UTF-8")
-                    else:
-                      description = 'No description'
-
-            if name != None and description != None:
-                elements[name] = {'description': description}
-
-    return elements
-
-def main():
-    if not len(sys.argv) == 3:
-        sys.stderr.write('Please specify the inspect/ dir and the tmpl/ dir')
-        sys.exit(1)
-
-    inspectdir = sys.argv[1]
-    tmpldir = sys.argv[2]
-
-    # parse all .xml files; build map of element name -> short desc
-    #for file in glob.glob("inspect/plugin-*.xml"):
-    elements = {}
-    for file in glob.glob("%s/plugin-*.xml" % inspectdir):
-        elements.update(get_elements(file))
-
-    for file in glob.glob("%s/element-*.sgml" % tmpldir):
-        base = os.path.basename(file)
-        element = base[len("element-"):-len(".sgml")]
-        tmpl = Tmpl(file)
-        tmpl.read()
-        if element in elements.keys():
-            description = elements[element]['description']
-            tmpl.set_section("Short_Description", "%s\n\n" % description)
-
-        # put in an include if not yet there
-        line = '<include xmlns="http://www.w3.org/2003/XInclude" href="' + \
-            'element-' + element + '-details.xml">' + \
-            '<fallback xmlns="http://www.w3.org/2003/XInclude" />' + \
-            '</include>\n'
-        section = tmpl.get_section("Long_Description")
-        if not section[0]  == line:
-            section.insert(0, line)
-        tmpl.set_section("Long_Description", section)
-        tmpl.write()
-
-main()
diff --git a/common/scangobj-merge.py b/common/scangobj-merge.py
index 4a9f1fc..46736b4 100755
--- a/common/scangobj-merge.py
+++ b/common/scangobj-merge.py
@@ -8,8 +8,9 @@
 
 from __future__ import print_function, unicode_literals
 
-import sys
+import codecs
 import os
+import sys
 
 def debug(*args):
     pass
@@ -105,10 +106,12 @@
 class GDoc:
     def load_file(self, filename):
         try:
-            lines = open(filename).readlines()
+            lines = codecs.open(filename, encoding='utf-8').readlines()
             self.load_data("".join(lines))
         except IOError:
             print ("WARNING - could not read from %s" % filename)
+        except UnicodeDecodeError as e:
+            print ("WARNING - could not parse %s: %s" % (filename, e))
 
     def save_file(self, filename, backup=False):
         """
@@ -116,7 +119,7 @@
         """
         olddata = None
         try:
-            lines = open(filename).readlines()
+            lines = codecs.open(filename, encoding='utf-8').readlines()
             olddata = "".join(lines)
         except IOError:
             print ("WARNING - could not read from %s" % filename)
@@ -128,7 +131,7 @@
             if backup:
                 os.rename(filename, filename + '.bak')
 
-        handle = open(filename, "w")
+        handle = codecs.open(filename, "w", encoding='utf-8')
         handle.write(newdata)
         handle.close()
 
diff --git a/compile b/compile
index 531136b..a85b723 100755
--- a/compile
+++ b/compile
@@ -3,7 +3,7 @@
 
 scriptversion=2012-10-14.11; # UTC
 
-# Copyright (C) 1999-2013 Free Software Foundation, Inc.
+# Copyright (C) 1999-2014 Free Software Foundation, Inc.
 # Written by Tom Tromey <tromey@cygnus.com>.
 #
 # This program is free software; you can redistribute it and/or modify
diff --git a/config.guess b/config.guess
index 1f5c50c..1659250 100755
--- a/config.guess
+++ b/config.guess
@@ -1,8 +1,8 @@
 #! /bin/sh
 # Attempt to guess a canonical system name.
-#   Copyright 1992-2014 Free Software Foundation, Inc.
+#   Copyright 1992-2015 Free Software Foundation, Inc.
 
-timestamp='2014-03-23'
+timestamp='2015-08-20'
 
 # This file is free software; you can redistribute it and/or modify it
 # under the terms of the GNU General Public License as published by
@@ -24,12 +24,12 @@
 # program.  This Exception is an additional permission under section 7
 # of the GNU General Public License, version 3 ("GPLv3").
 #
-# Originally written by Per Bothner.
+# Originally written by Per Bothner; maintained since 2000 by Ben Elliston.
 #
 # You can get the latest version of this script from:
 # http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD
 #
-# Please send patches with a ChangeLog entry to config-patches@gnu.org.
+# Please send patches to <config-patches@gnu.org>.
 
 
 me=`echo "$0" | sed -e 's,.*/,,'`
@@ -50,7 +50,7 @@
 GNU config.guess ($timestamp)
 
 Originally written by Per Bothner.
-Copyright 1992-2014 Free Software Foundation, Inc.
+Copyright 1992-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."
@@ -168,20 +168,27 @@
 	# Note: NetBSD doesn't particularly care about the vendor
 	# portion of the name.  We always set it to "unknown".
 	sysctl="sysctl -n hw.machine_arch"
-	UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \
-	    /usr/sbin/$sysctl 2>/dev/null || echo unknown)`
+	UNAME_MACHINE_ARCH=`(uname -p 2>/dev/null || \
+	    /sbin/$sysctl 2>/dev/null || \
+	    /usr/sbin/$sysctl 2>/dev/null || \
+	    echo unknown)`
 	case "${UNAME_MACHINE_ARCH}" in
 	    armeb) machine=armeb-unknown ;;
 	    arm*) machine=arm-unknown ;;
 	    sh3el) machine=shl-unknown ;;
 	    sh3eb) machine=sh-unknown ;;
 	    sh5el) machine=sh5le-unknown ;;
+	    earmv*)
+		arch=`echo ${UNAME_MACHINE_ARCH} | sed -e 's,^e\(armv[0-9]\).*$,\1,'`
+		endian=`echo ${UNAME_MACHINE_ARCH} | sed -ne 's,^.*\(eb\)$,\1,p'`
+		machine=${arch}${endian}-unknown
+		;;
 	    *) machine=${UNAME_MACHINE_ARCH}-unknown ;;
 	esac
 	# The Operating System including object format, if it has switched
 	# to ELF recently, or will in the future.
 	case "${UNAME_MACHINE_ARCH}" in
-	    arm*|i386|m68k|ns32k|sh3*|sparc|vax)
+	    arm*|earm*|i386|m68k|ns32k|sh3*|sparc|vax)
 		eval $set_cc_for_build
 		if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \
 			| grep -q __ELF__
@@ -197,6 +204,13 @@
 		os=netbsd
 		;;
 	esac
+	# Determine ABI tags.
+	case "${UNAME_MACHINE_ARCH}" in
+	    earm*)
+		expr='s/^earmv[0-9]/-eabi/;s/eb$//'
+		abi=`echo ${UNAME_MACHINE_ARCH} | sed -e "$expr"`
+		;;
+	esac
 	# The OS release
 	# Debian GNU/NetBSD machines have a different userland, and
 	# thus, need a distinct triplet. However, they do not need
@@ -207,13 +221,13 @@
 		release='-gnu'
 		;;
 	    *)
-		release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'`
+		release=`echo ${UNAME_RELEASE} | sed -e 's/[-_].*//' | cut -d. -f1,2`
 		;;
 	esac
 	# Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM:
 	# contains redundant information, the shorter form:
 	# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used.
-	echo "${machine}-${os}${release}"
+	echo "${machine}-${os}${release}${abi}"
 	exit ;;
     *:Bitrig:*:*)
 	UNAME_MACHINE_ARCH=`arch | sed 's/Bitrig.//'`
@@ -235,6 +249,9 @@
     *:MirBSD:*:*)
 	echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE}
 	exit ;;
+    *:Sortix:*:*)
+	echo ${UNAME_MACHINE}-unknown-sortix
+	exit ;;
     alpha:OSF1:*:*)
 	case $UNAME_RELEASE in
 	*4.0)
@@ -579,8 +596,9 @@
 	else
 		IBM_ARCH=powerpc
 	fi
-	if [ -x /usr/bin/oslevel ] ; then
-		IBM_REV=`/usr/bin/oslevel`
+	if [ -x /usr/bin/lslpp ] ; then
+		IBM_REV=`/usr/bin/lslpp -Lqc bos.rte.libc |
+			   awk -F: '{ print $3 }' | sed s/[0-9]*$/0/`
 	else
 		IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE}
 	fi
@@ -932,6 +950,9 @@
     crisv32:Linux:*:*)
 	echo ${UNAME_MACHINE}-axis-linux-${LIBC}
 	exit ;;
+    e2k:Linux:*:*)
+	echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+	exit ;;
     frv:Linux:*:*)
 	echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
 	exit ;;
@@ -1020,7 +1041,7 @@
 	echo ${UNAME_MACHINE}-dec-linux-${LIBC}
 	exit ;;
     x86_64:Linux:*:*)
-	echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+	echo ${UNAME_MACHINE}-pc-linux-${LIBC}
 	exit ;;
     xtensa*:Linux:*:*)
 	echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
diff --git a/config.h.in b/config.h.in
index ea710f1..06ef48e 100644
--- a/config.h.in
+++ b/config.h.in
@@ -47,6 +47,9 @@
 /* The GIO modules directory. */
 #undef GIO_MODULE_DIR
 
+/* The GIO install prefix. */
+#undef GIO_PREFIX
+
 /* major/minor version */
 #undef GST_API_VERSION
 
@@ -103,9 +106,15 @@
    the CoreFoundation framework. */
 #undef HAVE_CFPREFERENCESCOPYAPPVALUE
 
+/* Define if the target CPU is AARCH64 */
+#undef HAVE_CPU_AARCH64
+
 /* Define if the target CPU is an Alpha */
 #undef HAVE_CPU_ALPHA
 
+/* Define if the target CPU is an ARC */
+#undef HAVE_CPU_ARC
+
 /* Define if the target CPU is an ARM */
 #undef HAVE_CPU_ARM
 
@@ -173,6 +182,9 @@
 /* Define if the GNU gettext() function is already present or preinstalled. */
 #undef HAVE_GETTEXT
 
+/* Define to enable glib GIO unix (used by gio-unix-2.0). */
+#undef HAVE_GIO_UNIX_2_0
+
 /* Define to 1 if you have the `gmtime_r' function. */
 #undef HAVE_GMTIME_R
 
@@ -375,9 +387,6 @@
 # endif
 #endif
 
-/* Define to 1 if the X Window System is missing or not being used. */
-#undef X_DISPLAY_MISSING
-
 /* Enable large inode numbers on Mac OS X 10.5.  */
 #ifndef _DARWIN_USE_64_BIT_INODE
 # define _DARWIN_USE_64_BIT_INODE 1
diff --git a/config.sub b/config.sub
index bba4efb..1acc966 100755
--- a/config.sub
+++ b/config.sub
@@ -1,8 +1,8 @@
 #! /bin/sh
 # Configuration validation subroutine script.
-#   Copyright 1992-2014 Free Software Foundation, Inc.
+#   Copyright 1992-2015 Free Software Foundation, Inc.
 
-timestamp='2014-09-11'
+timestamp='2015-08-20'
 
 # This file is free software; you can redistribute it and/or modify it
 # under the terms of the GNU General Public License as published by
@@ -25,7 +25,7 @@
 # of the GNU General Public License, version 3 ("GPLv3").
 
 
-# Please send patches with a ChangeLog entry to config-patches@gnu.org.
+# Please send patches to <config-patches@gnu.org>.
 #
 # Configuration subroutine to validate and canonicalize a configuration type.
 # Supply the specified configuration type as an argument.
@@ -68,7 +68,7 @@
 version="\
 GNU config.sub ($timestamp)
 
-Copyright 1992-2014 Free Software Foundation, Inc.
+Copyright 1992-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."
@@ -117,7 +117,7 @@
 case $maybe_os in
   nto-qnx* | linux-gnu* | linux-android* | linux-dietlibc | linux-newlib* | \
   linux-musl* | linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | \
-  knetbsd*-gnu* | netbsd*-gnu* | \
+  knetbsd*-gnu* | netbsd*-gnu* | netbsd*-eabi* | \
   kopensolaris*-gnu* | \
   storm-chaos* | os2-emx* | rtmk-nova*)
     os=-$maybe_os
@@ -255,12 +255,13 @@
 	| arc | arceb \
 	| arm | arm[bl]e | arme[lb] | armv[2-8] | armv[3-8][lb] | armv7[arm] \
 	| avr | avr32 \
+	| ba \
 	| be32 | be64 \
 	| bfin \
 	| c4x | c8051 | clipper \
 	| d10v | d30v | dlx | dsp16xx \
-	| epiphany \
-	| fido | fr30 | frv \
+	| e2k | epiphany \
+	| fido | fr30 | frv | ft32 \
 	| h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \
 	| hexagon \
 	| i370 | i860 | i960 | ia64 \
@@ -305,7 +306,7 @@
 	| riscv32 | riscv64 \
 	| rl78 | rx \
 	| score \
-	| sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[34]eb | sheb | shbe | shle | sh[1234]le | sh3ele \
+	| sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[234]eb | sheb | shbe | shle | sh[1234]le | sh3ele \
 	| sh64 | sh64le \
 	| sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \
 	| sparcv8 | sparcv9 | sparcv9b | sparcv9v \
@@ -313,6 +314,7 @@
 	| tahoe | tic4x | tic54x | tic55x | tic6x | tic80 | tron \
 	| ubicom32 \
 	| v850 | v850e | v850e1 | v850e2 | v850es | v850e2v3 \
+	| visium \
 	| we32k \
 	| x86 | xc16x | xstormy16 | xtensa \
 	| z8k | z80)
@@ -327,6 +329,9 @@
 	c6x)
 		basic_machine=tic6x-unknown
 		;;
+	leon|leon[3-9])
+		basic_machine=sparc-$basic_machine
+		;;
 	m6811 | m68hc11 | m6812 | m68hc12 | m68hcs12x | nvptx | picochip)
 		basic_machine=$basic_machine-unknown
 		os=-none
@@ -372,12 +377,13 @@
 	| alphapca5[67]-* | alpha64pca5[67]-* | arc-* | arceb-* \
 	| arm-*  | armbe-* | armle-* | armeb-* | armv*-* \
 	| avr-* | avr32-* \
+	| ba-* \
 	| be32-* | be64-* \
 	| bfin-* | bs2000-* \
 	| c[123]* | c30-* | [cjt]90-* | c4x-* \
 	| c8051-* | clipper-* | craynv-* | cydra-* \
 	| d10v-* | d30v-* | dlx-* \
-	| elxsi-* \
+	| e2k-* | elxsi-* \
 	| f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \
 	| h8300-* | h8500-* \
 	| hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \
@@ -424,12 +430,13 @@
 	| pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \
 	| powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* \
 	| pyramid-* \
+	| riscv32-* | riscv64-* \
 	| rl78-* | romp-* | rs6000-* | rx-* \
 	| sh-* | sh[1234]-* | sh[24]a-* | sh[24]aeb-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \
 	| shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \
 	| sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \
 	| sparclite-* \
-	| sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | sv1-* | sx?-* \
+	| sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | sv1-* | sx*-* \
 	| tahoe-* \
 	| tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \
 	| tile*-* \
@@ -437,6 +444,7 @@
 	| ubicom32-* \
 	| v850-* | v850e-* | v850e1-* | v850es-* | v850e2-* | v850e2v3-* \
 	| vax-* \
+	| visium-* \
 	| we32k-* \
 	| x86-* | x86_64-* | xc16x-* | xps100-* \
 	| xstormy16-* | xtensa*-* \
@@ -513,6 +521,9 @@
 		basic_machine=i386-pc
 		os=-aros
 		;;
+        asmjs)
+		basic_machine=asmjs-unknown
+		;;
 	aux)
 		basic_machine=m68k-apple
 		os=-aux
@@ -774,6 +785,9 @@
 		basic_machine=m68k-isi
 		os=-sysv
 		;;
+	leon-*|leon[3-9]-*)
+		basic_machine=sparc-`echo $basic_machine | sed 's/-.*//'`
+		;;
 	m68knommu)
 		basic_machine=m68k-unknown
 		os=-linux
@@ -1365,7 +1379,7 @@
 	      | -hpux* | -unos* | -osf* | -luna* | -dgux* | -auroraux* | -solaris* \
 	      | -sym* | -kopensolaris* | -plan9* \
 	      | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \
-	      | -aos* | -aros* \
+	      | -aos* | -aros* | -cloudabi* | -sortix* \
 	      | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \
 	      | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \
 	      | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \
diff --git a/configure b/configure
index 01815cf..45ad9b4 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 Base Plug-ins 1.4.5.
+# Generated by GNU Autoconf 2.69 for GStreamer Base Plug-ins 1.5.91.
 #
 # Report bugs to <http://bugzilla.gnome.org/enter_bug.cgi?product=GStreamer>.
 #
@@ -591,8 +591,8 @@
 # Identity of this package.
 PACKAGE_NAME='GStreamer Base Plug-ins'
 PACKAGE_TARNAME='gst-plugins-base'
-PACKAGE_VERSION='1.4.5'
-PACKAGE_STRING='GStreamer Base Plug-ins 1.4.5'
+PACKAGE_VERSION='1.5.91'
+PACKAGE_STRING='GStreamer Base Plug-ins 1.5.91'
 PACKAGE_BUGREPORT='http://bugzilla.gnome.org/enter_bug.cgi?product=GStreamer'
 PACKAGE_URL=''
 
@@ -652,6 +652,10 @@
 FT2_CONFIG
 FT2_LIBS
 FT2_CFLAGS
+USE_GIO_UNIX_2_0_FALSE
+USE_GIO_UNIX_2_0_TRUE
+GIO_UNIX_2_0_LIBS
+GIO_UNIX_2_0_CFLAGS
 USE_VORBIS_FALSE
 USE_VORBIS_TRUE
 VORBIS_LIBS
@@ -687,19 +691,17 @@
 ALSA_CFLAGS
 USE_XSHM_FALSE
 USE_XSHM_TRUE
-XSHM_LIBS
 HAVE_XSHM
+XSHM_LIBS
+XSHM_CFLAGS
 USE_XVIDEO_FALSE
 USE_XVIDEO_TRUE
 XVIDEO_LIBS
+XVIDEO_CFLAGS
 USE_X_FALSE
 USE_X_TRUE
-HAVE_X
-X_EXTRA_LIBS
 X_LIBS
-X_PRE_LIBS
 X_CFLAGS
-XMKMF
 USE_ZLIB_FALSE
 USE_ZLIB_TRUE
 HAVE_ZLIB
@@ -792,6 +794,8 @@
 GST_CONTROLLER_CFLAGS
 GST_BASE_LIBS
 GST_BASE_CFLAGS
+GST_NET_LIBS
+GST_NET_CFLAGS
 GST_PLUGINS_DIR
 GST_TOOLS_DIR
 GST_LIBS
@@ -846,6 +850,7 @@
 GTKDOC_CHECK
 HAVE_INTROSPECTION_FALSE
 HAVE_INTROSPECTION_TRUE
+INTROSPECTION_INIT
 INTROSPECTION_MAKEFILE
 INTROSPECTION_LIBS
 INTROSPECTION_CFLAGS
@@ -885,6 +890,8 @@
 HAVE_CPU_SPARC_TRUE
 HAVE_CPU_ARM_FALSE
 HAVE_CPU_ARM_TRUE
+HAVE_CPU_ARC_FALSE
+HAVE_CPU_ARC_TRUE
 HAVE_CPU_ALPHA_FALSE
 HAVE_CPU_ALPHA_TRUE
 HAVE_CPU_PPC64_FALSE
@@ -1053,6 +1060,7 @@
 docdir
 oldincludedir
 includedir
+runstatedir
 localstatedir
 sharedstatedir
 sysconfdir
@@ -1143,7 +1151,6 @@
 enable_iso_codes
 enable_zlib
 enable_x
-with_x
 enable_xvideo
 enable_xshm
 enable_alsa
@@ -1156,6 +1163,7 @@
 enable_pango
 enable_theora
 enable_vorbis
+enable_gio_unix_2_0
 with_ft_prefix
 with_ft_exec_prefix
 enable_freetypetest
@@ -1187,6 +1195,8 @@
 ORC_LIBS
 GST_CFLAGS
 GST_LIBS
+GST_NET_CFLAGS
+GST_NET_LIBS
 GST_BASE_CFLAGS
 GST_BASE_LIBS
 GST_CONTROLLER_CFLAGS
@@ -1203,7 +1213,12 @@
 QT_LIBS
 ZLIB_CFLAGS
 ZLIB_LIBS
-XMKMF
+X_CFLAGS
+X_LIBS
+XVIDEO_CFLAGS
+XVIDEO_LIBS
+XSHM_CFLAGS
+XSHM_LIBS
 ALSA_CFLAGS
 ALSA_LIBS
 CDPARANOIA_CFLAGS
@@ -1220,6 +1235,8 @@
 THEORA_LIBS
 VORBIS_CFLAGS
 VORBIS_LIBS
+GIO_UNIX_2_0_CFLAGS
+GIO_UNIX_2_0_LIBS
 FT2_CFLAGS
 FT2_LIBS'
 
@@ -1260,6 +1277,7 @@
 sysconfdir='${prefix}/etc'
 sharedstatedir='${prefix}/com'
 localstatedir='${prefix}/var'
+runstatedir='${localstatedir}/run'
 includedir='${prefix}/include'
 oldincludedir='/usr/include'
 docdir='${datarootdir}/doc/${PACKAGE_TARNAME}'
@@ -1512,6 +1530,15 @@
   | -silent | --silent | --silen | --sile | --sil)
     silent=yes ;;
 
+  -runstatedir | --runstatedir | --runstatedi | --runstated \
+  | --runstate | --runstat | --runsta | --runst | --runs \
+  | --run | --ru | --r)
+    ac_prev=runstatedir ;;
+  -runstatedir=* | --runstatedir=* | --runstatedi=* | --runstated=* \
+  | --runstate=* | --runstat=* | --runsta=* | --runst=* | --runs=* \
+  | --run=* | --ru=* | --r=*)
+    runstatedir=$ac_optarg ;;
+
   -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb)
     ac_prev=sbindir ;;
   -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \
@@ -1649,7 +1676,7 @@
 for ac_var in	exec_prefix prefix bindir sbindir libexecdir datarootdir \
 		datadir sysconfdir sharedstatedir localstatedir includedir \
 		oldincludedir docdir infodir htmldir dvidir pdfdir psdir \
-		libdir localedir mandir
+		libdir localedir mandir runstatedir
 do
   eval ac_val=\$$ac_var
   # Remove trailing slashes.
@@ -1762,7 +1789,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 Base Plug-ins 1.4.5 to adapt to many kinds of systems.
+\`configure' configures GStreamer Base Plug-ins 1.5.91 to adapt to many kinds of systems.
 
 Usage: $0 [OPTION]... [VAR=VALUE]...
 
@@ -1802,6 +1829,7 @@
   --sysconfdir=DIR        read-only single-machine data [PREFIX/etc]
   --sharedstatedir=DIR    modifiable architecture-independent data [PREFIX/com]
   --localstatedir=DIR     modifiable single-machine data [PREFIX/var]
+  --runstatedir=DIR       modifiable per-process data [LOCALSTATEDIR/run]
   --libdir=DIR            object code libraries [EPREFIX/lib]
   --includedir=DIR        C header files [PREFIX/include]
   --oldincludedir=DIR     C header files for non-gcc [/usr/include]
@@ -1825,10 +1853,6 @@
   --program-suffix=SUFFIX            append SUFFIX to installed program names
   --program-transform-name=PROGRAM   run sed PROGRAM on installed program names
 
-X features:
-  --x-includes=DIR    X include files are in DIR
-  --x-libraries=DIR   X library files are in DIR
-
 System types:
   --build=BUILD     configure for building on BUILD [guessed]
   --host=HOST       cross-compile to build programs to run on HOST [BUILD]
@@ -1838,7 +1862,7 @@
 
 if test -n "$ac_init_help"; then
   case $ac_init_help in
-     short | recursive ) echo "Configuration of GStreamer Base Plug-ins 1.4.5:";;
+     short | recursive ) echo "Configuration of GStreamer Base Plug-ins 1.5.91:";;
    esac
   cat <<\_ACEOF
 
@@ -1906,7 +1930,7 @@
   --disable-zlib               disable zlib support for ID3 parsing in libgsttag
   --disable-x                  disable X libraries and plugins: ximagesink
   --disable-xvideo             disable X11 XVideo extensions: xvimagesink
-  --disable-xshm               disable X Shared Memory extension
+  --disable-xshm               disable X Shared Memory extension:
   --disable-alsa               disable ALSA: alsa
   --disable-cdparanoia         disable CDParanoia: cdparanoia
   --disable-ivorbis            disable integer vorbis plug-in: ivorbisdec
@@ -1915,6 +1939,7 @@
   --disable-pango              disable Pango font rendering: pango
   --disable-theora             disable Xiph Theora video codec: theora
   --disable-vorbis             disable Xiph Vorbis audio codec: vorbis
+  --disable-gio_unix_2_0       disable glib GIO unix: gio-unix-2.0
   --disable-freetypetest  Do not try to compile and run
                           a test FreeType program
 
@@ -1959,7 +1984,6 @@
   --with-audioresample-format
                           Which implementation should be used for integer
                           audio resampling, int/float/auto, (default is auto)
-  --with-x                use the X Window System
   --with-alsa-prefix=PFX  prefix where Alsa library is installed(optional)
   --with-alsa-inc-prefix=PFX
                           prefix where include libraries are (optional)
@@ -1998,6 +2022,10 @@
   ORC_LIBS    linker flags for ORC, overriding pkg-config
   GST_CFLAGS  C compiler flags for GST, overriding pkg-config
   GST_LIBS    linker flags for GST, overriding pkg-config
+  GST_NET_CFLAGS
+              C compiler flags for GST_NET, overriding pkg-config
+  GST_NET_LIBS
+              linker flags for GST_NET, overriding pkg-config
   GST_BASE_CFLAGS
               C compiler flags for GST_BASE, overriding pkg-config
   GST_BASE_LIBS
@@ -2024,7 +2052,13 @@
   QT_LIBS     linker flags for QT, overriding pkg-config
   ZLIB_CFLAGS C compiler flags for ZLIB, overriding pkg-config
   ZLIB_LIBS   linker flags for ZLIB, overriding pkg-config
-  XMKMF       Path to xmkmf, Makefile generator for X Window System
+  X_CFLAGS    C compiler flags for X, overriding pkg-config
+  X_LIBS      linker flags for X, overriding pkg-config
+  XVIDEO_CFLAGS
+              C compiler flags for XVIDEO, overriding pkg-config
+  XVIDEO_LIBS linker flags for XVIDEO, overriding pkg-config
+  XSHM_CFLAGS C compiler flags for XSHM, overriding pkg-config
+  XSHM_LIBS   linker flags for XSHM, overriding pkg-config
   ALSA_CFLAGS C compiler flags for ALSA, overriding pkg-config
   ALSA_LIBS   linker flags for ALSA, overriding pkg-config
   CDPARANOIA_CFLAGS
@@ -2050,6 +2084,10 @@
   VORBIS_CFLAGS
               C compiler flags for VORBIS, overriding pkg-config
   VORBIS_LIBS linker flags for VORBIS, overriding pkg-config
+  GIO_UNIX_2_0_CFLAGS
+              C compiler flags for GIO_UNIX_2_0, overriding pkg-config
+  GIO_UNIX_2_0_LIBS
+              linker flags for GIO_UNIX_2_0, overriding pkg-config
   FT2_CFLAGS  C compiler flags for FT2, overriding pkg-config
   FT2_LIBS    linker flags for FT2, overriding pkg-config
 
@@ -2119,7 +2157,7 @@
 test -n "$ac_init_help" && exit $ac_status
 if $ac_init_version; then
   cat <<\_ACEOF
-GStreamer Base Plug-ins configure 1.4.5
+GStreamer Base Plug-ins configure 1.5.91
 generated by GNU Autoconf 2.69
 
 Copyright (C) 2012 Free Software Foundation, Inc.
@@ -2892,7 +2930,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 Base Plug-ins $as_me 1.4.5, which was
+It was created by GStreamer Base Plug-ins $as_me 1.5.91, which was
 generated by GNU Autoconf 2.69.  Invocation command line was
 
   $ $0 $@
@@ -3385,7 +3423,7 @@
 
 
 
-am__api_version='1.14'
+am__api_version='1.15'
 
 # Find a good install program.  We prefer a C program (faster),
 # so one script is as good as another.  But avoid the broken or
@@ -3577,7 +3615,7 @@
 $as_echo "$as_me: WARNING: 'missing' script is too old or missing" >&2;}
 fi
 
-if test x"${install_sh}" != xset; then
+if test x"${install_sh+set}" != xset; then
   case $am_aux_dir in
   *\ * | *\	*)
     install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;;
@@ -3871,7 +3909,7 @@
 
 # Define the identity of the package.
  PACKAGE='gst-plugins-base'
- VERSION='1.4.5'
+ VERSION='1.5.91'
 
 
 cat >>confdefs.h <<_ACEOF
@@ -3905,8 +3943,8 @@
 # <http://lists.gnu.org/archive/html/automake/2012-07/msg00014.html>
 mkdir_p='$(MKDIR_P)'
 
-# We need awk for the "check" target.  The system "awk" is bad on
-# some platforms.
+# We need awk for the "check" target (and possibly the TAP driver).  The
+# system "awk" is bad on some platforms.
 # Always define AMTAR for backward compatibility.  Yes, it's still used
 # in the wild :-(  We should find a proper way to deprecate it ...
 AMTAR='$${TAR-tar}'
@@ -4082,9 +4120,9 @@
 
 
 
-  PACKAGE_VERSION_MAJOR=$(echo 1.4.5 | cut -d'.' -f1)
-  PACKAGE_VERSION_MINOR=$(echo 1.4.5 | cut -d'.' -f2)
-  PACKAGE_VERSION_MICRO=$(echo 1.4.5 | cut -d'.' -f3)
+  PACKAGE_VERSION_MAJOR=$(echo 1.5.91 | cut -d'.' -f1)
+  PACKAGE_VERSION_MINOR=$(echo 1.5.91 | cut -d'.' -f2)
+  PACKAGE_VERSION_MICRO=$(echo 1.5.91 | cut -d'.' -f3)
 
 
 
@@ -4095,7 +4133,7 @@
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking nano version" >&5
 $as_echo_n "checking nano version... " >&6; }
 
-  NANO=$(echo 1.4.5 | cut -d'.' -f4)
+  NANO=$(echo 1.5.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
@@ -8744,10 +8782,10 @@
 done
 
 
-  GST_CURRENT=405
+  GST_CURRENT=591
   GST_REVISION=0
-  GST_AGE=405
-  GST_LIBVERSION=405:0:405
+  GST_AGE=591
+  GST_LIBVERSION=591:0:591
 
 
 
@@ -13072,7 +13110,7 @@
 
 
 
-GST_REQ=1.4.0
+GST_REQ=1.5.91
 
 
 
@@ -16039,11 +16077,21 @@
 
 $as_echo "#define HAVE_CPU_ALPHA 1" >>confdefs.h
  ;;
+    xarc*)
+      HAVE_CPU_ARC=yes
+
+$as_echo "#define HAVE_CPU_ARC 1" >>confdefs.h
+ ;;
     xarm*)
       HAVE_CPU_ARM=yes
 
 $as_echo "#define HAVE_CPU_ARM 1" >>confdefs.h
  ;;
+    xaarch64*)
+      HAVE_CPU_AARCH64=yes
+
+$as_echo "#define HAVE_CPU_AARCH64 1" >>confdefs.h
+ ;;
     xsparc*)
       HAVE_CPU_SPARC=yes
 
@@ -16348,6 +16396,14 @@
   HAVE_CPU_ALPHA_FALSE=
 fi
 
+   if test "x$HAVE_CPU_ARC" = "xyes"; then
+  HAVE_CPU_ARC_TRUE=
+  HAVE_CPU_ARC_FALSE='#'
+else
+  HAVE_CPU_ARC_TRUE='#'
+  HAVE_CPU_ARC_FALSE=
+fi
+
    if test "x$HAVE_CPU_ARM" = "xyes"; then
   HAVE_CPU_ARM_TRUE=
   HAVE_CPU_ARM_FALSE='#'
@@ -21412,6 +21468,7 @@
        INTROSPECTION_CFLAGS=`$PKG_CONFIG --cflags gobject-introspection-1.0`
        INTROSPECTION_LIBS=`$PKG_CONFIG --libs gobject-introspection-1.0`
        INTROSPECTION_MAKEFILE=`$PKG_CONFIG --variable=datadir gobject-introspection-1.0`/gobject-introspection-1.0/Makefile.introspection
+       INTROSPECTION_INIT="extern void gst_init(gint*,gchar**); gst_init(NULL,NULL);"
     fi
 
 
@@ -21422,6 +21479,7 @@
 
 
 
+
      if test "x$found_introspection" = "xyes"; then
   HAVE_INTROSPECTION_TRUE=
   HAVE_INTROSPECTION_FALSE='#'
@@ -23531,13 +23589,20 @@
 #define GIO_LIBDIR "$GIO_LIBDIR"
 _ACEOF
 
+  GIO_PREFIX="`$PKG_CONFIG --variable=prefix gio-2.0`"
+
+cat >>confdefs.h <<_ACEOF
+#define GIO_PREFIX "$GIO_PREFIX"
+_ACEOF
 
 
 
 
 
 
-  ORC_REQ=0.4.18
+
+
+  ORC_REQ=0.4.23
 
   # Check whether --enable-orc was given.
 if test "${enable_orc+set}" = set; then :
@@ -23816,6 +23881,108 @@
 
 
 
+  module=gstreamer-net-$GST_API_VERSION
+  minver=$GST_REQ
+  name="GStreamer Network Library"
+  required=yes
+
+pkg_failed=no
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for GST_NET" >&5
+$as_echo_n "checking for GST_NET... " >&6; }
+
+if test -n "$PKG_CONFIG"; then
+    if test -n "$GST_NET_CFLAGS"; then
+        pkg_cv_GST_NET_CFLAGS="$GST_NET_CFLAGS"
+    else
+        if test -n "$PKG_CONFIG" && \
+    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"\$module >= \$minver\""; } >&5
+  ($PKG_CONFIG --exists --print-errors "$module >= $minver") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+  pkg_cv_GST_NET_CFLAGS=`$PKG_CONFIG --cflags "$module >= $minver" 2>/dev/null`
+else
+  pkg_failed=yes
+fi
+    fi
+else
+	pkg_failed=untried
+fi
+if test -n "$PKG_CONFIG"; then
+    if test -n "$GST_NET_LIBS"; then
+        pkg_cv_GST_NET_LIBS="$GST_NET_LIBS"
+    else
+        if test -n "$PKG_CONFIG" && \
+    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"\$module >= \$minver\""; } >&5
+  ($PKG_CONFIG --exists --print-errors "$module >= $minver") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+  pkg_cv_GST_NET_LIBS=`$PKG_CONFIG --libs "$module >= $minver" 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_NET_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "$module >= $minver"`
+        else
+	        GST_NET_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "$module >= $minver"`
+        fi
+	# Put the nasty error message in config.log where it belongs
+	echo "$GST_NET_PKG_ERRORS" >&5
+
+	{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+
+      HAVE_GST_NET="no"
+      { $as_echo "$as_me:${as_lineno-$LINENO}: $GST_NET_PKG_ERRORS" >&5
+$as_echo "$as_me: $GST_NET_PKG_ERRORS" >&6;}
+      if test "x$required" = "xyes"; then
+        as_fn_error $? "no $module >= $minver ($name) found" "$LINENO" 5
+      else
+        { $as_echo "$as_me:${as_lineno-$LINENO}: no $module >= $minver ($name) found" >&5
+$as_echo "$as_me: no $module >= $minver ($name) found" >&6;}
+      fi
+
+elif test $pkg_failed = untried; then
+
+      HAVE_GST_NET="no"
+      { $as_echo "$as_me:${as_lineno-$LINENO}: $GST_NET_PKG_ERRORS" >&5
+$as_echo "$as_me: $GST_NET_PKG_ERRORS" >&6;}
+      if test "x$required" = "xyes"; then
+        as_fn_error $? "no $module >= $minver ($name) found" "$LINENO" 5
+      else
+        { $as_echo "$as_me:${as_lineno-$LINENO}: no $module >= $minver ($name) found" >&5
+$as_echo "$as_me: no $module >= $minver ($name) found" >&6;}
+      fi
+
+else
+	GST_NET_CFLAGS=$pkg_cv_GST_NET_CFLAGS
+	GST_NET_LIBS=$pkg_cv_GST_NET_LIBS
+        { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+
+      HAVE_GST_NET="yes"
+
+fi
+
+
+
+
+
   module=gstreamer-base-$GST_API_VERSION
   minver=$GST_REQ
   name="GStreamer Base Libraries"
@@ -24136,7 +24303,7 @@
 
 HAVE_GTK=no
 HAVE_GTK_X11=no
-GTK_REQ=3.0.0
+GTK_REQ=3.10
 if test "x$BUILD_EXAMPLES" = "xyes"; then
 
 pkg_failed=no
@@ -25356,52 +25523,6 @@
   { $as_echo "$as_me:${as_lineno-$LINENO}: result: $flag_ok" >&5
 $as_echo "$flag_ok" >&6; }
 
-    else
-                        if test -n "$PKG_CONFIG" && \
-    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"glib-2.0 < 2.19.8\""; } >&5
-  ($PKG_CONFIG --exists --print-errors "glib-2.0 < 2.19.8") 2>&5
-  ac_status=$?
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; }; then
-
-
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking to see if compiler understands -fno-strict-aliasing" >&5
-$as_echo_n "checking to see if compiler understands -fno-strict-aliasing... " >&6; }
-
-  save_CFLAGS="$CFLAGS"
-  CFLAGS="$CFLAGS -fno-strict-aliasing"
-
-  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 -fno-strict-aliasing"
-    true
-  else
-
-    true
-  fi
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $flag_ok" >&5
-$as_echo "$flag_ok" >&6; }
-
-
-fi
     fi
   fi
 
@@ -27290,199 +27411,6 @@
 $as_echo "$as_me: Checking libraries for plugins in sys/" >&6;}
 echo
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for X" >&5
-$as_echo_n "checking for X... " >&6; }
-
-
-# Check whether --with-x was given.
-if test "${with_x+set}" = set; then :
-  withval=$with_x;
-fi
-
-# $have_x is `yes', `no', `disabled', or empty when we do not yet know.
-if test "x$with_x" = xno; then
-  # The user explicitly disabled X.
-  have_x=disabled
-else
-  case $x_includes,$x_libraries in #(
-    *\'*) as_fn_error $? "cannot use X directory names containing '" "$LINENO" 5;; #(
-    *,NONE | NONE,*) if ${ac_cv_have_x+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  # One or both of the vars are not set, and there is no cached value.
-ac_x_includes=no ac_x_libraries=no
-rm -f -r conftest.dir
-if mkdir conftest.dir; then
-  cd conftest.dir
-  cat >Imakefile <<'_ACEOF'
-incroot:
-	@echo incroot='${INCROOT}'
-usrlibdir:
-	@echo usrlibdir='${USRLIBDIR}'
-libdir:
-	@echo libdir='${LIBDIR}'
-_ACEOF
-  if (export CC; ${XMKMF-xmkmf}) >/dev/null 2>/dev/null && test -f Makefile; then
-    # GNU make sometimes prints "make[1]: Entering ...", which would confuse us.
-    for ac_var in incroot usrlibdir libdir; do
-      eval "ac_im_$ac_var=\`\${MAKE-make} $ac_var 2>/dev/null | sed -n 's/^$ac_var=//p'\`"
-    done
-    # Open Windows xmkmf reportedly sets LIBDIR instead of USRLIBDIR.
-    for ac_extension in a so sl dylib la dll; do
-      if test ! -f "$ac_im_usrlibdir/libX11.$ac_extension" &&
-	 test -f "$ac_im_libdir/libX11.$ac_extension"; then
-	ac_im_usrlibdir=$ac_im_libdir; break
-      fi
-    done
-    # Screen out bogus values from the imake configuration.  They are
-    # bogus both because they are the default anyway, and because
-    # using them would break gcc on systems where it needs fixed includes.
-    case $ac_im_incroot in
-	/usr/include) ac_x_includes= ;;
-	*) test -f "$ac_im_incroot/X11/Xos.h" && ac_x_includes=$ac_im_incroot;;
-    esac
-    case $ac_im_usrlibdir in
-	/usr/lib | /usr/lib64 | /lib | /lib64) ;;
-	*) test -d "$ac_im_usrlibdir" && ac_x_libraries=$ac_im_usrlibdir ;;
-    esac
-  fi
-  cd ..
-  rm -f -r conftest.dir
-fi
-
-# Standard set of common directories for X headers.
-# Check X11 before X11Rn because it is often a symlink to the current release.
-ac_x_header_dirs='
-/usr/X11/include
-/usr/X11R7/include
-/usr/X11R6/include
-/usr/X11R5/include
-/usr/X11R4/include
-
-/usr/include/X11
-/usr/include/X11R7
-/usr/include/X11R6
-/usr/include/X11R5
-/usr/include/X11R4
-
-/usr/local/X11/include
-/usr/local/X11R7/include
-/usr/local/X11R6/include
-/usr/local/X11R5/include
-/usr/local/X11R4/include
-
-/usr/local/include/X11
-/usr/local/include/X11R7
-/usr/local/include/X11R6
-/usr/local/include/X11R5
-/usr/local/include/X11R4
-
-/usr/X386/include
-/usr/x386/include
-/usr/XFree86/include/X11
-
-/usr/include
-/usr/local/include
-/usr/unsupported/include
-/usr/athena/include
-/usr/local/x11r5/include
-/usr/lpp/Xamples/include
-
-/usr/openwin/include
-/usr/openwin/share/include'
-
-if test "$ac_x_includes" = no; then
-  # Guess where to find include files, by looking for Xlib.h.
-  # First, try using that file with no special directory specified.
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#include <X11/Xlib.h>
-_ACEOF
-if ac_fn_c_try_cpp "$LINENO"; then :
-  # We can compile using X headers with no special include directory.
-ac_x_includes=
-else
-  for ac_dir in $ac_x_header_dirs; do
-  if test -r "$ac_dir/X11/Xlib.h"; then
-    ac_x_includes=$ac_dir
-    break
-  fi
-done
-fi
-rm -f conftest.err conftest.i conftest.$ac_ext
-fi # $ac_x_includes = no
-
-if test "$ac_x_libraries" = no; then
-  # Check for the libraries.
-  # See if we find them without any special options.
-  # Don't add to $LIBS permanently.
-  ac_save_LIBS=$LIBS
-  LIBS="-lX11 $LIBS"
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#include <X11/Xlib.h>
-int
-main ()
-{
-XrmInitialize ()
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-  LIBS=$ac_save_LIBS
-# We can link X programs with no special library path.
-ac_x_libraries=
-else
-  LIBS=$ac_save_LIBS
-for ac_dir in `$as_echo "$ac_x_includes $ac_x_header_dirs" | sed s/include/lib/g`
-do
-  # Don't even attempt the hair of trying to link an X program!
-  for ac_extension in a so sl dylib la dll; do
-    if test -r "$ac_dir/libX11.$ac_extension"; then
-      ac_x_libraries=$ac_dir
-      break 2
-    fi
-  done
-done
-fi
-rm -f core conftest.err conftest.$ac_objext \
-    conftest$ac_exeext conftest.$ac_ext
-fi # $ac_x_libraries = no
-
-case $ac_x_includes,$ac_x_libraries in #(
-  no,* | *,no | *\'*)
-    # Didn't find X, or a directory has "'" in its name.
-    ac_cv_have_x="have_x=no";; #(
-  *)
-    # Record where we found X for the cache.
-    ac_cv_have_x="have_x=yes\
-	ac_x_includes='$ac_x_includes'\
-	ac_x_libraries='$ac_x_libraries'"
-esac
-fi
-;; #(
-    *) have_x=yes;;
-  esac
-  eval "$ac_cv_have_x"
-fi # $with_x != no
-
-if test "$have_x" != yes; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $have_x" >&5
-$as_echo "$have_x" >&6; }
-  no_x=yes
-else
-  # If each of the values was on the command line, it overrides each guess.
-  test "x$x_includes" = xNONE && x_includes=$ac_x_includes
-  test "x$x_libraries" = xNONE && x_libraries=$ac_x_libraries
-  # Update the cache value to reflect the command line values.
-  ac_cv_have_x="have_x=yes\
-	ac_x_includes='$x_includes'\
-	ac_x_libraries='$x_libraries'"
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: libraries $x_libraries, headers $x_includes" >&5
-$as_echo "libraries $x_libraries, headers $x_includes" >&6; }
-fi
-
 echo
 { $as_echo "$as_me:${as_lineno-$LINENO}: *** checking feature: X libraries and plugins ***" >&5
 $as_echo "$as_me: *** checking feature: X libraries and plugins ***" >&6;}
@@ -27531,524 +27459,99 @@
   HAVE_X=no
 
 
-  if test "$no_x" = yes; then
-  # Not all programs may use this symbol, but it does not hurt to define it.
+  which="x11"
+    required="no"
 
-$as_echo "#define X_DISPLAY_MISSING 1" >>confdefs.h
 
-  X_CFLAGS= X_PRE_LIBS= X_LIBS= X_EXTRA_LIBS=
+pkg_failed=no
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for X" >&5
+$as_echo_n "checking for X... " >&6; }
+
+if test -n "$PKG_CONFIG"; then
+    if test -n "$X_CFLAGS"; then
+        pkg_cv_X_CFLAGS="$X_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_X_CFLAGS=`$PKG_CONFIG --cflags "$which" 2>/dev/null`
 else
-  if test -n "$x_includes"; then
-    X_CFLAGS="$X_CFLAGS -I$x_includes"
-  fi
+  pkg_failed=yes
+fi
+    fi
+else
+	pkg_failed=untried
+fi
+if test -n "$PKG_CONFIG"; then
+    if test -n "$X_LIBS"; then
+        pkg_cv_X_LIBS="$X_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_X_LIBS=`$PKG_CONFIG --libs "$which" 2>/dev/null`
+else
+  pkg_failed=yes
+fi
+    fi
+else
+	pkg_failed=untried
+fi
 
-  # It would also be nice to do this for all -L options, not just this one.
-  if test -n "$x_libraries"; then
-    X_LIBS="$X_LIBS -L$x_libraries"
-    # For Solaris; some versions of Sun CC require a space after -R and
-    # others require no space.  Words are not sufficient . . . .
-    { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -R must be followed by a space" >&5
-$as_echo_n "checking whether -R must be followed by a space... " >&6; }
-    ac_xsave_LIBS=$LIBS; LIBS="$LIBS -R$x_libraries"
-    ac_xsave_c_werror_flag=$ac_c_werror_flag
-    ac_c_werror_flag=yes
-    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
 
-int
-main ()
-{
 
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+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
+	        X_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "$which"`
+        else
+	        X_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "$which"`
+        fi
+	# Put the nasty error message in config.log where it belongs
+	echo "$X_PKG_ERRORS" >&5
+
+	{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
 $as_echo "no" >&6; }
-       X_LIBS="$X_LIBS -R$x_libraries"
-else
-  LIBS="$ac_xsave_LIBS -R $x_libraries"
-       cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
 
-int
-main ()
-{
-
-  ;
-  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; }
-	  X_LIBS="$X_LIBS -R $x_libraries"
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: neither works" >&5
-$as_echo "neither works" >&6; }
-fi
-rm -f core conftest.err conftest.$ac_objext \
-    conftest$ac_exeext conftest.$ac_ext
-fi
-rm -f core conftest.err conftest.$ac_objext \
-    conftest$ac_exeext conftest.$ac_ext
-    ac_c_werror_flag=$ac_xsave_c_werror_flag
-    LIBS=$ac_xsave_LIBS
-  fi
-
-  # Check for system-dependent libraries X programs must link with.
-  # Do this before checking for the system-independent R6 libraries
-  # (-lICE), since we may need -lsocket or whatever for X linking.
-
-  if test "$ISC" = yes; then
-    X_EXTRA_LIBS="$X_EXTRA_LIBS -lnsl_s -linet"
-  else
-    # Martyn Johnson says this is needed for Ultrix, if the X
-    # libraries were built with DECnet support.  And Karl Berry says
-    # the Alpha needs dnet_stub (dnet does not exist).
-    ac_xsave_LIBS="$LIBS"; LIBS="$LIBS $X_LIBS -lX11"
-    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 XOpenDisplay ();
-int
-main ()
-{
-return XOpenDisplay ();
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dnet_ntoa in -ldnet" >&5
-$as_echo_n "checking for dnet_ntoa in -ldnet... " >&6; }
-if ${ac_cv_lib_dnet_dnet_ntoa+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  ac_check_lib_save_LIBS=$LIBS
-LIBS="-ldnet  $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 dnet_ntoa ();
-int
-main ()
-{
-return dnet_ntoa ();
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-  ac_cv_lib_dnet_dnet_ntoa=yes
-else
-  ac_cv_lib_dnet_dnet_ntoa=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_dnet_dnet_ntoa" >&5
-$as_echo "$ac_cv_lib_dnet_dnet_ntoa" >&6; }
-if test "x$ac_cv_lib_dnet_dnet_ntoa" = xyes; then :
-  X_EXTRA_LIBS="$X_EXTRA_LIBS -ldnet"
-fi
-
-    if test $ac_cv_lib_dnet_dnet_ntoa = no; then
-      { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dnet_ntoa in -ldnet_stub" >&5
-$as_echo_n "checking for dnet_ntoa in -ldnet_stub... " >&6; }
-if ${ac_cv_lib_dnet_stub_dnet_ntoa+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  ac_check_lib_save_LIBS=$LIBS
-LIBS="-ldnet_stub  $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 dnet_ntoa ();
-int
-main ()
-{
-return dnet_ntoa ();
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-  ac_cv_lib_dnet_stub_dnet_ntoa=yes
-else
-  ac_cv_lib_dnet_stub_dnet_ntoa=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_dnet_stub_dnet_ntoa" >&5
-$as_echo "$ac_cv_lib_dnet_stub_dnet_ntoa" >&6; }
-if test "x$ac_cv_lib_dnet_stub_dnet_ntoa" = xyes; then :
-  X_EXTRA_LIBS="$X_EXTRA_LIBS -ldnet_stub"
-fi
-
-    fi
-fi
-rm -f core conftest.err conftest.$ac_objext \
-    conftest$ac_exeext conftest.$ac_ext
-    LIBS="$ac_xsave_LIBS"
-
-    # msh@cis.ufl.edu says -lnsl (and -lsocket) are needed for his 386/AT,
-    # to get the SysV transport functions.
-    # Chad R. Larson says the Pyramis MIS-ES running DC/OSx (SVR4)
-    # needs -lnsl.
-    # The nsl library prevents programs from opening the X display
-    # on Irix 5.2, according to T.E. Dickey.
-    # The functions gethostbyname, getservbyname, and inet_addr are
-    # in -lbsd on LynxOS 3.0.1/i386, according to Lars Hecking.
-    ac_fn_c_check_func "$LINENO" "gethostbyname" "ac_cv_func_gethostbyname"
-if test "x$ac_cv_func_gethostbyname" = xyes; then :
-
-fi
-
-    if test $ac_cv_func_gethostbyname = no; then
-      { $as_echo "$as_me:${as_lineno-$LINENO}: checking for gethostbyname in -lnsl" >&5
-$as_echo_n "checking for gethostbyname in -lnsl... " >&6; }
-if ${ac_cv_lib_nsl_gethostbyname+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  ac_check_lib_save_LIBS=$LIBS
-LIBS="-lnsl  $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 gethostbyname ();
-int
-main ()
-{
-return gethostbyname ();
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-  ac_cv_lib_nsl_gethostbyname=yes
-else
-  ac_cv_lib_nsl_gethostbyname=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_nsl_gethostbyname" >&5
-$as_echo "$ac_cv_lib_nsl_gethostbyname" >&6; }
-if test "x$ac_cv_lib_nsl_gethostbyname" = xyes; then :
-  X_EXTRA_LIBS="$X_EXTRA_LIBS -lnsl"
-fi
-
-      if test $ac_cv_lib_nsl_gethostbyname = no; then
-	{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for gethostbyname in -lbsd" >&5
-$as_echo_n "checking for gethostbyname in -lbsd... " >&6; }
-if ${ac_cv_lib_bsd_gethostbyname+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  ac_check_lib_save_LIBS=$LIBS
-LIBS="-lbsd  $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 gethostbyname ();
-int
-main ()
-{
-return gethostbyname ();
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-  ac_cv_lib_bsd_gethostbyname=yes
-else
-  ac_cv_lib_bsd_gethostbyname=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_bsd_gethostbyname" >&5
-$as_echo "$ac_cv_lib_bsd_gethostbyname" >&6; }
-if test "x$ac_cv_lib_bsd_gethostbyname" = xyes; then :
-  X_EXTRA_LIBS="$X_EXTRA_LIBS -lbsd"
-fi
-
+      HAVE_X="no"
+      if test "x$required" = "xyes"; then
+        as_fn_error $? "$X_PKG_ERRORS" "$LINENO" 5
+      else
+        { $as_echo "$as_me:${as_lineno-$LINENO}: $X_PKG_ERRORS" >&5
+$as_echo "$as_me: $X_PKG_ERRORS" >&6;}
       fi
-    fi
 
-    # lieder@skyler.mavd.honeywell.com says without -lsocket,
-    # socket/setsockopt and other routines are undefined under SCO ODT
-    # 2.0.  But -lsocket is broken on IRIX 5.2 (and is not necessary
-    # on later versions), says Simon Leinen: it contains gethostby*
-    # variants that don't use the name server (or something).  -lsocket
-    # must be given before -lnsl if both are needed.  We assume that
-    # if connect needs -lnsl, so does gethostbyname.
-    ac_fn_c_check_func "$LINENO" "connect" "ac_cv_func_connect"
-if test "x$ac_cv_func_connect" = xyes; then :
+elif test $pkg_failed = untried; then
 
-fi
+      HAVE_X="no"
+      if test "x$required" = "xyes"; then
+        as_fn_error $? "$X_PKG_ERRORS" "$LINENO" 5
+      else
+        { $as_echo "$as_me:${as_lineno-$LINENO}: $X_PKG_ERRORS" >&5
+$as_echo "$as_me: $X_PKG_ERRORS" >&6;}
+      fi
 
-    if test $ac_cv_func_connect = no; then
-      { $as_echo "$as_me:${as_lineno-$LINENO}: checking for connect in -lsocket" >&5
-$as_echo_n "checking for connect in -lsocket... " >&6; }
-if ${ac_cv_lib_socket_connect+:} false; then :
-  $as_echo_n "(cached) " >&6
 else
-  ac_check_lib_save_LIBS=$LIBS
-LIBS="-lsocket $X_EXTRA_LIBS $LIBS"
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
+	X_CFLAGS=$pkg_cv_X_CFLAGS
+	X_LIBS=$pkg_cv_X_LIBS
+        { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
 
-/* 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 connect ();
-int
-main ()
-{
-return connect ();
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-  ac_cv_lib_socket_connect=yes
-else
-  ac_cv_lib_socket_connect=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_socket_connect" >&5
-$as_echo "$ac_cv_lib_socket_connect" >&6; }
-if test "x$ac_cv_lib_socket_connect" = xyes; then :
-  X_EXTRA_LIBS="-lsocket $X_EXTRA_LIBS"
-fi
-
-    fi
-
-    # Guillermo Gomez says -lposix is necessary on A/UX.
-    ac_fn_c_check_func "$LINENO" "remove" "ac_cv_func_remove"
-if test "x$ac_cv_func_remove" = xyes; then :
+      HAVE_X="yes"
 
 fi
 
-    if test $ac_cv_func_remove = no; then
-      { $as_echo "$as_me:${as_lineno-$LINENO}: checking for remove in -lposix" >&5
-$as_echo_n "checking for remove in -lposix... " >&6; }
-if ${ac_cv_lib_posix_remove+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  ac_check_lib_save_LIBS=$LIBS
-LIBS="-lposix  $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 remove ();
-int
-main ()
-{
-return remove ();
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-  ac_cv_lib_posix_remove=yes
-else
-  ac_cv_lib_posix_remove=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_posix_remove" >&5
-$as_echo "$ac_cv_lib_posix_remove" >&6; }
-if test "x$ac_cv_lib_posix_remove" = xyes; then :
-  X_EXTRA_LIBS="$X_EXTRA_LIBS -lposix"
-fi
-
-    fi
-
-    # BSDI BSD/OS 2.1 needs -lipc for XOpenDisplay.
-    ac_fn_c_check_func "$LINENO" "shmat" "ac_cv_func_shmat"
-if test "x$ac_cv_func_shmat" = xyes; then :
-
-fi
-
-    if test $ac_cv_func_shmat = no; then
-      { $as_echo "$as_me:${as_lineno-$LINENO}: checking for shmat in -lipc" >&5
-$as_echo_n "checking for shmat in -lipc... " >&6; }
-if ${ac_cv_lib_ipc_shmat+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  ac_check_lib_save_LIBS=$LIBS
-LIBS="-lipc  $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 shmat ();
-int
-main ()
-{
-return shmat ();
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-  ac_cv_lib_ipc_shmat=yes
-else
-  ac_cv_lib_ipc_shmat=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_ipc_shmat" >&5
-$as_echo "$ac_cv_lib_ipc_shmat" >&6; }
-if test "x$ac_cv_lib_ipc_shmat" = xyes; then :
-  X_EXTRA_LIBS="$X_EXTRA_LIBS -lipc"
-fi
-
-    fi
-  fi
-
-  # Check for libraries that X11R6 Xt/Xaw programs need.
-  ac_save_LDFLAGS=$LDFLAGS
-  test -n "$x_libraries" && LDFLAGS="$LDFLAGS -L$x_libraries"
-  # SM needs ICE to (dynamically) link under SunOS 4.x (so we have to
-  # check for ICE first), but we must link in the order -lSM -lICE or
-  # we get undefined symbols.  So assume we have SM if we have ICE.
-  # These have to be linked with before -lX11, unlike the other
-  # libraries we check for below, so use a different variable.
-  # John Interrante, Karl Berry
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for IceConnectionNumber in -lICE" >&5
-$as_echo_n "checking for IceConnectionNumber in -lICE... " >&6; }
-if ${ac_cv_lib_ICE_IceConnectionNumber+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  ac_check_lib_save_LIBS=$LIBS
-LIBS="-lICE $X_EXTRA_LIBS $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 IceConnectionNumber ();
-int
-main ()
-{
-return IceConnectionNumber ();
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-  ac_cv_lib_ICE_IceConnectionNumber=yes
-else
-  ac_cv_lib_ICE_IceConnectionNumber=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_ICE_IceConnectionNumber" >&5
-$as_echo "$ac_cv_lib_ICE_IceConnectionNumber" >&6; }
-if test "x$ac_cv_lib_ICE_IceConnectionNumber" = xyes; then :
-  X_PRE_LIBS="$X_PRE_LIBS -lSM -lICE"
-fi
-
-  LDFLAGS=$ac_save_LDFLAGS
-
-fi
-
-  ac_cflags_save="$CFLAGS"
-  ac_cppflags_save="$CPPFLAGS"
-  CFLAGS="$CFLAGS $X_CFLAGS"
-  CPPFLAGS="$CPPFLAGS $X_CFLAGS"
-
-    ac_fn_c_check_header_mongrel "$LINENO" "X11/Xlib.h" "ac_cv_header_X11_Xlib_h" "$ac_includes_default"
-if test "x$ac_cv_header_X11_Xlib_h" = xyes; then :
-  HAVE_X="yes"
-else
-  HAVE_X="no"
-fi
-
-
-
-  if test "x$HAVE_X" = "xno"
-  then
-    { $as_echo "$as_me:${as_lineno-$LINENO}: cannot find X11 development files" >&5
-$as_echo "$as_me: cannot find X11 development files" >&6;}
-  else
-        X_LIBS="$X_LIBS $X_PRE_LIBS $X_EXTRA_LIBS"
-            X_LIBS="$X_LIBS -lX11"
-
-
-  fi
-
-
-  CFLAGS="$ac_cflags_save"
-  CPPFLAGS="$ac_cppflags_save"
 
 
 
@@ -28139,105 +27642,99 @@
   HAVE_XVIDEO=no
 
 
-  if test x$HAVE_X = xyes; then
-    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for XvQueryExtension in -lXv_pic" >&5
-$as_echo_n "checking for XvQueryExtension in -lXv_pic... " >&6; }
-if ${ac_cv_lib_Xv_pic_XvQueryExtension+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  ac_check_lib_save_LIBS=$LIBS
-LIBS="-lXv_pic $X_LIBS -lXext $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 XvQueryExtension ();
-int
-main ()
-{
-return XvQueryExtension ();
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-  ac_cv_lib_Xv_pic_XvQueryExtension=yes
-else
-  ac_cv_lib_Xv_pic_XvQueryExtension=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_Xv_pic_XvQueryExtension" >&5
-$as_echo "$ac_cv_lib_Xv_pic_XvQueryExtension" >&6; }
-if test "x$ac_cv_lib_Xv_pic_XvQueryExtension" = xyes; then :
-  HAVE_XVIDEO="yes"
-else
-  HAVE_XVIDEO="no"
-fi
+  which="x11 xv"
+    required="no"
 
 
-    if test x$HAVE_XVIDEO = xyes; then
-      XVIDEO_LIBS="-lXv_pic -lXext"
+pkg_failed=no
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for XVIDEO" >&5
+$as_echo_n "checking for XVIDEO... " >&6; }
 
+if test -n "$PKG_CONFIG"; then
+    if test -n "$XVIDEO_CFLAGS"; then
+        pkg_cv_XVIDEO_CFLAGS="$XVIDEO_CFLAGS"
     else
-            if test x$HAVE_XVIDEO = xno; then
-        { $as_echo "$as_me:${as_lineno-$LINENO}: checking for XvQueryExtension in -lXv" >&5
-$as_echo_n "checking for XvQueryExtension in -lXv... " >&6; }
-if ${ac_cv_lib_Xv_XvQueryExtension+:} false; then :
-  $as_echo_n "(cached) " >&6
+        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_XVIDEO_CFLAGS=`$PKG_CONFIG --cflags "$which" 2>/dev/null`
 else
-  ac_check_lib_save_LIBS=$LIBS
-LIBS="-lXv $X_LIBS -lXext $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 XvQueryExtension ();
-int
-main ()
-{
-return XvQueryExtension ();
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-  ac_cv_lib_Xv_XvQueryExtension=yes
-else
-  ac_cv_lib_Xv_XvQueryExtension=no
+  pkg_failed=yes
 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_Xv_XvQueryExtension" >&5
-$as_echo "$ac_cv_lib_Xv_XvQueryExtension" >&6; }
-if test "x$ac_cv_lib_Xv_XvQueryExtension" = xyes; then :
-  HAVE_XVIDEO="yes"
-else
-  HAVE_XVIDEO="no"
-fi
-
-
-        if test x$HAVE_XVIDEO = xyes; then
-          XVIDEO_LIBS="-lXv -lXext"
-
-        fi
-      fi
     fi
-  fi
+else
+	pkg_failed=untried
+fi
+if test -n "$PKG_CONFIG"; then
+    if test -n "$XVIDEO_LIBS"; then
+        pkg_cv_XVIDEO_LIBS="$XVIDEO_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_XVIDEO_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
+	        XVIDEO_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "$which"`
+        else
+	        XVIDEO_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "$which"`
+        fi
+	# Put the nasty error message in config.log where it belongs
+	echo "$XVIDEO_PKG_ERRORS" >&5
+
+	{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+
+      HAVE_XVIDEO="no"
+      if test "x$required" = "xyes"; then
+        as_fn_error $? "$XVIDEO_PKG_ERRORS" "$LINENO" 5
+      else
+        { $as_echo "$as_me:${as_lineno-$LINENO}: $XVIDEO_PKG_ERRORS" >&5
+$as_echo "$as_me: $XVIDEO_PKG_ERRORS" >&6;}
+      fi
+
+elif test $pkg_failed = untried; then
+
+      HAVE_XVIDEO="no"
+      if test "x$required" = "xyes"; then
+        as_fn_error $? "$XVIDEO_PKG_ERRORS" "$LINENO" 5
+      else
+        { $as_echo "$as_me:${as_lineno-$LINENO}: $XVIDEO_PKG_ERRORS" >&5
+$as_echo "$as_me: $XVIDEO_PKG_ERRORS" >&6;}
+      fi
+
+else
+	XVIDEO_CFLAGS=$pkg_cv_XVIDEO_CFLAGS
+	XVIDEO_LIBS=$pkg_cv_XVIDEO_LIBS
+        { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+
+      HAVE_XVIDEO="yes"
+
+fi
+
 
 
 
@@ -28283,10 +27780,10 @@
 echo
 { $as_echo "$as_me:${as_lineno-$LINENO}: *** checking feature: X Shared Memory extension ***" >&5
 $as_echo "$as_me: *** checking feature: X Shared Memory extension ***" >&6;}
-if test "x" != "x"
+if test "x " != "x"
 then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: *** for plug-ins:  ***" >&5
-$as_echo "$as_me: *** for plug-ins:  ***" >&6;}
+  { $as_echo "$as_me:${as_lineno-$LINENO}: *** for plug-ins:   ***" >&5
+$as_echo "$as_me: *** for plug-ins:   ***" >&6;}
 fi
 NOUSE=
 if test "x$USE_XSHM" = "xno"; then
@@ -28305,15 +27802,15 @@
 
 if test "x$NOUSE" = "xyes"; then
   USE_XSHM="no"
-  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: ***  pre-configured not to be built" >&5
-$as_echo "$as_me: WARNING: ***  pre-configured not to be built" >&2;}
+  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: ***   pre-configured not to be built" >&5
+$as_echo "$as_me: WARNING: ***   pre-configured not to be built" >&2;}
 fi
 NOUSE=
 
 if echo " $GST_PLUGINS_NONPORTED " | tr , ' ' | grep -i " XSHM " > /dev/null; then
   USE_XSHM="no"
-  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: ***  not ported" >&5
-$as_echo "$as_me: WARNING: ***  not ported" >&2;}
+  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: ***   not ported" >&5
+$as_echo "$as_me: WARNING: ***   not ported" >&2;}
 fi
 
 
@@ -28328,13 +27825,87 @@
   HAVE_XSHM=no
 
   if test x$HAVE_X = xyes; then
-    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for XShmAttach in -lXext" >&5
+
+pkg_failed=no
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for XSHM" >&5
+$as_echo_n "checking for XSHM... " >&6; }
+
+if test -n "$PKG_CONFIG"; then
+    if test -n "$XSHM_CFLAGS"; then
+        pkg_cv_XSHM_CFLAGS="$XSHM_CFLAGS"
+    else
+        if test -n "$PKG_CONFIG" && \
+    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"xext\""; } >&5
+  ($PKG_CONFIG --exists --print-errors "xext") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+  pkg_cv_XSHM_CFLAGS=`$PKG_CONFIG --cflags "xext" 2>/dev/null`
+else
+  pkg_failed=yes
+fi
+    fi
+else
+	pkg_failed=untried
+fi
+if test -n "$PKG_CONFIG"; then
+    if test -n "$XSHM_LIBS"; then
+        pkg_cv_XSHM_LIBS="$XSHM_LIBS"
+    else
+        if test -n "$PKG_CONFIG" && \
+    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"xext\""; } >&5
+  ($PKG_CONFIG --exists --print-errors "xext") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+  pkg_cv_XSHM_LIBS=`$PKG_CONFIG --libs "xext" 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
+	        XSHM_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "xext"`
+        else
+	        XSHM_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "xext"`
+        fi
+	# Put the nasty error message in config.log where it belongs
+	echo "$XSHM_PKG_ERRORS" >&5
+
+	{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+
+      HAVE_XSHM="no"
+
+elif test $pkg_failed = untried; then
+
+      HAVE_XSHM="no"
+
+else
+	XSHM_CFLAGS=$pkg_cv_XSHM_CFLAGS
+	XSHM_LIBS=$pkg_cv_XSHM_LIBS
+        { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+
+      { $as_echo "$as_me:${as_lineno-$LINENO}: checking for XShmAttach in -lXext" >&5
 $as_echo_n "checking for XShmAttach in -lXext... " >&6; }
 if ${ac_cv_lib_Xext_XShmAttach+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   ac_check_lib_save_LIBS=$LIBS
-LIBS="-lXext $X_LIBS $LIBS"
+LIBS="-lXext  $X_LIBS  $LIBS"
 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
@@ -28365,60 +27936,18 @@
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_Xext_XShmAttach" >&5
 $as_echo "$ac_cv_lib_Xext_XShmAttach" >&6; }
 if test "x$ac_cv_lib_Xext_XShmAttach" = xyes; then :
-  HAVE_XSHM="yes"
+
+        HAVE_XSHM="yes"
+
 else
-  HAVE_XSHM="no"
+
+        HAVE_XSHM="no"
+        XSHM_LIBS=""
+
 fi
 
-    if test "x$HAVE_XSHM" = "xyes"; then
-      XSHM_LIBS="-lXext"
-    else
-            { $as_echo "$as_me:${as_lineno-$LINENO}: checking for XShmAttach in -lXextSam" >&5
-$as_echo_n "checking for XShmAttach in -lXextSam... " >&6; }
-if ${ac_cv_lib_XextSam_XShmAttach+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  ac_check_lib_save_LIBS=$LIBS
-LIBS="-lXextSam $X_LIBS $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 XShmAttach ();
-int
-main ()
-{
-return XShmAttach ();
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-  ac_cv_lib_XextSam_XShmAttach=yes
-else
-  ac_cv_lib_XextSam_XShmAttach=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_XextSam_XShmAttach" >&5
-$as_echo "$ac_cv_lib_XextSam_XShmAttach" >&6; }
-if test "x$ac_cv_lib_XextSam_XShmAttach" = xyes; then :
-  HAVE_XSHM="yes"
-else
-  HAVE_XSHM="no"
-fi
-
-      if test "x$HAVE_XSHM" = "xyes"; then
-	XSHM_LIBS="-lXext -lXextSam"
-      fi
-    fi
   fi
 
 
@@ -28431,7 +27960,8 @@
     if test x$HAVE_XSHM = xno; then
     USE_XSHM=no
   else
-    :
+    { $as_echo "$as_me:${as_lineno-$LINENO}: *** These plugins will be built:  " >&5
+$as_echo "$as_me: *** These plugins will be built:  " >&6;}
   fi
 fi
 if test x$USE_XSHM = xyes; then
@@ -28439,16 +27969,17 @@
 
 
 
-  if test "x" != "x"; then
-    GST_PLUGINS_YES="\t\n$GST_PLUGINS_YES"
+  if test "x " != "x"; then
+    GST_PLUGINS_YES="\t \n$GST_PLUGINS_YES"
   fi
 
 $as_echo "#define HAVE_XSHM /**/" >>confdefs.h
 
 else
-  :
-  if test "x" != "x"; then
-    GST_PLUGINS_NO="\t\n$GST_PLUGINS_NO"
+  { $as_echo "$as_me:${as_lineno-$LINENO}: *** These plugins will not be built:  " >&5
+$as_echo "$as_me: *** These plugins will not be built:  " >&6;}
+  if test "x " != "x"; then
+    GST_PLUGINS_NO="\t \n$GST_PLUGINS_NO"
   fi
   :
 fi
@@ -30790,6 +30321,189 @@
 
 
 
+echo
+{ $as_echo "$as_me:${as_lineno-$LINENO}: *** checking feature: glib GIO unix ***" >&5
+$as_echo "$as_me: *** checking feature: glib GIO unix ***" >&6;}
+if test "xgio-unix-2.0" != "x"
+then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: *** for plug-ins: gio-unix-2.0 ***" >&5
+$as_echo "$as_me: *** for plug-ins: gio-unix-2.0 ***" >&6;}
+fi
+NOUSE=
+if test "x$USE_GIO_UNIX_2_0" = "xno"; then
+  NOUSE="yes"
+fi
+# Check whether --enable-gio_unix_2_0 was given.
+if test "${enable_gio_unix_2_0+set}" = set; then :
+  enableval=$enable_gio_unix_2_0;  case "${enableval}" in
+      yes) USE_GIO_UNIX_2_0=yes;;
+      no) USE_GIO_UNIX_2_0=no;;
+      *) as_fn_error $? "bad value ${enableval} for --enable-gio_unix_2_0" "$LINENO" 5 ;;
+    esac
+else
+   USE_GIO_UNIX_2_0=yes
+fi
+
+if test "x$NOUSE" = "xyes"; then
+  USE_GIO_UNIX_2_0="no"
+  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: *** gio-unix-2.0 pre-configured not to be built" >&5
+$as_echo "$as_me: WARNING: *** gio-unix-2.0 pre-configured not to be built" >&2;}
+fi
+NOUSE=
+
+if echo " $GST_PLUGINS_NONPORTED " | tr , ' ' | grep -i " GIO_UNIX_2_0 " > /dev/null; then
+  USE_GIO_UNIX_2_0="no"
+  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: *** gio-unix-2.0 not ported" >&5
+$as_echo "$as_me: WARNING: *** gio-unix-2.0 not ported" >&2;}
+fi
+
+
+if test x$USE_GIO_UNIX_2_0 = 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_GIO_UNIX_2_0=no
+
+
+  which="gio-unix-2.0 >= 2.24"
+    required="no"
+
+
+pkg_failed=no
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for GIO_UNIX_2_0" >&5
+$as_echo_n "checking for GIO_UNIX_2_0... " >&6; }
+
+if test -n "$PKG_CONFIG"; then
+    if test -n "$GIO_UNIX_2_0_CFLAGS"; then
+        pkg_cv_GIO_UNIX_2_0_CFLAGS="$GIO_UNIX_2_0_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_GIO_UNIX_2_0_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 "$GIO_UNIX_2_0_LIBS"; then
+        pkg_cv_GIO_UNIX_2_0_LIBS="$GIO_UNIX_2_0_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_GIO_UNIX_2_0_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
+	        GIO_UNIX_2_0_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "$which"`
+        else
+	        GIO_UNIX_2_0_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "$which"`
+        fi
+	# Put the nasty error message in config.log where it belongs
+	echo "$GIO_UNIX_2_0_PKG_ERRORS" >&5
+
+	{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+
+      HAVE_GIO_UNIX_2_0="no"
+      if test "x$required" = "xyes"; then
+        as_fn_error $? "$GIO_UNIX_2_0_PKG_ERRORS" "$LINENO" 5
+      else
+        { $as_echo "$as_me:${as_lineno-$LINENO}: $GIO_UNIX_2_0_PKG_ERRORS" >&5
+$as_echo "$as_me: $GIO_UNIX_2_0_PKG_ERRORS" >&6;}
+      fi
+
+elif test $pkg_failed = untried; then
+
+      HAVE_GIO_UNIX_2_0="no"
+      if test "x$required" = "xyes"; then
+        as_fn_error $? "$GIO_UNIX_2_0_PKG_ERRORS" "$LINENO" 5
+      else
+        { $as_echo "$as_me:${as_lineno-$LINENO}: $GIO_UNIX_2_0_PKG_ERRORS" >&5
+$as_echo "$as_me: $GIO_UNIX_2_0_PKG_ERRORS" >&6;}
+      fi
+
+else
+	GIO_UNIX_2_0_CFLAGS=$pkg_cv_GIO_UNIX_2_0_CFLAGS
+	GIO_UNIX_2_0_LIBS=$pkg_cv_GIO_UNIX_2_0_LIBS
+        { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+
+      HAVE_GIO_UNIX_2_0="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_GIO_UNIX_2_0 = xno; then
+    USE_GIO_UNIX_2_0=no
+  else
+    { $as_echo "$as_me:${as_lineno-$LINENO}: *** These plugins will be built: gio-unix-2.0" >&5
+$as_echo "$as_me: *** These plugins will be built: gio-unix-2.0" >&6;}
+  fi
+fi
+if test x$USE_GIO_UNIX_2_0 = xyes; then
+  :
+  if test "xgio-unix-2.0" != "x"; then
+    GST_PLUGINS_YES="\tgio-unix-2.0\n$GST_PLUGINS_YES"
+  fi
+
+$as_echo "#define HAVE_GIO_UNIX_2_0 /**/" >>confdefs.h
+
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: *** These plugins will not be built: gio-unix-2.0" >&5
+$as_echo "$as_me: *** These plugins will not be built: gio-unix-2.0" >&6;}
+  if test "xgio-unix-2.0" != "x"; then
+    GST_PLUGINS_NO="\tgio-unix-2.0\n$GST_PLUGINS_NO"
+  fi
+  :
+fi
+ if test x$USE_GIO_UNIX_2_0 = xyes; then
+  USE_GIO_UNIX_2_0_TRUE=
+  USE_GIO_UNIX_2_0_FALSE='#'
+else
+  USE_GIO_UNIX_2_0_TRUE='#'
+  USE_GIO_UNIX_2_0_FALSE=
+fi
+
+
+
 if test "x$HAVE_VORBIS" = "xyes"; then
   ac_cflags_save="$CFLAGS"
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -31646,6 +31360,10 @@
   as_fn_error $? "conditional \"HAVE_CPU_ALPHA\" was never defined.
 Usually this means the macro was only invoked conditionally." "$LINENO" 5
 fi
+if test -z "${HAVE_CPU_ARC_TRUE}" && test -z "${HAVE_CPU_ARC_FALSE}"; then
+  as_fn_error $? "conditional \"HAVE_CPU_ARC\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
 if test -z "${HAVE_CPU_ARM_TRUE}" && test -z "${HAVE_CPU_ARM_FALSE}"; then
   as_fn_error $? "conditional \"HAVE_CPU_ARM\" was never defined.
 Usually this means the macro was only invoked conditionally." "$LINENO" 5
@@ -31898,6 +31616,10 @@
   as_fn_error $? "conditional \"USE_VORBIS\" was never defined.
 Usually this means the macro was only invoked conditionally." "$LINENO" 5
 fi
+if test -z "${USE_GIO_UNIX_2_0_TRUE}" && test -z "${USE_GIO_UNIX_2_0_FALSE}"; then
+  as_fn_error $? "conditional \"USE_GIO_UNIX_2_0\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
 if test -z "${USE_ALSA_TRUE}" && test -z "${USE_ALSA_FALSE}"; then
   as_fn_error $? "conditional \"USE_ALSA\" was never defined.
 Usually this means the macro was only invoked conditionally." "$LINENO" 5
@@ -32331,7 +32053,7 @@
 # report actual input values of CONFIG_FILES etc. instead of their
 # values after options handling.
 ac_log="
-This file was extended by GStreamer Base Plug-ins $as_me 1.4.5, which was
+This file was extended by GStreamer Base Plug-ins $as_me 1.5.91, which was
 generated by GNU Autoconf 2.69.  Invocation command line was
 
   CONFIG_FILES    = $CONFIG_FILES
@@ -32397,7 +32119,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 Base Plug-ins config.status 1.4.5
+GStreamer Base Plug-ins config.status 1.5.91
 configured by $0, generated by GNU Autoconf 2.69,
   with options \\"\$ac_cs_config\\"
 
diff --git a/configure.ac b/configure.ac
index 4633c84..1fa222a 100644
--- a/configure.ac
+++ b/configure.ac
@@ -1,16 +1,16 @@
-AC_PREREQ([2.68])
+AC_PREREQ([2.69])
 
 dnl please read gstreamer/docs/random/autotools before changing this file
 
 dnl initialize autoconf
 dnl releases only do -Wall, git and prerelease does -Werror too
 dnl use a three digit version number for releases, and four for git/prerelease
-AC_INIT([GStreamer Base Plug-ins],[1.4.5],[http://bugzilla.gnome.org/enter_bug.cgi?product=GStreamer],[gst-plugins-base])
+AC_INIT([GStreamer Base Plug-ins],[1.5.91],[http://bugzilla.gnome.org/enter_bug.cgi?product=GStreamer],[gst-plugins-base])
 
 AG_GST_INIT
 
 dnl initialize automake
-AM_INIT_AUTOMAKE([-Wno-portability 1.11 no-dist-gzip dist-xz tar-ustar subdir-objects])
+AM_INIT_AUTOMAKE([-Wno-portability 1.14 no-dist-gzip dist-xz tar-ustar subdir-objects])
 
 dnl define PACKAGE_VERSION_* variables
 AS_VERSION
@@ -56,10 +56,10 @@
 dnl      1.10.9 (who knows) => 1009
 dnl
 dnl sets GST_LT_LDFLAGS
-AS_LIBTOOL(GST, 405, 0, 405)
+AS_LIBTOOL(GST, 591, 0, 591)
 
 dnl *** required versions of GStreamer stuff ***
-GST_REQ=1.4.0
+GST_REQ=1.5.91
 
 dnl *** autotools stuff ****
 
@@ -250,11 +250,12 @@
 GLIB_REQ=2.32
 AG_GST_GLIB_CHECK([$GLIB_REQ])
 
-ORC_CHECK([0.4.18])
+ORC_CHECK([0.4.23])
 
 dnl checks for gstreamer
 dnl uninstalled is selected preferentially -- see pkg-config(1)
 AG_GST_CHECK_GST($GST_API_VERSION, [$GST_REQ], yes)
+AG_GST_CHECK_GST_NET($GST_API_VERSION, [$GST_REQ], yes)
 AG_GST_CHECK_GST_BASE($GST_API_VERSION, [$GST_REQ], yes)
 AG_GST_CHECK_GST_CONTROLLER($GST_API_VERSION, [$GST_REQ], yes)
 AG_GST_CHECK_GST_CHECK($GST_API_VERSION, [$GST_REQ], no)
@@ -269,7 +270,7 @@
 dnl GTK is optional and only used in examples
 HAVE_GTK=no
 HAVE_GTK_X11=no
-GTK_REQ=3.0.0
+GTK_REQ=3.10
 if test "x$BUILD_EXAMPLES" = "xyes"; then
   PKG_CHECK_MODULES(GTK, gtk+-3.0 >= $GTK_REQ, HAVE_GTK=yes, HAVE_GTK=no)
   dnl some examples need gtk+-x11
@@ -542,34 +543,30 @@
 translit(dnm, m, l) AM_CONDITIONAL(USE_X, true)
 AG_GST_CHECK_FEATURE(X, [X libraries and plugins],
                   [ximagesink], [
-  AG_GST_CHECK_X
+  AG_GST_PKG_CHECK_MODULES(X, x11)
 ])
 
 dnl Check for Xv extension
 translit(dnm, m, l) AM_CONDITIONAL(USE_XVIDEO, true)
 AG_GST_CHECK_FEATURE(XVIDEO, [X11 XVideo extensions],
                   [xvimagesink], [
-  AG_GST_CHECK_XV
+  AG_GST_PKG_CHECK_MODULES(XVIDEO, x11 xv)
 ])
 
 dnl check for X Shm
 translit(dnm, m, l) AM_CONDITIONAL(USE_XSHM, true)
-AG_GST_CHECK_FEATURE(XSHM, [X Shared Memory extension], , [
+AG_GST_CHECK_FEATURE(XSHM, [X Shared Memory extension], [ ], [
   if test x$HAVE_X = xyes; then
-    AC_CHECK_LIB(Xext, XShmAttach,
-		 HAVE_XSHM="yes", HAVE_XSHM="no",
-		 $X_LIBS)
-    if test "x$HAVE_XSHM" = "xyes"; then
-      XSHM_LIBS="-lXext"
-    else
-      dnl On AIX, it is in XextSam instead, but we still need -lXext
-      AC_CHECK_LIB(XextSam, XShmAttach,
-		   HAVE_XSHM="yes", HAVE_XSHM="no",
-		   $X_LIBS)
-      if test "x$HAVE_XSHM" = "xyes"; then
-	XSHM_LIBS="-lXext -lXextSam"
-      fi
-    fi
+    PKG_CHECK_MODULES(XSHM, xext, [
+      AC_CHECK_LIB(Xext, XShmAttach, [
+        HAVE_XSHM="yes"
+      ], [
+        HAVE_XSHM="no"
+        XSHM_LIBS=""
+      ], [ $X_LIBS ])
+    ], [
+      HAVE_XSHM="no"
+    ])
   fi
 ], , [
   AC_SUBST(HAVE_XSHM)
@@ -706,6 +703,12 @@
   AG_GST_PKG_CHECK_MODULES(VORBIS, vorbis >= 1.0 vorbisenc >= 1.0)
 ])
 
+dnl *** gio-unix-2.0 for tests/check/pipelines/tcp.c ***
+translit(dnm, m, l) AM_CONDITIONAL(USE_GIO_UNIX_2_0, true)
+AG_GST_CHECK_FEATURE(GIO_UNIX_2_0, [glib GIO unix], gio-unix-2.0, [
+  AG_GST_PKG_CHECK_MODULES(GIO_UNIX_2_0, gio-unix-2.0 >= 2.24)
+])
+
 if test "x$HAVE_VORBIS" = "xyes"; then
   ac_cflags_save="$CFLAGS"
   AC_COMPILE_IFELSE([
diff --git a/depcomp b/depcomp
index 4ebd5b3..fc98710 100755
--- a/depcomp
+++ b/depcomp
@@ -3,7 +3,7 @@
 
 scriptversion=2013-05-30.07; # UTC
 
-# Copyright (C) 1999-2013 Free Software Foundation, Inc.
+# Copyright (C) 1999-2014 Free Software Foundation, Inc.
 
 # 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
diff --git a/docs/Makefile.in b/docs/Makefile.in
index 18d319c..dfa6f04 100644
--- a/docs/Makefile.in
+++ b/docs/Makefile.in
@@ -1,7 +1,7 @@
-# Makefile.in generated by automake 1.14.1 from Makefile.am.
+# Makefile.in generated by automake 1.15 from Makefile.am.
 # @configure_input@
 
-# Copyright (C) 1994-2013 Free Software Foundation, Inc.
+# 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,
@@ -14,7 +14,17 @@
 
 @SET_MAKE@
 VPATH = @srcdir@
-am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)'
+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 \
       ?) ;; \
@@ -79,8 +89,6 @@
 host_triplet = @host@
 target_triplet = @target@
 subdir = docs
-DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \
-	$(srcdir)/version.entities.in
 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 \
@@ -101,7 +109,6 @@
 	$(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-x11.m4 \
 	$(top_srcdir)/common/m4/gst.m4 \
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
@@ -118,6 +125,7 @@
 	$(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
 mkinstalldirs = $(install_sh) -d
 CONFIG_HEADER = $(top_builddir)/config.h
 CONFIG_CLEAN_FILES = version.entities
@@ -176,6 +184,7 @@
   done | $(am__uniquify_input)`
 ETAGS = etags
 CTAGS = ctags
+am__DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/version.entities.in
 DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
 am__relativize = \
   dir0=`pwd`; \
@@ -261,6 +270,8 @@
 GIO_CFLAGS = @GIO_CFLAGS@
 GIO_LDFLAGS = @GIO_LDFLAGS@
 GIO_LIBS = @GIO_LIBS@
+GIO_UNIX_2_0_CFLAGS = @GIO_UNIX_2_0_CFLAGS@
+GIO_UNIX_2_0_LIBS = @GIO_UNIX_2_0_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
@@ -290,6 +301,8 @@
 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_OPTION_CFLAGS = @GST_OPTION_CFLAGS@
 GST_OPTION_CXXFLAGS = @GST_OPTION_CXXFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
@@ -317,7 +330,6 @@
 GTK_X11_CFLAGS = @GTK_X11_CFLAGS@
 GTK_X11_LIBS = @GTK_X11_LIBS@
 HAVE_CDPARANOIA = @HAVE_CDPARANOIA@
-HAVE_X = @HAVE_X@
 HAVE_XSHM = @HAVE_XSHM@
 HAVE_ZLIB = @HAVE_ZLIB@
 HTML_DIR = @HTML_DIR@
@@ -332,6 +344,7 @@
 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@
@@ -421,13 +434,12 @@
 XGETTEXT = @XGETTEXT@
 XGETTEXT_015 = @XGETTEXT_015@
 XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
-XMKMF = @XMKMF@
+XSHM_CFLAGS = @XSHM_CFLAGS@
 XSHM_LIBS = @XSHM_LIBS@
+XVIDEO_CFLAGS = @XVIDEO_CFLAGS@
 XVIDEO_LIBS = @XVIDEO_LIBS@
 X_CFLAGS = @X_CFLAGS@
-X_EXTRA_LIBS = @X_EXTRA_LIBS@
 X_LIBS = @X_LIBS@
-X_PRE_LIBS = @X_PRE_LIBS@
 ZLIB_CFLAGS = @ZLIB_CFLAGS@
 ZLIB_LIBS = @ZLIB_LIBS@
 abs_builddir = @abs_builddir@
@@ -480,6 +492,7 @@
 psdir = @psdir@
 pyexecdir = @pyexecdir@
 pythondir = @pythondir@
+runstatedir = @runstatedir@
 sbindir = @sbindir@
 sharedstatedir = @sharedstatedir@
 srcdir = @srcdir@
@@ -515,7 +528,6 @@
 	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu docs/Makefile'; \
 	$(am__cd) $(top_srcdir) && \
 	  $(AUTOMAKE) --gnu docs/Makefile
-.PRECIOUS: Makefile
 Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
 	@case '$?' in \
 	  *config.status*) \
@@ -812,6 +824,8 @@
 	mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \
 	ps ps-am tags tags-am uninstall uninstall-am
 
+.PRECIOUS: Makefile
+
 
 upload:
 	@if test "x$(SUBDIRS)" != x; then for a in $(SUBDIRS); do cd $$a; make upload; cd ..; done; fi
diff --git a/docs/design/Makefile.in b/docs/design/Makefile.in
index 0c459c2..8007572 100644
--- a/docs/design/Makefile.in
+++ b/docs/design/Makefile.in
@@ -1,7 +1,7 @@
-# Makefile.in generated by automake 1.14.1 from Makefile.am.
+# Makefile.in generated by automake 1.15 from Makefile.am.
 # @configure_input@
 
-# Copyright (C) 1994-2013 Free Software Foundation, Inc.
+# 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,
@@ -14,7 +14,17 @@
 
 @SET_MAKE@
 VPATH = @srcdir@
-am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)'
+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 \
       ?) ;; \
@@ -79,7 +89,6 @@
 host_triplet = @host@
 target_triplet = @target@
 subdir = docs/design
-DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am
 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 \
@@ -100,7 +109,6 @@
 	$(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-x11.m4 \
 	$(top_srcdir)/common/m4/gst.m4 \
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
@@ -117,6 +125,7 @@
 	$(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
 mkinstalldirs = $(install_sh) -d
 CONFIG_HEADER = $(top_builddir)/config.h
 CONFIG_CLEAN_FILES =
@@ -176,6 +185,7 @@
 ETAGS = etags
 CTAGS = ctags
 DIST_SUBDIRS = $(SUBDIRS)
+am__DIST_COMMON = $(srcdir)/Makefile.in
 DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
 am__relativize = \
   dir0=`pwd`; \
@@ -261,6 +271,8 @@
 GIO_CFLAGS = @GIO_CFLAGS@
 GIO_LDFLAGS = @GIO_LDFLAGS@
 GIO_LIBS = @GIO_LIBS@
+GIO_UNIX_2_0_CFLAGS = @GIO_UNIX_2_0_CFLAGS@
+GIO_UNIX_2_0_LIBS = @GIO_UNIX_2_0_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
@@ -290,6 +302,8 @@
 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_OPTION_CFLAGS = @GST_OPTION_CFLAGS@
 GST_OPTION_CXXFLAGS = @GST_OPTION_CXXFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
@@ -317,7 +331,6 @@
 GTK_X11_CFLAGS = @GTK_X11_CFLAGS@
 GTK_X11_LIBS = @GTK_X11_LIBS@
 HAVE_CDPARANOIA = @HAVE_CDPARANOIA@
-HAVE_X = @HAVE_X@
 HAVE_XSHM = @HAVE_XSHM@
 HAVE_ZLIB = @HAVE_ZLIB@
 HTML_DIR = @HTML_DIR@
@@ -332,6 +345,7 @@
 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@
@@ -421,13 +435,12 @@
 XGETTEXT = @XGETTEXT@
 XGETTEXT_015 = @XGETTEXT_015@
 XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
-XMKMF = @XMKMF@
+XSHM_CFLAGS = @XSHM_CFLAGS@
 XSHM_LIBS = @XSHM_LIBS@
+XVIDEO_CFLAGS = @XVIDEO_CFLAGS@
 XVIDEO_LIBS = @XVIDEO_LIBS@
 X_CFLAGS = @X_CFLAGS@
-X_EXTRA_LIBS = @X_EXTRA_LIBS@
 X_LIBS = @X_LIBS@
-X_PRE_LIBS = @X_PRE_LIBS@
 ZLIB_CFLAGS = @ZLIB_CFLAGS@
 ZLIB_LIBS = @ZLIB_LIBS@
 abs_builddir = @abs_builddir@
@@ -480,6 +493,7 @@
 psdir = @psdir@
 pyexecdir = @pyexecdir@
 pythondir = @pythondir@
+runstatedir = @runstatedir@
 sbindir = @sbindir@
 sharedstatedir = @sharedstatedir@
 srcdir = @srcdir@
@@ -523,7 +537,6 @@
 	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu docs/design/Makefile'; \
 	$(am__cd) $(top_srcdir) && \
 	  $(AUTOMAKE) --gnu docs/design/Makefile
-.PRECIOUS: Makefile
 Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
 	@case '$?' in \
 	  *config.status*) \
@@ -818,6 +831,8 @@
 	mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \
 	ps ps-am tags tags-am uninstall uninstall-am
 
+.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.
diff --git a/docs/design/part-mediatype-video-raw.txt b/docs/design/part-mediatype-video-raw.txt
index ad8f256..541b366 100644
--- a/docs/design/part-mediatype-video-raw.txt
+++ b/docs/design/part-mediatype-video-raw.txt
@@ -1197,6 +1197,7 @@
  "GBR_10LE" planar 4:4:4 RGB, 10 bits per channel
 
  "NV16" planar 4:2:2 YUV with interleaved UV plane
+ "NV61" planar 4:2:2 YUV with interleaved VU plane
  "NV24" planar 4:4:4 YUV with interleaved UV plane
 
 
diff --git a/docs/libs/Makefile.am b/docs/libs/Makefile.am
index 54126f8..dcbad51 100644
--- a/docs/libs/Makefile.am
+++ b/docs/libs/Makefile.am
@@ -70,9 +70,6 @@
 	$(top_builddir)/gst-libs/gst/riff/libgstriff-@GST_API_VERSION@.la \
 	$(GST_BASE_LIBS)
 
-GTKDOC_CC=$(LIBTOOL) --tag=CC --mode=compile $(CC)
-GTKDOC_LD=$(LIBTOOL) --tag=CC --mode=link $(CC)
-
 # If you need to override some of the declarations, place them in this file
 DOC_OVERRIDES = $(DOC_MODULE)-overrides.txt
 
diff --git a/docs/libs/Makefile.in b/docs/libs/Makefile.in
index a92d416..eac4219 100644
--- a/docs/libs/Makefile.in
+++ b/docs/libs/Makefile.in
@@ -1,7 +1,7 @@
-# Makefile.in generated by automake 1.14.1 from Makefile.am.
+# Makefile.in generated by automake 1.15 from Makefile.am.
 # @configure_input@
 
-# Copyright (C) 1994-2013 Free Software Foundation, Inc.
+# 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,
@@ -33,7 +33,17 @@
 ###########################################################################
 # thomas: except of course that we did
 VPATH = @srcdir@
-am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)'
+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 \
       ?) ;; \
@@ -97,9 +107,6 @@
 build_triplet = @build@
 host_triplet = @host@
 target_triplet = @target@
-DIST_COMMON = $(top_srcdir)/common/upload-doc.mak \
-	$(top_srcdir)/common/gtk-doc.mak $(srcdir)/Makefile.in \
-	$(srcdir)/Makefile.am
 subdir = docs/libs
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
 am__aclocal_m4_deps = $(top_srcdir)/common/m4/as-ac-expand.m4 \
@@ -121,7 +128,6 @@
 	$(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-x11.m4 \
 	$(top_srcdir)/common/m4/gst.m4 \
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
@@ -138,6 +144,7 @@
 	$(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
 mkinstalldirs = $(install_sh) -d
 CONFIG_HEADER = $(top_builddir)/config.h
 CONFIG_CLEAN_FILES =
@@ -162,6 +169,9 @@
     *) (install-info --version) >/dev/null 2>&1;; \
   esac
 am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+am__DIST_COMMON = $(srcdir)/Makefile.in \
+	$(top_srcdir)/common/gtk-doc.mak \
+	$(top_srcdir)/common/upload-doc.mak
 DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
 ACLOCAL = @ACLOCAL@
 ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@
@@ -222,6 +232,8 @@
 GIO_CFLAGS = @GIO_CFLAGS@
 GIO_LDFLAGS = @GIO_LDFLAGS@
 GIO_LIBS = @GIO_LIBS@
+GIO_UNIX_2_0_CFLAGS = @GIO_UNIX_2_0_CFLAGS@
+GIO_UNIX_2_0_LIBS = @GIO_UNIX_2_0_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
@@ -251,6 +263,8 @@
 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_OPTION_CFLAGS = @GST_OPTION_CFLAGS@
 GST_OPTION_CXXFLAGS = @GST_OPTION_CXXFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
@@ -278,7 +292,6 @@
 GTK_X11_CFLAGS = @GTK_X11_CFLAGS@
 GTK_X11_LIBS = @GTK_X11_LIBS@
 HAVE_CDPARANOIA = @HAVE_CDPARANOIA@
-HAVE_X = @HAVE_X@
 HAVE_XSHM = @HAVE_XSHM@
 HAVE_ZLIB = @HAVE_ZLIB@
 HTML_DIR = @HTML_DIR@
@@ -293,6 +306,7 @@
 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@
@@ -382,13 +396,12 @@
 XGETTEXT = @XGETTEXT@
 XGETTEXT_015 = @XGETTEXT_015@
 XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
-XMKMF = @XMKMF@
+XSHM_CFLAGS = @XSHM_CFLAGS@
 XSHM_LIBS = @XSHM_LIBS@
+XVIDEO_CFLAGS = @XVIDEO_CFLAGS@
 XVIDEO_LIBS = @XVIDEO_LIBS@
 X_CFLAGS = @X_CFLAGS@
-X_EXTRA_LIBS = @X_EXTRA_LIBS@
 X_LIBS = @X_LIBS@
-X_PRE_LIBS = @X_PRE_LIBS@
 ZLIB_CFLAGS = @ZLIB_CFLAGS@
 ZLIB_LIBS = @ZLIB_LIBS@
 abs_builddir = @abs_builddir@
@@ -441,6 +454,7 @@
 psdir = @psdir@
 pyexecdir = @pyexecdir@
 pythondir = @pythondir@
+runstatedir = @runstatedir@
 sbindir = @sbindir@
 sharedstatedir = @sharedstatedir@
 srcdir = @srcdir@
@@ -528,13 +542,16 @@
 	$(top_builddir)/gst-libs/gst/riff/libgstriff-@GST_API_VERSION@.la \
 	$(GST_BASE_LIBS)
 
-GTKDOC_CC = $(LIBTOOL) --tag=CC --mode=compile $(CC)
-GTKDOC_LD = $(LIBTOOL) --tag=CC --mode=link $(CC)
 
 # If you need to override some of the declarations, place them in this file
 DOC_OVERRIDES = $(DOC_MODULE)-overrides.txt
+@GTK_DOC_USE_LIBTOOL_FALSE@GTKDOC_CC = $(CC) $(INCLUDES) $(GTKDOC_DEPS_CFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+@GTK_DOC_USE_LIBTOOL_TRUE@GTKDOC_CC = $(LIBTOOL) --tag=CC --mode=compile $(CC) $(INCLUDES) $(GTKDOC_DEPS_CFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+@GTK_DOC_USE_LIBTOOL_FALSE@GTKDOC_LD = $(CC) $(GTKDOC_DEPS_LIBS) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS)
+@GTK_DOC_USE_LIBTOOL_TRUE@GTKDOC_LD = $(LIBTOOL) --tag=CC --mode=link $(CC) $(GTKDOC_DEPS_LIBS) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS)
+@GTK_DOC_USE_LIBTOOL_FALSE@GTKDOC_RUN = 
+@GTK_DOC_USE_LIBTOOL_TRUE@GTKDOC_RUN = $(LIBTOOL) --mode=execute
 
-# thomas: copied from glib-2
 # We set GPATH here; this gives us semantics for GNU make
 # which are more like other make's VPATH, when it comes to
 # whether a source that is a target of one rule is then
@@ -590,7 +607,6 @@
 	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu docs/libs/Makefile'; \
 	$(am__cd) $(top_srcdir) && \
 	  $(AUTOMAKE) --gnu docs/libs/Makefile
-.PRECIOUS: Makefile
 Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
 	@case '$?' in \
 	  *config.status*) \
@@ -599,7 +615,7 @@
 	    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/upload-doc.mak $(top_srcdir)/common/gtk-doc.mak:
+$(top_srcdir)/common/upload-doc.mak $(top_srcdir)/common/gtk-doc.mak $(am__empty):
 
 $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
 	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
@@ -771,6 +787,8 @@
 	mostlyclean-libtool pdf pdf-am ps ps-am tags-am uninstall \
 	uninstall-am uninstall-local
 
+.PRECIOUS: Makefile
+
 html: html-build.stamp
 
 upload: $(FORMATS)
@@ -853,15 +871,22 @@
 @ENABLE_GTK_DOC_TRUE@		--ignore-headers="$(IGNORE_HFILES)"
 @ENABLE_GTK_DOC_TRUE@	@if grep -l '^..*$$' $(DOC_MODULE).types > /dev/null; then	\
 @ENABLE_GTK_DOC_TRUE@	    echo "  DOC   Introspecting gobjects"; \
+@ENABLE_GTK_DOC_TRUE@	    scanobj_options=""; \
+@ENABLE_GTK_DOC_TRUE@	    gtkdoc-scangobj 2>&1 --help | grep  >/dev/null "\-\-verbose"; \
+@ENABLE_GTK_DOC_TRUE@	    if test "$$?" = "0"; then \
+@ENABLE_GTK_DOC_TRUE@	        if test "x$(V)" = "x1"; then \
+@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_REGISTRY_1_0=doc-registry.xml				\
 @ENABLE_GTK_DOC_TRUE@	    $(GTKDOC_EXTRA_ENVIRONMENT)					\
-@ENABLE_GTK_DOC_TRUE@	    CC="$(GTKDOC_CC)" LD="$(GTKDOC_LD)"				\
+@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@	        --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@	       test -f $$i || touch $$i ;				\
diff --git a/docs/libs/gst-plugins-base-libs-docs.sgml b/docs/libs/gst-plugins-base-libs-docs.sgml
index 3da30ad..7767abf 100644
--- a/docs/libs/gst-plugins-base-libs-docs.sgml
+++ b/docs/libs/gst-plugins-base-libs-docs.sgml
@@ -29,6 +29,7 @@
         <filename>-lgstallocators-&GST_API_VERSION;</filename> to the library flags.
       </para>
       <xi:include href="xml/gstdmabuf.xml" />
+      <xi:include href="xml/gstfdmemory.xml" />
     </chapter>
 
     <chapter id="gstreamer-app">
@@ -198,6 +199,10 @@
       <xi:include href="xml/gstvideometa.xml" />
       <xi:include href="xml/gstvideooverlaycomposition.xml" />
       <xi:include href="xml/gstvideofilter.xml" />
+      <xi:include href="xml/gstvideodither.xml" />
+      <xi:include href="xml/gstvideochroma.xml" />
+      <xi:include href="xml/gstvideoresampler.xml" />
+      <xi:include href="xml/gstvideoscaler.xml" />
       <xi:include href="xml/gstvideosink.xml" />
       <xi:include href="xml/gstcolorbalance.xml" />
       <xi:include href="xml/gstcolorbalancechannel.xml" />
diff --git a/docs/libs/gst-plugins-base-libs-sections.txt b/docs/libs/gst-plugins-base-libs-sections.txt
index a7cbf7f..444dc8f 100644
--- a/docs/libs/gst-plugins-base-libs-sections.txt
+++ b/docs/libs/gst-plugins-base-libs-sections.txt
@@ -4,11 +4,36 @@
 <FILE>gstdmabuf</FILE>
 <TITLE>dmabuf</TITLE>
 <INCLUDE>gst/allocators/gstdmabuf.h</INCLUDE>
+gst_dmabuf_allocator_new
 gst_dmabuf_allocator_alloc
-gst_dmabuf_allocator_obtain
 gst_dmabuf_memory_get_fd
 gst_is_dmabuf_memory
 <SUBSECTION Standard>
+GST_ALLOCATOR_DMABUF
+<SUBSECTION Private>
+</SECTION>
+
+<SECTION>
+<FILE>gstfdmemory</FILE>
+<TITLE>fdmemory</TITLE>
+<INCLUDE>gst/allocators/gstfdmemory.h</INCLUDE>
+GstFdMemoryFlags
+gst_fd_allocator_alloc
+gst_fd_allocator_get_type
+gst_fd_allocator_new
+gst_fd_memory_get_fd
+gst_is_fd_memory
+<SUBSECTION Standard>
+GstFdAllocator
+GstFdAllocatorClass
+GST_ALLOCATOR_FD
+GST_FD_ALLOCATOR
+GST_FD_ALLOCATOR_CAST
+GST_FD_ALLOCATOR_CLASS
+GST_FD_ALLOCATOR_GET_CLASS
+GST_IS_FD_ALLOCATOR
+GST_IS_FD_ALLOCATOR_CLASS
+GST_TYPE_FD_ALLOCATOR
 <SUBSECTION Private>
 </SECTION>
 
@@ -34,6 +59,7 @@
 GstAppSrcCallbacks
 gst_app_src_set_callbacks
 gst_app_src_push_buffer
+gst_app_src_push_sample
 gst_app_src_end_of_stream
 <SUBSECTION Standard>
 GstAppSrcClass
@@ -140,7 +166,6 @@
 GST_AUDIO_INFO_DEPTH
 GST_AUDIO_INFO_FLAGS
 GST_AUDIO_INFO_FORMAT
-GST_AUDIO_INFO_HAS_DEFAULT_POSITIONS
 GST_AUDIO_INFO_NAME
 GST_AUDIO_INFO_POSITION
 GST_AUDIO_INFO_RATE
@@ -234,6 +259,7 @@
 GstAudioCdSrcMode
 gst_audio_cd_src_add_track
 <SUBSECTION Standard>
+GstAudioCdSrcPrivate
 GST_TYPE_AUDIO_CD_SRC_MODE
 gst_audio_cd_src_mode_get_type
 GST_AUDIO_CD_SRC
@@ -282,6 +308,7 @@
 gst_audio_decoder_set_plc_aware
 gst_audio_decoder_set_tolerance
 gst_audio_decoder_merge_tags
+gst_audio_decoder_proxy_getcaps
 <SUBSECTION Standard>
 GST_AUDIO_DECODER
 GST_IS_AUDIO_DECODER
@@ -299,7 +326,6 @@
 <INCLUDE>gst/audio/gstaudioencoder.h</INCLUDE>
 GstAudioEncoder
 GstAudioEncoderClass
-GST_AUDIO_ENCODER_SEGMENT
 GST_AUDIO_ENCODER_SINK_NAME
 GST_AUDIO_ENCODER_SINK_PAD
 GST_AUDIO_ENCODER_SRC_NAME
@@ -400,6 +426,7 @@
 GST_AUDIO_SRC_CLASS
 GST_IS_AUDIO_SRC_CLASS
 GST_AUDIO_SRC_GET_CLASS
+GST_AUDIO_BASE_SRC_CAST
 </SECTION>
 
 <SECTION>
@@ -408,6 +435,8 @@
 GstAudioBaseSink
 GstAudioBaseSinkClass
 GstAudioBaseSinkSlaveMethod
+GstAudioBaseSinkDiscontReason
+GstAudioBaseSinkCustomSlavingCallback
 
 GST_AUDIO_BASE_SINK_CLOCK
 GST_AUDIO_BASE_SINK_PAD
@@ -422,6 +451,8 @@
 gst_audio_base_sink_get_alignment_threshold
 gst_audio_base_sink_set_discont_wait
 gst_audio_base_sink_get_discont_wait
+gst_audio_base_sink_set_custom_slaving_callback
+gst_audio_base_sink_report_device_failure
 <SUBSECTION Standard>
 GST_AUDIO_BASE_SINK
 GST_IS_AUDIO_BASE_SINK
@@ -430,6 +461,7 @@
 GST_AUDIO_BASE_SINK_CLASS
 GST_IS_AUDIO_BASE_SINK_CLASS
 GST_AUDIO_BASE_SINK_GET_CLASS
+GST_AUDIO_BASE_SINK_CAST
 GstAudioBaseSinkPrivate
 gst_audio_base_sink_slave_method_get_type
 GST_TYPE_AUDIO_BASE_SINK_SLAVE_METHOD
@@ -683,7 +715,7 @@
 gst_color_balance_get_balance_type
 <SUBSECTION Standard>
 GST_COLOR_BALANCE
-GST_COLOR_BALANCE_GET_INTERACE
+GST_COLOR_BALANCE_GET_INTERFACE
 GST_COLOR_BALANCE_TYPE
 GST_IS_COLOR_BALANCE
 GST_TYPE_COLOR_BALANCE
@@ -728,9 +760,11 @@
 gst_navigation_message_get_type
 gst_navigation_message_new_angles_changed
 gst_navigation_message_new_commands_changed
+gst_navigation_message_new_event
 gst_navigation_message_new_mouse_over
-gst_navigation_message_parse_mouse_over
 gst_navigation_message_parse_angles_changed
+gst_navigation_message_parse_event
+gst_navigation_message_parse_mouse_over
 gst_navigation_query_new_angles
 gst_navigation_query_get_type
 gst_navigation_query_new_commands
@@ -906,6 +940,7 @@
 GST_RIFF_I420
 GST_RIFF_IDIT
 GST_RIFF_IJPG
+GST_RIFF_INFO_IAAR
 GST_RIFF_INFO_IARL
 GST_RIFF_INFO_IART
 GST_RIFF_INFO_ICMS
@@ -929,6 +964,7 @@
 GST_RIFF_INFO_ISRC
 GST_RIFF_INFO_ISRF
 GST_RIFF_INFO_ITCH
+GST_RIFF_INFO_ITRK
 GST_RIFF_ISBJ
 GST_RIFF_ISFT
 GST_RIFF_IV31
@@ -943,6 +979,8 @@
 GST_RIFF_LIST_adtl
 GST_RIFF_LIST_hdrl
 GST_RIFF_LIST_movi
+GST_RIFF_LIST_ncdt
+GST_RIFF_LIST_nctg
 GST_RIFF_LIST_odml
 GST_RIFF_LIST_strl
 GST_RIFF_M263
@@ -961,14 +999,18 @@
 GST_RIFF_RLE8
 GST_RIFF_RT21
 GST_RIFF_SFMC
-GST_RIFF_TAG_acid
 GST_RIFF_TAG_AVF0
 GST_RIFF_TAG_BEXT
+GST_RIFF_TAG_FLLR
+GST_RIFF_TAG_ID32
+GST_RIFF_TAG_IDVX
 GST_RIFF_TAG_JUNK
 GST_RIFF_TAG_JUNQ
 GST_RIFF_TAG_LIST
+GST_RIFF_TAG_RF64
 GST_RIFF_TAG_RIFF
 GST_RIFF_TAG_RIFX
+GST_RIFF_TAG_acid
 GST_RIFF_TAG_avih
 GST_RIFF_TAG_bext
 GST_RIFF_TAG_cue
@@ -976,9 +1018,13 @@
 GST_RIFF_TAG_dmlh
 GST_RIFF_TAG_fact
 GST_RIFF_TAG_fmt
+GST_RIFF_TAG_id3
 GST_RIFF_TAG_idx1
+GST_RIFF_TAG_inst
+GST_RIFF_TAG_labl
 GST_RIFF_TAG_note
 GST_RIFF_TAG_plst
+GST_RIFF_TAG_smpl
 GST_RIFF_TAG_strd
 GST_RIFF_TAG_strf
 GST_RIFF_TAG_strh
@@ -1155,6 +1201,8 @@
 gst_rtcp_buffer_new_take_data
 gst_rtcp_buffer_new_copy_data
 
+gst_rtcp_buffer_validate_data_reduced
+gst_rtcp_buffer_validate_reduced
 gst_rtcp_buffer_validate_data
 gst_rtcp_buffer_validate
 
@@ -1315,6 +1363,7 @@
 gst_rtp_buffer_get_extension
 gst_rtp_buffer_set_extension
 gst_rtp_buffer_get_extension_data
+gst_rtp_buffer_get_extension_bytes
 
 gst_rtp_buffer_get_ssrc
 gst_rtp_buffer_set_ssrc
@@ -1338,6 +1387,7 @@
 gst_rtp_buffer_get_payload_buffer
 gst_rtp_buffer_get_payload_subbuffer
 gst_rtp_buffer_get_payload_len
+gst_rtp_buffer_get_payload_bytes
 gst_rtp_buffer_get_payload
 
 gst_rtp_buffer_default_clock_rate
@@ -1425,6 +1475,7 @@
 gst_rtsp_transport_free
 <SUBSECTION Standard>
 gst_rtsp_lower_trans_get_type
+gst_rtsp_transport_get_media_type
 </SECTION>
 
 <SECTION>
@@ -1432,7 +1483,6 @@
 <INCLUDE>gst/rtsp/gstrtspconnection.h</INCLUDE>
 GstRTSPConnection
 gst_rtsp_connection_create
-gst_rtsp_connection_create_from_fd
 gst_rtsp_connection_create_from_socket
 gst_rtsp_connection_accept
 gst_rtsp_connection_connect
@@ -1468,8 +1518,6 @@
 gst_rtsp_connection_get_tunnelid
 gst_rtsp_connection_do_tunnel
 
-gst_rtsp_connection_get_readfd
-gst_rtsp_connection_get_writefd
 gst_rtsp_connection_set_http_mode
 gst_rtsp_connection_set_proxy
 
@@ -1479,6 +1527,10 @@
 gst_rtsp_connection_get_tls
 gst_rtsp_connection_set_tls_validation_flags
 gst_rtsp_connection_get_tls_validation_flags
+gst_rtsp_connection_set_tls_database
+gst_rtsp_connection_get_tls_database
+gst_rtsp_connection_set_tls_interaction
+gst_rtsp_connection_get_tls_interaction
 
 GstRTSPWatch
 GstRTSPWatchFuncs
@@ -1490,6 +1542,7 @@
 gst_rtsp_watch_write_data
 gst_rtsp_watch_get_send_backlog
 gst_rtsp_watch_set_send_backlog
+gst_rtsp_watch_set_flushing
 gst_rtsp_watch_wait_backlog
 </SECTION>
 
@@ -1539,6 +1592,10 @@
 gst_rtsp_message_take_header
 gst_rtsp_message_remove_header
 gst_rtsp_message_get_header
+gst_rtsp_message_add_header_by_name
+gst_rtsp_message_take_header_by_name
+gst_rtsp_message_remove_header_by_name
+gst_rtsp_message_get_header_by_name
 gst_rtsp_message_append_headers
 gst_rtsp_message_set_body
 gst_rtsp_message_take_body
@@ -1617,6 +1674,7 @@
 GstSDPMessage
 
 gst_sdp_message_new
+gst_sdp_message_copy
 gst_sdp_message_init
 gst_sdp_message_uninit
 gst_sdp_message_free
@@ -1687,6 +1745,7 @@
 gst_sdp_message_dump
 
 gst_sdp_media_new
+gst_sdp_media_copy
 gst_sdp_media_init
 gst_sdp_media_uninit
 gst_sdp_media_free
@@ -1728,6 +1787,8 @@
 gst_sdp_media_replace_attribute
 gst_sdp_media_remove_attribute
 gst_sdp_media_add_attribute
+<SUBSECTION Standard>
+gst_sdp_message_get_type
 </SECTION>
 
 <SECTION>
@@ -1741,8 +1802,10 @@
 gst_mikey_message_new
 gst_mikey_message_new_from_bytes
 gst_mikey_message_new_from_data
-gst_mikey_message_free
 gst_mikey_message_to_bytes
+gst_mikey_message_copy
+gst_mikey_message_ref
+gst_mikey_message_unref
 
 <SUBSECTION MessageInfo>
 GstMIKEYPRFFunc
@@ -1768,19 +1831,25 @@
 gst_mikey_message_add_payload
 
 GstMIKEYPayloadType
-GstMIKEYPayloadClearFunc
-GstMIKEYPayloadCopyFunc
 GstMIKEYPayload
 gst_mikey_payload_new
 gst_mikey_payload_copy
-gst_mikey_payload_free
+gst_mikey_payload_key_data_set_interval
+gst_mikey_payload_key_data_set_key
+gst_mikey_payload_key_data_set_salt
+gst_mikey_payload_key_data_set_spi
+gst_mikey_payload_ref
+gst_mikey_payload_unref
 
 <SUBSECTION PayloadKEMAC>
 GstMIKEYEncAlg
 GstMIKEYMacAlg
 GstMIKEYPayloadKEMAC
 gst_mikey_payload_kemac_set
-gst_mikey_message_add_kemac
+gst_mikey_payload_kemac_add_sub
+gst_mikey_payload_kemac_get_n_sub
+gst_mikey_payload_kemac_get_sub
+gst_mikey_payload_kemac_remove_sub
 
 <SUBSECTION PayloadPKE>
 GstMIKEYCacheType
@@ -1812,6 +1881,10 @@
 gst_mikey_payload_sp_add_param
 gst_mikey_payload_sp_remove_param
 <SUBSECTION Standard>
+GST_TYPE_MIKEY_MESSAGE
+gst_mikey_message_get_type
+GST_TYPE_MIKEY_PAYLOAD
+gst_mikey_payload_get_type
 </SECTION>
 
 # tag
@@ -1828,7 +1901,6 @@
 GST_TAG_CDDA_CDDB_DISCID_FULL
 GST_TAG_CDDA_MUSICBRAINZ_DISCID
 GST_TAG_CDDA_MUSICBRAINZ_DISCID_FULL
-GST_TAG_CDDA_TRACK_TAGS
 GST_TAG_CMML_CLIP
 GST_TAG_CMML_HEAD
 GST_TAG_CMML_STREAM
@@ -1853,9 +1925,11 @@
 GST_TAG_IMAGE_HORIZONTAL_PPI
 GST_TAG_IMAGE_VERTICAL_PPI
 GST_TAG_ID3V2_HEADER_SIZE
+GST_TAG_MUSICAL_KEY
 gst_tag_register_musicbrainz_tags
 gst_tag_freeform_string_to_utf8
 gst_tag_parse_extended_comment
+gst_tag_image_data_to_image_sample
 GstTagImageType
 <SUBSECTION Standard>
 GST_TYPE_TAG_IMAGE_TYPE
@@ -2053,6 +2127,9 @@
 gst_install_plugins_context_new
 gst_install_plugins_context_free
 gst_install_plugins_context_set_xid
+gst_install_plugins_context_set_confirm_search
+gst_install_plugins_context_set_desktop_id
+gst_install_plugins_context_set_startup_notification_id
 <SUBSECTION Standard>
 GST_TYPE_INSTALL_PLUGINS_CONTEXT
 GST_TYPE_INSTALL_PLUGINS_RETURN
@@ -2118,12 +2195,14 @@
 gst_encoding_profile_get_file_extension
 gst_encoding_profile_set_name
 gst_encoding_profile_set_description
+gst_encoding_profile_set_enabled
 gst_encoding_profile_set_format
 gst_encoding_profile_set_preset
 gst_encoding_profile_set_preset_name
 gst_encoding_profile_set_restriction
 gst_encoding_profile_set_presence
 gst_encoding_profile_is_equal
+gst_encoding_profile_is_enabled
 gst_encoding_profile_get_input_caps
 gst_encoding_profile_get_type_nick
 <SUBSECTION container>
@@ -2202,6 +2281,7 @@
 #video.h
 <SUBSECTION>
 gst_video_calculate_display_ratio
+gst_video_guess_framerate
 GstVideoConvertSampleCallback
 gst_video_convert_sample
 gst_video_convert_sample_async
@@ -2230,9 +2310,6 @@
 GST_VIDEO_MAX_PLANES
 GST_VIDEO_MAX_COMPONENTS
 GstVideoFormatInfo
-GstVideoChromaSite
-gst_video_chroma_from_string
-gst_video_chroma_to_string
 GstVideoFormatFlags
 GstVideoPackFlags
 GstVideoFormatUnpack
@@ -2289,14 +2366,19 @@
 #video-color.h
 <SUBSECTION>
 GstVideoColorRange
+gst_video_color_range_offsets
 GstVideoColorMatrix
-GstVideoTransferFunction
+gst_video_color_matrix_get_Kr_Kb
 GstVideoColorPrimaries
+GstVideoTransferFunction
+gst_video_color_transfer_decode
+gst_video_color_transfer_encode
+
 GstVideoColorimetry
 gst_video_colorimetry_matches
+gst_video_colorimetry_is_equal
 gst_video_colorimetry_from_string
 gst_video_colorimetry_to_string
-gst_video_color_range_offsets
 <SUBSECTION Standard>
 gst_video_color_range_get_type
 GST_TYPE_VIDEO_COLOR_RANGE
@@ -2311,6 +2393,9 @@
 <SUBSECTION>
 GstVideoInfo
 GstVideoInterlaceMode
+GstVideoMultiviewMode
+GstVideoMultiviewFramePacking
+GstVideoMultiviewFlags
 GstVideoFlags
 GST_VIDEO_INFO_FORMAT
 GST_VIDEO_INFO_NAME
@@ -2345,7 +2430,14 @@
 GST_VIDEO_INFO_COMP_PLANE
 GST_VIDEO_INFO_COMP_PSTRIDE
 GST_VIDEO_INFO_COMP_POFFSET
+GST_VIDEO_INFO_CHROMA_SITE
+GST_VIDEO_INFO_COLORIMETRY
+GST_VIDEO_INFO_MULTIVIEW_FLAGS
+GST_VIDEO_INFO_MULTIVIEW_MODE
 gst_video_info_init
+gst_video_info_new
+gst_video_info_copy
+gst_video_info_free
 gst_video_info_set_format
 gst_video_info_from_caps
 gst_video_info_to_caps
@@ -2357,6 +2449,14 @@
 GST_TYPE_VIDEO_INTERLACE_MODE
 gst_video_flags_get_type
 GST_TYPE_VIDEO_FLAGS
+GST_TYPE_VIDEO_MULTIVIEW_FLAGS
+GST_TYPE_VIDEO_MULTIVIEW_FLAGSET
+GST_TYPE_VIDEO_MULTIVIEW_FRAME_PACKING
+GST_TYPE_VIDEO_MULTIVIEW_MODE
+gst_video_multiview_mode_get_type
+gst_video_multiview_flagset_get_type
+gst_video_multiview_frame_packing_get_type
+gst_video_info_get_type
 
 #video-frame.h
 <SUBSECTION>
@@ -2404,6 +2504,38 @@
 GST_VIDEO_TILE_MAKE_STRIDE
 GST_VIDEO_TILE_X_TILES
 GST_VIDEO_TILE_Y_TILES
+<SUBSECTION Standard>
+gst_video_tile_mode_get_type
+gst_video_tile_type_get_type
+
+#video-blend.h
+<SUBSECTION>
+gst_video_blend
+gst_video_blend_scale_linear_RGBA
+
+#video-converter.h
+<SUBSECTION>
+GstVideoConverter
+gst_video_converter_new
+gst_video_converter_free
+gst_video_converter_get_config
+gst_video_converter_set_config
+gst_video_converter_frame
+<SUBSECTION Standard>
+gst_video_dither_method_get_type
+GST_TYPE_VIDEO_DITHER_METHOD
+
+#video-multiview.h
+<SUBSECTION>
+gst_video_multiview_get_mono_modes
+gst_video_multiview_get_unpacked_modes
+gst_video_multiview_get_doubled_height_modes
+gst_video_multiview_get_doubled_size_modes
+gst_video_multiview_get_doubled_width_modes
+gst_video_multiview_mode_from_caps_string
+gst_video_multiview_mode_to_caps_string
+gst_video_multiview_guess_half_aspect
+gst_video_multiview_video_info_change_mode
 
 #video-enumtypes.h
 <SUBSECTION Standard>
@@ -2487,7 +2619,6 @@
 <INCLUDE>gst/video/video-overlay-composition.h</INCLUDE>
 <SUBSECTION composition>
 GstVideoOverlayComposition
-GstVideoOverlayCompositionClass
 gst_video_overlay_composition_new
 gst_video_overlay_composition_ref
 gst_video_overlay_composition_unref
@@ -2511,7 +2642,6 @@
 <SUBSECTION rectangle>
 GstVideoOverlayFormatFlags
 GstVideoOverlayRectangle
-GstVideoOverlayRectangleClass
 gst_video_overlay_rectangle_new_raw
 gst_video_overlay_rectangle_ref
 gst_video_overlay_rectangle_unref
@@ -2531,10 +2661,7 @@
 <SUBSECTION Standard>
 GST_TYPE_VIDEO_OVERLAY_COMPOSITION
 GST_VIDEO_OVERLAY_COMPOSITION
-GST_VIDEO_OVERLAY_COMPOSITION_CLASS
-GST_VIDEO_OVERLAY_COMPOSITION_GET_CLASS
 GST_IS_VIDEO_OVERLAY_COMPOSITION
-GST_IS_VIDEO_VIDEO_OVERLAY_COMPOSITION_CLASS
 GST_VIDEO_OVERLAY_COMPOSITION_CAST
 GST_VIDEO_OVERLAY_COMPOSITION_META_API_TYPE
 GST_VIDEO_OVERLAY_COMPOSITION_META_INFO
@@ -2543,10 +2670,7 @@
 
 GST_TYPE_VIDEO_OVERLAY_RECTANGLE
 GST_VIDEO_OVERLAY_RECTANGLE
-GST_VIDEO_OVERLAY_RECTANGLE_CLASS
-GST_VIDEO_OVERLAY_RECTANGLE_GET_CLASS
 GST_IS_VIDEO_OVERLAY_RECTANGLE
-GST_IS_VIDEO_VIDEO_OVERLAY_RECTANGLE_CLASS
 gst_video_overlay_rectangle_get_type
 </SECTION>
 
@@ -2592,7 +2716,6 @@
 <FILE>gstvideodecoder</FILE>
 <TITLE>GstVideoDecoder</TITLE>
 GST_VIDEO_DECODER_ERROR
-GST_VIDEO_DECODER_FLOW_DROPPED
 GST_VIDEO_DECODER_FLOW_NEED_DATA
 GST_VIDEO_DECODER_MAX_ERRORS
 GST_VIDEO_DECODER_SINK_NAME
@@ -2634,6 +2757,7 @@
 gst_video_decoder_get_needs_format
 gst_video_decoder_set_needs_format
 gst_video_decoder_merge_tags
+gst_video_decoder_proxy_getcaps
 <SUBSECTION Standard>
 GST_IS_VIDEO_DECODER
 GST_IS_VIDEO_DECODER_CLASS
@@ -2688,6 +2812,81 @@
 </SECTION>
 
 <SECTION>
+<FILE>gstvideodither</FILE>
+<TITLE>GstVideoDither</TITLE>
+<INCLUDE>gst/video/video-dither.h</INCLUDE>
+GstVideoDither
+GstVideoDitherFlags
+GstVideoDitherMethod
+gst_video_dither_free
+gst_video_dither_line
+gst_video_dither_new
+<SUBSECTION Standard>
+GST_TYPE_VIDEO_DITHER_FLAGS
+gst_video_dither_flags_get_type
+</SECTION>
+
+<SECTION>
+<FILE>gstvideochroma</FILE>
+<TITLE>GstVideoChroma</TITLE>
+<INCLUDE>gst/video/video-chroma.h</INCLUDE>
+GstVideoChromaSite
+gst_video_chroma_from_string
+gst_video_chroma_to_string
+GstVideoChromaFlags
+<SUBSECTION GstVideoChromaResample>
+GstVideoChromaMethod
+GstVideoChromaResample
+gst_video_chroma_resample
+gst_video_chroma_resample_free
+gst_video_chroma_resample_get_info
+gst_video_chroma_resample_new
+<SUBSECTION Standard>
+gst_video_chroma_flags_get_type
+gst_video_chroma_method_get_type
+GST_TYPE_VIDEO_CHROMA_FLAGS
+GST_TYPE_VIDEO_CHROMA_METHOD
+</SECTION>
+
+<SECTION>
+<FILE>gstvideoresampler</FILE>
+<TITLE>GstVideoResampler</TITLE>
+<INCLUDE>gst/video/video-resampler.h</INCLUDE>
+GstVideoResampler
+GstVideoResamplerFlags
+GstVideoResamplerMethod
+gst_video_resampler_clear
+gst_video_resampler_init
+GST_VIDEO_RESAMPLER_OPT_CUBIC_B
+GST_VIDEO_RESAMPLER_OPT_CUBIC_C
+GST_VIDEO_RESAMPLER_OPT_ENVELOPE
+GST_VIDEO_RESAMPLER_OPT_MAX_TAPS
+GST_VIDEO_RESAMPLER_OPT_SHARPEN
+GST_VIDEO_RESAMPLER_OPT_SHARPNESS
+<SUBSECTION Standard>
+gst_video_resampler_flags_get_type
+gst_video_resampler_method_get_type
+GST_TYPE_VIDEO_RESAMPLER_FLAGS
+GST_TYPE_VIDEO_RESAMPLER_METHOD
+</SECTION>
+
+<SECTION>
+<FILE>gstvideoscaler</FILE>
+<TITLE>GstVideoScaler</TITLE>
+<INCLUDE>gst/video/video-scaler.h</INCLUDE>
+GstVideoScaler
+GstVideoScalerFlags
+gst_video_scaler_2d
+gst_video_scaler_combine_packed_YUV
+gst_video_scaler_free
+gst_video_scaler_get_coeff
+gst_video_scaler_horizontal
+gst_video_scaler_new
+gst_video_scaler_vertical
+<SUBSECTION Standard>
+</SECTION>
+
+<SECTION>
 <FILE>gstvideoutils</FILE>
 GstVideoCodecFrame
 GstVideoCodecFrameFlags
@@ -2733,6 +2932,7 @@
 <SUBSECTION>
 GstDiscovererInfo
 GstDiscovererResult
+GstDiscovererSerializeFlags
 gst_discoverer_info_get_duration
 gst_discoverer_info_get_misc
 gst_discoverer_info_get_result
@@ -2744,6 +2944,8 @@
 gst_discoverer_info_get_seekable
 gst_discoverer_info_ref
 gst_discoverer_info_unref
+gst_discoverer_info_to_variant
+gst_discoverer_info_from_variant
 <SUBSECTION>
 GstDiscovererStreamInfo
 GstDiscovererContainerInfo
diff --git a/docs/libs/html/annotation-glossary.html b/docs/libs/html/annotation-glossary.html
index f1ebcbb..d0e476e 100644
--- a/docs/libs/html/annotation-glossary.html
+++ b/docs/libs/html/annotation-glossary.html
@@ -2,12 +2,12 @@
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>GStreamer Base Plugins 1.0 Library Reference Manual: Annotation Glossary</title>
+<title>Annotation Glossary: GStreamer Base 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 Base Plugins 1.0 Library Reference Manual">
 <link rel="up" href="index.html" title="GStreamer Base Plugins 1.0 Library Reference Manual">
 <link rel="prev" href="api-index-deprecated.html" title="Index of deprecated API">
-<meta name="generator" content="GTK-Doc V1.21 (XML mode)">
+<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">
@@ -22,6 +22,8 @@
                      <span class="dim">|</span> 
                   <a class="shortcut" href="#glsO">O</a>
                      <span class="dim">|</span> 
+                  <a class="shortcut" href="#glsR">R</a>
+                     <span class="dim">|</span> 
                   <a class="shortcut" href="#glsS">S</a>
                      <span class="dim">|</span> 
                   <a class="shortcut" href="#glsT">T</a></span></td>
@@ -50,10 +52,19 @@
 <a name="glsO"></a><h3 class="title">O</h3>
 <dt><span class="glossterm"><a name="annotation-glossterm-out"></a>out</span></dt>
 <dd class="glossdef"><p>Parameter for returning results. Default is <acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>.</p></dd>
+<a name="glsR"></a><h3 class="title">R</h3>
+<dt><span class="glossterm"><a name="annotation-glossterm-rename-to"></a>rename-to</span></dt>
+<dd class="glossdef"><p>Rename the original symbol's name to SYMBOL.</p></dd>
 <a name="glsS"></a><h3 class="title">S</h3>
 <dt><span class="glossterm"><a name="annotation-glossterm-scope%20async"></a>scope async</span></dt>
 <dd class="glossdef"><p>The callback is valid until first called.</p></dd>
+<dt><span class="glossterm"><a name="annotation-glossterm-scope%20call"></a>scope call</span></dt>
+<dd class="glossdef"><p>The callback is valid only during the call to the method.</p></dd>
+<dt><span class="glossterm"><a name="annotation-glossterm-skip"></a>skip</span></dt>
+<dd class="glossdef"><p>Exposed in C code, not necessarily available in other languages.</p></dd>
 <a name="glsT"></a><h3 class="title">T</h3>
+<dt><span class="glossterm"><a name="annotation-glossterm-transfer%20floating"></a>transfer floating</span></dt>
+<dd class="glossdef"><p>Alias for <acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>, used for objects with floating refs.</p></dd>
 <dt><span class="glossterm"><a name="annotation-glossterm-transfer%20full"></a>transfer full</span></dt>
 <dd class="glossdef"><p>Free data after the code is done.</p></dd>
 <dt><span class="glossterm"><a name="annotation-glossterm-transfer%20none"></a>transfer none</span></dt>
@@ -62,7 +73,6 @@
 <dd class="glossdef"><p>Override the parsed C type with given type.</p></dd>
 </div>
 <div class="footer">
-<hr>
-          Generated by GTK-Doc V1.21</div>
+<hr>Generated by GTK-Doc V1.24</div>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/libs/html/api-index-deprecated.html b/docs/libs/html/api-index-deprecated.html
index 7ae3834..698d26e 100644
--- a/docs/libs/html/api-index-deprecated.html
+++ b/docs/libs/html/api-index-deprecated.html
@@ -2,13 +2,13 @@
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>GStreamer Base Plugins 1.0 Library Reference Manual: Index of deprecated API</title>
+<title>Index of deprecated API: GStreamer Base 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 Base Plugins 1.0 Library Reference Manual">
 <link rel="up" href="index.html" title="GStreamer Base Plugins 1.0 Library Reference Manual">
 <link rel="prev" href="api-index-full.html" title="Index">
 <link rel="next" href="annotation-glossary.html" title="Annotation Glossary">
-<meta name="generator" content="GTK-Doc V1.21 (XML mode)">
+<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">
@@ -40,7 +40,6 @@
 <dd></dd>
 </div>
 <div class="footer">
-<hr>
-          Generated by GTK-Doc V1.21</div>
+<hr>Generated by GTK-Doc V1.24</div>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/libs/html/api-index-full.html b/docs/libs/html/api-index-full.html
index 1fb23e4..3b868b4 100644
--- a/docs/libs/html/api-index-full.html
+++ b/docs/libs/html/api-index-full.html
@@ -2,13 +2,13 @@
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>GStreamer Base Plugins 1.0 Library Reference Manual: Index</title>
+<title>Index: GStreamer Base 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 Base Plugins 1.0 Library Reference Manual">
 <link rel="up" href="index.html" title="GStreamer Base Plugins 1.0 Library Reference Manual">
 <link rel="prev" href="gstreamer-libs-hierarchy.html" title="Part II. Object Hierarchy">
 <link rel="next" href="api-index-deprecated.html" title="Index of deprecated API">
-<meta name="generator" content="GTK-Doc V1.21 (XML mode)">
+<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">
@@ -146,6 +146,10 @@
 </dt>
 <dd></dd>
 <dt>
+<a class="link" href="gst-plugins-base-libs-appsrc.html#gst-app-src-push-sample" title="gst_app_src_push_sample ()">gst_app_src_push_sample</a>, function in <a class="link" href="gst-plugins-base-libs-appsrc.html" title="appsrc">appsrc</a>
+</dt>
+<dd></dd>
+<dt>
 <a class="link" href="gst-plugins-base-libs-appsrc.html#gst-app-src-set-callbacks" title="gst_app_src_set_callbacks ()">gst_app_src_set_callbacks</a>, function in <a class="link" href="gst-plugins-base-libs-appsrc.html" title="appsrc">appsrc</a>
 </dt>
 <dd></dd>
@@ -214,6 +218,14 @@
 </dt>
 <dd></dd>
 <dt>
+<a class="link" href="gst-plugins-base-libs-gstaudiobasesink.html#GstAudioBaseSinkCustomSlavingCallback" title="GstAudioBaseSinkCustomSlavingCallback ()">GstAudioBaseSinkCustomSlavingCallback</a>, user_function in <a class="link" href="gst-plugins-base-libs-gstaudiobasesink.html" title="gstaudiobasesink">gstaudiobasesink</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstaudiobasesink.html#GstAudioBaseSinkDiscontReason" title="enum GstAudioBaseSinkDiscontReason">GstAudioBaseSinkDiscontReason</a>, enum in <a class="link" href="gst-plugins-base-libs-gstaudiobasesink.html" title="gstaudiobasesink">gstaudiobasesink</a>
+</dt>
+<dd></dd>
+<dt>
 <a class="link" href="gst-plugins-base-libs-gstaudiobasesink.html#GstAudioBaseSinkSlaveMethod" title="enum GstAudioBaseSinkSlaveMethod">GstAudioBaseSinkSlaveMethod</a>, enum in <a class="link" href="gst-plugins-base-libs-gstaudiobasesink.html" title="gstaudiobasesink">gstaudiobasesink</a>
 </dt>
 <dd></dd>
@@ -458,10 +470,18 @@
 </dt>
 <dd></dd>
 <dt>
+<a class="link" href="gst-plugins-base-libs-gstaudiobasesink.html#gst-audio-base-sink-report-device-failure" title="gst_audio_base_sink_report_device_failure ()">gst_audio_base_sink_report_device_failure</a>, function in <a class="link" href="gst-plugins-base-libs-gstaudiobasesink.html" title="gstaudiobasesink">gstaudiobasesink</a>
+</dt>
+<dd></dd>
+<dt>
 <a class="link" href="gst-plugins-base-libs-gstaudiobasesink.html#gst-audio-base-sink-set-alignment-threshold" title="gst_audio_base_sink_set_alignment_threshold ()">gst_audio_base_sink_set_alignment_threshold</a>, function in <a class="link" href="gst-plugins-base-libs-gstaudiobasesink.html" title="gstaudiobasesink">gstaudiobasesink</a>
 </dt>
 <dd></dd>
 <dt>
+<a class="link" href="gst-plugins-base-libs-gstaudiobasesink.html#gst-audio-base-sink-set-custom-slaving-callback" title="gst_audio_base_sink_set_custom_slaving_callback ()">gst_audio_base_sink_set_custom_slaving_callback</a>, function in <a class="link" href="gst-plugins-base-libs-gstaudiobasesink.html" title="gstaudiobasesink">gstaudiobasesink</a>
+</dt>
+<dd></dd>
+<dt>
 <a class="link" href="gst-plugins-base-libs-gstaudiobasesink.html#gst-audio-base-sink-set-discont-wait" title="gst_audio_base_sink_set_discont_wait ()">gst_audio_base_sink_set_discont_wait</a>, function in <a class="link" href="gst-plugins-base-libs-gstaudiobasesink.html" title="gstaudiobasesink">gstaudiobasesink</a>
 </dt>
 <dd></dd>
@@ -638,6 +658,10 @@
 </dt>
 <dd></dd>
 <dt>
+<a class="link" href="gst-plugins-base-libs-gstaudiodecoder.html#gst-audio-decoder-proxy-getcaps" title="gst_audio_decoder_proxy_getcaps ()">gst_audio_decoder_proxy_getcaps</a>, function in <a class="link" href="gst-plugins-base-libs-gstaudiodecoder.html" title="gstaudiodecoder">gstaudiodecoder</a>
+</dt>
+<dd></dd>
+<dt>
 <a class="link" href="gst-plugins-base-libs-gstaudiodecoder.html#gst-audio-decoder-set-drainable" title="gst_audio_decoder_set_drainable ()">gst_audio_decoder_set_drainable</a>, function in <a class="link" href="gst-plugins-base-libs-gstaudiodecoder.html" title="gstaudiodecoder">gstaudiodecoder</a>
 </dt>
 <dd></dd>
@@ -1235,7 +1259,7 @@
 </dt>
 <dd></dd>
 <dt>
-<a class="link" href="gst-plugins-base-libs-gstvideometa.html#gst-buffer-get-video-meta" title="gst_buffer_get_video_meta()">gst_buffer_get_video_meta</a>, macro in <a class="link" href="gst-plugins-base-libs-gstvideometa.html" title="gstvideometa">gstvideometa</a>
+<a class="link" href="gst-plugins-base-libs-gstvideometa.html#gst-buffer-get-video-meta" title="gst_buffer_get_video_meta ()">gst_buffer_get_video_meta</a>, function in <a class="link" href="gst-plugins-base-libs-gstvideometa.html" title="gstvideometa">gstvideometa</a>
 </dt>
 <dd></dd>
 <dt>
@@ -1445,6 +1469,10 @@
 </dt>
 <dd></dd>
 <dt>
+<a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscovererSerializeFlags" title="enum GstDiscovererSerializeFlags">GstDiscovererSerializeFlags</a>, enum in <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html" title="gstdiscoverer">gstdiscoverer</a>
+</dt>
+<dd></dd>
+<dt>
 <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscovererStreamInfo" title="GstDiscovererStreamInfo">GstDiscovererStreamInfo</a>, struct in <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html" title="gstdiscoverer">gstdiscoverer</a>
 </dt>
 <dd></dd>
@@ -1493,6 +1521,10 @@
 </dt>
 <dd></dd>
 <dt>
+<a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#gst-discoverer-info-from-variant" title="gst_discoverer_info_from_variant ()">gst_discoverer_info_from_variant</a>, function in <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html" title="gstdiscoverer">gstdiscoverer</a>
+</dt>
+<dd></dd>
+<dt>
 <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#gst-discoverer-info-get-audio-streams" title="gst_discoverer_info_get_audio_streams ()">gst_discoverer_info_get_audio_streams</a>, function in <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html" title="gstdiscoverer">gstdiscoverer</a>
 </dt>
 <dd></dd>
@@ -1557,6 +1589,10 @@
 </dt>
 <dd></dd>
 <dt>
+<a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#gst-discoverer-info-to-variant" title="gst_discoverer_info_to_variant ()">gst_discoverer_info_to_variant</a>, function in <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html" title="gstdiscoverer">gstdiscoverer</a>
+</dt>
+<dd></dd>
+<dt>
 <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#gst-discoverer-info-unref" title="gst_discoverer_info_unref()">gst_discoverer_info_unref</a>, macro in <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html" title="gstdiscoverer">gstdiscoverer</a>
 </dt>
 <dd></dd>
@@ -1669,6 +1705,10 @@
 </dt>
 <dd></dd>
 <dt>
+<a class="link" href="gst-plugins-base-libs-dmabuf.html#gst-dmabuf-allocator-new" title="gst_dmabuf_allocator_new ()">gst_dmabuf_allocator_new</a>, function in <a class="link" href="gst-plugins-base-libs-dmabuf.html" title="dmabuf">dmabuf</a>
+</dt>
+<dd></dd>
+<dt>
 <a class="link" href="gst-plugins-base-libs-dmabuf.html#gst-dmabuf-memory-get-fd" title="gst_dmabuf_memory_get_fd ()">gst_dmabuf_memory_get_fd</a>, function in <a class="link" href="gst-plugins-base-libs-dmabuf.html" title="dmabuf">dmabuf</a>
 </dt>
 <dd></dd>
@@ -1790,6 +1830,10 @@
 </dt>
 <dd></dd>
 <dt>
+<a class="link" href="gst-plugins-base-libs-encoding-profile.html#gst-encoding-profile-is-enabled" title="gst_encoding_profile_is_enabled ()">gst_encoding_profile_is_enabled</a>, function in <a class="link" href="gst-plugins-base-libs-encoding-profile.html" title="encoding-profile">encoding-profile</a>
+</dt>
+<dd></dd>
+<dt>
 <a class="link" href="gst-plugins-base-libs-encoding-profile.html#gst-encoding-profile-is-equal" title="gst_encoding_profile_is_equal ()">gst_encoding_profile_is_equal</a>, function in <a class="link" href="gst-plugins-base-libs-encoding-profile.html" title="encoding-profile">encoding-profile</a>
 </dt>
 <dd></dd>
@@ -1802,6 +1846,10 @@
 </dt>
 <dd></dd>
 <dt>
+<a class="link" href="gst-plugins-base-libs-encoding-profile.html#gst-encoding-profile-set-enabled" title="gst_encoding_profile_set_enabled ()">gst_encoding_profile_set_enabled</a>, function in <a class="link" href="gst-plugins-base-libs-encoding-profile.html" title="encoding-profile">encoding-profile</a>
+</dt>
+<dd></dd>
+<dt>
 <a class="link" href="gst-plugins-base-libs-encoding-profile.html#gst-encoding-profile-set-format" title="gst_encoding_profile_set_format ()">gst_encoding_profile_set_format</a>, function in <a class="link" href="gst-plugins-base-libs-encoding-profile.html" title="encoding-profile">encoding-profile</a>
 </dt>
 <dd></dd>
@@ -1903,6 +1951,26 @@
 <dd></dd>
 <a name="idxF"></a><h3 class="title">F</h3>
 <dt>
+<a class="link" href="gst-plugins-base-libs-fdmemory.html#GstFdMemoryFlags" title="enum GstFdMemoryFlags">GstFdMemoryFlags</a>, enum in <a class="link" href="gst-plugins-base-libs-fdmemory.html" title="fdmemory">fdmemory</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-fdmemory.html#gst-fd-allocator-alloc" title="gst_fd_allocator_alloc ()">gst_fd_allocator_alloc</a>, function in <a class="link" href="gst-plugins-base-libs-fdmemory.html" title="fdmemory">fdmemory</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-fdmemory.html#gst-fd-allocator-get-type" title="gst_fd_allocator_get_type ()">gst_fd_allocator_get_type</a>, function in <a class="link" href="gst-plugins-base-libs-fdmemory.html" title="fdmemory">fdmemory</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-fdmemory.html#gst-fd-allocator-new" title="gst_fd_allocator_new ()">gst_fd_allocator_new</a>, function in <a class="link" href="gst-plugins-base-libs-fdmemory.html" title="fdmemory">fdmemory</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-fdmemory.html#gst-fd-memory-get-fd" title="gst_fd_memory_get_fd ()">gst_fd_memory_get_fd</a>, function in <a class="link" href="gst-plugins-base-libs-fdmemory.html" title="fdmemory">fdmemory</a>
+</dt>
+<dd></dd>
+<dt>
 <a class="link" href="gst-plugins-base-libs-gstfftf32.html#GstFFTF32" title="GstFFTF32">GstFFTF32</a>, struct in <a class="link" href="gst-plugins-base-libs-gstfftf32.html" title="gstfftf32">gstfftf32</a>
 </dt>
 <dd></dd>
@@ -2052,6 +2120,18 @@
 </dt>
 <dd></dd>
 <dt>
+<a class="link" href="gst-plugins-base-libs-gstpbutilsinstallplugins.html#gst-install-plugins-context-set-confirm-search" title="gst_install_plugins_context_set_confirm_search ()">gst_install_plugins_context_set_confirm_search</a>, function in <a class="link" href="gst-plugins-base-libs-gstpbutilsinstallplugins.html" title="gstpbutilsinstallplugins">gstpbutilsinstallplugins</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstpbutilsinstallplugins.html#gst-install-plugins-context-set-desktop-id" title="gst_install_plugins_context_set_desktop_id ()">gst_install_plugins_context_set_desktop_id</a>, function in <a class="link" href="gst-plugins-base-libs-gstpbutilsinstallplugins.html" title="gstpbutilsinstallplugins">gstpbutilsinstallplugins</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstpbutilsinstallplugins.html#gst-install-plugins-context-set-startup-notification-id" title="gst_install_plugins_context_set_startup_notification_id ()">gst_install_plugins_context_set_startup_notification_id</a>, function in <a class="link" href="gst-plugins-base-libs-gstpbutilsinstallplugins.html" title="gstpbutilsinstallplugins">gstpbutilsinstallplugins</a>
+</dt>
+<dd></dd>
+<dt>
 <a class="link" href="gst-plugins-base-libs-gstpbutilsinstallplugins.html#gst-install-plugins-context-set-xid" title="gst_install_plugins_context_set_xid ()">gst_install_plugins_context_set_xid</a>, function in <a class="link" href="gst-plugins-base-libs-gstpbutilsinstallplugins.html" title="gstpbutilsinstallplugins">gstpbutilsinstallplugins</a>
 </dt>
 <dd></dd>
@@ -2076,6 +2156,10 @@
 </dt>
 <dd></dd>
 <dt>
+<a class="link" href="gst-plugins-base-libs-fdmemory.html#gst-is-fd-memory" title="gst_is_fd_memory ()">gst_is_fd_memory</a>, function in <a class="link" href="gst-plugins-base-libs-fdmemory.html" title="fdmemory">fdmemory</a>
+</dt>
+<dd></dd>
+<dt>
 <a class="link" href="gst-plugins-base-libs-gstpbutilsmissingplugins.html#gst-is-missing-plugin-message" title="gst_is_missing_plugin_message ()">gst_is_missing_plugin_message</a>, function in <a class="link" href="gst-plugins-base-libs-gstpbutilsmissingplugins.html" title="gstpbutilsmissingplugins">gstpbutilsmissingplugins</a>
 </dt>
 <dd></dd>
@@ -2213,6 +2297,10 @@
 </dt>
 <dd></dd>
 <dt>
+<a class="link" href="gst-plugins-base-libs-gstmikey.html#gst-mikey-message-copy" title="gst_mikey_message_copy ()">gst_mikey_message_copy</a>, function in <a class="link" href="gst-plugins-base-libs-gstmikey.html" title="gstmikey">gstmikey</a>
+</dt>
+<dd></dd>
+<dt>
 <a class="link" href="gst-plugins-base-libs-gstmikey.html#gst-mikey-message-find-payload" title="gst_mikey_message_find_payload ()">gst_mikey_message_find_payload</a>, function in <a class="link" href="gst-plugins-base-libs-gstmikey.html" title="gstmikey">gstmikey</a>
 </dt>
 <dd></dd>
@@ -2253,6 +2341,10 @@
 </dt>
 <dd></dd>
 <dt>
+<a class="link" href="gst-plugins-base-libs-gstmikey.html#gst-mikey-message-ref" title="gst_mikey_message_ref ()">gst_mikey_message_ref</a>, function in <a class="link" href="gst-plugins-base-libs-gstmikey.html" title="gstmikey">gstmikey</a>
+</dt>
+<dd></dd>
+<dt>
 <a class="link" href="gst-plugins-base-libs-gstmikey.html#gst-mikey-message-remove-cs-srtp" title="gst_mikey_message_remove_cs_srtp ()">gst_mikey_message_remove_cs_srtp</a>, function in <a class="link" href="gst-plugins-base-libs-gstmikey.html" title="gstmikey">gstmikey</a>
 </dt>
 <dd></dd>
@@ -2277,14 +2369,50 @@
 </dt>
 <dd></dd>
 <dt>
+<a class="link" href="gst-plugins-base-libs-gstmikey.html#gst-mikey-message-unref" title="gst_mikey_message_unref ()">gst_mikey_message_unref</a>, function in <a class="link" href="gst-plugins-base-libs-gstmikey.html" title="gstmikey">gstmikey</a>
+</dt>
+<dd></dd>
+<dt>
 <a class="link" href="gst-plugins-base-libs-gstmikey.html#gst-mikey-payload-copy" title="gst_mikey_payload_copy ()">gst_mikey_payload_copy</a>, function in <a class="link" href="gst-plugins-base-libs-gstmikey.html" title="gstmikey">gstmikey</a>
 </dt>
 <dd></dd>
 <dt>
+<a class="link" href="gst-plugins-base-libs-gstmikey.html#gst-mikey-payload-kemac-add-sub" title="gst_mikey_payload_kemac_add_sub ()">gst_mikey_payload_kemac_add_sub</a>, function in <a class="link" href="gst-plugins-base-libs-gstmikey.html" title="gstmikey">gstmikey</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstmikey.html#gst-mikey-payload-kemac-get-n-sub" title="gst_mikey_payload_kemac_get_n_sub ()">gst_mikey_payload_kemac_get_n_sub</a>, function in <a class="link" href="gst-plugins-base-libs-gstmikey.html" title="gstmikey">gstmikey</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstmikey.html#gst-mikey-payload-kemac-get-sub" title="gst_mikey_payload_kemac_get_sub ()">gst_mikey_payload_kemac_get_sub</a>, function in <a class="link" href="gst-plugins-base-libs-gstmikey.html" title="gstmikey">gstmikey</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstmikey.html#gst-mikey-payload-kemac-remove-sub" title="gst_mikey_payload_kemac_remove_sub ()">gst_mikey_payload_kemac_remove_sub</a>, function in <a class="link" href="gst-plugins-base-libs-gstmikey.html" title="gstmikey">gstmikey</a>
+</dt>
+<dd></dd>
+<dt>
 <a class="link" href="gst-plugins-base-libs-gstmikey.html#gst-mikey-payload-kemac-set" title="gst_mikey_payload_kemac_set ()">gst_mikey_payload_kemac_set</a>, function in <a class="link" href="gst-plugins-base-libs-gstmikey.html" title="gstmikey">gstmikey</a>
 </dt>
 <dd></dd>
 <dt>
+<a class="link" href="gst-plugins-base-libs-gstmikey.html#gst-mikey-payload-key-data-set-interval" title="gst_mikey_payload_key_data_set_interval ()">gst_mikey_payload_key_data_set_interval</a>, function in <a class="link" href="gst-plugins-base-libs-gstmikey.html" title="gstmikey">gstmikey</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstmikey.html#gst-mikey-payload-key-data-set-key" title="gst_mikey_payload_key_data_set_key ()">gst_mikey_payload_key_data_set_key</a>, function in <a class="link" href="gst-plugins-base-libs-gstmikey.html" title="gstmikey">gstmikey</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstmikey.html#gst-mikey-payload-key-data-set-salt" title="gst_mikey_payload_key_data_set_salt ()">gst_mikey_payload_key_data_set_salt</a>, function in <a class="link" href="gst-plugins-base-libs-gstmikey.html" title="gstmikey">gstmikey</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstmikey.html#gst-mikey-payload-key-data-set-spi" title="gst_mikey_payload_key_data_set_spi ()">gst_mikey_payload_key_data_set_spi</a>, function in <a class="link" href="gst-plugins-base-libs-gstmikey.html" title="gstmikey">gstmikey</a>
+</dt>
+<dd></dd>
+<dt>
 <a class="link" href="gst-plugins-base-libs-gstmikey.html#gst-mikey-payload-new" title="gst_mikey_payload_new ()">gst_mikey_payload_new</a>, function in <a class="link" href="gst-plugins-base-libs-gstmikey.html" title="gstmikey">gstmikey</a>
 </dt>
 <dd></dd>
@@ -2297,6 +2425,10 @@
 </dt>
 <dd></dd>
 <dt>
+<a class="link" href="gst-plugins-base-libs-gstmikey.html#gst-mikey-payload-ref" title="gst_mikey_payload_ref ()">gst_mikey_payload_ref</a>, function in <a class="link" href="gst-plugins-base-libs-gstmikey.html" title="gstmikey">gstmikey</a>
+</dt>
+<dd></dd>
+<dt>
 <a class="link" href="gst-plugins-base-libs-gstmikey.html#gst-mikey-payload-sp-add-param" title="gst_mikey_payload_sp_add_param ()">gst_mikey_payload_sp_add_param</a>, function in <a class="link" href="gst-plugins-base-libs-gstmikey.html" title="gstmikey">gstmikey</a>
 </dt>
 <dd></dd>
@@ -2321,6 +2453,10 @@
 </dt>
 <dd></dd>
 <dt>
+<a class="link" href="gst-plugins-base-libs-gstmikey.html#gst-mikey-payload-unref" title="gst_mikey_payload_unref ()">gst_mikey_payload_unref</a>, function in <a class="link" href="gst-plugins-base-libs-gstmikey.html" title="gstmikey">gstmikey</a>
+</dt>
+<dd></dd>
+<dt>
 <a class="link" href="gst-plugins-base-libs-gstmikey.html#GST-MIKEY-VERSION:CAPS" title="GST_MIKEY_VERSION">GST_MIKEY_VERSION</a>, macro in <a class="link" href="gst-plugins-base-libs-gstmikey.html" title="gstmikey">gstmikey</a>
 </dt>
 <dd></dd>
@@ -2454,6 +2590,10 @@
 </dt>
 <dd></dd>
 <dt>
+<a class="link" href="gst-plugins-base-libs-gstnavigation.html#gst-navigation-message-new-event" title="gst_navigation_message_new_event ()">gst_navigation_message_new_event</a>, function in <a class="link" href="gst-plugins-base-libs-gstnavigation.html" title="gstnavigation">gstnavigation</a>
+</dt>
+<dd></dd>
+<dt>
 <a class="link" href="gst-plugins-base-libs-gstnavigation.html#gst-navigation-message-new-mouse-over" title="gst_navigation_message_new_mouse_over ()">gst_navigation_message_new_mouse_over</a>, function in <a class="link" href="gst-plugins-base-libs-gstnavigation.html" title="gstnavigation">gstnavigation</a>
 </dt>
 <dd></dd>
@@ -2462,6 +2602,10 @@
 </dt>
 <dd></dd>
 <dt>
+<a class="link" href="gst-plugins-base-libs-gstnavigation.html#gst-navigation-message-parse-event" title="gst_navigation_message_parse_event ()">gst_navigation_message_parse_event</a>, function in <a class="link" href="gst-plugins-base-libs-gstnavigation.html" title="gstnavigation">gstnavigation</a>
+</dt>
+<dd></dd>
+<dt>
 <a class="link" href="gst-plugins-base-libs-gstnavigation.html#gst-navigation-message-parse-mouse-over" title="gst_navigation_message_parse_mouse_over ()">gst_navigation_message_parse_mouse_over</a>, function in <a class="link" href="gst-plugins-base-libs-gstnavigation.html" title="gstnavigation">gstnavigation</a>
 </dt>
 <dd></dd>
@@ -2700,6 +2844,14 @@
 </dt>
 <dd></dd>
 <dt>
+<a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#gst-rtcp-buffer-validate-data-reduced" title="gst_rtcp_buffer_validate_data_reduced ()">gst_rtcp_buffer_validate_data_reduced</a>, function in <a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html" title="gstrtcpbuffer">gstrtcpbuffer</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#gst-rtcp-buffer-validate-reduced" title="gst_rtcp_buffer_validate_reduced ()">gst_rtcp_buffer_validate_reduced</a>, function in <a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html" title="gstrtcpbuffer">gstrtcpbuffer</a>
+</dt>
+<dd></dd>
+<dt>
 <a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#GST-RTCP-MAX-BYE-SSRC-COUNT:CAPS" title="GST_RTCP_MAX_BYE_SSRC_COUNT">GST_RTCP_MAX_BYE_SSRC_COUNT</a>, macro in <a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html" title="gstrtcpbuffer">gstrtcpbuffer</a>
 </dt>
 <dd></dd>
@@ -3128,6 +3280,10 @@
 </dt>
 <dd></dd>
 <dt>
+<a class="link" href="gst-plugins-base-libs-gstrtpbuffer.html#gst-rtp-buffer-get-extension-bytes" title="gst_rtp_buffer_get_extension_bytes ()">gst_rtp_buffer_get_extension_bytes</a>, function in <a class="link" href="gst-plugins-base-libs-gstrtpbuffer.html" title="gstrtpbuffer">gstrtpbuffer</a>
+</dt>
+<dd></dd>
+<dt>
 <a class="link" href="gst-plugins-base-libs-gstrtpbuffer.html#gst-rtp-buffer-get-extension-data" title="gst_rtp_buffer_get_extension_data ()">gst_rtp_buffer_get_extension_data</a>, function in <a class="link" href="gst-plugins-base-libs-gstrtpbuffer.html" title="gstrtpbuffer">gstrtpbuffer</a>
 </dt>
 <dd></dd>
@@ -3164,6 +3320,10 @@
 </dt>
 <dd></dd>
 <dt>
+<a class="link" href="gst-plugins-base-libs-gstrtpbuffer.html#gst-rtp-buffer-get-payload-bytes" title="gst_rtp_buffer_get_payload_bytes ()">gst_rtp_buffer_get_payload_bytes</a>, function in <a class="link" href="gst-plugins-base-libs-gstrtpbuffer.html" title="gstrtpbuffer">gstrtpbuffer</a>
+</dt>
+<dd></dd>
+<dt>
 <a class="link" href="gst-plugins-base-libs-gstrtpbuffer.html#gst-rtp-buffer-get-payload-len" title="gst_rtp_buffer_get_payload_len ()">gst_rtp_buffer_get_payload_len</a>, function in <a class="link" href="gst-plugins-base-libs-gstrtpbuffer.html" title="gstrtpbuffer">gstrtpbuffer</a>
 </dt>
 <dd></dd>
@@ -3464,6 +3624,14 @@
 </dt>
 <dd></dd>
 <dt>
+<a class="link" href="gst-plugins-base-libs-gstrtspconnection.html#gst-rtsp-connection-get-tls-database" title="gst_rtsp_connection_get_tls_database ()">gst_rtsp_connection_get_tls_database</a>, function in <a class="link" href="gst-plugins-base-libs-gstrtspconnection.html" title="gstrtspconnection">gstrtspconnection</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstrtspconnection.html#gst-rtsp-connection-get-tls-interaction" title="gst_rtsp_connection_get_tls_interaction ()">gst_rtsp_connection_get_tls_interaction</a>, function in <a class="link" href="gst-plugins-base-libs-gstrtspconnection.html" title="gstrtspconnection">gstrtspconnection</a>
+</dt>
+<dd></dd>
+<dt>
 <a class="link" href="gst-plugins-base-libs-gstrtspconnection.html#gst-rtsp-connection-get-tls-validation-flags" title="gst_rtsp_connection_get_tls_validation_flags ()">gst_rtsp_connection_get_tls_validation_flags</a>, function in <a class="link" href="gst-plugins-base-libs-gstrtspconnection.html" title="gstrtspconnection">gstrtspconnection</a>
 </dt>
 <dd></dd>
@@ -3532,6 +3700,14 @@
 </dt>
 <dd></dd>
 <dt>
+<a class="link" href="gst-plugins-base-libs-gstrtspconnection.html#gst-rtsp-connection-set-tls-database" title="gst_rtsp_connection_set_tls_database ()">gst_rtsp_connection_set_tls_database</a>, function in <a class="link" href="gst-plugins-base-libs-gstrtspconnection.html" title="gstrtspconnection">gstrtspconnection</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstrtspconnection.html#gst-rtsp-connection-set-tls-interaction" title="gst_rtsp_connection_set_tls_interaction ()">gst_rtsp_connection_set_tls_interaction</a>, function in <a class="link" href="gst-plugins-base-libs-gstrtspconnection.html" title="gstrtspconnection">gstrtspconnection</a>
+</dt>
+<dd></dd>
+<dt>
 <a class="link" href="gst-plugins-base-libs-gstrtspconnection.html#gst-rtsp-connection-set-tls-validation-flags" title="gst_rtsp_connection_set_tls_validation_flags ()">gst_rtsp_connection_set_tls_validation_flags</a>, function in <a class="link" href="gst-plugins-base-libs-gstrtspconnection.html" title="gstrtspconnection">gstrtspconnection</a>
 </dt>
 <dd></dd>
@@ -3568,6 +3744,10 @@
 </dt>
 <dd></dd>
 <dt>
+<a class="link" href="gst-plugins-base-libs-gstrtspmessage.html#gst-rtsp-message-add-header-by-name" title="gst_rtsp_message_add_header_by_name ()">gst_rtsp_message_add_header_by_name</a>, function in <a class="link" href="gst-plugins-base-libs-gstrtspmessage.html" title="gstrtspmessage">gstrtspmessage</a>
+</dt>
+<dd></dd>
+<dt>
 <a class="link" href="gst-plugins-base-libs-gstrtspmessage.html#gst-rtsp-message-append-headers" title="gst_rtsp_message_append_headers ()">gst_rtsp_message_append_headers</a>, function in <a class="link" href="gst-plugins-base-libs-gstrtspmessage.html" title="gstrtspmessage">gstrtspmessage</a>
 </dt>
 <dd></dd>
@@ -3588,6 +3768,10 @@
 </dt>
 <dd></dd>
 <dt>
+<a class="link" href="gst-plugins-base-libs-gstrtspmessage.html#gst-rtsp-message-get-header-by-name" title="gst_rtsp_message_get_header_by_name ()">gst_rtsp_message_get_header_by_name</a>, function in <a class="link" href="gst-plugins-base-libs-gstrtspmessage.html" title="gstrtspmessage">gstrtspmessage</a>
+</dt>
+<dd></dd>
+<dt>
 <a class="link" href="gst-plugins-base-libs-gstrtspmessage.html#gst-rtsp-message-get-type" title="gst_rtsp_message_get_type ()">gst_rtsp_message_get_type</a>, function in <a class="link" href="gst-plugins-base-libs-gstrtspmessage.html" title="gstrtspmessage">gstrtspmessage</a>
 </dt>
 <dd></dd>
@@ -3640,6 +3824,10 @@
 </dt>
 <dd></dd>
 <dt>
+<a class="link" href="gst-plugins-base-libs-gstrtspmessage.html#gst-rtsp-message-remove-header-by-name" title="gst_rtsp_message_remove_header_by_name ()">gst_rtsp_message_remove_header_by_name</a>, function in <a class="link" href="gst-plugins-base-libs-gstrtspmessage.html" title="gstrtspmessage">gstrtspmessage</a>
+</dt>
+<dd></dd>
+<dt>
 <a class="link" href="gst-plugins-base-libs-gstrtspmessage.html#gst-rtsp-message-set-body" title="gst_rtsp_message_set_body ()">gst_rtsp_message_set_body</a>, function in <a class="link" href="gst-plugins-base-libs-gstrtspmessage.html" title="gstrtspmessage">gstrtspmessage</a>
 </dt>
 <dd></dd>
@@ -3656,6 +3844,10 @@
 </dt>
 <dd></dd>
 <dt>
+<a class="link" href="gst-plugins-base-libs-gstrtspmessage.html#gst-rtsp-message-take-header-by-name" title="gst_rtsp_message_take_header_by_name ()">gst_rtsp_message_take_header_by_name</a>, function in <a class="link" href="gst-plugins-base-libs-gstrtspmessage.html" title="gstrtspmessage">gstrtspmessage</a>
+</dt>
+<dd></dd>
+<dt>
 <a class="link" href="gst-plugins-base-libs-gstrtspmessage.html#gst-rtsp-message-unset" title="gst_rtsp_message_unset ()">gst_rtsp_message_unset</a>, function in <a class="link" href="gst-plugins-base-libs-gstrtspmessage.html" title="gstrtspmessage">gstrtspmessage</a>
 </dt>
 <dd></dd>
@@ -3780,6 +3972,10 @@
 </dt>
 <dd></dd>
 <dt>
+<a class="link" href="gst-plugins-base-libs-gstrtspconnection.html#gst-rtsp-watch-set-flushing" title="gst_rtsp_watch_set_flushing ()">gst_rtsp_watch_set_flushing</a>, function in <a class="link" href="gst-plugins-base-libs-gstrtspconnection.html" title="gstrtspconnection">gstrtspconnection</a>
+</dt>
+<dd></dd>
+<dt>
 <a class="link" href="gst-plugins-base-libs-gstrtspconnection.html#gst-rtsp-watch-set-send-backlog" title="gst_rtsp_watch_set_send_backlog ()">gst_rtsp_watch_set_send_backlog</a>, function in <a class="link" href="gst-plugins-base-libs-gstrtspconnection.html" title="gstrtspconnection">gstrtspconnection</a>
 </dt>
 <dd></dd>
@@ -3921,6 +4117,10 @@
 </dt>
 <dd></dd>
 <dt>
+<a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-media-copy" title="gst_sdp_media_copy ()">gst_sdp_media_copy</a>, function in <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html" title="gstsdpmessage">gstsdpmessage</a>
+</dt>
+<dd></dd>
+<dt>
 <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-media-formats-len" title="gst_sdp_media_formats_len ()">gst_sdp_media_formats_len</a>, function in <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html" title="gstsdpmessage">gstsdpmessage</a>
 </dt>
 <dd></dd>
@@ -4101,6 +4301,10 @@
 </dt>
 <dd></dd>
 <dt>
+<a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-message-copy" title="gst_sdp_message_copy ()">gst_sdp_message_copy</a>, function in <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html" title="gstsdpmessage">gstsdpmessage</a>
+</dt>
+<dd></dd>
+<dt>
 <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-message-dump" title="gst_sdp_message_dump ()">gst_sdp_message_dump</a>, function in <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html" title="gstsdpmessage">gstsdpmessage</a>
 </dt>
 <dd></dd>
@@ -4582,6 +4786,10 @@
 </dt>
 <dd></dd>
 <dt>
+<a class="link" href="gst-plugins-base-libs-gsttag.html#gst-tag-image-data-to-image-sample" title="gst_tag_image_data_to_image_sample ()">gst_tag_image_data_to_image_sample</a>, function in <a class="link" href="gst-plugins-base-libs-gsttag.html" title="gsttag">gsttag</a>
+</dt>
+<dd></dd>
+<dt>
 <a class="link" href="gst-plugins-base-libs-gsttag.html#GST-TAG-IMAGE-HORIZONTAL-PPI:CAPS" title="GST_TAG_IMAGE_HORIZONTAL_PPI">GST_TAG_IMAGE_HORIZONTAL_PPI</a>, macro in <a class="link" href="gst-plugins-base-libs-gsttag.html" title="gsttag">gsttag</a>
 </dt>
 <dd></dd>
@@ -4638,6 +4846,10 @@
 </dt>
 <dd></dd>
 <dt>
+<a class="link" href="gst-plugins-base-libs-gsttag.html#GST-TAG-MUSICAL-KEY:CAPS" title="GST_TAG_MUSICAL_KEY">GST_TAG_MUSICAL_KEY</a>, macro in <a class="link" href="gst-plugins-base-libs-gsttag.html" title="gsttag">gsttag</a>
+</dt>
+<dd></dd>
+<dt>
 <a class="link" href="gst-plugins-base-libs-gsttag.html#GST-TAG-MUSICBRAINZ-ALBUMARTISTID:CAPS" title="GST_TAG_MUSICBRAINZ_ALBUMARTISTID">GST_TAG_MUSICBRAINZ_ALBUMARTISTID</a>, macro in <a class="link" href="gst-plugins-base-libs-gsttag.html" title="gsttag">gsttag</a>
 </dt>
 <dd></dd>
@@ -4723,7 +4935,19 @@
 </dt>
 <dd></dd>
 <dt>
-<a class="link" href="gst-plugins-base-libs-gstvideo.html#GstVideoChromaSite" title="enum GstVideoChromaSite">GstVideoChromaSite</a>, enum in <a class="link" href="gst-plugins-base-libs-gstvideo.html" title="gstvideo">gstvideo</a>
+<a class="link" href="gst-plugins-base-libs-GstVideoChroma.html#GstVideoChromaFlags" title="enum GstVideoChromaFlags">GstVideoChromaFlags</a>, enum in <a class="link" href="gst-plugins-base-libs-GstVideoChroma.html" title="GstVideoChroma">GstVideoChroma</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-GstVideoChroma.html#GstVideoChromaMethod" title="enum GstVideoChromaMethod">GstVideoChromaMethod</a>, enum in <a class="link" href="gst-plugins-base-libs-GstVideoChroma.html" title="GstVideoChroma">GstVideoChroma</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-GstVideoChroma.html#GstVideoChromaResample" title="GstVideoChromaResample">GstVideoChromaResample</a>, struct in <a class="link" href="gst-plugins-base-libs-GstVideoChroma.html" title="GstVideoChroma">GstVideoChroma</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-GstVideoChroma.html#GstVideoChromaSite" title="enum GstVideoChromaSite">GstVideoChromaSite</a>, enum in <a class="link" href="gst-plugins-base-libs-GstVideoChroma.html" title="GstVideoChroma">GstVideoChroma</a>
 </dt>
 <dd></dd>
 <dt>
@@ -4755,6 +4979,10 @@
 </dt>
 <dd></dd>
 <dt>
+<a class="link" href="gst-plugins-base-libs-gstvideo.html#GstVideoConverter" title="GstVideoConverter">GstVideoConverter</a>, struct in <a class="link" href="gst-plugins-base-libs-gstvideo.html" title="gstvideo">gstvideo</a>
+</dt>
+<dd></dd>
+<dt>
 <a class="link" href="gst-plugins-base-libs-gstvideo.html#GstVideoConvertSampleCallback" title="GstVideoConvertSampleCallback ()">GstVideoConvertSampleCallback</a>, user_function in <a class="link" href="gst-plugins-base-libs-gstvideo.html" title="gstvideo">gstvideo</a>
 </dt>
 <dd></dd>
@@ -4771,6 +4999,18 @@
 </dt>
 <dd></dd>
 <dt>
+<a class="link" href="gst-plugins-base-libs-GstVideoDither.html#GstVideoDither" title="GstVideoDither">GstVideoDither</a>, struct in <a class="link" href="gst-plugins-base-libs-GstVideoDither.html" title="GstVideoDither">GstVideoDither</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-GstVideoDither.html#GstVideoDitherFlags" title="enum GstVideoDitherFlags">GstVideoDitherFlags</a>, enum in <a class="link" href="gst-plugins-base-libs-GstVideoDither.html" title="GstVideoDither">GstVideoDither</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-GstVideoDither.html#GstVideoDitherMethod" title="enum GstVideoDitherMethod">GstVideoDitherMethod</a>, enum in <a class="link" href="gst-plugins-base-libs-GstVideoDither.html" title="GstVideoDither">GstVideoDither</a>
+</dt>
+<dd></dd>
+<dt>
 <a class="link" href="gst-plugins-base-libs-GstVideoEncoder.html#GstVideoEncoder" title="struct GstVideoEncoder">GstVideoEncoder</a>, struct in <a class="link" href="gst-plugins-base-libs-GstVideoEncoder.html" title="GstVideoEncoder">GstVideoEncoder</a>
 </dt>
 <dd></dd>
@@ -4843,6 +5083,18 @@
 </dt>
 <dd></dd>
 <dt>
+<a class="link" href="gst-plugins-base-libs-gstvideo.html#GstVideoMultiviewFlags" title="enum GstVideoMultiviewFlags">GstVideoMultiviewFlags</a>, enum in <a class="link" href="gst-plugins-base-libs-gstvideo.html" title="gstvideo">gstvideo</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstvideo.html#GstVideoMultiviewFramePacking" title="enum GstVideoMultiviewFramePacking">GstVideoMultiviewFramePacking</a>, enum in <a class="link" href="gst-plugins-base-libs-gstvideo.html" title="gstvideo">gstvideo</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstvideo.html#GstVideoMultiviewMode" title="enum GstVideoMultiviewMode">GstVideoMultiviewMode</a>, enum in <a class="link" href="gst-plugins-base-libs-gstvideo.html" title="gstvideo">gstvideo</a>
+</dt>
+<dd></dd>
+<dt>
 <a class="link" href="gst-plugins-base-libs-gstvideoorientation.html#GstVideoOrientation-struct" title="GstVideoOrientation">GstVideoOrientation</a>, struct in <a class="link" href="gst-plugins-base-libs-gstvideoorientation.html" title="gstvideoorientation">gstvideoorientation</a>
 </dt>
 <dd></dd>
@@ -4887,6 +5139,26 @@
 </dt>
 <dd></dd>
 <dt>
+<a class="link" href="gst-plugins-base-libs-GstVideoResampler.html#GstVideoResampler" title="struct GstVideoResampler">GstVideoResampler</a>, struct in <a class="link" href="gst-plugins-base-libs-GstVideoResampler.html" title="GstVideoResampler">GstVideoResampler</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-GstVideoResampler.html#GstVideoResamplerFlags" title="enum GstVideoResamplerFlags">GstVideoResamplerFlags</a>, enum in <a class="link" href="gst-plugins-base-libs-GstVideoResampler.html" title="GstVideoResampler">GstVideoResampler</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-GstVideoResampler.html#GstVideoResamplerMethod" title="enum GstVideoResamplerMethod">GstVideoResamplerMethod</a>, enum in <a class="link" href="gst-plugins-base-libs-GstVideoResampler.html" title="GstVideoResampler">GstVideoResampler</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-GstVideoScaler.html#GstVideoScaler" title="GstVideoScaler">GstVideoScaler</a>, struct in <a class="link" href="gst-plugins-base-libs-GstVideoScaler.html" title="GstVideoScaler">GstVideoScaler</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-GstVideoScaler.html#GstVideoScalerFlags" title="enum GstVideoScalerFlags">GstVideoScalerFlags</a>, enum in <a class="link" href="gst-plugins-base-libs-GstVideoScaler.html" title="GstVideoScaler">GstVideoScaler</a>
+</dt>
+<dd></dd>
+<dt>
 <a class="link" href="gst-plugins-base-libs-gstvideosink.html#GstVideoSink-struct" title="struct GstVideoSink">GstVideoSink</a>, struct in <a class="link" href="gst-plugins-base-libs-gstvideosink.html" title="gstvideosink">gstvideosink</a>
 </dt>
 <dd></dd>
@@ -4915,6 +5187,14 @@
 </dt>
 <dd></dd>
 <dt>
+<a class="link" href="gst-plugins-base-libs-gstvideo.html#gst-video-blend" title="gst_video_blend ()">gst_video_blend</a>, function in <a class="link" href="gst-plugins-base-libs-gstvideo.html" title="gstvideo">gstvideo</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstvideo.html#gst-video-blend-scale-linear-RGBA" title="gst_video_blend_scale_linear_RGBA ()">gst_video_blend_scale_linear_RGBA</a>, function in <a class="link" href="gst-plugins-base-libs-gstvideo.html" title="gstvideo">gstvideo</a>
+</dt>
+<dd></dd>
+<dt>
 <a class="link" href="gst-plugins-base-libs-GstVideoPool.html#gst-video-buffer-pool-new" title="gst_video_buffer_pool_new ()">gst_video_buffer_pool_new</a>, function in <a class="link" href="gst-plugins-base-libs-GstVideoPool.html" title="GstVideoPool">GstVideoPool</a>
 </dt>
 <dd></dd>
@@ -4927,11 +5207,27 @@
 </dt>
 <dd></dd>
 <dt>
-<a class="link" href="gst-plugins-base-libs-gstvideo.html#gst-video-chroma-from-string" title="gst_video_chroma_from_string ()">gst_video_chroma_from_string</a>, function in <a class="link" href="gst-plugins-base-libs-gstvideo.html" title="gstvideo">gstvideo</a>
+<a class="link" href="gst-plugins-base-libs-GstVideoChroma.html#gst-video-chroma-from-string" title="gst_video_chroma_from_string ()">gst_video_chroma_from_string</a>, function in <a class="link" href="gst-plugins-base-libs-GstVideoChroma.html" title="GstVideoChroma">GstVideoChroma</a>
 </dt>
 <dd></dd>
 <dt>
-<a class="link" href="gst-plugins-base-libs-gstvideo.html#gst-video-chroma-to-string" title="gst_video_chroma_to_string ()">gst_video_chroma_to_string</a>, function in <a class="link" href="gst-plugins-base-libs-gstvideo.html" title="gstvideo">gstvideo</a>
+<a class="link" href="gst-plugins-base-libs-GstVideoChroma.html#gst-video-chroma-resample" title="gst_video_chroma_resample ()">gst_video_chroma_resample</a>, function in <a class="link" href="gst-plugins-base-libs-GstVideoChroma.html" title="GstVideoChroma">GstVideoChroma</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-GstVideoChroma.html#gst-video-chroma-resample-free" title="gst_video_chroma_resample_free ()">gst_video_chroma_resample_free</a>, function in <a class="link" href="gst-plugins-base-libs-GstVideoChroma.html" title="GstVideoChroma">GstVideoChroma</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-GstVideoChroma.html#gst-video-chroma-resample-get-info" title="gst_video_chroma_resample_get_info ()">gst_video_chroma_resample_get_info</a>, function in <a class="link" href="gst-plugins-base-libs-GstVideoChroma.html" title="GstVideoChroma">GstVideoChroma</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-GstVideoChroma.html#gst-video-chroma-resample-new" title="gst_video_chroma_resample_new ()">gst_video_chroma_resample_new</a>, function in <a class="link" href="gst-plugins-base-libs-GstVideoChroma.html" title="GstVideoChroma">GstVideoChroma</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-GstVideoChroma.html#gst-video-chroma-to-string" title="gst_video_chroma_to_string ()">gst_video_chroma_to_string</a>, function in <a class="link" href="gst-plugins-base-libs-GstVideoChroma.html" title="GstVideoChroma">GstVideoChroma</a>
 </dt>
 <dd></dd>
 <dt>
@@ -5023,6 +5319,10 @@
 </dt>
 <dd></dd>
 <dt>
+<a class="link" href="gst-plugins-base-libs-gstvideo.html#gst-video-colorimetry-is-equal" title="gst_video_colorimetry_is_equal ()">gst_video_colorimetry_is_equal</a>, function in <a class="link" href="gst-plugins-base-libs-gstvideo.html" title="gstvideo">gstvideo</a>
+</dt>
+<dd></dd>
+<dt>
 <a class="link" href="gst-plugins-base-libs-gstvideo.html#gst-video-colorimetry-matches" title="gst_video_colorimetry_matches ()">gst_video_colorimetry_matches</a>, function in <a class="link" href="gst-plugins-base-libs-gstvideo.html" title="gstvideo">gstvideo</a>
 </dt>
 <dd></dd>
@@ -5031,10 +5331,42 @@
 </dt>
 <dd></dd>
 <dt>
+<a class="link" href="gst-plugins-base-libs-gstvideo.html#gst-video-color-matrix-get-Kr-Kb" title="gst_video_color_matrix_get_Kr_Kb ()">gst_video_color_matrix_get_Kr_Kb</a>, function in <a class="link" href="gst-plugins-base-libs-gstvideo.html" title="gstvideo">gstvideo</a>
+</dt>
+<dd></dd>
+<dt>
 <a class="link" href="gst-plugins-base-libs-gstvideo.html#gst-video-color-range-offsets" title="gst_video_color_range_offsets ()">gst_video_color_range_offsets</a>, function in <a class="link" href="gst-plugins-base-libs-gstvideo.html" title="gstvideo">gstvideo</a>
 </dt>
 <dd></dd>
 <dt>
+<a class="link" href="gst-plugins-base-libs-gstvideo.html#gst-video-color-transfer-decode" title="gst_video_color_transfer_decode ()">gst_video_color_transfer_decode</a>, function in <a class="link" href="gst-plugins-base-libs-gstvideo.html" title="gstvideo">gstvideo</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstvideo.html#gst-video-color-transfer-encode" title="gst_video_color_transfer_encode ()">gst_video_color_transfer_encode</a>, function in <a class="link" href="gst-plugins-base-libs-gstvideo.html" title="gstvideo">gstvideo</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstvideo.html#gst-video-converter-frame" title="gst_video_converter_frame ()">gst_video_converter_frame</a>, function in <a class="link" href="gst-plugins-base-libs-gstvideo.html" title="gstvideo">gstvideo</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstvideo.html#gst-video-converter-free" title="gst_video_converter_free ()">gst_video_converter_free</a>, function in <a class="link" href="gst-plugins-base-libs-gstvideo.html" title="gstvideo">gstvideo</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstvideo.html#gst-video-converter-get-config" title="gst_video_converter_get_config ()">gst_video_converter_get_config</a>, function in <a class="link" href="gst-plugins-base-libs-gstvideo.html" title="gstvideo">gstvideo</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstvideo.html#gst-video-converter-new" title="gst_video_converter_new ()">gst_video_converter_new</a>, function in <a class="link" href="gst-plugins-base-libs-gstvideo.html" title="gstvideo">gstvideo</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstvideo.html#gst-video-converter-set-config" title="gst_video_converter_set_config ()">gst_video_converter_set_config</a>, function in <a class="link" href="gst-plugins-base-libs-gstvideo.html" title="gstvideo">gstvideo</a>
+</dt>
+<dd></dd>
+<dt>
 <a class="link" href="gst-plugins-base-libs-gstvideo.html#gst-video-convert-sample" title="gst_video_convert_sample ()">gst_video_convert_sample</a>, function in <a class="link" href="gst-plugins-base-libs-gstvideo.html" title="gstvideo">gstvideo</a>
 </dt>
 <dd></dd>
@@ -5151,6 +5483,10 @@
 </dt>
 <dd></dd>
 <dt>
+<a class="link" href="gst-plugins-base-libs-GstVideoDecoder.html#gst-video-decoder-proxy-getcaps" title="gst_video_decoder_proxy_getcaps ()">gst_video_decoder_proxy_getcaps</a>, function in <a class="link" href="gst-plugins-base-libs-GstVideoDecoder.html" title="GstVideoDecoder">GstVideoDecoder</a>
+</dt>
+<dd></dd>
+<dt>
 <a class="link" href="gst-plugins-base-libs-GstVideoDecoder.html#gst-video-decoder-release-frame" title="gst_video_decoder_release_frame ()">gst_video_decoder_release_frame</a>, function in <a class="link" href="gst-plugins-base-libs-GstVideoDecoder.html" title="GstVideoDecoder">GstVideoDecoder</a>
 </dt>
 <dd></dd>
@@ -5203,6 +5539,18 @@
 </dt>
 <dd></dd>
 <dt>
+<a class="link" href="gst-plugins-base-libs-GstVideoDither.html#gst-video-dither-free" title="gst_video_dither_free ()">gst_video_dither_free</a>, function in <a class="link" href="gst-plugins-base-libs-GstVideoDither.html" title="GstVideoDither">GstVideoDither</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-GstVideoDither.html#gst-video-dither-line" title="gst_video_dither_line ()">gst_video_dither_line</a>, function in <a class="link" href="gst-plugins-base-libs-GstVideoDither.html" title="GstVideoDither">GstVideoDither</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-GstVideoDither.html#gst-video-dither-new" title="gst_video_dither_new ()">gst_video_dither_new</a>, function in <a class="link" href="gst-plugins-base-libs-GstVideoDither.html" title="GstVideoDither">GstVideoDither</a>
+</dt>
+<dd></dd>
+<dt>
 <a class="link" href="gst-plugins-base-libs-GstVideoEncoder.html#gst-video-encoder-allocate-output-buffer" title="gst_video_encoder_allocate_output_buffer ()">gst_video_encoder_allocate_output_buffer</a>, function in <a class="link" href="gst-plugins-base-libs-GstVideoEncoder.html" title="GstVideoEncoder">GstVideoEncoder</a>
 </dt>
 <dd></dd>
@@ -5599,10 +5947,22 @@
 </dt>
 <dd></dd>
 <dt>
+<a class="link" href="gst-plugins-base-libs-gstvideo.html#gst-video-guess-framerate" title="gst_video_guess_framerate ()">gst_video_guess_framerate</a>, function in <a class="link" href="gst-plugins-base-libs-gstvideo.html" title="gstvideo">gstvideo</a>
+</dt>
+<dd></dd>
+<dt>
 <a class="link" href="gst-plugins-base-libs-gstvideo.html#gst-video-info-align" title="gst_video_info_align ()">gst_video_info_align</a>, function in <a class="link" href="gst-plugins-base-libs-gstvideo.html" title="gstvideo">gstvideo</a>
 </dt>
 <dd></dd>
 <dt>
+<a class="link" href="gst-plugins-base-libs-gstvideo.html#GST-VIDEO-INFO-CHROMA-SITE:CAPS" title="GST_VIDEO_INFO_CHROMA_SITE()">GST_VIDEO_INFO_CHROMA_SITE</a>, macro in <a class="link" href="gst-plugins-base-libs-gstvideo.html" title="gstvideo">gstvideo</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstvideo.html#GST-VIDEO-INFO-COLORIMETRY:CAPS" title="GST_VIDEO_INFO_COLORIMETRY()">GST_VIDEO_INFO_COLORIMETRY</a>, macro in <a class="link" href="gst-plugins-base-libs-gstvideo.html" title="gstvideo">gstvideo</a>
+</dt>
+<dd></dd>
+<dt>
 <a class="link" href="gst-plugins-base-libs-gstvideo.html#GST-VIDEO-INFO-COMP-DATA:CAPS" title="GST_VIDEO_INFO_COMP_DATA()">GST_VIDEO_INFO_COMP_DATA</a>, macro in <a class="link" href="gst-plugins-base-libs-gstvideo.html" title="gstvideo">gstvideo</a>
 </dt>
 <dd></dd>
@@ -5643,6 +6003,10 @@
 </dt>
 <dd></dd>
 <dt>
+<a class="link" href="gst-plugins-base-libs-gstvideo.html#gst-video-info-copy" title="gst_video_info_copy ()">gst_video_info_copy</a>, function in <a class="link" href="gst-plugins-base-libs-gstvideo.html" title="gstvideo">gstvideo</a>
+</dt>
+<dd></dd>
+<dt>
 <a class="link" href="gst-plugins-base-libs-gstvideo.html#GST-VIDEO-INFO-FLAGS:CAPS" title="GST_VIDEO_INFO_FLAGS()">GST_VIDEO_INFO_FLAGS</a>, macro in <a class="link" href="gst-plugins-base-libs-gstvideo.html" title="gstvideo">gstvideo</a>
 </dt>
 <dd></dd>
@@ -5671,6 +6035,10 @@
 </dt>
 <dd></dd>
 <dt>
+<a class="link" href="gst-plugins-base-libs-gstvideo.html#gst-video-info-free" title="gst_video_info_free ()">gst_video_info_free</a>, function in <a class="link" href="gst-plugins-base-libs-gstvideo.html" title="gstvideo">gstvideo</a>
+</dt>
+<dd></dd>
+<dt>
 <a class="link" href="gst-plugins-base-libs-gstvideo.html#gst-video-info-from-caps" title="gst_video_info_from_caps ()">gst_video_info_from_caps</a>, function in <a class="link" href="gst-plugins-base-libs-gstvideo.html" title="gstvideo">gstvideo</a>
 </dt>
 <dd></dd>
@@ -5711,10 +6079,22 @@
 </dt>
 <dd></dd>
 <dt>
+<a class="link" href="gst-plugins-base-libs-gstvideo.html#GST-VIDEO-INFO-MULTIVIEW-FLAGS:CAPS" title="GST_VIDEO_INFO_MULTIVIEW_FLAGS()">GST_VIDEO_INFO_MULTIVIEW_FLAGS</a>, macro in <a class="link" href="gst-plugins-base-libs-gstvideo.html" title="gstvideo">gstvideo</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstvideo.html#GST-VIDEO-INFO-MULTIVIEW-MODE:CAPS" title="GST_VIDEO_INFO_MULTIVIEW_MODE()">GST_VIDEO_INFO_MULTIVIEW_MODE</a>, macro in <a class="link" href="gst-plugins-base-libs-gstvideo.html" title="gstvideo">gstvideo</a>
+</dt>
+<dd></dd>
+<dt>
 <a class="link" href="gst-plugins-base-libs-gstvideo.html#GST-VIDEO-INFO-NAME:CAPS" title="GST_VIDEO_INFO_NAME()">GST_VIDEO_INFO_NAME</a>, macro in <a class="link" href="gst-plugins-base-libs-gstvideo.html" title="gstvideo">gstvideo</a>
 </dt>
 <dd></dd>
 <dt>
+<a class="link" href="gst-plugins-base-libs-gstvideo.html#gst-video-info-new" title="gst_video_info_new ()">gst_video_info_new</a>, function in <a class="link" href="gst-plugins-base-libs-gstvideo.html" title="gstvideo">gstvideo</a>
+</dt>
+<dd></dd>
+<dt>
 <a class="link" href="gst-plugins-base-libs-gstvideo.html#GST-VIDEO-INFO-N-COMPONENTS:CAPS" title="GST_VIDEO_INFO_N_COMPONENTS()">GST_VIDEO_INFO_N_COMPONENTS</a>, macro in <a class="link" href="gst-plugins-base-libs-gstvideo.html" title="gstvideo">gstvideo</a>
 </dt>
 <dd></dd>
@@ -5779,6 +6159,42 @@
 </dt>
 <dd></dd>
 <dt>
+<a class="link" href="gst-plugins-base-libs-gstvideo.html#gst-video-multiview-get-doubled-height-modes" title="gst_video_multiview_get_doubled_height_modes ()">gst_video_multiview_get_doubled_height_modes</a>, function in <a class="link" href="gst-plugins-base-libs-gstvideo.html" title="gstvideo">gstvideo</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstvideo.html#gst-video-multiview-get-doubled-size-modes" title="gst_video_multiview_get_doubled_size_modes ()">gst_video_multiview_get_doubled_size_modes</a>, function in <a class="link" href="gst-plugins-base-libs-gstvideo.html" title="gstvideo">gstvideo</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstvideo.html#gst-video-multiview-get-doubled-width-modes" title="gst_video_multiview_get_doubled_width_modes ()">gst_video_multiview_get_doubled_width_modes</a>, function in <a class="link" href="gst-plugins-base-libs-gstvideo.html" title="gstvideo">gstvideo</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstvideo.html#gst-video-multiview-get-mono-modes" title="gst_video_multiview_get_mono_modes ()">gst_video_multiview_get_mono_modes</a>, function in <a class="link" href="gst-plugins-base-libs-gstvideo.html" title="gstvideo">gstvideo</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstvideo.html#gst-video-multiview-get-unpacked-modes" title="gst_video_multiview_get_unpacked_modes ()">gst_video_multiview_get_unpacked_modes</a>, function in <a class="link" href="gst-plugins-base-libs-gstvideo.html" title="gstvideo">gstvideo</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstvideo.html#gst-video-multiview-guess-half-aspect" title="gst_video_multiview_guess_half_aspect ()">gst_video_multiview_guess_half_aspect</a>, function in <a class="link" href="gst-plugins-base-libs-gstvideo.html" title="gstvideo">gstvideo</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstvideo.html#gst-video-multiview-mode-from-caps-string" title="gst_video_multiview_mode_from_caps_string ()">gst_video_multiview_mode_from_caps_string</a>, function in <a class="link" href="gst-plugins-base-libs-gstvideo.html" title="gstvideo">gstvideo</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstvideo.html#gst-video-multiview-mode-to-caps-string" title="gst_video_multiview_mode_to_caps_string ()">gst_video_multiview_mode_to_caps_string</a>, function in <a class="link" href="gst-plugins-base-libs-gstvideo.html" title="gstvideo">gstvideo</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstvideo.html#gst-video-multiview-video-info-change-mode" title="gst_video_multiview_video_info_change_mode ()">gst_video_multiview_video_info_change_mode</a>, function in <a class="link" href="gst-plugins-base-libs-gstvideo.html" title="gstvideo">gstvideo</a>
+</dt>
+<dd></dd>
+<dt>
 <a class="link" href="gst-plugins-base-libs-gstvideoorientation.html#gst-video-orientation-get-hcenter" title="gst_video_orientation_get_hcenter ()">gst_video_orientation_get_hcenter</a>, function in <a class="link" href="gst-plugins-base-libs-gstvideoorientation.html" title="gstvideoorientation">gstvideoorientation</a>
 </dt>
 <dd></dd>
@@ -5947,6 +6363,66 @@
 </dt>
 <dd></dd>
 <dt>
+<a class="link" href="gst-plugins-base-libs-GstVideoResampler.html#gst-video-resampler-clear" title="gst_video_resampler_clear ()">gst_video_resampler_clear</a>, function in <a class="link" href="gst-plugins-base-libs-GstVideoResampler.html" title="GstVideoResampler">GstVideoResampler</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-GstVideoResampler.html#gst-video-resampler-init" title="gst_video_resampler_init ()">gst_video_resampler_init</a>, function in <a class="link" href="gst-plugins-base-libs-GstVideoResampler.html" title="GstVideoResampler">GstVideoResampler</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-GstVideoResampler.html#GST-VIDEO-RESAMPLER-OPT-CUBIC-B:CAPS" title="GST_VIDEO_RESAMPLER_OPT_CUBIC_B">GST_VIDEO_RESAMPLER_OPT_CUBIC_B</a>, macro in <a class="link" href="gst-plugins-base-libs-GstVideoResampler.html" title="GstVideoResampler">GstVideoResampler</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-GstVideoResampler.html#GST-VIDEO-RESAMPLER-OPT-CUBIC-C:CAPS" title="GST_VIDEO_RESAMPLER_OPT_CUBIC_C">GST_VIDEO_RESAMPLER_OPT_CUBIC_C</a>, macro in <a class="link" href="gst-plugins-base-libs-GstVideoResampler.html" title="GstVideoResampler">GstVideoResampler</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-GstVideoResampler.html#GST-VIDEO-RESAMPLER-OPT-ENVELOPE:CAPS" title="GST_VIDEO_RESAMPLER_OPT_ENVELOPE">GST_VIDEO_RESAMPLER_OPT_ENVELOPE</a>, macro in <a class="link" href="gst-plugins-base-libs-GstVideoResampler.html" title="GstVideoResampler">GstVideoResampler</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-GstVideoResampler.html#GST-VIDEO-RESAMPLER-OPT-MAX-TAPS:CAPS" title="GST_VIDEO_RESAMPLER_OPT_MAX_TAPS">GST_VIDEO_RESAMPLER_OPT_MAX_TAPS</a>, macro in <a class="link" href="gst-plugins-base-libs-GstVideoResampler.html" title="GstVideoResampler">GstVideoResampler</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-GstVideoResampler.html#GST-VIDEO-RESAMPLER-OPT-SHARPEN:CAPS" title="GST_VIDEO_RESAMPLER_OPT_SHARPEN">GST_VIDEO_RESAMPLER_OPT_SHARPEN</a>, macro in <a class="link" href="gst-plugins-base-libs-GstVideoResampler.html" title="GstVideoResampler">GstVideoResampler</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-GstVideoResampler.html#GST-VIDEO-RESAMPLER-OPT-SHARPNESS:CAPS" title="GST_VIDEO_RESAMPLER_OPT_SHARPNESS">GST_VIDEO_RESAMPLER_OPT_SHARPNESS</a>, macro in <a class="link" href="gst-plugins-base-libs-GstVideoResampler.html" title="GstVideoResampler">GstVideoResampler</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-GstVideoScaler.html#gst-video-scaler-2d" title="gst_video_scaler_2d ()">gst_video_scaler_2d</a>, function in <a class="link" href="gst-plugins-base-libs-GstVideoScaler.html" title="GstVideoScaler">GstVideoScaler</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-GstVideoScaler.html#gst-video-scaler-combine-packed-YUV" title="gst_video_scaler_combine_packed_YUV ()">gst_video_scaler_combine_packed_YUV</a>, function in <a class="link" href="gst-plugins-base-libs-GstVideoScaler.html" title="GstVideoScaler">GstVideoScaler</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-GstVideoScaler.html#gst-video-scaler-free" title="gst_video_scaler_free ()">gst_video_scaler_free</a>, function in <a class="link" href="gst-plugins-base-libs-GstVideoScaler.html" title="GstVideoScaler">GstVideoScaler</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-GstVideoScaler.html#gst-video-scaler-get-coeff" title="gst_video_scaler_get_coeff ()">gst_video_scaler_get_coeff</a>, function in <a class="link" href="gst-plugins-base-libs-GstVideoScaler.html" title="GstVideoScaler">GstVideoScaler</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-GstVideoScaler.html#gst-video-scaler-horizontal" title="gst_video_scaler_horizontal ()">gst_video_scaler_horizontal</a>, function in <a class="link" href="gst-plugins-base-libs-GstVideoScaler.html" title="GstVideoScaler">GstVideoScaler</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-GstVideoScaler.html#gst-video-scaler-new" title="gst_video_scaler_new ()">gst_video_scaler_new</a>, function in <a class="link" href="gst-plugins-base-libs-GstVideoScaler.html" title="GstVideoScaler">GstVideoScaler</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-GstVideoScaler.html#gst-video-scaler-vertical" title="gst_video_scaler_vertical ()">gst_video_scaler_vertical</a>, function in <a class="link" href="gst-plugins-base-libs-GstVideoScaler.html" title="GstVideoScaler">GstVideoScaler</a>
+</dt>
+<dd></dd>
+<dt>
 <a class="link" href="gst-plugins-base-libs-gstvideosink.html#gst-video-sink-center-rect" title="gst_video_sink_center_rect ()">gst_video_sink_center_rect</a>, function in <a class="link" href="gst-plugins-base-libs-gstvideosink.html" title="gstvideosink">gstvideosink</a>
 </dt>
 <dd></dd>
@@ -6004,7 +6480,6 @@
 <dd></dd>
 </div>
 <div class="footer">
-<hr>
-          Generated by GTK-Doc V1.21</div>
+<hr>Generated by GTK-Doc V1.24</div>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/libs/html/compiling.html b/docs/libs/html/compiling.html
index 8d5f099..ec878db 100644
--- a/docs/libs/html/compiling.html
+++ b/docs/libs/html/compiling.html
@@ -2,13 +2,13 @@
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>GStreamer Base Plugins 1.0 Library Reference Manual: Compiling</title>
+<title>Compiling: GStreamer Base 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 Base Plugins 1.0 Library Reference Manual">
 <link rel="up" href="gstreamer-plugins-base.html" title="Part I. GStreamer Base Plugins Libraries">
 <link rel="prev" href="gstreamer-plugins-base.html" title="Part I. GStreamer Base Plugins Libraries">
 <link rel="next" href="gstreamer-allocators.html" title="Allocators Library">
-<meta name="generator" content="GTK-Doc V1.21 (XML mode)">
+<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">
@@ -58,7 +58,6 @@
 </div>
 </div>
 <div class="footer">
-<hr>
-          Generated by GTK-Doc V1.21</div>
+<hr>Generated by GTK-Doc V1.24</div>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/libs/html/gst-plugins-base-libs-1.0.devhelp2 b/docs/libs/html/gst-plugins-base-libs-1.0.devhelp2
index 7ae1b4b..73fffd3 100644
--- a/docs/libs/html/gst-plugins-base-libs-1.0.devhelp2
+++ b/docs/libs/html/gst-plugins-base-libs-1.0.devhelp2
@@ -1,11 +1,11 @@
 <?xml version="1.0" encoding="utf-8" standalone="no"?>
-<!DOCTYPE book PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "">
 <book xmlns="http://www.devhelp.net/book" title="GStreamer Base Plugins 1.0 Library Reference Manual" link="index.html" author="" name="gst-plugins-base-libs-1.0" version="2" language="c">
   <chapters>
     <sub name="GStreamer Base Plugins Libraries" link="gstreamer-plugins-base.html">
       <sub name="Compiling" link="compiling.html"/>
       <sub name="Allocators Library" link="gstreamer-allocators.html">
         <sub name="dmabuf" link="gst-plugins-base-libs-dmabuf.html"/>
+        <sub name="fdmemory" link="gst-plugins-base-libs-fdmemory.html"/>
       </sub>
       <sub name="App Library" link="gstreamer-app.html">
         <sub name="appsrc" link="gst-plugins-base-libs-appsrc.html"/>
@@ -89,6 +89,10 @@
         <sub name="gstvideometa" link="gst-plugins-base-libs-gstvideometa.html"/>
         <sub name="gstvideooverlaycomposition" link="gst-plugins-base-libs-gstvideooverlaycomposition.html"/>
         <sub name="gstvideofilter" link="gst-plugins-base-libs-gstvideofilter.html"/>
+        <sub name="GstVideoDither" link="gst-plugins-base-libs-GstVideoDither.html"/>
+        <sub name="GstVideoChroma" link="gst-plugins-base-libs-GstVideoChroma.html"/>
+        <sub name="GstVideoResampler" link="gst-plugins-base-libs-GstVideoResampler.html"/>
+        <sub name="GstVideoScaler" link="gst-plugins-base-libs-GstVideoScaler.html"/>
         <sub name="gstvideosink" link="gst-plugins-base-libs-gstvideosink.html"/>
         <sub name="gstcolorbalance" link="gst-plugins-base-libs-gstcolorbalance.html"/>
         <sub name="gstcolorbalancechannel" link="gst-plugins-base-libs-gstcolorbalancechannel.html"/>
@@ -107,9 +111,16 @@
     <sub name="Annotation Glossary" link="annotation-glossary.html"/>
   </chapters>
   <functions>
+    <keyword type="function" name="gst_dmabuf_allocator_new ()" link="gst-plugins-base-libs-dmabuf.html#gst-dmabuf-allocator-new" since="1.2"/>
     <keyword type="function" name="gst_dmabuf_allocator_alloc ()" link="gst-plugins-base-libs-dmabuf.html#gst-dmabuf-allocator-alloc" since="1.2"/>
     <keyword type="function" name="gst_dmabuf_memory_get_fd ()" link="gst-plugins-base-libs-dmabuf.html#gst-dmabuf-memory-get-fd" since="1.2"/>
     <keyword type="function" name="gst_is_dmabuf_memory ()" link="gst-plugins-base-libs-dmabuf.html#gst-is-dmabuf-memory" since="1.2"/>
+    <keyword type="function" name="gst_fd_allocator_alloc ()" link="gst-plugins-base-libs-fdmemory.html#gst-fd-allocator-alloc" since="1.6"/>
+    <keyword type="function" name="gst_fd_allocator_get_type ()" link="gst-plugins-base-libs-fdmemory.html#gst-fd-allocator-get-type"/>
+    <keyword type="function" name="gst_fd_allocator_new ()" link="gst-plugins-base-libs-fdmemory.html#gst-fd-allocator-new" since="1.6"/>
+    <keyword type="function" name="gst_fd_memory_get_fd ()" link="gst-plugins-base-libs-fdmemory.html#gst-fd-memory-get-fd" since="1.6"/>
+    <keyword type="function" name="gst_is_fd_memory ()" link="gst-plugins-base-libs-fdmemory.html#gst-is-fd-memory" since="1.6"/>
+    <keyword type="enum" name="enum GstFdMemoryFlags" link="gst-plugins-base-libs-fdmemory.html#GstFdMemoryFlags" since="1.6"/>
     <keyword type="function" name="gst_app_src_set_caps ()" link="gst-plugins-base-libs-appsrc.html#gst-app-src-set-caps"/>
     <keyword type="function" name="gst_app_src_get_caps ()" link="gst-plugins-base-libs-appsrc.html#gst-app-src-get-caps"/>
     <keyword type="function" name="gst_app_src_get_latency ()" link="gst-plugins-base-libs-appsrc.html#gst-app-src-get-latency"/>
@@ -125,6 +136,7 @@
     <keyword type="function" name="gst_app_src_set_emit_signals ()" link="gst-plugins-base-libs-appsrc.html#gst-app-src-set-emit-signals"/>
     <keyword type="function" name="gst_app_src_set_callbacks ()" link="gst-plugins-base-libs-appsrc.html#gst-app-src-set-callbacks"/>
     <keyword type="function" name="gst_app_src_push_buffer ()" link="gst-plugins-base-libs-appsrc.html#gst-app-src-push-buffer"/>
+    <keyword type="function" name="gst_app_src_push_sample ()" link="gst-plugins-base-libs-appsrc.html#gst-app-src-push-sample" since="1.6"/>
     <keyword type="function" name="gst_app_src_end_of_stream ()" link="gst-plugins-base-libs-appsrc.html#gst-app-src-end-of-stream"/>
     <keyword type="enum" name="enum GstAppStreamType" link="gst-plugins-base-libs-appsrc.html#GstAppStreamType"/>
     <keyword type="struct" name="GstAppSrcCallbacks" link="gst-plugins-base-libs-appsrc.html#GstAppSrcCallbacks"/>
@@ -212,9 +224,6 @@
     <keyword type="macro" name="gst_buffer_get_audio_downmix_meta()" link="gst-plugins-base-libs-gstaudiometa.html#gst-buffer-get-audio-downmix-meta"/>
     <keyword type="function" name="gst_buffer_get_audio_downmix_meta_for_channels ()" link="gst-plugins-base-libs-gstaudiometa.html#gst-buffer-get-audio-downmix-meta-for-channels"/>
     <keyword type="struct" name="struct GstAudioDownmixMeta" link="gst-plugins-base-libs-gstaudiometa.html#GstAudioDownmixMeta"/>
-    <keyword type="" name="Using GstAudioCdSrc-based elements in applications" link="gst-plugins-base-libs-gstaudiocdsrc.html#id-1.2.6.5.10.3"/>
-    <keyword type="" name="" link="gst-plugins-base-libs-gstaudiocdsrc.html#id-1.2.6.5.10.3.6"/>
-    <keyword type="" name="Tracks and Table of Contents (TOC)" link="gst-plugins-base-libs-gstaudiocdsrc.html#id-1.2.6.5.10.4"/>
     <keyword type="function" name="gst_audio_cd_src_add_track ()" link="gst-plugins-base-libs-gstaudiocdsrc.html#gst-audio-cd-src-add-track"/>
     <keyword type="struct" name="struct GstAudioCdSrc" link="gst-plugins-base-libs-gstaudiocdsrc.html#GstAudioCdSrc-struct"/>
     <keyword type="struct" name="struct GstAudioCdSrcClass" link="gst-plugins-base-libs-gstaudiocdsrc.html#GstAudioCdSrcClass"/>
@@ -260,6 +269,7 @@
     <keyword type="function" name="gst_audio_decoder_set_plc_aware ()" link="gst-plugins-base-libs-gstaudiodecoder.html#gst-audio-decoder-set-plc-aware"/>
     <keyword type="function" name="gst_audio_decoder_set_tolerance ()" link="gst-plugins-base-libs-gstaudiodecoder.html#gst-audio-decoder-set-tolerance"/>
     <keyword type="function" name="gst_audio_decoder_merge_tags ()" link="gst-plugins-base-libs-gstaudiodecoder.html#gst-audio-decoder-merge-tags"/>
+    <keyword type="function" name="gst_audio_decoder_proxy_getcaps ()" link="gst-plugins-base-libs-gstaudiodecoder.html#gst-audio-decoder-proxy-getcaps" since="1.6"/>
     <keyword type="struct" name="struct GstAudioDecoder" link="gst-plugins-base-libs-gstaudiodecoder.html#GstAudioDecoder-struct"/>
     <keyword type="struct" name="struct GstAudioDecoderClass" link="gst-plugins-base-libs-gstaudiodecoder.html#GstAudioDecoderClass"/>
     <keyword type="macro" name="GST_AUDIO_DECODER_SINK_NAME" link="gst-plugins-base-libs-gstaudiodecoder.html#GST-AUDIO-DECODER-SINK-NAME:CAPS"/>
@@ -315,6 +325,7 @@
     <keyword type="struct" name="struct GstAudioSinkClass" link="gst-plugins-base-libs-gstaudiosink.html#GstAudioSinkClass"/>
     <keyword type="struct" name="struct GstAudioSrc" link="gst-plugins-base-libs-gstaudiosrc.html#GstAudioSrc-struct"/>
     <keyword type="struct" name="struct GstAudioSrcClass" link="gst-plugins-base-libs-gstaudiosrc.html#GstAudioSrcClass"/>
+    <keyword type="function" name="GstAudioBaseSinkCustomSlavingCallback ()" link="gst-plugins-base-libs-gstaudiobasesink.html#GstAudioBaseSinkCustomSlavingCallback" since="1.6"/>
     <keyword type="macro" name="GST_AUDIO_BASE_SINK_CLOCK()" link="gst-plugins-base-libs-gstaudiobasesink.html#GST-AUDIO-BASE-SINK-CLOCK:CAPS"/>
     <keyword type="macro" name="GST_AUDIO_BASE_SINK_PAD()" link="gst-plugins-base-libs-gstaudiobasesink.html#GST-AUDIO-BASE-SINK-PAD:CAPS"/>
     <keyword type="function" name="gst_audio_base_sink_create_ringbuffer ()" link="gst-plugins-base-libs-gstaudiobasesink.html#gst-audio-base-sink-create-ringbuffer"/>
@@ -328,9 +339,12 @@
     <keyword type="function" name="gst_audio_base_sink_get_alignment_threshold ()" link="gst-plugins-base-libs-gstaudiobasesink.html#gst-audio-base-sink-get-alignment-threshold"/>
     <keyword type="function" name="gst_audio_base_sink_set_discont_wait ()" link="gst-plugins-base-libs-gstaudiobasesink.html#gst-audio-base-sink-set-discont-wait"/>
     <keyword type="function" name="gst_audio_base_sink_get_discont_wait ()" link="gst-plugins-base-libs-gstaudiobasesink.html#gst-audio-base-sink-get-discont-wait"/>
+    <keyword type="function" name="gst_audio_base_sink_set_custom_slaving_callback ()" link="gst-plugins-base-libs-gstaudiobasesink.html#gst-audio-base-sink-set-custom-slaving-callback" since="1.6"/>
+    <keyword type="function" name="gst_audio_base_sink_report_device_failure ()" link="gst-plugins-base-libs-gstaudiobasesink.html#gst-audio-base-sink-report-device-failure" since="1.6"/>
     <keyword type="struct" name="struct GstAudioBaseSink" link="gst-plugins-base-libs-gstaudiobasesink.html#GstAudioBaseSink-struct"/>
     <keyword type="struct" name="struct GstAudioBaseSinkClass" link="gst-plugins-base-libs-gstaudiobasesink.html#GstAudioBaseSinkClass"/>
     <keyword type="enum" name="enum GstAudioBaseSinkSlaveMethod" link="gst-plugins-base-libs-gstaudiobasesink.html#GstAudioBaseSinkSlaveMethod"/>
+    <keyword type="enum" name="enum GstAudioBaseSinkDiscontReason" link="gst-plugins-base-libs-gstaudiobasesink.html#GstAudioBaseSinkDiscontReason" since="1.6"/>
     <keyword type="property" name="The “alignment-threshold” property" link="gst-plugins-base-libs-gstaudiobasesink.html#GstAudioBaseSink--alignment-threshold"/>
     <keyword type="property" name="The “buffer-time” property" link="gst-plugins-base-libs-gstaudiobasesink.html#GstAudioBaseSink--buffer-time"/>
     <keyword type="property" name="The “can-activate-pull” property" link="gst-plugins-base-libs-gstaudiobasesink.html#GstAudioBaseSink--can-activate-pull"/>
@@ -364,7 +378,6 @@
     <keyword type="function" name="gst_audio_reorder_channels ()" link="gst-plugins-base-libs-gstaudiochannels.html#gst-audio-reorder-channels"/>
     <keyword type="function" name="gst_audio_get_channel_reorder_map ()" link="gst-plugins-base-libs-gstaudiochannels.html#gst-audio-get-channel-reorder-map"/>
     <keyword type="enum" name="enum GstAudioChannelPosition" link="gst-plugins-base-libs-gstaudiochannels.html#GstAudioChannelPosition"/>
-    <keyword type="" name="" link="gst-plugins-base-libs-gstaudioringbuffer.html#id-1.2.6.15.8.2"/>
     <keyword type="function" name="GstAudioRingBufferCallback ()" link="gst-plugins-base-libs-gstaudioringbuffer.html#GstAudioRingBufferCallback"/>
     <keyword type="macro" name="GST_AUDIO_RING_BUFFER_BROADCAST()" link="gst-plugins-base-libs-gstaudioringbuffer.html#GST-AUDIO-RING-BUFFER-BROADCAST:CAPS"/>
     <keyword type="macro" name="GST_AUDIO_RING_BUFFER_GET_COND()" link="gst-plugins-base-libs-gstaudioringbuffer.html#GST-AUDIO-RING-BUFFER-GET-COND:CAPS"/>
@@ -405,7 +418,6 @@
     <keyword type="enum" name="enum GstAudioRingBufferFormatType" link="gst-plugins-base-libs-gstaudioringbuffer.html#GstAudioRingBufferFormatType"/>
     <keyword type="function" name="gst_audio_iec61937_frame_size ()" link="gst-plugins-base-libs-gstaudioiec61937.html#gst-audio-iec61937-frame-size"/>
     <keyword type="function" name="gst_audio_iec61937_payload ()" link="gst-plugins-base-libs-gstaudioiec61937.html#gst-audio-iec61937-payload"/>
-    <keyword type="" name="" link="gst-plugins-base-libs-gststreamvolume.html#id-1.2.6.17.10.2"/>
     <keyword type="function" name="gst_stream_volume_get_volume ()" link="gst-plugins-base-libs-gststreamvolume.html#gst-stream-volume-get-volume"/>
     <keyword type="function" name="gst_stream_volume_set_volume ()" link="gst-plugins-base-libs-gststreamvolume.html#gst-stream-volume-set-volume"/>
     <keyword type="function" name="gst_stream_volume_get_mute ()" link="gst-plugins-base-libs-gststreamvolume.html#gst-stream-volume-get-mute"/>
@@ -460,7 +472,6 @@
     <keyword type="function" name="gst_riff_parse_strf_vids ()" link="gst-plugins-base-libs-gstriff.html#gst-riff-parse-strf-vids"/>
     <keyword type="function" name="gst_riff_parse_strh ()" link="gst-plugins-base-libs-gstriff.html#gst-riff-parse-strh"/>
     <keyword type="function" name="gst_riff_read_chunk ()" link="gst-plugins-base-libs-gstriff.html#gst-riff-read-chunk"/>
-    <keyword type="" name="Usage" link="gst-plugins-base-libs-gstrtpbaseaudiopayload.html#id-1.2.9.3.9.4"/>
     <keyword type="function" name="gst_rtp_base_audio_payload_set_frame_based ()" link="gst-plugins-base-libs-gstrtpbaseaudiopayload.html#gst-rtp-base-audio-payload-set-frame-based"/>
     <keyword type="function" name="gst_rtp_base_audio_payload_set_frame_options ()" link="gst-plugins-base-libs-gstrtpbaseaudiopayload.html#gst-rtp-base-audio-payload-set-frame-options"/>
     <keyword type="function" name="gst_rtp_base_audio_payload_set_sample_based ()" link="gst-plugins-base-libs-gstrtpbaseaudiopayload.html#gst-rtp-base-audio-payload-set-sample-based"/>
@@ -502,7 +513,6 @@
     <keyword type="property" name="The “stats” property" link="gst-plugins-base-libs-gstrtpbasepayload.html#GstRTPBasePayload--stats"/>
     <keyword type="property" name="The “timestamp” property" link="gst-plugins-base-libs-gstrtpbasepayload.html#GstRTPBasePayload--timestamp"/>
     <keyword type="property" name="The “timestamp-offset” property" link="gst-plugins-base-libs-gstrtpbasepayload.html#GstRTPBasePayload--timestamp-offset"/>
-    <keyword type="" name="" link="gst-plugins-base-libs-gstrtpbuffer.html#id-1.2.9.6.6.2"/>
     <keyword type="function" name="gst_rtp_buffer_allocate_data ()" link="gst-plugins-base-libs-gstrtpbuffer.html#gst-rtp-buffer-allocate-data"/>
     <keyword type="function" name="gst_rtp_buffer_new_take_data ()" link="gst-plugins-base-libs-gstrtpbuffer.html#gst-rtp-buffer-new-take-data"/>
     <keyword type="function" name="gst_rtp_buffer_new_copy_data ()" link="gst-plugins-base-libs-gstrtpbuffer.html#gst-rtp-buffer-new-copy-data"/>
@@ -524,6 +534,7 @@
     <keyword type="function" name="gst_rtp_buffer_get_extension ()" link="gst-plugins-base-libs-gstrtpbuffer.html#gst-rtp-buffer-get-extension"/>
     <keyword type="function" name="gst_rtp_buffer_set_extension ()" link="gst-plugins-base-libs-gstrtpbuffer.html#gst-rtp-buffer-set-extension"/>
     <keyword type="function" name="gst_rtp_buffer_get_extension_data ()" link="gst-plugins-base-libs-gstrtpbuffer.html#gst-rtp-buffer-get-extension-data"/>
+    <keyword type="function" name="gst_rtp_buffer_get_extension_bytes ()" link="gst-plugins-base-libs-gstrtpbuffer.html#gst-rtp-buffer-get-extension-bytes" since="1.2"/>
     <keyword type="function" name="gst_rtp_buffer_get_ssrc ()" link="gst-plugins-base-libs-gstrtpbuffer.html#gst-rtp-buffer-get-ssrc"/>
     <keyword type="function" name="gst_rtp_buffer_set_ssrc ()" link="gst-plugins-base-libs-gstrtpbuffer.html#gst-rtp-buffer-set-ssrc"/>
     <keyword type="function" name="gst_rtp_buffer_get_csrc_count ()" link="gst-plugins-base-libs-gstrtpbuffer.html#gst-rtp-buffer-get-csrc-count"/>
@@ -540,6 +551,7 @@
     <keyword type="function" name="gst_rtp_buffer_get_payload_buffer ()" link="gst-plugins-base-libs-gstrtpbuffer.html#gst-rtp-buffer-get-payload-buffer"/>
     <keyword type="function" name="gst_rtp_buffer_get_payload_subbuffer ()" link="gst-plugins-base-libs-gstrtpbuffer.html#gst-rtp-buffer-get-payload-subbuffer"/>
     <keyword type="function" name="gst_rtp_buffer_get_payload_len ()" link="gst-plugins-base-libs-gstrtpbuffer.html#gst-rtp-buffer-get-payload-len"/>
+    <keyword type="function" name="gst_rtp_buffer_get_payload_bytes ()" link="gst-plugins-base-libs-gstrtpbuffer.html#gst-rtp-buffer-get-payload-bytes" since="1.2"/>
     <keyword type="function" name="gst_rtp_buffer_get_payload ()" link="gst-plugins-base-libs-gstrtpbuffer.html#gst-rtp-buffer-get-payload"/>
     <keyword type="function" name="gst_rtp_buffer_default_clock_rate ()" link="gst-plugins-base-libs-gstrtpbuffer.html#gst-rtp-buffer-default-clock-rate"/>
     <keyword type="function" name="gst_rtp_buffer_compare_seqnum ()" link="gst-plugins-base-libs-gstrtpbuffer.html#gst-rtp-buffer-compare-seqnum"/>
@@ -552,11 +564,12 @@
     <keyword type="macro" name="GST_RTP_VERSION" link="gst-plugins-base-libs-gstrtpbuffer.html#GST-RTP-VERSION:CAPS"/>
     <keyword type="struct" name="struct GstRTPBuffer" link="gst-plugins-base-libs-gstrtpbuffer.html#GstRTPBuffer"/>
     <keyword type="macro" name="GST_RTP_BUFFER_INIT" link="gst-plugins-base-libs-gstrtpbuffer.html#GST-RTP-BUFFER-INIT:CAPS"/>
-    <keyword type="" name="" link="gst-plugins-base-libs-gstrtcpbuffer.html#id-1.2.9.7.6.3"/>
     <keyword type="macro" name="GST_RTCP_VALID_MASK" link="gst-plugins-base-libs-gstrtcpbuffer.html#GST-RTCP-VALID-MASK:CAPS"/>
     <keyword type="macro" name="GST_RTCP_VALID_VALUE" link="gst-plugins-base-libs-gstrtcpbuffer.html#GST-RTCP-VALID-VALUE:CAPS"/>
     <keyword type="function" name="gst_rtcp_buffer_new_take_data ()" link="gst-plugins-base-libs-gstrtcpbuffer.html#gst-rtcp-buffer-new-take-data"/>
     <keyword type="function" name="gst_rtcp_buffer_new_copy_data ()" link="gst-plugins-base-libs-gstrtcpbuffer.html#gst-rtcp-buffer-new-copy-data"/>
+    <keyword type="function" name="gst_rtcp_buffer_validate_data_reduced ()" link="gst-plugins-base-libs-gstrtcpbuffer.html#gst-rtcp-buffer-validate-data-reduced" since="1.6"/>
+    <keyword type="function" name="gst_rtcp_buffer_validate_reduced ()" link="gst-plugins-base-libs-gstrtcpbuffer.html#gst-rtcp-buffer-validate-reduced" since="1.6"/>
     <keyword type="function" name="gst_rtcp_buffer_validate_data ()" link="gst-plugins-base-libs-gstrtcpbuffer.html#gst-rtcp-buffer-validate-data"/>
     <keyword type="function" name="gst_rtcp_buffer_validate ()" link="gst-plugins-base-libs-gstrtcpbuffer.html#gst-rtcp-buffer-validate"/>
     <keyword type="function" name="gst_rtcp_buffer_new ()" link="gst-plugins-base-libs-gstrtcpbuffer.html#gst-rtcp-buffer-new"/>
@@ -620,7 +633,6 @@
     <keyword type="enum" name="enum GstRTCPFBType" link="gst-plugins-base-libs-gstrtcpbuffer.html#GstRTCPFBType"/>
     <keyword type="struct" name="struct GstRTCPBuffer" link="gst-plugins-base-libs-gstrtcpbuffer.html#GstRTCPBuffer"/>
     <keyword type="macro" name="GST_RTCP_BUFFER_INIT" link="gst-plugins-base-libs-gstrtcpbuffer.html#GST-RTCP-BUFFER-INIT:CAPS"/>
-    <keyword type="" name="" link="gst-plugins-base-libs-gstrtppayloads.html#id-1.2.9.8.6.2"/>
     <keyword type="macro" name="GST_RTP_PAYLOAD_IS_DYNAMIC()" link="gst-plugins-base-libs-gstrtppayloads.html#GST-RTP-PAYLOAD-IS-DYNAMIC:CAPS"/>
     <keyword type="function" name="gst_rtp_payload_info_for_name ()" link="gst-plugins-base-libs-gstrtppayloads.html#gst-rtp-payload-info-for-name"/>
     <keyword type="function" name="gst_rtp_payload_info_for_pt ()" link="gst-plugins-base-libs-gstrtppayloads.html#gst-rtp-payload-info-for-pt"/>
@@ -662,6 +674,10 @@
     <keyword type="function" name="gst_rtsp_connection_get_tls ()" link="gst-plugins-base-libs-gstrtspconnection.html#gst-rtsp-connection-get-tls" since="1.2"/>
     <keyword type="function" name="gst_rtsp_connection_set_tls_validation_flags ()" link="gst-plugins-base-libs-gstrtspconnection.html#gst-rtsp-connection-set-tls-validation-flags" since="1.2.1"/>
     <keyword type="function" name="gst_rtsp_connection_get_tls_validation_flags ()" link="gst-plugins-base-libs-gstrtspconnection.html#gst-rtsp-connection-get-tls-validation-flags" since="1.2.1"/>
+    <keyword type="function" name="gst_rtsp_connection_set_tls_database ()" link="gst-plugins-base-libs-gstrtspconnection.html#gst-rtsp-connection-set-tls-database" since="1.4"/>
+    <keyword type="function" name="gst_rtsp_connection_get_tls_database ()" link="gst-plugins-base-libs-gstrtspconnection.html#gst-rtsp-connection-get-tls-database" since="1.4"/>
+    <keyword type="function" name="gst_rtsp_connection_set_tls_interaction ()" link="gst-plugins-base-libs-gstrtspconnection.html#gst-rtsp-connection-set-tls-interaction" since="1.6"/>
+    <keyword type="function" name="gst_rtsp_connection_get_tls_interaction ()" link="gst-plugins-base-libs-gstrtspconnection.html#gst-rtsp-connection-get-tls-interaction" since="1.6"/>
     <keyword type="function" name="gst_rtsp_watch_new ()" link="gst-plugins-base-libs-gstrtspconnection.html#gst-rtsp-watch-new"/>
     <keyword type="function" name="gst_rtsp_watch_unref ()" link="gst-plugins-base-libs-gstrtspconnection.html#gst-rtsp-watch-unref"/>
     <keyword type="function" name="gst_rtsp_watch_attach ()" link="gst-plugins-base-libs-gstrtspconnection.html#gst-rtsp-watch-attach"/>
@@ -670,6 +686,7 @@
     <keyword type="function" name="gst_rtsp_watch_write_data ()" link="gst-plugins-base-libs-gstrtspconnection.html#gst-rtsp-watch-write-data"/>
     <keyword type="function" name="gst_rtsp_watch_get_send_backlog ()" link="gst-plugins-base-libs-gstrtspconnection.html#gst-rtsp-watch-get-send-backlog" since="1.2"/>
     <keyword type="function" name="gst_rtsp_watch_set_send_backlog ()" link="gst-plugins-base-libs-gstrtspconnection.html#gst-rtsp-watch-set-send-backlog" since="1.2"/>
+    <keyword type="function" name="gst_rtsp_watch_set_flushing ()" link="gst-plugins-base-libs-gstrtspconnection.html#gst-rtsp-watch-set-flushing" since="1.4"/>
     <keyword type="function" name="gst_rtsp_watch_wait_backlog ()" link="gst-plugins-base-libs-gstrtspconnection.html#gst-rtsp-watch-wait-backlog" since="1.4"/>
     <keyword type="struct" name="GstRTSPConnection" link="gst-plugins-base-libs-gstrtspconnection.html#GstRTSPConnection"/>
     <keyword type="struct" name="GstRTSPWatch" link="gst-plugins-base-libs-gstrtspconnection.html#GstRTSPWatch"/>
@@ -695,7 +712,6 @@
     <keyword type="enum" name="enum GstRTSPAuthMethod" link="gst-plugins-base-libs-gstrtspdefs.html#GstRTSPAuthMethod"/>
     <keyword type="enum" name="enum GstRTSPHeaderField" link="gst-plugins-base-libs-gstrtspdefs.html#GstRTSPHeaderField"/>
     <keyword type="enum" name="enum GstRTSPStatusCode" link="gst-plugins-base-libs-gstrtspdefs.html#GstRTSPStatusCode"/>
-    <keyword type="" name="" link="gst-plugins-base-libs-gstrtspextension.html#id-1.2.10.5.5.2"/>
     <keyword type="struct" name="GstRTSPExtension" link="gst-plugins-base-libs-gstrtspextension.html#GstRTSPExtension"/>
     <keyword type="struct" name="struct GstRTSPExtensionInterface" link="gst-plugins-base-libs-gstrtspextension.html#GstRTSPExtensionInterface"/>
     <keyword type="function" name="gst_rtsp_message_new ()" link="gst-plugins-base-libs-gstrtspmessage.html#gst-rtsp-message-new"/>
@@ -716,6 +732,10 @@
     <keyword type="function" name="gst_rtsp_message_take_header ()" link="gst-plugins-base-libs-gstrtspmessage.html#gst-rtsp-message-take-header"/>
     <keyword type="function" name="gst_rtsp_message_remove_header ()" link="gst-plugins-base-libs-gstrtspmessage.html#gst-rtsp-message-remove-header"/>
     <keyword type="function" name="gst_rtsp_message_get_header ()" link="gst-plugins-base-libs-gstrtspmessage.html#gst-rtsp-message-get-header"/>
+    <keyword type="function" name="gst_rtsp_message_add_header_by_name ()" link="gst-plugins-base-libs-gstrtspmessage.html#gst-rtsp-message-add-header-by-name" since="1.6"/>
+    <keyword type="function" name="gst_rtsp_message_take_header_by_name ()" link="gst-plugins-base-libs-gstrtspmessage.html#gst-rtsp-message-take-header-by-name" since="1.6"/>
+    <keyword type="function" name="gst_rtsp_message_remove_header_by_name ()" link="gst-plugins-base-libs-gstrtspmessage.html#gst-rtsp-message-remove-header-by-name" since="1.6"/>
+    <keyword type="function" name="gst_rtsp_message_get_header_by_name ()" link="gst-plugins-base-libs-gstrtspmessage.html#gst-rtsp-message-get-header-by-name" since="1.6"/>
     <keyword type="function" name="gst_rtsp_message_append_headers ()" link="gst-plugins-base-libs-gstrtspmessage.html#gst-rtsp-message-append-headers"/>
     <keyword type="function" name="gst_rtsp_message_set_body ()" link="gst-plugins-base-libs-gstrtspmessage.html#gst-rtsp-message-set-body"/>
     <keyword type="function" name="gst_rtsp_message_take_body ()" link="gst-plugins-base-libs-gstrtspmessage.html#gst-rtsp-message-take-body"/>
@@ -755,7 +775,6 @@
     <keyword type="function" name="gst_rtsp_url_decode_path_components ()" link="gst-plugins-base-libs-gstrtspurl.html#gst-rtsp-url-decode-path-components"/>
     <keyword type="macro" name="GST_RTSP_DEFAULT_PORT" link="gst-plugins-base-libs-gstrtspurl.html#GST-RTSP-DEFAULT-PORT:CAPS"/>
     <keyword type="struct" name="struct GstRTSPUrl" link="gst-plugins-base-libs-gstrtspurl.html#GstRTSPUrl"/>
-    <keyword type="" name="" link="gst-plugins-base-libs-gstsdpmessage.html#id-1.2.11.3.6.2"/>
     <keyword type="function" name="gst_sdp_connection_set ()" link="gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-connection-set" since="1.2"/>
     <keyword type="function" name="gst_sdp_connection_clear ()" link="gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-connection-clear" since="1.2"/>
     <keyword type="function" name="gst_sdp_bandwidth_set ()" link="gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-bandwidth-set" since="1.2"/>
@@ -767,6 +786,7 @@
     <keyword type="function" name="gst_sdp_attribute_set ()" link="gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-attribute-set" since="1.2"/>
     <keyword type="function" name="gst_sdp_attribute_clear ()" link="gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-attribute-clear" since="1.2"/>
     <keyword type="function" name="gst_sdp_message_new ()" link="gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-message-new"/>
+    <keyword type="function" name="gst_sdp_message_copy ()" link="gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-message-copy" since="1.2"/>
     <keyword type="function" name="gst_sdp_message_init ()" link="gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-message-init"/>
     <keyword type="function" name="gst_sdp_message_uninit ()" link="gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-message-uninit"/>
     <keyword type="function" name="gst_sdp_message_free ()" link="gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-message-free"/>
@@ -832,6 +852,7 @@
     <keyword type="function" name="gst_sdp_message_add_media ()" link="gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-message-add-media"/>
     <keyword type="function" name="gst_sdp_message_dump ()" link="gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-message-dump"/>
     <keyword type="function" name="gst_sdp_media_new ()" link="gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-media-new"/>
+    <keyword type="function" name="gst_sdp_media_copy ()" link="gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-media-copy" since="1.2"/>
     <keyword type="function" name="gst_sdp_media_init ()" link="gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-media-init"/>
     <keyword type="function" name="gst_sdp_media_uninit ()" link="gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-media-uninit"/>
     <keyword type="function" name="gst_sdp_media_free ()" link="gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-media-free"/>
@@ -889,11 +910,13 @@
     <keyword type="struct" name="GstSDPAttribute" link="gst-plugins-base-libs-gstsdpmessage.html#GstSDPAttribute"/>
     <keyword type="struct" name="GstSDPMedia" link="gst-plugins-base-libs-gstsdpmessage.html#GstSDPMedia"/>
     <keyword type="struct" name="GstSDPMessage" link="gst-plugins-base-libs-gstsdpmessage.html#GstSDPMessage"/>
-    <keyword type="" name="" link="gst-plugins-base-libs-gstmikey.html#id-1.2.12.3.6.2"/>
     <keyword type="function" name="gst_mikey_message_new ()" link="gst-plugins-base-libs-gstmikey.html#gst-mikey-message-new" since="1.4"/>
     <keyword type="function" name="gst_mikey_message_new_from_bytes ()" link="gst-plugins-base-libs-gstmikey.html#gst-mikey-message-new-from-bytes" since="1.4"/>
     <keyword type="function" name="gst_mikey_message_new_from_data ()" link="gst-plugins-base-libs-gstmikey.html#gst-mikey-message-new-from-data" since="1.4"/>
     <keyword type="function" name="gst_mikey_message_to_bytes ()" link="gst-plugins-base-libs-gstmikey.html#gst-mikey-message-to-bytes" since="1.4"/>
+    <keyword type="function" name="gst_mikey_message_copy ()" link="gst-plugins-base-libs-gstmikey.html#gst-mikey-message-copy" since="1.4"/>
+    <keyword type="function" name="gst_mikey_message_ref ()" link="gst-plugins-base-libs-gstmikey.html#gst-mikey-message-ref" since="1.4"/>
+    <keyword type="function" name="gst_mikey_message_unref ()" link="gst-plugins-base-libs-gstmikey.html#gst-mikey-message-unref" since="1.4"/>
     <keyword type="function" name="gst_mikey_message_set_info ()" link="gst-plugins-base-libs-gstmikey.html#gst-mikey-message-set-info" since="1.4"/>
     <keyword type="function" name="gst_mikey_message_get_n_cs ()" link="gst-plugins-base-libs-gstmikey.html#gst-mikey-message-get-n-cs" since="1.4"/>
     <keyword type="function" name="gst_mikey_message_get_cs_srtp ()" link="gst-plugins-base-libs-gstmikey.html#gst-mikey-message-get-cs-srtp" since="1.4"/>
@@ -910,7 +933,17 @@
     <keyword type="function" name="gst_mikey_message_add_payload ()" link="gst-plugins-base-libs-gstmikey.html#gst-mikey-message-add-payload" since="1.4"/>
     <keyword type="function" name="gst_mikey_payload_new ()" link="gst-plugins-base-libs-gstmikey.html#gst-mikey-payload-new" since="1.4"/>
     <keyword type="function" name="gst_mikey_payload_copy ()" link="gst-plugins-base-libs-gstmikey.html#gst-mikey-payload-copy" since="1.4"/>
+    <keyword type="function" name="gst_mikey_payload_key_data_set_interval ()" link="gst-plugins-base-libs-gstmikey.html#gst-mikey-payload-key-data-set-interval" since="1.4"/>
+    <keyword type="function" name="gst_mikey_payload_key_data_set_key ()" link="gst-plugins-base-libs-gstmikey.html#gst-mikey-payload-key-data-set-key" since="1.4"/>
+    <keyword type="function" name="gst_mikey_payload_key_data_set_salt ()" link="gst-plugins-base-libs-gstmikey.html#gst-mikey-payload-key-data-set-salt" since="1.4"/>
+    <keyword type="function" name="gst_mikey_payload_key_data_set_spi ()" link="gst-plugins-base-libs-gstmikey.html#gst-mikey-payload-key-data-set-spi" since="1.4"/>
+    <keyword type="function" name="gst_mikey_payload_ref ()" link="gst-plugins-base-libs-gstmikey.html#gst-mikey-payload-ref" since="1.4"/>
+    <keyword type="function" name="gst_mikey_payload_unref ()" link="gst-plugins-base-libs-gstmikey.html#gst-mikey-payload-unref" since="1.4"/>
     <keyword type="function" name="gst_mikey_payload_kemac_set ()" link="gst-plugins-base-libs-gstmikey.html#gst-mikey-payload-kemac-set" since="1.4"/>
+    <keyword type="function" name="gst_mikey_payload_kemac_add_sub ()" link="gst-plugins-base-libs-gstmikey.html#gst-mikey-payload-kemac-add-sub" since="1.4"/>
+    <keyword type="function" name="gst_mikey_payload_kemac_get_n_sub ()" link="gst-plugins-base-libs-gstmikey.html#gst-mikey-payload-kemac-get-n-sub" since="1.4"/>
+    <keyword type="function" name="gst_mikey_payload_kemac_get_sub ()" link="gst-plugins-base-libs-gstmikey.html#gst-mikey-payload-kemac-get-sub" since="1.4"/>
+    <keyword type="function" name="gst_mikey_payload_kemac_remove_sub ()" link="gst-plugins-base-libs-gstmikey.html#gst-mikey-payload-kemac-remove-sub" since="1.4"/>
     <keyword type="function" name="gst_mikey_payload_pke_set ()" link="gst-plugins-base-libs-gstmikey.html#gst-mikey-payload-pke-set" since="1.4"/>
     <keyword type="function" name="gst_mikey_message_add_pke ()" link="gst-plugins-base-libs-gstmikey.html#gst-mikey-message-add-pke" since="1.4"/>
     <keyword type="function" name="gst_mikey_payload_t_set ()" link="gst-plugins-base-libs-gstmikey.html#gst-mikey-payload-t-set" since="1.4"/>
@@ -944,10 +977,10 @@
     <keyword type="enum" name="enum GstMIKEYSecSRTP" link="gst-plugins-base-libs-gstmikey.html#GstMIKEYSecSRTP"/>
     <keyword type="struct" name="GstMIKEYPayloadSP" link="gst-plugins-base-libs-gstmikey.html#GstMIKEYPayloadSP"/>
     <keyword type="struct" name="GstMIKEYPayloadSPParam" link="gst-plugins-base-libs-gstmikey.html#GstMIKEYPayloadSPParam"/>
-    <keyword type="" name="" link="gst-plugins-base-libs-gsttag.html#id-1.2.13.3.6.2"/>
     <keyword type="function" name="gst_tag_register_musicbrainz_tags ()" link="gst-plugins-base-libs-gsttag.html#gst-tag-register-musicbrainz-tags"/>
     <keyword type="function" name="gst_tag_freeform_string_to_utf8 ()" link="gst-plugins-base-libs-gsttag.html#gst-tag-freeform-string-to-utf8"/>
     <keyword type="function" name="gst_tag_parse_extended_comment ()" link="gst-plugins-base-libs-gsttag.html#gst-tag-parse-extended-comment"/>
+    <keyword type="function" name="gst_tag_image_data_to_image_sample ()" link="gst-plugins-base-libs-gsttag.html#gst-tag-image-data-to-image-sample"/>
     <keyword type="macro" name="GST_TAG_MUSICBRAINZ_TRACKID" link="gst-plugins-base-libs-gsttag.html#GST-TAG-MUSICBRAINZ-TRACKID:CAPS"/>
     <keyword type="macro" name="GST_TAG_MUSICBRAINZ_ARTISTID" link="gst-plugins-base-libs-gsttag.html#GST-TAG-MUSICBRAINZ-ARTISTID:CAPS"/>
     <keyword type="macro" name="GST_TAG_MUSICBRAINZ_ALBUMID" link="gst-plugins-base-libs-gsttag.html#GST-TAG-MUSICBRAINZ-ALBUMID:CAPS"/>
@@ -981,8 +1014,8 @@
     <keyword type="macro" name="GST_TAG_IMAGE_HORIZONTAL_PPI" link="gst-plugins-base-libs-gsttag.html#GST-TAG-IMAGE-HORIZONTAL-PPI:CAPS"/>
     <keyword type="macro" name="GST_TAG_IMAGE_VERTICAL_PPI" link="gst-plugins-base-libs-gsttag.html#GST-TAG-IMAGE-VERTICAL-PPI:CAPS"/>
     <keyword type="macro" name="GST_TAG_ID3V2_HEADER_SIZE" link="gst-plugins-base-libs-gsttag.html#GST-TAG-ID3V2-HEADER-SIZE:CAPS"/>
+    <keyword type="macro" name="GST_TAG_MUSICAL_KEY" link="gst-plugins-base-libs-gsttag.html#GST-TAG-MUSICAL-KEY:CAPS" since="1.2"/>
     <keyword type="enum" name="enum GstTagImageType" link="gst-plugins-base-libs-gsttag.html#GstTagImageType"/>
-    <keyword type="" name="" link="gst-plugins-base-libs-gsttagvorbis.html#id-1.2.13.4.5.2"/>
     <keyword type="function" name="gst_tag_from_vorbis_tag ()" link="gst-plugins-base-libs-gsttagvorbis.html#gst-tag-from-vorbis-tag"/>
     <keyword type="function" name="gst_tag_to_vorbis_tag ()" link="gst-plugins-base-libs-gsttagvorbis.html#gst-tag-to-vorbis-tag"/>
     <keyword type="function" name="gst_vorbis_tag_add ()" link="gst-plugins-base-libs-gsttagvorbis.html#gst-vorbis-tag-add"/>
@@ -990,7 +1023,6 @@
     <keyword type="function" name="gst_tag_list_from_vorbiscomment ()" link="gst-plugins-base-libs-gsttagvorbis.html#gst-tag-list-from-vorbiscomment"/>
     <keyword type="function" name="gst_tag_list_from_vorbiscomment_buffer ()" link="gst-plugins-base-libs-gsttagvorbis.html#gst-tag-list-from-vorbiscomment-buffer"/>
     <keyword type="function" name="gst_tag_list_to_vorbiscomment_buffer ()" link="gst-plugins-base-libs-gsttagvorbis.html#gst-tag-list-to-vorbiscomment-buffer"/>
-    <keyword type="" name="" link="gst-plugins-base-libs-gsttagid3.html#id-1.2.13.5.5.2"/>
     <keyword type="function" name="gst_tag_id3_genre_count ()" link="gst-plugins-base-libs-gsttagid3.html#gst-tag-id3-genre-count"/>
     <keyword type="function" name="gst_tag_id3_genre_get ()" link="gst-plugins-base-libs-gsttagid3.html#gst-tag-id3-genre-get"/>
     <keyword type="function" name="gst_tag_list_new_from_id3v1 ()" link="gst-plugins-base-libs-gsttagid3.html#gst-tag-list-new-from-id3v1"/>
@@ -1007,21 +1039,17 @@
     <keyword type="function" name="gst_tag_list_from_xmp_buffer ()" link="gst-plugins-base-libs-gsttagxmp.html#gst-tag-list-from-xmp-buffer"/>
     <keyword type="function" name="gst_tag_list_to_xmp_buffer ()" link="gst-plugins-base-libs-gsttagxmp.html#gst-tag-list-to-xmp-buffer"/>
     <keyword type="function" name="gst_tag_xmp_list_schemas ()" link="gst-plugins-base-libs-gsttagxmp.html#gst-tag-xmp-list-schemas"/>
-    <keyword type="" name="" link="gst-plugins-base-libs-gsttagxmpwriter.html#id-1.2.13.8.4.2"/>
     <keyword type="function" name="gst_tag_xmp_writer_add_all_schemas ()" link="gst-plugins-base-libs-gsttagxmpwriter.html#gst-tag-xmp-writer-add-all-schemas"/>
     <keyword type="function" name="gst_tag_xmp_writer_add_schema ()" link="gst-plugins-base-libs-gsttagxmpwriter.html#gst-tag-xmp-writer-add-schema"/>
     <keyword type="function" name="gst_tag_xmp_writer_has_schema ()" link="gst-plugins-base-libs-gsttagxmpwriter.html#gst-tag-xmp-writer-has-schema"/>
     <keyword type="function" name="gst_tag_xmp_writer_remove_schema ()" link="gst-plugins-base-libs-gsttagxmpwriter.html#gst-tag-xmp-writer-remove-schema"/>
     <keyword type="function" name="gst_tag_xmp_writer_remove_all_schemas ()" link="gst-plugins-base-libs-gsttagxmpwriter.html#gst-tag-xmp-writer-remove-all-schemas"/>
     <keyword type="function" name="gst_tag_xmp_writer_tag_list_to_xmp_buffer ()" link="gst-plugins-base-libs-gsttagxmpwriter.html#gst-tag-xmp-writer-tag-list-to-xmp-buffer"/>
-    <keyword type="" name="Deriving from GstTagDemux" link="gst-plugins-base-libs-gsttagdemux.html#id-1.2.13.9.5.2"/>
     <keyword type="struct" name="struct GstTagDemux" link="gst-plugins-base-libs-gsttagdemux.html#GstTagDemux"/>
     <keyword type="struct" name="struct GstTagDemuxClass" link="gst-plugins-base-libs-gsttagdemux.html#GstTagDemuxClass"/>
     <keyword type="enum" name="enum GstTagDemuxResult" link="gst-plugins-base-libs-gsttagdemux.html#GstTagDemuxResult"/>
-    <keyword type="" name="Deriving from GstTagMux" link="gst-plugins-base-libs-gsttagmux.html#id-1.2.13.10.5.2"/>
     <keyword type="struct" name="struct GstTagMux" link="gst-plugins-base-libs-gsttagmux.html#GstTagMux"/>
     <keyword type="struct" name="struct GstTagMuxClass" link="gst-plugins-base-libs-gsttagmux.html#GstTagMuxClass"/>
-    <keyword type="" name="" link="gst-plugins-base-libs-gsttaglanguagecodes.html#id-1.2.13.11.5.2"/>
     <keyword type="function" name="gst_tag_get_language_codes ()" link="gst-plugins-base-libs-gsttaglanguagecodes.html#gst-tag-get-language-codes"/>
     <keyword type="function" name="gst_tag_get_language_name ()" link="gst-plugins-base-libs-gsttaglanguagecodes.html#gst-tag-get-language-name"/>
     <keyword type="macro" name="gst_tag_get_language_code()" link="gst-plugins-base-libs-gsttaglanguagecodes.html#gst-tag-get-language-code"/>
@@ -1037,7 +1065,6 @@
     <keyword type="function" name="gst_tag_get_license_version ()" link="gst-plugins-base-libs-gsttaglicenses.html#gst-tag-get-license-version"/>
     <keyword type="function" name="gst_tag_get_licenses ()" link="gst-plugins-base-libs-gsttaglicenses.html#gst-tag-get-licenses"/>
     <keyword type="enum" name="enum GstTagLicenseFlags" link="gst-plugins-base-libs-gsttaglicenses.html#GstTagLicenseFlags"/>
-    <keyword type="" name="Linking to this library" link="gst-plugins-base-libs-gstpbutils.html#id-1.2.14.3.5.2"/>
     <keyword type="function" name="gst_pb_utils_init ()" link="gst-plugins-base-libs-gstpbutils.html#gst-pb-utils-init"/>
     <keyword type="macro" name="GST_PLUGINS_BASE_VERSION_MAJOR" link="gst-plugins-base-libs-gstpluginsbaseversion.html#GST-PLUGINS-BASE-VERSION-MAJOR:CAPS"/>
     <keyword type="macro" name="GST_PLUGINS_BASE_VERSION_MINOR" link="gst-plugins-base-libs-gstpluginsbaseversion.html#GST-PLUGINS-BASE-VERSION-MINOR:CAPS"/>
@@ -1046,7 +1073,6 @@
     <keyword type="macro" name="GST_CHECK_PLUGINS_BASE_VERSION()" link="gst-plugins-base-libs-gstpluginsbaseversion.html#GST-CHECK-PLUGINS-BASE-VERSION:CAPS"/>
     <keyword type="function" name="gst_plugins_base_version ()" link="gst-plugins-base-libs-gstpluginsbaseversion.html#gst-plugins-base-version"/>
     <keyword type="function" name="gst_plugins_base_version_string ()" link="gst-plugins-base-libs-gstpluginsbaseversion.html#gst-plugins-base-version-string"/>
-    <keyword type="" name="" link="gst-plugins-base-libs-gstpbutilscodecutils.html#id-1.2.14.5.5.2"/>
     <keyword type="function" name="gst_codec_utils_aac_get_sample_rate_from_index ()" link="gst-plugins-base-libs-gstpbutilscodecutils.html#gst-codec-utils-aac-get-sample-rate-from-index"/>
     <keyword type="function" name="gst_codec_utils_aac_get_index_from_sample_rate ()" link="gst-plugins-base-libs-gstpbutilscodecutils.html#gst-codec-utils-aac-get-index-from-sample-rate"/>
     <keyword type="function" name="gst_codec_utils_aac_get_profile ()" link="gst-plugins-base-libs-gstpbutilscodecutils.html#gst-codec-utils-aac-get-profile"/>
@@ -1064,7 +1090,6 @@
     <keyword type="function" name="gst_codec_utils_mpeg4video_get_profile ()" link="gst-plugins-base-libs-gstpbutilscodecutils.html#gst-codec-utils-mpeg4video-get-profile"/>
     <keyword type="function" name="gst_codec_utils_mpeg4video_get_level ()" link="gst-plugins-base-libs-gstpbutilscodecutils.html#gst-codec-utils-mpeg4video-get-level"/>
     <keyword type="function" name="gst_codec_utils_mpeg4video_caps_set_level_and_profile ()" link="gst-plugins-base-libs-gstpbutilscodecutils.html#gst-codec-utils-mpeg4video-caps-set-level-and-profile"/>
-    <keyword type="" name="" link="gst-plugins-base-libs-gstpbutilsdescriptions.html#id-1.2.14.6.5.2"/>
     <keyword type="function" name="gst_pb_utils_get_source_description ()" link="gst-plugins-base-libs-gstpbutilsdescriptions.html#gst-pb-utils-get-source-description"/>
     <keyword type="function" name="gst_pb_utils_get_sink_description ()" link="gst-plugins-base-libs-gstpbutilsdescriptions.html#gst-pb-utils-get-sink-description"/>
     <keyword type="function" name="gst_pb_utils_get_decoder_description ()" link="gst-plugins-base-libs-gstpbutilsdescriptions.html#gst-pb-utils-get-decoder-description"/>
@@ -1072,7 +1097,6 @@
     <keyword type="function" name="gst_pb_utils_get_element_description ()" link="gst-plugins-base-libs-gstpbutilsdescriptions.html#gst-pb-utils-get-element-description"/>
     <keyword type="function" name="gst_pb_utils_add_codec_description_to_tag_list ()" link="gst-plugins-base-libs-gstpbutilsdescriptions.html#gst-pb-utils-add-codec-description-to-tag-list"/>
     <keyword type="function" name="gst_pb_utils_get_codec_description ()" link="gst-plugins-base-libs-gstpbutilsdescriptions.html#gst-pb-utils-get-codec-description"/>
-    <keyword type="" name="" link="gst-plugins-base-libs-gstpbutilsmissingplugins.html#id-1.2.14.7.5.2"/>
     <keyword type="function" name="gst_missing_plugin_message_get_installer_detail ()" link="gst-plugins-base-libs-gstpbutilsmissingplugins.html#gst-missing-plugin-message-get-installer-detail"/>
     <keyword type="function" name="gst_missing_plugin_message_get_description ()" link="gst-plugins-base-libs-gstpbutilsmissingplugins.html#gst-missing-plugin-message-get-description"/>
     <keyword type="function" name="gst_is_missing_plugin_message ()" link="gst-plugins-base-libs-gstpbutilsmissingplugins.html#gst-is-missing-plugin-message"/>
@@ -1086,7 +1110,6 @@
     <keyword type="function" name="gst_missing_element_installer_detail_new ()" link="gst-plugins-base-libs-gstpbutilsmissingplugins.html#gst-missing-element-installer-detail-new"/>
     <keyword type="function" name="gst_missing_decoder_installer_detail_new ()" link="gst-plugins-base-libs-gstpbutilsmissingplugins.html#gst-missing-decoder-installer-detail-new"/>
     <keyword type="function" name="gst_missing_encoder_installer_detail_new ()" link="gst-plugins-base-libs-gstpbutilsmissingplugins.html#gst-missing-encoder-installer-detail-new"/>
-    <keyword type="" name="Overview" link="gst-plugins-base-libs-gstpbutilsinstallplugins.html#id-1.2.14.8.6.2"/>
     <keyword type="function" name="GstInstallPluginsResultFunc ()" link="gst-plugins-base-libs-gstpbutilsinstallplugins.html#GstInstallPluginsResultFunc"/>
     <keyword type="function" name="gst_install_plugins_async ()" link="gst-plugins-base-libs-gstpbutilsinstallplugins.html#gst-install-plugins-async"/>
     <keyword type="function" name="gst_install_plugins_sync ()" link="gst-plugins-base-libs-gstpbutilsinstallplugins.html#gst-install-plugins-sync"/>
@@ -1096,6 +1119,9 @@
     <keyword type="function" name="gst_install_plugins_context_new ()" link="gst-plugins-base-libs-gstpbutilsinstallplugins.html#gst-install-plugins-context-new"/>
     <keyword type="function" name="gst_install_plugins_context_free ()" link="gst-plugins-base-libs-gstpbutilsinstallplugins.html#gst-install-plugins-context-free"/>
     <keyword type="function" name="gst_install_plugins_context_set_xid ()" link="gst-plugins-base-libs-gstpbutilsinstallplugins.html#gst-install-plugins-context-set-xid"/>
+    <keyword type="function" name="gst_install_plugins_context_set_confirm_search ()" link="gst-plugins-base-libs-gstpbutilsinstallplugins.html#gst-install-plugins-context-set-confirm-search" since="1.6"/>
+    <keyword type="function" name="gst_install_plugins_context_set_desktop_id ()" link="gst-plugins-base-libs-gstpbutilsinstallplugins.html#gst-install-plugins-context-set-desktop-id" since="1.6"/>
+    <keyword type="function" name="gst_install_plugins_context_set_startup_notification_id ()" link="gst-plugins-base-libs-gstpbutilsinstallplugins.html#gst-install-plugins-context-set-startup-notification-id" since="1.6"/>
     <keyword type="enum" name="enum GstInstallPluginsReturn" link="gst-plugins-base-libs-gstpbutilsinstallplugins.html#GstInstallPluginsReturn"/>
     <keyword type="struct" name="GstInstallPluginsContext" link="gst-plugins-base-libs-gstpbutilsinstallplugins.html#GstInstallPluginsContext"/>
     <keyword type="function" name="gst_discoverer_new ()" link="gst-plugins-base-libs-gstdiscoverer.html#gst-discoverer-new"/>
@@ -1114,6 +1140,8 @@
     <keyword type="function" name="gst_discoverer_info_get_seekable ()" link="gst-plugins-base-libs-gstdiscoverer.html#gst-discoverer-info-get-seekable"/>
     <keyword type="macro" name="gst_discoverer_info_ref()" link="gst-plugins-base-libs-gstdiscoverer.html#gst-discoverer-info-ref"/>
     <keyword type="macro" name="gst_discoverer_info_unref()" link="gst-plugins-base-libs-gstdiscoverer.html#gst-discoverer-info-unref"/>
+    <keyword type="function" name="gst_discoverer_info_to_variant ()" link="gst-plugins-base-libs-gstdiscoverer.html#gst-discoverer-info-to-variant" since="1.6"/>
+    <keyword type="function" name="gst_discoverer_info_from_variant ()" link="gst-plugins-base-libs-gstdiscoverer.html#gst-discoverer-info-from-variant" since="1.6"/>
     <keyword type="function" name="gst_discoverer_stream_info_get_caps ()" link="gst-plugins-base-libs-gstdiscoverer.html#gst-discoverer-stream-info-get-caps"/>
     <keyword type="function" name="gst_discoverer_stream_info_get_misc ()" link="gst-plugins-base-libs-gstdiscoverer.html#gst-discoverer-stream-info-get-misc" deprecated=""/>
     <keyword type="function" name="gst_discoverer_stream_info_get_next ()" link="gst-plugins-base-libs-gstdiscoverer.html#gst-discoverer-stream-info-get-next"/>
@@ -1153,6 +1181,7 @@
     <keyword type="struct" name="struct GstDiscoverer" link="gst-plugins-base-libs-gstdiscoverer.html#GstDiscoverer-struct"/>
     <keyword type="struct" name="GstDiscovererInfo" link="gst-plugins-base-libs-gstdiscoverer.html#GstDiscovererInfo-struct"/>
     <keyword type="enum" name="enum GstDiscovererResult" link="gst-plugins-base-libs-gstdiscoverer.html#GstDiscovererResult"/>
+    <keyword type="enum" name="enum GstDiscovererSerializeFlags" link="gst-plugins-base-libs-gstdiscoverer.html#GstDiscovererSerializeFlags" since="1.6"/>
     <keyword type="struct" name="GstDiscovererStreamInfo" link="gst-plugins-base-libs-gstdiscoverer.html#GstDiscovererStreamInfo"/>
     <keyword type="struct" name="GstDiscovererContainerInfo" link="gst-plugins-base-libs-gstdiscoverer.html#GstDiscovererContainerInfo"/>
     <keyword type="struct" name="GstDiscovererAudioInfo" link="gst-plugins-base-libs-gstdiscoverer.html#GstDiscovererAudioInfo"/>
@@ -1163,10 +1192,6 @@
     <keyword type="signal" name="The “finished” signal" link="gst-plugins-base-libs-gstdiscoverer.html#GstDiscoverer-finished"/>
     <keyword type="signal" name="The “source-setup” signal" link="gst-plugins-base-libs-gstdiscoverer.html#GstDiscoverer-source-setup"/>
     <keyword type="signal" name="The “starting” signal" link="gst-plugins-base-libs-gstdiscoverer.html#GstDiscoverer-starting"/>
-    <keyword type="" name="" link="gst-plugins-base-libs-encoding-profile.html#id-1.2.14.10.13.2"/>
-    <keyword type="" name="Example: Creating a profile" link="gst-plugins-base-libs-encoding-profile.html#id-1.2.14.10.13.3"/>
-    <keyword type="" name="Example: Using an encoder preset with a profile" link="gst-plugins-base-libs-encoding-profile.html#id-1.2.14.10.13.4"/>
-    <keyword type="" name="Example: Listing categories, targets and profiles" link="gst-plugins-base-libs-encoding-profile.html#id-1.2.14.10.13.5"/>
     <keyword type="macro" name="gst_encoding_profile_unref()" link="gst-plugins-base-libs-encoding-profile.html#gst-encoding-profile-unref"/>
     <keyword type="macro" name="gst_encoding_profile_ref()" link="gst-plugins-base-libs-encoding-profile.html#gst-encoding-profile-ref"/>
     <keyword type="function" name="gst_encoding_profile_find ()" link="gst-plugins-base-libs-encoding-profile.html#gst-encoding-profile-find"/>
@@ -1181,12 +1206,14 @@
     <keyword type="function" name="gst_encoding_profile_get_file_extension ()" link="gst-plugins-base-libs-encoding-profile.html#gst-encoding-profile-get-file-extension"/>
     <keyword type="function" name="gst_encoding_profile_set_name ()" link="gst-plugins-base-libs-encoding-profile.html#gst-encoding-profile-set-name"/>
     <keyword type="function" name="gst_encoding_profile_set_description ()" link="gst-plugins-base-libs-encoding-profile.html#gst-encoding-profile-set-description"/>
+    <keyword type="function" name="gst_encoding_profile_set_enabled ()" link="gst-plugins-base-libs-encoding-profile.html#gst-encoding-profile-set-enabled"/>
     <keyword type="function" name="gst_encoding_profile_set_format ()" link="gst-plugins-base-libs-encoding-profile.html#gst-encoding-profile-set-format"/>
     <keyword type="function" name="gst_encoding_profile_set_preset ()" link="gst-plugins-base-libs-encoding-profile.html#gst-encoding-profile-set-preset"/>
     <keyword type="function" name="gst_encoding_profile_set_preset_name ()" link="gst-plugins-base-libs-encoding-profile.html#gst-encoding-profile-set-preset-name"/>
     <keyword type="function" name="gst_encoding_profile_set_restriction ()" link="gst-plugins-base-libs-encoding-profile.html#gst-encoding-profile-set-restriction"/>
     <keyword type="function" name="gst_encoding_profile_set_presence ()" link="gst-plugins-base-libs-encoding-profile.html#gst-encoding-profile-set-presence"/>
     <keyword type="function" name="gst_encoding_profile_is_equal ()" link="gst-plugins-base-libs-encoding-profile.html#gst-encoding-profile-is-equal"/>
+    <keyword type="function" name="gst_encoding_profile_is_enabled ()" link="gst-plugins-base-libs-encoding-profile.html#gst-encoding-profile-is-enabled"/>
     <keyword type="function" name="gst_encoding_profile_get_input_caps ()" link="gst-plugins-base-libs-encoding-profile.html#gst-encoding-profile-get-input-caps"/>
     <keyword type="function" name="gst_encoding_profile_get_type_nick ()" link="gst-plugins-base-libs-encoding-profile.html#gst-encoding-profile-get-type-nick"/>
     <keyword type="function" name="gst_encoding_container_profile_new ()" link="gst-plugins-base-libs-encoding-profile.html#gst-encoding-container-profile-new"/>
@@ -1224,8 +1251,8 @@
     <keyword type="macro" name="GST_ENCODING_CATEGORY_CAPTURE" link="gst-plugins-base-libs-encoding-profile.html#GST-ENCODING-CATEGORY-CAPTURE:CAPS"/>
     <keyword type="struct" name="GstEncodingTarget" link="gst-plugins-base-libs-encoding-profile.html#GstEncodingTarget-struct"/>
     <keyword type="property" name="The “restriction-caps” property" link="gst-plugins-base-libs-encoding-profile.html#GstEncodingProfile--restriction-caps"/>
-    <keyword type="" name="" link="gst-plugins-base-libs-gstvideo.html#id-1.2.15.3.6.2"/>
     <keyword type="function" name="gst_video_calculate_display_ratio ()" link="gst-plugins-base-libs-gstvideo.html#gst-video-calculate-display-ratio"/>
+    <keyword type="function" name="gst_video_guess_framerate ()" link="gst-plugins-base-libs-gstvideo.html#gst-video-guess-framerate" since="1.6"/>
     <keyword type="function" name="GstVideoConvertSampleCallback ()" link="gst-plugins-base-libs-gstvideo.html#GstVideoConvertSampleCallback"/>
     <keyword type="function" name="gst_video_convert_sample ()" link="gst-plugins-base-libs-gstvideo.html#gst-video-convert-sample"/>
     <keyword type="function" name="gst_video_convert_sample_async ()" link="gst-plugins-base-libs-gstvideo.html#gst-video-convert-sample-async"/>
@@ -1237,8 +1264,6 @@
     <keyword type="function" name="gst_video_event_new_upstream_force_key_unit ()" link="gst-plugins-base-libs-gstvideo.html#gst-video-event-new-upstream-force-key-unit"/>
     <keyword type="function" name="gst_video_event_parse_upstream_force_key_unit ()" link="gst-plugins-base-libs-gstvideo.html#gst-video-event-parse-upstream-force-key-unit"/>
     <keyword type="function" name="gst_video_event_is_force_key_unit ()" link="gst-plugins-base-libs-gstvideo.html#gst-video-event-is-force-key-unit"/>
-    <keyword type="function" name="gst_video_chroma_from_string ()" link="gst-plugins-base-libs-gstvideo.html#gst-video-chroma-from-string"/>
-    <keyword type="function" name="gst_video_chroma_to_string ()" link="gst-plugins-base-libs-gstvideo.html#gst-video-chroma-to-string"/>
     <keyword type="function" name="GstVideoFormatUnpack ()" link="gst-plugins-base-libs-gstvideo.html#GstVideoFormatUnpack"/>
     <keyword type="function" name="GstVideoFormatPack ()" link="gst-plugins-base-libs-gstvideo.html#GstVideoFormatPack"/>
     <keyword type="macro" name="GST_VIDEO_FORMAT_INFO_FORMAT()" link="gst-plugins-base-libs-gstvideo.html#GST-VIDEO-FORMAT-INFO-FORMAT:CAPS"/>
@@ -1277,10 +1302,14 @@
     <keyword type="function" name="gst_video_format_to_string ()" link="gst-plugins-base-libs-gstvideo.html#gst-video-format-to-string"/>
     <keyword type="function" name="gst_video_format_get_info ()" link="gst-plugins-base-libs-gstvideo.html#gst-video-format-get-info"/>
     <keyword type="macro" name="GST_VIDEO_CAPS_MAKE()" link="gst-plugins-base-libs-gstvideo.html#GST-VIDEO-CAPS-MAKE:CAPS"/>
+    <keyword type="function" name="gst_video_color_range_offsets ()" link="gst-plugins-base-libs-gstvideo.html#gst-video-color-range-offsets"/>
+    <keyword type="function" name="gst_video_color_matrix_get_Kr_Kb ()" link="gst-plugins-base-libs-gstvideo.html#gst-video-color-matrix-get-Kr-Kb" since="1.6"/>
+    <keyword type="function" name="gst_video_color_transfer_decode ()" link="gst-plugins-base-libs-gstvideo.html#gst-video-color-transfer-decode" since="1.6"/>
+    <keyword type="function" name="gst_video_color_transfer_encode ()" link="gst-plugins-base-libs-gstvideo.html#gst-video-color-transfer-encode" since="1.6"/>
     <keyword type="function" name="gst_video_colorimetry_matches ()" link="gst-plugins-base-libs-gstvideo.html#gst-video-colorimetry-matches"/>
+    <keyword type="function" name="gst_video_colorimetry_is_equal ()" link="gst-plugins-base-libs-gstvideo.html#gst-video-colorimetry-is-equal" since="1.6"/>
     <keyword type="function" name="gst_video_colorimetry_from_string ()" link="gst-plugins-base-libs-gstvideo.html#gst-video-colorimetry-from-string"/>
     <keyword type="function" name="gst_video_colorimetry_to_string ()" link="gst-plugins-base-libs-gstvideo.html#gst-video-colorimetry-to-string"/>
-    <keyword type="function" name="gst_video_color_range_offsets ()" link="gst-plugins-base-libs-gstvideo.html#gst-video-color-range-offsets"/>
     <keyword type="macro" name="GST_VIDEO_INFO_FORMAT()" link="gst-plugins-base-libs-gstvideo.html#GST-VIDEO-INFO-FORMAT:CAPS"/>
     <keyword type="macro" name="GST_VIDEO_INFO_NAME()" link="gst-plugins-base-libs-gstvideo.html#GST-VIDEO-INFO-NAME:CAPS"/>
     <keyword type="macro" name="GST_VIDEO_INFO_IS_YUV()" link="gst-plugins-base-libs-gstvideo.html#GST-VIDEO-INFO-IS-YUV:CAPS"/>
@@ -1314,7 +1343,14 @@
     <keyword type="macro" name="GST_VIDEO_INFO_COMP_PLANE()" link="gst-plugins-base-libs-gstvideo.html#GST-VIDEO-INFO-COMP-PLANE:CAPS"/>
     <keyword type="macro" name="GST_VIDEO_INFO_COMP_PSTRIDE()" link="gst-plugins-base-libs-gstvideo.html#GST-VIDEO-INFO-COMP-PSTRIDE:CAPS"/>
     <keyword type="macro" name="GST_VIDEO_INFO_COMP_POFFSET()" link="gst-plugins-base-libs-gstvideo.html#GST-VIDEO-INFO-COMP-POFFSET:CAPS"/>
+    <keyword type="macro" name="GST_VIDEO_INFO_CHROMA_SITE()" link="gst-plugins-base-libs-gstvideo.html#GST-VIDEO-INFO-CHROMA-SITE:CAPS"/>
+    <keyword type="macro" name="GST_VIDEO_INFO_COLORIMETRY()" link="gst-plugins-base-libs-gstvideo.html#GST-VIDEO-INFO-COLORIMETRY:CAPS"/>
+    <keyword type="macro" name="GST_VIDEO_INFO_MULTIVIEW_FLAGS()" link="gst-plugins-base-libs-gstvideo.html#GST-VIDEO-INFO-MULTIVIEW-FLAGS:CAPS"/>
+    <keyword type="macro" name="GST_VIDEO_INFO_MULTIVIEW_MODE()" link="gst-plugins-base-libs-gstvideo.html#GST-VIDEO-INFO-MULTIVIEW-MODE:CAPS"/>
     <keyword type="function" name="gst_video_info_init ()" link="gst-plugins-base-libs-gstvideo.html#gst-video-info-init"/>
+    <keyword type="function" name="gst_video_info_new ()" link="gst-plugins-base-libs-gstvideo.html#gst-video-info-new" since="1.6"/>
+    <keyword type="function" name="gst_video_info_copy ()" link="gst-plugins-base-libs-gstvideo.html#gst-video-info-copy" since="1.6"/>
+    <keyword type="function" name="gst_video_info_free ()" link="gst-plugins-base-libs-gstvideo.html#gst-video-info-free" since="1.6"/>
     <keyword type="function" name="gst_video_info_set_format ()" link="gst-plugins-base-libs-gstvideo.html#gst-video-info-set-format"/>
     <keyword type="function" name="gst_video_info_from_caps ()" link="gst-plugins-base-libs-gstvideo.html#gst-video-info-from-caps"/>
     <keyword type="function" name="gst_video_info_to_caps ()" link="gst-plugins-base-libs-gstvideo.html#gst-video-info-to-caps"/>
@@ -1357,6 +1393,22 @@
     <keyword type="macro" name="GST_VIDEO_TILE_MAKE_STRIDE()" link="gst-plugins-base-libs-gstvideo.html#GST-VIDEO-TILE-MAKE-STRIDE:CAPS"/>
     <keyword type="macro" name="GST_VIDEO_TILE_X_TILES()" link="gst-plugins-base-libs-gstvideo.html#GST-VIDEO-TILE-X-TILES:CAPS"/>
     <keyword type="macro" name="GST_VIDEO_TILE_Y_TILES()" link="gst-plugins-base-libs-gstvideo.html#GST-VIDEO-TILE-Y-TILES:CAPS"/>
+    <keyword type="function" name="gst_video_blend ()" link="gst-plugins-base-libs-gstvideo.html#gst-video-blend"/>
+    <keyword type="function" name="gst_video_blend_scale_linear_RGBA ()" link="gst-plugins-base-libs-gstvideo.html#gst-video-blend-scale-linear-RGBA"/>
+    <keyword type="function" name="gst_video_converter_new ()" link="gst-plugins-base-libs-gstvideo.html#gst-video-converter-new" since="1.6"/>
+    <keyword type="function" name="gst_video_converter_free ()" link="gst-plugins-base-libs-gstvideo.html#gst-video-converter-free" since="1.6"/>
+    <keyword type="function" name="gst_video_converter_get_config ()" link="gst-plugins-base-libs-gstvideo.html#gst-video-converter-get-config"/>
+    <keyword type="function" name="gst_video_converter_set_config ()" link="gst-plugins-base-libs-gstvideo.html#gst-video-converter-set-config" since="1.6"/>
+    <keyword type="function" name="gst_video_converter_frame ()" link="gst-plugins-base-libs-gstvideo.html#gst-video-converter-frame" since="1.6"/>
+    <keyword type="function" name="gst_video_multiview_get_mono_modes ()" link="gst-plugins-base-libs-gstvideo.html#gst-video-multiview-get-mono-modes" since="1.6"/>
+    <keyword type="function" name="gst_video_multiview_get_unpacked_modes ()" link="gst-plugins-base-libs-gstvideo.html#gst-video-multiview-get-unpacked-modes" since="1.6"/>
+    <keyword type="function" name="gst_video_multiview_get_doubled_height_modes ()" link="gst-plugins-base-libs-gstvideo.html#gst-video-multiview-get-doubled-height-modes" since="1.6"/>
+    <keyword type="function" name="gst_video_multiview_get_doubled_size_modes ()" link="gst-plugins-base-libs-gstvideo.html#gst-video-multiview-get-doubled-size-modes" since="1.6"/>
+    <keyword type="function" name="gst_video_multiview_get_doubled_width_modes ()" link="gst-plugins-base-libs-gstvideo.html#gst-video-multiview-get-doubled-width-modes" since="1.6"/>
+    <keyword type="function" name="gst_video_multiview_mode_from_caps_string ()" link="gst-plugins-base-libs-gstvideo.html#gst-video-multiview-mode-from-caps-string" since="1.6"/>
+    <keyword type="function" name="gst_video_multiview_mode_to_caps_string ()" link="gst-plugins-base-libs-gstvideo.html#gst-video-multiview-mode-to-caps-string" since="1.6"/>
+    <keyword type="function" name="gst_video_multiview_guess_half_aspect ()" link="gst-plugins-base-libs-gstvideo.html#gst-video-multiview-guess-half-aspect" since="1.6"/>
+    <keyword type="function" name="gst_video_multiview_video_info_change_mode ()" link="gst-plugins-base-libs-gstvideo.html#gst-video-multiview-video-info-change-mode" since="1.6"/>
     <keyword type="struct" name="struct GstVideoAlignment" link="gst-plugins-base-libs-gstvideo.html#GstVideoAlignment"/>
     <keyword type="macro" name="GST_META_TAG_VIDEO_STR" link="gst-plugins-base-libs-gstvideo.html#GST-META-TAG-VIDEO-STR:CAPS" since="1.2"/>
     <keyword type="macro" name="GST_META_TAG_VIDEO_ORIENTATION_STR" link="gst-plugins-base-libs-gstvideo.html#GST-META-TAG-VIDEO-ORIENTATION-STR:CAPS" since="1.2"/>
@@ -1366,7 +1418,6 @@
     <keyword type="macro" name="GST_VIDEO_MAX_PLANES" link="gst-plugins-base-libs-gstvideo.html#GST-VIDEO-MAX-PLANES:CAPS"/>
     <keyword type="macro" name="GST_VIDEO_MAX_COMPONENTS" link="gst-plugins-base-libs-gstvideo.html#GST-VIDEO-MAX-COMPONENTS:CAPS"/>
     <keyword type="struct" name="struct GstVideoFormatInfo" link="gst-plugins-base-libs-gstvideo.html#GstVideoFormatInfo"/>
-    <keyword type="enum" name="enum GstVideoChromaSite" link="gst-plugins-base-libs-gstvideo.html#GstVideoChromaSite"/>
     <keyword type="enum" name="enum GstVideoFormatFlags" link="gst-plugins-base-libs-gstvideo.html#GstVideoFormatFlags"/>
     <keyword type="enum" name="enum GstVideoPackFlags" link="gst-plugins-base-libs-gstvideo.html#GstVideoPackFlags"/>
     <keyword type="macro" name="GST_VIDEO_SIZE_RANGE" link="gst-plugins-base-libs-gstvideo.html#GST-VIDEO-SIZE-RANGE:CAPS"/>
@@ -1374,23 +1425,27 @@
     <keyword type="macro" name="GST_VIDEO_FORMATS_ALL" link="gst-plugins-base-libs-gstvideo.html#GST-VIDEO-FORMATS-ALL:CAPS"/>
     <keyword type="enum" name="enum GstVideoColorRange" link="gst-plugins-base-libs-gstvideo.html#GstVideoColorRange"/>
     <keyword type="enum" name="enum GstVideoColorMatrix" link="gst-plugins-base-libs-gstvideo.html#GstVideoColorMatrix"/>
-    <keyword type="enum" name="enum GstVideoTransferFunction" link="gst-plugins-base-libs-gstvideo.html#GstVideoTransferFunction"/>
     <keyword type="enum" name="enum GstVideoColorPrimaries" link="gst-plugins-base-libs-gstvideo.html#GstVideoColorPrimaries"/>
+    <keyword type="enum" name="enum GstVideoTransferFunction" link="gst-plugins-base-libs-gstvideo.html#GstVideoTransferFunction"/>
     <keyword type="struct" name="GstVideoColorimetry" link="gst-plugins-base-libs-gstvideo.html#GstVideoColorimetry"/>
     <keyword type="struct" name="struct GstVideoInfo" link="gst-plugins-base-libs-gstvideo.html#GstVideoInfo"/>
     <keyword type="enum" name="enum GstVideoInterlaceMode" link="gst-plugins-base-libs-gstvideo.html#GstVideoInterlaceMode"/>
+    <keyword type="enum" name="enum GstVideoMultiviewMode" link="gst-plugins-base-libs-gstvideo.html#GstVideoMultiviewMode"/>
+    <keyword type="enum" name="enum GstVideoMultiviewFramePacking" link="gst-plugins-base-libs-gstvideo.html#GstVideoMultiviewFramePacking"/>
+    <keyword type="enum" name="enum GstVideoMultiviewFlags" link="gst-plugins-base-libs-gstvideo.html#GstVideoMultiviewFlags"/>
     <keyword type="enum" name="enum GstVideoFlags" link="gst-plugins-base-libs-gstvideo.html#GstVideoFlags"/>
     <keyword type="struct" name="struct GstVideoFrame" link="gst-plugins-base-libs-gstvideo.html#GstVideoFrame"/>
     <keyword type="enum" name="enum GstVideoFrameFlags" link="gst-plugins-base-libs-gstvideo.html#GstVideoFrameFlags"/>
     <keyword type="enum" name="enum GstVideoBufferFlags" link="gst-plugins-base-libs-gstvideo.html#GstVideoBufferFlags"/>
     <keyword type="enum" name="enum GstVideoTileType" link="gst-plugins-base-libs-gstvideo.html#GstVideoTileType"/>
     <keyword type="enum" name="enum GstVideoTileMode" link="gst-plugins-base-libs-gstvideo.html#GstVideoTileMode"/>
+    <keyword type="struct" name="GstVideoConverter" link="gst-plugins-base-libs-gstvideo.html#GstVideoConverter"/>
     <keyword type="function" name="gst_video_meta_map ()" link="gst-plugins-base-libs-gstvideometa.html#gst-video-meta-map"/>
     <keyword type="function" name="gst_video_meta_unmap ()" link="gst-plugins-base-libs-gstvideometa.html#gst-video-meta-unmap"/>
     <keyword type="function" name="gst_video_meta_get_info ()" link="gst-plugins-base-libs-gstvideometa.html#gst-video-meta-get-info"/>
     <keyword type="function" name="gst_buffer_add_video_meta ()" link="gst-plugins-base-libs-gstvideometa.html#gst-buffer-add-video-meta"/>
     <keyword type="function" name="gst_buffer_add_video_meta_full ()" link="gst-plugins-base-libs-gstvideometa.html#gst-buffer-add-video-meta-full"/>
-    <keyword type="macro" name="gst_buffer_get_video_meta()" link="gst-plugins-base-libs-gstvideometa.html#gst-buffer-get-video-meta"/>
+    <keyword type="function" name="gst_buffer_get_video_meta ()" link="gst-plugins-base-libs-gstvideometa.html#gst-buffer-get-video-meta"/>
     <keyword type="function" name="gst_buffer_get_video_meta_id ()" link="gst-plugins-base-libs-gstvideometa.html#gst-buffer-get-video-meta-id"/>
     <keyword type="macro" name="gst_buffer_add_video_crop_meta()" link="gst-plugins-base-libs-gstvideometa.html#gst-buffer-add-video-crop-meta"/>
     <keyword type="macro" name="gst_buffer_get_video_crop_meta()" link="gst-plugins-base-libs-gstvideometa.html#gst-buffer-get-video-crop-meta"/>
@@ -1408,7 +1463,6 @@
     <keyword type="struct" name="GstVideoRegionOfInterestMeta" link="gst-plugins-base-libs-gstvideometa.html#GstVideoRegionOfInterestMeta"/>
     <keyword type="macro" name="GST_BUFFER_POOL_OPTION_VIDEO_GL_TEXTURE_UPLOAD_META" link="gst-plugins-base-libs-gstvideometa.html#GST-BUFFER-POOL-OPTION-VIDEO-GL-TEXTURE-UPLOAD-META:CAPS" since="1.2.2"/>
     <keyword type="struct" name="struct GstVideoGLTextureUploadMeta" link="gst-plugins-base-libs-gstvideometa.html#GstVideoGLTextureUploadMeta"/>
-    <keyword type="" name="" link="gst-plugins-base-libs-gstvideooverlaycomposition.html#id-1.2.15.5.6.2"/>
     <keyword type="function" name="gst_video_overlay_composition_new ()" link="gst-plugins-base-libs-gstvideooverlaycomposition.html#gst-video-overlay-composition-new"/>
     <keyword type="function" name="gst_video_overlay_composition_ref ()" link="gst-plugins-base-libs-gstvideooverlaycomposition.html#gst-video-overlay-composition-ref"/>
     <keyword type="function" name="gst_video_overlay_composition_unref ()" link="gst-plugins-base-libs-gstvideooverlaycomposition.html#gst-video-overlay-composition-unref"/>
@@ -1444,10 +1498,44 @@
     <keyword type="struct" name="struct GstVideoOverlayCompositionMeta" link="gst-plugins-base-libs-gstvideooverlaycomposition.html#GstVideoOverlayCompositionMeta"/>
     <keyword type="enum" name="enum GstVideoOverlayFormatFlags" link="gst-plugins-base-libs-gstvideooverlaycomposition.html#GstVideoOverlayFormatFlags"/>
     <keyword type="struct" name="GstVideoOverlayRectangle" link="gst-plugins-base-libs-gstvideooverlaycomposition.html#GstVideoOverlayRectangle"/>
-    <keyword type="" name="" link="gst-plugins-base-libs-gstvideofilter.html#id-1.2.15.6.7.2"/>
     <keyword type="struct" name="struct GstVideoFilter" link="gst-plugins-base-libs-gstvideofilter.html#GstVideoFilter-struct"/>
     <keyword type="struct" name="struct GstVideoFilterClass" link="gst-plugins-base-libs-gstvideofilter.html#GstVideoFilterClass"/>
-    <keyword type="" name="" link="gst-plugins-base-libs-gstvideosink.html#id-1.2.15.7.9.2"/>
+    <keyword type="function" name="gst_video_dither_free ()" link="gst-plugins-base-libs-GstVideoDither.html#gst-video-dither-free"/>
+    <keyword type="function" name="gst_video_dither_line ()" link="gst-plugins-base-libs-GstVideoDither.html#gst-video-dither-line"/>
+    <keyword type="function" name="gst_video_dither_new ()" link="gst-plugins-base-libs-GstVideoDither.html#gst-video-dither-new"/>
+    <keyword type="struct" name="GstVideoDither" link="gst-plugins-base-libs-GstVideoDither.html#GstVideoDither"/>
+    <keyword type="enum" name="enum GstVideoDitherFlags" link="gst-plugins-base-libs-GstVideoDither.html#GstVideoDitherFlags"/>
+    <keyword type="enum" name="enum GstVideoDitherMethod" link="gst-plugins-base-libs-GstVideoDither.html#GstVideoDitherMethod"/>
+    <keyword type="function" name="gst_video_chroma_from_string ()" link="gst-plugins-base-libs-GstVideoChroma.html#gst-video-chroma-from-string"/>
+    <keyword type="function" name="gst_video_chroma_to_string ()" link="gst-plugins-base-libs-GstVideoChroma.html#gst-video-chroma-to-string"/>
+    <keyword type="function" name="gst_video_chroma_resample ()" link="gst-plugins-base-libs-GstVideoChroma.html#gst-video-chroma-resample"/>
+    <keyword type="function" name="gst_video_chroma_resample_free ()" link="gst-plugins-base-libs-GstVideoChroma.html#gst-video-chroma-resample-free"/>
+    <keyword type="function" name="gst_video_chroma_resample_get_info ()" link="gst-plugins-base-libs-GstVideoChroma.html#gst-video-chroma-resample-get-info"/>
+    <keyword type="function" name="gst_video_chroma_resample_new ()" link="gst-plugins-base-libs-GstVideoChroma.html#gst-video-chroma-resample-new"/>
+    <keyword type="enum" name="enum GstVideoChromaSite" link="gst-plugins-base-libs-GstVideoChroma.html#GstVideoChromaSite"/>
+    <keyword type="enum" name="enum GstVideoChromaFlags" link="gst-plugins-base-libs-GstVideoChroma.html#GstVideoChromaFlags"/>
+    <keyword type="enum" name="enum GstVideoChromaMethod" link="gst-plugins-base-libs-GstVideoChroma.html#GstVideoChromaMethod"/>
+    <keyword type="struct" name="GstVideoChromaResample" link="gst-plugins-base-libs-GstVideoChroma.html#GstVideoChromaResample"/>
+    <keyword type="function" name="gst_video_resampler_clear ()" link="gst-plugins-base-libs-GstVideoResampler.html#gst-video-resampler-clear" since="1.6"/>
+    <keyword type="function" name="gst_video_resampler_init ()" link="gst-plugins-base-libs-GstVideoResampler.html#gst-video-resampler-init"/>
+    <keyword type="struct" name="struct GstVideoResampler" link="gst-plugins-base-libs-GstVideoResampler.html#GstVideoResampler" since="1.6"/>
+    <keyword type="enum" name="enum GstVideoResamplerFlags" link="gst-plugins-base-libs-GstVideoResampler.html#GstVideoResamplerFlags" since="1.6"/>
+    <keyword type="enum" name="enum GstVideoResamplerMethod" link="gst-plugins-base-libs-GstVideoResampler.html#GstVideoResamplerMethod" since="1.6"/>
+    <keyword type="macro" name="GST_VIDEO_RESAMPLER_OPT_CUBIC_B" link="gst-plugins-base-libs-GstVideoResampler.html#GST-VIDEO-RESAMPLER-OPT-CUBIC-B:CAPS"/>
+    <keyword type="macro" name="GST_VIDEO_RESAMPLER_OPT_CUBIC_C" link="gst-plugins-base-libs-GstVideoResampler.html#GST-VIDEO-RESAMPLER-OPT-CUBIC-C:CAPS"/>
+    <keyword type="macro" name="GST_VIDEO_RESAMPLER_OPT_ENVELOPE" link="gst-plugins-base-libs-GstVideoResampler.html#GST-VIDEO-RESAMPLER-OPT-ENVELOPE:CAPS"/>
+    <keyword type="macro" name="GST_VIDEO_RESAMPLER_OPT_MAX_TAPS" link="gst-plugins-base-libs-GstVideoResampler.html#GST-VIDEO-RESAMPLER-OPT-MAX-TAPS:CAPS"/>
+    <keyword type="macro" name="GST_VIDEO_RESAMPLER_OPT_SHARPEN" link="gst-plugins-base-libs-GstVideoResampler.html#GST-VIDEO-RESAMPLER-OPT-SHARPEN:CAPS"/>
+    <keyword type="macro" name="GST_VIDEO_RESAMPLER_OPT_SHARPNESS" link="gst-plugins-base-libs-GstVideoResampler.html#GST-VIDEO-RESAMPLER-OPT-SHARPNESS:CAPS"/>
+    <keyword type="function" name="gst_video_scaler_2d ()" link="gst-plugins-base-libs-GstVideoScaler.html#gst-video-scaler-2d"/>
+    <keyword type="function" name="gst_video_scaler_combine_packed_YUV ()" link="gst-plugins-base-libs-GstVideoScaler.html#gst-video-scaler-combine-packed-YUV" since="1.6"/>
+    <keyword type="function" name="gst_video_scaler_free ()" link="gst-plugins-base-libs-GstVideoScaler.html#gst-video-scaler-free"/>
+    <keyword type="function" name="gst_video_scaler_get_coeff ()" link="gst-plugins-base-libs-GstVideoScaler.html#gst-video-scaler-get-coeff"/>
+    <keyword type="function" name="gst_video_scaler_horizontal ()" link="gst-plugins-base-libs-GstVideoScaler.html#gst-video-scaler-horizontal"/>
+    <keyword type="function" name="gst_video_scaler_new ()" link="gst-plugins-base-libs-GstVideoScaler.html#gst-video-scaler-new"/>
+    <keyword type="function" name="gst_video_scaler_vertical ()" link="gst-plugins-base-libs-GstVideoScaler.html#gst-video-scaler-vertical"/>
+    <keyword type="struct" name="GstVideoScaler" link="gst-plugins-base-libs-GstVideoScaler.html#GstVideoScaler"/>
+    <keyword type="enum" name="enum GstVideoScalerFlags" link="gst-plugins-base-libs-GstVideoScaler.html#GstVideoScalerFlags"/>
     <keyword type="macro" name="GST_VIDEO_SINK_HEIGHT()" link="gst-plugins-base-libs-gstvideosink.html#GST-VIDEO-SINK-HEIGHT:CAPS"/>
     <keyword type="macro" name="GST_VIDEO_SINK_PAD()" link="gst-plugins-base-libs-gstvideosink.html#GST-VIDEO-SINK-PAD:CAPS"/>
     <keyword type="macro" name="GST_VIDEO_SINK_WIDTH()" link="gst-plugins-base-libs-gstvideosink.html#GST-VIDEO-SINK-WIDTH:CAPS"/>
@@ -1456,7 +1544,6 @@
     <keyword type="struct" name="struct GstVideoSinkClass" link="gst-plugins-base-libs-gstvideosink.html#GstVideoSinkClass"/>
     <keyword type="struct" name="struct GstVideoRectangle" link="gst-plugins-base-libs-gstvideosink.html#GstVideoRectangle"/>
     <keyword type="property" name="The “show-preroll-frame” property" link="gst-plugins-base-libs-gstvideosink.html#GstVideoSink--show-preroll-frame"/>
-    <keyword type="" name="" link="gst-plugins-base-libs-gstcolorbalance.html#id-1.2.15.8.9.2"/>
     <keyword type="function" name="gst_color_balance_list_channels ()" link="gst-plugins-base-libs-gstcolorbalance.html#gst-color-balance-list-channels"/>
     <keyword type="function" name="gst_color_balance_get_value ()" link="gst-plugins-base-libs-gstcolorbalance.html#gst-color-balance-get-value"/>
     <keyword type="function" name="gst_color_balance_set_value ()" link="gst-plugins-base-libs-gstcolorbalance.html#gst-color-balance-set-value"/>
@@ -1466,7 +1553,6 @@
     <keyword type="struct" name="struct GstColorBalanceInterface" link="gst-plugins-base-libs-gstcolorbalance.html#GstColorBalanceInterface"/>
     <keyword type="enum" name="enum GstColorBalanceType" link="gst-plugins-base-libs-gstcolorbalance.html#GstColorBalanceType"/>
     <keyword type="signal" name="The “value-changed” signal" link="gst-plugins-base-libs-gstcolorbalance.html#GstColorBalance-value-changed"/>
-    <keyword type="" name="" link="gst-plugins-base-libs-gstcolorbalancechannel.html#id-1.2.15.9.8.2"/>
     <keyword type="struct" name="struct GstColorBalanceChannel" link="gst-plugins-base-libs-gstcolorbalancechannel.html#GstColorBalanceChannel-struct"/>
     <keyword type="struct" name="struct GstColorBalanceChannelClass" link="gst-plugins-base-libs-gstcolorbalancechannel.html#GstColorBalanceChannelClass"/>
     <keyword type="signal" name="The “value-changed” signal" link="gst-plugins-base-libs-gstcolorbalancechannel.html#GstColorBalanceChannel-value-changed"/>
@@ -1480,10 +1566,6 @@
     <keyword type="function" name="gst_video_orientation_set_vflip ()" link="gst-plugins-base-libs-gstvideoorientation.html#gst-video-orientation-set-vflip"/>
     <keyword type="struct" name="GstVideoOrientation" link="gst-plugins-base-libs-gstvideoorientation.html#GstVideoOrientation-struct"/>
     <keyword type="struct" name="struct GstVideoOrientationInterface" link="gst-plugins-base-libs-gstvideoorientation.html#GstVideoOrientationInterface"/>
-    <keyword type="" name="" link="gst-plugins-base-libs-gstvideooverlay.html#id-1.2.15.11.8.2"/>
-    <keyword type="" name="Two basic usage scenarios" link="gst-plugins-base-libs-gstvideooverlay.html#id-1.2.15.11.8.3"/>
-    <keyword type="" name="GstVideoOverlay and Gtk+" link="gst-plugins-base-libs-gstvideooverlay.html#id-1.2.15.11.8.4"/>
-    <keyword type="" name="GstVideoOverlay and Qt" link="gst-plugins-base-libs-gstvideooverlay.html#id-1.2.15.11.8.5"/>
     <keyword type="function" name="gst_video_overlay_got_window_handle ()" link="gst-plugins-base-libs-gstvideooverlay.html#gst-video-overlay-got-window-handle"/>
     <keyword type="function" name="gst_video_overlay_set_window_handle ()" link="gst-plugins-base-libs-gstvideooverlay.html#gst-video-overlay-set-window-handle"/>
     <keyword type="function" name="gst_video_overlay_prepare_window_handle ()" link="gst-plugins-base-libs-gstvideooverlay.html#gst-video-overlay-prepare-window-handle"/>
@@ -1529,6 +1611,7 @@
     <keyword type="function" name="gst_video_decoder_get_needs_format ()" link="gst-plugins-base-libs-GstVideoDecoder.html#gst-video-decoder-get-needs-format" since="1.4"/>
     <keyword type="function" name="gst_video_decoder_set_needs_format ()" link="gst-plugins-base-libs-GstVideoDecoder.html#gst-video-decoder-set-needs-format" since="1.4"/>
     <keyword type="function" name="gst_video_decoder_merge_tags ()" link="gst-plugins-base-libs-GstVideoDecoder.html#gst-video-decoder-merge-tags"/>
+    <keyword type="function" name="gst_video_decoder_proxy_getcaps ()" link="gst-plugins-base-libs-GstVideoDecoder.html#gst-video-decoder-proxy-getcaps" since="1.6"/>
     <keyword type="macro" name="GST_VIDEO_DECODER_FLOW_NEED_DATA" link="gst-plugins-base-libs-GstVideoDecoder.html#GST-VIDEO-DECODER-FLOW-NEED-DATA:CAPS"/>
     <keyword type="macro" name="GST_VIDEO_DECODER_MAX_ERRORS" link="gst-plugins-base-libs-GstVideoDecoder.html#GST-VIDEO-DECODER-MAX-ERRORS:CAPS"/>
     <keyword type="macro" name="GST_VIDEO_DECODER_SINK_NAME" link="gst-plugins-base-libs-GstVideoDecoder.html#GST-VIDEO-DECODER-SINK-NAME:CAPS"/>
@@ -1605,9 +1688,11 @@
     <keyword type="function" name="gst_navigation_message_get_type ()" link="gst-plugins-base-libs-gstnavigation.html#gst-navigation-message-get-type"/>
     <keyword type="function" name="gst_navigation_message_new_angles_changed ()" link="gst-plugins-base-libs-gstnavigation.html#gst-navigation-message-new-angles-changed"/>
     <keyword type="function" name="gst_navigation_message_new_commands_changed ()" link="gst-plugins-base-libs-gstnavigation.html#gst-navigation-message-new-commands-changed"/>
+    <keyword type="function" name="gst_navigation_message_new_event ()" link="gst-plugins-base-libs-gstnavigation.html#gst-navigation-message-new-event" since="1.6"/>
     <keyword type="function" name="gst_navigation_message_new_mouse_over ()" link="gst-plugins-base-libs-gstnavigation.html#gst-navigation-message-new-mouse-over"/>
-    <keyword type="function" name="gst_navigation_message_parse_mouse_over ()" link="gst-plugins-base-libs-gstnavigation.html#gst-navigation-message-parse-mouse-over"/>
     <keyword type="function" name="gst_navigation_message_parse_angles_changed ()" link="gst-plugins-base-libs-gstnavigation.html#gst-navigation-message-parse-angles-changed"/>
+    <keyword type="function" name="gst_navigation_message_parse_event ()" link="gst-plugins-base-libs-gstnavigation.html#gst-navigation-message-parse-event" since="1.6"/>
+    <keyword type="function" name="gst_navigation_message_parse_mouse_over ()" link="gst-plugins-base-libs-gstnavigation.html#gst-navigation-message-parse-mouse-over"/>
     <keyword type="function" name="gst_navigation_query_new_angles ()" link="gst-plugins-base-libs-gstnavigation.html#gst-navigation-query-new-angles"/>
     <keyword type="function" name="gst_navigation_query_get_type ()" link="gst-plugins-base-libs-gstnavigation.html#gst-navigation-query-get-type"/>
     <keyword type="function" name="gst_navigation_query_new_commands ()" link="gst-plugins-base-libs-gstnavigation.html#gst-navigation-query-new-commands"/>
@@ -1630,5 +1715,741 @@
     <keyword type="macro" name="GST_NAVIGATION_COMMAND_DVD_ROOT_MENU" link="gst-plugins-base-libs-gstnavigation.html#GST-NAVIGATION-COMMAND-DVD-ROOT-MENU:CAPS"/>
     <keyword type="macro" name="GST_NAVIGATION_COMMAND_DVD_SUBPICTURE_MENU" link="gst-plugins-base-libs-gstnavigation.html#GST-NAVIGATION-COMMAND-DVD-SUBPICTURE-MENU:CAPS"/>
     <keyword type="macro" name="GST_NAVIGATION_COMMAND_DVD_TITLE_MENU" link="gst-plugins-base-libs-gstnavigation.html#GST-NAVIGATION-COMMAND-DVD-TITLE-MENU:CAPS"/>
+    <keyword type="constant" name="GST_FD_MEMORY_FLAG_NONE" link="gst-plugins-base-libs-fdmemory.html#GST-FD-MEMORY-FLAG-NONE:CAPS"/>
+    <keyword type="constant" name="GST_FD_MEMORY_FLAG_KEEP_MAPPED" link="gst-plugins-base-libs-fdmemory.html#GST-FD-MEMORY-FLAG-KEEP-MAPPED:CAPS"/>
+    <keyword type="constant" name="GST_FD_MEMORY_FLAG_MAP_PRIVATE" link="gst-plugins-base-libs-fdmemory.html#GST-FD-MEMORY-FLAG-MAP-PRIVATE:CAPS"/>
+    <keyword type="constant" name="GST_APP_STREAM_TYPE_STREAM" link="gst-plugins-base-libs-appsrc.html#GST-APP-STREAM-TYPE-STREAM:CAPS"/>
+    <keyword type="constant" name="GST_APP_STREAM_TYPE_SEEKABLE" link="gst-plugins-base-libs-appsrc.html#GST-APP-STREAM-TYPE-SEEKABLE:CAPS"/>
+    <keyword type="constant" name="GST_APP_STREAM_TYPE_RANDOM_ACCESS" link="gst-plugins-base-libs-appsrc.html#GST-APP-STREAM-TYPE-RANDOM-ACCESS:CAPS"/>
+    <keyword type="constant" name="GST_AUDIO_FLAG_NONE" link="gst-plugins-base-libs-gstaudio.html#GST-AUDIO-FLAG-NONE:CAPS"/>
+    <keyword type="constant" name="GST_AUDIO_FLAG_UNPOSITIONED" link="gst-plugins-base-libs-gstaudio.html#GST-AUDIO-FLAG-UNPOSITIONED:CAPS"/>
+    <keyword type="constant" name="GST_AUDIO_FORMAT_UNKNOWN" link="gst-plugins-base-libs-gstaudio.html#GST-AUDIO-FORMAT-UNKNOWN:CAPS"/>
+    <keyword type="constant" name="GST_AUDIO_FORMAT_ENCODED" link="gst-plugins-base-libs-gstaudio.html#GST-AUDIO-FORMAT-ENCODED:CAPS"/>
+    <keyword type="constant" name="GST_AUDIO_FORMAT_S8" link="gst-plugins-base-libs-gstaudio.html#GST-AUDIO-FORMAT-S8:CAPS"/>
+    <keyword type="constant" name="GST_AUDIO_FORMAT_U8" link="gst-plugins-base-libs-gstaudio.html#GST-AUDIO-FORMAT-U8:CAPS"/>
+    <keyword type="constant" name="GST_AUDIO_FORMAT_S16LE" link="gst-plugins-base-libs-gstaudio.html#GST-AUDIO-FORMAT-S16LE:CAPS"/>
+    <keyword type="constant" name="GST_AUDIO_FORMAT_S16BE" link="gst-plugins-base-libs-gstaudio.html#GST-AUDIO-FORMAT-S16BE:CAPS"/>
+    <keyword type="constant" name="GST_AUDIO_FORMAT_U16LE" link="gst-plugins-base-libs-gstaudio.html#GST-AUDIO-FORMAT-U16LE:CAPS"/>
+    <keyword type="constant" name="GST_AUDIO_FORMAT_U16BE" link="gst-plugins-base-libs-gstaudio.html#GST-AUDIO-FORMAT-U16BE:CAPS"/>
+    <keyword type="constant" name="GST_AUDIO_FORMAT_S24_32LE" link="gst-plugins-base-libs-gstaudio.html#GST-AUDIO-FORMAT-S24-32LE:CAPS"/>
+    <keyword type="constant" name="GST_AUDIO_FORMAT_S24_32BE" link="gst-plugins-base-libs-gstaudio.html#GST-AUDIO-FORMAT-S24-32BE:CAPS"/>
+    <keyword type="constant" name="GST_AUDIO_FORMAT_U24_32LE" link="gst-plugins-base-libs-gstaudio.html#GST-AUDIO-FORMAT-U24-32LE:CAPS"/>
+    <keyword type="constant" name="GST_AUDIO_FORMAT_U24_32BE" link="gst-plugins-base-libs-gstaudio.html#GST-AUDIO-FORMAT-U24-32BE:CAPS"/>
+    <keyword type="constant" name="GST_AUDIO_FORMAT_S32LE" link="gst-plugins-base-libs-gstaudio.html#GST-AUDIO-FORMAT-S32LE:CAPS"/>
+    <keyword type="constant" name="GST_AUDIO_FORMAT_S32BE" link="gst-plugins-base-libs-gstaudio.html#GST-AUDIO-FORMAT-S32BE:CAPS"/>
+    <keyword type="constant" name="GST_AUDIO_FORMAT_U32LE" link="gst-plugins-base-libs-gstaudio.html#GST-AUDIO-FORMAT-U32LE:CAPS"/>
+    <keyword type="constant" name="GST_AUDIO_FORMAT_U32BE" link="gst-plugins-base-libs-gstaudio.html#GST-AUDIO-FORMAT-U32BE:CAPS"/>
+    <keyword type="constant" name="GST_AUDIO_FORMAT_S24LE" link="gst-plugins-base-libs-gstaudio.html#GST-AUDIO-FORMAT-S24LE:CAPS"/>
+    <keyword type="constant" name="GST_AUDIO_FORMAT_S24BE" link="gst-plugins-base-libs-gstaudio.html#GST-AUDIO-FORMAT-S24BE:CAPS"/>
+    <keyword type="constant" name="GST_AUDIO_FORMAT_U24LE" link="gst-plugins-base-libs-gstaudio.html#GST-AUDIO-FORMAT-U24LE:CAPS"/>
+    <keyword type="constant" name="GST_AUDIO_FORMAT_U24BE" link="gst-plugins-base-libs-gstaudio.html#GST-AUDIO-FORMAT-U24BE:CAPS"/>
+    <keyword type="constant" name="GST_AUDIO_FORMAT_S20LE" link="gst-plugins-base-libs-gstaudio.html#GST-AUDIO-FORMAT-S20LE:CAPS"/>
+    <keyword type="constant" name="GST_AUDIO_FORMAT_S20BE" link="gst-plugins-base-libs-gstaudio.html#GST-AUDIO-FORMAT-S20BE:CAPS"/>
+    <keyword type="constant" name="GST_AUDIO_FORMAT_U20LE" link="gst-plugins-base-libs-gstaudio.html#GST-AUDIO-FORMAT-U20LE:CAPS"/>
+    <keyword type="constant" name="GST_AUDIO_FORMAT_U20BE" link="gst-plugins-base-libs-gstaudio.html#GST-AUDIO-FORMAT-U20BE:CAPS"/>
+    <keyword type="constant" name="GST_AUDIO_FORMAT_S18LE" link="gst-plugins-base-libs-gstaudio.html#GST-AUDIO-FORMAT-S18LE:CAPS"/>
+    <keyword type="constant" name="GST_AUDIO_FORMAT_S18BE" link="gst-plugins-base-libs-gstaudio.html#GST-AUDIO-FORMAT-S18BE:CAPS"/>
+    <keyword type="constant" name="GST_AUDIO_FORMAT_U18LE" link="gst-plugins-base-libs-gstaudio.html#GST-AUDIO-FORMAT-U18LE:CAPS"/>
+    <keyword type="constant" name="GST_AUDIO_FORMAT_U18BE" link="gst-plugins-base-libs-gstaudio.html#GST-AUDIO-FORMAT-U18BE:CAPS"/>
+    <keyword type="constant" name="GST_AUDIO_FORMAT_F32LE" link="gst-plugins-base-libs-gstaudio.html#GST-AUDIO-FORMAT-F32LE:CAPS"/>
+    <keyword type="constant" name="GST_AUDIO_FORMAT_F32BE" link="gst-plugins-base-libs-gstaudio.html#GST-AUDIO-FORMAT-F32BE:CAPS"/>
+    <keyword type="constant" name="GST_AUDIO_FORMAT_F64LE" link="gst-plugins-base-libs-gstaudio.html#GST-AUDIO-FORMAT-F64LE:CAPS"/>
+    <keyword type="constant" name="GST_AUDIO_FORMAT_F64BE" link="gst-plugins-base-libs-gstaudio.html#GST-AUDIO-FORMAT-F64BE:CAPS"/>
+    <keyword type="constant" name="GST_AUDIO_FORMAT_S16" link="gst-plugins-base-libs-gstaudio.html#GST-AUDIO-FORMAT-S16:CAPS"/>
+    <keyword type="constant" name="GST_AUDIO_FORMAT_U16" link="gst-plugins-base-libs-gstaudio.html#GST-AUDIO-FORMAT-U16:CAPS"/>
+    <keyword type="constant" name="GST_AUDIO_FORMAT_S24_32" link="gst-plugins-base-libs-gstaudio.html#GST-AUDIO-FORMAT-S24-32:CAPS"/>
+    <keyword type="constant" name="GST_AUDIO_FORMAT_U24_32" link="gst-plugins-base-libs-gstaudio.html#GST-AUDIO-FORMAT-U24-32:CAPS"/>
+    <keyword type="constant" name="GST_AUDIO_FORMAT_S32" link="gst-plugins-base-libs-gstaudio.html#GST-AUDIO-FORMAT-S32:CAPS"/>
+    <keyword type="constant" name="GST_AUDIO_FORMAT_U32" link="gst-plugins-base-libs-gstaudio.html#GST-AUDIO-FORMAT-U32:CAPS"/>
+    <keyword type="constant" name="GST_AUDIO_FORMAT_S24" link="gst-plugins-base-libs-gstaudio.html#GST-AUDIO-FORMAT-S24:CAPS"/>
+    <keyword type="constant" name="GST_AUDIO_FORMAT_U24" link="gst-plugins-base-libs-gstaudio.html#GST-AUDIO-FORMAT-U24:CAPS"/>
+    <keyword type="constant" name="GST_AUDIO_FORMAT_S20" link="gst-plugins-base-libs-gstaudio.html#GST-AUDIO-FORMAT-S20:CAPS"/>
+    <keyword type="constant" name="GST_AUDIO_FORMAT_U20" link="gst-plugins-base-libs-gstaudio.html#GST-AUDIO-FORMAT-U20:CAPS"/>
+    <keyword type="constant" name="GST_AUDIO_FORMAT_S18" link="gst-plugins-base-libs-gstaudio.html#GST-AUDIO-FORMAT-S18:CAPS"/>
+    <keyword type="constant" name="GST_AUDIO_FORMAT_U18" link="gst-plugins-base-libs-gstaudio.html#GST-AUDIO-FORMAT-U18:CAPS"/>
+    <keyword type="constant" name="GST_AUDIO_FORMAT_F32" link="gst-plugins-base-libs-gstaudio.html#GST-AUDIO-FORMAT-F32:CAPS"/>
+    <keyword type="constant" name="GST_AUDIO_FORMAT_F64" link="gst-plugins-base-libs-gstaudio.html#GST-AUDIO-FORMAT-F64:CAPS"/>
+    <keyword type="constant" name="GST_AUDIO_FORMAT_FLAG_INTEGER" link="gst-plugins-base-libs-gstaudio.html#GST-AUDIO-FORMAT-FLAG-INTEGER:CAPS"/>
+    <keyword type="constant" name="GST_AUDIO_FORMAT_FLAG_FLOAT" link="gst-plugins-base-libs-gstaudio.html#GST-AUDIO-FORMAT-FLAG-FLOAT:CAPS"/>
+    <keyword type="constant" name="GST_AUDIO_FORMAT_FLAG_SIGNED" link="gst-plugins-base-libs-gstaudio.html#GST-AUDIO-FORMAT-FLAG-SIGNED:CAPS"/>
+    <keyword type="constant" name="GST_AUDIO_FORMAT_FLAG_COMPLEX" link="gst-plugins-base-libs-gstaudio.html#GST-AUDIO-FORMAT-FLAG-COMPLEX:CAPS"/>
+    <keyword type="constant" name="GST_AUDIO_FORMAT_FLAG_UNPACK" link="gst-plugins-base-libs-gstaudio.html#GST-AUDIO-FORMAT-FLAG-UNPACK:CAPS"/>
+    <keyword type="constant" name="GST_AUDIO_LAYOUT_INTERLEAVED" link="gst-plugins-base-libs-gstaudio.html#GST-AUDIO-LAYOUT-INTERLEAVED:CAPS"/>
+    <keyword type="constant" name="GST_AUDIO_LAYOUT_NON_INTERLEAVED" link="gst-plugins-base-libs-gstaudio.html#GST-AUDIO-LAYOUT-NON-INTERLEAVED:CAPS"/>
+    <keyword type="constant" name="GST_AUDIO_PACK_FLAG_NONE" link="gst-plugins-base-libs-gstaudio.html#GST-AUDIO-PACK-FLAG-NONE:CAPS"/>
+    <keyword type="constant" name="GST_AUDIO_CD_SRC_MODE_NORMAL" link="gst-plugins-base-libs-gstaudiocdsrc.html#GST-AUDIO-CD-SRC-MODE-NORMAL:CAPS"/>
+    <keyword type="constant" name="GST_AUDIO_CD_SRC_MODE_CONTINUOUS" link="gst-plugins-base-libs-gstaudiocdsrc.html#GST-AUDIO-CD-SRC-MODE-CONTINUOUS:CAPS"/>
+    <keyword type="constant" name="GST_AUDIO_BASE_SINK_SLAVE_RESAMPLE" link="gst-plugins-base-libs-gstaudiobasesink.html#GST-AUDIO-BASE-SINK-SLAVE-RESAMPLE:CAPS"/>
+    <keyword type="constant" name="GST_AUDIO_BASE_SINK_SLAVE_SKEW" link="gst-plugins-base-libs-gstaudiobasesink.html#GST-AUDIO-BASE-SINK-SLAVE-SKEW:CAPS"/>
+    <keyword type="constant" name="GST_AUDIO_BASE_SINK_SLAVE_NONE" link="gst-plugins-base-libs-gstaudiobasesink.html#GST-AUDIO-BASE-SINK-SLAVE-NONE:CAPS"/>
+    <keyword type="constant" name="GST_AUDIO_BASE_SINK_SLAVE_CUSTOM" link="gst-plugins-base-libs-gstaudiobasesink.html#GST-AUDIO-BASE-SINK-SLAVE-CUSTOM:CAPS"/>
+    <keyword type="constant" name="GST_AUDIO_BASE_SINK_DISCONT_REASON_NO_DISCONT" link="gst-plugins-base-libs-gstaudiobasesink.html#GST-AUDIO-BASE-SINK-DISCONT-REASON-NO-DISCONT:CAPS"/>
+    <keyword type="constant" name="GST_AUDIO_BASE_SINK_DISCONT_REASON_NEW_CAPS" link="gst-plugins-base-libs-gstaudiobasesink.html#GST-AUDIO-BASE-SINK-DISCONT-REASON-NEW-CAPS"/>
+    <keyword type="constant" name="GST_AUDIO_BASE_SINK_DISCONT_REASON_FLUSH" link="gst-plugins-base-libs-gstaudiobasesink.html#GST-AUDIO-BASE-SINK-DISCONT-REASON-FLUSH:CAPS"/>
+    <keyword type="constant" name="GST_AUDIO_BASE_SINK_DISCONT_REASON_SYNC_LATENCY" link="gst-plugins-base-libs-gstaudiobasesink.html#GST-AUDIO-BASE-SINK-DISCONT-REASON-SYNC-LATENCY:CAPS"/>
+    <keyword type="constant" name="GST_AUDIO_BASE_SINK_DISCONT_REASON_ALIGNMENT" link="gst-plugins-base-libs-gstaudiobasesink.html#GST-AUDIO-BASE-SINK-DISCONT-REASON-ALIGNMENT:CAPS"/>
+    <keyword type="constant" name="GST_AUDIO_BASE_SINK_DISCONT_REASON_DEVICE_FAILURE" link="gst-plugins-base-libs-gstaudiobasesink.html#GST-AUDIO-BASE-SINK-DISCONT-REASON-DEVICE-FAILURE:CAPS"/>
+    <keyword type="constant" name="GST_AUDIO_BASE_SRC_SLAVE_RESAMPLE" link="gst-plugins-base-libs-gstaudiobasesrc.html#GST-AUDIO-BASE-SRC-SLAVE-RESAMPLE:CAPS"/>
+    <keyword type="constant" name="GST_AUDIO_BASE_SRC_SLAVE_RETIMESTAMP" link="gst-plugins-base-libs-gstaudiobasesrc.html#GST-AUDIO-BASE-SRC-SLAVE-RETIMESTAMP:CAPS"/>
+    <keyword type="constant" name="GST_AUDIO_BASE_SRC_SLAVE_SKEW" link="gst-plugins-base-libs-gstaudiobasesrc.html#GST-AUDIO-BASE-SRC-SLAVE-SKEW:CAPS"/>
+    <keyword type="constant" name="GST_AUDIO_BASE_SRC_SLAVE_NONE" link="gst-plugins-base-libs-gstaudiobasesrc.html#GST-AUDIO-BASE-SRC-SLAVE-NONE:CAPS"/>
+    <keyword type="constant" name="GST_AUDIO_CHANNEL_POSITION_NONE" link="gst-plugins-base-libs-gstaudiochannels.html#GST-AUDIO-CHANNEL-POSITION-NONE:CAPS"/>
+    <keyword type="constant" name="GST_AUDIO_CHANNEL_POSITION_MONO" link="gst-plugins-base-libs-gstaudiochannels.html#GST-AUDIO-CHANNEL-POSITION-MONO:CAPS"/>
+    <keyword type="constant" name="GST_AUDIO_CHANNEL_POSITION_INVALID" link="gst-plugins-base-libs-gstaudiochannels.html#GST-AUDIO-CHANNEL-POSITION-INVALID:CAPS"/>
+    <keyword type="constant" name="GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT" link="gst-plugins-base-libs-gstaudiochannels.html#GST-AUDIO-CHANNEL-POSITION-FRONT-LEFT:CAPS"/>
+    <keyword type="constant" name="GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT" link="gst-plugins-base-libs-gstaudiochannels.html#GST-AUDIO-CHANNEL-POSITION-FRONT-RIGHT:CAPS"/>
+    <keyword type="constant" name="GST_AUDIO_CHANNEL_POSITION_FRONT_CENTER" link="gst-plugins-base-libs-gstaudiochannels.html#GST-AUDIO-CHANNEL-POSITION-FRONT-CENTER:CAPS"/>
+    <keyword type="constant" name="GST_AUDIO_CHANNEL_POSITION_LFE1" link="gst-plugins-base-libs-gstaudiochannels.html#GST-AUDIO-CHANNEL-POSITION-LFE1:CAPS"/>
+    <keyword type="constant" name="GST_AUDIO_CHANNEL_POSITION_REAR_LEFT" link="gst-plugins-base-libs-gstaudiochannels.html#GST-AUDIO-CHANNEL-POSITION-REAR-LEFT:CAPS"/>
+    <keyword type="constant" name="GST_AUDIO_CHANNEL_POSITION_REAR_RIGHT" link="gst-plugins-base-libs-gstaudiochannels.html#GST-AUDIO-CHANNEL-POSITION-REAR-RIGHT:CAPS"/>
+    <keyword type="constant" name="GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT_OF_CENTER" link="gst-plugins-base-libs-gstaudiochannels.html#GST-AUDIO-CHANNEL-POSITION-FRONT-LEFT-OF-CENTER:CAPS"/>
+    <keyword type="constant" name="GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT_OF_CENTER" link="gst-plugins-base-libs-gstaudiochannels.html#GST-AUDIO-CHANNEL-POSITION-FRONT-RIGHT-OF-CENTER:CAPS"/>
+    <keyword type="constant" name="GST_AUDIO_CHANNEL_POSITION_REAR_CENTER" link="gst-plugins-base-libs-gstaudiochannels.html#GST-AUDIO-CHANNEL-POSITION-REAR-CENTER:CAPS"/>
+    <keyword type="constant" name="GST_AUDIO_CHANNEL_POSITION_LFE2" link="gst-plugins-base-libs-gstaudiochannels.html#GST-AUDIO-CHANNEL-POSITION-LFE2:CAPS"/>
+    <keyword type="constant" name="GST_AUDIO_CHANNEL_POSITION_SIDE_LEFT" link="gst-plugins-base-libs-gstaudiochannels.html#GST-AUDIO-CHANNEL-POSITION-SIDE-LEFT:CAPS"/>
+    <keyword type="constant" name="GST_AUDIO_CHANNEL_POSITION_SIDE_RIGHT" link="gst-plugins-base-libs-gstaudiochannels.html#GST-AUDIO-CHANNEL-POSITION-SIDE-RIGHT:CAPS"/>
+    <keyword type="constant" name="GST_AUDIO_CHANNEL_POSITION_TOP_FRONT_LEFT" link="gst-plugins-base-libs-gstaudiochannels.html#GST-AUDIO-CHANNEL-POSITION-TOP-FRONT-LEFT:CAPS"/>
+    <keyword type="constant" name="GST_AUDIO_CHANNEL_POSITION_TOP_FRONT_RIGHT" link="gst-plugins-base-libs-gstaudiochannels.html#GST-AUDIO-CHANNEL-POSITION-TOP-FRONT-RIGHT:CAPS"/>
+    <keyword type="constant" name="GST_AUDIO_CHANNEL_POSITION_TOP_FRONT_CENTER" link="gst-plugins-base-libs-gstaudiochannels.html#GST-AUDIO-CHANNEL-POSITION-TOP-FRONT-CENTER:CAPS"/>
+    <keyword type="constant" name="GST_AUDIO_CHANNEL_POSITION_TOP_CENTER" link="gst-plugins-base-libs-gstaudiochannels.html#GST-AUDIO-CHANNEL-POSITION-TOP-CENTER:CAPS"/>
+    <keyword type="constant" name="GST_AUDIO_CHANNEL_POSITION_TOP_REAR_LEFT" link="gst-plugins-base-libs-gstaudiochannels.html#GST-AUDIO-CHANNEL-POSITION-TOP-REAR-LEFT:CAPS"/>
+    <keyword type="constant" name="GST_AUDIO_CHANNEL_POSITION_TOP_REAR_RIGHT" link="gst-plugins-base-libs-gstaudiochannels.html#GST-AUDIO-CHANNEL-POSITION-TOP-REAR-RIGHT:CAPS"/>
+    <keyword type="constant" name="GST_AUDIO_CHANNEL_POSITION_TOP_SIDE_LEFT" link="gst-plugins-base-libs-gstaudiochannels.html#GST-AUDIO-CHANNEL-POSITION-TOP-SIDE-LEFT:CAPS"/>
+    <keyword type="constant" name="GST_AUDIO_CHANNEL_POSITION_TOP_SIDE_RIGHT" link="gst-plugins-base-libs-gstaudiochannels.html#GST-AUDIO-CHANNEL-POSITION-TOP-SIDE-RIGHT:CAPS"/>
+    <keyword type="constant" name="GST_AUDIO_CHANNEL_POSITION_TOP_REAR_CENTER" link="gst-plugins-base-libs-gstaudiochannels.html#GST-AUDIO-CHANNEL-POSITION-TOP-REAR-CENTER:CAPS"/>
+    <keyword type="constant" name="GST_AUDIO_CHANNEL_POSITION_BOTTOM_FRONT_CENTER" link="gst-plugins-base-libs-gstaudiochannels.html#GST-AUDIO-CHANNEL-POSITION-BOTTOM-FRONT-CENTER:CAPS"/>
+    <keyword type="constant" name="GST_AUDIO_CHANNEL_POSITION_BOTTOM_FRONT_LEFT" link="gst-plugins-base-libs-gstaudiochannels.html#GST-AUDIO-CHANNEL-POSITION-BOTTOM-FRONT-LEFT:CAPS"/>
+    <keyword type="constant" name="GST_AUDIO_CHANNEL_POSITION_BOTTOM_FRONT_RIGHT" link="gst-plugins-base-libs-gstaudiochannels.html#GST-AUDIO-CHANNEL-POSITION-BOTTOM-FRONT-RIGHT:CAPS"/>
+    <keyword type="constant" name="GST_AUDIO_CHANNEL_POSITION_WIDE_LEFT" link="gst-plugins-base-libs-gstaudiochannels.html#GST-AUDIO-CHANNEL-POSITION-WIDE-LEFT:CAPS"/>
+    <keyword type="constant" name="GST_AUDIO_CHANNEL_POSITION_WIDE_RIGHT" link="gst-plugins-base-libs-gstaudiochannels.html#GST-AUDIO-CHANNEL-POSITION-WIDE-RIGHT:CAPS"/>
+    <keyword type="constant" name="GST_AUDIO_CHANNEL_POSITION_SURROUND_LEFT" link="gst-plugins-base-libs-gstaudiochannels.html#GST-AUDIO-CHANNEL-POSITION-SURROUND-LEFT:CAPS"/>
+    <keyword type="constant" name="GST_AUDIO_CHANNEL_POSITION_SURROUND_RIGHT" link="gst-plugins-base-libs-gstaudiochannels.html#GST-AUDIO-CHANNEL-POSITION-SURROUND-RIGHT:CAPS"/>
+    <keyword type="constant" name="GST_AUDIO_RING_BUFFER_STATE_STOPPED" link="gst-plugins-base-libs-gstaudioringbuffer.html#GST-AUDIO-RING-BUFFER-STATE-STOPPED:CAPS"/>
+    <keyword type="constant" name="GST_AUDIO_RING_BUFFER_STATE_PAUSED" link="gst-plugins-base-libs-gstaudioringbuffer.html#GST-AUDIO-RING-BUFFER-STATE-PAUSED:CAPS"/>
+    <keyword type="constant" name="GST_AUDIO_RING_BUFFER_STATE_STARTED" link="gst-plugins-base-libs-gstaudioringbuffer.html#GST-AUDIO-RING-BUFFER-STATE-STARTED:CAPS"/>
+    <keyword type="constant" name="GST_AUDIO_RING_BUFFER_STATE_ERROR" link="gst-plugins-base-libs-gstaudioringbuffer.html#GST-AUDIO-RING-BUFFER-STATE-ERROR:CAPS"/>
+    <keyword type="constant" name="GST_AUDIO_RING_BUFFER_FORMAT_TYPE_RAW" link="gst-plugins-base-libs-gstaudioringbuffer.html#GST-AUDIO-RING-BUFFER-FORMAT-TYPE-RAW:CAPS"/>
+    <keyword type="constant" name="GST_AUDIO_RING_BUFFER_FORMAT_TYPE_MU_LAW" link="gst-plugins-base-libs-gstaudioringbuffer.html#GST-AUDIO-RING-BUFFER-FORMAT-TYPE-MU-LAW:CAPS"/>
+    <keyword type="constant" name="GST_AUDIO_RING_BUFFER_FORMAT_TYPE_A_LAW" link="gst-plugins-base-libs-gstaudioringbuffer.html#GST-AUDIO-RING-BUFFER-FORMAT-TYPE-A-LAW:CAPS"/>
+    <keyword type="constant" name="GST_AUDIO_RING_BUFFER_FORMAT_TYPE_IMA_ADPCM" link="gst-plugins-base-libs-gstaudioringbuffer.html#GST-AUDIO-RING-BUFFER-FORMAT-TYPE-IMA-ADPCM:CAPS"/>
+    <keyword type="constant" name="GST_AUDIO_RING_BUFFER_FORMAT_TYPE_MPEG" link="gst-plugins-base-libs-gstaudioringbuffer.html#GST-AUDIO-RING-BUFFER-FORMAT-TYPE-MPEG:CAPS"/>
+    <keyword type="constant" name="GST_AUDIO_RING_BUFFER_FORMAT_TYPE_GSM" link="gst-plugins-base-libs-gstaudioringbuffer.html#GST-AUDIO-RING-BUFFER-FORMAT-TYPE-GSM:CAPS"/>
+    <keyword type="constant" name="GST_AUDIO_RING_BUFFER_FORMAT_TYPE_IEC958" link="gst-plugins-base-libs-gstaudioringbuffer.html#GST-AUDIO-RING-BUFFER-FORMAT-TYPE-IEC958:CAPS"/>
+    <keyword type="constant" name="GST_AUDIO_RING_BUFFER_FORMAT_TYPE_AC3" link="gst-plugins-base-libs-gstaudioringbuffer.html#GST-AUDIO-RING-BUFFER-FORMAT-TYPE-AC3:CAPS"/>
+    <keyword type="constant" name="GST_AUDIO_RING_BUFFER_FORMAT_TYPE_EAC3" link="gst-plugins-base-libs-gstaudioringbuffer.html#GST-AUDIO-RING-BUFFER-FORMAT-TYPE-EAC3:CAPS"/>
+    <keyword type="constant" name="GST_AUDIO_RING_BUFFER_FORMAT_TYPE_DTS" link="gst-plugins-base-libs-gstaudioringbuffer.html#GST-AUDIO-RING-BUFFER-FORMAT-TYPE-DTS:CAPS"/>
+    <keyword type="constant" name="GST_AUDIO_RING_BUFFER_FORMAT_TYPE_MPEG2_AAC" link="gst-plugins-base-libs-gstaudioringbuffer.html#GST-AUDIO-RING-BUFFER-FORMAT-TYPE-MPEG2-AAC:CAPS"/>
+    <keyword type="constant" name="GST_AUDIO_RING_BUFFER_FORMAT_TYPE_MPEG4_AAC" link="gst-plugins-base-libs-gstaudioringbuffer.html#GST-AUDIO-RING-BUFFER-FORMAT-TYPE-MPEG4-AAC:CAPS"/>
+    <keyword type="constant" name="GST_STREAM_VOLUME_FORMAT_LINEAR" link="gst-plugins-base-libs-gststreamvolume.html#GST-STREAM-VOLUME-FORMAT-LINEAR:CAPS"/>
+    <keyword type="constant" name="GST_STREAM_VOLUME_FORMAT_CUBIC" link="gst-plugins-base-libs-gststreamvolume.html#GST-STREAM-VOLUME-FORMAT-CUBIC:CAPS"/>
+    <keyword type="constant" name="GST_STREAM_VOLUME_FORMAT_DB" link="gst-plugins-base-libs-gststreamvolume.html#GST-STREAM-VOLUME-FORMAT-DB:CAPS"/>
+    <keyword type="constant" name="GST_FFT_WINDOW_RECTANGULAR" link="gst-plugins-base-libs-gstfft.html#GST-FFT-WINDOW-RECTANGULAR:CAPS"/>
+    <keyword type="constant" name="GST_FFT_WINDOW_HAMMING" link="gst-plugins-base-libs-gstfft.html#GST-FFT-WINDOW-HAMMING:CAPS"/>
+    <keyword type="constant" name="GST_FFT_WINDOW_HANN" link="gst-plugins-base-libs-gstfft.html#GST-FFT-WINDOW-HANN:CAPS"/>
+    <keyword type="constant" name="GST_FFT_WINDOW_BARTLETT" link="gst-plugins-base-libs-gstfft.html#GST-FFT-WINDOW-BARTLETT:CAPS"/>
+    <keyword type="constant" name="GST_FFT_WINDOW_BLACKMAN" link="gst-plugins-base-libs-gstfft.html#GST-FFT-WINDOW-BLACKMAN:CAPS"/>
+    <keyword type="constant" name="GST_RTCP_TYPE_INVALID" link="gst-plugins-base-libs-gstrtcpbuffer.html#GST-RTCP-TYPE-INVALID:CAPS"/>
+    <keyword type="constant" name="GST_RTCP_TYPE_SR" link="gst-plugins-base-libs-gstrtcpbuffer.html#GST-RTCP-TYPE-SR:CAPS"/>
+    <keyword type="constant" name="GST_RTCP_TYPE_RR" link="gst-plugins-base-libs-gstrtcpbuffer.html#GST-RTCP-TYPE-RR:CAPS"/>
+    <keyword type="constant" name="GST_RTCP_TYPE_SDES" link="gst-plugins-base-libs-gstrtcpbuffer.html#GST-RTCP-TYPE-SDES:CAPS"/>
+    <keyword type="constant" name="GST_RTCP_TYPE_BYE" link="gst-plugins-base-libs-gstrtcpbuffer.html#GST-RTCP-TYPE-BYE:CAPS"/>
+    <keyword type="constant" name="GST_RTCP_TYPE_APP" link="gst-plugins-base-libs-gstrtcpbuffer.html#GST-RTCP-TYPE-APP:CAPS"/>
+    <keyword type="constant" name="GST_RTCP_TYPE_RTPFB" link="gst-plugins-base-libs-gstrtcpbuffer.html#GST-RTCP-TYPE-RTPFB:CAPS"/>
+    <keyword type="constant" name="GST_RTCP_TYPE_PSFB" link="gst-plugins-base-libs-gstrtcpbuffer.html#GST-RTCP-TYPE-PSFB:CAPS"/>
+    <keyword type="constant" name="GST_RTCP_SDES_INVALID" link="gst-plugins-base-libs-gstrtcpbuffer.html#GST-RTCP-SDES-INVALID:CAPS"/>
+    <keyword type="constant" name="GST_RTCP_SDES_END" link="gst-plugins-base-libs-gstrtcpbuffer.html#GST-RTCP-SDES-END:CAPS"/>
+    <keyword type="constant" name="GST_RTCP_SDES_CNAME" link="gst-plugins-base-libs-gstrtcpbuffer.html#GST-RTCP-SDES-CNAME:CAPS"/>
+    <keyword type="constant" name="GST_RTCP_SDES_NAME" link="gst-plugins-base-libs-gstrtcpbuffer.html#GST-RTCP-SDES-NAME:CAPS"/>
+    <keyword type="constant" name="GST_RTCP_SDES_EMAIL" link="gst-plugins-base-libs-gstrtcpbuffer.html#GST-RTCP-SDES-EMAIL:CAPS"/>
+    <keyword type="constant" name="GST_RTCP_SDES_PHONE" link="gst-plugins-base-libs-gstrtcpbuffer.html#GST-RTCP-SDES-PHONE:CAPS"/>
+    <keyword type="constant" name="GST_RTCP_SDES_LOC" link="gst-plugins-base-libs-gstrtcpbuffer.html#GST-RTCP-SDES-LOC:CAPS"/>
+    <keyword type="constant" name="GST_RTCP_SDES_TOOL" link="gst-plugins-base-libs-gstrtcpbuffer.html#GST-RTCP-SDES-TOOL:CAPS"/>
+    <keyword type="constant" name="GST_RTCP_SDES_NOTE" link="gst-plugins-base-libs-gstrtcpbuffer.html#GST-RTCP-SDES-NOTE:CAPS"/>
+    <keyword type="constant" name="GST_RTCP_SDES_PRIV" link="gst-plugins-base-libs-gstrtcpbuffer.html#GST-RTCP-SDES-PRIV:CAPS"/>
+    <keyword type="constant" name="GST_RTCP_FB_TYPE_INVALID" link="gst-plugins-base-libs-gstrtcpbuffer.html#GST-RTCP-FB-TYPE-INVALID:CAPS"/>
+    <keyword type="constant" name="GST_RTCP_RTPFB_TYPE_NACK" link="gst-plugins-base-libs-gstrtcpbuffer.html#GST-RTCP-RTPFB-TYPE-NACK:CAPS"/>
+    <keyword type="constant" name="GST_RTCP_RTPFB_TYPE_TMMBR" link="gst-plugins-base-libs-gstrtcpbuffer.html#GST-RTCP-RTPFB-TYPE-TMMBR:CAPS"/>
+    <keyword type="constant" name="GST_RTCP_RTPFB_TYPE_TMMBN" link="gst-plugins-base-libs-gstrtcpbuffer.html#GST-RTCP-RTPFB-TYPE-TMMBN:CAPS"/>
+    <keyword type="constant" name="GST_RTCP_RTPFB_TYPE_RTCP_SR_REQ" link="gst-plugins-base-libs-gstrtcpbuffer.html#GST-RTCP-RTPFB-TYPE-RTCP-SR-REQ:CAPS"/>
+    <keyword type="constant" name="GST_RTCP_PSFB_TYPE_PLI" link="gst-plugins-base-libs-gstrtcpbuffer.html#GST-RTCP-PSFB-TYPE-PLI:CAPS"/>
+    <keyword type="constant" name="GST_RTCP_PSFB_TYPE_SLI" link="gst-plugins-base-libs-gstrtcpbuffer.html#GST-RTCP-PSFB-TYPE-SLI:CAPS"/>
+    <keyword type="constant" name="GST_RTCP_PSFB_TYPE_RPSI" link="gst-plugins-base-libs-gstrtcpbuffer.html#GST-RTCP-PSFB-TYPE-RPSI:CAPS"/>
+    <keyword type="constant" name="GST_RTCP_PSFB_TYPE_AFB" link="gst-plugins-base-libs-gstrtcpbuffer.html#GST-RTCP-PSFB-TYPE-AFB:CAPS"/>
+    <keyword type="constant" name="GST_RTCP_PSFB_TYPE_FIR" link="gst-plugins-base-libs-gstrtcpbuffer.html#GST-RTCP-PSFB-TYPE-FIR:CAPS"/>
+    <keyword type="constant" name="GST_RTCP_PSFB_TYPE_TSTR" link="gst-plugins-base-libs-gstrtcpbuffer.html#GST-RTCP-PSFB-TYPE-TSTR:CAPS"/>
+    <keyword type="constant" name="GST_RTCP_PSFB_TYPE_TSTN" link="gst-plugins-base-libs-gstrtcpbuffer.html#GST-RTCP-PSFB-TYPE-TSTN:CAPS"/>
+    <keyword type="constant" name="GST_RTCP_PSFB_TYPE_VBCN" link="gst-plugins-base-libs-gstrtcpbuffer.html#GST-RTCP-PSFB-TYPE-VBCN:CAPS"/>
+    <keyword type="constant" name="GST_RTP_PAYLOAD_PCMU" link="gst-plugins-base-libs-gstrtppayloads.html#GST-RTP-PAYLOAD-PCMU:CAPS"/>
+    <keyword type="constant" name="GST_RTP_PAYLOAD_1016" link="gst-plugins-base-libs-gstrtppayloads.html#GST-RTP-PAYLOAD-1016:CAPS"/>
+    <keyword type="constant" name="GST_RTP_PAYLOAD_G721" link="gst-plugins-base-libs-gstrtppayloads.html#GST-RTP-PAYLOAD-G721:CAPS"/>
+    <keyword type="constant" name="GST_RTP_PAYLOAD_GSM" link="gst-plugins-base-libs-gstrtppayloads.html#GST-RTP-PAYLOAD-GSM:CAPS"/>
+    <keyword type="constant" name="GST_RTP_PAYLOAD_G723" link="gst-plugins-base-libs-gstrtppayloads.html#GST-RTP-PAYLOAD-G723:CAPS"/>
+    <keyword type="constant" name="GST_RTP_PAYLOAD_DVI4_8000" link="gst-plugins-base-libs-gstrtppayloads.html#GST-RTP-PAYLOAD-DVI4-8000:CAPS"/>
+    <keyword type="constant" name="GST_RTP_PAYLOAD_DVI4_16000" link="gst-plugins-base-libs-gstrtppayloads.html#GST-RTP-PAYLOAD-DVI4-16000:CAPS"/>
+    <keyword type="constant" name="GST_RTP_PAYLOAD_LPC" link="gst-plugins-base-libs-gstrtppayloads.html#GST-RTP-PAYLOAD-LPC:CAPS"/>
+    <keyword type="constant" name="GST_RTP_PAYLOAD_PCMA" link="gst-plugins-base-libs-gstrtppayloads.html#GST-RTP-PAYLOAD-PCMA:CAPS"/>
+    <keyword type="constant" name="GST_RTP_PAYLOAD_G722" link="gst-plugins-base-libs-gstrtppayloads.html#GST-RTP-PAYLOAD-G722:CAPS"/>
+    <keyword type="constant" name="GST_RTP_PAYLOAD_L16_STEREO" link="gst-plugins-base-libs-gstrtppayloads.html#GST-RTP-PAYLOAD-L16-STEREO:CAPS"/>
+    <keyword type="constant" name="GST_RTP_PAYLOAD_L16_MONO" link="gst-plugins-base-libs-gstrtppayloads.html#GST-RTP-PAYLOAD-L16-MONO:CAPS"/>
+    <keyword type="constant" name="GST_RTP_PAYLOAD_QCELP" link="gst-plugins-base-libs-gstrtppayloads.html#GST-RTP-PAYLOAD-QCELP:CAPS"/>
+    <keyword type="constant" name="GST_RTP_PAYLOAD_CN" link="gst-plugins-base-libs-gstrtppayloads.html#GST-RTP-PAYLOAD-CN:CAPS"/>
+    <keyword type="constant" name="GST_RTP_PAYLOAD_MPA" link="gst-plugins-base-libs-gstrtppayloads.html#GST-RTP-PAYLOAD-MPA:CAPS"/>
+    <keyword type="constant" name="GST_RTP_PAYLOAD_G728" link="gst-plugins-base-libs-gstrtppayloads.html#GST-RTP-PAYLOAD-G728:CAPS"/>
+    <keyword type="constant" name="GST_RTP_PAYLOAD_DVI4_11025" link="gst-plugins-base-libs-gstrtppayloads.html#GST-RTP-PAYLOAD-DVI4-11025:CAPS"/>
+    <keyword type="constant" name="GST_RTP_PAYLOAD_DVI4_22050" link="gst-plugins-base-libs-gstrtppayloads.html#GST-RTP-PAYLOAD-DVI4-22050:CAPS"/>
+    <keyword type="constant" name="GST_RTP_PAYLOAD_G729" link="gst-plugins-base-libs-gstrtppayloads.html#GST-RTP-PAYLOAD-G729:CAPS"/>
+    <keyword type="constant" name="GST_RTP_PAYLOAD_CELLB" link="gst-plugins-base-libs-gstrtppayloads.html#GST-RTP-PAYLOAD-CELLB:CAPS"/>
+    <keyword type="constant" name="GST_RTP_PAYLOAD_JPEG" link="gst-plugins-base-libs-gstrtppayloads.html#GST-RTP-PAYLOAD-JPEG:CAPS"/>
+    <keyword type="constant" name="GST_RTP_PAYLOAD_NV" link="gst-plugins-base-libs-gstrtppayloads.html#GST-RTP-PAYLOAD-NV:CAPS"/>
+    <keyword type="constant" name="GST_RTP_PAYLOAD_H261" link="gst-plugins-base-libs-gstrtppayloads.html#GST-RTP-PAYLOAD-H261:CAPS"/>
+    <keyword type="constant" name="GST_RTP_PAYLOAD_MPV" link="gst-plugins-base-libs-gstrtppayloads.html#GST-RTP-PAYLOAD-MPV:CAPS"/>
+    <keyword type="constant" name="GST_RTP_PAYLOAD_MP2T" link="gst-plugins-base-libs-gstrtppayloads.html#GST-RTP-PAYLOAD-MP2T:CAPS"/>
+    <keyword type="constant" name="GST_RTP_PAYLOAD_H263" link="gst-plugins-base-libs-gstrtppayloads.html#GST-RTP-PAYLOAD-H263:CAPS"/>
+    <keyword type="constant" name="GST_RTSP_EV_READ" link="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-EV-READ:CAPS"/>
+    <keyword type="constant" name="GST_RTSP_EV_WRITE" link="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-EV-WRITE:CAPS"/>
+    <keyword type="constant" name="GST_RTSP_OK" link="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-OK:CAPS"/>
+    <keyword type="constant" name="GST_RTSP_ERROR" link="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-ERROR:CAPS"/>
+    <keyword type="constant" name="GST_RTSP_EINVAL" link="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-EINVAL:CAPS"/>
+    <keyword type="constant" name="GST_RTSP_EINTR" link="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-EINTR:CAPS"/>
+    <keyword type="constant" name="GST_RTSP_ENOMEM" link="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-ENOMEM:CAPS"/>
+    <keyword type="constant" name="GST_RTSP_ERESOLV" link="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-ERESOLV:CAPS"/>
+    <keyword type="constant" name="GST_RTSP_ENOTIMPL" link="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-ENOTIMPL:CAPS"/>
+    <keyword type="constant" name="GST_RTSP_ESYS" link="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-ESYS:CAPS"/>
+    <keyword type="constant" name="GST_RTSP_EPARSE" link="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-EPARSE:CAPS"/>
+    <keyword type="constant" name="GST_RTSP_EWSASTART" link="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-EWSASTART:CAPS"/>
+    <keyword type="constant" name="GST_RTSP_EWSAVERSION" link="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-EWSAVERSION:CAPS"/>
+    <keyword type="constant" name="GST_RTSP_EEOF" link="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-EEOF:CAPS"/>
+    <keyword type="constant" name="GST_RTSP_ENET" link="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-ENET:CAPS"/>
+    <keyword type="constant" name="GST_RTSP_ENOTIP" link="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-ENOTIP:CAPS"/>
+    <keyword type="constant" name="GST_RTSP_ETIMEOUT" link="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-ETIMEOUT:CAPS"/>
+    <keyword type="constant" name="GST_RTSP_ETGET" link="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-ETGET:CAPS"/>
+    <keyword type="constant" name="GST_RTSP_ETPOST" link="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-ETPOST:CAPS"/>
+    <keyword type="constant" name="GST_RTSP_ELAST" link="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-ELAST:CAPS"/>
+    <keyword type="constant" name="GST_RTSP_FAM_NONE" link="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-FAM-NONE:CAPS"/>
+    <keyword type="constant" name="GST_RTSP_FAM_INET" link="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-FAM-INET:CAPS"/>
+    <keyword type="constant" name="GST_RTSP_FAM_INET6" link="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-FAM-INET6:CAPS"/>
+    <keyword type="constant" name="GST_RTSP_STATE_INVALID" link="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-STATE-INVALID:CAPS"/>
+    <keyword type="constant" name="GST_RTSP_STATE_INIT" link="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-STATE-INIT:CAPS"/>
+    <keyword type="constant" name="GST_RTSP_STATE_READY" link="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-STATE-READY:CAPS"/>
+    <keyword type="constant" name="GST_RTSP_STATE_SEEKING" link="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-STATE-SEEKING:CAPS"/>
+    <keyword type="constant" name="GST_RTSP_STATE_PLAYING" link="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-STATE-PLAYING:CAPS"/>
+    <keyword type="constant" name="GST_RTSP_STATE_RECORDING" link="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-STATE-RECORDING:CAPS"/>
+    <keyword type="constant" name="GST_RTSP_VERSION_INVALID" link="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-VERSION-INVALID:CAPS"/>
+    <keyword type="constant" name="GST_RTSP_VERSION_1_0" link="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-VERSION-1-0:CAPS"/>
+    <keyword type="constant" name="GST_RTSP_VERSION_1_1" link="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-VERSION-1-1:CAPS"/>
+    <keyword type="constant" name="GST_RTSP_INVALID" link="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-INVALID:CAPS"/>
+    <keyword type="constant" name="GST_RTSP_DESCRIBE" link="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-DESCRIBE:CAPS"/>
+    <keyword type="constant" name="GST_RTSP_ANNOUNCE" link="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-ANNOUNCE:CAPS"/>
+    <keyword type="constant" name="GST_RTSP_GET_PARAMETER" link="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-GET-PARAMETER:CAPS"/>
+    <keyword type="constant" name="GST_RTSP_OPTIONS" link="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-OPTIONS:CAPS"/>
+    <keyword type="constant" name="GST_RTSP_PAUSE" link="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-PAUSE:CAPS"/>
+    <keyword type="constant" name="GST_RTSP_PLAY" link="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-PLAY:CAPS"/>
+    <keyword type="constant" name="GST_RTSP_RECORD" link="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-RECORD:CAPS"/>
+    <keyword type="constant" name="GST_RTSP_REDIRECT" link="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-REDIRECT:CAPS"/>
+    <keyword type="constant" name="GST_RTSP_SETUP" link="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-SETUP:CAPS"/>
+    <keyword type="constant" name="GST_RTSP_SET_PARAMETER" link="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-SET-PARAMETER:CAPS"/>
+    <keyword type="constant" name="GST_RTSP_TEARDOWN" link="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-TEARDOWN:CAPS"/>
+    <keyword type="constant" name="GST_RTSP_GET" link="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-GET:CAPS"/>
+    <keyword type="constant" name="GST_RTSP_POST" link="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-POST:CAPS"/>
+    <keyword type="constant" name="GST_RTSP_AUTH_NONE" link="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-AUTH-NONE:CAPS"/>
+    <keyword type="constant" name="GST_RTSP_AUTH_BASIC" link="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-AUTH-BASIC:CAPS"/>
+    <keyword type="constant" name="GST_RTSP_AUTH_DIGEST" link="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-AUTH-DIGEST:CAPS"/>
+    <keyword type="constant" name="GST_RTSP_HDR_INVALID" link="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-HDR-INVALID:CAPS"/>
+    <keyword type="constant" name="GST_RTSP_HDR_ACCEPT" link="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-HDR-ACCEPT:CAPS"/>
+    <keyword type="constant" name="GST_RTSP_HDR_ACCEPT_ENCODING" link="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-HDR-ACCEPT-ENCODING:CAPS"/>
+    <keyword type="constant" name="GST_RTSP_HDR_ACCEPT_LANGUAGE" link="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-HDR-ACCEPT-LANGUAGE:CAPS"/>
+    <keyword type="constant" name="GST_RTSP_HDR_ALLOW" link="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-HDR-ALLOW:CAPS"/>
+    <keyword type="constant" name="GST_RTSP_HDR_AUTHORIZATION" link="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-HDR-AUTHORIZATION:CAPS"/>
+    <keyword type="constant" name="GST_RTSP_HDR_BANDWIDTH" link="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-HDR-BANDWIDTH:CAPS"/>
+    <keyword type="constant" name="GST_RTSP_HDR_BLOCKSIZE" link="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-HDR-BLOCKSIZE:CAPS"/>
+    <keyword type="constant" name="GST_RTSP_HDR_CACHE_CONTROL" link="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-HDR-CACHE-CONTROL:CAPS"/>
+    <keyword type="constant" name="GST_RTSP_HDR_CONFERENCE" link="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-HDR-CONFERENCE:CAPS"/>
+    <keyword type="constant" name="GST_RTSP_HDR_CONNECTION" link="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-HDR-CONNECTION:CAPS"/>
+    <keyword type="constant" name="GST_RTSP_HDR_CONTENT_BASE" link="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-HDR-CONTENT-BASE:CAPS"/>
+    <keyword type="constant" name="GST_RTSP_HDR_CONTENT_ENCODING" link="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-HDR-CONTENT-ENCODING:CAPS"/>
+    <keyword type="constant" name="GST_RTSP_HDR_CONTENT_LANGUAGE" link="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-HDR-CONTENT-LANGUAGE:CAPS"/>
+    <keyword type="constant" name="GST_RTSP_HDR_CONTENT_LENGTH" link="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-HDR-CONTENT-LENGTH:CAPS"/>
+    <keyword type="constant" name="GST_RTSP_HDR_CONTENT_LOCATION" link="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-HDR-CONTENT-LOCATION:CAPS"/>
+    <keyword type="constant" name="GST_RTSP_HDR_CONTENT_TYPE" link="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-HDR-CONTENT-TYPE:CAPS"/>
+    <keyword type="constant" name="GST_RTSP_HDR_CSEQ" link="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-HDR-CSEQ:CAPS"/>
+    <keyword type="constant" name="GST_RTSP_HDR_DATE" link="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-HDR-DATE:CAPS"/>
+    <keyword type="constant" name="GST_RTSP_HDR_EXPIRES" link="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-HDR-EXPIRES:CAPS"/>
+    <keyword type="constant" name="GST_RTSP_HDR_FROM" link="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-HDR-FROM:CAPS"/>
+    <keyword type="constant" name="GST_RTSP_HDR_IF_MODIFIED_SINCE" link="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-HDR-IF-MODIFIED-SINCE:CAPS"/>
+    <keyword type="constant" name="GST_RTSP_HDR_LAST_MODIFIED" link="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-HDR-LAST-MODIFIED:CAPS"/>
+    <keyword type="constant" name="GST_RTSP_HDR_PROXY_AUTHENTICATE" link="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-HDR-PROXY-AUTHENTICATE:CAPS"/>
+    <keyword type="constant" name="GST_RTSP_HDR_PROXY_REQUIRE" link="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-HDR-PROXY-REQUIRE:CAPS"/>
+    <keyword type="constant" name="GST_RTSP_HDR_PUBLIC" link="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-HDR-PUBLIC:CAPS"/>
+    <keyword type="constant" name="GST_RTSP_HDR_RANGE" link="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-HDR-RANGE:CAPS"/>
+    <keyword type="constant" name="GST_RTSP_HDR_REFERER" link="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-HDR-REFERER:CAPS"/>
+    <keyword type="constant" name="GST_RTSP_HDR_REQUIRE" link="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-HDR-REQUIRE:CAPS"/>
+    <keyword type="constant" name="GST_RTSP_HDR_RETRY_AFTER" link="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-HDR-RETRY-AFTER:CAPS"/>
+    <keyword type="constant" name="GST_RTSP_HDR_RTP_INFO" link="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-HDR-RTP-INFO:CAPS"/>
+    <keyword type="constant" name="GST_RTSP_HDR_SCALE" link="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-HDR-SCALE:CAPS"/>
+    <keyword type="constant" name="GST_RTSP_HDR_SESSION" link="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-HDR-SESSION:CAPS"/>
+    <keyword type="constant" name="GST_RTSP_HDR_SERVER" link="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-HDR-SERVER:CAPS"/>
+    <keyword type="constant" name="GST_RTSP_HDR_SPEED" link="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-HDR-SPEED:CAPS"/>
+    <keyword type="constant" name="GST_RTSP_HDR_TRANSPORT" link="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-HDR-TRANSPORT:CAPS"/>
+    <keyword type="constant" name="GST_RTSP_HDR_UNSUPPORTED" link="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-HDR-UNSUPPORTED:CAPS"/>
+    <keyword type="constant" name="GST_RTSP_HDR_USER_AGENT" link="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-HDR-USER-AGENT:CAPS"/>
+    <keyword type="constant" name="GST_RTSP_HDR_VIA" link="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-HDR-VIA:CAPS"/>
+    <keyword type="constant" name="GST_RTSP_HDR_WWW_AUTHENTICATE" link="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-HDR-WWW-AUTHENTICATE:CAPS"/>
+    <keyword type="constant" name="GST_RTSP_HDR_CLIENT_CHALLENGE" link="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-HDR-CLIENT-CHALLENGE:CAPS"/>
+    <keyword type="constant" name="GST_RTSP_HDR_REAL_CHALLENGE1" link="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-HDR-REAL-CHALLENGE1:CAPS"/>
+    <keyword type="constant" name="GST_RTSP_HDR_REAL_CHALLENGE2" link="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-HDR-REAL-CHALLENGE2:CAPS"/>
+    <keyword type="constant" name="GST_RTSP_HDR_REAL_CHALLENGE3" link="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-HDR-REAL-CHALLENGE3:CAPS"/>
+    <keyword type="constant" name="GST_RTSP_HDR_SUBSCRIBE" link="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-HDR-SUBSCRIBE:CAPS"/>
+    <keyword type="constant" name="GST_RTSP_HDR_ALERT" link="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-HDR-ALERT:CAPS"/>
+    <keyword type="constant" name="GST_RTSP_HDR_CLIENT_ID" link="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-HDR-CLIENT-ID:CAPS"/>
+    <keyword type="constant" name="GST_RTSP_HDR_COMPANY_ID" link="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-HDR-COMPANY-ID:CAPS"/>
+    <keyword type="constant" name="GST_RTSP_HDR_GUID" link="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-HDR-GUID:CAPS"/>
+    <keyword type="constant" name="GST_RTSP_HDR_REGION_DATA" link="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-HDR-REGION-DATA:CAPS"/>
+    <keyword type="constant" name="GST_RTSP_HDR_MAX_ASM_WIDTH" link="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-HDR-MAX-ASM-WIDTH:CAPS"/>
+    <keyword type="constant" name="GST_RTSP_HDR_LANGUAGE" link="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-HDR-LANGUAGE:CAPS"/>
+    <keyword type="constant" name="GST_RTSP_HDR_PLAYER_START_TIME" link="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-HDR-PLAYER-START-TIME:CAPS"/>
+    <keyword type="constant" name="GST_RTSP_HDR_LOCATION" link="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-HDR-LOCATION:CAPS"/>
+    <keyword type="constant" name="GST_RTSP_HDR_ETAG" link="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-HDR-ETAG:CAPS"/>
+    <keyword type="constant" name="GST_RTSP_HDR_IF_MATCH" link="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-HDR-IF-MATCH:CAPS"/>
+    <keyword type="constant" name="GST_RTSP_HDR_ACCEPT_CHARSET" link="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-HDR-ACCEPT-CHARSET:CAPS"/>
+    <keyword type="constant" name="GST_RTSP_HDR_SUPPORTED" link="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-HDR-SUPPORTED:CAPS"/>
+    <keyword type="constant" name="GST_RTSP_HDR_VARY" link="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-HDR-VARY:CAPS"/>
+    <keyword type="constant" name="GST_RTSP_HDR_X_ACCELERATE_STREAMING" link="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-HDR-X-ACCELERATE-STREAMING:CAPS"/>
+    <keyword type="constant" name="GST_RTSP_HDR_X_ACCEPT_AUTHENT" link="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-HDR-X-ACCEPT-AUTHENT:CAPS"/>
+    <keyword type="constant" name="GST_RTSP_HDR_X_ACCEPT_PROXY_AUTHENT" link="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-HDR-X-ACCEPT-PROXY-AUTHENT:CAPS"/>
+    <keyword type="constant" name="GST_RTSP_HDR_X_BROADCAST_ID" link="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-HDR-X-BROADCAST-ID:CAPS"/>
+    <keyword type="constant" name="GST_RTSP_HDR_X_BURST_STREAMING" link="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-HDR-X-BURST-STREAMING:CAPS"/>
+    <keyword type="constant" name="GST_RTSP_HDR_X_NOTICE" link="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-HDR-X-NOTICE:CAPS"/>
+    <keyword type="constant" name="GST_RTSP_HDR_X_PLAYER_LAG_TIME" link="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-HDR-X-PLAYER-LAG-TIME:CAPS"/>
+    <keyword type="constant" name="GST_RTSP_HDR_X_PLAYLIST" link="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-HDR-X-PLAYLIST:CAPS"/>
+    <keyword type="constant" name="GST_RTSP_HDR_X_PLAYLIST_CHANGE_NOTICE" link="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-HDR-X-PLAYLIST-CHANGE-NOTICE:CAPS"/>
+    <keyword type="constant" name="GST_RTSP_HDR_X_PLAYLIST_GEN_ID" link="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-HDR-X-PLAYLIST-GEN-ID:CAPS"/>
+    <keyword type="constant" name="GST_RTSP_HDR_X_PLAYLIST_SEEK_ID" link="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-HDR-X-PLAYLIST-SEEK-ID:CAPS"/>
+    <keyword type="constant" name="GST_RTSP_HDR_X_PROXY_CLIENT_AGENT" link="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-HDR-X-PROXY-CLIENT-AGENT:CAPS"/>
+    <keyword type="constant" name="GST_RTSP_HDR_X_PROXY_CLIENT_VERB" link="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-HDR-X-PROXY-CLIENT-VERB:CAPS"/>
+    <keyword type="constant" name="GST_RTSP_HDR_X_RECEDING_PLAYLISTCHANGE" link="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-HDR-X-RECEDING-PLAYLISTCHANGE:CAPS"/>
+    <keyword type="constant" name="GST_RTSP_HDR_X_RTP_INFO" link="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-HDR-X-RTP-INFO:CAPS"/>
+    <keyword type="constant" name="GST_RTSP_HDR_X_STARTUPPROFILE" link="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-HDR-X-STARTUPPROFILE:CAPS"/>
+    <keyword type="constant" name="GST_RTSP_HDR_TIMESTAMP" link="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-HDR-TIMESTAMP:CAPS"/>
+    <keyword type="constant" name="GST_RTSP_HDR_AUTHENTICATION_INFO" link="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-HDR-AUTHENTICATION-INFO:CAPS"/>
+    <keyword type="constant" name="GST_RTSP_HDR_HOST" link="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-HDR-HOST:CAPS"/>
+    <keyword type="constant" name="GST_RTSP_HDR_PRAGMA" link="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-HDR-PRAGMA:CAPS"/>
+    <keyword type="constant" name="GST_RTSP_HDR_X_SERVER_IP_ADDRESS" link="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-HDR-X-SERVER-IP-ADDRESS:CAPS"/>
+    <keyword type="constant" name="GST_RTSP_HDR_X_SESSIONCOOKIE" link="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-HDR-X-SESSIONCOOKIE:CAPS"/>
+    <keyword type="constant" name="GST_RTSP_HDR_RTCP_INTERVAL" link="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-HDR-RTCP-INTERVAL:CAPS"/>
+    <keyword type="constant" name="GST_RTSP_HDR_KEYMGMT" link="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-HDR-KEYMGMT:CAPS"/>
+    <keyword type="constant" name="GST_RTSP_HDR_LAST" link="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-HDR-LAST:CAPS"/>
+    <keyword type="constant" name="GST_RTSP_STS_INVALID" link="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-STS-INVALID:CAPS"/>
+    <keyword type="constant" name="GST_RTSP_STS_CONTINUE" link="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-STS-CONTINUE:CAPS"/>
+    <keyword type="constant" name="GST_RTSP_STS_OK" link="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-STS-OK:CAPS"/>
+    <keyword type="constant" name="GST_RTSP_STS_CREATED" link="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-STS-CREATED:CAPS"/>
+    <keyword type="constant" name="GST_RTSP_STS_LOW_ON_STORAGE" link="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-STS-LOW-ON-STORAGE:CAPS"/>
+    <keyword type="constant" name="GST_RTSP_STS_MULTIPLE_CHOICES" link="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-STS-MULTIPLE-CHOICES:CAPS"/>
+    <keyword type="constant" name="GST_RTSP_STS_MOVED_PERMANENTLY" link="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-STS-MOVED-PERMANENTLY:CAPS"/>
+    <keyword type="constant" name="GST_RTSP_STS_MOVE_TEMPORARILY" link="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-STS-MOVE-TEMPORARILY:CAPS"/>
+    <keyword type="constant" name="GST_RTSP_STS_SEE_OTHER" link="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-STS-SEE-OTHER:CAPS"/>
+    <keyword type="constant" name="GST_RTSP_STS_NOT_MODIFIED" link="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-STS-NOT-MODIFIED:CAPS"/>
+    <keyword type="constant" name="GST_RTSP_STS_USE_PROXY" link="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-STS-USE-PROXY:CAPS"/>
+    <keyword type="constant" name="GST_RTSP_STS_BAD_REQUEST" link="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-STS-BAD-REQUEST:CAPS"/>
+    <keyword type="constant" name="GST_RTSP_STS_UNAUTHORIZED" link="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-STS-UNAUTHORIZED:CAPS"/>
+    <keyword type="constant" name="GST_RTSP_STS_PAYMENT_REQUIRED" link="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-STS-PAYMENT-REQUIRED:CAPS"/>
+    <keyword type="constant" name="GST_RTSP_STS_FORBIDDEN" link="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-STS-FORBIDDEN:CAPS"/>
+    <keyword type="constant" name="GST_RTSP_STS_NOT_FOUND" link="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-STS-NOT-FOUND:CAPS"/>
+    <keyword type="constant" name="GST_RTSP_STS_METHOD_NOT_ALLOWED" link="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-STS-METHOD-NOT-ALLOWED:CAPS"/>
+    <keyword type="constant" name="GST_RTSP_STS_NOT_ACCEPTABLE" link="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-STS-NOT-ACCEPTABLE:CAPS"/>
+    <keyword type="constant" name="GST_RTSP_STS_PROXY_AUTH_REQUIRED" link="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-STS-PROXY-AUTH-REQUIRED:CAPS"/>
+    <keyword type="constant" name="GST_RTSP_STS_REQUEST_TIMEOUT" link="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-STS-REQUEST-TIMEOUT:CAPS"/>
+    <keyword type="constant" name="GST_RTSP_STS_GONE" link="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-STS-GONE:CAPS"/>
+    <keyword type="constant" name="GST_RTSP_STS_LENGTH_REQUIRED" link="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-STS-LENGTH-REQUIRED:CAPS"/>
+    <keyword type="constant" name="GST_RTSP_STS_PRECONDITION_FAILED" link="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-STS-PRECONDITION-FAILED:CAPS"/>
+    <keyword type="constant" name="GST_RTSP_STS_REQUEST_ENTITY_TOO_LARGE" link="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-STS-REQUEST-ENTITY-TOO-LARGE:CAPS"/>
+    <keyword type="constant" name="GST_RTSP_STS_REQUEST_URI_TOO_LARGE" link="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-STS-REQUEST-URI-TOO-LARGE:CAPS"/>
+    <keyword type="constant" name="GST_RTSP_STS_UNSUPPORTED_MEDIA_TYPE" link="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-STS-UNSUPPORTED-MEDIA-TYPE:CAPS"/>
+    <keyword type="constant" name="GST_RTSP_STS_PARAMETER_NOT_UNDERSTOOD" link="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-STS-PARAMETER-NOT-UNDERSTOOD:CAPS"/>
+    <keyword type="constant" name="GST_RTSP_STS_CONFERENCE_NOT_FOUND" link="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-STS-CONFERENCE-NOT-FOUND:CAPS"/>
+    <keyword type="constant" name="GST_RTSP_STS_NOT_ENOUGH_BANDWIDTH" link="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-STS-NOT-ENOUGH-BANDWIDTH:CAPS"/>
+    <keyword type="constant" name="GST_RTSP_STS_SESSION_NOT_FOUND" link="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-STS-SESSION-NOT-FOUND:CAPS"/>
+    <keyword type="constant" name="GST_RTSP_STS_METHOD_NOT_VALID_IN_THIS_STATE" link="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-STS-METHOD-NOT-VALID-IN-THIS-STATE:CAPS"/>
+    <keyword type="constant" name="GST_RTSP_STS_HEADER_FIELD_NOT_VALID_FOR_RESOURCE" link="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-STS-HEADER-FIELD-NOT-VALID-FOR-RESOURCE:CAPS"/>
+    <keyword type="constant" name="GST_RTSP_STS_INVALID_RANGE" link="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-STS-INVALID-RANGE:CAPS"/>
+    <keyword type="constant" name="GST_RTSP_STS_PARAMETER_IS_READONLY" link="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-STS-PARAMETER-IS-READONLY:CAPS"/>
+    <keyword type="constant" name="GST_RTSP_STS_AGGREGATE_OPERATION_NOT_ALLOWED" link="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-STS-AGGREGATE-OPERATION-NOT-ALLOWED:CAPS"/>
+    <keyword type="constant" name="GST_RTSP_STS_ONLY_AGGREGATE_OPERATION_ALLOWED" link="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-STS-ONLY-AGGREGATE-OPERATION-ALLOWED:CAPS"/>
+    <keyword type="constant" name="GST_RTSP_STS_UNSUPPORTED_TRANSPORT" link="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-STS-UNSUPPORTED-TRANSPORT:CAPS"/>
+    <keyword type="constant" name="GST_RTSP_STS_DESTINATION_UNREACHABLE" link="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-STS-DESTINATION-UNREACHABLE:CAPS"/>
+    <keyword type="constant" name="GST_RTSP_STS_KEY_MANAGEMENT_FAILURE" link="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-STS-KEY-MANAGEMENT-FAILURE:CAPS"/>
+    <keyword type="constant" name="GST_RTSP_STS_INTERNAL_SERVER_ERROR" link="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-STS-INTERNAL-SERVER-ERROR:CAPS"/>
+    <keyword type="constant" name="GST_RTSP_STS_NOT_IMPLEMENTED" link="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-STS-NOT-IMPLEMENTED:CAPS"/>
+    <keyword type="constant" name="GST_RTSP_STS_BAD_GATEWAY" link="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-STS-BAD-GATEWAY:CAPS"/>
+    <keyword type="constant" name="GST_RTSP_STS_SERVICE_UNAVAILABLE" link="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-STS-SERVICE-UNAVAILABLE:CAPS"/>
+    <keyword type="constant" name="GST_RTSP_STS_GATEWAY_TIMEOUT" link="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-STS-GATEWAY-TIMEOUT:CAPS"/>
+    <keyword type="constant" name="GST_RTSP_STS_RTSP_VERSION_NOT_SUPPORTED" link="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-STS-RTSP-VERSION-NOT-SUPPORTED:CAPS"/>
+    <keyword type="constant" name="GST_RTSP_STS_OPTION_NOT_SUPPORTED" link="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-STS-OPTION-NOT-SUPPORTED:CAPS"/>
+    <keyword type="constant" name="GST_RTSP_MESSAGE_INVALID" link="gst-plugins-base-libs-gstrtspmessage.html#GST-RTSP-MESSAGE-INVALID:CAPS"/>
+    <keyword type="constant" name="GST_RTSP_MESSAGE_REQUEST" link="gst-plugins-base-libs-gstrtspmessage.html#GST-RTSP-MESSAGE-REQUEST:CAPS"/>
+    <keyword type="constant" name="GST_RTSP_MESSAGE_RESPONSE" link="gst-plugins-base-libs-gstrtspmessage.html#GST-RTSP-MESSAGE-RESPONSE:CAPS"/>
+    <keyword type="constant" name="GST_RTSP_MESSAGE_HTTP_REQUEST" link="gst-plugins-base-libs-gstrtspmessage.html#GST-RTSP-MESSAGE-HTTP-REQUEST:CAPS"/>
+    <keyword type="constant" name="GST_RTSP_MESSAGE_HTTP_RESPONSE" link="gst-plugins-base-libs-gstrtspmessage.html#GST-RTSP-MESSAGE-HTTP-RESPONSE:CAPS"/>
+    <keyword type="constant" name="GST_RTSP_MESSAGE_DATA" link="gst-plugins-base-libs-gstrtspmessage.html#GST-RTSP-MESSAGE-DATA:CAPS"/>
+    <keyword type="constant" name="GST_RTSP_RANGE_SMPTE" link="gst-plugins-base-libs-gstrtsprange.html#GST-RTSP-RANGE-SMPTE:CAPS"/>
+    <keyword type="constant" name="GST_RTSP_RANGE_SMPTE_30_DROP" link="gst-plugins-base-libs-gstrtsprange.html#GST-RTSP-RANGE-SMPTE-30-DROP:CAPS"/>
+    <keyword type="constant" name="GST_RTSP_RANGE_SMPTE_25" link="gst-plugins-base-libs-gstrtsprange.html#GST-RTSP-RANGE-SMPTE-25:CAPS"/>
+    <keyword type="constant" name="GST_RTSP_RANGE_NPT" link="gst-plugins-base-libs-gstrtsprange.html#GST-RTSP-RANGE-NPT:CAPS"/>
+    <keyword type="constant" name="GST_RTSP_RANGE_CLOCK" link="gst-plugins-base-libs-gstrtsprange.html#GST-RTSP-RANGE-CLOCK:CAPS"/>
+    <keyword type="constant" name="GST_RTSP_TIME_SECONDS" link="gst-plugins-base-libs-gstrtsprange.html#GST-RTSP-TIME-SECONDS:CAPS"/>
+    <keyword type="constant" name="GST_RTSP_TIME_NOW" link="gst-plugins-base-libs-gstrtsprange.html#GST-RTSP-TIME-NOW:CAPS"/>
+    <keyword type="constant" name="GST_RTSP_TIME_END" link="gst-plugins-base-libs-gstrtsprange.html#GST-RTSP-TIME-END:CAPS"/>
+    <keyword type="constant" name="GST_RTSP_TIME_FRAMES" link="gst-plugins-base-libs-gstrtsprange.html#GST-RTSP-TIME-FRAMES:CAPS"/>
+    <keyword type="constant" name="GST_RTSP_TIME_UTC" link="gst-plugins-base-libs-gstrtsprange.html#GST-RTSP-TIME-UTC:CAPS"/>
+    <keyword type="constant" name="GST_RTSP_TRANS_UNKNOWN" link="gst-plugins-base-libs-gstrtsptransport.html#GST-RTSP-TRANS-UNKNOWN:CAPS"/>
+    <keyword type="constant" name="GST_RTSP_TRANS_RTP" link="gst-plugins-base-libs-gstrtsptransport.html#GST-RTSP-TRANS-RTP:CAPS"/>
+    <keyword type="constant" name="GST_RTSP_TRANS_RDT" link="gst-plugins-base-libs-gstrtsptransport.html#GST-RTSP-TRANS-RDT:CAPS"/>
+    <keyword type="constant" name="GST_RTSP_PROFILE_UNKNOWN" link="gst-plugins-base-libs-gstrtsptransport.html#GST-RTSP-PROFILE-UNKNOWN:CAPS"/>
+    <keyword type="constant" name="GST_RTSP_PROFILE_AVP" link="gst-plugins-base-libs-gstrtsptransport.html#GST-RTSP-PROFILE-AVP:CAPS"/>
+    <keyword type="constant" name="GST_RTSP_PROFILE_SAVP" link="gst-plugins-base-libs-gstrtsptransport.html#GST-RTSP-PROFILE-SAVP:CAPS"/>
+    <keyword type="constant" name="GST_RTSP_PROFILE_AVPF" link="gst-plugins-base-libs-gstrtsptransport.html#GST-RTSP-PROFILE-AVPF:CAPS"/>
+    <keyword type="constant" name="GST_RTSP_PROFILE_SAVPF" link="gst-plugins-base-libs-gstrtsptransport.html#GST-RTSP-PROFILE-SAVPF:CAPS"/>
+    <keyword type="constant" name="GST_RTSP_LOWER_TRANS_UNKNOWN" link="gst-plugins-base-libs-gstrtsptransport.html#GST-RTSP-LOWER-TRANS-UNKNOWN:CAPS"/>
+    <keyword type="constant" name="GST_RTSP_LOWER_TRANS_UDP" link="gst-plugins-base-libs-gstrtsptransport.html#GST-RTSP-LOWER-TRANS-UDP:CAPS"/>
+    <keyword type="constant" name="GST_RTSP_LOWER_TRANS_UDP_MCAST" link="gst-plugins-base-libs-gstrtsptransport.html#GST-RTSP-LOWER-TRANS-UDP-MCAST:CAPS"/>
+    <keyword type="constant" name="GST_RTSP_LOWER_TRANS_TCP" link="gst-plugins-base-libs-gstrtsptransport.html#GST-RTSP-LOWER-TRANS-TCP:CAPS"/>
+    <keyword type="constant" name="GST_RTSP_LOWER_TRANS_HTTP" link="gst-plugins-base-libs-gstrtsptransport.html#GST-RTSP-LOWER-TRANS-HTTP:CAPS"/>
+    <keyword type="constant" name="GST_RTSP_LOWER_TRANS_TLS" link="gst-plugins-base-libs-gstrtsptransport.html#GST-RTSP-LOWER-TRANS-TLS:CAPS"/>
+    <keyword type="constant" name="GST_SDP_OK" link="gst-plugins-base-libs-gstsdpmessage.html#GST-SDP-OK:CAPS"/>
+    <keyword type="constant" name="GST_SDP_EINVAL" link="gst-plugins-base-libs-gstsdpmessage.html#GST-SDP-EINVAL:CAPS"/>
+    <keyword type="constant" name="GST_MIKEY_TYPE_INVALID" link="gst-plugins-base-libs-gstmikey.html#GST-MIKEY-TYPE-INVALID:CAPS"/>
+    <keyword type="constant" name="GST_MIKEY_TYPE_PSK_INIT" link="gst-plugins-base-libs-gstmikey.html#GST-MIKEY-TYPE-PSK-INIT:CAPS"/>
+    <keyword type="constant" name="GST_MIKEY_TYPE_PSK_VERIFY" link="gst-plugins-base-libs-gstmikey.html#GST-MIKEY-TYPE-PSK-VERIFY:CAPS"/>
+    <keyword type="constant" name="GST_MIKEY_TYPE_PK_INIT" link="gst-plugins-base-libs-gstmikey.html#GST-MIKEY-TYPE-PK-INIT:CAPS"/>
+    <keyword type="constant" name="GST_MIKEY_TYPE_PK_VERIFY" link="gst-plugins-base-libs-gstmikey.html#GST-MIKEY-TYPE-PK-VERIFY:CAPS"/>
+    <keyword type="constant" name="GST_MIKEY_TYPE_DH_INIT" link="gst-plugins-base-libs-gstmikey.html#GST-MIKEY-TYPE-DH-INIT:CAPS"/>
+    <keyword type="constant" name="GST_MIKEY_TYPE_DH_RESP" link="gst-plugins-base-libs-gstmikey.html#GST-MIKEY-TYPE-DH-RESP:CAPS"/>
+    <keyword type="constant" name="GST_MIKEY_TYPE_ERROR" link="gst-plugins-base-libs-gstmikey.html#GST-MIKEY-TYPE-ERROR:CAPS"/>
+    <keyword type="constant" name="GST_MIKEY_PRF_MIKEY_1" link="gst-plugins-base-libs-gstmikey.html#GST-MIKEY-PRF-MIKEY-1:CAPS"/>
+    <keyword type="constant" name="GST_MIKEY_MAP_TYPE_SRTP" link="gst-plugins-base-libs-gstmikey.html#GST-MIKEY-MAP-TYPE-SRTP:CAPS"/>
+    <keyword type="constant" name="GST_MIKEY_PT_LAST" link="gst-plugins-base-libs-gstmikey.html#GST-MIKEY-PT-LAST:CAPS"/>
+    <keyword type="constant" name="GST_MIKEY_PT_KEMAC" link="gst-plugins-base-libs-gstmikey.html#GST-MIKEY-PT-KEMAC:CAPS"/>
+    <keyword type="constant" name="GST_MIKEY_PT_PKE" link="gst-plugins-base-libs-gstmikey.html#GST-MIKEY-PT-PKE:CAPS"/>
+    <keyword type="constant" name="GST_MIKEY_PT_DH" link="gst-plugins-base-libs-gstmikey.html#GST-MIKEY-PT-DH:CAPS"/>
+    <keyword type="constant" name="GST_MIKEY_PT_SIGN" link="gst-plugins-base-libs-gstmikey.html#GST-MIKEY-PT-SIGN:CAPS"/>
+    <keyword type="constant" name="GST_MIKEY_PT_T" link="gst-plugins-base-libs-gstmikey.html#GST-MIKEY-PT-T:CAPS"/>
+    <keyword type="constant" name="GST_MIKEY_PT_ID" link="gst-plugins-base-libs-gstmikey.html#GST-MIKEY-PT-ID:CAPS"/>
+    <keyword type="constant" name="GST_MIKEY_PT_CERT" link="gst-plugins-base-libs-gstmikey.html#GST-MIKEY-PT-CERT:CAPS"/>
+    <keyword type="constant" name="GST_MIKEY_PT_CHASH" link="gst-plugins-base-libs-gstmikey.html#GST-MIKEY-PT-CHASH:CAPS"/>
+    <keyword type="constant" name="GST_MIKEY_PT_V" link="gst-plugins-base-libs-gstmikey.html#GST-MIKEY-PT-V:CAPS"/>
+    <keyword type="constant" name="GST_MIKEY_PT_SP" link="gst-plugins-base-libs-gstmikey.html#GST-MIKEY-PT-SP:CAPS"/>
+    <keyword type="constant" name="GST_MIKEY_PT_RAND" link="gst-plugins-base-libs-gstmikey.html#GST-MIKEY-PT-RAND:CAPS"/>
+    <keyword type="constant" name="GST_MIKEY_PT_ERR" link="gst-plugins-base-libs-gstmikey.html#GST-MIKEY-PT-ERR:CAPS"/>
+    <keyword type="constant" name="GST_MIKEY_PT_KEY_DATA" link="gst-plugins-base-libs-gstmikey.html#GST-MIKEY-PT-KEY-DATA:CAPS"/>
+    <keyword type="constant" name="GST_MIKEY_PT_GEN_EXT" link="gst-plugins-base-libs-gstmikey.html#GST-MIKEY-PT-GEN-EXT:CAPS"/>
+    <keyword type="constant" name="GST_MIKEY_ENC_NULL" link="gst-plugins-base-libs-gstmikey.html#GST-MIKEY-ENC-NULL:CAPS"/>
+    <keyword type="constant" name="GST_MIKEY_ENC_AES_CM_128" link="gst-plugins-base-libs-gstmikey.html#GST-MIKEY-ENC-AES-CM-128:CAPS"/>
+    <keyword type="constant" name="GST_MIKEY_ENC_AES_KW_128" link="gst-plugins-base-libs-gstmikey.html#GST-MIKEY-ENC-AES-KW-128:CAPS"/>
+    <keyword type="constant" name="GST_MIKEY_MAC_NULL" link="gst-plugins-base-libs-gstmikey.html#GST-MIKEY-MAC-NULL:CAPS"/>
+    <keyword type="constant" name="GST_MIKEY_MAC_HMAC_SHA_1_160" link="gst-plugins-base-libs-gstmikey.html#GST-MIKEY-MAC-HMAC-SHA-1-160:CAPS"/>
+    <keyword type="constant" name="GST_MIKEY_CACHE_NONE" link="gst-plugins-base-libs-gstmikey.html#GST-MIKEY-CACHE-NONE:CAPS"/>
+    <keyword type="constant" name="GST_MIKEY_CACHE_ALWAYS" link="gst-plugins-base-libs-gstmikey.html#GST-MIKEY-CACHE-ALWAYS:CAPS"/>
+    <keyword type="constant" name="GST_MIKEY_CACHE_FOR_CSB" link="gst-plugins-base-libs-gstmikey.html#GST-MIKEY-CACHE-FOR-CSB:CAPS"/>
+    <keyword type="constant" name="GST_MIKEY_TS_TYPE_NTP_UTC" link="gst-plugins-base-libs-gstmikey.html#GST-MIKEY-TS-TYPE-NTP-UTC:CAPS"/>
+    <keyword type="constant" name="GST_MIKEY_TS_TYPE_NTP" link="gst-plugins-base-libs-gstmikey.html#GST-MIKEY-TS-TYPE-NTP:CAPS"/>
+    <keyword type="constant" name="GST_MIKEY_TS_TYPE_COUNTER" link="gst-plugins-base-libs-gstmikey.html#GST-MIKEY-TS-TYPE-COUNTER:CAPS"/>
+    <keyword type="constant" name="GST_MIKEY_SEC_PROTO_SRTP" link="gst-plugins-base-libs-gstmikey.html#GST-MIKEY-SEC-PROTO-SRTP:CAPS"/>
+    <keyword type="constant" name="GST_MIKEY_SP_SRTP_ENC_ALG" link="gst-plugins-base-libs-gstmikey.html#GST-MIKEY-SP-SRTP-ENC-ALG:CAPS"/>
+    <keyword type="constant" name="GST_MIKEY_SP_SRTP_ENC_KEY_LEN" link="gst-plugins-base-libs-gstmikey.html#GST-MIKEY-SP-SRTP-ENC-KEY-LEN:CAPS"/>
+    <keyword type="constant" name="GST_MIKEY_SP_SRTP_AUTH_ALG" link="gst-plugins-base-libs-gstmikey.html#GST-MIKEY-SP-SRTP-AUTH-ALG:CAPS"/>
+    <keyword type="constant" name="GST_MIKEY_SP_SRTP_AUTH_KEY_LEN" link="gst-plugins-base-libs-gstmikey.html#GST-MIKEY-SP-SRTP-AUTH-KEY-LEN:CAPS"/>
+    <keyword type="constant" name="GST_MIKEY_SP_SRTP_SALT_KEY_LEN" link="gst-plugins-base-libs-gstmikey.html#GST-MIKEY-SP-SRTP-SALT-KEY-LEN:CAPS"/>
+    <keyword type="constant" name="GST_MIKEY_SP_SRTP_PRF" link="gst-plugins-base-libs-gstmikey.html#GST-MIKEY-SP-SRTP-PRF:CAPS"/>
+    <keyword type="constant" name="GST_MIKEY_SP_SRTP_KEY_DERIV_RATE" link="gst-plugins-base-libs-gstmikey.html#GST-MIKEY-SP-SRTP-KEY-DERIV-RATE:CAPS"/>
+    <keyword type="constant" name="GST_MIKEY_SP_SRTP_SRTP_ENC" link="gst-plugins-base-libs-gstmikey.html#GST-MIKEY-SP-SRTP-SRTP-ENC:CAPS"/>
+    <keyword type="constant" name="GST_MIKEY_SP_SRTP_SRTCP_ENC" link="gst-plugins-base-libs-gstmikey.html#GST-MIKEY-SP-SRTP-SRTCP-ENC:CAPS"/>
+    <keyword type="constant" name="GST_MIKEY_SP_SRTP_FEC_ORDER" link="gst-plugins-base-libs-gstmikey.html#GST-MIKEY-SP-SRTP-FEC-ORDER:CAPS"/>
+    <keyword type="constant" name="GST_MIKEY_SP_SRTP_SRTP_AUTH" link="gst-plugins-base-libs-gstmikey.html#GST-MIKEY-SP-SRTP-SRTP-AUTH:CAPS"/>
+    <keyword type="constant" name="GST_MIKEY_SP_SRTP_AUTH_TAG_LEN" link="gst-plugins-base-libs-gstmikey.html#GST-MIKEY-SP-SRTP-AUTH-TAG-LEN:CAPS"/>
+    <keyword type="constant" name="GST_MIKEY_SP_SRTP_SRTP_PREFIX_LEN" link="gst-plugins-base-libs-gstmikey.html#GST-MIKEY-SP-SRTP-SRTP-PREFIX-LEN:CAPS"/>
+    <keyword type="constant" name="GST_TAG_IMAGE_TYPE_NONE" link="gst-plugins-base-libs-gsttag.html#GST-TAG-IMAGE-TYPE-NONE:CAPS"/>
+    <keyword type="constant" name="GST_TAG_IMAGE_TYPE_UNDEFINED" link="gst-plugins-base-libs-gsttag.html#GST-TAG-IMAGE-TYPE-UNDEFINED:CAPS"/>
+    <keyword type="constant" name="GST_TAG_IMAGE_TYPE_FRONT_COVER" link="gst-plugins-base-libs-gsttag.html#GST-TAG-IMAGE-TYPE-FRONT-COVER:CAPS"/>
+    <keyword type="constant" name="GST_TAG_IMAGE_TYPE_BACK_COVER" link="gst-plugins-base-libs-gsttag.html#GST-TAG-IMAGE-TYPE-BACK-COVER:CAPS"/>
+    <keyword type="constant" name="GST_TAG_IMAGE_TYPE_LEAFLET_PAGE" link="gst-plugins-base-libs-gsttag.html#GST-TAG-IMAGE-TYPE-LEAFLET-PAGE:CAPS"/>
+    <keyword type="constant" name="GST_TAG_IMAGE_TYPE_MEDIUM" link="gst-plugins-base-libs-gsttag.html#GST-TAG-IMAGE-TYPE-MEDIUM:CAPS"/>
+    <keyword type="constant" name="GST_TAG_IMAGE_TYPE_LEAD_ARTIST" link="gst-plugins-base-libs-gsttag.html#GST-TAG-IMAGE-TYPE-LEAD-ARTIST:CAPS"/>
+    <keyword type="constant" name="GST_TAG_IMAGE_TYPE_ARTIST" link="gst-plugins-base-libs-gsttag.html#GST-TAG-IMAGE-TYPE-ARTIST:CAPS"/>
+    <keyword type="constant" name="GST_TAG_IMAGE_TYPE_CONDUCTOR" link="gst-plugins-base-libs-gsttag.html#GST-TAG-IMAGE-TYPE-CONDUCTOR:CAPS"/>
+    <keyword type="constant" name="GST_TAG_IMAGE_TYPE_BAND_ORCHESTRA" link="gst-plugins-base-libs-gsttag.html#GST-TAG-IMAGE-TYPE-BAND-ORCHESTRA:CAPS"/>
+    <keyword type="constant" name="GST_TAG_IMAGE_TYPE_COMPOSER" link="gst-plugins-base-libs-gsttag.html#GST-TAG-IMAGE-TYPE-COMPOSER:CAPS"/>
+    <keyword type="constant" name="GST_TAG_IMAGE_TYPE_LYRICIST" link="gst-plugins-base-libs-gsttag.html#GST-TAG-IMAGE-TYPE-LYRICIST:CAPS"/>
+    <keyword type="constant" name="GST_TAG_IMAGE_TYPE_RECORDING_LOCATION" link="gst-plugins-base-libs-gsttag.html#GST-TAG-IMAGE-TYPE-RECORDING-LOCATION:CAPS"/>
+    <keyword type="constant" name="GST_TAG_IMAGE_TYPE_DURING_RECORDING" link="gst-plugins-base-libs-gsttag.html#GST-TAG-IMAGE-TYPE-DURING-RECORDING:CAPS"/>
+    <keyword type="constant" name="GST_TAG_IMAGE_TYPE_DURING_PERFORMANCE" link="gst-plugins-base-libs-gsttag.html#GST-TAG-IMAGE-TYPE-DURING-PERFORMANCE:CAPS"/>
+    <keyword type="constant" name="GST_TAG_IMAGE_TYPE_VIDEO_CAPTURE" link="gst-plugins-base-libs-gsttag.html#GST-TAG-IMAGE-TYPE-VIDEO-CAPTURE:CAPS"/>
+    <keyword type="constant" name="GST_TAG_IMAGE_TYPE_FISH" link="gst-plugins-base-libs-gsttag.html#GST-TAG-IMAGE-TYPE-FISH:CAPS"/>
+    <keyword type="constant" name="GST_TAG_IMAGE_TYPE_ILLUSTRATION" link="gst-plugins-base-libs-gsttag.html#GST-TAG-IMAGE-TYPE-ILLUSTRATION:CAPS"/>
+    <keyword type="constant" name="GST_TAG_IMAGE_TYPE_BAND_ARTIST_LOGO" link="gst-plugins-base-libs-gsttag.html#GST-TAG-IMAGE-TYPE-BAND-ARTIST-LOGO:CAPS"/>
+    <keyword type="constant" name="GST_TAG_IMAGE_TYPE_PUBLISHER_STUDIO_LOGO" link="gst-plugins-base-libs-gsttag.html#GST-TAG-IMAGE-TYPE-PUBLISHER-STUDIO-LOGO:CAPS"/>
+    <keyword type="constant" name="GST_TAG_DEMUX_RESULT_BROKEN_TAG" link="gst-plugins-base-libs-gsttagdemux.html#GST-TAG-DEMUX-RESULT-BROKEN-TAG:CAPS"/>
+    <keyword type="constant" name="GST_TAG_DEMUX_RESULT_AGAIN" link="gst-plugins-base-libs-gsttagdemux.html#GST-TAG-DEMUX-RESULT-AGAIN:CAPS"/>
+    <keyword type="constant" name="GST_TAG_DEMUX_RESULT_OK" link="gst-plugins-base-libs-gsttagdemux.html#GST-TAG-DEMUX-RESULT-OK:CAPS"/>
+    <keyword type="constant" name="GST_TAG_LICENSE_PERMITS_REPRODUCTION" link="gst-plugins-base-libs-gsttaglicenses.html#GST-TAG-LICENSE-PERMITS-REPRODUCTION:CAPS"/>
+    <keyword type="constant" name="GST_TAG_LICENSE_PERMITS_DISTRIBUTION" link="gst-plugins-base-libs-gsttaglicenses.html#GST-TAG-LICENSE-PERMITS-DISTRIBUTION:CAPS"/>
+    <keyword type="constant" name="GST_TAG_LICENSE_PERMITS_DERIVATIVE_WORKS" link="gst-plugins-base-libs-gsttaglicenses.html#GST-TAG-LICENSE-PERMITS-DERIVATIVE-WORKS:CAPS"/>
+    <keyword type="constant" name="GST_TAG_LICENSE_PERMITS_SHARING" link="gst-plugins-base-libs-gsttaglicenses.html#GST-TAG-LICENSE-PERMITS-SHARING:CAPS"/>
+    <keyword type="constant" name="GST_TAG_LICENSE_REQUIRES_NOTICE" link="gst-plugins-base-libs-gsttaglicenses.html#GST-TAG-LICENSE-REQUIRES-NOTICE:CAPS"/>
+    <keyword type="constant" name="GST_TAG_LICENSE_REQUIRES_ATTRIBUTION" link="gst-plugins-base-libs-gsttaglicenses.html#GST-TAG-LICENSE-REQUIRES-ATTRIBUTION:CAPS"/>
+    <keyword type="constant" name="GST_TAG_LICENSE_REQUIRES_SHARE_ALIKE" link="gst-plugins-base-libs-gsttaglicenses.html#GST-TAG-LICENSE-REQUIRES-SHARE-ALIKE:CAPS"/>
+    <keyword type="constant" name="GST_TAG_LICENSE_REQUIRES_SOURCE_CODE" link="gst-plugins-base-libs-gsttaglicenses.html#GST-TAG-LICENSE-REQUIRES-SOURCE-CODE:CAPS"/>
+    <keyword type="constant" name="GST_TAG_LICENSE_REQUIRES_COPYLEFT" link="gst-plugins-base-libs-gsttaglicenses.html#GST-TAG-LICENSE-REQUIRES-COPYLEFT:CAPS"/>
+    <keyword type="constant" name="GST_TAG_LICENSE_REQUIRES_LESSER_COPYLEFT" link="gst-plugins-base-libs-gsttaglicenses.html#GST-TAG-LICENSE-REQUIRES-LESSER-COPYLEFT:CAPS"/>
+    <keyword type="constant" name="GST_TAG_LICENSE_PROHIBITS_COMMERCIAL_USE" link="gst-plugins-base-libs-gsttaglicenses.html#GST-TAG-LICENSE-PROHIBITS-COMMERCIAL-USE:CAPS"/>
+    <keyword type="constant" name="GST_TAG_LICENSE_PROHIBITS_HIGH_INCOME_NATION_USE" link="gst-plugins-base-libs-gsttaglicenses.html#GST-TAG-LICENSE-PROHIBITS-HIGH-INCOME-NATION-USE:CAPS"/>
+    <keyword type="constant" name="GST_TAG_LICENSE_CREATIVE_COMMONS_LICENSE" link="gst-plugins-base-libs-gsttaglicenses.html#GST-TAG-LICENSE-CREATIVE-COMMONS-LICENSE:CAPS"/>
+    <keyword type="constant" name="GST_TAG_LICENSE_FREE_SOFTWARE_FOUNDATION_LICENSE" link="gst-plugins-base-libs-gsttaglicenses.html#GST-TAG-LICENSE-FREE-SOFTWARE-FOUNDATION-LICENSE:CAPS"/>
+    <keyword type="constant" name="GST_INSTALL_PLUGINS_SUCCESS" link="gst-plugins-base-libs-gstpbutilsinstallplugins.html#GST-INSTALL-PLUGINS-SUCCESS:CAPS"/>
+    <keyword type="constant" name="GST_INSTALL_PLUGINS_NOT_FOUND" link="gst-plugins-base-libs-gstpbutilsinstallplugins.html#GST-INSTALL-PLUGINS-NOT-FOUND:CAPS"/>
+    <keyword type="constant" name="GST_INSTALL_PLUGINS_ERROR" link="gst-plugins-base-libs-gstpbutilsinstallplugins.html#GST-INSTALL-PLUGINS-ERROR:CAPS"/>
+    <keyword type="constant" name="GST_INSTALL_PLUGINS_PARTIAL_SUCCESS" link="gst-plugins-base-libs-gstpbutilsinstallplugins.html#GST-INSTALL-PLUGINS-PARTIAL-SUCCESS:CAPS"/>
+    <keyword type="constant" name="GST_INSTALL_PLUGINS_USER_ABORT" link="gst-plugins-base-libs-gstpbutilsinstallplugins.html#GST-INSTALL-PLUGINS-USER-ABORT:CAPS"/>
+    <keyword type="constant" name="GST_INSTALL_PLUGINS_CRASHED" link="gst-plugins-base-libs-gstpbutilsinstallplugins.html#GST-INSTALL-PLUGINS-CRASHED:CAPS"/>
+    <keyword type="constant" name="GST_INSTALL_PLUGINS_INVALID" link="gst-plugins-base-libs-gstpbutilsinstallplugins.html#GST-INSTALL-PLUGINS-INVALID:CAPS"/>
+    <keyword type="constant" name="GST_INSTALL_PLUGINS_STARTED_OK" link="gst-plugins-base-libs-gstpbutilsinstallplugins.html#GST-INSTALL-PLUGINS-STARTED-OK:CAPS"/>
+    <keyword type="constant" name="GST_INSTALL_PLUGINS_INTERNAL_FAILURE" link="gst-plugins-base-libs-gstpbutilsinstallplugins.html#GST-INSTALL-PLUGINS-INTERNAL-FAILURE:CAPS"/>
+    <keyword type="constant" name="GST_INSTALL_PLUGINS_HELPER_MISSING" link="gst-plugins-base-libs-gstpbutilsinstallplugins.html#GST-INSTALL-PLUGINS-HELPER-MISSING:CAPS"/>
+    <keyword type="constant" name="GST_INSTALL_PLUGINS_INSTALL_IN_PROGRESS" link="gst-plugins-base-libs-gstpbutilsinstallplugins.html#GST-INSTALL-PLUGINS-INSTALL-IN-PROGRESS:CAPS"/>
+    <keyword type="constant" name="GST_DISCOVERER_OK" link="gst-plugins-base-libs-gstdiscoverer.html#GST-DISCOVERER-OK:CAPS"/>
+    <keyword type="constant" name="GST_DISCOVERER_URI_INVALID" link="gst-plugins-base-libs-gstdiscoverer.html#GST-DISCOVERER-URI-INVALID:CAPS"/>
+    <keyword type="constant" name="GST_DISCOVERER_ERROR" link="gst-plugins-base-libs-gstdiscoverer.html#GST-DISCOVERER-ERROR:CAPS"/>
+    <keyword type="constant" name="GST_DISCOVERER_TIMEOUT" link="gst-plugins-base-libs-gstdiscoverer.html#GST-DISCOVERER-TIMEOUT:CAPS"/>
+    <keyword type="constant" name="GST_DISCOVERER_BUSY" link="gst-plugins-base-libs-gstdiscoverer.html#GST-DISCOVERER-BUSY:CAPS"/>
+    <keyword type="constant" name="GST_DISCOVERER_MISSING_PLUGINS" link="gst-plugins-base-libs-gstdiscoverer.html#GST-DISCOVERER-MISSING-PLUGINS:CAPS"/>
+    <keyword type="constant" name="GST_DISCOVERER_SERIALIZE_BASIC" link="gst-plugins-base-libs-gstdiscoverer.html#GST-DISCOVERER-SERIALIZE-BASIC:CAPS"/>
+    <keyword type="constant" name="GST_DISCOVERER_SERIALIZE_CAPS" link="gst-plugins-base-libs-gstdiscoverer.html#GST-DISCOVERER-SERIALIZE-CAPS"/>
+    <keyword type="constant" name="GST_DISCOVERER_SERIALIZE_TAGS" link="gst-plugins-base-libs-gstdiscoverer.html#GST-DISCOVERER-SERIALIZE-TAGS:CAPS"/>
+    <keyword type="constant" name="GST_DISCOVERER_SERIALIZE_MISC" link="gst-plugins-base-libs-gstdiscoverer.html#GST-DISCOVERER-SERIALIZE-MISC:CAPS"/>
+    <keyword type="constant" name="GST_DISCOVERER_SERIALIZE_ALL" link="gst-plugins-base-libs-gstdiscoverer.html#GST-DISCOVERER-SERIALIZE-ALL:CAPS"/>
+    <keyword type="constant" name="GST_VIDEO_FORMAT_UNKNOWN" link="gst-plugins-base-libs-gstvideo.html#GST-VIDEO-FORMAT-UNKNOWN:CAPS"/>
+    <keyword type="constant" name="GST_VIDEO_FORMAT_ENCODED" link="gst-plugins-base-libs-gstvideo.html#GST-VIDEO-FORMAT-ENCODED:CAPS"/>
+    <keyword type="constant" name="GST_VIDEO_FORMAT_I420" link="gst-plugins-base-libs-gstvideo.html#GST-VIDEO-FORMAT-I420:CAPS"/>
+    <keyword type="constant" name="GST_VIDEO_FORMAT_YV12" link="gst-plugins-base-libs-gstvideo.html#GST-VIDEO-FORMAT-YV12:CAPS"/>
+    <keyword type="constant" name="GST_VIDEO_FORMAT_YUY2" link="gst-plugins-base-libs-gstvideo.html#GST-VIDEO-FORMAT-YUY2:CAPS"/>
+    <keyword type="constant" name="GST_VIDEO_FORMAT_UYVY" link="gst-plugins-base-libs-gstvideo.html#GST-VIDEO-FORMAT-UYVY:CAPS"/>
+    <keyword type="constant" name="GST_VIDEO_FORMAT_AYUV" link="gst-plugins-base-libs-gstvideo.html#GST-VIDEO-FORMAT-AYUV:CAPS"/>
+    <keyword type="constant" name="GST_VIDEO_FORMAT_RGBx" link="gst-plugins-base-libs-gstvideo.html#GST-VIDEO-FORMAT-RGBx"/>
+    <keyword type="constant" name="GST_VIDEO_FORMAT_BGRx" link="gst-plugins-base-libs-gstvideo.html#GST-VIDEO-FORMAT-BGRx"/>
+    <keyword type="constant" name="GST_VIDEO_FORMAT_xRGB" link="gst-plugins-base-libs-gstvideo.html#GST-VIDEO-FORMAT-xRGB"/>
+    <keyword type="constant" name="GST_VIDEO_FORMAT_xBGR" link="gst-plugins-base-libs-gstvideo.html#GST-VIDEO-FORMAT-xBGR"/>
+    <keyword type="constant" name="GST_VIDEO_FORMAT_RGBA" link="gst-plugins-base-libs-gstvideo.html#GST-VIDEO-FORMAT-RGBA:CAPS"/>
+    <keyword type="constant" name="GST_VIDEO_FORMAT_BGRA" link="gst-plugins-base-libs-gstvideo.html#GST-VIDEO-FORMAT-BGRA:CAPS"/>
+    <keyword type="constant" name="GST_VIDEO_FORMAT_ARGB" link="gst-plugins-base-libs-gstvideo.html#GST-VIDEO-FORMAT-ARGB:CAPS"/>
+    <keyword type="constant" name="GST_VIDEO_FORMAT_ABGR" link="gst-plugins-base-libs-gstvideo.html#GST-VIDEO-FORMAT-ABGR:CAPS"/>
+    <keyword type="constant" name="GST_VIDEO_FORMAT_RGB" link="gst-plugins-base-libs-gstvideo.html#GST-VIDEO-FORMAT-RGB:CAPS"/>
+    <keyword type="constant" name="GST_VIDEO_FORMAT_BGR" link="gst-plugins-base-libs-gstvideo.html#GST-VIDEO-FORMAT-BGR:CAPS"/>
+    <keyword type="constant" name="GST_VIDEO_FORMAT_Y41B" link="gst-plugins-base-libs-gstvideo.html#GST-VIDEO-FORMAT-Y41B:CAPS"/>
+    <keyword type="constant" name="GST_VIDEO_FORMAT_Y42B" link="gst-plugins-base-libs-gstvideo.html#GST-VIDEO-FORMAT-Y42B:CAPS"/>
+    <keyword type="constant" name="GST_VIDEO_FORMAT_YVYU" link="gst-plugins-base-libs-gstvideo.html#GST-VIDEO-FORMAT-YVYU:CAPS"/>
+    <keyword type="constant" name="GST_VIDEO_FORMAT_Y444" link="gst-plugins-base-libs-gstvideo.html#GST-VIDEO-FORMAT-Y444:CAPS"/>
+    <keyword type="constant" name="GST_VIDEO_FORMAT_v210" link="gst-plugins-base-libs-gstvideo.html#GST-VIDEO-FORMAT-v210"/>
+    <keyword type="constant" name="GST_VIDEO_FORMAT_v216" link="gst-plugins-base-libs-gstvideo.html#GST-VIDEO-FORMAT-v216"/>
+    <keyword type="constant" name="GST_VIDEO_FORMAT_NV12" link="gst-plugins-base-libs-gstvideo.html#GST-VIDEO-FORMAT-NV12:CAPS"/>
+    <keyword type="constant" name="GST_VIDEO_FORMAT_NV21" link="gst-plugins-base-libs-gstvideo.html#GST-VIDEO-FORMAT-NV21:CAPS"/>
+    <keyword type="constant" name="GST_VIDEO_FORMAT_GRAY8" link="gst-plugins-base-libs-gstvideo.html#GST-VIDEO-FORMAT-GRAY8:CAPS"/>
+    <keyword type="constant" name="GST_VIDEO_FORMAT_GRAY16_BE" link="gst-plugins-base-libs-gstvideo.html#GST-VIDEO-FORMAT-GRAY16-BE:CAPS"/>
+    <keyword type="constant" name="GST_VIDEO_FORMAT_GRAY16_LE" link="gst-plugins-base-libs-gstvideo.html#GST-VIDEO-FORMAT-GRAY16-LE:CAPS"/>
+    <keyword type="constant" name="GST_VIDEO_FORMAT_v308" link="gst-plugins-base-libs-gstvideo.html#GST-VIDEO-FORMAT-v308"/>
+    <keyword type="constant" name="GST_VIDEO_FORMAT_RGB16" link="gst-plugins-base-libs-gstvideo.html#GST-VIDEO-FORMAT-RGB16:CAPS"/>
+    <keyword type="constant" name="GST_VIDEO_FORMAT_BGR16" link="gst-plugins-base-libs-gstvideo.html#GST-VIDEO-FORMAT-BGR16:CAPS"/>
+    <keyword type="constant" name="GST_VIDEO_FORMAT_RGB15" link="gst-plugins-base-libs-gstvideo.html#GST-VIDEO-FORMAT-RGB15:CAPS"/>
+    <keyword type="constant" name="GST_VIDEO_FORMAT_BGR15" link="gst-plugins-base-libs-gstvideo.html#GST-VIDEO-FORMAT-BGR15:CAPS"/>
+    <keyword type="constant" name="GST_VIDEO_FORMAT_UYVP" link="gst-plugins-base-libs-gstvideo.html#GST-VIDEO-FORMAT-UYVP:CAPS"/>
+    <keyword type="constant" name="GST_VIDEO_FORMAT_A420" link="gst-plugins-base-libs-gstvideo.html#GST-VIDEO-FORMAT-A420:CAPS"/>
+    <keyword type="constant" name="GST_VIDEO_FORMAT_RGB8P" link="gst-plugins-base-libs-gstvideo.html#GST-VIDEO-FORMAT-RGB8P:CAPS"/>
+    <keyword type="constant" name="GST_VIDEO_FORMAT_YUV9" link="gst-plugins-base-libs-gstvideo.html#GST-VIDEO-FORMAT-YUV9:CAPS"/>
+    <keyword type="constant" name="GST_VIDEO_FORMAT_YVU9" link="gst-plugins-base-libs-gstvideo.html#GST-VIDEO-FORMAT-YVU9:CAPS"/>
+    <keyword type="constant" name="GST_VIDEO_FORMAT_IYU1" link="gst-plugins-base-libs-gstvideo.html#GST-VIDEO-FORMAT-IYU1:CAPS"/>
+    <keyword type="constant" name="GST_VIDEO_FORMAT_ARGB64" link="gst-plugins-base-libs-gstvideo.html#GST-VIDEO-FORMAT-ARGB64:CAPS"/>
+    <keyword type="constant" name="GST_VIDEO_FORMAT_AYUV64" link="gst-plugins-base-libs-gstvideo.html#GST-VIDEO-FORMAT-AYUV64:CAPS"/>
+    <keyword type="constant" name="GST_VIDEO_FORMAT_r210" link="gst-plugins-base-libs-gstvideo.html#GST-VIDEO-FORMAT-r210"/>
+    <keyword type="constant" name="GST_VIDEO_FORMAT_I420_10BE" link="gst-plugins-base-libs-gstvideo.html#GST-VIDEO-FORMAT-I420-10BE:CAPS"/>
+    <keyword type="constant" name="GST_VIDEO_FORMAT_I420_10LE" link="gst-plugins-base-libs-gstvideo.html#GST-VIDEO-FORMAT-I420-10LE:CAPS"/>
+    <keyword type="constant" name="GST_VIDEO_FORMAT_I422_10BE" link="gst-plugins-base-libs-gstvideo.html#GST-VIDEO-FORMAT-I422-10BE:CAPS"/>
+    <keyword type="constant" name="GST_VIDEO_FORMAT_I422_10LE" link="gst-plugins-base-libs-gstvideo.html#GST-VIDEO-FORMAT-I422-10LE:CAPS"/>
+    <keyword type="constant" name="GST_VIDEO_FORMAT_Y444_10BE" link="gst-plugins-base-libs-gstvideo.html#GST-VIDEO-FORMAT-Y444-10BE:CAPS"/>
+    <keyword type="constant" name="GST_VIDEO_FORMAT_Y444_10LE" link="gst-plugins-base-libs-gstvideo.html#GST-VIDEO-FORMAT-Y444-10LE:CAPS"/>
+    <keyword type="constant" name="GST_VIDEO_FORMAT_GBR" link="gst-plugins-base-libs-gstvideo.html#GST-VIDEO-FORMAT-GBR:CAPS"/>
+    <keyword type="constant" name="GST_VIDEO_FORMAT_GBR_10BE" link="gst-plugins-base-libs-gstvideo.html#GST-VIDEO-FORMAT-GBR-10BE:CAPS"/>
+    <keyword type="constant" name="GST_VIDEO_FORMAT_GBR_10LE" link="gst-plugins-base-libs-gstvideo.html#GST-VIDEO-FORMAT-GBR-10LE:CAPS"/>
+    <keyword type="constant" name="GST_VIDEO_FORMAT_NV16" link="gst-plugins-base-libs-gstvideo.html#GST-VIDEO-FORMAT-NV16:CAPS"/>
+    <keyword type="constant" name="GST_VIDEO_FORMAT_NV24" link="gst-plugins-base-libs-gstvideo.html#GST-VIDEO-FORMAT-NV24:CAPS"/>
+    <keyword type="constant" name="GST_VIDEO_FORMAT_NV12_64Z32" link="gst-plugins-base-libs-gstvideo.html#GST-VIDEO-FORMAT-NV12-64Z32:CAPS"/>
+    <keyword type="constant" name="GST_VIDEO_FORMAT_A420_10BE" link="gst-plugins-base-libs-gstvideo.html#GST-VIDEO-FORMAT-A420-10BE:CAPS"/>
+    <keyword type="constant" name="GST_VIDEO_FORMAT_A420_10LE" link="gst-plugins-base-libs-gstvideo.html#GST-VIDEO-FORMAT-A420-10LE:CAPS"/>
+    <keyword type="constant" name="GST_VIDEO_FORMAT_A422_10BE" link="gst-plugins-base-libs-gstvideo.html#GST-VIDEO-FORMAT-A422-10BE:CAPS"/>
+    <keyword type="constant" name="GST_VIDEO_FORMAT_A422_10LE" link="gst-plugins-base-libs-gstvideo.html#GST-VIDEO-FORMAT-A422-10LE:CAPS"/>
+    <keyword type="constant" name="GST_VIDEO_FORMAT_A444_10BE" link="gst-plugins-base-libs-gstvideo.html#GST-VIDEO-FORMAT-A444-10BE:CAPS"/>
+    <keyword type="constant" name="GST_VIDEO_FORMAT_A444_10LE" link="gst-plugins-base-libs-gstvideo.html#GST-VIDEO-FORMAT-A444-10LE:CAPS"/>
+    <keyword type="constant" name="GST_VIDEO_FORMAT_NV61" link="gst-plugins-base-libs-gstvideo.html#GST-VIDEO-FORMAT-NV61:CAPS"/>
+    <keyword type="constant" name="GST_VIDEO_FORMAT_FLAG_YUV" link="gst-plugins-base-libs-gstvideo.html#GST-VIDEO-FORMAT-FLAG-YUV:CAPS"/>
+    <keyword type="constant" name="GST_VIDEO_FORMAT_FLAG_RGB" link="gst-plugins-base-libs-gstvideo.html#GST-VIDEO-FORMAT-FLAG-RGB:CAPS"/>
+    <keyword type="constant" name="GST_VIDEO_FORMAT_FLAG_GRAY" link="gst-plugins-base-libs-gstvideo.html#GST-VIDEO-FORMAT-FLAG-GRAY:CAPS"/>
+    <keyword type="constant" name="GST_VIDEO_FORMAT_FLAG_ALPHA" link="gst-plugins-base-libs-gstvideo.html#GST-VIDEO-FORMAT-FLAG-ALPHA:CAPS"/>
+    <keyword type="constant" name="GST_VIDEO_FORMAT_FLAG_LE" link="gst-plugins-base-libs-gstvideo.html#GST-VIDEO-FORMAT-FLAG-LE:CAPS"/>
+    <keyword type="constant" name="GST_VIDEO_FORMAT_FLAG_PALETTE" link="gst-plugins-base-libs-gstvideo.html#GST-VIDEO-FORMAT-FLAG-PALETTE:CAPS"/>
+    <keyword type="constant" name="GST_VIDEO_FORMAT_FLAG_COMPLEX" link="gst-plugins-base-libs-gstvideo.html#GST-VIDEO-FORMAT-FLAG-COMPLEX:CAPS"/>
+    <keyword type="constant" name="GST_VIDEO_FORMAT_FLAG_UNPACK" link="gst-plugins-base-libs-gstvideo.html#GST-VIDEO-FORMAT-FLAG-UNPACK:CAPS"/>
+    <keyword type="constant" name="GST_VIDEO_FORMAT_FLAG_TILED" link="gst-plugins-base-libs-gstvideo.html#GST-VIDEO-FORMAT-FLAG-TILED:CAPS"/>
+    <keyword type="constant" name="GST_VIDEO_PACK_FLAG_NONE" link="gst-plugins-base-libs-gstvideo.html#GST-VIDEO-PACK-FLAG-NONE:CAPS"/>
+    <keyword type="constant" name="GST_VIDEO_PACK_FLAG_TRUNCATE_RANGE" link="gst-plugins-base-libs-gstvideo.html#GST-VIDEO-PACK-FLAG-TRUNCATE-RANGE:CAPS"/>
+    <keyword type="constant" name="GST_VIDEO_PACK_FLAG_INTERLACED" link="gst-plugins-base-libs-gstvideo.html#GST-VIDEO-PACK-FLAG-INTERLACED:CAPS"/>
+    <keyword type="constant" name="GST_VIDEO_COLOR_RANGE_UNKNOWN" link="gst-plugins-base-libs-gstvideo.html#GST-VIDEO-COLOR-RANGE-UNKNOWN:CAPS"/>
+    <keyword type="constant" name="GST_VIDEO_COLOR_RANGE_0_255" link="gst-plugins-base-libs-gstvideo.html#GST-VIDEO-COLOR-RANGE-0-255:CAPS"/>
+    <keyword type="constant" name="GST_VIDEO_COLOR_RANGE_16_235" link="gst-plugins-base-libs-gstvideo.html#GST-VIDEO-COLOR-RANGE-16-235:CAPS"/>
+    <keyword type="constant" name="GST_VIDEO_COLOR_MATRIX_UNKNOWN" link="gst-plugins-base-libs-gstvideo.html#GST-VIDEO-COLOR-MATRIX-UNKNOWN:CAPS"/>
+    <keyword type="constant" name="GST_VIDEO_COLOR_MATRIX_RGB" link="gst-plugins-base-libs-gstvideo.html#GST-VIDEO-COLOR-MATRIX-RGB:CAPS"/>
+    <keyword type="constant" name="GST_VIDEO_COLOR_MATRIX_FCC" link="gst-plugins-base-libs-gstvideo.html#GST-VIDEO-COLOR-MATRIX-FCC:CAPS"/>
+    <keyword type="constant" name="GST_VIDEO_COLOR_MATRIX_BT709" link="gst-plugins-base-libs-gstvideo.html#GST-VIDEO-COLOR-MATRIX-BT709:CAPS"/>
+    <keyword type="constant" name="GST_VIDEO_COLOR_MATRIX_BT601" link="gst-plugins-base-libs-gstvideo.html#GST-VIDEO-COLOR-MATRIX-BT601:CAPS"/>
+    <keyword type="constant" name="GST_VIDEO_COLOR_MATRIX_SMPTE240M" link="gst-plugins-base-libs-gstvideo.html#GST-VIDEO-COLOR-MATRIX-SMPTE240M:CAPS"/>
+    <keyword type="constant" name="GST_VIDEO_COLOR_MATRIX_BT2020" link="gst-plugins-base-libs-gstvideo.html#GST-VIDEO-COLOR-MATRIX-BT2020:CAPS"/>
+    <keyword type="constant" name="GST_VIDEO_COLOR_PRIMARIES_UNKNOWN" link="gst-plugins-base-libs-gstvideo.html#GST-VIDEO-COLOR-PRIMARIES-UNKNOWN:CAPS"/>
+    <keyword type="constant" name="GST_VIDEO_COLOR_PRIMARIES_BT709" link="gst-plugins-base-libs-gstvideo.html#GST-VIDEO-COLOR-PRIMARIES-BT709:CAPS"/>
+    <keyword type="constant" name="GST_VIDEO_COLOR_PRIMARIES_BT470M" link="gst-plugins-base-libs-gstvideo.html#GST-VIDEO-COLOR-PRIMARIES-BT470M:CAPS"/>
+    <keyword type="constant" name="GST_VIDEO_COLOR_PRIMARIES_BT470BG" link="gst-plugins-base-libs-gstvideo.html#GST-VIDEO-COLOR-PRIMARIES-BT470BG:CAPS"/>
+    <keyword type="constant" name="GST_VIDEO_COLOR_PRIMARIES_SMPTE170M" link="gst-plugins-base-libs-gstvideo.html#GST-VIDEO-COLOR-PRIMARIES-SMPTE170M:CAPS"/>
+    <keyword type="constant" name="GST_VIDEO_COLOR_PRIMARIES_SMPTE240M" link="gst-plugins-base-libs-gstvideo.html#GST-VIDEO-COLOR-PRIMARIES-SMPTE240M:CAPS"/>
+    <keyword type="constant" name="GST_VIDEO_COLOR_PRIMARIES_FILM" link="gst-plugins-base-libs-gstvideo.html#GST-VIDEO-COLOR-PRIMARIES-FILM:CAPS"/>
+    <keyword type="constant" name="GST_VIDEO_COLOR_PRIMARIES_BT2020" link="gst-plugins-base-libs-gstvideo.html#GST-VIDEO-COLOR-PRIMARIES-BT2020:CAPS"/>
+    <keyword type="constant" name="GST_VIDEO_TRANSFER_UNKNOWN" link="gst-plugins-base-libs-gstvideo.html#GST-VIDEO-TRANSFER-UNKNOWN:CAPS"/>
+    <keyword type="constant" name="GST_VIDEO_TRANSFER_GAMMA10" link="gst-plugins-base-libs-gstvideo.html#GST-VIDEO-TRANSFER-GAMMA10:CAPS"/>
+    <keyword type="constant" name="GST_VIDEO_TRANSFER_GAMMA18" link="gst-plugins-base-libs-gstvideo.html#GST-VIDEO-TRANSFER-GAMMA18:CAPS"/>
+    <keyword type="constant" name="GST_VIDEO_TRANSFER_GAMMA20" link="gst-plugins-base-libs-gstvideo.html#GST-VIDEO-TRANSFER-GAMMA20:CAPS"/>
+    <keyword type="constant" name="GST_VIDEO_TRANSFER_GAMMA22" link="gst-plugins-base-libs-gstvideo.html#GST-VIDEO-TRANSFER-GAMMA22:CAPS"/>
+    <keyword type="constant" name="GST_VIDEO_TRANSFER_BT709" link="gst-plugins-base-libs-gstvideo.html#GST-VIDEO-TRANSFER-BT709:CAPS"/>
+    <keyword type="constant" name="GST_VIDEO_TRANSFER_SMPTE240M" link="gst-plugins-base-libs-gstvideo.html#GST-VIDEO-TRANSFER-SMPTE240M:CAPS"/>
+    <keyword type="constant" name="GST_VIDEO_TRANSFER_SRGB" link="gst-plugins-base-libs-gstvideo.html#GST-VIDEO-TRANSFER-SRGB:CAPS"/>
+    <keyword type="constant" name="GST_VIDEO_TRANSFER_GAMMA28" link="gst-plugins-base-libs-gstvideo.html#GST-VIDEO-TRANSFER-GAMMA28:CAPS"/>
+    <keyword type="constant" name="GST_VIDEO_TRANSFER_LOG100" link="gst-plugins-base-libs-gstvideo.html#GST-VIDEO-TRANSFER-LOG100:CAPS"/>
+    <keyword type="constant" name="GST_VIDEO_TRANSFER_LOG316" link="gst-plugins-base-libs-gstvideo.html#GST-VIDEO-TRANSFER-LOG316:CAPS"/>
+    <keyword type="constant" name="GST_VIDEO_TRANSFER_BT2020_12" link="gst-plugins-base-libs-gstvideo.html#GST-VIDEO-TRANSFER-BT2020-12:CAPS"/>
+    <keyword type="constant" name="GST_VIDEO_INTERLACE_MODE_PROGRESSIVE" link="gst-plugins-base-libs-gstvideo.html#GST-VIDEO-INTERLACE-MODE-PROGRESSIVE:CAPS"/>
+    <keyword type="constant" name="GST_VIDEO_INTERLACE_MODE_INTERLEAVED" link="gst-plugins-base-libs-gstvideo.html#GST-VIDEO-INTERLACE-MODE-INTERLEAVED:CAPS"/>
+    <keyword type="constant" name="GST_VIDEO_INTERLACE_MODE_MIXED" link="gst-plugins-base-libs-gstvideo.html#GST-VIDEO-INTERLACE-MODE-MIXED:CAPS"/>
+    <keyword type="constant" name="GST_VIDEO_INTERLACE_MODE_FIELDS" link="gst-plugins-base-libs-gstvideo.html#GST-VIDEO-INTERLACE-MODE-FIELDS:CAPS"/>
+    <keyword type="constant" name="GST_VIDEO_MULTIVIEW_MODE_NONE" link="gst-plugins-base-libs-gstvideo.html#GST-VIDEO-MULTIVIEW-MODE-NONE:CAPS"/>
+    <keyword type="constant" name="GST_VIDEO_MULTIVIEW_MODE_MONO" link="gst-plugins-base-libs-gstvideo.html#GST-VIDEO-MULTIVIEW-MODE-MONO:CAPS"/>
+    <keyword type="constant" name="GST_VIDEO_MULTIVIEW_MODE_LEFT" link="gst-plugins-base-libs-gstvideo.html#GST-VIDEO-MULTIVIEW-MODE-LEFT:CAPS"/>
+    <keyword type="constant" name="GST_VIDEO_MULTIVIEW_MODE_RIGHT" link="gst-plugins-base-libs-gstvideo.html#GST-VIDEO-MULTIVIEW-MODE-RIGHT:CAPS"/>
+    <keyword type="constant" name="GST_VIDEO_MULTIVIEW_MODE_SIDE_BY_SIDE" link="gst-plugins-base-libs-gstvideo.html#GST-VIDEO-MULTIVIEW-MODE-SIDE-BY-SIDE:CAPS"/>
+    <keyword type="constant" name="GST_VIDEO_MULTIVIEW_MODE_SIDE_BY_SIDE_QUINCUNX" link="gst-plugins-base-libs-gstvideo.html#GST-VIDEO-MULTIVIEW-MODE-SIDE-BY-SIDE-QUINCUNX:CAPS"/>
+    <keyword type="constant" name="GST_VIDEO_MULTIVIEW_MODE_COLUMN_INTERLEAVED" link="gst-plugins-base-libs-gstvideo.html#GST-VIDEO-MULTIVIEW-MODE-COLUMN-INTERLEAVED:CAPS"/>
+    <keyword type="constant" name="GST_VIDEO_MULTIVIEW_MODE_ROW_INTERLEAVED" link="gst-plugins-base-libs-gstvideo.html#GST-VIDEO-MULTIVIEW-MODE-ROW-INTERLEAVED:CAPS"/>
+    <keyword type="constant" name="GST_VIDEO_MULTIVIEW_MODE_TOP_BOTTOM" link="gst-plugins-base-libs-gstvideo.html#GST-VIDEO-MULTIVIEW-MODE-TOP-BOTTOM:CAPS"/>
+    <keyword type="constant" name="GST_VIDEO_MULTIVIEW_MODE_CHECKERBOARD" link="gst-plugins-base-libs-gstvideo.html#GST-VIDEO-MULTIVIEW-MODE-CHECKERBOARD:CAPS"/>
+    <keyword type="constant" name="GST_VIDEO_MULTIVIEW_MODE_FRAME_BY_FRAME" link="gst-plugins-base-libs-gstvideo.html#GST-VIDEO-MULTIVIEW-MODE-FRAME-BY-FRAME:CAPS"/>
+    <keyword type="constant" name="GST_VIDEO_MULTIVIEW_MODE_MULTIVIEW_FRAME_BY_FRAME" link="gst-plugins-base-libs-gstvideo.html#GST-VIDEO-MULTIVIEW-MODE-MULTIVIEW-FRAME-BY-FRAME:CAPS"/>
+    <keyword type="constant" name="GST_VIDEO_MULTIVIEW_MODE_SEPARATED" link="gst-plugins-base-libs-gstvideo.html#GST-VIDEO-MULTIVIEW-MODE-SEPARATED:CAPS"/>
+    <keyword type="constant" name="GST_VIDEO_MULTIVIEW_FRAME_PACKING_NONE" link="gst-plugins-base-libs-gstvideo.html#GST-VIDEO-MULTIVIEW-FRAME-PACKING-NONE:CAPS"/>
+    <keyword type="constant" name="GST_VIDEO_MULTIVIEW_FRAME_PACKING_MONO" link="gst-plugins-base-libs-gstvideo.html#GST-VIDEO-MULTIVIEW-FRAME-PACKING-MONO:CAPS"/>
+    <keyword type="constant" name="GST_VIDEO_MULTIVIEW_FRAME_PACKING_LEFT" link="gst-plugins-base-libs-gstvideo.html#GST-VIDEO-MULTIVIEW-FRAME-PACKING-LEFT:CAPS"/>
+    <keyword type="constant" name="GST_VIDEO_MULTIVIEW_FRAME_PACKING_RIGHT" link="gst-plugins-base-libs-gstvideo.html#GST-VIDEO-MULTIVIEW-FRAME-PACKING-RIGHT:CAPS"/>
+    <keyword type="constant" name="GST_VIDEO_MULTIVIEW_FRAME_PACKING_SIDE_BY_SIDE" link="gst-plugins-base-libs-gstvideo.html#GST-VIDEO-MULTIVIEW-FRAME-PACKING-SIDE-BY-SIDE:CAPS"/>
+    <keyword type="constant" name="GST_VIDEO_MULTIVIEW_FRAME_PACKING_SIDE_BY_SIDE_QUINCUNX" link="gst-plugins-base-libs-gstvideo.html#GST-VIDEO-MULTIVIEW-FRAME-PACKING-SIDE-BY-SIDE-QUINCUNX:CAPS"/>
+    <keyword type="constant" name="GST_VIDEO_MULTIVIEW_FRAME_PACKING_COLUMN_INTERLEAVED" link="gst-plugins-base-libs-gstvideo.html#GST-VIDEO-MULTIVIEW-FRAME-PACKING-COLUMN-INTERLEAVED:CAPS"/>
+    <keyword type="constant" name="GST_VIDEO_MULTIVIEW_FRAME_PACKING_ROW_INTERLEAVED" link="gst-plugins-base-libs-gstvideo.html#GST-VIDEO-MULTIVIEW-FRAME-PACKING-ROW-INTERLEAVED:CAPS"/>
+    <keyword type="constant" name="GST_VIDEO_MULTIVIEW_FRAME_PACKING_TOP_BOTTOM" link="gst-plugins-base-libs-gstvideo.html#GST-VIDEO-MULTIVIEW-FRAME-PACKING-TOP-BOTTOM:CAPS"/>
+    <keyword type="constant" name="GST_VIDEO_MULTIVIEW_FRAME_PACKING_CHECKERBOARD" link="gst-plugins-base-libs-gstvideo.html#GST-VIDEO-MULTIVIEW-FRAME-PACKING-CHECKERBOARD:CAPS"/>
+    <keyword type="constant" name="GST_VIDEO_MULTIVIEW_FLAGS_NONE" link="gst-plugins-base-libs-gstvideo.html#GST-VIDEO-MULTIVIEW-FLAGS-NONE:CAPS"/>
+    <keyword type="constant" name="GST_VIDEO_MULTIVIEW_FLAGS_RIGHT_VIEW_FIRST" link="gst-plugins-base-libs-gstvideo.html#GST-VIDEO-MULTIVIEW-FLAGS-RIGHT-VIEW-FIRST:CAPS"/>
+    <keyword type="constant" name="GST_VIDEO_MULTIVIEW_FLAGS_LEFT_FLIPPED" link="gst-plugins-base-libs-gstvideo.html#GST-VIDEO-MULTIVIEW-FLAGS-LEFT-FLIPPED:CAPS"/>
+    <keyword type="constant" name="GST_VIDEO_MULTIVIEW_FLAGS_LEFT_FLOPPED" link="gst-plugins-base-libs-gstvideo.html#GST-VIDEO-MULTIVIEW-FLAGS-LEFT-FLOPPED:CAPS"/>
+    <keyword type="constant" name="GST_VIDEO_MULTIVIEW_FLAGS_RIGHT_FLIPPED" link="gst-plugins-base-libs-gstvideo.html#GST-VIDEO-MULTIVIEW-FLAGS-RIGHT-FLIPPED:CAPS"/>
+    <keyword type="constant" name="GST_VIDEO_MULTIVIEW_FLAGS_RIGHT_FLOPPED" link="gst-plugins-base-libs-gstvideo.html#GST-VIDEO-MULTIVIEW-FLAGS-RIGHT-FLOPPED:CAPS"/>
+    <keyword type="constant" name="GST_VIDEO_MULTIVIEW_FLAGS_HALF_ASPECT" link="gst-plugins-base-libs-gstvideo.html#GST-VIDEO-MULTIVIEW-FLAGS-HALF-ASPECT:CAPS"/>
+    <keyword type="constant" name="GST_VIDEO_MULTIVIEW_FLAGS_MIXED_MONO" link="gst-plugins-base-libs-gstvideo.html#GST-VIDEO-MULTIVIEW-FLAGS-MIXED-MONO:CAPS"/>
+    <keyword type="constant" name="GST_VIDEO_FLAG_NONE" link="gst-plugins-base-libs-gstvideo.html#GST-VIDEO-FLAG-NONE:CAPS"/>
+    <keyword type="constant" name="GST_VIDEO_FLAG_VARIABLE_FPS" link="gst-plugins-base-libs-gstvideo.html#GST-VIDEO-FLAG-VARIABLE-FPS:CAPS"/>
+    <keyword type="constant" name="GST_VIDEO_FLAG_PREMULTIPLIED_ALPHA" link="gst-plugins-base-libs-gstvideo.html#GST-VIDEO-FLAG-PREMULTIPLIED-ALPHA:CAPS"/>
+    <keyword type="constant" name="GST_VIDEO_FRAME_FLAG_NONE" link="gst-plugins-base-libs-gstvideo.html#GST-VIDEO-FRAME-FLAG-NONE:CAPS"/>
+    <keyword type="constant" name="GST_VIDEO_FRAME_FLAG_INTERLACED" link="gst-plugins-base-libs-gstvideo.html#GST-VIDEO-FRAME-FLAG-INTERLACED:CAPS"/>
+    <keyword type="constant" name="GST_VIDEO_FRAME_FLAG_TFF" link="gst-plugins-base-libs-gstvideo.html#GST-VIDEO-FRAME-FLAG-TFF:CAPS"/>
+    <keyword type="constant" name="GST_VIDEO_FRAME_FLAG_RFF" link="gst-plugins-base-libs-gstvideo.html#GST-VIDEO-FRAME-FLAG-RFF:CAPS"/>
+    <keyword type="constant" name="GST_VIDEO_FRAME_FLAG_ONEFIELD" link="gst-plugins-base-libs-gstvideo.html#GST-VIDEO-FRAME-FLAG-ONEFIELD:CAPS"/>
+    <keyword type="constant" name="GST_VIDEO_FRAME_FLAG_MULTIPLE_VIEW" link="gst-plugins-base-libs-gstvideo.html#GST-VIDEO-FRAME-FLAG-MULTIPLE-VIEW:CAPS"/>
+    <keyword type="constant" name="GST_VIDEO_FRAME_FLAG_FIRST_IN_BUNDLE" link="gst-plugins-base-libs-gstvideo.html#GST-VIDEO-FRAME-FLAG-FIRST-IN-BUNDLE:CAPS"/>
+    <keyword type="constant" name="GST_VIDEO_BUFFER_FLAG_INTERLACED" link="gst-plugins-base-libs-gstvideo.html#GST-VIDEO-BUFFER-FLAG-INTERLACED:CAPS"/>
+    <keyword type="constant" name="GST_VIDEO_BUFFER_FLAG_TFF" link="gst-plugins-base-libs-gstvideo.html#GST-VIDEO-BUFFER-FLAG-TFF:CAPS"/>
+    <keyword type="constant" name="GST_VIDEO_BUFFER_FLAG_RFF" link="gst-plugins-base-libs-gstvideo.html#GST-VIDEO-BUFFER-FLAG-RFF:CAPS"/>
+    <keyword type="constant" name="GST_VIDEO_BUFFER_FLAG_ONEFIELD" link="gst-plugins-base-libs-gstvideo.html#GST-VIDEO-BUFFER-FLAG-ONEFIELD:CAPS"/>
+    <keyword type="constant" name="GST_VIDEO_BUFFER_FLAG_MULTIPLE_VIEW" link="gst-plugins-base-libs-gstvideo.html#GST-VIDEO-BUFFER-FLAG-MULTIPLE-VIEW:CAPS"/>
+    <keyword type="constant" name="GST_VIDEO_BUFFER_FLAG_FIRST_IN_BUNDLE" link="gst-plugins-base-libs-gstvideo.html#GST-VIDEO-BUFFER-FLAG-FIRST-IN-BUNDLE:CAPS"/>
+    <keyword type="constant" name="GST_VIDEO_BUFFER_FLAG_LAST" link="gst-plugins-base-libs-gstvideo.html#GST-VIDEO-BUFFER-FLAG-LAST:CAPS"/>
+    <keyword type="constant" name="GST_VIDEO_TILE_TYPE_INDEXED" link="gst-plugins-base-libs-gstvideo.html#GST-VIDEO-TILE-TYPE-INDEXED:CAPS"/>
+    <keyword type="constant" name="GST_VIDEO_TILE_MODE_UNKNOWN" link="gst-plugins-base-libs-gstvideo.html#GST-VIDEO-TILE-MODE-UNKNOWN:CAPS"/>
+    <keyword type="constant" name="GST_VIDEO_TILE_MODE_ZFLIPZ_2X2" link="gst-plugins-base-libs-gstvideo.html#GST-VIDEO-TILE-MODE-ZFLIPZ-2X2:CAPS"/>
+    <keyword type="constant" name="GST_VIDEO_OVERLAY_FORMAT_FLAG_NONE" link="gst-plugins-base-libs-gstvideooverlaycomposition.html#GST-VIDEO-OVERLAY-FORMAT-FLAG-NONE:CAPS"/>
+    <keyword type="constant" name="GST_VIDEO_OVERLAY_FORMAT_FLAG_PREMULTIPLIED_ALPHA" link="gst-plugins-base-libs-gstvideooverlaycomposition.html#GST-VIDEO-OVERLAY-FORMAT-FLAG-PREMULTIPLIED-ALPHA:CAPS"/>
+    <keyword type="constant" name="GST_VIDEO_OVERLAY_FORMAT_FLAG_GLOBAL_ALPHA" link="gst-plugins-base-libs-gstvideooverlaycomposition.html#GST-VIDEO-OVERLAY-FORMAT-FLAG-GLOBAL-ALPHA:CAPS"/>
+    <keyword type="constant" name="GST_VIDEO_DITHER_FLAG_NONE" link="gst-plugins-base-libs-GstVideoDither.html#GST-VIDEO-DITHER-FLAG-NONE:CAPS"/>
+    <keyword type="constant" name="GST_VIDEO_DITHER_FLAG_INTERLACED" link="gst-plugins-base-libs-GstVideoDither.html#GST-VIDEO-DITHER-FLAG-INTERLACED:CAPS"/>
+    <keyword type="constant" name="GST_VIDEO_DITHER_FLAG_QUANTIZE" link="gst-plugins-base-libs-GstVideoDither.html#GST-VIDEO-DITHER-FLAG-QUANTIZE:CAPS"/>
+    <keyword type="constant" name="GST_VIDEO_DITHER_NONE" link="gst-plugins-base-libs-GstVideoDither.html#GST-VIDEO-DITHER-NONE:CAPS"/>
+    <keyword type="constant" name="GST_VIDEO_DITHER_VERTERR" link="gst-plugins-base-libs-GstVideoDither.html#GST-VIDEO-DITHER-VERTERR:CAPS"/>
+    <keyword type="constant" name="GST_VIDEO_DITHER_FLOYD_STEINBERG" link="gst-plugins-base-libs-GstVideoDither.html#GST-VIDEO-DITHER-FLOYD-STEINBERG:CAPS"/>
+    <keyword type="constant" name="GST_VIDEO_DITHER_SIERRA_LITE" link="gst-plugins-base-libs-GstVideoDither.html#GST-VIDEO-DITHER-SIERRA-LITE:CAPS"/>
+    <keyword type="constant" name="GST_VIDEO_DITHER_BAYER" link="gst-plugins-base-libs-GstVideoDither.html#GST-VIDEO-DITHER-BAYER:CAPS"/>
+    <keyword type="constant" name="GST_VIDEO_CHROMA_SITE_UNKNOWN" link="gst-plugins-base-libs-GstVideoChroma.html#GST-VIDEO-CHROMA-SITE-UNKNOWN:CAPS"/>
+    <keyword type="constant" name="GST_VIDEO_CHROMA_SITE_NONE" link="gst-plugins-base-libs-GstVideoChroma.html#GST-VIDEO-CHROMA-SITE-NONE:CAPS"/>
+    <keyword type="constant" name="GST_VIDEO_CHROMA_SITE_H_COSITED" link="gst-plugins-base-libs-GstVideoChroma.html#GST-VIDEO-CHROMA-SITE-H-COSITED:CAPS"/>
+    <keyword type="constant" name="GST_VIDEO_CHROMA_SITE_V_COSITED" link="gst-plugins-base-libs-GstVideoChroma.html#GST-VIDEO-CHROMA-SITE-V-COSITED:CAPS"/>
+    <keyword type="constant" name="GST_VIDEO_CHROMA_SITE_ALT_LINE" link="gst-plugins-base-libs-GstVideoChroma.html#GST-VIDEO-CHROMA-SITE-ALT-LINE:CAPS"/>
+    <keyword type="constant" name="GST_VIDEO_CHROMA_SITE_COSITED" link="gst-plugins-base-libs-GstVideoChroma.html#GST-VIDEO-CHROMA-SITE-COSITED:CAPS"/>
+    <keyword type="constant" name="GST_VIDEO_CHROMA_SITE_JPEG" link="gst-plugins-base-libs-GstVideoChroma.html#GST-VIDEO-CHROMA-SITE-JPEG:CAPS"/>
+    <keyword type="constant" name="GST_VIDEO_CHROMA_SITE_MPEG2" link="gst-plugins-base-libs-GstVideoChroma.html#GST-VIDEO-CHROMA-SITE-MPEG2:CAPS"/>
+    <keyword type="constant" name="GST_VIDEO_CHROMA_SITE_DV" link="gst-plugins-base-libs-GstVideoChroma.html#GST-VIDEO-CHROMA-SITE-DV:CAPS"/>
+    <keyword type="constant" name="GST_VIDEO_CHROMA_FLAG_NONE" link="gst-plugins-base-libs-GstVideoChroma.html#GST-VIDEO-CHROMA-FLAG-NONE:CAPS"/>
+    <keyword type="constant" name="GST_VIDEO_CHROMA_FLAG_INTERLACED" link="gst-plugins-base-libs-GstVideoChroma.html#GST-VIDEO-CHROMA-FLAG-INTERLACED:CAPS"/>
+    <keyword type="constant" name="GST_VIDEO_CHROMA_METHOD_NEAREST" link="gst-plugins-base-libs-GstVideoChroma.html#GST-VIDEO-CHROMA-METHOD-NEAREST:CAPS"/>
+    <keyword type="constant" name="GST_VIDEO_CHROMA_METHOD_LINEAR" link="gst-plugins-base-libs-GstVideoChroma.html#GST-VIDEO-CHROMA-METHOD-LINEAR:CAPS"/>
+    <keyword type="constant" name="GST_VIDEO_RESAMPLER_FLAG_NONE" link="gst-plugins-base-libs-GstVideoResampler.html#GST-VIDEO-RESAMPLER-FLAG-NONE:CAPS"/>
+    <keyword type="constant" name="GST_VIDEO_RESAMPLER_METHOD_NEAREST" link="gst-plugins-base-libs-GstVideoResampler.html#GST-VIDEO-RESAMPLER-METHOD-NEAREST:CAPS"/>
+    <keyword type="constant" name="GST_VIDEO_RESAMPLER_METHOD_LINEAR" link="gst-plugins-base-libs-GstVideoResampler.html#GST-VIDEO-RESAMPLER-METHOD-LINEAR:CAPS"/>
+    <keyword type="constant" name="GST_VIDEO_RESAMPLER_METHOD_CUBIC" link="gst-plugins-base-libs-GstVideoResampler.html#GST-VIDEO-RESAMPLER-METHOD-CUBIC:CAPS"/>
+    <keyword type="constant" name="GST_VIDEO_RESAMPLER_METHOD_SINC" link="gst-plugins-base-libs-GstVideoResampler.html#GST-VIDEO-RESAMPLER-METHOD-SINC:CAPS"/>
+    <keyword type="constant" name="GST_VIDEO_RESAMPLER_METHOD_LANCZOS" link="gst-plugins-base-libs-GstVideoResampler.html#GST-VIDEO-RESAMPLER-METHOD-LANCZOS:CAPS"/>
+    <keyword type="constant" name="GST_VIDEO_SCALER_FLAG_NONE" link="gst-plugins-base-libs-GstVideoScaler.html#GST-VIDEO-SCALER-FLAG-NONE:CAPS"/>
+    <keyword type="constant" name="GST_VIDEO_SCALER_FLAG_INTERLACED" link="gst-plugins-base-libs-GstVideoScaler.html#GST-VIDEO-SCALER-FLAG-INTERLACED:CAPS"/>
+    <keyword type="constant" name="GST_COLOR_BALANCE_HARDWARE" link="gst-plugins-base-libs-gstcolorbalance.html#GST-COLOR-BALANCE-HARDWARE:CAPS"/>
+    <keyword type="constant" name="GST_COLOR_BALANCE_SOFTWARE" link="gst-plugins-base-libs-gstcolorbalance.html#GST-COLOR-BALANCE-SOFTWARE:CAPS"/>
+    <keyword type="constant" name="GST_VIDEO_CODEC_FRAME_FLAG_DECODE_ONLY" link="gst-plugins-base-libs-gstvideoutils.html#GST-VIDEO-CODEC-FRAME-FLAG-DECODE-ONLY:CAPS"/>
+    <keyword type="constant" name="GST_VIDEO_CODEC_FRAME_FLAG_SYNC_POINT" link="gst-plugins-base-libs-gstvideoutils.html#GST-VIDEO-CODEC-FRAME-FLAG-SYNC-POINT:CAPS"/>
+    <keyword type="constant" name="GST_VIDEO_CODEC_FRAME_FLAG_FORCE_KEYFRAME" link="gst-plugins-base-libs-gstvideoutils.html#GST-VIDEO-CODEC-FRAME-FLAG-FORCE-KEYFRAME:CAPS"/>
+    <keyword type="constant" name="GST_VIDEO_CODEC_FRAME_FLAG_FORCE_KEYFRAME_HEADERS" link="gst-plugins-base-libs-gstvideoutils.html#GST-VIDEO-CODEC-FRAME-FLAG-FORCE-KEYFRAME-HEADERS:CAPS"/>
+    <keyword type="constant" name="GST_NAVIGATION_COMMAND_INVALID" link="gst-plugins-base-libs-gstnavigation.html#GST-NAVIGATION-COMMAND-INVALID:CAPS"/>
+    <keyword type="constant" name="GST_NAVIGATION_COMMAND_MENU1" link="gst-plugins-base-libs-gstnavigation.html#GST-NAVIGATION-COMMAND-MENU1:CAPS"/>
+    <keyword type="constant" name="GST_NAVIGATION_COMMAND_MENU2" link="gst-plugins-base-libs-gstnavigation.html#GST-NAVIGATION-COMMAND-MENU2:CAPS"/>
+    <keyword type="constant" name="GST_NAVIGATION_COMMAND_MENU3" link="gst-plugins-base-libs-gstnavigation.html#GST-NAVIGATION-COMMAND-MENU3:CAPS"/>
+    <keyword type="constant" name="GST_NAVIGATION_COMMAND_MENU4" link="gst-plugins-base-libs-gstnavigation.html#GST-NAVIGATION-COMMAND-MENU4:CAPS"/>
+    <keyword type="constant" name="GST_NAVIGATION_COMMAND_MENU5" link="gst-plugins-base-libs-gstnavigation.html#GST-NAVIGATION-COMMAND-MENU5:CAPS"/>
+    <keyword type="constant" name="GST_NAVIGATION_COMMAND_MENU6" link="gst-plugins-base-libs-gstnavigation.html#GST-NAVIGATION-COMMAND-MENU6:CAPS"/>
+    <keyword type="constant" name="GST_NAVIGATION_COMMAND_MENU7" link="gst-plugins-base-libs-gstnavigation.html#GST-NAVIGATION-COMMAND-MENU7:CAPS"/>
+    <keyword type="constant" name="GST_NAVIGATION_COMMAND_LEFT" link="gst-plugins-base-libs-gstnavigation.html#GST-NAVIGATION-COMMAND-LEFT:CAPS"/>
+    <keyword type="constant" name="GST_NAVIGATION_COMMAND_RIGHT" link="gst-plugins-base-libs-gstnavigation.html#GST-NAVIGATION-COMMAND-RIGHT:CAPS"/>
+    <keyword type="constant" name="GST_NAVIGATION_COMMAND_UP" link="gst-plugins-base-libs-gstnavigation.html#GST-NAVIGATION-COMMAND-UP:CAPS"/>
+    <keyword type="constant" name="GST_NAVIGATION_COMMAND_DOWN" link="gst-plugins-base-libs-gstnavigation.html#GST-NAVIGATION-COMMAND-DOWN:CAPS"/>
+    <keyword type="constant" name="GST_NAVIGATION_COMMAND_ACTIVATE" link="gst-plugins-base-libs-gstnavigation.html#GST-NAVIGATION-COMMAND-ACTIVATE:CAPS"/>
+    <keyword type="constant" name="GST_NAVIGATION_COMMAND_PREV_ANGLE" link="gst-plugins-base-libs-gstnavigation.html#GST-NAVIGATION-COMMAND-PREV-ANGLE:CAPS"/>
+    <keyword type="constant" name="GST_NAVIGATION_COMMAND_NEXT_ANGLE" link="gst-plugins-base-libs-gstnavigation.html#GST-NAVIGATION-COMMAND-NEXT-ANGLE:CAPS"/>
+    <keyword type="constant" name="GST_NAVIGATION_EVENT_INVALID" link="gst-plugins-base-libs-gstnavigation.html#GST-NAVIGATION-EVENT-INVALID:CAPS"/>
+    <keyword type="constant" name="GST_NAVIGATION_EVENT_KEY_PRESS" link="gst-plugins-base-libs-gstnavigation.html#GST-NAVIGATION-EVENT-KEY-PRESS:CAPS"/>
+    <keyword type="constant" name="GST_NAVIGATION_EVENT_KEY_RELEASE" link="gst-plugins-base-libs-gstnavigation.html#GST-NAVIGATION-EVENT-KEY-RELEASE:CAPS"/>
+    <keyword type="constant" name="GST_NAVIGATION_EVENT_MOUSE_BUTTON_PRESS" link="gst-plugins-base-libs-gstnavigation.html#GST-NAVIGATION-EVENT-MOUSE-BUTTON-PRESS:CAPS"/>
+    <keyword type="constant" name="GST_NAVIGATION_EVENT_MOUSE_BUTTON_RELEASE" link="gst-plugins-base-libs-gstnavigation.html#GST-NAVIGATION-EVENT-MOUSE-BUTTON-RELEASE:CAPS"/>
+    <keyword type="constant" name="GST_NAVIGATION_EVENT_MOUSE_MOVE" link="gst-plugins-base-libs-gstnavigation.html#GST-NAVIGATION-EVENT-MOUSE-MOVE:CAPS"/>
+    <keyword type="constant" name="GST_NAVIGATION_EVENT_COMMAND" link="gst-plugins-base-libs-gstnavigation.html#GST-NAVIGATION-EVENT-COMMAND:CAPS"/>
+    <keyword type="constant" name="GST_NAVIGATION_MESSAGE_INVALID" link="gst-plugins-base-libs-gstnavigation.html#GST-NAVIGATION-MESSAGE-INVALID:CAPS"/>
+    <keyword type="constant" name="GST_NAVIGATION_MESSAGE_MOUSE_OVER" link="gst-plugins-base-libs-gstnavigation.html#GST-NAVIGATION-MESSAGE-MOUSE-OVER:CAPS"/>
+    <keyword type="constant" name="GST_NAVIGATION_MESSAGE_COMMANDS_CHANGED" link="gst-plugins-base-libs-gstnavigation.html#GST-NAVIGATION-MESSAGE-COMMANDS-CHANGED:CAPS"/>
+    <keyword type="constant" name="GST_NAVIGATION_MESSAGE_ANGLES_CHANGED" link="gst-plugins-base-libs-gstnavigation.html#GST-NAVIGATION-MESSAGE-ANGLES-CHANGED:CAPS"/>
+    <keyword type="constant" name="GST_NAVIGATION_MESSAGE_EVENT" link="gst-plugins-base-libs-gstnavigation.html#GST-NAVIGATION-MESSAGE-EVENT:CAPS"/>
+    <keyword type="constant" name="GST_NAVIGATION_QUERY_INVALID" link="gst-plugins-base-libs-gstnavigation.html#GST-NAVIGATION-QUERY-INVALID:CAPS"/>
+    <keyword type="constant" name="GST_NAVIGATION_QUERY_COMMANDS" link="gst-plugins-base-libs-gstnavigation.html#GST-NAVIGATION-QUERY-COMMANDS:CAPS"/>
+    <keyword type="constant" name="GST_NAVIGATION_QUERY_ANGLES" link="gst-plugins-base-libs-gstnavigation.html#GST-NAVIGATION-QUERY-ANGLES:CAPS"/>
   </functions>
 </book>
diff --git a/docs/libs/html/gst-plugins-base-libs-GstVideoChroma.html b/docs/libs/html/gst-plugins-base-libs-GstVideoChroma.html
new file mode 100644
index 0000000..7229453
--- /dev/null
+++ b/docs/libs/html/gst-plugins-base-libs-GstVideoChroma.html
@@ -0,0 +1,509 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>GstVideoChroma: GStreamer Base 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 Base Plugins 1.0 Library Reference Manual">
+<link rel="up" href="gstreamer-video.html" title="Video Library">
+<link rel="prev" href="gst-plugins-base-libs-GstVideoDither.html" title="GstVideoDither">
+<link rel="next" href="gst-plugins-base-libs-GstVideoResampler.html" title="GstVideoResampler">
+<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-base-libs-GstVideoChroma.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="gstreamer-video.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
+<td><a accesskey="p" href="gst-plugins-base-libs-GstVideoDither.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
+<td><a accesskey="n" href="gst-plugins-base-libs-GstVideoResampler.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
+</tr></table>
+<div class="refentry">
+<a name="gst-plugins-base-libs-GstVideoChroma"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="gst-plugins-base-libs-GstVideoChroma.top_of_page"></a>GstVideoChroma</span></h2>
+<p>GstVideoChroma — Functions and utility object for operating on chroma video planes</p>
+</td>
+<td class="gallery_image" valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsect1">
+<a name="gst-plugins-base-libs-GstVideoChroma.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="gst-plugins-base-libs-GstVideoChroma.html#GstVideoChromaSite" title="enum GstVideoChromaSite"><span class="returnvalue">GstVideoChromaSite</span></a>
+</td>
+<td class="function_name">
+<a class="link" href="gst-plugins-base-libs-GstVideoChroma.html#gst-video-chroma-from-string" title="gst_video_chroma_from_string ()">gst_video_chroma_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-base-libs-GstVideoChroma.html#gst-video-chroma-to-string" title="gst_video_chroma_to_string ()">gst_video_chroma_to_string</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-base-libs-GstVideoChroma.html#gst-video-chroma-resample" title="gst_video_chroma_resample ()">gst_video_chroma_resample</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-base-libs-GstVideoChroma.html#gst-video-chroma-resample-free" title="gst_video_chroma_resample_free ()">gst_video_chroma_resample_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-base-libs-GstVideoChroma.html#gst-video-chroma-resample-get-info" title="gst_video_chroma_resample_get_info ()">gst_video_chroma_resample_get_info</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a class="link" href="gst-plugins-base-libs-GstVideoChroma.html#GstVideoChromaResample" title="GstVideoChromaResample"><span class="returnvalue">GstVideoChromaResample</span></a> *
+</td>
+<td class="function_name">
+<a class="link" href="gst-plugins-base-libs-GstVideoChroma.html#gst-video-chroma-resample-new" title="gst_video_chroma_resample_new ()">gst_video_chroma_resample_new</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-libs-GstVideoChroma.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-base-libs-GstVideoChroma.html#GstVideoChromaSite" title="enum GstVideoChromaSite">GstVideoChromaSite</a></td>
+</tr>
+<tr>
+<td class="datatype_keyword">enum</td>
+<td class="function_name"><a class="link" href="gst-plugins-base-libs-GstVideoChroma.html#GstVideoChromaFlags" title="enum GstVideoChromaFlags">GstVideoChromaFlags</a></td>
+</tr>
+<tr>
+<td class="datatype_keyword">enum</td>
+<td class="function_name"><a class="link" href="gst-plugins-base-libs-GstVideoChroma.html#GstVideoChromaMethod" title="enum GstVideoChromaMethod">GstVideoChromaMethod</a></td>
+</tr>
+<tr>
+<td class="datatype_keyword"> </td>
+<td class="function_name"><a class="link" href="gst-plugins-base-libs-GstVideoChroma.html#GstVideoChromaResample" title="GstVideoChromaResample">GstVideoChromaResample</a></td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-libs-GstVideoChroma.includes"></a><h2>Includes</h2>
+<pre class="synopsis">#include &lt;gst/video/video-chroma.h&gt;
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-libs-GstVideoChroma.description"></a><h2>Description</h2>
+<p>The functions <a class="link" href="gst-plugins-base-libs-GstVideoChroma.html#gst-video-chroma-from-string" title="gst_video_chroma_from_string ()"><code class="function">gst_video_chroma_from_string()</code></a> and <a class="link" href="gst-plugins-base-libs-GstVideoChroma.html#gst-video-chroma-to-string" title="gst_video_chroma_to_string ()"><code class="function">gst_video_chroma_to_string()</code></a> convert
+between <a class="link" href="gst-plugins-base-libs-GstVideoChroma.html#GstVideoChromaSite" title="enum GstVideoChromaSite"><span class="type">GstVideoChromaSite</span></a> and string descriptions.</p>
+<p><a class="link" href="gst-plugins-base-libs-GstVideoChroma.html#GstVideoChromaResample" title="GstVideoChromaResample"><span class="type">GstVideoChromaResample</span></a> is a utility object for resampling chroma planes
+and converting between different chroma sampling sitings.</p>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-libs-GstVideoChroma.functions_details"></a><h2>Functions</h2>
+<div class="refsect2">
+<a name="gst-video-chroma-from-string"></a><h3>gst_video_chroma_from_string ()</h3>
+<pre class="programlisting"><a class="link" href="gst-plugins-base-libs-GstVideoChroma.html#GstVideoChromaSite" title="enum GstVideoChromaSite"><span class="returnvalue">GstVideoChromaSite</span></a>
+gst_video_chroma_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> *s</code></em>);</pre>
+<p>Convert <em class="parameter"><code>s</code></em>
+ to a <a class="link" href="gst-plugins-base-libs-GstVideoChroma.html#GstVideoChromaSite" title="enum GstVideoChromaSite"><span class="type">GstVideoChromaSite</span></a></p>
+<div class="refsect3">
+<a name="id-1.2.15.8.7.2.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>s</p></td>
+<td class="parameter_description"><p>a chromasite string</p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="id-1.2.15.8.7.2.6"></a><h4>Returns</h4>
+<p> a <a class="link" href="gst-plugins-base-libs-GstVideoChroma.html#GstVideoChromaSite" title="enum GstVideoChromaSite"><span class="type">GstVideoChromaSite</span></a> or <a class="link" href="gst-plugins-base-libs-GstVideoChroma.html#GST-VIDEO-CHROMA-SITE-UNKNOWN:CAPS"><code class="literal">GST_VIDEO_CHROMA_SITE_UNKNOWN</code></a> when <em class="parameter"><code>s</code></em>
+does
+not contain a valid chroma description.</p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-video-chroma-to-string"></a><h3>gst_video_chroma_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_video_chroma_to_string (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-GstVideoChroma.html#GstVideoChromaSite" title="enum GstVideoChromaSite"><span class="type">GstVideoChromaSite</span></a> site</code></em>);</pre>
+<p>Converts <em class="parameter"><code>site</code></em>
+ to its string representation.</p>
+<div class="refsect3">
+<a name="id-1.2.15.8.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>site</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gst-plugins-base-libs-GstVideoChroma.html#GstVideoChromaSite" title="enum GstVideoChromaSite"><span class="type">GstVideoChromaSite</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="id-1.2.15.8.7.3.6"></a><h4>Returns</h4>
+<p> a string describing <em class="parameter"><code>site</code></em>
+.</p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-video-chroma-resample"></a><h3>gst_video_chroma_resample ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+gst_video_chroma_resample (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-GstVideoChroma.html#GstVideoChromaResample" title="GstVideoChromaResample"><span class="type">GstVideoChromaResample</span></a> *resample</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> lines[]</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>);</pre>
+<p>Perform resampling of <em class="parameter"><code>width</code></em>
+ chroma pixels in <em class="parameter"><code>lines</code></em>
+.</p>
+<div class="refsect3">
+<a name="id-1.2.15.8.7.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>resample</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gst-plugins-base-libs-GstVideoChroma.html#GstVideoChromaResample" title="GstVideoChromaResample"><span class="type">GstVideoChromaResample</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>lines</p></td>
+<td class="parameter_description"><p>pixel lines</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>width</p></td>
+<td class="parameter_description"><p>the number of pixels on one line</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-video-chroma-resample-free"></a><h3>gst_video_chroma_resample_free ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+gst_video_chroma_resample_free (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-GstVideoChroma.html#GstVideoChromaResample" title="GstVideoChromaResample"><span class="type">GstVideoChromaResample</span></a> *resample</code></em>);</pre>
+<p>Free <em class="parameter"><code>resample</code></em>
+</p>
+<div class="refsect3">
+<a name="id-1.2.15.8.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>resample</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gst-plugins-base-libs-GstVideoChroma.html#GstVideoChromaResample" title="GstVideoChromaResample"><span class="type">GstVideoChromaResample</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-video-chroma-resample-get-info"></a><h3>gst_video_chroma_resample_get_info ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+gst_video_chroma_resample_get_info (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-GstVideoChroma.html#GstVideoChromaResample" title="GstVideoChromaResample"><span class="type">GstVideoChromaResample</span></a> *resample</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> *n_lines</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> *offset</code></em>);</pre>
+<p>The resampler must be fed <em class="parameter"><code>n_lines</code></em>
+ at a time. The first line should be
+at <em class="parameter"><code>offset</code></em>
+.</p>
+<div class="refsect3">
+<a name="id-1.2.15.8.7.6.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>resample</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gst-plugins-base-libs-GstVideoChroma.html#GstVideoChromaResample" title="GstVideoChromaResample"><span class="type">GstVideoChromaResample</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>n_lines</p></td>
+<td class="parameter_description"><p>the number of input lines</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>offset</p></td>
+<td class="parameter_description"><p>the first line</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-video-chroma-resample-new"></a><h3>gst_video_chroma_resample_new ()</h3>
+<pre class="programlisting"><a class="link" href="gst-plugins-base-libs-GstVideoChroma.html#GstVideoChromaResample" title="GstVideoChromaResample"><span class="returnvalue">GstVideoChromaResample</span></a> *
+gst_video_chroma_resample_new (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-GstVideoChroma.html#GstVideoChromaMethod" title="enum GstVideoChromaMethod"><span class="type">GstVideoChromaMethod</span></a> method</code></em>,
+                               <em class="parameter"><code><a class="link" href="gst-plugins-base-libs-GstVideoChroma.html#GstVideoChromaSite" title="enum GstVideoChromaSite"><span class="type">GstVideoChromaSite</span></a> site</code></em>,
+                               <em class="parameter"><code><a class="link" href="gst-plugins-base-libs-GstVideoChroma.html#GstVideoChromaFlags" title="enum GstVideoChromaFlags"><span class="type">GstVideoChromaFlags</span></a> flags</code></em>,
+                               <em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstvideo.html#GstVideoFormat" title="enum GstVideoFormat"><span class="type">GstVideoFormat</span></a> format</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> h_factor</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> v_factor</code></em>);</pre>
+<p>Create a new resampler object for the given parameters. When <em class="parameter"><code>h_factor</code></em>
+ or
+<em class="parameter"><code>v_factor</code></em>
+ is &gt; 0, upsampling will be used, otherwise subsampling is
+performed.</p>
+<p><span class="annotation">[<acronym title="Exposed in C code, not necessarily available in other languages."><span class="acronym">skip</span></acronym>]</span></p>
+<div class="refsect3">
+<a name="id-1.2.15.8.7.7.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>method</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gst-plugins-base-libs-GstVideoChroma.html#GstVideoChromaMethod" title="enum GstVideoChromaMethod"><span class="type">GstVideoChromaMethod</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>site</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gst-plugins-base-libs-GstVideoChroma.html#GstVideoChromaSite" title="enum GstVideoChromaSite"><span class="type">GstVideoChromaSite</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>flags</p></td>
+<td class="parameter_description"><p><a class="link" href="gst-plugins-base-libs-GstVideoChroma.html#GstVideoChromaFlags" title="enum GstVideoChromaFlags"><span class="type">GstVideoChromaFlags</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>format</p></td>
+<td class="parameter_description"><p>the <a class="link" href="gst-plugins-base-libs-gstvideo.html#GstVideoFormat" title="enum GstVideoFormat"><span class="type">GstVideoFormat</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>h_factor</p></td>
+<td class="parameter_description"><p>horizontal resampling factor</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>v_factor</p></td>
+<td class="parameter_description"><p>vertical resampling factor</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="id-1.2.15.8.7.7.7"></a><h4>Returns</h4>
+<p> a new <a class="link" href="gst-plugins-base-libs-GstVideoChroma.html#GstVideoChromaResample" title="GstVideoChromaResample"><span class="type">GstVideoChromaResample</span></a> that should be freed with
+<a class="link" href="gst-plugins-base-libs-GstVideoChroma.html#gst-video-chroma-resample-free" title="gst_video_chroma_resample_free ()"><code class="function">gst_video_chroma_resample_free()</code></a> after usage.</p>
+</div>
+</div>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-libs-GstVideoChroma.other_details"></a><h2>Types and Values</h2>
+<div class="refsect2">
+<a name="GstVideoChromaSite"></a><h3>enum GstVideoChromaSite</h3>
+<p>Various Chroma sitings.</p>
+<div class="refsect3">
+<a name="id-1.2.15.8.8.2.4"></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-VIDEO-CHROMA-SITE-UNKNOWN:CAPS"></a>GST_VIDEO_CHROMA_SITE_UNKNOWN</p></td>
+<td class="enum_member_description">
+<p>unknown cositing</p>
+</td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-VIDEO-CHROMA-SITE-NONE:CAPS"></a>GST_VIDEO_CHROMA_SITE_NONE</p></td>
+<td class="enum_member_description">
+<p>no cositing</p>
+</td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-VIDEO-CHROMA-SITE-H-COSITED:CAPS"></a>GST_VIDEO_CHROMA_SITE_H_COSITED</p></td>
+<td class="enum_member_description">
+<p>chroma is horizontally cosited</p>
+</td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-VIDEO-CHROMA-SITE-V-COSITED:CAPS"></a>GST_VIDEO_CHROMA_SITE_V_COSITED</p></td>
+<td class="enum_member_description">
+<p>chroma is vertically cosited</p>
+</td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-VIDEO-CHROMA-SITE-ALT-LINE:CAPS"></a>GST_VIDEO_CHROMA_SITE_ALT_LINE</p></td>
+<td class="enum_member_description">
+<p>choma samples are sited on alternate lines</p>
+</td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-VIDEO-CHROMA-SITE-COSITED:CAPS"></a>GST_VIDEO_CHROMA_SITE_COSITED</p></td>
+<td class="enum_member_description">
+<p>chroma samples cosited with luma samples</p>
+</td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-VIDEO-CHROMA-SITE-JPEG:CAPS"></a>GST_VIDEO_CHROMA_SITE_JPEG</p></td>
+<td class="enum_member_description">
+<p>jpeg style cositing, also for mpeg1 and mjpeg</p>
+</td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-VIDEO-CHROMA-SITE-MPEG2:CAPS"></a>GST_VIDEO_CHROMA_SITE_MPEG2</p></td>
+<td class="enum_member_description">
+<p>mpeg2 style cositing</p>
+</td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-VIDEO-CHROMA-SITE-DV:CAPS"></a>GST_VIDEO_CHROMA_SITE_DV</p></td>
+<td class="enum_member_description">
+<p>DV style cositing</p>
+</td>
+<td class="enum_member_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstVideoChromaFlags"></a><h3>enum GstVideoChromaFlags</h3>
+<p>Extra flags that influence the result from <a class="link" href="gst-plugins-base-libs-GstVideoChroma.html#gst-video-chroma-resample-new" title="gst_video_chroma_resample_new ()"><code class="function">gst_video_chroma_resample_new()</code></a>.</p>
+<div class="refsect3">
+<a name="id-1.2.15.8.8.3.4"></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-VIDEO-CHROMA-FLAG-NONE:CAPS"></a>GST_VIDEO_CHROMA_FLAG_NONE</p></td>
+<td class="enum_member_description">
+<p>no flags</p>
+</td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-VIDEO-CHROMA-FLAG-INTERLACED:CAPS"></a>GST_VIDEO_CHROMA_FLAG_INTERLACED</p></td>
+<td class="enum_member_description">
+<p>the input is interlaced</p>
+</td>
+<td class="enum_member_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstVideoChromaMethod"></a><h3>enum GstVideoChromaMethod</h3>
+<p>Different subsampling and upsampling methods</p>
+<div class="refsect3">
+<a name="id-1.2.15.8.8.4.4"></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-VIDEO-CHROMA-METHOD-NEAREST:CAPS"></a>GST_VIDEO_CHROMA_METHOD_NEAREST</p></td>
+<td class="enum_member_description">
+<p>Duplicates the chroma samples when
+   upsampling and drops when subsampling</p>
+</td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-VIDEO-CHROMA-METHOD-LINEAR:CAPS"></a>GST_VIDEO_CHROMA_METHOD_LINEAR</p></td>
+<td class="enum_member_description">
+<p>Uses linear interpolation to reconstruct
+   missing chroma and averaging to subsample</p>
+</td>
+<td class="enum_member_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstVideoChromaResample"></a><h3>GstVideoChromaResample</h3>
+<pre class="programlisting">typedef struct _GstVideoChromaResample GstVideoChromaResample;</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/libs/html/gst-plugins-base-libs-GstVideoDecoder.html b/docs/libs/html/gst-plugins-base-libs-GstVideoDecoder.html
index ceaf27e..64f2ddb 100644
--- a/docs/libs/html/gst-plugins-base-libs-GstVideoDecoder.html
+++ b/docs/libs/html/gst-plugins-base-libs-GstVideoDecoder.html
@@ -2,13 +2,13 @@
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>GStreamer Base Plugins 1.0 Library Reference Manual: GstVideoDecoder</title>
+<title>GstVideoDecoder: GStreamer Base 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 Base Plugins 1.0 Library Reference Manual">
 <link rel="up" href="gstreamer-video.html" title="Video Library">
 <link rel="prev" href="gst-plugins-base-libs-gstvideooverlay.html" title="gstvideooverlay">
 <link rel="next" href="gst-plugins-base-libs-GstVideoEncoder.html" title="GstVideoEncoder">
-<meta name="generator" content="GTK-Doc V1.21 (XML mode)">
+<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">
@@ -313,6 +313,14 @@
 <a class="link" href="gst-plugins-base-libs-GstVideoDecoder.html#gst-video-decoder-merge-tags" title="gst_video_decoder_merge_tags ()">gst_video_decoder_merge_tags</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-base-libs-GstVideoDecoder.html#gst-video-decoder-proxy-getcaps" title="gst_video_decoder_proxy_getcaps ()">gst_video_decoder_proxy_getcaps</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
 </tbody>
 </table></div>
 </div>
@@ -355,7 +363,8 @@
 <a name="gst-plugins-base-libs-GstVideoDecoder.description"></a><h2>Description</h2>
 <p>This base class is for video decoders turning encoded data into raw video
 frames.</p>
-<p>The GstVideoDecoder base class and derived subclasses should cooperate as follows:</p>
+<p>The GstVideoDecoder base class and derived subclasses should cooperate as
+follows:</p>
 <div class="orderedlist"><ol class="orderedlist" type="1">
 <li class="listitem"><div class="itemizedlist">
 <p class="title"><b>Configuration</b></p>
@@ -372,7 +381,8 @@
     parameters require reconfiguration.
   </p></li>
 <li class="listitem"><p>
-    Incoming data buffers are processed as needed, described in Data Processing below.
+    Incoming data buffers are processed as needed, described in Data
+    Processing below.
   </p></li>
 <li class="listitem"><p>
     GstVideoDecoder calls <em class="parameter"><code>stop</code></em> at end of all processing.
@@ -388,15 +398,17 @@
       corresponding to and referred to as 'frames'.
     </p></li>
 <li class="listitem"><p>
-      Each input frame is provided in turn to the subclass' <em class="parameter"><code>handle_frame</code></em> callback.
+      Each input frame is provided in turn to the subclass' <em class="parameter"><code>handle_frame</code></em>
+      callback.
       The ownership of the frame is given to the <em class="parameter"><code>handle_frame</code></em> callback.
     </p></li>
 <li class="listitem"><p>
       If codec processing results in decoded data, the subclass should call
       <em class="parameter"><code>gst_video_decoder_finish_frame</code></em> to have decoded data pushed.
-      downstream. Otherwise, the subclass must call <em class="parameter"><code>gst_video_decoder_drop_frame</code></em>, to
-      allow the base class to do timestamp and offset tracking, and possibly to
-      requeue the frame for a later attempt in the case of reverse playback.
+      downstream. Otherwise, the subclass must call
+      <em class="parameter"><code>gst_video_decoder_drop_frame</code></em>, to allow the base class to do timestamp
+      and offset tracking, and possibly to requeue the frame for a later
+      attempt in the case of reverse playback.
     </p></li>
 </ul>
 </div></li>
@@ -413,19 +425,20 @@
 <li class="listitem"><div class="itemizedlist">
 <p class="title"><b>Seeking/Flushing</b></p>
 <ul class="itemizedlist" style="list-style-type: circle; "><li class="listitem"><p>
-  When the pipeline is seeked or otherwise flushed, the subclass is informed via a call
-  to its <em class="parameter"><code>reset</code></em> callback, with the hard parameter set to true. This indicates the
-  subclass should drop any internal data queues and timestamps and prepare for a fresh
-  set of buffers to arrive for parsing and decoding.
+  When the pipeline is seeked or otherwise flushed, the subclass is
+  informed via a call to its <em class="parameter"><code>reset</code></em> callback, with the hard parameter
+  set to true. This indicates the subclass should drop any internal data
+  queues and timestamps and prepare for a fresh set of buffers to arrive
+  for parsing and decoding.
     </p></li></ul>
 </div></li>
 <li class="listitem"><div class="itemizedlist">
 <p class="title"><b>End Of Stream</b></p>
 <ul class="itemizedlist" style="list-style-type: circle; "><li class="listitem"><p>
-  At end-of-stream, the subclass <em class="parameter"><code>parse</code></em> function may be called some final times with the 
-  at_eos parameter set to true, indicating that the element should not expect any more data
-  to be arriving, and it should parse and remaining frames and call
-  <a class="link" href="gst-plugins-base-libs-GstVideoDecoder.html#gst-video-decoder-have-frame" title="gst_video_decoder_have_frame ()"><code class="function">gst_video_decoder_have_frame()</code></a> if possible.
+  At end-of-stream, the subclass <em class="parameter"><code>parse</code></em> function may be called some final
+  times with the at_eos parameter set to true, indicating that the element
+  should not expect any more data to be arriving, and it should parse and
+  remaining frames and call <a class="link" href="gst-plugins-base-libs-GstVideoDecoder.html#gst-video-decoder-have-frame" title="gst_video_decoder_have_frame ()"><code class="function">gst_video_decoder_have_frame()</code></a> if possible.
     </p></li></ul>
 </div></li>
 </ul>
@@ -450,24 +463,28 @@
 approach caters for seeking and duration reporting using estimated input
 bitrates. To enable it, a subclass should call
 <em class="parameter"><code>gst_video_decoder_set_estimate_rate</code></em>
- to enable handling of incoming byte-streams.</p>
+ to enable handling of incoming
+byte-streams.</p>
 <p>The base class provides some support for reverse playback, in particular
 in case incoming data is not packetized or upstream does not provide
-fragments on keyframe boundaries.  However, the subclass should then be prepared
-for the parsing and frame processing stage to occur separately (in normal
-forward processing, the latter immediately follows the former),
-The subclass also needs to ensure the parsing stage properly marks keyframes,
-unless it knows the upstream elements will do so properly for incoming data.</p>
+fragments on keyframe boundaries.  However, the subclass should then be
+prepared for the parsing and frame processing stage to occur separately
+(in normal forward processing, the latter immediately follows the former),
+The subclass also needs to ensure the parsing stage properly marks
+keyframes, unless it knows the upstream elements will do so properly for
+incoming data.</p>
 <p>The bare minimum that a functional subclass needs to implement is:</p>
 <div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
 <li class="listitem"><p>Provide pad templates</p></li>
 <li class="listitem"><p>
-     Inform the base class of output caps via <em class="parameter"><code>gst_video_decoder_set_output_state</code></em>
+     Inform the base class of output caps via
+     <em class="parameter"><code>gst_video_decoder_set_output_state</code></em>
   </p></li>
 <li class="listitem"><p>
      Parse input data, if it is not considered packetized from upstream
-     Data will be provided to <em class="parameter"><code>parse</code></em> which should invoke <em class="parameter"><code>gst_video_decoder_add_to_frame</code></em> and
-     <em class="parameter"><code>gst_video_decoder_have_frame</code></em> to separate the data belonging to each video frame.
+     Data will be provided to <em class="parameter"><code>parse</code></em> which should invoke
+     <em class="parameter"><code>gst_video_decoder_add_to_frame</code></em> and <em class="parameter"><code>gst_video_decoder_have_frame</code></em> to
+     separate the data belonging to each video frame.
   </p></li>
 <li class="listitem"><p>
      Accept data in <em class="parameter"><code>handle_frame</code></em> and provide decoded results to
@@ -490,7 +507,7 @@
  is set to the proper value to
 return to upstream/caller (indicating either GST_FLOW_ERROR or GST_FLOW_OK).</p>
 <div class="refsect3">
-<a name="id-1.2.15.12.6.2.5"></a><h4>Parameters</h4>
+<a name="id-1.2.15.16.6.2.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -546,7 +563,7 @@
 </pre>
 <p>Gives the pointer to the sink <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html"><span class="type">GstPad</span></a> object of the element.</p>
 <div class="refsect3">
-<a name="id-1.2.15.12.6.3.5"></a><h4>Parameters</h4>
+<a name="id-1.2.15.16.6.3.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -568,7 +585,7 @@
 </pre>
 <p>Gives the pointer to the source <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html"><span class="type">GstPad</span></a> object of the element.</p>
 <div class="refsect3">
-<a name="id-1.2.15.12.6.4.5"></a><h4>Parameters</h4>
+<a name="id-1.2.15.16.6.4.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -590,7 +607,7 @@
 </pre>
 <p>Obtain a lock to protect the decoder function from concurrent access.</p>
 <div class="refsect3">
-<a name="id-1.2.15.12.6.5.5"></a><h4>Parameters</h4>
+<a name="id-1.2.15.16.6.5.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -612,7 +629,7 @@
 </pre>
 <p>Release the lock that protects the decoder function from concurrent access.</p>
 <div class="refsect3">
-<a name="id-1.2.15.12.6.6.5"></a><h4>Parameters</h4>
+<a name="id-1.2.15.16.6.6.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -634,7 +651,7 @@
 </pre>
 <p>Gives the segment of the element.</p>
 <div class="refsect3">
-<a name="id-1.2.15.12.6.7.5"></a><h4>Parameters</h4>
+<a name="id-1.2.15.16.6.7.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -656,7 +673,7 @@
 </pre>
 <p>Gives the segment of the element.</p>
 <div class="refsect3">
-<a name="id-1.2.15.12.6.8.5"></a><h4>Parameters</h4>
+<a name="id-1.2.15.16.6.8.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -680,7 +697,7 @@
 <p>Removes next <em class="parameter"><code>n_bytes</code></em>
  of input data and adds it to currently parsed frame.</p>
 <div class="refsect3">
-<a name="id-1.2.15.12.6.9.5"></a><h4>Parameters</h4>
+<a name="id-1.2.15.16.6.9.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -714,7 +731,7 @@
 <p>You should use <a class="link" href="gst-plugins-base-libs-GstVideoDecoder.html#gst-video-decoder-allocate-output-frame" title="gst_video_decoder_allocate_output_frame ()"><code class="function">gst_video_decoder_allocate_output_frame()</code></a> instead of this
 function, if possible at all.</p>
 <div class="refsect3">
-<a name="id-1.2.15.12.6.10.6"></a><h4>Parameters</h4>
+<a name="id-1.2.15.16.6.10.6"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -729,7 +746,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.15.12.6.10.7"></a><h4>Returns</h4>
+<a name="id-1.2.15.16.6.10.7"></a><h4>Returns</h4>
 <p> allocated buffer, or NULL if no buffer could be
 allocated (e.g. when downstream is flushing or shutting down). </p>
 <p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p>
@@ -749,7 +766,7 @@
 <p>The buffer allocated here is owned by the frame and you should only
 keep references to the frame, not the buffer.</p>
 <div class="refsect3">
-<a name="id-1.2.15.12.6.11.6"></a><h4>Parameters</h4>
+<a name="id-1.2.15.16.6.11.6"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -771,9 +788,8 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.15.12.6.11.7"></a><h4>Returns</h4>
-<p> <code class="literal">GST_FLOW_OK</code> if an output buffer could be allocated</p>
-<p></p>
+<a name="id-1.2.15.16.6.11.7"></a><h4>Returns</h4>
+<p> <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html#GST-FLOW-OK:CAPS"><code class="literal">GST_FLOW_OK</code></a> if an output buffer could be allocated</p>
 </div>
 </div>
 <hr>
@@ -790,7 +806,7 @@
 <p>Unref the <em class="parameter"><code>allocator</code></em>
  after use it.</p>
 <div class="refsect3">
-<a name="id-1.2.15.12.6.12.6"></a><h4>Parameters</h4>
+<a name="id-1.2.15.16.6.12.6"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -826,7 +842,7 @@
 <pre class="programlisting"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstBufferPool.html"><span class="returnvalue">GstBufferPool</span></a> *
 gst_video_decoder_get_buffer_pool (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-GstVideoDecoder.html#GstVideoDecoder" title="struct GstVideoDecoder"><span class="type">GstVideoDecoder</span></a> *decoder</code></em>);</pre>
 <div class="refsect3">
-<a name="id-1.2.15.12.6.13.4"></a><h4>Parameters</h4>
+<a name="id-1.2.15.16.6.13.4"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -841,7 +857,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.15.12.6.13.5"></a><h4>Returns</h4>
+<a name="id-1.2.15.16.6.13.5"></a><h4>Returns</h4>
 <p> the instance of the <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstBufferPool.html"><span class="type">GstBufferPool</span></a> used
 by the decoder; free it after use it. </p>
 <p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p>
@@ -858,7 +874,7 @@
 case and posts a QoS message with the frame's details on the bus.
 In any case, the frame is considered finished and released.</p>
 <div class="refsect3">
-<a name="id-1.2.15.12.6.14.5"></a><h4>Parameters</h4>
+<a name="id-1.2.15.16.6.14.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -880,9 +896,8 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.15.12.6.14.6"></a><h4>Returns</h4>
+<a name="id-1.2.15.16.6.14.6"></a><h4>Returns</h4>
 <p> a <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html#GstFlowReturn"><span class="type">GstFlowReturn</span></a>, usually GST_FLOW_OK.</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -901,7 +916,7 @@
 considered read-only. This function will also change the metadata
 of the buffer.</p>
 <div class="refsect3">
-<a name="id-1.2.15.12.6.15.6"></a><h4>Parameters</h4>
+<a name="id-1.2.15.16.6.15.6"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -923,9 +938,8 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.15.12.6.15.7"></a><h4>Returns</h4>
+<a name="id-1.2.15.16.6.15.7"></a><h4>Returns</h4>
 <p> a <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html#GstFlowReturn"><span class="type">GstFlowReturn</span></a> resulting from sending data downstream</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -939,7 +953,7 @@
 without any processing other than removing it from list of pending frames,
 after which it is considered finished and released.</p>
 <div class="refsect3">
-<a name="id-1.2.15.12.6.16.5"></a><h4>Parameters</h4>
+<a name="id-1.2.15.16.6.16.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -960,7 +974,7 @@
 </tbody>
 </table></div>
 </div>
-<p class="since">Since 1.2.2</p>
+<p class="since">Since: 1.2.2</p>
 </div>
 <hr>
 <div class="refsect2">
@@ -971,7 +985,7 @@
 Unmark GST_PAD_FLAG_NEED_RECONFIGURE in any case. But mark it again if
 negotiate fails.</p>
 <div class="refsect3">
-<a name="id-1.2.15.12.6.17.5"></a><h4>Parameters</h4>
+<a name="id-1.2.15.16.6.17.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -986,9 +1000,8 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.15.12.6.17.6"></a><h4>Returns</h4>
+<a name="id-1.2.15.16.6.17.6"></a><h4>Returns</h4>
 <p> <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><span class="type">TRUE</span></a> if the negotiation succeeded, else <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><span class="type">FALSE</span></a>.</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -999,7 +1012,7 @@
                              <em class="parameter"><code><span class="type">int</span> frame_number</code></em>);</pre>
 <p>Get a pending unfinished <a class="link" href="gst-plugins-base-libs-gstvideoutils.html#GstVideoCodecFrame" title="struct GstVideoCodecFrame"><span class="type">GstVideoCodecFrame</span></a></p>
 <div class="refsect3">
-<a name="id-1.2.15.12.6.18.5"></a><h4>Parameters</h4>
+<a name="id-1.2.15.16.6.18.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1021,7 +1034,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.15.12.6.18.6"></a><h4>Returns</h4>
+<a name="id-1.2.15.16.6.18.6"></a><h4>Returns</h4>
 <p> pending unfinished <a class="link" href="gst-plugins-base-libs-gstvideoutils.html#GstVideoCodecFrame" title="struct GstVideoCodecFrame"><span class="type">GstVideoCodecFrame</span></a> identified by <em class="parameter"><code>frame_number</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>
@@ -1034,7 +1047,7 @@
 gst_video_decoder_get_frames (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-GstVideoDecoder.html#GstVideoDecoder" title="struct GstVideoDecoder"><span class="type">GstVideoDecoder</span></a> *decoder</code></em>);</pre>
 <p>Get all pending unfinished <a class="link" href="gst-plugins-base-libs-gstvideoutils.html#GstVideoCodecFrame" title="struct GstVideoCodecFrame"><span class="type">GstVideoCodecFrame</span></a></p>
 <div class="refsect3">
-<a name="id-1.2.15.12.6.19.5"></a><h4>Parameters</h4>
+<a name="id-1.2.15.16.6.19.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1049,7 +1062,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.15.12.6.19.6"></a><h4>Returns</h4>
+<a name="id-1.2.15.16.6.19.6"></a><h4>Returns</h4>
 <p> pending unfinished <a class="link" href="gst-plugins-base-libs-gstvideoutils.html#GstVideoCodecFrame" title="struct GstVideoCodecFrame"><span class="type">GstVideoCodecFrame</span></a>. </p>
 <p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>][<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> GstVideoCodecFrame]</span></p>
 </div>
@@ -1066,7 +1079,7 @@
 In particular, a negative result means decoding in time is no longer possible
 and should therefore occur as soon/skippy as possible.</p>
 <div class="refsect3">
-<a name="id-1.2.15.12.6.20.5"></a><h4>Parameters</h4>
+<a name="id-1.2.15.16.6.20.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1088,9 +1101,8 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.15.12.6.20.6"></a><h4>Returns</h4>
+<a name="id-1.2.15.16.6.20.6"></a><h4>Returns</h4>
 <p> max decoding time.</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -1099,7 +1111,7 @@
 <pre class="programlisting"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gint"><span class="returnvalue">gint</span></a>
 gst_video_decoder_get_max_errors (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-GstVideoDecoder.html#GstVideoDecoder" title="struct GstVideoDecoder"><span class="type">GstVideoDecoder</span></a> *dec</code></em>);</pre>
 <div class="refsect3">
-<a name="id-1.2.15.12.6.21.4"></a><h4>Parameters</h4>
+<a name="id-1.2.15.16.6.21.4"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1114,9 +1126,8 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.15.12.6.21.5"></a><h4>Returns</h4>
+<a name="id-1.2.15.16.6.21.5"></a><h4>Returns</h4>
 <p> currently configured decoder tolerated error count.</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -1126,7 +1137,7 @@
 gst_video_decoder_get_oldest_frame (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-GstVideoDecoder.html#GstVideoDecoder" title="struct GstVideoDecoder"><span class="type">GstVideoDecoder</span></a> *decoder</code></em>);</pre>
 <p>Get the oldest pending unfinished <a class="link" href="gst-plugins-base-libs-gstvideoutils.html#GstVideoCodecFrame" title="struct GstVideoCodecFrame"><span class="type">GstVideoCodecFrame</span></a></p>
 <div class="refsect3">
-<a name="id-1.2.15.12.6.22.5"></a><h4>Parameters</h4>
+<a name="id-1.2.15.16.6.22.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1141,7 +1152,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.15.12.6.22.6"></a><h4>Returns</h4>
+<a name="id-1.2.15.16.6.22.6"></a><h4>Returns</h4>
 <p> oldest pending unfinished <a class="link" href="gst-plugins-base-libs-gstvideoutils.html#GstVideoCodecFrame" title="struct GstVideoCodecFrame"><span class="type">GstVideoCodecFrame</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>
@@ -1154,7 +1165,7 @@
 <p>Queries whether input data is considered packetized or not by the
 base class.</p>
 <div class="refsect3">
-<a name="id-1.2.15.12.6.23.5"></a><h4>Parameters</h4>
+<a name="id-1.2.15.16.6.23.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1169,9 +1180,8 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.15.12.6.23.6"></a><h4>Returns</h4>
+<a name="id-1.2.15.16.6.23.6"></a><h4>Returns</h4>
 <p> TRUE if input data is considered packetized.</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -1183,7 +1193,7 @@
 <p>Returns the number of bytes previously added to the current frame
 by calling <a class="link" href="gst-plugins-base-libs-GstVideoDecoder.html#gst-video-decoder-add-to-frame" title="gst_video_decoder_add_to_frame ()"><code class="function">gst_video_decoder_add_to_frame()</code></a>.</p>
 <div class="refsect3">
-<a name="id-1.2.15.12.6.24.5"></a><h4>Parameters</h4>
+<a name="id-1.2.15.16.6.24.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1198,11 +1208,10 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.15.12.6.24.6"></a><h4>Returns</h4>
+<a name="id-1.2.15.16.6.24.6"></a><h4>Returns</h4>
 <p> The number of bytes pending for the current frame</p>
-<p></p>
 </div>
-<p class="since">Since 1.4</p>
+<p class="since">Since: 1.4</p>
 </div>
 <hr>
 <div class="refsect2">
@@ -1210,7 +1219,7 @@
 <pre class="programlisting"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gdouble"><span class="returnvalue">gdouble</span></a>
 gst_video_decoder_get_qos_proportion (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-GstVideoDecoder.html#GstVideoDecoder" title="struct GstVideoDecoder"><span class="type">GstVideoDecoder</span></a> *decoder</code></em>);</pre>
 <div class="refsect3">
-<a name="id-1.2.15.12.6.25.4"></a><h4>Parameters</h4>
+<a name="id-1.2.15.16.6.25.4"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1226,11 +1235,10 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.15.12.6.25.5"></a><h4>Returns</h4>
+<a name="id-1.2.15.16.6.25.5"></a><h4>Returns</h4>
 <p> The current QoS proportion.</p>
-<p></p>
 </div>
-<p class="since">Since 1.0.3</p>
+<p class="since">Since: 1.0.3</p>
 </div>
 <hr>
 <div class="refsect2">
@@ -1241,7 +1249,7 @@
 metadata and passes it along for further processing, i.e. <em class="parameter"><code>handle_frame</code></em>
 .</p>
 <div class="refsect3">
-<a name="id-1.2.15.12.6.26.5"></a><h4>Parameters</h4>
+<a name="id-1.2.15.16.6.26.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1256,9 +1264,8 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.15.12.6.26.6"></a><h4>Returns</h4>
+<a name="id-1.2.15.16.6.26.6"></a><h4>Returns</h4>
 <p> a <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html#GstFlowReturn"><span class="type">GstFlowReturn</span></a></p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -1273,7 +1280,7 @@
  and <em class="parameter"><code>max_latency</code></em>
 .</p>
 <div class="refsect3">
-<a name="id-1.2.15.12.6.27.5"></a><h4>Parameters</h4>
+<a name="id-1.2.15.16.6.27.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1313,7 +1320,7 @@
 latency is. Will also post a LATENCY message on the bus so the pipeline
 can reconfigure its global latency.</p>
 <div class="refsect3">
-<a name="id-1.2.15.12.6.28.5"></a><h4>Parameters</h4>
+<a name="id-1.2.15.16.6.28.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1346,7 +1353,7 @@
 <pre class="programlisting"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gint"><span class="returnvalue">gint</span></a>
 gst_video_decoder_get_estimate_rate (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-GstVideoDecoder.html#GstVideoDecoder" title="struct GstVideoDecoder"><span class="type">GstVideoDecoder</span></a> *dec</code></em>);</pre>
 <div class="refsect3">
-<a name="id-1.2.15.12.6.29.4"></a><h4>Parameters</h4>
+<a name="id-1.2.15.16.6.29.4"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1361,9 +1368,8 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.15.12.6.29.5"></a><h4>Returns</h4>
+<a name="id-1.2.15.16.6.29.5"></a><h4>Returns</h4>
 <p> currently configured byte to time conversion setting</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -1373,7 +1379,7 @@
 gst_video_decoder_get_output_state (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-GstVideoDecoder.html#GstVideoDecoder" title="struct GstVideoDecoder"><span class="type">GstVideoDecoder</span></a> *decoder</code></em>);</pre>
 <p>Get the <a class="link" href="gst-plugins-base-libs-gstvideoutils.html#GstVideoCodecState" title="struct GstVideoCodecState"><span class="type">GstVideoCodecState</span></a> currently describing the output stream.</p>
 <div class="refsect3">
-<a name="id-1.2.15.12.6.30.5"></a><h4>Parameters</h4>
+<a name="id-1.2.15.16.6.30.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1388,7 +1394,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.15.12.6.30.6"></a><h4>Returns</h4>
+<a name="id-1.2.15.16.6.30.6"></a><h4>Returns</h4>
 <p> <a class="link" href="gst-plugins-base-libs-gstvideoutils.html#GstVideoCodecState" title="struct GstVideoCodecState"><span class="type">GstVideoCodecState</span></a> describing format of video data. </p>
 <p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p>
 </div>
@@ -1401,7 +1407,7 @@
                                      <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>Allows baseclass to perform byte to time estimated conversion.</p>
 <div class="refsect3">
-<a name="id-1.2.15.12.6.31.5"></a><h4>Parameters</h4>
+<a name="id-1.2.15.16.6.31.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1449,7 +1455,7 @@
 <p>The new output state will only take effect (set on pads and buffers) starting
 from the next call to <a class="link" href="gst-plugins-base-libs-GstVideoDecoder.html#gst-video-decoder-finish-frame" title="gst_video_decoder_finish_frame ()"><code class="function">gst_video_decoder_finish_frame()</code></a>.</p>
 <div class="refsect3">
-<a name="id-1.2.15.12.6.32.8"></a><h4>Parameters</h4>
+<a name="id-1.2.15.16.6.32.8"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1486,7 +1492,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.15.12.6.32.9"></a><h4>Returns</h4>
+<a name="id-1.2.15.16.6.32.9"></a><h4>Returns</h4>
 <p> the newly configured output state. </p>
 <p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p>
 </div>
@@ -1503,7 +1509,7 @@
 GST_VIDEO_DECODER_MAX_ERRORS.</p>
 <p>The '-1' option was added in 1.4</p>
 <div class="refsect3">
-<a name="id-1.2.15.12.6.33.6"></a><h4>Parameters</h4>
+<a name="id-1.2.15.16.6.33.6"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1535,7 +1541,7 @@
 input is packetized, then the <em class="parameter"><code>parse</code></em>
  method will not be called.</p>
 <div class="refsect3">
-<a name="id-1.2.15.12.6.34.5"></a><h4>Parameters</h4>
+<a name="id-1.2.15.16.6.34.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1564,7 +1570,7 @@
 gst_video_decoder_get_needs_format (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-GstVideoDecoder.html#GstVideoDecoder" title="struct GstVideoDecoder"><span class="type">GstVideoDecoder</span></a> *dec</code></em>);</pre>
 <p>Queries decoder required format handling.</p>
 <div class="refsect3">
-<a name="id-1.2.15.12.6.35.5"></a><h4>Parameters</h4>
+<a name="id-1.2.15.16.6.35.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1579,11 +1585,10 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.15.12.6.35.6"></a><h4>Returns</h4>
+<a name="id-1.2.15.16.6.35.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 required format handling is enabled.</p>
-<p></p>
 </div>
-<p class="since">Since 1.4</p>
+<p class="since">Since: 1.4</p>
 </div>
 <hr>
 <div class="refsect2">
@@ -1598,7 +1603,7 @@
 is then expected being able to do so either by default
 or based on the input data.</p>
 <div class="refsect3">
-<a name="id-1.2.15.12.6.36.5"></a><h4>Parameters</h4>
+<a name="id-1.2.15.16.6.36.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1619,7 +1624,7 @@
 </tbody>
 </table></div>
 </div>
-<p class="since">Since 1.4</p>
+<p class="since">Since: 1.4</p>
 </div>
 <hr>
 <div class="refsect2">
@@ -1628,13 +1633,14 @@
 gst_video_decoder_merge_tags (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-GstVideoDecoder.html#GstVideoDecoder" title="struct GstVideoDecoder"><span class="type">GstVideoDecoder</span></a> *decoder</code></em>,
                               <em class="parameter"><code>const <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstTagList.html"><span class="type">GstTagList</span></a> *tags</code></em>,
                               <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstTagList.html#GstTagMergeMode"><span class="type">GstTagMergeMode</span></a> mode</code></em>);</pre>
-<p>Adds tags to so-called pending tags, which will be processed
-before pushing out data downstream.</p>
+<p>Sets the audio decoder tags and how they should be merged with any
+upstream stream tags. This will override any tags previously-set
+with <a class="link" href="gst-plugins-base-libs-gstaudiodecoder.html#gst-audio-decoder-merge-tags" title="gst_audio_decoder_merge_tags ()"><code class="function">gst_audio_decoder_merge_tags()</code></a>.</p>
 <p>Note that this is provided for convenience, and the subclass is
 not required to use this and can still do tag handling on its own.</p>
 <p>MT safe.</p>
 <div class="refsect3">
-<a name="id-1.2.15.12.6.37.7"></a><h4>Parameters</h4>
+<a name="id-1.2.15.16.6.37.7"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1649,18 +1655,65 @@
 </tr>
 <tr>
 <td class="parameter_name"><p>tags</p></td>
-<td class="parameter_description"><p>a <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstTagList.html"><span class="type">GstTagList</span></a> to merge</p></td>
-<td class="parameter_annotations"> </td>
+<td class="parameter_description"><p> a <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstTagList.html"><span class="type">GstTagList</span></a> to merge, or NULL to unset
+previously-set tags. </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>mode</p></td>
-<td class="parameter_description"><p>the <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstTagList.html#GstTagMergeMode"><span class="type">GstTagMergeMode</span></a> to use</p></td>
+<td class="parameter_description"><p>the <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstTagList.html#GstTagMergeMode"><span class="type">GstTagMergeMode</span></a> to use, usually <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstTagList.html#GST-TAG-MERGE-REPLACE:CAPS"><span class="type">GST_TAG_MERGE_REPLACE</span></a></p></td>
 <td class="parameter_annotations"> </td>
 </tr>
 </tbody>
 </table></div>
 </div>
 </div>
+<hr>
+<div class="refsect2">
+<a name="gst-video-decoder-proxy-getcaps"></a><h3>gst_video_decoder_proxy_getcaps ()</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_video_decoder_proxy_getcaps (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-GstVideoDecoder.html#GstVideoDecoder" title="struct GstVideoDecoder"><span class="type">GstVideoDecoder</span></a> *decoder</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>
+<p>Returns caps that express <em class="parameter"><code>caps</code></em>
+ (or sink template caps if <em class="parameter"><code>caps</code></em>
+ == NULL)
+restricted to resolution/format/... combinations supported by downstream
+elements.</p>
+<div class="refsect3">
+<a name="id-1.2.15.16.6.38.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>decoder</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gst-plugins-base-libs-GstVideoDecoder.html#GstVideoDecoder" title="struct GstVideoDecoder"><span class="type">GstVideoDecoder</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>caps</p></td>
+<td class="parameter_description"><p> initial caps. </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>filter</p></td>
+<td class="parameter_description"><p> filter caps. </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.15.16.6.38.6"></a><h4>Returns</h4>
+<p> a <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstCaps.html"><span class="type">GstCaps</span></a> owned by caller. </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.6</p>
+</div>
 </div>
 <div class="refsect1">
 <a name="gst-plugins-base-libs-GstVideoDecoder.other_details"></a><h2>Types and Values</h2>
@@ -1746,6 +1799,15 @@
 
   gboolean      (*src_query)      (GstVideoDecoder *decoder,
 				   GstQuery *query);
+
+  GstCaps*      (*getcaps)        (GstVideoDecoder *decoder,
+                                   GstCaps *filter);
+
+  GstFlowReturn (*drain)          (GstVideoDecoder *decoder);
+
+  gboolean      (*transform_meta) (GstVideoDecoder *decoder,
+                                   GstVideoCodecFrame *frame,
+                                   GstMeta * meta);
 };
 </pre>
 <p>Subclasses can override any of the available virtual methods or not, as
@@ -1756,7 +1818,7 @@
 <em class="parameter"><code>parse</code></em>
  needs to be overridden as well.</p>
 <div class="refsect3">
-<a name="id-1.2.15.12.7.7.5"></a><h4>Members</h4>
+<a name="id-1.2.15.16.7.7.5"></a><h4>Members</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="300px" class="struct_members_name">
@@ -1815,8 +1877,7 @@
 <td class="struct_member_name"><p><em class="structfield"><code><a name="GstVideoDecoderClass.finish"></a>finish</code></em> ()</p></td>
 <td class="struct_member_description"><p>Optional.
 Called to request subclass to dispatch any pending remaining
-data (e.g. at EOS or segment end). Sub-classes should be prepared
-to handle new data afterward, or seamless segment processing will break.</p></td>
+data at EOS. Sub-classes can refuse to decode new data after.</p></td>
 <td class="struct_member_annotations"> </td>
 </tr>
 <tr>
@@ -1895,6 +1956,33 @@
 default handler. Since 1.4</p></td>
 <td class="struct_member_annotations"> </td>
 </tr>
+<tr>
+<td class="struct_member_name"><p><em class="structfield"><code><a name="GstVideoDecoderClass.getcaps"></a>getcaps</code></em> ()</p></td>
+<td class="struct_member_description"><p>Optional.
+Allows for a custom sink getcaps implementation.
+If not implemented, default returns
+gst_video_decoder_proxy_getcaps
+applied to sink template caps.</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><em class="structfield"><code><a name="GstVideoDecoderClass.drain"></a>drain</code></em> ()</p></td>
+<td class="struct_member_description"><p>Optional.
+Called to request subclass to decode any data it can at this
+point, but that more data may arrive after. (e.g. at segment end).
+Sub-classes should be prepared to handle new data afterward,
+or seamless segment processing will break. Since: 1.6</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><em class="structfield"><code><a name="GstVideoDecoderClass.transform-meta"></a>transform_meta</code></em> ()</p></td>
+<td class="struct_member_description"><p>Optional. Transform the metadata on the input buffer to the
+output buffer. By default this method is copies all meta without
+tags and meta with only the "video" tag. subclasses can
+implement this method and return <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the metadata is to be
+copied. Since 1.6</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
 </tbody>
 </table></div>
 </div>
@@ -1902,7 +1990,6 @@
 </div>
 </div>
 <div class="footer">
-<hr>
-          Generated by GTK-Doc V1.21</div>
+<hr>Generated by GTK-Doc V1.24</div>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/libs/html/gst-plugins-base-libs-GstVideoDither.html b/docs/libs/html/gst-plugins-base-libs-GstVideoDither.html
new file mode 100644
index 0000000..0de7ff6
--- /dev/null
+++ b/docs/libs/html/gst-plugins-base-libs-GstVideoDither.html
@@ -0,0 +1,345 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>GstVideoDither: GStreamer Base 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 Base Plugins 1.0 Library Reference Manual">
+<link rel="up" href="gstreamer-video.html" title="Video Library">
+<link rel="prev" href="gst-plugins-base-libs-gstvideofilter.html" title="gstvideofilter">
+<link rel="next" href="gst-plugins-base-libs-GstVideoChroma.html" title="GstVideoChroma">
+<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-base-libs-GstVideoDither.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="gstreamer-video.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
+<td><a accesskey="p" href="gst-plugins-base-libs-gstvideofilter.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
+<td><a accesskey="n" href="gst-plugins-base-libs-GstVideoChroma.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
+</tr></table>
+<div class="refentry">
+<a name="gst-plugins-base-libs-GstVideoDither"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="gst-plugins-base-libs-GstVideoDither.top_of_page"></a>GstVideoDither</span></h2>
+<p>GstVideoDither — Utility object for dithering and quantizing lines of video</p>
+</td>
+<td class="gallery_image" valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsect1">
+<a name="gst-plugins-base-libs-GstVideoDither.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-base-libs-GstVideoDither.html#gst-video-dither-free" title="gst_video_dither_free ()">gst_video_dither_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-base-libs-GstVideoDither.html#gst-video-dither-line" title="gst_video_dither_line ()">gst_video_dither_line</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a class="link" href="gst-plugins-base-libs-GstVideoDither.html#GstVideoDither" title="GstVideoDither"><span class="returnvalue">GstVideoDither</span></a> *
+</td>
+<td class="function_name">
+<a class="link" href="gst-plugins-base-libs-GstVideoDither.html#gst-video-dither-new" title="gst_video_dither_new ()">gst_video_dither_new</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-libs-GstVideoDither.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-base-libs-GstVideoDither.html#GstVideoDither" title="GstVideoDither">GstVideoDither</a></td>
+</tr>
+<tr>
+<td class="datatype_keyword">enum</td>
+<td class="function_name"><a class="link" href="gst-plugins-base-libs-GstVideoDither.html#GstVideoDitherFlags" title="enum GstVideoDitherFlags">GstVideoDitherFlags</a></td>
+</tr>
+<tr>
+<td class="datatype_keyword">enum</td>
+<td class="function_name"><a class="link" href="gst-plugins-base-libs-GstVideoDither.html#GstVideoDitherMethod" title="enum GstVideoDitherMethod">GstVideoDitherMethod</a></td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-libs-GstVideoDither.includes"></a><h2>Includes</h2>
+<pre class="synopsis">#include &lt;gst/video/video-dither.h&gt;
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-libs-GstVideoDither.description"></a><h2>Description</h2>
+<p>GstVideoDither provides implementations of several dithering algorithms
+that can be applied to lines of video pixels to quantize and dither them.</p>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-libs-GstVideoDither.functions_details"></a><h2>Functions</h2>
+<div class="refsect2">
+<a name="gst-video-dither-free"></a><h3>gst_video_dither_free ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+gst_video_dither_free (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-GstVideoDither.html#GstVideoDither" title="GstVideoDither"><span class="type">GstVideoDither</span></a> *dither</code></em>);</pre>
+<p>Free <em class="parameter"><code>dither</code></em>
+</p>
+<div class="refsect3">
+<a name="id-1.2.15.7.7.2.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>dither</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gst-plugins-base-libs-GstVideoDither.html#GstVideoDither" title="GstVideoDither"><span class="type">GstVideoDither</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-video-dither-line"></a><h3>gst_video_dither_line ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+gst_video_dither_line (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-GstVideoDither.html#GstVideoDither" title="GstVideoDither"><span class="type">GstVideoDither</span></a> *dither</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> line</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> x</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> y</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> width</code></em>);</pre>
+<p>Dither <em class="parameter"><code>width</code></em>
+ pixels starting from offset <em class="parameter"><code>x</code></em>
+ in <em class="parameter"><code>line</code></em>
+ using <em class="parameter"><code>dither</code></em>
+.</p>
+<p><em class="parameter"><code>y</code></em>
+ is the line number of <em class="parameter"><code>line</code></em>
+ in the output image.</p>
+<div class="refsect3">
+<a name="id-1.2.15.7.7.3.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>dither</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gst-plugins-base-libs-GstVideoDither.html#GstVideoDither" title="GstVideoDither"><span class="type">GstVideoDither</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>line</p></td>
+<td class="parameter_description"><p>pointer to the pixels of the line</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>x</p></td>
+<td class="parameter_description"><p>x coordinate</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>y</p></td>
+<td class="parameter_description"><p>y coordinate</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>width</p></td>
+<td class="parameter_description"><p>the width</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-video-dither-new"></a><h3>gst_video_dither_new ()</h3>
+<pre class="programlisting"><a class="link" href="gst-plugins-base-libs-GstVideoDither.html#GstVideoDither" title="GstVideoDither"><span class="returnvalue">GstVideoDither</span></a> *
+gst_video_dither_new (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-GstVideoDither.html#GstVideoDitherMethod" title="enum GstVideoDitherMethod"><span class="type">GstVideoDitherMethod</span></a> method</code></em>,
+                      <em class="parameter"><code><a class="link" href="gst-plugins-base-libs-GstVideoDither.html#GstVideoDitherFlags" title="enum GstVideoDitherFlags"><span class="type">GstVideoDitherFlags</span></a> flags</code></em>,
+                      <em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstvideo.html#GstVideoFormat" title="enum GstVideoFormat"><span class="type">GstVideoFormat</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> quantizer[GST_VIDEO_MAX_COMPONENTS]</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> width</code></em>);</pre>
+<p>Make a new dither object for dithering lines of <em class="parameter"><code>format</code></em>
+ using the
+algorithm described by <em class="parameter"><code>method</code></em>
+.</p>
+<p>Each component will be quantized to a multiple of <em class="parameter"><code>quantizer</code></em>
+. Better
+performance is achived when <em class="parameter"><code>quantizer</code></em>
+ is a power of 2.</p>
+<p><em class="parameter"><code>width</code></em>
+ is the width of the lines that this ditherer will handle.</p>
+<p><span class="annotation">[<acronym title="Exposed in C code, not necessarily available in other languages."><span class="acronym">skip</span></acronym>]</span></p>
+<div class="refsect3">
+<a name="id-1.2.15.7.7.4.8"></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>method</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gst-plugins-base-libs-GstVideoDither.html#GstVideoDitherMethod" title="enum GstVideoDitherMethod"><span class="type">GstVideoDitherMethod</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>flags</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gst-plugins-base-libs-GstVideoDither.html#GstVideoDitherFlags" title="enum GstVideoDitherFlags"><span class="type">GstVideoDitherFlags</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 <a class="link" href="gst-plugins-base-libs-gstvideo.html#GstVideoFormat" title="enum GstVideoFormat"><span class="type">GstVideoFormat</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>quantizer</p></td>
+<td class="parameter_description"><p>quantizer</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 lines</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="id-1.2.15.7.7.4.9"></a><h4>Returns</h4>
+<p> a new <a class="link" href="gst-plugins-base-libs-GstVideoDither.html#GstVideoDither" title="GstVideoDither"><span class="type">GstVideoDither</span></a></p>
+</div>
+</div>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-libs-GstVideoDither.other_details"></a><h2>Types and Values</h2>
+<div class="refsect2">
+<a name="GstVideoDither"></a><h3>GstVideoDither</h3>
+<pre class="programlisting">typedef struct _GstVideoDither GstVideoDither;</pre>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstVideoDitherFlags"></a><h3>enum GstVideoDitherFlags</h3>
+<p>Extra flags that influence the result from <a class="link" href="gst-plugins-base-libs-GstVideoChroma.html#gst-video-chroma-resample-new" title="gst_video_chroma_resample_new ()"><code class="function">gst_video_chroma_resample_new()</code></a>.</p>
+<div class="refsect3">
+<a name="id-1.2.15.7.8.3.4"></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-VIDEO-DITHER-FLAG-NONE:CAPS"></a>GST_VIDEO_DITHER_FLAG_NONE</p></td>
+<td class="enum_member_description">
+<p>no flags</p>
+</td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-VIDEO-DITHER-FLAG-INTERLACED:CAPS"></a>GST_VIDEO_DITHER_FLAG_INTERLACED</p></td>
+<td class="enum_member_description">
+<p>the input is interlaced</p>
+</td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-VIDEO-DITHER-FLAG-QUANTIZE:CAPS"></a>GST_VIDEO_DITHER_FLAG_QUANTIZE</p></td>
+<td class="enum_member_description">
+<p>quantize values in addition to adding dither.</p>
+</td>
+<td class="enum_member_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstVideoDitherMethod"></a><h3>enum GstVideoDitherMethod</h3>
+<p>Different dithering methods to use.</p>
+<div class="refsect3">
+<a name="id-1.2.15.7.8.4.4"></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-VIDEO-DITHER-NONE:CAPS"></a>GST_VIDEO_DITHER_NONE</p></td>
+<td class="enum_member_description">
+<p>no dithering</p>
+</td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-VIDEO-DITHER-VERTERR:CAPS"></a>GST_VIDEO_DITHER_VERTERR</p></td>
+<td class="enum_member_description">
+<p>propagate rounding errors downwards</p>
+</td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-VIDEO-DITHER-FLOYD-STEINBERG:CAPS"></a>GST_VIDEO_DITHER_FLOYD_STEINBERG</p></td>
+<td class="enum_member_description">
+<p>Dither with floyd-steinberg error diffusion</p>
+</td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-VIDEO-DITHER-SIERRA-LITE:CAPS"></a>GST_VIDEO_DITHER_SIERRA_LITE</p></td>
+<td class="enum_member_description">
+<p>Dither with Sierra Lite error diffusion</p>
+</td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-VIDEO-DITHER-BAYER:CAPS"></a>GST_VIDEO_DITHER_BAYER</p></td>
+<td class="enum_member_description">
+<p>ordered dither using a bayer pattern</p>
+</td>
+<td class="enum_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-base-libs-GstVideoEncoder.html b/docs/libs/html/gst-plugins-base-libs-GstVideoEncoder.html
index 05ebfd1..bfe7fd5 100644
--- a/docs/libs/html/gst-plugins-base-libs-GstVideoEncoder.html
+++ b/docs/libs/html/gst-plugins-base-libs-GstVideoEncoder.html
@@ -2,13 +2,13 @@
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>GStreamer Base Plugins 1.0 Library Reference Manual: GstVideoEncoder</title>
+<title>GstVideoEncoder: GStreamer Base 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 Base Plugins 1.0 Library Reference Manual">
 <link rel="up" href="gstreamer-video.html" title="Video Library">
 <link rel="prev" href="gst-plugins-base-libs-GstVideoDecoder.html" title="GstVideoDecoder">
 <link rel="next" href="gst-plugins-base-libs-GstVideoPool.html" title="GstVideoPool">
-<meta name="generator" content="GTK-Doc V1.21 (XML mode)">
+<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">
@@ -329,7 +329,7 @@
 </pre>
 <p>Gives the pointer to the sink <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html"><span class="type">GstPad</span></a> object of the element.</p>
 <div class="refsect3">
-<a name="id-1.2.15.13.6.3.5"></a><h4>Parameters</h4>
+<a name="id-1.2.15.17.6.3.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -351,7 +351,7 @@
 </pre>
 <p>Gives the pointer to the source <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html"><span class="type">GstPad</span></a> object of the element.</p>
 <div class="refsect3">
-<a name="id-1.2.15.13.6.4.5"></a><h4>Parameters</h4>
+<a name="id-1.2.15.17.6.4.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -373,7 +373,7 @@
 </pre>
 <p>Gives the segment of the element.</p>
 <div class="refsect3">
-<a name="id-1.2.15.13.6.5.5"></a><h4>Parameters</h4>
+<a name="id-1.2.15.17.6.5.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -395,7 +395,7 @@
 </pre>
 <p>Gives the segment of the element.</p>
 <div class="refsect3">
-<a name="id-1.2.15.13.6.6.5"></a><h4>Parameters</h4>
+<a name="id-1.2.15.17.6.6.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -417,7 +417,7 @@
 </pre>
 <p>Obtain a lock to protect the encoder function from concurrent access.</p>
 <div class="refsect3">
-<a name="id-1.2.15.13.6.7.5"></a><h4>Parameters</h4>
+<a name="id-1.2.15.17.6.7.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -439,7 +439,7 @@
 </pre>
 <p>Release the lock that protects the encoder function from concurrent access.</p>
 <div class="refsect3">
-<a name="id-1.2.15.13.6.8.5"></a><h4>Parameters</h4>
+<a name="id-1.2.15.17.6.8.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -465,7 +465,7 @@
 for <em class="parameter"><code>encoder</code></em>
 's current <a class="link" href="gst-plugins-base-libs-gstvideoutils.html#GstVideoCodecState" title="struct GstVideoCodecState"><span class="type">GstVideoCodecState</span></a>.</p>
 <div class="refsect3">
-<a name="id-1.2.15.13.6.9.5"></a><h4>Parameters</h4>
+<a name="id-1.2.15.17.6.9.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -487,7 +487,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.15.13.6.9.6"></a><h4>Returns</h4>
+<a name="id-1.2.15.17.6.9.6"></a><h4>Returns</h4>
 <p> allocated buffer. </p>
 <p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p>
 </div>
@@ -507,7 +507,7 @@
 <p>The buffer allocated here is owned by the frame and you should only
 keep references to the frame, not the buffer.</p>
 <div class="refsect3">
-<a name="id-1.2.15.13.6.10.6"></a><h4>Parameters</h4>
+<a name="id-1.2.15.17.6.10.6"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -534,9 +534,8 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.15.13.6.10.7"></a><h4>Returns</h4>
-<p> <code class="literal">GST_FLOW_OK</code> if an output buffer could be allocated</p>
-<p></p>
+<a name="id-1.2.15.17.6.10.7"></a><h4>Returns</h4>
+<p> <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html#GST-FLOW-OK:CAPS"><code class="literal">GST_FLOW_OK</code></a> if an output buffer could be allocated</p>
 </div>
 </div>
 <hr>
@@ -553,7 +552,7 @@
 <p>Unref the <em class="parameter"><code>allocator</code></em>
  after use it.</p>
 <div class="refsect3">
-<a name="id-1.2.15.13.6.11.6"></a><h4>Parameters</h4>
+<a name="id-1.2.15.17.6.11.6"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -600,7 +599,7 @@
 considered read-only. This function will also change the metadata
 of the buffer.</p>
 <div class="refsect3">
-<a name="id-1.2.15.13.6.12.6"></a><h4>Parameters</h4>
+<a name="id-1.2.15.17.6.12.6"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -622,9 +621,8 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.15.13.6.12.7"></a><h4>Returns</h4>
+<a name="id-1.2.15.17.6.12.7"></a><h4>Returns</h4>
 <p> a <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html#GstFlowReturn"><span class="type">GstFlowReturn</span></a> resulting from sending data downstream</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -636,7 +634,7 @@
 Unmark GST_PAD_FLAG_NEED_RECONFIGURE in any case. But mark it again if
 negotiate fails.</p>
 <div class="refsect3">
-<a name="id-1.2.15.13.6.13.5"></a><h4>Parameters</h4>
+<a name="id-1.2.15.17.6.13.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -651,9 +649,8 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.15.13.6.13.6"></a><h4>Returns</h4>
+<a name="id-1.2.15.17.6.13.6"></a><h4>Returns</h4>
 <p> <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><span class="type">TRUE</span></a> if the negotiation succeeded, else <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><span class="type">FALSE</span></a>.</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -664,7 +661,7 @@
                              <em class="parameter"><code><span class="type">int</span> frame_number</code></em>);</pre>
 <p>Get a pending unfinished <a class="link" href="gst-plugins-base-libs-gstvideoutils.html#GstVideoCodecFrame" title="struct GstVideoCodecFrame"><span class="type">GstVideoCodecFrame</span></a></p>
 <div class="refsect3">
-<a name="id-1.2.15.13.6.14.5"></a><h4>Parameters</h4>
+<a name="id-1.2.15.17.6.14.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -686,7 +683,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.15.13.6.14.6"></a><h4>Returns</h4>
+<a name="id-1.2.15.17.6.14.6"></a><h4>Returns</h4>
 <p> pending unfinished <a class="link" href="gst-plugins-base-libs-gstvideoutils.html#GstVideoCodecFrame" title="struct GstVideoCodecFrame"><span class="type">GstVideoCodecFrame</span></a> identified by <em class="parameter"><code>frame_number</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>
@@ -699,7 +696,7 @@
 gst_video_encoder_get_frames (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-GstVideoEncoder.html#GstVideoEncoder" title="struct GstVideoEncoder"><span class="type">GstVideoEncoder</span></a> *encoder</code></em>);</pre>
 <p>Get all pending unfinished <a class="link" href="gst-plugins-base-libs-gstvideoutils.html#GstVideoCodecFrame" title="struct GstVideoCodecFrame"><span class="type">GstVideoCodecFrame</span></a></p>
 <div class="refsect3">
-<a name="id-1.2.15.13.6.15.5"></a><h4>Parameters</h4>
+<a name="id-1.2.15.17.6.15.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -714,7 +711,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.15.13.6.15.6"></a><h4>Returns</h4>
+<a name="id-1.2.15.17.6.15.6"></a><h4>Returns</h4>
 <p> pending unfinished <a class="link" href="gst-plugins-base-libs-gstvideoutils.html#GstVideoCodecFrame" title="struct GstVideoCodecFrame"><span class="type">GstVideoCodecFrame</span></a>. </p>
 <p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>][<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> GstVideoCodecFrame]</span></p>
 </div>
@@ -726,7 +723,7 @@
 gst_video_encoder_get_oldest_frame (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-GstVideoEncoder.html#GstVideoEncoder" title="struct GstVideoEncoder"><span class="type">GstVideoEncoder</span></a> *encoder</code></em>);</pre>
 <p>Get the oldest unfinished pending <a class="link" href="gst-plugins-base-libs-gstvideoutils.html#GstVideoCodecFrame" title="struct GstVideoCodecFrame"><span class="type">GstVideoCodecFrame</span></a></p>
 <div class="refsect3">
-<a name="id-1.2.15.13.6.16.5"></a><h4>Parameters</h4>
+<a name="id-1.2.15.17.6.16.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -741,7 +738,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.15.13.6.16.6"></a><h4>Returns</h4>
+<a name="id-1.2.15.17.6.16.6"></a><h4>Returns</h4>
 <p> oldest unfinished pending <a class="link" href="gst-plugins-base-libs-gstvideoutils.html#GstVideoCodecFrame" title="struct GstVideoCodecFrame"><span class="type">GstVideoCodecFrame</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>
@@ -754,7 +751,7 @@
                                <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Doubly-Linked-Lists.html#GList"><span class="type">GList</span></a> *headers</code></em>);</pre>
 <p>Set the codec headers to be sent downstream whenever requested.</p>
 <div class="refsect3">
-<a name="id-1.2.15.13.6.17.5"></a><h4>Parameters</h4>
+<a name="id-1.2.15.17.6.17.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -788,7 +785,7 @@
  and <em class="parameter"><code>max_latency</code></em>
 .</p>
 <div class="refsect3">
-<a name="id-1.2.15.13.6.18.5"></a><h4>Parameters</h4>
+<a name="id-1.2.15.17.6.18.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -826,7 +823,7 @@
                                <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> max_latency</code></em>);</pre>
 <p>Informs baseclass of encoding latency.</p>
 <div class="refsect3">
-<a name="id-1.2.15.13.6.19.5"></a><h4>Parameters</h4>
+<a name="id-1.2.15.17.6.19.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -878,7 +875,7 @@
 <p>The new output state will only take effect (set on pads and buffers) starting
 from the next call to <a class="link" href="gst-plugins-base-libs-GstVideoEncoder.html#gst-video-encoder-finish-frame" title="gst_video_encoder_finish_frame ()"><code class="function">gst_video_encoder_finish_frame()</code></a>.</p>
 <div class="refsect3">
-<a name="id-1.2.15.13.6.20.9"></a><h4>Parameters</h4>
+<a name="id-1.2.15.17.6.20.9"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -906,7 +903,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.15.13.6.20.10"></a><h4>Returns</h4>
+<a name="id-1.2.15.17.6.20.10"></a><h4>Returns</h4>
 <p> the newly configured output state. </p>
 <p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p>
 </div>
@@ -918,7 +915,7 @@
 gst_video_encoder_get_output_state (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-GstVideoEncoder.html#GstVideoEncoder" title="struct GstVideoEncoder"><span class="type">GstVideoEncoder</span></a> *encoder</code></em>);</pre>
 <p>Get the current <a class="link" href="gst-plugins-base-libs-gstvideoutils.html#GstVideoCodecState" title="struct GstVideoCodecState"><span class="type">GstVideoCodecState</span></a></p>
 <div class="refsect3">
-<a name="id-1.2.15.13.6.21.5"></a><h4>Parameters</h4>
+<a name="id-1.2.15.17.6.21.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -933,7 +930,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.15.13.6.21.6"></a><h4>Returns</h4>
+<a name="id-1.2.15.17.6.21.6"></a><h4>Returns</h4>
 <p> <a class="link" href="gst-plugins-base-libs-gstvideoutils.html#GstVideoCodecState" title="struct GstVideoCodecState"><span class="type">GstVideoCodecState</span></a> describing format of video data. </p>
 <p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p>
 </div>
@@ -951,7 +948,7 @@
 restricted to resolution/format/... combinations supported by downstream
 elements (e.g. muxers).</p>
 <div class="refsect3">
-<a name="id-1.2.15.13.6.22.5"></a><h4>Parameters</h4>
+<a name="id-1.2.15.17.6.22.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -966,21 +963,21 @@
 </tr>
 <tr>
 <td class="parameter_name"><p>caps</p></td>
-<td class="parameter_description"><p>initial caps</p></td>
-<td class="parameter_annotations"> </td>
+<td class="parameter_description"><p> initial caps. </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>filter</p></td>
-<td class="parameter_description"><p>filter caps</p></td>
-<td class="parameter_annotations"> </td>
+<td class="parameter_description"><p> filter caps. </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.15.13.6.22.6"></a><h4>Returns</h4>
-<p> a <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstCaps.html"><span class="type">GstCaps</span></a> owned by caller</p>
-<p></p>
+<a name="id-1.2.15.17.6.22.6"></a><h4>Returns</h4>
+<p> a <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstCaps.html"><span class="type">GstCaps</span></a> owned by caller. </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>
@@ -990,13 +987,14 @@
 gst_video_encoder_merge_tags (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-GstVideoEncoder.html#GstVideoEncoder" title="struct GstVideoEncoder"><span class="type">GstVideoEncoder</span></a> *encoder</code></em>,
                               <em class="parameter"><code>const <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstTagList.html"><span class="type">GstTagList</span></a> *tags</code></em>,
                               <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstTagList.html#GstTagMergeMode"><span class="type">GstTagMergeMode</span></a> mode</code></em>);</pre>
-<p>Adds tags to so-called pending tags, which will be processed
-before pushing out data downstream.</p>
+<p>Sets the video encoder tags and how they should be merged with any
+upstream stream tags. This will override any tags previously-set
+with <a class="link" href="gst-plugins-base-libs-GstVideoEncoder.html#gst-video-encoder-merge-tags" title="gst_video_encoder_merge_tags ()"><code class="function">gst_video_encoder_merge_tags()</code></a>.</p>
 <p>Note that this is provided for convenience, and the subclass is
 not required to use this and can still do tag handling on its own.</p>
 <p>MT safe.</p>
 <div class="refsect3">
-<a name="id-1.2.15.13.6.23.7"></a><h4>Parameters</h4>
+<a name="id-1.2.15.17.6.23.7"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1011,12 +1009,13 @@
 </tr>
 <tr>
 <td class="parameter_name"><p>tags</p></td>
-<td class="parameter_description"><p>a <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstTagList.html"><span class="type">GstTagList</span></a> to merge</p></td>
-<td class="parameter_annotations"> </td>
+<td class="parameter_description"><p> a <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstTagList.html"><span class="type">GstTagList</span></a> to merge, or NULL to unset
+previously-set tags. </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>mode</p></td>
-<td class="parameter_description"><p>the <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstTagList.html#GstTagMergeMode"><span class="type">GstTagMergeMode</span></a> to use</p></td>
+<td class="parameter_description"><p>the <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstTagList.html#GstTagMergeMode"><span class="type">GstTagMergeMode</span></a> to use, usually <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstTagList.html#GST-TAG-MERGE-REPLACE:CAPS"><span class="type">GST_TAG_MERGE_REPLACE</span></a></p></td>
 <td class="parameter_annotations"> </td>
 </tr>
 </tbody>
@@ -1110,6 +1109,10 @@
 
   gboolean      (*src_query)      (GstVideoEncoder *encoder,
 				   GstQuery *query);
+
+  gboolean      (*transform_meta) (GstVideoEncoder *encoder,
+                                   GstVideoCodecFrame *frame,
+                                   GstMeta * meta);
 };
 </pre>
 <p>Subclasses can override any of the available virtual methods or not, as
@@ -1119,7 +1122,7 @@
 and <em class="parameter"><code>get_caps</code></em>
  are likely needed as well.</p>
 <div class="refsect3">
-<a name="id-1.2.15.13.7.7.5"></a><h4>Members</h4>
+<a name="id-1.2.15.17.7.7.5"></a><h4>Members</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="300px" class="struct_members_name">
@@ -1270,6 +1273,15 @@
 default handler. Since 1.4</p></td>
 <td class="struct_member_annotations"> </td>
 </tr>
+<tr>
+<td class="struct_member_name"><p><em class="structfield"><code><a name="GstVideoEncoderClass.transform-meta"></a>transform_meta</code></em> ()</p></td>
+<td class="struct_member_description"><p>Optional. Transform the metadata on the input buffer to the
+output buffer. By default this method is copies all meta without
+tags and meta with only the "video" tag. subclasses can
+implement this method and return <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the metadata is to be
+copied. Since 1.6</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
 </tbody>
 </table></div>
 </div>
@@ -1277,7 +1289,6 @@
 </div>
 </div>
 <div class="footer">
-<hr>
-          Generated by GTK-Doc V1.21</div>
+<hr>Generated by GTK-Doc V1.24</div>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/libs/html/gst-plugins-base-libs-GstVideoPool.html b/docs/libs/html/gst-plugins-base-libs-GstVideoPool.html
index b6cf143..62da8ab 100644
--- a/docs/libs/html/gst-plugins-base-libs-GstVideoPool.html
+++ b/docs/libs/html/gst-plugins-base-libs-GstVideoPool.html
@@ -2,13 +2,13 @@
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>GStreamer Base Plugins 1.0 Library Reference Manual: GstVideoPool</title>
+<title>GstVideoPool: GStreamer Base 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 Base Plugins 1.0 Library Reference Manual">
 <link rel="up" href="gstreamer-video.html" title="Video Library">
 <link rel="prev" href="gst-plugins-base-libs-GstVideoEncoder.html" title="GstVideoEncoder">
 <link rel="next" href="gst-plugins-base-libs-gstvideoutils.html" title="gstvideoutils">
-<meta name="generator" content="GTK-Doc V1.21 (XML mode)">
+<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">
@@ -114,9 +114,9 @@
 <p>Create a new bufferpool that can allocate video frames. This bufferpool
 supports all the video bufferpool options.</p>
 <div class="refsect3">
-<a name="id-1.2.15.14.7.2.5"></a><h4>Returns</h4>
-<p> a new <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstBufferPool.html"><span class="type">GstBufferPool</span></a> to allocate video frames</p>
-<p></p>
+<a name="id-1.2.15.18.7.2.5"></a><h4>Returns</h4>
+<p> a new <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstBufferPool.html"><span class="type">GstBufferPool</span></a> to allocate video frames. </p>
+<p><span class="annotation">[<acronym title="Alias for transfer none, used for objects with floating refs."><span class="acronym">transfer floating</span></acronym>]</span></p>
 </div>
 </div>
 <hr>
@@ -131,7 +131,7 @@
 in <em class="parameter"><code>align</code></em>
 </p>
 <div class="refsect3">
-<a name="id-1.2.15.14.7.3.5"></a><h4>Parameters</h4>
+<a name="id-1.2.15.18.7.3.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -153,10 +153,9 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.15.14.7.3.6"></a><h4>Returns</h4>
+<a name="id-1.2.15.18.7.3.6"></a><h4>Returns</h4>
 <p> <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><span class="type">TRUE</span></a> if <em class="parameter"><code>config</code></em>
 could be parsed correctly.</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -171,7 +170,7 @@
 <em class="parameter"><code>config</code></em>
 </p>
 <div class="refsect3">
-<a name="id-1.2.15.14.7.4.5"></a><h4>Parameters</h4>
+<a name="id-1.2.15.18.7.4.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -238,7 +237,6 @@
 </div>
 </div>
 <div class="footer">
-<hr>
-          Generated by GTK-Doc V1.21</div>
+<hr>Generated by GTK-Doc V1.24</div>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/libs/html/gst-plugins-base-libs-GstVideoResampler.html b/docs/libs/html/gst-plugins-base-libs-GstVideoResampler.html
new file mode 100644
index 0000000..56073a4
--- /dev/null
+++ b/docs/libs/html/gst-plugins-base-libs-GstVideoResampler.html
@@ -0,0 +1,379 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>GstVideoResampler: GStreamer Base 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 Base Plugins 1.0 Library Reference Manual">
+<link rel="up" href="gstreamer-video.html" title="Video Library">
+<link rel="prev" href="gst-plugins-base-libs-GstVideoChroma.html" title="GstVideoChroma">
+<link rel="next" href="gst-plugins-base-libs-GstVideoScaler.html" title="GstVideoScaler">
+<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-base-libs-GstVideoResampler.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="gstreamer-video.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
+<td><a accesskey="p" href="gst-plugins-base-libs-GstVideoChroma.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
+<td><a accesskey="n" href="gst-plugins-base-libs-GstVideoScaler.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
+</tr></table>
+<div class="refentry">
+<a name="gst-plugins-base-libs-GstVideoResampler"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="gst-plugins-base-libs-GstVideoResampler.top_of_page"></a>GstVideoResampler</span></h2>
+<p>GstVideoResampler — Utility structure for resampler information</p>
+</td>
+<td class="gallery_image" valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsect1">
+<a name="gst-plugins-base-libs-GstVideoResampler.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-base-libs-GstVideoResampler.html#gst-video-resampler-clear" title="gst_video_resampler_clear ()">gst_video_resampler_clear</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-base-libs-GstVideoResampler.html#gst-video-resampler-init" title="gst_video_resampler_init ()">gst_video_resampler_init</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-libs-GstVideoResampler.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-base-libs-GstVideoResampler.html#GstVideoResampler" title="struct GstVideoResampler">GstVideoResampler</a></td>
+</tr>
+<tr>
+<td class="datatype_keyword">enum</td>
+<td class="function_name"><a class="link" href="gst-plugins-base-libs-GstVideoResampler.html#GstVideoResamplerFlags" title="enum GstVideoResamplerFlags">GstVideoResamplerFlags</a></td>
+</tr>
+<tr>
+<td class="datatype_keyword">enum</td>
+<td class="function_name"><a class="link" href="gst-plugins-base-libs-GstVideoResampler.html#GstVideoResamplerMethod" title="enum GstVideoResamplerMethod">GstVideoResamplerMethod</a></td>
+</tr>
+<tr>
+<td class="define_keyword">#define</td>
+<td class="function_name"><a class="link" href="gst-plugins-base-libs-GstVideoResampler.html#GST-VIDEO-RESAMPLER-OPT-CUBIC-B:CAPS" title="GST_VIDEO_RESAMPLER_OPT_CUBIC_B">GST_VIDEO_RESAMPLER_OPT_CUBIC_B</a></td>
+</tr>
+<tr>
+<td class="define_keyword">#define</td>
+<td class="function_name"><a class="link" href="gst-plugins-base-libs-GstVideoResampler.html#GST-VIDEO-RESAMPLER-OPT-CUBIC-C:CAPS" title="GST_VIDEO_RESAMPLER_OPT_CUBIC_C">GST_VIDEO_RESAMPLER_OPT_CUBIC_C</a></td>
+</tr>
+<tr>
+<td class="define_keyword">#define</td>
+<td class="function_name"><a class="link" href="gst-plugins-base-libs-GstVideoResampler.html#GST-VIDEO-RESAMPLER-OPT-ENVELOPE:CAPS" title="GST_VIDEO_RESAMPLER_OPT_ENVELOPE">GST_VIDEO_RESAMPLER_OPT_ENVELOPE</a></td>
+</tr>
+<tr>
+<td class="define_keyword">#define</td>
+<td class="function_name"><a class="link" href="gst-plugins-base-libs-GstVideoResampler.html#GST-VIDEO-RESAMPLER-OPT-MAX-TAPS:CAPS" title="GST_VIDEO_RESAMPLER_OPT_MAX_TAPS">GST_VIDEO_RESAMPLER_OPT_MAX_TAPS</a></td>
+</tr>
+<tr>
+<td class="define_keyword">#define</td>
+<td class="function_name"><a class="link" href="gst-plugins-base-libs-GstVideoResampler.html#GST-VIDEO-RESAMPLER-OPT-SHARPEN:CAPS" title="GST_VIDEO_RESAMPLER_OPT_SHARPEN">GST_VIDEO_RESAMPLER_OPT_SHARPEN</a></td>
+</tr>
+<tr>
+<td class="define_keyword">#define</td>
+<td class="function_name"><a class="link" href="gst-plugins-base-libs-GstVideoResampler.html#GST-VIDEO-RESAMPLER-OPT-SHARPNESS:CAPS" title="GST_VIDEO_RESAMPLER_OPT_SHARPNESS">GST_VIDEO_RESAMPLER_OPT_SHARPNESS</a></td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-libs-GstVideoResampler.includes"></a><h2>Includes</h2>
+<pre class="synopsis">#include &lt;gst/video/video-resampler.h&gt;
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-libs-GstVideoResampler.description"></a><h2>Description</h2>
+<p><a class="link" href="gst-plugins-base-libs-GstVideoResampler.html#GstVideoResampler" title="struct GstVideoResampler"><span class="type">GstVideoResampler</span></a> is a structure which holds the information
+required to perform various kinds of resampling filtering.</p>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-libs-GstVideoResampler.functions_details"></a><h2>Functions</h2>
+<div class="refsect2">
+<a name="gst-video-resampler-clear"></a><h3>gst_video_resampler_clear ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+gst_video_resampler_clear (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-GstVideoResampler.html#GstVideoResampler" title="struct GstVideoResampler"><span class="type">GstVideoResampler</span></a> *resampler</code></em>);</pre>
+<p>Clear a previously initialized <a class="link" href="gst-plugins-base-libs-GstVideoResampler.html#GstVideoResampler" title="struct GstVideoResampler"><span class="type">GstVideoResampler</span></a> <em class="parameter"><code>resampler</code></em>
+.</p>
+<div class="refsect3">
+<a name="id-1.2.15.9.7.2.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>resampler</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gst-plugins-base-libs-GstVideoResampler.html#GstVideoResampler" title="struct GstVideoResampler"><span class="type">GstVideoResampler</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<p class="since">Since: 1.6</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-video-resampler-init"></a><h3>gst_video_resampler_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_video_resampler_init (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-GstVideoResampler.html#GstVideoResampler" title="struct GstVideoResampler"><span class="type">GstVideoResampler</span></a> *resampler</code></em>,
+                          <em class="parameter"><code><a class="link" href="gst-plugins-base-libs-GstVideoResampler.html#GstVideoResamplerMethod" title="enum GstVideoResamplerMethod"><span class="type">GstVideoResamplerMethod</span></a> method</code></em>,
+                          <em class="parameter"><code><a class="link" href="gst-plugins-base-libs-GstVideoResampler.html#GstVideoResamplerFlags" title="enum GstVideoResamplerFlags"><span class="type">GstVideoResamplerFlags</span></a> flags</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> n_phases</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> n_taps</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> shift</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> in_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> out_size</code></em>,
+                          <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstStructure.html"><span class="type">GstStructure</span></a> *options</code></em>);</pre>
+</div>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-libs-GstVideoResampler.other_details"></a><h2>Types and Values</h2>
+<div class="refsect2">
+<a name="GstVideoResampler"></a><h3>struct GstVideoResampler</h3>
+<pre class="programlisting">struct GstVideoResampler {
+  gint in_size;
+  gint out_size;
+  guint max_taps;
+  guint n_phases;
+  guint32 *offset;
+  guint32 *phase;
+  guint32 *n_taps;
+  gdouble *taps;
+};
+</pre>
+<p>A structure holding resampler information.</p>
+<div class="refsect3">
+<a name="id-1.2.15.9.8.2.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><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a> <em class="structfield"><code><a name="GstVideoResampler.in-size"></a>in_size</code></em>;</p></td>
+<td class="struct_member_description"><p>the input size</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#gint"><span class="type">gint</span></a> <em class="structfield"><code><a name="GstVideoResampler.out-size"></a>out_size</code></em>;</p></td>
+<td class="struct_member_description"><p>the output size</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="GstVideoResampler.max-taps"></a>max_taps</code></em>;</p></td>
+<td class="struct_member_description"><p>the maximum number of taps</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="GstVideoResampler.n-phases"></a>n_phases</code></em>;</p></td>
+<td class="struct_member_description"><p>the number of phases</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><span class="type">guint32</span> *<em class="structfield"><code><a name="GstVideoResampler.offset"></a>offset</code></em>;</p></td>
+<td class="struct_member_description"><p>array with the source offset for each output element</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><span class="type">guint32</span> *<em class="structfield"><code><a name="GstVideoResampler.phase"></a>phase</code></em>;</p></td>
+<td class="struct_member_description"><p>array with the phase to use for each output element</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><span class="type">guint32</span> *<em class="structfield"><code><a name="GstVideoResampler.n-taps"></a>n_taps</code></em>;</p></td>
+<td class="struct_member_description"><p>array with new number of taps for each phase</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#gdouble"><span class="type">gdouble</span></a> *<em class="structfield"><code><a name="GstVideoResampler.taps"></a>taps</code></em>;</p></td>
+<td class="struct_member_description"><p>the taps for all phases</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<p class="since">Since: 1.6</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstVideoResamplerFlags"></a><h3>enum GstVideoResamplerFlags</h3>
+<p>Different resampler flags.</p>
+<div class="refsect3">
+<a name="id-1.2.15.9.8.3.4"></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-VIDEO-RESAMPLER-FLAG-NONE:CAPS"></a>GST_VIDEO_RESAMPLER_FLAG_NONE</p></td>
+<td class="enum_member_description">
+<p>no flags</p>
+</td>
+<td class="enum_member_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<p class="since">Since: 1.6</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstVideoResamplerMethod"></a><h3>enum GstVideoResamplerMethod</h3>
+<p>Different subsampling and upsampling methods</p>
+<div class="refsect3">
+<a name="id-1.2.15.9.8.4.4"></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-VIDEO-RESAMPLER-METHOD-NEAREST:CAPS"></a>GST_VIDEO_RESAMPLER_METHOD_NEAREST</p></td>
+<td class="enum_member_description">
+<p>Duplicates the samples when
+   upsampling and drops when downsampling</p>
+</td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-VIDEO-RESAMPLER-METHOD-LINEAR:CAPS"></a>GST_VIDEO_RESAMPLER_METHOD_LINEAR</p></td>
+<td class="enum_member_description">
+<p>Uses linear interpolation to reconstruct
+   missing samples and averaging to downsample</p>
+</td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-VIDEO-RESAMPLER-METHOD-CUBIC:CAPS"></a>GST_VIDEO_RESAMPLER_METHOD_CUBIC</p></td>
+<td class="enum_member_description">
+<p>Uses cubic interpolation</p>
+</td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-VIDEO-RESAMPLER-METHOD-SINC:CAPS"></a>GST_VIDEO_RESAMPLER_METHOD_SINC</p></td>
+<td class="enum_member_description">
+<p>Uses sinc interpolation</p>
+</td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-VIDEO-RESAMPLER-METHOD-LANCZOS:CAPS"></a>GST_VIDEO_RESAMPLER_METHOD_LANCZOS</p></td>
+<td class="enum_member_description">
+<p>Uses lanczos interpolation</p>
+</td>
+<td class="enum_member_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<p class="since">Since: 1.6</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GST-VIDEO-RESAMPLER-OPT-CUBIC-B:CAPS"></a><h3>GST_VIDEO_RESAMPLER_OPT_CUBIC_B</h3>
+<pre class="programlisting">#define GST_VIDEO_RESAMPLER_OPT_CUBIC_B      "GstVideoResampler.cubic-b"
+</pre>
+<p>G_TYPE_DOUBLE, B parameter of the cubic filter. The B
+parameter controls the bluriness. Values between 0.0 and
+2.0 are accepted. 1/3 is the default.</p>
+<p>Below are some values of popular filters:
+                   B       C
+Hermite           0.0     0.0
+Spline            1.0     0.0
+Catmull-Rom       0.0     1/2
+Mitchell          1/3     1/3
+Robidoux          0.3782  0.3109
+Robidoux
+ Sharp            0.2620  0.3690
+Robidoux
+ Soft             0.6796  0.1602</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GST-VIDEO-RESAMPLER-OPT-CUBIC-C:CAPS"></a><h3>GST_VIDEO_RESAMPLER_OPT_CUBIC_C</h3>
+<pre class="programlisting">#define GST_VIDEO_RESAMPLER_OPT_CUBIC_C      "GstVideoResampler.cubic-c"
+</pre>
+<p>G_TYPE_DOUBLE, C parameter of the cubic filter. The C
+parameter controls the Keys alpha value. Values between 0.0 and
+2.0 are accepted. 1/3 is the default.</p>
+<p>See <a class="link" href="gst-plugins-base-libs-GstVideoResampler.html#GST-VIDEO-RESAMPLER-OPT-CUBIC-B:CAPS" title="GST_VIDEO_RESAMPLER_OPT_CUBIC_B"><span class="type">GST_VIDEO_RESAMPLER_OPT_CUBIC_B</span></a> for some more common values</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GST-VIDEO-RESAMPLER-OPT-ENVELOPE:CAPS"></a><h3>GST_VIDEO_RESAMPLER_OPT_ENVELOPE</h3>
+<pre class="programlisting">#define GST_VIDEO_RESAMPLER_OPT_ENVELOPE      "GstVideoResampler.envelope"
+</pre>
+<p>G_TYPE_DOUBLE, specifies the size of filter envelope for
+<em class="parameter"><code>GST_VIDEO_RESAMPLER_METHOD_LANCZOS</code></em>
+. values are clamped between
+1.0 and 5.0. 2.0 is the default.</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GST-VIDEO-RESAMPLER-OPT-MAX-TAPS:CAPS"></a><h3>GST_VIDEO_RESAMPLER_OPT_MAX_TAPS</h3>
+<pre class="programlisting">#define GST_VIDEO_RESAMPLER_OPT_MAX_TAPS     "GstVideoResampler.max-taps"
+</pre>
+<p>G_TYPE_INT, limits the maximum number of taps to use.
+16 is the default.</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GST-VIDEO-RESAMPLER-OPT-SHARPEN:CAPS"></a><h3>GST_VIDEO_RESAMPLER_OPT_SHARPEN</h3>
+<pre class="programlisting">#define GST_VIDEO_RESAMPLER_OPT_SHARPEN      "GstVideoResampler.sharpen"
+</pre>
+<p>G_TYPE_DOUBLE, specifies sharpening of the filter for
+<em class="parameter"><code>GST_VIDEO_RESAMPLER_METHOD_LANCZOS</code></em>
+. values are clamped between
+0.0 and 1.0. 0.0 is the default.</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GST-VIDEO-RESAMPLER-OPT-SHARPNESS:CAPS"></a><h3>GST_VIDEO_RESAMPLER_OPT_SHARPNESS</h3>
+<pre class="programlisting">#define GST_VIDEO_RESAMPLER_OPT_SHARPNESS     "GstVideoResampler.sharpness"
+</pre>
+<p>G_TYPE_DOUBLE, specifies sharpness of the filter for
+<em class="parameter"><code>GST_VIDEO_RESAMPLER_METHOD_LANCZOS</code></em>
+. values are clamped between
+0.5 and 1.5. 1.0 is the default.</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-base-libs-GstVideoScaler.html b/docs/libs/html/gst-plugins-base-libs-GstVideoScaler.html
new file mode 100644
index 0000000..1a0f332
--- /dev/null
+++ b/docs/libs/html/gst-plugins-base-libs-GstVideoScaler.html
@@ -0,0 +1,598 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>GstVideoScaler: GStreamer Base 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 Base Plugins 1.0 Library Reference Manual">
+<link rel="up" href="gstreamer-video.html" title="Video Library">
+<link rel="prev" href="gst-plugins-base-libs-GstVideoResampler.html" title="GstVideoResampler">
+<link rel="next" href="gst-plugins-base-libs-gstvideosink.html" title="gstvideosink">
+<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-base-libs-GstVideoScaler.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="gstreamer-video.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
+<td><a accesskey="p" href="gst-plugins-base-libs-GstVideoResampler.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
+<td><a accesskey="n" href="gst-plugins-base-libs-gstvideosink.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
+</tr></table>
+<div class="refentry">
+<a name="gst-plugins-base-libs-GstVideoScaler"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="gst-plugins-base-libs-GstVideoScaler.top_of_page"></a>GstVideoScaler</span></h2>
+<p>GstVideoScaler — Utility object for rescaling video frames</p>
+</td>
+<td class="gallery_image" valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsect1">
+<a name="gst-plugins-base-libs-GstVideoScaler.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-base-libs-GstVideoScaler.html#gst-video-scaler-2d" title="gst_video_scaler_2d ()">gst_video_scaler_2d</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a class="link" href="gst-plugins-base-libs-GstVideoScaler.html#GstVideoScaler" title="GstVideoScaler"><span class="returnvalue">GstVideoScaler</span></a> *
+</td>
+<td class="function_name">
+<a class="link" href="gst-plugins-base-libs-GstVideoScaler.html#gst-video-scaler-combine-packed-YUV" title="gst_video_scaler_combine_packed_YUV ()">gst_video_scaler_combine_packed_YUV</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-base-libs-GstVideoScaler.html#gst-video-scaler-free" title="gst_video_scaler_free ()">gst_video_scaler_free</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#gdouble"><span class="returnvalue">gdouble</span></a> *
+</td>
+<td class="function_name">
+<a class="link" href="gst-plugins-base-libs-GstVideoScaler.html#gst-video-scaler-get-coeff" title="gst_video_scaler_get_coeff ()">gst_video_scaler_get_coeff</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-base-libs-GstVideoScaler.html#gst-video-scaler-horizontal" title="gst_video_scaler_horizontal ()">gst_video_scaler_horizontal</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a class="link" href="gst-plugins-base-libs-GstVideoScaler.html#GstVideoScaler" title="GstVideoScaler"><span class="returnvalue">GstVideoScaler</span></a> *
+</td>
+<td class="function_name">
+<a class="link" href="gst-plugins-base-libs-GstVideoScaler.html#gst-video-scaler-new" title="gst_video_scaler_new ()">gst_video_scaler_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-base-libs-GstVideoScaler.html#gst-video-scaler-vertical" title="gst_video_scaler_vertical ()">gst_video_scaler_vertical</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-libs-GstVideoScaler.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-base-libs-GstVideoScaler.html#GstVideoScaler" title="GstVideoScaler">GstVideoScaler</a></td>
+</tr>
+<tr>
+<td class="datatype_keyword">enum</td>
+<td class="function_name"><a class="link" href="gst-plugins-base-libs-GstVideoScaler.html#GstVideoScalerFlags" title="enum GstVideoScalerFlags">GstVideoScalerFlags</a></td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-libs-GstVideoScaler.includes"></a><h2>Includes</h2>
+<pre class="synopsis">#include &lt;gst/video/video-scaler.h&gt;
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-libs-GstVideoScaler.description"></a><h2>Description</h2>
+<p><a class="link" href="gst-plugins-base-libs-GstVideoScaler.html#GstVideoScaler" title="GstVideoScaler"><span class="type">GstVideoScaler</span></a> is a utility object for rescaling and resampling
+video frames using various interpolation / sampling methods.</p>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-libs-GstVideoScaler.functions_details"></a><h2>Functions</h2>
+<div class="refsect2">
+<a name="gst-video-scaler-2d"></a><h3>gst_video_scaler_2d ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+gst_video_scaler_2d (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-GstVideoScaler.html#GstVideoScaler" title="GstVideoScaler"><span class="type">GstVideoScaler</span></a> *hscale</code></em>,
+                     <em class="parameter"><code><a class="link" href="gst-plugins-base-libs-GstVideoScaler.html#GstVideoScaler" title="GstVideoScaler"><span class="type">GstVideoScaler</span></a> *vscale</code></em>,
+                     <em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstvideo.html#GstVideoFormat" title="enum GstVideoFormat"><span class="type">GstVideoFormat</span></a> format</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> src</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> src_stride</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> dest</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> dest_stride</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> x</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> y</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> 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>
+<p>Scale a rectangle of pixels in <em class="parameter"><code>src</code></em>
+ with <em class="parameter"><code>src_stride</code></em>
+ to <em class="parameter"><code>dest</code></em>
+ with
+<em class="parameter"><code>dest_stride</code></em>
+ using the horizontal scaler <em class="parameter"><code>hscaler</code></em>
+ and the vertical
+scaler <em class="parameter"><code>vscale</code></em>
+.</p>
+<p>One or both of <em class="parameter"><code>hscale</code></em>
+ and <em class="parameter"><code>vscale</code></em>
+ can be NULL to only perform scaling in
+one dimension or do a copy without scaling.</p>
+<p><em class="parameter"><code>x</code></em>
+ and <em class="parameter"><code>y</code></em>
+ are the coordinates in the destination image to process.</p>
+<div class="refsect3">
+<a name="id-1.2.15.10.7.2.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>hscale</p></td>
+<td class="parameter_description"><p>a horzontal <a class="link" href="gst-plugins-base-libs-GstVideoScaler.html#GstVideoScaler" title="GstVideoScaler"><span class="type">GstVideoScaler</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>vscale</p></td>
+<td class="parameter_description"><p>a vertical <a class="link" href="gst-plugins-base-libs-GstVideoScaler.html#GstVideoScaler" title="GstVideoScaler"><span class="type">GstVideoScaler</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 <a class="link" href="gst-plugins-base-libs-gstvideo.html#GstVideoFormat" title="enum GstVideoFormat"><span class="type">GstVideoFormat</span></a> for <em class="parameter"><code>srcs</code></em>
+and <em class="parameter"><code>dest</code></em>
+</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>src</p></td>
+<td class="parameter_description"><p>source pixels</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>src_stride</p></td>
+<td class="parameter_description"><p>source pixels stride</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>dest</p></td>
+<td class="parameter_description"><p>destination pixels</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>dest_stride</p></td>
+<td class="parameter_description"><p>destination pixels stride</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>x</p></td>
+<td class="parameter_description"><p>the horizontal destination offset</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>y</p></td>
+<td class="parameter_description"><p>the vertical destination offset</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>width</p></td>
+<td class="parameter_description"><p>the number of output pixels to scale</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>height</p></td>
+<td class="parameter_description"><p>the number of output lines to scale</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-video-scaler-combine-packed-YUV"></a><h3>gst_video_scaler_combine_packed_YUV ()</h3>
+<pre class="programlisting"><a class="link" href="gst-plugins-base-libs-GstVideoScaler.html#GstVideoScaler" title="GstVideoScaler"><span class="returnvalue">GstVideoScaler</span></a> *
+gst_video_scaler_combine_packed_YUV (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-GstVideoScaler.html#GstVideoScaler" title="GstVideoScaler"><span class="type">GstVideoScaler</span></a> *y_scale</code></em>,
+                                     <em class="parameter"><code><a class="link" href="gst-plugins-base-libs-GstVideoScaler.html#GstVideoScaler" title="GstVideoScaler"><span class="type">GstVideoScaler</span></a> *uv_scale</code></em>,
+                                     <em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstvideo.html#GstVideoFormat" title="enum GstVideoFormat"><span class="type">GstVideoFormat</span></a> in_format</code></em>,
+                                     <em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstvideo.html#GstVideoFormat" title="enum GstVideoFormat"><span class="type">GstVideoFormat</span></a> out_format</code></em>);</pre>
+<p>Combine a scaler for Y and UV into one scaler for the packed <em class="parameter"><code>format</code></em>
+.</p>
+<p><span class="annotation">[<acronym title="Exposed in C code, not necessarily available in other languages."><span class="acronym">skip</span></acronym>]</span></p>
+<div class="refsect3">
+<a name="id-1.2.15.10.7.3.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>y_scale</p></td>
+<td class="parameter_description"><p>a scaler for the Y component</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>uv_scale</p></td>
+<td class="parameter_description"><p>a scaler for the U and V components</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>in_format</p></td>
+<td class="parameter_description"><p>the input video format</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>out_format</p></td>
+<td class="parameter_description"><p>the output video format</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="id-1.2.15.10.7.3.7"></a><h4>Returns</h4>
+<p> a new horizontal videoscaler for <em class="parameter"><code>format</code></em>
+.</p>
+</div>
+<p class="since">Since: 1.6</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-video-scaler-free"></a><h3>gst_video_scaler_free ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+gst_video_scaler_free (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-GstVideoScaler.html#GstVideoScaler" title="GstVideoScaler"><span class="type">GstVideoScaler</span></a> *scale</code></em>);</pre>
+<p>Free a previously allocated <a class="link" href="gst-plugins-base-libs-GstVideoScaler.html#GstVideoScaler" title="GstVideoScaler"><span class="type">GstVideoScaler</span></a> <em class="parameter"><code>scale</code></em>
+.</p>
+<div class="refsect3">
+<a name="id-1.2.15.10.7.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>scale</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gst-plugins-base-libs-GstVideoScaler.html#GstVideoScaler" title="GstVideoScaler"><span class="type">GstVideoScaler</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-video-scaler-get-coeff"></a><h3>gst_video_scaler_get_coeff ()</h3>
+<pre class="programlisting">const <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gdouble"><span class="returnvalue">gdouble</span></a> *
+gst_video_scaler_get_coeff (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-GstVideoScaler.html#GstVideoScaler" title="GstVideoScaler"><span class="type">GstVideoScaler</span></a> *scale</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> out_offset</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> *in_offset</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> *n_taps</code></em>);</pre>
+<p>For a given pixel at <em class="parameter"><code>out_offset</code></em>
+, get the first required input pixel at
+<em class="parameter"><code>in_offset</code></em>
+ and the <em class="parameter"><code>n_taps</code></em>
+ filter coefficients.</p>
+<p>Note that for interlaced content, <em class="parameter"><code>in_offset</code></em>
+ needs to be incremented with
+2 to get the next input line.</p>
+<div class="refsect3">
+<a name="id-1.2.15.10.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>scale</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gst-plugins-base-libs-GstVideoScaler.html#GstVideoScaler" title="GstVideoScaler"><span class="type">GstVideoScaler</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>out_offset</p></td>
+<td class="parameter_description"><p>an output offset</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>in_offset</p></td>
+<td class="parameter_description"><p>result input offset</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>n_taps</p></td>
+<td class="parameter_description"><p>result n_taps</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="id-1.2.15.10.7.5.7"></a><h4>Returns</h4>
+<p> an array of <em class="parameter"><code>n_tap</code></em>
+gdouble values with filter coefficients.</p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-video-scaler-horizontal"></a><h3>gst_video_scaler_horizontal ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+gst_video_scaler_horizontal (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-GstVideoScaler.html#GstVideoScaler" title="GstVideoScaler"><span class="type">GstVideoScaler</span></a> *scale</code></em>,
+                             <em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstvideo.html#GstVideoFormat" title="enum GstVideoFormat"><span class="type">GstVideoFormat</span></a> format</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> src</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> dest</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> dest_offset</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> width</code></em>);</pre>
+<p>Horizontally scale the pixels in <em class="parameter"><code>src</code></em>
+ to <em class="parameter"><code>dest</code></em>
+, starting from <em class="parameter"><code>dest_offset</code></em>
+
+for <em class="parameter"><code>width</code></em>
+ samples.</p>
+<div class="refsect3">
+<a name="id-1.2.15.10.7.6.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>scale</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gst-plugins-base-libs-GstVideoScaler.html#GstVideoScaler" title="GstVideoScaler"><span class="type">GstVideoScaler</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 <a class="link" href="gst-plugins-base-libs-gstvideo.html#GstVideoFormat" title="enum GstVideoFormat"><span class="type">GstVideoFormat</span></a> for <em class="parameter"><code>src</code></em>
+and <em class="parameter"><code>dest</code></em>
+</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>src</p></td>
+<td class="parameter_description"><p>source pixels</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>dest</p></td>
+<td class="parameter_description"><p>destination pixels</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>dest_offset</p></td>
+<td class="parameter_description"><p>the horizontal destination offset</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>width</p></td>
+<td class="parameter_description"><p>the number of pixels to scale</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-video-scaler-new"></a><h3>gst_video_scaler_new ()</h3>
+<pre class="programlisting"><a class="link" href="gst-plugins-base-libs-GstVideoScaler.html#GstVideoScaler" title="GstVideoScaler"><span class="returnvalue">GstVideoScaler</span></a> *
+gst_video_scaler_new (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-GstVideoResampler.html#GstVideoResamplerMethod" title="enum GstVideoResamplerMethod"><span class="type">GstVideoResamplerMethod</span></a> method</code></em>,
+                      <em class="parameter"><code><a class="link" href="gst-plugins-base-libs-GstVideoScaler.html#GstVideoScalerFlags" title="enum GstVideoScalerFlags"><span class="type">GstVideoScalerFlags</span></a> flags</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> n_taps</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> in_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> out_size</code></em>,
+                      <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstStructure.html"><span class="type">GstStructure</span></a> *options</code></em>);</pre>
+<p>Make a new <em class="parameter"><code>method</code></em>
+ video scaler. <em class="parameter"><code>in_size</code></em>
+ source lines/pixels will
+be scaled to <em class="parameter"><code>out_size</code></em>
+ destination lines/pixels.</p>
+<p><em class="parameter"><code>n_taps</code></em>
+ specifies the amount of pixels to use from the source for one output
+pixel. If n_taps is 0, this function chooses a good value automatically based
+on the <em class="parameter"><code>method</code></em>
+ and <em class="parameter"><code>in_size</code></em>
+/<em class="parameter"><code>out_size</code></em>
+.</p>
+<p><span class="annotation">[<acronym title="Exposed in C code, not necessarily available in other languages."><span class="acronym">skip</span></acronym>]</span></p>
+<div class="refsect3">
+<a name="id-1.2.15.10.7.7.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>method</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gst-plugins-base-libs-GstVideoResampler.html#GstVideoResamplerMethod" title="enum GstVideoResamplerMethod"><span class="type">GstVideoResamplerMethod</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>flags</p></td>
+<td class="parameter_description"><p><a class="link" href="gst-plugins-base-libs-GstVideoScaler.html#GstVideoScalerFlags" title="enum GstVideoScalerFlags"><span class="type">GstVideoScalerFlags</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>n_taps</p></td>
+<td class="parameter_description"><p>number of taps to use</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>in_size</p></td>
+<td class="parameter_description"><p>number of source elements</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>out_size</p></td>
+<td class="parameter_description"><p>number of destination elements</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>options</p></td>
+<td class="parameter_description"><p> extra options. </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.15.10.7.7.8"></a><h4>Returns</h4>
+<p> a <span class="type">GstVideoResample</span></p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-video-scaler-vertical"></a><h3>gst_video_scaler_vertical ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+gst_video_scaler_vertical (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-GstVideoScaler.html#GstVideoScaler" title="GstVideoScaler"><span class="type">GstVideoScaler</span></a> *scale</code></em>,
+                           <em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstvideo.html#GstVideoFormat" title="enum GstVideoFormat"><span class="type">GstVideoFormat</span></a> format</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> src_lines[]</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> dest</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> dest_offset</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> width</code></em>);</pre>
+<p>Vertically combine <em class="parameter"><code>width</code></em>
+ pixels in the lines in <em class="parameter"><code>src_lines</code></em>
+ to <em class="parameter"><code>dest</code></em>
+.
+<em class="parameter"><code>dest</code></em>
+ is the location of the target line at <em class="parameter"><code>dest_offset</code></em>
+ and
+<em class="parameter"><code>srcs</code></em>
+ are the input lines for <em class="parameter"><code>dest_offset</code></em>
+, as obtained with
+<code class="function">gst_video_scaler_get_info()</code>.</p>
+<div class="refsect3">
+<a name="id-1.2.15.10.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>scale</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gst-plugins-base-libs-GstVideoScaler.html#GstVideoScaler" title="GstVideoScaler"><span class="type">GstVideoScaler</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 <a class="link" href="gst-plugins-base-libs-gstvideo.html#GstVideoFormat" title="enum GstVideoFormat"><span class="type">GstVideoFormat</span></a> for <em class="parameter"><code>srcs</code></em>
+and <em class="parameter"><code>dest</code></em>
+</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>src_lines</p></td>
+<td class="parameter_description"><p>source pixels lines</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>dest</p></td>
+<td class="parameter_description"><p>destination pixels</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>dest_offset</p></td>
+<td class="parameter_description"><p>the vertical destination offset</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>width</p></td>
+<td class="parameter_description"><p>the number of pixels to scale</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-libs-GstVideoScaler.other_details"></a><h2>Types and Values</h2>
+<div class="refsect2">
+<a name="GstVideoScaler"></a><h3>GstVideoScaler</h3>
+<pre class="programlisting">typedef struct _GstVideoScaler GstVideoScaler;</pre>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstVideoScalerFlags"></a><h3>enum GstVideoScalerFlags</h3>
+<p>Different scale flags.</p>
+<div class="refsect3">
+<a name="id-1.2.15.10.8.3.4"></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-VIDEO-SCALER-FLAG-NONE:CAPS"></a>GST_VIDEO_SCALER_FLAG_NONE</p></td>
+<td class="enum_member_description">
+<p>no flags</p>
+</td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-VIDEO-SCALER-FLAG-INTERLACED:CAPS"></a>GST_VIDEO_SCALER_FLAG_INTERLACED</p></td>
+<td class="enum_member_description">
+<p>Set up a scaler for interlaced content</p>
+</td>
+<td class="enum_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-base-libs-appsink.html b/docs/libs/html/gst-plugins-base-libs-appsink.html
index 5eec43d..97b7e96 100644
--- a/docs/libs/html/gst-plugins-base-libs-appsink.html
+++ b/docs/libs/html/gst-plugins-base-libs-appsink.html
@@ -2,13 +2,13 @@
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>GStreamer Base Plugins 1.0 Library Reference Manual: appsink</title>
+<title>appsink: GStreamer Base 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 Base Plugins 1.0 Library Reference Manual">
 <link rel="up" href="gstreamer-app.html" title="App Library">
 <link rel="prev" href="gst-plugins-base-libs-appsrc.html" title="appsrc">
 <link rel="next" href="gstreamer-audio.html" title="Audio Library">
-<meta name="generator" content="GTK-Doc V1.21 (XML mode)">
+<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">
@@ -198,8 +198,8 @@
 a copy of the caps structure. After calling this method, the sink will only
 accept caps that match <em class="parameter"><code>caps</code></em>
 . If <em class="parameter"><code>caps</code></em>
- is non-fixed, you must check the caps
-on the buffers to get the actual used caps.</p>
+ is non-fixed, or incomplete,
+you must check the caps on the samples to get the actual used caps.</p>
 <div class="refsect3">
 <a name="id-1.2.5.5.7.2.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
@@ -248,7 +248,6 @@
 <div class="refsect3">
 <a name="id-1.2.5.5.7.3.6"></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> accepted by the sink. <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstCaps.html#gst-caps-unref"><code class="function">gst_caps_unref()</code></a> after usage.</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -279,7 +278,6 @@
 <div class="refsect3">
 <a name="id-1.2.5.5.7.4.7"></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 no more samples can be pulled and the appsink is EOS.</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -340,7 +338,6 @@
 <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>appsink</code></em>
 is emiting the "new-preroll" and "new-sample"
 signals.</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -402,7 +399,6 @@
 <div class="refsect3">
 <a name="id-1.2.5.5.7.8.6"></a><h4>Returns</h4>
 <p> The maximum amount of buffers that can be queued.</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -465,7 +461,6 @@
 <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>appsink</code></em>
 is dropping old buffers when the queue is
 filled.</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -557,8 +552,9 @@
 less expensive, but also less flexible.</p>
 <p>If callbacks are installed, no signals will be emitted for performance
 reasons.</p>
+<p><span class="annotation">[<acronym title="Exposed in C code, not necessarily available in other languages."><span class="acronym">skip</span></acronym>]</span></p>
 <div class="refsect3">
-<a name="id-1.2.5.5.7.13.6"></a><h4>Parameters</h4>
+<a name="id-1.2.5.5.7.13.7"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -615,13 +611,13 @@
 <tr>
 <td class="struct_member_name"><p><em class="structfield"><code><a name="GstAppSinkCallbacks.eos"></a>eos</code></em> ()</p></td>
 <td class="struct_member_description"><p>Called when the end-of-stream has been reached. This callback
-is called from the steaming thread.</p></td>
+is called from the streaming thread.</p></td>
 <td class="struct_member_annotations"> </td>
 </tr>
 <tr>
 <td class="struct_member_name"><p><em class="structfield"><code><a name="GstAppSinkCallbacks.new-preroll"></a>new_preroll</code></em> ()</p></td>
 <td class="struct_member_description"><p>Called when a new preroll sample is available.
-This callback is called from the steaming thread.
+This callback is called from the streaming thread.
 The new preroll sample can be retrieved with
 <a class="link" href="gst-plugins-base-libs-appsink.html#gst-app-sink-pull-preroll" title="gst_app_sink_pull_preroll ()"><code class="function">gst_app_sink_pull_preroll()</code></a> either from this callback
 or from any other thread.</p></td>
@@ -630,7 +626,7 @@
 <tr>
 <td class="struct_member_name"><p><em class="structfield"><code><a name="GstAppSinkCallbacks.new-sample"></a>new_sample</code></em> ()</p></td>
 <td class="struct_member_description"><p>Called when a new sample is available.
-This callback is called from the steaming thread.
+This callback is called from the streaming thread.
 The new sample can be retrieved with
 <a class="link" href="gst-plugins-base-libs-appsink.html#gst-app-sink-pull-sample" title="gst_app_sink_pull_sample ()"><code class="function">gst_app_sink_pull_sample()</code></a> either from this callback
 or from any other thread.</p></td>
@@ -647,7 +643,6 @@
 </div>
 </div>
 <div class="footer">
-<hr>
-          Generated by GTK-Doc V1.21</div>
+<hr>Generated by GTK-Doc V1.24</div>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/libs/html/gst-plugins-base-libs-appsrc.html b/docs/libs/html/gst-plugins-base-libs-appsrc.html
index 75770c0..17d657f 100644
--- a/docs/libs/html/gst-plugins-base-libs-appsrc.html
+++ b/docs/libs/html/gst-plugins-base-libs-appsrc.html
@@ -2,13 +2,13 @@
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>GStreamer Base Plugins 1.0 Library Reference Manual: appsrc</title>
+<title>appsrc: GStreamer Base 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 Base Plugins 1.0 Library Reference Manual">
 <link rel="up" href="gstreamer-app.html" title="App Library">
 <link rel="prev" href="gstreamer-app.html" title="App Library">
 <link rel="next" href="gst-plugins-base-libs-appsink.html" title="appsink">
-<meta name="generator" content="GTK-Doc V1.21 (XML mode)">
+<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">
@@ -165,6 +165,14 @@
 <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html#GstFlowReturn"><span class="returnvalue">GstFlowReturn</span></a>
 </td>
 <td class="function_name">
+<a class="link" href="gst-plugins-base-libs-appsrc.html#gst-app-src-push-sample" title="gst_app_src_push_sample ()">gst_app_src_push_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/GstPad.html#GstFlowReturn"><span class="returnvalue">GstFlowReturn</span></a>
+</td>
+<td class="function_name">
 <a class="link" href="gst-plugins-base-libs-appsrc.html#gst-app-src-end-of-stream" title="gst_app_src_end_of_stream ()">gst_app_src_end_of_stream</a> <span class="c_punctuation">()</span>
 </td>
 </tr>
@@ -198,15 +206,18 @@
 <div class="refsect1">
 <a name="gst-plugins-base-libs-appsrc.description"></a><h2>Description</h2>
 <p>The appsrc element can be used by applications to insert data into a
-GStreamer pipeline. Unlike most GStreamer elements, Appsrc provides
+GStreamer pipeline. Unlike most GStreamer elements, appsrc provides
 external API functions.</p>
 <p>appsrc can be used by linking with the libgstapp library to access the
 methods directly or by using the appsrc action signals.</p>
-<p>Before operating appsrc, the caps property must be set to a fixed caps
+<p>Before operating appsrc, the caps property must be set to fixed caps
 describing the format of the data that will be pushed with appsrc. An
 exception to this is when pushing buffers with unknown caps, in which case no
 caps should be set. This is typically true of file-like sources that push raw
-byte buffers.</p>
+byte buffers. If you don't want to explicitly set the caps, you can use
+gst_app_src_push_sample. This method gets the caps associated with the
+sample and sets them on the appsrc replacing any previously set caps (if
+different from sample's caps).</p>
 <p>The main way of handing data to the appsrc element is by calling the
 <a class="link" href="gst-plugins-base-libs-appsrc.html#gst-app-src-push-buffer" title="gst_app_src_push_buffer ()"><code class="function">gst_app_src_push_buffer()</code></a> method or by emitting the push-buffer action signal.
 This will put the buffer onto a queue from which appsrc will read from in its
@@ -228,25 +239,25 @@
 new position.</p>
 <p>These signals allow the application to operate the appsrc in two different
 ways:</p>
-<p>The push model, in which the application repeatedly calls the push-buffer method
-with a new buffer. Optionally, the queue size in the appsrc can be controlled
-with the enough-data and need-data signals by respectively stopping/starting
-the push-buffer calls. This is a typical mode of operation for the
-stream-type "stream" and "seekable". Use this model when implementing various
-network protocols or hardware devices.</p>
-<p>The pull model where the need-data signal triggers the next push-buffer call.
+<p>The push mode, in which the application repeatedly calls the push-buffer/push-sample
+method with a new buffer/sample. Optionally, the queue size in the appsrc 
+can be controlled with the enough-data and need-data signals by respectively 
+stopping/starting the push-buffer/push-sample calls. This is a typical 
+mode of operation for the stream-type "stream" and "seekable". Use this 
+mode when implementing various network protocols or hardware devices.</p>
+<p>The pull mode, in which the need-data signal triggers the next push-buffer call.
 This mode is typically used in the "random-access" stream-type. Use this
-model for file access or other randomly accessable sources. In this mode, a
+mode for file access or other randomly accessable sources. In this mode, a
 buffer of exactly the amount of bytes given by the need-data signal should be
 pushed into appsrc.</p>
 <p>In all modes, the size property on appsrc should contain the total stream
 size in bytes. Setting this property is mandatory in the random-access mode.
 For the stream and seekable modes, setting this property is optional but
 recommended.</p>
-<p>When the application is finished pushing data into appsrc, it should call
+<p>When the application has finished pushing data into appsrc, it should call
 <a class="link" href="gst-plugins-base-libs-appsrc.html#gst-app-src-end-of-stream" title="gst_app_src_end_of_stream ()"><code class="function">gst_app_src_end_of_stream()</code></a> or emit the end-of-stream action signal. After
 this call, no more buffers can be pushed into appsrc until a flushing seek
-happened or the state of the appsrc has gone through READY.</p>
+occurs or the state of the appsrc has gone through READY.</p>
 </div>
 <div class="refsect1">
 <a name="gst-plugins-base-libs-appsrc.functions_details"></a><h2>Functions</h2>
@@ -309,7 +320,6 @@
 <div class="refsect3">
 <a name="id-1.2.5.4.7.3.6"></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> produced by the source. <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstCaps.html#gst-caps-unref"><code class="function">gst_caps_unref()</code></a> after usage.</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -447,7 +457,6 @@
 <div class="refsect3">
 <a name="id-1.2.5.4.7.7.6"></a><h4>Returns</h4>
 <p> the size of the stream previously set with <a class="link" href="gst-plugins-base-libs-appsrc.html#gst-app-src-set-size" title="gst_app_src_set_size ()"><code class="function">gst_app_src_set_size()</code></a>;</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -509,7 +518,6 @@
 <div class="refsect3">
 <a name="id-1.2.5.4.7.9.6"></a><h4>Returns</h4>
 <p> the stream type.</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -571,7 +579,6 @@
 <div class="refsect3">
 <a name="id-1.2.5.4.7.11.6"></a><h4>Returns</h4>
 <p> The maximum amount of bytes that can be queued.</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -599,9 +606,8 @@
 <div class="refsect3">
 <a name="id-1.2.5.4.7.12.6"></a><h4>Returns</h4>
 <p> The number of currently queued bytes.</p>
-<p></p>
 </div>
-<p class="since">Since 1.2</p>
+<p class="since">Since: 1.2</p>
 </div>
 <hr>
 <div class="refsect2">
@@ -629,7 +635,6 @@
 <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>appsrc</code></em>
 is emitting the "new-preroll" and "new-buffer"
 signals.</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -678,8 +683,9 @@
 less expensive, but also less flexible.</p>
 <p>If callbacks are installed, no signals will be emitted for performance
 reasons.</p>
+<p><span class="annotation">[<acronym title="Exposed in C code, not necessarily available in other languages."><span class="acronym">skip</span></acronym>]</span></p>
 <div class="refsect3">
-<a name="id-1.2.5.4.7.15.6"></a><h4>Parameters</h4>
+<a name="id-1.2.5.4.7.15.7"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -745,22 +751,65 @@
 </div>
 <div class="refsect3">
 <a name="id-1.2.5.4.7.16.7"></a><h4>Returns</h4>
-<p> <span class="type">GST_FLOW_OK</span> when the buffer was successfuly queued.
-<span class="type">GST_FLOW_FLUSHING</span> when <em class="parameter"><code>appsrc</code></em>
+<p> <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html#GST-FLOW-OK:CAPS"><span class="type">GST_FLOW_OK</span></a> when the buffer was successfuly queued.
+<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html#GST-FLOW-FLUSHING:CAPS"><span class="type">GST_FLOW_FLUSHING</span></a> when <em class="parameter"><code>appsrc</code></em>
 is not PAUSED or PLAYING.
-<span class="type">GST_FLOW_EOS</span> when EOS occured.</p>
-<p></p>
+<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html#GST-FLOW-EOS:CAPS"><span class="type">GST_FLOW_EOS</span></a> when EOS occured.</p>
 </div>
 </div>
 <hr>
 <div class="refsect2">
+<a name="gst-app-src-push-sample"></a><h3>gst_app_src_push_sample ()</h3>
+<pre class="programlisting"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html#GstFlowReturn"><span class="returnvalue">GstFlowReturn</span></a>
+gst_app_src_push_sample (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base/html/gst-plugins-base-plugins-appsrc.html#GstAppSrc"><span class="type">GstAppSrc</span></a> *appsrc</code></em>,
+                         <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstSample.html"><span class="type">GstSample</span></a> *sample</code></em>);</pre>
+<p>Extract a buffer from the provided sample and adds it to the queue of 
+buffers that the appsrc element will push to its source pad. Any 
+previous caps setted on appsrc will be replaced by the caps associated 
+with the sample if not equal.</p>
+<p>When the block property is TRUE, this function can block until free
+space becomes available in the queue.</p>
+<div class="refsect3">
+<a name="id-1.2.5.4.7.17.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>appsrc</p></td>
+<td class="parameter_description"><p>a <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base/html/gst-plugins-base-plugins-appsrc.html#GstAppSrc"><span class="type">GstAppSrc</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>sample</p></td>
+<td class="parameter_description"><p> a <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstSample.html"><span class="type">GstSample</span></a> from wich extract buffer to
+push and caps to set. </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 class="refsect3">
+<a name="id-1.2.5.4.7.17.7"></a><h4>Returns</h4>
+<p> <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html#GST-FLOW-OK:CAPS"><span class="type">GST_FLOW_OK</span></a> when the buffer was successfuly queued.
+<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html#GST-FLOW-FLUSHING:CAPS"><span class="type">GST_FLOW_FLUSHING</span></a> when <em class="parameter"><code>appsrc</code></em>
+is not PAUSED or PLAYING.
+<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html#GST-FLOW-EOS:CAPS"><span class="type">GST_FLOW_EOS</span></a> when EOS occured.</p>
+</div>
+<p class="since">Since: 1.6</p>
+</div>
+<hr>
+<div class="refsect2">
 <a name="gst-app-src-end-of-stream"></a><h3>gst_app_src_end_of_stream ()</h3>
 <pre class="programlisting"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html#GstFlowReturn"><span class="returnvalue">GstFlowReturn</span></a>
 gst_app_src_end_of_stream (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base/html/gst-plugins-base-plugins-appsrc.html#GstAppSrc"><span class="type">GstAppSrc</span></a> *appsrc</code></em>);</pre>
 <p>Indicates to the appsrc element that the last buffer queued in the
 element is the last buffer of the stream.</p>
 <div class="refsect3">
-<a name="id-1.2.5.4.7.17.5"></a><h4>Parameters</h4>
+<a name="id-1.2.5.4.7.18.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -775,11 +824,10 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.5.4.7.17.6"></a><h4>Returns</h4>
-<p> <span class="type">GST_FLOW_OK</span> when the EOS was successfuly queued.
-<span class="type">GST_FLOW_FLUSHING</span> when <em class="parameter"><code>appsrc</code></em>
+<a name="id-1.2.5.4.7.18.6"></a><h4>Returns</h4>
+<p> <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html#GST-FLOW-OK:CAPS"><span class="type">GST_FLOW_OK</span></a> when the EOS was successfuly queued.
+<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html#GST-FLOW-FLUSHING:CAPS"><span class="type">GST_FLOW_FLUSHING</span></a> when <em class="parameter"><code>appsrc</code></em>
 is not PAUSED or PLAYING.</p>
-<p></p>
 </div>
 </div>
 </div>
@@ -880,7 +928,6 @@
 </div>
 </div>
 <div class="footer">
-<hr>
-          Generated by GTK-Doc V1.21</div>
+<hr>Generated by GTK-Doc V1.24</div>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/libs/html/gst-plugins-base-libs-dmabuf.html b/docs/libs/html/gst-plugins-base-libs-dmabuf.html
index e68b18e..737c4ce 100644
--- a/docs/libs/html/gst-plugins-base-libs-dmabuf.html
+++ b/docs/libs/html/gst-plugins-base-libs-dmabuf.html
@@ -2,13 +2,13 @@
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>GStreamer Base Plugins 1.0 Library Reference Manual: dmabuf</title>
+<title>dmabuf: GStreamer Base 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 Base Plugins 1.0 Library Reference Manual">
 <link rel="up" href="gstreamer-allocators.html" title="Allocators Library">
 <link rel="prev" href="gstreamer-allocators.html" title="Allocators Library">
-<link rel="next" href="gstreamer-app.html" title="App Library">
-<meta name="generator" content="GTK-Doc V1.21 (XML mode)">
+<link rel="next" href="gst-plugins-base-libs-fdmemory.html" title="fdmemory">
+<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">
@@ -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="gstreamer-allocators.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
 <td><a accesskey="p" href="gstreamer-allocators.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
-<td><a accesskey="n" href="gstreamer-app.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
+<td><a accesskey="n" href="gst-plugins-base-libs-fdmemory.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
 </tr></table>
 <div class="refentry">
 <a name="gst-plugins-base-libs-dmabuf"></a><div class="titlepage"></div>
@@ -41,6 +41,14 @@
 <tbody>
 <tr>
 <td class="function_type">
+<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstAllocator.html"><span class="returnvalue">GstAllocator</span></a> *
+</td>
+<td class="function_name">
+<a class="link" href="gst-plugins-base-libs-dmabuf.html#gst-dmabuf-allocator-new" title="gst_dmabuf_allocator_new ()">gst_dmabuf_allocator_new</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">
@@ -77,6 +85,21 @@
 <div class="refsect1">
 <a name="gst-plugins-base-libs-dmabuf.functions_details"></a><h2>Functions</h2>
 <div class="refsect2">
+<a name="gst-dmabuf-allocator-new"></a><h3>gst_dmabuf_allocator_new ()</h3>
+<pre class="programlisting"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstAllocator.html"><span class="returnvalue">GstAllocator</span></a> *
+gst_dmabuf_allocator_new (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
+<p>Return a new dmabuf allocator.</p>
+<div class="refsect3">
+<a name="id-1.2.4.3.6.2.5"></a><h4>Returns</h4>
+<p> a new dmabuf allocator, or NULL if the allocator
+isn't available. Use <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstObject.html#gst-object-unref"><code class="function">gst_object_unref()</code></a> to release the allocator 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>
+<p class="since">Since: 1.2</p>
+</div>
+<hr>
+<div class="refsect2">
 <a name="gst-dmabuf-allocator-alloc"></a><h3>gst_dmabuf_allocator_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_dmabuf_allocator_alloc (<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>,
@@ -84,7 +107,7 @@
                             <em class="parameter"><code><span class="type">gsize</span> size</code></em>);</pre>
 <p>Return a <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstMemory.html"><code class="literal">GstMemory</code></a> that wraps a dmabuf file descriptor.</p>
 <div class="refsect3">
-<a name="id-1.2.4.3.6.2.5"></a><h4>Parameters</h4>
+<a name="id-1.2.4.3.6.3.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -111,7 +134,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.4.3.6.2.6"></a><h4>Returns</h4>
+<a name="id-1.2.4.3.6.3.6"></a><h4>Returns</h4>
 <p> a GstMemory based on <em class="parameter"><code>allocator</code></em>
 .
 When the buffer will be released dmabuf allocator will close the <em class="parameter"><code>fd</code></em>
@@ -119,7 +142,7 @@
 The memory is only mmapped on <code class="function">gst_buffer_mmap()</code> request. </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.2</p>
+<p class="since">Since: 1.2</p>
 </div>
 <hr>
 <div class="refsect2">
@@ -129,7 +152,7 @@
 <p>Return the file descriptor associated with <em class="parameter"><code>mem</code></em>
 .</p>
 <div class="refsect3">
-<a name="id-1.2.4.3.6.3.5"></a><h4>Parameters</h4>
+<a name="id-1.2.4.3.6.4.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -144,11 +167,12 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.4.3.6.3.6"></a><h4>Returns</h4>
-<p> the file descriptor associated with the memory, or -1</p>
-<p></p>
+<a name="id-1.2.4.3.6.4.6"></a><h4>Returns</h4>
+<p> the file descriptor associated with the memory, or -1.  The file
+descriptor is still owned by the GstMemory.  Use dup to take a copy
+if you intend to use it beyond the lifetime of this GstMemory.</p>
 </div>
-<p class="since">Since 1.2</p>
+<p class="since">Since: 1.2</p>
 </div>
 <hr>
 <div class="refsect2">
@@ -158,7 +182,7 @@
 <p>Check if <em class="parameter"><code>mem</code></em>
  is dmabuf memory.</p>
 <div class="refsect3">
-<a name="id-1.2.4.3.6.4.5"></a><h4>Parameters</h4>
+<a name="id-1.2.4.3.6.5.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -173,12 +197,11 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.4.3.6.4.6"></a><h4>Returns</h4>
+<a name="id-1.2.4.3.6.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 <em class="parameter"><code>mem</code></em>
 is dmabuf memory, otherwise <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a></p>
-<p></p>
 </div>
-<p class="since">Since 1.2</p>
+<p class="since">Since: 1.2</p>
 </div>
 </div>
 <div class="refsect1">
@@ -190,7 +213,6 @@
 </div>
 </div>
 <div class="footer">
-<hr>
-          Generated by GTK-Doc V1.21</div>
+<hr>Generated by GTK-Doc V1.24</div>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/libs/html/gst-plugins-base-libs-encoding-profile.html b/docs/libs/html/gst-plugins-base-libs-encoding-profile.html
index 913bed9..98eacbd 100644
--- a/docs/libs/html/gst-plugins-base-libs-encoding-profile.html
+++ b/docs/libs/html/gst-plugins-base-libs-encoding-profile.html
@@ -2,13 +2,13 @@
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>GStreamer Base Plugins 1.0 Library Reference Manual: encoding-profile</title>
+<title>encoding-profile: GStreamer Base 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 Base Plugins 1.0 Library Reference Manual">
 <link rel="up" href="gstreamer-base-utils.html" title="Base Utils Library">
 <link rel="prev" href="gst-plugins-base-libs-gstdiscoverer.html" title="gstdiscoverer">
 <link rel="next" href="gstreamer-video.html" title="Video Library">
-<meta name="generator" content="GTK-Doc V1.21 (XML mode)">
+<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">
@@ -149,6 +149,14 @@
 <span class="returnvalue">void</span>
 </td>
 <td class="function_name">
+<a class="link" href="gst-plugins-base-libs-encoding-profile.html#gst-encoding-profile-set-enabled" title="gst_encoding_profile_set_enabled ()">gst_encoding_profile_set_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-base-libs-encoding-profile.html#gst-encoding-profile-set-format" title="gst_encoding_profile_set_format ()">gst_encoding_profile_set_format</a> <span class="c_punctuation">()</span>
 </td>
 </tr>
@@ -194,6 +202,14 @@
 </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-base-libs-encoding-profile.html#gst-encoding-profile-is-enabled" title="gst_encoding_profile_is_enabled ()">gst_encoding_profile_is_enabled</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">
@@ -467,14 +483,10 @@
 <div class="refsect1">
 <a name="gst-plugins-base-libs-encoding-profile.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 class="link" href="gst-plugins-base-libs-encoding-profile.html#GstEncodingProfile">GstEncodingProfile</a>
-    <span class="lineart">│</span>   <span class="lineart">├──</span> GstEncodingAudioProfile
-    <span class="lineart">│</span>   <span class="lineart">├──</span> GstEncodingContainerProfile
-    <span class="lineart">│</span>   <span class="lineart">╰──</span> GstEncodingVideoProfile
     <span class="lineart">├──</span> GstEncodingProfile
-    <span class="lineart">│</span>   <span class="lineart">├──</span> <a class="link" href="gst-plugins-base-libs-encoding-profile.html#GstEncodingVideoProfile">GstEncodingVideoProfile</a>
-    <span class="lineart">│</span>   <span class="lineart">├──</span> <a class="link" href="gst-plugins-base-libs-encoding-profile.html#GstEncodingAudioProfile">GstEncodingAudioProfile</a>
-    <span class="lineart">│</span>   <span class="lineart">╰──</span> <a class="link" href="gst-plugins-base-libs-encoding-profile.html#GstEncodingContainerProfile">GstEncodingContainerProfile</a>
+    <span class="lineart">│</span>   <span class="lineart">├──</span> GstEncodingVideoProfile
+    <span class="lineart">│</span>   <span class="lineart">├──</span> GstEncodingAudioProfile
+    <span class="lineart">│</span>   <span class="lineart">╰──</span> GstEncodingContainerProfile
     <span class="lineart">╰──</span> GstEncodingTarget
 </pre>
 </div>
@@ -883,7 +895,6 @@
 <div class="refsect3">
 <a name="id-1.2.14.10.14.6.5"></a><h4>Returns</h4>
 <p> the name of the profile, can be <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>.</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -909,7 +920,6 @@
 <div class="refsect3">
 <a name="id-1.2.14.10.14.7.5"></a><h4>Returns</h4>
 <p> the description of the profile, can be <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>.</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -963,7 +973,6 @@
 <a name="id-1.2.14.10.14.9.5"></a><h4>Returns</h4>
 <p> the name of the <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPreset.html"><span class="type">GstPreset</span></a> to be used in the profile.
 This is the name that has been set when saving the preset.</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -989,7 +998,6 @@
 <div class="refsect3">
 <a name="id-1.2.14.10.14.10.5"></a><h4>Returns</h4>
 <p> the name of the <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPreset.html"><span class="type">GstPreset</span></a> factory to be used in the profile.</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -1016,7 +1024,6 @@
 <a name="id-1.2.14.10.14.11.5"></a><h4>Returns</h4>
 <p> The number of times the profile is used in its parent
 container profile. If 0, it is not a mandatory stream.</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -1075,7 +1082,6 @@
 <a name="id-1.2.14.10.14.13.5"></a><h4>Returns</h4>
 <p> a suitable file extension for <em class="parameter"><code>profile</code></em>
 , or NULL.</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -1148,13 +1154,43 @@
 </div>
 <hr>
 <div class="refsect2">
+<a name="gst-encoding-profile-set-enabled"></a><h3>gst_encoding_profile_set_enabled ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+gst_encoding_profile_set_enabled (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-encoding-profile.html#GstEncodingProfile"><span class="type">GstEncodingProfile</span></a> *profile</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>Set whether the profile should be used or not.</p>
+<div class="refsect3">
+<a name="id-1.2.14.10.14.16.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>profile</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gst-plugins-base-libs-encoding-profile.html#GstEncodingProfile"><span class="type">GstEncodingProfile</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>enabled</p></td>
+<td class="parameter_description"><p><a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> to disable <span class="type">profile</span>, <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> to enable it</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<hr>
+<div class="refsect2">
 <a name="gst-encoding-profile-set-format"></a><h3>gst_encoding_profile_set_format ()</h3>
 <pre class="programlisting"><span class="returnvalue">void</span>
 gst_encoding_profile_set_format (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-encoding-profile.html#GstEncodingProfile"><span class="type">GstEncodingProfile</span></a> *profile</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> *format</code></em>);</pre>
 <p>Sets the media format used in the profile.</p>
 <div class="refsect3">
-<a name="id-1.2.14.10.14.16.5"></a><h4>Parameters</h4>
+<a name="id-1.2.14.10.14.17.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1186,7 +1222,7 @@
 to use for the profile.
 This is the name that has been set when saving the preset.</p>
 <div class="refsect3">
-<a name="id-1.2.14.10.14.17.5"></a><h4>Parameters</h4>
+<a name="id-1.2.14.10.14.18.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1216,7 +1252,7 @@
                                       <em class="parameter"><code>const <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *preset_name</code></em>);</pre>
 <p>Sets the name of the <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPreset.html"><span class="type">GstPreset</span></a>'s factory to be used in the profile.</p>
 <div class="refsect3">
-<a name="id-1.2.14.10.14.18.5"></a><h4>Parameters</h4>
+<a name="id-1.2.14.10.14.19.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1249,7 +1285,7 @@
 that will be used in the profile. See <a class="link" href="gst-plugins-base-libs-encoding-profile.html#gst-encoding-profile-get-restriction" title="gst_encoding_profile_get_restriction ()"><code class="function">gst_encoding_profile_get_restriction()</code></a>
 for more about restrictions. Does not apply to <a class="link" href="gst-plugins-base-libs-encoding-profile.html#GstEncodingContainerProfile"><span class="type">GstEncodingContainerProfile</span></a>.</p>
 <div class="refsect3">
-<a name="id-1.2.14.10.14.19.5"></a><h4>Parameters</h4>
+<a name="id-1.2.14.10.14.20.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1280,7 +1316,7 @@
 <p>Set the number of time the profile is used in its parent
 container profile. If 0, it is not a mandatory stream</p>
 <div class="refsect3">
-<a name="id-1.2.14.10.14.20.5"></a><h4>Parameters</h4>
+<a name="id-1.2.14.10.14.21.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1310,7 +1346,7 @@
                                <em class="parameter"><code><a class="link" href="gst-plugins-base-libs-encoding-profile.html#GstEncodingProfile"><span class="type">GstEncodingProfile</span></a> *b</code></em>);</pre>
 <p>Checks whether the two <a class="link" href="gst-plugins-base-libs-encoding-profile.html#GstEncodingProfile"><span class="type">GstEncodingProfile</span></a> are equal</p>
 <div class="refsect3">
-<a name="id-1.2.14.10.14.21.5"></a><h4>Parameters</h4>
+<a name="id-1.2.14.10.14.22.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1332,22 +1368,27 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.14.10.14.21.6"></a><h4>Returns</h4>
+<a name="id-1.2.14.10.14.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 <em class="parameter"><code>a</code></em>
 and <em class="parameter"><code>b</code></em>
 are equal, else <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a>.</p>
-<p></p>
 </div>
 </div>
 <hr>
 <div class="refsect2">
+<a name="gst-encoding-profile-is-enabled"></a><h3>gst_encoding_profile_is_enabled ()</h3>
+<pre class="programlisting"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
+gst_encoding_profile_is_enabled (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-encoding-profile.html#GstEncodingProfile"><span class="type">GstEncodingProfile</span></a> *profile</code></em>);</pre>
+</div>
+<hr>
+<div class="refsect2">
 <a name="gst-encoding-profile-get-input-caps"></a><h3>gst_encoding_profile_get_input_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_encoding_profile_get_input_caps (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-encoding-profile.html#GstEncodingProfile"><span class="type">GstEncodingProfile</span></a> *profile</code></em>);</pre>
 <p>Computes the full output caps that this <em class="parameter"><code>profile</code></em>
  will be able to consume.</p>
 <div class="refsect3">
-<a name="id-1.2.14.10.14.22.5"></a><h4>Parameters</h4>
+<a name="id-1.2.14.10.14.24.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1362,7 +1403,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.14.10.14.22.6"></a><h4>Returns</h4>
+<a name="id-1.2.14.10.14.24.6"></a><h4>Returns</h4>
 <p> The full caps the given <em class="parameter"><code>profile</code></em>
 can consume. Call
 <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstCaps.html#gst-caps-unref"><code class="function">gst_caps_unref()</code></a> when you are done with the caps. </p>
@@ -1375,7 +1416,7 @@
 <pre class="programlisting">const <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> *
 gst_encoding_profile_get_type_nick (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-encoding-profile.html#GstEncodingProfile"><span class="type">GstEncodingProfile</span></a> *profile</code></em>);</pre>
 <div class="refsect3">
-<a name="id-1.2.14.10.14.23.4"></a><h4>Parameters</h4>
+<a name="id-1.2.14.10.14.25.4"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1390,10 +1431,9 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.14.10.14.23.5"></a><h4>Returns</h4>
+<a name="id-1.2.14.10.14.25.5"></a><h4>Returns</h4>
 <p> the human-readable name of the type of <em class="parameter"><code>profile</code></em>
 .</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -1406,7 +1446,7 @@
                                     <em class="parameter"><code>const <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *preset</code></em>);</pre>
 <p>Creates a new <a class="link" href="gst-plugins-base-libs-encoding-profile.html#GstEncodingContainerProfile"><span class="type">GstEncodingContainerProfile</span></a>.</p>
 <div class="refsect3">
-<a name="id-1.2.14.10.14.24.5"></a><h4>Parameters</h4>
+<a name="id-1.2.14.10.14.26.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1439,9 +1479,8 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.14.10.14.24.6"></a><h4>Returns</h4>
+<a name="id-1.2.14.10.14.26.6"></a><h4>Returns</h4>
 <p> The newly created <a class="link" href="gst-plugins-base-libs-encoding-profile.html#GstEncodingContainerProfile"><span class="type">GstEncodingContainerProfile</span></a>.</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -1457,7 +1496,7 @@
  will be made, if you wish to use it elsewhere after this
 method you should increment its reference count.</p>
 <div class="refsect3">
-<a name="id-1.2.14.10.14.25.6"></a><h4>Parameters</h4>
+<a name="id-1.2.14.10.14.27.6"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1479,10 +1518,9 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.14.10.14.25.7"></a><h4>Returns</h4>
+<a name="id-1.2.14.10.14.27.7"></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 <em class="parameter"><code>stream</code></em>
 was properly added, else <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a>.</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -1497,7 +1535,7 @@
 <em class="parameter"><code>profile</code></em>
 .</p>
 <div class="refsect3">
-<a name="id-1.2.14.10.14.26.5"></a><h4>Parameters</h4>
+<a name="id-1.2.14.10.14.28.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1519,12 +1557,11 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.14.10.14.26.6"></a><h4>Returns</h4>
+<a name="id-1.2.14.10.14.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 <em class="parameter"><code>container</code></em>
 contains a <a class="link" href="gst-plugins-base-libs-encoding-profile.html#GstEncodingProfile"><span class="type">GstEncodingProfile</span></a> identical
 to <em class="parameter"><code>profile</code></em>
 , else <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a>.</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -1534,7 +1571,7 @@
 gst_encoding_container_profile_get_profiles
                                (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-encoding-profile.html#GstEncodingContainerProfile"><span class="type">GstEncodingContainerProfile</span></a> *profile</code></em>);</pre>
 <div class="refsect3">
-<a name="id-1.2.14.10.14.27.4"></a><h4>Parameters</h4>
+<a name="id-1.2.14.10.14.29.4"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1549,7 +1586,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.14.10.14.27.5"></a><h4>Returns</h4>
+<a name="id-1.2.14.10.14.29.5"></a><h4>Returns</h4>
 <p>the list of contained <a class="link" href="gst-plugins-base-libs-encoding-profile.html#GstEncodingProfile"><span class="type">GstEncodingProfile</span></a>. </p>
 <p><span class="annotation">[<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> GstPbutils.EncodingProfile][<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></p>
 </div>
@@ -1566,7 +1603,7 @@
 <p>All provided allocatable arguments will be internally copied, so can be
 safely freed/unreferenced after calling this method.</p>
 <div class="refsect3">
-<a name="id-1.2.14.10.14.28.6"></a><h4>Parameters</h4>
+<a name="id-1.2.14.10.14.30.6"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1600,9 +1637,8 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.14.10.14.28.7"></a><h4>Returns</h4>
+<a name="id-1.2.14.10.14.30.7"></a><h4>Returns</h4>
 <p> the newly created <a class="link" href="gst-plugins-base-libs-encoding-profile.html#GstEncodingAudioProfile"><span class="type">GstEncodingAudioProfile</span></a>.</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -1621,7 +1657,7 @@
 <p>If you wish to use/force a constant framerate please refer to the
 <a class="link" href="gst-plugins-base-libs-encoding-profile.html#gst-encoding-video-profile-set-variableframerate" title="gst_encoding_video_profile_set_variableframerate ()"><code class="function">gst_encoding_video_profile_set_variableframerate()</code></a> documentation.</p>
 <div class="refsect3">
-<a name="id-1.2.14.10.14.29.8"></a><h4>Parameters</h4>
+<a name="id-1.2.14.10.14.31.8"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1655,9 +1691,8 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.14.10.14.29.9"></a><h4>Returns</h4>
+<a name="id-1.2.14.10.14.31.9"></a><h4>Returns</h4>
 <p> the newly created <a class="link" href="gst-plugins-base-libs-encoding-profile.html#GstEncodingVideoProfile"><span class="type">GstEncodingVideoProfile</span></a>.</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -1667,7 +1702,7 @@
 gst_encoding_video_profile_get_pass (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-encoding-profile.html#GstEncodingVideoProfile"><span class="type">GstEncodingVideoProfile</span></a> *prof</code></em>);</pre>
 <p>Get the pass number if this is part of a multi-pass profile.</p>
 <div class="refsect3">
-<a name="id-1.2.14.10.14.30.5"></a><h4>Parameters</h4>
+<a name="id-1.2.14.10.14.32.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1682,10 +1717,9 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.14.10.14.30.6"></a><h4>Returns</h4>
+<a name="id-1.2.14.10.14.32.6"></a><h4>Returns</h4>
 <p> The pass number. Starts at 1 for multi-pass. 0 if this is
 not a multi-pass profile</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -1695,7 +1729,7 @@
 gst_encoding_video_profile_get_variableframerate
                                (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-encoding-profile.html#GstEncodingVideoProfile"><span class="type">GstEncodingVideoProfile</span></a> *prof</code></em>);</pre>
 <div class="refsect3">
-<a name="id-1.2.14.10.14.31.4"></a><h4>Parameters</h4>
+<a name="id-1.2.14.10.14.33.4"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1710,9 +1744,8 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.14.10.14.31.5"></a><h4>Returns</h4>
+<a name="id-1.2.14.10.14.33.5"></a><h4>Returns</h4>
 <p> Whether non-constant video framerate is allowed for encoding.</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -1725,7 +1758,7 @@
 this value set to 1. If this video profile isn't part of a multi-pass profile,
 you may set it to 0 (the default value).</p>
 <div class="refsect3">
-<a name="id-1.2.14.10.14.32.5"></a><h4>Parameters</h4>
+<a name="id-1.2.14.10.14.34.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1759,7 +1792,7 @@
 be normalized by dropping/duplicating frames in order to produce a
 constance framerate.</p>
 <div class="refsect3">
-<a name="id-1.2.14.10.14.33.5"></a><h4>Parameters</h4>
+<a name="id-1.2.14.10.14.35.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1788,7 +1821,7 @@
 <p>Decreases the reference count of the <em class="parameter"><code>target</code></em>
 , possibly freeing it.</p>
 <div class="refsect3">
-<a name="id-1.2.14.10.14.34.5"></a><h4>Parameters</h4>
+<a name="id-1.2.14.10.14.36.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1810,7 +1843,7 @@
 <p>Increases the reference count of the <em class="parameter"><code>target</code></em>
 .</p>
 <div class="refsect3">
-<a name="id-1.2.14.10.14.35.5"></a><h4>Parameters</h4>
+<a name="id-1.2.14.10.14.37.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1843,7 +1876,7 @@
 <span class="emphasis"><em>can</em></span> be a application or user specific category if
 needed.</p>
 <div class="refsect3">
-<a name="id-1.2.14.10.14.36.7"></a><h4>Parameters</h4>
+<a name="id-1.2.14.10.14.38.7"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1878,7 +1911,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.14.10.14.36.8"></a><h4>Returns</h4>
+<a name="id-1.2.14.10.14.38.8"></a><h4>Returns</h4>
 <p> The newly created <a class="link" href="gst-plugins-base-libs-encoding-profile.html#GstEncodingTarget"><span class="type">GstEncodingTarget</span></a> or <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> if
 there was an error. </p>
 <p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p>
@@ -1890,61 +1923,6 @@
 <pre class="programlisting">const <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> *
 gst_encoding_target_get_name (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-encoding-profile.html#GstEncodingTarget"><span class="type">GstEncodingTarget</span></a> *target</code></em>);</pre>
 <div class="refsect3">
-<a name="id-1.2.14.10.14.37.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>target</p></td>
-<td class="parameter_description"><p>a <a class="link" href="gst-plugins-base-libs-encoding-profile.html#GstEncodingTarget"><span class="type">GstEncodingTarget</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
-</table></div>
-</div>
-<div class="refsect3">
-<a name="id-1.2.14.10.14.37.5"></a><h4>Returns</h4>
-<p> The name of the <em class="parameter"><code>target</code></em>
-. </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-encoding-target-get-category"></a><h3>gst_encoding_target_get_category ()</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_encoding_target_get_category (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-encoding-profile.html#GstEncodingTarget"><span class="type">GstEncodingTarget</span></a> *target</code></em>);</pre>
-<div class="refsect3">
-<a name="id-1.2.14.10.14.38.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>target</p></td>
-<td class="parameter_description"><p>a <a class="link" href="gst-plugins-base-libs-encoding-profile.html#GstEncodingTarget"><span class="type">GstEncodingTarget</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
-</table></div>
-</div>
-<div class="refsect3">
-<a name="id-1.2.14.10.14.38.5"></a><h4>Returns</h4>
-<p> The category of the <em class="parameter"><code>target</code></em>
-. For example:
-<a class="link" href="gst-plugins-base-libs-encoding-profile.html#GST-ENCODING-CATEGORY-DEVICE:CAPS" title="GST_ENCODING_CATEGORY_DEVICE"><span class="type">GST_ENCODING_CATEGORY_DEVICE</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>]</span></p>
-</div>
-</div>
-<hr>
-<div class="refsect2">
-<a name="gst-encoding-target-get-description"></a><h3>gst_encoding_target_get_description ()</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_encoding_target_get_description (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-encoding-profile.html#GstEncodingTarget"><span class="type">GstEncodingTarget</span></a> *target</code></em>);</pre>
-<div class="refsect3">
 <a name="id-1.2.14.10.14.39.4"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
@@ -1961,16 +1939,16 @@
 </div>
 <div class="refsect3">
 <a name="id-1.2.14.10.14.39.5"></a><h4>Returns</h4>
-<p> The description of the <em class="parameter"><code>target</code></em>
+<p> The name of the <em class="parameter"><code>target</code></em>
 . </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-encoding-target-get-profiles"></a><h3>gst_encoding_target_get_profiles ()</h3>
-<pre class="programlisting">const <a href="https://developer.gnome.org/glib/unstable/glib-Doubly-Linked-Lists.html#GList"><span class="returnvalue">GList</span></a> *
-gst_encoding_target_get_profiles (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-encoding-profile.html#GstEncodingTarget"><span class="type">GstEncodingTarget</span></a> *target</code></em>);</pre>
+<a name="gst-encoding-target-get-category"></a><h3>gst_encoding_target_get_category ()</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_encoding_target_get_category (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-encoding-profile.html#GstEncodingTarget"><span class="type">GstEncodingTarget</span></a> *target</code></em>);</pre>
 <div class="refsect3">
 <a name="id-1.2.14.10.14.40.4"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
@@ -1988,6 +1966,61 @@
 </div>
 <div class="refsect3">
 <a name="id-1.2.14.10.14.40.5"></a><h4>Returns</h4>
+<p> The category of the <em class="parameter"><code>target</code></em>
+. For example:
+<a class="link" href="gst-plugins-base-libs-encoding-profile.html#GST-ENCODING-CATEGORY-DEVICE:CAPS" title="GST_ENCODING_CATEGORY_DEVICE"><span class="type">GST_ENCODING_CATEGORY_DEVICE</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>]</span></p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-encoding-target-get-description"></a><h3>gst_encoding_target_get_description ()</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_encoding_target_get_description (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-encoding-profile.html#GstEncodingTarget"><span class="type">GstEncodingTarget</span></a> *target</code></em>);</pre>
+<div class="refsect3">
+<a name="id-1.2.14.10.14.41.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>target</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gst-plugins-base-libs-encoding-profile.html#GstEncodingTarget"><span class="type">GstEncodingTarget</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="id-1.2.14.10.14.41.5"></a><h4>Returns</h4>
+<p> The description of the <em class="parameter"><code>target</code></em>
+. </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-encoding-target-get-profiles"></a><h3>gst_encoding_target_get_profiles ()</h3>
+<pre class="programlisting">const <a href="https://developer.gnome.org/glib/unstable/glib-Doubly-Linked-Lists.html#GList"><span class="returnvalue">GList</span></a> *
+gst_encoding_target_get_profiles (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-encoding-profile.html#GstEncodingTarget"><span class="type">GstEncodingTarget</span></a> *target</code></em>);</pre>
+<div class="refsect3">
+<a name="id-1.2.14.10.14.42.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>target</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gst-plugins-base-libs-encoding-profile.html#GstEncodingTarget"><span class="type">GstEncodingTarget</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="id-1.2.14.10.14.42.5"></a><h4>Returns</h4>
 <p> A list of
 <a class="link" href="gst-plugins-base-libs-encoding-profile.html#GstEncodingProfile"><span class="type">GstEncodingProfile</span></a>(s) this <em class="parameter"><code>target</code></em>
 handles. </p>
@@ -2001,7 +2034,7 @@
 gst_encoding_target_get_profile (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-encoding-profile.html#GstEncodingTarget"><span class="type">GstEncodingTarget</span></a> *target</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.14.10.14.41.4"></a><h4>Parameters</h4>
+<a name="id-1.2.14.10.14.43.4"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -2023,7 +2056,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.14.10.14.41.5"></a><h4>Returns</h4>
+<a name="id-1.2.14.10.14.43.5"></a><h4>Returns</h4>
 <p> The matching <a class="link" href="gst-plugins-base-libs-encoding-profile.html#GstEncodingProfile"><span class="type">GstEncodingProfile</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>
@@ -2044,7 +2077,7 @@
 the profile after calling this method, you should increase its reference
 count.</p>
 <div class="refsect3">
-<a name="id-1.2.14.10.14.42.6"></a><h4>Parameters</h4>
+<a name="id-1.2.14.10.14.44.6"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -2066,9 +2099,8 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.14.10.14.42.7"></a><h4>Returns</h4>
+<a name="id-1.2.14.10.14.44.7"></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 profile was added, else <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a>.</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -2080,7 +2112,7 @@
 <p>Saves the <em class="parameter"><code>target</code></em>
  to a default user-local directory.</p>
 <div class="refsect3">
-<a name="id-1.2.14.10.14.43.5"></a><h4>Parameters</h4>
+<a name="id-1.2.14.10.14.45.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -2102,9 +2134,8 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.14.10.14.43.6"></a><h4>Returns</h4>
+<a name="id-1.2.14.10.14.45.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 the target was correctly saved, else <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a>.</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -2117,7 +2148,7 @@
 <p>Saves the <em class="parameter"><code>target</code></em>
  to the provided file location.</p>
 <div class="refsect3">
-<a name="id-1.2.14.10.14.44.5"></a><h4>Parameters</h4>
+<a name="id-1.2.14.10.14.46.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -2145,9 +2176,8 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.14.10.14.44.6"></a><h4>Returns</h4>
+<a name="id-1.2.14.10.14.46.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 the target was correctly saved, else <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a>.</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -2162,7 +2192,7 @@
 <p>If the category name is specified only targets from that category will be
 searched for.</p>
 <div class="refsect3">
-<a name="id-1.2.14.10.14.45.6"></a><h4>Parameters</h4>
+<a name="id-1.2.14.10.14.47.6"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -2190,7 +2220,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.14.10.14.45.7"></a><h4>Returns</h4>
+<a name="id-1.2.14.10.14.47.7"></a><h4>Returns</h4>
 <p> The <a class="link" href="gst-plugins-base-libs-encoding-profile.html#GstEncodingTarget"><span class="type">GstEncodingTarget</span></a> if available, else <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>
@@ -2203,7 +2233,7 @@
                                     <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>Opens the provided file and returns the contained <a class="link" href="gst-plugins-base-libs-encoding-profile.html#GstEncodingTarget"><span class="type">GstEncodingTarget</span></a>.</p>
 <div class="refsect3">
-<a name="id-1.2.14.10.14.46.5"></a><h4>Parameters</h4>
+<a name="id-1.2.14.10.14.48.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -2225,7 +2255,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.14.10.14.46.6"></a><h4>Returns</h4>
+<a name="id-1.2.14.10.14.48.6"></a><h4>Returns</h4>
 <p> The <a class="link" href="gst-plugins-base-libs-encoding-profile.html#GstEncodingTarget"><span class="type">GstEncodingTarget</span></a> contained in the file, else
 <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>
@@ -2240,7 +2270,7 @@
 if <em class="parameter"><code>categoryname</code></em>
  is <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.14.10.14.47.5"></a><h4>Parameters</h4>
+<a name="id-1.2.14.10.14.49.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -2256,7 +2286,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.14.10.14.47.6"></a><h4>Returns</h4>
+<a name="id-1.2.14.10.14.49.6"></a><h4>Returns</h4>
 <p> The list of <a class="link" href="gst-plugins-base-libs-encoding-profile.html#GstEncodingTarget"><span class="type">GstEncodingTarget</span></a>. </p>
 <p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>][<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> GstEncodingTarget]</span></p>
 </div>
@@ -2269,7 +2299,7 @@
                                (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
 <p>Lists all <a class="link" href="gst-plugins-base-libs-encoding-profile.html#GstEncodingTarget"><span class="type">GstEncodingTarget</span></a> categories present on disk.</p>
 <div class="refsect3">
-<a name="id-1.2.14.10.14.48.5"></a><h4>Returns</h4>
+<a name="id-1.2.14.10.14.50.5"></a><h4>Returns</h4>
 <p> A list
 of <a class="link" href="gst-plugins-base-libs-encoding-profile.html#GstEncodingTarget"><span class="type">GstEncodingTarget</span></a> categories. </p>
 <p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>][<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> gchar*]</span></p>
@@ -2361,7 +2391,6 @@
 </div>
 </div>
 <div class="footer">
-<hr>
-          Generated by GTK-Doc V1.21</div>
+<hr>Generated by GTK-Doc V1.24</div>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/libs/html/gst-plugins-base-libs-fdmemory.html b/docs/libs/html/gst-plugins-base-libs-fdmemory.html
new file mode 100644
index 0000000..8db941a
--- /dev/null
+++ b/docs/libs/html/gst-plugins-base-libs-fdmemory.html
@@ -0,0 +1,294 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>fdmemory: GStreamer Base 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 Base Plugins 1.0 Library Reference Manual">
+<link rel="up" href="gstreamer-allocators.html" title="Allocators Library">
+<link rel="prev" href="gst-plugins-base-libs-dmabuf.html" title="dmabuf">
+<link rel="next" href="gstreamer-app.html" title="App 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-base-libs-fdmemory.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="gstreamer-allocators.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
+<td><a accesskey="p" href="gst-plugins-base-libs-dmabuf.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
+<td><a accesskey="n" href="gstreamer-app.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
+</tr></table>
+<div class="refentry">
+<a name="gst-plugins-base-libs-fdmemory"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="gst-plugins-base-libs-fdmemory.top_of_page"></a>fdmemory</span></h2>
+<p>fdmemory — Memory wrapper for fd backed memory</p>
+</td>
+<td class="gallery_image" valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsect1">
+<a name="gst-plugins-base-libs-fdmemory.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="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-base-libs-fdmemory.html#gst-fd-allocator-alloc" title="gst_fd_allocator_alloc ()">gst_fd_allocator_alloc</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a href="https://developer.gnome.org/gobject/unstable/gobject-Type-Information.html#GType"><span class="returnvalue">GType</span></a>
+</td>
+<td class="function_name">
+<a class="link" href="gst-plugins-base-libs-fdmemory.html#gst-fd-allocator-get-type" title="gst_fd_allocator_get_type ()">gst_fd_allocator_get_type</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/GstAllocator.html"><span class="returnvalue">GstAllocator</span></a> *
+</td>
+<td class="function_name">
+<a class="link" href="gst-plugins-base-libs-fdmemory.html#gst-fd-allocator-new" title="gst_fd_allocator_new ()">gst_fd_allocator_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#gint"><span class="returnvalue">gint</span></a>
+</td>
+<td class="function_name">
+<a class="link" href="gst-plugins-base-libs-fdmemory.html#gst-fd-memory-get-fd" title="gst_fd_memory_get_fd ()">gst_fd_memory_get_fd</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-base-libs-fdmemory.html#gst-is-fd-memory" title="gst_is_fd_memory ()">gst_is_fd_memory</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-libs-fdmemory.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-base-libs-fdmemory.html#GstFdMemoryFlags" title="enum GstFdMemoryFlags">GstFdMemoryFlags</a></td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-libs-fdmemory.includes"></a><h2>Includes</h2>
+<pre class="synopsis">#include &lt;gst/allocators/gstfdmemory.h&gt;
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-libs-fdmemory.description"></a><h2>Description</h2>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-libs-fdmemory.functions_details"></a><h2>Functions</h2>
+<div class="refsect2">
+<a name="gst-fd-allocator-alloc"></a><h3>gst_fd_allocator_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_fd_allocator_alloc (<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="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a> fd</code></em>,
+                        <em class="parameter"><code><span class="type">gsize</span> size</code></em>,
+                        <em class="parameter"><code><a class="link" href="gst-plugins-base-libs-fdmemory.html#GstFdMemoryFlags" title="enum GstFdMemoryFlags"><span class="type">GstFdMemoryFlags</span></a> flags</code></em>);</pre>
+<p>Return a <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstMemory.html"><code class="literal">GstMemory</code></a> that wraps a generic file descriptor.</p>
+<div class="refsect3">
+<a name="id-1.2.4.4.7.2.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>allocator</p></td>
+<td class="parameter_description"><p> allocator to be used for this memory. </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>fd</p></td>
+<td class="parameter_description"><p>file descriptor</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>size</p></td>
+<td class="parameter_description"><p>memory size</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>flags</p></td>
+<td class="parameter_description"><p>extra <a class="link" href="gst-plugins-base-libs-fdmemory.html#GstFdMemoryFlags" title="enum GstFdMemoryFlags"><span class="type">GstFdMemoryFlags</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="id-1.2.4.4.7.2.6"></a><h4>Returns</h4>
+<p> a GstMemory based on <em class="parameter"><code>allocator</code></em>
+.
+When the buffer will be released the allocator will close the <em class="parameter"><code>fd</code></em>
+.
+The memory is only mmapped on <code class="function">gst_buffer_mmap()</code> request. </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.6</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-fd-allocator-get-type"></a><h3>gst_fd_allocator_get_type ()</h3>
+<pre class="programlisting"><a href="https://developer.gnome.org/gobject/unstable/gobject-Type-Information.html#GType"><span class="returnvalue">GType</span></a>
+gst_fd_allocator_get_type (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-fd-allocator-new"></a><h3>gst_fd_allocator_new ()</h3>
+<pre class="programlisting"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstAllocator.html"><span class="returnvalue">GstAllocator</span></a> *
+gst_fd_allocator_new (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
+<p>Return a new fd allocator.</p>
+<div class="refsect3">
+<a name="id-1.2.4.4.7.4.5"></a><h4>Returns</h4>
+<p> a new fd allocator, or NULL if the allocator
+isn't available. Use <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstObject.html#gst-object-unref"><code class="function">gst_object_unref()</code></a> to release the allocator 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>
+<p class="since">Since: 1.6</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-fd-memory-get-fd"></a><h3>gst_fd_memory_get_fd ()</h3>
+<pre class="programlisting"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gint"><span class="returnvalue">gint</span></a>
+gst_fd_memory_get_fd (<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>
+<p>Get the fd from <em class="parameter"><code>mem</code></em>
+. Call <a class="link" href="gst-plugins-base-libs-fdmemory.html#gst-is-fd-memory" title="gst_is_fd_memory ()"><code class="function">gst_is_fd_memory()</code></a> to check if <em class="parameter"><code>mem</code></em>
+ has
+an fd.</p>
+<div class="refsect3">
+<a name="id-1.2.4.4.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>mem</p></td>
+<td class="parameter_description"><p><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.4.4.7.5.6"></a><h4>Returns</h4>
+<p> the fd of <em class="parameter"><code>mem</code></em>
+or -1 when there is no fd on <em class="parameter"><code>mem</code></em>
+</p>
+</div>
+<p class="since">Since: 1.6</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-is-fd-memory"></a><h3>gst_is_fd_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_fd_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>
+<p>Check if <em class="parameter"><code>mem</code></em>
+ is memory backed by an fd</p>
+<div class="refsect3">
+<a name="id-1.2.4.4.7.6.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>mem</p></td>
+<td class="parameter_description"><p><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.4.4.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> when <em class="parameter"><code>mem</code></em>
+has an fd that can be retrieved with
+<a class="link" href="gst-plugins-base-libs-fdmemory.html#gst-fd-memory-get-fd" title="gst_fd_memory_get_fd ()"><code class="function">gst_fd_memory_get_fd()</code></a>.</p>
+</div>
+<p class="since">Since: 1.6</p>
+</div>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-libs-fdmemory.other_details"></a><h2>Types and Values</h2>
+<div class="refsect2">
+<a name="GstFdMemoryFlags"></a><h3>enum GstFdMemoryFlags</h3>
+<p>Various flags to control the operation of the fd backed memory.</p>
+<div class="refsect3">
+<a name="id-1.2.4.4.8.2.4"></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-FD-MEMORY-FLAG-NONE:CAPS"></a>GST_FD_MEMORY_FLAG_NONE</p></td>
+<td class="enum_member_description">
+<p>no flag</p>
+</td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-FD-MEMORY-FLAG-KEEP-MAPPED:CAPS"></a>GST_FD_MEMORY_FLAG_KEEP_MAPPED</p></td>
+<td class="enum_member_description">
+<p>once the memory is mapped,
+       keep it mapped until the memory is destroyed.</p>
+</td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-FD-MEMORY-FLAG-MAP-PRIVATE:CAPS"></a>GST_FD_MEMORY_FLAG_MAP_PRIVATE</p></td>
+<td class="enum_member_description">
+<p>do a private mapping instead of
+       the default shared mapping.</p>
+</td>
+<td class="enum_member_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<p class="since">Since: 1.6</p>
+</div>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-libs-fdmemory.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></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-base-libs-gstaudio.html b/docs/libs/html/gst-plugins-base-libs-gstaudio.html
index 3d84ae2..3a3b98c 100644
--- a/docs/libs/html/gst-plugins-base-libs-gstaudio.html
+++ b/docs/libs/html/gst-plugins-base-libs-gstaudio.html
@@ -2,13 +2,13 @@
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>GStreamer Base Plugins 1.0 Library Reference Manual: gstaudio</title>
+<title>gstaudio: GStreamer Base 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 Base Plugins 1.0 Library Reference Manual">
 <link rel="up" href="gstreamer-audio.html" title="Audio Library">
 <link rel="prev" href="gstreamer-audio.html" title="Audio Library">
 <link rel="next" href="gst-plugins-base-libs-gstaudiometa.html" title="gstaudiometa">
-<meta name="generator" content="GTK-Doc V1.21 (XML mode)">
+<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">
@@ -626,7 +626,6 @@
 <a name="id-1.2.6.3.7.5.6"></a><h4>Returns</h4>
 <p> TRUE if <em class="parameter"><code>caps</code></em>
 could be parsed</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -714,7 +713,6 @@
 <div class="refsect3">
 <a name="id-1.2.6.3.7.7.6"></a><h4>Returns</h4>
 <p> TRUE if the conversion was successful.</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -743,7 +741,6 @@
 <a name="id-1.2.6.3.7.8.6"></a><h4>Returns</h4>
 <p> The <a class="link" href="gst-plugins-base-libs-gstaudio.html#GstAudioFormatInfo" title="struct GstAudioFormatInfo"><span class="type">GstAudioFormatInfo</span></a> for <em class="parameter"><code>format</code></em>
 .</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -770,7 +767,6 @@
 <div class="refsect3">
 <a name="id-1.2.6.3.7.9.6"></a><h4>Returns</h4>
 <p> a new <a class="link" href="gst-plugins-base-libs-gstaudio.html#GstAudioInfo" title="struct GstAudioInfo"><span class="type">GstAudioInfo</span></a>. free with gst_audio_info_free.</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -806,7 +802,6 @@
 <div class="refsect3">
 <a name="id-1.2.6.3.7.11.5"></a><h4>Returns</h4>
 <p> a new <a class="link" href="gst-plugins-base-libs-gstaudio.html#GstAudioInfo" title="struct GstAudioInfo"><span class="type">GstAudioInfo</span></a>. free with <a class="link" href="gst-plugins-base-libs-gstaudio.html#gst-audio-info-free" title="gst_audio_info_free ()"><code class="function">gst_audio_info_free()</code></a>.</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -896,9 +891,8 @@
 <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>info</code></em>
 and <em class="parameter"><code>other</code></em>
 are equal, else <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a>.</p>
-<p></p>
 </div>
-<p class="since">Since 1.2</p>
+<p class="since">Since: 1.2</p>
 </div>
 <hr>
 <div class="refsect2">
@@ -946,7 +940,6 @@
 <a name="id-1.2.6.3.7.14.6"></a><h4>Returns</h4>
 <p> a <a class="link" href="gst-plugins-base-libs-gstaudio.html#GstAudioFormat" title="enum GstAudioFormat"><span class="type">GstAudioFormat</span></a> or GST_AUDIO_FORMAT_UNKNOWN when no audio format
 exists with the given parameters.</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -1016,7 +1009,6 @@
 <p> the <a class="link" href="gst-plugins-base-libs-gstaudio.html#GstAudioFormat" title="enum GstAudioFormat"><span class="type">GstAudioFormat</span></a> for <em class="parameter"><code>format</code></em>
 or GST_AUDIO_FORMAT_UNKNOWN when the
 string is not a known format.</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -1361,7 +1353,7 @@
 </tr>
 <tr>
 <td class="parameter_name"><p>segment</p></td>
-<td class="parameter_description"><p>Segment in <code class="literal">GST_FORMAT_TIME</code> or <code class="literal">GST_FORMAT_DEFAULT</code> to which
+<td class="parameter_description"><p>Segment in <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstFormat.html#GST-FORMAT-TIME:CAPS"><code class="literal">GST_FORMAT_TIME</code></a> or <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstFormat.html#GST-FORMAT-DEFAULT:CAPS"><code class="literal">GST_FORMAT_DEFAULT</code></a> to which
 the buffer should be clipped.</p></td>
 <td class="parameter_annotations"> </td>
 </tr>
@@ -2030,7 +2022,7 @@
 <pre class="programlisting">#define GST_META_TAG_AUDIO_STR "audio"
 </pre>
 <p>This metadata is relevant for audio streams.</p>
-<p class="since">Since 1.2</p>
+<p class="since">Since: 1.2</p>
 </div>
 <hr>
 <div class="refsect2">
@@ -2038,7 +2030,7 @@
 <pre class="programlisting">#define GST_META_TAG_AUDIO_CHANNELS_STR "channels"
 </pre>
 <p>This metadata stays relevant as long as channels are unchanged.</p>
-<p class="since">Since 1.2</p>
+<p class="since">Since: 1.2</p>
 </div>
 <hr>
 <div class="refsect2">
@@ -2084,7 +2076,6 @@
 </div>
 </div>
 <div class="footer">
-<hr>
-          Generated by GTK-Doc V1.21</div>
+<hr>Generated by GTK-Doc V1.24</div>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/libs/html/gst-plugins-base-libs-gstaudiobasesink.html b/docs/libs/html/gst-plugins-base-libs-gstaudiobasesink.html
index 7a5bd1a..9136791 100644
--- a/docs/libs/html/gst-plugins-base-libs-gstaudiobasesink.html
+++ b/docs/libs/html/gst-plugins-base-libs-gstaudiobasesink.html
@@ -2,13 +2,13 @@
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>GStreamer Base Plugins 1.0 Library Reference Manual: gstaudiobasesink</title>
+<title>gstaudiobasesink: GStreamer Base 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 Base Plugins 1.0 Library Reference Manual">
 <link rel="up" href="gstreamer-audio.html" title="Audio Library">
 <link rel="prev" href="gst-plugins-base-libs-gstaudiosrc.html" title="gstaudiosrc">
 <link rel="next" href="gst-plugins-base-libs-gstaudiobasesrc.html" title="gstaudiobasesrc">
-<meta name="generator" content="GTK-Doc V1.21 (XML mode)">
+<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">
@@ -42,6 +42,14 @@
 </colgroup>
 <tbody>
 <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-base-libs-gstaudiobasesink.html#GstAudioBaseSinkCustomSlavingCallback" title="GstAudioBaseSinkCustomSlavingCallback ()">*GstAudioBaseSinkCustomSlavingCallback</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-base-libs-gstaudiobasesink.html#GST-AUDIO-BASE-SINK-CLOCK:CAPS" title="GST_AUDIO_BASE_SINK_CLOCK()">GST_AUDIO_BASE_SINK_CLOCK</a><span class="c_punctuation">()</span>
@@ -141,6 +149,22 @@
 <a class="link" href="gst-plugins-base-libs-gstaudiobasesink.html#gst-audio-base-sink-get-discont-wait" title="gst_audio_base_sink_get_discont_wait ()">gst_audio_base_sink_get_discont_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-base-libs-gstaudiobasesink.html#gst-audio-base-sink-set-custom-slaving-callback" title="gst_audio_base_sink_set_custom_slaving_callback ()">gst_audio_base_sink_set_custom_slaving_callback</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-base-libs-gstaudiobasesink.html#gst-audio-base-sink-report-device-failure" title="gst_audio_base_sink_report_device_failure ()">gst_audio_base_sink_report_device_failure</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
 </tbody>
 </table></div>
 </div>
@@ -216,6 +240,10 @@
 <td class="datatype_keyword">enum</td>
 <td class="function_name"><a class="link" href="gst-plugins-base-libs-gstaudiobasesink.html#GstAudioBaseSinkSlaveMethod" title="enum GstAudioBaseSinkSlaveMethod">GstAudioBaseSinkSlaveMethod</a></td>
 </tr>
+<tr>
+<td class="datatype_keyword">enum</td>
+<td class="function_name"><a class="link" href="gst-plugins-base-libs-gstaudiobasesink.html#GstAudioBaseSinkDiscontReason" title="enum GstAudioBaseSinkDiscontReason">GstAudioBaseSinkDiscontReason</a></td>
+</tr>
 </tbody>
 </table></div>
 </div>
@@ -244,13 +272,88 @@
 <div class="refsect1">
 <a name="gst-plugins-base-libs-gstaudiobasesink.functions_details"></a><h2>Functions</h2>
 <div class="refsect2">
+<a name="GstAudioBaseSinkCustomSlavingCallback"></a><h3>GstAudioBaseSinkCustomSlavingCallback ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+<span class="c_punctuation">(</span>*GstAudioBaseSinkCustomSlavingCallback<span class="c_punctuation">)</span>
+                               (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstaudiobasesink.html#GstAudioBaseSink"><span class="type">GstAudioBaseSink</span></a> *sink</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> etime</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> itime</code></em>,
+                                <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstClock.html#GstClockTimeDiff"><span class="type">GstClockTimeDiff</span></a> *requested_skew</code></em>,
+                                <em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstaudiobasesink.html#GstAudioBaseSinkDiscontReason" title="enum GstAudioBaseSinkDiscontReason"><span class="type">GstAudioBaseSinkDiscontReason</span></a> discont_reason</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>);</pre>
+<p>This function is set with <a class="link" href="gst-plugins-base-libs-gstaudiobasesink.html#gst-audio-base-sink-set-custom-slaving-callback" title="gst_audio_base_sink_set_custom_slaving_callback ()"><code class="function">gst_audio_base_sink_set_custom_slaving_callback()</code></a>
+and is called during playback. It receives the current time of external and
+internal clocks, which the callback can then use to apply any custom
+slaving/synchronization schemes.</p>
+<p>The external clock is the sink's element clock, the internal one is the
+internal audio clock. The internal audio clock's calibration is applied to
+the timestamps before they are passed to the callback. The difference between
+etime and itime is the skew; how much internal and external clock lie apart
+from each other. A skew of 0 means both clocks are perfectly in sync.
+itime &gt; etime means the external clock is going slower, while itime &lt; etime
+means it is going faster than the internal clock. etime and itime are always
+valid timestamps, except for when a discontinuity happens.</p>
+<p>requested_skew is an output value the callback can write to. It informs the
+sink of whether or not it should move the playout pointer, and if so, by how
+much. This pointer is only NULL if a discontinuity occurs; otherwise, it is
+safe to write to *requested_skew. The default skew is 0.</p>
+<p>The sink may experience discontinuities. If one happens, discont is TRUE,
+itime, etime are set to GST_CLOCK_TIME_NONE, and requested_skew is NULL.
+This makes it possible to reset custom clock slaving algorithms when a
+discontinuity happens.</p>
+<div class="refsect3">
+<a name="id-1.2.6.12.10.2.8"></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>sink</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gst-plugins-base-libs-gstaudiobasesink.html#GstAudioBaseSink"><span class="type">GstAudioBaseSink</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>etime</p></td>
+<td class="parameter_description"><p>external clock time</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>itime</p></td>
+<td class="parameter_description"><p>internal clock time</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>requested_skew</p></td>
+<td class="parameter_description"><p>skew amount requested by the callback</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>discont_reason</p></td>
+<td class="parameter_description"><p>reason for discontinuity (if any)</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>
+</tbody>
+</table></div>
+</div>
+<p class="since">Since: 1.6</p>
+</div>
+<hr>
+<div class="refsect2">
 <a name="GST-AUDIO-BASE-SINK-CLOCK:CAPS"></a><h3>GST_AUDIO_BASE_SINK_CLOCK()</h3>
 <pre class="programlisting">#define GST_AUDIO_BASE_SINK_CLOCK(obj)   (GST_AUDIO_BASE_SINK (obj)-&gt;clock)
 </pre>
 <p>Get the <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstClock.html"><span class="type">GstClock</span></a> of <em class="parameter"><code>obj</code></em>
 .</p>
 <div class="refsect3">
-<a name="id-1.2.6.12.10.2.5"></a><h4>Parameters</h4>
+<a name="id-1.2.6.12.10.3.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -273,7 +376,7 @@
 <p>Get the sink <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html"><span class="type">GstPad</span></a> of <em class="parameter"><code>obj</code></em>
 .</p>
 <div class="refsect3">
-<a name="id-1.2.6.12.10.3.5"></a><h4>Parameters</h4>
+<a name="id-1.2.6.12.10.4.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -299,7 +402,7 @@
  as the parent of
 the returned buffer (see <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstObject.html#gst-object-set-parent"><code class="function">gst_object_set_parent()</code></a>).</p>
 <div class="refsect3">
-<a name="id-1.2.6.12.10.4.5"></a><h4>Parameters</h4>
+<a name="id-1.2.6.12.10.5.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -314,7 +417,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.6.12.10.4.6"></a><h4>Returns</h4>
+<a name="id-1.2.6.12.10.5.6"></a><h4>Returns</h4>
 <p> The new ringbuffer of <em class="parameter"><code>sink</code></em>
 . </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>
@@ -335,7 +438,7 @@
  is <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a>, <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html#gst-element-provide-clock"><code class="function">gst_element_provide_clock()</code></a> will return
 NULL.</p>
 <div class="refsect3">
-<a name="id-1.2.6.12.10.5.5"></a><h4>Parameters</h4>
+<a name="id-1.2.6.12.10.6.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -366,7 +469,7 @@
  will provide a clock or not. See also
 gst_audio_base_sink_set_provide_clock.</p>
 <div class="refsect3">
-<a name="id-1.2.6.12.10.6.5"></a><h4>Parameters</h4>
+<a name="id-1.2.6.12.10.7.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -381,10 +484,9 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.6.12.10.6.6"></a><h4>Returns</h4>
+<a name="id-1.2.6.12.10.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 <em class="parameter"><code>sink</code></em>
 will provide a clock.</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -396,7 +498,7 @@
 <p>Controls how clock slaving will be performed in <em class="parameter"><code>sink</code></em>
 .</p>
 <div class="refsect3">
-<a name="id-1.2.6.12.10.7.5"></a><h4>Parameters</h4>
+<a name="id-1.2.6.12.10.8.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -426,7 +528,7 @@
 <p>Get the current slave method used by <em class="parameter"><code>sink</code></em>
 .</p>
 <div class="refsect3">
-<a name="id-1.2.6.12.10.8.5"></a><h4>Parameters</h4>
+<a name="id-1.2.6.12.10.9.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -441,10 +543,9 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.6.12.10.8.6"></a><h4>Returns</h4>
+<a name="id-1.2.6.12.10.9.6"></a><h4>Returns</h4>
 <p> The current slave method used by <em class="parameter"><code>sink</code></em>
 .</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -456,7 +557,7 @@
                                 <em class="parameter"><code><span class="type">gint64</span> drift_tolerance</code></em>);</pre>
 <p>Controls the sink's drift tolerance.</p>
 <div class="refsect3">
-<a name="id-1.2.6.12.10.9.5"></a><h4>Parameters</h4>
+<a name="id-1.2.6.12.10.10.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -487,7 +588,7 @@
 <p>Get the current drift tolerance, in microseconds, used by <em class="parameter"><code>sink</code></em>
 .</p>
 <div class="refsect3">
-<a name="id-1.2.6.12.10.10.5"></a><h4>Parameters</h4>
+<a name="id-1.2.6.12.10.11.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -502,10 +603,9 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.6.12.10.10.6"></a><h4>Returns</h4>
+<a name="id-1.2.6.12.10.11.6"></a><h4>Returns</h4>
 <p> The current drift tolerance used by <em class="parameter"><code>sink</code></em>
 .</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -517,7 +617,7 @@
                                 <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> alignment_threshold</code></em>);</pre>
 <p>Controls the sink's alignment threshold.</p>
 <div class="refsect3">
-<a name="id-1.2.6.12.10.11.5"></a><h4>Parameters</h4>
+<a name="id-1.2.6.12.10.12.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -548,7 +648,7 @@
 <p>Get the current alignment threshold, in nanoseconds, used by <em class="parameter"><code>sink</code></em>
 .</p>
 <div class="refsect3">
-<a name="id-1.2.6.12.10.12.5"></a><h4>Parameters</h4>
+<a name="id-1.2.6.12.10.13.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -563,10 +663,9 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.6.12.10.12.6"></a><h4>Returns</h4>
+<a name="id-1.2.6.12.10.13.6"></a><h4>Returns</h4>
 <p> The current alignment threshold used by <em class="parameter"><code>sink</code></em>
 .</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -577,7 +676,7 @@
                                       <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> discont_wait</code></em>);</pre>
 <p>Controls how long the sink will wait before creating a discontinuity.</p>
 <div class="refsect3">
-<a name="id-1.2.6.12.10.13.5"></a><h4>Parameters</h4>
+<a name="id-1.2.6.12.10.14.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -607,7 +706,7 @@
 <p>Get the current discont wait, in nanoseconds, used by <em class="parameter"><code>sink</code></em>
 .</p>
 <div class="refsect3">
-<a name="id-1.2.6.12.10.14.5"></a><h4>Parameters</h4>
+<a name="id-1.2.6.12.10.15.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -622,12 +721,89 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.6.12.10.14.6"></a><h4>Returns</h4>
+<a name="id-1.2.6.12.10.15.6"></a><h4>Returns</h4>
 <p> The current discont wait used by <em class="parameter"><code>sink</code></em>
 .</p>
-<p></p>
 </div>
 </div>
+<hr>
+<div class="refsect2">
+<a name="gst-audio-base-sink-set-custom-slaving-callback"></a><h3>gst_audio_base_sink_set_custom_slaving_callback ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+gst_audio_base_sink_set_custom_slaving_callback
+                               (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstaudiobasesink.html#GstAudioBaseSink"><span class="type">GstAudioBaseSink</span></a> *sink</code></em>,
+                                <em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstaudiobasesink.html#GstAudioBaseSinkCustomSlavingCallback" title="GstAudioBaseSinkCustomSlavingCallback ()"><span class="type">GstAudioBaseSinkCustomSlavingCallback</span></a> callback</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>Sets the custom slaving callback. This callback will
+be invoked if the slave-method property is set to
+GST_AUDIO_BASE_SINK_SLAVE_CUSTOM and the audio sink
+receives and plays samples.</p>
+<p>Setting the callback to NULL causes the sink to
+behave as if the GST_AUDIO_BASE_SINK_SLAVE_NONE
+method were used.</p>
+<div class="refsect3">
+<a name="id-1.2.6.12.10.16.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>sink</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gst-plugins-base-libs-gstaudiobasesink.html#GstAudioBaseSink"><span class="type">GstAudioBaseSink</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>callback</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gst-plugins-base-libs-gstaudiobasesink.html#GstAudioBaseSinkCustomSlavingCallback" title="GstAudioBaseSinkCustomSlavingCallback ()"><span class="type">GstAudioBaseSinkCustomSlavingCallback</span></a></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 passed to the callback</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>notify</p></td>
+<td class="parameter_description"><p>called when user_data becomes unused</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<p class="since">Since: 1.6</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-audio-base-sink-report-device-failure"></a><h3>gst_audio_base_sink_report_device_failure ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+gst_audio_base_sink_report_device_failure
+                               (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstaudiobasesink.html#GstAudioBaseSink"><span class="type">GstAudioBaseSink</span></a> *sink</code></em>);</pre>
+<p>Informs this base class that the audio output device has failed for
+some reason, causing a discontinuity (for example, because the device
+recovered from the error, but lost all contents of its ring buffer).
+This function is typically called by derived classes, and is useful
+for the custom slave method.</p>
+<div class="refsect3">
+<a name="id-1.2.6.12.10.17.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>sink</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gst-plugins-base-libs-gstaudiobasesink.html#GstAudioBaseSink"><span class="type">GstAudioBaseSink</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<p class="since">Since: 1.6</p>
+</div>
 </div>
 <div class="refsect1">
 <a name="gst-plugins-base-libs-gstaudiobasesink.other_details"></a><h2>Types and Values</h2>
@@ -719,10 +895,79 @@
 </td>
 <td class="enum_member_annotations"> </td>
 </tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-AUDIO-BASE-SINK-SLAVE-CUSTOM:CAPS"></a>GST_AUDIO_BASE_SINK_SLAVE_CUSTOM</p></td>
+<td class="enum_member_description">
+<p>Use custom clock slaving algorithm (Since: 1.6)</p>
+</td>
+<td class="enum_member_annotations"> </td>
+</tr>
 </tbody>
 </table></div>
 </div>
 </div>
+<hr>
+<div class="refsect2">
+<a name="GstAudioBaseSinkDiscontReason"></a><h3>enum GstAudioBaseSinkDiscontReason</h3>
+<p>Different possible reasons for discontinuities. This enum is useful for the custom
+slave method.</p>
+<div class="refsect3">
+<a name="id-1.2.6.12.11.5.4"></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-AUDIO-BASE-SINK-DISCONT-REASON-NO-DISCONT:CAPS"></a>GST_AUDIO_BASE_SINK_DISCONT_REASON_NO_DISCONT</p></td>
+<td class="enum_member_description">
+<p>No discontinuity occurred</p>
+</td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-AUDIO-BASE-SINK-DISCONT-REASON-NEW-CAPS"></a>GST_AUDIO_BASE_SINK_DISCONT_REASON_NEW_CAPS</p></td>
+<td class="enum_member_description">
+<p>New caps are set, causing renegotiotion</p>
+</td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-AUDIO-BASE-SINK-DISCONT-REASON-FLUSH:CAPS"></a>GST_AUDIO_BASE_SINK_DISCONT_REASON_FLUSH</p></td>
+<td class="enum_member_description">
+<p>Samples have been flushed</p>
+</td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-AUDIO-BASE-SINK-DISCONT-REASON-SYNC-LATENCY:CAPS"></a>GST_AUDIO_BASE_SINK_DISCONT_REASON_SYNC_LATENCY</p></td>
+<td class="enum_member_description">
+<p>Sink was synchronized to the estimated latency (occurs during initialization)</p>
+</td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-AUDIO-BASE-SINK-DISCONT-REASON-ALIGNMENT:CAPS"></a>GST_AUDIO_BASE_SINK_DISCONT_REASON_ALIGNMENT</p></td>
+<td class="enum_member_description">
+<p>Aligning buffers failed because the timestamps are too discontinuous</p>
+</td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-AUDIO-BASE-SINK-DISCONT-REASON-DEVICE-FAILURE:CAPS"></a>GST_AUDIO_BASE_SINK_DISCONT_REASON_DEVICE_FAILURE</p></td>
+<td class="enum_member_description">
+<p>Audio output device experienced and recovered from an error but introduced latency in the process (see also <em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstaudiobasesink.html#gst-audio-base-sink-report-device-failure" title="gst_audio_base_sink_report_device_failure ()"><code class="function">gst_audio_base_sink_report_device_failure()</code></a></code></em>
+)</p>
+</td>
+<td class="enum_member_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<p class="since">Since: 1.6</p>
+</div>
 </div>
 <div class="refsect1">
 <a name="gst-plugins-base-libs-gstaudiobasesink.property-details"></a><h2>Property Details</h2>
@@ -803,7 +1048,6 @@
 </div>
 </div>
 <div class="footer">
-<hr>
-          Generated by GTK-Doc V1.21</div>
+<hr>Generated by GTK-Doc V1.24</div>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/libs/html/gst-plugins-base-libs-gstaudiobasesrc.html b/docs/libs/html/gst-plugins-base-libs-gstaudiobasesrc.html
index b6865af..fa8eca2 100644
--- a/docs/libs/html/gst-plugins-base-libs-gstaudiobasesrc.html
+++ b/docs/libs/html/gst-plugins-base-libs-gstaudiobasesrc.html
@@ -2,13 +2,13 @@
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>GStreamer Base Plugins 1.0 Library Reference Manual: gstaudiobasesrc</title>
+<title>gstaudiobasesrc: GStreamer Base 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 Base Plugins 1.0 Library Reference Manual">
 <link rel="up" href="gstreamer-audio.html" title="Audio Library">
 <link rel="prev" href="gst-plugins-base-libs-gstaudiobasesink.html" title="gstaudiobasesink">
 <link rel="next" href="gst-plugins-base-libs-gstaudiochannels.html" title="gstaudiochannels">
-<meta name="generator" content="GTK-Doc V1.21 (XML mode)">
+<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">
@@ -326,7 +326,6 @@
 <a name="id-1.2.6.13.10.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 <em class="parameter"><code>src</code></em>
 will provide a clock.</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -355,7 +354,6 @@
 <a name="id-1.2.6.13.10.7.6"></a><h4>Returns</h4>
 <p> The current slave method used by <em class="parameter"><code>src</code></em>
 .</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -504,7 +502,7 @@
 <div class="refsect2">
 <a name="GstAudioBaseSrc--buffer-time"></a><h3>The <code class="literal">“buffer-time”</code> property</h3>
 <pre class="programlisting">  “buffer-time”              <span class="type">gint64</span></pre>
-<p>Size of audio buffer in microseconds. This is the maximum amount of data that is buffered in the device and the maximum latency that the source reports.</p>
+<p>Size of audio buffer in microseconds. This is the maximum amount of data that is buffered in the device and the maximum latency that the source reports. This value might be ignored by the element if necessary; see "actual-buffer-time".</p>
 <p>Flags: Read / Write</p>
 <p>Allowed values: &gt;= 1</p>
 <p>Default value: 200000</p>
@@ -513,7 +511,7 @@
 <div class="refsect2">
 <a name="GstAudioBaseSrc--latency-time"></a><h3>The <code class="literal">“latency-time”</code> property</h3>
 <pre class="programlisting">  “latency-time”             <span class="type">gint64</span></pre>
-<p>The minimum amount of data to read in each iteration in microseconds. This is the minimum latency that the source reports.</p>
+<p>The minimum amount of data to read in each iteration in microseconds. This is the minimum latency that the source reports. This value might be ignored by the element if necessary; see "actual-latency-time".</p>
 <p>Flags: Read / Write</p>
 <p>Allowed values: &gt;= 1</p>
 <p>Default value: 10000</p>
@@ -541,7 +539,6 @@
 </div>
 </div>
 <div class="footer">
-<hr>
-          Generated by GTK-Doc V1.21</div>
+<hr>Generated by GTK-Doc V1.24</div>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/libs/html/gst-plugins-base-libs-gstaudiocdsrc.html b/docs/libs/html/gst-plugins-base-libs-gstaudiocdsrc.html
index 5151b36..01a1ada 100644
--- a/docs/libs/html/gst-plugins-base-libs-gstaudiocdsrc.html
+++ b/docs/libs/html/gst-plugins-base-libs-gstaudiocdsrc.html
@@ -2,13 +2,13 @@
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>GStreamer Base Plugins 1.0 Library Reference Manual: gstaudiocdsrc</title>
+<title>gstaudiocdsrc: GStreamer Base 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 Base Plugins 1.0 Library Reference Manual">
 <link rel="up" href="gstreamer-audio.html" title="Audio Library">
 <link rel="prev" href="gst-plugins-base-libs-gstaudiometa.html" title="gstaudiometa">
 <link rel="next" href="gst-plugins-base-libs-gstaudioclock.html" title="gstaudioclock">
-<meta name="generator" content="GTK-Doc V1.21 (XML mode)">
+<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">
@@ -221,7 +221,6 @@
 <div class="refsect3">
 <a name="id-1.2.6.5.11.2.6"></a><h4>Returns</h4>
 <p> FALSE on error, otherwise TRUE.</p>
-<p></p>
 </div>
 </div>
 </div>
@@ -414,7 +413,6 @@
 </div>
 </div>
 <div class="footer">
-<hr>
-          Generated by GTK-Doc V1.21</div>
+<hr>Generated by GTK-Doc V1.24</div>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/libs/html/gst-plugins-base-libs-gstaudiochannels.html b/docs/libs/html/gst-plugins-base-libs-gstaudiochannels.html
index 11a5f4c..beda99f 100644
--- a/docs/libs/html/gst-plugins-base-libs-gstaudiochannels.html
+++ b/docs/libs/html/gst-plugins-base-libs-gstaudiochannels.html
@@ -2,13 +2,13 @@
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>GStreamer Base Plugins 1.0 Library Reference Manual: gstaudiochannels</title>
+<title>gstaudiochannels: GStreamer Base 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 Base Plugins 1.0 Library Reference Manual">
 <link rel="up" href="gstreamer-audio.html" title="Audio Library">
 <link rel="prev" href="gst-plugins-base-libs-gstaudiobasesrc.html" title="gstaudiobasesrc">
 <link rel="next" href="gst-plugins-base-libs-gstaudioringbuffer.html" title="gstaudioringbuffer">
-<meta name="generator" content="GTK-Doc V1.21 (XML mode)">
+<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">
@@ -182,7 +182,6 @@
 <div class="refsect3">
 <a name="id-1.2.6.14.7.3.7"></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 channel positions are valid and could be converted.</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -200,7 +199,10 @@
  entries ensured by caller).
 If <em class="parameter"><code>channel_mask</code></em>
  is set to 0, it is considered as 'not present' for purpose
-of conversion.</p>
+of conversion.
+A partially valid <em class="parameter"><code>channel_mask</code></em>
+ with less bits set than the number
+of channels is considered valid.</p>
 <div class="refsect3">
 <a name="id-1.2.6.14.7.4.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
@@ -232,7 +234,6 @@
 <div class="refsect3">
 <a name="id-1.2.6.14.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 channel and channel mask are valid and could be converted</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -272,7 +273,6 @@
 <a name="id-1.2.6.14.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 the channel positions are valid and reordering
 was successful.</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -320,7 +320,6 @@
 <div class="refsect3">
 <a name="id-1.2.6.14.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 the channel positions are valid.</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -382,7 +381,6 @@
 <div class="refsect3">
 <a name="id-1.2.6.14.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 the reordering was possible.</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -449,7 +447,6 @@
 <div class="refsect3">
 <a name="id-1.2.6.14.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 the reordering was possible.</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -508,7 +505,6 @@
 <a name="id-1.2.6.14.7.9.7"></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 channel positions are valid and reordering
 is possible.</p>
-<p></p>
 </div>
 </div>
 </div>
@@ -774,7 +770,6 @@
 </div>
 </div>
 <div class="footer">
-<hr>
-          Generated by GTK-Doc V1.21</div>
+<hr>Generated by GTK-Doc V1.24</div>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/libs/html/gst-plugins-base-libs-gstaudioclock.html b/docs/libs/html/gst-plugins-base-libs-gstaudioclock.html
index c31d373..43ec725 100644
--- a/docs/libs/html/gst-plugins-base-libs-gstaudioclock.html
+++ b/docs/libs/html/gst-plugins-base-libs-gstaudioclock.html
@@ -2,13 +2,13 @@
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>GStreamer Base Plugins 1.0 Library Reference Manual: gstaudioclock</title>
+<title>gstaudioclock: GStreamer Base 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 Base Plugins 1.0 Library Reference Manual">
 <link rel="up" href="gstreamer-audio.html" title="Audio Library">
 <link rel="prev" href="gst-plugins-base-libs-gstaudiocdsrc.html" title="gstaudiocdsrc">
 <link rel="next" href="gst-plugins-base-libs-gstaudiodecoder.html" title="gstaudiodecoder">
-<meta name="generator" content="GTK-Doc V1.21 (XML mode)">
+<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">
@@ -161,7 +161,6 @@
 <a name="id-1.2.6.6.9.2.6"></a><h4>Returns</h4>
 <p> the current time or <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstClock.html#GST-CLOCK-TIME-NONE:CAPS"><span class="type">GST_CLOCK_TIME_NONE</span></a> if the previous time should
 be used.</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -214,7 +213,6 @@
 <div class="refsect3">
 <a name="id-1.2.6.6.9.3.6"></a><h4>Returns</h4>
 <p> a new <a class="link" href="gst-plugins-base-libs-gstaudioclock.html#GstAudioClock"><span class="type">GstAudioClock</span></a> casted to a <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstClock.html"><span class="type">GstClock</span></a>.</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -251,7 +249,6 @@
 <a name="id-1.2.6.6.9.4.6"></a><h4>Returns</h4>
 <p> <em class="parameter"><code>time</code></em>
 adjusted with the internal offset.</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -279,7 +276,6 @@
 <div class="refsect3">
 <a name="id-1.2.6.6.9.5.6"></a><h4>Returns</h4>
 <p> the time as reported by the time function of the audio clock</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -359,7 +355,6 @@
 </div>
 </div>
 <div class="footer">
-<hr>
-          Generated by GTK-Doc V1.21</div>
+<hr>Generated by GTK-Doc V1.24</div>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/libs/html/gst-plugins-base-libs-gstaudiodecoder.html b/docs/libs/html/gst-plugins-base-libs-gstaudiodecoder.html
index 4be7983..ef136d7 100644
--- a/docs/libs/html/gst-plugins-base-libs-gstaudiodecoder.html
+++ b/docs/libs/html/gst-plugins-base-libs-gstaudiodecoder.html
@@ -2,13 +2,13 @@
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>GStreamer Base Plugins 1.0 Library Reference Manual: gstaudiodecoder</title>
+<title>gstaudiodecoder: GStreamer Base 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 Base Plugins 1.0 Library Reference Manual">
 <link rel="up" href="gstreamer-audio.html" title="Audio Library">
 <link rel="prev" href="gst-plugins-base-libs-gstaudioclock.html" title="gstaudioclock">
 <link rel="next" href="gst-plugins-base-libs-gstaudioencoder.html" title="gstaudioencoder">
-<meta name="generator" content="GTK-Doc V1.21 (XML mode)">
+<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">
@@ -275,6 +275,14 @@
 <a class="link" href="gst-plugins-base-libs-gstaudiodecoder.html#gst-audio-decoder-merge-tags" title="gst_audio_decoder_merge_tags ()">gst_audio_decoder_merge_tags</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-base-libs-gstaudiodecoder.html#gst-audio-decoder-proxy-getcaps" title="gst_audio_decoder_proxy_getcaps ()">gst_audio_decoder_proxy_getcaps</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
 </tbody>
 </table></div>
 </div>
@@ -611,7 +619,6 @@
 <div class="refsect3">
 <a name="id-1.2.6.7.10.5.8"></a><h4>Returns</h4>
 <p> a <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html#GstFlowReturn"><span class="type">GstFlowReturn</span></a> that should be escalated to caller (of caller)</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -647,7 +654,6 @@
 <div class="refsect3">
 <a name="id-1.2.6.7.10.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> on success.</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -676,7 +682,6 @@
 <div class="refsect3">
 <a name="id-1.2.6.7.10.7.6"></a><h4>Returns</h4>
 <p> <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><span class="type">TRUE</span></a> if the negotiation succeeded, else <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><span class="type">FALSE</span></a>.</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -784,7 +789,6 @@
 <div class="refsect3">
 <a name="id-1.2.6.7.10.10.5"></a><h4>Returns</h4>
 <p> a <a class="link" href="gst-plugins-base-libs-gstaudio.html#GstAudioInfo" title="struct GstAudioInfo"><span class="type">GstAudioInfo</span></a> describing the input audio format</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -810,7 +814,6 @@
 <div class="refsect3">
 <a name="id-1.2.6.7.10.11.5"></a><h4>Returns</h4>
 <p> currently configured byte to time conversion setting</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -836,7 +839,6 @@
 <div class="refsect3">
 <a name="id-1.2.6.7.10.12.5"></a><h4>Returns</h4>
 <p> currently configured decoder delay</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -864,7 +866,6 @@
 <a name="id-1.2.6.7.10.13.6"></a><h4>Returns</h4>
 <p> TRUE if drainable handling is enabled.</p>
 <p>MT safe.</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -929,7 +930,6 @@
 <div class="refsect3">
 <a name="id-1.2.6.7.10.15.5"></a><h4>Returns</h4>
 <p> currently configured decoder tolerated error count.</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -957,7 +957,6 @@
 <a name="id-1.2.6.7.10.16.6"></a><h4>Returns</h4>
 <p> aggregation latency.</p>
 <p>MT safe.</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -985,7 +984,6 @@
 <a name="id-1.2.6.7.10.17.6"></a><h4>Returns</h4>
 <p> TRUE if required format handling is enabled.</p>
 <p>MT safe.</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -1049,7 +1047,6 @@
 <a name="id-1.2.6.7.10.19.6"></a><h4>Returns</h4>
 <p> TRUE if packet loss concealment is enabled.</p>
 <p>MT safe.</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -1075,7 +1072,6 @@
 <div class="refsect3">
 <a name="id-1.2.6.7.10.20.5"></a><h4>Returns</h4>
 <p> currently configured plc handling</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -1103,7 +1099,6 @@
 <a name="id-1.2.6.7.10.21.6"></a><h4>Returns</h4>
 <p> decoder audio jitter tolerance threshold.</p>
 <p>MT safe.</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -1406,15 +1401,13 @@
 gst_audio_decoder_merge_tags (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstaudiodecoder.html#GstAudioDecoder"><span class="type">GstAudioDecoder</span></a> *dec</code></em>,
                               <em class="parameter"><code>const <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstTagList.html"><span class="type">GstTagList</span></a> *tags</code></em>,
                               <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstTagList.html#GstTagMergeMode"><span class="type">GstTagMergeMode</span></a> mode</code></em>);</pre>
-<p>Adds tags to so-called pending tags, which will be processed
-before pushing out data downstream.</p>
+<p>Sets the audio decoder tags and how they should be merged with any
+upstream stream tags. This will override any tags previously-set
+with <a class="link" href="gst-plugins-base-libs-gstaudiodecoder.html#gst-audio-decoder-merge-tags" title="gst_audio_decoder_merge_tags ()"><code class="function">gst_audio_decoder_merge_tags()</code></a>.</p>
 <p>Note that this is provided for convenience, and the subclass is
-not required to use this and can still do tag handling on its own,
-although it should be aware that baseclass already takes care
-of the usual CODEC/AUDIO_CODEC tags.</p>
-<p>MT safe.</p>
+not required to use this and can still do tag handling on its own.</p>
 <div class="refsect3">
-<a name="id-1.2.6.7.10.31.7"></a><h4>Parameters</h4>
+<a name="id-1.2.6.7.10.31.6"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1429,18 +1422,64 @@
 </tr>
 <tr>
 <td class="parameter_name"><p>tags</p></td>
-<td class="parameter_description"><p>a <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstTagList.html"><span class="type">GstTagList</span></a> to merge</p></td>
-<td class="parameter_annotations"> </td>
+<td class="parameter_description"><p> a <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstTagList.html"><span class="type">GstTagList</span></a> to merge, or NULL. </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>mode</p></td>
-<td class="parameter_description"><p>the <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstTagList.html#GstTagMergeMode"><span class="type">GstTagMergeMode</span></a> to use</p></td>
+<td class="parameter_description"><p>the <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstTagList.html#GstTagMergeMode"><span class="type">GstTagMergeMode</span></a> to use, usually <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstTagList.html#GST-TAG-MERGE-REPLACE:CAPS"><span class="type">GST_TAG_MERGE_REPLACE</span></a></p></td>
 <td class="parameter_annotations"> </td>
 </tr>
 </tbody>
 </table></div>
 </div>
 </div>
+<hr>
+<div class="refsect2">
+<a name="gst-audio-decoder-proxy-getcaps"></a><h3>gst_audio_decoder_proxy_getcaps ()</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_audio_decoder_proxy_getcaps (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstaudiodecoder.html#GstAudioDecoder"><span class="type">GstAudioDecoder</span></a> *decoder</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>
+<p>Returns caps that express <em class="parameter"><code>caps</code></em>
+ (or sink template caps if <em class="parameter"><code>caps</code></em>
+ == NULL)
+restricted to rate/channels/... combinations supported by downstream
+elements.</p>
+<div class="refsect3">
+<a name="id-1.2.6.7.10.32.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>decoder</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gst-plugins-base-libs-gstaudiodecoder.html#GstAudioDecoder"><span class="type">GstAudioDecoder</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>caps</p></td>
+<td class="parameter_description"><p> initial caps. </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>filter</p></td>
+<td class="parameter_description"><p> filter caps. </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.6.7.10.32.6"></a><h4>Returns</h4>
+<p> a <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstCaps.html"><span class="type">GstCaps</span></a> owned by caller. </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.6</p>
+</div>
 </div>
 <div class="refsect1">
 <a name="gst-plugins-base-libs-gstaudiodecoder.other_details"></a><h2>Types and Values</h2>
@@ -1491,6 +1530,16 @@
 
   gboolean      (*propose_allocation) (GstAudioDecoder *dec,
                                        GstQuery * query);
+
+  gboolean      (*sink_query)         (GstAudioDecoder *dec, GstQuery *query);
+
+  gboolean      (*src_query)          (GstAudioDecoder *dec, GstQuery *query);
+
+  GstCaps *     (*getcaps)            (GstAudioDecoder * dec,
+                                       GstCaps * filter);
+
+  gboolean      (*transform_meta)     (GstAudioDecoder *enc, GstBuffer *outbuf,
+                                       GstMeta *meta, GstBuffer *inbuf);
 };
 </pre>
 <p>Subclasses can override any of the available virtual methods or not, as
@@ -1621,6 +1670,42 @@
 invoke the default handler.</p></td>
 <td class="struct_member_annotations"> </td>
 </tr>
+<tr>
+<td class="struct_member_name"><p><em class="structfield"><code><a name="GstAudioDecoderClass.sink-query"></a>sink_query</code></em> ()</p></td>
+<td class="struct_member_description"><p>Optional.
+Query handler on the sink pad. This function should
+return TRUE if the query could be performed. Subclasses
+should chain up to the parent implementation to invoke the
+default handler. Since 1.6</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><em class="structfield"><code><a name="GstAudioDecoderClass.src-query"></a>src_query</code></em> ()</p></td>
+<td class="struct_member_description"><p>Optional.
+Query handler on the source pad. This function should
+return TRUE if the query could be performed. Subclasses
+should chain up to the parent implementation to invoke the
+default handler. Since 1.6</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><em class="structfield"><code><a name="GstAudioDecoderClass.getcaps"></a>getcaps</code></em> ()</p></td>
+<td class="struct_member_description"><p>Optional.
+Allows for a custom sink getcaps implementation.
+If not implemented,
+default returns gst_audio_decoder_proxy_getcaps
+applied to sink template caps.</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><em class="structfield"><code><a name="GstAudioDecoderClass.transform-meta"></a>transform_meta</code></em> ()</p></td>
+<td class="struct_member_description"><p>Optional. Transform the metadata on the input buffer to the
+output buffer. By default this method copies all meta without
+tags and meta with only the "audio" tag. subclasses can
+implement this method and return <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the metadata is to be
+copied. Since 1.6</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
 </tbody>
 </table></div>
 </div>
@@ -1674,7 +1759,6 @@
 </div>
 </div>
 <div class="footer">
-<hr>
-          Generated by GTK-Doc V1.21</div>
+<hr>Generated by GTK-Doc V1.24</div>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/libs/html/gst-plugins-base-libs-gstaudioencoder.html b/docs/libs/html/gst-plugins-base-libs-gstaudioencoder.html
index ac1e081..2623192 100644
--- a/docs/libs/html/gst-plugins-base-libs-gstaudioencoder.html
+++ b/docs/libs/html/gst-plugins-base-libs-gstaudioencoder.html
@@ -2,13 +2,13 @@
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>GStreamer Base Plugins 1.0 Library Reference Manual: gstaudioencoder</title>
+<title>gstaudioencoder: GStreamer Base 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 Base Plugins 1.0 Library Reference Manual">
 <link rel="up" href="gstreamer-audio.html" title="Audio Library">
 <link rel="prev" href="gst-plugins-base-libs-gstaudiodecoder.html" title="gstaudiodecoder">
 <link rel="next" href="gst-plugins-base-libs-gstaudiofilter.html" title="gstaudiofilter">
-<meta name="generator" content="GTK-Doc V1.21 (XML mode)">
+<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">
@@ -592,7 +592,6 @@
 <div class="refsect3">
 <a name="id-1.2.6.8.11.4.8"></a><h4>Returns</h4>
 <p> a <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html#GstFlowReturn"><span class="type">GstFlowReturn</span></a> that should be escalated to caller (of caller)</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -710,7 +709,6 @@
 <div class="refsect3">
 <a name="id-1.2.6.8.11.8.6"></a><h4>Returns</h4>
 <p> <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><span class="type">TRUE</span></a> if the negotiation succeeded, else <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><span class="type">FALSE</span></a>.</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -736,7 +734,6 @@
 <div class="refsect3">
 <a name="id-1.2.6.8.11.9.5"></a><h4>Returns</h4>
 <p> a <a class="link" href="gst-plugins-base-libs-gstaudio.html#GstAudioInfo" title="struct GstAudioInfo"><span class="type">GstAudioInfo</span></a> describing the input audio format</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -764,7 +761,6 @@
 <a name="id-1.2.6.8.11.10.6"></a><h4>Returns</h4>
 <p> TRUE if drainable handling is enabled.</p>
 <p>MT safe.</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -790,7 +786,6 @@
 <div class="refsect3">
 <a name="id-1.2.6.8.11.11.5"></a><h4>Returns</h4>
 <p> currently configured maximum handled frames</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -817,7 +812,6 @@
 <div class="refsect3">
 <a name="id-1.2.6.8.11.12.5"></a><h4>Returns</h4>
 <p> currently minimum requested samples per frame</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -844,7 +838,6 @@
 <div class="refsect3">
 <a name="id-1.2.6.8.11.13.5"></a><h4>Returns</h4>
 <p> currently maximum requested samples per frame</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -872,7 +865,6 @@
 <a name="id-1.2.6.8.11.14.6"></a><h4>Returns</h4>
 <p> TRUE if hard minimum handling is enabled.</p>
 <p>MT safe.</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -943,7 +935,6 @@
 <div class="refsect3">
 <a name="id-1.2.6.8.11.17.5"></a><h4>Returns</h4>
 <p> currently configured encoder lookahead</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -971,7 +962,6 @@
 <a name="id-1.2.6.8.11.18.6"></a><h4>Returns</h4>
 <p> TRUE if granule marking is enabled.</p>
 <p>MT safe.</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -1000,7 +990,6 @@
 <a name="id-1.2.6.8.11.19.6"></a><h4>Returns</h4>
 <p> TRUE if perfect timestamp setting enabled.</p>
 <p>MT safe.</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -1028,7 +1017,6 @@
 <a name="id-1.2.6.8.11.20.6"></a><h4>Returns</h4>
 <p> encoder audio jitter tolerance threshold.</p>
 <p>MT safe.</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -1059,21 +1047,21 @@
 </tr>
 <tr>
 <td class="parameter_name"><p>caps</p></td>
-<td class="parameter_description"><p>initial caps</p></td>
-<td class="parameter_annotations"> </td>
+<td class="parameter_description"><p> initial caps. </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>filter</p></td>
-<td class="parameter_description"><p>filter caps</p></td>
-<td class="parameter_annotations"> </td>
+<td class="parameter_description"><p> filter caps. </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.6.8.11.21.6"></a><h4>Returns</h4>
-<p> a <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstCaps.html"><span class="type">GstCaps</span></a> owned by caller</p>
-<p></p>
+<p> a <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstCaps.html"><span class="type">GstCaps</span></a> owned by caller. </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>
@@ -1450,12 +1438,11 @@
 gst_audio_encoder_merge_tags (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstaudioencoder.html#GstAudioEncoder"><span class="type">GstAudioEncoder</span></a> *enc</code></em>,
                               <em class="parameter"><code>const <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstTagList.html"><span class="type">GstTagList</span></a> *tags</code></em>,
                               <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstTagList.html#GstTagMergeMode"><span class="type">GstTagMergeMode</span></a> mode</code></em>);</pre>
-<p>Adds tags to so-called pending tags, which will be processed
-before pushing out data downstream.</p>
+<p>Sets the audio encoder tags and how they should be merged with any
+upstream stream tags. This will override any tags previously-set
+with <a class="link" href="gst-plugins-base-libs-gstaudioencoder.html#gst-audio-encoder-merge-tags" title="gst_audio_encoder_merge_tags ()"><code class="function">gst_audio_encoder_merge_tags()</code></a>.</p>
 <p>Note that this is provided for convenience, and the subclass is
-not required to use this and can still do tag handling on its own,
-although it should be aware that baseclass already takes care
-of the usual CODEC/AUDIO_CODEC tags.</p>
+not required to use this and can still do tag handling on its own.</p>
 <p>MT safe.</p>
 <div class="refsect3">
 <a name="id-1.2.6.8.11.34.7"></a><h4>Parameters</h4>
@@ -1473,12 +1460,13 @@
 </tr>
 <tr>
 <td class="parameter_name"><p>tags</p></td>
-<td class="parameter_description"><p>a <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstTagList.html"><span class="type">GstTagList</span></a> to merge</p></td>
-<td class="parameter_annotations"> </td>
+<td class="parameter_description"><p> a <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstTagList.html"><span class="type">GstTagList</span></a> to merge, or NULL to unset
+previously-set tags. </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>mode</p></td>
-<td class="parameter_description"><p>the <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstTagList.html#GstTagMergeMode"><span class="type">GstTagMergeMode</span></a> to use</p></td>
+<td class="parameter_description"><p>the <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstTagList.html#GstTagMergeMode"><span class="type">GstTagMergeMode</span></a> to use, usually <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstTagList.html#GST-TAG-MERGE-REPLACE:CAPS"><span class="type">GST_TAG_MERGE_REPLACE</span></a></p></td>
 <td class="parameter_annotations"> </td>
 </tr>
 </tbody>
@@ -1534,6 +1522,15 @@
 
   gboolean      (*propose_allocation) (GstAudioEncoder * enc,
                                        GstQuery * query);
+
+  gboolean      (*transform_meta)     (GstAudioEncoder *enc, GstBuffer *outbuf,
+                                       GstMeta *meta, GstBuffer *inbuf);
+
+  gboolean      (*sink_query)         (GstAudioEncoder *encoder,
+				       GstQuery *query);
+
+  gboolean      (*src_query)          (GstAudioEncoder *encoder,
+				       GstQuery *query);
 };
 </pre>
 <p>Subclasses can override any of the available virtual methods or not, as
@@ -1662,6 +1659,33 @@
 invoke the default handler.</p></td>
 <td class="struct_member_annotations"> </td>
 </tr>
+<tr>
+<td class="struct_member_name"><p><em class="structfield"><code><a name="GstAudioEncoderClass.transform-meta"></a>transform_meta</code></em> ()</p></td>
+<td class="struct_member_description"><p>Optional. Transform the metadata on the input buffer to the
+output buffer. By default this method copies all meta without
+tags and meta with only the "audio" tag. subclasses can
+implement this method and return <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the metadata is to be
+copied. Since 1.6</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><em class="structfield"><code><a name="GstAudioEncoderClass.sink-query"></a>sink_query</code></em> ()</p></td>
+<td class="struct_member_description"><p>Optional.
+Query handler on the sink pad. This function should
+return TRUE if the query could be performed. Subclasses
+should chain up to the parent implementation to invoke the
+default handler. Since 1.6</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><em class="structfield"><code><a name="GstAudioEncoderClass.src-query"></a>src_query</code></em> ()</p></td>
+<td class="struct_member_description"><p>Optional.
+Query handler on the source pad. This function should
+return TRUE if the query could be performed. Subclasses
+should chain up to the parent implementation to invoke the
+default handler. Since 1.6</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
 </tbody>
 </table></div>
 </div>
@@ -1722,7 +1746,6 @@
 </div>
 </div>
 <div class="footer">
-<hr>
-          Generated by GTK-Doc V1.21</div>
+<hr>Generated by GTK-Doc V1.24</div>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/libs/html/gst-plugins-base-libs-gstaudiofilter.html b/docs/libs/html/gst-plugins-base-libs-gstaudiofilter.html
index 4f6ebe8..fc1e88d 100644
--- a/docs/libs/html/gst-plugins-base-libs-gstaudiofilter.html
+++ b/docs/libs/html/gst-plugins-base-libs-gstaudiofilter.html
@@ -2,13 +2,13 @@
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>GStreamer Base Plugins 1.0 Library Reference Manual: gstaudiofilter</title>
+<title>gstaudiofilter: GStreamer Base 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 Base Plugins 1.0 Library Reference Manual">
 <link rel="up" href="gstreamer-audio.html" title="Audio Library">
 <link rel="prev" href="gst-plugins-base-libs-gstaudioencoder.html" title="gstaudioencoder">
 <link rel="next" href="gst-plugins-base-libs-gstaudiosink.html" title="gstaudiosink">
-<meta name="generator" content="GTK-Doc V1.21 (XML mode)">
+<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">
@@ -180,7 +180,6 @@
 </div>
 </div>
 <div class="footer">
-<hr>
-          Generated by GTK-Doc V1.21</div>
+<hr>Generated by GTK-Doc V1.24</div>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/libs/html/gst-plugins-base-libs-gstaudioiec61937.html b/docs/libs/html/gst-plugins-base-libs-gstaudioiec61937.html
index 9316122..58f86fb 100644
--- a/docs/libs/html/gst-plugins-base-libs-gstaudioiec61937.html
+++ b/docs/libs/html/gst-plugins-base-libs-gstaudioiec61937.html
@@ -2,13 +2,13 @@
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>GStreamer Base Plugins 1.0 Library Reference Manual: gstaudioiec61937</title>
+<title>gstaudioiec61937: GStreamer Base 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 Base Plugins 1.0 Library Reference Manual">
 <link rel="up" href="gstreamer-audio.html" title="Audio Library">
 <link rel="prev" href="gst-plugins-base-libs-gstaudioringbuffer.html" title="gstaudioringbuffer">
 <link rel="next" href="gst-plugins-base-libs-gststreamvolume.html" title="gststreamvolume">
-<meta name="generator" content="GTK-Doc V1.21 (XML mode)">
+<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">
@@ -97,7 +97,6 @@
 <p> the size or 0 if the given <em class="parameter"><code>type</code></em>
 is not supported or cannot be
 payloaded.</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -168,7 +167,6 @@
 <a name="id-1.2.6.16.6.3.6"></a><h4>Returns</h4>
 <p> transfer-full: <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the payloading was successful, <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a>
 otherwise.</p>
-<p></p>
 </div>
 </div>
 </div>
@@ -177,7 +175,6 @@
 </div>
 </div>
 <div class="footer">
-<hr>
-          Generated by GTK-Doc V1.21</div>
+<hr>Generated by GTK-Doc V1.24</div>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/libs/html/gst-plugins-base-libs-gstaudiometa.html b/docs/libs/html/gst-plugins-base-libs-gstaudiometa.html
index 3d38d16..cdb9839 100644
--- a/docs/libs/html/gst-plugins-base-libs-gstaudiometa.html
+++ b/docs/libs/html/gst-plugins-base-libs-gstaudiometa.html
@@ -2,13 +2,13 @@
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>GStreamer Base Plugins 1.0 Library Reference Manual: gstaudiometa</title>
+<title>gstaudiometa: GStreamer Base 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 Base Plugins 1.0 Library Reference Manual">
 <link rel="up" href="gstreamer-audio.html" title="Audio Library">
 <link rel="prev" href="gst-plugins-base-libs-gstaudio.html" title="gstaudio">
 <link rel="next" href="gst-plugins-base-libs-gstaudiocdsrc.html" title="gstaudiocdsrc">
-<meta name="generator" content="GTK-Doc V1.21 (XML mode)">
+<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">
@@ -156,8 +156,8 @@
 <div class="refsect3">
 <a name="id-1.2.6.4.7.2.7"></a><h4>Returns</h4>
 <p> the <a class="link" href="gst-plugins-base-libs-gstaudiometa.html#GstAudioDownmixMeta" title="struct GstAudioDownmixMeta"><span class="type">GstAudioDownmixMeta</span></a> on <em class="parameter"><code>buffer</code></em>
-.</p>
-<p></p>
+. </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>
@@ -208,8 +208,8 @@
 <div class="refsect3">
 <a name="id-1.2.6.4.7.4.6"></a><h4>Returns</h4>
 <p> the <a class="link" href="gst-plugins-base-libs-gstaudiometa.html#GstAudioDownmixMeta" title="struct GstAudioDownmixMeta"><span class="type">GstAudioDownmixMeta</span></a> on <em class="parameter"><code>buffer</code></em>
-.</p>
-<p></p>
+. </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>
 </div>
@@ -284,7 +284,6 @@
 </div>
 </div>
 <div class="footer">
-<hr>
-          Generated by GTK-Doc V1.21</div>
+<hr>Generated by GTK-Doc V1.24</div>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/libs/html/gst-plugins-base-libs-gstaudioringbuffer.html b/docs/libs/html/gst-plugins-base-libs-gstaudioringbuffer.html
index 132ac2d..54585b2 100644
--- a/docs/libs/html/gst-plugins-base-libs-gstaudioringbuffer.html
+++ b/docs/libs/html/gst-plugins-base-libs-gstaudioringbuffer.html
@@ -2,13 +2,13 @@
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>GStreamer Base Plugins 1.0 Library Reference Manual: gstaudioringbuffer</title>
+<title>gstaudioringbuffer: GStreamer Base 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 Base Plugins 1.0 Library Reference Manual">
 <link rel="up" href="gstreamer-audio.html" title="Audio Library">
 <link rel="prev" href="gst-plugins-base-libs-gstaudiochannels.html" title="gstaudiochannels">
 <link rel="next" href="gst-plugins-base-libs-gstaudioiec61937.html" title="gstaudioiec61937">
-<meta name="generator" content="GTK-Doc V1.21 (XML mode)">
+<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">
@@ -502,7 +502,6 @@
 <a name="id-1.2.6.15.9.8.6"></a><h4>Returns</h4>
 <p> TRUE if the device could be acquired, FALSE on error.</p>
 <p>MT safe.</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -530,7 +529,6 @@
 <a name="id-1.2.6.15.9.9.6"></a><h4>Returns</h4>
 <p> TRUE if the device could be released, FALSE on error.</p>
 <p>MT safe.</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -558,7 +556,6 @@
 <a name="id-1.2.6.15.9.10.6"></a><h4>Returns</h4>
 <p> TRUE if the ringbuffer is acquired, FALSE on error.</p>
 <p>MT safe.</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -596,7 +593,6 @@
 <a name="id-1.2.6.15.9.11.7"></a><h4>Returns</h4>
 <p> TRUE if the device could be activated in the requested mode,
 FALSE on error.</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -625,7 +621,6 @@
 <div class="refsect3">
 <a name="id-1.2.6.15.9.12.7"></a><h4>Returns</h4>
 <p> TRUE if the device is active.</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -653,7 +648,6 @@
 <a name="id-1.2.6.15.9.13.6"></a><h4>Returns</h4>
 <p> TRUE if the device could be started, FALSE on error.</p>
 <p>MT safe.</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -681,7 +675,6 @@
 <a name="id-1.2.6.15.9.14.6"></a><h4>Returns</h4>
 <p> TRUE if the device could be paused, FALSE on error.</p>
 <p>MT safe.</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -709,7 +702,6 @@
 <a name="id-1.2.6.15.9.15.6"></a><h4>Returns</h4>
 <p> TRUE if the device could be stopped, FALSE on error.</p>
 <p>MT safe.</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -744,7 +736,6 @@
 <a name="id-1.2.6.15.9.16.8"></a><h4>Returns</h4>
 <p> The number of samples queued in the audio device.</p>
 <p>MT safe.</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -774,7 +765,6 @@
 <a name="id-1.2.6.15.9.17.6"></a><h4>Returns</h4>
 <p> The number of samples processed by the ringbuffer.</p>
 <p>MT safe.</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -901,7 +891,6 @@
 when <em class="parameter"><code>buf</code></em>
 was interrupted
 with a flush or stop.</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -959,7 +948,6 @@
 <div class="refsect3">
 <a name="id-1.2.6.15.9.20.6"></a><h4>Returns</h4>
 <p> TRUE if the conversion succeeded.</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -1009,7 +997,6 @@
 <a name="id-1.2.6.15.9.21.6"></a><h4>Returns</h4>
 <p> FALSE if the buffer is not started.</p>
 <p>MT safe.</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -1075,7 +1062,6 @@
 <p> The number of samples read from the ringbuffer or -1 on
 error.</p>
 <p>MT safe.</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -1192,7 +1178,6 @@
 <a name="id-1.2.6.15.9.26.6"></a><h4>Returns</h4>
 <p> TRUE if the device could be closed, FALSE on error.</p>
 <p>MT safe.</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -1222,7 +1207,6 @@
 <a name="id-1.2.6.15.9.27.6"></a><h4>Returns</h4>
 <p> TRUE if the device could be opened, FALSE on error.</p>
 <p>MT safe.</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -1250,7 +1234,6 @@
 <a name="id-1.2.6.15.9.28.6"></a><h4>Returns</h4>
 <p> TRUE if the device was open, FALSE if it was closed.</p>
 <p>MT safe.</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -1319,7 +1302,6 @@
 <div class="refsect3">
 <a name="id-1.2.6.15.9.30.6"></a><h4>Returns</h4>
 <p> TRUE if the caps could be parsed.</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -1379,7 +1361,6 @@
 <div class="refsect3">
 <a name="id-1.2.6.15.9.32.7"></a><h4>Returns</h4>
 <p> TRUE if the device is flushing.</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -1608,7 +1589,7 @@
 </tr>
 <tr>
 <td class="struct_member_name"><p><em class="structfield"><code><a name="GstAudioRingBufferClass.delay"></a>delay</code></em> ()</p></td>
-<td class="struct_member_description"><p>get number of samples queued in device</p></td>
+<td class="struct_member_description"><p>get number of frames queued in device</p></td>
 <td class="struct_member_annotations"> </td>
 </tr>
 <tr>
@@ -1871,7 +1852,6 @@
 </div>
 </div>
 <div class="footer">
-<hr>
-          Generated by GTK-Doc V1.21</div>
+<hr>Generated by GTK-Doc V1.24</div>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/libs/html/gst-plugins-base-libs-gstaudiosink.html b/docs/libs/html/gst-plugins-base-libs-gstaudiosink.html
index 913ad47..a88de78 100644
--- a/docs/libs/html/gst-plugins-base-libs-gstaudiosink.html
+++ b/docs/libs/html/gst-plugins-base-libs-gstaudiosink.html
@@ -2,13 +2,13 @@
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>GStreamer Base Plugins 1.0 Library Reference Manual: gstaudiosink</title>
+<title>gstaudiosink: GStreamer Base 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 Base Plugins 1.0 Library Reference Manual">
 <link rel="up" href="gstreamer-audio.html" title="Audio Library">
 <link rel="prev" href="gst-plugins-base-libs-gstaudiofilter.html" title="gstaudiofilter">
 <link rel="next" href="gst-plugins-base-libs-gstaudiosrc.html" title="gstaudiosrc">
-<meta name="generator" content="GTK-Doc V1.21 (XML mode)">
+<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">
@@ -114,6 +114,7 @@
 </div>
 <div class="refsect1">
 <a name="gst-plugins-base-libs-gstaudiosink.functions_details"></a><h2>Functions</h2>
+<p></p>
 </div>
 <div class="refsect1">
 <a name="gst-plugins-base-libs-gstaudiosink.other_details"></a><h2>Types and Values</h2>
@@ -140,7 +141,7 @@
   gboolean (*close)     (GstAudioSink *sink);
   /* write samples to the device */
   gint     (*write)     (GstAudioSink *sink, gpointer data, guint length);
-  /* get number of samples queued in the device */
+  /* get number of frames queued in the device */
   guint    (*delay)     (GstAudioSink *sink);
   /* reset the audio device, unblock from a write */
   void     (*reset)     (GstAudioSink *sink);
@@ -189,7 +190,7 @@
 </tr>
 <tr>
 <td class="struct_member_name"><p><em class="structfield"><code><a name="GstAudioSinkClass.delay"></a>delay</code></em> ()</p></td>
-<td class="struct_member_description"><p>Return how many samples are still in the device. This is used to
+<td class="struct_member_description"><p>Return how many frames are still in the device. This is used to
 drive the synchronisation.</p></td>
 <td class="struct_member_annotations"> </td>
 </tr>
@@ -210,7 +211,6 @@
 </div>
 </div>
 <div class="footer">
-<hr>
-          Generated by GTK-Doc V1.21</div>
+<hr>Generated by GTK-Doc V1.24</div>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/libs/html/gst-plugins-base-libs-gstaudiosrc.html b/docs/libs/html/gst-plugins-base-libs-gstaudiosrc.html
index 356d6b4..1944377 100644
--- a/docs/libs/html/gst-plugins-base-libs-gstaudiosrc.html
+++ b/docs/libs/html/gst-plugins-base-libs-gstaudiosrc.html
@@ -2,13 +2,13 @@
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>GStreamer Base Plugins 1.0 Library Reference Manual: gstaudiosrc</title>
+<title>gstaudiosrc: GStreamer Base 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 Base Plugins 1.0 Library Reference Manual">
 <link rel="up" href="gstreamer-audio.html" title="Audio Library">
 <link rel="prev" href="gst-plugins-base-libs-gstaudiosink.html" title="gstaudiosink">
 <link rel="next" href="gst-plugins-base-libs-gstaudiobasesink.html" title="gstaudiobasesink">
-<meta name="generator" content="GTK-Doc V1.21 (XML mode)">
+<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">
@@ -115,6 +115,7 @@
 </div>
 <div class="refsect1">
 <a name="gst-plugins-base-libs-gstaudiosrc.functions_details"></a><h2>Functions</h2>
+<p></p>
 </div>
 <div class="refsect1">
 <a name="gst-plugins-base-libs-gstaudiosrc.other_details"></a><h2>Types and Values</h2>
@@ -142,7 +143,7 @@
   /* read samples from the device */
   guint    (*read)      (GstAudioSrc *src, gpointer data, guint length,
       GstClockTime *timestamp);
-  /* get number of samples queued in the device */
+  /* get number of frames queued in the device */
   guint    (*delay)     (GstAudioSrc *src);
   /* reset the audio device, unblock from a write */
   void     (*reset)     (GstAudioSrc *src);
@@ -191,7 +192,7 @@
 </tr>
 <tr>
 <td class="struct_member_name"><p><em class="structfield"><code><a name="GstAudioSrcClass.delay"></a>delay</code></em> ()</p></td>
-<td class="struct_member_description"><p>the number of samples queued in the device</p></td>
+<td class="struct_member_description"><p>the number of frames queued in the device</p></td>
 <td class="struct_member_annotations"> </td>
 </tr>
 <tr>
@@ -210,7 +211,6 @@
 </div>
 </div>
 <div class="footer">
-<hr>
-          Generated by GTK-Doc V1.21</div>
+<hr>Generated by GTK-Doc V1.24</div>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/libs/html/gst-plugins-base-libs-gstcolorbalance.html b/docs/libs/html/gst-plugins-base-libs-gstcolorbalance.html
index 6e7f2e4..6e553b7 100644
--- a/docs/libs/html/gst-plugins-base-libs-gstcolorbalance.html
+++ b/docs/libs/html/gst-plugins-base-libs-gstcolorbalance.html
@@ -2,13 +2,13 @@
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>GStreamer Base Plugins 1.0 Library Reference Manual: gstcolorbalance</title>
+<title>gstcolorbalance: GStreamer Base 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 Base Plugins 1.0 Library Reference Manual">
 <link rel="up" href="gstreamer-video.html" title="Video Library">
 <link rel="prev" href="gst-plugins-base-libs-gstvideosink.html" title="gstvideosink">
 <link rel="next" href="gst-plugins-base-libs-gstcolorbalancechannel.html" title="gstcolorbalancechannel">
-<meta name="generator" content="GTK-Doc V1.21 (XML mode)">
+<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">
@@ -94,7 +94,7 @@
 <tbody><tr>
 <td class="signal_type"><span class="returnvalue">void</span></td>
 <td class="signal_name"><a class="link" href="gst-plugins-base-libs-gstcolorbalance.html#GstColorBalance-value-changed" title="The “value-changed” signal">value-changed</a></td>
-<td class="signal_flags">Run Last</td>
+<td class="signal_flags"><a href="https://developer.gnome.org/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS">Run Last</a></td>
 </tr></tbody>
 </table></div>
 </div>
@@ -135,7 +135,7 @@
 <div class="refsect1">
 <a name="gst-plugins-base-libs-gstcolorbalance.description"></a><h2>Description</h2>
 <div class="refsect2">
-<a name="id-1.2.15.8.9.2"></a><p>
+<a name="id-1.2.15.12.9.2"></a><p>
 This interface is implemented by elements which can perform some color
 balance operation on video frames they process. For example, modifying
 the brightness, contrast, hue or saturation.
@@ -153,7 +153,7 @@
 gst_color_balance_list_channels (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstcolorbalance.html#GstColorBalance"><span class="type">GstColorBalance</span></a> *balance</code></em>);</pre>
 <p>Retrieve a list of the available channels.</p>
 <div class="refsect3">
-<a name="id-1.2.15.8.10.2.5"></a><h4>Parameters</h4>
+<a name="id-1.2.15.12.10.2.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -168,7 +168,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.15.8.10.2.6"></a><h4>Returns</h4>
+<a name="id-1.2.15.12.10.2.6"></a><h4>Returns</h4>
 <p> A
 GList containing pointers to <a class="link" href="gst-plugins-base-libs-gstcolorbalancechannel.html#GstColorBalanceChannel"><span class="type">GstColorBalanceChannel</span></a>
 objects. The list is owned by the <a class="link" href="gst-plugins-base-libs-gstcolorbalance.html#GstColorBalance"><span class="type">GstColorBalance</span></a>
@@ -188,7 +188,7 @@
         <span class="type">GstColorBalanceChannel.max_value</span> members of the
         <a class="link" href="gst-plugins-base-libs-gstcolorbalancechannel.html#GstColorBalanceChannel"><span class="type">GstColorBalanceChannel</span></a> object.</p>
 <div class="refsect3">
-<a name="id-1.2.15.8.10.3.6"></a><h4>Parameters</h4>
+<a name="id-1.2.15.12.10.3.6"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -210,9 +210,8 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.15.8.10.3.7"></a><h4>Returns</h4>
+<a name="id-1.2.15.12.10.3.7"></a><h4>Returns</h4>
 <p> The current value of the channel.</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -228,7 +227,7 @@
         <span class="type">GstColorBalanceChannel.max_value</span> members of the
         <a class="link" href="gst-plugins-base-libs-gstcolorbalancechannel.html#GstColorBalanceChannel"><span class="type">GstColorBalanceChannel</span></a> object.</p>
 <div class="refsect3">
-<a name="id-1.2.15.8.10.4.6"></a><h4>Parameters</h4>
+<a name="id-1.2.15.12.10.4.6"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -267,7 +266,7 @@
 instance, and the <a class="link" href="gst-plugins-base-libs-gstcolorbalancechannel.html#GstColorBalanceChannel-value-changed" title="The “value-changed” signal"><span class="type">“value-changed”</span></a> signal on the
 channel object.</p>
 <div class="refsect3">
-<a name="id-1.2.15.8.10.5.5"></a><h4>Parameters</h4>
+<a name="id-1.2.15.12.10.5.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -301,7 +300,7 @@
 gst_color_balance_get_balance_type (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstcolorbalance.html#GstColorBalance"><span class="type">GstColorBalance</span></a> *balance</code></em>);</pre>
 <p>Get the <a class="link" href="gst-plugins-base-libs-gstcolorbalance.html#GstColorBalanceType" title="enum GstColorBalanceType"><span class="type">GstColorBalanceType</span></a> of this implementation.</p>
 <div class="refsect3">
-<a name="id-1.2.15.8.10.6.5"></a><h4>Parameters</h4>
+<a name="id-1.2.15.12.10.6.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -316,9 +315,8 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.15.8.10.6.6"></a><h4>Returns</h4>
+<a name="id-1.2.15.12.10.6.6"></a><h4>Returns</h4>
 <p> A the <a class="link" href="gst-plugins-base-libs-gstcolorbalance.html#GstColorBalanceType" title="enum GstColorBalanceType"><span class="type">GstColorBalanceType</span></a>.</p>
-<p></p>
 </div>
 </div>
 </div>
@@ -352,7 +350,7 @@
 </pre>
 <p>Color-balance interface.</p>
 <div class="refsect3">
-<a name="id-1.2.15.8.11.3.5"></a><h4>Members</h4>
+<a name="id-1.2.15.12.11.3.5"></a><h4>Members</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="300px" class="struct_members_name">
@@ -382,8 +380,8 @@
 </tr>
 <tr>
 <td class="struct_member_name"><p><em class="structfield"><code><a name="GstColorBalanceInterface.get-balance-type"></a>get_balance_type</code></em> ()</p></td>
-<td> </td>
-<td> </td>
+<td class="struct_member_description"><p>implementation type</p></td>
+<td class="struct_member_annotations"> </td>
 </tr>
 <tr>
 <td class="struct_member_name"><p><em class="structfield"><code><a name="GstColorBalanceInterface.value-changed"></a>value_changed</code></em> ()</p></td>
@@ -402,7 +400,7 @@
 hardware implementations (such as those provided by xvimagesink) are
 preferred.</p>
 <div class="refsect3">
-<a name="id-1.2.15.8.11.4.4"></a><h4>Members</h4>
+<a name="id-1.2.15.12.11.4.4"></a><h4>Members</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="300px" class="enum_members_name">
@@ -442,7 +440,7 @@
                <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a>                user_data)</pre>
 <p>Fired when the value of the indicated channel has changed.</p>
 <div class="refsect3">
-<a name="id-1.2.15.8.12.2.5"></a><h4>Parameters</h4>
+<a name="id-1.2.15.12.12.2.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -473,12 +471,11 @@
 </tbody>
 </table></div>
 </div>
-<p>Flags: Run Last</p>
+<p>Flags: <a href="https://developer.gnome.org/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS">Run Last</a></p>
 </div>
 </div>
 </div>
 <div class="footer">
-<hr>
-          Generated by GTK-Doc V1.21</div>
+<hr>Generated by GTK-Doc V1.24</div>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/libs/html/gst-plugins-base-libs-gstcolorbalancechannel.html b/docs/libs/html/gst-plugins-base-libs-gstcolorbalancechannel.html
index 7cb1295..b1f7acb 100644
--- a/docs/libs/html/gst-plugins-base-libs-gstcolorbalancechannel.html
+++ b/docs/libs/html/gst-plugins-base-libs-gstcolorbalancechannel.html
@@ -2,13 +2,13 @@
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>GStreamer Base Plugins 1.0 Library Reference Manual: gstcolorbalancechannel</title>
+<title>gstcolorbalancechannel: GStreamer Base 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 Base Plugins 1.0 Library Reference Manual">
 <link rel="up" href="gstreamer-video.html" title="Video Library">
 <link rel="prev" href="gst-plugins-base-libs-gstcolorbalance.html" title="gstcolorbalance">
 <link rel="next" href="gst-plugins-base-libs-gstvideoorientation.html" title="gstvideoorientation">
-<meta name="generator" content="GTK-Doc V1.21 (XML mode)">
+<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">
@@ -45,7 +45,7 @@
 <tbody><tr>
 <td class="signal_type"><span class="returnvalue">void</span></td>
 <td class="signal_name"><a class="link" href="gst-plugins-base-libs-gstcolorbalancechannel.html#GstColorBalanceChannel-value-changed" title="The “value-changed” signal">value-changed</a></td>
-<td class="signal_flags">Run Last</td>
+<td class="signal_flags"><a href="https://developer.gnome.org/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS">Run Last</a></td>
 </tr></tbody>
 </table></div>
 </div>
@@ -82,7 +82,7 @@
 <div class="refsect1">
 <a name="gst-plugins-base-libs-gstcolorbalancechannel.description"></a><h2>Description</h2>
 <div class="refsect2">
-<a name="id-1.2.15.9.8.2"></a><p>The <a class="link" href="gst-plugins-base-libs-gstcolorbalancechannel.html#GstColorBalanceChannel"><span class="type">GstColorBalanceChannel</span></a> object represents a parameter
+<a name="id-1.2.15.13.8.2"></a><p>The <a class="link" href="gst-plugins-base-libs-gstcolorbalancechannel.html#GstColorBalanceChannel"><span class="type">GstColorBalanceChannel</span></a> object represents a parameter
 for modifying the color balance implemented by an element providing the
 <a class="link" href="gst-plugins-base-libs-gstcolorbalance.html#GstColorBalance"><span class="type">GstColorBalance</span></a> interface. For example, Hue or Saturation.
 </p>
@@ -90,6 +90,7 @@
 </div>
 <div class="refsect1">
 <a name="gst-plugins-base-libs-gstcolorbalancechannel.functions_details"></a><h2>Functions</h2>
+<p></p>
 </div>
 <div class="refsect1">
 <a name="gst-plugins-base-libs-gstcolorbalancechannel.other_details"></a><h2>Types and Values</h2>
@@ -102,7 +103,7 @@
 };
 </pre>
 <div class="refsect3">
-<a name="id-1.2.15.9.10.2.4"></a><h4>Members</h4>
+<a name="id-1.2.15.13.10.2.4"></a><h4>Members</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="300px" class="struct_members_name">
@@ -142,7 +143,7 @@
 </pre>
 <p>Color-balance channel class.</p>
 <div class="refsect3">
-<a name="id-1.2.15.9.10.3.5"></a><h4>Members</h4>
+<a name="id-1.2.15.13.10.3.5"></a><h4>Members</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="300px" class="struct_members_name">
@@ -175,7 +176,7 @@
                <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a>                user_data)</pre>
 <p>Fired when the value of the indicated channel has changed.</p>
 <div class="refsect3">
-<a name="id-1.2.15.9.11.2.5"></a><h4>Parameters</h4>
+<a name="id-1.2.15.13.11.2.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -201,12 +202,11 @@
 </tbody>
 </table></div>
 </div>
-<p>Flags: Run Last</p>
+<p>Flags: <a href="https://developer.gnome.org/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS">Run Last</a></p>
 </div>
 </div>
 </div>
 <div class="footer">
-<hr>
-          Generated by GTK-Doc V1.21</div>
+<hr>Generated by GTK-Doc V1.24</div>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/libs/html/gst-plugins-base-libs-gstdiscoverer.html b/docs/libs/html/gst-plugins-base-libs-gstdiscoverer.html
index 1d0d775..a3a3728 100644
--- a/docs/libs/html/gst-plugins-base-libs-gstdiscoverer.html
+++ b/docs/libs/html/gst-plugins-base-libs-gstdiscoverer.html
@@ -2,13 +2,13 @@
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>GStreamer Base Plugins 1.0 Library Reference Manual: gstdiscoverer</title>
+<title>gstdiscoverer: GStreamer Base 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 Base Plugins 1.0 Library Reference Manual">
 <link rel="up" href="gstreamer-base-utils.html" title="Base Utils Library">
 <link rel="prev" href="gst-plugins-base-libs-gstpbutilsinstallplugins.html" title="gstpbutilsinstallplugins">
 <link rel="next" href="gst-plugins-base-libs-encoding-profile.html" title="encoding-profile">
-<meta name="generator" content="GTK-Doc V1.21 (XML mode)">
+<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">
@@ -164,6 +164,22 @@
 </tr>
 <tr>
 <td class="function_type">
+<a href="https://developer.gnome.org/glib/unstable/glib-GVariant.html#GVariant"><span class="returnvalue">GVariant</span></a> *
+</td>
+<td class="function_name">
+<a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#gst-discoverer-info-to-variant" title="gst_discoverer_info_to_variant ()">gst_discoverer_info_to_variant</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscovererInfo"><span class="returnvalue">GstDiscovererInfo</span></a> *
+</td>
+<td class="function_name">
+<a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#gst-discoverer-info-from-variant" title="gst_discoverer_info_from_variant ()">gst_discoverer_info_from_variant</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">
@@ -468,22 +484,22 @@
 <tr>
 <td class="signal_type"><span class="returnvalue">void</span></td>
 <td class="signal_name"><a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscoverer-discovered" title="The “discovered” signal">discovered</a></td>
-<td class="signal_flags">Run Last</td>
+<td class="signal_flags"><a href="https://developer.gnome.org/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS">Run Last</a></td>
 </tr>
 <tr>
 <td class="signal_type"><span class="returnvalue">void</span></td>
 <td class="signal_name"><a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscoverer-finished" title="The “finished” signal">finished</a></td>
-<td class="signal_flags">Run Last</td>
+<td class="signal_flags"><a href="https://developer.gnome.org/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS">Run Last</a></td>
 </tr>
 <tr>
 <td class="signal_type"><span class="returnvalue">void</span></td>
 <td class="signal_name"><a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscoverer-source-setup" title="The “source-setup” signal">source-setup</a></td>
-<td class="signal_flags">Run Last</td>
+<td class="signal_flags"><a href="https://developer.gnome.org/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS">Run Last</a></td>
 </tr>
 <tr>
 <td class="signal_type"><span class="returnvalue">void</span></td>
 <td class="signal_name"><a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscoverer-starting" title="The “starting” signal">starting</a></td>
-<td class="signal_flags">Run Last</td>
+<td class="signal_flags"><a href="https://developer.gnome.org/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS">Run Last</a></td>
 </tr>
 </tbody>
 </table></div>
@@ -509,6 +525,10 @@
 <td class="function_name"><a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscovererResult" title="enum GstDiscovererResult">GstDiscovererResult</a></td>
 </tr>
 <tr>
+<td class="datatype_keyword">enum</td>
+<td class="function_name"><a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscovererSerializeFlags" title="enum GstDiscovererSerializeFlags">GstDiscovererSerializeFlags</a></td>
+</tr>
+<tr>
 <td class="datatype_keyword"> </td>
 <td class="function_name"><a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscovererStreamInfo" title="GstDiscovererStreamInfo">GstDiscovererStreamInfo</a></td>
 </tr>
@@ -734,7 +754,6 @@
 <p> <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the <em class="parameter"><code>uri</code></em>
 was successfully appended to the list of pending
 uris, else <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a></p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -760,7 +779,6 @@
 <div class="refsect3">
 <a name="id-1.2.14.9.12.7.5"></a><h4>Returns</h4>
 <p> the duration of the URI in <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstClock.html#GstClockTime"><span class="type">GstClockTime</span></a> (nanoseconds).</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -771,7 +789,7 @@
 <div class="warning">
 <p><code class="literal">gst_discoverer_info_get_misc</code> is deprecated and should not be used in newly-written code.</p>
 <p>This functions is deprecated since version 1.4, use
-gst_discoverer_info_get_missing_elements_installer_details</p>
+<a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#gst-discoverer-info-get-missing-elements-installer-details" title="gst_discoverer_info_get_missing_elements_installer_details ()"><span class="type">gst_discoverer_info_get_missing_elements_installer_details</span></a></p>
 </div>
 <div class="refsect3">
 <a name="id-1.2.14.9.12.8.5"></a><h4>Parameters</h4>
@@ -820,7 +838,6 @@
 <div class="refsect3">
 <a name="id-1.2.14.9.12.9.5"></a><h4>Returns</h4>
 <p> the result of the discovery as a <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscovererResult" title="enum GstDiscovererResult"><span class="type">GstDiscovererResult</span></a>.</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -987,7 +1004,6 @@
 <div class="refsect3">
 <a name="id-1.2.14.9.12.15.5"></a><h4>Returns</h4>
 <p> the whether the URI is seekable.</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -1015,7 +1031,6 @@
 <div class="refsect3">
 <a name="id-1.2.14.9.12.16.6"></a><h4>Returns</h4>
 <p> the same <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscovererInfo"><span class="type">GstDiscovererInfo</span></a> object</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -1043,41 +1058,53 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="gst-discoverer-stream-info-get-caps"></a><h3>gst_discoverer_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_discoverer_stream_info_get_caps (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscovererStreamInfo" title="GstDiscovererStreamInfo"><span class="type">GstDiscovererStreamInfo</span></a> *info</code></em>);</pre>
+<a name="gst-discoverer-info-to-variant"></a><h3>gst_discoverer_info_to_variant ()</h3>
+<pre class="programlisting"><a href="https://developer.gnome.org/glib/unstable/glib-GVariant.html#GVariant"><span class="returnvalue">GVariant</span></a> *
+gst_discoverer_info_to_variant (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscovererInfo"><span class="type">GstDiscovererInfo</span></a> *info</code></em>,
+                                <em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscovererSerializeFlags" title="enum GstDiscovererSerializeFlags"><span class="type">GstDiscovererSerializeFlags</span></a> flags</code></em>);</pre>
+<p>Serializes <em class="parameter"><code>info</code></em>
+ to a <a href="https://developer.gnome.org/glib/unstable/glib-GVariant.html#GVariant"><span class="type">GVariant</span></a> that can be parsed again
+through <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#gst-discoverer-info-from-variant" title="gst_discoverer_info_from_variant ()"><code class="function">gst_discoverer_info_from_variant()</code></a>.</p>
+<p>Note that any <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstToc.html"><span class="type">GstToc</span></a> (s) that might have been discovered will not be serialized
+for now.</p>
 <div class="refsect3">
-<a name="id-1.2.14.9.12.18.4"></a><h4>Parameters</h4>
+<a name="id-1.2.14.9.12.18.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>
+<tbody>
+<tr>
 <td class="parameter_name"><p>info</p></td>
-<td class="parameter_description"><p>a <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscovererStreamInfo" title="GstDiscovererStreamInfo"><span class="type">GstDiscovererStreamInfo</span></a></p></td>
+<td class="parameter_description"><p>A <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscovererInfo"><span class="type">GstDiscovererInfo</span></a></p></td>
 <td class="parameter_annotations"> </td>
-</tr></tbody>
+</tr>
+<tr>
+<td class="parameter_name"><p>flags</p></td>
+<td class="parameter_description"><p>A combination of <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscovererSerializeFlags" title="enum GstDiscovererSerializeFlags"><span class="type">GstDiscovererSerializeFlags</span></a> to specify
+what needs to be serialized.</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.14.9.12.18.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. Unref with
-<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstCaps.html#gst-caps-unref"><span class="type">gst_caps_unref</span></a> after usage. </p>
+<a name="id-1.2.14.9.12.18.7"></a><h4>Returns</h4>
+<p> A newly-allocated <a href="https://developer.gnome.org/glib/unstable/glib-GVariant.html#GVariant"><span class="type">GVariant</span></a> representing <em class="parameter"><code>info</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>
+<p class="since">Since: 1.6</p>
 </div>
 <hr>
 <div class="refsect2">
-<a name="gst-discoverer-stream-info-get-misc"></a><h3>gst_discoverer_stream_info_get_misc ()</h3>
-<pre class="programlisting">const <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstStructure.html"><span class="returnvalue">GstStructure</span></a> *
-gst_discoverer_stream_info_get_misc (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscovererStreamInfo" title="GstDiscovererStreamInfo"><span class="type">GstDiscovererStreamInfo</span></a> *info</code></em>);</pre>
-<div class="warning">
-<p><code class="literal">gst_discoverer_stream_info_get_misc</code> is deprecated and should not be used in newly-written code.</p>
-<p>This functions is deprecated since version 1.4, use
-gst_discoverer_stream_get_missing_elements_installer_details</p>
-</div>
+<a name="gst-discoverer-info-from-variant"></a><h3>gst_discoverer_info_from_variant ()</h3>
+<pre class="programlisting"><a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscovererInfo"><span class="returnvalue">GstDiscovererInfo</span></a> *
+gst_discoverer_info_from_variant (<em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-GVariant.html#GVariant"><span class="type">GVariant</span></a> *variant</code></em>);</pre>
+<p>Parses a <a href="https://developer.gnome.org/glib/unstable/glib-GVariant.html#GVariant"><span class="type">GVariant</span></a> as produced by <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#gst-discoverer-info-to-variant" title="gst_discoverer_info_to_variant ()"><code class="function">gst_discoverer_info_to_variant()</code></a>
+back to a <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscovererInfo"><span class="type">GstDiscovererInfo</span></a>.</p>
 <div class="refsect3">
 <a name="id-1.2.14.9.12.19.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
@@ -1087,26 +1114,24 @@
 <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-base-libs-gstdiscoverer.html#GstDiscovererStreamInfo" title="GstDiscovererStreamInfo"><span class="type">GstDiscovererStreamInfo</span></a></p></td>
+<td class="parameter_name"><p>variant</p></td>
+<td class="parameter_description"><p>A <a href="https://developer.gnome.org/glib/unstable/glib-GVariant.html#GVariant"><span class="type">GVariant</span></a> to deserialize into a <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscovererInfo"><span class="type">GstDiscovererInfo</span></a>.</p></td>
 <td class="parameter_annotations"> </td>
 </tr></tbody>
 </table></div>
 </div>
 <div class="refsect3">
 <a name="id-1.2.14.9.12.19.6"></a><h4>Returns</h4>
-<p> additional information regarding the stream (for
-example codec version, profile, etc..). If you wish to use the <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstStructure.html"><span class="type">GstStructure</span></a>
-after the life-time of <em class="parameter"><code>info</code></em>
-you will need to copy it. </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>
+<p> A newly-allocated <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscovererInfo"><span class="type">GstDiscovererInfo</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>
+<p class="since">Since: 1.6</p>
 </div>
 <hr>
 <div class="refsect2">
-<a name="gst-discoverer-stream-info-get-next"></a><h3>gst_discoverer_stream_info_get_next ()</h3>
-<pre class="programlisting"><a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscovererStreamInfo" title="GstDiscovererStreamInfo"><span class="returnvalue">GstDiscovererStreamInfo</span></a> *
-gst_discoverer_stream_info_get_next (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscovererStreamInfo" title="GstDiscovererStreamInfo"><span class="type">GstDiscovererStreamInfo</span></a> *info</code></em>);</pre>
+<a name="gst-discoverer-stream-info-get-caps"></a><h3>gst_discoverer_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_discoverer_stream_info_get_caps (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscovererStreamInfo" title="GstDiscovererStreamInfo"><span class="type">GstDiscovererStreamInfo</span></a> *info</code></em>);</pre>
 <div class="refsect3">
 <a name="id-1.2.14.9.12.20.4"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
@@ -1124,20 +1149,23 @@
 </div>
 <div class="refsect3">
 <a name="id-1.2.14.9.12.20.5"></a><h4>Returns</h4>
-<p> the next <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscovererStreamInfo" title="GstDiscovererStreamInfo"><span class="type">GstDiscovererStreamInfo</span></a> in a chain. <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>
-for final streams.
-Unref with <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#gst-discoverer-stream-info-unref" title="gst_discoverer_stream_info_unref()"><span class="type">gst_discoverer_stream_info_unref</span></a> after usage. </p>
+<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. Unref with
+<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstCaps.html#gst-caps-unref"><span class="type">gst_caps_unref</span></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-discoverer-stream-info-get-previous"></a><h3>gst_discoverer_stream_info_get_previous ()</h3>
-<pre class="programlisting"><a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscovererStreamInfo" title="GstDiscovererStreamInfo"><span class="returnvalue">GstDiscovererStreamInfo</span></a> *
-gst_discoverer_stream_info_get_previous
-                               (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscovererStreamInfo" title="GstDiscovererStreamInfo"><span class="type">GstDiscovererStreamInfo</span></a> *info</code></em>);</pre>
+<a name="gst-discoverer-stream-info-get-misc"></a><h3>gst_discoverer_stream_info_get_misc ()</h3>
+<pre class="programlisting">const <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstStructure.html"><span class="returnvalue">GstStructure</span></a> *
+gst_discoverer_stream_info_get_misc (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscovererStreamInfo" title="GstDiscovererStreamInfo"><span class="type">GstDiscovererStreamInfo</span></a> *info</code></em>);</pre>
+<div class="warning">
+<p><code class="literal">gst_discoverer_stream_info_get_misc</code> is deprecated and should not be used in newly-written code.</p>
+<p>This functions is deprecated since version 1.4, use
+<a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#gst-discoverer-info-get-missing-elements-installer-details" title="gst_discoverer_info_get_missing_elements_installer_details ()"><span class="type">gst_discoverer_info_get_missing_elements_installer_details</span></a></p>
+</div>
 <div class="refsect3">
-<a name="id-1.2.14.9.12.21.4"></a><h4>Parameters</h4>
+<a name="id-1.2.14.9.12.21.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1152,18 +1180,19 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.14.9.12.21.5"></a><h4>Returns</h4>
-<p> the previous <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscovererStreamInfo" title="GstDiscovererStreamInfo"><span class="type">GstDiscovererStreamInfo</span></a> in a chain.
-<a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> for starting points. Unref with <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#gst-discoverer-stream-info-unref" title="gst_discoverer_stream_info_unref()"><span class="type">gst_discoverer_stream_info_unref</span></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>
+<a name="id-1.2.14.9.12.21.6"></a><h4>Returns</h4>
+<p> additional information regarding the stream (for
+example codec version, profile, etc..). If you wish to use the <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstStructure.html"><span class="type">GstStructure</span></a>
+after the life-time of <em class="parameter"><code>info</code></em>
+you will need to copy it. </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-discoverer-stream-info-get-tags"></a><h3>gst_discoverer_stream_info_get_tags ()</h3>
-<pre class="programlisting">const <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstTagList.html"><span class="returnvalue">GstTagList</span></a> *
-gst_discoverer_stream_info_get_tags (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscovererStreamInfo" title="GstDiscovererStreamInfo"><span class="type">GstDiscovererStreamInfo</span></a> *info</code></em>);</pre>
+<a name="gst-discoverer-stream-info-get-next"></a><h3>gst_discoverer_stream_info_get_next ()</h3>
+<pre class="programlisting"><a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscovererStreamInfo" title="GstDiscovererStreamInfo"><span class="returnvalue">GstDiscovererStreamInfo</span></a> *
+gst_discoverer_stream_info_get_next (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscovererStreamInfo" title="GstDiscovererStreamInfo"><span class="type">GstDiscovererStreamInfo</span></a> *info</code></em>);</pre>
 <div class="refsect3">
 <a name="id-1.2.14.9.12.22.4"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
@@ -1181,17 +1210,18 @@
 </div>
 <div class="refsect3">
 <a name="id-1.2.14.9.12.22.5"></a><h4>Returns</h4>
-<p> the tags contained in this stream. If you wish to
-use the tags after the life-time of <em class="parameter"><code>info</code></em>
-you will need to copy them. </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>
+<p> the next <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscovererStreamInfo" title="GstDiscovererStreamInfo"><span class="type">GstDiscovererStreamInfo</span></a> in a chain. <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>
+for final streams.
+Unref with <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#gst-discoverer-stream-info-unref" title="gst_discoverer_stream_info_unref()"><span class="type">gst_discoverer_stream_info_unref</span></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-discoverer-stream-info-get-toc"></a><h3>gst_discoverer_stream_info_get_toc ()</h3>
-<pre class="programlisting">const <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstToc.html"><span class="returnvalue">GstToc</span></a> *
-gst_discoverer_stream_info_get_toc (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscovererStreamInfo" title="GstDiscovererStreamInfo"><span class="type">GstDiscovererStreamInfo</span></a> *info</code></em>);</pre>
+<a name="gst-discoverer-stream-info-get-previous"></a><h3>gst_discoverer_stream_info_get_previous ()</h3>
+<pre class="programlisting"><a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscovererStreamInfo" title="GstDiscovererStreamInfo"><span class="returnvalue">GstDiscovererStreamInfo</span></a> *
+gst_discoverer_stream_info_get_previous
+                               (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscovererStreamInfo" title="GstDiscovererStreamInfo"><span class="type">GstDiscovererStreamInfo</span></a> *info</code></em>);</pre>
 <div class="refsect3">
 <a name="id-1.2.14.9.12.23.4"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
@@ -1209,18 +1239,17 @@
 </div>
 <div class="refsect3">
 <a name="id-1.2.14.9.12.23.5"></a><h4>Returns</h4>
-<p> the TOC contained in this stream. If you wish to
-use the TOC after the life-time of <em class="parameter"><code>info</code></em>
-you will need to copy it. </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>
+<p> the previous <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscovererStreamInfo" title="GstDiscovererStreamInfo"><span class="type">GstDiscovererStreamInfo</span></a> in a chain.
+<a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> for starting points. Unref with <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#gst-discoverer-stream-info-unref" title="gst_discoverer_stream_info_unref()"><span class="type">gst_discoverer_stream_info_unref</span></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-discoverer-stream-info-get-stream-id"></a><h3>gst_discoverer_stream_info_get_stream_id ()</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_discoverer_stream_info_get_stream_id
-                               (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscovererStreamInfo" title="GstDiscovererStreamInfo"><span class="type">GstDiscovererStreamInfo</span></a> *info</code></em>);</pre>
+<a name="gst-discoverer-stream-info-get-tags"></a><h3>gst_discoverer_stream_info_get_tags ()</h3>
+<pre class="programlisting">const <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstTagList.html"><span class="returnvalue">GstTagList</span></a> *
+gst_discoverer_stream_info_get_tags (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscovererStreamInfo" title="GstDiscovererStreamInfo"><span class="type">GstDiscovererStreamInfo</span></a> *info</code></em>);</pre>
 <div class="refsect3">
 <a name="id-1.2.14.9.12.24.4"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
@@ -1238,21 +1267,19 @@
 </div>
 <div class="refsect3">
 <a name="id-1.2.14.9.12.24.5"></a><h4>Returns</h4>
-<p> the stream ID of this stream. If you wish to
-use the stream ID after the life-time of <em class="parameter"><code>info</code></em>
-you will need to copy it. </p>
+<p> the tags contained in this stream. If you wish to
+use the tags after the life-time of <em class="parameter"><code>info</code></em>
+you will need to copy them. </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-discoverer-stream-info-ref"></a><h3>gst_discoverer_stream_info_ref()</h3>
-<pre class="programlisting">#define gst_discoverer_stream_info_ref(info) ((GstDiscovererStreamInfo*) g_object_ref((GObject*) info))
-</pre>
-<p>Increments the reference count of <em class="parameter"><code>info</code></em>
-.</p>
+<a name="gst-discoverer-stream-info-get-toc"></a><h3>gst_discoverer_stream_info_get_toc ()</h3>
+<pre class="programlisting">const <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstToc.html"><span class="returnvalue">GstToc</span></a> *
+gst_discoverer_stream_info_get_toc (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscovererStreamInfo" title="GstDiscovererStreamInfo"><span class="type">GstDiscovererStreamInfo</span></a> *info</code></em>);</pre>
 <div class="refsect3">
-<a name="id-1.2.14.9.12.25.5"></a><h4>Parameters</h4>
+<a name="id-1.2.14.9.12.25.4"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1267,9 +1294,67 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.14.9.12.25.6"></a><h4>Returns</h4>
+<a name="id-1.2.14.9.12.25.5"></a><h4>Returns</h4>
+<p> the TOC contained in this stream. If you wish to
+use the TOC after the life-time of <em class="parameter"><code>info</code></em>
+you will need to copy it. </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-discoverer-stream-info-get-stream-id"></a><h3>gst_discoverer_stream_info_get_stream_id ()</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_discoverer_stream_info_get_stream_id
+                               (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscovererStreamInfo" title="GstDiscovererStreamInfo"><span class="type">GstDiscovererStreamInfo</span></a> *info</code></em>);</pre>
+<div class="refsect3">
+<a name="id-1.2.14.9.12.26.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>info</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscovererStreamInfo" title="GstDiscovererStreamInfo"><span class="type">GstDiscovererStreamInfo</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="id-1.2.14.9.12.26.5"></a><h4>Returns</h4>
+<p> the stream ID of this stream. If you wish to
+use the stream ID after the life-time of <em class="parameter"><code>info</code></em>
+you will need to copy it. </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-discoverer-stream-info-ref"></a><h3>gst_discoverer_stream_info_ref()</h3>
+<pre class="programlisting">#define gst_discoverer_stream_info_ref(info) ((GstDiscovererStreamInfo*) g_object_ref((GObject*) info))
+</pre>
+<p>Increments the reference count of <em class="parameter"><code>info</code></em>
+.</p>
+<div class="refsect3">
+<a name="id-1.2.14.9.12.27.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>info</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscovererStreamInfo" title="GstDiscovererStreamInfo"><span class="type">GstDiscovererStreamInfo</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="id-1.2.14.9.12.27.6"></a><h4>Returns</h4>
 <p> the same <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscovererStreamInfo" title="GstDiscovererStreamInfo"><span class="type">GstDiscovererStreamInfo</span></a> object</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -1280,7 +1365,7 @@
 <p>Decrements the reference count of <em class="parameter"><code>info</code></em>
 .</p>
 <div class="refsect3">
-<a name="id-1.2.14.9.12.26.5"></a><h4>Parameters</h4>
+<a name="id-1.2.14.9.12.28.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1303,7 +1388,7 @@
 <p>Decrements the reference count of all contained <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscovererStreamInfo" title="GstDiscovererStreamInfo"><span class="type">GstDiscovererStreamInfo</span></a>
 and fress the <a href="https://developer.gnome.org/glib/unstable/glib-Doubly-Linked-Lists.html#GList"><span class="type">GList</span></a>.</p>
 <div class="refsect3">
-<a name="id-1.2.14.9.12.27.5"></a><h4>Parameters</h4>
+<a name="id-1.2.14.9.12.29.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1325,7 +1410,7 @@
 gst_discoverer_stream_info_get_stream_type_nick
                                (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscovererStreamInfo" title="GstDiscovererStreamInfo"><span class="type">GstDiscovererStreamInfo</span></a> *info</code></em>);</pre>
 <div class="refsect3">
-<a name="id-1.2.14.9.12.28.4"></a><h4>Parameters</h4>
+<a name="id-1.2.14.9.12.30.4"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1340,11 +1425,10 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.14.9.12.28.5"></a><h4>Returns</h4>
+<a name="id-1.2.14.9.12.30.5"></a><h4>Returns</h4>
 <p> a human readable name for the stream type of the given <em class="parameter"><code>info</code></em>
 (ex : "audio",
 "container",...).</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -1355,7 +1439,7 @@
                                (<em class="parameter"><code>const <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscovererInfo"><span class="type">GstDiscovererInfo</span></a> *info</code></em>);</pre>
 <p>Get the installer details for missing elements</p>
 <div class="refsect3">
-<a name="id-1.2.14.9.12.29.5"></a><h4>Parameters</h4>
+<a name="id-1.2.14.9.12.31.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1371,14 +1455,16 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.14.9.12.29.6"></a><h4>Returns</h4>
+<a name="id-1.2.14.9.12.31.6"></a><h4>Returns</h4>
 <p> An array of strings
 containing informations about how to install the various missing elements
 for <em class="parameter"><code>info</code></em>
-to be usable. Free with <a href="https://developer.gnome.org/glib/unstable/glib-String-Utility-Functions.html#g-strfreev"><code class="function">g_strfreev()</code></a>. </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]</span></p>
+to be usable. If you wish to use the strings after the life-time
+of <em class="parameter"><code>info</code></em>
+, you will need to copy them. </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="Parameter points to an array of items."><span class="acronym">array</span></acronym> zero-terminated=1]</span></p>
 </div>
-<p class="since">Since 1.4</p>
+<p class="since">Since: 1.4</p>
 </div>
 <hr>
 <div class="refsect2">
@@ -1388,7 +1474,7 @@
 <p>Finds all the <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscovererAudioInfo" title="GstDiscovererAudioInfo"><span class="type">GstDiscovererAudioInfo</span></a> contained in <em class="parameter"><code>info</code></em>
 </p>
 <div class="refsect3">
-<a name="id-1.2.14.9.12.30.5"></a><h4>Parameters</h4>
+<a name="id-1.2.14.9.12.32.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1403,7 +1489,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.14.9.12.30.6"></a><h4>Returns</h4>
+<a name="id-1.2.14.9.12.32.6"></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-base-libs-gstdiscoverer.html#GstDiscovererStreamInfo" title="GstDiscovererStreamInfo"><span class="type">GstDiscovererStreamInfo</span></a>. The caller should free it with
 <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#gst-discoverer-stream-info-list-free" title="gst_discoverer_stream_info_list_free ()"><code class="function">gst_discoverer_stream_info_list_free()</code></a>. </p>
@@ -1419,77 +1505,6 @@
 <p>Finds all the <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscovererContainerInfo" title="GstDiscovererContainerInfo"><span class="type">GstDiscovererContainerInfo</span></a> contained in <em class="parameter"><code>info</code></em>
 </p>
 <div class="refsect3">
-<a name="id-1.2.14.9.12.31.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>info</p></td>
-<td class="parameter_description"><p>a <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscovererInfo"><span class="type">GstDiscovererInfo</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
-</table></div>
-</div>
-<div class="refsect3">
-<a name="id-1.2.14.9.12.31.6"></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-base-libs-gstdiscoverer.html#GstDiscovererStreamInfo" title="GstDiscovererStreamInfo"><span class="type">GstDiscovererStreamInfo</span></a>. The caller should free it with
-<a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#gst-discoverer-stream-info-list-free" title="gst_discoverer_stream_info_list_free ()"><code class="function">gst_discoverer_stream_info_list_free()</code></a>. </p>
-<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>][<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> GstPbutils.DiscovererStreamInfo]</span></p>
-</div>
-</div>
-<hr>
-<div class="refsect2">
-<a name="gst-discoverer-info-get-streams"></a><h3>gst_discoverer_info_get_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_discoverer_info_get_streams (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscovererInfo"><span class="type">GstDiscovererInfo</span></a> *info</code></em>,
-                                 <em class="parameter"><code><a href="https://developer.gnome.org/gobject/unstable/gobject-Type-Information.html#GType"><span class="type">GType</span></a> streamtype</code></em>);</pre>
-<p>Finds the <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscovererStreamInfo" title="GstDiscovererStreamInfo"><span class="type">GstDiscovererStreamInfo</span></a> contained in <em class="parameter"><code>info</code></em>
- that match the
-given <em class="parameter"><code>streamtype</code></em>
-.</p>
-<div class="refsect3">
-<a name="id-1.2.14.9.12.32.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>info</p></td>
-<td class="parameter_description"><p>a <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscovererInfo"><span class="type">GstDiscovererInfo</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr>
-<tr>
-<td class="parameter_name"><p>streamtype</p></td>
-<td class="parameter_description"><p>a <a href="https://developer.gnome.org/gobject/unstable/gobject-Type-Information.html#GType"><span class="type">GType</span></a> derived from <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscovererStreamInfo" title="GstDiscovererStreamInfo"><span class="type">GstDiscovererStreamInfo</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr>
-</tbody>
-</table></div>
-</div>
-<div class="refsect3">
-<a name="id-1.2.14.9.12.32.6"></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-base-libs-gstdiscoverer.html#GstDiscovererStreamInfo" title="GstDiscovererStreamInfo"><span class="type">GstDiscovererStreamInfo</span></a>. The caller should free it with
-<a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#gst-discoverer-stream-info-list-free" title="gst_discoverer_stream_info_list_free ()"><code class="function">gst_discoverer_stream_info_list_free()</code></a>. </p>
-<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>][<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> GstPbutils.DiscovererStreamInfo]</span></p>
-</div>
-</div>
-<hr>
-<div class="refsect2">
-<a name="gst-discoverer-info-get-subtitle-streams"></a><h3>gst_discoverer_info_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_discoverer_info_get_subtitle_streams
-                               (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscovererInfo"><span class="type">GstDiscovererInfo</span></a> *info</code></em>);</pre>
-<p>Finds all the <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscovererSubtitleInfo" title="GstDiscovererSubtitleInfo"><span class="type">GstDiscovererSubtitleInfo</span></a> contained in <em class="parameter"><code>info</code></em>
-</p>
-<div class="refsect3">
 <a name="id-1.2.14.9.12.33.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
@@ -1514,11 +1529,14 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="gst-discoverer-info-get-video-streams"></a><h3>gst_discoverer_info_get_video_streams ()</h3>
+<a name="gst-discoverer-info-get-streams"></a><h3>gst_discoverer_info_get_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_discoverer_info_get_video_streams (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscovererInfo"><span class="type">GstDiscovererInfo</span></a> *info</code></em>);</pre>
-<p>Finds all the <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscovererVideoInfo" title="GstDiscovererVideoInfo"><span class="type">GstDiscovererVideoInfo</span></a> contained in <em class="parameter"><code>info</code></em>
-</p>
+gst_discoverer_info_get_streams (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscovererInfo"><span class="type">GstDiscovererInfo</span></a> *info</code></em>,
+                                 <em class="parameter"><code><a href="https://developer.gnome.org/gobject/unstable/gobject-Type-Information.html#GType"><span class="type">GType</span></a> streamtype</code></em>);</pre>
+<p>Finds the <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscovererStreamInfo" title="GstDiscovererStreamInfo"><span class="type">GstDiscovererStreamInfo</span></a> contained in <em class="parameter"><code>info</code></em>
+ that match the
+given <em class="parameter"><code>streamtype</code></em>
+.</p>
 <div class="refsect3">
 <a name="id-1.2.14.9.12.34.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
@@ -1527,6 +1545,44 @@
 <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-base-libs-gstdiscoverer.html#GstDiscovererInfo"><span class="type">GstDiscovererInfo</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>streamtype</p></td>
+<td class="parameter_description"><p>a <a href="https://developer.gnome.org/gobject/unstable/gobject-Type-Information.html#GType"><span class="type">GType</span></a> derived from <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscovererStreamInfo" title="GstDiscovererStreamInfo"><span class="type">GstDiscovererStreamInfo</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="id-1.2.14.9.12.34.6"></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-base-libs-gstdiscoverer.html#GstDiscovererStreamInfo" title="GstDiscovererStreamInfo"><span class="type">GstDiscovererStreamInfo</span></a>. The caller should free it with
+<a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#gst-discoverer-stream-info-list-free" title="gst_discoverer_stream_info_list_free ()"><code class="function">gst_discoverer_stream_info_list_free()</code></a>. </p>
+<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>][<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> GstPbutils.DiscovererStreamInfo]</span></p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-discoverer-info-get-subtitle-streams"></a><h3>gst_discoverer_info_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_discoverer_info_get_subtitle_streams
+                               (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscovererInfo"><span class="type">GstDiscovererInfo</span></a> *info</code></em>);</pre>
+<p>Finds all the <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscovererSubtitleInfo" title="GstDiscovererSubtitleInfo"><span class="type">GstDiscovererSubtitleInfo</span></a> contained in <em class="parameter"><code>info</code></em>
+</p>
+<div class="refsect3">
+<a name="id-1.2.14.9.12.35.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>info</p></td>
 <td class="parameter_description"><p>a <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscovererInfo"><span class="type">GstDiscovererInfo</span></a></p></td>
@@ -1535,7 +1591,37 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.14.9.12.34.6"></a><h4>Returns</h4>
+<a name="id-1.2.14.9.12.35.6"></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-base-libs-gstdiscoverer.html#GstDiscovererStreamInfo" title="GstDiscovererStreamInfo"><span class="type">GstDiscovererStreamInfo</span></a>. The caller should free it with
+<a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#gst-discoverer-stream-info-list-free" title="gst_discoverer_stream_info_list_free ()"><code class="function">gst_discoverer_stream_info_list_free()</code></a>. </p>
+<p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>][<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> GstPbutils.DiscovererStreamInfo]</span></p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-discoverer-info-get-video-streams"></a><h3>gst_discoverer_info_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_discoverer_info_get_video_streams (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscovererInfo"><span class="type">GstDiscovererInfo</span></a> *info</code></em>);</pre>
+<p>Finds all the <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscovererVideoInfo" title="GstDiscovererVideoInfo"><span class="type">GstDiscovererVideoInfo</span></a> contained in <em class="parameter"><code>info</code></em>
+</p>
+<div class="refsect3">
+<a name="id-1.2.14.9.12.36.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>info</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscovererInfo"><span class="type">GstDiscovererInfo</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="id-1.2.14.9.12.36.6"></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-base-libs-gstdiscoverer.html#GstDiscovererStreamInfo" title="GstDiscovererStreamInfo"><span class="type">GstDiscovererStreamInfo</span></a>. The caller should free it with
 <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#gst-discoverer-stream-info-list-free" title="gst_discoverer_stream_info_list_free ()"><code class="function">gst_discoverer_stream_info_list_free()</code></a>. </p>
@@ -1548,59 +1634,6 @@
 <pre class="programlisting"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#guint"><span class="returnvalue">guint</span></a>
 gst_discoverer_audio_info_get_bitrate (<em class="parameter"><code>const <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscovererAudioInfo" title="GstDiscovererAudioInfo"><span class="type">GstDiscovererAudioInfo</span></a> *info</code></em>);</pre>
 <div class="refsect3">
-<a name="id-1.2.14.9.12.35.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>info</p></td>
-<td class="parameter_description"><p>a <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscovererAudioInfo" title="GstDiscovererAudioInfo"><span class="type">GstDiscovererAudioInfo</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
-</table></div>
-</div>
-<div class="refsect3">
-<a name="id-1.2.14.9.12.35.5"></a><h4>Returns</h4>
-<p> the average or nominal bitrate of the stream in bits/second.</p>
-<p></p>
-</div>
-</div>
-<hr>
-<div class="refsect2">
-<a name="gst-discoverer-audio-info-get-channels"></a><h3>gst_discoverer_audio_info_get_channels ()</h3>
-<pre class="programlisting"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#guint"><span class="returnvalue">guint</span></a>
-gst_discoverer_audio_info_get_channels
-                               (<em class="parameter"><code>const <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscovererAudioInfo" title="GstDiscovererAudioInfo"><span class="type">GstDiscovererAudioInfo</span></a> *info</code></em>);</pre>
-<div class="refsect3">
-<a name="id-1.2.14.9.12.36.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>info</p></td>
-<td class="parameter_description"><p>a <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscovererAudioInfo" title="GstDiscovererAudioInfo"><span class="type">GstDiscovererAudioInfo</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
-</table></div>
-</div>
-<div class="refsect3">
-<a name="id-1.2.14.9.12.36.5"></a><h4>Returns</h4>
-<p> the number of channels in the stream.</p>
-<p></p>
-</div>
-</div>
-<hr>
-<div class="refsect2">
-<a name="gst-discoverer-audio-info-get-depth"></a><h3>gst_discoverer_audio_info_get_depth ()</h3>
-<pre class="programlisting"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#guint"><span class="returnvalue">guint</span></a>
-gst_discoverer_audio_info_get_depth (<em class="parameter"><code>const <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscovererAudioInfo" title="GstDiscovererAudioInfo"><span class="type">GstDiscovererAudioInfo</span></a> *info</code></em>);</pre>
-<div class="refsect3">
 <a name="id-1.2.14.9.12.37.4"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
@@ -1617,15 +1650,14 @@
 </div>
 <div class="refsect3">
 <a name="id-1.2.14.9.12.37.5"></a><h4>Returns</h4>
-<p> the number of bits used per sample in each channel.</p>
-<p></p>
+<p> the average or nominal bitrate of the stream in bits/second.</p>
 </div>
 </div>
 <hr>
 <div class="refsect2">
-<a name="gst-discoverer-audio-info-get-language"></a><h3>gst_discoverer_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_discoverer_audio_info_get_language
+<a name="gst-discoverer-audio-info-get-channels"></a><h3>gst_discoverer_audio_info_get_channels ()</h3>
+<pre class="programlisting"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#guint"><span class="returnvalue">guint</span></a>
+gst_discoverer_audio_info_get_channels
                                (<em class="parameter"><code>const <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscovererAudioInfo" title="GstDiscovererAudioInfo"><span class="type">GstDiscovererAudioInfo</span></a> *info</code></em>);</pre>
 <div class="refsect3">
 <a name="id-1.2.14.9.12.38.4"></a><h4>Parameters</h4>
@@ -1644,16 +1676,14 @@
 </div>
 <div class="refsect3">
 <a name="id-1.2.14.9.12.38.5"></a><h4>Returns</h4>
-<p> the language of the stream, or NULL if unknown.</p>
-<p></p>
+<p> the number of channels in the stream.</p>
 </div>
 </div>
 <hr>
 <div class="refsect2">
-<a name="gst-discoverer-audio-info-get-max-bitrate"></a><h3>gst_discoverer_audio_info_get_max_bitrate ()</h3>
+<a name="gst-discoverer-audio-info-get-depth"></a><h3>gst_discoverer_audio_info_get_depth ()</h3>
 <pre class="programlisting"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#guint"><span class="returnvalue">guint</span></a>
-gst_discoverer_audio_info_get_max_bitrate
-                               (<em class="parameter"><code>const <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscovererAudioInfo" title="GstDiscovererAudioInfo"><span class="type">GstDiscovererAudioInfo</span></a> *info</code></em>);</pre>
+gst_discoverer_audio_info_get_depth (<em class="parameter"><code>const <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscovererAudioInfo" title="GstDiscovererAudioInfo"><span class="type">GstDiscovererAudioInfo</span></a> *info</code></em>);</pre>
 <div class="refsect3">
 <a name="id-1.2.14.9.12.39.4"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
@@ -1671,15 +1701,14 @@
 </div>
 <div class="refsect3">
 <a name="id-1.2.14.9.12.39.5"></a><h4>Returns</h4>
-<p> the maximum bitrate of the stream in bits/second.</p>
-<p></p>
+<p> the number of bits used per sample in each channel.</p>
 </div>
 </div>
 <hr>
 <div class="refsect2">
-<a name="gst-discoverer-audio-info-get-sample-rate"></a><h3>gst_discoverer_audio_info_get_sample_rate ()</h3>
-<pre class="programlisting"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#guint"><span class="returnvalue">guint</span></a>
-gst_discoverer_audio_info_get_sample_rate
+<a name="gst-discoverer-audio-info-get-language"></a><h3>gst_discoverer_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_discoverer_audio_info_get_language
                                (<em class="parameter"><code>const <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscovererAudioInfo" title="GstDiscovererAudioInfo"><span class="type">GstDiscovererAudioInfo</span></a> *info</code></em>);</pre>
 <div class="refsect3">
 <a name="id-1.2.14.9.12.40.4"></a><h4>Parameters</h4>
@@ -1698,8 +1727,59 @@
 </div>
 <div class="refsect3">
 <a name="id-1.2.14.9.12.40.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-discoverer-audio-info-get-max-bitrate"></a><h3>gst_discoverer_audio_info_get_max_bitrate ()</h3>
+<pre class="programlisting"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#guint"><span class="returnvalue">guint</span></a>
+gst_discoverer_audio_info_get_max_bitrate
+                               (<em class="parameter"><code>const <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscovererAudioInfo" title="GstDiscovererAudioInfo"><span class="type">GstDiscovererAudioInfo</span></a> *info</code></em>);</pre>
+<div class="refsect3">
+<a name="id-1.2.14.9.12.41.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>info</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscovererAudioInfo" title="GstDiscovererAudioInfo"><span class="type">GstDiscovererAudioInfo</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="id-1.2.14.9.12.41.5"></a><h4>Returns</h4>
+<p> the maximum bitrate of the stream in bits/second.</p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-discoverer-audio-info-get-sample-rate"></a><h3>gst_discoverer_audio_info_get_sample_rate ()</h3>
+<pre class="programlisting"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#guint"><span class="returnvalue">guint</span></a>
+gst_discoverer_audio_info_get_sample_rate
+                               (<em class="parameter"><code>const <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscovererAudioInfo" title="GstDiscovererAudioInfo"><span class="type">GstDiscovererAudioInfo</span></a> *info</code></em>);</pre>
+<div class="refsect3">
+<a name="id-1.2.14.9.12.42.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>info</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscovererAudioInfo" title="GstDiscovererAudioInfo"><span class="type">GstDiscovererAudioInfo</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="id-1.2.14.9.12.42.5"></a><h4>Returns</h4>
 <p> the sample rate of the stream in Hertz.</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -1709,7 +1789,7 @@
 gst_discoverer_container_info_get_streams
                                (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscovererContainerInfo" title="GstDiscovererContainerInfo"><span class="type">GstDiscovererContainerInfo</span></a> *info</code></em>);</pre>
 <div class="refsect3">
-<a name="id-1.2.14.9.12.41.4"></a><h4>Parameters</h4>
+<a name="id-1.2.14.9.12.43.4"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1724,7 +1804,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.14.9.12.41.5"></a><h4>Returns</h4>
+<a name="id-1.2.14.9.12.43.5"></a><h4>Returns</h4>
 <p> the list of
 <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscovererStreamInfo" title="GstDiscovererStreamInfo"><span class="type">GstDiscovererStreamInfo</span></a> this container stream offers.
 Free with <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#gst-discoverer-stream-info-list-free" title="gst_discoverer_stream_info_list_free ()"><code class="function">gst_discoverer_stream_info_list_free()</code></a> after usage. </p>
@@ -1738,7 +1818,7 @@
 gst_discoverer_subtitle_info_get_language
                                (<em class="parameter"><code>const <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscovererSubtitleInfo" title="GstDiscovererSubtitleInfo"><span class="type">GstDiscovererSubtitleInfo</span></a> *info</code></em>);</pre>
 <div class="refsect3">
-<a name="id-1.2.14.9.12.42.4"></a><h4>Parameters</h4>
+<a name="id-1.2.14.9.12.44.4"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1753,9 +1833,8 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.14.9.12.42.5"></a><h4>Returns</h4>
+<a name="id-1.2.14.9.12.44.5"></a><h4>Returns</h4>
 <p> the language of the stream, or NULL if unknown.</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -1764,59 +1843,6 @@
 <pre class="programlisting"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#guint"><span class="returnvalue">guint</span></a>
 gst_discoverer_video_info_get_bitrate (<em class="parameter"><code>const <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscovererVideoInfo" title="GstDiscovererVideoInfo"><span class="type">GstDiscovererVideoInfo</span></a> *info</code></em>);</pre>
 <div class="refsect3">
-<a name="id-1.2.14.9.12.43.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>info</p></td>
-<td class="parameter_description"><p>a <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscovererVideoInfo" title="GstDiscovererVideoInfo"><span class="type">GstDiscovererVideoInfo</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
-</table></div>
-</div>
-<div class="refsect3">
-<a name="id-1.2.14.9.12.43.5"></a><h4>Returns</h4>
-<p> the average or nominal bitrate of the video stream in bits/second.</p>
-<p></p>
-</div>
-</div>
-<hr>
-<div class="refsect2">
-<a name="gst-discoverer-video-info-get-depth"></a><h3>gst_discoverer_video_info_get_depth ()</h3>
-<pre class="programlisting"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#guint"><span class="returnvalue">guint</span></a>
-gst_discoverer_video_info_get_depth (<em class="parameter"><code>const <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscovererVideoInfo" title="GstDiscovererVideoInfo"><span class="type">GstDiscovererVideoInfo</span></a> *info</code></em>);</pre>
-<div class="refsect3">
-<a name="id-1.2.14.9.12.44.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>info</p></td>
-<td class="parameter_description"><p>a <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscovererVideoInfo" title="GstDiscovererVideoInfo"><span class="type">GstDiscovererVideoInfo</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
-</table></div>
-</div>
-<div class="refsect3">
-<a name="id-1.2.14.9.12.44.5"></a><h4>Returns</h4>
-<p> the depth in bits of the video stream.</p>
-<p></p>
-</div>
-</div>
-<hr>
-<div class="refsect2">
-<a name="gst-discoverer-video-info-get-framerate-denom"></a><h3>gst_discoverer_video_info_get_framerate_denom ()</h3>
-<pre class="programlisting"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#guint"><span class="returnvalue">guint</span></a>
-gst_discoverer_video_info_get_framerate_denom
-                               (<em class="parameter"><code>const <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscovererVideoInfo" title="GstDiscovererVideoInfo"><span class="type">GstDiscovererVideoInfo</span></a> *info</code></em>);</pre>
-<div class="refsect3">
 <a name="id-1.2.14.9.12.45.4"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
@@ -1833,16 +1859,14 @@
 </div>
 <div class="refsect3">
 <a name="id-1.2.14.9.12.45.5"></a><h4>Returns</h4>
-<p> the framerate of the video stream (denominator).</p>
-<p></p>
+<p> the average or nominal bitrate of the video stream in bits/second.</p>
 </div>
 </div>
 <hr>
 <div class="refsect2">
-<a name="gst-discoverer-video-info-get-framerate-num"></a><h3>gst_discoverer_video_info_get_framerate_num ()</h3>
+<a name="gst-discoverer-video-info-get-depth"></a><h3>gst_discoverer_video_info_get_depth ()</h3>
 <pre class="programlisting"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#guint"><span class="returnvalue">guint</span></a>
-gst_discoverer_video_info_get_framerate_num
-                               (<em class="parameter"><code>const <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscovererVideoInfo" title="GstDiscovererVideoInfo"><span class="type">GstDiscovererVideoInfo</span></a> *info</code></em>);</pre>
+gst_discoverer_video_info_get_depth (<em class="parameter"><code>const <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscovererVideoInfo" title="GstDiscovererVideoInfo"><span class="type">GstDiscovererVideoInfo</span></a> *info</code></em>);</pre>
 <div class="refsect3">
 <a name="id-1.2.14.9.12.46.4"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
@@ -1860,15 +1884,15 @@
 </div>
 <div class="refsect3">
 <a name="id-1.2.14.9.12.46.5"></a><h4>Returns</h4>
-<p> the framerate of the video stream (numerator).</p>
-<p></p>
+<p> the depth in bits of the video stream.</p>
 </div>
 </div>
 <hr>
 <div class="refsect2">
-<a name="gst-discoverer-video-info-get-height"></a><h3>gst_discoverer_video_info_get_height ()</h3>
+<a name="gst-discoverer-video-info-get-framerate-denom"></a><h3>gst_discoverer_video_info_get_framerate_denom ()</h3>
 <pre class="programlisting"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#guint"><span class="returnvalue">guint</span></a>
-gst_discoverer_video_info_get_height (<em class="parameter"><code>const <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscovererVideoInfo" title="GstDiscovererVideoInfo"><span class="type">GstDiscovererVideoInfo</span></a> *info</code></em>);</pre>
+gst_discoverer_video_info_get_framerate_denom
+                               (<em class="parameter"><code>const <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscovererVideoInfo" title="GstDiscovererVideoInfo"><span class="type">GstDiscovererVideoInfo</span></a> *info</code></em>);</pre>
 <div class="refsect3">
 <a name="id-1.2.14.9.12.47.4"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
@@ -1886,15 +1910,14 @@
 </div>
 <div class="refsect3">
 <a name="id-1.2.14.9.12.47.5"></a><h4>Returns</h4>
-<p> the height of the video stream in pixels.</p>
-<p></p>
+<p> the framerate of the video stream (denominator).</p>
 </div>
 </div>
 <hr>
 <div class="refsect2">
-<a name="gst-discoverer-video-info-is-interlaced"></a><h3>gst_discoverer_video_info_is_interlaced ()</h3>
-<pre class="programlisting"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-gst_discoverer_video_info_is_interlaced
+<a name="gst-discoverer-video-info-get-framerate-num"></a><h3>gst_discoverer_video_info_get_framerate_num ()</h3>
+<pre class="programlisting"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#guint"><span class="returnvalue">guint</span></a>
+gst_discoverer_video_info_get_framerate_num
                                (<em class="parameter"><code>const <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscovererVideoInfo" title="GstDiscovererVideoInfo"><span class="type">GstDiscovererVideoInfo</span></a> *info</code></em>);</pre>
 <div class="refsect3">
 <a name="id-1.2.14.9.12.48.4"></a><h4>Parameters</h4>
@@ -1913,15 +1936,14 @@
 </div>
 <div class="refsect3">
 <a name="id-1.2.14.9.12.48.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 stream is interlaced, else <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a>.</p>
-<p></p>
+<p> the framerate of the video stream (numerator).</p>
 </div>
 </div>
 <hr>
 <div class="refsect2">
-<a name="gst-discoverer-video-info-is-image"></a><h3>gst_discoverer_video_info_is_image ()</h3>
-<pre class="programlisting"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-gst_discoverer_video_info_is_image (<em class="parameter"><code>const <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscovererVideoInfo" title="GstDiscovererVideoInfo"><span class="type">GstDiscovererVideoInfo</span></a> *info</code></em>);</pre>
+<a name="gst-discoverer-video-info-get-height"></a><h3>gst_discoverer_video_info_get_height ()</h3>
+<pre class="programlisting"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#guint"><span class="returnvalue">guint</span></a>
+gst_discoverer_video_info_get_height (<em class="parameter"><code>const <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscovererVideoInfo" title="GstDiscovererVideoInfo"><span class="type">GstDiscovererVideoInfo</span></a> *info</code></em>);</pre>
 <div class="refsect3">
 <a name="id-1.2.14.9.12.49.4"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
@@ -1939,16 +1961,14 @@
 </div>
 <div class="refsect3">
 <a name="id-1.2.14.9.12.49.5"></a><h4>Returns</h4>
-<p> <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><span class="type">TRUE</span></a> if the video stream corresponds to an image (i.e. only contains
-one frame).</p>
-<p></p>
+<p> the height of the video stream in pixels.</p>
 </div>
 </div>
 <hr>
 <div class="refsect2">
-<a name="gst-discoverer-video-info-get-max-bitrate"></a><h3>gst_discoverer_video_info_get_max_bitrate ()</h3>
-<pre class="programlisting"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#guint"><span class="returnvalue">guint</span></a>
-gst_discoverer_video_info_get_max_bitrate
+<a name="gst-discoverer-video-info-is-interlaced"></a><h3>gst_discoverer_video_info_is_interlaced ()</h3>
+<pre class="programlisting"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
+gst_discoverer_video_info_is_interlaced
                                (<em class="parameter"><code>const <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscovererVideoInfo" title="GstDiscovererVideoInfo"><span class="type">GstDiscovererVideoInfo</span></a> *info</code></em>);</pre>
 <div class="refsect3">
 <a name="id-1.2.14.9.12.50.4"></a><h4>Parameters</h4>
@@ -1967,16 +1987,14 @@
 </div>
 <div class="refsect3">
 <a name="id-1.2.14.9.12.50.5"></a><h4>Returns</h4>
-<p> the maximum bitrate of the video stream in bits/second.</p>
-<p></p>
+<p> <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the stream is interlaced, else <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-discoverer-video-info-get-par-denom"></a><h3>gst_discoverer_video_info_get_par_denom ()</h3>
-<pre class="programlisting"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#guint"><span class="returnvalue">guint</span></a>
-gst_discoverer_video_info_get_par_denom
-                               (<em class="parameter"><code>const <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscovererVideoInfo" title="GstDiscovererVideoInfo"><span class="type">GstDiscovererVideoInfo</span></a> *info</code></em>);</pre>
+<a name="gst-discoverer-video-info-is-image"></a><h3>gst_discoverer_video_info_is_image ()</h3>
+<pre class="programlisting"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
+gst_discoverer_video_info_is_image (<em class="parameter"><code>const <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscovererVideoInfo" title="GstDiscovererVideoInfo"><span class="type">GstDiscovererVideoInfo</span></a> *info</code></em>);</pre>
 <div class="refsect3">
 <a name="id-1.2.14.9.12.51.4"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
@@ -1994,15 +2012,16 @@
 </div>
 <div class="refsect3">
 <a name="id-1.2.14.9.12.51.5"></a><h4>Returns</h4>
-<p> the Pixel Aspect Ratio (PAR) of the video stream (denominator).</p>
-<p></p>
+<p> <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><span class="type">TRUE</span></a> if the video stream corresponds to an image (i.e. only contains
+one frame).</p>
 </div>
 </div>
 <hr>
 <div class="refsect2">
-<a name="gst-discoverer-video-info-get-par-num"></a><h3>gst_discoverer_video_info_get_par_num ()</h3>
+<a name="gst-discoverer-video-info-get-max-bitrate"></a><h3>gst_discoverer_video_info_get_max_bitrate ()</h3>
 <pre class="programlisting"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#guint"><span class="returnvalue">guint</span></a>
-gst_discoverer_video_info_get_par_num (<em class="parameter"><code>const <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscovererVideoInfo" title="GstDiscovererVideoInfo"><span class="type">GstDiscovererVideoInfo</span></a> *info</code></em>);</pre>
+gst_discoverer_video_info_get_max_bitrate
+                               (<em class="parameter"><code>const <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscovererVideoInfo" title="GstDiscovererVideoInfo"><span class="type">GstDiscovererVideoInfo</span></a> *info</code></em>);</pre>
 <div class="refsect3">
 <a name="id-1.2.14.9.12.52.4"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
@@ -2020,15 +2039,15 @@
 </div>
 <div class="refsect3">
 <a name="id-1.2.14.9.12.52.5"></a><h4>Returns</h4>
-<p> the Pixel Aspect Ratio (PAR) of the video stream (numerator).</p>
-<p></p>
+<p> the maximum bitrate of the video stream in bits/second.</p>
 </div>
 </div>
 <hr>
 <div class="refsect2">
-<a name="gst-discoverer-video-info-get-width"></a><h3>gst_discoverer_video_info_get_width ()</h3>
+<a name="gst-discoverer-video-info-get-par-denom"></a><h3>gst_discoverer_video_info_get_par_denom ()</h3>
 <pre class="programlisting"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#guint"><span class="returnvalue">guint</span></a>
-gst_discoverer_video_info_get_width (<em class="parameter"><code>const <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscovererVideoInfo" title="GstDiscovererVideoInfo"><span class="type">GstDiscovererVideoInfo</span></a> *info</code></em>);</pre>
+gst_discoverer_video_info_get_par_denom
+                               (<em class="parameter"><code>const <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscovererVideoInfo" title="GstDiscovererVideoInfo"><span class="type">GstDiscovererVideoInfo</span></a> *info</code></em>);</pre>
 <div class="refsect3">
 <a name="id-1.2.14.9.12.53.4"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
@@ -2046,8 +2065,57 @@
 </div>
 <div class="refsect3">
 <a name="id-1.2.14.9.12.53.5"></a><h4>Returns</h4>
+<p> the Pixel Aspect Ratio (PAR) of the video stream (denominator).</p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-discoverer-video-info-get-par-num"></a><h3>gst_discoverer_video_info_get_par_num ()</h3>
+<pre class="programlisting"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#guint"><span class="returnvalue">guint</span></a>
+gst_discoverer_video_info_get_par_num (<em class="parameter"><code>const <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscovererVideoInfo" title="GstDiscovererVideoInfo"><span class="type">GstDiscovererVideoInfo</span></a> *info</code></em>);</pre>
+<div class="refsect3">
+<a name="id-1.2.14.9.12.54.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>info</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscovererVideoInfo" title="GstDiscovererVideoInfo"><span class="type">GstDiscovererVideoInfo</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="id-1.2.14.9.12.54.5"></a><h4>Returns</h4>
+<p> the Pixel Aspect Ratio (PAR) of the video stream (numerator).</p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-discoverer-video-info-get-width"></a><h3>gst_discoverer_video_info_get_width ()</h3>
+<pre class="programlisting"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#guint"><span class="returnvalue">guint</span></a>
+gst_discoverer_video_info_get_width (<em class="parameter"><code>const <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscovererVideoInfo" title="GstDiscovererVideoInfo"><span class="type">GstDiscovererVideoInfo</span></a> *info</code></em>);</pre>
+<div class="refsect3">
+<a name="id-1.2.14.9.12.55.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>info</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#GstDiscovererVideoInfo" title="GstDiscovererVideoInfo"><span class="type">GstDiscovererVideoInfo</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="id-1.2.14.9.12.55.5"></a><h4>Returns</h4>
 <p> the width of the video stream in pixels.</p>
-<p></p>
 </div>
 </div>
 </div>
@@ -2125,6 +2193,62 @@
 </div>
 <hr>
 <div class="refsect2">
+<a name="GstDiscovererSerializeFlags"></a><h3>enum GstDiscovererSerializeFlags</h3>
+<p>You can use these flags to control what is serialized by
+<a class="link" href="gst-plugins-base-libs-gstdiscoverer.html#gst-discoverer-info-to-variant" title="gst_discoverer_info_to_variant ()"><code class="function">gst_discoverer_info_to_variant()</code></a></p>
+<div class="refsect3">
+<a name="id-1.2.14.9.13.5.4"></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-DISCOVERER-SERIALIZE-BASIC:CAPS"></a>GST_DISCOVERER_SERIALIZE_BASIC</p></td>
+<td class="enum_member_description">
+<p>Serialize only basic information, excluding
+caps, tags and miscellaneous information</p>
+</td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-DISCOVERER-SERIALIZE-CAPS"></a>GST_DISCOVERER_SERIALIZE_CAPS</p></td>
+<td class="enum_member_description">
+<p>Serialize the caps for each stream</p>
+</td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-DISCOVERER-SERIALIZE-TAGS:CAPS"></a>GST_DISCOVERER_SERIALIZE_TAGS</p></td>
+<td class="enum_member_description">
+<p>Serialize the tags for each stream</p>
+</td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-DISCOVERER-SERIALIZE-MISC:CAPS"></a>GST_DISCOVERER_SERIALIZE_MISC</p></td>
+<td class="enum_member_description">
+<p>Serialize miscellaneous information for each stream</p>
+</td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-DISCOVERER-SERIALIZE-ALL:CAPS"></a>GST_DISCOVERER_SERIALIZE_ALL</p></td>
+<td class="enum_member_description">
+<p>Serialize all the available info, including
+caps, tags and miscellaneous information</p>
+</td>
+<td class="enum_member_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<p class="since">Since: 1.6</p>
+</div>
+<hr>
+<div class="refsect2">
 <a name="GstDiscovererStreamInfo"></a><h3>GstDiscovererStreamInfo</h3>
 <pre class="programlisting">typedef struct _GstDiscovererStreamInfo GstDiscovererStreamInfo;</pre>
 <p>Base structure for information concerning a media stream. Depending on the
@@ -2230,7 +2354,7 @@
 </tbody>
 </table></div>
 </div>
-<p>Flags: Run Last</p>
+<p>Flags: <a href="https://developer.gnome.org/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS">Run Last</a></p>
 </div>
 <hr>
 <div class="refsect2">
@@ -2261,7 +2385,7 @@
 </tbody>
 </table></div>
 </div>
-<p>Flags: Run Last</p>
+<p>Flags: <a href="https://developer.gnome.org/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS">Run Last</a></p>
 </div>
 <hr>
 <div class="refsect2">
@@ -2303,7 +2427,7 @@
 </tbody>
 </table></div>
 </div>
-<p>Flags: Run Last</p>
+<p>Flags: <a href="https://developer.gnome.org/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS">Run Last</a></p>
 </div>
 <hr>
 <div class="refsect2">
@@ -2334,12 +2458,11 @@
 </tbody>
 </table></div>
 </div>
-<p>Flags: Run Last</p>
+<p>Flags: <a href="https://developer.gnome.org/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS">Run Last</a></p>
 </div>
 </div>
 </div>
 <div class="footer">
-<hr>
-          Generated by GTK-Doc V1.21</div>
+<hr>Generated by GTK-Doc V1.24</div>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/libs/html/gst-plugins-base-libs-gstfft.html b/docs/libs/html/gst-plugins-base-libs-gstfft.html
index dacec99..9e30b4c 100644
--- a/docs/libs/html/gst-plugins-base-libs-gstfft.html
+++ b/docs/libs/html/gst-plugins-base-libs-gstfft.html
@@ -2,13 +2,13 @@
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>GStreamer Base Plugins 1.0 Library Reference Manual: gstfft</title>
+<title>gstfft: GStreamer Base 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 Base Plugins 1.0 Library Reference Manual">
 <link rel="up" href="gstreamer-ffft.html" title="FFT Library">
 <link rel="prev" href="gstreamer-ffft.html" title="FFT Library">
 <link rel="next" href="gst-plugins-base-libs-gstffts16.html" title="gstffts16">
-<meta name="generator" content="GTK-Doc V1.21 (XML mode)">
+<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">
@@ -100,7 +100,6 @@
 <div class="refsect3">
 <a name="id-1.2.7.4.7.2.6"></a><h4>Returns</h4>
 <p> the next fast FFT length.</p>
-<p></p>
 </div>
 </div>
 </div>
@@ -160,7 +159,6 @@
 </div>
 </div>
 <div class="footer">
-<hr>
-          Generated by GTK-Doc V1.21</div>
+<hr>Generated by GTK-Doc V1.24</div>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/libs/html/gst-plugins-base-libs-gstfftf32.html b/docs/libs/html/gst-plugins-base-libs-gstfftf32.html
index 3475cf9..1d57890 100644
--- a/docs/libs/html/gst-plugins-base-libs-gstfftf32.html
+++ b/docs/libs/html/gst-plugins-base-libs-gstfftf32.html
@@ -2,13 +2,13 @@
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>GStreamer Base Plugins 1.0 Library Reference Manual: gstfftf32</title>
+<title>gstfftf32: GStreamer Base 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 Base Plugins 1.0 Library Reference Manual">
 <link rel="up" href="gstreamer-ffft.html" title="FFT Library">
 <link rel="prev" href="gst-plugins-base-libs-gstffts32.html" title="gstffts32">
 <link rel="next" href="gst-plugins-base-libs-gstfftf64.html" title="gstfftf64">
-<meta name="generator" content="GTK-Doc V1.21 (XML mode)">
+<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">
@@ -146,8 +146,9 @@
  must be even and to get the best performance a product of
 2, 3 and 5. To get the next number with this characteristics use
 <a class="link" href="gst-plugins-base-libs-gstfft.html#gst-fft-next-fast-length" title="gst_fft_next_fast_length ()"><code class="function">gst_fft_next_fast_length()</code></a>.</p>
+<p><span class="annotation">[<acronym title="Exposed in C code, not necessarily available in other languages."><span class="acronym">skip</span></acronym>]</span></p>
 <div class="refsect3">
-<a name="id-1.2.7.7.7.2.6"></a><h4>Parameters</h4>
+<a name="id-1.2.7.7.7.2.7"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -169,9 +170,8 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.7.7.7.2.7"></a><h4>Returns</h4>
+<a name="id-1.2.7.7.7.2.8"></a><h4>Returns</h4>
 <p> a new <a class="link" href="gst-plugins-base-libs-gstfftf32.html#GstFFTF32" title="GstFFTF32"><span class="type">GstFFTF32</span></a> instance.</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -370,7 +370,6 @@
 </div>
 </div>
 <div class="footer">
-<hr>
-          Generated by GTK-Doc V1.21</div>
+<hr>Generated by GTK-Doc V1.24</div>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/libs/html/gst-plugins-base-libs-gstfftf64.html b/docs/libs/html/gst-plugins-base-libs-gstfftf64.html
index ba876a5..9e92853 100644
--- a/docs/libs/html/gst-plugins-base-libs-gstfftf64.html
+++ b/docs/libs/html/gst-plugins-base-libs-gstfftf64.html
@@ -2,13 +2,13 @@
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>GStreamer Base Plugins 1.0 Library Reference Manual: gstfftf64</title>
+<title>gstfftf64: GStreamer Base 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 Base Plugins 1.0 Library Reference Manual">
 <link rel="up" href="gstreamer-ffft.html" title="FFT Library">
 <link rel="prev" href="gst-plugins-base-libs-gstfftf32.html" title="gstfftf32">
 <link rel="next" href="gstreamer-riff.html" title="Riff Media Library">
-<meta name="generator" content="GTK-Doc V1.21 (XML mode)">
+<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">
@@ -146,8 +146,9 @@
  must be even and to get the best performance a product of
 2, 3 and 5. To get the next number with this characteristics use
 <a class="link" href="gst-plugins-base-libs-gstfft.html#gst-fft-next-fast-length" title="gst_fft_next_fast_length ()"><code class="function">gst_fft_next_fast_length()</code></a>.</p>
+<p><span class="annotation">[<acronym title="Exposed in C code, not necessarily available in other languages."><span class="acronym">skip</span></acronym>]</span></p>
 <div class="refsect3">
-<a name="id-1.2.7.8.7.2.6"></a><h4>Parameters</h4>
+<a name="id-1.2.7.8.7.2.7"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -169,9 +170,8 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.7.8.7.2.7"></a><h4>Returns</h4>
+<a name="id-1.2.7.8.7.2.8"></a><h4>Returns</h4>
 <p> a new <a class="link" href="gst-plugins-base-libs-gstfftf64.html#GstFFTF64" title="GstFFTF64"><span class="type">GstFFTF64</span></a> instance.</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -370,7 +370,6 @@
 </div>
 </div>
 <div class="footer">
-<hr>
-          Generated by GTK-Doc V1.21</div>
+<hr>Generated by GTK-Doc V1.24</div>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/libs/html/gst-plugins-base-libs-gstffts16.html b/docs/libs/html/gst-plugins-base-libs-gstffts16.html
index d49e5af..c76a539 100644
--- a/docs/libs/html/gst-plugins-base-libs-gstffts16.html
+++ b/docs/libs/html/gst-plugins-base-libs-gstffts16.html
@@ -2,13 +2,13 @@
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>GStreamer Base Plugins 1.0 Library Reference Manual: gstffts16</title>
+<title>gstffts16: GStreamer Base 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 Base Plugins 1.0 Library Reference Manual">
 <link rel="up" href="gstreamer-ffft.html" title="FFT Library">
 <link rel="prev" href="gst-plugins-base-libs-gstfft.html" title="gstfft">
 <link rel="next" href="gst-plugins-base-libs-gstffts32.html" title="gstffts32">
-<meta name="generator" content="GTK-Doc V1.21 (XML mode)">
+<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">
@@ -146,8 +146,9 @@
  must be even and to get the best performance a product of
 2, 3 and 5. To get the next number with this characteristics use
 <a class="link" href="gst-plugins-base-libs-gstfft.html#gst-fft-next-fast-length" title="gst_fft_next_fast_length ()"><code class="function">gst_fft_next_fast_length()</code></a>.</p>
+<p><span class="annotation">[<acronym title="Exposed in C code, not necessarily available in other languages."><span class="acronym">skip</span></acronym>]</span></p>
 <div class="refsect3">
-<a name="id-1.2.7.5.7.2.6"></a><h4>Parameters</h4>
+<a name="id-1.2.7.5.7.2.7"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -169,9 +170,8 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.7.5.7.2.7"></a><h4>Returns</h4>
+<a name="id-1.2.7.5.7.2.8"></a><h4>Returns</h4>
 <p> a new <a class="link" href="gst-plugins-base-libs-gstffts16.html#GstFFTS16" title="GstFFTS16"><span class="type">GstFFTS16</span></a> instance.</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -370,7 +370,6 @@
 </div>
 </div>
 <div class="footer">
-<hr>
-          Generated by GTK-Doc V1.21</div>
+<hr>Generated by GTK-Doc V1.24</div>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/libs/html/gst-plugins-base-libs-gstffts32.html b/docs/libs/html/gst-plugins-base-libs-gstffts32.html
index 897818b..06a929c 100644
--- a/docs/libs/html/gst-plugins-base-libs-gstffts32.html
+++ b/docs/libs/html/gst-plugins-base-libs-gstffts32.html
@@ -2,13 +2,13 @@
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>GStreamer Base Plugins 1.0 Library Reference Manual: gstffts32</title>
+<title>gstffts32: GStreamer Base 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 Base Plugins 1.0 Library Reference Manual">
 <link rel="up" href="gstreamer-ffft.html" title="FFT Library">
 <link rel="prev" href="gst-plugins-base-libs-gstffts16.html" title="gstffts16">
 <link rel="next" href="gst-plugins-base-libs-gstfftf32.html" title="gstfftf32">
-<meta name="generator" content="GTK-Doc V1.21 (XML mode)">
+<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">
@@ -146,8 +146,9 @@
  must be even and to get the best performance a product of
 2, 3 and 5. To get the next number with this characteristics use
 <a class="link" href="gst-plugins-base-libs-gstfft.html#gst-fft-next-fast-length" title="gst_fft_next_fast_length ()"><code class="function">gst_fft_next_fast_length()</code></a>.</p>
+<p><span class="annotation">[<acronym title="Exposed in C code, not necessarily available in other languages."><span class="acronym">skip</span></acronym>]</span></p>
 <div class="refsect3">
-<a name="id-1.2.7.6.7.2.6"></a><h4>Parameters</h4>
+<a name="id-1.2.7.6.7.2.7"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -169,9 +170,8 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.7.6.7.2.7"></a><h4>Returns</h4>
+<a name="id-1.2.7.6.7.2.8"></a><h4>Returns</h4>
 <p> a new <a class="link" href="gst-plugins-base-libs-gstffts32.html#GstFFTS32" title="GstFFTS32"><span class="type">GstFFTS32</span></a> instance.</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -370,7 +370,6 @@
 </div>
 </div>
 <div class="footer">
-<hr>
-          Generated by GTK-Doc V1.21</div>
+<hr>Generated by GTK-Doc V1.24</div>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/libs/html/gst-plugins-base-libs-gstmikey.html b/docs/libs/html/gst-plugins-base-libs-gstmikey.html
index acd9cb6..0c1b4f2 100644
--- a/docs/libs/html/gst-plugins-base-libs-gstmikey.html
+++ b/docs/libs/html/gst-plugins-base-libs-gstmikey.html
@@ -2,13 +2,13 @@
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>GStreamer Base Plugins 1.0 Library Reference Manual: gstmikey</title>
+<title>gstmikey: GStreamer Base 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 Base Plugins 1.0 Library Reference Manual">
 <link rel="up" href="gstreamer-mikey.html" title="MIKEY Library">
 <link rel="prev" href="gstreamer-mikey.html" title="MIKEY Library">
 <link rel="next" href="gstreamer-tag.html" title="Tag Support Library">
-<meta name="generator" content="GTK-Doc V1.21 (XML mode)">
+<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">
@@ -73,6 +73,30 @@
 </tr>
 <tr>
 <td class="function_type">
+<a class="link" href="gst-plugins-base-libs-gstmikey.html#GstMIKEYMessage" title="struct GstMIKEYMessage"><span class="returnvalue">GstMIKEYMessage</span></a> *
+</td>
+<td class="function_name">
+<a class="link" href="gst-plugins-base-libs-gstmikey.html#gst-mikey-message-copy" title="gst_mikey_message_copy ()">gst_mikey_message_copy</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a class="link" href="gst-plugins-base-libs-gstmikey.html#GstMIKEYMessage" title="struct GstMIKEYMessage"><span class="returnvalue">GstMIKEYMessage</span></a> *
+</td>
+<td class="function_name">
+<a class="link" href="gst-plugins-base-libs-gstmikey.html#gst-mikey-message-ref" title="gst_mikey_message_ref ()">gst_mikey_message_ref</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-base-libs-gstmikey.html#gst-mikey-message-unref" title="gst_mikey_message_unref ()">gst_mikey_message_unref</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">
@@ -201,6 +225,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-base-libs-gstmikey.html#gst-mikey-payload-key-data-set-interval" title="gst_mikey_payload_key_data_set_interval ()">gst_mikey_payload_key_data_set_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#gboolean"><span class="returnvalue">gboolean</span></a>
+</td>
+<td class="function_name">
+<a class="link" href="gst-plugins-base-libs-gstmikey.html#gst-mikey-payload-key-data-set-key" title="gst_mikey_payload_key_data_set_key ()">gst_mikey_payload_key_data_set_key</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-base-libs-gstmikey.html#gst-mikey-payload-key-data-set-salt" title="gst_mikey_payload_key_data_set_salt ()">gst_mikey_payload_key_data_set_salt</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-base-libs-gstmikey.html#gst-mikey-payload-key-data-set-spi" title="gst_mikey_payload_key_data_set_spi ()">gst_mikey_payload_key_data_set_spi</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a class="link" href="gst-plugins-base-libs-gstmikey.html#GstMIKEYPayload" title="struct GstMIKEYPayload"><span class="returnvalue">GstMIKEYPayload</span></a> *
+</td>
+<td class="function_name">
+<a class="link" href="gst-plugins-base-libs-gstmikey.html#gst-mikey-payload-ref" title="gst_mikey_payload_ref ()">gst_mikey_payload_ref</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-base-libs-gstmikey.html#gst-mikey-payload-unref" title="gst_mikey_payload_unref ()">gst_mikey_payload_unref</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-base-libs-gstmikey.html#gst-mikey-payload-kemac-set" title="gst_mikey_payload_kemac_set ()">gst_mikey_payload_kemac_set</a> <span class="c_punctuation">()</span>
 </td>
 </tr>
@@ -209,6 +281,37 @@
 <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-base-libs-gstmikey.html#gst-mikey-payload-kemac-add-sub" title="gst_mikey_payload_kemac_add_sub ()">gst_mikey_payload_kemac_add_sub</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-base-libs-gstmikey.html#gst-mikey-payload-kemac-get-n-sub" title="gst_mikey_payload_kemac_get_n_sub ()">gst_mikey_payload_kemac_get_n_sub</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">const <a class="link" href="gst-plugins-base-libs-gstmikey.html#GstMIKEYPayload" title="struct GstMIKEYPayload"><span class="returnvalue">GstMIKEYPayload</span></a> *
+</td>
+<td class="function_name">
+<a class="link" href="gst-plugins-base-libs-gstmikey.html#gst-mikey-payload-kemac-get-sub" title="gst_mikey_payload_kemac_get_sub ()">gst_mikey_payload_kemac_get_sub</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-base-libs-gstmikey.html#gst-mikey-payload-kemac-remove-sub" title="gst_mikey_payload_kemac_remove_sub ()">gst_mikey_payload_kemac_remove_sub</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-base-libs-gstmikey.html#gst-mikey-payload-pke-set" title="gst_mikey_payload_pke_set ()">gst_mikey_payload_pke_set</a> <span class="c_punctuation">()</span>
 </td>
 </tr>
@@ -425,9 +528,8 @@
 <div class="refsect3">
 <a name="id-1.2.12.3.7.2.5"></a><h4>Returns</h4>
 <p> a new <a class="link" href="gst-plugins-base-libs-gstmikey.html#GstMIKEYMessage" title="struct GstMIKEYMessage"><span class="type">GstMIKEYMessage</span></a> on success</p>
-<p></p>
 </div>
-<p class="since">Since 1.4</p>
+<p class="since">Since: 1.4</p>
 </div>
 <hr>
 <div class="refsect2">
@@ -468,9 +570,8 @@
 <div class="refsect3">
 <a name="id-1.2.12.3.7.3.6"></a><h4>Returns</h4>
 <p> a new <a class="link" href="gst-plugins-base-libs-gstmikey.html#GstMIKEYMessage" title="struct GstMIKEYMessage"><span class="type">GstMIKEYMessage</span></a></p>
-<p></p>
 </div>
-<p class="since">Since 1.4</p>
+<p class="since">Since: 1.4</p>
 </div>
 <hr>
 <div class="refsect2">
@@ -523,9 +624,8 @@
 <p> a <a class="link" href="gst-plugins-base-libs-gstmikey.html#GstMIKEYMessage" title="struct GstMIKEYMessage"><span class="type">GstMIKEYMessage</span></a> on success or <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> when parsing failed and
 <em class="parameter"><code>error</code></em>
 will be set.</p>
-<p></p>
 </div>
-<p class="since">Since 1.4</p>
+<p class="since">Since: 1.4</p>
 </div>
 <hr>
 <div class="refsect2">
@@ -567,9 +667,89 @@
 <a name="id-1.2.12.3.7.5.6"></a><h4>Returns</h4>
 <p> a new <a href="https://developer.gnome.org/glib/unstable/glib-Byte-Arrays.html#GBytes"><span class="type">GBytes</span></a> for <em class="parameter"><code>msg</code></em>
 .</p>
-<p></p>
 </div>
-<p class="since">Since 1.4</p>
+<p class="since">Since: 1.4</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-mikey-message-copy"></a><h3>gst_mikey_message_copy ()</h3>
+<pre class="programlisting"><a class="link" href="gst-plugins-base-libs-gstmikey.html#GstMIKEYMessage" title="struct GstMIKEYMessage"><span class="returnvalue">GstMIKEYMessage</span></a> *
+gst_mikey_message_copy (<em class="parameter"><code>const <a class="link" href="gst-plugins-base-libs-gstmikey.html#GstMIKEYMessage" title="struct GstMIKEYMessage"><span class="type">GstMIKEYMessage</span></a> *message</code></em>);</pre>
+<p>Create a copy of the given message.</p>
+<div class="refsect3">
+<a name="id-1.2.12.3.7.6.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>message</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gst-plugins-base-libs-gstmikey.html#GstMIKEYMessage" title="struct GstMIKEYMessage"><span class="type">GstMIKEYMessage</span></a>.</p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="id-1.2.12.3.7.6.6"></a><h4>Returns</h4>
+<p> a new copy of <em class="parameter"><code>message</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>
+<p class="since">Since: 1.4</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-mikey-message-ref"></a><h3>gst_mikey_message_ref ()</h3>
+<pre class="programlisting"><a class="link" href="gst-plugins-base-libs-gstmikey.html#GstMIKEYMessage" title="struct GstMIKEYMessage"><span class="returnvalue">GstMIKEYMessage</span></a> *
+gst_mikey_message_ref (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstmikey.html#GstMIKEYMessage" title="struct GstMIKEYMessage"><span class="type">GstMIKEYMessage</span></a> *message</code></em>);</pre>
+<p>Increase the refcount of this message.</p>
+<div class="refsect3">
+<a name="id-1.2.12.3.7.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>message</p></td>
+<td class="parameter_description"><p>The message to refcount</p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="id-1.2.12.3.7.7.6"></a><h4>Returns</h4>
+<p> <em class="parameter"><code>message</code></em>
+(for convenience when doing assignments). </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.4</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-mikey-message-unref"></a><h3>gst_mikey_message_unref ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+gst_mikey_message_unref (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstmikey.html#GstMIKEYMessage" title="struct GstMIKEYMessage"><span class="type">GstMIKEYMessage</span></a> *message</code></em>);</pre>
+<p>Decrease the refcount of an message, freeing it if the refcount reaches 0.</p>
+<div class="refsect3">
+<a name="id-1.2.12.3.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>message</p></td>
+<td class="parameter_description"><p> the message to refcount. </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>]</span></td>
+</tr></tbody>
+</table></div>
+</div>
+<p class="since">Since: 1.4</p>
 </div>
 <hr>
 <div class="refsect2">
@@ -585,7 +765,7 @@
 <p>Set the information in <em class="parameter"><code>msg</code></em>
 .</p>
 <div class="refsect3">
-<a name="id-1.2.12.3.7.6.5"></a><h4>Parameters</h4>
+<a name="id-1.2.12.3.7.9.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -632,11 +812,10 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.12.3.7.6.6"></a><h4>Returns</h4>
+<a name="id-1.2.12.3.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> on success</p>
-<p></p>
 </div>
-<p class="since">Since 1.4</p>
+<p class="since">Since: 1.4</p>
 </div>
 <hr>
 <div class="refsect2">
@@ -646,7 +825,7 @@
 <p>Get the number of crypto sessions in <em class="parameter"><code>msg</code></em>
 .</p>
 <div class="refsect3">
-<a name="id-1.2.12.3.7.7.5"></a><h4>Parameters</h4>
+<a name="id-1.2.12.3.7.10.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -661,11 +840,10 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.12.3.7.7.6"></a><h4>Returns</h4>
+<a name="id-1.2.12.3.7.10.6"></a><h4>Returns</h4>
 <p> the number of crypto sessions</p>
-<p></p>
 </div>
-<p class="since">Since 1.4</p>
+<p class="since">Since: 1.4</p>
 </div>
 <hr>
 <div class="refsect2">
@@ -677,7 +855,7 @@
  at <em class="parameter"><code>idx</code></em>
 .</p>
 <div class="refsect3">
-<a name="id-1.2.12.3.7.8.5"></a><h4>Parameters</h4>
+<a name="id-1.2.12.3.7.11.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -699,11 +877,10 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.12.3.7.8.6"></a><h4>Returns</h4>
+<a name="id-1.2.12.3.7.11.6"></a><h4>Returns</h4>
 <p> a <a class="link" href="gst-plugins-base-libs-gstmikey.html#GstMIKEYMapSRTP" title="GstMIKEYMapSRTP"><span class="type">GstMIKEYMapSRTP</span></a></p>
-<p></p>
 </div>
-<p class="since">Since 1.4</p>
+<p class="since">Since: 1.4</p>
 </div>
 <hr>
 <div class="refsect2">
@@ -718,7 +895,7 @@
 <p>When <em class="parameter"><code>idx</code></em>
  is -1, the policy will be appended.</p>
 <div class="refsect3">
-<a name="id-1.2.12.3.7.9.6"></a><h4>Parameters</h4>
+<a name="id-1.2.12.3.7.12.6"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -745,11 +922,10 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.12.3.7.9.7"></a><h4>Returns</h4>
+<a name="id-1.2.12.3.7.12.7"></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> on success</p>
-<p></p>
 </div>
-<p class="since">Since 1.4</p>
+<p class="since">Since: 1.4</p>
 </div>
 <hr>
 <div class="refsect2">
@@ -760,7 +936,7 @@
 <p>Remove the SRTP policy at <em class="parameter"><code>idx</code></em>
 .</p>
 <div class="refsect3">
-<a name="id-1.2.12.3.7.10.5"></a><h4>Parameters</h4>
+<a name="id-1.2.12.3.7.13.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -782,11 +958,10 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.12.3.7.10.6"></a><h4>Returns</h4>
+<a name="id-1.2.12.3.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> on success</p>
-<p></p>
 </div>
-<p class="since">Since 1.4</p>
+<p class="since">Since: 1.4</p>
 </div>
 <hr>
 <div class="refsect2">
@@ -800,7 +975,7 @@
  with <em class="parameter"><code>map</code></em>
 .</p>
 <div class="refsect3">
-<a name="id-1.2.12.3.7.11.5"></a><h4>Parameters</h4>
+<a name="id-1.2.12.3.7.14.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -827,11 +1002,10 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.12.3.7.11.6"></a><h4>Returns</h4>
+<a name="id-1.2.12.3.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> on success</p>
-<p></p>
 </div>
-<p class="since">Since 1.4</p>
+<p class="since">Since: 1.4</p>
 </div>
 <hr>
 <div class="refsect2">
@@ -844,7 +1018,7 @@
 <p>Add a Crypto policy for SRTP to <em class="parameter"><code>msg</code></em>
 .</p>
 <div class="refsect3">
-<a name="id-1.2.12.3.7.12.5"></a><h4>Parameters</h4>
+<a name="id-1.2.12.3.7.15.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -877,11 +1051,10 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.12.3.7.12.6"></a><h4>Returns</h4>
+<a name="id-1.2.12.3.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> on success</p>
-<p></p>
 </div>
-<p class="since">Since 1.4</p>
+<p class="since">Since: 1.4</p>
 </div>
 <hr>
 <div class="refsect2">
@@ -891,7 +1064,7 @@
 <p>Get the number of payloads in <em class="parameter"><code>msg</code></em>
 .</p>
 <div class="refsect3">
-<a name="id-1.2.12.3.7.13.5"></a><h4>Parameters</h4>
+<a name="id-1.2.12.3.7.16.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -906,12 +1079,11 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.12.3.7.13.6"></a><h4>Returns</h4>
+<a name="id-1.2.12.3.7.16.6"></a><h4>Returns</h4>
 <p> the number of payloads in <em class="parameter"><code>msg</code></em>
 </p>
-<p></p>
 </div>
-<p class="since">Since 1.4</p>
+<p class="since">Since: 1.4</p>
 </div>
 <hr>
 <div class="refsect2">
@@ -923,7 +1095,7 @@
  in <em class="parameter"><code>msg</code></em>
 </p>
 <div class="refsect3">
-<a name="id-1.2.12.3.7.14.5"></a><h4>Parameters</h4>
+<a name="id-1.2.12.3.7.17.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -945,14 +1117,14 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.12.3.7.14.6"></a><h4>Returns</h4>
+<a name="id-1.2.12.3.7.17.6"></a><h4>Returns</h4>
 <p> the <a class="link" href="gst-plugins-base-libs-gstmikey.html#GstMIKEYPayload" title="struct GstMIKEYPayload"><span class="type">GstMIKEYPayload</span></a> at <em class="parameter"><code>idx</code></em>
 . The payload
 remains valid for as long as it is part of <em class="parameter"><code>msg</code></em>
 . </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>
-<p class="since">Since 1.4</p>
+<p class="since">Since: 1.4</p>
 </div>
 <hr>
 <div class="refsect2">
@@ -966,7 +1138,7 @@
  in <em class="parameter"><code>msg</code></em>
 .</p>
 <div class="refsect3">
-<a name="id-1.2.12.3.7.15.5"></a><h4>Parameters</h4>
+<a name="id-1.2.12.3.7.18.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -993,13 +1165,12 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.12.3.7.15.6"></a><h4>Returns</h4>
+<a name="id-1.2.12.3.7.18.6"></a><h4>Returns</h4>
 <p> the <em class="parameter"><code>nth</code></em>
 <a class="link" href="gst-plugins-base-libs-gstmikey.html#GstMIKEYPayload" title="struct GstMIKEYPayload"><span class="type">GstMIKEYPayload</span></a> of <em class="parameter"><code>type</code></em>
 .</p>
-<p></p>
 </div>
-<p class="since">Since 1.4</p>
+<p class="since">Since: 1.4</p>
 </div>
 <hr>
 <div class="refsect2">
@@ -1016,131 +1187,6 @@
 will be appended to <em class="parameter"><code>msg</code></em>
 .</p>
 <div class="refsect3">
-<a name="id-1.2.12.3.7.16.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>msg</p></td>
-<td class="parameter_description"><p>a <a class="link" href="gst-plugins-base-libs-gstmikey.html#GstMIKEYMessage" title="struct GstMIKEYMessage"><span class="type">GstMIKEYMessage</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr>
-<tr>
-<td class="parameter_name"><p>idx</p></td>
-<td class="parameter_description"><p>an index</p></td>
-<td class="parameter_annotations"> </td>
-</tr>
-<tr>
-<td class="parameter_name"><p>payload</p></td>
-<td class="parameter_description"><p> a <a class="link" href="gst-plugins-base-libs-gstmikey.html#GstMIKEYPayload" title="struct GstMIKEYPayload"><span class="type">GstMIKEYPayload</span></a>. </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>]</span></td>
-</tr>
-</tbody>
-</table></div>
-</div>
-<div class="refsect3">
-<a name="id-1.2.12.3.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> on success</p>
-<p></p>
-</div>
-<p class="since">Since 1.4</p>
-</div>
-<hr>
-<div class="refsect2">
-<a name="gst-mikey-message-remove-payload"></a><h3>gst_mikey_message_remove_payload ()</h3>
-<pre class="programlisting"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-gst_mikey_message_remove_payload (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstmikey.html#GstMIKEYMessage" title="struct GstMIKEYMessage"><span class="type">GstMIKEYMessage</span></a> *msg</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> idx</code></em>);</pre>
-<p>Remove the payload in <em class="parameter"><code>msg</code></em>
- at <em class="parameter"><code>idx</code></em>
-</p>
-<div class="refsect3">
-<a name="id-1.2.12.3.7.17.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>msg</p></td>
-<td class="parameter_description"><p>a <a class="link" href="gst-plugins-base-libs-gstmikey.html#GstMIKEYMessage" title="struct GstMIKEYMessage"><span class="type">GstMIKEYMessage</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr>
-<tr>
-<td class="parameter_name"><p>idx</p></td>
-<td class="parameter_description"><p>an index</p></td>
-<td class="parameter_annotations"> </td>
-</tr>
-</tbody>
-</table></div>
-</div>
-<div class="refsect3">
-<a name="id-1.2.12.3.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> on success</p>
-<p></p>
-</div>
-<p class="since">Since 1.4</p>
-</div>
-<hr>
-<div class="refsect2">
-<a name="gst-mikey-message-replace-payload"></a><h3>gst_mikey_message_replace_payload ()</h3>
-<pre class="programlisting"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-gst_mikey_message_replace_payload (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstmikey.html#GstMIKEYMessage" title="struct GstMIKEYMessage"><span class="type">GstMIKEYMessage</span></a> *msg</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> idx</code></em>,
-                                   <em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstmikey.html#GstMIKEYPayload" title="struct GstMIKEYPayload"><span class="type">GstMIKEYPayload</span></a> *payload</code></em>);</pre>
-<p>Replace the payload at <em class="parameter"><code>idx</code></em>
- in <em class="parameter"><code>msg</code></em>
- with <em class="parameter"><code>payload</code></em>
-.</p>
-<div class="refsect3">
-<a name="id-1.2.12.3.7.18.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>msg</p></td>
-<td class="parameter_description"><p>a <a class="link" href="gst-plugins-base-libs-gstmikey.html#GstMIKEYMessage" title="struct GstMIKEYMessage"><span class="type">GstMIKEYMessage</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr>
-<tr>
-<td class="parameter_name"><p>idx</p></td>
-<td class="parameter_description"><p>an index</p></td>
-<td class="parameter_annotations"> </td>
-</tr>
-<tr>
-<td class="parameter_name"><p>payload</p></td>
-<td class="parameter_description"><p> a <a class="link" href="gst-plugins-base-libs-gstmikey.html#GstMIKEYPayload" title="struct GstMIKEYPayload"><span class="type">GstMIKEYPayload</span></a>. </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>]</span></td>
-</tr>
-</tbody>
-</table></div>
-</div>
-<div class="refsect3">
-<a name="id-1.2.12.3.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> on success</p>
-<p></p>
-</div>
-<p class="since">Since 1.4</p>
-</div>
-<hr>
-<div class="refsect2">
-<a name="gst-mikey-message-add-payload"></a><h3>gst_mikey_message_add_payload ()</h3>
-<pre class="programlisting"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-gst_mikey_message_add_payload (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstmikey.html#GstMIKEYMessage" title="struct GstMIKEYMessage"><span class="type">GstMIKEYMessage</span></a> *msg</code></em>,
-                               <em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstmikey.html#GstMIKEYPayload" title="struct GstMIKEYPayload"><span class="type">GstMIKEYPayload</span></a> *payload</code></em>);</pre>
-<p>Add a new payload to <em class="parameter"><code>msg</code></em>
-.</p>
-<div class="refsect3">
 <a name="id-1.2.12.3.7.19.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
@@ -1155,6 +1201,11 @@
 <td class="parameter_annotations"> </td>
 </tr>
 <tr>
+<td class="parameter_name"><p>idx</p></td>
+<td class="parameter_description"><p>an index</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
 <td class="parameter_name"><p>payload</p></td>
 <td class="parameter_description"><p> a <a class="link" href="gst-plugins-base-libs-gstmikey.html#GstMIKEYPayload" title="struct GstMIKEYPayload"><span class="type">GstMIKEYPayload</span></a>. </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>]</span></td>
@@ -1165,9 +1216,125 @@
 <div class="refsect3">
 <a name="id-1.2.12.3.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> on success</p>
-<p></p>
 </div>
-<p class="since">Since 1.4</p>
+<p class="since">Since: 1.4</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-mikey-message-remove-payload"></a><h3>gst_mikey_message_remove_payload ()</h3>
+<pre class="programlisting"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
+gst_mikey_message_remove_payload (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstmikey.html#GstMIKEYMessage" title="struct GstMIKEYMessage"><span class="type">GstMIKEYMessage</span></a> *msg</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> idx</code></em>);</pre>
+<p>Remove the payload in <em class="parameter"><code>msg</code></em>
+ at <em class="parameter"><code>idx</code></em>
+</p>
+<div class="refsect3">
+<a name="id-1.2.12.3.7.20.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>msg</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gst-plugins-base-libs-gstmikey.html#GstMIKEYMessage" title="struct GstMIKEYMessage"><span class="type">GstMIKEYMessage</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>idx</p></td>
+<td class="parameter_description"><p>an index</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="id-1.2.12.3.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> on success</p>
+</div>
+<p class="since">Since: 1.4</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-mikey-message-replace-payload"></a><h3>gst_mikey_message_replace_payload ()</h3>
+<pre class="programlisting"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
+gst_mikey_message_replace_payload (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstmikey.html#GstMIKEYMessage" title="struct GstMIKEYMessage"><span class="type">GstMIKEYMessage</span></a> *msg</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> idx</code></em>,
+                                   <em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstmikey.html#GstMIKEYPayload" title="struct GstMIKEYPayload"><span class="type">GstMIKEYPayload</span></a> *payload</code></em>);</pre>
+<p>Replace the payload at <em class="parameter"><code>idx</code></em>
+ in <em class="parameter"><code>msg</code></em>
+ with <em class="parameter"><code>payload</code></em>
+.</p>
+<div class="refsect3">
+<a name="id-1.2.12.3.7.21.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>msg</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gst-plugins-base-libs-gstmikey.html#GstMIKEYMessage" title="struct GstMIKEYMessage"><span class="type">GstMIKEYMessage</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>idx</p></td>
+<td class="parameter_description"><p>an index</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>payload</p></td>
+<td class="parameter_description"><p> a <a class="link" href="gst-plugins-base-libs-gstmikey.html#GstMIKEYPayload" title="struct GstMIKEYPayload"><span class="type">GstMIKEYPayload</span></a>. </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>]</span></td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="id-1.2.12.3.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> on success</p>
+</div>
+<p class="since">Since: 1.4</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-mikey-message-add-payload"></a><h3>gst_mikey_message_add_payload ()</h3>
+<pre class="programlisting"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
+gst_mikey_message_add_payload (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstmikey.html#GstMIKEYMessage" title="struct GstMIKEYMessage"><span class="type">GstMIKEYMessage</span></a> *msg</code></em>,
+                               <em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstmikey.html#GstMIKEYPayload" title="struct GstMIKEYPayload"><span class="type">GstMIKEYPayload</span></a> *payload</code></em>);</pre>
+<p>Add a new payload to <em class="parameter"><code>msg</code></em>
+.</p>
+<div class="refsect3">
+<a name="id-1.2.12.3.7.22.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>msg</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gst-plugins-base-libs-gstmikey.html#GstMIKEYMessage" title="struct GstMIKEYMessage"><span class="type">GstMIKEYMessage</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>payload</p></td>
+<td class="parameter_description"><p> a <a class="link" href="gst-plugins-base-libs-gstmikey.html#GstMIKEYPayload" title="struct GstMIKEYPayload"><span class="type">GstMIKEYPayload</span></a>. </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>]</span></td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="id-1.2.12.3.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> on success</p>
+</div>
+<p class="since">Since: 1.4</p>
 </div>
 <hr>
 <div class="refsect2">
@@ -1177,7 +1344,7 @@
 <p>Make a new <a class="link" href="gst-plugins-base-libs-gstmikey.html#GstMIKEYPayload" title="struct GstMIKEYPayload"><span class="type">GstMIKEYPayload</span></a> with <em class="parameter"><code>type</code></em>
 .</p>
 <div class="refsect3">
-<a name="id-1.2.12.3.7.20.5"></a><h4>Parameters</h4>
+<a name="id-1.2.12.3.7.23.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1192,20 +1359,20 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.12.3.7.20.6"></a><h4>Returns</h4>
+<a name="id-1.2.12.3.7.23.6"></a><h4>Returns</h4>
 <p> a new <a class="link" href="gst-plugins-base-libs-gstmikey.html#GstMIKEYPayload" title="struct GstMIKEYPayload"><span class="type">GstMIKEYPayload</span></a> 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="NULL may be passed as the value in, out, in-out; or as a return value."><span class="acronym">nullable</span></acronym>]</span></p>
 </div>
-<p class="since">Since 1.4</p>
+<p class="since">Since: 1.4</p>
 </div>
 <hr>
 <div class="refsect2">
 <a name="gst-mikey-payload-copy"></a><h3>gst_mikey_payload_copy ()</h3>
 <pre class="programlisting"><a class="link" href="gst-plugins-base-libs-gstmikey.html#GstMIKEYPayload" title="struct GstMIKEYPayload"><span class="returnvalue">GstMIKEYPayload</span></a> *
-gst_mikey_payload_copy (<em class="parameter"><code>const <a class="link" href="gst-plugins-base-libs-gstmikey.html#GstMIKEYPayload" title="struct GstMIKEYPayload"><span class="type">GstMIKEYPayload</span></a> *buf</code></em>);</pre>
+gst_mikey_payload_copy (<em class="parameter"><code>const <a class="link" href="gst-plugins-base-libs-gstmikey.html#GstMIKEYPayload" title="struct GstMIKEYPayload"><span class="type">GstMIKEYPayload</span></a> *payload</code></em>);</pre>
 <p>Create a copy of the given payload.</p>
 <div class="refsect3">
-<a name="id-1.2.12.3.7.21.5"></a><h4>Parameters</h4>
+<a name="id-1.2.12.3.7.24.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1220,12 +1387,263 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.12.3.7.21.6"></a><h4>Returns</h4>
+<a name="id-1.2.12.3.7.24.6"></a><h4>Returns</h4>
 <p> a new copy of <em class="parameter"><code>payload</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>
-<p class="since">Since 1.4</p>
+<p class="since">Since: 1.4</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-mikey-payload-key-data-set-interval"></a><h3>gst_mikey_payload_key_data_set_interval ()</h3>
+<pre class="programlisting"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
+gst_mikey_payload_key_data_set_interval
+                               (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstmikey.html#GstMIKEYPayload" title="struct GstMIKEYPayload"><span class="type">GstMIKEYPayload</span></a> *payload</code></em>,
+                                <em class="parameter"><code><span class="type">guint8</span> vf_len</code></em>,
+                                <em class="parameter"><code>const <span class="type">guint8</span> *vf_data</code></em>,
+                                <em class="parameter"><code><span class="type">guint8</span> vt_len</code></em>,
+                                <em class="parameter"><code>const <span class="type">guint8</span> *vt_data</code></em>);</pre>
+<p>Set the key validity period in the <a class="link" href="gst-plugins-base-libs-gstmikey.html#GST-MIKEY-PT-KEY-DATA:CAPS"><code class="literal">GST_MIKEY_PT_KEY_DATA</code></a> <em class="parameter"><code>payload</code></em>
+.</p>
+<div class="refsect3">
+<a name="id-1.2.12.3.7.25.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>payload</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gst-plugins-base-libs-gstmikey.html#GstMIKEYPayload" title="struct GstMIKEYPayload"><span class="type">GstMIKEYPayload</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>vf_len</p></td>
+<td class="parameter_description"><p>the length of <em class="parameter"><code>vf_data</code></em>
+</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>vf_data</p></td>
+<td class="parameter_description"><p> the Valid From data. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter points to an array of items."><span class="acronym">array</span></acronym> length=vf_data]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>vt_len</p></td>
+<td class="parameter_description"><p>the length of <em class="parameter"><code>vt_data</code></em>
+</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>vt_data</p></td>
+<td class="parameter_description"><p> the Valid To data. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter points to an array of items."><span class="acronym">array</span></acronym> length=vt_len]</span></td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="id-1.2.12.3.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> on success</p>
+</div>
+<p class="since">Since: 1.4</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-mikey-payload-key-data-set-key"></a><h3>gst_mikey_payload_key_data_set_key ()</h3>
+<pre class="programlisting"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
+gst_mikey_payload_key_data_set_key (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstmikey.html#GstMIKEYPayload" title="struct GstMIKEYPayload"><span class="type">GstMIKEYPayload</span></a> *payload</code></em>,
+                                    <em class="parameter"><code><span class="type">GstMIKEYKeyDataType</span> key_type</code></em>,
+                                    <em class="parameter"><code><span class="type">guint16</span> key_len</code></em>,
+                                    <em class="parameter"><code>const <span class="type">guint8</span> *key_data</code></em>);</pre>
+<p>Set <em class="parameter"><code>key_len</code></em>
+ bytes of <em class="parameter"><code>key_data</code></em>
+ of type <em class="parameter"><code>key_type</code></em>
+ as the key for the
+<a class="link" href="gst-plugins-base-libs-gstmikey.html#GST-MIKEY-PT-KEY-DATA:CAPS"><code class="literal">GST_MIKEY_PT_KEY_DATA</code></a> <em class="parameter"><code>payload</code></em>
+.</p>
+<div class="refsect3">
+<a name="id-1.2.12.3.7.26.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>payload</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gst-plugins-base-libs-gstmikey.html#GstMIKEYPayload" title="struct GstMIKEYPayload"><span class="type">GstMIKEYPayload</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>key_type</p></td>
+<td class="parameter_description"><p>a <span class="type">GstMIKEYKeyDataType</span></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>key_len</p></td>
+<td class="parameter_description"><p>the length of <em class="parameter"><code>key_data</code></em>
+</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>key_data</p></td>
+<td class="parameter_description"><p> the key of type <em class="parameter"><code>key_type</code></em>
+. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter points to an array of items."><span class="acronym">array</span></acronym> length=key_len]</span></td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="id-1.2.12.3.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> on success</p>
+</div>
+<p class="since">Since: 1.4</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-mikey-payload-key-data-set-salt"></a><h3>gst_mikey_payload_key_data_set_salt ()</h3>
+<pre class="programlisting"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
+gst_mikey_payload_key_data_set_salt (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstmikey.html#GstMIKEYPayload" title="struct GstMIKEYPayload"><span class="type">GstMIKEYPayload</span></a> *payload</code></em>,
+                                     <em class="parameter"><code><span class="type">guint16</span> salt_len</code></em>,
+                                     <em class="parameter"><code>const <span class="type">guint8</span> *salt_data</code></em>);</pre>
+<p>Set the salt key data. If <em class="parameter"><code>salt_len</code></em>
+ is 0 and <em class="parameter"><code>salt_data</code></em>
+ is <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>, the
+salt data will be removed.</p>
+<div class="refsect3">
+<a name="id-1.2.12.3.7.27.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>payload</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gst-plugins-base-libs-gstmikey.html#GstMIKEYPayload" title="struct GstMIKEYPayload"><span class="type">GstMIKEYPayload</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>salt_len</p></td>
+<td class="parameter_description"><p>the length of <em class="parameter"><code>salt_data</code></em>
+</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>salt_data</p></td>
+<td class="parameter_description"><p> the salt. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter points to an array of items."><span class="acronym">array</span></acronym> length=salt_len][<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.12.3.7.27.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> on success</p>
+</div>
+<p class="since">Since: 1.4</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-mikey-payload-key-data-set-spi"></a><h3>gst_mikey_payload_key_data_set_spi ()</h3>
+<pre class="programlisting"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
+gst_mikey_payload_key_data_set_spi (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstmikey.html#GstMIKEYPayload" title="struct GstMIKEYPayload"><span class="type">GstMIKEYPayload</span></a> *payload</code></em>,
+                                    <em class="parameter"><code><span class="type">guint8</span> spi_len</code></em>,
+                                    <em class="parameter"><code>const <span class="type">guint8</span> *spi_data</code></em>);</pre>
+<p>Set the SPI/MKI validity in the <a class="link" href="gst-plugins-base-libs-gstmikey.html#GST-MIKEY-PT-KEY-DATA:CAPS"><code class="literal">GST_MIKEY_PT_KEY_DATA</code></a> <em class="parameter"><code>payload</code></em>
+.</p>
+<div class="refsect3">
+<a name="id-1.2.12.3.7.28.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>payload</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gst-plugins-base-libs-gstmikey.html#GstMIKEYPayload" title="struct GstMIKEYPayload"><span class="type">GstMIKEYPayload</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>spi_len</p></td>
+<td class="parameter_description"><p>the length of <em class="parameter"><code>spi_data</code></em>
+</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>spi_data</p></td>
+<td class="parameter_description"><p> the SPI/MKI data. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter points to an array of items."><span class="acronym">array</span></acronym> length=spi_len]</span></td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="id-1.2.12.3.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> on success</p>
+</div>
+<p class="since">Since: 1.4</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-mikey-payload-ref"></a><h3>gst_mikey_payload_ref ()</h3>
+<pre class="programlisting"><a class="link" href="gst-plugins-base-libs-gstmikey.html#GstMIKEYPayload" title="struct GstMIKEYPayload"><span class="returnvalue">GstMIKEYPayload</span></a> *
+gst_mikey_payload_ref (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstmikey.html#GstMIKEYPayload" title="struct GstMIKEYPayload"><span class="type">GstMIKEYPayload</span></a> *payload</code></em>);</pre>
+<p>Increase the refcount of this payload.</p>
+<div class="refsect3">
+<a name="id-1.2.12.3.7.29.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>payload</p></td>
+<td class="parameter_description"><p>The payload to refcount</p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="id-1.2.12.3.7.29.6"></a><h4>Returns</h4>
+<p> <em class="parameter"><code>payload</code></em>
+(for convenience when doing assignments). </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.4</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-mikey-payload-unref"></a><h3>gst_mikey_payload_unref ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+gst_mikey_payload_unref (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstmikey.html#GstMIKEYPayload" title="struct GstMIKEYPayload"><span class="type">GstMIKEYPayload</span></a> *payload</code></em>);</pre>
+<p>Decrease the refcount of an payload, freeing it if the refcount reaches 0.</p>
+<div class="refsect3">
+<a name="id-1.2.12.3.7.30.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>payload</p></td>
+<td class="parameter_description"><p> the payload to refcount. </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>]</span></td>
+</tr></tbody>
+</table></div>
+</div>
+<p class="since">Since: 1.4</p>
 </div>
 <hr>
 <div class="refsect2">
@@ -1238,7 +1656,7 @@
  should point to a <a class="link" href="gst-plugins-base-libs-gstmikey.html#GST-MIKEY-PT-KEMAC:CAPS"><code class="literal">GST_MIKEY_PT_KEMAC</code></a>
 payload.</p>
 <div class="refsect3">
-<a name="id-1.2.12.3.7.22.5"></a><h4>Parameters</h4>
+<a name="id-1.2.12.3.7.31.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1265,11 +1683,155 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.12.3.7.22.6"></a><h4>Returns</h4>
+<a name="id-1.2.12.3.7.31.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> on success</p>
-<p></p>
 </div>
-<p class="since">Since 1.4</p>
+<p class="since">Since: 1.4</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-mikey-payload-kemac-add-sub"></a><h3>gst_mikey_payload_kemac_add_sub ()</h3>
+<pre class="programlisting"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
+gst_mikey_payload_kemac_add_sub (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstmikey.html#GstMIKEYPayload" title="struct GstMIKEYPayload"><span class="type">GstMIKEYPayload</span></a> *payload</code></em>,
+                                 <em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstmikey.html#GstMIKEYPayload" title="struct GstMIKEYPayload"><span class="type">GstMIKEYPayload</span></a> *newpay</code></em>);</pre>
+<p>Add a new sub payload to <em class="parameter"><code>payload</code></em>
+.</p>
+<div class="refsect3">
+<a name="id-1.2.12.3.7.32.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>payload</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gst-plugins-base-libs-gstmikey.html#GstMIKEYPayload" title="struct GstMIKEYPayload"><span class="type">GstMIKEYPayload</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>newpay</p></td>
+<td class="parameter_description"><p> a <a class="link" href="gst-plugins-base-libs-gstmikey.html#GstMIKEYPayload" title="struct GstMIKEYPayload"><span class="type">GstMIKEYPayload</span></a> to add. </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>]</span></td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="id-1.2.12.3.7.32.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> on success.</p>
+</div>
+<p class="since">Since: 1.4</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-mikey-payload-kemac-get-n-sub"></a><h3>gst_mikey_payload_kemac_get_n_sub ()</h3>
+<pre class="programlisting"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#guint"><span class="returnvalue">guint</span></a>
+gst_mikey_payload_kemac_get_n_sub (<em class="parameter"><code>const <a class="link" href="gst-plugins-base-libs-gstmikey.html#GstMIKEYPayload" title="struct GstMIKEYPayload"><span class="type">GstMIKEYPayload</span></a> *payload</code></em>);</pre>
+<p>Get the number of sub payloads of <em class="parameter"><code>payload</code></em>
+. <em class="parameter"><code>payload</code></em>
+ should be of type
+<a class="link" href="gst-plugins-base-libs-gstmikey.html#GST-MIKEY-PT-KEMAC:CAPS"><code class="literal">GST_MIKEY_PT_KEMAC</code></a>.</p>
+<div class="refsect3">
+<a name="id-1.2.12.3.7.33.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>payload</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gst-plugins-base-libs-gstmikey.html#GstMIKEYPayload" title="struct GstMIKEYPayload"><span class="type">GstMIKEYPayload</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="id-1.2.12.3.7.33.6"></a><h4>Returns</h4>
+<p> the number of sub payloads in <em class="parameter"><code>payload</code></em>
+</p>
+</div>
+<p class="since">Since: 1.4</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-mikey-payload-kemac-get-sub"></a><h3>gst_mikey_payload_kemac_get_sub ()</h3>
+<pre class="programlisting">const <a class="link" href="gst-plugins-base-libs-gstmikey.html#GstMIKEYPayload" title="struct GstMIKEYPayload"><span class="returnvalue">GstMIKEYPayload</span></a> *
+gst_mikey_payload_kemac_get_sub (<em class="parameter"><code>const <a class="link" href="gst-plugins-base-libs-gstmikey.html#GstMIKEYPayload" title="struct GstMIKEYPayload"><span class="type">GstMIKEYPayload</span></a> *payload</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> idx</code></em>);</pre>
+<p>Get the sub payload of <em class="parameter"><code>payload</code></em>
+ at <em class="parameter"><code>idx</code></em>
+. <em class="parameter"><code>payload</code></em>
+ should be of type
+<a class="link" href="gst-plugins-base-libs-gstmikey.html#GST-MIKEY-PT-KEMAC:CAPS"><code class="literal">GST_MIKEY_PT_KEMAC</code></a>.</p>
+<div class="refsect3">
+<a name="id-1.2.12.3.7.34.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>payload</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gst-plugins-base-libs-gstmikey.html#GstMIKEYPayload" title="struct GstMIKEYPayload"><span class="type">GstMIKEYPayload</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>idx</p></td>
+<td class="parameter_description"><p>an index</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="id-1.2.12.3.7.34.6"></a><h4>Returns</h4>
+<p> the <a class="link" href="gst-plugins-base-libs-gstmikey.html#GstMIKEYPayload" title="struct GstMIKEYPayload"><span class="type">GstMIKEYPayload</span></a> at <em class="parameter"><code>idx</code></em>
+. </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>
+<p class="since">Since: 1.4</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-mikey-payload-kemac-remove-sub"></a><h3>gst_mikey_payload_kemac_remove_sub ()</h3>
+<pre class="programlisting"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
+gst_mikey_payload_kemac_remove_sub (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstmikey.html#GstMIKEYPayload" title="struct GstMIKEYPayload"><span class="type">GstMIKEYPayload</span></a> *payload</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> idx</code></em>);</pre>
+<p>Remove the sub payload at <em class="parameter"><code>idx</code></em>
+ in <em class="parameter"><code>payload</code></em>
+.</p>
+<div class="refsect3">
+<a name="id-1.2.12.3.7.35.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>payload</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gst-plugins-base-libs-gstmikey.html#GstMIKEYPayload" title="struct GstMIKEYPayload"><span class="type">GstMIKEYPayload</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>idx</p></td>
+<td class="parameter_description"><p>the index to remove</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="id-1.2.12.3.7.35.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> on success.</p>
+</div>
+<p class="since">Since: 1.4</p>
 </div>
 <hr>
 <div class="refsect2">
@@ -1284,7 +1846,7 @@
  must be of type
 <a class="link" href="gst-plugins-base-libs-gstmikey.html#GST-MIKEY-PT-PKE:CAPS"><code class="literal">GST_MIKEY_PT_PKE</code></a>.</p>
 <div class="refsect3">
-<a name="id-1.2.12.3.7.23.5"></a><h4>Parameters</h4>
+<a name="id-1.2.12.3.7.36.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1317,11 +1879,10 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.12.3.7.23.6"></a><h4>Returns</h4>
+<a name="id-1.2.12.3.7.36.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> on success</p>
-<p></p>
 </div>
-<p class="since">Since 1.4</p>
+<p class="since">Since: 1.4</p>
 </div>
 <hr>
 <div class="refsect2">
@@ -1334,7 +1895,7 @@
 <p>Add a new PKE payload to <em class="parameter"><code>msg</code></em>
  with the given parameters.</p>
 <div class="refsect3">
-<a name="id-1.2.12.3.7.24.5"></a><h4>Parameters</h4>
+<a name="id-1.2.12.3.7.37.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1367,11 +1928,10 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.12.3.7.24.6"></a><h4>Returns</h4>
+<a name="id-1.2.12.3.7.37.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> on success</p>
-<p></p>
 </div>
-<p class="since">Since 1.4</p>
+<p class="since">Since: 1.4</p>
 </div>
 <hr>
 <div class="refsect2">
@@ -1383,7 +1943,7 @@
 <p>Set the timestamp in a <a class="link" href="gst-plugins-base-libs-gstmikey.html#GST-MIKEY-PT-T:CAPS"><code class="literal">GST_MIKEY_PT_T</code></a> <em class="parameter"><code>payload</code></em>
 .</p>
 <div class="refsect3">
-<a name="id-1.2.12.3.7.25.5"></a><h4>Parameters</h4>
+<a name="id-1.2.12.3.7.38.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1410,11 +1970,10 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.12.3.7.25.6"></a><h4>Returns</h4>
+<a name="id-1.2.12.3.7.38.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> on success</p>
-<p></p>
 </div>
-<p class="since">Since 1.4</p>
+<p class="since">Since: 1.4</p>
 </div>
 <hr>
 <div class="refsect2">
@@ -1426,7 +1985,7 @@
 <p>Add a new T payload to <em class="parameter"><code>msg</code></em>
  with the given parameters.</p>
 <div class="refsect3">
-<a name="id-1.2.12.3.7.26.5"></a><h4>Parameters</h4>
+<a name="id-1.2.12.3.7.39.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1454,11 +2013,10 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.12.3.7.26.6"></a><h4>Returns</h4>
+<a name="id-1.2.12.3.7.39.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> on success</p>
-<p></p>
 </div>
-<p class="since">Since 1.4</p>
+<p class="since">Since: 1.4</p>
 </div>
 <hr>
 <div class="refsect2">
@@ -1469,7 +2027,7 @@
  that contains the current time
 in NTP-UTC format.</p>
 <div class="refsect3">
-<a name="id-1.2.12.3.7.27.5"></a><h4>Parameters</h4>
+<a name="id-1.2.12.3.7.40.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1484,11 +2042,10 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.12.3.7.27.6"></a><h4>Returns</h4>
+<a name="id-1.2.12.3.7.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> on success</p>
-<p></p>
 </div>
-<p class="since">Since 1.4</p>
+<p class="since">Since: 1.4</p>
 </div>
 <hr>
 <div class="refsect2">
@@ -1500,7 +2057,7 @@
 <p>Set the random values in a <a class="link" href="gst-plugins-base-libs-gstmikey.html#GST-MIKEY-PT-RAND:CAPS"><code class="literal">GST_MIKEY_PT_RAND</code></a> <em class="parameter"><code>payload</code></em>
 .</p>
 <div class="refsect3">
-<a name="id-1.2.12.3.7.28.5"></a><h4>Parameters</h4>
+<a name="id-1.2.12.3.7.41.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1528,11 +2085,10 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.12.3.7.28.6"></a><h4>Returns</h4>
+<a name="id-1.2.12.3.7.41.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> on success</p>
-<p></p>
 </div>
-<p class="since">Since 1.4</p>
+<p class="since">Since: 1.4</p>
 </div>
 <hr>
 <div class="refsect2">
@@ -1544,7 +2100,7 @@
 <p>Add a new RAND payload to <em class="parameter"><code>msg</code></em>
  with the given parameters.</p>
 <div class="refsect3">
-<a name="id-1.2.12.3.7.29.5"></a><h4>Parameters</h4>
+<a name="id-1.2.12.3.7.42.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1572,11 +2128,10 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.12.3.7.29.6"></a><h4>Returns</h4>
+<a name="id-1.2.12.3.7.42.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> on success</p>
-<p></p>
 </div>
-<p class="since">Since 1.4</p>
+<p class="since">Since: 1.4</p>
 </div>
 <hr>
 <div class="refsect2">
@@ -1588,7 +2143,7 @@
  with <em class="parameter"><code>len</code></em>
  random bytes.</p>
 <div class="refsect3">
-<a name="id-1.2.12.3.7.30.5"></a><h4>Parameters</h4>
+<a name="id-1.2.12.3.7.43.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1610,11 +2165,10 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.12.3.7.30.6"></a><h4>Returns</h4>
+<a name="id-1.2.12.3.7.43.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> on success</p>
-<p></p>
 </div>
-<p class="since">Since 1.4</p>
+<p class="since">Since: 1.4</p>
 </div>
 <hr>
 <div class="refsect2">
@@ -1626,7 +2180,7 @@
 <p>Set the Security Policy parameters for <em class="parameter"><code>payload</code></em>
 .</p>
 <div class="refsect3">
-<a name="id-1.2.12.3.7.31.5"></a><h4>Parameters</h4>
+<a name="id-1.2.12.3.7.44.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1653,11 +2207,10 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.12.3.7.31.6"></a><h4>Returns</h4>
+<a name="id-1.2.12.3.7.44.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> on success</p>
-<p></p>
 </div>
-<p class="since">Since 1.4</p>
+<p class="since">Since: 1.4</p>
 </div>
 <hr>
 <div class="refsect2">
@@ -1668,7 +2221,7 @@
 <em class="parameter"><code>payload</code></em>
 .</p>
 <div class="refsect3">
-<a name="id-1.2.12.3.7.32.5"></a><h4>Parameters</h4>
+<a name="id-1.2.12.3.7.45.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1683,12 +2236,11 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.12.3.7.32.6"></a><h4>Returns</h4>
+<a name="id-1.2.12.3.7.45.6"></a><h4>Returns</h4>
 <p> the number of parameters in <em class="parameter"><code>payload</code></em>
 </p>
-<p></p>
 </div>
-<p class="since">Since 1.4</p>
+<p class="since">Since: 1.4</p>
 </div>
 <hr>
 <div class="refsect2">
@@ -1701,7 +2253,7 @@
 at <em class="parameter"><code>idx</code></em>
 .</p>
 <div class="refsect3">
-<a name="id-1.2.12.3.7.33.5"></a><h4>Parameters</h4>
+<a name="id-1.2.12.3.7.46.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1723,13 +2275,12 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.12.3.7.33.6"></a><h4>Returns</h4>
+<a name="id-1.2.12.3.7.46.6"></a><h4>Returns</h4>
 <p> the <a class="link" href="gst-plugins-base-libs-gstmikey.html#GstMIKEYPayloadSPParam" title="GstMIKEYPayloadSPParam"><span class="type">GstMIKEYPayloadSPParam</span></a> at <em class="parameter"><code>idx</code></em>
 in <em class="parameter"><code>payload</code></em>
 </p>
-<p></p>
 </div>
-<p class="since">Since 1.4</p>
+<p class="since">Since: 1.4</p>
 </div>
 <hr>
 <div class="refsect2">
@@ -1746,7 +2297,7 @@
 and <em class="parameter"><code>val</code></em>
 .</p>
 <div class="refsect3">
-<a name="id-1.2.12.3.7.34.5"></a><h4>Parameters</h4>
+<a name="id-1.2.12.3.7.47.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1779,11 +2330,10 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.12.3.7.34.6"></a><h4>Returns</h4>
+<a name="id-1.2.12.3.7.47.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> on success</p>
-<p></p>
 </div>
-<p class="since">Since 1.4</p>
+<p class="since">Since: 1.4</p>
 </div>
 <hr>
 <div class="refsect2">
@@ -1796,7 +2346,7 @@
  at <em class="parameter"><code>idx</code></em>
 .</p>
 <div class="refsect3">
-<a name="id-1.2.12.3.7.35.5"></a><h4>Parameters</h4>
+<a name="id-1.2.12.3.7.48.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1818,11 +2368,10 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.12.3.7.35.6"></a><h4>Returns</h4>
+<a name="id-1.2.12.3.7.48.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> on success</p>
-<p></p>
 </div>
-<p class="since">Since 1.4</p>
+<p class="since">Since: 1.4</p>
 </div>
 </div>
 <div class="refsect1">
@@ -1910,8 +2459,6 @@
 <div class="refsect2">
 <a name="GstMIKEYMessage"></a><h3>struct GstMIKEYMessage</h3>
 <pre class="programlisting">struct GstMIKEYMessage {
-  GstMiniObject mini_object;
-
   guint8 version;
   GstMIKEYType type;
   gboolean V;
@@ -1933,11 +2480,6 @@
 </colgroup>
 <tbody>
 <tr>
-<td class="struct_member_name"><p><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstMiniObject.html#GstMiniObject"><span class="type">GstMiniObject</span></a> <em class="structfield"><code><a name="GstMIKEYMessage.mini-object"></a>mini_object</code></em>;</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
 <td class="struct_member_name"><p><span class="type">guint8</span> <em class="structfield"><code><a name="GstMIKEYMessage.version"></a>version</code></em>;</p></td>
 <td class="struct_member_description"><p>the version</p></td>
 <td class="struct_member_annotations"> </td>
@@ -2190,8 +2732,6 @@
 <div class="refsect2">
 <a name="GstMIKEYPayload"></a><h3>struct GstMIKEYPayload</h3>
 <pre class="programlisting">struct GstMIKEYPayload {
-  GstMiniObject mini_object;
-
   GstMIKEYPayloadType type;
   guint len;
 };
@@ -2207,11 +2747,6 @@
 </colgroup>
 <tbody>
 <tr>
-<td class="struct_member_name"><p><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstMiniObject.html#GstMiniObject"><span class="type">GstMiniObject</span></a> <em class="structfield"><code><a name="GstMIKEYPayload.mini-object"></a>mini_object</code></em>;</p></td>
-<td> </td>
-<td> </td>
-</tr>
-<tr>
 <td class="struct_member_name"><p><a class="link" href="gst-plugins-base-libs-gstmikey.html#GstMIKEYPayloadType" title="enum GstMIKEYPayloadType"><span class="type">GstMIKEYPayloadType</span></a> <em class="structfield"><code><a name="GstMIKEYPayload.type"></a>type</code></em>;</p></td>
 <td class="struct_member_description"><p>the payload type</p></td>
 <td class="struct_member_annotations"> </td>
@@ -2332,8 +2867,8 @@
 </tr>
 <tr>
 <td class="struct_member_name"><p><a href="https://developer.gnome.org/glib/unstable/glib-Arrays.html#GArray"><span class="type">GArray</span></a> *<em class="structfield"><code><a name="GstMIKEYPayloadKEMAC.subpayloads"></a>subpayloads</code></em>;</p></td>
-<td> </td>
-<td> </td>
+<td class="struct_member_description"><p>the subpayloads</p></td>
+<td class="struct_member_annotations"> </td>
 </tr>
 </tbody>
 </table></div>
@@ -2760,7 +3295,6 @@
 </div>
 </div>
 <div class="footer">
-<hr>
-          Generated by GTK-Doc V1.21</div>
+<hr>Generated by GTK-Doc V1.24</div>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/libs/html/gst-plugins-base-libs-gstnavigation.html b/docs/libs/html/gst-plugins-base-libs-gstnavigation.html
index 7296d01..e659b84 100644
--- a/docs/libs/html/gst-plugins-base-libs-gstnavigation.html
+++ b/docs/libs/html/gst-plugins-base-libs-gstnavigation.html
@@ -2,13 +2,13 @@
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>GStreamer Base Plugins 1.0 Library Reference Manual: gstnavigation</title>
+<title>gstnavigation: GStreamer Base 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 Base Plugins 1.0 Library Reference Manual">
 <link rel="up" href="gstreamer-video.html" title="Video Library">
 <link rel="prev" href="gst-plugins-base-libs-gstvideoutils.html" title="gstvideoutils">
 <link rel="next" href="gstreamer-libs-hierarchy.html" title="Part II. Object Hierarchy">
-<meta name="generator" content="GTK-Doc V1.21 (XML mode)">
+<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">
@@ -134,6 +134,14 @@
 <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstMessage.html"><span class="returnvalue">GstMessage</span></a> *
 </td>
 <td class="function_name">
+<a class="link" href="gst-plugins-base-libs-gstnavigation.html#gst-navigation-message-new-event" title="gst_navigation_message_new_event ()">gst_navigation_message_new_event</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/GstMessage.html"><span class="returnvalue">GstMessage</span></a> *
+</td>
+<td class="function_name">
 <a class="link" href="gst-plugins-base-libs-gstnavigation.html#gst-navigation-message-new-mouse-over" title="gst_navigation_message_new_mouse_over ()">gst_navigation_message_new_mouse_over</a> <span class="c_punctuation">()</span>
 </td>
 </tr>
@@ -142,7 +150,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-base-libs-gstnavigation.html#gst-navigation-message-parse-mouse-over" title="gst_navigation_message_parse_mouse_over ()">gst_navigation_message_parse_mouse_over</a> <span class="c_punctuation">()</span>
+<a class="link" href="gst-plugins-base-libs-gstnavigation.html#gst-navigation-message-parse-angles-changed" title="gst_navigation_message_parse_angles_changed ()">gst_navigation_message_parse_angles_changed</a> <span class="c_punctuation">()</span>
 </td>
 </tr>
 <tr>
@@ -150,7 +158,15 @@
 <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-base-libs-gstnavigation.html#gst-navigation-message-parse-angles-changed" title="gst_navigation_message_parse_angles_changed ()">gst_navigation_message_parse_angles_changed</a> <span class="c_punctuation">()</span>
+<a class="link" href="gst-plugins-base-libs-gstnavigation.html#gst-navigation-message-parse-event" title="gst_navigation_message_parse_event ()">gst_navigation_message_parse_event</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-base-libs-gstnavigation.html#gst-navigation-message-parse-mouse-over" title="gst_navigation_message_parse_mouse_over ()">gst_navigation_message_parse_mouse_over</a> <span class="c_punctuation">()</span>
 </td>
 </tr>
 <tr>
@@ -349,7 +365,7 @@
                                <em class="parameter"><code>const <span class="type">char</span> *event</code></em>,
                                <em class="parameter"><code>const <span class="type">char</span> *key</code></em>);</pre>
 <div class="refsect3">
-<a name="id-1.2.15.16.9.3.4"></a><h4>Parameters</h4>
+<a name="id-1.2.15.20.9.3.4"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -392,7 +408,7 @@
 usually the size in pixels of the window associated with the element
 implementing the <a class="link" href="gst-plugins-base-libs-gstnavigation.html#GstNavigation"><span class="type">GstNavigation</span></a> interface.</p>
 <div class="refsect3">
-<a name="id-1.2.15.16.9.4.5"></a><h4>Parameters</h4>
+<a name="id-1.2.15.20.9.4.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -439,7 +455,7 @@
                              <em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstnavigation.html#GstNavigationCommand" title="enum GstNavigationCommand"><span class="type">GstNavigationCommand</span></a> command</code></em>);</pre>
 <p>Sends the indicated command to the navigation interface.</p>
 <div class="refsect3">
-<a name="id-1.2.15.16.9.5.5"></a><h4>Parameters</h4>
+<a name="id-1.2.15.20.9.5.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -470,7 +486,7 @@
 <p>Inspect a <a class="link" href="gst-plugins-base-libs-gstnavigation.html#GstNavigation"><span class="type">GstNavigation</span></a> command event and retrieve the enum value of the
 associated command.</p>
 <div class="refsect3">
-<a name="id-1.2.15.16.9.6.5"></a><h4>Parameters</h4>
+<a name="id-1.2.15.20.9.6.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -493,9 +509,8 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.15.16.9.6.6"></a><h4>Returns</h4>
+<a name="id-1.2.15.20.9.6.6"></a><h4>Returns</h4>
 <p> TRUE if the navigation command could be extracted, otherwise FALSE.</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -505,7 +520,7 @@
 gst_navigation_event_parse_key_event (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstEvent.html"><span class="type">GstEvent</span></a> *event</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> **key</code></em>);</pre>
 <div class="refsect3">
-<a name="id-1.2.15.16.9.7.4"></a><h4>Parameters</h4>
+<a name="id-1.2.15.20.9.7.4"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -542,7 +557,7 @@
 a mouse button release event. Determine which type the event is using
 <code class="function">gst_navigation_event_get_type()</code> to retrieve the <a class="link" href="gst-plugins-base-libs-gstnavigation.html#GstNavigationEventType" title="enum GstNavigationEventType"><span class="type">GstNavigationEventType</span></a>.</p>
 <div class="refsect3">
-<a name="id-1.2.15.16.9.8.5"></a><h4>Parameters</h4>
+<a name="id-1.2.15.20.9.8.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -577,10 +592,9 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.15.16.9.8.6"></a><h4>Returns</h4>
+<a name="id-1.2.15.20.9.8.6"></a><h4>Returns</h4>
 <p> TRUE if the button number and both coordinates could be extracted,
 otherwise FALSE.</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -594,7 +608,7 @@
 <p>Inspect a <a class="link" href="gst-plugins-base-libs-gstnavigation.html#GstNavigation"><span class="type">GstNavigation</span></a> mouse movement event and extract the coordinates
 of the event.</p>
 <div class="refsect3">
-<a name="id-1.2.15.16.9.9.5"></a><h4>Parameters</h4>
+<a name="id-1.2.15.20.9.9.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -621,9 +635,8 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.15.16.9.9.6"></a><h4>Returns</h4>
+<a name="id-1.2.15.20.9.9.6"></a><h4>Returns</h4>
 <p> TRUE if both coordinates could be extracted, otherwise FALSE.</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -634,7 +647,7 @@
 <p>Check a bus message to see if it is a <a class="link" href="gst-plugins-base-libs-gstnavigation.html#GstNavigation"><span class="type">GstNavigation</span></a> event, and return
 the <a class="link" href="gst-plugins-base-libs-gstnavigation.html#GstNavigationMessageType" title="enum GstNavigationMessageType"><span class="type">GstNavigationMessageType</span></a> identifying the type of the message if so.</p>
 <div class="refsect3">
-<a name="id-1.2.15.16.9.10.5"></a><h4>Parameters</h4>
+<a name="id-1.2.15.20.9.10.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -649,11 +662,10 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.15.16.9.10.6"></a><h4>Returns</h4>
+<a name="id-1.2.15.20.9.10.6"></a><h4>Returns</h4>
 <p> The type of the <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstMessage.html"><span class="type">GstMessage</span></a>, or
 <a class="link" href="gst-plugins-base-libs-gstnavigation.html#GST-NAVIGATION-MESSAGE-INVALID:CAPS"><span class="type">GST_NAVIGATION_MESSAGE_INVALID</span></a> if the message is not a <a class="link" href="gst-plugins-base-libs-gstnavigation.html#GstNavigation"><span class="type">GstNavigation</span></a>
 notification.</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -669,7 +681,7 @@
 that the current angle, or current number of angles available in a
 multiangle video has changed.</p>
 <div class="refsect3">
-<a name="id-1.2.15.16.9.11.5"></a><h4>Parameters</h4>
+<a name="id-1.2.15.20.9.11.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -696,9 +708,8 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.15.16.9.11.6"></a><h4>Returns</h4>
+<a name="id-1.2.15.20.9.11.6"></a><h4>Returns</h4>
 <p> The new <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstMessage.html"><span class="type">GstMessage</span></a>.</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -710,7 +721,7 @@
 <p>Creates a new <a class="link" href="gst-plugins-base-libs-gstnavigation.html#GstNavigation"><span class="type">GstNavigation</span></a> message with type
 <a class="link" href="gst-plugins-base-libs-gstnavigation.html#GST-NAVIGATION-MESSAGE-COMMANDS-CHANGED:CAPS"><span class="type">GST_NAVIGATION_MESSAGE_COMMANDS_CHANGED</span></a></p>
 <div class="refsect3">
-<a name="id-1.2.15.16.9.12.5"></a><h4>Parameters</h4>
+<a name="id-1.2.15.20.9.12.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -725,13 +736,48 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.15.16.9.12.6"></a><h4>Returns</h4>
+<a name="id-1.2.15.20.9.12.6"></a><h4>Returns</h4>
 <p> The new <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstMessage.html"><span class="type">GstMessage</span></a>.</p>
-<p></p>
 </div>
 </div>
 <hr>
 <div class="refsect2">
+<a name="gst-navigation-message-new-event"></a><h3>gst_navigation_message_new_event ()</h3>
+<pre class="programlisting"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstMessage.html"><span class="returnvalue">GstMessage</span></a> *
+gst_navigation_message_new_event (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstObject.html"><span class="type">GstObject</span></a> *src</code></em>,
+                                  <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstEvent.html"><span class="type">GstEvent</span></a> *event</code></em>);</pre>
+<p>Creates a new <a class="link" href="gst-plugins-base-libs-gstnavigation.html#GstNavigation"><span class="type">GstNavigation</span></a> message with type
+<a class="link" href="gst-plugins-base-libs-gstnavigation.html#GST-NAVIGATION-MESSAGE-EVENT:CAPS"><span class="type">GST_NAVIGATION_MESSAGE_EVENT</span></a>.</p>
+<div class="refsect3">
+<a name="id-1.2.15.20.9.13.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>src</p></td>
+<td class="parameter_description"><p>A <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstObject.html"><span class="type">GstObject</span></a> to set as source of the new message.</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>event</p></td>
+<td class="parameter_description"><p> A navigation <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstEvent.html"><span class="type">GstEvent</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 class="refsect3">
+<a name="id-1.2.15.20.9.13.6"></a><h4>Returns</h4>
+<p> The new <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstMessage.html"><span class="type">GstMessage</span></a>.</p>
+</div>
+<p class="since">Since: 1.6</p>
+</div>
+<hr>
+<div class="refsect2">
 <a name="gst-navigation-message-new-mouse-over"></a><h3>gst_navigation_message_new_mouse_over ()</h3>
 <pre class="programlisting"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstMessage.html"><span class="returnvalue">GstMessage</span></a> *
 gst_navigation_message_new_mouse_over (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstObject.html"><span class="type">GstObject</span></a> *src</code></em>,
@@ -739,7 +785,7 @@
 <p>Creates a new <a class="link" href="gst-plugins-base-libs-gstnavigation.html#GstNavigation"><span class="type">GstNavigation</span></a> message with type
 <a class="link" href="gst-plugins-base-libs-gstnavigation.html#GST-NAVIGATION-MESSAGE-MOUSE-OVER:CAPS"><span class="type">GST_NAVIGATION_MESSAGE_MOUSE_OVER</span></a>.</p>
 <div class="refsect3">
-<a name="id-1.2.15.16.9.13.5"></a><h4>Parameters</h4>
+<a name="id-1.2.15.20.9.14.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -762,48 +808,8 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.15.16.9.13.6"></a><h4>Returns</h4>
+<a name="id-1.2.15.20.9.14.6"></a><h4>Returns</h4>
 <p> The new <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstMessage.html"><span class="type">GstMessage</span></a>.</p>
-<p></p>
-</div>
-</div>
-<hr>
-<div class="refsect2">
-<a name="gst-navigation-message-parse-mouse-over"></a><h3>gst_navigation_message_parse_mouse_over ()</h3>
-<pre class="programlisting"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-gst_navigation_message_parse_mouse_over
-                               (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstMessage.html"><span class="type">GstMessage</span></a> *message</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>
-<p>Parse a <a class="link" href="gst-plugins-base-libs-gstnavigation.html#GstNavigation"><span class="type">GstNavigation</span></a> message of type <a class="link" href="gst-plugins-base-libs-gstnavigation.html#GST-NAVIGATION-MESSAGE-MOUSE-OVER:CAPS"><span class="type">GST_NAVIGATION_MESSAGE_MOUSE_OVER</span></a>
-and extract the active/inactive flag. If the mouse over event is marked
-active, it indicates that the mouse is over a clickable area.</p>
-<div class="refsect3">
-<a name="id-1.2.15.16.9.14.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>message</p></td>
-<td class="parameter_description"><p>A <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstMessage.html"><span class="type">GstMessage</span></a> to inspect.</p></td>
-<td class="parameter_annotations"> </td>
-</tr>
-<tr>
-<td class="parameter_name"><p>active</p></td>
-<td class="parameter_description"><p>A pointer to a gboolean to receive the active/inactive state,
-or NULL.</p></td>
-<td class="parameter_annotations"> </td>
-</tr>
-</tbody>
-</table></div>
-</div>
-<div class="refsect3">
-<a name="id-1.2.15.16.9.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 the message could be successfully parsed. <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> if not.</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -819,7 +825,7 @@
  and <em class="parameter"><code>n_angles</code></em>
  parameters.</p>
 <div class="refsect3">
-<a name="id-1.2.15.16.9.15.5"></a><h4>Parameters</h4>
+<a name="id-1.2.15.20.9.15.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -847,9 +853,85 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.15.16.9.15.6"></a><h4>Returns</h4>
+<a name="id-1.2.15.20.9.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 the message could be successfully parsed. <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> if not.</p>
-<p></p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-navigation-message-parse-event"></a><h3>gst_navigation_message_parse_event ()</h3>
+<pre class="programlisting"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
+gst_navigation_message_parse_event (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstMessage.html"><span class="type">GstMessage</span></a> *message</code></em>,
+                                    <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstEvent.html"><span class="type">GstEvent</span></a> **event</code></em>);</pre>
+<p>Parse a <a class="link" href="gst-plugins-base-libs-gstnavigation.html#GstNavigation"><span class="type">GstNavigation</span></a> message of type <a class="link" href="gst-plugins-base-libs-gstnavigation.html#GST-NAVIGATION-MESSAGE-EVENT:CAPS"><span class="type">GST_NAVIGATION_MESSAGE_EVENT</span></a>
+and extract contained <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstEvent.html"><span class="type">GstEvent</span></a>. The caller must unref the <em class="parameter"><code>event</code></em>
+ when done
+with it.</p>
+<div class="refsect3">
+<a name="id-1.2.15.20.9.16.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>message</p></td>
+<td class="parameter_description"><p>A <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstMessage.html"><span class="type">GstMessage</span></a> to inspect.</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>event</p></td>
+<td class="parameter_description"><p> a pointer to a <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstEvent.html"><span class="type">GstEvent</span></a> to receive the
+contained navigation event. </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="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="id-1.2.15.20.9.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 the message could be successfully parsed. <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> if not.</p>
+</div>
+<p class="since">Since: 1.6</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-navigation-message-parse-mouse-over"></a><h3>gst_navigation_message_parse_mouse_over ()</h3>
+<pre class="programlisting"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
+gst_navigation_message_parse_mouse_over
+                               (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstMessage.html"><span class="type">GstMessage</span></a> *message</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>
+<p>Parse a <a class="link" href="gst-plugins-base-libs-gstnavigation.html#GstNavigation"><span class="type">GstNavigation</span></a> message of type <a class="link" href="gst-plugins-base-libs-gstnavigation.html#GST-NAVIGATION-MESSAGE-MOUSE-OVER:CAPS"><span class="type">GST_NAVIGATION_MESSAGE_MOUSE_OVER</span></a>
+and extract the active/inactive flag. If the mouse over event is marked
+active, it indicates that the mouse is over a clickable area.</p>
+<div class="refsect3">
+<a name="id-1.2.15.20.9.17.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>message</p></td>
+<td class="parameter_description"><p>A <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstMessage.html"><span class="type">GstMessage</span></a> to inspect.</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>active</p></td>
+<td class="parameter_description"><p>A pointer to a gboolean to receive the active/inactive state,
+or NULL.</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="id-1.2.15.20.9.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 the message could be successfully parsed. <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> if not.</p>
 </div>
 </div>
 <hr>
@@ -861,9 +943,8 @@
 query the pipeline for the set of currently available angles, which may be
 greater than one in a multiangle video.</p>
 <div class="refsect3">
-<a name="id-1.2.15.16.9.16.5"></a><h4>Returns</h4>
+<a name="id-1.2.15.20.9.18.5"></a><h4>Returns</h4>
 <p> The new query.</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -874,7 +955,7 @@
 <p>Inspect a <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstQuery.html"><span class="type">GstQuery</span></a> and return the <a class="link" href="gst-plugins-base-libs-gstnavigation.html#GstNavigationQueryType" title="enum GstNavigationQueryType"><span class="type">GstNavigationQueryType</span></a> associated with
 it if it is a <a class="link" href="gst-plugins-base-libs-gstnavigation.html#GstNavigation"><span class="type">GstNavigation</span></a> query.</p>
 <div class="refsect3">
-<a name="id-1.2.15.16.9.17.5"></a><h4>Parameters</h4>
+<a name="id-1.2.15.20.9.19.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -889,10 +970,9 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.15.16.9.17.6"></a><h4>Returns</h4>
+<a name="id-1.2.15.20.9.19.6"></a><h4>Returns</h4>
 <p> The <a class="link" href="gst-plugins-base-libs-gstnavigation.html#GstNavigationQueryType" title="enum GstNavigationQueryType"><span class="type">GstNavigationQueryType</span></a> of the query, or
 <a class="link" href="gst-plugins-base-libs-gstnavigation.html#GST-NAVIGATION-QUERY-INVALID:CAPS"><span class="type">GST_NAVIGATION_QUERY_INVALID</span></a></p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -903,9 +983,8 @@
 <p>Create a new <a class="link" href="gst-plugins-base-libs-gstnavigation.html#GstNavigation"><span class="type">GstNavigation</span></a> commands query. When executed, it will
 query the pipeline for the set of currently available commands.</p>
 <div class="refsect3">
-<a name="id-1.2.15.16.9.18.5"></a><h4>Returns</h4>
+<a name="id-1.2.15.20.9.20.5"></a><h4>Returns</h4>
 <p> The new query.</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -922,7 +1001,7 @@
 angles into the <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> pointed to by the <em class="parameter"><code>n_angles</code></em>
  variable.</p>
 <div class="refsect3">
-<a name="id-1.2.15.16.9.19.5"></a><h4>Parameters</h4>
+<a name="id-1.2.15.20.9.21.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -951,9 +1030,8 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.15.16.9.19.6"></a><h4>Returns</h4>
+<a name="id-1.2.15.20.9.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 the query could be successfully parsed. <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> if not.</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -966,7 +1044,7 @@
 <p>Parse the number of commands in the <a class="link" href="gst-plugins-base-libs-gstnavigation.html#GstNavigation"><span class="type">GstNavigation</span></a> commands <em class="parameter"><code>query</code></em>
 .</p>
 <div class="refsect3">
-<a name="id-1.2.15.16.9.20.5"></a><h4>Parameters</h4>
+<a name="id-1.2.15.20.9.22.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -988,9 +1066,8 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.15.16.9.20.6"></a><h4>Returns</h4>
+<a name="id-1.2.15.20.9.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 the query could be successfully parsed. <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> if not.</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -1009,7 +1086,7 @@
  will be
 set to <a class="link" href="gst-plugins-base-libs-gstnavigation.html#GST-NAVIGATION-COMMAND-INVALID:CAPS"><span class="type">GST_NAVIGATION_COMMAND_INVALID</span></a>.</p>
 <div class="refsect3">
-<a name="id-1.2.15.16.9.21.5"></a><h4>Parameters</h4>
+<a name="id-1.2.15.20.9.23.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1036,9 +1113,8 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.15.16.9.21.6"></a><h4>Returns</h4>
+<a name="id-1.2.15.20.9.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 the query could be successfully parsed. <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> if not.</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -1051,7 +1127,7 @@
 <p>Set the <a class="link" href="gst-plugins-base-libs-gstnavigation.html#GstNavigation"><span class="type">GstNavigation</span></a> angles query result field in <em class="parameter"><code>query</code></em>
 .</p>
 <div class="refsect3">
-<a name="id-1.2.15.16.9.22.5"></a><h4>Parameters</h4>
+<a name="id-1.2.15.20.9.24.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1090,7 +1166,7 @@
 of commands passed must be equal to <em class="parameter"><code>n_commands</code></em>
 .</p>
 <div class="refsect3">
-<a name="id-1.2.15.16.9.23.5"></a><h4>Parameters</h4>
+<a name="id-1.2.15.20.9.25.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1131,7 +1207,7 @@
 of commands passed must be equal to <em class="parameter"><code>n_commands</code></em>
 .</p>
 <div class="refsect3">
-<a name="id-1.2.15.16.9.24.5"></a><h4>Parameters</h4>
+<a name="id-1.2.15.20.9.26.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1179,7 +1255,7 @@
 </pre>
 <p>Navigation interface.</p>
 <div class="refsect3">
-<a name="id-1.2.15.16.10.3.5"></a><h4>Members</h4>
+<a name="id-1.2.15.20.10.3.5"></a><h4>Members</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="300px" class="struct_members_name">
@@ -1223,7 +1299,7 @@
    GST_NAVIGATION_COMMAND_DVD_CHAPTER_MENU    = <em class="parameter"><code>GST_NAVIGATION_COMMAND_MENU7</code></em>
 </p>
 <div class="refsect3">
-<a name="id-1.2.15.16.10.4.5"></a><h4>Members</h4>
+<a name="id-1.2.15.20.10.4.5"></a><h4>Members</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="300px" class="enum_members_name">
@@ -1360,7 +1436,7 @@
 <p>Enum values for the various events that an element implementing the
 GstNavigation interface might send up the pipeline.</p>
 <div class="refsect3">
-<a name="id-1.2.15.16.10.5.4"></a><h4>Members</h4>
+<a name="id-1.2.15.20.10.5.4"></a><h4>Members</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="300px" class="enum_members_name">
@@ -1437,7 +1513,7 @@
 <p>A set of notifications that may be received on the bus when navigation
 related status changes.</p>
 <div class="refsect3">
-<a name="id-1.2.15.16.10.6.4"></a><h4>Members</h4>
+<a name="id-1.2.15.20.10.6.4"></a><h4>Members</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="300px" class="enum_members_name">
@@ -1479,6 +1555,14 @@
 </td>
 <td class="enum_member_annotations"> </td>
 </tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-NAVIGATION-MESSAGE-EVENT:CAPS"></a>GST_NAVIGATION_MESSAGE_EVENT</p></td>
+<td class="enum_member_description">
+<p>Sent when a navigation event was not handled
+by any element in the pipeline (Since 1.6)</p>
+</td>
+<td class="enum_member_annotations"> </td>
+</tr>
 </tbody>
 </table></div>
 </div>
@@ -1488,7 +1572,7 @@
 <a name="GstNavigationQueryType"></a><h3>enum GstNavigationQueryType</h3>
 <p>Tyoes of navigation interface queries.</p>
 <div class="refsect3">
-<a name="id-1.2.15.16.10.7.4"></a><h4>Members</h4>
+<a name="id-1.2.15.20.10.7.4"></a><h4>Members</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="300px" class="enum_members_name">
@@ -1566,7 +1650,6 @@
 </div>
 </div>
 <div class="footer">
-<hr>
-          Generated by GTK-Doc V1.21</div>
+<hr>Generated by GTK-Doc V1.24</div>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/libs/html/gst-plugins-base-libs-gstpbutils.html b/docs/libs/html/gst-plugins-base-libs-gstpbutils.html
index 226beca..ad14f17 100644
--- a/docs/libs/html/gst-plugins-base-libs-gstpbutils.html
+++ b/docs/libs/html/gst-plugins-base-libs-gstpbutils.html
@@ -2,13 +2,13 @@
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>GStreamer Base Plugins 1.0 Library Reference Manual: gstpbutils</title>
+<title>gstpbutils: GStreamer Base 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 Base Plugins 1.0 Library Reference Manual">
 <link rel="up" href="gstreamer-base-utils.html" title="Base Utils Library">
 <link rel="prev" href="gstreamer-base-utils.html" title="Base Utils Library">
 <link rel="next" href="gst-plugins-base-libs-gstpluginsbaseversion.html" title="gstpluginsbaseversion">
-<meta name="generator" content="GTK-Doc V1.21 (XML mode)">
+<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">
@@ -110,7 +110,6 @@
 </div>
 </div>
 <div class="footer">
-<hr>
-          Generated by GTK-Doc V1.21</div>
+<hr>Generated by GTK-Doc V1.24</div>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/libs/html/gst-plugins-base-libs-gstpbutilscodecutils.html b/docs/libs/html/gst-plugins-base-libs-gstpbutilscodecutils.html
index fafadf2..d65c4bb 100644
--- a/docs/libs/html/gst-plugins-base-libs-gstpbutilscodecutils.html
+++ b/docs/libs/html/gst-plugins-base-libs-gstpbutilscodecutils.html
@@ -2,13 +2,13 @@
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>GStreamer Base Plugins 1.0 Library Reference Manual: gstpbutilscodecutils</title>
+<title>gstpbutilscodecutils: GStreamer Base 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 Base Plugins 1.0 Library Reference Manual">
 <link rel="up" href="gstreamer-base-utils.html" title="Base Utils Library">
 <link rel="prev" href="gst-plugins-base-libs-gstpluginsbaseversion.html" title="gstpluginsbaseversion">
 <link rel="next" href="gst-plugins-base-libs-gstpbutilsdescriptions.html" title="gstpbutilsdescriptions">
-<meta name="generator" content="GTK-Doc V1.21 (XML mode)">
+<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">
@@ -212,7 +212,6 @@
 <a name="id-1.2.14.5.6.2.6"></a><h4>Returns</h4>
 <p> The sample rate if <em class="parameter"><code>sr_idx</code></em>
 is valid, 0 otherwise.</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -241,7 +240,6 @@
 <a name="id-1.2.14.5.6.3.6"></a><h4>Returns</h4>
 <p> The AAC index for this sample rate, -1 if the rate is not a
 valid AAC sample rate.</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -286,7 +284,6 @@
 <a name="id-1.2.14.5.6.4.7"></a><h4>Returns</h4>
 <p> The profile as a const string and <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> if the profile could not be
 determined.</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -345,7 +342,6 @@
 <a name="id-1.2.14.5.6.5.9"></a><h4>Returns</h4>
 <p> The level as a const string and <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> if the level could not be
 determined.</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -398,7 +394,6 @@
 <div class="refsect3">
 <a name="id-1.2.14.5.6.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 the level and profile could be set, <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> otherwise.</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -448,7 +443,6 @@
 <div class="refsect3">
 <a name="id-1.2.14.5.6.7.7"></a><h4>Returns</h4>
 <p> The profile as a const string, or <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> if there is an error.</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -486,7 +480,6 @@
 <div class="refsect3">
 <a name="id-1.2.14.5.6.8.6"></a><h4>Returns</h4>
 <p> The level as a const string, or <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> if there is an error.</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -533,7 +526,6 @@
 <div class="refsect3">
 <a name="id-1.2.14.5.6.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 the level and profile could be set, <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> otherwise.</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -560,7 +552,6 @@
 <div class="refsect3">
 <a name="id-1.2.14.5.6.10.6"></a><h4>Returns</h4>
 <p> the level_idc or 0 if the level is unknown</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -614,7 +605,6 @@
 <a name="id-1.2.14.5.6.11.7"></a><h4>Returns</h4>
 <p> The profile as a const string, or <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> if there is an error.</p>
 <p>Since 1.4</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -654,7 +644,6 @@
 <a name="id-1.2.14.5.6.12.6"></a><h4>Returns</h4>
 <p> The tier as a const string, or <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> if there is an error.</p>
 <p>Since 1.4</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -694,7 +683,6 @@
 <a name="id-1.2.14.5.6.13.6"></a><h4>Returns</h4>
 <p> The level as a const string, or <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> if there is an error.</p>
 <p>Since 1.4</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -722,7 +710,6 @@
 <a name="id-1.2.14.5.6.14.6"></a><h4>Returns</h4>
 <p> the level_idc or 0 if the level is unknown</p>
 <p>Since 1.4</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -771,7 +758,6 @@
 <a name="id-1.2.14.5.6.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 the level, tier, profile could be set, <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> otherwise.</p>
 <p>Since 1.4</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -812,7 +798,6 @@
 <div class="refsect3">
 <a name="id-1.2.14.5.6.16.6"></a><h4>Returns</h4>
 <p> The profile as a const string, or NULL if there is an error.</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -852,7 +837,6 @@
 <div class="refsect3">
 <a name="id-1.2.14.5.6.17.6"></a><h4>Returns</h4>
 <p> The level as a const string, or NULL if there is an error.</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -900,7 +884,6 @@
 <div class="refsect3">
 <a name="id-1.2.14.5.6.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 the level and profile could be set, <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> otherwise.</p>
-<p></p>
 </div>
 </div>
 </div>
@@ -909,7 +892,6 @@
 </div>
 </div>
 <div class="footer">
-<hr>
-          Generated by GTK-Doc V1.21</div>
+<hr>Generated by GTK-Doc V1.24</div>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/libs/html/gst-plugins-base-libs-gstpbutilsdescriptions.html b/docs/libs/html/gst-plugins-base-libs-gstpbutilsdescriptions.html
index 32907b0..6ac2428 100644
--- a/docs/libs/html/gst-plugins-base-libs-gstpbutilsdescriptions.html
+++ b/docs/libs/html/gst-plugins-base-libs-gstpbutilsdescriptions.html
@@ -2,13 +2,13 @@
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>GStreamer Base Plugins 1.0 Library Reference Manual: gstpbutilsdescriptions</title>
+<title>gstpbutilsdescriptions: GStreamer Base 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 Base Plugins 1.0 Library Reference Manual">
 <link rel="up" href="gstreamer-base-utils.html" title="Base Utils Library">
 <link rel="prev" href="gst-plugins-base-libs-gstpbutilscodecutils.html" title="gstpbutilscodecutils">
 <link rel="next" href="gst-plugins-base-libs-gstpbutilsmissingplugins.html" title="gstpbutilsmissingplugins">
-<meta name="generator" content="GTK-Doc V1.21 (XML mode)">
+<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">
@@ -152,7 +152,6 @@
 <a name="id-1.2.14.6.6.2.7"></a><h4>Returns</h4>
 <p> a newly-allocated description string, or NULL on error. Free
 string with <a href="https://developer.gnome.org/glib/unstable/glib-Memory-Allocation.html#g-free"><code class="function">g_free()</code></a> when not needed any longer.</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -187,7 +186,6 @@
 <a name="id-1.2.14.6.6.3.7"></a><h4>Returns</h4>
 <p> a newly-allocated description string, or NULL on error. Free
 string with <a href="https://developer.gnome.org/glib/unstable/glib-Memory-Allocation.html#g-free"><code class="function">g_free()</code></a> when not needed any longer.</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -223,7 +221,6 @@
 <a name="id-1.2.14.6.6.4.7"></a><h4>Returns</h4>
 <p> a newly-allocated description string, or NULL on error. Free
 string with <a href="https://developer.gnome.org/glib/unstable/glib-Memory-Allocation.html#g-free"><code class="function">g_free()</code></a> when not needed any longer.</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -259,7 +256,6 @@
 <a name="id-1.2.14.6.6.5.7"></a><h4>Returns</h4>
 <p> a newly-allocated description string, or NULL on error. Free
 string with <a href="https://developer.gnome.org/glib/unstable/glib-Memory-Allocation.html#g-free"><code class="function">g_free()</code></a> when not needed any longer.</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -293,7 +289,6 @@
 <a name="id-1.2.14.6.6.6.7"></a><h4>Returns</h4>
 <p> a newly-allocated description string, or NULL on error. Free
 string with <a href="https://developer.gnome.org/glib/unstable/glib-Memory-Allocation.html#g-free"><code class="function">g_free()</code></a> when not needed any longer.</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -339,7 +334,6 @@
 <div class="refsect3">
 <a name="id-1.2.14.6.6.7.6"></a><h4>Returns</h4>
 <p> TRUE if a codec tag was added, FALSE otherwise.</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -373,7 +367,6 @@
 <a name="id-1.2.14.6.6.8.7"></a><h4>Returns</h4>
 <p> a newly-allocated description string, or NULL on error. Free
 string with <a href="https://developer.gnome.org/glib/unstable/glib-Memory-Allocation.html#g-free"><code class="function">g_free()</code></a> when not needed any longer.</p>
-<p></p>
 </div>
 </div>
 </div>
@@ -382,7 +375,6 @@
 </div>
 </div>
 <div class="footer">
-<hr>
-          Generated by GTK-Doc V1.21</div>
+<hr>Generated by GTK-Doc V1.24</div>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/libs/html/gst-plugins-base-libs-gstpbutilsinstallplugins.html b/docs/libs/html/gst-plugins-base-libs-gstpbutilsinstallplugins.html
index 9f34ae4..07d2a90 100644
--- a/docs/libs/html/gst-plugins-base-libs-gstpbutilsinstallplugins.html
+++ b/docs/libs/html/gst-plugins-base-libs-gstpbutilsinstallplugins.html
@@ -2,13 +2,13 @@
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>GStreamer Base Plugins 1.0 Library Reference Manual: gstpbutilsinstallplugins</title>
+<title>gstpbutilsinstallplugins: GStreamer Base 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 Base Plugins 1.0 Library Reference Manual">
 <link rel="up" href="gstreamer-base-utils.html" title="Base Utils Library">
 <link rel="prev" href="gst-plugins-base-libs-gstpbutilsmissingplugins.html" title="gstpbutilsmissingplugins">
 <link rel="next" href="gst-plugins-base-libs-gstdiscoverer.html" title="gstdiscoverer">
-<meta name="generator" content="GTK-Doc V1.21 (XML mode)">
+<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">
@@ -110,6 +110,30 @@
 <a class="link" href="gst-plugins-base-libs-gstpbutilsinstallplugins.html#gst-install-plugins-context-set-xid" title="gst_install_plugins_context_set_xid ()">gst_install_plugins_context_set_xid</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-base-libs-gstpbutilsinstallplugins.html#gst-install-plugins-context-set-confirm-search" title="gst_install_plugins_context_set_confirm_search ()">gst_install_plugins_context_set_confirm_search</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-base-libs-gstpbutilsinstallplugins.html#gst-install-plugins-context-set-desktop-id" title="gst_install_plugins_context_set_desktop_id ()">gst_install_plugins_context_set_desktop_id</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-base-libs-gstpbutilsinstallplugins.html#gst-install-plugins-context-set-startup-notification-id" title="gst_install_plugins_context_set_startup_notification_id ()">gst_install_plugins_context_set_startup_notification_id</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
 </tbody>
 </table></div>
 </div>
@@ -590,7 +614,6 @@
 <div class="refsect3">
 <a name="id-1.2.14.8.7.3.9"></a><h4>Returns</h4>
 <p> result code whether an external installer could be started</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -632,7 +655,6 @@
 <div class="refsect3">
 <a name="id-1.2.14.8.7.4.7"></a><h4>Returns</h4>
 <p> the result of the installation.</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -663,7 +685,6 @@
 <a name="id-1.2.14.8.7.5.6"></a><h4>Returns</h4>
 <p> a descriptive string for the status code in <em class="parameter"><code>ret</code></em>
 </p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -677,7 +698,6 @@
 <div class="refsect3">
 <a name="id-1.2.14.8.7.6.5"></a><h4>Returns</h4>
 <p> TRUE if plugin installation is in progress, otherwise FALSE</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -692,7 +712,6 @@
 <div class="refsect3">
 <a name="id-1.2.14.8.7.7.5"></a><h4>Returns</h4>
 <p> TRUE if plugin installation is likely to be supported.</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -705,7 +724,6 @@
 <a name="id-1.2.14.8.7.8.5"></a><h4>Returns</h4>
 <p> a new <a class="link" href="gst-plugins-base-libs-gstpbutilsinstallplugins.html#GstInstallPluginsContext" title="GstInstallPluginsContext"><span class="type">GstInstallPluginsContext</span></a>. Free with
 <a class="link" href="gst-plugins-base-libs-gstpbutilsinstallplugins.html#gst-install-plugins-context-free" title="gst_install_plugins_context_free ()"><code class="function">gst_install_plugins_context_free()</code></a> when no longer needed</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -779,6 +797,123 @@
 </table></div>
 </div>
 </div>
+<hr>
+<div class="refsect2">
+<a name="gst-install-plugins-context-set-confirm-search"></a><h3>gst_install_plugins_context_set_confirm_search ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+gst_install_plugins_context_set_confirm_search
+                               (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstpbutilsinstallplugins.html#GstInstallPluginsContext" title="GstInstallPluginsContext"><span class="type">GstInstallPluginsContext</span></a> *ctx</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> confirm_search</code></em>);</pre>
+<p>This function is used to tell the external installer process whether it
+should ask for confirmation or not before searching for missing plugins.</p>
+<p>If set, this option will be passed to the installer via a
+--interaction=[show-confirm-search|hide-confirm-search] command line option.</p>
+<div class="refsect3">
+<a name="id-1.2.14.8.7.11.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>ctx</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gst-plugins-base-libs-gstpbutilsinstallplugins.html#GstInstallPluginsContext" title="GstInstallPluginsContext"><span class="type">GstInstallPluginsContext</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>confirm_search</p></td>
+<td class="parameter_description"><p>whether to ask for confirmation before searching for plugins</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<p class="since">Since: 1.6</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-install-plugins-context-set-desktop-id"></a><h3>gst_install_plugins_context_set_desktop_id ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+gst_install_plugins_context_set_desktop_id
+                               (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstpbutilsinstallplugins.html#GstInstallPluginsContext" title="GstInstallPluginsContext"><span class="type">GstInstallPluginsContext</span></a> *ctx</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> *desktop_id</code></em>);</pre>
+<p>This function is used to pass the calling application's desktop file ID to
+the external installer process.</p>
+<p>A desktop file ID is the basename of the desktop file, including the
+.desktop extension.</p>
+<p>If set, the desktop file ID will be passed to the installer via a
+--desktop-id= command line option.</p>
+<div class="refsect3">
+<a name="id-1.2.14.8.7.12.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>ctx</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gst-plugins-base-libs-gstpbutilsinstallplugins.html#GstInstallPluginsContext" title="GstInstallPluginsContext"><span class="type">GstInstallPluginsContext</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>desktop_id</p></td>
+<td class="parameter_description"><p>the desktop file ID of the calling application</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<p class="since">Since: 1.6</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-install-plugins-context-set-startup-notification-id"></a><h3>gst_install_plugins_context_set_startup_notification_id ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+gst_install_plugins_context_set_startup_notification_id
+                               (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstpbutilsinstallplugins.html#GstInstallPluginsContext" title="GstInstallPluginsContext"><span class="type">GstInstallPluginsContext</span></a> *ctx</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> *startup_id</code></em>);</pre>
+<p>Sets the startup notification ID for the launched process.</p>
+<p>This is typically used to to pass the current X11 event timestamp to the
+external installer process.</p>
+<p>Startup notification IDs are defined in the
+<a class="ulink" href="http://standards.freedesktop.org/startup-notification-spec/startup-notification-latest.txt" target="_top">FreeDesktop.Org Startup Notifications standard</a>.</p>
+<p>If set, the ID will be passed to the installer via a
+--startup-notification-id= command line option.</p>
+<p>GTK+/GNOME applications should be able to create a startup notification ID
+like this:</p>
+<pre class="programlisting">
+  timestamp = gtk_get_current_event_time ();
+  startup_id = g_strdup_printf ("_TIME%u", timestamp);
+...
+</pre>
+<div class="refsect3">
+<a name="id-1.2.14.8.7.13.10"></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>ctx</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gst-plugins-base-libs-gstpbutilsinstallplugins.html#GstInstallPluginsContext" title="GstInstallPluginsContext"><span class="type">GstInstallPluginsContext</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>startup_id</p></td>
+<td class="parameter_description"><p>the startup notification ID</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<p class="since">Since: 1.6</p>
+</div>
 </div>
 <div class="refsect1">
 <a name="gst-plugins-base-libs-gstpbutilsinstallplugins.other_details"></a><h2>Types and Values</h2>
@@ -902,7 +1037,6 @@
 </div>
 </div>
 <div class="footer">
-<hr>
-          Generated by GTK-Doc V1.21</div>
+<hr>Generated by GTK-Doc V1.24</div>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/libs/html/gst-plugins-base-libs-gstpbutilsmissingplugins.html b/docs/libs/html/gst-plugins-base-libs-gstpbutilsmissingplugins.html
index fbd2453..81f828a 100644
--- a/docs/libs/html/gst-plugins-base-libs-gstpbutilsmissingplugins.html
+++ b/docs/libs/html/gst-plugins-base-libs-gstpbutilsmissingplugins.html
@@ -2,13 +2,13 @@
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>GStreamer Base Plugins 1.0 Library Reference Manual: gstpbutilsmissingplugins</title>
+<title>gstpbutilsmissingplugins: GStreamer Base 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 Base Plugins 1.0 Library Reference Manual">
 <link rel="up" href="gstreamer-base-utils.html" title="Base Utils Library">
 <link rel="prev" href="gst-plugins-base-libs-gstpbutilsdescriptions.html" title="gstpbutilsdescriptions">
 <link rel="next" href="gst-plugins-base-libs-gstpbutilsinstallplugins.html" title="gstpbutilsinstallplugins">
-<meta name="generator" content="GTK-Doc V1.21 (XML mode)">
+<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">
@@ -205,7 +205,7 @@
 </colgroup>
 <tbody><tr>
 <td class="parameter_name"><p>msg</p></td>
-<td class="parameter_description"><p>a missing-plugin <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstMessage.html"><span class="type">GstMessage</span></a> of type <span class="type">GST_MESSAGE_ELEMENT</span></p></td>
+<td class="parameter_description"><p>a missing-plugin <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstMessage.html"><span class="type">GstMessage</span></a> of type <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstMessage.html#GST-MESSAGE-ELEMENT:CAPS"><span class="type">GST_MESSAGE_ELEMENT</span></a></p></td>
 <td class="parameter_annotations"> </td>
 </tr></tbody>
 </table></div>
@@ -214,7 +214,6 @@
 <a name="id-1.2.14.7.6.2.7"></a><h4>Returns</h4>
 <p> a newly-allocated detail string, or NULL on error. Free string
 with <a href="https://developer.gnome.org/glib/unstable/glib-Memory-Allocation.html#g-free"><code class="function">g_free()</code></a> when not needed any longer.</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -240,7 +239,7 @@
 </colgroup>
 <tbody><tr>
 <td class="parameter_name"><p>msg</p></td>
-<td class="parameter_description"><p>a missing-plugin <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstMessage.html"><span class="type">GstMessage</span></a> of type <span class="type">GST_MESSAGE_ELEMENT</span></p></td>
+<td class="parameter_description"><p>a missing-plugin <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstMessage.html"><span class="type">GstMessage</span></a> of type <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstMessage.html#GST-MESSAGE-ELEMENT:CAPS"><span class="type">GST_MESSAGE_ELEMENT</span></a></p></td>
 <td class="parameter_annotations"> </td>
 </tr></tbody>
 </table></div>
@@ -249,7 +248,6 @@
 <a name="id-1.2.14.7.6.3.7"></a><h4>Returns</h4>
 <p> a newly-allocated description string, or NULL on error. Free
 string with <a href="https://developer.gnome.org/glib/unstable/glib-Memory-Allocation.html#g-free"><code class="function">g_free()</code></a> when not needed any longer.</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -278,7 +276,6 @@
 <a name="id-1.2.14.7.6.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 <em class="parameter"><code>msg</code></em>
 is a missing-plugins message, otherwise <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a>.</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -507,7 +504,6 @@
 <a name="id-1.2.14.7.6.10.7"></a><h4>Returns</h4>
 <p> a newly-allocated detail string, or NULL on error. Free string
 with <a href="https://developer.gnome.org/glib/unstable/glib-Memory-Allocation.html#g-free"><code class="function">g_free()</code></a> when not needed any longer.</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -543,7 +539,6 @@
 <a name="id-1.2.14.7.6.11.7"></a><h4>Returns</h4>
 <p> a newly-allocated detail string, or NULL on error. Free string
 with <a href="https://developer.gnome.org/glib/unstable/glib-Memory-Allocation.html#g-free"><code class="function">g_free()</code></a> when not needed any longer.</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -579,7 +574,6 @@
 <a name="id-1.2.14.7.6.12.7"></a><h4>Returns</h4>
 <p> a newly-allocated detail string, or NULL on error. Free string
 with <a href="https://developer.gnome.org/glib/unstable/glib-Memory-Allocation.html#g-free"><code class="function">g_free()</code></a> when not needed any longer.</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -614,7 +608,6 @@
 <a name="id-1.2.14.7.6.13.7"></a><h4>Returns</h4>
 <p> a newly-allocated detail string, or NULL on error. Free string
 with <a href="https://developer.gnome.org/glib/unstable/glib-Memory-Allocation.html#g-free"><code class="function">g_free()</code></a> when not needed any longer.</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -649,7 +642,6 @@
 <a name="id-1.2.14.7.6.14.7"></a><h4>Returns</h4>
 <p> a newly-allocated detail string, or NULL on error. Free string
 with <a href="https://developer.gnome.org/glib/unstable/glib-Memory-Allocation.html#g-free"><code class="function">g_free()</code></a> when not needed any longer.</p>
-<p></p>
 </div>
 </div>
 </div>
@@ -658,7 +650,6 @@
 </div>
 </div>
 <div class="footer">
-<hr>
-          Generated by GTK-Doc V1.21</div>
+<hr>Generated by GTK-Doc V1.24</div>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/libs/html/gst-plugins-base-libs-gstpluginsbaseversion.html b/docs/libs/html/gst-plugins-base-libs-gstpluginsbaseversion.html
index 3ee77fe..2a5f6d9 100644
--- a/docs/libs/html/gst-plugins-base-libs-gstpluginsbaseversion.html
+++ b/docs/libs/html/gst-plugins-base-libs-gstpluginsbaseversion.html
@@ -2,13 +2,13 @@
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>GStreamer Base Plugins 1.0 Library Reference Manual: gstpluginsbaseversion</title>
+<title>gstpluginsbaseversion: GStreamer Base 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 Base Plugins 1.0 Library Reference Manual">
 <link rel="up" href="gstreamer-base-utils.html" title="Base Utils Library">
 <link rel="prev" href="gst-plugins-base-libs-gstpbutils.html" title="gstpbutils">
 <link rel="next" href="gst-plugins-base-libs-gstpbutilscodecutils.html" title="gstpbutilscodecutils">
-<meta name="generator" content="GTK-Doc V1.21 (XML mode)">
+<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">
@@ -104,14 +104,14 @@
 <hr>
 <div class="refsect2">
 <a name="GST-PLUGINS-BASE-VERSION-MINOR:CAPS"></a><h3>GST_PLUGINS_BASE_VERSION_MINOR</h3>
-<pre class="programlisting">#define GST_PLUGINS_BASE_VERSION_MINOR (4)
+<pre class="programlisting">#define GST_PLUGINS_BASE_VERSION_MINOR (5)
 </pre>
 <p>The minor version of GStreamer's gst-plugins-base libraries at compile time.</p>
 </div>
 <hr>
 <div class="refsect2">
 <a name="GST-PLUGINS-BASE-VERSION-MICRO:CAPS"></a><h3>GST_PLUGINS_BASE_VERSION_MICRO</h3>
-<pre class="programlisting">#define GST_PLUGINS_BASE_VERSION_MICRO (5)
+<pre class="programlisting">#define GST_PLUGINS_BASE_VERSION_MICRO (91)
 </pre>
 <p>The micro version of GStreamer's gst-plugins-base libraries at compile time.</p>
 </div>
@@ -181,7 +181,6 @@
 <div class="refsect3">
 <a name="id-1.2.14.4.6.8.5"></a><h4>Returns</h4>
 <p> a newly allocated string describing this version of gst-plugins-base</p>
-<p></p>
 </div>
 </div>
 </div>
@@ -190,7 +189,6 @@
 </div>
 </div>
 <div class="footer">
-<hr>
-          Generated by GTK-Doc V1.21</div>
+<hr>Generated by GTK-Doc V1.24</div>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/libs/html/gst-plugins-base-libs-gstriff.html b/docs/libs/html/gst-plugins-base-libs-gstriff.html
index aa01a13..9add1b1 100644
--- a/docs/libs/html/gst-plugins-base-libs-gstriff.html
+++ b/docs/libs/html/gst-plugins-base-libs-gstriff.html
@@ -2,13 +2,13 @@
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>GStreamer Base Plugins 1.0 Library Reference Manual: gstriff</title>
+<title>gstriff: GStreamer Base 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 Base Plugins 1.0 Library Reference Manual">
 <link rel="up" href="gstreamer-riff.html" title="Riff Media Library">
 <link rel="prev" href="gstreamer-riff.html" title="Riff Media Library">
 <link rel="next" href="gstreamer-rtp.html" title="RTP Library">
-<meta name="generator" content="GTK-Doc V1.21 (XML mode)">
+<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">
@@ -330,7 +330,6 @@
 <div class="refsect3">
 <a name="id-1.2.8.3.6.9.6"></a><h4>Returns</h4>
 <p> FALSE on error, TRUE otherwise</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -379,7 +378,6 @@
 <p> FALSE if this is not a RIFF stream (in which case the
 caller should error out; we already throw an error), or TRUE
 if it is.</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -471,7 +469,6 @@
 <a name="id-1.2.8.3.6.12.6"></a><h4>Returns</h4>
 <p> TRUE if parsing succeeded, otherwise FALSE. The stream
 should be skipped on error, but it is not fatal.</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -524,7 +521,6 @@
 <div class="refsect3">
 <a name="id-1.2.8.3.6.13.6"></a><h4>Returns</h4>
 <p> TRUE if parsing succeeded, otherwise FALSE.</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -577,7 +573,6 @@
 <a name="id-1.2.8.3.6.14.6"></a><h4>Returns</h4>
 <p> TRUE if parsing succeeded, otherwise FALSE. The stream
 should be skipped on error, but it is not fatal.</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -621,7 +616,6 @@
 <a name="id-1.2.8.3.6.15.6"></a><h4>Returns</h4>
 <p> TRUE if parsing succeeded, otherwise FALSE. The stream
 should be skipped on error, but it is not fatal.</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -675,7 +669,6 @@
 <div class="refsect3">
 <a name="id-1.2.8.3.6.16.6"></a><h4>Returns</h4>
 <p> flow status.</p>
-<p></p>
 </div>
 </div>
 </div>
@@ -684,7 +677,6 @@
 </div>
 </div>
 <div class="footer">
-<hr>
-          Generated by GTK-Doc V1.21</div>
+<hr>Generated by GTK-Doc V1.24</div>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/libs/html/gst-plugins-base-libs-gstrtcpbuffer.html b/docs/libs/html/gst-plugins-base-libs-gstrtcpbuffer.html
index 869d123..6536b90 100644
--- a/docs/libs/html/gst-plugins-base-libs-gstrtcpbuffer.html
+++ b/docs/libs/html/gst-plugins-base-libs-gstrtcpbuffer.html
@@ -2,13 +2,13 @@
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>GStreamer Base Plugins 1.0 Library Reference Manual: gstrtcpbuffer</title>
+<title>gstrtcpbuffer: GStreamer Base 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 Base Plugins 1.0 Library Reference Manual">
 <link rel="up" href="gstreamer-rtp.html" title="RTP Library">
 <link rel="prev" href="gst-plugins-base-libs-gstrtpbuffer.html" title="gstrtpbuffer">
 <link rel="next" href="gst-plugins-base-libs-gstrtppayloads.html" title="gstrtppayloads">
-<meta name="generator" content="GTK-Doc V1.21 (XML mode)">
+<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">
@@ -68,6 +68,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="gst-plugins-base-libs-gstrtcpbuffer.html#gst-rtcp-buffer-validate-data-reduced" title="gst_rtcp_buffer_validate_data_reduced ()">gst_rtcp_buffer_validate_data_reduced</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-base-libs-gstrtcpbuffer.html#gst-rtcp-buffer-validate-reduced" title="gst_rtcp_buffer_validate_reduced ()">gst_rtcp_buffer_validate_reduced</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-base-libs-gstrtcpbuffer.html#gst-rtcp-buffer-validate-data" title="gst_rtcp_buffer_validate_data ()">gst_rtcp_buffer_validate_data</a> <span class="c_punctuation">()</span>
 </td>
 </tr>
@@ -614,7 +630,6 @@
 <p> A newly allocated buffer with <em class="parameter"><code>data</code></em>
 and of size <em class="parameter"><code>len</code></em>
 .</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -656,23 +671,24 @@
 <p> A newly allocated buffer with a copy of <em class="parameter"><code>data</code></em>
 and of size <em class="parameter"><code>len</code></em>
 .</p>
-<p></p>
 </div>
 </div>
 <hr>
 <div class="refsect2">
-<a name="gst-rtcp-buffer-validate-data"></a><h3>gst_rtcp_buffer_validate_data ()</h3>
+<a name="gst-rtcp-buffer-validate-data-reduced"></a><h3>gst_rtcp_buffer_validate_data_reduced ()</h3>
 <pre class="programlisting"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-gst_rtcp_buffer_validate_data (<em class="parameter"><code><span class="type">guint8</span> *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> len</code></em>);</pre>
+gst_rtcp_buffer_validate_data_reduced (<em class="parameter"><code><span class="type">guint8</span> *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> len</code></em>);</pre>
 <p>Check if the <em class="parameter"><code>data</code></em>
  and <em class="parameter"><code>size</code></em>
- point to the data of a valid RTCP (compound)
-packet. 
+ point to the data of a valid RTCP packet.
 Use this function to validate a packet before using the other functions in
 this module.</p>
+<p>This function is updated to support reduced size rtcp packets according to
+RFC 5506 and will validate full compound RTCP packets as well as reduced
+size RTCP packets.</p>
 <div class="refsect3">
-<a name="id-1.2.9.7.7.6.5"></a><h4>Parameters</h4>
+<a name="id-1.2.9.7.7.6.6"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -695,19 +711,19 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.9.7.7.6.6"></a><h4>Returns</h4>
+<a name="id-1.2.9.7.7.6.7"></a><h4>Returns</h4>
 <p> TRUE if the data points to a valid RTCP packet.</p>
-<p></p>
 </div>
+<p class="since">Since: 1.6</p>
 </div>
 <hr>
 <div class="refsect2">
-<a name="gst-rtcp-buffer-validate"></a><h3>gst_rtcp_buffer_validate ()</h3>
+<a name="gst-rtcp-buffer-validate-reduced"></a><h3>gst_rtcp_buffer_validate_reduced ()</h3>
 <pre class="programlisting"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-gst_rtcp_buffer_validate (<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>
+gst_rtcp_buffer_validate_reduced (<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>Check if the data pointed to by <em class="parameter"><code>buffer</code></em>
  is a valid RTCP packet using
-<a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#gst-rtcp-buffer-validate-data" title="gst_rtcp_buffer_validate_data ()"><code class="function">gst_rtcp_buffer_validate_data()</code></a>.</p>
+<a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#gst-rtcp-buffer-validate-reduced" title="gst_rtcp_buffer_validate_reduced ()"><code class="function">gst_rtcp_buffer_validate_reduced()</code></a>.</p>
 <div class="refsect3">
 <a name="id-1.2.9.7.7.7.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
@@ -727,7 +743,76 @@
 <a name="id-1.2.9.7.7.7.6"></a><h4>Returns</h4>
 <p> TRUE if <em class="parameter"><code>buffer</code></em>
 is a valid RTCP packet.</p>
-<p></p>
+</div>
+<p class="since">Since: 1.6</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-rtcp-buffer-validate-data"></a><h3>gst_rtcp_buffer_validate_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_rtcp_buffer_validate_data (<em class="parameter"><code><span class="type">guint8</span> *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> len</code></em>);</pre>
+<p>Check if the <em class="parameter"><code>data</code></em>
+ and <em class="parameter"><code>size</code></em>
+ point to the data of a valid compound,
+non-reduced size RTCP packet.
+Use this function to validate a packet before using the other functions in
+this module.</p>
+<div class="refsect3">
+<a name="id-1.2.9.7.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>data</p></td>
+<td class="parameter_description"><p> the data to validate. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter points to an array of items."><span class="acronym">array</span></acronym> length=len]</span></td>
+</tr>
+<tr>
+<td class="parameter_name"><p>len</p></td>
+<td class="parameter_description"><p>the length of <em class="parameter"><code>data</code></em>
+to validate</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="id-1.2.9.7.7.8.6"></a><h4>Returns</h4>
+<p> TRUE if the data points to a valid RTCP packet.</p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-rtcp-buffer-validate"></a><h3>gst_rtcp_buffer_validate ()</h3>
+<pre class="programlisting"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
+gst_rtcp_buffer_validate (<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>Check if the data pointed to by <em class="parameter"><code>buffer</code></em>
+ is a valid RTCP packet using
+<a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#gst-rtcp-buffer-validate-data" title="gst_rtcp_buffer_validate_data ()"><code class="function">gst_rtcp_buffer_validate_data()</code></a>.</p>
+<div class="refsect3">
+<a name="id-1.2.9.7.7.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>buffer</p></td>
+<td class="parameter_description"><p>the buffer to validate</p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="id-1.2.9.7.7.9.6"></a><h4>Returns</h4>
+<p> TRUE if <em class="parameter"><code>buffer</code></em>
+is a valid RTCP packet.</p>
 </div>
 </div>
 <hr>
@@ -739,7 +824,7 @@
 maximum size of <em class="parameter"><code>mtu</code></em>
 .</p>
 <div class="refsect3">
-<a name="id-1.2.9.7.7.8.5"></a><h4>Parameters</h4>
+<a name="id-1.2.9.7.7.10.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -754,9 +839,8 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.9.7.7.8.6"></a><h4>Returns</h4>
+<a name="id-1.2.9.7.7.10.6"></a><h4>Returns</h4>
 <p> A newly allocated buffer.</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -772,7 +856,7 @@
 buffer state is stored in <em class="parameter"><code>rtcp</code></em>
 .</p>
 <div class="refsect3">
-<a name="id-1.2.9.7.7.9.5"></a><h4>Parameters</h4>
+<a name="id-1.2.9.7.7.11.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -805,13 +889,13 @@
 <pre class="programlisting"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
 gst_rtcp_buffer_unmap (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#GstRTCPBuffer" title="struct GstRTCPBuffer"><span class="type">GstRTCPBuffer</span></a> *rtcp</code></em>);</pre>
 <p>Finish <em class="parameter"><code>rtcp</code></em>
- after being constructured. This function is usually called
+ after being constructed. This function is usually called
 after <a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#gst-rtcp-buffer-map" title="gst_rtcp_buffer_map ()"><code class="function">gst_rtcp_buffer_map()</code></a> and after adding the RTCP items to the new buffer.</p>
 <p>The function adjusts the size of <em class="parameter"><code>rtcp</code></em>
  with the total length of all the
 added packets.</p>
 <div class="refsect3">
-<a name="id-1.2.9.7.7.10.6"></a><h4>Parameters</h4>
+<a name="id-1.2.9.7.7.12.6"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -834,7 +918,7 @@
 <p>Get the number of RTCP packets in <em class="parameter"><code>rtcp</code></em>
 .</p>
 <div class="refsect3">
-<a name="id-1.2.9.7.7.11.5"></a><h4>Parameters</h4>
+<a name="id-1.2.9.7.7.13.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -849,10 +933,9 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.9.7.7.11.6"></a><h4>Returns</h4>
+<a name="id-1.2.9.7.7.13.6"></a><h4>Returns</h4>
 <p> the number of RTCP packets in <em class="parameter"><code>rtcp</code></em>
 .</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -865,7 +948,7 @@
 <em class="parameter"><code>rtcp</code></em>
 .</p>
 <div class="refsect3">
-<a name="id-1.2.9.7.7.12.5"></a><h4>Parameters</h4>
+<a name="id-1.2.9.7.7.14.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -887,10 +970,9 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.9.7.7.12.6"></a><h4>Returns</h4>
+<a name="id-1.2.9.7.7.14.6"></a><h4>Returns</h4>
 <p> TRUE if the packet existed in <em class="parameter"><code>rtcp</code></em>
 .</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -903,7 +985,7 @@
 Use <a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#gst-rtcp-buffer-get-first-packet" title="gst_rtcp_buffer_get_first_packet ()"><code class="function">gst_rtcp_buffer_get_first_packet()</code></a> to initialize <em class="parameter"><code>packet</code></em>
 .</p>
 <div class="refsect3">
-<a name="id-1.2.9.7.7.13.5"></a><h4>Parameters</h4>
+<a name="id-1.2.9.7.7.15.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -918,11 +1000,10 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.9.7.7.13.6"></a><h4>Returns</h4>
+<a name="id-1.2.9.7.7.15.6"></a><h4>Returns</h4>
 <p> TRUE if <em class="parameter"><code>packet</code></em>
 is pointing to a valid packet after calling this
 function.</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -938,7 +1019,7 @@
  will point to the newly created 
 packet.</p>
 <div class="refsect3">
-<a name="id-1.2.9.7.7.14.5"></a><h4>Parameters</h4>
+<a name="id-1.2.9.7.7.16.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -965,10 +1046,9 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.9.7.7.14.6"></a><h4>Returns</h4>
+<a name="id-1.2.9.7.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 the packet could be created. This function returns <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a>
 if the max mtu is exceeded for the buffer.</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -979,7 +1059,7 @@
 <p>Removes the packet pointed to by <em class="parameter"><code>packet</code></em>
  and moves pointer to the next one</p>
 <div class="refsect3">
-<a name="id-1.2.9.7.7.15.5"></a><h4>Parameters</h4>
+<a name="id-1.2.9.7.7.17.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -994,11 +1074,10 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.9.7.7.15.6"></a><h4>Returns</h4>
+<a name="id-1.2.9.7.7.17.6"></a><h4>Returns</h4>
 <p> TRUE if <em class="parameter"><code>packet</code></em>
 is pointing to a valid packet after calling this
 function.</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -1009,65 +1088,6 @@
 <p>Get the packet padding of the packet pointed to by <em class="parameter"><code>packet</code></em>
 .</p>
 <div class="refsect3">
-<a name="id-1.2.9.7.7.16.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>packet</p></td>
-<td class="parameter_description"><p>a valid <a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#GstRTCPPacket" title="struct GstRTCPPacket"><span class="type">GstRTCPPacket</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
-</table></div>
-</div>
-<div class="refsect3">
-<a name="id-1.2.9.7.7.16.6"></a><h4>Returns</h4>
-<p> If the packet has the padding bit set.</p>
-<p></p>
-</div>
-</div>
-<hr>
-<div class="refsect2">
-<a name="gst-rtcp-packet-get-count"></a><h3>gst_rtcp_packet_get_count ()</h3>
-<pre class="programlisting"><span class="returnvalue">guint8</span>
-gst_rtcp_packet_get_count (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#GstRTCPPacket" title="struct GstRTCPPacket"><span class="type">GstRTCPPacket</span></a> *packet</code></em>);</pre>
-<p>Get the count field in <em class="parameter"><code>packet</code></em>
-.</p>
-<div class="refsect3">
-<a name="id-1.2.9.7.7.17.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>packet</p></td>
-<td class="parameter_description"><p>a valid <a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#GstRTCPPacket" title="struct GstRTCPPacket"><span class="type">GstRTCPPacket</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
-</table></div>
-</div>
-<div class="refsect3">
-<a name="id-1.2.9.7.7.17.6"></a><h4>Returns</h4>
-<p> The count field in <em class="parameter"><code>packet</code></em>
-or -1 if <em class="parameter"><code>packet</code></em>
-does not point to a
-valid packet.</p>
-<p></p>
-</div>
-</div>
-<hr>
-<div class="refsect2">
-<a name="gst-rtcp-packet-get-type"></a><h3>gst_rtcp_packet_get_type ()</h3>
-<pre class="programlisting"><a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#GstRTCPType" title="enum GstRTCPType"><span class="returnvalue">GstRTCPType</span></a>
-gst_rtcp_packet_get_type (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#GstRTCPPacket" title="struct GstRTCPPacket"><span class="type">GstRTCPPacket</span></a> *packet</code></em>);</pre>
-<p>Get the packet type of the packet pointed to by <em class="parameter"><code>packet</code></em>
-.</p>
-<div class="refsect3">
 <a name="id-1.2.9.7.7.18.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
@@ -1084,20 +1104,16 @@
 </div>
 <div class="refsect3">
 <a name="id-1.2.9.7.7.18.6"></a><h4>Returns</h4>
-<p> The packet type or GST_RTCP_TYPE_INVALID when <em class="parameter"><code>packet</code></em>
-is not
-pointing to a valid packet.</p>
-<p></p>
+<p> If the packet has the padding bit set.</p>
 </div>
 </div>
 <hr>
 <div class="refsect2">
-<a name="gst-rtcp-packet-get-length"></a><h3>gst_rtcp_packet_get_length ()</h3>
-<pre class="programlisting"><span class="returnvalue">guint16</span>
-gst_rtcp_packet_get_length (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#GstRTCPPacket" title="struct GstRTCPPacket"><span class="type">GstRTCPPacket</span></a> *packet</code></em>);</pre>
-<p>Get the length field of <em class="parameter"><code>packet</code></em>
-. This is the length of the packet in 
-32-bit words minus one.</p>
+<a name="gst-rtcp-packet-get-count"></a><h3>gst_rtcp_packet_get_count ()</h3>
+<pre class="programlisting"><span class="returnvalue">guint8</span>
+gst_rtcp_packet_get_count (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#GstRTCPPacket" title="struct GstRTCPPacket"><span class="type">GstRTCPPacket</span></a> *packet</code></em>);</pre>
+<p>Get the count field in <em class="parameter"><code>packet</code></em>
+.</p>
 <div class="refsect3">
 <a name="id-1.2.9.7.7.19.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
@@ -1115,9 +1131,68 @@
 </div>
 <div class="refsect3">
 <a name="id-1.2.9.7.7.19.6"></a><h4>Returns</h4>
+<p> The count field in <em class="parameter"><code>packet</code></em>
+or -1 if <em class="parameter"><code>packet</code></em>
+does not point to a
+valid packet.</p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-rtcp-packet-get-type"></a><h3>gst_rtcp_packet_get_type ()</h3>
+<pre class="programlisting"><a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#GstRTCPType" title="enum GstRTCPType"><span class="returnvalue">GstRTCPType</span></a>
+gst_rtcp_packet_get_type (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#GstRTCPPacket" title="struct GstRTCPPacket"><span class="type">GstRTCPPacket</span></a> *packet</code></em>);</pre>
+<p>Get the packet type of the packet pointed to by <em class="parameter"><code>packet</code></em>
+.</p>
+<div class="refsect3">
+<a name="id-1.2.9.7.7.20.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>packet</p></td>
+<td class="parameter_description"><p>a valid <a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#GstRTCPPacket" title="struct GstRTCPPacket"><span class="type">GstRTCPPacket</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="id-1.2.9.7.7.20.6"></a><h4>Returns</h4>
+<p> The packet type or GST_RTCP_TYPE_INVALID when <em class="parameter"><code>packet</code></em>
+is not
+pointing to a valid packet.</p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-rtcp-packet-get-length"></a><h3>gst_rtcp_packet_get_length ()</h3>
+<pre class="programlisting"><span class="returnvalue">guint16</span>
+gst_rtcp_packet_get_length (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#GstRTCPPacket" title="struct GstRTCPPacket"><span class="type">GstRTCPPacket</span></a> *packet</code></em>);</pre>
+<p>Get the length field of <em class="parameter"><code>packet</code></em>
+. This is the length of the packet in 
+32-bit words minus one.</p>
+<div class="refsect3">
+<a name="id-1.2.9.7.7.21.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>packet</p></td>
+<td class="parameter_description"><p>a valid <a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#GstRTCPPacket" title="struct GstRTCPPacket"><span class="type">GstRTCPPacket</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="id-1.2.9.7.7.21.6"></a><h4>Returns</h4>
 <p> The length field of <em class="parameter"><code>packet</code></em>
 .</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -1132,7 +1207,7 @@
                                     <em class="parameter"><code><span class="type">guint32</span> *octet_count</code></em>);</pre>
 <p>Parse the SR sender info and store the values.</p>
 <div class="refsect3">
-<a name="id-1.2.9.7.7.20.5"></a><h4>Parameters</h4>
+<a name="id-1.2.9.7.7.22.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1187,7 +1262,7 @@
 <p>Set the given values in the SR packet <em class="parameter"><code>packet</code></em>
 .</p>
 <div class="refsect3">
-<a name="id-1.2.9.7.7.21.5"></a><h4>Parameters</h4>
+<a name="id-1.2.9.7.7.23.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1237,7 +1312,7 @@
 <p>Get the ssrc field of the RR <em class="parameter"><code>packet</code></em>
 .</p>
 <div class="refsect3">
-<a name="id-1.2.9.7.7.22.5"></a><h4>Parameters</h4>
+<a name="id-1.2.9.7.7.24.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1252,9 +1327,8 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.9.7.7.22.6"></a><h4>Returns</h4>
+<a name="id-1.2.9.7.7.24.6"></a><h4>Returns</h4>
 <p> the ssrc.</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -1266,7 +1340,7 @@
 <p>Set the ssrc field of the RR <em class="parameter"><code>packet</code></em>
 .</p>
 <div class="refsect3">
-<a name="id-1.2.9.7.7.23.5"></a><h4>Parameters</h4>
+<a name="id-1.2.9.7.7.25.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1296,7 +1370,7 @@
 <p>Get the number of report blocks in <em class="parameter"><code>packet</code></em>
 .</p>
 <div class="refsect3">
-<a name="id-1.2.9.7.7.24.5"></a><h4>Parameters</h4>
+<a name="id-1.2.9.7.7.26.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1311,10 +1385,9 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.9.7.7.24.6"></a><h4>Returns</h4>
+<a name="id-1.2.9.7.7.26.6"></a><h4>Returns</h4>
 <p> The number of report blocks in <em class="parameter"><code>packet</code></em>
 .</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -1335,7 +1408,7 @@
  and store the result in
 the values.</p>
 <div class="refsect3">
-<a name="id-1.2.9.7.7.25.5"></a><h4>Parameters</h4>
+<a name="id-1.2.9.7.7.27.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1408,7 +1481,7 @@
 <p>Add a new report block to <em class="parameter"><code>packet</code></em>
  with the given values.</p>
 <div class="refsect3">
-<a name="id-1.2.9.7.7.26.5"></a><h4>Parameters</h4>
+<a name="id-1.2.9.7.7.28.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1460,11 +1533,10 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.9.7.7.26.6"></a><h4>Returns</h4>
+<a name="id-1.2.9.7.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 the packet was created. This function can return <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> if
 the max MTU is exceeded or the number of report blocks is greater than
 <a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#GST-RTCP-MAX-RB-COUNT:CAPS" title="GST_RTCP_MAX_RB_COUNT"><span class="type">GST_RTCP_MAX_RB_COUNT</span></a>.</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -1485,7 +1557,7 @@
  with the given values.</p>
 <p>Note: Not implemented.</p>
 <div class="refsect3">
-<a name="id-1.2.9.7.7.27.6"></a><h4>Parameters</h4>
+<a name="id-1.2.9.7.7.29.6"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1550,63 +1622,6 @@
 <p>Get the number of items in the SDES packet <em class="parameter"><code>packet</code></em>
 .</p>
 <div class="refsect3">
-<a name="id-1.2.9.7.7.28.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>packet</p></td>
-<td class="parameter_description"><p>a valid SDES <a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#GstRTCPPacket" title="struct GstRTCPPacket"><span class="type">GstRTCPPacket</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
-</table></div>
-</div>
-<div class="refsect3">
-<a name="id-1.2.9.7.7.28.6"></a><h4>Returns</h4>
-<p> The number of items in <em class="parameter"><code>packet</code></em>
-.</p>
-<p></p>
-</div>
-</div>
-<hr>
-<div class="refsect2">
-<a name="gst-rtcp-packet-sdes-first-item"></a><h3>gst_rtcp_packet_sdes_first_item ()</h3>
-<pre class="programlisting"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-gst_rtcp_packet_sdes_first_item (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#GstRTCPPacket" title="struct GstRTCPPacket"><span class="type">GstRTCPPacket</span></a> *packet</code></em>);</pre>
-<p>Move to the first SDES item in <em class="parameter"><code>packet</code></em>
-.</p>
-<div class="refsect3">
-<a name="id-1.2.9.7.7.29.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>packet</p></td>
-<td class="parameter_description"><p>a valid SDES <a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#GstRTCPPacket" title="struct GstRTCPPacket"><span class="type">GstRTCPPacket</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
-</table></div>
-</div>
-<div class="refsect3">
-<a name="id-1.2.9.7.7.29.6"></a><h4>Returns</h4>
-<p> TRUE if there was a first item.</p>
-<p></p>
-</div>
-</div>
-<hr>
-<div class="refsect2">
-<a name="gst-rtcp-packet-sdes-next-item"></a><h3>gst_rtcp_packet_sdes_next_item ()</h3>
-<pre class="programlisting"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-gst_rtcp_packet_sdes_next_item (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#GstRTCPPacket" title="struct GstRTCPPacket"><span class="type">GstRTCPPacket</span></a> *packet</code></em>);</pre>
-<p>Move to the next SDES item in <em class="parameter"><code>packet</code></em>
-.</p>
-<div class="refsect3">
 <a name="id-1.2.9.7.7.30.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
@@ -1623,16 +1638,17 @@
 </div>
 <div class="refsect3">
 <a name="id-1.2.9.7.7.30.6"></a><h4>Returns</h4>
-<p> TRUE if there was a next item.</p>
-<p></p>
+<p> The number of items in <em class="parameter"><code>packet</code></em>
+.</p>
 </div>
 </div>
 <hr>
 <div class="refsect2">
-<a name="gst-rtcp-packet-sdes-get-ssrc"></a><h3>gst_rtcp_packet_sdes_get_ssrc ()</h3>
-<pre class="programlisting"><span class="returnvalue">guint32</span>
-gst_rtcp_packet_sdes_get_ssrc (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#GstRTCPPacket" title="struct GstRTCPPacket"><span class="type">GstRTCPPacket</span></a> *packet</code></em>);</pre>
-<p>Get the SSRC of the current SDES item.</p>
+<a name="gst-rtcp-packet-sdes-first-item"></a><h3>gst_rtcp_packet_sdes_first_item ()</h3>
+<pre class="programlisting"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
+gst_rtcp_packet_sdes_first_item (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#GstRTCPPacket" title="struct GstRTCPPacket"><span class="type">GstRTCPPacket</span></a> *packet</code></em>);</pre>
+<p>Move to the first SDES item in <em class="parameter"><code>packet</code></em>
+.</p>
 <div class="refsect3">
 <a name="id-1.2.9.7.7.31.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
@@ -1650,16 +1666,16 @@
 </div>
 <div class="refsect3">
 <a name="id-1.2.9.7.7.31.6"></a><h4>Returns</h4>
-<p> the SSRC of the current item.</p>
-<p></p>
+<p> TRUE if there was a first item.</p>
 </div>
 </div>
 <hr>
 <div class="refsect2">
-<a name="gst-rtcp-packet-sdes-first-entry"></a><h3>gst_rtcp_packet_sdes_first_entry ()</h3>
+<a name="gst-rtcp-packet-sdes-next-item"></a><h3>gst_rtcp_packet_sdes_next_item ()</h3>
 <pre class="programlisting"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-gst_rtcp_packet_sdes_first_entry (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#GstRTCPPacket" title="struct GstRTCPPacket"><span class="type">GstRTCPPacket</span></a> *packet</code></em>);</pre>
-<p>Move to the first SDES entry in the current item.</p>
+gst_rtcp_packet_sdes_next_item (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#GstRTCPPacket" title="struct GstRTCPPacket"><span class="type">GstRTCPPacket</span></a> *packet</code></em>);</pre>
+<p>Move to the next SDES item in <em class="parameter"><code>packet</code></em>
+.</p>
 <div class="refsect3">
 <a name="id-1.2.9.7.7.32.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
@@ -1677,16 +1693,15 @@
 </div>
 <div class="refsect3">
 <a name="id-1.2.9.7.7.32.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 there was a first entry.</p>
-<p></p>
+<p> TRUE if there was a next item.</p>
 </div>
 </div>
 <hr>
 <div class="refsect2">
-<a name="gst-rtcp-packet-sdes-next-entry"></a><h3>gst_rtcp_packet_sdes_next_entry ()</h3>
-<pre class="programlisting"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-gst_rtcp_packet_sdes_next_entry (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#GstRTCPPacket" title="struct GstRTCPPacket"><span class="type">GstRTCPPacket</span></a> *packet</code></em>);</pre>
-<p>Move to the next SDES entry in the current item.</p>
+<a name="gst-rtcp-packet-sdes-get-ssrc"></a><h3>gst_rtcp_packet_sdes_get_ssrc ()</h3>
+<pre class="programlisting"><span class="returnvalue">guint32</span>
+gst_rtcp_packet_sdes_get_ssrc (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#GstRTCPPacket" title="struct GstRTCPPacket"><span class="type">GstRTCPPacket</span></a> *packet</code></em>);</pre>
+<p>Get the SSRC of the current SDES item.</p>
 <div class="refsect3">
 <a name="id-1.2.9.7.7.33.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
@@ -1704,8 +1719,59 @@
 </div>
 <div class="refsect3">
 <a name="id-1.2.9.7.7.33.6"></a><h4>Returns</h4>
+<p> the SSRC of the current item.</p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-rtcp-packet-sdes-first-entry"></a><h3>gst_rtcp_packet_sdes_first_entry ()</h3>
+<pre class="programlisting"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
+gst_rtcp_packet_sdes_first_entry (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#GstRTCPPacket" title="struct GstRTCPPacket"><span class="type">GstRTCPPacket</span></a> *packet</code></em>);</pre>
+<p>Move to the first SDES entry in the current item.</p>
+<div class="refsect3">
+<a name="id-1.2.9.7.7.34.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>packet</p></td>
+<td class="parameter_description"><p>a valid SDES <a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#GstRTCPPacket" title="struct GstRTCPPacket"><span class="type">GstRTCPPacket</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="id-1.2.9.7.7.34.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 there was a first entry.</p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-rtcp-packet-sdes-next-entry"></a><h3>gst_rtcp_packet_sdes_next_entry ()</h3>
+<pre class="programlisting"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
+gst_rtcp_packet_sdes_next_entry (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#GstRTCPPacket" title="struct GstRTCPPacket"><span class="type">GstRTCPPacket</span></a> *packet</code></em>);</pre>
+<p>Move to the next SDES entry in the current item.</p>
+<div class="refsect3">
+<a name="id-1.2.9.7.7.35.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>packet</p></td>
+<td class="parameter_description"><p>a valid SDES <a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#GstRTCPPacket" title="struct GstRTCPPacket"><span class="type">GstRTCPPacket</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="id-1.2.9.7.7.35.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 there was a next entry.</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -1728,7 +1794,7 @@
 that this UTF8 string is NOT null-terminated. Use
 <a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#gst-rtcp-packet-sdes-copy-entry" title="gst_rtcp_packet_sdes_copy_entry ()"><code class="function">gst_rtcp_packet_sdes_copy_entry()</code></a> to get a null-terminated copy of the entry.</p>
 <div class="refsect3">
-<a name="id-1.2.9.7.7.34.6"></a><h4>Parameters</h4>
+<a name="id-1.2.9.7.7.36.6"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1760,9 +1826,8 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.9.7.7.34.7"></a><h4>Returns</h4>
+<a name="id-1.2.9.7.7.36.7"></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 there was valid data.</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -1776,7 +1841,7 @@
 <p>This function is like <a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#gst-rtcp-packet-sdes-get-entry" title="gst_rtcp_packet_sdes_get_entry ()"><code class="function">gst_rtcp_packet_sdes_get_entry()</code></a> but it returns a
 null-terminated copy of the data instead. use <a href="https://developer.gnome.org/glib/unstable/glib-Memory-Allocation.html#g-free"><code class="function">g_free()</code></a> after usage.</p>
 <div class="refsect3">
-<a name="id-1.2.9.7.7.35.5"></a><h4>Parameters</h4>
+<a name="id-1.2.9.7.7.37.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1808,9 +1873,8 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.9.7.7.35.6"></a><h4>Returns</h4>
+<a name="id-1.2.9.7.7.37.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 there was valid data.</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -1823,7 +1887,7 @@
  to <em class="parameter"><code>packet</code></em>
 .</p>
 <div class="refsect3">
-<a name="id-1.2.9.7.7.36.5"></a><h4>Parameters</h4>
+<a name="id-1.2.9.7.7.38.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1845,10 +1909,9 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.9.7.7.36.6"></a><h4>Returns</h4>
+<a name="id-1.2.9.7.7.38.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 the item could be added, <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> if the maximum amount of
 items has been exceeded for the SDES packet or the MTU has been reached.</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -1862,7 +1925,7 @@
 <p>Add a new SDES entry to the current item in <em class="parameter"><code>packet</code></em>
 .</p>
 <div class="refsect3">
-<a name="id-1.2.9.7.7.37.5"></a><h4>Parameters</h4>
+<a name="id-1.2.9.7.7.39.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1894,10 +1957,9 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.9.7.7.37.6"></a><h4>Returns</h4>
+<a name="id-1.2.9.7.7.39.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 the item could be added, <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> if the MTU has been
 reached.</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -1908,7 +1970,7 @@
 <p>Get the number of SSRC fields in <em class="parameter"><code>packet</code></em>
 .</p>
 <div class="refsect3">
-<a name="id-1.2.9.7.7.38.5"></a><h4>Parameters</h4>
+<a name="id-1.2.9.7.7.40.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1923,10 +1985,9 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.9.7.7.38.6"></a><h4>Returns</h4>
+<a name="id-1.2.9.7.7.40.6"></a><h4>Returns</h4>
 <p> The number of SSRC fields in <em class="parameter"><code>packet</code></em>
 .</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -1939,7 +2000,7 @@
  SSRC of the BYE <em class="parameter"><code>packet</code></em>
 .</p>
 <div class="refsect3">
-<a name="id-1.2.9.7.7.39.5"></a><h4>Parameters</h4>
+<a name="id-1.2.9.7.7.41.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1961,11 +2022,10 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.9.7.7.39.6"></a><h4>Returns</h4>
+<a name="id-1.2.9.7.7.41.6"></a><h4>Returns</h4>
 <p> The <em class="parameter"><code>nth</code></em>
 SSRC of <em class="parameter"><code>packet</code></em>
 .</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -1978,7 +2038,7 @@
  to the BYE <em class="parameter"><code>packet</code></em>
 .</p>
 <div class="refsect3">
-<a name="id-1.2.9.7.7.40.5"></a><h4>Parameters</h4>
+<a name="id-1.2.9.7.7.42.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -2000,11 +2060,10 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.9.7.7.40.6"></a><h4>Returns</h4>
+<a name="id-1.2.9.7.7.42.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 the ssrc was added. This function can return <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> if
 the max MTU is exceeded or the number of sources blocks is greater than
 <a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#GST-RTCP-MAX-BYE-SSRC-COUNT:CAPS" title="GST_RTCP_MAX_BYE_SSRC_COUNT"><span class="type">GST_RTCP_MAX_BYE_SSRC_COUNT</span></a>.</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -2019,7 +2078,7 @@
  to BYE <em class="parameter"><code>packet</code></em>
 .</p>
 <div class="refsect3">
-<a name="id-1.2.9.7.7.41.5"></a><h4>Parameters</h4>
+<a name="id-1.2.9.7.7.43.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -2047,11 +2106,10 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.9.7.7.41.6"></a><h4>Returns</h4>
+<a name="id-1.2.9.7.7.43.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 the all the SSRCs were added. This function can return <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> if
 the max MTU is exceeded or the number of sources blocks is greater than
 <a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#GST-RTCP-MAX-BYE-SSRC-COUNT:CAPS" title="GST_RTCP_MAX_BYE_SSRC_COUNT"><span class="type">GST_RTCP_MAX_BYE_SSRC_COUNT</span></a>.</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -2061,7 +2119,7 @@
 gst_rtcp_packet_bye_get_reason_len (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#GstRTCPPacket" title="struct GstRTCPPacket"><span class="type">GstRTCPPacket</span></a> *packet</code></em>);</pre>
 <p>Get the length of the reason string.</p>
 <div class="refsect3">
-<a name="id-1.2.9.7.7.42.5"></a><h4>Parameters</h4>
+<a name="id-1.2.9.7.7.44.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -2076,10 +2134,9 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.9.7.7.42.6"></a><h4>Returns</h4>
+<a name="id-1.2.9.7.7.44.6"></a><h4>Returns</h4>
 <p> The length of the reason string or 0 when there is no reason string
 present.</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -2090,7 +2147,7 @@
 <p>Get the reason in <em class="parameter"><code>packet</code></em>
 .</p>
 <div class="refsect3">
-<a name="id-1.2.9.7.7.43.5"></a><h4>Parameters</h4>
+<a name="id-1.2.9.7.7.45.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -2105,11 +2162,10 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.9.7.7.43.6"></a><h4>Returns</h4>
+<a name="id-1.2.9.7.7.45.6"></a><h4>Returns</h4>
 <p> The reason for the BYE <em class="parameter"><code>packet</code></em>
 or NULL if the packet did not contain
 a reason string. The string must be freed with <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></p>
 </div>
 </div>
 <hr>
@@ -2122,7 +2178,7 @@
  in <em class="parameter"><code>packet</code></em>
 .</p>
 <div class="refsect3">
-<a name="id-1.2.9.7.7.44.5"></a><h4>Parameters</h4>
+<a name="id-1.2.9.7.7.46.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -2144,9 +2200,8 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.9.7.7.44.6"></a><h4>Returns</h4>
+<a name="id-1.2.9.7.7.46.6"></a><h4>Returns</h4>
 <p> TRUE if the string could be set.</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -2157,7 +2212,7 @@
 <p>Get the feedback message type of the FB <em class="parameter"><code>packet</code></em>
 .</p>
 <div class="refsect3">
-<a name="id-1.2.9.7.7.45.5"></a><h4>Parameters</h4>
+<a name="id-1.2.9.7.7.47.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -2172,9 +2227,8 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.9.7.7.45.6"></a><h4>Returns</h4>
+<a name="id-1.2.9.7.7.47.6"></a><h4>Returns</h4>
 <p> The feedback message type.</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -2186,7 +2240,7 @@
 <p>Set the feedback message type of the FB <em class="parameter"><code>packet</code></em>
 .</p>
 <div class="refsect3">
-<a name="id-1.2.9.7.7.46.5"></a><h4>Parameters</h4>
+<a name="id-1.2.9.7.7.48.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -2216,7 +2270,7 @@
 <p>Get the sender SSRC field of the RTPFB or PSFB <em class="parameter"><code>packet</code></em>
 .</p>
 <div class="refsect3">
-<a name="id-1.2.9.7.7.47.5"></a><h4>Parameters</h4>
+<a name="id-1.2.9.7.7.49.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -2231,9 +2285,8 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.9.7.7.47.6"></a><h4>Returns</h4>
+<a name="id-1.2.9.7.7.49.6"></a><h4>Returns</h4>
 <p> the sender SSRC.</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -2245,7 +2298,7 @@
 <p>Set the sender SSRC field of the RTPFB or PSFB <em class="parameter"><code>packet</code></em>
 .</p>
 <div class="refsect3">
-<a name="id-1.2.9.7.7.48.5"></a><h4>Parameters</h4>
+<a name="id-1.2.9.7.7.50.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -2275,7 +2328,7 @@
 <p>Get the media SSRC field of the RTPFB or PSFB <em class="parameter"><code>packet</code></em>
 .</p>
 <div class="refsect3">
-<a name="id-1.2.9.7.7.49.5"></a><h4>Parameters</h4>
+<a name="id-1.2.9.7.7.51.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -2290,9 +2343,8 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.9.7.7.49.6"></a><h4>Returns</h4>
+<a name="id-1.2.9.7.7.51.6"></a><h4>Returns</h4>
 <p> the media SSRC.</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -2304,7 +2356,7 @@
 <p>Set the media SSRC field of the RTPFB or PSFB <em class="parameter"><code>packet</code></em>
 .</p>
 <div class="refsect3">
-<a name="id-1.2.9.7.7.50.5"></a><h4>Parameters</h4>
+<a name="id-1.2.9.7.7.52.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -2335,7 +2387,7 @@
 RTPFB or PSFB <em class="parameter"><code>packet</code></em>
 .</p>
 <div class="refsect3">
-<a name="id-1.2.9.7.7.51.5"></a><h4>Parameters</h4>
+<a name="id-1.2.9.7.7.53.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -2350,9 +2402,8 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.9.7.7.51.6"></a><h4>Returns</h4>
+<a name="id-1.2.9.7.7.53.6"></a><h4>Returns</h4>
 <p> The length of the FCI in 32-bit words.</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -2365,7 +2416,7 @@
 RTPFB or PSFB <em class="parameter"><code>packet</code></em>
 .</p>
 <div class="refsect3">
-<a name="id-1.2.9.7.7.52.5"></a><h4>Parameters</h4>
+<a name="id-1.2.9.7.7.54.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -2387,9 +2438,8 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.9.7.7.52.6"></a><h4>Returns</h4>
+<a name="id-1.2.9.7.7.54.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 there was enough space in the packet to add this much FCI</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -2400,7 +2450,7 @@
 <p>Get the Feedback Control Information attached to a RTPFB or PSFB <em class="parameter"><code>packet</code></em>
 .</p>
 <div class="refsect3">
-<a name="id-1.2.9.7.7.53.5"></a><h4>Parameters</h4>
+<a name="id-1.2.9.7.7.55.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -2415,9 +2465,8 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.9.7.7.53.6"></a><h4>Returns</h4>
+<a name="id-1.2.9.7.7.55.6"></a><h4>Returns</h4>
 <p> a pointer to the FCI</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -2431,7 +2480,7 @@
 number of seconds since 1900 and, in the lower 32 bits, the fractional
 seconds. The resulting value will be the number of nanoseconds since 1970.</p>
 <div class="refsect3">
-<a name="id-1.2.9.7.7.54.5"></a><h4>Parameters</h4>
+<a name="id-1.2.9.7.7.56.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -2446,10 +2495,9 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.9.7.7.54.6"></a><h4>Returns</h4>
+<a name="id-1.2.9.7.7.56.6"></a><h4>Returns</h4>
 <p> the UNIX time for <em class="parameter"><code>ntptime</code></em>
 in nanoseconds.</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -2463,7 +2511,7 @@
 bits, the fractional seconds. The resulting value can be used as an ntptime
 for constructing SR RTCP packets.</p>
 <div class="refsect3">
-<a name="id-1.2.9.7.7.55.5"></a><h4>Parameters</h4>
+<a name="id-1.2.9.7.7.57.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -2478,10 +2526,9 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.9.7.7.55.6"></a><h4>Returns</h4>
+<a name="id-1.2.9.7.7.57.6"></a><h4>Returns</h4>
 <p> the NTP time for <em class="parameter"><code>unixtime</code></em>
 .</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -2495,7 +2542,7 @@
  is typically a key in a
 <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstStructure.html"><span class="type">GstStructure</span></a> containing SDES items.</p>
 <div class="refsect3">
-<a name="id-1.2.9.7.7.56.5"></a><h4>Parameters</h4>
+<a name="id-1.2.9.7.7.58.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -2510,11 +2557,10 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.9.7.7.56.6"></a><h4>Returns</h4>
+<a name="id-1.2.9.7.7.58.6"></a><h4>Returns</h4>
 <p> the <a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#GstRTCPSDESType" title="enum GstRTCPSDESType"><span class="type">GstRTCPSDESType</span></a> for <em class="parameter"><code>name</code></em>
 or <a class="link" href="gst-plugins-base-libs-gstrtcpbuffer.html#GST-RTCP-SDES-PRIV:CAPS"><span class="type">GST_RTCP_SDES_PRIV</span></a> when <em class="parameter"><code>name</code></em>
 is a private sdes item.</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -2526,7 +2572,7 @@
  to the string equivalent. The string is typically used as a
 key in a <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstStructure.html"><span class="type">GstStructure</span></a> containing SDES items.</p>
 <div class="refsect3">
-<a name="id-1.2.9.7.7.57.5"></a><h4>Parameters</h4>
+<a name="id-1.2.9.7.7.59.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -2541,10 +2587,9 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.9.7.7.57.6"></a><h4>Returns</h4>
+<a name="id-1.2.9.7.7.59.6"></a><h4>Returns</h4>
 <p> the string equivalent of <em class="parameter"><code>type</code></em>
 </p>
-<p></p>
 </div>
 </div>
 </div>
@@ -2822,9 +2867,12 @@
 <td class="enum_member_annotations"> </td>
 </tr>
 <tr>
-<td class="enum_member_name"><p><a name="GST-RTCP-RTPFB-TYPE-RCTP-SR-REQ:CAPS"></a>GST_RTCP_RTPFB_TYPE_RCTP_SR_REQ</p></td>
-<td> </td>
-<td> </td>
+<td class="enum_member_name"><p><a name="GST-RTCP-RTPFB-TYPE-RTCP-SR-REQ:CAPS"></a>GST_RTCP_RTPFB_TYPE_RTCP_SR_REQ</p></td>
+<td class="enum_member_description">
+<p>Request an SR packet for early
+   synchronization</p>
+</td>
+<td class="enum_member_annotations"> </td>
 </tr>
 <tr>
 <td class="enum_member_name"><p><a name="GST-RTCP-PSFB-TYPE-PLI:CAPS"></a>GST_RTCP_PSFB_TYPE_PLI</p></td>
@@ -2908,7 +2956,6 @@
 </div>
 </div>
 <div class="footer">
-<hr>
-          Generated by GTK-Doc V1.21</div>
+<hr>Generated by GTK-Doc V1.24</div>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/libs/html/gst-plugins-base-libs-gstrtpbaseaudiopayload.html b/docs/libs/html/gst-plugins-base-libs-gstrtpbaseaudiopayload.html
index b05c9d5..e52f148 100644
--- a/docs/libs/html/gst-plugins-base-libs-gstrtpbaseaudiopayload.html
+++ b/docs/libs/html/gst-plugins-base-libs-gstrtpbaseaudiopayload.html
@@ -2,13 +2,13 @@
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>GStreamer Base Plugins 1.0 Library Reference Manual: gstrtpbaseaudiopayload</title>
+<title>gstrtpbaseaudiopayload: GStreamer Base 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 Base Plugins 1.0 Library Reference Manual">
 <link rel="up" href="gstreamer-rtp.html" title="RTP Library">
 <link rel="prev" href="gstreamer-rtp.html" title="RTP Library">
 <link rel="next" href="gst-plugins-base-libs-gstrtpbasedepayload.html" title="gstrtpbasedepayload">
-<meta name="generator" content="GTK-Doc V1.21 (XML mode)">
+<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">
@@ -383,7 +383,6 @@
 <div class="refsect3">
 <a name="id-1.2.9.3.10.7.6"></a><h4>Returns</h4>
 <p> a <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html#GstFlowReturn"><span class="type">GstFlowReturn</span></a></p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -432,7 +431,6 @@
 <div class="refsect3">
 <a name="id-1.2.9.3.10.8.7"></a><h4>Returns</h4>
 <p> a <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html#GstFlowReturn"><span class="type">GstFlowReturn</span></a></p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -510,7 +508,6 @@
 </div>
 </div>
 <div class="footer">
-<hr>
-          Generated by GTK-Doc V1.21</div>
+<hr>Generated by GTK-Doc V1.24</div>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/libs/html/gst-plugins-base-libs-gstrtpbasedepayload.html b/docs/libs/html/gst-plugins-base-libs-gstrtpbasedepayload.html
index 87e7ba4..12bb3cd 100644
--- a/docs/libs/html/gst-plugins-base-libs-gstrtpbasedepayload.html
+++ b/docs/libs/html/gst-plugins-base-libs-gstrtpbasedepayload.html
@@ -2,13 +2,13 @@
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>GStreamer Base Plugins 1.0 Library Reference Manual: gstrtpbasedepayload</title>
+<title>gstrtpbasedepayload: GStreamer Base 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 Base Plugins 1.0 Library Reference Manual">
 <link rel="up" href="gstreamer-rtp.html" title="RTP Library">
 <link rel="prev" href="gst-plugins-base-libs-gstrtpbaseaudiopayload.html" title="gstrtpbaseaudiopayload">
 <link rel="next" href="gst-plugins-base-libs-gstrtpbasepayload.html" title="gstrtpbasepayload">
-<meta name="generator" content="GTK-Doc V1.21 (XML mode)">
+<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">
@@ -129,13 +129,13 @@
 <a name="gst-plugins-base-libs-gstrtpbasedepayload.functions_details"></a><h2>Functions</h2>
 <div class="refsect2">
 <a name="GST-RTP-BASE-DEPAYLOAD-SINKPAD:CAPS"></a><h3>GST_RTP_BASE_DEPAYLOAD_SINKPAD()</h3>
-<pre class="programlisting">#define GST_RTP_BASE_DEPAYLOAD_SINKPAD(depayload) (GST_RTP_BASE_DEPAYLOAD (depayload)-&gt;sinkpad)
+<pre class="programlisting">#define GST_RTP_BASE_DEPAYLOAD_SINKPAD(depayload) (GST_RTP_BASE_DEPAYLOAD_CAST (depayload)-&gt;sinkpad)
 </pre>
 </div>
 <hr>
 <div class="refsect2">
 <a name="GST-RTP-BASE-DEPAYLOAD-SRCPAD:CAPS"></a><h3>GST_RTP_BASE_DEPAYLOAD_SRCPAD()</h3>
-<pre class="programlisting">#define GST_RTP_BASE_DEPAYLOAD_SRCPAD(depayload)  (GST_RTP_BASE_DEPAYLOAD (depayload)-&gt;srcpad)
+<pre class="programlisting">#define GST_RTP_BASE_DEPAYLOAD_SRCPAD(depayload)  (GST_RTP_BASE_DEPAYLOAD_CAST (depayload)-&gt;srcpad)
 </pre>
 </div>
 <hr>
@@ -176,7 +176,6 @@
 <div class="refsect3">
 <a name="id-1.2.9.4.10.4.7"></a><h4>Returns</h4>
 <p> a <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html#GstFlowReturn"><span class="type">GstFlowReturn</span></a>.</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -215,7 +214,6 @@
 <div class="refsect3">
 <a name="id-1.2.9.4.10.5.6"></a><h4>Returns</h4>
 <p> a <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html#GstFlowReturn"><span class="type">GstFlowReturn</span></a>.</p>
-<p></p>
 </div>
 </div>
 </div>
@@ -234,7 +232,8 @@
   /* virtuals, inform the subclass of the caps. */
   gboolean (*set_caps) (GstRTPBaseDepayload *filter, GstCaps *caps);
 
-  /* pure virtual function, child must use this to process incoming
+  /* pure virtual function, child must implement either this method
+   * or the process_rtp_packet virtual method to process incoming
    * rtp packets. If the child returns a buffer without a valid timestamp,
    * the timestamp of @in will be applied to the result buffer and the
    * buffer will be pushed. If this function returns %NULL, nothing is
@@ -249,6 +248,19 @@
   /* the default implementation does the default actions for events but
    * implementation can override. */
   gboolean (*handle_event) (GstRTPBaseDepayload * filter, GstEvent * event);
+
+  /* Optional. Same as the process virtual function, but slightly more
+   * efficient, since it is passed the rtp buffer structure that has already
+   * been mapped (with GST_MAP_READ) by the base class and thus does not have
+   * to be mapped again by the subclass. Can be used by the subclass to process
+   * incoming rtp packets. If the subclass returns a buffer without a valid
+   * timestamp, the timestamp of the input buffer will be applied to the result
+   * buffer and the output buffer will be pushed out. If this function returns
+   * %NULL, nothing is pushed out.
+   *
+   * Since: 1.6
+   */
+  GstBuffer * (*process_rtp_packet) (GstRTPBaseDepayload *base, GstRTPBuffer * rtp_buffer);
 };
 </pre>
 <p>Base class for audio RTP payloader.</p>
@@ -286,6 +298,11 @@
 <td class="struct_member_description"><p>custom event handling</p></td>
 <td class="struct_member_annotations"> </td>
 </tr>
+<tr>
+<td class="struct_member_name"><p><em class="structfield"><code><a name="GstRTPBaseDepayloadClass.process-rtp-packet"></a>process_rtp_packet</code></em> ()</p></td>
+<td> </td>
+<td> </td>
+</tr>
 </tbody>
 </table></div>
 </div>
@@ -360,7 +377,6 @@
 </div>
 </div>
 <div class="footer">
-<hr>
-          Generated by GTK-Doc V1.21</div>
+<hr>Generated by GTK-Doc V1.24</div>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/libs/html/gst-plugins-base-libs-gstrtpbasepayload.html b/docs/libs/html/gst-plugins-base-libs-gstrtpbasepayload.html
index 004dfda..4a54c02 100644
--- a/docs/libs/html/gst-plugins-base-libs-gstrtpbasepayload.html
+++ b/docs/libs/html/gst-plugins-base-libs-gstrtpbasepayload.html
@@ -2,13 +2,13 @@
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>GStreamer Base Plugins 1.0 Library Reference Manual: gstrtpbasepayload</title>
+<title>gstrtpbasepayload: GStreamer Base 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 Base Plugins 1.0 Library Reference Manual">
 <link rel="up" href="gstreamer-rtp.html" title="RTP Library">
 <link rel="prev" href="gst-plugins-base-libs-gstrtpbasedepayload.html" title="gstrtpbasedepayload">
 <link rel="next" href="gst-plugins-base-libs-gstrtpbuffer.html" title="gstrtpbuffer">
-<meta name="generator" content="GTK-Doc V1.21 (XML mode)">
+<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">
@@ -356,7 +356,6 @@
 and <em class="parameter"><code>duration</code></em>
 would exceed the
 configured MTU or max_ptime.</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -395,7 +394,6 @@
 <div class="refsect3">
 <a name="id-1.2.9.5.10.7.7"></a><h4>Returns</h4>
 <p> a <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html#GstFlowReturn"><span class="type">GstFlowReturn</span></a>.</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -434,7 +432,6 @@
 <div class="refsect3">
 <a name="id-1.2.9.5.10.8.7"></a><h4>Returns</h4>
 <p> a <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html#GstFlowReturn"><span class="type">GstFlowReturn</span></a>.</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -527,7 +524,6 @@
 <div class="refsect3">
 <a name="id-1.2.9.5.10.10.7"></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 caps could be set.</p>
-<p></p>
 </div>
 </div>
 </div>
@@ -780,7 +776,6 @@
 </div>
 </div>
 <div class="footer">
-<hr>
-          Generated by GTK-Doc V1.21</div>
+<hr>Generated by GTK-Doc V1.24</div>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/libs/html/gst-plugins-base-libs-gstrtpbuffer.html b/docs/libs/html/gst-plugins-base-libs-gstrtpbuffer.html
index eeb12a8..771fa49 100644
--- a/docs/libs/html/gst-plugins-base-libs-gstrtpbuffer.html
+++ b/docs/libs/html/gst-plugins-base-libs-gstrtpbuffer.html
@@ -2,13 +2,13 @@
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>GStreamer Base Plugins 1.0 Library Reference Manual: gstrtpbuffer</title>
+<title>gstrtpbuffer: GStreamer Base 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 Base Plugins 1.0 Library Reference Manual">
 <link rel="up" href="gstreamer-rtp.html" title="RTP Library">
 <link rel="prev" href="gst-plugins-base-libs-gstrtpbasepayload.html" title="gstrtpbasepayload">
 <link rel="next" href="gst-plugins-base-libs-gstrtcpbuffer.html" title="gstrtcpbuffer">
-<meta name="generator" content="GTK-Doc V1.21 (XML mode)">
+<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">
@@ -209,6 +209,14 @@
 </tr>
 <tr>
 <td class="function_type">
+<a href="https://developer.gnome.org/glib/unstable/glib-Byte-Arrays.html#GBytes"><span class="returnvalue">GBytes</span></a> *
+</td>
+<td class="function_name">
+<a class="link" href="gst-plugins-base-libs-gstrtpbuffer.html#gst-rtp-buffer-get-extension-bytes" title="gst_rtp_buffer_get_extension_bytes ()">gst_rtp_buffer_get_extension_bytes</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
 <span class="returnvalue">guint32</span>
 </td>
 <td class="function_name">
@@ -337,6 +345,14 @@
 </tr>
 <tr>
 <td class="function_type">
+<a href="https://developer.gnome.org/glib/unstable/glib-Byte-Arrays.html#GBytes"><span class="returnvalue">GBytes</span></a> *
+</td>
+<td class="function_name">
+<a class="link" href="gst-plugins-base-libs-gstrtpbuffer.html#gst-rtp-buffer-get-payload-bytes" title="gst_rtp_buffer_get_payload_bytes ()">gst_rtp_buffer_get_payload_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#gpointer"><span class="returnvalue">gpointer</span></a>
 </td>
 <td class="function_name">
@@ -542,7 +558,6 @@
 <p> A newly allocated buffer with <em class="parameter"><code>data</code></em>
 and of size <em class="parameter"><code>len</code></em>
 .</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -585,7 +600,6 @@
 <p> A newly allocated buffer with a copy of <em class="parameter"><code>data</code></em>
 and of size <em class="parameter"><code>len</code></em>
 .</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -632,7 +646,6 @@
 <a name="id-1.2.9.6.7.5.6"></a><h4>Returns</h4>
 <p> A newly allocated buffer that can hold an RTP packet with given
 parameters.</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -680,7 +693,6 @@
 <a name="id-1.2.9.6.7.6.6"></a><h4>Returns</h4>
 <p> A newly allocated buffer that can hold an RTP packet of <em class="parameter"><code>packet_len</code></em>
 .</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -724,7 +736,6 @@
 <a name="id-1.2.9.6.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 <em class="parameter"><code>buffer</code></em>
 could be mapped.</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -777,7 +788,6 @@
 <a name="id-1.2.9.6.7.9.6"></a><h4>Returns</h4>
 <p> The length of an RTP header with <em class="parameter"><code>csrc_count</code></em>
 CSRC entries.</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -822,7 +832,6 @@
 <div class="refsect3">
 <a name="id-1.2.9.6.7.10.6"></a><h4>Returns</h4>
 <p> The total length of an RTP header with given parameters.</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -867,7 +876,6 @@
 <div class="refsect3">
 <a name="id-1.2.9.6.7.11.6"></a><h4>Returns</h4>
 <p> The length of the payload of an RTP packet  with given parameters.</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -929,7 +937,6 @@
 <a name="id-1.2.9.6.7.13.6"></a><h4>Returns</h4>
 <p> The total length of the packet in <em class="parameter"><code>buffer</code></em>
 .</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -959,7 +966,6 @@
 <a name="id-1.2.9.6.7.14.6"></a><h4>Returns</h4>
 <p> The total length of the header in <em class="parameter"><code>buffer</code></em>
 .</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -988,7 +994,6 @@
 <a name="id-1.2.9.6.7.15.6"></a><h4>Returns</h4>
 <p> The version of <em class="parameter"><code>buffer</code></em>
 .</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -1049,7 +1054,6 @@
 <a name="id-1.2.9.6.7.17.6"></a><h4>Returns</h4>
 <p> TRUE if <em class="parameter"><code>buffer</code></em>
 has the padding bit set.</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -1145,7 +1149,6 @@
 <a name="id-1.2.9.6.7.20.6"></a><h4>Returns</h4>
 <p> TRUE if <em class="parameter"><code>buffer</code></em>
 has the extension bit set.</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -1201,8 +1204,9 @@
 , <em class="parameter"><code>data</code></em>
  and <em class="parameter"><code>wordlen</code></em>
  unchanged.</p>
+<p><span class="annotation">[<acronym title="Exposed in C code, not necessarily available in other languages."><span class="acronym">skip</span></acronym>]</span></p>
 <div class="refsect3">
-<a name="id-1.2.9.6.7.22.6"></a><h4>Parameters</h4>
+<a name="id-1.2.9.6.7.22.7"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1235,21 +1239,67 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.9.6.7.22.7"></a><h4>Returns</h4>
+<a name="id-1.2.9.6.7.22.8"></a><h4>Returns</h4>
 <p> TRUE if <em class="parameter"><code>buffer</code></em>
 had the extension bit set.</p>
-<p></p>
 </div>
 </div>
 <hr>
 <div class="refsect2">
+<a name="gst-rtp-buffer-get-extension-bytes"></a><h3>gst_rtp_buffer_get_extension_bytes ()</h3>
+<pre class="programlisting"><a href="https://developer.gnome.org/glib/unstable/glib-Byte-Arrays.html#GBytes"><span class="returnvalue">GBytes</span></a> *
+gst_rtp_buffer_get_extension_bytes (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstrtpbuffer.html#GstRTPBuffer" title="struct GstRTPBuffer"><span class="type">GstRTPBuffer</span></a> *rtp</code></em>,
+                                    <em class="parameter"><code><span class="type">guint16</span> *bits</code></em>);</pre>
+<p>Similar to gst_rtp_buffer_get_extension_data, but more suitable for language
+bindings usage. <em class="parameter"><code>bits</code></em>
+ will contain the extension 16 bits of custom data and
+the extension data (not including the extension header) is placed in a new
+<a href="https://developer.gnome.org/glib/unstable/glib-Byte-Arrays.html#GBytes"><span class="type">GBytes</span></a> structure.</p>
+<p>If <em class="parameter"><code>rtp</code></em>
+ did not contain an extension, this function will return <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>, with
+<em class="parameter"><code>bits</code></em>
+ unchanged. If there is an extension header but no extension data then
+an empty <a href="https://developer.gnome.org/glib/unstable/glib-Byte-Arrays.html#GBytes"><span class="type">GBytes</span></a> will be returned.</p>
+<p><span class="annotation">[<acronym title="Rename the original symbol's name to SYMBOL."><span class="acronym">rename-to</span></acronym> gst_rtp_buffer_get_extension_data]</span></p>
+<div class="refsect3">
+<a name="id-1.2.9.6.7.23.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>rtp</p></td>
+<td class="parameter_description"><p>the RTP packet</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>bits</p></td>
+<td class="parameter_description"><p> location for header bits. </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.6.7.23.8"></a><h4>Returns</h4>
+<p> A new <a href="https://developer.gnome.org/glib/unstable/glib-Byte-Arrays.html#GBytes"><span class="type">GBytes</span></a> if an extension header was present
+and <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> otherwise. </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.2</p>
+</div>
+<hr>
+<div class="refsect2">
 <a name="gst-rtp-buffer-get-ssrc"></a><h3>gst_rtp_buffer_get_ssrc ()</h3>
 <pre class="programlisting"><span class="returnvalue">guint32</span>
 gst_rtp_buffer_get_ssrc (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstrtpbuffer.html#GstRTPBuffer" title="struct GstRTPBuffer"><span class="type">GstRTPBuffer</span></a> *rtp</code></em>);</pre>
 <p>Get the SSRC of the RTP packet in <em class="parameter"><code>buffer</code></em>
 .</p>
 <div class="refsect3">
-<a name="id-1.2.9.6.7.23.5"></a><h4>Parameters</h4>
+<a name="id-1.2.9.6.7.24.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1264,10 +1314,9 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.9.6.7.23.6"></a><h4>Returns</h4>
+<a name="id-1.2.9.6.7.24.6"></a><h4>Returns</h4>
 <p> the SSRC of <em class="parameter"><code>buffer</code></em>
 in host order.</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -1280,7 +1329,7 @@
  to <em class="parameter"><code>ssrc</code></em>
 .</p>
 <div class="refsect3">
-<a name="id-1.2.9.6.7.24.5"></a><h4>Parameters</h4>
+<a name="id-1.2.9.6.7.25.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1310,7 +1359,7 @@
 <p>Get the CSRC count of the RTP packet in <em class="parameter"><code>buffer</code></em>
 .</p>
 <div class="refsect3">
-<a name="id-1.2.9.6.7.25.5"></a><h4>Parameters</h4>
+<a name="id-1.2.9.6.7.26.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1325,10 +1374,9 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.9.6.7.25.6"></a><h4>Returns</h4>
+<a name="id-1.2.9.6.7.26.6"></a><h4>Returns</h4>
 <p> the CSRC count of <em class="parameter"><code>buffer</code></em>
 .</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -1341,7 +1389,7 @@
  in <em class="parameter"><code>buffer</code></em>
 .</p>
 <div class="refsect3">
-<a name="id-1.2.9.6.7.26.5"></a><h4>Parameters</h4>
+<a name="id-1.2.9.6.7.27.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1363,10 +1411,9 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.9.6.7.26.6"></a><h4>Returns</h4>
+<a name="id-1.2.9.6.7.27.6"></a><h4>Returns</h4>
 <p> the CSRC at index <em class="parameter"><code>idx</code></em>
 in host order.</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -1381,7 +1428,7 @@
  to <em class="parameter"><code>csrc</code></em>
 .</p>
 <div class="refsect3">
-<a name="id-1.2.9.6.7.27.5"></a><h4>Parameters</h4>
+<a name="id-1.2.9.6.7.28.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1417,7 +1464,7 @@
 <p>Check if the marker bit is set on the RTP packet in <em class="parameter"><code>buffer</code></em>
 .</p>
 <div class="refsect3">
-<a name="id-1.2.9.6.7.28.5"></a><h4>Parameters</h4>
+<a name="id-1.2.9.6.7.29.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1432,10 +1479,9 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.9.6.7.28.6"></a><h4>Returns</h4>
+<a name="id-1.2.9.6.7.29.6"></a><h4>Returns</h4>
 <p> TRUE if <em class="parameter"><code>buffer</code></em>
 has the marker bit set.</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -1448,7 +1494,7 @@
  to <em class="parameter"><code>marker</code></em>
 .</p>
 <div class="refsect3">
-<a name="id-1.2.9.6.7.29.5"></a><h4>Parameters</h4>
+<a name="id-1.2.9.6.7.30.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1478,7 +1524,7 @@
 <p>Get the payload type of the RTP packet in <em class="parameter"><code>buffer</code></em>
 .</p>
 <div class="refsect3">
-<a name="id-1.2.9.6.7.30.5"></a><h4>Parameters</h4>
+<a name="id-1.2.9.6.7.31.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1493,9 +1539,8 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.9.6.7.30.6"></a><h4>Returns</h4>
+<a name="id-1.2.9.6.7.31.6"></a><h4>Returns</h4>
 <p> The payload type.</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -1508,7 +1553,7 @@
  to <em class="parameter"><code>payload_type</code></em>
 .</p>
 <div class="refsect3">
-<a name="id-1.2.9.6.7.31.5"></a><h4>Parameters</h4>
+<a name="id-1.2.9.6.7.32.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1538,7 +1583,7 @@
 <p>Get the sequence number of the RTP packet in <em class="parameter"><code>buffer</code></em>
 .</p>
 <div class="refsect3">
-<a name="id-1.2.9.6.7.32.5"></a><h4>Parameters</h4>
+<a name="id-1.2.9.6.7.33.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1553,9 +1598,8 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.9.6.7.32.6"></a><h4>Returns</h4>
+<a name="id-1.2.9.6.7.33.6"></a><h4>Returns</h4>
 <p> The sequence number in host order.</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -1568,7 +1612,7 @@
  to <em class="parameter"><code>seq</code></em>
 .</p>
 <div class="refsect3">
-<a name="id-1.2.9.6.7.33.5"></a><h4>Parameters</h4>
+<a name="id-1.2.9.6.7.34.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1598,7 +1642,7 @@
 <p>Get the timestamp of the RTP packet in <em class="parameter"><code>buffer</code></em>
 .</p>
 <div class="refsect3">
-<a name="id-1.2.9.6.7.34.5"></a><h4>Parameters</h4>
+<a name="id-1.2.9.6.7.35.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1613,9 +1657,8 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.9.6.7.34.6"></a><h4>Returns</h4>
+<a name="id-1.2.9.6.7.35.6"></a><h4>Returns</h4>
 <p> The timestamp in host order.</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -1628,7 +1671,7 @@
  to <em class="parameter"><code>timestamp</code></em>
 .</p>
 <div class="refsect3">
-<a name="id-1.2.9.6.7.35.5"></a><h4>Parameters</h4>
+<a name="id-1.2.9.6.7.36.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1661,7 +1704,7 @@
  so that a memcpy can be
 avoided.</p>
 <div class="refsect3">
-<a name="id-1.2.9.6.7.36.5"></a><h4>Parameters</h4>
+<a name="id-1.2.9.6.7.37.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1676,9 +1719,8 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.9.6.7.36.6"></a><h4>Returns</h4>
+<a name="id-1.2.9.6.7.37.6"></a><h4>Returns</h4>
 <p> A new buffer with the data of the payload.</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -1697,7 +1739,7 @@
  is -1 the total payload starting from <em class="parameter"><code>offset</code></em>
  is subbuffered.</p>
 <div class="refsect3">
-<a name="id-1.2.9.6.7.37.5"></a><h4>Parameters</h4>
+<a name="id-1.2.9.6.7.38.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1724,9 +1766,8 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.9.6.7.37.6"></a><h4>Returns</h4>
+<a name="id-1.2.9.6.7.38.6"></a><h4>Returns</h4>
 <p> A new buffer with the specified data of the payload.</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -1737,37 +1778,6 @@
 <p>Get the length of the payload of the RTP packet in <em class="parameter"><code>buffer</code></em>
 .</p>
 <div class="refsect3">
-<a name="id-1.2.9.6.7.38.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>rtp</p></td>
-<td class="parameter_description"><p>the RTP packet</p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
-</table></div>
-</div>
-<div class="refsect3">
-<a name="id-1.2.9.6.7.38.6"></a><h4>Returns</h4>
-<p> The length of the payload in <em class="parameter"><code>buffer</code></em>
-.</p>
-<p></p>
-</div>
-</div>
-<hr>
-<div class="refsect2">
-<a name="gst-rtp-buffer-get-payload"></a><h3>gst_rtp_buffer_get_payload ()</h3>
-<pre class="programlisting"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gpointer"><span class="returnvalue">gpointer</span></a>
-gst_rtp_buffer_get_payload (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstrtpbuffer.html#GstRTPBuffer" title="struct GstRTPBuffer"><span class="type">GstRTPBuffer</span></a> *rtp</code></em>);</pre>
-<p>Get a pointer to the payload data in <em class="parameter"><code>buffer</code></em>
-. This pointer is valid as long
-as a reference to <em class="parameter"><code>buffer</code></em>
- is held.</p>
-<div class="refsect3">
 <a name="id-1.2.9.6.7.39.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
@@ -1784,6 +1794,70 @@
 </div>
 <div class="refsect3">
 <a name="id-1.2.9.6.7.39.6"></a><h4>Returns</h4>
+<p> The length of the payload in <em class="parameter"><code>buffer</code></em>
+.</p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-rtp-buffer-get-payload-bytes"></a><h3>gst_rtp_buffer_get_payload_bytes ()</h3>
+<pre class="programlisting"><a href="https://developer.gnome.org/glib/unstable/glib-Byte-Arrays.html#GBytes"><span class="returnvalue">GBytes</span></a> *
+gst_rtp_buffer_get_payload_bytes (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstrtpbuffer.html#GstRTPBuffer" title="struct GstRTPBuffer"><span class="type">GstRTPBuffer</span></a> *rtp</code></em>);</pre>
+<p>Similar to gst_rtp_buffer_get_payload, but more suitable for language
+bindings usage. The return value is a pointer to a <a href="https://developer.gnome.org/glib/unstable/glib-Byte-Arrays.html#GBytes"><span class="type">GBytes</span></a> structure
+containing the payload data in <em class="parameter"><code>rtp</code></em>
+.</p>
+<p><span class="annotation">[<acronym title="Rename the original symbol's name to SYMBOL."><span class="acronym">rename-to</span></acronym> gst_rtp_buffer_get_payload]</span></p>
+<div class="refsect3">
+<a name="id-1.2.9.6.7.40.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>rtp</p></td>
+<td class="parameter_description"><p>the RTP packet</p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="id-1.2.9.6.7.40.7"></a><h4>Returns</h4>
+<p> A new <a href="https://developer.gnome.org/glib/unstable/glib-Byte-Arrays.html#GBytes"><span class="type">GBytes</span></a> containing the payload data in <em class="parameter"><code>rtp</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>
+<p class="since">Since: 1.2</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-rtp-buffer-get-payload"></a><h3>gst_rtp_buffer_get_payload ()</h3>
+<pre class="programlisting"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gpointer"><span class="returnvalue">gpointer</span></a>
+gst_rtp_buffer_get_payload (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstrtpbuffer.html#GstRTPBuffer" title="struct GstRTPBuffer"><span class="type">GstRTPBuffer</span></a> *rtp</code></em>);</pre>
+<p>Get a pointer to the payload data in <em class="parameter"><code>buffer</code></em>
+. This pointer is valid as long
+as a reference to <em class="parameter"><code>buffer</code></em>
+ is held.</p>
+<p><span class="annotation">[<acronym title="Exposed in C code, not necessarily available in other languages."><span class="acronym">skip</span></acronym>]</span></p>
+<div class="refsect3">
+<a name="id-1.2.9.6.7.41.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>rtp</p></td>
+<td class="parameter_description"><p>the RTP packet</p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="id-1.2.9.6.7.41.7"></a><h4>Returns</h4>
 <p> A pointer
 to the payload data in <em class="parameter"><code>buffer</code></em>
 . </p>
@@ -1798,7 +1872,7 @@
 <p>Get the default clock-rate for the static payload type <em class="parameter"><code>payload_type</code></em>
 .</p>
 <div class="refsect3">
-<a name="id-1.2.9.6.7.40.5"></a><h4>Parameters</h4>
+<a name="id-1.2.9.6.7.42.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1813,10 +1887,9 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.9.6.7.40.6"></a><h4>Returns</h4>
+<a name="id-1.2.9.6.7.42.6"></a><h4>Returns</h4>
 <p> the default clock rate or -1 if the payload type is not static or
 the clock-rate is undefined.</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -1830,7 +1903,7 @@
  and <em class="parameter"><code>seqnum2</code></em>
 .</p>
 <div class="refsect3">
-<a name="id-1.2.9.6.7.41.5"></a><h4>Parameters</h4>
+<a name="id-1.2.9.6.7.43.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1852,14 +1925,13 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.9.6.7.41.6"></a><h4>Returns</h4>
+<a name="id-1.2.9.6.7.43.6"></a><h4>Returns</h4>
 <p> a negative value if <em class="parameter"><code>seqnum1</code></em>
 is bigger than <em class="parameter"><code>seqnum2</code></em>
 , 0 if they
 are equal or a positive value if <em class="parameter"><code>seqnum1</code></em>
 is smaller than <em class="parameter"><code>segnum2</code></em>
 .</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -1876,7 +1948,7 @@
 <p>This function makes sure that the returned value is a constantly increasing
 value even in the case where there is a timestamp wraparound.</p>
 <div class="refsect3">
-<a name="id-1.2.9.6.7.42.6"></a><h4>Parameters</h4>
+<a name="id-1.2.9.6.7.44.6"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1898,10 +1970,9 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.9.6.7.42.7"></a><h4>Returns</h4>
+<a name="id-1.2.9.6.7.44.7"></a><h4>Returns</h4>
 <p> The extended timestamp of <em class="parameter"><code>timestamp</code></em>
 .</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -1917,7 +1988,7 @@
 extension header. If the existing extension data is not large enough, it will
 be made larger.</p>
 <div class="refsect3">
-<a name="id-1.2.9.6.7.43.5"></a><h4>Parameters</h4>
+<a name="id-1.2.9.6.7.45.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1945,9 +2016,8 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.9.6.7.43.6"></a><h4>Returns</h4>
+<a name="id-1.2.9.6.7.45.6"></a><h4>Returns</h4>
 <p> True if done.</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -1963,7 +2033,7 @@
 <p>Parses RFC 5285 style header extensions with a one byte header. It will
 return the nth extension with the requested id.</p>
 <div class="refsect3">
-<a name="id-1.2.9.6.7.44.5"></a><h4>Parameters</h4>
+<a name="id-1.2.9.6.7.46.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -2000,10 +2070,9 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.9.6.7.44.6"></a><h4>Returns</h4>
+<a name="id-1.2.9.6.7.46.6"></a><h4>Returns</h4>
 <p> TRUE if <em class="parameter"><code>buffer</code></em>
 had the requested header extension</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -2020,7 +2089,7 @@
 <p>Parses RFC 5285 style header extensions with a two bytes header. It will
 return the nth extension with the requested id.</p>
 <div class="refsect3">
-<a name="id-1.2.9.6.7.45.5"></a><h4>Parameters</h4>
+<a name="id-1.2.9.6.7.47.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -2062,10 +2131,9 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.9.6.7.45.6"></a><h4>Returns</h4>
+<a name="id-1.2.9.6.7.47.6"></a><h4>Returns</h4>
 <p> TRUE if <em class="parameter"><code>buffer</code></em>
 had the requested header extension</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -2085,7 +2153,7 @@
 a two bytes header as described in RFC 5285. In that case, use
 <a class="link" href="gst-plugins-base-libs-gstrtpbuffer.html#gst-rtp-buffer-add-extension-twobytes-header" title="gst_rtp_buffer_add_extension_twobytes_header ()"><code class="function">gst_rtp_buffer_add_extension_twobytes_header()</code></a></p>
 <div class="refsect3">
-<a name="id-1.2.9.6.7.46.5"></a><h4>Parameters</h4>
+<a name="id-1.2.9.6.7.48.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -2117,9 +2185,8 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.9.6.7.46.6"></a><h4>Returns</h4>
+<a name="id-1.2.9.6.7.48.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 header extension could be added</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -2140,7 +2207,7 @@
 a one byte header as described in RFC 5285. In that case, use
 <a class="link" href="gst-plugins-base-libs-gstrtpbuffer.html#gst-rtp-buffer-add-extension-onebyte-header" title="gst_rtp_buffer_add_extension_onebyte_header ()"><code class="function">gst_rtp_buffer_add_extension_onebyte_header()</code></a></p>
 <div class="refsect3">
-<a name="id-1.2.9.6.7.47.5"></a><h4>Parameters</h4>
+<a name="id-1.2.9.6.7.49.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -2177,9 +2244,8 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.9.6.7.47.6"></a><h4>Returns</h4>
+<a name="id-1.2.9.6.7.49.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 header extension could be added</p>
-<p></p>
 </div>
 </div>
 </div>
@@ -2254,7 +2320,6 @@
 </div>
 </div>
 <div class="footer">
-<hr>
-          Generated by GTK-Doc V1.21</div>
+<hr>Generated by GTK-Doc V1.24</div>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/libs/html/gst-plugins-base-libs-gstrtphdrext.html b/docs/libs/html/gst-plugins-base-libs-gstrtphdrext.html
index eeb8bba..fe0928e 100644
--- a/docs/libs/html/gst-plugins-base-libs-gstrtphdrext.html
+++ b/docs/libs/html/gst-plugins-base-libs-gstrtphdrext.html
@@ -2,13 +2,13 @@
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>GStreamer Base Plugins 1.0 Library Reference Manual: gstrtphdrext</title>
+<title>gstrtphdrext: GStreamer Base 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 Base Plugins 1.0 Library Reference Manual">
 <link rel="up" href="gstreamer-rtp.html" title="RTP Library">
 <link rel="prev" href="gst-plugins-base-libs-gstrtppayloads.html" title="gstrtppayloads">
 <link rel="next" href="gstreamer-rtsp.html" title="RTSP Library">
-<meta name="generator" content="GTK-Doc V1.21 (XML mode)">
+<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">
@@ -27,7 +27,7 @@
 <div class="refnamediv"><table width="100%"><tr>
 <td valign="top">
 <h2><span class="refentrytitle"><a name="gst-plugins-base-libs-gstrtphdrext.top_of_page"></a>gstrtphdrext</span></h2>
-<p>gstrtphdrext</p>
+<p>gstrtphdrext — Helper methods for dealing with RTP header extensions</p>
 </td>
 <td class="gallery_image" valign="top" align="right"></td>
 </tr></table></div>
@@ -81,6 +81,10 @@
 </div>
 <div class="refsect1">
 <a name="gst-plugins-base-libs-gstrtphdrext.description"></a><h2>Description</h2>
+<div class="refsect2">
+<a name="id-1.2.9.9.5.2"></a><p>
+</p>
+</div>
 </div>
 <div class="refsect1">
 <a name="gst-plugins-base-libs-gstrtphdrext.functions_details"></a><h2>Functions</h2>
@@ -126,7 +130,6 @@
 <div class="refsect3">
 <a name="id-1.2.9.9.6.2.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> on success.</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -172,7 +175,6 @@
 <div class="refsect3">
 <a name="id-1.2.9.9.6.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> on success.</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -217,7 +219,6 @@
 <div class="refsect3">
 <a name="id-1.2.9.9.6.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> on success.</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -262,16 +263,18 @@
 <div class="refsect3">
 <a name="id-1.2.9.9.6.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> on success.</p>
-<p></p>
 </div>
 </div>
 </div>
 <div class="refsect1">
 <a name="gst-plugins-base-libs-gstrtphdrext.other_details"></a><h2>Types and Values</h2>
 </div>
+<div class="refsect1">
+<a name="gst-plugins-base-libs-gstrtphdrext.see-also"></a><h2>See Also</h2>
+<p><a class="link" href="gst-plugins-base-libs-gstrtpbasepayload.html#GstRTPBasePayload"><span class="type">GstRTPBasePayload</span></a>, <a class="link" href="gst-plugins-base-libs-gstrtpbasedepayload.html#GstRTPBaseDepayload"><span class="type">GstRTPBaseDepayload</span></a>, gstrtpbuffer</p>
+</div>
 </div>
 <div class="footer">
-<hr>
-          Generated by GTK-Doc V1.21</div>
+<hr>Generated by GTK-Doc V1.24</div>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/libs/html/gst-plugins-base-libs-gstrtppayloads.html b/docs/libs/html/gst-plugins-base-libs-gstrtppayloads.html
index 707087e..189dfed 100644
--- a/docs/libs/html/gst-plugins-base-libs-gstrtppayloads.html
+++ b/docs/libs/html/gst-plugins-base-libs-gstrtppayloads.html
@@ -2,13 +2,13 @@
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>GStreamer Base Plugins 1.0 Library Reference Manual: gstrtppayloads</title>
+<title>gstrtppayloads: GStreamer Base 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 Base Plugins 1.0 Library Reference Manual">
 <link rel="up" href="gstreamer-rtp.html" title="RTP Library">
 <link rel="prev" href="gst-plugins-base-libs-gstrtcpbuffer.html" title="gstrtcpbuffer">
 <link rel="next" href="gst-plugins-base-libs-gstrtphdrext.html" title="gstrtphdrext">
-<meta name="generator" content="GTK-Doc V1.21 (XML mode)">
+<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">
@@ -160,7 +160,6 @@
 <div class="refsect3">
 <a name="id-1.2.9.8.7.3.7"></a><h4>Returns</h4>
 <p> a <a class="link" href="gst-plugins-base-libs-gstrtppayloads.html#GstRTPPayloadInfo" title="struct GstRTPPayloadInfo"><span class="type">GstRTPPayloadInfo</span></a> or NULL when no info could be found.</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -191,7 +190,6 @@
 <div class="refsect3">
 <a name="id-1.2.9.8.7.4.6"></a><h4>Returns</h4>
 <p> a <a class="link" href="gst-plugins-base-libs-gstrtppayloads.html#GstRTPPayloadInfo" title="struct GstRTPPayloadInfo"><span class="type">GstRTPPayloadInfo</span></a> or NULL when no info could be found.</p>
-<p></p>
 </div>
 </div>
 </div>
@@ -469,7 +467,6 @@
 </div>
 </div>
 <div class="footer">
-<hr>
-          Generated by GTK-Doc V1.21</div>
+<hr>Generated by GTK-Doc V1.24</div>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/libs/html/gst-plugins-base-libs-gstrtspconnection.html b/docs/libs/html/gst-plugins-base-libs-gstrtspconnection.html
index 11f2d63..17f08eb 100644
--- a/docs/libs/html/gst-plugins-base-libs-gstrtspconnection.html
+++ b/docs/libs/html/gst-plugins-base-libs-gstrtspconnection.html
@@ -2,13 +2,13 @@
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>GStreamer Base Plugins 1.0 Library Reference Manual: gstrtspconnection</title>
+<title>gstrtspconnection: GStreamer Base 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 Base Plugins 1.0 Library Reference Manual">
 <link rel="up" href="gstreamer-rtsp.html" title="RTSP Library">
 <link rel="prev" href="gstreamer-rtsp.html" title="RTSP Library">
 <link rel="next" href="gst-plugins-base-libs-gstrtspdefs.html" title="gstrtspdefs">
-<meta name="generator" content="GTK-Doc V1.21 (XML mode)">
+<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">
@@ -295,6 +295,38 @@
 </tr>
 <tr>
 <td class="function_type">
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
+<a class="link" href="gst-plugins-base-libs-gstrtspconnection.html#gst-rtsp-connection-set-tls-database" title="gst_rtsp_connection_set_tls_database ()">gst_rtsp_connection_set_tls_database</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a href="https://developer.gnome.org/gio/unstable/GTlsDatabase.html"><span class="returnvalue">GTlsDatabase</span></a> *
+</td>
+<td class="function_name">
+<a class="link" href="gst-plugins-base-libs-gstrtspconnection.html#gst-rtsp-connection-get-tls-database" title="gst_rtsp_connection_get_tls_database ()">gst_rtsp_connection_get_tls_database</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-base-libs-gstrtspconnection.html#gst-rtsp-connection-set-tls-interaction" title="gst_rtsp_connection_set_tls_interaction ()">gst_rtsp_connection_set_tls_interaction</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a href="https://developer.gnome.org/gio/unstable/GTlsInteraction.html"><span class="returnvalue">GTlsInteraction</span></a> *
+</td>
+<td class="function_name">
+<a class="link" href="gst-plugins-base-libs-gstrtspconnection.html#gst-rtsp-connection-get-tls-interaction" title="gst_rtsp_connection_get_tls_interaction ()">gst_rtsp_connection_get_tls_interaction</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
 <a class="link" href="gst-plugins-base-libs-gstrtspconnection.html#GstRTSPWatch" title="GstRTSPWatch"><span class="returnvalue">GstRTSPWatch</span></a> *
 </td>
 <td class="function_name">
@@ -359,6 +391,14 @@
 </tr>
 <tr>
 <td class="function_type">
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
+<a class="link" href="gst-plugins-base-libs-gstrtspconnection.html#gst-rtsp-watch-set-flushing" title="gst_rtsp_watch_set_flushing ()">gst_rtsp_watch_set_flushing</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
 <a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GstRTSPResult" title="enum GstRTSPResult"><span class="returnvalue">GstRTSPResult</span></a>
 </td>
 <td class="function_name">
@@ -442,7 +482,6 @@
 <a name="id-1.2.10.3.7.2.7"></a><h4>Returns</h4>
 <p> <a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-OK:CAPS"><span class="type">GST_RTSP_OK</span></a> when <em class="parameter"><code>conn</code></em>
 contains a valid connection.</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -503,7 +542,6 @@
 <a name="id-1.2.10.3.7.3.6"></a><h4>Returns</h4>
 <p> <a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-OK:CAPS"><span class="type">GST_RTSP_OK</span></a> when <em class="parameter"><code>conn</code></em>
 contains a valid connection.</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -547,7 +585,6 @@
 <a name="id-1.2.10.3.7.4.6"></a><h4>Returns</h4>
 <p> <a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-OK:CAPS"><span class="type">GST_RTSP_OK</span></a> when <em class="parameter"><code>conn</code></em>
 contains a valid connection.</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -589,7 +626,6 @@
 <div class="refsect3">
 <a name="id-1.2.10.3.7.5.7"></a><h4>Returns</h4>
 <p> <a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-OK:CAPS"><span class="type">GST_RTSP_OK</span></a> when a connection could be made.</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -618,7 +654,6 @@
 <div class="refsect3">
 <a name="id-1.2.10.3.7.6.6"></a><h4>Returns</h4>
 <p> <a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-OK:CAPS"><span class="type">GST_RTSP_OK</span></a> on success.</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -646,7 +681,6 @@
 <div class="refsect3">
 <a name="id-1.2.10.3.7.7.6"></a><h4>Returns</h4>
 <p> <a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-OK:CAPS"><span class="type">GST_RTSP_OK</span></a> on success.</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -702,7 +736,6 @@
 <div class="refsect3">
 <a name="id-1.2.10.3.7.8.7"></a><h4>Returns</h4>
 <p> <a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-OK:CAPS"><span class="type">GST_RTSP_OK</span></a> on success.</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -758,7 +791,6 @@
 <div class="refsect3">
 <a name="id-1.2.10.3.7.9.7"></a><h4>Returns</h4>
 <p> <a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-OK:CAPS"><span class="type">GST_RTSP_OK</span></a> on success.</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -815,7 +847,6 @@
 <div class="refsect3">
 <a name="id-1.2.10.3.7.10.8"></a><h4>Returns</h4>
 <p> <a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-OK:CAPS"><span class="type">GST_RTSP_OK</span></a> on success.</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -863,7 +894,6 @@
 <div class="refsect3">
 <a name="id-1.2.10.3.7.11.7"></a><h4>Returns</h4>
 <p> <a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-OK:CAPS"><span class="type">GST_RTSP_OK</span></a> on success.</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -911,7 +941,6 @@
 <div class="refsect3">
 <a name="id-1.2.10.3.7.12.7"></a><h4>Returns</h4>
 <p> <a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-OK:CAPS"><span class="type">GST_RTSP_OK</span></a> on success.</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -948,7 +977,6 @@
 <div class="refsect3">
 <a name="id-1.2.10.3.7.13.6"></a><h4>Returns</h4>
 <p> <a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-OK:CAPS"><span class="type">GST_RTSP_OK</span></a>.</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -976,7 +1004,6 @@
 <div class="refsect3">
 <a name="id-1.2.10.3.7.14.6"></a><h4>Returns</h4>
 <p> <a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-OK:CAPS"><span class="type">GST_RTSP_OK</span></a>.</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -1015,7 +1042,6 @@
 <div class="refsect3">
 <a name="id-1.2.10.3.7.15.6"></a><h4>Returns</h4>
 <p> <a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-OK:CAPS"><span class="type">GST_RTSP_OK</span></a>.</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -1067,7 +1093,6 @@
 <div class="refsect3">
 <a name="id-1.2.10.3.7.16.6"></a><h4>Returns</h4>
 <p> <a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-OK:CAPS"><span class="type">GST_RTSP_OK</span></a>.</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -1167,7 +1192,6 @@
 <div class="refsect3">
 <a name="id-1.2.10.3.7.19.6"></a><h4>Returns</h4>
 <p> <a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-OK:CAPS"><span class="type">GST_RTSP_OK</span></a> on success.</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -1226,7 +1250,6 @@
 <a name="id-1.2.10.3.7.21.6"></a><h4>Returns</h4>
 <p> The IP address as a string. this value remains valid until the
 connection is closed.</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -1255,7 +1278,6 @@
 <a name="id-1.2.10.3.7.22.6"></a><h4>Returns</h4>
 <p> The URL. This value remains valid until the
 connection is freed.</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -1315,7 +1337,6 @@
 <a name="id-1.2.10.3.7.24.6"></a><h4>Returns</h4>
 <p> if <em class="parameter"><code>conn</code></em>
 is using HTTP tunneling.</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -1343,7 +1364,6 @@
 <a name="id-1.2.10.3.7.25.6"></a><h4>Returns</h4>
 <p> returns a non-empty string if <em class="parameter"><code>conn</code></em>
 is being tunneled over HTTP.</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -1390,7 +1410,6 @@
 <div class="refsect3">
 <a name="id-1.2.10.3.7.26.8"></a><h4>Returns</h4>
 <p> return GST_RTSP_OK on success.</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -1463,7 +1482,6 @@
 <div class="refsect3">
 <a name="id-1.2.10.3.7.28.6"></a><h4>Returns</h4>
 <p> <a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-OK:CAPS"><span class="type">GST_RTSP_OK</span></a>.</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -1471,6 +1489,28 @@
 <a name="gst-rtsp-connection-get-read-socket"></a><h3>gst_rtsp_connection_get_read_socket ()</h3>
 <pre class="programlisting"><a href="https://developer.gnome.org/gio/unstable/GSocket.html"><span class="returnvalue">GSocket</span></a> *
 gst_rtsp_connection_get_read_socket (<em class="parameter"><code>const <a class="link" href="gst-plugins-base-libs-gstrtspconnection.html#GstRTSPConnection" title="GstRTSPConnection"><span class="type">GstRTSPConnection</span></a> *conn</code></em>);</pre>
+<p>Get the file descriptor for reading.</p>
+<div class="refsect3">
+<a name="id-1.2.10.3.7.29.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>conn</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gst-plugins-base-libs-gstrtspconnection.html#GstRTSPConnection" title="GstRTSPConnection"><span class="type">GstRTSPConnection</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="id-1.2.10.3.7.29.6"></a><h4>Returns</h4>
+<p> the file descriptor used for reading or <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> on
+error. The file descriptor remains valid until the connection is closed. </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">
@@ -1541,7 +1581,7 @@
 . </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>
-<p class="since">Since 1.2</p>
+<p class="since">Since: 1.2</p>
 </div>
 <hr>
 <div class="refsect2">
@@ -1579,9 +1619,8 @@
 <p> TRUE if the validation flags are set correctly, or FALSE if
 <em class="parameter"><code>conn</code></em>
 is NULL or is not a TLS connection.</p>
-<p></p>
 </div>
-<p class="since">Since 1.2.1</p>
+<p class="since">Since: 1.2.1</p>
 </div>
 <hr>
 <div class="refsect2">
@@ -1609,9 +1648,139 @@
 <div class="refsect3">
 <a name="id-1.2.10.3.7.33.6"></a><h4>Returns</h4>
 <p> the validationg flags.</p>
-<p></p>
 </div>
-<p class="since">Since 1.2.1</p>
+<p class="since">Since: 1.2.1</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-rtsp-connection-set-tls-database"></a><h3>gst_rtsp_connection_set_tls_database ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+gst_rtsp_connection_set_tls_database (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstrtspconnection.html#GstRTSPConnection" title="GstRTSPConnection"><span class="type">GstRTSPConnection</span></a> *conn</code></em>,
+                                      <em class="parameter"><code><a href="https://developer.gnome.org/gio/unstable/GTlsDatabase.html"><span class="type">GTlsDatabase</span></a> *database</code></em>);</pre>
+<p>Sets the anchor certificate authorities database. This certificate
+database will be used to verify the server's certificate in case it
+can't be verified with the default certificate database first.</p>
+<div class="refsect3">
+<a name="id-1.2.10.3.7.34.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>conn</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gst-plugins-base-libs-gstrtspconnection.html#GstRTSPConnection" title="GstRTSPConnection"><span class="type">GstRTSPConnection</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>database</p></td>
+<td class="parameter_description"><p>a <a href="https://developer.gnome.org/gio/unstable/GTlsDatabase.html"><span class="type">GTlsDatabase</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-rtsp-connection-get-tls-database"></a><h3>gst_rtsp_connection_get_tls_database ()</h3>
+<pre class="programlisting"><a href="https://developer.gnome.org/gio/unstable/GTlsDatabase.html"><span class="returnvalue">GTlsDatabase</span></a> *
+gst_rtsp_connection_get_tls_database (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstrtspconnection.html#GstRTSPConnection" title="GstRTSPConnection"><span class="type">GstRTSPConnection</span></a> *conn</code></em>);</pre>
+<p>Gets the anchor certificate authorities database that will be used
+after a server certificate can't be verified with the default
+certificate database.</p>
+<div class="refsect3">
+<a name="id-1.2.10.3.7.35.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>conn</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gst-plugins-base-libs-gstrtspconnection.html#GstRTSPConnection" title="GstRTSPConnection"><span class="type">GstRTSPConnection</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="id-1.2.10.3.7.35.6"></a><h4>Returns</h4>
+<p> the anchor certificate authorities database, or NULL if no
+database has been previously set. Use <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> to release the
+certificate database. </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.4</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-rtsp-connection-set-tls-interaction"></a><h3>gst_rtsp_connection_set_tls_interaction ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+gst_rtsp_connection_set_tls_interaction
+                               (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstrtspconnection.html#GstRTSPConnection" title="GstRTSPConnection"><span class="type">GstRTSPConnection</span></a> *conn</code></em>,
+                                <em class="parameter"><code><a href="https://developer.gnome.org/gio/unstable/GTlsInteraction.html"><span class="type">GTlsInteraction</span></a> *interaction</code></em>);</pre>
+<p>Sets a <a href="https://developer.gnome.org/gio/unstable/GTlsInteraction.html"><span class="type">GTlsInteraction</span></a> object to be used when the connection or certificate
+database need to interact with the user. This will be used to prompt the
+user for passwords where necessary.</p>
+<div class="refsect3">
+<a name="id-1.2.10.3.7.36.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>conn</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gst-plugins-base-libs-gstrtspconnection.html#GstRTSPConnection" title="GstRTSPConnection"><span class="type">GstRTSPConnection</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>interaction</p></td>
+<td class="parameter_description"><p>a <a href="https://developer.gnome.org/gio/unstable/GTlsInteraction.html"><span class="type">GTlsInteraction</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<p class="since">Since: 1.6</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-rtsp-connection-get-tls-interaction"></a><h3>gst_rtsp_connection_get_tls_interaction ()</h3>
+<pre class="programlisting"><a href="https://developer.gnome.org/gio/unstable/GTlsInteraction.html"><span class="returnvalue">GTlsInteraction</span></a> *
+gst_rtsp_connection_get_tls_interaction
+                               (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstrtspconnection.html#GstRTSPConnection" title="GstRTSPConnection"><span class="type">GstRTSPConnection</span></a> *conn</code></em>);</pre>
+<p>Gets a <a href="https://developer.gnome.org/gio/unstable/GTlsInteraction.html"><span class="type">GTlsInteraction</span></a> object to be used when the connection or certificate
+database need to interact with the user. This will be used to prompt the
+user for passwords where necessary.</p>
+<div class="refsect3">
+<a name="id-1.2.10.3.7.37.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>conn</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gst-plugins-base-libs-gstrtspconnection.html#GstRTSPConnection" title="GstRTSPConnection"><span class="type">GstRTSPConnection</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="id-1.2.10.3.7.37.6"></a><h4>Returns</h4>
+<p> a reference on the <a href="https://developer.gnome.org/gio/unstable/GTlsInteraction.html"><span class="type">GTlsInteraction</span></a>. Use
+<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> to release. </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.6</p>
 </div>
 <hr>
 <div class="refsect2">
@@ -1630,8 +1799,9 @@
 maincontext with <a class="link" href="gst-plugins-base-libs-gstrtspconnection.html#gst-rtsp-watch-attach" title="gst_rtsp_watch_attach ()"><code class="function">gst_rtsp_watch_attach()</code></a>.</p>
 <p><em class="parameter"><code>conn</code></em>
  must exist for the entire lifetime of the watch.</p>
+<p><span class="annotation">[<acronym title="Exposed in C code, not necessarily available in other languages."><span class="acronym">skip</span></acronym>]</span></p>
 <div class="refsect3">
-<a name="id-1.2.10.3.7.34.7"></a><h4>Parameters</h4>
+<a name="id-1.2.10.3.7.38.8"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1665,10 +1835,9 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.10.3.7.34.8"></a><h4>Returns</h4>
+<a name="id-1.2.10.3.7.38.9"></a><h4>Returns</h4>
 <p> a <a class="link" href="gst-plugins-base-libs-gstrtspconnection.html#GstRTSPWatch" title="GstRTSPWatch"><span class="type">GstRTSPWatch</span></a> that can be used for asynchronous RTSP
 communication. Free with <a class="link" href="gst-plugins-base-libs-gstrtspconnection.html#gst-rtsp-watch-unref" title="gst_rtsp_watch_unref ()"><code class="function">gst_rtsp_watch_unref()</code></a> after usage.</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -1680,7 +1849,7 @@
  by one. If the resulting reference
 count is zero the watch and associated memory will be destroyed.</p>
 <div class="refsect3">
-<a name="id-1.2.10.3.7.35.5"></a><h4>Parameters</h4>
+<a name="id-1.2.10.3.7.39.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1703,7 +1872,7 @@
                        <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> *context</code></em>);</pre>
 <p>Adds a <a class="link" href="gst-plugins-base-libs-gstrtspconnection.html#GstRTSPWatch" title="GstRTSPWatch"><span class="type">GstRTSPWatch</span></a> to a context so that it will be executed within that context.</p>
 <div class="refsect3">
-<a name="id-1.2.10.3.7.36.5"></a><h4>Parameters</h4>
+<a name="id-1.2.10.3.7.40.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1725,9 +1894,8 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.10.3.7.36.6"></a><h4>Returns</h4>
+<a name="id-1.2.10.3.7.40.6"></a><h4>Returns</h4>
 <p> the ID (greater than 0) for the watch within the GMainContext.</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -1739,7 +1907,7 @@
 , this is usually called after <a class="link" href="gst-plugins-base-libs-gstrtspconnection.html#gst-rtsp-connection-do-tunnel" title="gst_rtsp_connection_do_tunnel ()"><code class="function">gst_rtsp_connection_do_tunnel()</code></a>
 when the file descriptors of the connection might have changed.</p>
 <div class="refsect3">
-<a name="id-1.2.10.3.7.37.5"></a><h4>Parameters</h4>
+<a name="id-1.2.10.3.7.41.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1775,7 +1943,7 @@
  will be non-zero and used as the ID argument in the message_sent
 callback.</p>
 <div class="refsect3">
-<a name="id-1.2.10.3.7.38.5"></a><h4>Parameters</h4>
+<a name="id-1.2.10.3.7.42.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1802,9 +1970,8 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.10.3.7.38.6"></a><h4>Returns</h4>
+<a name="id-1.2.10.3.7.42.6"></a><h4>Returns</h4>
 <p> <a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-OK:CAPS"><span class="type">GST_RTSP_OK</span></a> on success.</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -1834,7 +2001,7 @@
 <a class="link" href="gst-plugins-base-libs-gstrtspconnection.html#gst-rtsp-watch-set-send-backlog" title="gst_rtsp_watch_set_send_backlog ()"><code class="function">gst_rtsp_watch_set_send_backlog()</code></a>, this function will return
 <a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-ENOMEM:CAPS"><span class="type">GST_RTSP_ENOMEM</span></a>.</p>
 <div class="refsect3">
-<a name="id-1.2.10.3.7.39.7"></a><h4>Parameters</h4>
+<a name="id-1.2.10.3.7.43.7"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1867,11 +2034,10 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.10.3.7.39.8"></a><h4>Returns</h4>
+<a name="id-1.2.10.3.7.43.8"></a><h4>Returns</h4>
 <p> <a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-OK:CAPS"><span class="type">GST_RTSP_OK</span></a> on success. <a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-ENOMEM:CAPS"><span class="type">GST_RTSP_ENOMEM</span></a> when the backlog limits
 are reached. <a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-EINTR:CAPS"><span class="type">GST_RTSP_EINTR</span></a> when <em class="parameter"><code>watch</code></em>
 was flushing.</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -1885,7 +2051,7 @@
 .
 See <a class="link" href="gst-plugins-base-libs-gstrtspconnection.html#gst-rtsp-watch-set-send-backlog" title="gst_rtsp_watch_set_send_backlog ()"><code class="function">gst_rtsp_watch_set_send_backlog()</code></a>.</p>
 <div class="refsect3">
-<a name="id-1.2.10.3.7.40.5"></a><h4>Parameters</h4>
+<a name="id-1.2.10.3.7.44.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1911,7 +2077,7 @@
 </tbody>
 </table></div>
 </div>
-<p class="since">Since 1.2</p>
+<p class="since">Since: 1.2</p>
 </div>
 <hr>
 <div class="refsect2">
@@ -1928,7 +2094,7 @@
  or <em class="parameter"><code>messages</code></em>
  means no limits.</p>
 <div class="refsect3">
-<a name="id-1.2.10.3.7.41.6"></a><h4>Parameters</h4>
+<a name="id-1.2.10.3.7.45.6"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1954,7 +2120,41 @@
 </tbody>
 </table></div>
 </div>
-<p class="since">Since 1.2</p>
+<p class="since">Since: 1.2</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-rtsp-watch-set-flushing"></a><h3>gst_rtsp_watch_set_flushing ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+gst_rtsp_watch_set_flushing (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstrtspconnection.html#GstRTSPWatch" title="GstRTSPWatch"><span class="type">GstRTSPWatch</span></a> *watch</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> flushing</code></em>);</pre>
+<p>When <em class="parameter"><code>flushing</code></em>
+ is <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a>, abort a call to <a class="link" href="gst-plugins-base-libs-gstrtspconnection.html#gst-rtsp-watch-wait-backlog" title="gst_rtsp_watch_wait_backlog ()"><code class="function">gst_rtsp_watch_wait_backlog()</code></a>
+and make sure <a class="link" href="gst-plugins-base-libs-gstrtspconnection.html#gst-rtsp-watch-write-data" title="gst_rtsp_watch_write_data ()"><code class="function">gst_rtsp_watch_write_data()</code></a> returns immediately with
+<a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-EINTR:CAPS"><span class="type">GST_RTSP_EINTR</span></a>. And empty the queue.</p>
+<div class="refsect3">
+<a name="id-1.2.10.3.7.46.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>watch</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gst-plugins-base-libs-gstrtspconnection.html#GstRTSPWatch" title="GstRTSPWatch"><span class="type">GstRTSPWatch</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>flushing</p></td>
+<td class="parameter_description"><p>new flushing state</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<p class="since">Since: 1.4</p>
 </div>
 <hr>
 <div class="refsect2">
@@ -1975,7 +2175,7 @@
 returns <a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-ENOMEM:CAPS"><code class="literal">GST_RTSP_ENOMEM</code></a>. The caller then calls this function to wait for
 free space in the backlog queue and try again.</p>
 <div class="refsect3">
-<a name="id-1.2.10.3.7.42.7"></a><h4>Parameters</h4>
+<a name="id-1.2.10.3.7.47.7"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1997,16 +2197,15 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.10.3.7.42.8"></a><h4>Returns</h4>
+<a name="id-1.2.10.3.7.47.8"></a><h4>Returns</h4>
 <p> <a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-OK:CAPS"><code class="literal">GST_RTSP_OK</code></a> when if there is room in queue.
 <a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-ETIMEOUT:CAPS"><code class="literal">GST_RTSP_ETIMEOUT</code></a> when <em class="parameter"><code>timeout</code></em>
 was reached.
 <a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-EINTR:CAPS"><code class="literal">GST_RTSP_EINTR</code></a> when <em class="parameter"><code>watch</code></em>
 is flushing
 <a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-EINVAL:CAPS"><code class="literal">GST_RTSP_EINVAL</code></a> when called with invalid parameters.</p>
-<p></p>
 </div>
-<p class="since">Since 1.4</p>
+<p class="since">Since: 1.4</p>
 </div>
 </div>
 <div class="refsect1">
@@ -2119,7 +2318,6 @@
 </div>
 </div>
 <div class="footer">
-<hr>
-          Generated by GTK-Doc V1.21</div>
+<hr>Generated by GTK-Doc V1.24</div>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/libs/html/gst-plugins-base-libs-gstrtspdefs.html b/docs/libs/html/gst-plugins-base-libs-gstrtspdefs.html
index 9d0e15f..aa8905d 100644
--- a/docs/libs/html/gst-plugins-base-libs-gstrtspdefs.html
+++ b/docs/libs/html/gst-plugins-base-libs-gstrtspdefs.html
@@ -2,13 +2,13 @@
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>GStreamer Base Plugins 1.0 Library Reference Manual: gstrtspdefs</title>
+<title>gstrtspdefs: GStreamer Base 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 Base Plugins 1.0 Library Reference Manual">
 <link rel="up" href="gstreamer-rtsp.html" title="RTSP Library">
 <link rel="prev" href="gst-plugins-base-libs-gstrtspconnection.html" title="gstrtspconnection">
 <link rel="next" href="gst-plugins-base-libs-gstrtspextension.html" title="gstrtspextension">
-<meta name="generator" content="GTK-Doc V1.21 (XML mode)">
+<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">
@@ -241,7 +241,6 @@
 <div class="refsect3">
 <a name="id-1.2.10.4.7.3.6"></a><h4>Returns</h4>
 <p> a newly allocated string. <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></p>
 </div>
 </div>
 <hr>
@@ -270,7 +269,6 @@
 <a name="id-1.2.10.4.7.4.6"></a><h4>Returns</h4>
 <p> a string representation of <em class="parameter"><code>method</code></em>
 .</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -299,7 +297,6 @@
 <a name="id-1.2.10.4.7.5.6"></a><h4>Returns</h4>
 <p> a string representation of <em class="parameter"><code>version</code></em>
 .</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -328,7 +325,6 @@
 <a name="id-1.2.10.4.7.6.6"></a><h4>Returns</h4>
 <p> a string representation of <em class="parameter"><code>field</code></em>
 .</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -356,7 +352,6 @@
 <div class="refsect3">
 <a name="id-1.2.10.4.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 multiple headers are allowed.</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -385,7 +380,6 @@
 <a name="id-1.2.10.4.7.8.6"></a><h4>Returns</h4>
 <p> a string representation of <em class="parameter"><code>code</code></em>
 .</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -414,7 +408,6 @@
 <a name="id-1.2.10.4.7.9.6"></a><h4>Returns</h4>
 <p> a new string of <em class="parameter"><code>options</code></em>
 . <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></p>
 </div>
 </div>
 <hr>
@@ -443,9 +436,8 @@
 <div class="refsect3">
 <a name="id-1.2.10.4.7.10.6"></a><h4>Returns</h4>
 <p> a <a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GstRTSPMethod" title="enum GstRTSPMethod"><span class="type">GstRTSPMethod</span></a></p>
-<p></p>
 </div>
-<p class="since">Since 1.2</p>
+<p class="since">Since: 1.2</p>
 </div>
 <hr>
 <div class="refsect2">
@@ -474,7 +466,6 @@
 <p> a <a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GstRTSPHeaderField" title="enum GstRTSPHeaderField"><span class="type">GstRTSPHeaderField</span></a> for <em class="parameter"><code>header</code></em>
 or <a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-HDR-INVALID:CAPS"><span class="type">GST_RTSP_HDR_INVALID</span></a> if the
 header field is unknown.</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -504,7 +495,6 @@
 <p> a <a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GstRTSPMethod" title="enum GstRTSPMethod"><span class="type">GstRTSPMethod</span></a> for <em class="parameter"><code>method</code></em>
 or <a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-INVALID:CAPS"><span class="type">GST_RTSP_INVALID</span></a> if the
 method is unknown.</p>
-<p></p>
 </div>
 </div>
 </div>
@@ -1669,7 +1659,6 @@
 </div>
 </div>
 <div class="footer">
-<hr>
-          Generated by GTK-Doc V1.21</div>
+<hr>Generated by GTK-Doc V1.24</div>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/libs/html/gst-plugins-base-libs-gstrtspextension.html b/docs/libs/html/gst-plugins-base-libs-gstrtspextension.html
index 7a7a74a..8cf959d 100644
--- a/docs/libs/html/gst-plugins-base-libs-gstrtspextension.html
+++ b/docs/libs/html/gst-plugins-base-libs-gstrtspextension.html
@@ -2,13 +2,13 @@
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>GStreamer Base Plugins 1.0 Library Reference Manual: gstrtspextension</title>
+<title>gstrtspextension: GStreamer Base 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 Base Plugins 1.0 Library Reference Manual">
 <link rel="up" href="gstreamer-rtsp.html" title="RTSP Library">
 <link rel="prev" href="gst-plugins-base-libs-gstrtspdefs.html" title="gstrtspdefs">
 <link rel="next" href="gst-plugins-base-libs-gstrtspmessage.html" title="gstrtspmessage">
-<meta name="generator" content="GTK-Doc V1.21 (XML mode)">
+<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">
@@ -66,6 +66,7 @@
 </div>
 <div class="refsect1">
 <a name="gst-plugins-base-libs-gstrtspextension.functions_details"></a><h2>Functions</h2>
+<p></p>
 </div>
 <div class="refsect1">
 <a name="gst-plugins-base-libs-gstrtspextension.other_details"></a><h2>Types and Values</h2>
@@ -105,7 +106,6 @@
 </div>
 </div>
 <div class="footer">
-<hr>
-          Generated by GTK-Doc V1.21</div>
+<hr>Generated by GTK-Doc V1.24</div>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/libs/html/gst-plugins-base-libs-gstrtspmessage.html b/docs/libs/html/gst-plugins-base-libs-gstrtspmessage.html
index fde348c..5882607 100644
--- a/docs/libs/html/gst-plugins-base-libs-gstrtspmessage.html
+++ b/docs/libs/html/gst-plugins-base-libs-gstrtspmessage.html
@@ -2,13 +2,13 @@
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>GStreamer Base Plugins 1.0 Library Reference Manual: gstrtspmessage</title>
+<title>gstrtspmessage: GStreamer Base 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 Base Plugins 1.0 Library Reference Manual">
 <link rel="up" href="gstreamer-rtsp.html" title="RTSP Library">
 <link rel="prev" href="gst-plugins-base-libs-gstrtspextension.html" title="gstrtspextension">
 <link rel="next" href="gst-plugins-base-libs-gstrtsprange.html" title="gstrtsprange">
-<meta name="generator" content="GTK-Doc V1.21 (XML mode)">
+<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">
@@ -188,6 +188,38 @@
 <a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GstRTSPResult" title="enum GstRTSPResult"><span class="returnvalue">GstRTSPResult</span></a>
 </td>
 <td class="function_name">
+<a class="link" href="gst-plugins-base-libs-gstrtspmessage.html#gst-rtsp-message-add-header-by-name" title="gst_rtsp_message_add_header_by_name ()">gst_rtsp_message_add_header_by_name</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GstRTSPResult" title="enum GstRTSPResult"><span class="returnvalue">GstRTSPResult</span></a>
+</td>
+<td class="function_name">
+<a class="link" href="gst-plugins-base-libs-gstrtspmessage.html#gst-rtsp-message-take-header-by-name" title="gst_rtsp_message_take_header_by_name ()">gst_rtsp_message_take_header_by_name</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GstRTSPResult" title="enum GstRTSPResult"><span class="returnvalue">GstRTSPResult</span></a>
+</td>
+<td class="function_name">
+<a class="link" href="gst-plugins-base-libs-gstrtspmessage.html#gst-rtsp-message-remove-header-by-name" title="gst_rtsp_message_remove_header_by_name ()">gst_rtsp_message_remove_header_by_name</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GstRTSPResult" title="enum GstRTSPResult"><span class="returnvalue">GstRTSPResult</span></a>
+</td>
+<td class="function_name">
+<a class="link" href="gst-plugins-base-libs-gstrtspmessage.html#gst-rtsp-message-get-header-by-name" title="gst_rtsp_message_get_header_by_name ()">gst_rtsp_message_get_header_by_name</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GstRTSPResult" title="enum GstRTSPResult"><span class="returnvalue">GstRTSPResult</span></a>
+</td>
+<td class="function_name">
 <a class="link" href="gst-plugins-base-libs-gstrtspmessage.html#gst-rtsp-message-append-headers" title="gst_rtsp_message_append_headers ()">gst_rtsp_message_append_headers</a> <span class="c_punctuation">()</span>
 </td>
 </tr>
@@ -287,7 +319,6 @@
 <div class="refsect3">
 <a name="id-1.2.10.6.7.2.6"></a><h4>Returns</h4>
 <p> a <a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GstRTSPResult" title="enum GstRTSPResult"><span class="type">GstRTSPResult</span></a>.</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -317,7 +348,6 @@
 <div class="refsect3">
 <a name="id-1.2.10.6.7.3.6"></a><h4>Returns</h4>
 <p> a <a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GstRTSPResult" title="enum GstRTSPResult"><span class="type">GstRTSPResult</span></a>.</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -348,7 +378,6 @@
 <div class="refsect3">
 <a name="id-1.2.10.6.7.4.6"></a><h4>Returns</h4>
 <p> <a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-OK:CAPS"><span class="type">GST_RTSP_OK</span></a>.</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -376,7 +405,6 @@
 <div class="refsect3">
 <a name="id-1.2.10.6.7.5.6"></a><h4>Returns</h4>
 <p> a <a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GstRTSPResult" title="enum GstRTSPResult"><span class="type">GstRTSPResult</span></a>.</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -404,7 +432,6 @@
 <div class="refsect3">
 <a name="id-1.2.10.6.7.6.6"></a><h4>Returns</h4>
 <p> the message type.</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -449,7 +476,6 @@
 <div class="refsect3">
 <a name="id-1.2.10.6.7.7.6"></a><h4>Returns</h4>
 <p> a <a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GstRTSPResult" title="enum GstRTSPResult"><span class="type">GstRTSPResult</span></a>.</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -495,7 +521,6 @@
 <div class="refsect3">
 <a name="id-1.2.10.6.7.8.6"></a><h4>Returns</h4>
 <p> a <a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GstRTSPResult" title="enum GstRTSPResult"><span class="type">GstRTSPResult</span></a>.</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -551,7 +576,6 @@
 <div class="refsect3">
 <a name="id-1.2.10.6.7.9.7"></a><h4>Returns</h4>
 <p> a <a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GstRTSPResult" title="enum GstRTSPResult"><span class="type">GstRTSPResult</span></a>.</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -608,7 +632,6 @@
 <div class="refsect3">
 <a name="id-1.2.10.6.7.10.8"></a><h4>Returns</h4>
 <p> a <a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GstRTSPResult" title="enum GstRTSPResult"><span class="type">GstRTSPResult</span></a>.</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -664,7 +687,6 @@
 <div class="refsect3">
 <a name="id-1.2.10.6.7.11.8"></a><h4>Returns</h4>
 <p> a <a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GstRTSPResult" title="enum GstRTSPResult"><span class="type">GstRTSPResult</span></a>.</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -720,7 +742,6 @@
 <div class="refsect3">
 <a name="id-1.2.10.6.7.12.7"></a><h4>Returns</h4>
 <p> a <a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GstRTSPResult" title="enum GstRTSPResult"><span class="type">GstRTSPResult</span></a>.</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -758,7 +779,6 @@
 <div class="refsect3">
 <a name="id-1.2.10.6.7.13.6"></a><h4>Returns</h4>
 <p> a <a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GstRTSPResult" title="enum GstRTSPResult"><span class="type">GstRTSPResult</span></a>.</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -794,7 +814,6 @@
 <div class="refsect3">
 <a name="id-1.2.10.6.7.14.6"></a><h4>Returns</h4>
 <p> a <a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GstRTSPResult" title="enum GstRTSPResult"><span class="type">GstRTSPResult</span></a>.</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -831,7 +850,6 @@
 <div class="refsect3">
 <a name="id-1.2.10.6.7.15.6"></a><h4>Returns</h4>
 <p> a <a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GstRTSPResult" title="enum GstRTSPResult"><span class="type">GstRTSPResult</span></a>.</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -877,7 +895,6 @@
 <div class="refsect3">
 <a name="id-1.2.10.6.7.16.6"></a><h4>Returns</h4>
 <p> a <a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GstRTSPResult" title="enum GstRTSPResult"><span class="type">GstRTSPResult</span></a>.</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -923,7 +940,6 @@
 <div class="refsect3">
 <a name="id-1.2.10.6.7.17.6"></a><h4>Returns</h4>
 <p> a <a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GstRTSPResult" title="enum GstRTSPResult"><span class="type">GstRTSPResult</span></a>.</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -969,7 +985,6 @@
 <div class="refsect3">
 <a name="id-1.2.10.6.7.18.6"></a><h4>Returns</h4>
 <p> a <a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GstRTSPResult" title="enum GstRTSPResult"><span class="type">GstRTSPResult</span></a>.</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -1024,11 +1039,205 @@
 <p> <a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-OK:CAPS"><span class="type">GST_RTSP_OK</span></a> when <em class="parameter"><code>field</code></em>
 was found, <a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-ENOTIMPL:CAPS"><span class="type">GST_RTSP_ENOTIMPL</span></a> if the key
 was not found.</p>
-<p></p>
 </div>
 </div>
 <hr>
 <div class="refsect2">
+<a name="gst-rtsp-message-add-header-by-name"></a><h3>gst_rtsp_message_add_header_by_name ()</h3>
+<pre class="programlisting"><a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GstRTSPResult" title="enum GstRTSPResult"><span class="returnvalue">GstRTSPResult</span></a>
+gst_rtsp_message_add_header_by_name (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstrtspmessage.html#GstRTSPMessage" title="struct GstRTSPMessage"><span class="type">GstRTSPMessage</span></a> *msg</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> *header</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> *value</code></em>);</pre>
+<p>Add a header with key <em class="parameter"><code>header</code></em>
+ and <em class="parameter"><code>value</code></em>
+ to <em class="parameter"><code>msg</code></em>
+. This function takes a copy
+of <em class="parameter"><code>value</code></em>
+.</p>
+<div class="refsect3">
+<a name="id-1.2.10.6.7.20.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>msg</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gst-plugins-base-libs-gstrtspmessage.html#GstRTSPMessage" title="struct GstRTSPMessage"><span class="type">GstRTSPMessage</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>header</p></td>
+<td class="parameter_description"><p> header string. </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>value</p></td>
+<td class="parameter_description"><p> the value of the header. </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 class="refsect3">
+<a name="id-1.2.10.6.7.20.6"></a><h4>Returns</h4>
+<p> a <a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GstRTSPResult" title="enum GstRTSPResult"><span class="type">GstRTSPResult</span></a>.</p>
+</div>
+<p class="since">Since: 1.6</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-rtsp-message-take-header-by-name"></a><h3>gst_rtsp_message_take_header_by_name ()</h3>
+<pre class="programlisting"><a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GstRTSPResult" title="enum GstRTSPResult"><span class="returnvalue">GstRTSPResult</span></a>
+gst_rtsp_message_take_header_by_name (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstrtspmessage.html#GstRTSPMessage" title="struct GstRTSPMessage"><span class="type">GstRTSPMessage</span></a> *msg</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> *header</code></em>,
+                                      <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *value</code></em>);</pre>
+<p>Add a header with key <em class="parameter"><code>header</code></em>
+ and <em class="parameter"><code>value</code></em>
+ to <em class="parameter"><code>msg</code></em>
+. This function takes
+ownership of <em class="parameter"><code>value</code></em>
+, but not of <em class="parameter"><code>header</code></em>
+.</p>
+<div class="refsect3">
+<a name="id-1.2.10.6.7.21.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>msg</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gst-plugins-base-libs-gstrtspmessage.html#GstRTSPMessage" title="struct GstRTSPMessage"><span class="type">GstRTSPMessage</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>header</p></td>
+<td class="parameter_description"><p> a header string. </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>value</p></td>
+<td class="parameter_description"><p> the value of the header. </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>]</span></td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="id-1.2.10.6.7.21.6"></a><h4>Returns</h4>
+<p> a <a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GstRTSPResult" title="enum GstRTSPResult"><span class="type">GstRTSPResult</span></a>.</p>
+</div>
+<p class="since">Since: 1.6</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-rtsp-message-remove-header-by-name"></a><h3>gst_rtsp_message_remove_header_by_name ()</h3>
+<pre class="programlisting"><a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GstRTSPResult" title="enum GstRTSPResult"><span class="returnvalue">GstRTSPResult</span></a>
+gst_rtsp_message_remove_header_by_name
+                               (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstrtspmessage.html#GstRTSPMessage" title="struct GstRTSPMessage"><span class="type">GstRTSPMessage</span></a> *msg</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> *header</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> index</code></em>);</pre>
+<p>Remove the <em class="parameter"><code>index</code></em>
+ header with key <em class="parameter"><code>header</code></em>
+ from <em class="parameter"><code>msg</code></em>
+. If <em class="parameter"><code>index</code></em>
+ equals -1,
+all matching headers will be removed.</p>
+<div class="refsect3">
+<a name="id-1.2.10.6.7.22.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>msg</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gst-plugins-base-libs-gstrtspmessage.html#GstRTSPMessage" title="struct GstRTSPMessage"><span class="type">GstRTSPMessage</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>header</p></td>
+<td class="parameter_description"><p>the header string</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>index</p></td>
+<td class="parameter_description"><p>the index of the header</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="id-1.2.10.6.7.22.6"></a><h4>Returns</h4>
+<p> a <a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GstRTSPResult" title="enum GstRTSPResult"><span class="type">GstRTSPResult</span></a></p>
+</div>
+<p class="since">Since: 1.6</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-rtsp-message-get-header-by-name"></a><h3>gst_rtsp_message_get_header_by_name ()</h3>
+<pre class="programlisting"><a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GstRTSPResult" title="enum GstRTSPResult"><span class="returnvalue">GstRTSPResult</span></a>
+gst_rtsp_message_get_header_by_name (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstrtspmessage.html#GstRTSPMessage" title="struct GstRTSPMessage"><span class="type">GstRTSPMessage</span></a> *msg</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> *header</code></em>,
+                                     <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> **value</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> index</code></em>);</pre>
+<p>Get the <em class="parameter"><code>index</code></em>
+ header value with key <em class="parameter"><code>header</code></em>
+ from <em class="parameter"><code>msg</code></em>
+. The result in <em class="parameter"><code>value</code></em>
+
+stays valid as long as it remains present in <em class="parameter"><code>msg</code></em>
+.</p>
+<div class="refsect3">
+<a name="id-1.2.10.6.7.23.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>msg</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gst-plugins-base-libs-gstrtspmessage.html#GstRTSPMessage" title="struct GstRTSPMessage"><span class="type">GstRTSPMessage</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>header</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GstRTSPHeaderField" title="enum GstRTSPHeaderField"><span class="type">GstRTSPHeaderField</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>value</p></td>
+<td class="parameter_description"><p> pointer to hold the result. </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="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>index</p></td>
+<td class="parameter_description"><p>the index of the header</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="id-1.2.10.6.7.23.6"></a><h4>Returns</h4>
+<p> <a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-OK:CAPS"><span class="type">GST_RTSP_OK</span></a> when <em class="parameter"><code>field</code></em>
+was found, <a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-ENOTIMPL:CAPS"><span class="type">GST_RTSP_ENOTIMPL</span></a> if the key
+was not found.</p>
+</div>
+<p class="since">Since: 1.6</p>
+</div>
+<hr>
+<div class="refsect2">
 <a name="gst-rtsp-message-append-headers"></a><h3>gst_rtsp_message_append_headers ()</h3>
 <pre class="programlisting"><a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GstRTSPResult" title="enum GstRTSPResult"><span class="returnvalue">GstRTSPResult</span></a>
 gst_rtsp_message_append_headers (<em class="parameter"><code>const <a class="link" href="gst-plugins-base-libs-gstrtspmessage.html#GstRTSPMessage" title="struct GstRTSPMessage"><span class="type">GstRTSPMessage</span></a> *msg</code></em>,
@@ -1038,7 +1247,7 @@
  suitable
 for transmission.</p>
 <div class="refsect3">
-<a name="id-1.2.10.6.7.20.5"></a><h4>Parameters</h4>
+<a name="id-1.2.10.6.7.24.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1060,9 +1269,8 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.10.6.7.20.6"></a><h4>Returns</h4>
+<a name="id-1.2.10.6.7.24.6"></a><h4>Returns</h4>
 <p> <a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-OK:CAPS"><span class="type">GST_RTSP_OK</span></a>.</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -1076,7 +1284,7 @@
  to a copy of <em class="parameter"><code>data</code></em>
 .</p>
 <div class="refsect3">
-<a name="id-1.2.10.6.7.21.5"></a><h4>Parameters</h4>
+<a name="id-1.2.10.6.7.25.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1104,9 +1312,8 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.10.6.7.21.6"></a><h4>Returns</h4>
+<a name="id-1.2.10.6.7.25.6"></a><h4>Returns</h4>
 <p> <a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-OK:CAPS"><span class="type">GST_RTSP_OK</span></a>.</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -1123,7 +1330,7 @@
 <em class="parameter"><code>data</code></em>
 .</p>
 <div class="refsect3">
-<a name="id-1.2.10.6.7.22.5"></a><h4>Parameters</h4>
+<a name="id-1.2.10.6.7.26.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1151,9 +1358,8 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.10.6.7.22.6"></a><h4>Returns</h4>
+<a name="id-1.2.10.6.7.26.6"></a><h4>Returns</h4>
 <p> <a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-OK:CAPS"><span class="type">GST_RTSP_OK</span></a>.</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -1169,7 +1375,7 @@
  is valid and
 unchanged.</p>
 <div class="refsect3">
-<a name="id-1.2.10.6.7.23.5"></a><h4>Parameters</h4>
+<a name="id-1.2.10.6.7.27.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1197,9 +1403,8 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.10.6.7.23.6"></a><h4>Returns</h4>
+<a name="id-1.2.10.6.7.27.6"></a><h4>Returns</h4>
 <p> <a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-OK:CAPS"><span class="type">GST_RTSP_OK</span></a>.</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -1216,7 +1421,7 @@
 the body and size of <em class="parameter"><code>msg</code></em>
  will be set to <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><span class="type">NULL</span></a> and 0 respectively.</p>
 <div class="refsect3">
-<a name="id-1.2.10.6.7.24.5"></a><h4>Parameters</h4>
+<a name="id-1.2.10.6.7.28.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1244,9 +1449,8 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.10.6.7.24.6"></a><h4>Returns</h4>
+<a name="id-1.2.10.6.7.28.6"></a><h4>Returns</h4>
 <p> <a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-OK:CAPS"><span class="type">GST_RTSP_OK</span></a>.</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -1257,7 +1461,7 @@
 <p>Dump the contents of <em class="parameter"><code>msg</code></em>
  to stdout.</p>
 <div class="refsect3">
-<a name="id-1.2.10.6.7.25.5"></a><h4>Parameters</h4>
+<a name="id-1.2.10.6.7.29.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1272,9 +1476,8 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.10.6.7.25.6"></a><h4>Returns</h4>
+<a name="id-1.2.10.6.7.29.6"></a><h4>Returns</h4>
 <p> <a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-OK:CAPS"><span class="type">GST_RTSP_OK</span></a>.</p>
-<p></p>
 </div>
 </div>
 </div>
@@ -1387,7 +1590,6 @@
 </div>
 </div>
 <div class="footer">
-<hr>
-          Generated by GTK-Doc V1.21</div>
+<hr>Generated by GTK-Doc V1.24</div>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/libs/html/gst-plugins-base-libs-gstrtsprange.html b/docs/libs/html/gst-plugins-base-libs-gstrtsprange.html
index dd5284b..97dd518 100644
--- a/docs/libs/html/gst-plugins-base-libs-gstrtsprange.html
+++ b/docs/libs/html/gst-plugins-base-libs-gstrtsprange.html
@@ -2,13 +2,13 @@
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>GStreamer Base Plugins 1.0 Library Reference Manual: gstrtsprange</title>
+<title>gstrtsprange: GStreamer Base 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 Base Plugins 1.0 Library Reference Manual">
 <link rel="up" href="gstreamer-rtsp.html" title="RTSP Library">
 <link rel="prev" href="gst-plugins-base-libs-gstrtspmessage.html" title="gstrtspmessage">
 <link rel="next" href="gst-plugins-base-libs-gstrtsptransport.html" title="gstrtsptransport">
-<meta name="generator" content="GTK-Doc V1.21 (XML mode)">
+<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">
@@ -156,7 +156,6 @@
 <div class="refsect3">
 <a name="id-1.2.10.7.7.2.6"></a><h4>Returns</h4>
 <p> <a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-OK:CAPS"><span class="type">GST_RTSP_OK</span></a> on success.</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -206,9 +205,8 @@
 <div class="refsect3">
 <a name="id-1.2.10.7.7.3.8"></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> on success.</p>
-<p></p>
 </div>
-<p class="since">Since 1.2</p>
+<p class="since">Since: 1.2</p>
 </div>
 <hr>
 <div class="refsect2">
@@ -236,7 +234,6 @@
 <a name="id-1.2.10.7.7.4.6"></a><h4>Returns</h4>
 <p> The string representation of <em class="parameter"><code>range</code></em>
 . <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></p>
 </div>
 </div>
 <hr>
@@ -273,7 +270,6 @@
 <div class="refsect3">
 <a name="id-1.2.10.7.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 the range could be converted</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -482,7 +478,7 @@
 </tbody>
 </table></div>
 </div>
-<p class="since">Since 1.2</p>
+<p class="since">Since: 1.2</p>
 </div>
 <hr>
 <div class="refsect2">
@@ -539,7 +535,6 @@
 </div>
 </div>
 <div class="footer">
-<hr>
-          Generated by GTK-Doc V1.21</div>
+<hr>Generated by GTK-Doc V1.24</div>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/libs/html/gst-plugins-base-libs-gstrtsptransport.html b/docs/libs/html/gst-plugins-base-libs-gstrtsptransport.html
index f0deb7d..bb21fa2 100644
--- a/docs/libs/html/gst-plugins-base-libs-gstrtsptransport.html
+++ b/docs/libs/html/gst-plugins-base-libs-gstrtsptransport.html
@@ -2,13 +2,13 @@
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>GStreamer Base Plugins 1.0 Library Reference Manual: gstrtsptransport</title>
+<title>gstrtsptransport: GStreamer Base 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 Base Plugins 1.0 Library Reference Manual">
 <link rel="up" href="gstreamer-rtsp.html" title="RTSP Library">
 <link rel="prev" href="gst-plugins-base-libs-gstrtsprange.html" title="gstrtsprange">
 <link rel="next" href="gst-plugins-base-libs-gstrtspurl.html" title="gstrtspurl">
-<meta name="generator" content="GTK-Doc V1.21 (XML mode)">
+<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">
@@ -164,7 +164,6 @@
 <div class="refsect3">
 <a name="id-1.2.10.8.7.2.6"></a><h4>Returns</h4>
 <p> a <a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GstRTSPResult" title="enum GstRTSPResult"><span class="type">GstRTSPResult</span></a>. </p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -192,7 +191,6 @@
 <div class="refsect3">
 <a name="id-1.2.10.8.7.3.6"></a><h4>Returns</h4>
 <p> <a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-OK:CAPS"><span class="type">GST_RTSP_OK</span></a>. </p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -229,7 +227,6 @@
 <div class="refsect3">
 <a name="id-1.2.10.8.7.4.6"></a><h4>Returns</h4>
 <p> a <a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GstRTSPResult" title="enum GstRTSPResult"><span class="type">GstRTSPResult</span></a>.</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -259,7 +256,6 @@
 <a name="id-1.2.10.8.7.5.6"></a><h4>Returns</h4>
 <p> a string describing the RTSP transport or <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><span class="type">NULL</span></a> when the transport
 is invalid.</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -302,7 +298,6 @@
 <div class="refsect3">
 <a name="id-1.2.10.8.7.6.7"></a><h4>Returns</h4>
 <p> <a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-OK:CAPS"><span class="type">GST_RTSP_OK</span></a>.</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -351,7 +346,6 @@
 <div class="refsect3">
 <a name="id-1.2.10.8.7.7.8"></a><h4>Returns</h4>
 <p> <a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-OK:CAPS"><span class="type">GST_RTSP_OK</span></a>. </p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -379,7 +373,6 @@
 <div class="refsect3">
 <a name="id-1.2.10.8.7.8.6"></a><h4>Returns</h4>
 <p> <a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-OK:CAPS"><span class="type">GST_RTSP_OK</span></a>.</p>
-<p></p>
 </div>
 </div>
 </div>
@@ -688,7 +681,6 @@
 </div>
 </div>
 <div class="footer">
-<hr>
-          Generated by GTK-Doc V1.21</div>
+<hr>Generated by GTK-Doc V1.24</div>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/libs/html/gst-plugins-base-libs-gstrtspurl.html b/docs/libs/html/gst-plugins-base-libs-gstrtspurl.html
index 378da7b..ef11994 100644
--- a/docs/libs/html/gst-plugins-base-libs-gstrtspurl.html
+++ b/docs/libs/html/gst-plugins-base-libs-gstrtspurl.html
@@ -2,13 +2,13 @@
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>GStreamer Base Plugins 1.0 Library Reference Manual: gstrtspurl</title>
+<title>gstrtspurl: GStreamer Base 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 Base Plugins 1.0 Library Reference Manual">
 <link rel="up" href="gstreamer-rtsp.html" title="RTSP Library">
 <link rel="prev" href="gst-plugins-base-libs-gstrtsptransport.html" title="gstrtsptransport">
 <link rel="next" href="gstreamer-sdp.html" title="SDP Library">
-<meta name="generator" content="GTK-Doc V1.21 (XML mode)">
+<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">
@@ -161,7 +161,6 @@
 <div class="refsect3">
 <a name="id-1.2.10.9.7.2.6"></a><h4>Returns</h4>
 <p> a <a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GstRTSPResult" title="enum GstRTSPResult"><span class="type">GstRTSPResult</span></a>.</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -190,7 +189,6 @@
 <a name="id-1.2.10.9.7.3.6"></a><h4>Returns</h4>
 <p> a copy of <em class="parameter"><code>url</code></em>
 . Free with <a class="link" href="gst-plugins-base-libs-gstrtspurl.html#gst-rtsp-url-free" title="gst_rtsp_url_free ()"><code class="function">gst_rtsp_url_free()</code></a> after usage.</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -241,7 +239,6 @@
 <div class="refsect3">
 <a name="id-1.2.10.9.7.5.6"></a><h4>Returns</h4>
 <p> a string with the request URI. <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></p>
 </div>
 </div>
 <hr>
@@ -278,7 +275,6 @@
 <div class="refsect3">
 <a name="id-1.2.10.9.7.6.6"></a><h4>Returns</h4>
 <p> <a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-OK:CAPS"><span class="type">GST_RTSP_OK</span></a>.</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -314,7 +310,6 @@
 <div class="refsect3">
 <a name="id-1.2.10.9.7.7.6"></a><h4>Returns</h4>
 <p> <a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-OK:CAPS"><span class="type">GST_RTSP_OK</span></a>.</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -434,7 +429,6 @@
 </div>
 </div>
 <div class="footer">
-<hr>
-          Generated by GTK-Doc V1.21</div>
+<hr>Generated by GTK-Doc V1.24</div>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/libs/html/gst-plugins-base-libs-gstsdpmessage.html b/docs/libs/html/gst-plugins-base-libs-gstsdpmessage.html
index 1e59f35..36581a9 100644
--- a/docs/libs/html/gst-plugins-base-libs-gstsdpmessage.html
+++ b/docs/libs/html/gst-plugins-base-libs-gstsdpmessage.html
@@ -2,13 +2,13 @@
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>GStreamer Base Plugins 1.0 Library Reference Manual: gstsdpmessage</title>
+<title>gstsdpmessage: GStreamer Base 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 Base Plugins 1.0 Library Reference Manual">
 <link rel="up" href="gstreamer-sdp.html" title="SDP Library">
 <link rel="prev" href="gstreamer-sdp.html" title="SDP Library">
 <link rel="next" href="gstreamer-mikey.html" title="MIKEY Library">
-<meta name="generator" content="GTK-Doc V1.21 (XML mode)">
+<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">
@@ -132,6 +132,14 @@
 <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPResult" title="enum GstSDPResult"><span class="returnvalue">GstSDPResult</span></a>
 </td>
 <td class="function_name">
+<a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-message-copy" title="gst_sdp_message_copy ()">gst_sdp_message_copy</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPResult" title="enum GstSDPResult"><span class="returnvalue">GstSDPResult</span></a>
+</td>
+<td class="function_name">
 <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-message-init" title="gst_sdp_message_init ()">gst_sdp_message_init</a> <span class="c_punctuation">()</span>
 </td>
 </tr>
@@ -636,6 +644,14 @@
 <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPResult" title="enum GstSDPResult"><span class="returnvalue">GstSDPResult</span></a>
 </td>
 <td class="function_name">
+<a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-media-copy" title="gst_sdp_media_copy ()">gst_sdp_media_copy</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPResult" title="enum GstSDPResult"><span class="returnvalue">GstSDPResult</span></a>
+</td>
+<td class="function_name">
 <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-media-init" title="gst_sdp_media_init ()">gst_sdp_media_init</a> <span class="c_punctuation">()</span>
 </td>
 </tr>
@@ -1100,9 +1116,8 @@
 <a name="id-1.2.11.3.7.2.6"></a><h4>Returns</h4>
 <p> <em class="parameter"><code>GST_SDP_OK</code></em>
 .</p>
-<p></p>
 </div>
-<p class="since">Since 1.2</p>
+<p class="since">Since: 1.2</p>
 </div>
 <hr>
 <div class="refsect2">
@@ -1129,9 +1144,8 @@
 <a name="id-1.2.11.3.7.3.6"></a><h4>Returns</h4>
 <p> <em class="parameter"><code>GST_SDP_OK</code></em>
 .</p>
-<p></p>
 </div>
-<p class="since">Since 1.2</p>
+<p class="since">Since: 1.2</p>
 </div>
 <hr>
 <div class="refsect2">
@@ -1172,9 +1186,8 @@
 <div class="refsect3">
 <a name="id-1.2.11.3.7.4.6"></a><h4>Returns</h4>
 <p> a <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPResult" title="enum GstSDPResult"><span class="type">GstSDPResult</span></a>.</p>
-<p></p>
 </div>
-<p class="since">Since 1.2</p>
+<p class="since">Since: 1.2</p>
 </div>
 <hr>
 <div class="refsect2">
@@ -1201,9 +1214,8 @@
 <div class="refsect3">
 <a name="id-1.2.11.3.7.5.6"></a><h4>Returns</h4>
 <p> a <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPResult" title="enum GstSDPResult"><span class="type">GstSDPResult</span></a>.</p>
-<p></p>
 </div>
-<p class="since">Since 1.2</p>
+<p class="since">Since: 1.2</p>
 </div>
 <hr>
 <div class="refsect2">
@@ -1253,9 +1265,8 @@
 <div class="refsect3">
 <a name="id-1.2.11.3.7.6.6"></a><h4>Returns</h4>
 <p> a <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPResult" title="enum GstSDPResult"><span class="type">GstSDPResult</span></a>.</p>
-<p></p>
 </div>
-<p class="since">Since 1.2</p>
+<p class="since">Since: 1.2</p>
 </div>
 <hr>
 <div class="refsect2">
@@ -1282,9 +1293,8 @@
 <div class="refsect3">
 <a name="id-1.2.11.3.7.7.6"></a><h4>Returns</h4>
 <p> a <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPResult" title="enum GstSDPResult"><span class="type">GstSDPResult</span></a>.</p>
-<p></p>
 </div>
-<p class="since">Since 1.2</p>
+<p class="since">Since: 1.2</p>
 </div>
 <hr>
 <div class="refsect2">
@@ -1325,9 +1335,8 @@
 <div class="refsect3">
 <a name="id-1.2.11.3.7.8.6"></a><h4>Returns</h4>
 <p> a <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPResult" title="enum GstSDPResult"><span class="type">GstSDPResult</span></a>.</p>
-<p></p>
 </div>
-<p class="since">Since 1.2</p>
+<p class="since">Since: 1.2</p>
 </div>
 <hr>
 <div class="refsect2">
@@ -1354,9 +1363,8 @@
 <div class="refsect3">
 <a name="id-1.2.11.3.7.9.6"></a><h4>Returns</h4>
 <p> a <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPResult" title="enum GstSDPResult"><span class="type">GstSDPResult</span></a>.</p>
-<p></p>
 </div>
-<p class="since">Since 1.2</p>
+<p class="since">Since: 1.2</p>
 </div>
 <hr>
 <div class="refsect2">
@@ -1399,9 +1407,8 @@
 <a name="id-1.2.11.3.7.10.6"></a><h4>Returns</h4>
 <p> <em class="parameter"><code>GST_SDP_OK</code></em>
 .</p>
-<p></p>
 </div>
-<p class="since">Since 1.2</p>
+<p class="since">Since: 1.2</p>
 </div>
 <hr>
 <div class="refsect2">
@@ -1428,9 +1435,8 @@
 <a name="id-1.2.11.3.7.11.6"></a><h4>Returns</h4>
 <p> <em class="parameter"><code>GST_SDP_OK</code></em>
 .</p>
-<p></p>
 </div>
-<p class="since">Since 1.2</p>
+<p class="since">Since: 1.2</p>
 </div>
 <hr>
 <div class="refsect2">
@@ -1457,11 +1463,49 @@
 <div class="refsect3">
 <a name="id-1.2.11.3.7.12.6"></a><h4>Returns</h4>
 <p> a <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPResult" title="enum GstSDPResult"><span class="type">GstSDPResult</span></a>.</p>
-<p></p>
 </div>
 </div>
 <hr>
 <div class="refsect2">
+<a name="gst-sdp-message-copy"></a><h3>gst_sdp_message_copy ()</h3>
+<pre class="programlisting"><a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPResult" title="enum GstSDPResult"><span class="returnvalue">GstSDPResult</span></a>
+gst_sdp_message_copy (<em class="parameter"><code>const <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPMessage" title="GstSDPMessage"><span class="type">GstSDPMessage</span></a> *msg</code></em>,
+                      <em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPMessage" title="GstSDPMessage"><span class="type">GstSDPMessage</span></a> **copy</code></em>);</pre>
+<p>Allocate a new copy of <em class="parameter"><code>msg</code></em>
+ and store the result in <em class="parameter"><code>copy</code></em>
+. The value in
+<em class="parameter"><code>copy</code></em>
+ should be release with gst_sdp_message_free function.</p>
+<div class="refsect3">
+<a name="id-1.2.11.3.7.13.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>msg</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPMessage" title="GstSDPMessage"><span class="type">GstSDPMessage</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>copy</p></td>
+<td class="parameter_description"><p> pointer to new <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPMessage" title="GstSDPMessage"><span class="type">GstSDPMessage</span></a>. </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="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="id-1.2.11.3.7.13.6"></a><h4>Returns</h4>
+<p> a <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPResult" title="enum GstSDPResult"><span class="type">GstSDPResult</span></a></p>
+</div>
+<p class="since">Since: 1.2</p>
+</div>
+<hr>
+<div class="refsect2">
 <a name="gst-sdp-message-init"></a><h3>gst_sdp_message_init ()</h3>
 <pre class="programlisting"><a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPResult" title="enum GstSDPResult"><span class="returnvalue">GstSDPResult</span></a>
 gst_sdp_message_init (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPMessage" title="GstSDPMessage"><span class="type">GstSDPMessage</span></a> *msg</code></em>);</pre>
@@ -1472,7 +1516,7 @@
 <p>When this function is invoked on newly allocated data (with malloc or on the
 stack), its contents should be set to 0 before calling this function.</p>
 <div class="refsect3">
-<a name="id-1.2.11.3.7.13.6"></a><h4>Parameters</h4>
+<a name="id-1.2.11.3.7.14.6"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1487,9 +1531,8 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.11.3.7.13.7"></a><h4>Returns</h4>
+<a name="id-1.2.11.3.7.14.7"></a><h4>Returns</h4>
 <p> a <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPResult" title="enum GstSDPResult"><span class="type">GstSDPResult</span></a>.</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -1504,38 +1547,6 @@
  was allocated on the
 stack and initialized with <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-message-init" title="gst_sdp_message_init ()"><code class="function">gst_sdp_message_init()</code></a>.</p>
 <div class="refsect3">
-<a name="id-1.2.11.3.7.14.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>msg</p></td>
-<td class="parameter_description"><p>a <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPMessage" title="GstSDPMessage"><span class="type">GstSDPMessage</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
-</table></div>
-</div>
-<div class="refsect3">
-<a name="id-1.2.11.3.7.14.6"></a><h4>Returns</h4>
-<p> a <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPResult" title="enum GstSDPResult"><span class="type">GstSDPResult</span></a>.</p>
-<p></p>
-</div>
-</div>
-<hr>
-<div class="refsect2">
-<a name="gst-sdp-message-free"></a><h3>gst_sdp_message_free ()</h3>
-<pre class="programlisting"><a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPResult" title="enum GstSDPResult"><span class="returnvalue">GstSDPResult</span></a>
-gst_sdp_message_free (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPMessage" title="GstSDPMessage"><span class="type">GstSDPMessage</span></a> *msg</code></em>);</pre>
-<p>Free all resources allocated by <em class="parameter"><code>msg</code></em>
-. <em class="parameter"><code>msg</code></em>
- should not be used anymore after
-this function. This function should be used when <em class="parameter"><code>msg</code></em>
- was dynamically
-allocated with <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-message-new" title="gst_sdp_message_new ()"><code class="function">gst_sdp_message_new()</code></a>.</p>
-<div class="refsect3">
 <a name="id-1.2.11.3.7.15.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
@@ -1553,7 +1564,37 @@
 <div class="refsect3">
 <a name="id-1.2.11.3.7.15.6"></a><h4>Returns</h4>
 <p> a <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPResult" title="enum GstSDPResult"><span class="type">GstSDPResult</span></a>.</p>
-<p></p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-sdp-message-free"></a><h3>gst_sdp_message_free ()</h3>
+<pre class="programlisting"><a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPResult" title="enum GstSDPResult"><span class="returnvalue">GstSDPResult</span></a>
+gst_sdp_message_free (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPMessage" title="GstSDPMessage"><span class="type">GstSDPMessage</span></a> *msg</code></em>);</pre>
+<p>Free all resources allocated by <em class="parameter"><code>msg</code></em>
+. <em class="parameter"><code>msg</code></em>
+ should not be used anymore after
+this function. This function should be used when <em class="parameter"><code>msg</code></em>
+ was dynamically
+allocated with <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-message-new" title="gst_sdp_message_new ()"><code class="function">gst_sdp_message_new()</code></a>.</p>
+<div class="refsect3">
+<a name="id-1.2.11.3.7.16.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>msg</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPMessage" title="GstSDPMessage"><span class="type">GstSDPMessage</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="id-1.2.11.3.7.16.6"></a><h4>Returns</h4>
+<p> a <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPResult" title="enum GstSDPResult"><span class="type">GstSDPResult</span></a>.</p>
 </div>
 </div>
 <hr>
@@ -1569,7 +1610,7 @@
 <em class="parameter"><code>msg</code></em>
 .</p>
 <div class="refsect3">
-<a name="id-1.2.11.3.7.16.5"></a><h4>Parameters</h4>
+<a name="id-1.2.11.3.7.17.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1596,9 +1637,8 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.11.3.7.16.6"></a><h4>Returns</h4>
+<a name="id-1.2.11.3.7.17.6"></a><h4>Returns</h4>
 <p> <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GST-SDP-OK:CAPS"><span class="type">GST_SDP_OK</span></a> on success.</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -1609,7 +1649,7 @@
 <p>Convert the contents of <em class="parameter"><code>msg</code></em>
  to a text string.</p>
 <div class="refsect3">
-<a name="id-1.2.11.3.7.17.5"></a><h4>Parameters</h4>
+<a name="id-1.2.11.3.7.18.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1624,9 +1664,8 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.11.3.7.17.6"></a><h4>Returns</h4>
+<a name="id-1.2.11.3.7.18.6"></a><h4>Returns</h4>
 <p> A dynamically allocated string representing the SDP description.</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -1643,7 +1682,7 @@
 <p> where value is url encoded. This looslely resembles
  http://tools.ietf.org/html/draft-fujikawa-sdp-url-01</p>
 <div class="refsect3">
-<a name="id-1.2.11.3.7.18.8"></a><h4>Parameters</h4>
+<a name="id-1.2.11.3.7.19.8"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1665,9 +1704,8 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.11.3.7.18.9"></a><h4>Returns</h4>
+<a name="id-1.2.11.3.7.19.9"></a><h4>Returns</h4>
 <p> <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GST-SDP-OK:CAPS"><span class="type">GST_SDP_OK</span></a> on success.</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -1682,7 +1720,7 @@
 <p> @scheme:///[<span class="type">type</span>=value *[&amp;type=value]]</p>
 <p> Where each value is url encoded.</p>
 <div class="refsect3">
-<a name="id-1.2.11.3.7.19.7"></a><h4>Parameters</h4>
+<a name="id-1.2.11.3.7.20.7"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1704,10 +1742,9 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.11.3.7.19.8"></a><h4>Returns</h4>
+<a name="id-1.2.11.3.7.20.8"></a><h4>Returns</h4>
 <p> a uri for <em class="parameter"><code>msg</code></em>
 .</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -1720,7 +1757,7 @@
 <p>Check if the given <em class="parameter"><code>addr</code></em>
  is a multicast address.</p>
 <div class="refsect3">
-<a name="id-1.2.11.3.7.20.5"></a><h4>Parameters</h4>
+<a name="id-1.2.11.3.7.21.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1747,10 +1784,9 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.11.3.7.20.6"></a><h4>Returns</h4>
+<a name="id-1.2.11.3.7.21.6"></a><h4>Returns</h4>
 <p> TRUE when <em class="parameter"><code>addr</code></em>
 is multicast.</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -1761,7 +1797,7 @@
 <p>Get the version in <em class="parameter"><code>msg</code></em>
 .</p>
 <div class="refsect3">
-<a name="id-1.2.11.3.7.21.5"></a><h4>Parameters</h4>
+<a name="id-1.2.11.3.7.22.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1776,9 +1812,8 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.11.3.7.21.6"></a><h4>Returns</h4>
+<a name="id-1.2.11.3.7.22.6"></a><h4>Returns</h4>
 <p> a <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPResult" title="enum GstSDPResult"><span class="type">GstSDPResult</span></a>.</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -1790,7 +1825,7 @@
 <p>Set the version in <em class="parameter"><code>msg</code></em>
 .</p>
 <div class="refsect3">
-<a name="id-1.2.11.3.7.22.5"></a><h4>Parameters</h4>
+<a name="id-1.2.11.3.7.23.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1812,9 +1847,8 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.11.3.7.22.6"></a><h4>Returns</h4>
+<a name="id-1.2.11.3.7.23.6"></a><h4>Returns</h4>
 <p> a <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPResult" title="enum GstSDPResult"><span class="type">GstSDPResult</span></a>.</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -1825,7 +1859,7 @@
 <p>Get the origin of <em class="parameter"><code>msg</code></em>
 .</p>
 <div class="refsect3">
-<a name="id-1.2.11.3.7.23.5"></a><h4>Parameters</h4>
+<a name="id-1.2.11.3.7.24.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1840,10 +1874,9 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.11.3.7.23.6"></a><h4>Returns</h4>
+<a name="id-1.2.11.3.7.24.6"></a><h4>Returns</h4>
 <p> a <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPOrigin" title="GstSDPOrigin"><span class="type">GstSDPOrigin</span></a>. The result remains valid as long as <em class="parameter"><code>msg</code></em>
 is valid.</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -1860,7 +1893,7 @@
 <p>Configure the SDP origin in <em class="parameter"><code>msg</code></em>
  with the given parameters.</p>
 <div class="refsect3">
-<a name="id-1.2.11.3.7.24.5"></a><h4>Parameters</h4>
+<a name="id-1.2.11.3.7.25.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1907,9 +1940,8 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.11.3.7.24.6"></a><h4>Returns</h4>
+<a name="id-1.2.11.3.7.25.6"></a><h4>Returns</h4>
 <p> <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GST-SDP-OK:CAPS"><span class="type">GST_SDP_OK</span></a>.</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -1920,7 +1952,7 @@
 <p>Get the session name in <em class="parameter"><code>msg</code></em>
 .</p>
 <div class="refsect3">
-<a name="id-1.2.11.3.7.25.5"></a><h4>Parameters</h4>
+<a name="id-1.2.11.3.7.26.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1935,9 +1967,8 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.11.3.7.25.6"></a><h4>Returns</h4>
+<a name="id-1.2.11.3.7.26.6"></a><h4>Returns</h4>
 <p> a <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPResult" title="enum GstSDPResult"><span class="type">GstSDPResult</span></a>.</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -1949,7 +1980,7 @@
 <p>Set the session name in <em class="parameter"><code>msg</code></em>
 .</p>
 <div class="refsect3">
-<a name="id-1.2.11.3.7.26.5"></a><h4>Parameters</h4>
+<a name="id-1.2.11.3.7.27.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1971,9 +2002,8 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.11.3.7.26.6"></a><h4>Returns</h4>
+<a name="id-1.2.11.3.7.27.6"></a><h4>Returns</h4>
 <p> a <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPResult" title="enum GstSDPResult"><span class="type">GstSDPResult</span></a>.</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -1984,7 +2014,7 @@
 <p>Get the information in <em class="parameter"><code>msg</code></em>
 .</p>
 <div class="refsect3">
-<a name="id-1.2.11.3.7.27.5"></a><h4>Parameters</h4>
+<a name="id-1.2.11.3.7.28.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1999,9 +2029,8 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.11.3.7.27.6"></a><h4>Returns</h4>
+<a name="id-1.2.11.3.7.28.6"></a><h4>Returns</h4>
 <p> a <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPResult" title="enum GstSDPResult"><span class="type">GstSDPResult</span></a>.</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -2013,7 +2042,7 @@
 <p>Set the information in <em class="parameter"><code>msg</code></em>
 .</p>
 <div class="refsect3">
-<a name="id-1.2.11.3.7.28.5"></a><h4>Parameters</h4>
+<a name="id-1.2.11.3.7.29.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -2035,9 +2064,8 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.11.3.7.28.6"></a><h4>Returns</h4>
+<a name="id-1.2.11.3.7.29.6"></a><h4>Returns</h4>
 <p> a <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPResult" title="enum GstSDPResult"><span class="type">GstSDPResult</span></a>.</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -2048,7 +2076,7 @@
 <p>Get the URI in <em class="parameter"><code>msg</code></em>
 .</p>
 <div class="refsect3">
-<a name="id-1.2.11.3.7.29.5"></a><h4>Parameters</h4>
+<a name="id-1.2.11.3.7.30.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -2063,9 +2091,8 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.11.3.7.29.6"></a><h4>Returns</h4>
+<a name="id-1.2.11.3.7.30.6"></a><h4>Returns</h4>
 <p> a <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPResult" title="enum GstSDPResult"><span class="type">GstSDPResult</span></a>.</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -2077,7 +2104,7 @@
 <p>Set the URI in <em class="parameter"><code>msg</code></em>
 .</p>
 <div class="refsect3">
-<a name="id-1.2.11.3.7.30.5"></a><h4>Parameters</h4>
+<a name="id-1.2.11.3.7.31.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -2099,9 +2126,8 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.11.3.7.30.6"></a><h4>Returns</h4>
+<a name="id-1.2.11.3.7.31.6"></a><h4>Returns</h4>
 <p> a <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPResult" title="enum GstSDPResult"><span class="type">GstSDPResult</span></a>.</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -2112,7 +2138,7 @@
 <p>Get the number of emails in <em class="parameter"><code>msg</code></em>
 .</p>
 <div class="refsect3">
-<a name="id-1.2.11.3.7.31.5"></a><h4>Parameters</h4>
+<a name="id-1.2.11.3.7.32.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -2127,10 +2153,9 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.11.3.7.31.6"></a><h4>Returns</h4>
+<a name="id-1.2.11.3.7.32.6"></a><h4>Returns</h4>
 <p> the number of emails in <em class="parameter"><code>msg</code></em>
 .</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -2143,7 +2168,7 @@
  from <em class="parameter"><code>msg</code></em>
 .</p>
 <div class="refsect3">
-<a name="id-1.2.11.3.7.32.5"></a><h4>Parameters</h4>
+<a name="id-1.2.11.3.7.33.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -2165,10 +2190,9 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.11.3.7.32.6"></a><h4>Returns</h4>
+<a name="id-1.2.11.3.7.33.6"></a><h4>Returns</h4>
 <p> the email at position <em class="parameter"><code>idx</code></em>
 .</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -2185,7 +2209,7 @@
 When -1 is given as <em class="parameter"><code>idx</code></em>
 , the email is inserted at the end.</p>
 <div class="refsect3">
-<a name="id-1.2.11.3.7.33.5"></a><h4>Parameters</h4>
+<a name="id-1.2.11.3.7.34.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -2212,11 +2236,10 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.11.3.7.33.6"></a><h4>Returns</h4>
+<a name="id-1.2.11.3.7.34.6"></a><h4>Returns</h4>
 <p> a <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPResult" title="enum GstSDPResult"><span class="type">GstSDPResult</span></a>.</p>
-<p></p>
 </div>
-<p class="since">Since 1.2</p>
+<p class="since">Since: 1.2</p>
 </div>
 <hr>
 <div class="refsect2">
@@ -2230,49 +2253,6 @@
  with <em class="parameter"><code>email</code></em>
 .</p>
 <div class="refsect3">
-<a name="id-1.2.11.3.7.34.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>msg</p></td>
-<td class="parameter_description"><p>a <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPMessage" title="GstSDPMessage"><span class="type">GstSDPMessage</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr>
-<tr>
-<td class="parameter_name"><p>idx</p></td>
-<td class="parameter_description"><p>an email index</p></td>
-<td class="parameter_annotations"> </td>
-</tr>
-<tr>
-<td class="parameter_name"><p>email</p></td>
-<td class="parameter_description"><p>an email</p></td>
-<td class="parameter_annotations"> </td>
-</tr>
-</tbody>
-</table></div>
-</div>
-<div class="refsect3">
-<a name="id-1.2.11.3.7.34.6"></a><h4>Returns</h4>
-<p> a <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPResult" title="enum GstSDPResult"><span class="type">GstSDPResult</span></a>.</p>
-<p></p>
-</div>
-<p class="since">Since 1.2</p>
-</div>
-<hr>
-<div class="refsect2">
-<a name="gst-sdp-message-remove-email"></a><h3>gst_sdp_message_remove_email ()</h3>
-<pre class="programlisting"><a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPResult" title="enum GstSDPResult"><span class="returnvalue">GstSDPResult</span></a>
-gst_sdp_message_remove_email (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPMessage" title="GstSDPMessage"><span class="type">GstSDPMessage</span></a> *msg</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> idx</code></em>);</pre>
-<p>Remove the email in <em class="parameter"><code>msg</code></em>
- at index <em class="parameter"><code>idx</code></em>
-.</p>
-<div class="refsect3">
 <a name="id-1.2.11.3.7.35.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
@@ -2291,15 +2271,56 @@
 <td class="parameter_description"><p>an email index</p></td>
 <td class="parameter_annotations"> </td>
 </tr>
+<tr>
+<td class="parameter_name"><p>email</p></td>
+<td class="parameter_description"><p>an email</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
 </tbody>
 </table></div>
 </div>
 <div class="refsect3">
 <a name="id-1.2.11.3.7.35.6"></a><h4>Returns</h4>
 <p> a <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPResult" title="enum GstSDPResult"><span class="type">GstSDPResult</span></a>.</p>
-<p></p>
 </div>
-<p class="since">Since 1.2</p>
+<p class="since">Since: 1.2</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-sdp-message-remove-email"></a><h3>gst_sdp_message_remove_email ()</h3>
+<pre class="programlisting"><a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPResult" title="enum GstSDPResult"><span class="returnvalue">GstSDPResult</span></a>
+gst_sdp_message_remove_email (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPMessage" title="GstSDPMessage"><span class="type">GstSDPMessage</span></a> *msg</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> idx</code></em>);</pre>
+<p>Remove the email in <em class="parameter"><code>msg</code></em>
+ at index <em class="parameter"><code>idx</code></em>
+.</p>
+<div class="refsect3">
+<a name="id-1.2.11.3.7.36.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>msg</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPMessage" title="GstSDPMessage"><span class="type">GstSDPMessage</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>idx</p></td>
+<td class="parameter_description"><p>an email index</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="id-1.2.11.3.7.36.6"></a><h4>Returns</h4>
+<p> a <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPResult" title="enum GstSDPResult"><span class="type">GstSDPResult</span></a>.</p>
+</div>
+<p class="since">Since: 1.2</p>
 </div>
 <hr>
 <div class="refsect2">
@@ -2311,7 +2332,7 @@
  to the list of emails in <em class="parameter"><code>msg</code></em>
 .</p>
 <div class="refsect3">
-<a name="id-1.2.11.3.7.36.5"></a><h4>Parameters</h4>
+<a name="id-1.2.11.3.7.37.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -2333,9 +2354,8 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.11.3.7.36.6"></a><h4>Returns</h4>
+<a name="id-1.2.11.3.7.37.6"></a><h4>Returns</h4>
 <p> a <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPResult" title="enum GstSDPResult"><span class="type">GstSDPResult</span></a>.</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -2346,7 +2366,7 @@
 <p>Get the number of phones in <em class="parameter"><code>msg</code></em>
 .</p>
 <div class="refsect3">
-<a name="id-1.2.11.3.7.37.5"></a><h4>Parameters</h4>
+<a name="id-1.2.11.3.7.38.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -2361,10 +2381,9 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.11.3.7.37.6"></a><h4>Returns</h4>
+<a name="id-1.2.11.3.7.38.6"></a><h4>Returns</h4>
 <p> the number of phones in <em class="parameter"><code>msg</code></em>
 .</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -2377,48 +2396,6 @@
  from <em class="parameter"><code>msg</code></em>
 .</p>
 <div class="refsect3">
-<a name="id-1.2.11.3.7.38.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>msg</p></td>
-<td class="parameter_description"><p>a <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPMessage" title="GstSDPMessage"><span class="type">GstSDPMessage</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr>
-<tr>
-<td class="parameter_name"><p>idx</p></td>
-<td class="parameter_description"><p>a phone index</p></td>
-<td class="parameter_annotations"> </td>
-</tr>
-</tbody>
-</table></div>
-</div>
-<div class="refsect3">
-<a name="id-1.2.11.3.7.38.6"></a><h4>Returns</h4>
-<p> the phone at position <em class="parameter"><code>idx</code></em>
-.</p>
-<p></p>
-</div>
-</div>
-<hr>
-<div class="refsect2">
-<a name="gst-sdp-message-insert-phone"></a><h3>gst_sdp_message_insert_phone ()</h3>
-<pre class="programlisting"><a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPResult" title="enum GstSDPResult"><span class="returnvalue">GstSDPResult</span></a>
-gst_sdp_message_insert_phone (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPMessage" title="GstSDPMessage"><span class="type">GstSDPMessage</span></a> *msg</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> idx</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> *phone</code></em>);</pre>
-<p>Insert <em class="parameter"><code>phone</code></em>
- into the array of phone numbers in <em class="parameter"><code>msg</code></em>
- at index <em class="parameter"><code>idx</code></em>
-.
-When -1 is given as <em class="parameter"><code>idx</code></em>
-, the phone is inserted at the end.</p>
-<div class="refsect3">
 <a name="id-1.2.11.3.7.39.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
@@ -2437,32 +2414,28 @@
 <td class="parameter_description"><p>a phone index</p></td>
 <td class="parameter_annotations"> </td>
 </tr>
-<tr>
-<td class="parameter_name"><p>phone</p></td>
-<td class="parameter_description"><p>a phone</p></td>
-<td class="parameter_annotations"> </td>
-</tr>
 </tbody>
 </table></div>
 </div>
 <div class="refsect3">
 <a name="id-1.2.11.3.7.39.6"></a><h4>Returns</h4>
-<p> a <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPResult" title="enum GstSDPResult"><span class="type">GstSDPResult</span></a>.</p>
-<p></p>
+<p> the phone at position <em class="parameter"><code>idx</code></em>
+.</p>
 </div>
-<p class="since">Since 1.2</p>
 </div>
 <hr>
 <div class="refsect2">
-<a name="gst-sdp-message-replace-phone"></a><h3>gst_sdp_message_replace_phone ()</h3>
+<a name="gst-sdp-message-insert-phone"></a><h3>gst_sdp_message_insert_phone ()</h3>
 <pre class="programlisting"><a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPResult" title="enum GstSDPResult"><span class="returnvalue">GstSDPResult</span></a>
-gst_sdp_message_replace_phone (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPMessage" title="GstSDPMessage"><span class="type">GstSDPMessage</span></a> *msg</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> idx</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> *phone</code></em>);</pre>
-<p>Replace the phone number in <em class="parameter"><code>msg</code></em>
+gst_sdp_message_insert_phone (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPMessage" title="GstSDPMessage"><span class="type">GstSDPMessage</span></a> *msg</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> idx</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> *phone</code></em>);</pre>
+<p>Insert <em class="parameter"><code>phone</code></em>
+ into the array of phone numbers in <em class="parameter"><code>msg</code></em>
  at index <em class="parameter"><code>idx</code></em>
- with <em class="parameter"><code>phone</code></em>
-.</p>
+.
+When -1 is given as <em class="parameter"><code>idx</code></em>
+, the phone is inserted at the end.</p>
 <div class="refsect3">
 <a name="id-1.2.11.3.7.40.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
@@ -2493,9 +2466,52 @@
 <div class="refsect3">
 <a name="id-1.2.11.3.7.40.6"></a><h4>Returns</h4>
 <p> a <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPResult" title="enum GstSDPResult"><span class="type">GstSDPResult</span></a>.</p>
-<p></p>
 </div>
-<p class="since">Since 1.2</p>
+<p class="since">Since: 1.2</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-sdp-message-replace-phone"></a><h3>gst_sdp_message_replace_phone ()</h3>
+<pre class="programlisting"><a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPResult" title="enum GstSDPResult"><span class="returnvalue">GstSDPResult</span></a>
+gst_sdp_message_replace_phone (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPMessage" title="GstSDPMessage"><span class="type">GstSDPMessage</span></a> *msg</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> idx</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> *phone</code></em>);</pre>
+<p>Replace the phone number in <em class="parameter"><code>msg</code></em>
+ at index <em class="parameter"><code>idx</code></em>
+ with <em class="parameter"><code>phone</code></em>
+.</p>
+<div class="refsect3">
+<a name="id-1.2.11.3.7.41.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>msg</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPMessage" title="GstSDPMessage"><span class="type">GstSDPMessage</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>idx</p></td>
+<td class="parameter_description"><p>a phone index</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>phone</p></td>
+<td class="parameter_description"><p>a phone</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="id-1.2.11.3.7.41.6"></a><h4>Returns</h4>
+<p> a <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPResult" title="enum GstSDPResult"><span class="type">GstSDPResult</span></a>.</p>
+</div>
+<p class="since">Since: 1.2</p>
 </div>
 <hr>
 <div class="refsect2">
@@ -2507,7 +2523,7 @@
  at index <em class="parameter"><code>idx</code></em>
 .</p>
 <div class="refsect3">
-<a name="id-1.2.11.3.7.41.5"></a><h4>Parameters</h4>
+<a name="id-1.2.11.3.7.42.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -2529,11 +2545,10 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.11.3.7.41.6"></a><h4>Returns</h4>
+<a name="id-1.2.11.3.7.42.6"></a><h4>Returns</h4>
 <p> a <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPResult" title="enum GstSDPResult"><span class="type">GstSDPResult</span></a>.</p>
-<p></p>
 </div>
-<p class="since">Since 1.2</p>
+<p class="since">Since: 1.2</p>
 </div>
 <hr>
 <div class="refsect2">
@@ -2545,7 +2560,7 @@
  to the list of phones in <em class="parameter"><code>msg</code></em>
 .</p>
 <div class="refsect3">
-<a name="id-1.2.11.3.7.42.5"></a><h4>Parameters</h4>
+<a name="id-1.2.11.3.7.43.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -2567,9 +2582,8 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.11.3.7.42.6"></a><h4>Returns</h4>
+<a name="id-1.2.11.3.7.43.6"></a><h4>Returns</h4>
 <p> a <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPResult" title="enum GstSDPResult"><span class="type">GstSDPResult</span></a>.</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -2580,7 +2594,7 @@
 <p>Get the connection of <em class="parameter"><code>msg</code></em>
 .</p>
 <div class="refsect3">
-<a name="id-1.2.11.3.7.43.5"></a><h4>Parameters</h4>
+<a name="id-1.2.11.3.7.44.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -2595,10 +2609,9 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.11.3.7.43.6"></a><h4>Returns</h4>
+<a name="id-1.2.11.3.7.44.6"></a><h4>Returns</h4>
 <p> a <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPConnection" title="GstSDPConnection"><span class="type">GstSDPConnection</span></a>. The result remains valid as long as <em class="parameter"><code>msg</code></em>
 is valid.</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -2614,7 +2627,7 @@
 <p>Configure the SDP connection in <em class="parameter"><code>msg</code></em>
  with the given parameters.</p>
 <div class="refsect3">
-<a name="id-1.2.11.3.7.44.5"></a><h4>Parameters</h4>
+<a name="id-1.2.11.3.7.45.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -2657,9 +2670,8 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.11.3.7.44.6"></a><h4>Returns</h4>
+<a name="id-1.2.11.3.7.45.6"></a><h4>Returns</h4>
 <p> a <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPResult" title="enum GstSDPResult"><span class="type">GstSDPResult</span></a>.</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -2670,7 +2682,7 @@
 <p>Get the number of bandwidth information in <em class="parameter"><code>msg</code></em>
 .</p>
 <div class="refsect3">
-<a name="id-1.2.11.3.7.45.5"></a><h4>Parameters</h4>
+<a name="id-1.2.11.3.7.46.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -2685,10 +2697,9 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.11.3.7.45.6"></a><h4>Returns</h4>
+<a name="id-1.2.11.3.7.46.6"></a><h4>Returns</h4>
 <p> the number of bandwidth information in <em class="parameter"><code>msg</code></em>
 .</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -2701,7 +2712,7 @@
  from <em class="parameter"><code>msg</code></em>
 .</p>
 <div class="refsect3">
-<a name="id-1.2.11.3.7.46.5"></a><h4>Parameters</h4>
+<a name="id-1.2.11.3.7.47.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -2723,9 +2734,8 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.11.3.7.46.6"></a><h4>Returns</h4>
+<a name="id-1.2.11.3.7.47.6"></a><h4>Returns</h4>
 <p> a <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPBandwidth" title="GstSDPBandwidth"><span class="type">GstSDPBandwidth</span></a>.</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -2742,7 +2752,7 @@
 When -1 is given as <em class="parameter"><code>idx</code></em>
 , the bandwidth is inserted at the end.</p>
 <div class="refsect3">
-<a name="id-1.2.11.3.7.47.5"></a><h4>Parameters</h4>
+<a name="id-1.2.11.3.7.48.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -2769,11 +2779,10 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.11.3.7.47.6"></a><h4>Returns</h4>
+<a name="id-1.2.11.3.7.48.6"></a><h4>Returns</h4>
 <p> a <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPResult" title="enum GstSDPResult"><span class="type">GstSDPResult</span></a>.</p>
-<p></p>
 </div>
-<p class="since">Since 1.2</p>
+<p class="since">Since: 1.2</p>
 </div>
 <hr>
 <div class="refsect2">
@@ -2787,7 +2796,7 @@
  with <em class="parameter"><code>bw</code></em>
 .</p>
 <div class="refsect3">
-<a name="id-1.2.11.3.7.48.5"></a><h4>Parameters</h4>
+<a name="id-1.2.11.3.7.49.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -2814,11 +2823,10 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.11.3.7.48.6"></a><h4>Returns</h4>
+<a name="id-1.2.11.3.7.49.6"></a><h4>Returns</h4>
 <p> a <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPResult" title="enum GstSDPResult"><span class="type">GstSDPResult</span></a>.</p>
-<p></p>
 </div>
-<p class="since">Since 1.2</p>
+<p class="since">Since: 1.2</p>
 </div>
 <hr>
 <div class="refsect2">
@@ -2830,7 +2838,7 @@
  at index <em class="parameter"><code>idx</code></em>
 .</p>
 <div class="refsect3">
-<a name="id-1.2.11.3.7.49.5"></a><h4>Parameters</h4>
+<a name="id-1.2.11.3.7.50.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -2852,11 +2860,10 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.11.3.7.49.6"></a><h4>Returns</h4>
+<a name="id-1.2.11.3.7.50.6"></a><h4>Returns</h4>
 <p> a <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPResult" title="enum GstSDPResult"><span class="type">GstSDPResult</span></a>.</p>
-<p></p>
 </div>
-<p class="since">Since 1.2</p>
+<p class="since">Since: 1.2</p>
 </div>
 <hr>
 <div class="refsect2">
@@ -2868,7 +2875,7 @@
 <p>Add the specified bandwidth information to <em class="parameter"><code>msg</code></em>
 .</p>
 <div class="refsect3">
-<a name="id-1.2.11.3.7.50.5"></a><h4>Parameters</h4>
+<a name="id-1.2.11.3.7.51.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -2895,9 +2902,8 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.11.3.7.50.6"></a><h4>Returns</h4>
+<a name="id-1.2.11.3.7.51.6"></a><h4>Returns</h4>
 <p> a <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPResult" title="enum GstSDPResult"><span class="type">GstSDPResult</span></a>.</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -2908,7 +2914,7 @@
 <p>Get the number of time information entries in <em class="parameter"><code>msg</code></em>
 .</p>
 <div class="refsect3">
-<a name="id-1.2.11.3.7.51.5"></a><h4>Parameters</h4>
+<a name="id-1.2.11.3.7.52.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -2923,10 +2929,9 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.11.3.7.51.6"></a><h4>Returns</h4>
+<a name="id-1.2.11.3.7.52.6"></a><h4>Returns</h4>
 <p> the number of time information entries in <em class="parameter"><code>msg</code></em>
 .</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -2939,7 +2944,7 @@
  from <em class="parameter"><code>msg</code></em>
 .</p>
 <div class="refsect3">
-<a name="id-1.2.11.3.7.52.5"></a><h4>Parameters</h4>
+<a name="id-1.2.11.3.7.53.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -2961,9 +2966,8 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.11.3.7.52.6"></a><h4>Returns</h4>
+<a name="id-1.2.11.3.7.53.6"></a><h4>Returns</h4>
 <p> a <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPTime" title="GstSDPTime"><span class="type">GstSDPTime</span></a>.</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -2980,7 +2984,7 @@
 When -1 is given as <em class="parameter"><code>idx</code></em>
 , the times are inserted at the end.</p>
 <div class="refsect3">
-<a name="id-1.2.11.3.7.53.5"></a><h4>Parameters</h4>
+<a name="id-1.2.11.3.7.54.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -3007,11 +3011,10 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.11.3.7.53.6"></a><h4>Returns</h4>
+<a name="id-1.2.11.3.7.54.6"></a><h4>Returns</h4>
 <p> a <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPResult" title="enum GstSDPResult"><span class="type">GstSDPResult</span></a>.</p>
-<p></p>
 </div>
-<p class="since">Since 1.2</p>
+<p class="since">Since: 1.2</p>
 </div>
 <hr>
 <div class="refsect2">
@@ -3025,7 +3028,7 @@
  with <em class="parameter"><code>t</code></em>
 .</p>
 <div class="refsect3">
-<a name="id-1.2.11.3.7.54.5"></a><h4>Parameters</h4>
+<a name="id-1.2.11.3.7.55.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -3052,11 +3055,10 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.11.3.7.54.6"></a><h4>Returns</h4>
+<a name="id-1.2.11.3.7.55.6"></a><h4>Returns</h4>
 <p> a <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPResult" title="enum GstSDPResult"><span class="type">GstSDPResult</span></a>.</p>
-<p></p>
 </div>
-<p class="since">Since 1.2</p>
+<p class="since">Since: 1.2</p>
 </div>
 <hr>
 <div class="refsect2">
@@ -3068,7 +3070,7 @@
  at index <em class="parameter"><code>idx</code></em>
 .</p>
 <div class="refsect3">
-<a name="id-1.2.11.3.7.55.5"></a><h4>Parameters</h4>
+<a name="id-1.2.11.3.7.56.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -3090,11 +3092,10 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.11.3.7.55.6"></a><h4>Returns</h4>
+<a name="id-1.2.11.3.7.56.6"></a><h4>Returns</h4>
 <p> a <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPResult" title="enum GstSDPResult"><span class="type">GstSDPResult</span></a>.</p>
-<p></p>
 </div>
-<p class="since">Since 1.2</p>
+<p class="since">Since: 1.2</p>
 </div>
 <hr>
 <div class="refsect2">
@@ -3109,7 +3110,7 @@
  to <em class="parameter"><code>msg</code></em>
 .</p>
 <div class="refsect3">
-<a name="id-1.2.11.3.7.56.5"></a><h4>Parameters</h4>
+<a name="id-1.2.11.3.7.57.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -3141,9 +3142,8 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.11.3.7.56.6"></a><h4>Returns</h4>
+<a name="id-1.2.11.3.7.57.6"></a><h4>Returns</h4>
 <p> a <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPResult" title="enum GstSDPResult"><span class="type">GstSDPResult</span></a>.</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -3154,7 +3154,7 @@
 <p>Get the number of time zone information entries in <em class="parameter"><code>msg</code></em>
 .</p>
 <div class="refsect3">
-<a name="id-1.2.11.3.7.57.5"></a><h4>Parameters</h4>
+<a name="id-1.2.11.3.7.58.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -3169,10 +3169,9 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.11.3.7.57.6"></a><h4>Returns</h4>
+<a name="id-1.2.11.3.7.58.6"></a><h4>Returns</h4>
 <p> the number of time zone information entries in <em class="parameter"><code>msg</code></em>
 .</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -3185,7 +3184,7 @@
  from <em class="parameter"><code>msg</code></em>
 .</p>
 <div class="refsect3">
-<a name="id-1.2.11.3.7.58.5"></a><h4>Parameters</h4>
+<a name="id-1.2.11.3.7.59.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -3207,9 +3206,8 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.11.3.7.58.6"></a><h4>Returns</h4>
+<a name="id-1.2.11.3.7.59.6"></a><h4>Returns</h4>
 <p> a <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPZone" title="GstSDPZone"><span class="type">GstSDPZone</span></a>.</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -3226,7 +3224,7 @@
 When -1 is given as <em class="parameter"><code>idx</code></em>
 , the zone is inserted at the end.</p>
 <div class="refsect3">
-<a name="id-1.2.11.3.7.59.5"></a><h4>Parameters</h4>
+<a name="id-1.2.11.3.7.60.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -3250,11 +3248,10 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.11.3.7.59.6"></a><h4>Returns</h4>
+<a name="id-1.2.11.3.7.60.6"></a><h4>Returns</h4>
 <p> a <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPResult" title="enum GstSDPResult"><span class="type">GstSDPResult</span></a>.</p>
-<p></p>
 </div>
-<p class="since">Since 1.2</p>
+<p class="since">Since: 1.2</p>
 </div>
 <hr>
 <div class="refsect2">
@@ -3268,7 +3265,7 @@
  with <em class="parameter"><code>zone</code></em>
 .</p>
 <div class="refsect3">
-<a name="id-1.2.11.3.7.60.5"></a><h4>Parameters</h4>
+<a name="id-1.2.11.3.7.61.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -3295,11 +3292,10 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.11.3.7.60.6"></a><h4>Returns</h4>
+<a name="id-1.2.11.3.7.61.6"></a><h4>Returns</h4>
 <p> a <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPResult" title="enum GstSDPResult"><span class="type">GstSDPResult</span></a>.</p>
-<p></p>
 </div>
-<p class="since">Since 1.2</p>
+<p class="since">Since: 1.2</p>
 </div>
 <hr>
 <div class="refsect2">
@@ -3311,7 +3307,7 @@
  at index <em class="parameter"><code>idx</code></em>
 .</p>
 <div class="refsect3">
-<a name="id-1.2.11.3.7.61.5"></a><h4>Parameters</h4>
+<a name="id-1.2.11.3.7.62.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -3333,11 +3329,10 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.11.3.7.61.6"></a><h4>Returns</h4>
+<a name="id-1.2.11.3.7.62.6"></a><h4>Returns</h4>
 <p> a <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPResult" title="enum GstSDPResult"><span class="type">GstSDPResult</span></a>.</p>
-<p></p>
 </div>
-<p class="since">Since 1.2</p>
+<p class="since">Since: 1.2</p>
 </div>
 <hr>
 <div class="refsect2">
@@ -3349,7 +3344,7 @@
 <p>Add time zone information to <em class="parameter"><code>msg</code></em>
 .</p>
 <div class="refsect3">
-<a name="id-1.2.11.3.7.62.5"></a><h4>Parameters</h4>
+<a name="id-1.2.11.3.7.63.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -3376,9 +3371,8 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.11.3.7.62.6"></a><h4>Returns</h4>
+<a name="id-1.2.11.3.7.63.6"></a><h4>Returns</h4>
 <p> a <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPResult" title="enum GstSDPResult"><span class="type">GstSDPResult</span></a>.</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -3389,7 +3383,7 @@
 <p>Get the encryption information from <em class="parameter"><code>msg</code></em>
 .</p>
 <div class="refsect3">
-<a name="id-1.2.11.3.7.63.5"></a><h4>Parameters</h4>
+<a name="id-1.2.11.3.7.64.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -3404,9 +3398,8 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.11.3.7.63.6"></a><h4>Returns</h4>
+<a name="id-1.2.11.3.7.64.6"></a><h4>Returns</h4>
 <p> a <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPKey" title="GstSDPKey"><span class="type">GstSDPKey</span></a>.</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -3419,7 +3412,7 @@
 <p>Adds the encryption information to <em class="parameter"><code>msg</code></em>
 .</p>
 <div class="refsect3">
-<a name="id-1.2.11.3.7.64.5"></a><h4>Parameters</h4>
+<a name="id-1.2.11.3.7.65.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -3446,9 +3439,8 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.11.3.7.64.6"></a><h4>Returns</h4>
+<a name="id-1.2.11.3.7.65.6"></a><h4>Returns</h4>
 <p> a <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPResult" title="enum GstSDPResult"><span class="type">GstSDPResult</span></a>.</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -3459,7 +3451,7 @@
 <p>Get the number of attributes in <em class="parameter"><code>msg</code></em>
 .</p>
 <div class="refsect3">
-<a name="id-1.2.11.3.7.65.5"></a><h4>Parameters</h4>
+<a name="id-1.2.11.3.7.66.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -3474,10 +3466,9 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.11.3.7.65.6"></a><h4>Returns</h4>
+<a name="id-1.2.11.3.7.66.6"></a><h4>Returns</h4>
 <p> the number of attributes in <em class="parameter"><code>msg</code></em>
 .</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -3490,7 +3481,7 @@
  in <em class="parameter"><code>msg</code></em>
 .</p>
 <div class="refsect3">
-<a name="id-1.2.11.3.7.66.5"></a><h4>Parameters</h4>
+<a name="id-1.2.11.3.7.67.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -3512,10 +3503,9 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.11.3.7.66.6"></a><h4>Returns</h4>
+<a name="id-1.2.11.3.7.67.6"></a><h4>Returns</h4>
 <p> the <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPAttribute" title="GstSDPAttribute"><span class="type">GstSDPAttribute</span></a> at position <em class="parameter"><code>idx</code></em>
 .</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -3528,7 +3518,7 @@
  in <em class="parameter"><code>msg</code></em>
 .</p>
 <div class="refsect3">
-<a name="id-1.2.11.3.7.67.5"></a><h4>Parameters</h4>
+<a name="id-1.2.11.3.7.68.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -3550,10 +3540,9 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.11.3.7.67.6"></a><h4>Returns</h4>
+<a name="id-1.2.11.3.7.68.6"></a><h4>Returns</h4>
 <p> the attribute value of the first attribute with <em class="parameter"><code>key</code></em>
 .</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -3568,7 +3557,7 @@
  in <em class="parameter"><code>msg</code></em>
 .</p>
 <div class="refsect3">
-<a name="id-1.2.11.3.7.68.5"></a><h4>Parameters</h4>
+<a name="id-1.2.11.3.7.69.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -3595,11 +3584,10 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.11.3.7.68.6"></a><h4>Returns</h4>
+<a name="id-1.2.11.3.7.69.6"></a><h4>Returns</h4>
 <p> the attribute value of the <em class="parameter"><code>nth</code></em>
 attribute with <em class="parameter"><code>key</code></em>
 .</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -3616,7 +3604,7 @@
 When -1 is given as <em class="parameter"><code>idx</code></em>
 , the attribute is inserted at the end.</p>
 <div class="refsect3">
-<a name="id-1.2.11.3.7.69.5"></a><h4>Parameters</h4>
+<a name="id-1.2.11.3.7.70.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -3643,11 +3631,10 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.11.3.7.69.6"></a><h4>Returns</h4>
+<a name="id-1.2.11.3.7.70.6"></a><h4>Returns</h4>
 <p> a <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPResult" title="enum GstSDPResult"><span class="type">GstSDPResult</span></a>.</p>
-<p></p>
 </div>
-<p class="since">Since 1.2</p>
+<p class="since">Since: 1.2</p>
 </div>
 <hr>
 <div class="refsect2">
@@ -3661,7 +3648,7 @@
  with <em class="parameter"><code>attr</code></em>
 .</p>
 <div class="refsect3">
-<a name="id-1.2.11.3.7.70.5"></a><h4>Parameters</h4>
+<a name="id-1.2.11.3.7.71.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -3688,11 +3675,10 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.11.3.7.70.6"></a><h4>Returns</h4>
+<a name="id-1.2.11.3.7.71.6"></a><h4>Returns</h4>
 <p> a <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPResult" title="enum GstSDPResult"><span class="type">GstSDPResult</span></a>.</p>
-<p></p>
 </div>
-<p class="since">Since 1.2</p>
+<p class="since">Since: 1.2</p>
 </div>
 <hr>
 <div class="refsect2">
@@ -3704,7 +3690,7 @@
  at index <em class="parameter"><code>idx</code></em>
 .</p>
 <div class="refsect3">
-<a name="id-1.2.11.3.7.71.5"></a><h4>Parameters</h4>
+<a name="id-1.2.11.3.7.72.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -3726,11 +3712,10 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.11.3.7.71.6"></a><h4>Returns</h4>
+<a name="id-1.2.11.3.7.72.6"></a><h4>Returns</h4>
 <p> a <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPResult" title="enum GstSDPResult"><span class="type">GstSDPResult</span></a>.</p>
-<p></p>
 </div>
-<p class="since">Since 1.2</p>
+<p class="since">Since: 1.2</p>
 </div>
 <hr>
 <div class="refsect2">
@@ -3744,7 +3729,7 @@
  to <em class="parameter"><code>msg</code></em>
 .</p>
 <div class="refsect3">
-<a name="id-1.2.11.3.7.72.5"></a><h4>Parameters</h4>
+<a name="id-1.2.11.3.7.73.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -3771,10 +3756,9 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.11.3.7.72.6"></a><h4>Returns</h4>
+<a name="id-1.2.11.3.7.73.6"></a><h4>Returns</h4>
 <p> <em class="parameter"><code>GST_SDP_OK</code></em>
 .</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -3785,7 +3769,7 @@
 <p>Get the number of media descriptions in <em class="parameter"><code>msg</code></em>
 .</p>
 <div class="refsect3">
-<a name="id-1.2.11.3.7.73.5"></a><h4>Parameters</h4>
+<a name="id-1.2.11.3.7.74.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -3800,10 +3784,9 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.11.3.7.73.6"></a><h4>Returns</h4>
+<a name="id-1.2.11.3.7.74.6"></a><h4>Returns</h4>
 <p> the number of media descriptions in <em class="parameter"><code>msg</code></em>
 .</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -3816,7 +3799,7 @@
  in <em class="parameter"><code>msg</code></em>
 .</p>
 <div class="refsect3">
-<a name="id-1.2.11.3.7.74.5"></a><h4>Parameters</h4>
+<a name="id-1.2.11.3.7.75.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -3838,9 +3821,8 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.11.3.7.74.6"></a><h4>Returns</h4>
+<a name="id-1.2.11.3.7.75.6"></a><h4>Returns</h4>
 <p> a <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPMedia" title="GstSDPMedia"><span class="type">GstSDPMedia</span></a>.</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -3857,7 +3839,7 @@
  will have to be reinitialized with
 <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-media-init" title="gst_sdp_media_init ()"><code class="function">gst_sdp_media_init()</code></a> before it can be used again.</p>
 <div class="refsect3">
-<a name="id-1.2.11.3.7.75.5"></a><h4>Parameters</h4>
+<a name="id-1.2.11.3.7.76.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -3879,9 +3861,8 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.11.3.7.75.6"></a><h4>Returns</h4>
+<a name="id-1.2.11.3.7.76.6"></a><h4>Returns</h4>
 <p> a <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPResult" title="enum GstSDPResult"><span class="type">GstSDPResult</span></a>.</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -3892,7 +3873,7 @@
 <p>Dump the parsed contents of <em class="parameter"><code>msg</code></em>
  to stdout.</p>
 <div class="refsect3">
-<a name="id-1.2.11.3.7.76.5"></a><h4>Parameters</h4>
+<a name="id-1.2.11.3.7.77.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -3907,9 +3888,8 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.11.3.7.76.6"></a><h4>Returns</h4>
+<a name="id-1.2.11.3.7.77.6"></a><h4>Returns</h4>
 <p> a <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPResult" title="enum GstSDPResult"><span class="type">GstSDPResult</span></a>.</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -3920,7 +3900,7 @@
 <p>Allocate a new GstSDPMedia and store the result in <em class="parameter"><code>media</code></em>
 .</p>
 <div class="refsect3">
-<a name="id-1.2.11.3.7.77.5"></a><h4>Parameters</h4>
+<a name="id-1.2.11.3.7.78.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -3935,13 +3915,51 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.11.3.7.77.6"></a><h4>Returns</h4>
+<a name="id-1.2.11.3.7.78.6"></a><h4>Returns</h4>
 <p> a <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPResult" title="enum GstSDPResult"><span class="type">GstSDPResult</span></a>.</p>
-<p></p>
 </div>
 </div>
 <hr>
 <div class="refsect2">
+<a name="gst-sdp-media-copy"></a><h3>gst_sdp_media_copy ()</h3>
+<pre class="programlisting"><a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPResult" title="enum GstSDPResult"><span class="returnvalue">GstSDPResult</span></a>
+gst_sdp_media_copy (<em class="parameter"><code>const <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPMedia" title="GstSDPMedia"><span class="type">GstSDPMedia</span></a> *media</code></em>,
+                    <em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPMedia" title="GstSDPMedia"><span class="type">GstSDPMedia</span></a> **copy</code></em>);</pre>
+<p>Allocate a new copy of <em class="parameter"><code>media</code></em>
+ and store the result in <em class="parameter"><code>copy</code></em>
+. The value in
+<em class="parameter"><code>copy</code></em>
+ should be release with gst_sdp_media_free function.</p>
+<div class="refsect3">
+<a name="id-1.2.11.3.7.79.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>media</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPMedia" title="GstSDPMedia"><span class="type">GstSDPMedia</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>copy</p></td>
+<td class="parameter_description"><p> pointer to new <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPMedia" title="GstSDPMedia"><span class="type">GstSDPMedia</span></a>. </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="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="id-1.2.11.3.7.79.6"></a><h4>Returns</h4>
+<p> a <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPResult" title="enum GstSDPResult"><span class="type">GstSDPResult</span></a></p>
+</div>
+<p class="since">Since: 1.2</p>
+</div>
+<hr>
+<div class="refsect2">
 <a name="gst-sdp-media-init"></a><h3>gst_sdp_media_init ()</h3>
 <pre class="programlisting"><a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPResult" title="enum GstSDPResult"><span class="returnvalue">GstSDPResult</span></a>
 gst_sdp_media_init (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPMedia" title="GstSDPMedia"><span class="type">GstSDPMedia</span></a> *media</code></em>);</pre>
@@ -3952,7 +3970,7 @@
 <p>When this function is invoked on newly allocated data (with malloc or on the
 stack), its contents should be set to 0 before calling this function.</p>
 <div class="refsect3">
-<a name="id-1.2.11.3.7.78.6"></a><h4>Parameters</h4>
+<a name="id-1.2.11.3.7.80.6"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -3967,9 +3985,8 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.11.3.7.78.7"></a><h4>Returns</h4>
+<a name="id-1.2.11.3.7.80.7"></a><h4>Returns</h4>
 <p> a <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPResult" title="enum GstSDPResult"><span class="type">GstSDPResult</span></a>.</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -3984,66 +4001,6 @@
  was allocated on the
 stack and initialized with <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-media-init" title="gst_sdp_media_init ()"><code class="function">gst_sdp_media_init()</code></a>.</p>
 <div class="refsect3">
-<a name="id-1.2.11.3.7.79.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>media</p></td>
-<td class="parameter_description"><p>a <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPMedia" title="GstSDPMedia"><span class="type">GstSDPMedia</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
-</table></div>
-</div>
-<div class="refsect3">
-<a name="id-1.2.11.3.7.79.6"></a><h4>Returns</h4>
-<p> a <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPResult" title="enum GstSDPResult"><span class="type">GstSDPResult</span></a>.</p>
-<p></p>
-</div>
-</div>
-<hr>
-<div class="refsect2">
-<a name="gst-sdp-media-free"></a><h3>gst_sdp_media_free ()</h3>
-<pre class="programlisting"><a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPResult" title="enum GstSDPResult"><span class="returnvalue">GstSDPResult</span></a>
-gst_sdp_media_free (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPMedia" title="GstSDPMedia"><span class="type">GstSDPMedia</span></a> *media</code></em>);</pre>
-<p>Free all resources allocated by <em class="parameter"><code>media</code></em>
-. <em class="parameter"><code>media</code></em>
- should not be used anymore after
-this function. This function should be used when <em class="parameter"><code>media</code></em>
- was dynamically
-allocated with <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-media-new" title="gst_sdp_media_new ()"><code class="function">gst_sdp_media_new()</code></a>.</p>
-<div class="refsect3">
-<a name="id-1.2.11.3.7.80.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>media</p></td>
-<td class="parameter_description"><p>a <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPMedia" title="GstSDPMedia"><span class="type">GstSDPMedia</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
-</table></div>
-</div>
-<div class="refsect3">
-<a name="id-1.2.11.3.7.80.6"></a><h4>Returns</h4>
-<p> a <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPResult" title="enum GstSDPResult"><span class="type">GstSDPResult</span></a>.</p>
-<p></p>
-</div>
-</div>
-<hr>
-<div class="refsect2">
-<a name="gst-sdp-media-as-text"></a><h3>gst_sdp_media_as_text ()</h3>
-<pre class="programlisting"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> *
-gst_sdp_media_as_text (<em class="parameter"><code>const <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPMedia" title="GstSDPMedia"><span class="type">GstSDPMedia</span></a> *media</code></em>);</pre>
-<p>Convert the contents of <em class="parameter"><code>media</code></em>
- to a text string.</p>
-<div class="refsect3">
 <a name="id-1.2.11.3.7.81.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
@@ -4060,17 +4017,20 @@
 </div>
 <div class="refsect3">
 <a name="id-1.2.11.3.7.81.6"></a><h4>Returns</h4>
-<p> A dynamically allocated string representing the media.</p>
-<p></p>
+<p> a <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPResult" title="enum GstSDPResult"><span class="type">GstSDPResult</span></a>.</p>
 </div>
 </div>
 <hr>
 <div class="refsect2">
-<a name="gst-sdp-media-get-media"></a><h3>gst_sdp_media_get_media ()</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_sdp_media_get_media (<em class="parameter"><code>const <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPMedia" title="GstSDPMedia"><span class="type">GstSDPMedia</span></a> *media</code></em>);</pre>
-<p>Get the media description of <em class="parameter"><code>media</code></em>
-.</p>
+<a name="gst-sdp-media-free"></a><h3>gst_sdp_media_free ()</h3>
+<pre class="programlisting"><a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPResult" title="enum GstSDPResult"><span class="returnvalue">GstSDPResult</span></a>
+gst_sdp_media_free (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPMedia" title="GstSDPMedia"><span class="type">GstSDPMedia</span></a> *media</code></em>);</pre>
+<p>Free all resources allocated by <em class="parameter"><code>media</code></em>
+. <em class="parameter"><code>media</code></em>
+ should not be used anymore after
+this function. This function should be used when <em class="parameter"><code>media</code></em>
+ was dynamically
+allocated with <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-media-new" title="gst_sdp_media_new ()"><code class="function">gst_sdp_media_new()</code></a>.</p>
 <div class="refsect3">
 <a name="id-1.2.11.3.7.82.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
@@ -4088,8 +4048,61 @@
 </div>
 <div class="refsect3">
 <a name="id-1.2.11.3.7.82.6"></a><h4>Returns</h4>
+<p> a <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPResult" title="enum GstSDPResult"><span class="type">GstSDPResult</span></a>.</p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-sdp-media-as-text"></a><h3>gst_sdp_media_as_text ()</h3>
+<pre class="programlisting"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> *
+gst_sdp_media_as_text (<em class="parameter"><code>const <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPMedia" title="GstSDPMedia"><span class="type">GstSDPMedia</span></a> *media</code></em>);</pre>
+<p>Convert the contents of <em class="parameter"><code>media</code></em>
+ to a text string.</p>
+<div class="refsect3">
+<a name="id-1.2.11.3.7.83.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>media</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPMedia" title="GstSDPMedia"><span class="type">GstSDPMedia</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="id-1.2.11.3.7.83.6"></a><h4>Returns</h4>
+<p> A dynamically allocated string representing the media.</p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-sdp-media-get-media"></a><h3>gst_sdp_media_get_media ()</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_sdp_media_get_media (<em class="parameter"><code>const <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPMedia" title="GstSDPMedia"><span class="type">GstSDPMedia</span></a> *media</code></em>);</pre>
+<p>Get the media description of <em class="parameter"><code>media</code></em>
+.</p>
+<div class="refsect3">
+<a name="id-1.2.11.3.7.84.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>media</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPMedia" title="GstSDPMedia"><span class="type">GstSDPMedia</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="id-1.2.11.3.7.84.6"></a><h4>Returns</h4>
 <p> the media description.</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -4102,7 +4115,7 @@
  to <em class="parameter"><code>med</code></em>
 .</p>
 <div class="refsect3">
-<a name="id-1.2.11.3.7.83.5"></a><h4>Parameters</h4>
+<a name="id-1.2.11.3.7.85.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -4124,9 +4137,8 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.11.3.7.83.6"></a><h4>Returns</h4>
+<a name="id-1.2.11.3.7.85.6"></a><h4>Returns</h4>
 <p> <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GST-SDP-OK:CAPS"><span class="type">GST_SDP_OK</span></a>.</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -4137,7 +4149,7 @@
 <p>Get the port number for <em class="parameter"><code>media</code></em>
 .</p>
 <div class="refsect3">
-<a name="id-1.2.11.3.7.84.5"></a><h4>Parameters</h4>
+<a name="id-1.2.11.3.7.86.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -4152,10 +4164,9 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.11.3.7.84.6"></a><h4>Returns</h4>
+<a name="id-1.2.11.3.7.86.6"></a><h4>Returns</h4>
 <p> the port number of <em class="parameter"><code>media</code></em>
 .</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -4166,7 +4177,7 @@
 <p>Get the number of ports for <em class="parameter"><code>media</code></em>
 .</p>
 <div class="refsect3">
-<a name="id-1.2.11.3.7.85.5"></a><h4>Parameters</h4>
+<a name="id-1.2.11.3.7.87.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -4181,10 +4192,9 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.11.3.7.85.6"></a><h4>Returns</h4>
+<a name="id-1.2.11.3.7.87.6"></a><h4>Returns</h4>
 <p> the number of ports for <em class="parameter"><code>media</code></em>
 .</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -4197,7 +4207,7 @@
 <p>Set the port information in <em class="parameter"><code>media</code></em>
 .</p>
 <div class="refsect3">
-<a name="id-1.2.11.3.7.86.5"></a><h4>Parameters</h4>
+<a name="id-1.2.11.3.7.88.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -4224,9 +4234,8 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.11.3.7.86.6"></a><h4>Returns</h4>
+<a name="id-1.2.11.3.7.88.6"></a><h4>Returns</h4>
 <p> <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GST-SDP-OK:CAPS"><span class="type">GST_SDP_OK</span></a>.</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -4237,7 +4246,7 @@
 <p>Get the transport protocol of <em class="parameter"><code>media</code></em>
 </p>
 <div class="refsect3">
-<a name="id-1.2.11.3.7.87.5"></a><h4>Parameters</h4>
+<a name="id-1.2.11.3.7.89.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -4252,10 +4261,9 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.11.3.7.87.6"></a><h4>Returns</h4>
+<a name="id-1.2.11.3.7.89.6"></a><h4>Returns</h4>
 <p> the transport protocol of <em class="parameter"><code>media</code></em>
 .</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -4268,7 +4276,7 @@
  to <em class="parameter"><code>proto</code></em>
 .</p>
 <div class="refsect3">
-<a name="id-1.2.11.3.7.88.5"></a><h4>Parameters</h4>
+<a name="id-1.2.11.3.7.90.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -4290,9 +4298,8 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.11.3.7.88.6"></a><h4>Returns</h4>
+<a name="id-1.2.11.3.7.90.6"></a><h4>Returns</h4>
 <p> <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GST-SDP-OK:CAPS"><span class="type">GST_SDP_OK</span></a>.</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -4303,7 +4310,7 @@
 <p>Get the number of formats in <em class="parameter"><code>media</code></em>
 .</p>
 <div class="refsect3">
-<a name="id-1.2.11.3.7.89.5"></a><h4>Parameters</h4>
+<a name="id-1.2.11.3.7.91.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -4318,10 +4325,9 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.11.3.7.89.6"></a><h4>Returns</h4>
+<a name="id-1.2.11.3.7.91.6"></a><h4>Returns</h4>
 <p> the number of formats in <em class="parameter"><code>media</code></em>
 .</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -4334,92 +4340,6 @@
  in <em class="parameter"><code>media</code></em>
 .</p>
 <div class="refsect3">
-<a name="id-1.2.11.3.7.90.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>media</p></td>
-<td class="parameter_description"><p>a <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPMedia" title="GstSDPMedia"><span class="type">GstSDPMedia</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr>
-<tr>
-<td class="parameter_name"><p>idx</p></td>
-<td class="parameter_description"><p>an index</p></td>
-<td class="parameter_annotations"> </td>
-</tr>
-</tbody>
-</table></div>
-</div>
-<div class="refsect3">
-<a name="id-1.2.11.3.7.90.6"></a><h4>Returns</h4>
-<p> the format at position <em class="parameter"><code>idx</code></em>
-.</p>
-<p></p>
-</div>
-</div>
-<hr>
-<div class="refsect2">
-<a name="gst-sdp-media-insert-format"></a><h3>gst_sdp_media_insert_format ()</h3>
-<pre class="programlisting"><a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPResult" title="enum GstSDPResult"><span class="returnvalue">GstSDPResult</span></a>
-gst_sdp_media_insert_format (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPMedia" title="GstSDPMedia"><span class="type">GstSDPMedia</span></a> *media</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> idx</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>);</pre>
-<p>Insert the format information to <em class="parameter"><code>media</code></em>
- at <em class="parameter"><code>idx</code></em>
-. When <em class="parameter"><code>idx</code></em>
- is -1,
-the format is appended.</p>
-<div class="refsect3">
-<a name="id-1.2.11.3.7.91.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>media</p></td>
-<td class="parameter_description"><p>a <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPMedia" title="GstSDPMedia"><span class="type">GstSDPMedia</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr>
-<tr>
-<td class="parameter_name"><p>idx</p></td>
-<td class="parameter_description"><p>an index</p></td>
-<td class="parameter_annotations"> </td>
-</tr>
-<tr>
-<td class="parameter_name"><p>format</p></td>
-<td class="parameter_description"><p>the format</p></td>
-<td class="parameter_annotations"> </td>
-</tr>
-</tbody>
-</table></div>
-</div>
-<div class="refsect3">
-<a name="id-1.2.11.3.7.91.6"></a><h4>Returns</h4>
-<p> <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GST-SDP-OK:CAPS"><span class="type">GST_SDP_OK</span></a>.</p>
-<p></p>
-</div>
-<p class="since">Since 1.2</p>
-</div>
-<hr>
-<div class="refsect2">
-<a name="gst-sdp-media-replace-format"></a><h3>gst_sdp_media_replace_format ()</h3>
-<pre class="programlisting"><a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPResult" title="enum GstSDPResult"><span class="returnvalue">GstSDPResult</span></a>
-gst_sdp_media_replace_format (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPMedia" title="GstSDPMedia"><span class="type">GstSDPMedia</span></a> *media</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> idx</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>);</pre>
-<p>Replace the format information in <em class="parameter"><code>media</code></em>
- at <em class="parameter"><code>idx</code></em>
- with <em class="parameter"><code>format</code></em>
-.</p>
-<div class="refsect3">
 <a name="id-1.2.11.3.7.92.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
@@ -4438,6 +4358,46 @@
 <td class="parameter_description"><p>an index</p></td>
 <td class="parameter_annotations"> </td>
 </tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="id-1.2.11.3.7.92.6"></a><h4>Returns</h4>
+<p> the format at position <em class="parameter"><code>idx</code></em>
+.</p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-sdp-media-insert-format"></a><h3>gst_sdp_media_insert_format ()</h3>
+<pre class="programlisting"><a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPResult" title="enum GstSDPResult"><span class="returnvalue">GstSDPResult</span></a>
+gst_sdp_media_insert_format (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPMedia" title="GstSDPMedia"><span class="type">GstSDPMedia</span></a> *media</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> idx</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>);</pre>
+<p>Insert the format information to <em class="parameter"><code>media</code></em>
+ at <em class="parameter"><code>idx</code></em>
+. When <em class="parameter"><code>idx</code></em>
+ is -1,
+the format is appended.</p>
+<div class="refsect3">
+<a name="id-1.2.11.3.7.93.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>media</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPMedia" title="GstSDPMedia"><span class="type">GstSDPMedia</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>idx</p></td>
+<td class="parameter_description"><p>an index</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
 <tr>
 <td class="parameter_name"><p>format</p></td>
 <td class="parameter_description"><p>the format</p></td>
@@ -4447,11 +4407,54 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.11.3.7.92.6"></a><h4>Returns</h4>
+<a name="id-1.2.11.3.7.93.6"></a><h4>Returns</h4>
 <p> <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GST-SDP-OK:CAPS"><span class="type">GST_SDP_OK</span></a>.</p>
-<p></p>
 </div>
-<p class="since">Since 1.2</p>
+<p class="since">Since: 1.2</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-sdp-media-replace-format"></a><h3>gst_sdp_media_replace_format ()</h3>
+<pre class="programlisting"><a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPResult" title="enum GstSDPResult"><span class="returnvalue">GstSDPResult</span></a>
+gst_sdp_media_replace_format (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPMedia" title="GstSDPMedia"><span class="type">GstSDPMedia</span></a> *media</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> idx</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>);</pre>
+<p>Replace the format information in <em class="parameter"><code>media</code></em>
+ at <em class="parameter"><code>idx</code></em>
+ with <em class="parameter"><code>format</code></em>
+.</p>
+<div class="refsect3">
+<a name="id-1.2.11.3.7.94.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>media</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPMedia" title="GstSDPMedia"><span class="type">GstSDPMedia</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>idx</p></td>
+<td class="parameter_description"><p>an index</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>format</p></td>
+<td class="parameter_description"><p>the format</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="id-1.2.11.3.7.94.6"></a><h4>Returns</h4>
+<p> <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GST-SDP-OK:CAPS"><span class="type">GST_SDP_OK</span></a>.</p>
+</div>
+<p class="since">Since: 1.2</p>
 </div>
 <hr>
 <div class="refsect2">
@@ -4463,7 +4466,7 @@
  at <em class="parameter"><code>idx</code></em>
 .</p>
 <div class="refsect3">
-<a name="id-1.2.11.3.7.93.5"></a><h4>Parameters</h4>
+<a name="id-1.2.11.3.7.95.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -4485,11 +4488,10 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.11.3.7.93.6"></a><h4>Returns</h4>
+<a name="id-1.2.11.3.7.95.6"></a><h4>Returns</h4>
 <p> <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GST-SDP-OK:CAPS"><span class="type">GST_SDP_OK</span></a>.</p>
-<p></p>
 </div>
-<p class="since">Since 1.2</p>
+<p class="since">Since: 1.2</p>
 </div>
 <hr>
 <div class="refsect2">
@@ -4500,7 +4502,7 @@
 <p>Add the format information to <em class="parameter"><code>media</code></em>
 .</p>
 <div class="refsect3">
-<a name="id-1.2.11.3.7.94.5"></a><h4>Parameters</h4>
+<a name="id-1.2.11.3.7.96.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -4522,9 +4524,8 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.11.3.7.94.6"></a><h4>Returns</h4>
+<a name="id-1.2.11.3.7.96.6"></a><h4>Returns</h4>
 <p> <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GST-SDP-OK:CAPS"><span class="type">GST_SDP_OK</span></a>.</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -4535,7 +4536,7 @@
 <p>Get the information of <em class="parameter"><code>media</code></em>
 </p>
 <div class="refsect3">
-<a name="id-1.2.11.3.7.95.5"></a><h4>Parameters</h4>
+<a name="id-1.2.11.3.7.97.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -4550,10 +4551,9 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.11.3.7.95.6"></a><h4>Returns</h4>
+<a name="id-1.2.11.3.7.97.6"></a><h4>Returns</h4>
 <p> the information of <em class="parameter"><code>media</code></em>
 .</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -4566,7 +4566,7 @@
  to <em class="parameter"><code>information</code></em>
 .</p>
 <div class="refsect3">
-<a name="id-1.2.11.3.7.96.5"></a><h4>Parameters</h4>
+<a name="id-1.2.11.3.7.98.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -4588,9 +4588,8 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.11.3.7.96.6"></a><h4>Returns</h4>
+<a name="id-1.2.11.3.7.98.6"></a><h4>Returns</h4>
 <p> <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GST-SDP-OK:CAPS"><span class="type">GST_SDP_OK</span></a>.</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -4601,7 +4600,7 @@
 <p>Get the number of connection fields in <em class="parameter"><code>media</code></em>
 .</p>
 <div class="refsect3">
-<a name="id-1.2.11.3.7.97.5"></a><h4>Parameters</h4>
+<a name="id-1.2.11.3.7.99.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -4616,10 +4615,9 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.11.3.7.97.6"></a><h4>Returns</h4>
+<a name="id-1.2.11.3.7.99.6"></a><h4>Returns</h4>
 <p> the number of connections in <em class="parameter"><code>media</code></em>
 .</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -4632,92 +4630,6 @@
  in <em class="parameter"><code>media</code></em>
 .</p>
 <div class="refsect3">
-<a name="id-1.2.11.3.7.98.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>media</p></td>
-<td class="parameter_description"><p>a <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPMedia" title="GstSDPMedia"><span class="type">GstSDPMedia</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr>
-<tr>
-<td class="parameter_name"><p>idx</p></td>
-<td class="parameter_description"><p>an index</p></td>
-<td class="parameter_annotations"> </td>
-</tr>
-</tbody>
-</table></div>
-</div>
-<div class="refsect3">
-<a name="id-1.2.11.3.7.98.6"></a><h4>Returns</h4>
-<p> the <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPConnection" title="GstSDPConnection"><span class="type">GstSDPConnection</span></a> at position <em class="parameter"><code>idx</code></em>
-.</p>
-<p></p>
-</div>
-</div>
-<hr>
-<div class="refsect2">
-<a name="gst-sdp-media-insert-connection"></a><h3>gst_sdp_media_insert_connection ()</h3>
-<pre class="programlisting"><a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPResult" title="enum GstSDPResult"><span class="returnvalue">GstSDPResult</span></a>
-gst_sdp_media_insert_connection (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPMedia" title="GstSDPMedia"><span class="type">GstSDPMedia</span></a> *media</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> idx</code></em>,
-                                 <em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPConnection" title="GstSDPConnection"><span class="type">GstSDPConnection</span></a> *conn</code></em>);</pre>
-<p>Insert the connection information to <em class="parameter"><code>media</code></em>
- at <em class="parameter"><code>idx</code></em>
-. When <em class="parameter"><code>idx</code></em>
- is -1,
-the connection is appended.</p>
-<div class="refsect3">
-<a name="id-1.2.11.3.7.99.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>media</p></td>
-<td class="parameter_description"><p>a <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPMedia" title="GstSDPMedia"><span class="type">GstSDPMedia</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr>
-<tr>
-<td class="parameter_name"><p>idx</p></td>
-<td class="parameter_description"><p>an index</p></td>
-<td class="parameter_annotations"> </td>
-</tr>
-<tr>
-<td class="parameter_name"><p>conn</p></td>
-<td class="parameter_description"><p>a <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPConnection" title="GstSDPConnection"><span class="type">GstSDPConnection</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr>
-</tbody>
-</table></div>
-</div>
-<div class="refsect3">
-<a name="id-1.2.11.3.7.99.6"></a><h4>Returns</h4>
-<p> <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GST-SDP-OK:CAPS"><span class="type">GST_SDP_OK</span></a>.</p>
-<p></p>
-</div>
-<p class="since">Since 1.2</p>
-</div>
-<hr>
-<div class="refsect2">
-<a name="gst-sdp-media-replace-connection"></a><h3>gst_sdp_media_replace_connection ()</h3>
-<pre class="programlisting"><a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPResult" title="enum GstSDPResult"><span class="returnvalue">GstSDPResult</span></a>
-gst_sdp_media_replace_connection (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPMedia" title="GstSDPMedia"><span class="type">GstSDPMedia</span></a> *media</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> idx</code></em>,
-                                  <em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPConnection" title="GstSDPConnection"><span class="type">GstSDPConnection</span></a> *conn</code></em>);</pre>
-<p>Replace the connection information in <em class="parameter"><code>media</code></em>
- at <em class="parameter"><code>idx</code></em>
- with <em class="parameter"><code>conn</code></em>
-.</p>
-<div class="refsect3">
 <a name="id-1.2.11.3.7.100.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
@@ -4736,6 +4648,46 @@
 <td class="parameter_description"><p>an index</p></td>
 <td class="parameter_annotations"> </td>
 </tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="id-1.2.11.3.7.100.6"></a><h4>Returns</h4>
+<p> the <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPConnection" title="GstSDPConnection"><span class="type">GstSDPConnection</span></a> at position <em class="parameter"><code>idx</code></em>
+.</p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-sdp-media-insert-connection"></a><h3>gst_sdp_media_insert_connection ()</h3>
+<pre class="programlisting"><a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPResult" title="enum GstSDPResult"><span class="returnvalue">GstSDPResult</span></a>
+gst_sdp_media_insert_connection (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPMedia" title="GstSDPMedia"><span class="type">GstSDPMedia</span></a> *media</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> idx</code></em>,
+                                 <em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPConnection" title="GstSDPConnection"><span class="type">GstSDPConnection</span></a> *conn</code></em>);</pre>
+<p>Insert the connection information to <em class="parameter"><code>media</code></em>
+ at <em class="parameter"><code>idx</code></em>
+. When <em class="parameter"><code>idx</code></em>
+ is -1,
+the connection is appended.</p>
+<div class="refsect3">
+<a name="id-1.2.11.3.7.101.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>media</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPMedia" title="GstSDPMedia"><span class="type">GstSDPMedia</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>idx</p></td>
+<td class="parameter_description"><p>an index</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
 <tr>
 <td class="parameter_name"><p>conn</p></td>
 <td class="parameter_description"><p>a <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPConnection" title="GstSDPConnection"><span class="type">GstSDPConnection</span></a></p></td>
@@ -4745,11 +4697,54 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.11.3.7.100.6"></a><h4>Returns</h4>
+<a name="id-1.2.11.3.7.101.6"></a><h4>Returns</h4>
 <p> <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GST-SDP-OK:CAPS"><span class="type">GST_SDP_OK</span></a>.</p>
-<p></p>
 </div>
-<p class="since">Since 1.2</p>
+<p class="since">Since: 1.2</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-sdp-media-replace-connection"></a><h3>gst_sdp_media_replace_connection ()</h3>
+<pre class="programlisting"><a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPResult" title="enum GstSDPResult"><span class="returnvalue">GstSDPResult</span></a>
+gst_sdp_media_replace_connection (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPMedia" title="GstSDPMedia"><span class="type">GstSDPMedia</span></a> *media</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> idx</code></em>,
+                                  <em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPConnection" title="GstSDPConnection"><span class="type">GstSDPConnection</span></a> *conn</code></em>);</pre>
+<p>Replace the connection information in <em class="parameter"><code>media</code></em>
+ at <em class="parameter"><code>idx</code></em>
+ with <em class="parameter"><code>conn</code></em>
+.</p>
+<div class="refsect3">
+<a name="id-1.2.11.3.7.102.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>media</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPMedia" title="GstSDPMedia"><span class="type">GstSDPMedia</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>idx</p></td>
+<td class="parameter_description"><p>an index</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>conn</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPConnection" title="GstSDPConnection"><span class="type">GstSDPConnection</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="id-1.2.11.3.7.102.6"></a><h4>Returns</h4>
+<p> <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GST-SDP-OK:CAPS"><span class="type">GST_SDP_OK</span></a>.</p>
+</div>
+<p class="since">Since: 1.2</p>
 </div>
 <hr>
 <div class="refsect2">
@@ -4761,7 +4756,7 @@
  at <em class="parameter"><code>idx</code></em>
 .</p>
 <div class="refsect3">
-<a name="id-1.2.11.3.7.101.5"></a><h4>Parameters</h4>
+<a name="id-1.2.11.3.7.103.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -4783,11 +4778,10 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.11.3.7.101.6"></a><h4>Returns</h4>
+<a name="id-1.2.11.3.7.103.6"></a><h4>Returns</h4>
 <p> <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GST-SDP-OK:CAPS"><span class="type">GST_SDP_OK</span></a>.</p>
-<p></p>
 </div>
-<p class="since">Since 1.2</p>
+<p class="since">Since: 1.2</p>
 </div>
 <hr>
 <div class="refsect2">
@@ -4802,7 +4796,7 @@
 <p>Add the given connection parameters to <em class="parameter"><code>media</code></em>
 .</p>
 <div class="refsect3">
-<a name="id-1.2.11.3.7.102.5"></a><h4>Parameters</h4>
+<a name="id-1.2.11.3.7.104.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -4845,9 +4839,8 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.11.3.7.102.6"></a><h4>Returns</h4>
+<a name="id-1.2.11.3.7.104.6"></a><h4>Returns</h4>
 <p> a <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPResult" title="enum GstSDPResult"><span class="type">GstSDPResult</span></a>.</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -4858,7 +4851,7 @@
 <p>Get the number of bandwidth fields in <em class="parameter"><code>media</code></em>
 .</p>
 <div class="refsect3">
-<a name="id-1.2.11.3.7.103.5"></a><h4>Parameters</h4>
+<a name="id-1.2.11.3.7.105.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -4873,10 +4866,9 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.11.3.7.103.6"></a><h4>Returns</h4>
+<a name="id-1.2.11.3.7.105.6"></a><h4>Returns</h4>
 <p> the number of bandwidths in <em class="parameter"><code>media</code></em>
 .</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -4889,92 +4881,6 @@
  in <em class="parameter"><code>media</code></em>
 .</p>
 <div class="refsect3">
-<a name="id-1.2.11.3.7.104.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>media</p></td>
-<td class="parameter_description"><p>a <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPMedia" title="GstSDPMedia"><span class="type">GstSDPMedia</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr>
-<tr>
-<td class="parameter_name"><p>idx</p></td>
-<td class="parameter_description"><p>an index</p></td>
-<td class="parameter_annotations"> </td>
-</tr>
-</tbody>
-</table></div>
-</div>
-<div class="refsect3">
-<a name="id-1.2.11.3.7.104.6"></a><h4>Returns</h4>
-<p> the <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPBandwidth" title="GstSDPBandwidth"><span class="type">GstSDPBandwidth</span></a> at position <em class="parameter"><code>idx</code></em>
-.</p>
-<p></p>
-</div>
-</div>
-<hr>
-<div class="refsect2">
-<a name="gst-sdp-media-insert-bandwidth"></a><h3>gst_sdp_media_insert_bandwidth ()</h3>
-<pre class="programlisting"><a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPResult" title="enum GstSDPResult"><span class="returnvalue">GstSDPResult</span></a>
-gst_sdp_media_insert_bandwidth (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPMedia" title="GstSDPMedia"><span class="type">GstSDPMedia</span></a> *media</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> idx</code></em>,
-                                <em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPBandwidth" title="GstSDPBandwidth"><span class="type">GstSDPBandwidth</span></a> *bw</code></em>);</pre>
-<p>Insert the bandwidth information to <em class="parameter"><code>media</code></em>
- at <em class="parameter"><code>idx</code></em>
-. When <em class="parameter"><code>idx</code></em>
- is -1,
-the bandwidth is appended.</p>
-<div class="refsect3">
-<a name="id-1.2.11.3.7.105.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>media</p></td>
-<td class="parameter_description"><p>a <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPMedia" title="GstSDPMedia"><span class="type">GstSDPMedia</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr>
-<tr>
-<td class="parameter_name"><p>idx</p></td>
-<td class="parameter_description"><p>an index</p></td>
-<td class="parameter_annotations"> </td>
-</tr>
-<tr>
-<td class="parameter_name"><p>bw</p></td>
-<td class="parameter_description"><p>a <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPBandwidth" title="GstSDPBandwidth"><span class="type">GstSDPBandwidth</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr>
-</tbody>
-</table></div>
-</div>
-<div class="refsect3">
-<a name="id-1.2.11.3.7.105.6"></a><h4>Returns</h4>
-<p> <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GST-SDP-OK:CAPS"><span class="type">GST_SDP_OK</span></a>.</p>
-<p></p>
-</div>
-<p class="since">Since 1.2</p>
-</div>
-<hr>
-<div class="refsect2">
-<a name="gst-sdp-media-replace-bandwidth"></a><h3>gst_sdp_media_replace_bandwidth ()</h3>
-<pre class="programlisting"><a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPResult" title="enum GstSDPResult"><span class="returnvalue">GstSDPResult</span></a>
-gst_sdp_media_replace_bandwidth (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPMedia" title="GstSDPMedia"><span class="type">GstSDPMedia</span></a> *media</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> idx</code></em>,
-                                 <em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPBandwidth" title="GstSDPBandwidth"><span class="type">GstSDPBandwidth</span></a> *bw</code></em>);</pre>
-<p>Replace the bandwidth information in <em class="parameter"><code>media</code></em>
- at <em class="parameter"><code>idx</code></em>
- with <em class="parameter"><code>bw</code></em>
-.</p>
-<div class="refsect3">
 <a name="id-1.2.11.3.7.106.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
@@ -4993,6 +4899,46 @@
 <td class="parameter_description"><p>an index</p></td>
 <td class="parameter_annotations"> </td>
 </tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="id-1.2.11.3.7.106.6"></a><h4>Returns</h4>
+<p> the <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPBandwidth" title="GstSDPBandwidth"><span class="type">GstSDPBandwidth</span></a> at position <em class="parameter"><code>idx</code></em>
+.</p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-sdp-media-insert-bandwidth"></a><h3>gst_sdp_media_insert_bandwidth ()</h3>
+<pre class="programlisting"><a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPResult" title="enum GstSDPResult"><span class="returnvalue">GstSDPResult</span></a>
+gst_sdp_media_insert_bandwidth (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPMedia" title="GstSDPMedia"><span class="type">GstSDPMedia</span></a> *media</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> idx</code></em>,
+                                <em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPBandwidth" title="GstSDPBandwidth"><span class="type">GstSDPBandwidth</span></a> *bw</code></em>);</pre>
+<p>Insert the bandwidth information to <em class="parameter"><code>media</code></em>
+ at <em class="parameter"><code>idx</code></em>
+. When <em class="parameter"><code>idx</code></em>
+ is -1,
+the bandwidth is appended.</p>
+<div class="refsect3">
+<a name="id-1.2.11.3.7.107.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>media</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPMedia" title="GstSDPMedia"><span class="type">GstSDPMedia</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>idx</p></td>
+<td class="parameter_description"><p>an index</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
 <tr>
 <td class="parameter_name"><p>bw</p></td>
 <td class="parameter_description"><p>a <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPBandwidth" title="GstSDPBandwidth"><span class="type">GstSDPBandwidth</span></a></p></td>
@@ -5002,11 +4948,54 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.11.3.7.106.6"></a><h4>Returns</h4>
+<a name="id-1.2.11.3.7.107.6"></a><h4>Returns</h4>
 <p> <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GST-SDP-OK:CAPS"><span class="type">GST_SDP_OK</span></a>.</p>
-<p></p>
 </div>
-<p class="since">Since 1.2</p>
+<p class="since">Since: 1.2</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-sdp-media-replace-bandwidth"></a><h3>gst_sdp_media_replace_bandwidth ()</h3>
+<pre class="programlisting"><a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPResult" title="enum GstSDPResult"><span class="returnvalue">GstSDPResult</span></a>
+gst_sdp_media_replace_bandwidth (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPMedia" title="GstSDPMedia"><span class="type">GstSDPMedia</span></a> *media</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> idx</code></em>,
+                                 <em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPBandwidth" title="GstSDPBandwidth"><span class="type">GstSDPBandwidth</span></a> *bw</code></em>);</pre>
+<p>Replace the bandwidth information in <em class="parameter"><code>media</code></em>
+ at <em class="parameter"><code>idx</code></em>
+ with <em class="parameter"><code>bw</code></em>
+.</p>
+<div class="refsect3">
+<a name="id-1.2.11.3.7.108.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>media</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPMedia" title="GstSDPMedia"><span class="type">GstSDPMedia</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>idx</p></td>
+<td class="parameter_description"><p>an index</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>bw</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPBandwidth" title="GstSDPBandwidth"><span class="type">GstSDPBandwidth</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="id-1.2.11.3.7.108.6"></a><h4>Returns</h4>
+<p> <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GST-SDP-OK:CAPS"><span class="type">GST_SDP_OK</span></a>.</p>
+</div>
+<p class="since">Since: 1.2</p>
 </div>
 <hr>
 <div class="refsect2">
@@ -5018,7 +5007,7 @@
  at <em class="parameter"><code>idx</code></em>
 .</p>
 <div class="refsect3">
-<a name="id-1.2.11.3.7.107.5"></a><h4>Parameters</h4>
+<a name="id-1.2.11.3.7.109.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -5040,11 +5029,10 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.11.3.7.107.6"></a><h4>Returns</h4>
+<a name="id-1.2.11.3.7.109.6"></a><h4>Returns</h4>
 <p> <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GST-SDP-OK:CAPS"><span class="type">GST_SDP_OK</span></a>.</p>
-<p></p>
 </div>
-<p class="since">Since 1.2</p>
+<p class="since">Since: 1.2</p>
 </div>
 <hr>
 <div class="refsect2">
@@ -5058,7 +5046,7 @@
  to <em class="parameter"><code>media</code></em>
 .</p>
 <div class="refsect3">
-<a name="id-1.2.11.3.7.108.5"></a><h4>Parameters</h4>
+<a name="id-1.2.11.3.7.110.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -5085,9 +5073,8 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.11.3.7.108.6"></a><h4>Returns</h4>
+<a name="id-1.2.11.3.7.110.6"></a><h4>Returns</h4>
 <p> <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GST-SDP-OK:CAPS"><span class="type">GST_SDP_OK</span></a>.</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -5098,7 +5085,7 @@
 <p>Get the encryption information from <em class="parameter"><code>media</code></em>
 .</p>
 <div class="refsect3">
-<a name="id-1.2.11.3.7.109.5"></a><h4>Parameters</h4>
+<a name="id-1.2.11.3.7.111.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -5113,9 +5100,8 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.11.3.7.109.6"></a><h4>Returns</h4>
+<a name="id-1.2.11.3.7.111.6"></a><h4>Returns</h4>
 <p> a <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPKey" title="GstSDPKey"><span class="type">GstSDPKey</span></a>.</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -5128,7 +5114,7 @@
 <p>Adds the encryption information to <em class="parameter"><code>media</code></em>
 .</p>
 <div class="refsect3">
-<a name="id-1.2.11.3.7.110.5"></a><h4>Parameters</h4>
+<a name="id-1.2.11.3.7.112.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -5155,9 +5141,8 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.11.3.7.110.6"></a><h4>Returns</h4>
+<a name="id-1.2.11.3.7.112.6"></a><h4>Returns</h4>
 <p> a <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPResult" title="enum GstSDPResult"><span class="type">GstSDPResult</span></a>.</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -5168,7 +5153,7 @@
 <p>Get the number of attribute fields in <em class="parameter"><code>media</code></em>
 .</p>
 <div class="refsect3">
-<a name="id-1.2.11.3.7.111.5"></a><h4>Parameters</h4>
+<a name="id-1.2.11.3.7.113.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -5183,10 +5168,9 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.11.3.7.111.6"></a><h4>Returns</h4>
+<a name="id-1.2.11.3.7.113.6"></a><h4>Returns</h4>
 <p> the number of attributes in <em class="parameter"><code>media</code></em>
 .</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -5199,7 +5183,7 @@
  in <em class="parameter"><code>media</code></em>
 .</p>
 <div class="refsect3">
-<a name="id-1.2.11.3.7.112.5"></a><h4>Parameters</h4>
+<a name="id-1.2.11.3.7.114.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -5221,10 +5205,9 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.11.3.7.112.6"></a><h4>Returns</h4>
+<a name="id-1.2.11.3.7.114.6"></a><h4>Returns</h4>
 <p> the <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPAttribute" title="GstSDPAttribute"><span class="type">GstSDPAttribute</span></a> at position <em class="parameter"><code>idx</code></em>
 .</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -5237,7 +5220,7 @@
  in <em class="parameter"><code>media</code></em>
 .</p>
 <div class="refsect3">
-<a name="id-1.2.11.3.7.113.5"></a><h4>Parameters</h4>
+<a name="id-1.2.11.3.7.115.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -5259,10 +5242,9 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.11.3.7.113.6"></a><h4>Returns</h4>
+<a name="id-1.2.11.3.7.115.6"></a><h4>Returns</h4>
 <p> the first attribute value for <em class="parameter"><code>key</code></em>
 .</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -5277,7 +5259,7 @@
  in <em class="parameter"><code>media</code></em>
 .</p>
 <div class="refsect3">
-<a name="id-1.2.11.3.7.114.5"></a><h4>Parameters</h4>
+<a name="id-1.2.11.3.7.116.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -5304,10 +5286,9 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.11.3.7.114.6"></a><h4>Returns</h4>
+<a name="id-1.2.11.3.7.116.6"></a><h4>Returns</h4>
 <p> the <em class="parameter"><code>nth</code></em>
 attribute value.</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -5323,94 +5304,6 @@
  is -1,
 the attribute is appended.</p>
 <div class="refsect3">
-<a name="id-1.2.11.3.7.115.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>media</p></td>
-<td class="parameter_description"><p>a <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPMedia" title="GstSDPMedia"><span class="type">GstSDPMedia</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr>
-<tr>
-<td class="parameter_name"><p>idx</p></td>
-<td class="parameter_description"><p>an index</p></td>
-<td class="parameter_annotations"> </td>
-</tr>
-<tr>
-<td class="parameter_name"><p>attr</p></td>
-<td class="parameter_description"><p>a <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPAttribute" title="GstSDPAttribute"><span class="type">GstSDPAttribute</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr>
-</tbody>
-</table></div>
-</div>
-<div class="refsect3">
-<a name="id-1.2.11.3.7.115.6"></a><h4>Returns</h4>
-<p> <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GST-SDP-OK:CAPS"><span class="type">GST_SDP_OK</span></a>.</p>
-<p></p>
-</div>
-<p class="since">Since 1.2</p>
-</div>
-<hr>
-<div class="refsect2">
-<a name="gst-sdp-media-replace-attribute"></a><h3>gst_sdp_media_replace_attribute ()</h3>
-<pre class="programlisting"><a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPResult" title="enum GstSDPResult"><span class="returnvalue">GstSDPResult</span></a>
-gst_sdp_media_replace_attribute (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPMedia" title="GstSDPMedia"><span class="type">GstSDPMedia</span></a> *media</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> idx</code></em>,
-                                 <em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPAttribute" title="GstSDPAttribute"><span class="type">GstSDPAttribute</span></a> *attr</code></em>);</pre>
-<p>Replace the attribute in <em class="parameter"><code>media</code></em>
- at <em class="parameter"><code>idx</code></em>
- with <em class="parameter"><code>attr</code></em>
-.</p>
-<div class="refsect3">
-<a name="id-1.2.11.3.7.116.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>media</p></td>
-<td class="parameter_description"><p>a <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPMedia" title="GstSDPMedia"><span class="type">GstSDPMedia</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr>
-<tr>
-<td class="parameter_name"><p>idx</p></td>
-<td class="parameter_description"><p>an index</p></td>
-<td class="parameter_annotations"> </td>
-</tr>
-<tr>
-<td class="parameter_name"><p>attr</p></td>
-<td class="parameter_description"><p>a <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPAttribute" title="GstSDPAttribute"><span class="type">GstSDPAttribute</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr>
-</tbody>
-</table></div>
-</div>
-<div class="refsect3">
-<a name="id-1.2.11.3.7.116.6"></a><h4>Returns</h4>
-<p> <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GST-SDP-OK:CAPS"><span class="type">GST_SDP_OK</span></a>.</p>
-<p></p>
-</div>
-<p class="since">Since 1.2</p>
-</div>
-<hr>
-<div class="refsect2">
-<a name="gst-sdp-media-remove-attribute"></a><h3>gst_sdp_media_remove_attribute ()</h3>
-<pre class="programlisting"><a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPResult" title="enum GstSDPResult"><span class="returnvalue">GstSDPResult</span></a>
-gst_sdp_media_remove_attribute (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPMedia" title="GstSDPMedia"><span class="type">GstSDPMedia</span></a> *media</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> idx</code></em>);</pre>
-<p>Remove the attribute in <em class="parameter"><code>media</code></em>
- at <em class="parameter"><code>idx</code></em>
-.</p>
-<div class="refsect3">
 <a name="id-1.2.11.3.7.117.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
@@ -5429,15 +5322,100 @@
 <td class="parameter_description"><p>an index</p></td>
 <td class="parameter_annotations"> </td>
 </tr>
+<tr>
+<td class="parameter_name"><p>attr</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPAttribute" title="GstSDPAttribute"><span class="type">GstSDPAttribute</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
 </tbody>
 </table></div>
 </div>
 <div class="refsect3">
 <a name="id-1.2.11.3.7.117.6"></a><h4>Returns</h4>
 <p> <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GST-SDP-OK:CAPS"><span class="type">GST_SDP_OK</span></a>.</p>
-<p></p>
 </div>
-<p class="since">Since 1.2</p>
+<p class="since">Since: 1.2</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-sdp-media-replace-attribute"></a><h3>gst_sdp_media_replace_attribute ()</h3>
+<pre class="programlisting"><a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPResult" title="enum GstSDPResult"><span class="returnvalue">GstSDPResult</span></a>
+gst_sdp_media_replace_attribute (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPMedia" title="GstSDPMedia"><span class="type">GstSDPMedia</span></a> *media</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> idx</code></em>,
+                                 <em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPAttribute" title="GstSDPAttribute"><span class="type">GstSDPAttribute</span></a> *attr</code></em>);</pre>
+<p>Replace the attribute in <em class="parameter"><code>media</code></em>
+ at <em class="parameter"><code>idx</code></em>
+ with <em class="parameter"><code>attr</code></em>
+.</p>
+<div class="refsect3">
+<a name="id-1.2.11.3.7.118.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>media</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPMedia" title="GstSDPMedia"><span class="type">GstSDPMedia</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>idx</p></td>
+<td class="parameter_description"><p>an index</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>attr</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPAttribute" title="GstSDPAttribute"><span class="type">GstSDPAttribute</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="id-1.2.11.3.7.118.6"></a><h4>Returns</h4>
+<p> <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GST-SDP-OK:CAPS"><span class="type">GST_SDP_OK</span></a>.</p>
+</div>
+<p class="since">Since: 1.2</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-sdp-media-remove-attribute"></a><h3>gst_sdp_media_remove_attribute ()</h3>
+<pre class="programlisting"><a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPResult" title="enum GstSDPResult"><span class="returnvalue">GstSDPResult</span></a>
+gst_sdp_media_remove_attribute (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPMedia" title="GstSDPMedia"><span class="type">GstSDPMedia</span></a> *media</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> idx</code></em>);</pre>
+<p>Remove the attribute in <em class="parameter"><code>media</code></em>
+ at <em class="parameter"><code>idx</code></em>
+.</p>
+<div class="refsect3">
+<a name="id-1.2.11.3.7.119.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>media</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GstSDPMedia" title="GstSDPMedia"><span class="type">GstSDPMedia</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>idx</p></td>
+<td class="parameter_description"><p>an index</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="id-1.2.11.3.7.119.6"></a><h4>Returns</h4>
+<p> <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GST-SDP-OK:CAPS"><span class="type">GST_SDP_OK</span></a>.</p>
+</div>
+<p class="since">Since: 1.2</p>
 </div>
 <hr>
 <div class="refsect2">
@@ -5451,7 +5429,7 @@
  to <em class="parameter"><code>media</code></em>
 .</p>
 <div class="refsect3">
-<a name="id-1.2.11.3.7.118.5"></a><h4>Parameters</h4>
+<a name="id-1.2.11.3.7.120.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -5478,9 +5456,8 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.11.3.7.118.6"></a><h4>Returns</h4>
+<a name="id-1.2.11.3.7.120.6"></a><h4>Returns</h4>
 <p> <a class="link" href="gst-plugins-base-libs-gstsdpmessage.html#GST-SDP-OK:CAPS"><span class="type">GST_SDP_OK</span></a>.</p>
-<p></p>
 </div>
 </div>
 </div>
@@ -6039,7 +6016,6 @@
 </div>
 </div>
 <div class="footer">
-<hr>
-          Generated by GTK-Doc V1.21</div>
+<hr>Generated by GTK-Doc V1.24</div>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/libs/html/gst-plugins-base-libs-gststreamvolume.html b/docs/libs/html/gst-plugins-base-libs-gststreamvolume.html
index 9cd7b33..4e73b99 100644
--- a/docs/libs/html/gst-plugins-base-libs-gststreamvolume.html
+++ b/docs/libs/html/gst-plugins-base-libs-gststreamvolume.html
@@ -2,13 +2,13 @@
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>GStreamer Base Plugins 1.0 Library Reference Manual: gststreamvolume</title>
+<title>gststreamvolume: GStreamer Base 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 Base Plugins 1.0 Library Reference Manual">
 <link rel="up" href="gstreamer-audio.html" title="Audio Library">
 <link rel="prev" href="gst-plugins-base-libs-gstaudioiec61937.html" title="gstaudioiec61937">
 <link rel="next" href="gstreamer-ffft.html" title="FFT Library">
-<meta name="generator" content="GTK-Doc V1.21 (XML mode)">
+<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">
@@ -200,7 +200,6 @@
 <div class="refsect3">
 <a name="id-1.2.6.17.11.2.5"></a><h4>Returns</h4>
 <p> The current stream volume as linear factor</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -262,7 +261,6 @@
 <div class="refsect3">
 <a name="id-1.2.6.17.11.4.5"></a><h4>Returns</h4>
 <p> Returns <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the stream is muted</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -332,7 +330,6 @@
 <div class="refsect3">
 <a name="id-1.2.6.17.11.6.5"></a><h4>Returns</h4>
 <p> the converted volume</p>
-<p></p>
 </div>
 </div>
 </div>
@@ -405,7 +402,6 @@
 </div>
 </div>
 <div class="footer">
-<hr>
-          Generated by GTK-Doc V1.21</div>
+<hr>Generated by GTK-Doc V1.24</div>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/libs/html/gst-plugins-base-libs-gsttag.html b/docs/libs/html/gst-plugins-base-libs-gsttag.html
index 35784b0..4c70e13 100644
--- a/docs/libs/html/gst-plugins-base-libs-gsttag.html
+++ b/docs/libs/html/gst-plugins-base-libs-gsttag.html
@@ -2,13 +2,13 @@
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>GStreamer Base Plugins 1.0 Library Reference Manual: gsttag</title>
+<title>gsttag: GStreamer Base 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 Base Plugins 1.0 Library Reference Manual">
 <link rel="up" href="gstreamer-tag.html" title="Tag Support Library">
 <link rel="prev" href="gstreamer-tag.html" title="Tag Support Library">
 <link rel="next" href="gst-plugins-base-libs-gsttagvorbis.html" title="gsttagvorbis">
-<meta name="generator" content="GTK-Doc V1.21 (XML mode)">
+<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">
@@ -63,6 +63,14 @@
 <a class="link" href="gst-plugins-base-libs-gsttag.html#gst-tag-parse-extended-comment" title="gst_tag_parse_extended_comment ()">gst_tag_parse_extended_comment</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-base-libs-gsttag.html#gst-tag-image-data-to-image-sample" title="gst_tag_image_data_to_image_sample ()">gst_tag_image_data_to_image_sample</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
 </tbody>
 </table></div>
 </div>
@@ -207,6 +215,10 @@
 <td class="function_name"><a class="link" href="gst-plugins-base-libs-gsttag.html#GST-TAG-ID3V2-HEADER-SIZE:CAPS" title="GST_TAG_ID3V2_HEADER_SIZE">GST_TAG_ID3V2_HEADER_SIZE</a></td>
 </tr>
 <tr>
+<td class="define_keyword">#define</td>
+<td class="function_name"><a class="link" href="gst-plugins-base-libs-gsttag.html#GST-TAG-MUSICAL-KEY:CAPS" title="GST_TAG_MUSICAL_KEY">GST_TAG_MUSICAL_KEY</a></td>
+</tr>
+<tr>
 <td class="datatype_keyword">enum</td>
 <td class="function_name"><a class="link" href="gst-plugins-base-libs-gsttag.html#GstTagImageType" title="enum GstTagImageType">GstTagImageType</a></td>
 </tr>
@@ -285,7 +297,6 @@
 <div class="refsect3">
 <a name="id-1.2.13.3.7.3.6"></a><h4>Returns</h4>
 <p> a newly-allocated string in UTF-8 encoding, or NULL</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -348,7 +359,67 @@
 <div class="refsect3">
 <a name="id-1.2.13.3.7.4.7"></a><h4>Returns</h4>
 <p> TRUE if the string could be parsed, otherwise FALSE</p>
-<p></p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-tag-image-data-to-image-sample"></a><h3>gst_tag_image_data_to_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_tag_image_data_to_image_sample (<em class="parameter"><code>const <span class="type">guint8</span> *image_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> image_data_len</code></em>,
+                                    <em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gsttag.html#GstTagImageType" title="enum GstTagImageType"><span class="type">GstTagImageType</span></a> image_type</code></em>);</pre>
+<p>Helper function for tag-reading plugins to create a <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstSample.html"><span class="type">GstSample</span></a> suitable to
+add to a <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstTagList.html"><span class="type">GstTagList</span></a> as an image tag (such as <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstTagList.html#GST-TAG-IMAGE:CAPS"><span class="type">GST_TAG_IMAGE</span></a> or
+<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstTagList.html#GST-TAG-PREVIEW-IMAGE:CAPS"><span class="type">GST_TAG_PREVIEW_IMAGE</span></a>) from the encoded image data and an (optional) image
+type.</p>
+<p>Background: cover art and other images in tags are usually stored as a
+blob of binary image data, often accompanied by a MIME type or some other
+content type string (e.g. 'png', 'jpeg', 'jpg'). Sometimes there is also an
+'image type' to indicate what kind of image this is (e.g. front cover,
+back cover, artist, etc.). The image data may also be an URI to the image
+rather than the image itself.</p>
+<p>In GStreamer, image tags are <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstSample.html"><span class="type">GstSample</span></a>s containing the raw image
+data, with the sample caps describing the content type of the image
+(e.g. image/jpeg, image/png, text/uri-list). The sample info may contain
+an additional 'image-type' field of <span class="type">GST_TYPE_TAG_IMAGE_TYPE</span> to describe
+the type of image (front cover, back cover etc.). <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstTagList.html#GST-TAG-PREVIEW-IMAGE:CAPS"><span class="type">GST_TAG_PREVIEW_IMAGE</span></a>
+tags should not carry an image type, their type is already indicated via
+the special tag name.</p>
+<p>This function will do various checks and typefind the encoded image
+data (we can't trust the declared mime type).</p>
+<div class="refsect3">
+<a name="id-1.2.13.3.7.5.8"></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>image_data</p></td>
+<td class="parameter_description"><p>the (encoded) image</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>image_data_len</p></td>
+<td class="parameter_description"><p>the length of the encoded image data at <em class="parameter"><code>image_data</code></em>
+</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>image_type</p></td>
+<td class="parameter_description"><p>type of the image, or <a class="link" href="gst-plugins-base-libs-gsttag.html#GST-TAG-IMAGE-TYPE-UNDEFINED:CAPS"><span class="type">GST_TAG_IMAGE_TYPE_UNDEFINED</span></a>. Pass
+<a class="link" href="gst-plugins-base-libs-gsttag.html#GST-TAG-IMAGE-TYPE-NONE:CAPS"><span class="type">GST_TAG_IMAGE_TYPE_NONE</span></a> if no image type should be set at all (e.g.
+for preview images)</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="id-1.2.13.3.7.5.9"></a><h4>Returns</h4>
+<p> a newly-allocated image sample for use in tag lists, or NULL</p>
 </div>
 </div>
 </div>
@@ -656,11 +727,25 @@
 </div>
 <hr>
 <div class="refsect2">
+<a name="GST-TAG-MUSICAL-KEY:CAPS"></a><h3>GST_TAG_MUSICAL_KEY</h3>
+<pre class="programlisting">#define GST_TAG_MUSICAL_KEY                   "musical-key"
+</pre>
+<p>Musical key in which the sound starts. It is represented as a string
+with a maximum length of three characters. The ground keys are
+represented with "A","B","C","D","E", "F" and "G" and halfkeys
+represented with "b" and "#". Minor is represented as "m" (e.g. "Dbm").
+Off key is represented with an "o" only.
+This notation might be extended in the future to support non-minor/major
+keys.</p>
+<p class="since">Since: 1.2</p>
+</div>
+<hr>
+<div class="refsect2">
 <a name="GstTagImageType"></a><h3>enum GstTagImageType</h3>
 <p>Type of image contained in an image tag (specified as "image-type" field in
 the info structure in the image's <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstSample.html"><span class="type">GstSample</span></a>)</p>
 <div class="refsect3">
-<a name="id-1.2.13.3.8.35.4"></a><h4>Members</h4>
+<a name="id-1.2.13.3.8.36.4"></a><h4>Members</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="300px" class="enum_members_name">
@@ -672,7 +757,7 @@
 <td class="enum_member_name"><p><a name="GST-TAG-IMAGE-TYPE-NONE:CAPS"></a>GST_TAG_IMAGE_TYPE_NONE</p></td>
 <td class="enum_member_description">
 <p>No image type. Can be used to
-     tell functions such as <code class="function">gst_tag_image_data_to_image_sample()</code> that no
+     tell functions such as <a class="link" href="gst-plugins-base-libs-gsttag.html#gst-tag-image-data-to-image-sample" title="gst_tag_image_data_to_image_sample ()"><code class="function">gst_tag_image_data_to_image_sample()</code></a> that no
      image type should be set.</p>
 </td>
 <td class="enum_member_annotations"> </td>
@@ -821,7 +906,6 @@
 </div>
 </div>
 <div class="footer">
-<hr>
-          Generated by GTK-Doc V1.21</div>
+<hr>Generated by GTK-Doc V1.24</div>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/libs/html/gst-plugins-base-libs-gsttagdemux.html b/docs/libs/html/gst-plugins-base-libs-gsttagdemux.html
index ff11e14..60545bf 100644
--- a/docs/libs/html/gst-plugins-base-libs-gsttagdemux.html
+++ b/docs/libs/html/gst-plugins-base-libs-gsttagdemux.html
@@ -2,13 +2,13 @@
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>GStreamer Base Plugins 1.0 Library Reference Manual: gsttagdemux</title>
+<title>gsttagdemux: GStreamer Base 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 Base Plugins 1.0 Library Reference Manual">
 <link rel="up" href="gstreamer-tag.html" title="Tag Support Library">
 <link rel="prev" href="gst-plugins-base-libs-gsttagxmpwriter.html" title="gsttagxmpwriter">
 <link rel="next" href="gst-plugins-base-libs-gsttagmux.html" title="gsttagmux">
-<meta name="generator" content="GTK-Doc V1.21 (XML mode)">
+<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">
@@ -109,6 +109,7 @@
 </div>
 <div class="refsect1">
 <a name="gst-plugins-base-libs-gsttagdemux.functions_details"></a><h2>Functions</h2>
+<p></p>
 </div>
 <div class="refsect1">
 <a name="gst-plugins-base-libs-gsttagdemux.other_details"></a><h2>Types and Values</h2>
@@ -274,7 +275,6 @@
 </div>
 </div>
 <div class="footer">
-<hr>
-          Generated by GTK-Doc V1.21</div>
+<hr>Generated by GTK-Doc V1.24</div>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/libs/html/gst-plugins-base-libs-gsttagexif.html b/docs/libs/html/gst-plugins-base-libs-gsttagexif.html
index ba7fca8..8d62773 100644
--- a/docs/libs/html/gst-plugins-base-libs-gsttagexif.html
+++ b/docs/libs/html/gst-plugins-base-libs-gsttagexif.html
@@ -2,13 +2,13 @@
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>GStreamer Base Plugins 1.0 Library Reference Manual: gsttagexif</title>
+<title>gsttagexif: GStreamer Base 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 Base Plugins 1.0 Library Reference Manual">
 <link rel="up" href="gstreamer-tag.html" title="Tag Support Library">
 <link rel="prev" href="gst-plugins-base-libs-gsttagid3.html" title="gsttagid3">
 <link rel="next" href="gst-plugins-base-libs-gsttagxmp.html" title="gsttagxmp">
-<meta name="generator" content="GTK-Doc V1.21 (XML mode)">
+<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">
@@ -126,7 +126,6 @@
 <div class="refsect3">
 <a name="id-1.2.13.6.6.2.6"></a><h4>Returns</h4>
 <p> A GstBuffer containing the tag entries followed by the tag data</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -155,7 +154,6 @@
 <div class="refsect3">
 <a name="id-1.2.13.6.6.3.6"></a><h4>Returns</h4>
 <p> A GstBuffer containing the data</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -199,7 +197,6 @@
 <div class="refsect3">
 <a name="id-1.2.13.6.6.4.6"></a><h4>Returns</h4>
 <p> The parsed taglist</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -227,7 +224,6 @@
 <div class="refsect3">
 <a name="id-1.2.13.6.6.5.6"></a><h4>Returns</h4>
 <p> The taglist</p>
-<p></p>
 </div>
 </div>
 </div>
@@ -240,7 +236,6 @@
 </div>
 </div>
 <div class="footer">
-<hr>
-          Generated by GTK-Doc V1.21</div>
+<hr>Generated by GTK-Doc V1.24</div>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/libs/html/gst-plugins-base-libs-gsttagid3.html b/docs/libs/html/gst-plugins-base-libs-gsttagid3.html
index 60ccf96..1cd01bb 100644
--- a/docs/libs/html/gst-plugins-base-libs-gsttagid3.html
+++ b/docs/libs/html/gst-plugins-base-libs-gsttagid3.html
@@ -2,13 +2,13 @@
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>GStreamer Base Plugins 1.0 Library Reference Manual: gsttagid3</title>
+<title>gsttagid3: GStreamer Base 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 Base Plugins 1.0 Library Reference Manual">
 <link rel="up" href="gstreamer-tag.html" title="Tag Support Library">
 <link rel="prev" href="gst-plugins-base-libs-gsttagvorbis.html" title="gsttagvorbis">
 <link rel="next" href="gst-plugins-base-libs-gsttagexif.html" title="gsttagexif">
-<meta name="generator" content="GTK-Doc V1.21 (XML mode)">
+<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">
@@ -136,7 +136,6 @@
 <div class="refsect3">
 <a name="id-1.2.13.5.6.2.5"></a><h4>Returns</h4>
 <p> the number of ID3v1 genres that can be identified</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -163,7 +162,6 @@
 <div class="refsect3">
 <a name="id-1.2.13.5.6.3.6"></a><h4>Returns</h4>
 <p> the genre or NULL if no genre is associated with that ID.</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -191,7 +189,6 @@
 <div class="refsect3">
 <a name="id-1.2.13.5.6.4.6"></a><h4>Returns</h4>
 <p> A new tag list or NULL if the data was not an ID3v1 tag.</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -218,7 +215,6 @@
 <div class="refsect3">
 <a name="id-1.2.13.5.6.5.6"></a><h4>Returns</h4>
 <p> The corresponding GStreamer tag or NULL if none exists.</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -254,7 +250,6 @@
 <div class="refsect3">
 <a name="id-1.2.13.5.6.6.6"></a><h4>Returns</h4>
 <p> The corresponding GStreamer tag or NULL if none exists.</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -281,7 +276,6 @@
 <div class="refsect3">
 <a name="id-1.2.13.5.6.7.6"></a><h4>Returns</h4>
 <p> The corresponding ID3v2 tag or NULL if none exists.</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -293,7 +287,7 @@
                             <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> image_data_len</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> id3_picture_type</code></em>);</pre>
 <p>Adds an image from an ID3 APIC frame (or similar, such as used in FLAC)
-to the given tag list. Also see <code class="function">gst_tag_image_data_to_image_sample()</code> for
+to the given tag list. Also see <a class="link" href="gst-plugins-base-libs-gsttag.html#gst-tag-image-data-to-image-sample" title="gst_tag_image_data_to_image_sample ()"><code class="function">gst_tag_image_data_to_image_sample()</code></a> for
 more information on image tags in GStreamer.</p>
 <div class="refsect3">
 <a name="id-1.2.13.5.6.8.5"></a><h4>Parameters</h4>
@@ -332,7 +326,6 @@
 <div class="refsect3">
 <a name="id-1.2.13.5.6.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 the image was processed, otherwise <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a></p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -360,7 +353,6 @@
 <div class="refsect3">
 <a name="id-1.2.13.5.6.9.6"></a><h4>Returns</h4>
 <p> Size of tag, or 0 if header is invalid or too small.</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -389,7 +381,6 @@
 <a name="id-1.2.13.5.6.10.6"></a><h4>Returns</h4>
 <p> A new <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstTagList.html"><span class="type">GstTagList</span></a> with all tags that could be extracted from the
 given vorbiscomment buffer or NULL on error.</p>
-<p></p>
 </div>
 </div>
 </div>
@@ -402,7 +393,6 @@
 </div>
 </div>
 <div class="footer">
-<hr>
-          Generated by GTK-Doc V1.21</div>
+<hr>Generated by GTK-Doc V1.24</div>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/libs/html/gst-plugins-base-libs-gsttaglanguagecodes.html b/docs/libs/html/gst-plugins-base-libs-gsttaglanguagecodes.html
index b5b3228..be9a6e2 100644
--- a/docs/libs/html/gst-plugins-base-libs-gsttaglanguagecodes.html
+++ b/docs/libs/html/gst-plugins-base-libs-gsttaglanguagecodes.html
@@ -2,13 +2,13 @@
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>GStreamer Base Plugins 1.0 Library Reference Manual: gsttaglanguagecodes</title>
+<title>gsttaglanguagecodes: GStreamer Base 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 Base Plugins 1.0 Library Reference Manual">
 <link rel="up" href="gstreamer-tag.html" title="Tag Support Library">
 <link rel="prev" href="gst-plugins-base-libs-gsttagmux.html" title="gsttagmux">
 <link rel="next" href="gst-plugins-base-libs-gsttaglicenses.html" title="gsttaglicenses">
-<meta name="generator" content="GTK-Doc V1.21 (XML mode)">
+<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">
@@ -155,7 +155,6 @@
 not be mapped to a language name. The returned string must not be
 modified and does not need to freed; it will stay valid until the
 application is terminated.</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -209,7 +208,6 @@
 ,
 or NULL if no mapping is known. The returned string must not be
 modified or freed.</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -245,7 +243,6 @@
 ,
 or NULL if no mapping is known. The returned string must not be
 modified or freed.</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -281,7 +278,6 @@
 ,
 or NULL if no mapping is known. The returned string must not be
 modified or freed.</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -313,7 +309,6 @@
 <a name="id-1.2.13.11.6.8.7"></a><h4>Returns</h4>
 <p> TRUE if the two- or three-letter language code in <em class="parameter"><code>lang_code</code></em>
 is a valid ISO-639 language code.</p>
-<p></p>
 </div>
 </div>
 </div>
@@ -326,7 +321,6 @@
 </div>
 </div>
 <div class="footer">
-<hr>
-          Generated by GTK-Doc V1.21</div>
+<hr>Generated by GTK-Doc V1.24</div>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/libs/html/gst-plugins-base-libs-gsttaglicenses.html b/docs/libs/html/gst-plugins-base-libs-gsttaglicenses.html
index daa6f07..fc1f5e5 100644
--- a/docs/libs/html/gst-plugins-base-libs-gsttaglicenses.html
+++ b/docs/libs/html/gst-plugins-base-libs-gsttaglicenses.html
@@ -2,13 +2,13 @@
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>GStreamer Base Plugins 1.0 Library Reference Manual: gsttaglicenses</title>
+<title>gsttaglicenses: GStreamer Base 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 Base Plugins 1.0 Library Reference Manual">
 <link rel="up" href="gstreamer-tag.html" title="Tag Support Library">
 <link rel="prev" href="gst-plugins-base-libs-gsttaglanguagecodes.html" title="gsttaglanguagecodes">
 <link rel="next" href="gstreamer-base-utils.html" title="Base Utils Library">
-<meta name="generator" content="GTK-Doc V1.21 (XML mode)">
+<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">
@@ -145,7 +145,6 @@
 <div class="refsect3">
 <a name="id-1.2.13.12.7.2.6"></a><h4>Returns</h4>
 <p> the flags of the license, or 0 if the license is unknown</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -174,7 +173,6 @@
 <div class="refsect3">
 <a name="id-1.2.13.12.7.3.6"></a><h4>Returns</h4>
 <p> the nick name of the license, or NULL if the license is unknown</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -204,7 +202,6 @@
 <a name="id-1.2.13.12.7.4.6"></a><h4>Returns</h4>
 <p> the title of the license, or NULL if the license is unknown or
 no title is available.</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -234,7 +231,6 @@
 <a name="id-1.2.13.12.7.5.6"></a><h4>Returns</h4>
 <p> the description of the license, or NULL if the license is unknown
 or a description is not available.</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -268,7 +264,6 @@
 <a name="id-1.2.13.12.7.6.7"></a><h4>Returns</h4>
 <p> the jurisdiction code of the license, or NULL if the license is
 unknown or is not specific to a particular jurisdiction.</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -297,7 +292,6 @@
 <a name="id-1.2.13.12.7.7.6"></a><h4>Returns</h4>
 <p> the version of the license, or NULL if the license is not known or
 has no version</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -458,7 +452,6 @@
 </div>
 </div>
 <div class="footer">
-<hr>
-          Generated by GTK-Doc V1.21</div>
+<hr>Generated by GTK-Doc V1.24</div>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/libs/html/gst-plugins-base-libs-gsttagmux.html b/docs/libs/html/gst-plugins-base-libs-gsttagmux.html
index 7597bf0..a7694b9 100644
--- a/docs/libs/html/gst-plugins-base-libs-gsttagmux.html
+++ b/docs/libs/html/gst-plugins-base-libs-gsttagmux.html
@@ -2,13 +2,13 @@
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>GStreamer Base Plugins 1.0 Library Reference Manual: gsttagmux</title>
+<title>gsttagmux: GStreamer Base 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 Base Plugins 1.0 Library Reference Manual">
 <link rel="up" href="gstreamer-tag.html" title="Tag Support Library">
 <link rel="prev" href="gst-plugins-base-libs-gsttagdemux.html" title="gsttagdemux">
 <link rel="next" href="gst-plugins-base-libs-gsttaglanguagecodes.html" title="gsttaglanguagecodes">
-<meta name="generator" content="GTK-Doc V1.21 (XML mode)">
+<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">
@@ -86,6 +86,7 @@
 </div>
 <div class="refsect1">
 <a name="gst-plugins-base-libs-gsttagmux.functions_details"></a><h2>Functions</h2>
+<p></p>
 </div>
 <div class="refsect1">
 <a name="gst-plugins-base-libs-gsttagmux.other_details"></a><h2>Types and Values</h2>
@@ -162,7 +163,6 @@
 </div>
 </div>
 <div class="footer">
-<hr>
-          Generated by GTK-Doc V1.21</div>
+<hr>Generated by GTK-Doc V1.24</div>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/libs/html/gst-plugins-base-libs-gsttagvorbis.html b/docs/libs/html/gst-plugins-base-libs-gsttagvorbis.html
index 631014c..b8ce2ba 100644
--- a/docs/libs/html/gst-plugins-base-libs-gsttagvorbis.html
+++ b/docs/libs/html/gst-plugins-base-libs-gsttagvorbis.html
@@ -2,13 +2,13 @@
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>GStreamer Base Plugins 1.0 Library Reference Manual: gsttagvorbis</title>
+<title>gsttagvorbis: GStreamer Base 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 Base Plugins 1.0 Library Reference Manual">
 <link rel="up" href="gstreamer-tag.html" title="Tag Support Library">
 <link rel="prev" href="gst-plugins-base-libs-gsttag.html" title="gsttag">
 <link rel="next" href="gst-plugins-base-libs-gsttagid3.html" title="gsttagid3">
-<meta name="generator" content="GTK-Doc V1.21 (XML mode)">
+<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">
@@ -136,7 +136,6 @@
 <div class="refsect3">
 <a name="id-1.2.13.4.6.2.6"></a><h4>Returns</h4>
 <p> The corresponding GStreamer tag or NULL if none exists.</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -163,7 +162,6 @@
 <div class="refsect3">
 <a name="id-1.2.13.4.6.3.6"></a><h4>Returns</h4>
 <p> The corresponding vorbiscomment tag or NULL if none exists.</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -299,7 +297,6 @@
 <a name="id-1.2.13.4.6.6.6"></a><h4>Returns</h4>
 <p> A new <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstTagList.html"><span class="type">GstTagList</span></a> with all tags that could be extracted from the
 given vorbiscomment buffer or NULL on error.</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -350,7 +347,6 @@
 <a name="id-1.2.13.4.6.7.6"></a><h4>Returns</h4>
 <p> A new <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstTagList.html"><span class="type">GstTagList</span></a> with all tags that could be extracted from the
 given vorbiscomment buffer or NULL on error.</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -399,7 +395,6 @@
 <a name="id-1.2.13.4.6.8.6"></a><h4>Returns</h4>
 <p> A new <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstBuffer.html"><span class="type">GstBuffer</span></a> containing a vorbiscomment buffer with all tags
 that could be converted from the given tag list.</p>
-<p></p>
 </div>
 </div>
 </div>
@@ -412,7 +407,6 @@
 </div>
 </div>
 <div class="footer">
-<hr>
-          Generated by GTK-Doc V1.21</div>
+<hr>Generated by GTK-Doc V1.24</div>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/libs/html/gst-plugins-base-libs-gsttagxmp.html b/docs/libs/html/gst-plugins-base-libs-gsttagxmp.html
index af196d8..fed1433 100644
--- a/docs/libs/html/gst-plugins-base-libs-gsttagxmp.html
+++ b/docs/libs/html/gst-plugins-base-libs-gsttagxmp.html
@@ -2,13 +2,13 @@
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>GStreamer Base Plugins 1.0 Library Reference Manual: gsttagxmp</title>
+<title>gsttagxmp: GStreamer Base 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 Base Plugins 1.0 Library Reference Manual">
 <link rel="up" href="gstreamer-tag.html" title="Tag Support Library">
 <link rel="prev" href="gst-plugins-base-libs-gsttagexif.html" title="gsttagexif">
 <link rel="next" href="gst-plugins-base-libs-gsttagxmpwriter.html" title="gsttagxmpwriter">
-<meta name="generator" content="GTK-Doc V1.21 (XML mode)">
+<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">
@@ -102,7 +102,6 @@
 <div class="refsect3">
 <a name="id-1.2.13.7.6.2.6"></a><h4>Returns</h4>
 <p> new taglist or <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>, free the list when done</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -145,7 +144,6 @@
 <div class="refsect3">
 <a name="id-1.2.13.7.6.3.6"></a><h4>Returns</h4>
 <p> new buffer or <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>, unref the buffer when done</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -171,7 +169,6 @@
 </div>
 </div>
 <div class="footer">
-<hr>
-          Generated by GTK-Doc V1.21</div>
+<hr>Generated by GTK-Doc V1.24</div>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/libs/html/gst-plugins-base-libs-gsttagxmpwriter.html b/docs/libs/html/gst-plugins-base-libs-gsttagxmpwriter.html
index 9882c2b..cbcee36 100644
--- a/docs/libs/html/gst-plugins-base-libs-gsttagxmpwriter.html
+++ b/docs/libs/html/gst-plugins-base-libs-gsttagxmpwriter.html
@@ -2,13 +2,13 @@
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>GStreamer Base Plugins 1.0 Library Reference Manual: gsttagxmpwriter</title>
+<title>gsttagxmpwriter: GStreamer Base 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 Base Plugins 1.0 Library Reference Manual">
 <link rel="up" href="gstreamer-tag.html" title="Tag Support Library">
 <link rel="prev" href="gst-plugins-base-libs-gsttagxmp.html" title="gsttagxmp">
 <link rel="next" href="gst-plugins-base-libs-gsttagdemux.html" title="gsttagdemux">
-<meta name="generator" content="GTK-Doc V1.21 (XML mode)">
+<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">
@@ -192,7 +192,6 @@
 <div class="refsect3">
 <a name="id-1.2.13.8.5.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 it is going to be used</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -264,7 +263,6 @@
 </div>
 </div>
 <div class="footer">
-<hr>
-          Generated by GTK-Doc V1.21</div>
+<hr>Generated by GTK-Doc V1.24</div>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/libs/html/gst-plugins-base-libs-gstvideo.html b/docs/libs/html/gst-plugins-base-libs-gstvideo.html
index 5990b83..9ec6cdb 100644
--- a/docs/libs/html/gst-plugins-base-libs-gstvideo.html
+++ b/docs/libs/html/gst-plugins-base-libs-gstvideo.html
@@ -2,13 +2,13 @@
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>GStreamer Base Plugins 1.0 Library Reference Manual: gstvideo</title>
+<title>gstvideo: GStreamer Base 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 Base Plugins 1.0 Library Reference Manual">
 <link rel="up" href="gstreamer-video.html" title="Video Library">
 <link rel="prev" href="gstreamer-video.html" title="Video Library">
 <link rel="next" href="gst-plugins-base-libs-gstvideometa.html" title="gstvideometa">
-<meta name="generator" content="GTK-Doc V1.21 (XML mode)">
+<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">
@@ -49,6 +49,14 @@
 </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-base-libs-gstvideo.html#gst-video-guess-framerate" title="gst_video_guess_framerate ()">gst_video_guess_framerate</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
 <span class="returnvalue">void</span>
 </td>
 <td class="function_name">
@@ -137,21 +145,6 @@
 </tr>
 <tr>
 <td class="function_type">
-<a class="link" href="gst-plugins-base-libs-gstvideo.html#GstVideoChromaSite" title="enum GstVideoChromaSite"><span class="returnvalue">GstVideoChromaSite</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="gst-plugins-base-libs-gstvideo.html#gst-video-chroma-from-string" title="gst_video_chroma_from_string ()">gst_video_chroma_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-base-libs-gstvideo.html#gst-video-chroma-to-string" title="gst_video_chroma_to_string ()">gst_video_chroma_to_string</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
 <span class="returnvalue">void</span>
 </td>
 <td class="function_name">
@@ -394,6 +387,38 @@
 </tr>
 <tr>
 <td class="function_type">
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
+<a class="link" href="gst-plugins-base-libs-gstvideo.html#gst-video-color-range-offsets" title="gst_video_color_range_offsets ()">gst_video_color_range_offsets</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-base-libs-gstvideo.html#gst-video-color-matrix-get-Kr-Kb" title="gst_video_color_matrix_get_Kr_Kb ()">gst_video_color_matrix_get_Kr_Kb</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-base-libs-gstvideo.html#gst-video-color-transfer-decode" title="gst_video_color_transfer_decode ()">gst_video_color_transfer_decode</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-base-libs-gstvideo.html#gst-video-color-transfer-encode" title="gst_video_color_transfer_encode ()">gst_video_color_transfer_encode</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">
@@ -405,6 +430,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="gst-plugins-base-libs-gstvideo.html#gst-video-colorimetry-is-equal" title="gst_video_colorimetry_is_equal ()">gst_video_colorimetry_is_equal</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-base-libs-gstvideo.html#gst-video-colorimetry-from-string" title="gst_video_colorimetry_from_string ()">gst_video_colorimetry_from_string</a> <span class="c_punctuation">()</span>
 </td>
 </tr>
@@ -417,14 +450,6 @@
 </td>
 </tr>
 <tr>
-<td class="function_type">
-<span class="returnvalue">void</span>
-</td>
-<td class="function_name">
-<a class="link" href="gst-plugins-base-libs-gstvideo.html#gst-video-color-range-offsets" title="gst_video_color_range_offsets ()">gst_video_color_range_offsets</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-base-libs-gstvideo.html#GST-VIDEO-INFO-FORMAT:CAPS" title="GST_VIDEO_INFO_FORMAT()">GST_VIDEO_INFO_FORMAT</a><span class="c_punctuation">()</span>
@@ -623,6 +648,30 @@
 </td>
 </tr>
 <tr>
+<td class="define_keyword">#define</td>
+<td class="function_name">
+<a class="link" href="gst-plugins-base-libs-gstvideo.html#GST-VIDEO-INFO-CHROMA-SITE:CAPS" title="GST_VIDEO_INFO_CHROMA_SITE()">GST_VIDEO_INFO_CHROMA_SITE</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-base-libs-gstvideo.html#GST-VIDEO-INFO-COLORIMETRY:CAPS" title="GST_VIDEO_INFO_COLORIMETRY()">GST_VIDEO_INFO_COLORIMETRY</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-base-libs-gstvideo.html#GST-VIDEO-INFO-MULTIVIEW-FLAGS:CAPS" title="GST_VIDEO_INFO_MULTIVIEW_FLAGS()">GST_VIDEO_INFO_MULTIVIEW_FLAGS</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-base-libs-gstvideo.html#GST-VIDEO-INFO-MULTIVIEW-MODE:CAPS" title="GST_VIDEO_INFO_MULTIVIEW_MODE()">GST_VIDEO_INFO_MULTIVIEW_MODE</a><span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
 <td class="function_type">
 <span class="returnvalue">void</span>
 </td>
@@ -632,6 +681,30 @@
 </tr>
 <tr>
 <td class="function_type">
+<a class="link" href="gst-plugins-base-libs-gstvideo.html#GstVideoInfo" title="struct GstVideoInfo"><span class="returnvalue">GstVideoInfo</span></a> *
+</td>
+<td class="function_name">
+<a class="link" href="gst-plugins-base-libs-gstvideo.html#gst-video-info-new" title="gst_video_info_new ()">gst_video_info_new</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a class="link" href="gst-plugins-base-libs-gstvideo.html#GstVideoInfo" title="struct GstVideoInfo"><span class="returnvalue">GstVideoInfo</span></a> *
+</td>
+<td class="function_name">
+<a class="link" href="gst-plugins-base-libs-gstvideo.html#gst-video-info-copy" title="gst_video_info_copy ()">gst_video_info_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-base-libs-gstvideo.html#gst-video-info-free" title="gst_video_info_free ()">gst_video_info_free</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
 <span class="returnvalue">void</span>
 </td>
 <td class="function_name">
@@ -906,6 +979,127 @@
 <a class="link" href="gst-plugins-base-libs-gstvideo.html#GST-VIDEO-TILE-Y-TILES:CAPS" title="GST_VIDEO_TILE_Y_TILES()">GST_VIDEO_TILE_Y_TILES</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-base-libs-gstvideo.html#gst-video-blend" title="gst_video_blend ()">gst_video_blend</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-base-libs-gstvideo.html#gst-video-blend-scale-linear-RGBA" title="gst_video_blend_scale_linear_RGBA ()">gst_video_blend_scale_linear_RGBA</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a class="link" href="gst-plugins-base-libs-gstvideo.html#GstVideoConverter" title="GstVideoConverter"><span class="returnvalue">GstVideoConverter</span></a> *
+</td>
+<td class="function_name">
+<a class="link" href="gst-plugins-base-libs-gstvideo.html#gst-video-converter-new" title="gst_video_converter_new ()">gst_video_converter_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-base-libs-gstvideo.html#gst-video-converter-free" title="gst_video_converter_free ()">gst_video_converter_free</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">const <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstStructure.html"><span class="returnvalue">GstStructure</span></a> *
+</td>
+<td class="function_name">
+<a class="link" href="gst-plugins-base-libs-gstvideo.html#gst-video-converter-get-config" title="gst_video_converter_get_config ()">gst_video_converter_get_config</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-base-libs-gstvideo.html#gst-video-converter-set-config" title="gst_video_converter_set_config ()">gst_video_converter_set_config</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-base-libs-gstvideo.html#gst-video-converter-frame" title="gst_video_converter_frame ()">gst_video_converter_frame</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">const <a href="https://developer.gnome.org/gobject/unstable/gobject-Generic-values.html#GValue"><span class="returnvalue">GValue</span></a> *
+</td>
+<td class="function_name">
+<a class="link" href="gst-plugins-base-libs-gstvideo.html#gst-video-multiview-get-mono-modes" title="gst_video_multiview_get_mono_modes ()">gst_video_multiview_get_mono_modes</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">const <a href="https://developer.gnome.org/gobject/unstable/gobject-Generic-values.html#GValue"><span class="returnvalue">GValue</span></a> *
+</td>
+<td class="function_name">
+<a class="link" href="gst-plugins-base-libs-gstvideo.html#gst-video-multiview-get-unpacked-modes" title="gst_video_multiview_get_unpacked_modes ()">gst_video_multiview_get_unpacked_modes</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">const <a href="https://developer.gnome.org/gobject/unstable/gobject-Generic-values.html#GValue"><span class="returnvalue">GValue</span></a> *
+</td>
+<td class="function_name">
+<a class="link" href="gst-plugins-base-libs-gstvideo.html#gst-video-multiview-get-doubled-height-modes" title="gst_video_multiview_get_doubled_height_modes ()">gst_video_multiview_get_doubled_height_modes</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">const <a href="https://developer.gnome.org/gobject/unstable/gobject-Generic-values.html#GValue"><span class="returnvalue">GValue</span></a> *
+</td>
+<td class="function_name">
+<a class="link" href="gst-plugins-base-libs-gstvideo.html#gst-video-multiview-get-doubled-size-modes" title="gst_video_multiview_get_doubled_size_modes ()">gst_video_multiview_get_doubled_size_modes</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">const <a href="https://developer.gnome.org/gobject/unstable/gobject-Generic-values.html#GValue"><span class="returnvalue">GValue</span></a> *
+</td>
+<td class="function_name">
+<a class="link" href="gst-plugins-base-libs-gstvideo.html#gst-video-multiview-get-doubled-width-modes" title="gst_video_multiview_get_doubled_width_modes ()">gst_video_multiview_get_doubled_width_modes</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a class="link" href="gst-plugins-base-libs-gstvideo.html#GstVideoMultiviewMode" title="enum GstVideoMultiviewMode"><span class="returnvalue">GstVideoMultiviewMode</span></a>
+</td>
+<td class="function_name">
+<a class="link" href="gst-plugins-base-libs-gstvideo.html#gst-video-multiview-mode-from-caps-string" title="gst_video_multiview_mode_from_caps_string ()">gst_video_multiview_mode_from_caps_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-base-libs-gstvideo.html#gst-video-multiview-mode-to-caps-string" title="gst_video_multiview_mode_to_caps_string ()">gst_video_multiview_mode_to_caps_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-base-libs-gstvideo.html#gst-video-multiview-guess-half-aspect" title="gst_video_multiview_guess_half_aspect ()">gst_video_multiview_guess_half_aspect</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-base-libs-gstvideo.html#gst-video-multiview-video-info-change-mode" title="gst_video_multiview_video_info_change_mode ()">gst_video_multiview_video_info_change_mode</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
 </tbody>
 </table></div>
 </div>
@@ -955,10 +1149,6 @@
 </tr>
 <tr>
 <td class="datatype_keyword">enum</td>
-<td class="function_name"><a class="link" href="gst-plugins-base-libs-gstvideo.html#GstVideoChromaSite" title="enum GstVideoChromaSite">GstVideoChromaSite</a></td>
-</tr>
-<tr>
-<td class="datatype_keyword">enum</td>
 <td class="function_name"><a class="link" href="gst-plugins-base-libs-gstvideo.html#GstVideoFormatFlags" title="enum GstVideoFormatFlags">GstVideoFormatFlags</a></td>
 </tr>
 <tr>
@@ -987,11 +1177,11 @@
 </tr>
 <tr>
 <td class="datatype_keyword">enum</td>
-<td class="function_name"><a class="link" href="gst-plugins-base-libs-gstvideo.html#GstVideoTransferFunction" title="enum GstVideoTransferFunction">GstVideoTransferFunction</a></td>
+<td class="function_name"><a class="link" href="gst-plugins-base-libs-gstvideo.html#GstVideoColorPrimaries" title="enum GstVideoColorPrimaries">GstVideoColorPrimaries</a></td>
 </tr>
 <tr>
 <td class="datatype_keyword">enum</td>
-<td class="function_name"><a class="link" href="gst-plugins-base-libs-gstvideo.html#GstVideoColorPrimaries" title="enum GstVideoColorPrimaries">GstVideoColorPrimaries</a></td>
+<td class="function_name"><a class="link" href="gst-plugins-base-libs-gstvideo.html#GstVideoTransferFunction" title="enum GstVideoTransferFunction">GstVideoTransferFunction</a></td>
 </tr>
 <tr>
 <td class="datatype_keyword"> </td>
@@ -1007,6 +1197,18 @@
 </tr>
 <tr>
 <td class="datatype_keyword">enum</td>
+<td class="function_name"><a class="link" href="gst-plugins-base-libs-gstvideo.html#GstVideoMultiviewMode" title="enum GstVideoMultiviewMode">GstVideoMultiviewMode</a></td>
+</tr>
+<tr>
+<td class="datatype_keyword">enum</td>
+<td class="function_name"><a class="link" href="gst-plugins-base-libs-gstvideo.html#GstVideoMultiviewFramePacking" title="enum GstVideoMultiviewFramePacking">GstVideoMultiviewFramePacking</a></td>
+</tr>
+<tr>
+<td class="datatype_keyword">enum</td>
+<td class="function_name"><a class="link" href="gst-plugins-base-libs-gstvideo.html#GstVideoMultiviewFlags" title="enum GstVideoMultiviewFlags">GstVideoMultiviewFlags</a></td>
+</tr>
+<tr>
+<td class="datatype_keyword">enum</td>
 <td class="function_name"><a class="link" href="gst-plugins-base-libs-gstvideo.html#GstVideoFlags" title="enum GstVideoFlags">GstVideoFlags</a></td>
 </tr>
 <tr>
@@ -1029,6 +1231,10 @@
 <td class="datatype_keyword">enum</td>
 <td class="function_name"><a class="link" href="gst-plugins-base-libs-gstvideo.html#GstVideoTileMode" title="enum GstVideoTileMode">GstVideoTileMode</a></td>
 </tr>
+<tr>
+<td class="datatype_keyword"> </td>
+<td class="function_name"><a class="link" href="gst-plugins-base-libs-gstvideo.html#GstVideoConverter" title="GstVideoConverter">GstVideoConverter</a></td>
+</tr>
 </tbody>
 </table></div>
 </div>
@@ -1119,11 +1325,57 @@
 <p> A boolean indicating success and a calculated Display Ratio in the
 dar_n and dar_d parameters.
 The return value is FALSE in the case of integer overflow or other error.</p>
-<p></p>
 </div>
 </div>
 <hr>
 <div class="refsect2">
+<a name="gst-video-guess-framerate"></a><h3>gst_video_guess_framerate ()</h3>
+<pre class="programlisting"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
+gst_video_guess_framerate (<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> duration</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> *dest_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> *dest_d</code></em>);</pre>
+<p>Given the nominal duration of one video frame,
+this function will check some standard framerates for
+a close match (within 0.1%) and return one if possible,</p>
+<p>It will calculate an arbitrary framerate if no close
+match was found, and return <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a>.</p>
+<p>It returns <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> if a duration of 0 is passed.</p>
+<div class="refsect3">
+<a name="id-1.2.15.3.7.3.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>duration</p></td>
+<td class="parameter_description"><p>Nominal duration of one frame</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>dest_n</p></td>
+<td class="parameter_description"><p> Numerator of the calculated framerate. </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>dest_d</p></td>
+<td class="parameter_description"><p> Denominator of the calculated framerate. </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 class="refsect3">
+<a name="id-1.2.15.3.7.3.8"></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 a close "standard" framerate was
+recognised, and <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: 1.6</p>
+</div>
+<hr>
+<div class="refsect2">
 <a name="GstVideoConvertSampleCallback"></a><h3>GstVideoConvertSampleCallback ()</h3>
 <pre class="programlisting"><span class="returnvalue">void</span>
 <span class="c_punctuation">(</span>*GstVideoConvertSampleCallback<span class="c_punctuation">)</span> (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstSample.html"><span class="type">GstSample</span></a> *sample</code></em>,
@@ -1142,7 +1394,7 @@
 <p>The output caps can be any raw video formats or any image formats (jpeg, png, ...).</p>
 <p>The width, height and pixel-aspect-ratio can also be specified in the output caps.</p>
 <div class="refsect3">
-<a name="id-1.2.15.3.7.4.7"></a><h4>Parameters</h4>
+<a name="id-1.2.15.3.7.5.7"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1174,10 +1426,9 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.15.3.7.4.8"></a><h4>Returns</h4>
+<a name="id-1.2.15.3.7.5.8"></a><h4>Returns</h4>
 <p> The converted <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstSample.html"><span class="type">GstSample</span></a>, or <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> if an error happened (in which case <em class="parameter"><code>err</code></em>
 will point to the <a href="https://developer.gnome.org/glib/unstable/glib-Error-Reporting.html#GError"><span class="type">GError</span></a>).</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -1205,7 +1456,7 @@
  is not needed
 anymore.</p>
 <div class="refsect3">
-<a name="id-1.2.15.3.7.5.9"></a><h4>Parameters</h4>
+<a name="id-1.2.15.3.7.6.9"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1257,7 +1508,7 @@
 <p>Set <em class="parameter"><code>align</code></em>
  to its default values with no padding and no alignment.</p>
 <div class="refsect3">
-<a name="id-1.2.15.3.7.6.5"></a><h4>Parameters</h4>
+<a name="id-1.2.15.3.7.7.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1284,7 +1535,7 @@
 <p>To parse an event created by <a class="link" href="gst-plugins-base-libs-gstvideo.html#gst-video-event-new-still-frame" title="gst_video_event_new_still_frame ()"><code class="function">gst_video_event_new_still_frame()</code></a> use
 <a class="link" href="gst-plugins-base-libs-gstvideo.html#gst-video-event-parse-still-frame" title="gst_video_event_parse_still_frame ()"><code class="function">gst_video_event_parse_still_frame()</code></a>.</p>
 <div class="refsect3">
-<a name="id-1.2.15.3.7.7.6"></a><h4>Parameters</h4>
+<a name="id-1.2.15.3.7.8.6"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1299,9 +1550,8 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.15.3.7.7.7"></a><h4>Returns</h4>
+<a name="id-1.2.15.3.7.8.7"></a><h4>Returns</h4>
 <p> The new GstEvent</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -1318,7 +1568,7 @@
 event.</p>
 <p>Create a still frame event using <a class="link" href="gst-plugins-base-libs-gstvideo.html#gst-video-event-new-still-frame" title="gst_video_event_new_still_frame ()"><code class="function">gst_video_event_new_still_frame()</code></a></p>
 <div class="refsect3">
-<a name="id-1.2.15.3.7.8.6"></a><h4>Parameters</h4>
+<a name="id-1.2.15.3.7.9.6"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1340,9 +1590,8 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.15.3.7.8.7"></a><h4>Returns</h4>
+<a name="id-1.2.15.3.7.9.7"></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 event is a valid still-frame event. <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> if not</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -1363,7 +1612,7 @@
 <p>To parse an event created by <a class="link" href="gst-plugins-base-libs-gstvideo.html#gst-video-event-new-downstream-force-key-unit" title="gst_video_event_new_downstream_force_key_unit ()"><code class="function">gst_video_event_new_downstream_force_key_unit()</code></a> use
 <a class="link" href="gst-plugins-base-libs-gstvideo.html#gst-video-event-parse-downstream-force-key-unit" title="gst_video_event_parse_downstream_force_key_unit ()"><code class="function">gst_video_event_parse_downstream_force_key_unit()</code></a>.</p>
 <div class="refsect3">
-<a name="id-1.2.15.3.7.9.6"></a><h4>Parameters</h4>
+<a name="id-1.2.15.3.7.10.6"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1400,9 +1649,8 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.15.3.7.9.7"></a><h4>Returns</h4>
+<a name="id-1.2.15.3.7.10.7"></a><h4>Returns</h4>
 <p> The new GstEvent</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -1422,7 +1670,7 @@
 <p><em class="parameter"><code>running_time</code></em>
  will be adjusted for any pad offsets of pads it was passing through.</p>
 <div class="refsect3">
-<a name="id-1.2.15.3.7.10.6"></a><h4>Parameters</h4>
+<a name="id-1.2.15.3.7.11.6"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1464,9 +1712,8 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.15.3.7.10.7"></a><h4>Returns</h4>
+<a name="id-1.2.15.3.7.11.7"></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 event is a valid downstream force key unit event.</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -1486,7 +1733,7 @@
 <p>To parse an event created by <a class="link" href="gst-plugins-base-libs-gstvideo.html#gst-video-event-new-downstream-force-key-unit" title="gst_video_event_new_downstream_force_key_unit ()"><code class="function">gst_video_event_new_downstream_force_key_unit()</code></a> use
 <a class="link" href="gst-plugins-base-libs-gstvideo.html#gst-video-event-parse-downstream-force-key-unit" title="gst_video_event_parse_downstream_force_key_unit ()"><code class="function">gst_video_event_parse_downstream_force_key_unit()</code></a>.</p>
 <div class="refsect3">
-<a name="id-1.2.15.3.7.11.7"></a><h4>Parameters</h4>
+<a name="id-1.2.15.3.7.12.7"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1513,9 +1760,8 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.15.3.7.11.8"></a><h4>Returns</h4>
+<a name="id-1.2.15.3.7.12.8"></a><h4>Returns</h4>
 <p> The new GstEvent</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -1534,7 +1780,7 @@
 <p><em class="parameter"><code>running_time</code></em>
  will be adjusted for any pad offsets of pads it was passing through.</p>
 <div class="refsect3">
-<a name="id-1.2.15.3.7.12.7"></a><h4>Parameters</h4>
+<a name="id-1.2.15.3.7.13.7"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1566,9 +1812,8 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.15.3.7.12.8"></a><h4>Returns</h4>
+<a name="id-1.2.15.3.7.13.8"></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 event is a valid upstream force-key-unit event. <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> if not</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -1579,7 +1824,7 @@
 <p>Checks if an event is a force key unit event. Returns true for both upstream
 and downstream force key unit events.</p>
 <div class="refsect3">
-<a name="id-1.2.15.3.7.13.5"></a><h4>Parameters</h4>
+<a name="id-1.2.15.3.7.14.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1594,68 +1839,8 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.15.3.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 the event is a valid force key unit event</p>
-<p></p>
-</div>
-</div>
-<hr>
-<div class="refsect2">
-<a name="gst-video-chroma-from-string"></a><h3>gst_video_chroma_from_string ()</h3>
-<pre class="programlisting"><a class="link" href="gst-plugins-base-libs-gstvideo.html#GstVideoChromaSite" title="enum GstVideoChromaSite"><span class="returnvalue">GstVideoChromaSite</span></a>
-gst_video_chroma_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> *s</code></em>);</pre>
-<p>Convert <em class="parameter"><code>s</code></em>
- to a <a class="link" href="gst-plugins-base-libs-gstvideo.html#GstVideoChromaSite" title="enum GstVideoChromaSite"><span class="type">GstVideoChromaSite</span></a></p>
-<div class="refsect3">
-<a name="id-1.2.15.3.7.14.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>s</p></td>
-<td class="parameter_description"><p>a chromasite string</p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
-</table></div>
-</div>
-<div class="refsect3">
 <a name="id-1.2.15.3.7.14.6"></a><h4>Returns</h4>
-<p> a <a class="link" href="gst-plugins-base-libs-gstvideo.html#GstVideoChromaSite" title="enum GstVideoChromaSite"><span class="type">GstVideoChromaSite</span></a> or <a class="link" href="gst-plugins-base-libs-gstvideo.html#GST-VIDEO-CHROMA-SITE-UNKNOWN:CAPS"><code class="literal">GST_VIDEO_CHROMA_SITE_UNKNOWN</code></a> when <em class="parameter"><code>s</code></em>
-does
-not contain a valid chroma description.</p>
-<p></p>
-</div>
-</div>
-<hr>
-<div class="refsect2">
-<a name="gst-video-chroma-to-string"></a><h3>gst_video_chroma_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_video_chroma_to_string (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstvideo.html#GstVideoChromaSite" title="enum GstVideoChromaSite"><span class="type">GstVideoChromaSite</span></a> site</code></em>);</pre>
-<p>Converts <em class="parameter"><code>site</code></em>
- to its string representation.</p>
-<div class="refsect3">
-<a name="id-1.2.15.3.7.15.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>site</p></td>
-<td class="parameter_description"><p>a <a class="link" href="gst-plugins-base-libs-gstvideo.html#GstVideoChromaSite" title="enum GstVideoChromaSite"><span class="type">GstVideoChromaSite</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
-</table></div>
-</div>
-<div class="refsect3">
-<a name="id-1.2.15.3.7.15.6"></a><h4>Returns</h4>
-<p> a string describing <em class="parameter"><code>site</code></em>
-.</p>
-<p></p>
+<p> <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the event is a valid force key unit event</p>
 </div>
 </div>
 <hr>
@@ -1674,16 +1859,22 @@
  pixels from the given planes and strides containing data of
 format <em class="parameter"><code>info</code></em>
 . The pixels will be unpacked into <em class="parameter"><code>dest</code></em>
- which each component
-interleaved. <em class="parameter"><code>dest</code></em>
+ with each component
+interleaved as per <em class="parameter"><code>info</code></em>
+'s unpack_format, which will usually be one of
+<a class="link" href="gst-plugins-base-libs-gstvideo.html#GST-VIDEO-FORMAT-ARGB:CAPS"><span class="type">GST_VIDEO_FORMAT_ARGB</span></a>, <a class="link" href="gst-plugins-base-libs-gstvideo.html#GST-VIDEO-FORMAT-AYUV:CAPS"><span class="type">GST_VIDEO_FORMAT_AYUV</span></a>, <a class="link" href="gst-plugins-base-libs-gstvideo.html#GST-VIDEO-FORMAT-ARGB64:CAPS"><span class="type">GST_VIDEO_FORMAT_ARGB64</span></a> or
+<a class="link" href="gst-plugins-base-libs-gstvideo.html#GST-VIDEO-FORMAT-AYUV64:CAPS"><span class="type">GST_VIDEO_FORMAT_AYUV64</span></a> depending on the format to unpack.
+<em class="parameter"><code>dest</code></em>
  should at least be big enough to hold <em class="parameter"><code>width</code></em>
- *
-n_components * size(unpack_format) bytes.</p>
+ * bytes_per_pixel bytes
+where bytes_per_pixel relates to the unpack format and will usually be
+either 4 or 8 depending on the unpack format. bytes_per_pixel will be
+the same as the pixel stride for plane 0 for the above formats.</p>
 <p>For subsampled formats, the components will be duplicated in the destination
 array. Reconstruction of the missing components can be performed in a
 separate step after unpacking.</p>
 <div class="refsect3">
-<a name="id-1.2.15.3.7.16.6"></a><h4>Parameters</h4>
+<a name="id-1.2.15.3.7.15.6"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1745,7 +1936,7 @@
                        <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a> sstride</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>const <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a> stride[GST_VIDEO_MAX_PLANES]</code></em>,
-                       <em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstvideo.html#GstVideoChromaSite" title="enum GstVideoChromaSite"><span class="type">GstVideoChromaSite</span></a> chroma_site</code></em>,
+                       <em class="parameter"><code><a class="link" href="gst-plugins-base-libs-GstVideoChroma.html#GstVideoChromaSite" title="enum GstVideoChromaSite"><span class="type">GstVideoChromaSite</span></a> chroma_site</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>);</pre>
 <p>Packs <em class="parameter"><code>width</code></em>
@@ -1761,14 +1952,15 @@
  and <em class="parameter"><code>y</code></em>
 
 should be a multiple of pack_lines.</p>
-<p>Subsampled formats will use the horizontally cosited component in the
-destination. Subsampling should be performed before packing.</p>
-<p>Because tis function does not have a x coordinate, it is not possible to
+<p>Subsampled formats will use the horizontally and vertically cosited
+component from the source. Subsampling should be performed before
+packing.</p>
+<p>Because this function does not have a x coordinate, it is not possible to
 pack pixels starting from an unaligned position. For tiled images this
 means that packing should start from a tile coordinate. For subsampled
-formats this means that a complete pixel need to be packed.</p>
+formats this means that a complete pixel needs to be packed.</p>
 <div class="refsect3">
-<a name="id-1.2.15.3.7.17.8"></a><h4>Parameters</h4>
+<a name="id-1.2.15.3.7.16.8"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -2029,7 +2221,7 @@
                              <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> alpha_mask</code></em>);</pre>
 <p>Find the <a class="link" href="gst-plugins-base-libs-gstvideo.html#GstVideoFormat" title="enum GstVideoFormat"><span class="type">GstVideoFormat</span></a> for the given parameters.</p>
 <div class="refsect3">
-<a name="id-1.2.15.3.7.47.5"></a><h4>Parameters</h4>
+<a name="id-1.2.15.3.7.46.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -2078,10 +2270,9 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.15.3.7.47.6"></a><h4>Returns</h4>
+<a name="id-1.2.15.3.7.46.6"></a><h4>Returns</h4>
 <p> a <a class="link" href="gst-plugins-base-libs-gstvideo.html#GstVideoFormat" title="enum GstVideoFormat"><span class="type">GstVideoFormat</span></a> or GST_VIDEO_FORMAT_UNKNOWN when the parameters to
 not specify a known format.</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -2093,7 +2284,7 @@
 If the FOURCC cannot be represented by <a class="link" href="gst-plugins-base-libs-gstvideo.html#GstVideoFormat" title="enum GstVideoFormat"><span class="type">GstVideoFormat</span></a>,
 <a class="link" href="gst-plugins-base-libs-gstvideo.html#GST-VIDEO-FORMAT-UNKNOWN:CAPS"><span class="type">GST_VIDEO_FORMAT_UNKNOWN</span></a> is returned.</p>
 <div class="refsect3">
-<a name="id-1.2.15.3.7.48.5"></a><h4>Parameters</h4>
+<a name="id-1.2.15.3.7.47.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -2108,9 +2299,8 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.15.3.7.48.6"></a><h4>Returns</h4>
+<a name="id-1.2.15.3.7.47.6"></a><h4>Returns</h4>
 <p> the <a class="link" href="gst-plugins-base-libs-gstvideo.html#GstVideoFormat" title="enum GstVideoFormat"><span class="type">GstVideoFormat</span></a> describing the FOURCC value</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -2123,7 +2313,7 @@
  has
 no corresponding FOURCC value, 0 is returned.</p>
 <div class="refsect3">
-<a name="id-1.2.15.3.7.49.5"></a><h4>Parameters</h4>
+<a name="id-1.2.15.3.7.48.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -2138,10 +2328,9 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.15.3.7.49.6"></a><h4>Returns</h4>
+<a name="id-1.2.15.3.7.48.6"></a><h4>Returns</h4>
 <p> the FOURCC corresponding to <em class="parameter"><code>format</code></em>
 </p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -2152,7 +2341,7 @@
 <p>Convert the <em class="parameter"><code>format</code></em>
  string to its <a class="link" href="gst-plugins-base-libs-gstvideo.html#GstVideoFormat" title="enum GstVideoFormat"><span class="type">GstVideoFormat</span></a>.</p>
 <div class="refsect3">
-<a name="id-1.2.15.3.7.50.5"></a><h4>Parameters</h4>
+<a name="id-1.2.15.3.7.49.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -2167,11 +2356,10 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.15.3.7.50.6"></a><h4>Returns</h4>
+<a name="id-1.2.15.3.7.49.6"></a><h4>Returns</h4>
 <p> the <a class="link" href="gst-plugins-base-libs-gstvideo.html#GstVideoFormat" title="enum GstVideoFormat"><span class="type">GstVideoFormat</span></a> for <em class="parameter"><code>format</code></em>
 or GST_VIDEO_FORMAT_UNKNOWN when the
 string is not a known format.</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -2179,6 +2367,28 @@
 <a name="gst-video-format-to-string"></a><h3>gst_video_format_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_video_format_to_string (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstvideo.html#GstVideoFormat" title="enum GstVideoFormat"><span class="type">GstVideoFormat</span></a> format</code></em>);</pre>
+<p>Returns a string containing a descriptive name for
+the <a class="link" href="gst-plugins-base-libs-gstvideo.html#GstVideoFormat" title="enum GstVideoFormat"><span class="type">GstVideoFormat</span></a> if there is one, or NULL otherwise.</p>
+<div class="refsect3">
+<a name="id-1.2.15.3.7.50.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>format</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gst-plugins-base-libs-gstvideo.html#GstVideoFormat" title="enum GstVideoFormat"><span class="type">GstVideoFormat</span></a> video format</p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="id-1.2.15.3.7.50.6"></a><h4>Returns</h4>
+<p> the name corresponding to <em class="parameter"><code>format</code></em>
+</p>
+</div>
 </div>
 <hr>
 <div class="refsect2">
@@ -2188,7 +2398,7 @@
 <p>Get the <a class="link" href="gst-plugins-base-libs-gstvideo.html#GstVideoFormatInfo" title="struct GstVideoFormatInfo"><span class="type">GstVideoFormatInfo</span></a> for <em class="parameter"><code>format</code></em>
 </p>
 <div class="refsect3">
-<a name="id-1.2.15.3.7.52.5"></a><h4>Parameters</h4>
+<a name="id-1.2.15.3.7.51.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -2203,10 +2413,9 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.15.3.7.52.6"></a><h4>Returns</h4>
+<a name="id-1.2.15.3.7.51.6"></a><h4>Returns</h4>
 <p> The <a class="link" href="gst-plugins-base-libs-gstvideo.html#GstVideoFormatInfo" title="struct GstVideoFormatInfo"><span class="type">GstVideoFormatInfo</span></a> for <em class="parameter"><code>format</code></em>
 .</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -2215,7 +2424,7 @@
 <pre class="programlisting">#define             GST_VIDEO_CAPS_MAKE(format)</pre>
 <p>Generic caps string for video, for use in pad templates.</p>
 <div class="refsect3">
-<a name="id-1.2.15.3.7.53.5"></a><h4>Parameters</h4>
+<a name="id-1.2.15.3.7.52.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -2233,114 +2442,6 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="gst-video-colorimetry-matches"></a><h3>gst_video_colorimetry_matches ()</h3>
-<pre class="programlisting"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-gst_video_colorimetry_matches (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstvideo.html#GstVideoColorimetry" title="GstVideoColorimetry"><span class="type">GstVideoColorimetry</span></a> *cinfo</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> *color</code></em>);</pre>
-<p>Check if the colorimetry information in <em class="parameter"><code>info</code></em>
- matches that of the
-string <em class="parameter"><code>color</code></em>
-.</p>
-<div class="refsect3">
-<a name="id-1.2.15.3.7.54.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>cinfo</p></td>
-<td class="parameter_description"><p>a <a class="link" href="gst-plugins-base-libs-gstvideo.html#GstVideoInfo" title="struct GstVideoInfo"><span class="type">GstVideoInfo</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr>
-<tr>
-<td class="parameter_name"><p>color</p></td>
-<td class="parameter_description"><p>a colorimetry string</p></td>
-<td class="parameter_annotations"> </td>
-</tr>
-</tbody>
-</table></div>
-</div>
-<div class="refsect3">
-<a name="id-1.2.15.3.7.54.6"></a><h4>Returns</h4>
-<p> <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><span class="type">TRUE</span></a> if <em class="parameter"><code>color</code></em>
-conveys the same colorimetry info as the color
-information in <em class="parameter"><code>info</code></em>
-.</p>
-<p></p>
-</div>
-</div>
-<hr>
-<div class="refsect2">
-<a name="gst-video-colorimetry-from-string"></a><h3>gst_video_colorimetry_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_video_colorimetry_from_string (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstvideo.html#GstVideoColorimetry" title="GstVideoColorimetry"><span class="type">GstVideoColorimetry</span></a> *cinfo</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> *color</code></em>);</pre>
-<p>Parse the colorimetry string and update <em class="parameter"><code>cinfo</code></em>
- with the parsed
-values.</p>
-<div class="refsect3">
-<a name="id-1.2.15.3.7.55.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>cinfo</p></td>
-<td class="parameter_description"><p>a <a class="link" href="gst-plugins-base-libs-gstvideo.html#GstVideoColorimetry" title="GstVideoColorimetry"><span class="type">GstVideoColorimetry</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr>
-<tr>
-<td class="parameter_name"><p>color</p></td>
-<td class="parameter_description"><p>a colorimetry string</p></td>
-<td class="parameter_annotations"> </td>
-</tr>
-</tbody>
-</table></div>
-</div>
-<div class="refsect3">
-<a name="id-1.2.15.3.7.55.6"></a><h4>Returns</h4>
-<p> <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><span class="type">TRUE</span></a> if <em class="parameter"><code>color</code></em>
-points to valid colorimetry info.</p>
-<p></p>
-</div>
-</div>
-<hr>
-<div class="refsect2">
-<a name="gst-video-colorimetry-to-string"></a><h3>gst_video_colorimetry_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_video_colorimetry_to_string (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstvideo.html#GstVideoColorimetry" title="GstVideoColorimetry"><span class="type">GstVideoColorimetry</span></a> *cinfo</code></em>);</pre>
-<p>Make a string representation of <em class="parameter"><code>cinfo</code></em>
-.</p>
-<div class="refsect3">
-<a name="id-1.2.15.3.7.56.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>cinfo</p></td>
-<td class="parameter_description"><p>a <a class="link" href="gst-plugins-base-libs-gstvideo.html#GstVideoColorimetry" title="GstVideoColorimetry"><span class="type">GstVideoColorimetry</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr></tbody>
-</table></div>
-</div>
-<div class="refsect3">
-<a name="id-1.2.15.3.7.56.6"></a><h4>Returns</h4>
-<p> a string representation of <em class="parameter"><code>cinfo</code></em>
-.</p>
-<p></p>
-</div>
-</div>
-<hr>
-<div class="refsect2">
 <a name="gst-video-color-range-offsets"></a><h3>gst_video_color_range_offsets ()</h3>
 <pre class="programlisting"><span class="returnvalue">void</span>
 gst_video_color_range_offsets (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstvideo.html#GstVideoColorRange" title="enum GstVideoColorRange"><span class="type">GstVideoColorRange</span></a> range</code></em>,
@@ -2357,7 +2458,7 @@
  and <em class="parameter"><code>range</code></em>
 .</p>
 <div class="refsect3">
-<a name="id-1.2.15.3.7.57.6"></a><h4>Parameters</h4>
+<a name="id-1.2.15.3.7.53.6"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -2391,6 +2492,353 @@
 </div>
 <hr>
 <div class="refsect2">
+<a name="gst-video-color-matrix-get-Kr-Kb"></a><h3>gst_video_color_matrix_get_Kr_Kb ()</h3>
+<pre class="programlisting"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
+gst_video_color_matrix_get_Kr_Kb (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstvideo.html#GstVideoColorMatrix" title="enum GstVideoColorMatrix"><span class="type">GstVideoColorMatrix</span></a> matrix</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> *Kr</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> *Kb</code></em>);</pre>
+<p>Get the coefficients used to convert between Y'PbPr and R'G'B' using <em class="parameter"><code>matrix</code></em>
+.</p>
+<p>When:</p>
+<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"><span class="number">0.0</span> <span class="gtkdoc opt">&lt;= [</span>Y<span class="string">',R'</span><span class="gtkdoc opt">,</span>G<span class="string">',B'</span><span class="gtkdoc opt">] &lt;=</span> <span class="number">1.0</span><span class="gtkdoc opt">)</span>
+<span class="gtkdoc opt">(-</span><span class="number">0.5</span> <span class="gtkdoc opt">&lt;= [</span>Pb<span class="gtkdoc opt">,</span>Pr<span class="gtkdoc opt">] &lt;=</span> <span class="number">0.5</span><span class="gtkdoc opt">)</span></pre></td>
+      </tr>
+    </tbody>
+  </table>
+</div>
+
+<p></p>
+<p>the general conversion is given by:</p>
+<div class="informalexample">
+  <table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
+    <tbody>
+      <tr>
+        <td class="listing_lines" align="right"><pre>1
+2
+3</pre></td>
+        <td class="listing_code"><pre class="programlisting">Y<span class="string">' = Kr*R'</span> <span class="gtkdoc opt">+ (</span><span class="number">1</span><span class="gtkdoc opt">-</span>Kr<span class="gtkdoc opt">-</span>Kb<span class="gtkdoc opt">)*</span>G<span class="string">' + Kb*B'</span>
+Pb <span class="gtkdoc opt">= (</span>B<span class="string">'-Y'</span><span class="gtkdoc opt">)/(</span><span class="number">2</span><span class="gtkdoc opt">*(</span><span class="number">1</span><span class="gtkdoc opt">-</span>Kb<span class="gtkdoc opt">))</span>
+Pr <span class="gtkdoc opt">= (</span>R<span class="string">'-Y'</span><span class="gtkdoc opt">)/(</span><span class="number">2</span><span class="gtkdoc opt">*(</span><span class="number">1</span><span class="gtkdoc opt">-</span>Kr<span class="gtkdoc opt">))</span></pre></td>
+      </tr>
+    </tbody>
+  </table>
+</div>
+
+<p></p>
+<p>and the other way around:</p>
+<div class="informalexample">
+  <table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
+    <tbody>
+      <tr>
+        <td class="listing_lines" align="right"><pre>1
+2
+3</pre></td>
+        <td class="listing_code"><pre class="programlisting">R<span class="string">' = Y'</span> <span class="gtkdoc opt">+</span> Cr<span class="gtkdoc opt">*</span><span class="number">2</span><span class="gtkdoc opt">*(</span><span class="number">1</span><span class="gtkdoc opt">-</span>Kr<span class="gtkdoc opt">)</span>
+G<span class="string">' = Y'</span> <span class="gtkdoc opt">-</span> Cb<span class="gtkdoc opt">*</span><span class="number">2</span><span class="gtkdoc opt">*(</span><span class="number">1</span><span class="gtkdoc opt">-</span>Kb<span class="gtkdoc opt">)*</span>Kb<span class="gtkdoc opt">/(</span><span class="number">1</span><span class="gtkdoc opt">-</span>Kr<span class="gtkdoc opt">-</span>Kb<span class="gtkdoc opt">) -</span> Cr<span class="gtkdoc opt">*</span><span class="number">2</span><span class="gtkdoc opt">*(</span><span class="number">1</span><span class="gtkdoc opt">-</span>Kr<span class="gtkdoc opt">)*</span>Kr<span class="gtkdoc opt">/(</span><span class="number">1</span><span class="gtkdoc opt">-</span>Kr<span class="gtkdoc opt">-</span>Kb<span class="gtkdoc opt">)</span>
+B<span class="string">' = Y'</span> <span class="gtkdoc opt">+</span> Cb<span class="gtkdoc opt">*</span><span class="number">2</span><span class="gtkdoc opt">*(</span><span class="number">1</span><span class="gtkdoc opt">-</span>Kb<span class="gtkdoc opt">)</span></pre></td>
+      </tr>
+    </tbody>
+  </table>
+</div>
+
+<p></p>
+<div class="refsect3">
+<a name="id-1.2.15.3.7.54.14"></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>matrix</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gst-plugins-base-libs-gstvideo.html#GstVideoColorMatrix" title="enum GstVideoColorMatrix"><span class="type">GstVideoColorMatrix</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>Kr</p></td>
+<td class="parameter_description"><p>result red channel coefficient</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>Kb</p></td>
+<td class="parameter_description"><p>result blue channel coefficient</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="id-1.2.15.3.7.54.15"></a><h4>Returns</h4>
+<p> TRUE if <em class="parameter"><code>matrix</code></em>
+was a YUV color format and <em class="parameter"><code>Kr</code></em>
+and <em class="parameter"><code>Kb</code></em>
+contain valid
+values.</p>
+</div>
+<p class="since">Since: 1.6</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-video-color-transfer-decode"></a><h3>gst_video_color_transfer_decode ()</h3>
+<pre class="programlisting"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gdouble"><span class="returnvalue">gdouble</span></a>
+gst_video_color_transfer_decode (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstvideo.html#GstVideoTransferFunction" title="enum GstVideoTransferFunction"><span class="type">GstVideoTransferFunction</span></a> func</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>Convert <em class="parameter"><code>val</code></em>
+ to its gamma decoded value. This is the inverse operation of
+<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstvideo.html#gst-video-color-transfer-encode" title="gst_video_color_transfer_encode ()"><code class="function">gst_video_color_transfer_encode()</code></a></code></em>
+.</p>
+<p>For a non-linear value L' in the range [0..1], conversion to the linear
+L is in general performed with a power function like:</p>
+<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">L <span class="gtkdoc opt">=</span> L<span class="string">' ^ gamma</span></pre></td>
+      </tr>
+    </tbody>
+  </table>
+</div>
+
+<p></p>
+<p>Depending on <em class="parameter"><code>func</code></em>
+, different formulas might be applied. Some formulas
+encode a linear segment in the lower range.</p>
+<div class="refsect3">
+<a name="id-1.2.15.3.7.55.9"></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>func</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gst-plugins-base-libs-gstvideo.html#GstVideoTransferFunction" title="enum GstVideoTransferFunction"><span class="type">GstVideoTransferFunction</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>val</p></td>
+<td class="parameter_description"><p>a value</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="id-1.2.15.3.7.55.10"></a><h4>Returns</h4>
+<p> the gamme decoded value of <em class="parameter"><code>val</code></em>
+</p>
+</div>
+<p class="since">Since: 1.6</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-video-color-transfer-encode"></a><h3>gst_video_color_transfer_encode ()</h3>
+<pre class="programlisting"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gdouble"><span class="returnvalue">gdouble</span></a>
+gst_video_color_transfer_encode (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstvideo.html#GstVideoTransferFunction" title="enum GstVideoTransferFunction"><span class="type">GstVideoTransferFunction</span></a> func</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>Convert <em class="parameter"><code>val</code></em>
+ to its gamma encoded value.</p>
+<p>For a linear value L in the range [0..1], conversion to the non-linear
+(gamma encoded) L' is in general performed with a power function like:</p>
+<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">L<span class="string">' = L ^ (1 / gamma)</span></pre></td>
+      </tr>
+    </tbody>
+  </table>
+</div>
+
+<p></p>
+<p>Depending on <em class="parameter"><code>func</code></em>
+, different formulas might be applied. Some formulas
+encode a linear segment in the lower range.</p>
+<div class="refsect3">
+<a name="id-1.2.15.3.7.56.9"></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>func</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gst-plugins-base-libs-gstvideo.html#GstVideoTransferFunction" title="enum GstVideoTransferFunction"><span class="type">GstVideoTransferFunction</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>val</p></td>
+<td class="parameter_description"><p>a value</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="id-1.2.15.3.7.56.10"></a><h4>Returns</h4>
+<p> the gamme encoded value of <em class="parameter"><code>val</code></em>
+</p>
+</div>
+<p class="since">Since: 1.6</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-video-colorimetry-matches"></a><h3>gst_video_colorimetry_matches ()</h3>
+<pre class="programlisting"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
+gst_video_colorimetry_matches (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstvideo.html#GstVideoColorimetry" title="GstVideoColorimetry"><span class="type">GstVideoColorimetry</span></a> *cinfo</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> *color</code></em>);</pre>
+<p>Check if the colorimetry information in <em class="parameter"><code>info</code></em>
+ matches that of the
+string <em class="parameter"><code>color</code></em>
+.</p>
+<div class="refsect3">
+<a name="id-1.2.15.3.7.57.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>cinfo</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gst-plugins-base-libs-gstvideo.html#GstVideoInfo" title="struct GstVideoInfo"><span class="type">GstVideoInfo</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>color</p></td>
+<td class="parameter_description"><p>a colorimetry string</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="id-1.2.15.3.7.57.6"></a><h4>Returns</h4>
+<p> <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><span class="type">TRUE</span></a> if <em class="parameter"><code>color</code></em>
+conveys the same colorimetry info as the color
+information in <em class="parameter"><code>info</code></em>
+.</p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-video-colorimetry-is-equal"></a><h3>gst_video_colorimetry_is_equal ()</h3>
+<pre class="programlisting"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
+gst_video_colorimetry_is_equal (<em class="parameter"><code>const <a class="link" href="gst-plugins-base-libs-gstvideo.html#GstVideoColorimetry" title="GstVideoColorimetry"><span class="type">GstVideoColorimetry</span></a> *cinfo</code></em>,
+                                <em class="parameter"><code>const <a class="link" href="gst-plugins-base-libs-gstvideo.html#GstVideoColorimetry" title="GstVideoColorimetry"><span class="type">GstVideoColorimetry</span></a> *other</code></em>);</pre>
+<p>Compare the 2 colorimetry sets for equality</p>
+<div class="refsect3">
+<a name="id-1.2.15.3.7.58.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>cinfo</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gst-plugins-base-libs-gstvideo.html#GstVideoColorimetry" title="GstVideoColorimetry"><span class="type">GstVideoColorimetry</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>other</p></td>
+<td class="parameter_description"><p>another <a class="link" href="gst-plugins-base-libs-gstvideo.html#GstVideoColorimetry" title="GstVideoColorimetry"><span class="type">GstVideoColorimetry</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="id-1.2.15.3.7.58.6"></a><h4>Returns</h4>
+<p> <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><span class="type">TRUE</span></a> if <em class="parameter"><code>cinfo</code></em>
+and <em class="parameter"><code>other</code></em>
+are equal.</p>
+</div>
+<p class="since">Since: 1.6</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-video-colorimetry-from-string"></a><h3>gst_video_colorimetry_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_video_colorimetry_from_string (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstvideo.html#GstVideoColorimetry" title="GstVideoColorimetry"><span class="type">GstVideoColorimetry</span></a> *cinfo</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> *color</code></em>);</pre>
+<p>Parse the colorimetry string and update <em class="parameter"><code>cinfo</code></em>
+ with the parsed
+values.</p>
+<div class="refsect3">
+<a name="id-1.2.15.3.7.59.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>cinfo</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gst-plugins-base-libs-gstvideo.html#GstVideoColorimetry" title="GstVideoColorimetry"><span class="type">GstVideoColorimetry</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>color</p></td>
+<td class="parameter_description"><p>a colorimetry string</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="id-1.2.15.3.7.59.6"></a><h4>Returns</h4>
+<p> <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><span class="type">TRUE</span></a> if <em class="parameter"><code>color</code></em>
+points to valid colorimetry info.</p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-video-colorimetry-to-string"></a><h3>gst_video_colorimetry_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_video_colorimetry_to_string (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstvideo.html#GstVideoColorimetry" title="GstVideoColorimetry"><span class="type">GstVideoColorimetry</span></a> *cinfo</code></em>);</pre>
+<p>Make a string representation of <em class="parameter"><code>cinfo</code></em>
+.</p>
+<div class="refsect3">
+<a name="id-1.2.15.3.7.60.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>cinfo</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gst-plugins-base-libs-gstvideo.html#GstVideoColorimetry" title="GstVideoColorimetry"><span class="type">GstVideoColorimetry</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="id-1.2.15.3.7.60.6"></a><h4>Returns</h4>
+<p> a string representation of <em class="parameter"><code>cinfo</code></em>
+.</p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
 <a name="GST-VIDEO-INFO-FORMAT:CAPS"></a><h3>GST_VIDEO_INFO_FORMAT()</h3>
 <pre class="programlisting">#define GST_VIDEO_INFO_FORMAT(i)         (GST_VIDEO_FORMAT_INFO_FORMAT((i)-&gt;finfo))
 </pre>
@@ -2589,13 +3037,37 @@
 </div>
 <hr>
 <div class="refsect2">
+<a name="GST-VIDEO-INFO-CHROMA-SITE:CAPS"></a><h3>GST_VIDEO_INFO_CHROMA_SITE()</h3>
+<pre class="programlisting">#define GST_VIDEO_INFO_CHROMA_SITE(i) ((i)-&gt;chroma_site)
+</pre>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GST-VIDEO-INFO-COLORIMETRY:CAPS"></a><h3>GST_VIDEO_INFO_COLORIMETRY()</h3>
+<pre class="programlisting">#define GST_VIDEO_INFO_COLORIMETRY(i) ((i)-&gt;colorimetry)
+</pre>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GST-VIDEO-INFO-MULTIVIEW-FLAGS:CAPS"></a><h3>GST_VIDEO_INFO_MULTIVIEW_FLAGS()</h3>
+<pre class="programlisting">#define GST_VIDEO_INFO_MULTIVIEW_FLAGS(i)          ((i)-&gt;ABI.abi.multiview_flags)
+</pre>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GST-VIDEO-INFO-MULTIVIEW-MODE:CAPS"></a><h3>GST_VIDEO_INFO_MULTIVIEW_MODE()</h3>
+<pre class="programlisting">#define GST_VIDEO_INFO_MULTIVIEW_MODE(i)          ((i)-&gt;ABI.abi.multiview_mode)
+</pre>
+</div>
+<hr>
+<div class="refsect2">
 <a name="gst-video-info-init"></a><h3>gst_video_info_init ()</h3>
 <pre class="programlisting"><span class="returnvalue">void</span>
 gst_video_info_init (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstvideo.html#GstVideoInfo" title="struct GstVideoInfo"><span class="type">GstVideoInfo</span></a> *info</code></em>);</pre>
 <p>Initialize <em class="parameter"><code>info</code></em>
  with default values.</p>
 <div class="refsect3">
-<a name="id-1.2.15.3.7.91.5"></a><h4>Parameters</h4>
+<a name="id-1.2.15.3.7.98.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -2612,6 +3084,70 @@
 </div>
 <hr>
 <div class="refsect2">
+<a name="gst-video-info-new"></a><h3>gst_video_info_new ()</h3>
+<pre class="programlisting"><a class="link" href="gst-plugins-base-libs-gstvideo.html#GstVideoInfo" title="struct GstVideoInfo"><span class="returnvalue">GstVideoInfo</span></a> *
+gst_video_info_new (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
+<p>Allocate a new <a class="link" href="gst-plugins-base-libs-gstvideo.html#GstVideoInfo" title="struct GstVideoInfo"><span class="type">GstVideoInfo</span></a> that is also initialized with
+<a class="link" href="gst-plugins-base-libs-gstvideo.html#gst-video-info-init" title="gst_video_info_init ()"><code class="function">gst_video_info_init()</code></a>.</p>
+<div class="refsect3">
+<a name="id-1.2.15.3.7.99.5"></a><h4>Returns</h4>
+<p> a new <a class="link" href="gst-plugins-base-libs-gstvideo.html#GstVideoInfo" title="struct GstVideoInfo"><span class="type">GstVideoInfo</span></a>. free with <a class="link" href="gst-plugins-base-libs-gstvideo.html#gst-video-info-free" title="gst_video_info_free ()"><code class="function">gst_video_info_free()</code></a>.</p>
+</div>
+<p class="since">Since: 1.6</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-video-info-copy"></a><h3>gst_video_info_copy ()</h3>
+<pre class="programlisting"><a class="link" href="gst-plugins-base-libs-gstvideo.html#GstVideoInfo" title="struct GstVideoInfo"><span class="returnvalue">GstVideoInfo</span></a> *
+gst_video_info_copy (<em class="parameter"><code>const <a class="link" href="gst-plugins-base-libs-gstvideo.html#GstVideoInfo" title="struct GstVideoInfo"><span class="type">GstVideoInfo</span></a> *info</code></em>);</pre>
+<p>Copy a GstVideoInfo structure.</p>
+<div class="refsect3">
+<a name="id-1.2.15.3.7.100.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>info</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gst-plugins-base-libs-gstvideo.html#GstVideoInfo" title="struct GstVideoInfo"><span class="type">GstVideoInfo</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="id-1.2.15.3.7.100.6"></a><h4>Returns</h4>
+<p> a new <a class="link" href="gst-plugins-base-libs-gstvideo.html#GstVideoInfo" title="struct GstVideoInfo"><span class="type">GstVideoInfo</span></a>. free with gst_video_info_free.</p>
+</div>
+<p class="since">Since: 1.6</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-video-info-free"></a><h3>gst_video_info_free ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+gst_video_info_free (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstvideo.html#GstVideoInfo" title="struct GstVideoInfo"><span class="type">GstVideoInfo</span></a> *info</code></em>);</pre>
+<p>Free a GstVideoInfo structure previously allocated with <a class="link" href="gst-plugins-base-libs-gstvideo.html#gst-video-info-new" title="gst_video_info_new ()"><code class="function">gst_video_info_new()</code></a>
+or <a class="link" href="gst-plugins-base-libs-gstvideo.html#gst-video-info-copy" title="gst_video_info_copy ()"><code class="function">gst_video_info_copy()</code></a>.</p>
+<div class="refsect3">
+<a name="id-1.2.15.3.7.101.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>info</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gst-plugins-base-libs-gstvideo.html#GstVideoInfo" title="struct GstVideoInfo"><span class="type">GstVideoInfo</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<p class="since">Since: 1.6</p>
+</div>
+<hr>
+<div class="refsect2">
 <a name="gst-video-info-set-format"></a><h3>gst_video_info_set_format ()</h3>
 <pre class="programlisting"><span class="returnvalue">void</span>
 gst_video_info_set_format (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstvideo.html#GstVideoInfo" title="struct GstVideoInfo"><span class="type">GstVideoInfo</span></a> *info</code></em>,
@@ -2623,9 +3159,11 @@
  and <em class="parameter"><code>height</code></em>
 .</p>
 <p>Note: This initializes <em class="parameter"><code>info</code></em>
- first, no values are preserved.</p>
+ first, no values are preserved. This function
+does not set the offsets correctly for interlaced vertically
+subsampled formats.</p>
 <div class="refsect3">
-<a name="id-1.2.15.3.7.92.6"></a><h4>Parameters</h4>
+<a name="id-1.2.15.3.7.102.6"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -2667,7 +3205,7 @@
  and update <em class="parameter"><code>info</code></em>
 .</p>
 <div class="refsect3">
-<a name="id-1.2.15.3.7.93.5"></a><h4>Parameters</h4>
+<a name="id-1.2.15.3.7.103.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -2689,10 +3227,9 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.15.3.7.93.6"></a><h4>Returns</h4>
+<a name="id-1.2.15.3.7.103.6"></a><h4>Returns</h4>
 <p> TRUE if <em class="parameter"><code>caps</code></em>
 could be parsed</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -2703,7 +3240,7 @@
 <p>Convert the values of <em class="parameter"><code>info</code></em>
  into a <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstCaps.html"><span class="type">GstCaps</span></a>.</p>
 <div class="refsect3">
-<a name="id-1.2.15.3.7.94.5"></a><h4>Parameters</h4>
+<a name="id-1.2.15.3.7.104.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -2718,10 +3255,9 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.15.3.7.94.6"></a><h4>Returns</h4>
+<a name="id-1.2.15.3.7.104.6"></a><h4>Returns</h4>
 <p> a new <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstCaps.html"><span class="type">GstCaps</span></a> containing the info of <em class="parameter"><code>info</code></em>
 .</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -2738,7 +3274,7 @@
 raw video, GST_FORMAT_DEFAULT corresponds to video frames.  This
 function can be used to handle pad queries of the type GST_QUERY_CONVERT.</p>
 <div class="refsect3">
-<a name="id-1.2.15.3.7.95.5"></a><h4>Parameters</h4>
+<a name="id-1.2.15.3.7.105.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -2777,9 +3313,8 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.15.3.7.95.6"></a><h4>Returns</h4>
+<a name="id-1.2.15.3.7.105.6"></a><h4>Returns</h4>
 <p> TRUE if the conversion was successful.</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -2790,7 +3325,7 @@
                          <em class="parameter"><code>const <a class="link" href="gst-plugins-base-libs-gstvideo.html#GstVideoInfo" title="struct GstVideoInfo"><span class="type">GstVideoInfo</span></a> *other</code></em>);</pre>
 <p>Compares two <a class="link" href="gst-plugins-base-libs-gstvideo.html#GstVideoInfo" title="struct GstVideoInfo"><span class="type">GstVideoInfo</span></a> and returns whether they are equal or not</p>
 <div class="refsect3">
-<a name="id-1.2.15.3.7.96.5"></a><h4>Parameters</h4>
+<a name="id-1.2.15.3.7.106.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -2812,11 +3347,10 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.15.3.7.96.6"></a><h4>Returns</h4>
+<a name="id-1.2.15.3.7.106.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>info</code></em>
 and <em class="parameter"><code>other</code></em>
 are equal, else <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a>.</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -2833,7 +3367,7 @@
 is required and <em class="parameter"><code>align</code></em>
  will be updated with the new padding values.</p>
 <div class="refsect3">
-<a name="id-1.2.15.3.7.97.6"></a><h4>Parameters</h4>
+<a name="id-1.2.15.3.7.107.6"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -2879,7 +3413,7 @@
 <em class="parameter"><code>frame-&gt;data</code></em>
 .</p>
 <div class="refsect3">
-<a name="id-1.2.15.3.7.98.7"></a><h4>Parameters</h4>
+<a name="id-1.2.15.3.7.108.7"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -2916,9 +3450,8 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.15.3.7.98.8"></a><h4>Returns</h4>
+<a name="id-1.2.15.3.7.108.8"></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> on success.</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -2938,7 +3471,7 @@
 <em class="parameter"><code>frame-&gt;data</code></em>
 .</p>
 <div class="refsect3">
-<a name="id-1.2.15.3.7.99.6"></a><h4>Parameters</h4>
+<a name="id-1.2.15.3.7.109.6"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -2970,9 +3503,8 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.15.3.7.99.7"></a><h4>Returns</h4>
+<a name="id-1.2.15.3.7.109.7"></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> on success.</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -2982,7 +3514,7 @@
 gst_video_frame_unmap (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstvideo.html#GstVideoFrame" title="struct GstVideoFrame"><span class="type">GstVideoFrame</span></a> *frame</code></em>);</pre>
 <p>Unmap the memory previously mapped with gst_video_frame_map.</p>
 <div class="refsect3">
-<a name="id-1.2.15.3.7.100.5"></a><h4>Parameters</h4>
+<a name="id-1.2.15.3.7.110.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -3007,7 +3539,7 @@
  to <em class="parameter"><code>dest</code></em>
 .</p>
 <div class="refsect3">
-<a name="id-1.2.15.3.7.101.5"></a><h4>Parameters</h4>
+<a name="id-1.2.15.3.7.111.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -3029,9 +3561,8 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.15.3.7.101.6"></a><h4>Returns</h4>
+<a name="id-1.2.15.3.7.111.6"></a><h4>Returns</h4>
 <p> TRUE if the contents could be copied.</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -3046,7 +3577,7 @@
  to <em class="parameter"><code>dest</code></em>
 .</p>
 <div class="refsect3">
-<a name="id-1.2.15.3.7.102.5"></a><h4>Parameters</h4>
+<a name="id-1.2.15.3.7.112.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -3073,9 +3604,8 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.15.3.7.102.6"></a><h4>Returns</h4>
+<a name="id-1.2.15.3.7.112.6"></a><h4>Returns</h4>
 <p> TRUE if the contents could be copied.</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -3240,7 +3770,7 @@
 <p>Use this method when <em class="parameter"><code>mode</code></em>
  is of type <code class="literal">GST_VIDEO_TILE_MODE_INDEXED</code>.</p>
 <div class="refsect3">
-<a name="id-1.2.15.3.7.127.6"></a><h4>Parameters</h4>
+<a name="id-1.2.15.3.7.137.6"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -3277,16 +3807,15 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.15.3.7.127.7"></a><h4>Returns</h4>
+<a name="id-1.2.15.3.7.137.7"></a><h4>Returns</h4>
 <p> the index of the tile at <em class="parameter"><code>x</code></em>
 and <em class="parameter"><code>y</code></em>
 in the tiled image of
 <em class="parameter"><code>x_tiles</code></em>
 by <em class="parameter"><code>y_tiles</code></em>
 .</p>
-<p></p>
 </div>
-<p class="since">Since 1.4</p>
+<p class="since">Since: 1.4</p>
 </div>
 <hr>
 <div class="refsect2">
@@ -3294,7 +3823,7 @@
 <pre class="programlisting">#define             GST_VIDEO_TILE_MAKE_MODE(num, type)</pre>
 <p>use this macro to create new tile modes.</p>
 <div class="refsect3">
-<a name="id-1.2.15.3.7.128.5"></a><h4>Parameters</h4>
+<a name="id-1.2.15.3.7.138.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -3324,7 +3853,7 @@
 <p>Get the tile mode type of <em class="parameter"><code>mode</code></em>
 </p>
 <div class="refsect3">
-<a name="id-1.2.15.3.7.129.5"></a><h4>Parameters</h4>
+<a name="id-1.2.15.3.7.139.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -3347,7 +3876,7 @@
 <p>Check if <em class="parameter"><code>mode</code></em>
  is an indexed tile type</p>
 <div class="refsect3">
-<a name="id-1.2.15.3.7.130.5"></a><h4>Parameters</h4>
+<a name="id-1.2.15.3.7.140.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -3368,7 +3897,7 @@
 <pre class="programlisting">#define             GST_VIDEO_TILE_MAKE_STRIDE(x_tiles, y_tiles)</pre>
 <p>Encode the number of tile in X and Y into the stride.</p>
 <div class="refsect3">
-<a name="id-1.2.15.3.7.131.5"></a><h4>Parameters</h4>
+<a name="id-1.2.15.3.7.141.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -3397,7 +3926,7 @@
 </pre>
 <p>Extract the number of tiles in X from the stride value.</p>
 <div class="refsect3">
-<a name="id-1.2.15.3.7.132.5"></a><h4>Parameters</h4>
+<a name="id-1.2.15.3.7.142.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -3419,7 +3948,7 @@
 </pre>
 <p>Extract the number of tiles in Y from the stride value.</p>
 <div class="refsect3">
-<a name="id-1.2.15.3.7.133.5"></a><h4>Parameters</h4>
+<a name="id-1.2.15.3.7.143.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -3434,6 +3963,537 @@
 </table></div>
 </div>
 </div>
+<hr>
+<div class="refsect2">
+<a name="gst-video-blend"></a><h3>gst_video_blend ()</h3>
+<pre class="programlisting"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
+gst_video_blend (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstvideo.html#GstVideoFrame" title="struct GstVideoFrame"><span class="type">GstVideoFrame</span></a> *dest</code></em>,
+                 <em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstvideo.html#GstVideoFrame" title="struct GstVideoFrame"><span class="type">GstVideoFrame</span></a> *src</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#gfloat"><span class="type">gfloat</span></a> global_alpha</code></em>);</pre>
+<p>Lets you blend the <em class="parameter"><code>src</code></em>
+ image into the <em class="parameter"><code>dest</code></em>
+ image</p>
+<div class="refsect3">
+<a name="id-1.2.15.3.7.144.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>dest</p></td>
+<td class="parameter_description"><p>The <a class="link" href="gst-plugins-base-libs-gstvideo.html#GstVideoFrame" title="struct GstVideoFrame"><span class="type">GstVideoFrame</span></a> where to blend <em class="parameter"><code>src</code></em>
+in</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>src</p></td>
+<td class="parameter_description"><p>the <a class="link" href="gst-plugins-base-libs-gstvideo.html#GstVideoFrame" title="struct GstVideoFrame"><span class="type">GstVideoFrame</span></a> that we want to blend into</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>x</p></td>
+<td class="parameter_description"><p>The x offset in pixel where the <em class="parameter"><code>src</code></em>
+image should be blended</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>y</p></td>
+<td class="parameter_description"><p>the y offset in pixel where the <em class="parameter"><code>src</code></em>
+image should be blended</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>global_alpha</p></td>
+<td class="parameter_description"><p>the global_alpha each per-pixel alpha value is multiplied
+with</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-video-blend-scale-linear-RGBA"></a><h3>gst_video_blend_scale_linear_RGBA ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+gst_video_blend_scale_linear_RGBA (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstvideo.html#GstVideoInfo" title="struct GstVideoInfo"><span class="type">GstVideoInfo</span></a> *src</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> *src_buffer</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> dest_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> dest_width</code></em>,
+                                   <em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstvideo.html#GstVideoInfo" title="struct GstVideoInfo"><span class="type">GstVideoInfo</span></a> *dest</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> **dest_buffer</code></em>);</pre>
+<p>Scales a buffer containing RGBA (or AYUV) video. This is an internal
+helper function which is used to scale subtitle overlays, and may be
+deprecated in the near future. Use <a class="link" href="gst-plugins-base-libs-GstVideoScaler.html#GstVideoScaler" title="GstVideoScaler"><span class="type">GstVideoScaler</span></a> to scale video buffers
+instead.</p>
+<div class="refsect3">
+<a name="id-1.2.15.3.7.145.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>src</p></td>
+<td class="parameter_description"><p>the <a class="link" href="gst-plugins-base-libs-gstvideo.html#GstVideoInfo" title="struct GstVideoInfo"><span class="type">GstVideoInfo</span></a> describing the video data in <em class="parameter"><code>src_buffer</code></em>
+</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>src_buffer</p></td>
+<td class="parameter_description"><p>the source buffer containing video pixels to scale</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>dest_height</p></td>
+<td class="parameter_description"><p>the height in pixels to scale the video data in <em class="parameter"><code>src_buffer</code></em>
+to</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>dest_width</p></td>
+<td class="parameter_description"><p>the width in pixels to scale the video data in <em class="parameter"><code>src_buffer</code></em>
+to</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>dest</p></td>
+<td class="parameter_description"><p> pointer to a <a class="link" href="gst-plugins-base-libs-gstvideo.html#GstVideoInfo" title="struct GstVideoInfo"><span class="type">GstVideoInfo</span></a> structure that will be filled in
+with the details for <em class="parameter"><code>dest_buffer</code></em>
+. </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>dest_buffer</p></td>
+<td class="parameter_description"><p> a pointer to a <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstBuffer.html"><span class="type">GstBuffer</span></a> variable, which will be
+set to a newly-allocated buffer containing the scaled pixels. </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-video-converter-new"></a><h3>gst_video_converter_new ()</h3>
+<pre class="programlisting"><a class="link" href="gst-plugins-base-libs-gstvideo.html#GstVideoConverter" title="GstVideoConverter"><span class="returnvalue">GstVideoConverter</span></a> *
+gst_video_converter_new (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstvideo.html#GstVideoInfo" title="struct GstVideoInfo"><span class="type">GstVideoInfo</span></a> *in_info</code></em>,
+                         <em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstvideo.html#GstVideoInfo" title="struct GstVideoInfo"><span class="type">GstVideoInfo</span></a> *out_info</code></em>,
+                         <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>
+<p>Create a new converter object to convert between <em class="parameter"><code>in_info</code></em>
+ and <em class="parameter"><code>out_info</code></em>
+
+with <em class="parameter"><code>config</code></em>
+.</p>
+<p><span class="annotation">[<acronym title="Exposed in C code, not necessarily available in other languages."><span class="acronym">skip</span></acronym>]</span></p>
+<div class="refsect3">
+<a name="id-1.2.15.3.7.146.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>in_info</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gst-plugins-base-libs-gstvideo.html#GstVideoInfo" title="struct GstVideoInfo"><span class="type">GstVideoInfo</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 class="link" href="gst-plugins-base-libs-gstvideo.html#GstVideoInfo" title="struct GstVideoInfo"><span class="type">GstVideoInfo</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>config</p></td>
+<td class="parameter_description"><p> a <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstStructure.html"><span class="type">GstStructure</span></a> with configuration options. </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>]</span></td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="id-1.2.15.3.7.146.7"></a><h4>Returns</h4>
+<p> a <a class="link" href="gst-plugins-base-libs-gstvideo.html#GstVideoConverter" title="GstVideoConverter"><span class="type">GstVideoConverter</span></a> or <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> if conversion is not possible.</p>
+</div>
+<p class="since">Since: 1.6</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-video-converter-free"></a><h3>gst_video_converter_free ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+gst_video_converter_free (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstvideo.html#GstVideoConverter" title="GstVideoConverter"><span class="type">GstVideoConverter</span></a> *convert</code></em>);</pre>
+<p>Free <em class="parameter"><code>convert</code></em>
+</p>
+<div class="refsect3">
+<a name="id-1.2.15.3.7.147.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>convert</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gst-plugins-base-libs-gstvideo.html#GstVideoConverter" title="GstVideoConverter"><span class="type">GstVideoConverter</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<p class="since">Since: 1.6</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-video-converter-get-config"></a><h3>gst_video_converter_get_config ()</h3>
+<pre class="programlisting">const <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstStructure.html"><span class="returnvalue">GstStructure</span></a> *
+gst_video_converter_get_config (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstvideo.html#GstVideoConverter" title="GstVideoConverter"><span class="type">GstVideoConverter</span></a> *convert</code></em>);</pre>
+<p>Get the current configuration of <em class="parameter"><code>convert</code></em>
+.</p>
+<div class="refsect3">
+<a name="id-1.2.15.3.7.148.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>convert</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gst-plugins-base-libs-gstvideo.html#GstVideoConverter" title="GstVideoConverter"><span class="type">GstVideoConverter</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="id-1.2.15.3.7.148.6"></a><h4>Returns</h4>
+<p> a <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstStructure.html"><span class="type">GstStructure</span></a> that remains valid for as long as <em class="parameter"><code>convert</code></em>
+is valid
+or until <a class="link" href="gst-plugins-base-libs-gstvideo.html#gst-video-converter-set-config" title="gst_video_converter_set_config ()"><code class="function">gst_video_converter_set_config()</code></a> is called.</p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-video-converter-set-config"></a><h3>gst_video_converter_set_config ()</h3>
+<pre class="programlisting"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
+gst_video_converter_set_config (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstvideo.html#GstVideoConverter" title="GstVideoConverter"><span class="type">GstVideoConverter</span></a> *convert</code></em>,
+                                <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>
+<p>Set <em class="parameter"><code>config</code></em>
+ as extra configuraion for <em class="parameter"><code>convert</code></em>
+.</p>
+<p>If the parameters in <em class="parameter"><code>config</code></em>
+ can not be set exactly, this function returns
+<a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> and will try to update as much state as possible. The new state can
+then be retrieved and refined with <a class="link" href="gst-plugins-base-libs-gstvideo.html#gst-video-converter-get-config" title="gst_video_converter_get_config ()"><code class="function">gst_video_converter_get_config()</code></a>.</p>
+<p>Look at the <span class="type">GST_VIDEO_CONVERTER_OPT_</span>* fields to check valid configuration
+option and values.</p>
+<div class="refsect3">
+<a name="id-1.2.15.3.7.149.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>convert</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gst-plugins-base-libs-gstvideo.html#GstVideoConverter" title="GstVideoConverter"><span class="type">GstVideoConverter</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>config</p></td>
+<td class="parameter_description"><p> a <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstStructure.html"><span class="type">GstStructure</span></a>. </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>]</span></td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="id-1.2.15.3.7.149.8"></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> when <em class="parameter"><code>config</code></em>
+could be set.</p>
+</div>
+<p class="since">Since: 1.6</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-video-converter-frame"></a><h3>gst_video_converter_frame ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+gst_video_converter_frame (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstvideo.html#GstVideoConverter" title="GstVideoConverter"><span class="type">GstVideoConverter</span></a> *convert</code></em>,
+                           <em class="parameter"><code>const <a class="link" href="gst-plugins-base-libs-gstvideo.html#GstVideoFrame" title="struct GstVideoFrame"><span class="type">GstVideoFrame</span></a> *src</code></em>,
+                           <em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstvideo.html#GstVideoFrame" title="struct GstVideoFrame"><span class="type">GstVideoFrame</span></a> *dest</code></em>);</pre>
+<p>Convert the pixels of <em class="parameter"><code>src</code></em>
+ into <em class="parameter"><code>dest</code></em>
+ using <em class="parameter"><code>convert</code></em>
+.</p>
+<div class="refsect3">
+<a name="id-1.2.15.3.7.150.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>convert</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gst-plugins-base-libs-gstvideo.html#GstVideoConverter" title="GstVideoConverter"><span class="type">GstVideoConverter</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>dest</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gst-plugins-base-libs-gstvideo.html#GstVideoFrame" title="struct GstVideoFrame"><span class="type">GstVideoFrame</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>src</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gst-plugins-base-libs-gstvideo.html#GstVideoFrame" title="struct GstVideoFrame"><span class="type">GstVideoFrame</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<p class="since">Since: 1.6</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-video-multiview-get-mono-modes"></a><h3>gst_video_multiview_get_mono_modes ()</h3>
+<pre class="programlisting">const <a href="https://developer.gnome.org/gobject/unstable/gobject-Generic-values.html#GValue"><span class="returnvalue">GValue</span></a> *
+gst_video_multiview_get_mono_modes (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
+<div class="refsect3">
+<a name="id-1.2.15.3.7.151.4"></a><h4>Returns</h4>
+<p> A const <a href="https://developer.gnome.org/gobject/unstable/gobject-Generic-values.html#GValue"><span class="type">GValue</span></a> containing a list of mono video modes</p>
+<p>Utility function that returns a <a href="https://developer.gnome.org/gobject/unstable/gobject-Generic-values.html#GValue"><span class="type">GValue</span></a> with a GstList of mono video
+modes (mono/left/right) for use in caps negotiations.</p>
+</div>
+<p class="since">Since: 1.6</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-video-multiview-get-unpacked-modes"></a><h3>gst_video_multiview_get_unpacked_modes ()</h3>
+<pre class="programlisting">const <a href="https://developer.gnome.org/gobject/unstable/gobject-Generic-values.html#GValue"><span class="returnvalue">GValue</span></a> *
+gst_video_multiview_get_unpacked_modes
+                               (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
+<div class="refsect3">
+<a name="id-1.2.15.3.7.152.4"></a><h4>Returns</h4>
+<p> A const <a href="https://developer.gnome.org/gobject/unstable/gobject-Generic-values.html#GValue"><span class="type">GValue</span></a> containing a list of 'unpacked' stereo video modes</p>
+<p>Utility function that returns a <a href="https://developer.gnome.org/gobject/unstable/gobject-Generic-values.html#GValue"><span class="type">GValue</span></a> with a GstList of unpacked
+stereo video modes (separated/frame-by-frame/frame-by-frame-multiview)
+for use in caps negotiations.</p>
+</div>
+<p class="since">Since: 1.6</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-video-multiview-get-doubled-height-modes"></a><h3>gst_video_multiview_get_doubled_height_modes ()</h3>
+<pre class="programlisting">const <a href="https://developer.gnome.org/gobject/unstable/gobject-Generic-values.html#GValue"><span class="returnvalue">GValue</span></a> *
+gst_video_multiview_get_doubled_height_modes
+                               (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
+<div class="refsect3">
+<a name="id-1.2.15.3.7.153.4"></a><h4>Returns</h4>
+<p> A const <a href="https://developer.gnome.org/gobject/unstable/gobject-Generic-values.html#GValue"><span class="type">GValue</span></a> containing a list of stereo video modes</p>
+<p>Utility function that returns a <a href="https://developer.gnome.org/gobject/unstable/gobject-Generic-values.html#GValue"><span class="type">GValue</span></a> with a GstList of packed stereo
+video modes with double the height of a single view for use in
+caps negotiations. Currently this is top-bottom and row-interleaved.</p>
+</div>
+<p class="since">Since: 1.6</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-video-multiview-get-doubled-size-modes"></a><h3>gst_video_multiview_get_doubled_size_modes ()</h3>
+<pre class="programlisting">const <a href="https://developer.gnome.org/gobject/unstable/gobject-Generic-values.html#GValue"><span class="returnvalue">GValue</span></a> *
+gst_video_multiview_get_doubled_size_modes
+                               (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
+<div class="refsect3">
+<a name="id-1.2.15.3.7.154.4"></a><h4>Returns</h4>
+<p> A const <a href="https://developer.gnome.org/gobject/unstable/gobject-Generic-values.html#GValue"><span class="type">GValue</span></a> containing a list of stereo video modes</p>
+<p>Utility function that returns a <a href="https://developer.gnome.org/gobject/unstable/gobject-Generic-values.html#GValue"><span class="type">GValue</span></a> with a GstList of packed
+stereo video modes that have double the width/height of a single
+view for use in caps negotiation. Currently this is just
+'checkerboard' layout.</p>
+</div>
+<p class="since">Since: 1.6</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-video-multiview-get-doubled-width-modes"></a><h3>gst_video_multiview_get_doubled_width_modes ()</h3>
+<pre class="programlisting">const <a href="https://developer.gnome.org/gobject/unstable/gobject-Generic-values.html#GValue"><span class="returnvalue">GValue</span></a> *
+gst_video_multiview_get_doubled_width_modes
+                               (<em class="parameter"><code><span class="type">void</span></code></em>);</pre>
+<div class="refsect3">
+<a name="id-1.2.15.3.7.155.4"></a><h4>Returns</h4>
+<p> A const <a href="https://developer.gnome.org/gobject/unstable/gobject-Generic-values.html#GValue"><span class="type">GValue</span></a> containing a list of stereo video modes</p>
+<p>Utility function that returns a <a href="https://developer.gnome.org/gobject/unstable/gobject-Generic-values.html#GValue"><span class="type">GValue</span></a> with a GstList of packed stereo
+video modes with double the width of a single view for use in
+caps negotiations. Currently this is side-by-side, side-by-side-quincunx
+and column-interleaved.</p>
+</div>
+<p class="since">Since: 1.6</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-video-multiview-mode-from-caps-string"></a><h3>gst_video_multiview_mode_from_caps_string ()</h3>
+<pre class="programlisting"><a class="link" href="gst-plugins-base-libs-gstvideo.html#GstVideoMultiviewMode" title="enum GstVideoMultiviewMode"><span class="returnvalue">GstVideoMultiviewMode</span></a>
+gst_video_multiview_mode_from_caps_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> *caps_mview_mode</code></em>);</pre>
+<div class="refsect3">
+<a name="id-1.2.15.3.7.156.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>caps_mview_mode</p></td>
+<td class="parameter_description"><p>multiview-mode field string from caps</p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="id-1.2.15.3.7.156.5"></a><h4>Returns</h4>
+<p> The <a class="link" href="gst-plugins-base-libs-gstvideo.html#GstVideoMultiviewMode" title="enum GstVideoMultiviewMode"><span class="type">GstVideoMultiviewMode</span></a> value</p>
+<p>Given a string from a caps multiview-mode field,
+output the corresponding <a class="link" href="gst-plugins-base-libs-gstvideo.html#GstVideoMultiviewMode" title="enum GstVideoMultiviewMode"><span class="type">GstVideoMultiviewMode</span></a>
+or <a class="link" href="gst-plugins-base-libs-gstvideo.html#GST-VIDEO-MULTIVIEW-MODE-NONE:CAPS"><span class="type">GST_VIDEO_MULTIVIEW_MODE_NONE</span></a></p>
+</div>
+<p class="since">Since: 1.6</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-video-multiview-mode-to-caps-string"></a><h3>gst_video_multiview_mode_to_caps_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_video_multiview_mode_to_caps_string
+                               (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstvideo.html#GstVideoMultiviewMode" title="enum GstVideoMultiviewMode"><span class="type">GstVideoMultiviewMode</span></a> mview_mode</code></em>);</pre>
+<div class="refsect3">
+<a name="id-1.2.15.3.7.157.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>mview_mode</p></td>
+<td class="parameter_description"><p>A <a class="link" href="gst-plugins-base-libs-gstvideo.html#GstVideoMultiviewMode" title="enum GstVideoMultiviewMode"><span class="type">GstVideoMultiviewMode</span></a> value</p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="id-1.2.15.3.7.157.5"></a><h4>Returns</h4>
+<p> The caps string representation of the mode, or NULL if invalid.</p>
+<p>Given a <a class="link" href="gst-plugins-base-libs-gstvideo.html#GstVideoMultiviewMode" title="enum GstVideoMultiviewMode"><span class="type">GstVideoMultiviewMode</span></a> returns the multiview-mode caps string
+for insertion into a caps structure</p>
+</div>
+<p class="since">Since: 1.6</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-video-multiview-guess-half-aspect"></a><h3>gst_video_multiview_guess_half_aspect ()</h3>
+<pre class="programlisting"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
+gst_video_multiview_guess_half_aspect (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstvideo.html#GstVideoMultiviewMode" title="enum GstVideoMultiviewMode"><span class="type">GstVideoMultiviewMode</span></a> mv_mode</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> 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>,
+                                       <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>
+<div class="refsect3">
+<a name="id-1.2.15.3.7.158.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>mv_mode</p></td>
+<td class="parameter_description"><p>A <a class="link" href="gst-plugins-base-libs-gstvideo.html#GstVideoMultiviewMode" title="enum GstVideoMultiviewMode"><span class="type">GstVideoMultiviewMode</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>width</p></td>
+<td class="parameter_description"><p>Video frame width in pixels</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>height</p></td>
+<td class="parameter_description"><p>Video frame height in pixels</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>par_n</p></td>
+<td class="parameter_description"><p>Numerator of the video pixel-aspect-ratio</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>par_d</p></td>
+<td class="parameter_description"><p>Denominator of the video pixel-aspect-ratio</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="id-1.2.15.3.7.158.5"></a><h4>Returns</h4>
+<p> A boolean indicating whether the
+<span class="type">GST_VIDEO_MULTIVIEW_FLAG_HALF_ASPECT</span> flag should be set.</p>
+<p>Utility function that heuristically guess whether a
+frame-packed stereoscopic video contains half width/height
+encoded views, or full-frame views by looking at the
+overall display aspect ratio.</p>
+</div>
+<p class="since">Since: 1.6</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-video-multiview-video-info-change-mode"></a><h3>gst_video_multiview_video_info_change_mode ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+gst_video_multiview_video_info_change_mode
+                               (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstvideo.html#GstVideoInfo" title="struct GstVideoInfo"><span class="type">GstVideoInfo</span></a> *info</code></em>,
+                                <em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstvideo.html#GstVideoMultiviewMode" title="enum GstVideoMultiviewMode"><span class="type">GstVideoMultiviewMode</span></a> out_mview_mode</code></em>,
+                                <em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstvideo.html#GstVideoMultiviewFlags" title="enum GstVideoMultiviewFlags"><span class="type">GstVideoMultiviewFlags</span></a> out_mview_flags</code></em>);</pre>
+<p>Utility function that transforms the width/height/PAR
+and multiview mode and flags of a <a class="link" href="gst-plugins-base-libs-gstvideo.html#GstVideoInfo" title="struct GstVideoInfo"><span class="type">GstVideoInfo</span></a> into
+the requested mode.</p>
+<div class="refsect3">
+<a name="id-1.2.15.3.7.159.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>info</p></td>
+<td class="parameter_description"><p>A <a class="link" href="gst-plugins-base-libs-gstvideo.html#GstVideoInfo" title="struct GstVideoInfo"><span class="type">GstVideoInfo</span></a> structure to operate on</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>out_mview_mode</p></td>
+<td class="parameter_description"><p>A <a class="link" href="gst-plugins-base-libs-gstvideo.html#GstVideoMultiviewMode" title="enum GstVideoMultiviewMode"><span class="type">GstVideoMultiviewMode</span></a> value</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>out_mview_flags</p></td>
+<td class="parameter_description"><p>A set of <a class="link" href="gst-plugins-base-libs-gstvideo.html#GstVideoMultiviewFlags" title="enum GstVideoMultiviewFlags"><span class="type">GstVideoMultiviewFlags</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<p class="since">Since: 1.6</p>
+</div>
 </div>
 <div class="refsect1">
 <a name="gst-plugins-base-libs-gstvideo.other_details"></a><h2>Types and Values</h2>
@@ -3494,7 +4554,7 @@
 <pre class="programlisting">#define GST_META_TAG_VIDEO_STR "video"
 </pre>
 <p>This metadata is relevant for video streams.</p>
-<p class="since">Since 1.2</p>
+<p class="since">Since: 1.2</p>
 </div>
 <hr>
 <div class="refsect2">
@@ -3502,7 +4562,7 @@
 <pre class="programlisting">#define GST_META_TAG_VIDEO_ORIENTATION_STR "orientation"
 </pre>
 <p>This metadata stays relevant as long as video orientation is unchanged.</p>
-<p class="since">Since 1.2</p>
+<p class="since">Since: 1.2</p>
 </div>
 <hr>
 <div class="refsect2">
@@ -3510,7 +4570,7 @@
 <pre class="programlisting">#define GST_META_TAG_VIDEO_SIZE_STR "size"
 </pre>
 <p>This metadata stays relevant as long as video size is unchanged.</p>
-<p class="since">Since 1.2</p>
+<p class="since">Since: 1.2</p>
 </div>
 <hr>
 <div class="refsect2">
@@ -3518,7 +4578,7 @@
 <pre class="programlisting">#define GST_META_TAG_VIDEO_COLORSPACE_STR "colorspace"
 </pre>
 <p>This metadata stays relevant as long as video colorspace is unchanged.</p>
-<p class="since">Since 1.2</p>
+<p class="since">Since: 1.2</p>
 </div>
 <hr>
 <div class="refsect2">
@@ -3914,6 +4974,55 @@
 </td>
 <td class="enum_member_annotations"> </td>
 </tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-VIDEO-FORMAT-A420-10BE:CAPS"></a>GST_VIDEO_FORMAT_A420_10BE</p></td>
+<td class="enum_member_description">
+<p>planar 4:4:2:0 YUV, 10 bits per channel</p>
+</td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-VIDEO-FORMAT-A420-10LE:CAPS"></a>GST_VIDEO_FORMAT_A420_10LE</p></td>
+<td class="enum_member_description">
+<p>planar 4:4:2:0 YUV, 10 bits per channel</p>
+</td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-VIDEO-FORMAT-A422-10BE:CAPS"></a>GST_VIDEO_FORMAT_A422_10BE</p></td>
+<td class="enum_member_description">
+<p>planar 4:4:2:2 YUV, 10 bits per channel</p>
+</td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-VIDEO-FORMAT-A422-10LE:CAPS"></a>GST_VIDEO_FORMAT_A422_10LE</p></td>
+<td class="enum_member_description">
+<p>planar 4:4:2:2 YUV, 10 bits per channel</p>
+</td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-VIDEO-FORMAT-A444-10BE:CAPS"></a>GST_VIDEO_FORMAT_A444_10BE</p></td>
+<td class="enum_member_description">
+<p>planar 4:4:4:4 YUV, 10 bits per channel</p>
+</td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-VIDEO-FORMAT-A444-10LE:CAPS"></a>GST_VIDEO_FORMAT_A444_10LE</p></td>
+<td class="enum_member_description">
+<p>planar 4:4:4:4 YUV, 10 bits per channel</p>
+</td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-VIDEO-FORMAT-NV61:CAPS"></a>GST_VIDEO_FORMAT_NV61</p></td>
+<td class="enum_member_description">
+<p>planar 4:2:2 YUV with interleaved VU plane (Since 1.6)</p>
+</td>
+<td class="enum_member_annotations"> </td>
+</tr>
 </tbody>
 </table></div>
 </div>
@@ -4103,90 +5212,10 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="GstVideoChromaSite"></a><h3>enum GstVideoChromaSite</h3>
-<p>Various Chroma sitings.</p>
-<div class="refsect3">
-<a name="id-1.2.15.3.8.11.4"></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-VIDEO-CHROMA-SITE-UNKNOWN:CAPS"></a>GST_VIDEO_CHROMA_SITE_UNKNOWN</p></td>
-<td class="enum_member_description">
-<p>unknown cositing</p>
-</td>
-<td class="enum_member_annotations"> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-VIDEO-CHROMA-SITE-NONE:CAPS"></a>GST_VIDEO_CHROMA_SITE_NONE</p></td>
-<td class="enum_member_description">
-<p>no cositing</p>
-</td>
-<td class="enum_member_annotations"> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-VIDEO-CHROMA-SITE-H-COSITED:CAPS"></a>GST_VIDEO_CHROMA_SITE_H_COSITED</p></td>
-<td class="enum_member_description">
-<p>chroma is horizontally cosited</p>
-</td>
-<td class="enum_member_annotations"> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-VIDEO-CHROMA-SITE-V-COSITED:CAPS"></a>GST_VIDEO_CHROMA_SITE_V_COSITED</p></td>
-<td class="enum_member_description">
-<p>chroma is vertically cosited</p>
-</td>
-<td class="enum_member_annotations"> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-VIDEO-CHROMA-SITE-ALT-LINE:CAPS"></a>GST_VIDEO_CHROMA_SITE_ALT_LINE</p></td>
-<td class="enum_member_description">
-<p>choma samples are sited on alternate lines</p>
-</td>
-<td class="enum_member_annotations"> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-VIDEO-CHROMA-SITE-COSITED:CAPS"></a>GST_VIDEO_CHROMA_SITE_COSITED</p></td>
-<td class="enum_member_description">
-<p>chroma samples cosited with luma samples</p>
-</td>
-<td class="enum_member_annotations"> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-VIDEO-CHROMA-SITE-JPEG:CAPS"></a>GST_VIDEO_CHROMA_SITE_JPEG</p></td>
-<td class="enum_member_description">
-<p>jpeg style cositing, also for mpeg1 and mjpeg</p>
-</td>
-<td class="enum_member_annotations"> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-VIDEO-CHROMA-SITE-MPEG2:CAPS"></a>GST_VIDEO_CHROMA_SITE_MPEG2</p></td>
-<td class="enum_member_description">
-<p>mpeg2 style cositing</p>
-</td>
-<td class="enum_member_annotations"> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-VIDEO-CHROMA-SITE-DV:CAPS"></a>GST_VIDEO_CHROMA_SITE_DV</p></td>
-<td class="enum_member_description">
-<p>DV style cositing</p>
-</td>
-<td class="enum_member_annotations"> </td>
-</tr>
-</tbody>
-</table></div>
-</div>
-</div>
-<hr>
-<div class="refsect2">
 <a name="GstVideoFormatFlags"></a><h3>enum GstVideoFormatFlags</h3>
 <p>The different video flags that a format info can have.</p>
 <div class="refsect3">
-<a name="id-1.2.15.3.8.12.4"></a><h4>Members</h4>
+<a name="id-1.2.15.3.8.11.4"></a><h4>Members</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="300px" class="enum_members_name">
@@ -4275,7 +5304,7 @@
 <a name="GstVideoPackFlags"></a><h3>enum GstVideoPackFlags</h3>
 <p>The different flags that can be used when packing and unpacking.</p>
 <div class="refsect3">
-<a name="id-1.2.15.3.8.13.4"></a><h4>Members</h4>
+<a name="id-1.2.15.3.8.12.4"></a><h4>Members</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="300px" class="enum_members_name">
@@ -4337,7 +5366,7 @@
 <p>Possible color range values. These constants are defined for 8 bit color
 values and can be scaled for other bit depths.</p>
 <div class="refsect3">
-<a name="id-1.2.15.3.8.17.4"></a><h4>Members</h4>
+<a name="id-1.2.15.3.8.16.4"></a><h4>Members</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="300px" class="enum_members_name">
@@ -4377,7 +5406,7 @@
 <p>The color matrix is used to convert between Y'PbPr and
 non-linear RGB (R'G'B')</p>
 <div class="refsect3">
-<a name="id-1.2.15.3.8.18.4"></a><h4>Members</h4>
+<a name="id-1.2.15.3.8.17.4"></a><h4>Members</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="300px" class="enum_members_name">
@@ -4427,6 +5456,87 @@
 </td>
 <td class="enum_member_annotations"> </td>
 </tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-VIDEO-COLOR-MATRIX-BT2020:CAPS"></a>GST_VIDEO_COLOR_MATRIX_BT2020</p></td>
+<td class="enum_member_description">
+<p>ITU-R BT.2020 color matrix. Since: 1.6.</p>
+</td>
+<td class="enum_member_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstVideoColorPrimaries"></a><h3>enum GstVideoColorPrimaries</h3>
+<p>The color primaries define the how to transform linear RGB values to and from
+the CIE XYZ colorspace.</p>
+<div class="refsect3">
+<a name="id-1.2.15.3.8.18.4"></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-VIDEO-COLOR-PRIMARIES-UNKNOWN:CAPS"></a>GST_VIDEO_COLOR_PRIMARIES_UNKNOWN</p></td>
+<td class="enum_member_description">
+<p>unknown color primaries</p>
+</td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-VIDEO-COLOR-PRIMARIES-BT709:CAPS"></a>GST_VIDEO_COLOR_PRIMARIES_BT709</p></td>
+<td class="enum_member_description">
+<p>BT709 primaries</p>
+</td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-VIDEO-COLOR-PRIMARIES-BT470M:CAPS"></a>GST_VIDEO_COLOR_PRIMARIES_BT470M</p></td>
+<td class="enum_member_description">
+<p>BT470M primaries</p>
+</td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-VIDEO-COLOR-PRIMARIES-BT470BG:CAPS"></a>GST_VIDEO_COLOR_PRIMARIES_BT470BG</p></td>
+<td class="enum_member_description">
+<p>BT470BG primaries</p>
+</td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-VIDEO-COLOR-PRIMARIES-SMPTE170M:CAPS"></a>GST_VIDEO_COLOR_PRIMARIES_SMPTE170M</p></td>
+<td class="enum_member_description">
+<p>SMPTE170M primaries</p>
+</td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-VIDEO-COLOR-PRIMARIES-SMPTE240M:CAPS"></a>GST_VIDEO_COLOR_PRIMARIES_SMPTE240M</p></td>
+<td class="enum_member_description">
+<p>SMPTE240M primaries</p>
+</td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-VIDEO-COLOR-PRIMARIES-FILM:CAPS"></a>GST_VIDEO_COLOR_PRIMARIES_FILM</p></td>
+<td class="enum_member_description">
+<p>Generic film</p>
+</td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-VIDEO-COLOR-PRIMARIES-BT2020:CAPS"></a>GST_VIDEO_COLOR_PRIMARIES_BT2020</p></td>
+<td class="enum_member_description">
+<p>BT2020 primaries. Since: 1.6.</p>
+</td>
+<td class="enum_member_annotations"> </td>
+</tr>
 </tbody>
 </table></div>
 </div>
@@ -4527,70 +5637,12 @@
 </td>
 <td class="enum_member_annotations"> </td>
 </tr>
-</tbody>
-</table></div>
-</div>
-</div>
-<hr>
-<div class="refsect2">
-<a name="GstVideoColorPrimaries"></a><h3>enum GstVideoColorPrimaries</h3>
-<p>The color primaries define the how to transform linear RGB values to and from
-the CIE XYZ colorspace.</p>
-<div class="refsect3">
-<a name="id-1.2.15.3.8.20.4"></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-VIDEO-COLOR-PRIMARIES-UNKNOWN:CAPS"></a>GST_VIDEO_COLOR_PRIMARIES_UNKNOWN</p></td>
+<td class="enum_member_name"><p><a name="GST-VIDEO-TRANSFER-BT2020-12:CAPS"></a>GST_VIDEO_TRANSFER_BT2020_12</p></td>
 <td class="enum_member_description">
-<p>unknown color primaries</p>
-</td>
-<td class="enum_member_annotations"> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-VIDEO-COLOR-PRIMARIES-BT709:CAPS"></a>GST_VIDEO_COLOR_PRIMARIES_BT709</p></td>
-<td class="enum_member_description">
-<p>BT709 primaries</p>
-</td>
-<td class="enum_member_annotations"> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-VIDEO-COLOR-PRIMARIES-BT470M:CAPS"></a>GST_VIDEO_COLOR_PRIMARIES_BT470M</p></td>
-<td class="enum_member_description">
-<p>BT470M primaries</p>
-</td>
-<td class="enum_member_annotations"> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-VIDEO-COLOR-PRIMARIES-BT470BG:CAPS"></a>GST_VIDEO_COLOR_PRIMARIES_BT470BG</p></td>
-<td class="enum_member_description">
-<p>BT470BG primaries</p>
-</td>
-<td class="enum_member_annotations"> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-VIDEO-COLOR-PRIMARIES-SMPTE170M:CAPS"></a>GST_VIDEO_COLOR_PRIMARIES_SMPTE170M</p></td>
-<td class="enum_member_description">
-<p>SMPTE170M primaries</p>
-</td>
-<td class="enum_member_annotations"> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-VIDEO-COLOR-PRIMARIES-SMPTE240M:CAPS"></a>GST_VIDEO_COLOR_PRIMARIES_SMPTE240M</p></td>
-<td class="enum_member_description">
-<p>SMPTE240M primaries</p>
-</td>
-<td class="enum_member_annotations"> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="GST-VIDEO-COLOR-PRIMARIES-FILM:CAPS"></a>GST_VIDEO_COLOR_PRIMARIES_FILM</p></td>
-<td class="enum_member_description">
-<p>Generic film</p>
+<p>Gamma 2.2 curve with a linear segment in the lower
+                               range. Used for BT.2020 with 12 bits per
+                               component. Since: 1.6.</p>
 </td>
 <td class="enum_member_annotations"> </td>
 </tr>
@@ -4610,7 +5662,7 @@
 </pre>
 <p>Structure describing the color info.</p>
 <div class="refsect3">
-<a name="id-1.2.15.3.8.21.5"></a><h4>Members</h4>
+<a name="id-1.2.15.3.8.20.5"></a><h4>Members</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="300px" class="struct_members_name">
@@ -4667,6 +5719,14 @@
 
   gsize                     offset[GST_VIDEO_MAX_PLANES];
   gint                      stride[GST_VIDEO_MAX_PLANES];
+
+  /* Union preserves padded struct size for backwards compat
+   * Consumer code should use the accessor macros for fields */
+  union {
+    struct {
+      GstVideoMultiviewMode     multiview_mode;
+      GstVideoMultiviewFlags    multiview_flags;
+    } abi;
 };
 </pre>
 <p>Information describing image properties. This information can be filled
@@ -4675,7 +5735,7 @@
 <a class="link" href="gst-plugins-base-libs-gstvideo.html#gst-video-frame-map" title="gst_video_frame_map ()"><code class="function">gst_video_frame_map()</code></a>.</p>
 <p>Use the provided macros to access the info in this structure.</p>
 <div class="refsect3">
-<a name="id-1.2.15.3.8.22.6"></a><h4>Members</h4>
+<a name="id-1.2.15.3.8.21.6"></a><h4>Members</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="300px" class="struct_members_name">
@@ -4719,8 +5779,8 @@
 <td class="struct_member_annotations"> </td>
 </tr>
 <tr>
-<td class="struct_member_name"><p><a class="link" href="gst-plugins-base-libs-gstvideo.html#GstVideoChromaSite" title="enum GstVideoChromaSite"><span class="type">GstVideoChromaSite</span></a> <em class="structfield"><code><a name="GstVideoInfo.chroma-site"></a>chroma_site</code></em>;</p></td>
-<td class="struct_member_description"><p>a <a class="link" href="gst-plugins-base-libs-gstvideo.html#GstVideoChromaSite" title="enum GstVideoChromaSite"><span class="type">GstVideoChromaSite</span></a>.</p></td>
+<td class="struct_member_name"><p><a class="link" href="gst-plugins-base-libs-GstVideoChroma.html#GstVideoChromaSite" title="enum GstVideoChromaSite"><span class="type">GstVideoChromaSite</span></a> <em class="structfield"><code><a name="GstVideoInfo.chroma-site"></a>chroma_site</code></em>;</p></td>
+<td class="struct_member_description"><p>a <a class="link" href="gst-plugins-base-libs-GstVideoChroma.html#GstVideoChromaSite" title="enum GstVideoChromaSite"><span class="type">GstVideoChromaSite</span></a>.</p></td>
 <td class="struct_member_annotations"> </td>
 </tr>
 <tr>
@@ -4768,7 +5828,7 @@
 <p>The possible values of the <a class="link" href="gst-plugins-base-libs-gstvideo.html#GstVideoInterlaceMode" title="enum GstVideoInterlaceMode"><span class="type">GstVideoInterlaceMode</span></a> describing the interlace
 mode of the stream.</p>
 <div class="refsect3">
-<a name="id-1.2.15.3.8.23.4"></a><h4>Members</h4>
+<a name="id-1.2.15.3.8.22.4"></a><h4>Members</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="300px" class="enum_members_name">
@@ -4818,10 +5878,336 @@
 </div>
 <hr>
 <div class="refsect2">
+<a name="GstVideoMultiviewMode"></a><h3>enum GstVideoMultiviewMode</h3>
+<p>All possible stereoscopic 3D and multiview representations.
+In conjunction with <a class="link" href="gst-plugins-base-libs-gstvideo.html#GstVideoMultiviewFlags" title="enum GstVideoMultiviewFlags"><span class="type">GstVideoMultiviewFlags</span></a>, describes how
+multiview content is being transported in the stream.</p>
+<div class="refsect3">
+<a name="id-1.2.15.3.8.23.4"></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-VIDEO-MULTIVIEW-MODE-NONE:CAPS"></a>GST_VIDEO_MULTIVIEW_MODE_NONE</p></td>
+<td class="enum_member_description">
+<p>A special value indicating
+no multiview information. Used in GstVideoInfo and other places to
+indicate that no specific multiview handling has been requested or
+provided. This value is never carried on caps.</p>
+</td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-VIDEO-MULTIVIEW-MODE-MONO:CAPS"></a>GST_VIDEO_MULTIVIEW_MODE_MONO</p></td>
+<td class="enum_member_description">
+<p>All frames are monoscopic.</p>
+</td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-VIDEO-MULTIVIEW-MODE-LEFT:CAPS"></a>GST_VIDEO_MULTIVIEW_MODE_LEFT</p></td>
+<td class="enum_member_description">
+<p>All frames represent a left-eye view.</p>
+</td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-VIDEO-MULTIVIEW-MODE-RIGHT:CAPS"></a>GST_VIDEO_MULTIVIEW_MODE_RIGHT</p></td>
+<td class="enum_member_description">
+<p>All frames represent a right-eye view.</p>
+</td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-VIDEO-MULTIVIEW-MODE-SIDE-BY-SIDE:CAPS"></a>GST_VIDEO_MULTIVIEW_MODE_SIDE_BY_SIDE</p></td>
+<td class="enum_member_description">
+<p>Left and right eye views are
+provided in the left and right half of the frame respectively.</p>
+</td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-VIDEO-MULTIVIEW-MODE-SIDE-BY-SIDE-QUINCUNX:CAPS"></a>GST_VIDEO_MULTIVIEW_MODE_SIDE_BY_SIDE_QUINCUNX</p></td>
+<td class="enum_member_description">
+<p>Left and right eye
+views are provided in the left and right half of the frame, but
+have been sampled using quincunx method, with half-pixel offset
+between the 2 views.</p>
+</td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-VIDEO-MULTIVIEW-MODE-COLUMN-INTERLEAVED:CAPS"></a>GST_VIDEO_MULTIVIEW_MODE_COLUMN_INTERLEAVED</p></td>
+<td class="enum_member_description">
+<p>Alternating vertical
+columns of pixels represent the left and right eye view respectively.</p>
+</td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-VIDEO-MULTIVIEW-MODE-ROW-INTERLEAVED:CAPS"></a>GST_VIDEO_MULTIVIEW_MODE_ROW_INTERLEAVED</p></td>
+<td class="enum_member_description">
+<p>Alternating horizontal
+rows of pixels represent the left and right eye view respectively.</p>
+</td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-VIDEO-MULTIVIEW-MODE-TOP-BOTTOM:CAPS"></a>GST_VIDEO_MULTIVIEW_MODE_TOP_BOTTOM</p></td>
+<td class="enum_member_description">
+<p>The top half of the frame
+contains the left eye, and the bottom half the right eye.</p>
+</td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-VIDEO-MULTIVIEW-MODE-CHECKERBOARD:CAPS"></a>GST_VIDEO_MULTIVIEW_MODE_CHECKERBOARD</p></td>
+<td class="enum_member_description">
+<p>Pixels are arranged with
+alternating pixels representing left and right eye views in a
+checkerboard fashion.</p>
+</td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-VIDEO-MULTIVIEW-MODE-FRAME-BY-FRAME:CAPS"></a>GST_VIDEO_MULTIVIEW_MODE_FRAME_BY_FRAME</p></td>
+<td class="enum_member_description">
+<p>Left and right eye views
+are provided in separate frames alternately.</p>
+</td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-VIDEO-MULTIVIEW-MODE-MULTIVIEW-FRAME-BY-FRAME:CAPS"></a>GST_VIDEO_MULTIVIEW_MODE_MULTIVIEW_FRAME_BY_FRAME</p></td>
+<td class="enum_member_description">
+<p>Multiple
+independent views are provided in separate frames in sequence.
+This method only applies to raw video buffers at the moment.
+Specific view identification is via the <span class="type">GstVideoMultiviewMeta</span>
+and <a class="link" href="gst-plugins-base-libs-gstvideometa.html#GstVideoMeta" title="struct GstVideoMeta"><span class="type">GstVideoMeta</span></a>(s) on raw video buffers.</p>
+</td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-VIDEO-MULTIVIEW-MODE-SEPARATED:CAPS"></a>GST_VIDEO_MULTIVIEW_MODE_SEPARATED</p></td>
+<td class="enum_member_description">
+<p>Multiple views are
+provided as separate <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstMemory.html"><span class="type">GstMemory</span></a> framebuffers attached to each
+<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstBuffer.html"><span class="type">GstBuffer</span></a>, described by the <span class="type">GstVideoMultiviewMeta</span>
+and <a class="link" href="gst-plugins-base-libs-gstvideometa.html#GstVideoMeta" title="struct GstVideoMeta"><span class="type">GstVideoMeta</span></a>(s)</p>
+</td>
+<td class="enum_member_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstVideoMultiviewFramePacking"></a><h3>enum GstVideoMultiviewFramePacking</h3>
+<p><a class="link" href="gst-plugins-base-libs-gstvideo.html#GstVideoMultiviewFramePacking" title="enum GstVideoMultiviewFramePacking"><span class="type">GstVideoMultiviewFramePacking</span></a> represents the subset of <a class="link" href="gst-plugins-base-libs-gstvideo.html#GstVideoMultiviewMode" title="enum GstVideoMultiviewMode"><span class="type">GstVideoMultiviewMode</span></a>
+values that can be applied to any video frame without needing extra metadata.
+It can be used by elements that provide a property to override the
+multiview interpretation of a video stream when the video doesn't contain
+any markers.</p>
+<p>This enum is used (for example) on playbin, to re-interpret a played
+video stream as a stereoscopic video. The individual enum values are
+equivalent to and have the same value as the matching <a class="link" href="gst-plugins-base-libs-gstvideo.html#GstVideoMultiviewMode" title="enum GstVideoMultiviewMode"><span class="type">GstVideoMultiviewMode</span></a>.</p>
+<div class="refsect3">
+<a name="id-1.2.15.3.8.24.5"></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-VIDEO-MULTIVIEW-FRAME-PACKING-NONE:CAPS"></a>GST_VIDEO_MULTIVIEW_FRAME_PACKING_NONE</p></td>
+<td class="enum_member_description">
+<p>A special value indicating
+no frame packing info.</p>
+</td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-VIDEO-MULTIVIEW-FRAME-PACKING-MONO:CAPS"></a>GST_VIDEO_MULTIVIEW_FRAME_PACKING_MONO</p></td>
+<td class="enum_member_description">
+<p>All frames are monoscopic.</p>
+</td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-VIDEO-MULTIVIEW-FRAME-PACKING-LEFT:CAPS"></a>GST_VIDEO_MULTIVIEW_FRAME_PACKING_LEFT</p></td>
+<td class="enum_member_description">
+<p>All frames represent a left-eye view.</p>
+</td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-VIDEO-MULTIVIEW-FRAME-PACKING-RIGHT:CAPS"></a>GST_VIDEO_MULTIVIEW_FRAME_PACKING_RIGHT</p></td>
+<td class="enum_member_description">
+<p>All frames represent a right-eye view.</p>
+</td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-VIDEO-MULTIVIEW-FRAME-PACKING-SIDE-BY-SIDE:CAPS"></a>GST_VIDEO_MULTIVIEW_FRAME_PACKING_SIDE_BY_SIDE</p></td>
+<td class="enum_member_description">
+<p>Left and right eye views are
+provided in the left and right half of the frame respectively.</p>
+</td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-VIDEO-MULTIVIEW-FRAME-PACKING-SIDE-BY-SIDE-QUINCUNX:CAPS"></a>GST_VIDEO_MULTIVIEW_FRAME_PACKING_SIDE_BY_SIDE_QUINCUNX</p></td>
+<td class="enum_member_description">
+<p>Left and right eye
+views are provided in the left and right half of the frame, but
+have been sampled using quincunx method, with half-pixel offset
+between the 2 views.</p>
+</td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-VIDEO-MULTIVIEW-FRAME-PACKING-COLUMN-INTERLEAVED:CAPS"></a>GST_VIDEO_MULTIVIEW_FRAME_PACKING_COLUMN_INTERLEAVED</p></td>
+<td class="enum_member_description">
+<p>Alternating vertical
+columns of pixels represent the left and right eye view respectively.</p>
+</td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-VIDEO-MULTIVIEW-FRAME-PACKING-ROW-INTERLEAVED:CAPS"></a>GST_VIDEO_MULTIVIEW_FRAME_PACKING_ROW_INTERLEAVED</p></td>
+<td class="enum_member_description">
+<p>Alternating horizontal
+rows of pixels represent the left and right eye view respectively.</p>
+</td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-VIDEO-MULTIVIEW-FRAME-PACKING-TOP-BOTTOM:CAPS"></a>GST_VIDEO_MULTIVIEW_FRAME_PACKING_TOP_BOTTOM</p></td>
+<td class="enum_member_description">
+<p>The top half of the frame
+contains the left eye, and the bottom half the right eye.</p>
+</td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-VIDEO-MULTIVIEW-FRAME-PACKING-CHECKERBOARD:CAPS"></a>GST_VIDEO_MULTIVIEW_FRAME_PACKING_CHECKERBOARD</p></td>
+<td class="enum_member_description">
+<p>Pixels are arranged with
+alternating pixels representing left and right eye views in a
+checkerboard fashion.</p>
+</td>
+<td class="enum_member_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstVideoMultiviewFlags"></a><h3>enum GstVideoMultiviewFlags</h3>
+<p>GstVideoMultiviewFlags are used to indicate extra properties of a
+stereo/multiview stream beyond the frame layout and buffer mapping
+that is conveyed in the <span class="type">GstMultiviewMode</span>.</p>
+<div class="refsect3">
+<a name="id-1.2.15.3.8.25.4"></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-VIDEO-MULTIVIEW-FLAGS-NONE:CAPS"></a>GST_VIDEO_MULTIVIEW_FLAGS_NONE</p></td>
+<td class="enum_member_description">
+<p>No flags</p>
+</td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-VIDEO-MULTIVIEW-FLAGS-RIGHT-VIEW-FIRST:CAPS"></a>GST_VIDEO_MULTIVIEW_FLAGS_RIGHT_VIEW_FIRST</p></td>
+<td class="enum_member_description">
+<p>For stereo streams, the
+    normal arrangement of left and right views is reversed.</p>
+</td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-VIDEO-MULTIVIEW-FLAGS-LEFT-FLIPPED:CAPS"></a>GST_VIDEO_MULTIVIEW_FLAGS_LEFT_FLIPPED</p></td>
+<td class="enum_member_description">
+<p>The left view is vertically
+    mirrored.</p>
+</td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-VIDEO-MULTIVIEW-FLAGS-LEFT-FLOPPED:CAPS"></a>GST_VIDEO_MULTIVIEW_FLAGS_LEFT_FLOPPED</p></td>
+<td class="enum_member_description">
+<p>The left view is horizontally
+    mirrored.</p>
+</td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-VIDEO-MULTIVIEW-FLAGS-RIGHT-FLIPPED:CAPS"></a>GST_VIDEO_MULTIVIEW_FLAGS_RIGHT_FLIPPED</p></td>
+<td class="enum_member_description">
+<p>The right view is
+    vertically mirrored.</p>
+</td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-VIDEO-MULTIVIEW-FLAGS-RIGHT-FLOPPED:CAPS"></a>GST_VIDEO_MULTIVIEW_FLAGS_RIGHT_FLOPPED</p></td>
+<td class="enum_member_description">
+<p>The right view is
+    horizontally mirrored.</p>
+</td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-VIDEO-MULTIVIEW-FLAGS-HALF-ASPECT:CAPS"></a>GST_VIDEO_MULTIVIEW_FLAGS_HALF_ASPECT</p></td>
+<td class="enum_member_description">
+<p>For frame-packed
+    multiview modes, indicates that the individual
+    views have been encoded with half the true width or height
+    and should be scaled back up for display. This flag
+    is used for overriding input layout interpretation
+    by adjusting pixel-aspect-ratio.
+    For side-by-side, column interleaved or checkerboard packings, the
+    pixel width will be doubled. For row interleaved and top-bottom
+    encodings, pixel height will be doubled.</p>
+</td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-VIDEO-MULTIVIEW-FLAGS-MIXED-MONO:CAPS"></a>GST_VIDEO_MULTIVIEW_FLAGS_MIXED_MONO</p></td>
+<td class="enum_member_description">
+<p>The video stream contains both
+    mono and multiview portions, signalled on each buffer by the
+    absence or presence of the <em class="parameter"><code>GST_VIDEO_BUFFER_FLAG_MULTIPLE_VIEW</code></em>
+
+    buffer flag.</p>
+</td>
+<td class="enum_member_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<hr>
+<div class="refsect2">
 <a name="GstVideoFlags"></a><h3>enum GstVideoFlags</h3>
 <p>Extra video flags</p>
 <div class="refsect3">
-<a name="id-1.2.15.3.8.24.4"></a><h4>Members</h4>
+<a name="id-1.2.15.3.8.26.4"></a><h4>Members</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="300px" class="enum_members_name">
@@ -4873,7 +6259,7 @@
 </pre>
 <p>A video frame obtained from <a class="link" href="gst-plugins-base-libs-gstvideo.html#gst-video-frame-map" title="gst_video_frame_map ()"><code class="function">gst_video_frame_map()</code></a></p>
 <div class="refsect3">
-<a name="id-1.2.15.3.8.25.5"></a><h4>Members</h4>
+<a name="id-1.2.15.3.8.27.5"></a><h4>Members</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="300px" class="struct_members_name">
@@ -4888,8 +6274,8 @@
 </tr>
 <tr>
 <td class="struct_member_name"><p><a class="link" href="gst-plugins-base-libs-gstvideo.html#GstVideoFrameFlags" title="enum GstVideoFrameFlags"><span class="type">GstVideoFrameFlags</span></a> <em class="structfield"><code><a name="GstVideoFrame.flags"></a>flags</code></em>;</p></td>
-<td> </td>
-<td> </td>
+<td class="struct_member_description"><p><a class="link" href="gst-plugins-base-libs-gstvideo.html#GstVideoFrameFlags" title="enum GstVideoFrameFlags"><span class="type">GstVideoFrameFlags</span></a> for the frame</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/GstBuffer.html"><span class="type">GstBuffer</span></a> *<em class="structfield"><code><a name="GstVideoFrame.buffer"></a>buffer</code></em>;</p></td>
@@ -4926,7 +6312,7 @@
 <a name="GstVideoFrameFlags"></a><h3>enum GstVideoFrameFlags</h3>
 <p>Extra video frame flags</p>
 <div class="refsect3">
-<a name="id-1.2.15.3.8.26.4"></a><h4>Members</h4>
+<a name="id-1.2.15.3.8.28.4"></a><h4>Members</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="300px" class="enum_members_name">
@@ -4945,7 +6331,7 @@
 <td class="enum_member_name"><p><a name="GST-VIDEO-FRAME-FLAG-INTERLACED:CAPS"></a>GST_VIDEO_FRAME_FLAG_INTERLACED</p></td>
 <td class="enum_member_description">
 <p>The video frame is interlaced. In mixed
-          interlace-mode, this flags specifies if the frame is interlace or
+          interlace-mode, this flag specifies if the frame is interlaced or
           progressive.</p>
 </td>
 <td class="enum_member_annotations"> </td>
@@ -4971,6 +6357,22 @@
 </td>
 <td class="enum_member_annotations"> </td>
 </tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-VIDEO-FRAME-FLAG-MULTIPLE-VIEW:CAPS"></a>GST_VIDEO_FRAME_FLAG_MULTIPLE_VIEW</p></td>
+<td class="enum_member_description">
+<p>The video contains one or
+    more non-mono views</p>
+</td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-VIDEO-FRAME-FLAG-FIRST-IN-BUNDLE:CAPS"></a>GST_VIDEO_FRAME_FLAG_FIRST_IN_BUNDLE</p></td>
+<td class="enum_member_description">
+<p>The video frame is the first
+    in a set of corresponding views provided as sequential frames.</p>
+</td>
+<td class="enum_member_annotations"> </td>
+</tr>
 </tbody>
 </table></div>
 </div>
@@ -4978,9 +6380,10 @@
 <hr>
 <div class="refsect2">
 <a name="GstVideoBufferFlags"></a><h3>enum GstVideoBufferFlags</h3>
-<p>Additional video buffer flags.</p>
+<p>Additional video buffer flags. These flags can potentially be used on any
+buffers carrying video data - even encoded data.</p>
 <div class="refsect3">
-<a name="id-1.2.15.3.8.27.4"></a><h4>Members</h4>
+<a name="id-1.2.15.3.8.29.4"></a><h4>Members</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="300px" class="enum_members_name">
@@ -5025,9 +6428,32 @@
 <td class="enum_member_annotations"> </td>
 </tr>
 <tr>
+<td class="enum_member_name"><p><a name="GST-VIDEO-BUFFER-FLAG-MULTIPLE-VIEW:CAPS"></a>GST_VIDEO_BUFFER_FLAG_MULTIPLE_VIEW</p></td>
+<td class="enum_member_description">
+<p>The <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstBuffer.html"><span class="type">GstBuffer</span></a> contains one or more specific views,
+                                    such as left or right eye view. This flags is set on
+                                    any buffer that contains non-mono content - even for
+                                    streams that contain only a single viewpoint. In mixed
+                                    mono / non-mono streams, the absense of the flag marks
+                                    mono buffers.</p>
+</td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-VIDEO-BUFFER-FLAG-FIRST-IN-BUNDLE:CAPS"></a>GST_VIDEO_BUFFER_FLAG_FIRST_IN_BUNDLE</p></td>
+<td class="enum_member_description">
+<p>When conveying stereo/multiview content with
+                                    frame-by-frame methods, this flag marks the first buffer
+                                     in a bundle of frames that belong together.</p>
+</td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
 <td class="enum_member_name"><p><a name="GST-VIDEO-BUFFER-FLAG-LAST:CAPS"></a>GST_VIDEO_BUFFER_FLAG_LAST</p></td>
-<td> </td>
-<td> </td>
+<td class="enum_member_description">
+<p>Offset to define more flags</p>
+</td>
+<td class="enum_member_annotations"> </td>
 </tr>
 </tbody>
 </table></div>
@@ -5038,7 +6464,7 @@
 <a name="GstVideoTileType"></a><h3>enum GstVideoTileType</h3>
 <p>Enum value describing the most common tiling types.</p>
 <div class="refsect3">
-<a name="id-1.2.15.3.8.28.4"></a><h4>Members</h4>
+<a name="id-1.2.15.3.8.30.4"></a><h4>Members</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="300px" class="enum_members_name">
@@ -5062,7 +6488,7 @@
 <a name="GstVideoTileMode"></a><h3>enum GstVideoTileMode</h3>
 <p>Enum value describing the available tiling modes.</p>
 <div class="refsect3">
-<a name="id-1.2.15.3.8.29.4"></a><h4>Members</h4>
+<a name="id-1.2.15.3.8.31.4"></a><h4>Members</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="300px" class="enum_members_name">
@@ -5091,10 +6517,14 @@
 </table></div>
 </div>
 </div>
+<hr>
+<div class="refsect2">
+<a name="GstVideoConverter"></a><h3>GstVideoConverter</h3>
+<pre class="programlisting">typedef struct _GstVideoConverter GstVideoConverter;</pre>
+</div>
 </div>
 </div>
 <div class="footer">
-<hr>
-          Generated by GTK-Doc V1.21</div>
+<hr>Generated by GTK-Doc V1.24</div>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/libs/html/gst-plugins-base-libs-gstvideofilter.html b/docs/libs/html/gst-plugins-base-libs-gstvideofilter.html
index bedf812..62654cc 100644
--- a/docs/libs/html/gst-plugins-base-libs-gstvideofilter.html
+++ b/docs/libs/html/gst-plugins-base-libs-gstvideofilter.html
@@ -2,13 +2,13 @@
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>GStreamer Base Plugins 1.0 Library Reference Manual: gstvideofilter</title>
+<title>gstvideofilter: GStreamer Base 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 Base Plugins 1.0 Library Reference Manual">
 <link rel="up" href="gstreamer-video.html" title="Video Library">
 <link rel="prev" href="gst-plugins-base-libs-gstvideooverlaycomposition.html" title="gstvideooverlaycomposition">
-<link rel="next" href="gst-plugins-base-libs-gstvideosink.html" title="gstvideosink">
-<meta name="generator" content="GTK-Doc V1.21 (XML mode)">
+<link rel="next" href="gst-plugins-base-libs-GstVideoDither.html" title="GstVideoDither">
+<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">
@@ -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="gstreamer-video.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
 <td><a accesskey="p" href="gst-plugins-base-libs-gstvideooverlaycomposition.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
-<td><a accesskey="n" href="gst-plugins-base-libs-gstvideosink.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
+<td><a accesskey="n" href="gst-plugins-base-libs-GstVideoDither.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
 </tr></table>
 <div class="refentry">
 <a name="gst-plugins-base-libs-gstvideofilter"></a><div class="titlepage"></div>
@@ -80,6 +80,7 @@
 </div>
 <div class="refsect1">
 <a name="gst-plugins-base-libs-gstvideofilter.functions_details"></a><h2>Functions</h2>
+<p></p>
 </div>
 <div class="refsect1">
 <a name="gst-plugins-base-libs-gstvideofilter.other_details"></a><h2>Types and Values</h2>
@@ -140,7 +141,6 @@
 </div>
 </div>
 <div class="footer">
-<hr>
-          Generated by GTK-Doc V1.21</div>
+<hr>Generated by GTK-Doc V1.24</div>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/libs/html/gst-plugins-base-libs-gstvideometa.html b/docs/libs/html/gst-plugins-base-libs-gstvideometa.html
index 01c19aa..b128ce1 100644
--- a/docs/libs/html/gst-plugins-base-libs-gstvideometa.html
+++ b/docs/libs/html/gst-plugins-base-libs-gstvideometa.html
@@ -2,13 +2,13 @@
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>GStreamer Base Plugins 1.0 Library Reference Manual: gstvideometa</title>
+<title>gstvideometa: GStreamer Base 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 Base Plugins 1.0 Library Reference Manual">
 <link rel="up" href="gstreamer-video.html" title="Video Library">
 <link rel="prev" href="gst-plugins-base-libs-gstvideo.html" title="gstvideo">
 <link rel="next" href="gst-plugins-base-libs-gstvideooverlaycomposition.html" title="gstvideooverlaycomposition">
-<meta name="generator" content="GTK-Doc V1.21 (XML mode)">
+<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">
@@ -79,9 +79,11 @@
 </td>
 </tr>
 <tr>
-<td class="define_keyword">#define</td>
+<td class="function_type">
+<a class="link" href="gst-plugins-base-libs-gstvideometa.html#GstVideoMeta" title="struct GstVideoMeta"><span class="returnvalue">GstVideoMeta</span></a> *
+</td>
 <td class="function_name">
-<a class="link" href="gst-plugins-base-libs-gstvideometa.html#gst-buffer-get-video-meta" title="gst_buffer_get_video_meta()">gst_buffer_get_video_meta</a><span class="c_punctuation">()</span>
+<a class="link" href="gst-plugins-base-libs-gstvideometa.html#gst-buffer-get-video-meta" title="gst_buffer_get_video_meta ()">gst_buffer_get_video_meta</a> <span class="c_punctuation">()</span>
 </td>
 </tr>
 <tr>
@@ -273,7 +275,6 @@
 <div class="refsect3">
 <a name="id-1.2.15.4.7.2.6"></a><h4>Returns</h4>
 <p> TRUE if the map operation was successful.</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -314,7 +315,6 @@
 <div class="refsect3">
 <a name="id-1.2.15.4.7.3.6"></a><h4>Returns</h4>
 <p> TRUE if the memory was successfully unmapped.</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -380,8 +380,8 @@
 <div class="refsect3">
 <a name="id-1.2.15.4.7.5.7"></a><h4>Returns</h4>
 <p> the <a class="link" href="gst-plugins-base-libs-gstvideometa.html#GstVideoMeta" title="struct GstVideoMeta"><span class="type">GstVideoMeta</span></a> on <em class="parameter"><code>buffer</code></em>
-.</p>
-<p></p>
+. </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>
@@ -453,15 +453,42 @@
 <div class="refsect3">
 <a name="id-1.2.15.4.7.6.6"></a><h4>Returns</h4>
 <p> the <a class="link" href="gst-plugins-base-libs-gstvideometa.html#GstVideoMeta" title="struct GstVideoMeta"><span class="type">GstVideoMeta</span></a> on <em class="parameter"><code>buffer</code></em>
-.</p>
-<p></p>
+. </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-buffer-get-video-meta"></a><h3>gst_buffer_get_video_meta()</h3>
-<pre class="programlisting">#define gst_buffer_get_video_meta(b) ((GstVideoMeta*)gst_buffer_get_meta((b),GST_VIDEO_META_API_TYPE))
-</pre>
+<a name="gst-buffer-get-video-meta"></a><h3>gst_buffer_get_video_meta ()</h3>
+<pre class="programlisting"><a class="link" href="gst-plugins-base-libs-gstvideometa.html#GstVideoMeta" title="struct GstVideoMeta"><span class="returnvalue">GstVideoMeta</span></a> *
+gst_buffer_get_video_meta (<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>Find the <a class="link" href="gst-plugins-base-libs-gstvideometa.html#GstVideoMeta" title="struct GstVideoMeta"><span class="type">GstVideoMeta</span></a> on <em class="parameter"><code>buffer</code></em>
+ with the lowest <em class="parameter"><code>id</code></em>
+.</p>
+<p>Buffers can contain multiple <a class="link" href="gst-plugins-base-libs-gstvideometa.html#GstVideoMeta" title="struct GstVideoMeta"><span class="type">GstVideoMeta</span></a> metadata items when dealing with
+multiview buffers.</p>
+<div class="refsect3">
+<a name="id-1.2.15.4.7.7.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>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.15.4.7.7.7"></a><h4>Returns</h4>
+<p> the <a class="link" href="gst-plugins-base-libs-gstvideometa.html#GstVideoMeta" title="struct GstVideoMeta"><span class="type">GstVideoMeta</span></a> with lowest id (usually 0) or <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> when there
+is no such metadata on <em class="parameter"><code>buffer</code></em>
+. </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">
@@ -501,8 +528,8 @@
 <p> the <a class="link" href="gst-plugins-base-libs-gstvideometa.html#GstVideoMeta" title="struct GstVideoMeta"><span class="type">GstVideoMeta</span></a> with <em class="parameter"><code>id</code></em>
 or <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> when there is no such metadata
 on <em class="parameter"><code>buffer</code></em>
-.</p>
-<p></p>
+. </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>
@@ -576,8 +603,8 @@
 <div class="refsect3">
 <a name="id-1.2.15.4.7.11.6"></a><h4>Returns</h4>
 <p> the <a class="link" href="gst-plugins-base-libs-gstvideometa.html#GstVideoRegionOfInterestMeta" title="GstVideoRegionOfInterestMeta"><span class="type">GstVideoRegionOfInterestMeta</span></a> on <em class="parameter"><code>buffer</code></em>
-.</p>
-<p></p>
+. </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>
@@ -639,8 +666,8 @@
 <div class="refsect3">
 <a name="id-1.2.15.4.7.12.6"></a><h4>Returns</h4>
 <p> the <a class="link" href="gst-plugins-base-libs-gstvideometa.html#GstVideoRegionOfInterestMeta" title="GstVideoRegionOfInterestMeta"><span class="type">GstVideoRegionOfInterestMeta</span></a> on <em class="parameter"><code>buffer</code></em>
-.</p>
-<p></p>
+. </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>
@@ -684,11 +711,11 @@
 </div>
 <div class="refsect3">
 <a name="id-1.2.15.4.7.14.7"></a><h4>Returns</h4>
-<p> the <span class="type">GstVideoeRegionOfInterestMeta</span> with <em class="parameter"><code>id</code></em>
+<p> the <a class="link" href="gst-plugins-base-libs-gstvideometa.html#GstVideoRegionOfInterestMeta" title="GstVideoRegionOfInterestMeta"><span class="type">GstVideoRegionOfInterestMeta</span></a> with <em class="parameter"><code>id</code></em>
 or <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> when there is
 no such metadata on <em class="parameter"><code>buffer</code></em>
-.</p>
-<p></p>
+. </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>
@@ -729,11 +756,26 @@
 <td class="parameter_annotations"> </td>
 </tr>
 <tr>
-<td class="parameter_name"><p>upload</p></td>
-<td class="parameter_description"><p>the function to upload the buffer to a specific texture ID</p></td>
+<td class="parameter_name"><p>texture_orientation</p></td>
+<td class="parameter_description"><p>the <span class="type">GstVideoGLTextureOrientation</span></p></td>
 <td class="parameter_annotations"> </td>
 </tr>
 <tr>
+<td class="parameter_name"><p>n_textures</p></td>
+<td class="parameter_description"><p>the number of textures</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>texture_type</p></td>
+<td class="parameter_description"><p>array of <span class="type">GstVideoGLTextureType</span></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>upload</p></td>
+<td class="parameter_description"><p> the function to upload the buffer to a specific texture ID. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="The callback is valid only during the call to the method."><span class="acronym">scope call</span></acronym>]</span></td>
+</tr>
+<tr>
 <td class="parameter_name"><p>user_data</p></td>
 <td class="parameter_description"><p>user data for the implementor of <em class="parameter"><code>upload</code></em>
 </p></td>
@@ -741,15 +783,15 @@
 </tr>
 <tr>
 <td class="parameter_name"><p>user_data_copy</p></td>
-<td class="parameter_description"><p>function to copy <em class="parameter"><code>user_data</code></em>
-</p></td>
-<td class="parameter_annotations"> </td>
+<td class="parameter_description"><p> function to copy <em class="parameter"><code>user_data</code></em>
+. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="The callback is valid only during the call to the method."><span class="acronym">scope call</span></acronym>]</span></td>
 </tr>
 <tr>
 <td class="parameter_name"><p>user_data_free</p></td>
-<td class="parameter_description"><p>function to free <em class="parameter"><code>user_data</code></em>
-</p></td>
-<td class="parameter_annotations"> </td>
+<td class="parameter_description"><p> function to free <em class="parameter"><code>user_data</code></em>
+. </p></td>
+<td class="parameter_annotations"><span class="annotation">[<acronym title="The callback is valid only during the call to the method."><span class="acronym">scope call</span></acronym>]</span></td>
 </tr>
 </tbody>
 </table></div>
@@ -757,8 +799,8 @@
 <div class="refsect3">
 <a name="id-1.2.15.4.7.16.6"></a><h4>Returns</h4>
 <p> the <a class="link" href="gst-plugins-base-libs-gstvideometa.html#GstVideoGLTextureUploadMeta" title="struct GstVideoGLTextureUploadMeta"><span class="type">GstVideoGLTextureUploadMeta</span></a> on <em class="parameter"><code>buffer</code></em>
-.</p>
-<p></p>
+. </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>
@@ -800,7 +842,6 @@
 <div class="refsect3">
 <a name="id-1.2.15.4.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 uploading succeeded, <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> otherwise.</p>
-<p></p>
 </div>
 </div>
 </div>
@@ -1048,13 +1089,13 @@
 </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="GstVideoRegionOfInterestMeta.w"></a>w</code></em>;</p></td>
-<td> </td>
-<td> </td>
+<td class="struct_member_description"><p>bounding box width</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="GstVideoRegionOfInterestMeta.h"></a>h</code></em>;</p></td>
-<td> </td>
-<td> </td>
+<td class="struct_member_description"><p>bounding box height</p></td>
+<td class="struct_member_annotations"> </td>
 </tr>
 </tbody>
 </table></div>
@@ -1070,7 +1111,7 @@
 <p>When this option is enabled on the bufferpool,
 <em class="parameter"><code>GST_BUFFER_POOL_OPTION_VIDEO_META</code></em>
  should also be enabled.</p>
-<p class="since">Since 1.2.2</p>
+<p class="since">Since: 1.2.2</p>
 </div>
 <hr>
 <div class="refsect2">
@@ -1123,7 +1164,6 @@
 </div>
 </div>
 <div class="footer">
-<hr>
-          Generated by GTK-Doc V1.21</div>
+<hr>Generated by GTK-Doc V1.24</div>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/libs/html/gst-plugins-base-libs-gstvideoorientation.html b/docs/libs/html/gst-plugins-base-libs-gstvideoorientation.html
index 6d4d86c..45a1ab1 100644
--- a/docs/libs/html/gst-plugins-base-libs-gstvideoorientation.html
+++ b/docs/libs/html/gst-plugins-base-libs-gstvideoorientation.html
@@ -2,13 +2,13 @@
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>GStreamer Base Plugins 1.0 Library Reference Manual: gstvideoorientation</title>
+<title>gstvideoorientation: GStreamer Base 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 Base Plugins 1.0 Library Reference Manual">
 <link rel="up" href="gstreamer-video.html" title="Video Library">
 <link rel="prev" href="gst-plugins-base-libs-gstcolorbalancechannel.html" title="gstcolorbalancechannel">
 <link rel="next" href="gst-plugins-base-libs-gstvideooverlay.html" title="gstvideooverlay">
-<meta name="generator" content="GTK-Doc V1.21 (XML mode)">
+<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">
@@ -152,7 +152,7 @@
                                    <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a> *center</code></em>);</pre>
 <p>Get the horizontal centering offset from the given object.</p>
 <div class="refsect3">
-<a name="id-1.2.15.10.9.2.5"></a><h4>Parameters</h4>
+<a name="id-1.2.15.14.9.2.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -174,9 +174,8 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.15.10.9.2.6"></a><h4>Returns</h4>
+<a name="id-1.2.15.14.9.2.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> in case the element supports centering</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -187,7 +186,7 @@
                                  <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> *flip</code></em>);</pre>
 <p>Get the horizontal flipping state (<a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> for flipped) from the given object.</p>
 <div class="refsect3">
-<a name="id-1.2.15.10.9.3.5"></a><h4>Parameters</h4>
+<a name="id-1.2.15.14.9.3.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -209,9 +208,8 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.15.10.9.3.6"></a><h4>Returns</h4>
+<a name="id-1.2.15.14.9.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> in case the element supports flipping</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -222,7 +220,7 @@
                                    <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a> *center</code></em>);</pre>
 <p>Get the vertical centering offset from the given object.</p>
 <div class="refsect3">
-<a name="id-1.2.15.10.9.4.5"></a><h4>Parameters</h4>
+<a name="id-1.2.15.14.9.4.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -244,9 +242,8 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.15.10.9.4.6"></a><h4>Returns</h4>
+<a name="id-1.2.15.14.9.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> in case the element supports centering</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -257,7 +254,7 @@
                                  <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> *flip</code></em>);</pre>
 <p>Get the vertical flipping state (<a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> for flipped) from the given object.</p>
 <div class="refsect3">
-<a name="id-1.2.15.10.9.5.5"></a><h4>Parameters</h4>
+<a name="id-1.2.15.14.9.5.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -279,9 +276,8 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.15.10.9.5.6"></a><h4>Returns</h4>
+<a name="id-1.2.15.14.9.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> in case the element supports flipping</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -292,7 +288,7 @@
                                    <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a> center</code></em>);</pre>
 <p>Set the horizontal centering offset for the given object.</p>
 <div class="refsect3">
-<a name="id-1.2.15.10.9.6.5"></a><h4>Parameters</h4>
+<a name="id-1.2.15.14.9.6.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -314,9 +310,8 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.15.10.9.6.6"></a><h4>Returns</h4>
+<a name="id-1.2.15.14.9.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> in case the element supports centering</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -327,7 +322,7 @@
                                  <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> flip</code></em>);</pre>
 <p>Set the horizontal flipping state (<a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> for flipped) for the given object.</p>
 <div class="refsect3">
-<a name="id-1.2.15.10.9.7.5"></a><h4>Parameters</h4>
+<a name="id-1.2.15.14.9.7.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -349,9 +344,8 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.15.10.9.7.6"></a><h4>Returns</h4>
+<a name="id-1.2.15.14.9.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> in case the element supports flipping</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -362,7 +356,7 @@
                                    <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a> center</code></em>);</pre>
 <p>Set the vertical centering offset for the given object.</p>
 <div class="refsect3">
-<a name="id-1.2.15.10.9.8.5"></a><h4>Parameters</h4>
+<a name="id-1.2.15.14.9.8.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -384,9 +378,8 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.15.10.9.8.6"></a><h4>Returns</h4>
+<a name="id-1.2.15.14.9.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> in case the element supports centering</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -397,7 +390,7 @@
                                  <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> flip</code></em>);</pre>
 <p>Set the vertical flipping state (<a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> for flipped) for the given object.</p>
 <div class="refsect3">
-<a name="id-1.2.15.10.9.9.5"></a><h4>Parameters</h4>
+<a name="id-1.2.15.14.9.9.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -419,9 +412,8 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.15.10.9.9.6"></a><h4>Returns</h4>
+<a name="id-1.2.15.14.9.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> in case the element supports flipping</p>
-<p></p>
 </div>
 </div>
 </div>
@@ -456,7 +448,7 @@
 </pre>
 <p><a class="link" href="gst-plugins-base-libs-gstvideoorientation.html#GstVideoOrientationInterface" title="struct GstVideoOrientationInterface"><span class="type">GstVideoOrientationInterface</span></a> interface.</p>
 <div class="refsect3">
-<a name="id-1.2.15.10.10.3.5"></a><h4>Members</h4>
+<a name="id-1.2.15.14.10.3.5"></a><h4>Members</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="300px" class="struct_members_name">
@@ -516,7 +508,6 @@
 </div>
 </div>
 <div class="footer">
-<hr>
-          Generated by GTK-Doc V1.21</div>
+<hr>Generated by GTK-Doc V1.24</div>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/libs/html/gst-plugins-base-libs-gstvideooverlay.html b/docs/libs/html/gst-plugins-base-libs-gstvideooverlay.html
index 68dbd61..02e06b0 100644
--- a/docs/libs/html/gst-plugins-base-libs-gstvideooverlay.html
+++ b/docs/libs/html/gst-plugins-base-libs-gstvideooverlay.html
@@ -2,13 +2,13 @@
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>GStreamer Base Plugins 1.0 Library Reference Manual: gstvideooverlay</title>
+<title>gstvideooverlay: GStreamer Base 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 Base Plugins 1.0 Library Reference Manual">
 <link rel="up" href="gstreamer-video.html" title="Video Library">
 <link rel="prev" href="gst-plugins-base-libs-gstvideoorientation.html" title="gstvideoorientation">
 <link rel="next" href="gst-plugins-base-libs-GstVideoDecoder.html" title="GstVideoDecoder">
-<meta name="generator" content="GTK-Doc V1.21 (XML mode)">
+<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">
@@ -134,7 +134,7 @@
 <div class="refsect1">
 <a name="gst-plugins-base-libs-gstvideooverlay.description"></a><h2>Description</h2>
 <div class="refsect2">
-<a name="id-1.2.15.11.8.2"></a><p>
+<a name="id-1.2.15.15.8.2"></a><p>
 The <a class="link" href="gst-plugins-base-libs-gstvideooverlay.html#GstVideoOverlay"><span class="type">GstVideoOverlay</span></a> interface is used for 2 main purposes :
 </p>
 <div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
@@ -146,7 +146,7 @@
 </p></li>
 <li class="listitem"><p>
 To force a redrawing of the latest video frame the video sink element
-displayed on the Window. Indeed if the <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPipeline.html"><span class="type">GstPipeline</span></a> is in <span class="type">GST_STATE_PAUSED</span>
+displayed on the Window. Indeed if the <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPipeline.html"><span class="type">GstPipeline</span></a> is in <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html#GST-STATE-PAUSED:CAPS"><span class="type">GST_STATE_PAUSED</span></a>
 state, moving the Window around will damage its content. Application
 developers will want to handle the Expose events themselves and force the
 video sink element to refresh the Window's content.
@@ -246,7 +246,7 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="id-1.2.15.11.8.3"></a><h3>Two basic usage scenarios</h3>
+<a name="id-1.2.15.15.8.3"></a><h3>Two basic usage scenarios</h3>
 <p>
 There are two basic usage scenarios: in the simplest case, the application
 uses <span class="type">playbin</span> or <span class="type">plasink</span> or knows exactly what particular element is used
@@ -293,7 +293,7 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="id-1.2.15.11.8.4"></a><h3>GstVideoOverlay and Gtk+</h3>
+<a name="id-1.2.15.15.8.4"></a><h3>GstVideoOverlay and Gtk+</h3>
 <p>
 </p>
 <div class="informalexample">
@@ -502,7 +502,7 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="id-1.2.15.11.8.5"></a><h3>GstVideoOverlay and Qt</h3>
+<a name="id-1.2.15.15.8.5"></a><h3>GstVideoOverlay and Qt</h3>
 <p>
 </p>
 <div class="informalexample">
@@ -634,7 +634,7 @@
 <p>This will post a "have-window-handle" element message on the bus.</p>
 <p>This function should only be used by video overlay plugin developers.</p>
 <div class="refsect3">
-<a name="id-1.2.15.11.9.2.6"></a><h4>Parameters</h4>
+<a name="id-1.2.15.15.9.2.6"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -668,7 +668,7 @@
  will
 tell the overlay to stop using that window and create an internal one.</p>
 <div class="refsect3">
-<a name="id-1.2.15.11.9.3.5"></a><h4>Parameters</h4>
+<a name="id-1.2.15.15.9.3.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -702,7 +702,7 @@
 window.</p>
 <p>This function should only be used by video overlay plugin developers.</p>
 <div class="refsect3">
-<a name="id-1.2.15.11.9.4.6"></a><h4>Parameters</h4>
+<a name="id-1.2.15.15.9.4.6"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -725,7 +725,7 @@
 <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.15.11.9.5.5"></a><h4>Parameters</h4>
+<a name="id-1.2.15.15.9.5.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -752,7 +752,7 @@
 for them. This method allows you to disable events handling completely
 from the <a class="link" href="gst-plugins-base-libs-gstvideooverlay.html#GstVideoOverlay"><span class="type">GstVideoOverlay</span></a>.</p>
 <div class="refsect3">
-<a name="id-1.2.15.11.9.6.5"></a><h4>Parameters</h4>
+<a name="id-1.2.15.15.9.6.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -796,7 +796,7 @@
 <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.15.11.9.7.6"></a><h4>Parameters</h4>
+<a name="id-1.2.15.15.9.7.6"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -833,9 +833,8 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.15.11.9.7.7"></a><h4>Returns</h4>
+<a name="id-1.2.15.15.9.7.7"></a><h4>Returns</h4>
 <p> <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> if not supported by the sink.</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -847,7 +846,7 @@
 <p>Convenience function to check if the given message is a
 "prepare-window-handle" message from a <a class="link" href="gst-plugins-base-libs-gstvideooverlay.html#GstVideoOverlay"><span class="type">GstVideoOverlay</span></a>.</p>
 <div class="refsect3">
-<a name="id-1.2.15.11.9.8.5"></a><h4>Parameters</h4>
+<a name="id-1.2.15.15.9.8.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -862,10 +861,9 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.15.11.9.8.6"></a><h4>Returns</h4>
+<a name="id-1.2.15.15.9.8.6"></a><h4>Returns</h4>
 <p> whether <em class="parameter"><code>msg</code></em>
 is a "prepare-window-handle" message</p>
-<p></p>
 </div>
 </div>
 </div>
@@ -896,7 +894,7 @@
 </pre>
 <p><a class="link" href="gst-plugins-base-libs-gstvideooverlay.html#GstVideoOverlay"><span class="type">GstVideoOverlay</span></a> interface</p>
 <div class="refsect3">
-<a name="id-1.2.15.11.10.3.5"></a><h4>Members</h4>
+<a name="id-1.2.15.15.10.3.5"></a><h4>Members</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="300px" class="struct_members_name">
@@ -936,7 +934,6 @@
 </div>
 </div>
 <div class="footer">
-<hr>
-          Generated by GTK-Doc V1.21</div>
+<hr>Generated by GTK-Doc V1.24</div>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/libs/html/gst-plugins-base-libs-gstvideooverlaycomposition.html b/docs/libs/html/gst-plugins-base-libs-gstvideooverlaycomposition.html
index 8a97cba..c09049a 100644
--- a/docs/libs/html/gst-plugins-base-libs-gstvideooverlaycomposition.html
+++ b/docs/libs/html/gst-plugins-base-libs-gstvideooverlaycomposition.html
@@ -2,13 +2,13 @@
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>GStreamer Base Plugins 1.0 Library Reference Manual: gstvideooverlaycomposition</title>
+<title>gstvideooverlaycomposition: GStreamer Base 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 Base Plugins 1.0 Library Reference Manual">
 <link rel="up" href="gstreamer-video.html" title="Video Library">
 <link rel="prev" href="gst-plugins-base-libs-gstvideometa.html" title="gstvideometa">
 <link rel="next" href="gst-plugins-base-libs-gstvideofilter.html" title="gstvideofilter">
-<meta name="generator" content="GTK-Doc V1.21 (XML mode)">
+<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">
@@ -490,7 +490,6 @@
 <div class="refsect3">
 <a name="id-1.2.15.5.7.6.6"></a><h4>Returns</h4>
 <p> the number of rectangles</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -565,7 +564,6 @@
 <a name="id-1.2.15.5.7.8.6"></a><h4>Returns</h4>
 <p> the sequence number of <em class="parameter"><code>comp</code></em>
 </p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -716,6 +714,11 @@
 </tbody>
 </table></div>
 </div>
+<div class="refsect3">
+<a name="id-1.2.15.5.7.13.6"></a><h4>Returns</h4>
+<p> a <a class="link" href="gst-plugins-base-libs-gstvideooverlaycomposition.html#GstVideoOverlayCompositionMeta" title="struct GstVideoOverlayCompositionMeta"><span class="type">GstVideoOverlayCompositionMeta</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>]</span></p>
+</div>
 </div>
 <hr>
 <div class="refsect2">
@@ -1173,7 +1176,6 @@
 <div class="refsect3">
 <a name="id-1.2.15.5.7.25.6"></a><h4>Returns</h4>
 <p> TRUE if valid render dimensions were retrieved.</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -1214,7 +1216,6 @@
 <a name="id-1.2.15.5.7.26.7"></a><h4>Returns</h4>
 <p> the sequence number of <em class="parameter"><code>rectangle</code></em>
 </p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -1335,7 +1336,6 @@
 <div class="refsect3">
 <a name="id-1.2.15.5.7.29.6"></a><h4>Returns</h4>
 <p> the <a class="link" href="gst-plugins-base-libs-gstvideooverlaycomposition.html#GstVideoOverlayFormatFlags" title="enum GstVideoOverlayFormatFlags"><span class="type">GstVideoOverlayFormatFlags</span></a> associated with the rectangle.</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -1363,7 +1363,6 @@
 <div class="refsect3">
 <a name="id-1.2.15.5.7.30.6"></a><h4>Returns</h4>
 <p> the global-alpha value associated with the rectangle.</p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -1376,7 +1375,7 @@
 <p>Sets the global alpha value associated with a <a class="link" href="gst-plugins-base-libs-gstvideooverlaycomposition.html#GstVideoOverlayRectangle" title="GstVideoOverlayRectangle"><span class="type">GstVideoOverlayRectangle</span></a>. Per-
 pixel alpha values are multiplied with this value. Valid
 values: 0 &lt;= global_alpha &lt;= 1; 1 to deactivate.</p>
-<p> # <em class="parameter"><code>rectangle</code></em>
+<p><em class="parameter"><code>rectangle</code></em>
  must be writable, meaning its refcount must be 1. You can
 make the rectangles inside a <a class="link" href="gst-plugins-base-libs-gstvideooverlaycomposition.html#GstVideoOverlayComposition" title="GstVideoOverlayComposition"><span class="type">GstVideoOverlayComposition</span></a> writable using
 <a class="link" href="gst-plugins-base-libs-gstvideooverlaycomposition.html#gst-video-overlay-composition-make-writable" title="gst_video_overlay_composition_make_writable ()"><code class="function">gst_video_overlay_composition_make_writable()</code></a> or
@@ -1389,11 +1388,18 @@
 <col class="parameters_description">
 <col width="200px" class="parameters_annotations">
 </colgroup>
-<tbody><tr>
+<tbody>
+<tr>
 <td class="parameter_name"><p>rectangle</p></td>
 <td class="parameter_description"><p>a <a class="link" href="gst-plugins-base-libs-gstvideooverlaycomposition.html#GstVideoOverlayRectangle" title="GstVideoOverlayRectangle"><span class="type">GstVideoOverlayRectangle</span></a></p></td>
 <td class="parameter_annotations"> </td>
-</tr></tbody>
+</tr>
+<tr>
+<td class="parameter_name"><p>global_alpha</p></td>
+<td class="parameter_description"><p>Global alpha value (0 to 1.0)</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
 </table></div>
 </div>
 </div>
@@ -1412,7 +1418,7 @@
 <pre class="programlisting">#define             GST_VIDEO_OVERLAY_COMPOSITION_BLEND_FORMATS</pre>
 <p>Video formats supported by <a class="link" href="gst-plugins-base-libs-gstvideooverlaycomposition.html#gst-video-overlay-composition-blend" title="gst_video_overlay_composition_blend ()"><code class="function">gst_video_overlay_composition_blend()</code></a>, for
 use in overlay elements' pad template caps.</p>
-<p class="since">Since 1.2</p>
+<p class="since">Since: 1.2</p>
 </div>
 <hr>
 <div class="refsect2">
@@ -1495,7 +1501,6 @@
 </div>
 </div>
 <div class="footer">
-<hr>
-          Generated by GTK-Doc V1.21</div>
+<hr>Generated by GTK-Doc V1.24</div>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/libs/html/gst-plugins-base-libs-gstvideosink.html b/docs/libs/html/gst-plugins-base-libs-gstvideosink.html
index 732f884..5dc5dcc 100644
--- a/docs/libs/html/gst-plugins-base-libs-gstvideosink.html
+++ b/docs/libs/html/gst-plugins-base-libs-gstvideosink.html
@@ -2,13 +2,13 @@
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>GStreamer Base Plugins 1.0 Library Reference Manual: gstvideosink</title>
+<title>gstvideosink: GStreamer Base 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 Base Plugins 1.0 Library Reference Manual">
 <link rel="up" href="gstreamer-video.html" title="Video Library">
-<link rel="prev" href="gst-plugins-base-libs-gstvideofilter.html" title="gstvideofilter">
+<link rel="prev" href="gst-plugins-base-libs-GstVideoScaler.html" title="GstVideoScaler">
 <link rel="next" href="gst-plugins-base-libs-gstcolorbalance.html" title="gstcolorbalance">
-<meta name="generator" content="GTK-Doc V1.21 (XML mode)">
+<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">
@@ -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="gstreamer-video.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
-<td><a accesskey="p" href="gst-plugins-base-libs-gstvideofilter.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
+<td><a accesskey="p" href="gst-plugins-base-libs-GstVideoScaler.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
 <td><a accesskey="n" href="gst-plugins-base-libs-gstcolorbalance.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
 </tr></table>
 <div class="refentry">
@@ -126,7 +126,7 @@
 <div class="refsect1">
 <a name="gst-plugins-base-libs-gstvideosink.description"></a><h2>Description</h2>
 <div class="refsect2">
-<a name="id-1.2.15.7.9.2"></a><p>
+<a name="id-1.2.15.11.9.2"></a><p>
 Provides useful functions and a base class for video sinks. 
 </p>
 <p>
@@ -151,7 +151,7 @@
 <p>Get the sink <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html"><span class="type">GstPad</span></a> of <em class="parameter"><code>obj</code></em>
 .</p>
 <div class="refsect3">
-<a name="id-1.2.15.7.10.3.5"></a><h4>Parameters</h4>
+<a name="id-1.2.15.11.10.3.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -190,7 +190,7 @@
  one and <em class="parameter"><code>scaling</code></em>
  is set to FALSE.</p>
 <div class="refsect3">
-<a name="id-1.2.15.7.10.5.5"></a><h4>Parameters</h4>
+<a name="id-1.2.15.11.10.5.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -236,7 +236,7 @@
  and <em class="parameter"><code>width</code></em>
  members.</p>
 <div class="refsect3">
-<a name="id-1.2.15.7.11.2.5"></a><h4>Members</h4>
+<a name="id-1.2.15.11.11.2.5"></a><h4>Members</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="300px" class="struct_members_name">
@@ -271,7 +271,7 @@
 <em class="parameter"><code>show_frame</code></em>
  virtual function.</p>
 <div class="refsect3">
-<a name="id-1.2.15.7.11.3.5"></a><h4>Members</h4>
+<a name="id-1.2.15.11.11.3.5"></a><h4>Members</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="300px" class="struct_members_name">
@@ -308,7 +308,7 @@
 </pre>
 <p>Helper structure representing a rectangular area.</p>
 <div class="refsect3">
-<a name="id-1.2.15.7.11.4.5"></a><h4>Members</h4>
+<a name="id-1.2.15.11.11.4.5"></a><h4>Members</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="300px" class="struct_members_name">
@@ -354,7 +354,6 @@
 </div>
 </div>
 <div class="footer">
-<hr>
-          Generated by GTK-Doc V1.21</div>
+<hr>Generated by GTK-Doc V1.24</div>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/libs/html/gst-plugins-base-libs-gstvideoutils.html b/docs/libs/html/gst-plugins-base-libs-gstvideoutils.html
index 9988577..d609b5b 100644
--- a/docs/libs/html/gst-plugins-base-libs-gstvideoutils.html
+++ b/docs/libs/html/gst-plugins-base-libs-gstvideoutils.html
@@ -2,13 +2,13 @@
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>GStreamer Base Plugins 1.0 Library Reference Manual: gstvideoutils</title>
+<title>gstvideoutils: GStreamer Base 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 Base Plugins 1.0 Library Reference Manual">
 <link rel="up" href="gstreamer-video.html" title="Video Library">
 <link rel="prev" href="gst-plugins-base-libs-GstVideoPool.html" title="GstVideoPool">
 <link rel="next" href="gst-plugins-base-libs-gstnavigation.html" title="gstnavigation">
-<meta name="generator" content="GTK-Doc V1.21 (XML mode)">
+<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">
@@ -215,7 +215,7 @@
 <p>The entire set of flags for the <em class="parameter"><code>frame</code></em>
 </p>
 <div class="refsect3">
-<a name="id-1.2.15.15.6.2.5"></a><h4>Parameters</h4>
+<a name="id-1.2.15.19.6.2.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -238,7 +238,7 @@
 <p>Checks whether the given <em class="parameter"><code>flag</code></em>
  is set</p>
 <div class="refsect3">
-<a name="id-1.2.15.15.6.3.5"></a><h4>Parameters</h4>
+<a name="id-1.2.15.19.6.3.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -267,7 +267,7 @@
 </pre>
 <p>This macro sets the given bits</p>
 <div class="refsect3">
-<a name="id-1.2.15.15.6.4.5"></a><h4>Parameters</h4>
+<a name="id-1.2.15.19.6.4.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -296,7 +296,7 @@
 </pre>
 <p>This macro usets the given bits.</p>
 <div class="refsect3">
-<a name="id-1.2.15.15.6.5.5"></a><h4>Parameters</h4>
+<a name="id-1.2.15.19.6.5.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -325,7 +325,7 @@
 </pre>
 <p>Tests if the buffer should only be decoded but not sent downstream.</p>
 <div class="refsect3">
-<a name="id-1.2.15.15.6.6.5"></a><h4>Parameters</h4>
+<a name="id-1.2.15.19.6.6.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -348,7 +348,7 @@
 <p>Tests if the frame must be encoded as a keyframe. Applies only to
 frames provided to encoders. Decoders can safely ignore this field.</p>
 <div class="refsect3">
-<a name="id-1.2.15.15.6.7.5"></a><h4>Parameters</h4>
+<a name="id-1.2.15.19.6.7.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -373,7 +373,7 @@
 <p>Applies only to frames provided to encoders. Decoders can safely
 ignore this field.</p>
 <div class="refsect3">
-<a name="id-1.2.15.15.6.8.6"></a><h4>Parameters</h4>
+<a name="id-1.2.15.19.6.8.6"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -396,7 +396,7 @@
 <p>Tests if the frame is a synchronization point (like a keyframe).</p>
 <p>Decoder implementations can use this to detect keyframes.</p>
 <div class="refsect3">
-<a name="id-1.2.15.15.6.9.6"></a><h4>Parameters</h4>
+<a name="id-1.2.15.19.6.9.6"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -421,7 +421,7 @@
 are not meant to be displayed.</p>
 <p>Encoder implementation can safely ignore this field.</p>
 <div class="refsect3">
-<a name="id-1.2.15.15.6.10.7"></a><h4>Parameters</h4>
+<a name="id-1.2.15.19.6.10.7"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -458,7 +458,7 @@
 <p>Decoder implementing parsing features should set this when they
 detect such a synchronization point.</p>
 <div class="refsect3">
-<a name="id-1.2.15.15.6.13.7"></a><h4>Parameters</h4>
+<a name="id-1.2.15.19.6.13.7"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -498,7 +498,7 @@
 gst_video_codec_frame_ref (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstvideoutils.html#GstVideoCodecFrame" title="struct GstVideoCodecFrame"><span class="type">GstVideoCodecFrame</span></a> *frame</code></em>);</pre>
 <p>Increases the refcount of the given frame by one.</p>
 <div class="refsect3">
-<a name="id-1.2.15.15.6.17.5"></a><h4>Parameters</h4>
+<a name="id-1.2.15.19.6.17.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -513,10 +513,9 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.15.15.6.17.6"></a><h4>Returns</h4>
+<a name="id-1.2.15.19.6.17.6"></a><h4>Returns</h4>
 <p> <em class="parameter"><code>buf</code></em>
 </p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -527,7 +526,7 @@
 <p>Decreases the refcount of the frame. If the refcount reaches 0, the frame
 will be freed.</p>
 <div class="refsect3">
-<a name="id-1.2.15.15.6.18.5"></a><h4>Parameters</h4>
+<a name="id-1.2.15.19.6.18.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -558,7 +557,7 @@
 before the <em class="parameter"><code>user_data</code></em>
  is replaced.</p>
 <div class="refsect3">
-<a name="id-1.2.15.15.6.19.6"></a><h4>Parameters</h4>
+<a name="id-1.2.15.19.6.19.6"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -593,7 +592,7 @@
 <p>Gets private data set on the frame by the subclass via
 <a class="link" href="gst-plugins-base-libs-gstvideoutils.html#gst-video-codec-frame-set-user-data" title="gst_video_codec_frame_set_user_data ()"><code class="function">gst_video_codec_frame_set_user_data()</code></a> previously.</p>
 <div class="refsect3">
-<a name="id-1.2.15.15.6.20.5"></a><h4>Parameters</h4>
+<a name="id-1.2.15.19.6.20.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -608,7 +607,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.15.15.6.20.6"></a><h4>Returns</h4>
+<a name="id-1.2.15.19.6.20.6"></a><h4>Returns</h4>
 <p> The previously set user_data. </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>
@@ -620,7 +619,7 @@
 gst_video_codec_state_ref (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstvideoutils.html#GstVideoCodecState" title="struct GstVideoCodecState"><span class="type">GstVideoCodecState</span></a> *state</code></em>);</pre>
 <p>Increases the refcount of the given state by one.</p>
 <div class="refsect3">
-<a name="id-1.2.15.15.6.21.5"></a><h4>Parameters</h4>
+<a name="id-1.2.15.19.6.21.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -635,10 +634,9 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.15.15.6.21.6"></a><h4>Returns</h4>
+<a name="id-1.2.15.19.6.21.6"></a><h4>Returns</h4>
 <p> <em class="parameter"><code>buf</code></em>
 </p>
-<p></p>
 </div>
 </div>
 <hr>
@@ -649,7 +647,7 @@
 <p>Decreases the refcount of the state. If the refcount reaches 0, the state
 will be freed.</p>
 <div class="refsect3">
-<a name="id-1.2.15.15.6.22.5"></a><h4>Parameters</h4>
+<a name="id-1.2.15.19.6.22.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -689,7 +687,7 @@
 <p>A <a class="link" href="gst-plugins-base-libs-gstvideoutils.html#GstVideoCodecFrame" title="struct GstVideoCodecFrame"><span class="type">GstVideoCodecFrame</span></a> represents a video frame both in raw and
 encoded form.</p>
 <div class="refsect3">
-<a name="id-1.2.15.15.7.2.5"></a><h4>Members</h4>
+<a name="id-1.2.15.19.7.2.5"></a><h4>Members</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="300px" class="struct_members_name">
@@ -738,7 +736,8 @@
 <tr>
 <td class="struct_member_name"><p><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstBuffer.html"><span class="type">GstBuffer</span></a> *<em class="structfield"><code><a name="GstVideoCodecFrame.input-buffer"></a>input_buffer</code></em>;</p></td>
 <td class="struct_member_description"><p>the input <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstBuffer.html"><span class="type">GstBuffer</span></a> that created this frame. The buffer is owned
-by the frame and references to the frame instead of the buffer should</p></td>
+by the frame and references to the frame instead of the buffer should
+be kept.</p></td>
 <td class="struct_member_annotations"> </td>
 </tr>
 <tr>
@@ -767,7 +766,7 @@
 <a name="GstVideoCodecFrameFlags"></a><h3>enum GstVideoCodecFrameFlags</h3>
 <p>Flags for <a class="link" href="gst-plugins-base-libs-gstvideoutils.html#GstVideoCodecFrame" title="struct GstVideoCodecFrame"><span class="type">GstVideoCodecFrame</span></a></p>
 <div class="refsect3">
-<a name="id-1.2.15.15.7.3.4"></a><h4>Members</h4>
+<a name="id-1.2.15.19.7.3.4"></a><h4>Members</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="300px" class="enum_members_name">
@@ -829,7 +828,7 @@
 <em class="parameter"><code><a class="link" href="gst-plugins-base-libs-GstVideoEncoder.html#gst-video-encoder-set-output-state" title="gst_video_encoder_set_output_state ()"><code class="function">gst_video_encoder_set_output_state()</code></a></code></em>
  methods.</p>
 <div class="refsect3">
-<a name="id-1.2.15.15.7.4.7"></a><h4>Members</h4>
+<a name="id-1.2.15.19.7.4.7"></a><h4>Members</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="300px" class="struct_members_name">
@@ -860,7 +859,6 @@
 </div>
 </div>
 <div class="footer">
-<hr>
-          Generated by GTK-Doc V1.21</div>
+<hr>Generated by GTK-Doc V1.24</div>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/libs/html/gstreamer-allocators.html b/docs/libs/html/gstreamer-allocators.html
index 27c5ba9..84842a7 100644
--- a/docs/libs/html/gstreamer-allocators.html
+++ b/docs/libs/html/gstreamer-allocators.html
@@ -2,13 +2,13 @@
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>GStreamer Base Plugins 1.0 Library Reference Manual: Allocators Library</title>
+<title>Allocators Library: GStreamer Base 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 Base Plugins 1.0 Library Reference Manual">
 <link rel="up" href="gstreamer-plugins-base.html" title="Part I. GStreamer Base Plugins Libraries">
 <link rel="prev" href="compiling.html" title="Compiling">
 <link rel="next" href="gst-plugins-base-libs-dmabuf.html" title="dmabuf">
-<meta name="generator" content="GTK-Doc V1.21 (XML mode)">
+<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">
@@ -22,9 +22,14 @@
 <div class="chapter">
 <div class="titlepage"><div><div><h2 class="title">
 <a name="gstreamer-allocators"></a>Allocators Library</h2></div></div></div>
-<div class="toc"><dl class="toc"><dt>
+<div class="toc"><dl class="toc">
+<dt>
 <span class="refentrytitle"><a href="gst-plugins-base-libs-dmabuf.html">dmabuf</a></span><span class="refpurpose"> — Memory wrapper for Linux dmabuf memory</span>
-</dt></dl></div>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-libs-fdmemory.html">fdmemory</a></span><span class="refpurpose"> — Memory wrapper for fd backed memory</span>
+</dt>
+</dl></div>
 <p>
         This library should be linked to by getting cflags and libs from
         <code class="filename">gstreamer-plugins-base-1.0.pc</code> and adding
@@ -32,7 +37,6 @@
       </p>
 </div>
 <div class="footer">
-<hr>
-          Generated by GTK-Doc V1.21</div>
+<hr>Generated by GTK-Doc V1.24</div>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/libs/html/gstreamer-app.html b/docs/libs/html/gstreamer-app.html
index 294ae02..a8156ec 100644
--- a/docs/libs/html/gstreamer-app.html
+++ b/docs/libs/html/gstreamer-app.html
@@ -2,13 +2,13 @@
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>GStreamer Base Plugins 1.0 Library Reference Manual: App Library</title>
+<title>App Library: GStreamer Base 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 Base Plugins 1.0 Library Reference Manual">
 <link rel="up" href="gstreamer-plugins-base.html" title="Part I. GStreamer Base Plugins Libraries">
-<link rel="prev" href="gst-plugins-base-libs-dmabuf.html" title="dmabuf">
+<link rel="prev" href="gst-plugins-base-libs-fdmemory.html" title="fdmemory">
 <link rel="next" href="gst-plugins-base-libs-appsrc.html" title="appsrc">
-<meta name="generator" content="GTK-Doc V1.21 (XML mode)">
+<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">
@@ -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="gstreamer-plugins-base.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
-<td><a accesskey="p" href="gst-plugins-base-libs-dmabuf.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
+<td><a accesskey="p" href="gst-plugins-base-libs-fdmemory.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
 <td><a accesskey="n" href="gst-plugins-base-libs-appsrc.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
 </tr></table>
 <div class="chapter">
@@ -42,7 +42,6 @@
       </p>
 </div>
 <div class="footer">
-<hr>
-          Generated by GTK-Doc V1.21</div>
+<hr>Generated by GTK-Doc V1.24</div>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/libs/html/gstreamer-audio.html b/docs/libs/html/gstreamer-audio.html
index e36505e..10a2ad5 100644
--- a/docs/libs/html/gstreamer-audio.html
+++ b/docs/libs/html/gstreamer-audio.html
@@ -2,13 +2,13 @@
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>GStreamer Base Plugins 1.0 Library Reference Manual: Audio Library</title>
+<title>Audio Library: GStreamer Base 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 Base Plugins 1.0 Library Reference Manual">
 <link rel="up" href="gstreamer-plugins-base.html" title="Part I. GStreamer Base Plugins Libraries">
 <link rel="prev" href="gst-plugins-base-libs-appsink.html" title="appsink">
 <link rel="next" href="gst-plugins-base-libs-gstaudio.html" title="gstaudio">
-<meta name="generator" content="GTK-Doc V1.21 (XML mode)">
+<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">
@@ -76,7 +76,6 @@
       </p>
 </div>
 <div class="footer">
-<hr>
-          Generated by GTK-Doc V1.21</div>
+<hr>Generated by GTK-Doc V1.24</div>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/libs/html/gstreamer-base-utils.html b/docs/libs/html/gstreamer-base-utils.html
index 865c667..6459fbd 100644
--- a/docs/libs/html/gstreamer-base-utils.html
+++ b/docs/libs/html/gstreamer-base-utils.html
@@ -2,13 +2,13 @@
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>GStreamer Base Plugins 1.0 Library Reference Manual: Base Utils Library</title>
+<title>Base Utils Library: GStreamer Base 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 Base Plugins 1.0 Library Reference Manual">
 <link rel="up" href="gstreamer-plugins-base.html" title="Part I. GStreamer Base Plugins Libraries">
 <link rel="prev" href="gst-plugins-base-libs-gsttaglicenses.html" title="gsttaglicenses">
 <link rel="next" href="gst-plugins-base-libs-gstpbutils.html" title="gstpbutils">
-<meta name="generator" content="GTK-Doc V1.21 (XML mode)">
+<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">
@@ -57,7 +57,6 @@
       </p>
 </div>
 <div class="footer">
-<hr>
-          Generated by GTK-Doc V1.21</div>
+<hr>Generated by GTK-Doc V1.24</div>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/libs/html/gstreamer-ffft.html b/docs/libs/html/gstreamer-ffft.html
index 7af6d36..c332817 100644
--- a/docs/libs/html/gstreamer-ffft.html
+++ b/docs/libs/html/gstreamer-ffft.html
@@ -2,13 +2,13 @@
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>GStreamer Base Plugins 1.0 Library Reference Manual: FFT Library</title>
+<title>FFT Library: GStreamer Base 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 Base Plugins 1.0 Library Reference Manual">
 <link rel="up" href="gstreamer-plugins-base.html" title="Part I. GStreamer Base Plugins Libraries">
 <link rel="prev" href="gst-plugins-base-libs-gststreamvolume.html" title="gststreamvolume">
 <link rel="next" href="gst-plugins-base-libs-gstfft.html" title="gstfft">
-<meta name="generator" content="GTK-Doc V1.21 (XML mode)">
+<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">
@@ -51,7 +51,6 @@
       </p>
 </div>
 <div class="footer">
-<hr>
-          Generated by GTK-Doc V1.21</div>
+<hr>Generated by GTK-Doc V1.24</div>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/libs/html/gstreamer-libs-hierarchy.html b/docs/libs/html/gstreamer-libs-hierarchy.html
index 561fa32..d21bb80 100644
--- a/docs/libs/html/gstreamer-libs-hierarchy.html
+++ b/docs/libs/html/gstreamer-libs-hierarchy.html
@@ -2,13 +2,13 @@
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>GStreamer Base Plugins 1.0 Library Reference Manual: Part II. Object Hierarchy</title>
+<title>Part II. Object Hierarchy: GStreamer Base 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 Base Plugins 1.0 Library Reference Manual">
 <link rel="up" href="index.html" title="GStreamer Base Plugins 1.0 Library Reference Manual">
 <link rel="prev" href="gst-plugins-base-libs-gstnavigation.html" title="gstnavigation">
 <link rel="next" href="api-index-full.html" title="Index">
-<meta name="generator" content="GTK-Doc V1.21 (XML mode)">
+<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">
@@ -65,7 +65,6 @@
 </pre>
 </div>
 <div class="footer">
-<hr>
-          Generated by GTK-Doc V1.21</div>
+<hr>Generated by GTK-Doc V1.24</div>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/libs/html/gstreamer-mikey.html b/docs/libs/html/gstreamer-mikey.html
index f9cd79b..f2d7cf0 100644
--- a/docs/libs/html/gstreamer-mikey.html
+++ b/docs/libs/html/gstreamer-mikey.html
@@ -2,13 +2,13 @@
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>GStreamer Base Plugins 1.0 Library Reference Manual: MIKEY Library</title>
+<title>MIKEY Library: GStreamer Base 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 Base Plugins 1.0 Library Reference Manual">
 <link rel="up" href="gstreamer-plugins-base.html" title="Part I. GStreamer Base Plugins Libraries">
 <link rel="prev" href="gst-plugins-base-libs-gstsdpmessage.html" title="gstsdpmessage">
 <link rel="next" href="gst-plugins-base-libs-gstmikey.html" title="gstmikey">
-<meta name="generator" content="GTK-Doc V1.21 (XML mode)">
+<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">
@@ -32,7 +32,6 @@
       </p>
 </div>
 <div class="footer">
-<hr>
-          Generated by GTK-Doc V1.21</div>
+<hr>Generated by GTK-Doc V1.24</div>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/libs/html/gstreamer-plugins-base.html b/docs/libs/html/gstreamer-plugins-base.html
index 271ec5b..b4a1069 100644
--- a/docs/libs/html/gstreamer-plugins-base.html
+++ b/docs/libs/html/gstreamer-plugins-base.html
@@ -2,13 +2,13 @@
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>GStreamer Base Plugins 1.0 Library Reference Manual: Part I. GStreamer Base Plugins Libraries</title>
+<title>Part I. GStreamer Base Plugins Libraries: GStreamer Base 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 Base Plugins 1.0 Library Reference Manual">
 <link rel="up" href="index.html" title="GStreamer Base Plugins 1.0 Library Reference Manual">
 <link rel="prev" href="index.html" title="GStreamer Base Plugins 1.0 Library Reference Manual">
 <link rel="next" href="compiling.html" title="Compiling">
-<meta name="generator" content="GTK-Doc V1.21 (XML mode)">
+<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">
@@ -31,9 +31,14 @@
 </span>
 </dt>
 <dt><span class="chapter"><a href="gstreamer-allocators.html">Allocators Library</a></span></dt>
-<dd><dl><dt>
+<dd><dl>
+<dt>
 <span class="refentrytitle"><a href="gst-plugins-base-libs-dmabuf.html">dmabuf</a></span><span class="refpurpose"> — Memory wrapper for Linux dmabuf memory</span>
-</dt></dl></dd>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-libs-fdmemory.html">fdmemory</a></span><span class="refpurpose"> — Memory wrapper for fd backed memory</span>
+</dt>
+</dl></dd>
 <dt><span class="chapter"><a href="gstreamer-app.html">App Library</a></span></dt>
 <dd><dl>
 <dt>
@@ -136,7 +141,7 @@
 <span class="refentrytitle"><a href="gst-plugins-base-libs-gstrtppayloads.html">gstrtppayloads</a></span><span class="refpurpose"> — Helper methods for dealing with RTP payloads</span>
 </dt>
 <dt>
-<span class="refentrytitle"><a href="gst-plugins-base-libs-gstrtphdrext.html">gstrtphdrext</a></span><span class="refpurpose"></span>
+<span class="refentrytitle"><a href="gst-plugins-base-libs-gstrtphdrext.html">gstrtphdrext</a></span><span class="refpurpose"> — Helper methods for dealing with RTP header extensions</span>
 </dt>
 </dl></dd>
 <dt><span class="chapter"><a href="gstreamer-rtsp.html">RTSP Library</a></span></dt>
@@ -253,13 +258,25 @@
 <span class="refentrytitle"><a href="gst-plugins-base-libs-gstvideofilter.html">gstvideofilter</a></span><span class="refpurpose"> — Base class for video filters</span>
 </dt>
 <dt>
+<span class="refentrytitle"><a href="gst-plugins-base-libs-GstVideoDither.html">GstVideoDither</a></span><span class="refpurpose"> — Utility object for dithering and quantizing lines of video</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-libs-GstVideoChroma.html">GstVideoChroma</a></span><span class="refpurpose"> — Functions and utility object for operating on chroma video planes</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-libs-GstVideoResampler.html">GstVideoResampler</a></span><span class="refpurpose"> — Utility structure for resampler information</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-libs-GstVideoScaler.html">GstVideoScaler</a></span><span class="refpurpose"> — Utility object for rescaling video frames</span>
+</dt>
+<dt>
 <span class="refentrytitle"><a href="gst-plugins-base-libs-gstvideosink.html">gstvideosink</a></span><span class="refpurpose"> — Base class for video sinks</span>
 </dt>
 <dt>
 <span class="refentrytitle"><a href="gst-plugins-base-libs-gstcolorbalance.html">gstcolorbalance</a></span><span class="refpurpose"> — Interface for adjusting color balance settings</span>
 </dt>
 <dt>
-<span class="refentrytitle"><a href="gst-plugins-base-libs-gstcolorbalancechannel.html">gstcolorbalancechannel</a></span><span class="refpurpose">Object representing a channel from the <span class="type">GstColorBalance</span>
+<span class="refentrytitle"><a href="gst-plugins-base-libs-gstcolorbalancechannel.html">gstcolorbalancechannel</a></span><span class="refpurpose"> — Object representing a channel from the <span class="type">GstColorBalance</span>
         interface.</span>
 </dt>
 <dt>
@@ -296,7 +313,6 @@
     </p>
 </div>
 <div class="footer">
-<hr>
-          Generated by GTK-Doc V1.21</div>
+<hr>Generated by GTK-Doc V1.24</div>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/libs/html/gstreamer-riff.html b/docs/libs/html/gstreamer-riff.html
index 974802f..9067530 100644
--- a/docs/libs/html/gstreamer-riff.html
+++ b/docs/libs/html/gstreamer-riff.html
@@ -2,13 +2,13 @@
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>GStreamer Base Plugins 1.0 Library Reference Manual: Riff Media Library</title>
+<title>Riff Media Library: GStreamer Base 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 Base Plugins 1.0 Library Reference Manual">
 <link rel="up" href="gstreamer-plugins-base.html" title="Part I. GStreamer Base Plugins Libraries">
 <link rel="prev" href="gst-plugins-base-libs-gstfftf64.html" title="gstfftf64">
 <link rel="next" href="gst-plugins-base-libs-gstriff.html" title="gstriff">
-<meta name="generator" content="GTK-Doc V1.21 (XML mode)">
+<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">
@@ -32,7 +32,6 @@
       </p>
 </div>
 <div class="footer">
-<hr>
-          Generated by GTK-Doc V1.21</div>
+<hr>Generated by GTK-Doc V1.24</div>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/libs/html/gstreamer-rtp.html b/docs/libs/html/gstreamer-rtp.html
index 6bfd2ae..3eb6b87 100644
--- a/docs/libs/html/gstreamer-rtp.html
+++ b/docs/libs/html/gstreamer-rtp.html
@@ -2,13 +2,13 @@
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>GStreamer Base Plugins 1.0 Library Reference Manual: RTP Library</title>
+<title>RTP Library: GStreamer Base 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 Base Plugins 1.0 Library Reference Manual">
 <link rel="up" href="gstreamer-plugins-base.html" title="Part I. GStreamer Base Plugins Libraries">
 <link rel="prev" href="gst-plugins-base-libs-gstriff.html" title="gstriff">
 <link rel="next" href="gst-plugins-base-libs-gstrtpbaseaudiopayload.html" title="gstrtpbaseaudiopayload">
-<meta name="generator" content="GTK-Doc V1.21 (XML mode)">
+<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">
@@ -42,7 +42,7 @@
 <span class="refentrytitle"><a href="gst-plugins-base-libs-gstrtppayloads.html">gstrtppayloads</a></span><span class="refpurpose"> — Helper methods for dealing with RTP payloads</span>
 </dt>
 <dt>
-<span class="refentrytitle"><a href="gst-plugins-base-libs-gstrtphdrext.html">gstrtphdrext</a></span><span class="refpurpose"></span>
+<span class="refentrytitle"><a href="gst-plugins-base-libs-gstrtphdrext.html">gstrtphdrext</a></span><span class="refpurpose"> — Helper methods for dealing with RTP header extensions</span>
 </dt>
 </dl></div>
 <p>
@@ -52,7 +52,6 @@
       </p>
 </div>
 <div class="footer">
-<hr>
-          Generated by GTK-Doc V1.21</div>
+<hr>Generated by GTK-Doc V1.24</div>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/libs/html/gstreamer-rtsp.html b/docs/libs/html/gstreamer-rtsp.html
index c7ae508..bff3ac6 100644
--- a/docs/libs/html/gstreamer-rtsp.html
+++ b/docs/libs/html/gstreamer-rtsp.html
@@ -2,13 +2,13 @@
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>GStreamer Base Plugins 1.0 Library Reference Manual: RTSP Library</title>
+<title>RTSP Library: GStreamer Base 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 Base Plugins 1.0 Library Reference Manual">
 <link rel="up" href="gstreamer-plugins-base.html" title="Part I. GStreamer Base Plugins Libraries">
 <link rel="prev" href="gst-plugins-base-libs-gstrtphdrext.html" title="gstrtphdrext">
 <link rel="next" href="gst-plugins-base-libs-gstrtspconnection.html" title="gstrtspconnection">
-<meta name="generator" content="GTK-Doc V1.21 (XML mode)">
+<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">
@@ -52,7 +52,6 @@
       </p>
 </div>
 <div class="footer">
-<hr>
-          Generated by GTK-Doc V1.21</div>
+<hr>Generated by GTK-Doc V1.24</div>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/libs/html/gstreamer-sdp.html b/docs/libs/html/gstreamer-sdp.html
index ef2224d..9e6a052 100644
--- a/docs/libs/html/gstreamer-sdp.html
+++ b/docs/libs/html/gstreamer-sdp.html
@@ -2,13 +2,13 @@
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>GStreamer Base Plugins 1.0 Library Reference Manual: SDP Library</title>
+<title>SDP Library: GStreamer Base 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 Base Plugins 1.0 Library Reference Manual">
 <link rel="up" href="gstreamer-plugins-base.html" title="Part I. GStreamer Base Plugins Libraries">
 <link rel="prev" href="gst-plugins-base-libs-gstrtspurl.html" title="gstrtspurl">
 <link rel="next" href="gst-plugins-base-libs-gstsdpmessage.html" title="gstsdpmessage">
-<meta name="generator" content="GTK-Doc V1.21 (XML mode)">
+<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">
@@ -32,7 +32,6 @@
       </p>
 </div>
 <div class="footer">
-<hr>
-          Generated by GTK-Doc V1.21</div>
+<hr>Generated by GTK-Doc V1.24</div>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/libs/html/gstreamer-tag.html b/docs/libs/html/gstreamer-tag.html
index 2944bc5..d94c2bb 100644
--- a/docs/libs/html/gstreamer-tag.html
+++ b/docs/libs/html/gstreamer-tag.html
@@ -2,13 +2,13 @@
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>GStreamer Base Plugins 1.0 Library Reference Manual: Tag Support Library</title>
+<title>Tag Support Library: GStreamer Base 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 Base Plugins 1.0 Library Reference Manual">
 <link rel="up" href="gstreamer-plugins-base.html" title="Part I. GStreamer Base Plugins Libraries">
 <link rel="prev" href="gst-plugins-base-libs-gstmikey.html" title="gstmikey">
 <link rel="next" href="gst-plugins-base-libs-gsttag.html" title="gsttag">
-<meta name="generator" content="GTK-Doc V1.21 (XML mode)">
+<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">
@@ -67,7 +67,6 @@
       </p>
 </div>
 <div class="footer">
-<hr>
-          Generated by GTK-Doc V1.21</div>
+<hr>Generated by GTK-Doc V1.24</div>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/libs/html/gstreamer-video.html b/docs/libs/html/gstreamer-video.html
index 9b483a5..87dd069 100644
--- a/docs/libs/html/gstreamer-video.html
+++ b/docs/libs/html/gstreamer-video.html
@@ -2,13 +2,13 @@
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>GStreamer Base Plugins 1.0 Library Reference Manual: Video Library</title>
+<title>Video Library: GStreamer Base 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 Base Plugins 1.0 Library Reference Manual">
 <link rel="up" href="gstreamer-plugins-base.html" title="Part I. GStreamer Base Plugins Libraries">
 <link rel="prev" href="gst-plugins-base-libs-encoding-profile.html" title="encoding-profile">
 <link rel="next" href="gst-plugins-base-libs-gstvideo.html" title="gstvideo">
-<meta name="generator" content="GTK-Doc V1.21 (XML mode)">
+<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">
@@ -36,13 +36,25 @@
 <span class="refentrytitle"><a href="gst-plugins-base-libs-gstvideofilter.html">gstvideofilter</a></span><span class="refpurpose"> — Base class for video filters</span>
 </dt>
 <dt>
+<span class="refentrytitle"><a href="gst-plugins-base-libs-GstVideoDither.html">GstVideoDither</a></span><span class="refpurpose"> — Utility object for dithering and quantizing lines of video</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-libs-GstVideoChroma.html">GstVideoChroma</a></span><span class="refpurpose"> — Functions and utility object for operating on chroma video planes</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-libs-GstVideoResampler.html">GstVideoResampler</a></span><span class="refpurpose"> — Utility structure for resampler information</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-libs-GstVideoScaler.html">GstVideoScaler</a></span><span class="refpurpose"> — Utility object for rescaling video frames</span>
+</dt>
+<dt>
 <span class="refentrytitle"><a href="gst-plugins-base-libs-gstvideosink.html">gstvideosink</a></span><span class="refpurpose"> — Base class for video sinks</span>
 </dt>
 <dt>
 <span class="refentrytitle"><a href="gst-plugins-base-libs-gstcolorbalance.html">gstcolorbalance</a></span><span class="refpurpose"> — Interface for adjusting color balance settings</span>
 </dt>
 <dt>
-<span class="refentrytitle"><a href="gst-plugins-base-libs-gstcolorbalancechannel.html">gstcolorbalancechannel</a></span><span class="refpurpose">Object representing a channel from the <span class="type">GstColorBalance</span>
+<span class="refentrytitle"><a href="gst-plugins-base-libs-gstcolorbalancechannel.html">gstcolorbalancechannel</a></span><span class="refpurpose"> — Object representing a channel from the <span class="type">GstColorBalance</span>
         interface.</span>
 </dt>
 <dt>
@@ -78,7 +90,6 @@
       </p>
 </div>
 <div class="footer">
-<hr>
-          Generated by GTK-Doc V1.21</div>
+<hr>Generated by GTK-Doc V1.24</div>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/libs/html/index.html b/docs/libs/html/index.html
index da3ccd2..62c86a3 100644
--- a/docs/libs/html/index.html
+++ b/docs/libs/html/index.html
@@ -6,7 +6,7 @@
 <meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
 <link rel="home" href="index.html" title="GStreamer Base Plugins 1.0 Library Reference Manual">
 <link rel="next" href="gstreamer-plugins-base.html" title="Part I. GStreamer Base Plugins Libraries">
-<meta name="generator" content="GTK-Doc V1.21 (XML mode)">
+<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">
@@ -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 Base Plugins 1.0 Library Reference Manual</p></th></tr></table></div>
 <div><p class="releaseinfo">
-      for GStreamer Base Library 1.0 (1.4.5)
+      for GStreamer Base Library 1.0 (1.5.91)
       <a class="ulink" href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base-libs/html/" target="_top">http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base-libs/html/</a>.
     </p></div>
 </div>
@@ -30,9 +30,14 @@
 </span>
 </dt>
 <dt><span class="chapter"><a href="gstreamer-allocators.html">Allocators Library</a></span></dt>
-<dd><dl><dt>
+<dd><dl>
+<dt>
 <span class="refentrytitle"><a href="gst-plugins-base-libs-dmabuf.html">dmabuf</a></span><span class="refpurpose"> — Memory wrapper for Linux dmabuf memory</span>
-</dt></dl></dd>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-libs-fdmemory.html">fdmemory</a></span><span class="refpurpose"> — Memory wrapper for fd backed memory</span>
+</dt>
+</dl></dd>
 <dt><span class="chapter"><a href="gstreamer-app.html">App Library</a></span></dt>
 <dd><dl>
 <dt>
@@ -135,7 +140,7 @@
 <span class="refentrytitle"><a href="gst-plugins-base-libs-gstrtppayloads.html">gstrtppayloads</a></span><span class="refpurpose"> — Helper methods for dealing with RTP payloads</span>
 </dt>
 <dt>
-<span class="refentrytitle"><a href="gst-plugins-base-libs-gstrtphdrext.html">gstrtphdrext</a></span><span class="refpurpose"></span>
+<span class="refentrytitle"><a href="gst-plugins-base-libs-gstrtphdrext.html">gstrtphdrext</a></span><span class="refpurpose"> — Helper methods for dealing with RTP header extensions</span>
 </dt>
 </dl></dd>
 <dt><span class="chapter"><a href="gstreamer-rtsp.html">RTSP Library</a></span></dt>
@@ -252,13 +257,25 @@
 <span class="refentrytitle"><a href="gst-plugins-base-libs-gstvideofilter.html">gstvideofilter</a></span><span class="refpurpose"> — Base class for video filters</span>
 </dt>
 <dt>
+<span class="refentrytitle"><a href="gst-plugins-base-libs-GstVideoDither.html">GstVideoDither</a></span><span class="refpurpose"> — Utility object for dithering and quantizing lines of video</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-libs-GstVideoChroma.html">GstVideoChroma</a></span><span class="refpurpose"> — Functions and utility object for operating on chroma video planes</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-libs-GstVideoResampler.html">GstVideoResampler</a></span><span class="refpurpose"> — Utility structure for resampler information</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-libs-GstVideoScaler.html">GstVideoScaler</a></span><span class="refpurpose"> — Utility object for rescaling video frames</span>
+</dt>
+<dt>
 <span class="refentrytitle"><a href="gst-plugins-base-libs-gstvideosink.html">gstvideosink</a></span><span class="refpurpose"> — Base class for video sinks</span>
 </dt>
 <dt>
 <span class="refentrytitle"><a href="gst-plugins-base-libs-gstcolorbalance.html">gstcolorbalance</a></span><span class="refpurpose"> — Interface for adjusting color balance settings</span>
 </dt>
 <dt>
-<span class="refentrytitle"><a href="gst-plugins-base-libs-gstcolorbalancechannel.html">gstcolorbalancechannel</a></span><span class="refpurpose">Object representing a channel from the <span class="type">GstColorBalance</span>
+<span class="refentrytitle"><a href="gst-plugins-base-libs-gstcolorbalancechannel.html">gstcolorbalancechannel</a></span><span class="refpurpose"> — Object representing a channel from the <span class="type">GstColorBalance</span>
         interface.</span>
 </dt>
 <dt>
@@ -295,7 +312,6 @@
 </dl></div>
 </div>
 <div class="footer">
-<hr>
-          Generated by GTK-Doc V1.21</div>
+<hr>Generated by GTK-Doc V1.24</div>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/libs/html/index.sgml b/docs/libs/html/index.sgml
index 380bca2..2896378 100644
--- a/docs/libs/html/index.sgml
+++ b/docs/libs/html/index.sgml
@@ -5,11 +5,29 @@
 <ANCHOR id="gst-plugins-base-libs-dmabuf.includes" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-dmabuf.html#gst-plugins-base-libs-dmabuf.includes">
 <ANCHOR id="gst-plugins-base-libs-dmabuf.description" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-dmabuf.html#gst-plugins-base-libs-dmabuf.description">
 <ANCHOR id="gst-plugins-base-libs-dmabuf.functions_details" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-dmabuf.html#gst-plugins-base-libs-dmabuf.functions_details">
+<ANCHOR id="gst-dmabuf-allocator-new" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-dmabuf.html#gst-dmabuf-allocator-new">
 <ANCHOR id="gst-dmabuf-allocator-alloc" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-dmabuf.html#gst-dmabuf-allocator-alloc">
 <ANCHOR id="gst-dmabuf-memory-get-fd" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-dmabuf.html#gst-dmabuf-memory-get-fd">
 <ANCHOR id="gst-is-dmabuf-memory" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-dmabuf.html#gst-is-dmabuf-memory">
 <ANCHOR id="gst-plugins-base-libs-dmabuf.other_details" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-dmabuf.html#gst-plugins-base-libs-dmabuf.other_details">
 <ANCHOR id="gst-plugins-base-libs-dmabuf.see-also" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-dmabuf.html#gst-plugins-base-libs-dmabuf.see-also">
+<ANCHOR id="gst-plugins-base-libs-fdmemory" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-fdmemory.html">
+<ANCHOR id="gst-plugins-base-libs-fdmemory.functions" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-fdmemory.html#gst-plugins-base-libs-fdmemory.functions">
+<ANCHOR id="gst-plugins-base-libs-fdmemory.other" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-fdmemory.html#gst-plugins-base-libs-fdmemory.other">
+<ANCHOR id="gst-plugins-base-libs-fdmemory.includes" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-fdmemory.html#gst-plugins-base-libs-fdmemory.includes">
+<ANCHOR id="gst-plugins-base-libs-fdmemory.description" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-fdmemory.html#gst-plugins-base-libs-fdmemory.description">
+<ANCHOR id="gst-plugins-base-libs-fdmemory.functions_details" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-fdmemory.html#gst-plugins-base-libs-fdmemory.functions_details">
+<ANCHOR id="gst-fd-allocator-alloc" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-fdmemory.html#gst-fd-allocator-alloc">
+<ANCHOR id="gst-fd-allocator-get-type" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-fdmemory.html#gst-fd-allocator-get-type">
+<ANCHOR id="gst-fd-allocator-new" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-fdmemory.html#gst-fd-allocator-new">
+<ANCHOR id="gst-fd-memory-get-fd" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-fdmemory.html#gst-fd-memory-get-fd">
+<ANCHOR id="gst-is-fd-memory" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-fdmemory.html#gst-is-fd-memory">
+<ANCHOR id="gst-plugins-base-libs-fdmemory.other_details" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-fdmemory.html#gst-plugins-base-libs-fdmemory.other_details">
+<ANCHOR id="GstFdMemoryFlags" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-fdmemory.html#GstFdMemoryFlags">
+<ANCHOR id="GST-FD-MEMORY-FLAG-NONE:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-fdmemory.html#GST-FD-MEMORY-FLAG-NONE:CAPS">
+<ANCHOR id="GST-FD-MEMORY-FLAG-KEEP-MAPPED:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-fdmemory.html#GST-FD-MEMORY-FLAG-KEEP-MAPPED:CAPS">
+<ANCHOR id="GST-FD-MEMORY-FLAG-MAP-PRIVATE:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-fdmemory.html#GST-FD-MEMORY-FLAG-MAP-PRIVATE:CAPS">
+<ANCHOR id="gst-plugins-base-libs-fdmemory.see-also" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-fdmemory.html#gst-plugins-base-libs-fdmemory.see-also">
 <ANCHOR id="gst-plugins-base-libs-appsrc" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-appsrc.html">
 <ANCHOR id="gst-plugins-base-libs-appsrc.functions" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-appsrc.html#gst-plugins-base-libs-appsrc.functions">
 <ANCHOR id="gst-plugins-base-libs-appsrc.other" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-appsrc.html#gst-plugins-base-libs-appsrc.other">
@@ -31,9 +49,13 @@
 <ANCHOR id="gst-app-src-set-emit-signals" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-appsrc.html#gst-app-src-set-emit-signals">
 <ANCHOR id="gst-app-src-set-callbacks" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-appsrc.html#gst-app-src-set-callbacks">
 <ANCHOR id="gst-app-src-push-buffer" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-appsrc.html#gst-app-src-push-buffer">
+<ANCHOR id="gst-app-src-push-sample" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-appsrc.html#gst-app-src-push-sample">
 <ANCHOR id="gst-app-src-end-of-stream" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-appsrc.html#gst-app-src-end-of-stream">
 <ANCHOR id="gst-plugins-base-libs-appsrc.other_details" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-appsrc.html#gst-plugins-base-libs-appsrc.other_details">
 <ANCHOR id="GstAppStreamType" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-appsrc.html#GstAppStreamType">
+<ANCHOR id="GST-APP-STREAM-TYPE-STREAM:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-appsrc.html#GST-APP-STREAM-TYPE-STREAM:CAPS">
+<ANCHOR id="GST-APP-STREAM-TYPE-SEEKABLE:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-appsrc.html#GST-APP-STREAM-TYPE-SEEKABLE:CAPS">
+<ANCHOR id="GST-APP-STREAM-TYPE-RANDOM-ACCESS:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-appsrc.html#GST-APP-STREAM-TYPE-RANDOM-ACCESS:CAPS">
 <ANCHOR id="GstAppSrcCallbacks" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-appsrc.html#GstAppSrcCallbacks">
 <ANCHOR id="gst-plugins-base-libs-appsrc.see-also" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-appsrc.html#gst-plugins-base-libs-appsrc.see-also">
 <ANCHOR id="gst-plugins-base-libs-appsink" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-appsink.html">
@@ -117,12 +139,68 @@
 <ANCHOR id="gst-audio-buffer-clip" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstaudio.html#gst-audio-buffer-clip">
 <ANCHOR id="gst-plugins-base-libs-gstaudio.other_details" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstaudio.html#gst-plugins-base-libs-gstaudio.other_details">
 <ANCHOR id="GstAudioFlags" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstaudio.html#GstAudioFlags">
+<ANCHOR id="GST-AUDIO-FLAG-NONE:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstaudio.html#GST-AUDIO-FLAG-NONE:CAPS">
+<ANCHOR id="GST-AUDIO-FLAG-UNPOSITIONED:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstaudio.html#GST-AUDIO-FLAG-UNPOSITIONED:CAPS">
 <ANCHOR id="GstAudioFormat" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstaudio.html#GstAudioFormat">
+<ANCHOR id="GST-AUDIO-FORMAT-UNKNOWN:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstaudio.html#GST-AUDIO-FORMAT-UNKNOWN:CAPS">
+<ANCHOR id="GST-AUDIO-FORMAT-ENCODED:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstaudio.html#GST-AUDIO-FORMAT-ENCODED:CAPS">
+<ANCHOR id="GST-AUDIO-FORMAT-S8:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstaudio.html#GST-AUDIO-FORMAT-S8:CAPS">
+<ANCHOR id="GST-AUDIO-FORMAT-U8:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstaudio.html#GST-AUDIO-FORMAT-U8:CAPS">
+<ANCHOR id="GST-AUDIO-FORMAT-S16LE:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstaudio.html#GST-AUDIO-FORMAT-S16LE:CAPS">
+<ANCHOR id="GST-AUDIO-FORMAT-S16BE:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstaudio.html#GST-AUDIO-FORMAT-S16BE:CAPS">
+<ANCHOR id="GST-AUDIO-FORMAT-U16LE:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstaudio.html#GST-AUDIO-FORMAT-U16LE:CAPS">
+<ANCHOR id="GST-AUDIO-FORMAT-U16BE:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstaudio.html#GST-AUDIO-FORMAT-U16BE:CAPS">
+<ANCHOR id="GST-AUDIO-FORMAT-S24-32LE:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstaudio.html#GST-AUDIO-FORMAT-S24-32LE:CAPS">
+<ANCHOR id="GST-AUDIO-FORMAT-S24-32BE:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstaudio.html#GST-AUDIO-FORMAT-S24-32BE:CAPS">
+<ANCHOR id="GST-AUDIO-FORMAT-U24-32LE:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstaudio.html#GST-AUDIO-FORMAT-U24-32LE:CAPS">
+<ANCHOR id="GST-AUDIO-FORMAT-U24-32BE:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstaudio.html#GST-AUDIO-FORMAT-U24-32BE:CAPS">
+<ANCHOR id="GST-AUDIO-FORMAT-S32LE:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstaudio.html#GST-AUDIO-FORMAT-S32LE:CAPS">
+<ANCHOR id="GST-AUDIO-FORMAT-S32BE:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstaudio.html#GST-AUDIO-FORMAT-S32BE:CAPS">
+<ANCHOR id="GST-AUDIO-FORMAT-U32LE:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstaudio.html#GST-AUDIO-FORMAT-U32LE:CAPS">
+<ANCHOR id="GST-AUDIO-FORMAT-U32BE:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstaudio.html#GST-AUDIO-FORMAT-U32BE:CAPS">
+<ANCHOR id="GST-AUDIO-FORMAT-S24LE:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstaudio.html#GST-AUDIO-FORMAT-S24LE:CAPS">
+<ANCHOR id="GST-AUDIO-FORMAT-S24BE:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstaudio.html#GST-AUDIO-FORMAT-S24BE:CAPS">
+<ANCHOR id="GST-AUDIO-FORMAT-U24LE:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstaudio.html#GST-AUDIO-FORMAT-U24LE:CAPS">
+<ANCHOR id="GST-AUDIO-FORMAT-U24BE:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstaudio.html#GST-AUDIO-FORMAT-U24BE:CAPS">
+<ANCHOR id="GST-AUDIO-FORMAT-S20LE:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstaudio.html#GST-AUDIO-FORMAT-S20LE:CAPS">
+<ANCHOR id="GST-AUDIO-FORMAT-S20BE:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstaudio.html#GST-AUDIO-FORMAT-S20BE:CAPS">
+<ANCHOR id="GST-AUDIO-FORMAT-U20LE:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstaudio.html#GST-AUDIO-FORMAT-U20LE:CAPS">
+<ANCHOR id="GST-AUDIO-FORMAT-U20BE:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstaudio.html#GST-AUDIO-FORMAT-U20BE:CAPS">
+<ANCHOR id="GST-AUDIO-FORMAT-S18LE:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstaudio.html#GST-AUDIO-FORMAT-S18LE:CAPS">
+<ANCHOR id="GST-AUDIO-FORMAT-S18BE:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstaudio.html#GST-AUDIO-FORMAT-S18BE:CAPS">
+<ANCHOR id="GST-AUDIO-FORMAT-U18LE:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstaudio.html#GST-AUDIO-FORMAT-U18LE:CAPS">
+<ANCHOR id="GST-AUDIO-FORMAT-U18BE:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstaudio.html#GST-AUDIO-FORMAT-U18BE:CAPS">
+<ANCHOR id="GST-AUDIO-FORMAT-F32LE:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstaudio.html#GST-AUDIO-FORMAT-F32LE:CAPS">
+<ANCHOR id="GST-AUDIO-FORMAT-F32BE:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstaudio.html#GST-AUDIO-FORMAT-F32BE:CAPS">
+<ANCHOR id="GST-AUDIO-FORMAT-F64LE:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstaudio.html#GST-AUDIO-FORMAT-F64LE:CAPS">
+<ANCHOR id="GST-AUDIO-FORMAT-F64BE:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstaudio.html#GST-AUDIO-FORMAT-F64BE:CAPS">
+<ANCHOR id="GST-AUDIO-FORMAT-S16:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstaudio.html#GST-AUDIO-FORMAT-S16:CAPS">
+<ANCHOR id="GST-AUDIO-FORMAT-U16:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstaudio.html#GST-AUDIO-FORMAT-U16:CAPS">
+<ANCHOR id="GST-AUDIO-FORMAT-S24-32:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstaudio.html#GST-AUDIO-FORMAT-S24-32:CAPS">
+<ANCHOR id="GST-AUDIO-FORMAT-U24-32:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstaudio.html#GST-AUDIO-FORMAT-U24-32:CAPS">
+<ANCHOR id="GST-AUDIO-FORMAT-S32:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstaudio.html#GST-AUDIO-FORMAT-S32:CAPS">
+<ANCHOR id="GST-AUDIO-FORMAT-U32:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstaudio.html#GST-AUDIO-FORMAT-U32:CAPS">
+<ANCHOR id="GST-AUDIO-FORMAT-S24:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstaudio.html#GST-AUDIO-FORMAT-S24:CAPS">
+<ANCHOR id="GST-AUDIO-FORMAT-U24:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstaudio.html#GST-AUDIO-FORMAT-U24:CAPS">
+<ANCHOR id="GST-AUDIO-FORMAT-S20:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstaudio.html#GST-AUDIO-FORMAT-S20:CAPS">
+<ANCHOR id="GST-AUDIO-FORMAT-U20:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstaudio.html#GST-AUDIO-FORMAT-U20:CAPS">
+<ANCHOR id="GST-AUDIO-FORMAT-S18:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstaudio.html#GST-AUDIO-FORMAT-S18:CAPS">
+<ANCHOR id="GST-AUDIO-FORMAT-U18:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstaudio.html#GST-AUDIO-FORMAT-U18:CAPS">
+<ANCHOR id="GST-AUDIO-FORMAT-F32:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstaudio.html#GST-AUDIO-FORMAT-F32:CAPS">
+<ANCHOR id="GST-AUDIO-FORMAT-F64:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstaudio.html#GST-AUDIO-FORMAT-F64:CAPS">
 <ANCHOR id="GstAudioFormatFlags" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstaudio.html#GstAudioFormatFlags">
+<ANCHOR id="GST-AUDIO-FORMAT-FLAG-INTEGER:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstaudio.html#GST-AUDIO-FORMAT-FLAG-INTEGER:CAPS">
+<ANCHOR id="GST-AUDIO-FORMAT-FLAG-FLOAT:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstaudio.html#GST-AUDIO-FORMAT-FLAG-FLOAT:CAPS">
+<ANCHOR id="GST-AUDIO-FORMAT-FLAG-SIGNED:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstaudio.html#GST-AUDIO-FORMAT-FLAG-SIGNED:CAPS">
+<ANCHOR id="GST-AUDIO-FORMAT-FLAG-COMPLEX:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstaudio.html#GST-AUDIO-FORMAT-FLAG-COMPLEX:CAPS">
+<ANCHOR id="GST-AUDIO-FORMAT-FLAG-UNPACK:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstaudio.html#GST-AUDIO-FORMAT-FLAG-UNPACK:CAPS">
 <ANCHOR id="GstAudioFormatInfo" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstaudio.html#GstAudioFormatInfo">
 <ANCHOR id="GstAudioInfo" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstaudio.html#GstAudioInfo">
 <ANCHOR id="GstAudioLayout" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstaudio.html#GstAudioLayout">
+<ANCHOR id="GST-AUDIO-LAYOUT-INTERLEAVED:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstaudio.html#GST-AUDIO-LAYOUT-INTERLEAVED:CAPS">
+<ANCHOR id="GST-AUDIO-LAYOUT-NON-INTERLEAVED:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstaudio.html#GST-AUDIO-LAYOUT-NON-INTERLEAVED:CAPS">
 <ANCHOR id="GstAudioPackFlags" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstaudio.html#GstAudioPackFlags">
+<ANCHOR id="GST-AUDIO-PACK-FLAG-NONE:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstaudio.html#GST-AUDIO-PACK-FLAG-NONE:CAPS">
 <ANCHOR id="GST-META-TAG-AUDIO-STR:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstaudio.html#GST-META-TAG-AUDIO-STR:CAPS">
 <ANCHOR id="GST-META-TAG-AUDIO-CHANNELS-STR:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstaudio.html#GST-META-TAG-AUDIO-CHANNELS-STR:CAPS">
 <ANCHOR id="GST-AUDIO-RATE-RANGE:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstaudio.html#GST-AUDIO-RATE-RANGE:CAPS">
@@ -158,6 +236,8 @@
 <ANCHOR id="GstAudioCdSrcClass" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstaudiocdsrc.html#GstAudioCdSrcClass">
 <ANCHOR id="GstAudioCdSrcTrack" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstaudiocdsrc.html#GstAudioCdSrcTrack">
 <ANCHOR id="GstAudioCdSrcMode" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstaudiocdsrc.html#GstAudioCdSrcMode">
+<ANCHOR id="GST-AUDIO-CD-SRC-MODE-NORMAL:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstaudiocdsrc.html#GST-AUDIO-CD-SRC-MODE-NORMAL:CAPS">
+<ANCHOR id="GST-AUDIO-CD-SRC-MODE-CONTINUOUS:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstaudiocdsrc.html#GST-AUDIO-CD-SRC-MODE-CONTINUOUS:CAPS">
 <ANCHOR id="gst-plugins-base-libs-gstaudiocdsrc.property-details" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstaudiocdsrc.html#gst-plugins-base-libs-gstaudiocdsrc.property-details">
 <ANCHOR id="GstAudioCdSrc--device" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstaudiocdsrc.html#GstAudioCdSrc--device">
 <ANCHOR id="GstAudioCdSrc--mode" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstaudiocdsrc.html#GstAudioCdSrc--mode">
@@ -218,6 +298,7 @@
 <ANCHOR id="gst-audio-decoder-set-plc-aware" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstaudiodecoder.html#gst-audio-decoder-set-plc-aware">
 <ANCHOR id="gst-audio-decoder-set-tolerance" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstaudiodecoder.html#gst-audio-decoder-set-tolerance">
 <ANCHOR id="gst-audio-decoder-merge-tags" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstaudiodecoder.html#gst-audio-decoder-merge-tags">
+<ANCHOR id="gst-audio-decoder-proxy-getcaps" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstaudiodecoder.html#gst-audio-decoder-proxy-getcaps">
 <ANCHOR id="gst-plugins-base-libs-gstaudiodecoder.other_details" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstaudiodecoder.html#gst-plugins-base-libs-gstaudiodecoder.other_details">
 <ANCHOR id="GstAudioDecoder-struct" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstaudiodecoder.html#GstAudioDecoder-struct">
 <ANCHOR id="GstAudioDecoderClass" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstaudiodecoder.html#GstAudioDecoderClass">
@@ -325,6 +406,7 @@
 <ANCHOR id="gst-plugins-base-libs-gstaudiobasesink.includes" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstaudiobasesink.html#gst-plugins-base-libs-gstaudiobasesink.includes">
 <ANCHOR id="gst-plugins-base-libs-gstaudiobasesink.description" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstaudiobasesink.html#gst-plugins-base-libs-gstaudiobasesink.description">
 <ANCHOR id="gst-plugins-base-libs-gstaudiobasesink.functions_details" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstaudiobasesink.html#gst-plugins-base-libs-gstaudiobasesink.functions_details">
+<ANCHOR id="GstAudioBaseSinkCustomSlavingCallback" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstaudiobasesink.html#GstAudioBaseSinkCustomSlavingCallback">
 <ANCHOR id="GST-AUDIO-BASE-SINK-CLOCK:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstaudiobasesink.html#GST-AUDIO-BASE-SINK-CLOCK:CAPS">
 <ANCHOR id="GST-AUDIO-BASE-SINK-PAD:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstaudiobasesink.html#GST-AUDIO-BASE-SINK-PAD:CAPS">
 <ANCHOR id="gst-audio-base-sink-create-ringbuffer" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstaudiobasesink.html#gst-audio-base-sink-create-ringbuffer">
@@ -338,10 +420,23 @@
 <ANCHOR id="gst-audio-base-sink-get-alignment-threshold" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstaudiobasesink.html#gst-audio-base-sink-get-alignment-threshold">
 <ANCHOR id="gst-audio-base-sink-set-discont-wait" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstaudiobasesink.html#gst-audio-base-sink-set-discont-wait">
 <ANCHOR id="gst-audio-base-sink-get-discont-wait" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstaudiobasesink.html#gst-audio-base-sink-get-discont-wait">
+<ANCHOR id="gst-audio-base-sink-set-custom-slaving-callback" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstaudiobasesink.html#gst-audio-base-sink-set-custom-slaving-callback">
+<ANCHOR id="gst-audio-base-sink-report-device-failure" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstaudiobasesink.html#gst-audio-base-sink-report-device-failure">
 <ANCHOR id="gst-plugins-base-libs-gstaudiobasesink.other_details" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstaudiobasesink.html#gst-plugins-base-libs-gstaudiobasesink.other_details">
 <ANCHOR id="GstAudioBaseSink-struct" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstaudiobasesink.html#GstAudioBaseSink-struct">
 <ANCHOR id="GstAudioBaseSinkClass" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstaudiobasesink.html#GstAudioBaseSinkClass">
 <ANCHOR id="GstAudioBaseSinkSlaveMethod" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstaudiobasesink.html#GstAudioBaseSinkSlaveMethod">
+<ANCHOR id="GST-AUDIO-BASE-SINK-SLAVE-RESAMPLE:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstaudiobasesink.html#GST-AUDIO-BASE-SINK-SLAVE-RESAMPLE:CAPS">
+<ANCHOR id="GST-AUDIO-BASE-SINK-SLAVE-SKEW:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstaudiobasesink.html#GST-AUDIO-BASE-SINK-SLAVE-SKEW:CAPS">
+<ANCHOR id="GST-AUDIO-BASE-SINK-SLAVE-NONE:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstaudiobasesink.html#GST-AUDIO-BASE-SINK-SLAVE-NONE:CAPS">
+<ANCHOR id="GST-AUDIO-BASE-SINK-SLAVE-CUSTOM:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstaudiobasesink.html#GST-AUDIO-BASE-SINK-SLAVE-CUSTOM:CAPS">
+<ANCHOR id="GstAudioBaseSinkDiscontReason" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstaudiobasesink.html#GstAudioBaseSinkDiscontReason">
+<ANCHOR id="GST-AUDIO-BASE-SINK-DISCONT-REASON-NO-DISCONT:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstaudiobasesink.html#GST-AUDIO-BASE-SINK-DISCONT-REASON-NO-DISCONT:CAPS">
+<ANCHOR id="GST-AUDIO-BASE-SINK-DISCONT-REASON-NEW-CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstaudiobasesink.html#GST-AUDIO-BASE-SINK-DISCONT-REASON-NEW-CAPS">
+<ANCHOR id="GST-AUDIO-BASE-SINK-DISCONT-REASON-FLUSH:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstaudiobasesink.html#GST-AUDIO-BASE-SINK-DISCONT-REASON-FLUSH:CAPS">
+<ANCHOR id="GST-AUDIO-BASE-SINK-DISCONT-REASON-SYNC-LATENCY:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstaudiobasesink.html#GST-AUDIO-BASE-SINK-DISCONT-REASON-SYNC-LATENCY:CAPS">
+<ANCHOR id="GST-AUDIO-BASE-SINK-DISCONT-REASON-ALIGNMENT:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstaudiobasesink.html#GST-AUDIO-BASE-SINK-DISCONT-REASON-ALIGNMENT:CAPS">
+<ANCHOR id="GST-AUDIO-BASE-SINK-DISCONT-REASON-DEVICE-FAILURE:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstaudiobasesink.html#GST-AUDIO-BASE-SINK-DISCONT-REASON-DEVICE-FAILURE:CAPS">
 <ANCHOR id="gst-plugins-base-libs-gstaudiobasesink.property-details" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstaudiobasesink.html#gst-plugins-base-libs-gstaudiobasesink.property-details">
 <ANCHOR id="GstAudioBaseSink--alignment-threshold" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstaudiobasesink.html#GstAudioBaseSink--alignment-threshold">
 <ANCHOR id="GstAudioBaseSink--buffer-time" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstaudiobasesink.html#GstAudioBaseSink--buffer-time">
@@ -372,6 +467,10 @@
 <ANCHOR id="GstAudioBaseSrc-struct" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstaudiobasesrc.html#GstAudioBaseSrc-struct">
 <ANCHOR id="GstAudioBaseSrcClass" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstaudiobasesrc.html#GstAudioBaseSrcClass">
 <ANCHOR id="GstAudioBaseSrcSlaveMethod" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstaudiobasesrc.html#GstAudioBaseSrcSlaveMethod">
+<ANCHOR id="GST-AUDIO-BASE-SRC-SLAVE-RESAMPLE:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstaudiobasesrc.html#GST-AUDIO-BASE-SRC-SLAVE-RESAMPLE:CAPS">
+<ANCHOR id="GST-AUDIO-BASE-SRC-SLAVE-RETIMESTAMP:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstaudiobasesrc.html#GST-AUDIO-BASE-SRC-SLAVE-RETIMESTAMP:CAPS">
+<ANCHOR id="GST-AUDIO-BASE-SRC-SLAVE-SKEW:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstaudiobasesrc.html#GST-AUDIO-BASE-SRC-SLAVE-SKEW:CAPS">
+<ANCHOR id="GST-AUDIO-BASE-SRC-SLAVE-NONE:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstaudiobasesrc.html#GST-AUDIO-BASE-SRC-SLAVE-NONE:CAPS">
 <ANCHOR id="gst-plugins-base-libs-gstaudiobasesrc.property-details" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstaudiobasesrc.html#gst-plugins-base-libs-gstaudiobasesrc.property-details">
 <ANCHOR id="GstAudioBaseSrc--actual-buffer-time" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstaudiobasesrc.html#GstAudioBaseSrc--actual-buffer-time">
 <ANCHOR id="GstAudioBaseSrc--actual-latency-time" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstaudiobasesrc.html#GstAudioBaseSrc--actual-latency-time">
@@ -396,6 +495,37 @@
 <ANCHOR id="gst-audio-get-channel-reorder-map" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstaudiochannels.html#gst-audio-get-channel-reorder-map">
 <ANCHOR id="gst-plugins-base-libs-gstaudiochannels.other_details" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstaudiochannels.html#gst-plugins-base-libs-gstaudiochannels.other_details">
 <ANCHOR id="GstAudioChannelPosition" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstaudiochannels.html#GstAudioChannelPosition">
+<ANCHOR id="GST-AUDIO-CHANNEL-POSITION-NONE:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstaudiochannels.html#GST-AUDIO-CHANNEL-POSITION-NONE:CAPS">
+<ANCHOR id="GST-AUDIO-CHANNEL-POSITION-MONO:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstaudiochannels.html#GST-AUDIO-CHANNEL-POSITION-MONO:CAPS">
+<ANCHOR id="GST-AUDIO-CHANNEL-POSITION-INVALID:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstaudiochannels.html#GST-AUDIO-CHANNEL-POSITION-INVALID:CAPS">
+<ANCHOR id="GST-AUDIO-CHANNEL-POSITION-FRONT-LEFT:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstaudiochannels.html#GST-AUDIO-CHANNEL-POSITION-FRONT-LEFT:CAPS">
+<ANCHOR id="GST-AUDIO-CHANNEL-POSITION-FRONT-RIGHT:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstaudiochannels.html#GST-AUDIO-CHANNEL-POSITION-FRONT-RIGHT:CAPS">
+<ANCHOR id="GST-AUDIO-CHANNEL-POSITION-FRONT-CENTER:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstaudiochannels.html#GST-AUDIO-CHANNEL-POSITION-FRONT-CENTER:CAPS">
+<ANCHOR id="GST-AUDIO-CHANNEL-POSITION-LFE1:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstaudiochannels.html#GST-AUDIO-CHANNEL-POSITION-LFE1:CAPS">
+<ANCHOR id="GST-AUDIO-CHANNEL-POSITION-REAR-LEFT:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstaudiochannels.html#GST-AUDIO-CHANNEL-POSITION-REAR-LEFT:CAPS">
+<ANCHOR id="GST-AUDIO-CHANNEL-POSITION-REAR-RIGHT:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstaudiochannels.html#GST-AUDIO-CHANNEL-POSITION-REAR-RIGHT:CAPS">
+<ANCHOR id="GST-AUDIO-CHANNEL-POSITION-FRONT-LEFT-OF-CENTER:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstaudiochannels.html#GST-AUDIO-CHANNEL-POSITION-FRONT-LEFT-OF-CENTER:CAPS">
+<ANCHOR id="GST-AUDIO-CHANNEL-POSITION-FRONT-RIGHT-OF-CENTER:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstaudiochannels.html#GST-AUDIO-CHANNEL-POSITION-FRONT-RIGHT-OF-CENTER:CAPS">
+<ANCHOR id="GST-AUDIO-CHANNEL-POSITION-REAR-CENTER:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstaudiochannels.html#GST-AUDIO-CHANNEL-POSITION-REAR-CENTER:CAPS">
+<ANCHOR id="GST-AUDIO-CHANNEL-POSITION-LFE2:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstaudiochannels.html#GST-AUDIO-CHANNEL-POSITION-LFE2:CAPS">
+<ANCHOR id="GST-AUDIO-CHANNEL-POSITION-SIDE-LEFT:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstaudiochannels.html#GST-AUDIO-CHANNEL-POSITION-SIDE-LEFT:CAPS">
+<ANCHOR id="GST-AUDIO-CHANNEL-POSITION-SIDE-RIGHT:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstaudiochannels.html#GST-AUDIO-CHANNEL-POSITION-SIDE-RIGHT:CAPS">
+<ANCHOR id="GST-AUDIO-CHANNEL-POSITION-TOP-FRONT-LEFT:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstaudiochannels.html#GST-AUDIO-CHANNEL-POSITION-TOP-FRONT-LEFT:CAPS">
+<ANCHOR id="GST-AUDIO-CHANNEL-POSITION-TOP-FRONT-RIGHT:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstaudiochannels.html#GST-AUDIO-CHANNEL-POSITION-TOP-FRONT-RIGHT:CAPS">
+<ANCHOR id="GST-AUDIO-CHANNEL-POSITION-TOP-FRONT-CENTER:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstaudiochannels.html#GST-AUDIO-CHANNEL-POSITION-TOP-FRONT-CENTER:CAPS">
+<ANCHOR id="GST-AUDIO-CHANNEL-POSITION-TOP-CENTER:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstaudiochannels.html#GST-AUDIO-CHANNEL-POSITION-TOP-CENTER:CAPS">
+<ANCHOR id="GST-AUDIO-CHANNEL-POSITION-TOP-REAR-LEFT:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstaudiochannels.html#GST-AUDIO-CHANNEL-POSITION-TOP-REAR-LEFT:CAPS">
+<ANCHOR id="GST-AUDIO-CHANNEL-POSITION-TOP-REAR-RIGHT:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstaudiochannels.html#GST-AUDIO-CHANNEL-POSITION-TOP-REAR-RIGHT:CAPS">
+<ANCHOR id="GST-AUDIO-CHANNEL-POSITION-TOP-SIDE-LEFT:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstaudiochannels.html#GST-AUDIO-CHANNEL-POSITION-TOP-SIDE-LEFT:CAPS">
+<ANCHOR id="GST-AUDIO-CHANNEL-POSITION-TOP-SIDE-RIGHT:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstaudiochannels.html#GST-AUDIO-CHANNEL-POSITION-TOP-SIDE-RIGHT:CAPS">
+<ANCHOR id="GST-AUDIO-CHANNEL-POSITION-TOP-REAR-CENTER:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstaudiochannels.html#GST-AUDIO-CHANNEL-POSITION-TOP-REAR-CENTER:CAPS">
+<ANCHOR id="GST-AUDIO-CHANNEL-POSITION-BOTTOM-FRONT-CENTER:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstaudiochannels.html#GST-AUDIO-CHANNEL-POSITION-BOTTOM-FRONT-CENTER:CAPS">
+<ANCHOR id="GST-AUDIO-CHANNEL-POSITION-BOTTOM-FRONT-LEFT:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstaudiochannels.html#GST-AUDIO-CHANNEL-POSITION-BOTTOM-FRONT-LEFT:CAPS">
+<ANCHOR id="GST-AUDIO-CHANNEL-POSITION-BOTTOM-FRONT-RIGHT:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstaudiochannels.html#GST-AUDIO-CHANNEL-POSITION-BOTTOM-FRONT-RIGHT:CAPS">
+<ANCHOR id="GST-AUDIO-CHANNEL-POSITION-WIDE-LEFT:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstaudiochannels.html#GST-AUDIO-CHANNEL-POSITION-WIDE-LEFT:CAPS">
+<ANCHOR id="GST-AUDIO-CHANNEL-POSITION-WIDE-RIGHT:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstaudiochannels.html#GST-AUDIO-CHANNEL-POSITION-WIDE-RIGHT:CAPS">
+<ANCHOR id="GST-AUDIO-CHANNEL-POSITION-SURROUND-LEFT:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstaudiochannels.html#GST-AUDIO-CHANNEL-POSITION-SURROUND-LEFT:CAPS">
+<ANCHOR id="GST-AUDIO-CHANNEL-POSITION-SURROUND-RIGHT:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstaudiochannels.html#GST-AUDIO-CHANNEL-POSITION-SURROUND-RIGHT:CAPS">
 <ANCHOR id="gst-plugins-base-libs-gstaudioringbuffer" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstaudioringbuffer.html">
 <ANCHOR id="gst-plugins-base-libs-gstaudioringbuffer.functions" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstaudioringbuffer.html#gst-plugins-base-libs-gstaudioringbuffer.functions">
 <ANCHOR id="GstAudioRingBuffer" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstaudioringbuffer.html#GstAudioRingBuffer">
@@ -442,7 +572,23 @@
 <ANCHOR id="GstAudioRingBufferClass" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstaudioringbuffer.html#GstAudioRingBufferClass">
 <ANCHOR id="GstAudioRingBufferSpec" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstaudioringbuffer.html#GstAudioRingBufferSpec">
 <ANCHOR id="GstAudioRingBufferState" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstaudioringbuffer.html#GstAudioRingBufferState">
+<ANCHOR id="GST-AUDIO-RING-BUFFER-STATE-STOPPED:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstaudioringbuffer.html#GST-AUDIO-RING-BUFFER-STATE-STOPPED:CAPS">
+<ANCHOR id="GST-AUDIO-RING-BUFFER-STATE-PAUSED:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstaudioringbuffer.html#GST-AUDIO-RING-BUFFER-STATE-PAUSED:CAPS">
+<ANCHOR id="GST-AUDIO-RING-BUFFER-STATE-STARTED:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstaudioringbuffer.html#GST-AUDIO-RING-BUFFER-STATE-STARTED:CAPS">
+<ANCHOR id="GST-AUDIO-RING-BUFFER-STATE-ERROR:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstaudioringbuffer.html#GST-AUDIO-RING-BUFFER-STATE-ERROR:CAPS">
 <ANCHOR id="GstAudioRingBufferFormatType" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstaudioringbuffer.html#GstAudioRingBufferFormatType">
+<ANCHOR id="GST-AUDIO-RING-BUFFER-FORMAT-TYPE-RAW:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstaudioringbuffer.html#GST-AUDIO-RING-BUFFER-FORMAT-TYPE-RAW:CAPS">
+<ANCHOR id="GST-AUDIO-RING-BUFFER-FORMAT-TYPE-MU-LAW:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstaudioringbuffer.html#GST-AUDIO-RING-BUFFER-FORMAT-TYPE-MU-LAW:CAPS">
+<ANCHOR id="GST-AUDIO-RING-BUFFER-FORMAT-TYPE-A-LAW:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstaudioringbuffer.html#GST-AUDIO-RING-BUFFER-FORMAT-TYPE-A-LAW:CAPS">
+<ANCHOR id="GST-AUDIO-RING-BUFFER-FORMAT-TYPE-IMA-ADPCM:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstaudioringbuffer.html#GST-AUDIO-RING-BUFFER-FORMAT-TYPE-IMA-ADPCM:CAPS">
+<ANCHOR id="GST-AUDIO-RING-BUFFER-FORMAT-TYPE-MPEG:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstaudioringbuffer.html#GST-AUDIO-RING-BUFFER-FORMAT-TYPE-MPEG:CAPS">
+<ANCHOR id="GST-AUDIO-RING-BUFFER-FORMAT-TYPE-GSM:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstaudioringbuffer.html#GST-AUDIO-RING-BUFFER-FORMAT-TYPE-GSM:CAPS">
+<ANCHOR id="GST-AUDIO-RING-BUFFER-FORMAT-TYPE-IEC958:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstaudioringbuffer.html#GST-AUDIO-RING-BUFFER-FORMAT-TYPE-IEC958:CAPS">
+<ANCHOR id="GST-AUDIO-RING-BUFFER-FORMAT-TYPE-AC3:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstaudioringbuffer.html#GST-AUDIO-RING-BUFFER-FORMAT-TYPE-AC3:CAPS">
+<ANCHOR id="GST-AUDIO-RING-BUFFER-FORMAT-TYPE-EAC3:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstaudioringbuffer.html#GST-AUDIO-RING-BUFFER-FORMAT-TYPE-EAC3:CAPS">
+<ANCHOR id="GST-AUDIO-RING-BUFFER-FORMAT-TYPE-DTS:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstaudioringbuffer.html#GST-AUDIO-RING-BUFFER-FORMAT-TYPE-DTS:CAPS">
+<ANCHOR id="GST-AUDIO-RING-BUFFER-FORMAT-TYPE-MPEG2-AAC:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstaudioringbuffer.html#GST-AUDIO-RING-BUFFER-FORMAT-TYPE-MPEG2-AAC:CAPS">
+<ANCHOR id="GST-AUDIO-RING-BUFFER-FORMAT-TYPE-MPEG4-AAC:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstaudioringbuffer.html#GST-AUDIO-RING-BUFFER-FORMAT-TYPE-MPEG4-AAC:CAPS">
 <ANCHOR id="gst-plugins-base-libs-gstaudioringbuffer.see-also" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstaudioringbuffer.html#gst-plugins-base-libs-gstaudioringbuffer.see-also">
 <ANCHOR id="gst-plugins-base-libs-gstaudioiec61937" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstaudioiec61937.html">
 <ANCHOR id="gst-plugins-base-libs-gstaudioiec61937.functions" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstaudioiec61937.html#gst-plugins-base-libs-gstaudioiec61937.functions">
@@ -470,6 +616,9 @@
 <ANCHOR id="gst-plugins-base-libs-gststreamvolume.other_details" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gststreamvolume.html#gst-plugins-base-libs-gststreamvolume.other_details">
 <ANCHOR id="GstStreamVolume-struct" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gststreamvolume.html#GstStreamVolume-struct">
 <ANCHOR id="GstStreamVolumeFormat" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gststreamvolume.html#GstStreamVolumeFormat">
+<ANCHOR id="GST-STREAM-VOLUME-FORMAT-LINEAR:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gststreamvolume.html#GST-STREAM-VOLUME-FORMAT-LINEAR:CAPS">
+<ANCHOR id="GST-STREAM-VOLUME-FORMAT-CUBIC:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gststreamvolume.html#GST-STREAM-VOLUME-FORMAT-CUBIC:CAPS">
+<ANCHOR id="GST-STREAM-VOLUME-FORMAT-DB:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gststreamvolume.html#GST-STREAM-VOLUME-FORMAT-DB:CAPS">
 <ANCHOR id="gst-plugins-base-libs-gststreamvolume.property-details" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gststreamvolume.html#gst-plugins-base-libs-gststreamvolume.property-details">
 <ANCHOR id="GstStreamVolume--mute" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gststreamvolume.html#GstStreamVolume--mute">
 <ANCHOR id="GstStreamVolume--volume" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gststreamvolume.html#GstStreamVolume--volume">
@@ -482,6 +631,11 @@
 <ANCHOR id="gst-fft-next-fast-length" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstfft.html#gst-fft-next-fast-length">
 <ANCHOR id="gst-plugins-base-libs-gstfft.other_details" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstfft.html#gst-plugins-base-libs-gstfft.other_details">
 <ANCHOR id="GstFFTWindow" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstfft.html#GstFFTWindow">
+<ANCHOR id="GST-FFT-WINDOW-RECTANGULAR:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstfft.html#GST-FFT-WINDOW-RECTANGULAR:CAPS">
+<ANCHOR id="GST-FFT-WINDOW-HAMMING:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstfft.html#GST-FFT-WINDOW-HAMMING:CAPS">
+<ANCHOR id="GST-FFT-WINDOW-HANN:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstfft.html#GST-FFT-WINDOW-HANN:CAPS">
+<ANCHOR id="GST-FFT-WINDOW-BARTLETT:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstfft.html#GST-FFT-WINDOW-BARTLETT:CAPS">
+<ANCHOR id="GST-FFT-WINDOW-BLACKMAN:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstfft.html#GST-FFT-WINDOW-BLACKMAN:CAPS">
 <ANCHOR id="gst-plugins-base-libs-gstffts16" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstffts16.html">
 <ANCHOR id="gst-plugins-base-libs-gstffts16.functions" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstffts16.html#gst-plugins-base-libs-gstffts16.functions">
 <ANCHOR id="gst-plugins-base-libs-gstffts16.other" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstffts16.html#gst-plugins-base-libs-gstffts16.other">
@@ -660,6 +814,7 @@
 <ANCHOR id="gst-rtp-buffer-get-extension" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtpbuffer.html#gst-rtp-buffer-get-extension">
 <ANCHOR id="gst-rtp-buffer-set-extension" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtpbuffer.html#gst-rtp-buffer-set-extension">
 <ANCHOR id="gst-rtp-buffer-get-extension-data" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtpbuffer.html#gst-rtp-buffer-get-extension-data">
+<ANCHOR id="gst-rtp-buffer-get-extension-bytes" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtpbuffer.html#gst-rtp-buffer-get-extension-bytes">
 <ANCHOR id="gst-rtp-buffer-get-ssrc" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtpbuffer.html#gst-rtp-buffer-get-ssrc">
 <ANCHOR id="gst-rtp-buffer-set-ssrc" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtpbuffer.html#gst-rtp-buffer-set-ssrc">
 <ANCHOR id="gst-rtp-buffer-get-csrc-count" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtpbuffer.html#gst-rtp-buffer-get-csrc-count">
@@ -676,6 +831,7 @@
 <ANCHOR id="gst-rtp-buffer-get-payload-buffer" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtpbuffer.html#gst-rtp-buffer-get-payload-buffer">
 <ANCHOR id="gst-rtp-buffer-get-payload-subbuffer" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtpbuffer.html#gst-rtp-buffer-get-payload-subbuffer">
 <ANCHOR id="gst-rtp-buffer-get-payload-len" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtpbuffer.html#gst-rtp-buffer-get-payload-len">
+<ANCHOR id="gst-rtp-buffer-get-payload-bytes" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtpbuffer.html#gst-rtp-buffer-get-payload-bytes">
 <ANCHOR id="gst-rtp-buffer-get-payload" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtpbuffer.html#gst-rtp-buffer-get-payload">
 <ANCHOR id="gst-rtp-buffer-default-clock-rate" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtpbuffer.html#gst-rtp-buffer-default-clock-rate">
 <ANCHOR id="gst-rtp-buffer-compare-seqnum" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtpbuffer.html#gst-rtp-buffer-compare-seqnum">
@@ -700,6 +856,8 @@
 <ANCHOR id="GST-RTCP-VALID-VALUE:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtcpbuffer.html#GST-RTCP-VALID-VALUE:CAPS">
 <ANCHOR id="gst-rtcp-buffer-new-take-data" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtcpbuffer.html#gst-rtcp-buffer-new-take-data">
 <ANCHOR id="gst-rtcp-buffer-new-copy-data" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtcpbuffer.html#gst-rtcp-buffer-new-copy-data">
+<ANCHOR id="gst-rtcp-buffer-validate-data-reduced" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtcpbuffer.html#gst-rtcp-buffer-validate-data-reduced">
+<ANCHOR id="gst-rtcp-buffer-validate-reduced" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtcpbuffer.html#gst-rtcp-buffer-validate-reduced">
 <ANCHOR id="gst-rtcp-buffer-validate-data" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtcpbuffer.html#gst-rtcp-buffer-validate-data">
 <ANCHOR id="gst-rtcp-buffer-validate" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtcpbuffer.html#gst-rtcp-buffer-validate">
 <ANCHOR id="gst-rtcp-buffer-new" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtcpbuffer.html#gst-rtcp-buffer-new">
@@ -759,9 +917,40 @@
 <ANCHOR id="GST-RTCP-MAX-RB-COUNT:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtcpbuffer.html#GST-RTCP-MAX-RB-COUNT:CAPS">
 <ANCHOR id="GST-RTCP-MAX-SDES-ITEM-COUNT:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtcpbuffer.html#GST-RTCP-MAX-SDES-ITEM-COUNT:CAPS">
 <ANCHOR id="GstRTCPType" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtcpbuffer.html#GstRTCPType">
+<ANCHOR id="GST-RTCP-TYPE-INVALID:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtcpbuffer.html#GST-RTCP-TYPE-INVALID:CAPS">
+<ANCHOR id="GST-RTCP-TYPE-SR:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtcpbuffer.html#GST-RTCP-TYPE-SR:CAPS">
+<ANCHOR id="GST-RTCP-TYPE-RR:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtcpbuffer.html#GST-RTCP-TYPE-RR:CAPS">
+<ANCHOR id="GST-RTCP-TYPE-SDES:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtcpbuffer.html#GST-RTCP-TYPE-SDES:CAPS">
+<ANCHOR id="GST-RTCP-TYPE-BYE:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtcpbuffer.html#GST-RTCP-TYPE-BYE:CAPS">
+<ANCHOR id="GST-RTCP-TYPE-APP:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtcpbuffer.html#GST-RTCP-TYPE-APP:CAPS">
+<ANCHOR id="GST-RTCP-TYPE-RTPFB:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtcpbuffer.html#GST-RTCP-TYPE-RTPFB:CAPS">
+<ANCHOR id="GST-RTCP-TYPE-PSFB:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtcpbuffer.html#GST-RTCP-TYPE-PSFB:CAPS">
 <ANCHOR id="GstRTCPPacket" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtcpbuffer.html#GstRTCPPacket">
 <ANCHOR id="GstRTCPSDESType" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtcpbuffer.html#GstRTCPSDESType">
+<ANCHOR id="GST-RTCP-SDES-INVALID:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtcpbuffer.html#GST-RTCP-SDES-INVALID:CAPS">
+<ANCHOR id="GST-RTCP-SDES-END:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtcpbuffer.html#GST-RTCP-SDES-END:CAPS">
+<ANCHOR id="GST-RTCP-SDES-CNAME:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtcpbuffer.html#GST-RTCP-SDES-CNAME:CAPS">
+<ANCHOR id="GST-RTCP-SDES-NAME:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtcpbuffer.html#GST-RTCP-SDES-NAME:CAPS">
+<ANCHOR id="GST-RTCP-SDES-EMAIL:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtcpbuffer.html#GST-RTCP-SDES-EMAIL:CAPS">
+<ANCHOR id="GST-RTCP-SDES-PHONE:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtcpbuffer.html#GST-RTCP-SDES-PHONE:CAPS">
+<ANCHOR id="GST-RTCP-SDES-LOC:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtcpbuffer.html#GST-RTCP-SDES-LOC:CAPS">
+<ANCHOR id="GST-RTCP-SDES-TOOL:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtcpbuffer.html#GST-RTCP-SDES-TOOL:CAPS">
+<ANCHOR id="GST-RTCP-SDES-NOTE:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtcpbuffer.html#GST-RTCP-SDES-NOTE:CAPS">
+<ANCHOR id="GST-RTCP-SDES-PRIV:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtcpbuffer.html#GST-RTCP-SDES-PRIV:CAPS">
 <ANCHOR id="GstRTCPFBType" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtcpbuffer.html#GstRTCPFBType">
+<ANCHOR id="GST-RTCP-FB-TYPE-INVALID:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtcpbuffer.html#GST-RTCP-FB-TYPE-INVALID:CAPS">
+<ANCHOR id="GST-RTCP-RTPFB-TYPE-NACK:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtcpbuffer.html#GST-RTCP-RTPFB-TYPE-NACK:CAPS">
+<ANCHOR id="GST-RTCP-RTPFB-TYPE-TMMBR:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtcpbuffer.html#GST-RTCP-RTPFB-TYPE-TMMBR:CAPS">
+<ANCHOR id="GST-RTCP-RTPFB-TYPE-TMMBN:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtcpbuffer.html#GST-RTCP-RTPFB-TYPE-TMMBN:CAPS">
+<ANCHOR id="GST-RTCP-RTPFB-TYPE-RTCP-SR-REQ:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtcpbuffer.html#GST-RTCP-RTPFB-TYPE-RTCP-SR-REQ:CAPS">
+<ANCHOR id="GST-RTCP-PSFB-TYPE-PLI:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtcpbuffer.html#GST-RTCP-PSFB-TYPE-PLI:CAPS">
+<ANCHOR id="GST-RTCP-PSFB-TYPE-SLI:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtcpbuffer.html#GST-RTCP-PSFB-TYPE-SLI:CAPS">
+<ANCHOR id="GST-RTCP-PSFB-TYPE-RPSI:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtcpbuffer.html#GST-RTCP-PSFB-TYPE-RPSI:CAPS">
+<ANCHOR id="GST-RTCP-PSFB-TYPE-AFB:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtcpbuffer.html#GST-RTCP-PSFB-TYPE-AFB:CAPS">
+<ANCHOR id="GST-RTCP-PSFB-TYPE-FIR:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtcpbuffer.html#GST-RTCP-PSFB-TYPE-FIR:CAPS">
+<ANCHOR id="GST-RTCP-PSFB-TYPE-TSTR:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtcpbuffer.html#GST-RTCP-PSFB-TYPE-TSTR:CAPS">
+<ANCHOR id="GST-RTCP-PSFB-TYPE-TSTN:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtcpbuffer.html#GST-RTCP-PSFB-TYPE-TSTN:CAPS">
+<ANCHOR id="GST-RTCP-PSFB-TYPE-VBCN:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtcpbuffer.html#GST-RTCP-PSFB-TYPE-VBCN:CAPS">
 <ANCHOR id="GstRTCPBuffer" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtcpbuffer.html#GstRTCPBuffer">
 <ANCHOR id="GST-RTCP-BUFFER-INIT:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtcpbuffer.html#GST-RTCP-BUFFER-INIT:CAPS">
 <ANCHOR id="gst-plugins-base-libs-gstrtcpbuffer.see-also" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtcpbuffer.html#gst-plugins-base-libs-gstrtcpbuffer.see-also">
@@ -776,6 +965,32 @@
 <ANCHOR id="gst-rtp-payload-info-for-pt" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtppayloads.html#gst-rtp-payload-info-for-pt">
 <ANCHOR id="gst-plugins-base-libs-gstrtppayloads.other_details" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtppayloads.html#gst-plugins-base-libs-gstrtppayloads.other_details">
 <ANCHOR id="GstRTPPayload" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtppayloads.html#GstRTPPayload">
+<ANCHOR id="GST-RTP-PAYLOAD-PCMU:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtppayloads.html#GST-RTP-PAYLOAD-PCMU:CAPS">
+<ANCHOR id="GST-RTP-PAYLOAD-1016:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtppayloads.html#GST-RTP-PAYLOAD-1016:CAPS">
+<ANCHOR id="GST-RTP-PAYLOAD-G721:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtppayloads.html#GST-RTP-PAYLOAD-G721:CAPS">
+<ANCHOR id="GST-RTP-PAYLOAD-GSM:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtppayloads.html#GST-RTP-PAYLOAD-GSM:CAPS">
+<ANCHOR id="GST-RTP-PAYLOAD-G723:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtppayloads.html#GST-RTP-PAYLOAD-G723:CAPS">
+<ANCHOR id="GST-RTP-PAYLOAD-DVI4-8000:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtppayloads.html#GST-RTP-PAYLOAD-DVI4-8000:CAPS">
+<ANCHOR id="GST-RTP-PAYLOAD-DVI4-16000:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtppayloads.html#GST-RTP-PAYLOAD-DVI4-16000:CAPS">
+<ANCHOR id="GST-RTP-PAYLOAD-LPC:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtppayloads.html#GST-RTP-PAYLOAD-LPC:CAPS">
+<ANCHOR id="GST-RTP-PAYLOAD-PCMA:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtppayloads.html#GST-RTP-PAYLOAD-PCMA:CAPS">
+<ANCHOR id="GST-RTP-PAYLOAD-G722:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtppayloads.html#GST-RTP-PAYLOAD-G722:CAPS">
+<ANCHOR id="GST-RTP-PAYLOAD-L16-STEREO:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtppayloads.html#GST-RTP-PAYLOAD-L16-STEREO:CAPS">
+<ANCHOR id="GST-RTP-PAYLOAD-L16-MONO:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtppayloads.html#GST-RTP-PAYLOAD-L16-MONO:CAPS">
+<ANCHOR id="GST-RTP-PAYLOAD-QCELP:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtppayloads.html#GST-RTP-PAYLOAD-QCELP:CAPS">
+<ANCHOR id="GST-RTP-PAYLOAD-CN:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtppayloads.html#GST-RTP-PAYLOAD-CN:CAPS">
+<ANCHOR id="GST-RTP-PAYLOAD-MPA:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtppayloads.html#GST-RTP-PAYLOAD-MPA:CAPS">
+<ANCHOR id="GST-RTP-PAYLOAD-G728:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtppayloads.html#GST-RTP-PAYLOAD-G728:CAPS">
+<ANCHOR id="GST-RTP-PAYLOAD-DVI4-11025:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtppayloads.html#GST-RTP-PAYLOAD-DVI4-11025:CAPS">
+<ANCHOR id="GST-RTP-PAYLOAD-DVI4-22050:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtppayloads.html#GST-RTP-PAYLOAD-DVI4-22050:CAPS">
+<ANCHOR id="GST-RTP-PAYLOAD-G729:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtppayloads.html#GST-RTP-PAYLOAD-G729:CAPS">
+<ANCHOR id="GST-RTP-PAYLOAD-CELLB:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtppayloads.html#GST-RTP-PAYLOAD-CELLB:CAPS">
+<ANCHOR id="GST-RTP-PAYLOAD-JPEG:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtppayloads.html#GST-RTP-PAYLOAD-JPEG:CAPS">
+<ANCHOR id="GST-RTP-PAYLOAD-NV:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtppayloads.html#GST-RTP-PAYLOAD-NV:CAPS">
+<ANCHOR id="GST-RTP-PAYLOAD-H261:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtppayloads.html#GST-RTP-PAYLOAD-H261:CAPS">
+<ANCHOR id="GST-RTP-PAYLOAD-MPV:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtppayloads.html#GST-RTP-PAYLOAD-MPV:CAPS">
+<ANCHOR id="GST-RTP-PAYLOAD-MP2T:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtppayloads.html#GST-RTP-PAYLOAD-MP2T:CAPS">
+<ANCHOR id="GST-RTP-PAYLOAD-H263:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtppayloads.html#GST-RTP-PAYLOAD-H263:CAPS">
 <ANCHOR id="GstRTPPayloadInfo" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtppayloads.html#GstRTPPayloadInfo">
 <ANCHOR id="gst-plugins-base-libs-gstrtppayloads.see-also" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtppayloads.html#gst-plugins-base-libs-gstrtppayloads.see-also">
 <ANCHOR id="gst-plugins-base-libs-gstrtphdrext" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtphdrext.html">
@@ -788,6 +1003,7 @@
 <ANCHOR id="gst-rtp-hdrext-set-ntp-56" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtphdrext.html#gst-rtp-hdrext-set-ntp-56">
 <ANCHOR id="gst-rtp-hdrext-set-ntp-64" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtphdrext.html#gst-rtp-hdrext-set-ntp-64">
 <ANCHOR id="gst-plugins-base-libs-gstrtphdrext.other_details" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtphdrext.html#gst-plugins-base-libs-gstrtphdrext.other_details">
+<ANCHOR id="gst-plugins-base-libs-gstrtphdrext.see-also" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtphdrext.html#gst-plugins-base-libs-gstrtphdrext.see-also">
 <ANCHOR id="gst-plugins-base-libs-gstrtspconnection" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtspconnection.html">
 <ANCHOR id="gst-plugins-base-libs-gstrtspconnection.functions" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtspconnection.html#gst-plugins-base-libs-gstrtspconnection.functions">
 <ANCHOR id="gst-plugins-base-libs-gstrtspconnection.other" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtspconnection.html#gst-plugins-base-libs-gstrtspconnection.other">
@@ -826,6 +1042,10 @@
 <ANCHOR id="gst-rtsp-connection-get-tls" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtspconnection.html#gst-rtsp-connection-get-tls">
 <ANCHOR id="gst-rtsp-connection-set-tls-validation-flags" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtspconnection.html#gst-rtsp-connection-set-tls-validation-flags">
 <ANCHOR id="gst-rtsp-connection-get-tls-validation-flags" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtspconnection.html#gst-rtsp-connection-get-tls-validation-flags">
+<ANCHOR id="gst-rtsp-connection-set-tls-database" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtspconnection.html#gst-rtsp-connection-set-tls-database">
+<ANCHOR id="gst-rtsp-connection-get-tls-database" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtspconnection.html#gst-rtsp-connection-get-tls-database">
+<ANCHOR id="gst-rtsp-connection-set-tls-interaction" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtspconnection.html#gst-rtsp-connection-set-tls-interaction">
+<ANCHOR id="gst-rtsp-connection-get-tls-interaction" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtspconnection.html#gst-rtsp-connection-get-tls-interaction">
 <ANCHOR id="gst-rtsp-watch-new" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtspconnection.html#gst-rtsp-watch-new">
 <ANCHOR id="gst-rtsp-watch-unref" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtspconnection.html#gst-rtsp-watch-unref">
 <ANCHOR id="gst-rtsp-watch-attach" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtspconnection.html#gst-rtsp-watch-attach">
@@ -834,6 +1054,7 @@
 <ANCHOR id="gst-rtsp-watch-write-data" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtspconnection.html#gst-rtsp-watch-write-data">
 <ANCHOR id="gst-rtsp-watch-get-send-backlog" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtspconnection.html#gst-rtsp-watch-get-send-backlog">
 <ANCHOR id="gst-rtsp-watch-set-send-backlog" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtspconnection.html#gst-rtsp-watch-set-send-backlog">
+<ANCHOR id="gst-rtsp-watch-set-flushing" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtspconnection.html#gst-rtsp-watch-set-flushing">
 <ANCHOR id="gst-rtsp-watch-wait-backlog" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtspconnection.html#gst-rtsp-watch-wait-backlog">
 <ANCHOR id="gst-plugins-base-libs-gstrtspconnection.other_details" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtspconnection.html#gst-plugins-base-libs-gstrtspconnection.other_details">
 <ANCHOR id="GstRTSPConnection" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtspconnection.html#GstRTSPConnection">
@@ -860,14 +1081,193 @@
 <ANCHOR id="gst-plugins-base-libs-gstrtspdefs.other_details" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtspdefs.html#gst-plugins-base-libs-gstrtspdefs.other_details">
 <ANCHOR id="GST-RTSP-AUTH-MAX:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-AUTH-MAX:CAPS">
 <ANCHOR id="GstRTSPEvent" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtspdefs.html#GstRTSPEvent">
+<ANCHOR id="GST-RTSP-EV-READ:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-EV-READ:CAPS">
+<ANCHOR id="GST-RTSP-EV-WRITE:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-EV-WRITE:CAPS">
 <ANCHOR id="GstRTSPResult" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtspdefs.html#GstRTSPResult">
+<ANCHOR id="GST-RTSP-OK:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-OK:CAPS">
+<ANCHOR id="GST-RTSP-ERROR:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-ERROR:CAPS">
+<ANCHOR id="GST-RTSP-EINVAL:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-EINVAL:CAPS">
+<ANCHOR id="GST-RTSP-EINTR:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-EINTR:CAPS">
+<ANCHOR id="GST-RTSP-ENOMEM:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-ENOMEM:CAPS">
+<ANCHOR id="GST-RTSP-ERESOLV:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-ERESOLV:CAPS">
+<ANCHOR id="GST-RTSP-ENOTIMPL:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-ENOTIMPL:CAPS">
+<ANCHOR id="GST-RTSP-ESYS:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-ESYS:CAPS">
+<ANCHOR id="GST-RTSP-EPARSE:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-EPARSE:CAPS">
+<ANCHOR id="GST-RTSP-EWSASTART:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-EWSASTART:CAPS">
+<ANCHOR id="GST-RTSP-EWSAVERSION:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-EWSAVERSION:CAPS">
+<ANCHOR id="GST-RTSP-EEOF:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-EEOF:CAPS">
+<ANCHOR id="GST-RTSP-ENET:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-ENET:CAPS">
+<ANCHOR id="GST-RTSP-ENOTIP:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-ENOTIP:CAPS">
+<ANCHOR id="GST-RTSP-ETIMEOUT:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-ETIMEOUT:CAPS">
+<ANCHOR id="GST-RTSP-ETGET:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-ETGET:CAPS">
+<ANCHOR id="GST-RTSP-ETPOST:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-ETPOST:CAPS">
+<ANCHOR id="GST-RTSP-ELAST:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-ELAST:CAPS">
 <ANCHOR id="GstRTSPFamily" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtspdefs.html#GstRTSPFamily">
+<ANCHOR id="GST-RTSP-FAM-NONE:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-FAM-NONE:CAPS">
+<ANCHOR id="GST-RTSP-FAM-INET:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-FAM-INET:CAPS">
+<ANCHOR id="GST-RTSP-FAM-INET6:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-FAM-INET6:CAPS">
 <ANCHOR id="GstRTSPState" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtspdefs.html#GstRTSPState">
+<ANCHOR id="GST-RTSP-STATE-INVALID:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-STATE-INVALID:CAPS">
+<ANCHOR id="GST-RTSP-STATE-INIT:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-STATE-INIT:CAPS">
+<ANCHOR id="GST-RTSP-STATE-READY:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-STATE-READY:CAPS">
+<ANCHOR id="GST-RTSP-STATE-SEEKING:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-STATE-SEEKING:CAPS">
+<ANCHOR id="GST-RTSP-STATE-PLAYING:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-STATE-PLAYING:CAPS">
+<ANCHOR id="GST-RTSP-STATE-RECORDING:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-STATE-RECORDING:CAPS">
 <ANCHOR id="GstRTSPVersion" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtspdefs.html#GstRTSPVersion">
+<ANCHOR id="GST-RTSP-VERSION-INVALID:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-VERSION-INVALID:CAPS">
+<ANCHOR id="GST-RTSP-VERSION-1-0:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-VERSION-1-0:CAPS">
+<ANCHOR id="GST-RTSP-VERSION-1-1:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-VERSION-1-1:CAPS">
 <ANCHOR id="GstRTSPMethod" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtspdefs.html#GstRTSPMethod">
+<ANCHOR id="GST-RTSP-INVALID:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-INVALID:CAPS">
+<ANCHOR id="GST-RTSP-DESCRIBE:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-DESCRIBE:CAPS">
+<ANCHOR id="GST-RTSP-ANNOUNCE:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-ANNOUNCE:CAPS">
+<ANCHOR id="GST-RTSP-GET-PARAMETER:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-GET-PARAMETER:CAPS">
+<ANCHOR id="GST-RTSP-OPTIONS:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-OPTIONS:CAPS">
+<ANCHOR id="GST-RTSP-PAUSE:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-PAUSE:CAPS">
+<ANCHOR id="GST-RTSP-PLAY:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-PLAY:CAPS">
+<ANCHOR id="GST-RTSP-RECORD:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-RECORD:CAPS">
+<ANCHOR id="GST-RTSP-REDIRECT:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-REDIRECT:CAPS">
+<ANCHOR id="GST-RTSP-SETUP:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-SETUP:CAPS">
+<ANCHOR id="GST-RTSP-SET-PARAMETER:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-SET-PARAMETER:CAPS">
+<ANCHOR id="GST-RTSP-TEARDOWN:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-TEARDOWN:CAPS">
+<ANCHOR id="GST-RTSP-GET:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-GET:CAPS">
+<ANCHOR id="GST-RTSP-POST:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-POST:CAPS">
 <ANCHOR id="GstRTSPAuthMethod" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtspdefs.html#GstRTSPAuthMethod">
+<ANCHOR id="GST-RTSP-AUTH-NONE:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-AUTH-NONE:CAPS">
+<ANCHOR id="GST-RTSP-AUTH-BASIC:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-AUTH-BASIC:CAPS">
+<ANCHOR id="GST-RTSP-AUTH-DIGEST:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-AUTH-DIGEST:CAPS">
 <ANCHOR id="GstRTSPHeaderField" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtspdefs.html#GstRTSPHeaderField">
+<ANCHOR id="GST-RTSP-HDR-INVALID:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-HDR-INVALID:CAPS">
+<ANCHOR id="GST-RTSP-HDR-ACCEPT:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-HDR-ACCEPT:CAPS">
+<ANCHOR id="GST-RTSP-HDR-ACCEPT-ENCODING:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-HDR-ACCEPT-ENCODING:CAPS">
+<ANCHOR id="GST-RTSP-HDR-ACCEPT-LANGUAGE:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-HDR-ACCEPT-LANGUAGE:CAPS">
+<ANCHOR id="GST-RTSP-HDR-ALLOW:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-HDR-ALLOW:CAPS">
+<ANCHOR id="GST-RTSP-HDR-AUTHORIZATION:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-HDR-AUTHORIZATION:CAPS">
+<ANCHOR id="GST-RTSP-HDR-BANDWIDTH:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-HDR-BANDWIDTH:CAPS">
+<ANCHOR id="GST-RTSP-HDR-BLOCKSIZE:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-HDR-BLOCKSIZE:CAPS">
+<ANCHOR id="GST-RTSP-HDR-CACHE-CONTROL:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-HDR-CACHE-CONTROL:CAPS">
+<ANCHOR id="GST-RTSP-HDR-CONFERENCE:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-HDR-CONFERENCE:CAPS">
+<ANCHOR id="GST-RTSP-HDR-CONNECTION:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-HDR-CONNECTION:CAPS">
+<ANCHOR id="GST-RTSP-HDR-CONTENT-BASE:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-HDR-CONTENT-BASE:CAPS">
+<ANCHOR id="GST-RTSP-HDR-CONTENT-ENCODING:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-HDR-CONTENT-ENCODING:CAPS">
+<ANCHOR id="GST-RTSP-HDR-CONTENT-LANGUAGE:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-HDR-CONTENT-LANGUAGE:CAPS">
+<ANCHOR id="GST-RTSP-HDR-CONTENT-LENGTH:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-HDR-CONTENT-LENGTH:CAPS">
+<ANCHOR id="GST-RTSP-HDR-CONTENT-LOCATION:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-HDR-CONTENT-LOCATION:CAPS">
+<ANCHOR id="GST-RTSP-HDR-CONTENT-TYPE:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-HDR-CONTENT-TYPE:CAPS">
+<ANCHOR id="GST-RTSP-HDR-CSEQ:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-HDR-CSEQ:CAPS">
+<ANCHOR id="GST-RTSP-HDR-DATE:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-HDR-DATE:CAPS">
+<ANCHOR id="GST-RTSP-HDR-EXPIRES:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-HDR-EXPIRES:CAPS">
+<ANCHOR id="GST-RTSP-HDR-FROM:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-HDR-FROM:CAPS">
+<ANCHOR id="GST-RTSP-HDR-IF-MODIFIED-SINCE:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-HDR-IF-MODIFIED-SINCE:CAPS">
+<ANCHOR id="GST-RTSP-HDR-LAST-MODIFIED:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-HDR-LAST-MODIFIED:CAPS">
+<ANCHOR id="GST-RTSP-HDR-PROXY-AUTHENTICATE:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-HDR-PROXY-AUTHENTICATE:CAPS">
+<ANCHOR id="GST-RTSP-HDR-PROXY-REQUIRE:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-HDR-PROXY-REQUIRE:CAPS">
+<ANCHOR id="GST-RTSP-HDR-PUBLIC:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-HDR-PUBLIC:CAPS">
+<ANCHOR id="GST-RTSP-HDR-RANGE:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-HDR-RANGE:CAPS">
+<ANCHOR id="GST-RTSP-HDR-REFERER:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-HDR-REFERER:CAPS">
+<ANCHOR id="GST-RTSP-HDR-REQUIRE:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-HDR-REQUIRE:CAPS">
+<ANCHOR id="GST-RTSP-HDR-RETRY-AFTER:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-HDR-RETRY-AFTER:CAPS">
+<ANCHOR id="GST-RTSP-HDR-RTP-INFO:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-HDR-RTP-INFO:CAPS">
+<ANCHOR id="GST-RTSP-HDR-SCALE:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-HDR-SCALE:CAPS">
+<ANCHOR id="GST-RTSP-HDR-SESSION:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-HDR-SESSION:CAPS">
+<ANCHOR id="GST-RTSP-HDR-SERVER:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-HDR-SERVER:CAPS">
+<ANCHOR id="GST-RTSP-HDR-SPEED:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-HDR-SPEED:CAPS">
+<ANCHOR id="GST-RTSP-HDR-TRANSPORT:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-HDR-TRANSPORT:CAPS">
+<ANCHOR id="GST-RTSP-HDR-UNSUPPORTED:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-HDR-UNSUPPORTED:CAPS">
+<ANCHOR id="GST-RTSP-HDR-USER-AGENT:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-HDR-USER-AGENT:CAPS">
+<ANCHOR id="GST-RTSP-HDR-VIA:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-HDR-VIA:CAPS">
+<ANCHOR id="GST-RTSP-HDR-WWW-AUTHENTICATE:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-HDR-WWW-AUTHENTICATE:CAPS">
+<ANCHOR id="GST-RTSP-HDR-CLIENT-CHALLENGE:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-HDR-CLIENT-CHALLENGE:CAPS">
+<ANCHOR id="GST-RTSP-HDR-REAL-CHALLENGE1:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-HDR-REAL-CHALLENGE1:CAPS">
+<ANCHOR id="GST-RTSP-HDR-REAL-CHALLENGE2:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-HDR-REAL-CHALLENGE2:CAPS">
+<ANCHOR id="GST-RTSP-HDR-REAL-CHALLENGE3:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-HDR-REAL-CHALLENGE3:CAPS">
+<ANCHOR id="GST-RTSP-HDR-SUBSCRIBE:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-HDR-SUBSCRIBE:CAPS">
+<ANCHOR id="GST-RTSP-HDR-ALERT:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-HDR-ALERT:CAPS">
+<ANCHOR id="GST-RTSP-HDR-CLIENT-ID:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-HDR-CLIENT-ID:CAPS">
+<ANCHOR id="GST-RTSP-HDR-COMPANY-ID:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-HDR-COMPANY-ID:CAPS">
+<ANCHOR id="GST-RTSP-HDR-GUID:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-HDR-GUID:CAPS">
+<ANCHOR id="GST-RTSP-HDR-REGION-DATA:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-HDR-REGION-DATA:CAPS">
+<ANCHOR id="GST-RTSP-HDR-MAX-ASM-WIDTH:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-HDR-MAX-ASM-WIDTH:CAPS">
+<ANCHOR id="GST-RTSP-HDR-LANGUAGE:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-HDR-LANGUAGE:CAPS">
+<ANCHOR id="GST-RTSP-HDR-PLAYER-START-TIME:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-HDR-PLAYER-START-TIME:CAPS">
+<ANCHOR id="GST-RTSP-HDR-LOCATION:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-HDR-LOCATION:CAPS">
+<ANCHOR id="GST-RTSP-HDR-ETAG:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-HDR-ETAG:CAPS">
+<ANCHOR id="GST-RTSP-HDR-IF-MATCH:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-HDR-IF-MATCH:CAPS">
+<ANCHOR id="GST-RTSP-HDR-ACCEPT-CHARSET:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-HDR-ACCEPT-CHARSET:CAPS">
+<ANCHOR id="GST-RTSP-HDR-SUPPORTED:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-HDR-SUPPORTED:CAPS">
+<ANCHOR id="GST-RTSP-HDR-VARY:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-HDR-VARY:CAPS">
+<ANCHOR id="GST-RTSP-HDR-X-ACCELERATE-STREAMING:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-HDR-X-ACCELERATE-STREAMING:CAPS">
+<ANCHOR id="GST-RTSP-HDR-X-ACCEPT-AUTHENT:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-HDR-X-ACCEPT-AUTHENT:CAPS">
+<ANCHOR id="GST-RTSP-HDR-X-ACCEPT-PROXY-AUTHENT:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-HDR-X-ACCEPT-PROXY-AUTHENT:CAPS">
+<ANCHOR id="GST-RTSP-HDR-X-BROADCAST-ID:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-HDR-X-BROADCAST-ID:CAPS">
+<ANCHOR id="GST-RTSP-HDR-X-BURST-STREAMING:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-HDR-X-BURST-STREAMING:CAPS">
+<ANCHOR id="GST-RTSP-HDR-X-NOTICE:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-HDR-X-NOTICE:CAPS">
+<ANCHOR id="GST-RTSP-HDR-X-PLAYER-LAG-TIME:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-HDR-X-PLAYER-LAG-TIME:CAPS">
+<ANCHOR id="GST-RTSP-HDR-X-PLAYLIST:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-HDR-X-PLAYLIST:CAPS">
+<ANCHOR id="GST-RTSP-HDR-X-PLAYLIST-CHANGE-NOTICE:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-HDR-X-PLAYLIST-CHANGE-NOTICE:CAPS">
+<ANCHOR id="GST-RTSP-HDR-X-PLAYLIST-GEN-ID:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-HDR-X-PLAYLIST-GEN-ID:CAPS">
+<ANCHOR id="GST-RTSP-HDR-X-PLAYLIST-SEEK-ID:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-HDR-X-PLAYLIST-SEEK-ID:CAPS">
+<ANCHOR id="GST-RTSP-HDR-X-PROXY-CLIENT-AGENT:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-HDR-X-PROXY-CLIENT-AGENT:CAPS">
+<ANCHOR id="GST-RTSP-HDR-X-PROXY-CLIENT-VERB:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-HDR-X-PROXY-CLIENT-VERB:CAPS">
+<ANCHOR id="GST-RTSP-HDR-X-RECEDING-PLAYLISTCHANGE:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-HDR-X-RECEDING-PLAYLISTCHANGE:CAPS">
+<ANCHOR id="GST-RTSP-HDR-X-RTP-INFO:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-HDR-X-RTP-INFO:CAPS">
+<ANCHOR id="GST-RTSP-HDR-X-STARTUPPROFILE:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-HDR-X-STARTUPPROFILE:CAPS">
+<ANCHOR id="GST-RTSP-HDR-TIMESTAMP:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-HDR-TIMESTAMP:CAPS">
+<ANCHOR id="GST-RTSP-HDR-AUTHENTICATION-INFO:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-HDR-AUTHENTICATION-INFO:CAPS">
+<ANCHOR id="GST-RTSP-HDR-HOST:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-HDR-HOST:CAPS">
+<ANCHOR id="GST-RTSP-HDR-PRAGMA:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-HDR-PRAGMA:CAPS">
+<ANCHOR id="GST-RTSP-HDR-X-SERVER-IP-ADDRESS:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-HDR-X-SERVER-IP-ADDRESS:CAPS">
+<ANCHOR id="GST-RTSP-HDR-X-SESSIONCOOKIE:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-HDR-X-SESSIONCOOKIE:CAPS">
+<ANCHOR id="GST-RTSP-HDR-RTCP-INTERVAL:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-HDR-RTCP-INTERVAL:CAPS">
+<ANCHOR id="GST-RTSP-HDR-KEYMGMT:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-HDR-KEYMGMT:CAPS">
+<ANCHOR id="GST-RTSP-HDR-LAST:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-HDR-LAST:CAPS">
 <ANCHOR id="GstRTSPStatusCode" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtspdefs.html#GstRTSPStatusCode">
+<ANCHOR id="GST-RTSP-STS-INVALID:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-STS-INVALID:CAPS">
+<ANCHOR id="GST-RTSP-STS-CONTINUE:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-STS-CONTINUE:CAPS">
+<ANCHOR id="GST-RTSP-STS-OK:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-STS-OK:CAPS">
+<ANCHOR id="GST-RTSP-STS-CREATED:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-STS-CREATED:CAPS">
+<ANCHOR id="GST-RTSP-STS-LOW-ON-STORAGE:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-STS-LOW-ON-STORAGE:CAPS">
+<ANCHOR id="GST-RTSP-STS-MULTIPLE-CHOICES:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-STS-MULTIPLE-CHOICES:CAPS">
+<ANCHOR id="GST-RTSP-STS-MOVED-PERMANENTLY:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-STS-MOVED-PERMANENTLY:CAPS">
+<ANCHOR id="GST-RTSP-STS-MOVE-TEMPORARILY:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-STS-MOVE-TEMPORARILY:CAPS">
+<ANCHOR id="GST-RTSP-STS-SEE-OTHER:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-STS-SEE-OTHER:CAPS">
+<ANCHOR id="GST-RTSP-STS-NOT-MODIFIED:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-STS-NOT-MODIFIED:CAPS">
+<ANCHOR id="GST-RTSP-STS-USE-PROXY:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-STS-USE-PROXY:CAPS">
+<ANCHOR id="GST-RTSP-STS-BAD-REQUEST:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-STS-BAD-REQUEST:CAPS">
+<ANCHOR id="GST-RTSP-STS-UNAUTHORIZED:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-STS-UNAUTHORIZED:CAPS">
+<ANCHOR id="GST-RTSP-STS-PAYMENT-REQUIRED:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-STS-PAYMENT-REQUIRED:CAPS">
+<ANCHOR id="GST-RTSP-STS-FORBIDDEN:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-STS-FORBIDDEN:CAPS">
+<ANCHOR id="GST-RTSP-STS-NOT-FOUND:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-STS-NOT-FOUND:CAPS">
+<ANCHOR id="GST-RTSP-STS-METHOD-NOT-ALLOWED:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-STS-METHOD-NOT-ALLOWED:CAPS">
+<ANCHOR id="GST-RTSP-STS-NOT-ACCEPTABLE:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-STS-NOT-ACCEPTABLE:CAPS">
+<ANCHOR id="GST-RTSP-STS-PROXY-AUTH-REQUIRED:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-STS-PROXY-AUTH-REQUIRED:CAPS">
+<ANCHOR id="GST-RTSP-STS-REQUEST-TIMEOUT:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-STS-REQUEST-TIMEOUT:CAPS">
+<ANCHOR id="GST-RTSP-STS-GONE:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-STS-GONE:CAPS">
+<ANCHOR id="GST-RTSP-STS-LENGTH-REQUIRED:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-STS-LENGTH-REQUIRED:CAPS">
+<ANCHOR id="GST-RTSP-STS-PRECONDITION-FAILED:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-STS-PRECONDITION-FAILED:CAPS">
+<ANCHOR id="GST-RTSP-STS-REQUEST-ENTITY-TOO-LARGE:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-STS-REQUEST-ENTITY-TOO-LARGE:CAPS">
+<ANCHOR id="GST-RTSP-STS-REQUEST-URI-TOO-LARGE:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-STS-REQUEST-URI-TOO-LARGE:CAPS">
+<ANCHOR id="GST-RTSP-STS-UNSUPPORTED-MEDIA-TYPE:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-STS-UNSUPPORTED-MEDIA-TYPE:CAPS">
+<ANCHOR id="GST-RTSP-STS-PARAMETER-NOT-UNDERSTOOD:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-STS-PARAMETER-NOT-UNDERSTOOD:CAPS">
+<ANCHOR id="GST-RTSP-STS-CONFERENCE-NOT-FOUND:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-STS-CONFERENCE-NOT-FOUND:CAPS">
+<ANCHOR id="GST-RTSP-STS-NOT-ENOUGH-BANDWIDTH:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-STS-NOT-ENOUGH-BANDWIDTH:CAPS">
+<ANCHOR id="GST-RTSP-STS-SESSION-NOT-FOUND:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-STS-SESSION-NOT-FOUND:CAPS">
+<ANCHOR id="GST-RTSP-STS-METHOD-NOT-VALID-IN-THIS-STATE:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-STS-METHOD-NOT-VALID-IN-THIS-STATE:CAPS">
+<ANCHOR id="GST-RTSP-STS-HEADER-FIELD-NOT-VALID-FOR-RESOURCE:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-STS-HEADER-FIELD-NOT-VALID-FOR-RESOURCE:CAPS">
+<ANCHOR id="GST-RTSP-STS-INVALID-RANGE:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-STS-INVALID-RANGE:CAPS">
+<ANCHOR id="GST-RTSP-STS-PARAMETER-IS-READONLY:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-STS-PARAMETER-IS-READONLY:CAPS">
+<ANCHOR id="GST-RTSP-STS-AGGREGATE-OPERATION-NOT-ALLOWED:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-STS-AGGREGATE-OPERATION-NOT-ALLOWED:CAPS">
+<ANCHOR id="GST-RTSP-STS-ONLY-AGGREGATE-OPERATION-ALLOWED:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-STS-ONLY-AGGREGATE-OPERATION-ALLOWED:CAPS">
+<ANCHOR id="GST-RTSP-STS-UNSUPPORTED-TRANSPORT:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-STS-UNSUPPORTED-TRANSPORT:CAPS">
+<ANCHOR id="GST-RTSP-STS-DESTINATION-UNREACHABLE:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-STS-DESTINATION-UNREACHABLE:CAPS">
+<ANCHOR id="GST-RTSP-STS-KEY-MANAGEMENT-FAILURE:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-STS-KEY-MANAGEMENT-FAILURE:CAPS">
+<ANCHOR id="GST-RTSP-STS-INTERNAL-SERVER-ERROR:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-STS-INTERNAL-SERVER-ERROR:CAPS">
+<ANCHOR id="GST-RTSP-STS-NOT-IMPLEMENTED:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-STS-NOT-IMPLEMENTED:CAPS">
+<ANCHOR id="GST-RTSP-STS-BAD-GATEWAY:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-STS-BAD-GATEWAY:CAPS">
+<ANCHOR id="GST-RTSP-STS-SERVICE-UNAVAILABLE:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-STS-SERVICE-UNAVAILABLE:CAPS">
+<ANCHOR id="GST-RTSP-STS-GATEWAY-TIMEOUT:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-STS-GATEWAY-TIMEOUT:CAPS">
+<ANCHOR id="GST-RTSP-STS-RTSP-VERSION-NOT-SUPPORTED:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-STS-RTSP-VERSION-NOT-SUPPORTED:CAPS">
+<ANCHOR id="GST-RTSP-STS-OPTION-NOT-SUPPORTED:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-STS-OPTION-NOT-SUPPORTED:CAPS">
 <ANCHOR id="gst-plugins-base-libs-gstrtspdefs.see-also" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtspdefs.html#gst-plugins-base-libs-gstrtspdefs.see-also">
 <ANCHOR id="gst-plugins-base-libs-gstrtspextension" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtspextension.html">
 <ANCHOR id="gst-plugins-base-libs-gstrtspextension.other" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtspextension.html#gst-plugins-base-libs-gstrtspextension.other">
@@ -901,6 +1301,10 @@
 <ANCHOR id="gst-rtsp-message-take-header" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtspmessage.html#gst-rtsp-message-take-header">
 <ANCHOR id="gst-rtsp-message-remove-header" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtspmessage.html#gst-rtsp-message-remove-header">
 <ANCHOR id="gst-rtsp-message-get-header" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtspmessage.html#gst-rtsp-message-get-header">
+<ANCHOR id="gst-rtsp-message-add-header-by-name" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtspmessage.html#gst-rtsp-message-add-header-by-name">
+<ANCHOR id="gst-rtsp-message-take-header-by-name" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtspmessage.html#gst-rtsp-message-take-header-by-name">
+<ANCHOR id="gst-rtsp-message-remove-header-by-name" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtspmessage.html#gst-rtsp-message-remove-header-by-name">
+<ANCHOR id="gst-rtsp-message-get-header-by-name" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtspmessage.html#gst-rtsp-message-get-header-by-name">
 <ANCHOR id="gst-rtsp-message-append-headers" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtspmessage.html#gst-rtsp-message-append-headers">
 <ANCHOR id="gst-rtsp-message-set-body" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtspmessage.html#gst-rtsp-message-set-body">
 <ANCHOR id="gst-rtsp-message-take-body" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtspmessage.html#gst-rtsp-message-take-body">
@@ -909,6 +1313,12 @@
 <ANCHOR id="gst-rtsp-message-dump" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtspmessage.html#gst-rtsp-message-dump">
 <ANCHOR id="gst-plugins-base-libs-gstrtspmessage.other_details" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtspmessage.html#gst-plugins-base-libs-gstrtspmessage.other_details">
 <ANCHOR id="GstRTSPMsgType" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtspmessage.html#GstRTSPMsgType">
+<ANCHOR id="GST-RTSP-MESSAGE-INVALID:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtspmessage.html#GST-RTSP-MESSAGE-INVALID:CAPS">
+<ANCHOR id="GST-RTSP-MESSAGE-REQUEST:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtspmessage.html#GST-RTSP-MESSAGE-REQUEST:CAPS">
+<ANCHOR id="GST-RTSP-MESSAGE-RESPONSE:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtspmessage.html#GST-RTSP-MESSAGE-RESPONSE:CAPS">
+<ANCHOR id="GST-RTSP-MESSAGE-HTTP-REQUEST:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtspmessage.html#GST-RTSP-MESSAGE-HTTP-REQUEST:CAPS">
+<ANCHOR id="GST-RTSP-MESSAGE-HTTP-RESPONSE:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtspmessage.html#GST-RTSP-MESSAGE-HTTP-RESPONSE:CAPS">
+<ANCHOR id="GST-RTSP-MESSAGE-DATA:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtspmessage.html#GST-RTSP-MESSAGE-DATA:CAPS">
 <ANCHOR id="GstRTSPMessage" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtspmessage.html#GstRTSPMessage">
 <ANCHOR id="gst-plugins-base-libs-gstrtspmessage.see-also" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtspmessage.html#gst-plugins-base-libs-gstrtspmessage.see-also">
 <ANCHOR id="gst-plugins-base-libs-gstrtsprange" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtsprange.html">
@@ -924,10 +1334,20 @@
 <ANCHOR id="gst-rtsp-range-free" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtsprange.html#gst-rtsp-range-free">
 <ANCHOR id="gst-plugins-base-libs-gstrtsprange.other_details" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtsprange.html#gst-plugins-base-libs-gstrtsprange.other_details">
 <ANCHOR id="GstRTSPRangeUnit" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtsprange.html#GstRTSPRangeUnit">
+<ANCHOR id="GST-RTSP-RANGE-SMPTE:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtsprange.html#GST-RTSP-RANGE-SMPTE:CAPS">
+<ANCHOR id="GST-RTSP-RANGE-SMPTE-30-DROP:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtsprange.html#GST-RTSP-RANGE-SMPTE-30-DROP:CAPS">
+<ANCHOR id="GST-RTSP-RANGE-SMPTE-25:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtsprange.html#GST-RTSP-RANGE-SMPTE-25:CAPS">
+<ANCHOR id="GST-RTSP-RANGE-NPT:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtsprange.html#GST-RTSP-RANGE-NPT:CAPS">
+<ANCHOR id="GST-RTSP-RANGE-CLOCK:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtsprange.html#GST-RTSP-RANGE-CLOCK:CAPS">
 <ANCHOR id="GstRTSPTimeRange" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtsprange.html#GstRTSPTimeRange">
 <ANCHOR id="GstRTSPTime" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtsprange.html#GstRTSPTime">
 <ANCHOR id="GstRTSPTime2" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtsprange.html#GstRTSPTime2">
 <ANCHOR id="GstRTSPTimeType" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtsprange.html#GstRTSPTimeType">
+<ANCHOR id="GST-RTSP-TIME-SECONDS:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtsprange.html#GST-RTSP-TIME-SECONDS:CAPS">
+<ANCHOR id="GST-RTSP-TIME-NOW:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtsprange.html#GST-RTSP-TIME-NOW:CAPS">
+<ANCHOR id="GST-RTSP-TIME-END:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtsprange.html#GST-RTSP-TIME-END:CAPS">
+<ANCHOR id="GST-RTSP-TIME-FRAMES:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtsprange.html#GST-RTSP-TIME-FRAMES:CAPS">
+<ANCHOR id="GST-RTSP-TIME-UTC:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtsprange.html#GST-RTSP-TIME-UTC:CAPS">
 <ANCHOR id="gst-plugins-base-libs-gstrtsptransport" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtsptransport.html">
 <ANCHOR id="gst-plugins-base-libs-gstrtsptransport.functions" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtsptransport.html#gst-plugins-base-libs-gstrtsptransport.functions">
 <ANCHOR id="gst-plugins-base-libs-gstrtsptransport.other" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtsptransport.html#gst-plugins-base-libs-gstrtsptransport.other">
@@ -943,9 +1363,23 @@
 <ANCHOR id="gst-rtsp-transport-free" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtsptransport.html#gst-rtsp-transport-free">
 <ANCHOR id="gst-plugins-base-libs-gstrtsptransport.other_details" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtsptransport.html#gst-plugins-base-libs-gstrtsptransport.other_details">
 <ANCHOR id="GstRTSPTransMode" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtsptransport.html#GstRTSPTransMode">
+<ANCHOR id="GST-RTSP-TRANS-UNKNOWN:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtsptransport.html#GST-RTSP-TRANS-UNKNOWN:CAPS">
+<ANCHOR id="GST-RTSP-TRANS-RTP:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtsptransport.html#GST-RTSP-TRANS-RTP:CAPS">
+<ANCHOR id="GST-RTSP-TRANS-RDT:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtsptransport.html#GST-RTSP-TRANS-RDT:CAPS">
 <ANCHOR id="GstRTSPProfile" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtsptransport.html#GstRTSPProfile">
+<ANCHOR id="GST-RTSP-PROFILE-UNKNOWN:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtsptransport.html#GST-RTSP-PROFILE-UNKNOWN:CAPS">
+<ANCHOR id="GST-RTSP-PROFILE-AVP:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtsptransport.html#GST-RTSP-PROFILE-AVP:CAPS">
+<ANCHOR id="GST-RTSP-PROFILE-SAVP:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtsptransport.html#GST-RTSP-PROFILE-SAVP:CAPS">
+<ANCHOR id="GST-RTSP-PROFILE-AVPF:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtsptransport.html#GST-RTSP-PROFILE-AVPF:CAPS">
+<ANCHOR id="GST-RTSP-PROFILE-SAVPF:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtsptransport.html#GST-RTSP-PROFILE-SAVPF:CAPS">
 <ANCHOR id="GstRTSPRange" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtsptransport.html#GstRTSPRange">
 <ANCHOR id="GstRTSPLowerTrans" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtsptransport.html#GstRTSPLowerTrans">
+<ANCHOR id="GST-RTSP-LOWER-TRANS-UNKNOWN:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtsptransport.html#GST-RTSP-LOWER-TRANS-UNKNOWN:CAPS">
+<ANCHOR id="GST-RTSP-LOWER-TRANS-UDP:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtsptransport.html#GST-RTSP-LOWER-TRANS-UDP:CAPS">
+<ANCHOR id="GST-RTSP-LOWER-TRANS-UDP-MCAST:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtsptransport.html#GST-RTSP-LOWER-TRANS-UDP-MCAST:CAPS">
+<ANCHOR id="GST-RTSP-LOWER-TRANS-TCP:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtsptransport.html#GST-RTSP-LOWER-TRANS-TCP:CAPS">
+<ANCHOR id="GST-RTSP-LOWER-TRANS-HTTP:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtsptransport.html#GST-RTSP-LOWER-TRANS-HTTP:CAPS">
+<ANCHOR id="GST-RTSP-LOWER-TRANS-TLS:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtsptransport.html#GST-RTSP-LOWER-TRANS-TLS:CAPS">
 <ANCHOR id="GstRTSPTransport" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtsptransport.html#GstRTSPTransport">
 <ANCHOR id="gst-plugins-base-libs-gstrtspurl" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtspurl.html">
 <ANCHOR id="gst-plugins-base-libs-gstrtspurl.functions" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtspurl.html#gst-plugins-base-libs-gstrtspurl.functions">
@@ -980,6 +1414,7 @@
 <ANCHOR id="gst-sdp-attribute-set" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-attribute-set">
 <ANCHOR id="gst-sdp-attribute-clear" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-attribute-clear">
 <ANCHOR id="gst-sdp-message-new" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-message-new">
+<ANCHOR id="gst-sdp-message-copy" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-message-copy">
 <ANCHOR id="gst-sdp-message-init" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-message-init">
 <ANCHOR id="gst-sdp-message-uninit" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-message-uninit">
 <ANCHOR id="gst-sdp-message-free" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-message-free">
@@ -1045,6 +1480,7 @@
 <ANCHOR id="gst-sdp-message-add-media" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-message-add-media">
 <ANCHOR id="gst-sdp-message-dump" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-message-dump">
 <ANCHOR id="gst-sdp-media-new" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-media-new">
+<ANCHOR id="gst-sdp-media-copy" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-media-copy">
 <ANCHOR id="gst-sdp-media-init" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-media-init">
 <ANCHOR id="gst-sdp-media-uninit" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-media-uninit">
 <ANCHOR id="gst-sdp-media-free" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-media-free">
@@ -1088,6 +1524,8 @@
 <ANCHOR id="gst-sdp-media-add-attribute" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstsdpmessage.html#gst-sdp-media-add-attribute">
 <ANCHOR id="gst-plugins-base-libs-gstsdpmessage.other_details" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstsdpmessage.html#gst-plugins-base-libs-gstsdpmessage.other_details">
 <ANCHOR id="GstSDPResult" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstsdpmessage.html#GstSDPResult">
+<ANCHOR id="GST-SDP-OK:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstsdpmessage.html#GST-SDP-OK:CAPS">
+<ANCHOR id="GST-SDP-EINVAL:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstsdpmessage.html#GST-SDP-EINVAL:CAPS">
 <ANCHOR id="GstSDPOrigin" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstsdpmessage.html#GstSDPOrigin">
 <ANCHOR id="GstSDPConnection" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstsdpmessage.html#GstSDPConnection">
 <ANCHOR id="GST-SDP-BWTYPE-CT:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstsdpmessage.html#GST-SDP-BWTYPE-CT:CAPS">
@@ -1113,6 +1551,9 @@
 <ANCHOR id="gst-mikey-message-new-from-bytes" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstmikey.html#gst-mikey-message-new-from-bytes">
 <ANCHOR id="gst-mikey-message-new-from-data" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstmikey.html#gst-mikey-message-new-from-data">
 <ANCHOR id="gst-mikey-message-to-bytes" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstmikey.html#gst-mikey-message-to-bytes">
+<ANCHOR id="gst-mikey-message-copy" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstmikey.html#gst-mikey-message-copy">
+<ANCHOR id="gst-mikey-message-ref" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstmikey.html#gst-mikey-message-ref">
+<ANCHOR id="gst-mikey-message-unref" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstmikey.html#gst-mikey-message-unref">
 <ANCHOR id="gst-mikey-message-set-info" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstmikey.html#gst-mikey-message-set-info">
 <ANCHOR id="gst-mikey-message-get-n-cs" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstmikey.html#gst-mikey-message-get-n-cs">
 <ANCHOR id="gst-mikey-message-get-cs-srtp" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstmikey.html#gst-mikey-message-get-cs-srtp">
@@ -1129,7 +1570,17 @@
 <ANCHOR id="gst-mikey-message-add-payload" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstmikey.html#gst-mikey-message-add-payload">
 <ANCHOR id="gst-mikey-payload-new" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstmikey.html#gst-mikey-payload-new">
 <ANCHOR id="gst-mikey-payload-copy" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstmikey.html#gst-mikey-payload-copy">
+<ANCHOR id="gst-mikey-payload-key-data-set-interval" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstmikey.html#gst-mikey-payload-key-data-set-interval">
+<ANCHOR id="gst-mikey-payload-key-data-set-key" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstmikey.html#gst-mikey-payload-key-data-set-key">
+<ANCHOR id="gst-mikey-payload-key-data-set-salt" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstmikey.html#gst-mikey-payload-key-data-set-salt">
+<ANCHOR id="gst-mikey-payload-key-data-set-spi" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstmikey.html#gst-mikey-payload-key-data-set-spi">
+<ANCHOR id="gst-mikey-payload-ref" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstmikey.html#gst-mikey-payload-ref">
+<ANCHOR id="gst-mikey-payload-unref" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstmikey.html#gst-mikey-payload-unref">
 <ANCHOR id="gst-mikey-payload-kemac-set" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstmikey.html#gst-mikey-payload-kemac-set">
+<ANCHOR id="gst-mikey-payload-kemac-add-sub" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstmikey.html#gst-mikey-payload-kemac-add-sub">
+<ANCHOR id="gst-mikey-payload-kemac-get-n-sub" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstmikey.html#gst-mikey-payload-kemac-get-n-sub">
+<ANCHOR id="gst-mikey-payload-kemac-get-sub" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstmikey.html#gst-mikey-payload-kemac-get-sub">
+<ANCHOR id="gst-mikey-payload-kemac-remove-sub" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstmikey.html#gst-mikey-payload-kemac-remove-sub">
 <ANCHOR id="gst-mikey-payload-pke-set" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstmikey.html#gst-mikey-payload-pke-set">
 <ANCHOR id="gst-mikey-message-add-pke" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstmikey.html#gst-mikey-message-add-pke">
 <ANCHOR id="gst-mikey-payload-t-set" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstmikey.html#gst-mikey-payload-t-set">
@@ -1146,22 +1597,72 @@
 <ANCHOR id="gst-plugins-base-libs-gstmikey.other_details" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstmikey.html#gst-plugins-base-libs-gstmikey.other_details">
 <ANCHOR id="GST-MIKEY-VERSION:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstmikey.html#GST-MIKEY-VERSION:CAPS">
 <ANCHOR id="GstMIKEYType" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstmikey.html#GstMIKEYType">
+<ANCHOR id="GST-MIKEY-TYPE-INVALID:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstmikey.html#GST-MIKEY-TYPE-INVALID:CAPS">
+<ANCHOR id="GST-MIKEY-TYPE-PSK-INIT:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstmikey.html#GST-MIKEY-TYPE-PSK-INIT:CAPS">
+<ANCHOR id="GST-MIKEY-TYPE-PSK-VERIFY:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstmikey.html#GST-MIKEY-TYPE-PSK-VERIFY:CAPS">
+<ANCHOR id="GST-MIKEY-TYPE-PK-INIT:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstmikey.html#GST-MIKEY-TYPE-PK-INIT:CAPS">
+<ANCHOR id="GST-MIKEY-TYPE-PK-VERIFY:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstmikey.html#GST-MIKEY-TYPE-PK-VERIFY:CAPS">
+<ANCHOR id="GST-MIKEY-TYPE-DH-INIT:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstmikey.html#GST-MIKEY-TYPE-DH-INIT:CAPS">
+<ANCHOR id="GST-MIKEY-TYPE-DH-RESP:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstmikey.html#GST-MIKEY-TYPE-DH-RESP:CAPS">
+<ANCHOR id="GST-MIKEY-TYPE-ERROR:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstmikey.html#GST-MIKEY-TYPE-ERROR:CAPS">
 <ANCHOR id="GstMIKEYMessage" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstmikey.html#GstMIKEYMessage">
 <ANCHOR id="GstMIKEYPRFFunc" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstmikey.html#GstMIKEYPRFFunc">
+<ANCHOR id="GST-MIKEY-PRF-MIKEY-1:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstmikey.html#GST-MIKEY-PRF-MIKEY-1:CAPS">
 <ANCHOR id="GstMIKEYMapType" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstmikey.html#GstMIKEYMapType">
+<ANCHOR id="GST-MIKEY-MAP-TYPE-SRTP:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstmikey.html#GST-MIKEY-MAP-TYPE-SRTP:CAPS">
 <ANCHOR id="GstMIKEYMapSRTP" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstmikey.html#GstMIKEYMapSRTP">
 <ANCHOR id="GstMIKEYPayloadType" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstmikey.html#GstMIKEYPayloadType">
+<ANCHOR id="GST-MIKEY-PT-LAST:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstmikey.html#GST-MIKEY-PT-LAST:CAPS">
+<ANCHOR id="GST-MIKEY-PT-KEMAC:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstmikey.html#GST-MIKEY-PT-KEMAC:CAPS">
+<ANCHOR id="GST-MIKEY-PT-PKE:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstmikey.html#GST-MIKEY-PT-PKE:CAPS">
+<ANCHOR id="GST-MIKEY-PT-DH:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstmikey.html#GST-MIKEY-PT-DH:CAPS">
+<ANCHOR id="GST-MIKEY-PT-SIGN:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstmikey.html#GST-MIKEY-PT-SIGN:CAPS">
+<ANCHOR id="GST-MIKEY-PT-T:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstmikey.html#GST-MIKEY-PT-T:CAPS">
+<ANCHOR id="GST-MIKEY-PT-ID:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstmikey.html#GST-MIKEY-PT-ID:CAPS">
+<ANCHOR id="GST-MIKEY-PT-CERT:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstmikey.html#GST-MIKEY-PT-CERT:CAPS">
+<ANCHOR id="GST-MIKEY-PT-CHASH:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstmikey.html#GST-MIKEY-PT-CHASH:CAPS">
+<ANCHOR id="GST-MIKEY-PT-V:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstmikey.html#GST-MIKEY-PT-V:CAPS">
+<ANCHOR id="GST-MIKEY-PT-SP:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstmikey.html#GST-MIKEY-PT-SP:CAPS">
+<ANCHOR id="GST-MIKEY-PT-RAND:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstmikey.html#GST-MIKEY-PT-RAND:CAPS">
+<ANCHOR id="GST-MIKEY-PT-ERR:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstmikey.html#GST-MIKEY-PT-ERR:CAPS">
+<ANCHOR id="GST-MIKEY-PT-KEY-DATA:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstmikey.html#GST-MIKEY-PT-KEY-DATA:CAPS">
+<ANCHOR id="GST-MIKEY-PT-GEN-EXT:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstmikey.html#GST-MIKEY-PT-GEN-EXT:CAPS">
 <ANCHOR id="GstMIKEYPayload" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstmikey.html#GstMIKEYPayload">
 <ANCHOR id="GstMIKEYEncAlg" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstmikey.html#GstMIKEYEncAlg">
+<ANCHOR id="GST-MIKEY-ENC-NULL:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstmikey.html#GST-MIKEY-ENC-NULL:CAPS">
+<ANCHOR id="GST-MIKEY-ENC-AES-CM-128:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstmikey.html#GST-MIKEY-ENC-AES-CM-128:CAPS">
+<ANCHOR id="GST-MIKEY-ENC-AES-KW-128:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstmikey.html#GST-MIKEY-ENC-AES-KW-128:CAPS">
 <ANCHOR id="GstMIKEYMacAlg" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstmikey.html#GstMIKEYMacAlg">
+<ANCHOR id="GST-MIKEY-MAC-NULL:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstmikey.html#GST-MIKEY-MAC-NULL:CAPS">
+<ANCHOR id="GST-MIKEY-MAC-HMAC-SHA-1-160:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstmikey.html#GST-MIKEY-MAC-HMAC-SHA-1-160:CAPS">
 <ANCHOR id="GstMIKEYPayloadKEMAC" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstmikey.html#GstMIKEYPayloadKEMAC">
 <ANCHOR id="GstMIKEYCacheType" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstmikey.html#GstMIKEYCacheType">
+<ANCHOR id="GST-MIKEY-CACHE-NONE:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstmikey.html#GST-MIKEY-CACHE-NONE:CAPS">
+<ANCHOR id="GST-MIKEY-CACHE-ALWAYS:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstmikey.html#GST-MIKEY-CACHE-ALWAYS:CAPS">
+<ANCHOR id="GST-MIKEY-CACHE-FOR-CSB:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstmikey.html#GST-MIKEY-CACHE-FOR-CSB:CAPS">
 <ANCHOR id="GstMIKEYPayloadPKE" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstmikey.html#GstMIKEYPayloadPKE">
 <ANCHOR id="GstMIKEYTSType" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstmikey.html#GstMIKEYTSType">
+<ANCHOR id="GST-MIKEY-TS-TYPE-NTP-UTC:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstmikey.html#GST-MIKEY-TS-TYPE-NTP-UTC:CAPS">
+<ANCHOR id="GST-MIKEY-TS-TYPE-NTP:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstmikey.html#GST-MIKEY-TS-TYPE-NTP:CAPS">
+<ANCHOR id="GST-MIKEY-TS-TYPE-COUNTER:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstmikey.html#GST-MIKEY-TS-TYPE-COUNTER:CAPS">
 <ANCHOR id="GstMIKEYPayloadT" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstmikey.html#GstMIKEYPayloadT">
 <ANCHOR id="GstMIKEYPayloadRAND" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstmikey.html#GstMIKEYPayloadRAND">
 <ANCHOR id="GstMIKEYSecProto" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstmikey.html#GstMIKEYSecProto">
+<ANCHOR id="GST-MIKEY-SEC-PROTO-SRTP:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstmikey.html#GST-MIKEY-SEC-PROTO-SRTP:CAPS">
 <ANCHOR id="GstMIKEYSecSRTP" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstmikey.html#GstMIKEYSecSRTP">
+<ANCHOR id="GST-MIKEY-SP-SRTP-ENC-ALG:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstmikey.html#GST-MIKEY-SP-SRTP-ENC-ALG:CAPS">
+<ANCHOR id="GST-MIKEY-SP-SRTP-ENC-KEY-LEN:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstmikey.html#GST-MIKEY-SP-SRTP-ENC-KEY-LEN:CAPS">
+<ANCHOR id="GST-MIKEY-SP-SRTP-AUTH-ALG:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstmikey.html#GST-MIKEY-SP-SRTP-AUTH-ALG:CAPS">
+<ANCHOR id="GST-MIKEY-SP-SRTP-AUTH-KEY-LEN:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstmikey.html#GST-MIKEY-SP-SRTP-AUTH-KEY-LEN:CAPS">
+<ANCHOR id="GST-MIKEY-SP-SRTP-SALT-KEY-LEN:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstmikey.html#GST-MIKEY-SP-SRTP-SALT-KEY-LEN:CAPS">
+<ANCHOR id="GST-MIKEY-SP-SRTP-PRF:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstmikey.html#GST-MIKEY-SP-SRTP-PRF:CAPS">
+<ANCHOR id="GST-MIKEY-SP-SRTP-KEY-DERIV-RATE:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstmikey.html#GST-MIKEY-SP-SRTP-KEY-DERIV-RATE:CAPS">
+<ANCHOR id="GST-MIKEY-SP-SRTP-SRTP-ENC:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstmikey.html#GST-MIKEY-SP-SRTP-SRTP-ENC:CAPS">
+<ANCHOR id="GST-MIKEY-SP-SRTP-SRTCP-ENC:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstmikey.html#GST-MIKEY-SP-SRTP-SRTCP-ENC:CAPS">
+<ANCHOR id="GST-MIKEY-SP-SRTP-FEC-ORDER:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstmikey.html#GST-MIKEY-SP-SRTP-FEC-ORDER:CAPS">
+<ANCHOR id="GST-MIKEY-SP-SRTP-SRTP-AUTH:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstmikey.html#GST-MIKEY-SP-SRTP-SRTP-AUTH:CAPS">
+<ANCHOR id="GST-MIKEY-SP-SRTP-AUTH-TAG-LEN:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstmikey.html#GST-MIKEY-SP-SRTP-AUTH-TAG-LEN:CAPS">
+<ANCHOR id="GST-MIKEY-SP-SRTP-SRTP-PREFIX-LEN:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstmikey.html#GST-MIKEY-SP-SRTP-SRTP-PREFIX-LEN:CAPS">
 <ANCHOR id="GstMIKEYPayloadSP" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstmikey.html#GstMIKEYPayloadSP">
 <ANCHOR id="GstMIKEYPayloadSPParam" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstmikey.html#GstMIKEYPayloadSPParam">
 <ANCHOR id="gst-plugins-base-libs-gsttag" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gsttag.html">
@@ -1173,6 +1674,7 @@
 <ANCHOR id="gst-tag-register-musicbrainz-tags" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gsttag.html#gst-tag-register-musicbrainz-tags">
 <ANCHOR id="gst-tag-freeform-string-to-utf8" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gsttag.html#gst-tag-freeform-string-to-utf8">
 <ANCHOR id="gst-tag-parse-extended-comment" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gsttag.html#gst-tag-parse-extended-comment">
+<ANCHOR id="gst-tag-image-data-to-image-sample" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gsttag.html#gst-tag-image-data-to-image-sample">
 <ANCHOR id="gst-plugins-base-libs-gsttag.other_details" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gsttag.html#gst-plugins-base-libs-gsttag.other_details">
 <ANCHOR id="GST-TAG-MUSICBRAINZ-TRACKID:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gsttag.html#GST-TAG-MUSICBRAINZ-TRACKID:CAPS">
 <ANCHOR id="GST-TAG-MUSICBRAINZ-ARTISTID:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gsttag.html#GST-TAG-MUSICBRAINZ-ARTISTID:CAPS">
@@ -1207,7 +1709,28 @@
 <ANCHOR id="GST-TAG-IMAGE-HORIZONTAL-PPI:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gsttag.html#GST-TAG-IMAGE-HORIZONTAL-PPI:CAPS">
 <ANCHOR id="GST-TAG-IMAGE-VERTICAL-PPI:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gsttag.html#GST-TAG-IMAGE-VERTICAL-PPI:CAPS">
 <ANCHOR id="GST-TAG-ID3V2-HEADER-SIZE:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gsttag.html#GST-TAG-ID3V2-HEADER-SIZE:CAPS">
+<ANCHOR id="GST-TAG-MUSICAL-KEY:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gsttag.html#GST-TAG-MUSICAL-KEY:CAPS">
 <ANCHOR id="GstTagImageType" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gsttag.html#GstTagImageType">
+<ANCHOR id="GST-TAG-IMAGE-TYPE-NONE:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gsttag.html#GST-TAG-IMAGE-TYPE-NONE:CAPS">
+<ANCHOR id="GST-TAG-IMAGE-TYPE-UNDEFINED:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gsttag.html#GST-TAG-IMAGE-TYPE-UNDEFINED:CAPS">
+<ANCHOR id="GST-TAG-IMAGE-TYPE-FRONT-COVER:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gsttag.html#GST-TAG-IMAGE-TYPE-FRONT-COVER:CAPS">
+<ANCHOR id="GST-TAG-IMAGE-TYPE-BACK-COVER:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gsttag.html#GST-TAG-IMAGE-TYPE-BACK-COVER:CAPS">
+<ANCHOR id="GST-TAG-IMAGE-TYPE-LEAFLET-PAGE:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gsttag.html#GST-TAG-IMAGE-TYPE-LEAFLET-PAGE:CAPS">
+<ANCHOR id="GST-TAG-IMAGE-TYPE-MEDIUM:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gsttag.html#GST-TAG-IMAGE-TYPE-MEDIUM:CAPS">
+<ANCHOR id="GST-TAG-IMAGE-TYPE-LEAD-ARTIST:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gsttag.html#GST-TAG-IMAGE-TYPE-LEAD-ARTIST:CAPS">
+<ANCHOR id="GST-TAG-IMAGE-TYPE-ARTIST:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gsttag.html#GST-TAG-IMAGE-TYPE-ARTIST:CAPS">
+<ANCHOR id="GST-TAG-IMAGE-TYPE-CONDUCTOR:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gsttag.html#GST-TAG-IMAGE-TYPE-CONDUCTOR:CAPS">
+<ANCHOR id="GST-TAG-IMAGE-TYPE-BAND-ORCHESTRA:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gsttag.html#GST-TAG-IMAGE-TYPE-BAND-ORCHESTRA:CAPS">
+<ANCHOR id="GST-TAG-IMAGE-TYPE-COMPOSER:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gsttag.html#GST-TAG-IMAGE-TYPE-COMPOSER:CAPS">
+<ANCHOR id="GST-TAG-IMAGE-TYPE-LYRICIST:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gsttag.html#GST-TAG-IMAGE-TYPE-LYRICIST:CAPS">
+<ANCHOR id="GST-TAG-IMAGE-TYPE-RECORDING-LOCATION:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gsttag.html#GST-TAG-IMAGE-TYPE-RECORDING-LOCATION:CAPS">
+<ANCHOR id="GST-TAG-IMAGE-TYPE-DURING-RECORDING:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gsttag.html#GST-TAG-IMAGE-TYPE-DURING-RECORDING:CAPS">
+<ANCHOR id="GST-TAG-IMAGE-TYPE-DURING-PERFORMANCE:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gsttag.html#GST-TAG-IMAGE-TYPE-DURING-PERFORMANCE:CAPS">
+<ANCHOR id="GST-TAG-IMAGE-TYPE-VIDEO-CAPTURE:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gsttag.html#GST-TAG-IMAGE-TYPE-VIDEO-CAPTURE:CAPS">
+<ANCHOR id="GST-TAG-IMAGE-TYPE-FISH:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gsttag.html#GST-TAG-IMAGE-TYPE-FISH:CAPS">
+<ANCHOR id="GST-TAG-IMAGE-TYPE-ILLUSTRATION:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gsttag.html#GST-TAG-IMAGE-TYPE-ILLUSTRATION:CAPS">
+<ANCHOR id="GST-TAG-IMAGE-TYPE-BAND-ARTIST-LOGO:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gsttag.html#GST-TAG-IMAGE-TYPE-BAND-ARTIST-LOGO:CAPS">
+<ANCHOR id="GST-TAG-IMAGE-TYPE-PUBLISHER-STUDIO-LOGO:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gsttag.html#GST-TAG-IMAGE-TYPE-PUBLISHER-STUDIO-LOGO:CAPS">
 <ANCHOR id="gst-plugins-base-libs-gsttag.see-also" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gsttag.html#gst-plugins-base-libs-gsttag.see-also">
 <ANCHOR id="gst-plugins-base-libs-gsttagvorbis" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gsttagvorbis.html">
 <ANCHOR id="gst-plugins-base-libs-gsttagvorbis.functions" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gsttagvorbis.html#gst-plugins-base-libs-gsttagvorbis.functions">
@@ -1280,6 +1803,9 @@
 <ANCHOR id="GstTagDemux" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gsttagdemux.html#GstTagDemux">
 <ANCHOR id="GstTagDemuxClass" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gsttagdemux.html#GstTagDemuxClass">
 <ANCHOR id="GstTagDemuxResult" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gsttagdemux.html#GstTagDemuxResult">
+<ANCHOR id="GST-TAG-DEMUX-RESULT-BROKEN-TAG:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gsttagdemux.html#GST-TAG-DEMUX-RESULT-BROKEN-TAG:CAPS">
+<ANCHOR id="GST-TAG-DEMUX-RESULT-AGAIN:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gsttagdemux.html#GST-TAG-DEMUX-RESULT-AGAIN:CAPS">
+<ANCHOR id="GST-TAG-DEMUX-RESULT-OK:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gsttagdemux.html#GST-TAG-DEMUX-RESULT-OK:CAPS">
 <ANCHOR id="gst-plugins-base-libs-gsttagdemux.see-also" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gsttagdemux.html#gst-plugins-base-libs-gsttagdemux.see-also">
 <ANCHOR id="gst-plugins-base-libs-gsttagmux" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gsttagmux.html">
 <ANCHOR id="gst-plugins-base-libs-gsttagmux.other" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gsttagmux.html#gst-plugins-base-libs-gsttagmux.other">
@@ -1319,6 +1845,20 @@
 <ANCHOR id="gst-tag-get-licenses" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gsttaglicenses.html#gst-tag-get-licenses">
 <ANCHOR id="gst-plugins-base-libs-gsttaglicenses.other_details" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gsttaglicenses.html#gst-plugins-base-libs-gsttaglicenses.other_details">
 <ANCHOR id="GstTagLicenseFlags" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gsttaglicenses.html#GstTagLicenseFlags">
+<ANCHOR id="GST-TAG-LICENSE-PERMITS-REPRODUCTION:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gsttaglicenses.html#GST-TAG-LICENSE-PERMITS-REPRODUCTION:CAPS">
+<ANCHOR id="GST-TAG-LICENSE-PERMITS-DISTRIBUTION:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gsttaglicenses.html#GST-TAG-LICENSE-PERMITS-DISTRIBUTION:CAPS">
+<ANCHOR id="GST-TAG-LICENSE-PERMITS-DERIVATIVE-WORKS:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gsttaglicenses.html#GST-TAG-LICENSE-PERMITS-DERIVATIVE-WORKS:CAPS">
+<ANCHOR id="GST-TAG-LICENSE-PERMITS-SHARING:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gsttaglicenses.html#GST-TAG-LICENSE-PERMITS-SHARING:CAPS">
+<ANCHOR id="GST-TAG-LICENSE-REQUIRES-NOTICE:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gsttaglicenses.html#GST-TAG-LICENSE-REQUIRES-NOTICE:CAPS">
+<ANCHOR id="GST-TAG-LICENSE-REQUIRES-ATTRIBUTION:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gsttaglicenses.html#GST-TAG-LICENSE-REQUIRES-ATTRIBUTION:CAPS">
+<ANCHOR id="GST-TAG-LICENSE-REQUIRES-SHARE-ALIKE:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gsttaglicenses.html#GST-TAG-LICENSE-REQUIRES-SHARE-ALIKE:CAPS">
+<ANCHOR id="GST-TAG-LICENSE-REQUIRES-SOURCE-CODE:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gsttaglicenses.html#GST-TAG-LICENSE-REQUIRES-SOURCE-CODE:CAPS">
+<ANCHOR id="GST-TAG-LICENSE-REQUIRES-COPYLEFT:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gsttaglicenses.html#GST-TAG-LICENSE-REQUIRES-COPYLEFT:CAPS">
+<ANCHOR id="GST-TAG-LICENSE-REQUIRES-LESSER-COPYLEFT:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gsttaglicenses.html#GST-TAG-LICENSE-REQUIRES-LESSER-COPYLEFT:CAPS">
+<ANCHOR id="GST-TAG-LICENSE-PROHIBITS-COMMERCIAL-USE:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gsttaglicenses.html#GST-TAG-LICENSE-PROHIBITS-COMMERCIAL-USE:CAPS">
+<ANCHOR id="GST-TAG-LICENSE-PROHIBITS-HIGH-INCOME-NATION-USE:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gsttaglicenses.html#GST-TAG-LICENSE-PROHIBITS-HIGH-INCOME-NATION-USE:CAPS">
+<ANCHOR id="GST-TAG-LICENSE-CREATIVE-COMMONS-LICENSE:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gsttaglicenses.html#GST-TAG-LICENSE-CREATIVE-COMMONS-LICENSE:CAPS">
+<ANCHOR id="GST-TAG-LICENSE-FREE-SOFTWARE-FOUNDATION-LICENSE:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gsttaglicenses.html#GST-TAG-LICENSE-FREE-SOFTWARE-FOUNDATION-LICENSE:CAPS">
 <ANCHOR id="gst-plugins-base-libs-gsttaglicenses.see-also" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gsttaglicenses.html#gst-plugins-base-libs-gsttaglicenses.see-also">
 <ANCHOR id="gst-plugins-base-libs-gstpbutils" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstpbutils.html">
 <ANCHOR id="gst-plugins-base-libs-gstpbutils.functions" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstpbutils.html#gst-plugins-base-libs-gstpbutils.functions">
@@ -1410,8 +1950,22 @@
 <ANCHOR id="gst-install-plugins-context-new" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstpbutilsinstallplugins.html#gst-install-plugins-context-new">
 <ANCHOR id="gst-install-plugins-context-free" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstpbutilsinstallplugins.html#gst-install-plugins-context-free">
 <ANCHOR id="gst-install-plugins-context-set-xid" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstpbutilsinstallplugins.html#gst-install-plugins-context-set-xid">
+<ANCHOR id="gst-install-plugins-context-set-confirm-search" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstpbutilsinstallplugins.html#gst-install-plugins-context-set-confirm-search">
+<ANCHOR id="gst-install-plugins-context-set-desktop-id" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstpbutilsinstallplugins.html#gst-install-plugins-context-set-desktop-id">
+<ANCHOR id="gst-install-plugins-context-set-startup-notification-id" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstpbutilsinstallplugins.html#gst-install-plugins-context-set-startup-notification-id">
 <ANCHOR id="gst-plugins-base-libs-gstpbutilsinstallplugins.other_details" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstpbutilsinstallplugins.html#gst-plugins-base-libs-gstpbutilsinstallplugins.other_details">
 <ANCHOR id="GstInstallPluginsReturn" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstpbutilsinstallplugins.html#GstInstallPluginsReturn">
+<ANCHOR id="GST-INSTALL-PLUGINS-SUCCESS:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstpbutilsinstallplugins.html#GST-INSTALL-PLUGINS-SUCCESS:CAPS">
+<ANCHOR id="GST-INSTALL-PLUGINS-NOT-FOUND:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstpbutilsinstallplugins.html#GST-INSTALL-PLUGINS-NOT-FOUND:CAPS">
+<ANCHOR id="GST-INSTALL-PLUGINS-ERROR:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstpbutilsinstallplugins.html#GST-INSTALL-PLUGINS-ERROR:CAPS">
+<ANCHOR id="GST-INSTALL-PLUGINS-PARTIAL-SUCCESS:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstpbutilsinstallplugins.html#GST-INSTALL-PLUGINS-PARTIAL-SUCCESS:CAPS">
+<ANCHOR id="GST-INSTALL-PLUGINS-USER-ABORT:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstpbutilsinstallplugins.html#GST-INSTALL-PLUGINS-USER-ABORT:CAPS">
+<ANCHOR id="GST-INSTALL-PLUGINS-CRASHED:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstpbutilsinstallplugins.html#GST-INSTALL-PLUGINS-CRASHED:CAPS">
+<ANCHOR id="GST-INSTALL-PLUGINS-INVALID:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstpbutilsinstallplugins.html#GST-INSTALL-PLUGINS-INVALID:CAPS">
+<ANCHOR id="GST-INSTALL-PLUGINS-STARTED-OK:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstpbutilsinstallplugins.html#GST-INSTALL-PLUGINS-STARTED-OK:CAPS">
+<ANCHOR id="GST-INSTALL-PLUGINS-INTERNAL-FAILURE:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstpbutilsinstallplugins.html#GST-INSTALL-PLUGINS-INTERNAL-FAILURE:CAPS">
+<ANCHOR id="GST-INSTALL-PLUGINS-HELPER-MISSING:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstpbutilsinstallplugins.html#GST-INSTALL-PLUGINS-HELPER-MISSING:CAPS">
+<ANCHOR id="GST-INSTALL-PLUGINS-INSTALL-IN-PROGRESS:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstpbutilsinstallplugins.html#GST-INSTALL-PLUGINS-INSTALL-IN-PROGRESS:CAPS">
 <ANCHOR id="GstInstallPluginsContext" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstpbutilsinstallplugins.html#GstInstallPluginsContext">
 <ANCHOR id="gst-plugins-base-libs-gstdiscoverer" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstdiscoverer.html">
 <ANCHOR id="gst-plugins-base-libs-gstdiscoverer.functions" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstdiscoverer.html#gst-plugins-base-libs-gstdiscoverer.functions">
@@ -1440,6 +1994,8 @@
 <ANCHOR id="gst-discoverer-info-get-seekable" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstdiscoverer.html#gst-discoverer-info-get-seekable">
 <ANCHOR id="gst-discoverer-info-ref" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstdiscoverer.html#gst-discoverer-info-ref">
 <ANCHOR id="gst-discoverer-info-unref" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstdiscoverer.html#gst-discoverer-info-unref">
+<ANCHOR id="gst-discoverer-info-to-variant" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstdiscoverer.html#gst-discoverer-info-to-variant">
+<ANCHOR id="gst-discoverer-info-from-variant" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstdiscoverer.html#gst-discoverer-info-from-variant">
 <ANCHOR id="gst-discoverer-stream-info-get-caps" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstdiscoverer.html#gst-discoverer-stream-info-get-caps">
 <ANCHOR id="gst-discoverer-stream-info-get-misc" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstdiscoverer.html#gst-discoverer-stream-info-get-misc">
 <ANCHOR id="gst-discoverer-stream-info-get-next" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstdiscoverer.html#gst-discoverer-stream-info-get-next">
@@ -1480,6 +2036,18 @@
 <ANCHOR id="GstDiscoverer-struct" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstdiscoverer.html#GstDiscoverer-struct">
 <ANCHOR id="GstDiscovererInfo-struct" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstdiscoverer.html#GstDiscovererInfo-struct">
 <ANCHOR id="GstDiscovererResult" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstdiscoverer.html#GstDiscovererResult">
+<ANCHOR id="GST-DISCOVERER-OK:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstdiscoverer.html#GST-DISCOVERER-OK:CAPS">
+<ANCHOR id="GST-DISCOVERER-URI-INVALID:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstdiscoverer.html#GST-DISCOVERER-URI-INVALID:CAPS">
+<ANCHOR id="GST-DISCOVERER-ERROR:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstdiscoverer.html#GST-DISCOVERER-ERROR:CAPS">
+<ANCHOR id="GST-DISCOVERER-TIMEOUT:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstdiscoverer.html#GST-DISCOVERER-TIMEOUT:CAPS">
+<ANCHOR id="GST-DISCOVERER-BUSY:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstdiscoverer.html#GST-DISCOVERER-BUSY:CAPS">
+<ANCHOR id="GST-DISCOVERER-MISSING-PLUGINS:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstdiscoverer.html#GST-DISCOVERER-MISSING-PLUGINS:CAPS">
+<ANCHOR id="GstDiscovererSerializeFlags" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstdiscoverer.html#GstDiscovererSerializeFlags">
+<ANCHOR id="GST-DISCOVERER-SERIALIZE-BASIC:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstdiscoverer.html#GST-DISCOVERER-SERIALIZE-BASIC:CAPS">
+<ANCHOR id="GST-DISCOVERER-SERIALIZE-CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstdiscoverer.html#GST-DISCOVERER-SERIALIZE-CAPS">
+<ANCHOR id="GST-DISCOVERER-SERIALIZE-TAGS:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstdiscoverer.html#GST-DISCOVERER-SERIALIZE-TAGS:CAPS">
+<ANCHOR id="GST-DISCOVERER-SERIALIZE-MISC:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstdiscoverer.html#GST-DISCOVERER-SERIALIZE-MISC:CAPS">
+<ANCHOR id="GST-DISCOVERER-SERIALIZE-ALL:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstdiscoverer.html#GST-DISCOVERER-SERIALIZE-ALL:CAPS">
 <ANCHOR id="GstDiscovererStreamInfo" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstdiscoverer.html#GstDiscovererStreamInfo">
 <ANCHOR id="GstDiscovererContainerInfo" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstdiscoverer.html#GstDiscovererContainerInfo">
 <ANCHOR id="GstDiscovererAudioInfo" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstdiscoverer.html#GstDiscovererAudioInfo">
@@ -1519,12 +2087,14 @@
 <ANCHOR id="gst-encoding-profile-get-file-extension" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-encoding-profile.html#gst-encoding-profile-get-file-extension">
 <ANCHOR id="gst-encoding-profile-set-name" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-encoding-profile.html#gst-encoding-profile-set-name">
 <ANCHOR id="gst-encoding-profile-set-description" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-encoding-profile.html#gst-encoding-profile-set-description">
+<ANCHOR id="gst-encoding-profile-set-enabled" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-encoding-profile.html#gst-encoding-profile-set-enabled">
 <ANCHOR id="gst-encoding-profile-set-format" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-encoding-profile.html#gst-encoding-profile-set-format">
 <ANCHOR id="gst-encoding-profile-set-preset" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-encoding-profile.html#gst-encoding-profile-set-preset">
 <ANCHOR id="gst-encoding-profile-set-preset-name" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-encoding-profile.html#gst-encoding-profile-set-preset-name">
 <ANCHOR id="gst-encoding-profile-set-restriction" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-encoding-profile.html#gst-encoding-profile-set-restriction">
 <ANCHOR id="gst-encoding-profile-set-presence" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-encoding-profile.html#gst-encoding-profile-set-presence">
 <ANCHOR id="gst-encoding-profile-is-equal" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-encoding-profile.html#gst-encoding-profile-is-equal">
+<ANCHOR id="gst-encoding-profile-is-enabled" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-encoding-profile.html#gst-encoding-profile-is-enabled">
 <ANCHOR id="gst-encoding-profile-get-input-caps" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-encoding-profile.html#gst-encoding-profile-get-input-caps">
 <ANCHOR id="gst-encoding-profile-get-type-nick" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-encoding-profile.html#gst-encoding-profile-get-type-nick">
 <ANCHOR id="gst-encoding-container-profile-new" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-encoding-profile.html#gst-encoding-container-profile-new">
@@ -1571,6 +2141,7 @@
 <ANCHOR id="gst-plugins-base-libs-gstvideo.description" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstvideo.html#gst-plugins-base-libs-gstvideo.description">
 <ANCHOR id="gst-plugins-base-libs-gstvideo.functions_details" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstvideo.html#gst-plugins-base-libs-gstvideo.functions_details">
 <ANCHOR id="gst-video-calculate-display-ratio" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstvideo.html#gst-video-calculate-display-ratio">
+<ANCHOR id="gst-video-guess-framerate" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstvideo.html#gst-video-guess-framerate">
 <ANCHOR id="GstVideoConvertSampleCallback" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstvideo.html#GstVideoConvertSampleCallback">
 <ANCHOR id="gst-video-convert-sample" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstvideo.html#gst-video-convert-sample">
 <ANCHOR id="gst-video-convert-sample-async" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstvideo.html#gst-video-convert-sample-async">
@@ -1582,8 +2153,6 @@
 <ANCHOR id="gst-video-event-new-upstream-force-key-unit" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstvideo.html#gst-video-event-new-upstream-force-key-unit">
 <ANCHOR id="gst-video-event-parse-upstream-force-key-unit" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstvideo.html#gst-video-event-parse-upstream-force-key-unit">
 <ANCHOR id="gst-video-event-is-force-key-unit" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstvideo.html#gst-video-event-is-force-key-unit">
-<ANCHOR id="gst-video-chroma-from-string" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstvideo.html#gst-video-chroma-from-string">
-<ANCHOR id="gst-video-chroma-to-string" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstvideo.html#gst-video-chroma-to-string">
 <ANCHOR id="GstVideoFormatUnpack" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstvideo.html#GstVideoFormatUnpack">
 <ANCHOR id="GstVideoFormatPack" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstvideo.html#GstVideoFormatPack">
 <ANCHOR id="GST-VIDEO-FORMAT-INFO-FORMAT:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstvideo.html#GST-VIDEO-FORMAT-INFO-FORMAT:CAPS">
@@ -1622,10 +2191,14 @@
 <ANCHOR id="gst-video-format-to-string" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstvideo.html#gst-video-format-to-string">
 <ANCHOR id="gst-video-format-get-info" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstvideo.html#gst-video-format-get-info">
 <ANCHOR id="GST-VIDEO-CAPS-MAKE:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstvideo.html#GST-VIDEO-CAPS-MAKE:CAPS">
+<ANCHOR id="gst-video-color-range-offsets" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstvideo.html#gst-video-color-range-offsets">
+<ANCHOR id="gst-video-color-matrix-get-Kr-Kb" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstvideo.html#gst-video-color-matrix-get-Kr-Kb">
+<ANCHOR id="gst-video-color-transfer-decode" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstvideo.html#gst-video-color-transfer-decode">
+<ANCHOR id="gst-video-color-transfer-encode" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstvideo.html#gst-video-color-transfer-encode">
 <ANCHOR id="gst-video-colorimetry-matches" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstvideo.html#gst-video-colorimetry-matches">
+<ANCHOR id="gst-video-colorimetry-is-equal" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstvideo.html#gst-video-colorimetry-is-equal">
 <ANCHOR id="gst-video-colorimetry-from-string" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstvideo.html#gst-video-colorimetry-from-string">
 <ANCHOR id="gst-video-colorimetry-to-string" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstvideo.html#gst-video-colorimetry-to-string">
-<ANCHOR id="gst-video-color-range-offsets" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstvideo.html#gst-video-color-range-offsets">
 <ANCHOR id="GST-VIDEO-INFO-FORMAT:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstvideo.html#GST-VIDEO-INFO-FORMAT:CAPS">
 <ANCHOR id="GST-VIDEO-INFO-NAME:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstvideo.html#GST-VIDEO-INFO-NAME:CAPS">
 <ANCHOR id="GST-VIDEO-INFO-IS-YUV:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstvideo.html#GST-VIDEO-INFO-IS-YUV:CAPS">
@@ -1659,7 +2232,14 @@
 <ANCHOR id="GST-VIDEO-INFO-COMP-PLANE:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstvideo.html#GST-VIDEO-INFO-COMP-PLANE:CAPS">
 <ANCHOR id="GST-VIDEO-INFO-COMP-PSTRIDE:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstvideo.html#GST-VIDEO-INFO-COMP-PSTRIDE:CAPS">
 <ANCHOR id="GST-VIDEO-INFO-COMP-POFFSET:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstvideo.html#GST-VIDEO-INFO-COMP-POFFSET:CAPS">
+<ANCHOR id="GST-VIDEO-INFO-CHROMA-SITE:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstvideo.html#GST-VIDEO-INFO-CHROMA-SITE:CAPS">
+<ANCHOR id="GST-VIDEO-INFO-COLORIMETRY:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstvideo.html#GST-VIDEO-INFO-COLORIMETRY:CAPS">
+<ANCHOR id="GST-VIDEO-INFO-MULTIVIEW-FLAGS:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstvideo.html#GST-VIDEO-INFO-MULTIVIEW-FLAGS:CAPS">
+<ANCHOR id="GST-VIDEO-INFO-MULTIVIEW-MODE:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstvideo.html#GST-VIDEO-INFO-MULTIVIEW-MODE:CAPS">
 <ANCHOR id="gst-video-info-init" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstvideo.html#gst-video-info-init">
+<ANCHOR id="gst-video-info-new" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstvideo.html#gst-video-info-new">
+<ANCHOR id="gst-video-info-copy" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstvideo.html#gst-video-info-copy">
+<ANCHOR id="gst-video-info-free" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstvideo.html#gst-video-info-free">
 <ANCHOR id="gst-video-info-set-format" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstvideo.html#gst-video-info-set-format">
 <ANCHOR id="gst-video-info-from-caps" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstvideo.html#gst-video-info-from-caps">
 <ANCHOR id="gst-video-info-to-caps" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstvideo.html#gst-video-info-to-caps">
@@ -1702,6 +2282,22 @@
 <ANCHOR id="GST-VIDEO-TILE-MAKE-STRIDE:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstvideo.html#GST-VIDEO-TILE-MAKE-STRIDE:CAPS">
 <ANCHOR id="GST-VIDEO-TILE-X-TILES:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstvideo.html#GST-VIDEO-TILE-X-TILES:CAPS">
 <ANCHOR id="GST-VIDEO-TILE-Y-TILES:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstvideo.html#GST-VIDEO-TILE-Y-TILES:CAPS">
+<ANCHOR id="gst-video-blend" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstvideo.html#gst-video-blend">
+<ANCHOR id="gst-video-blend-scale-linear-RGBA" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstvideo.html#gst-video-blend-scale-linear-RGBA">
+<ANCHOR id="gst-video-converter-new" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstvideo.html#gst-video-converter-new">
+<ANCHOR id="gst-video-converter-free" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstvideo.html#gst-video-converter-free">
+<ANCHOR id="gst-video-converter-get-config" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstvideo.html#gst-video-converter-get-config">
+<ANCHOR id="gst-video-converter-set-config" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstvideo.html#gst-video-converter-set-config">
+<ANCHOR id="gst-video-converter-frame" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstvideo.html#gst-video-converter-frame">
+<ANCHOR id="gst-video-multiview-get-mono-modes" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstvideo.html#gst-video-multiview-get-mono-modes">
+<ANCHOR id="gst-video-multiview-get-unpacked-modes" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstvideo.html#gst-video-multiview-get-unpacked-modes">
+<ANCHOR id="gst-video-multiview-get-doubled-height-modes" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstvideo.html#gst-video-multiview-get-doubled-height-modes">
+<ANCHOR id="gst-video-multiview-get-doubled-size-modes" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstvideo.html#gst-video-multiview-get-doubled-size-modes">
+<ANCHOR id="gst-video-multiview-get-doubled-width-modes" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstvideo.html#gst-video-multiview-get-doubled-width-modes">
+<ANCHOR id="gst-video-multiview-mode-from-caps-string" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstvideo.html#gst-video-multiview-mode-from-caps-string">
+<ANCHOR id="gst-video-multiview-mode-to-caps-string" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstvideo.html#gst-video-multiview-mode-to-caps-string">
+<ANCHOR id="gst-video-multiview-guess-half-aspect" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstvideo.html#gst-video-multiview-guess-half-aspect">
+<ANCHOR id="gst-video-multiview-video-info-change-mode" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstvideo.html#gst-video-multiview-video-info-change-mode">
 <ANCHOR id="gst-plugins-base-libs-gstvideo.other_details" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstvideo.html#gst-plugins-base-libs-gstvideo.other_details">
 <ANCHOR id="GstVideoAlignment" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstvideo.html#GstVideoAlignment">
 <ANCHOR id="GST-META-TAG-VIDEO-STR:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstvideo.html#GST-META-TAG-VIDEO-STR:CAPS">
@@ -1709,28 +2305,189 @@
 <ANCHOR id="GST-META-TAG-VIDEO-SIZE-STR:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstvideo.html#GST-META-TAG-VIDEO-SIZE-STR:CAPS">
 <ANCHOR id="GST-META-TAG-VIDEO-COLORSPACE-STR:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstvideo.html#GST-META-TAG-VIDEO-COLORSPACE-STR:CAPS">
 <ANCHOR id="GstVideoFormat" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstvideo.html#GstVideoFormat">
+<ANCHOR id="GST-VIDEO-FORMAT-UNKNOWN:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstvideo.html#GST-VIDEO-FORMAT-UNKNOWN:CAPS">
+<ANCHOR id="GST-VIDEO-FORMAT-ENCODED:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstvideo.html#GST-VIDEO-FORMAT-ENCODED:CAPS">
+<ANCHOR id="GST-VIDEO-FORMAT-I420:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstvideo.html#GST-VIDEO-FORMAT-I420:CAPS">
+<ANCHOR id="GST-VIDEO-FORMAT-YV12:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstvideo.html#GST-VIDEO-FORMAT-YV12:CAPS">
+<ANCHOR id="GST-VIDEO-FORMAT-YUY2:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstvideo.html#GST-VIDEO-FORMAT-YUY2:CAPS">
+<ANCHOR id="GST-VIDEO-FORMAT-UYVY:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstvideo.html#GST-VIDEO-FORMAT-UYVY:CAPS">
+<ANCHOR id="GST-VIDEO-FORMAT-AYUV:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstvideo.html#GST-VIDEO-FORMAT-AYUV:CAPS">
+<ANCHOR id="GST-VIDEO-FORMAT-RGBx" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstvideo.html#GST-VIDEO-FORMAT-RGBx">
+<ANCHOR id="GST-VIDEO-FORMAT-BGRx" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstvideo.html#GST-VIDEO-FORMAT-BGRx">
+<ANCHOR id="GST-VIDEO-FORMAT-xRGB" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstvideo.html#GST-VIDEO-FORMAT-xRGB">
+<ANCHOR id="GST-VIDEO-FORMAT-xBGR" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstvideo.html#GST-VIDEO-FORMAT-xBGR">
+<ANCHOR id="GST-VIDEO-FORMAT-RGBA:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstvideo.html#GST-VIDEO-FORMAT-RGBA:CAPS">
+<ANCHOR id="GST-VIDEO-FORMAT-BGRA:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstvideo.html#GST-VIDEO-FORMAT-BGRA:CAPS">
+<ANCHOR id="GST-VIDEO-FORMAT-ARGB:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstvideo.html#GST-VIDEO-FORMAT-ARGB:CAPS">
+<ANCHOR id="GST-VIDEO-FORMAT-ABGR:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstvideo.html#GST-VIDEO-FORMAT-ABGR:CAPS">
+<ANCHOR id="GST-VIDEO-FORMAT-RGB:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstvideo.html#GST-VIDEO-FORMAT-RGB:CAPS">
+<ANCHOR id="GST-VIDEO-FORMAT-BGR:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstvideo.html#GST-VIDEO-FORMAT-BGR:CAPS">
+<ANCHOR id="GST-VIDEO-FORMAT-Y41B:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstvideo.html#GST-VIDEO-FORMAT-Y41B:CAPS">
+<ANCHOR id="GST-VIDEO-FORMAT-Y42B:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstvideo.html#GST-VIDEO-FORMAT-Y42B:CAPS">
+<ANCHOR id="GST-VIDEO-FORMAT-YVYU:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstvideo.html#GST-VIDEO-FORMAT-YVYU:CAPS">
+<ANCHOR id="GST-VIDEO-FORMAT-Y444:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstvideo.html#GST-VIDEO-FORMAT-Y444:CAPS">
+<ANCHOR id="GST-VIDEO-FORMAT-v210" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstvideo.html#GST-VIDEO-FORMAT-v210">
+<ANCHOR id="GST-VIDEO-FORMAT-v216" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstvideo.html#GST-VIDEO-FORMAT-v216">
+<ANCHOR id="GST-VIDEO-FORMAT-NV12:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstvideo.html#GST-VIDEO-FORMAT-NV12:CAPS">
+<ANCHOR id="GST-VIDEO-FORMAT-NV21:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstvideo.html#GST-VIDEO-FORMAT-NV21:CAPS">
+<ANCHOR id="GST-VIDEO-FORMAT-GRAY8:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstvideo.html#GST-VIDEO-FORMAT-GRAY8:CAPS">
+<ANCHOR id="GST-VIDEO-FORMAT-GRAY16-BE:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstvideo.html#GST-VIDEO-FORMAT-GRAY16-BE:CAPS">
+<ANCHOR id="GST-VIDEO-FORMAT-GRAY16-LE:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstvideo.html#GST-VIDEO-FORMAT-GRAY16-LE:CAPS">
+<ANCHOR id="GST-VIDEO-FORMAT-v308" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstvideo.html#GST-VIDEO-FORMAT-v308">
+<ANCHOR id="GST-VIDEO-FORMAT-RGB16:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstvideo.html#GST-VIDEO-FORMAT-RGB16:CAPS">
+<ANCHOR id="GST-VIDEO-FORMAT-BGR16:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstvideo.html#GST-VIDEO-FORMAT-BGR16:CAPS">
+<ANCHOR id="GST-VIDEO-FORMAT-RGB15:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstvideo.html#GST-VIDEO-FORMAT-RGB15:CAPS">
+<ANCHOR id="GST-VIDEO-FORMAT-BGR15:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstvideo.html#GST-VIDEO-FORMAT-BGR15:CAPS">
+<ANCHOR id="GST-VIDEO-FORMAT-UYVP:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstvideo.html#GST-VIDEO-FORMAT-UYVP:CAPS">
+<ANCHOR id="GST-VIDEO-FORMAT-A420:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstvideo.html#GST-VIDEO-FORMAT-A420:CAPS">
+<ANCHOR id="GST-VIDEO-FORMAT-RGB8P:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstvideo.html#GST-VIDEO-FORMAT-RGB8P:CAPS">
+<ANCHOR id="GST-VIDEO-FORMAT-YUV9:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstvideo.html#GST-VIDEO-FORMAT-YUV9:CAPS">
+<ANCHOR id="GST-VIDEO-FORMAT-YVU9:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstvideo.html#GST-VIDEO-FORMAT-YVU9:CAPS">
+<ANCHOR id="GST-VIDEO-FORMAT-IYU1:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstvideo.html#GST-VIDEO-FORMAT-IYU1:CAPS">
+<ANCHOR id="GST-VIDEO-FORMAT-ARGB64:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstvideo.html#GST-VIDEO-FORMAT-ARGB64:CAPS">
+<ANCHOR id="GST-VIDEO-FORMAT-AYUV64:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstvideo.html#GST-VIDEO-FORMAT-AYUV64:CAPS">
+<ANCHOR id="GST-VIDEO-FORMAT-r210" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstvideo.html#GST-VIDEO-FORMAT-r210">
+<ANCHOR id="GST-VIDEO-FORMAT-I420-10BE:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstvideo.html#GST-VIDEO-FORMAT-I420-10BE:CAPS">
+<ANCHOR id="GST-VIDEO-FORMAT-I420-10LE:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstvideo.html#GST-VIDEO-FORMAT-I420-10LE:CAPS">
+<ANCHOR id="GST-VIDEO-FORMAT-I422-10BE:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstvideo.html#GST-VIDEO-FORMAT-I422-10BE:CAPS">
+<ANCHOR id="GST-VIDEO-FORMAT-I422-10LE:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstvideo.html#GST-VIDEO-FORMAT-I422-10LE:CAPS">
+<ANCHOR id="GST-VIDEO-FORMAT-Y444-10BE:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstvideo.html#GST-VIDEO-FORMAT-Y444-10BE:CAPS">
+<ANCHOR id="GST-VIDEO-FORMAT-Y444-10LE:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstvideo.html#GST-VIDEO-FORMAT-Y444-10LE:CAPS">
+<ANCHOR id="GST-VIDEO-FORMAT-GBR:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstvideo.html#GST-VIDEO-FORMAT-GBR:CAPS">
+<ANCHOR id="GST-VIDEO-FORMAT-GBR-10BE:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstvideo.html#GST-VIDEO-FORMAT-GBR-10BE:CAPS">
+<ANCHOR id="GST-VIDEO-FORMAT-GBR-10LE:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstvideo.html#GST-VIDEO-FORMAT-GBR-10LE:CAPS">
+<ANCHOR id="GST-VIDEO-FORMAT-NV16:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstvideo.html#GST-VIDEO-FORMAT-NV16:CAPS">
+<ANCHOR id="GST-VIDEO-FORMAT-NV24:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstvideo.html#GST-VIDEO-FORMAT-NV24:CAPS">
+<ANCHOR id="GST-VIDEO-FORMAT-NV12-64Z32:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstvideo.html#GST-VIDEO-FORMAT-NV12-64Z32:CAPS">
+<ANCHOR id="GST-VIDEO-FORMAT-A420-10BE:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstvideo.html#GST-VIDEO-FORMAT-A420-10BE:CAPS">
+<ANCHOR id="GST-VIDEO-FORMAT-A420-10LE:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstvideo.html#GST-VIDEO-FORMAT-A420-10LE:CAPS">
+<ANCHOR id="GST-VIDEO-FORMAT-A422-10BE:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstvideo.html#GST-VIDEO-FORMAT-A422-10BE:CAPS">
+<ANCHOR id="GST-VIDEO-FORMAT-A422-10LE:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstvideo.html#GST-VIDEO-FORMAT-A422-10LE:CAPS">
+<ANCHOR id="GST-VIDEO-FORMAT-A444-10BE:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstvideo.html#GST-VIDEO-FORMAT-A444-10BE:CAPS">
+<ANCHOR id="GST-VIDEO-FORMAT-A444-10LE:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstvideo.html#GST-VIDEO-FORMAT-A444-10LE:CAPS">
+<ANCHOR id="GST-VIDEO-FORMAT-NV61:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstvideo.html#GST-VIDEO-FORMAT-NV61:CAPS">
 <ANCHOR id="GST-VIDEO-MAX-PLANES:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstvideo.html#GST-VIDEO-MAX-PLANES:CAPS">
 <ANCHOR id="GST-VIDEO-MAX-COMPONENTS:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstvideo.html#GST-VIDEO-MAX-COMPONENTS:CAPS">
 <ANCHOR id="GstVideoFormatInfo" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstvideo.html#GstVideoFormatInfo">
-<ANCHOR id="GstVideoChromaSite" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstvideo.html#GstVideoChromaSite">
 <ANCHOR id="GstVideoFormatFlags" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstvideo.html#GstVideoFormatFlags">
+<ANCHOR id="GST-VIDEO-FORMAT-FLAG-YUV:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstvideo.html#GST-VIDEO-FORMAT-FLAG-YUV:CAPS">
+<ANCHOR id="GST-VIDEO-FORMAT-FLAG-RGB:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstvideo.html#GST-VIDEO-FORMAT-FLAG-RGB:CAPS">
+<ANCHOR id="GST-VIDEO-FORMAT-FLAG-GRAY:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstvideo.html#GST-VIDEO-FORMAT-FLAG-GRAY:CAPS">
+<ANCHOR id="GST-VIDEO-FORMAT-FLAG-ALPHA:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstvideo.html#GST-VIDEO-FORMAT-FLAG-ALPHA:CAPS">
+<ANCHOR id="GST-VIDEO-FORMAT-FLAG-LE:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstvideo.html#GST-VIDEO-FORMAT-FLAG-LE:CAPS">
+<ANCHOR id="GST-VIDEO-FORMAT-FLAG-PALETTE:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstvideo.html#GST-VIDEO-FORMAT-FLAG-PALETTE:CAPS">
+<ANCHOR id="GST-VIDEO-FORMAT-FLAG-COMPLEX:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstvideo.html#GST-VIDEO-FORMAT-FLAG-COMPLEX:CAPS">
+<ANCHOR id="GST-VIDEO-FORMAT-FLAG-UNPACK:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstvideo.html#GST-VIDEO-FORMAT-FLAG-UNPACK:CAPS">
+<ANCHOR id="GST-VIDEO-FORMAT-FLAG-TILED:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstvideo.html#GST-VIDEO-FORMAT-FLAG-TILED:CAPS">
 <ANCHOR id="GstVideoPackFlags" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstvideo.html#GstVideoPackFlags">
+<ANCHOR id="GST-VIDEO-PACK-FLAG-NONE:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstvideo.html#GST-VIDEO-PACK-FLAG-NONE:CAPS">
+<ANCHOR id="GST-VIDEO-PACK-FLAG-TRUNCATE-RANGE:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstvideo.html#GST-VIDEO-PACK-FLAG-TRUNCATE-RANGE:CAPS">
+<ANCHOR id="GST-VIDEO-PACK-FLAG-INTERLACED:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstvideo.html#GST-VIDEO-PACK-FLAG-INTERLACED:CAPS">
 <ANCHOR id="GST-VIDEO-SIZE-RANGE:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstvideo.html#GST-VIDEO-SIZE-RANGE:CAPS">
 <ANCHOR id="GST-VIDEO-FPS-RANGE:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstvideo.html#GST-VIDEO-FPS-RANGE:CAPS">
 <ANCHOR id="GST-VIDEO-FORMATS-ALL:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstvideo.html#GST-VIDEO-FORMATS-ALL:CAPS">
 <ANCHOR id="GstVideoColorRange" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstvideo.html#GstVideoColorRange">
+<ANCHOR id="GST-VIDEO-COLOR-RANGE-UNKNOWN:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstvideo.html#GST-VIDEO-COLOR-RANGE-UNKNOWN:CAPS">
+<ANCHOR id="GST-VIDEO-COLOR-RANGE-0-255:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstvideo.html#GST-VIDEO-COLOR-RANGE-0-255:CAPS">
+<ANCHOR id="GST-VIDEO-COLOR-RANGE-16-235:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstvideo.html#GST-VIDEO-COLOR-RANGE-16-235:CAPS">
 <ANCHOR id="GstVideoColorMatrix" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstvideo.html#GstVideoColorMatrix">
-<ANCHOR id="GstVideoTransferFunction" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstvideo.html#GstVideoTransferFunction">
+<ANCHOR id="GST-VIDEO-COLOR-MATRIX-UNKNOWN:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstvideo.html#GST-VIDEO-COLOR-MATRIX-UNKNOWN:CAPS">
+<ANCHOR id="GST-VIDEO-COLOR-MATRIX-RGB:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstvideo.html#GST-VIDEO-COLOR-MATRIX-RGB:CAPS">
+<ANCHOR id="GST-VIDEO-COLOR-MATRIX-FCC:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstvideo.html#GST-VIDEO-COLOR-MATRIX-FCC:CAPS">
+<ANCHOR id="GST-VIDEO-COLOR-MATRIX-BT709:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstvideo.html#GST-VIDEO-COLOR-MATRIX-BT709:CAPS">
+<ANCHOR id="GST-VIDEO-COLOR-MATRIX-BT601:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstvideo.html#GST-VIDEO-COLOR-MATRIX-BT601:CAPS">
+<ANCHOR id="GST-VIDEO-COLOR-MATRIX-SMPTE240M:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstvideo.html#GST-VIDEO-COLOR-MATRIX-SMPTE240M:CAPS">
+<ANCHOR id="GST-VIDEO-COLOR-MATRIX-BT2020:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstvideo.html#GST-VIDEO-COLOR-MATRIX-BT2020:CAPS">
 <ANCHOR id="GstVideoColorPrimaries" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstvideo.html#GstVideoColorPrimaries">
+<ANCHOR id="GST-VIDEO-COLOR-PRIMARIES-UNKNOWN:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstvideo.html#GST-VIDEO-COLOR-PRIMARIES-UNKNOWN:CAPS">
+<ANCHOR id="GST-VIDEO-COLOR-PRIMARIES-BT709:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstvideo.html#GST-VIDEO-COLOR-PRIMARIES-BT709:CAPS">
+<ANCHOR id="GST-VIDEO-COLOR-PRIMARIES-BT470M:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstvideo.html#GST-VIDEO-COLOR-PRIMARIES-BT470M:CAPS">
+<ANCHOR id="GST-VIDEO-COLOR-PRIMARIES-BT470BG:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstvideo.html#GST-VIDEO-COLOR-PRIMARIES-BT470BG:CAPS">
+<ANCHOR id="GST-VIDEO-COLOR-PRIMARIES-SMPTE170M:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstvideo.html#GST-VIDEO-COLOR-PRIMARIES-SMPTE170M:CAPS">
+<ANCHOR id="GST-VIDEO-COLOR-PRIMARIES-SMPTE240M:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstvideo.html#GST-VIDEO-COLOR-PRIMARIES-SMPTE240M:CAPS">
+<ANCHOR id="GST-VIDEO-COLOR-PRIMARIES-FILM:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstvideo.html#GST-VIDEO-COLOR-PRIMARIES-FILM:CAPS">
+<ANCHOR id="GST-VIDEO-COLOR-PRIMARIES-BT2020:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstvideo.html#GST-VIDEO-COLOR-PRIMARIES-BT2020:CAPS">
+<ANCHOR id="GstVideoTransferFunction" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstvideo.html#GstVideoTransferFunction">
+<ANCHOR id="GST-VIDEO-TRANSFER-UNKNOWN:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstvideo.html#GST-VIDEO-TRANSFER-UNKNOWN:CAPS">
+<ANCHOR id="GST-VIDEO-TRANSFER-GAMMA10:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstvideo.html#GST-VIDEO-TRANSFER-GAMMA10:CAPS">
+<ANCHOR id="GST-VIDEO-TRANSFER-GAMMA18:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstvideo.html#GST-VIDEO-TRANSFER-GAMMA18:CAPS">
+<ANCHOR id="GST-VIDEO-TRANSFER-GAMMA20:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstvideo.html#GST-VIDEO-TRANSFER-GAMMA20:CAPS">
+<ANCHOR id="GST-VIDEO-TRANSFER-GAMMA22:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstvideo.html#GST-VIDEO-TRANSFER-GAMMA22:CAPS">
+<ANCHOR id="GST-VIDEO-TRANSFER-BT709:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstvideo.html#GST-VIDEO-TRANSFER-BT709:CAPS">
+<ANCHOR id="GST-VIDEO-TRANSFER-SMPTE240M:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstvideo.html#GST-VIDEO-TRANSFER-SMPTE240M:CAPS">
+<ANCHOR id="GST-VIDEO-TRANSFER-SRGB:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstvideo.html#GST-VIDEO-TRANSFER-SRGB:CAPS">
+<ANCHOR id="GST-VIDEO-TRANSFER-GAMMA28:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstvideo.html#GST-VIDEO-TRANSFER-GAMMA28:CAPS">
+<ANCHOR id="GST-VIDEO-TRANSFER-LOG100:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstvideo.html#GST-VIDEO-TRANSFER-LOG100:CAPS">
+<ANCHOR id="GST-VIDEO-TRANSFER-LOG316:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstvideo.html#GST-VIDEO-TRANSFER-LOG316:CAPS">
+<ANCHOR id="GST-VIDEO-TRANSFER-BT2020-12:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstvideo.html#GST-VIDEO-TRANSFER-BT2020-12:CAPS">
 <ANCHOR id="GstVideoColorimetry" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstvideo.html#GstVideoColorimetry">
 <ANCHOR id="GstVideoInfo" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstvideo.html#GstVideoInfo">
 <ANCHOR id="GstVideoInterlaceMode" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstvideo.html#GstVideoInterlaceMode">
+<ANCHOR id="GST-VIDEO-INTERLACE-MODE-PROGRESSIVE:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstvideo.html#GST-VIDEO-INTERLACE-MODE-PROGRESSIVE:CAPS">
+<ANCHOR id="GST-VIDEO-INTERLACE-MODE-INTERLEAVED:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstvideo.html#GST-VIDEO-INTERLACE-MODE-INTERLEAVED:CAPS">
+<ANCHOR id="GST-VIDEO-INTERLACE-MODE-MIXED:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstvideo.html#GST-VIDEO-INTERLACE-MODE-MIXED:CAPS">
+<ANCHOR id="GST-VIDEO-INTERLACE-MODE-FIELDS:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstvideo.html#GST-VIDEO-INTERLACE-MODE-FIELDS:CAPS">
+<ANCHOR id="GstVideoMultiviewMode" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstvideo.html#GstVideoMultiviewMode">
+<ANCHOR id="GST-VIDEO-MULTIVIEW-MODE-NONE:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstvideo.html#GST-VIDEO-MULTIVIEW-MODE-NONE:CAPS">
+<ANCHOR id="GST-VIDEO-MULTIVIEW-MODE-MONO:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstvideo.html#GST-VIDEO-MULTIVIEW-MODE-MONO:CAPS">
+<ANCHOR id="GST-VIDEO-MULTIVIEW-MODE-LEFT:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstvideo.html#GST-VIDEO-MULTIVIEW-MODE-LEFT:CAPS">
+<ANCHOR id="GST-VIDEO-MULTIVIEW-MODE-RIGHT:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstvideo.html#GST-VIDEO-MULTIVIEW-MODE-RIGHT:CAPS">
+<ANCHOR id="GST-VIDEO-MULTIVIEW-MODE-SIDE-BY-SIDE:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstvideo.html#GST-VIDEO-MULTIVIEW-MODE-SIDE-BY-SIDE:CAPS">
+<ANCHOR id="GST-VIDEO-MULTIVIEW-MODE-SIDE-BY-SIDE-QUINCUNX:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstvideo.html#GST-VIDEO-MULTIVIEW-MODE-SIDE-BY-SIDE-QUINCUNX:CAPS">
+<ANCHOR id="GST-VIDEO-MULTIVIEW-MODE-COLUMN-INTERLEAVED:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstvideo.html#GST-VIDEO-MULTIVIEW-MODE-COLUMN-INTERLEAVED:CAPS">
+<ANCHOR id="GST-VIDEO-MULTIVIEW-MODE-ROW-INTERLEAVED:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstvideo.html#GST-VIDEO-MULTIVIEW-MODE-ROW-INTERLEAVED:CAPS">
+<ANCHOR id="GST-VIDEO-MULTIVIEW-MODE-TOP-BOTTOM:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstvideo.html#GST-VIDEO-MULTIVIEW-MODE-TOP-BOTTOM:CAPS">
+<ANCHOR id="GST-VIDEO-MULTIVIEW-MODE-CHECKERBOARD:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstvideo.html#GST-VIDEO-MULTIVIEW-MODE-CHECKERBOARD:CAPS">
+<ANCHOR id="GST-VIDEO-MULTIVIEW-MODE-FRAME-BY-FRAME:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstvideo.html#GST-VIDEO-MULTIVIEW-MODE-FRAME-BY-FRAME:CAPS">
+<ANCHOR id="GST-VIDEO-MULTIVIEW-MODE-MULTIVIEW-FRAME-BY-FRAME:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstvideo.html#GST-VIDEO-MULTIVIEW-MODE-MULTIVIEW-FRAME-BY-FRAME:CAPS">
+<ANCHOR id="GST-VIDEO-MULTIVIEW-MODE-SEPARATED:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstvideo.html#GST-VIDEO-MULTIVIEW-MODE-SEPARATED:CAPS">
+<ANCHOR id="GstVideoMultiviewFramePacking" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstvideo.html#GstVideoMultiviewFramePacking">
+<ANCHOR id="GST-VIDEO-MULTIVIEW-FRAME-PACKING-NONE:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstvideo.html#GST-VIDEO-MULTIVIEW-FRAME-PACKING-NONE:CAPS">
+<ANCHOR id="GST-VIDEO-MULTIVIEW-FRAME-PACKING-MONO:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstvideo.html#GST-VIDEO-MULTIVIEW-FRAME-PACKING-MONO:CAPS">
+<ANCHOR id="GST-VIDEO-MULTIVIEW-FRAME-PACKING-LEFT:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstvideo.html#GST-VIDEO-MULTIVIEW-FRAME-PACKING-LEFT:CAPS">
+<ANCHOR id="GST-VIDEO-MULTIVIEW-FRAME-PACKING-RIGHT:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstvideo.html#GST-VIDEO-MULTIVIEW-FRAME-PACKING-RIGHT:CAPS">
+<ANCHOR id="GST-VIDEO-MULTIVIEW-FRAME-PACKING-SIDE-BY-SIDE:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstvideo.html#GST-VIDEO-MULTIVIEW-FRAME-PACKING-SIDE-BY-SIDE:CAPS">
+<ANCHOR id="GST-VIDEO-MULTIVIEW-FRAME-PACKING-SIDE-BY-SIDE-QUINCUNX:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstvideo.html#GST-VIDEO-MULTIVIEW-FRAME-PACKING-SIDE-BY-SIDE-QUINCUNX:CAPS">
+<ANCHOR id="GST-VIDEO-MULTIVIEW-FRAME-PACKING-COLUMN-INTERLEAVED:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstvideo.html#GST-VIDEO-MULTIVIEW-FRAME-PACKING-COLUMN-INTERLEAVED:CAPS">
+<ANCHOR id="GST-VIDEO-MULTIVIEW-FRAME-PACKING-ROW-INTERLEAVED:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstvideo.html#GST-VIDEO-MULTIVIEW-FRAME-PACKING-ROW-INTERLEAVED:CAPS">
+<ANCHOR id="GST-VIDEO-MULTIVIEW-FRAME-PACKING-TOP-BOTTOM:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstvideo.html#GST-VIDEO-MULTIVIEW-FRAME-PACKING-TOP-BOTTOM:CAPS">
+<ANCHOR id="GST-VIDEO-MULTIVIEW-FRAME-PACKING-CHECKERBOARD:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstvideo.html#GST-VIDEO-MULTIVIEW-FRAME-PACKING-CHECKERBOARD:CAPS">
+<ANCHOR id="GstVideoMultiviewFlags" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstvideo.html#GstVideoMultiviewFlags">
+<ANCHOR id="GST-VIDEO-MULTIVIEW-FLAGS-NONE:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstvideo.html#GST-VIDEO-MULTIVIEW-FLAGS-NONE:CAPS">
+<ANCHOR id="GST-VIDEO-MULTIVIEW-FLAGS-RIGHT-VIEW-FIRST:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstvideo.html#GST-VIDEO-MULTIVIEW-FLAGS-RIGHT-VIEW-FIRST:CAPS">
+<ANCHOR id="GST-VIDEO-MULTIVIEW-FLAGS-LEFT-FLIPPED:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstvideo.html#GST-VIDEO-MULTIVIEW-FLAGS-LEFT-FLIPPED:CAPS">
+<ANCHOR id="GST-VIDEO-MULTIVIEW-FLAGS-LEFT-FLOPPED:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstvideo.html#GST-VIDEO-MULTIVIEW-FLAGS-LEFT-FLOPPED:CAPS">
+<ANCHOR id="GST-VIDEO-MULTIVIEW-FLAGS-RIGHT-FLIPPED:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstvideo.html#GST-VIDEO-MULTIVIEW-FLAGS-RIGHT-FLIPPED:CAPS">
+<ANCHOR id="GST-VIDEO-MULTIVIEW-FLAGS-RIGHT-FLOPPED:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstvideo.html#GST-VIDEO-MULTIVIEW-FLAGS-RIGHT-FLOPPED:CAPS">
+<ANCHOR id="GST-VIDEO-MULTIVIEW-FLAGS-HALF-ASPECT:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstvideo.html#GST-VIDEO-MULTIVIEW-FLAGS-HALF-ASPECT:CAPS">
+<ANCHOR id="GST-VIDEO-MULTIVIEW-FLAGS-MIXED-MONO:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstvideo.html#GST-VIDEO-MULTIVIEW-FLAGS-MIXED-MONO:CAPS">
 <ANCHOR id="GstVideoFlags" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstvideo.html#GstVideoFlags">
+<ANCHOR id="GST-VIDEO-FLAG-NONE:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstvideo.html#GST-VIDEO-FLAG-NONE:CAPS">
+<ANCHOR id="GST-VIDEO-FLAG-VARIABLE-FPS:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstvideo.html#GST-VIDEO-FLAG-VARIABLE-FPS:CAPS">
+<ANCHOR id="GST-VIDEO-FLAG-PREMULTIPLIED-ALPHA:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstvideo.html#GST-VIDEO-FLAG-PREMULTIPLIED-ALPHA:CAPS">
 <ANCHOR id="GstVideoFrame" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstvideo.html#GstVideoFrame">
 <ANCHOR id="GstVideoFrameFlags" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstvideo.html#GstVideoFrameFlags">
+<ANCHOR id="GST-VIDEO-FRAME-FLAG-NONE:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstvideo.html#GST-VIDEO-FRAME-FLAG-NONE:CAPS">
+<ANCHOR id="GST-VIDEO-FRAME-FLAG-INTERLACED:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstvideo.html#GST-VIDEO-FRAME-FLAG-INTERLACED:CAPS">
+<ANCHOR id="GST-VIDEO-FRAME-FLAG-TFF:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstvideo.html#GST-VIDEO-FRAME-FLAG-TFF:CAPS">
+<ANCHOR id="GST-VIDEO-FRAME-FLAG-RFF:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstvideo.html#GST-VIDEO-FRAME-FLAG-RFF:CAPS">
+<ANCHOR id="GST-VIDEO-FRAME-FLAG-ONEFIELD:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstvideo.html#GST-VIDEO-FRAME-FLAG-ONEFIELD:CAPS">
+<ANCHOR id="GST-VIDEO-FRAME-FLAG-MULTIPLE-VIEW:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstvideo.html#GST-VIDEO-FRAME-FLAG-MULTIPLE-VIEW:CAPS">
+<ANCHOR id="GST-VIDEO-FRAME-FLAG-FIRST-IN-BUNDLE:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstvideo.html#GST-VIDEO-FRAME-FLAG-FIRST-IN-BUNDLE:CAPS">
 <ANCHOR id="GstVideoBufferFlags" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstvideo.html#GstVideoBufferFlags">
+<ANCHOR id="GST-VIDEO-BUFFER-FLAG-INTERLACED:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstvideo.html#GST-VIDEO-BUFFER-FLAG-INTERLACED:CAPS">
+<ANCHOR id="GST-VIDEO-BUFFER-FLAG-TFF:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstvideo.html#GST-VIDEO-BUFFER-FLAG-TFF:CAPS">
+<ANCHOR id="GST-VIDEO-BUFFER-FLAG-RFF:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstvideo.html#GST-VIDEO-BUFFER-FLAG-RFF:CAPS">
+<ANCHOR id="GST-VIDEO-BUFFER-FLAG-ONEFIELD:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstvideo.html#GST-VIDEO-BUFFER-FLAG-ONEFIELD:CAPS">
+<ANCHOR id="GST-VIDEO-BUFFER-FLAG-MULTIPLE-VIEW:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstvideo.html#GST-VIDEO-BUFFER-FLAG-MULTIPLE-VIEW:CAPS">
+<ANCHOR id="GST-VIDEO-BUFFER-FLAG-FIRST-IN-BUNDLE:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstvideo.html#GST-VIDEO-BUFFER-FLAG-FIRST-IN-BUNDLE:CAPS">
+<ANCHOR id="GST-VIDEO-BUFFER-FLAG-LAST:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstvideo.html#GST-VIDEO-BUFFER-FLAG-LAST:CAPS">
 <ANCHOR id="GstVideoTileType" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstvideo.html#GstVideoTileType">
+<ANCHOR id="GST-VIDEO-TILE-TYPE-INDEXED:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstvideo.html#GST-VIDEO-TILE-TYPE-INDEXED:CAPS">
 <ANCHOR id="GstVideoTileMode" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstvideo.html#GstVideoTileMode">
+<ANCHOR id="GST-VIDEO-TILE-MODE-UNKNOWN:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstvideo.html#GST-VIDEO-TILE-MODE-UNKNOWN:CAPS">
+<ANCHOR id="GST-VIDEO-TILE-MODE-ZFLIPZ-2X2:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstvideo.html#GST-VIDEO-TILE-MODE-ZFLIPZ-2X2:CAPS">
+<ANCHOR id="GstVideoConverter" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstvideo.html#GstVideoConverter">
 <ANCHOR id="gst-plugins-base-libs-gstvideometa" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstvideometa.html">
 <ANCHOR id="gst-plugins-base-libs-gstvideometa.functions" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstvideometa.html#gst-plugins-base-libs-gstvideometa.functions">
 <ANCHOR id="gst-plugins-base-libs-gstvideometa.other" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstvideometa.html#gst-plugins-base-libs-gstvideometa.other">
@@ -1802,6 +2559,9 @@
 <ANCHOR id="GST-VIDEO-OVERLAY-COMPOSITION-BLEND-FORMATS:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstvideooverlaycomposition.html#GST-VIDEO-OVERLAY-COMPOSITION-BLEND-FORMATS:CAPS">
 <ANCHOR id="GstVideoOverlayCompositionMeta" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstvideooverlaycomposition.html#GstVideoOverlayCompositionMeta">
 <ANCHOR id="GstVideoOverlayFormatFlags" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstvideooverlaycomposition.html#GstVideoOverlayFormatFlags">
+<ANCHOR id="GST-VIDEO-OVERLAY-FORMAT-FLAG-NONE:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstvideooverlaycomposition.html#GST-VIDEO-OVERLAY-FORMAT-FLAG-NONE:CAPS">
+<ANCHOR id="GST-VIDEO-OVERLAY-FORMAT-FLAG-PREMULTIPLIED-ALPHA:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstvideooverlaycomposition.html#GST-VIDEO-OVERLAY-FORMAT-FLAG-PREMULTIPLIED-ALPHA:CAPS">
+<ANCHOR id="GST-VIDEO-OVERLAY-FORMAT-FLAG-GLOBAL-ALPHA:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstvideooverlaycomposition.html#GST-VIDEO-OVERLAY-FORMAT-FLAG-GLOBAL-ALPHA:CAPS">
 <ANCHOR id="GstVideoOverlayRectangle" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstvideooverlaycomposition.html#GstVideoOverlayRectangle">
 <ANCHOR id="gst-plugins-base-libs-gstvideofilter" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstvideofilter.html">
 <ANCHOR id="GstVideoFilter" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstvideofilter.html#GstVideoFilter">
@@ -1813,6 +2573,99 @@
 <ANCHOR id="gst-plugins-base-libs-gstvideofilter.other_details" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstvideofilter.html#gst-plugins-base-libs-gstvideofilter.other_details">
 <ANCHOR id="GstVideoFilter-struct" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstvideofilter.html#GstVideoFilter-struct">
 <ANCHOR id="GstVideoFilterClass" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstvideofilter.html#GstVideoFilterClass">
+<ANCHOR id="gst-plugins-base-libs-GstVideoDither" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-GstVideoDither.html">
+<ANCHOR id="gst-plugins-base-libs-GstVideoDither.functions" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-GstVideoDither.html#gst-plugins-base-libs-GstVideoDither.functions">
+<ANCHOR id="gst-plugins-base-libs-GstVideoDither.other" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-GstVideoDither.html#gst-plugins-base-libs-GstVideoDither.other">
+<ANCHOR id="gst-plugins-base-libs-GstVideoDither.includes" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-GstVideoDither.html#gst-plugins-base-libs-GstVideoDither.includes">
+<ANCHOR id="gst-plugins-base-libs-GstVideoDither.description" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-GstVideoDither.html#gst-plugins-base-libs-GstVideoDither.description">
+<ANCHOR id="gst-plugins-base-libs-GstVideoDither.functions_details" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-GstVideoDither.html#gst-plugins-base-libs-GstVideoDither.functions_details">
+<ANCHOR id="gst-video-dither-free" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-GstVideoDither.html#gst-video-dither-free">
+<ANCHOR id="gst-video-dither-line" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-GstVideoDither.html#gst-video-dither-line">
+<ANCHOR id="gst-video-dither-new" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-GstVideoDither.html#gst-video-dither-new">
+<ANCHOR id="gst-plugins-base-libs-GstVideoDither.other_details" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-GstVideoDither.html#gst-plugins-base-libs-GstVideoDither.other_details">
+<ANCHOR id="GstVideoDither" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-GstVideoDither.html#GstVideoDither">
+<ANCHOR id="GstVideoDitherFlags" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-GstVideoDither.html#GstVideoDitherFlags">
+<ANCHOR id="GST-VIDEO-DITHER-FLAG-NONE:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-GstVideoDither.html#GST-VIDEO-DITHER-FLAG-NONE:CAPS">
+<ANCHOR id="GST-VIDEO-DITHER-FLAG-INTERLACED:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-GstVideoDither.html#GST-VIDEO-DITHER-FLAG-INTERLACED:CAPS">
+<ANCHOR id="GST-VIDEO-DITHER-FLAG-QUANTIZE:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-GstVideoDither.html#GST-VIDEO-DITHER-FLAG-QUANTIZE:CAPS">
+<ANCHOR id="GstVideoDitherMethod" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-GstVideoDither.html#GstVideoDitherMethod">
+<ANCHOR id="GST-VIDEO-DITHER-NONE:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-GstVideoDither.html#GST-VIDEO-DITHER-NONE:CAPS">
+<ANCHOR id="GST-VIDEO-DITHER-VERTERR:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-GstVideoDither.html#GST-VIDEO-DITHER-VERTERR:CAPS">
+<ANCHOR id="GST-VIDEO-DITHER-FLOYD-STEINBERG:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-GstVideoDither.html#GST-VIDEO-DITHER-FLOYD-STEINBERG:CAPS">
+<ANCHOR id="GST-VIDEO-DITHER-SIERRA-LITE:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-GstVideoDither.html#GST-VIDEO-DITHER-SIERRA-LITE:CAPS">
+<ANCHOR id="GST-VIDEO-DITHER-BAYER:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-GstVideoDither.html#GST-VIDEO-DITHER-BAYER:CAPS">
+<ANCHOR id="gst-plugins-base-libs-GstVideoChroma" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-GstVideoChroma.html">
+<ANCHOR id="gst-plugins-base-libs-GstVideoChroma.functions" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-GstVideoChroma.html#gst-plugins-base-libs-GstVideoChroma.functions">
+<ANCHOR id="gst-plugins-base-libs-GstVideoChroma.other" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-GstVideoChroma.html#gst-plugins-base-libs-GstVideoChroma.other">
+<ANCHOR id="gst-plugins-base-libs-GstVideoChroma.includes" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-GstVideoChroma.html#gst-plugins-base-libs-GstVideoChroma.includes">
+<ANCHOR id="gst-plugins-base-libs-GstVideoChroma.description" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-GstVideoChroma.html#gst-plugins-base-libs-GstVideoChroma.description">
+<ANCHOR id="gst-plugins-base-libs-GstVideoChroma.functions_details" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-GstVideoChroma.html#gst-plugins-base-libs-GstVideoChroma.functions_details">
+<ANCHOR id="gst-video-chroma-from-string" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-GstVideoChroma.html#gst-video-chroma-from-string">
+<ANCHOR id="gst-video-chroma-to-string" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-GstVideoChroma.html#gst-video-chroma-to-string">
+<ANCHOR id="gst-video-chroma-resample" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-GstVideoChroma.html#gst-video-chroma-resample">
+<ANCHOR id="gst-video-chroma-resample-free" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-GstVideoChroma.html#gst-video-chroma-resample-free">
+<ANCHOR id="gst-video-chroma-resample-get-info" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-GstVideoChroma.html#gst-video-chroma-resample-get-info">
+<ANCHOR id="gst-video-chroma-resample-new" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-GstVideoChroma.html#gst-video-chroma-resample-new">
+<ANCHOR id="gst-plugins-base-libs-GstVideoChroma.other_details" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-GstVideoChroma.html#gst-plugins-base-libs-GstVideoChroma.other_details">
+<ANCHOR id="GstVideoChromaSite" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-GstVideoChroma.html#GstVideoChromaSite">
+<ANCHOR id="GST-VIDEO-CHROMA-SITE-UNKNOWN:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-GstVideoChroma.html#GST-VIDEO-CHROMA-SITE-UNKNOWN:CAPS">
+<ANCHOR id="GST-VIDEO-CHROMA-SITE-NONE:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-GstVideoChroma.html#GST-VIDEO-CHROMA-SITE-NONE:CAPS">
+<ANCHOR id="GST-VIDEO-CHROMA-SITE-H-COSITED:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-GstVideoChroma.html#GST-VIDEO-CHROMA-SITE-H-COSITED:CAPS">
+<ANCHOR id="GST-VIDEO-CHROMA-SITE-V-COSITED:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-GstVideoChroma.html#GST-VIDEO-CHROMA-SITE-V-COSITED:CAPS">
+<ANCHOR id="GST-VIDEO-CHROMA-SITE-ALT-LINE:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-GstVideoChroma.html#GST-VIDEO-CHROMA-SITE-ALT-LINE:CAPS">
+<ANCHOR id="GST-VIDEO-CHROMA-SITE-COSITED:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-GstVideoChroma.html#GST-VIDEO-CHROMA-SITE-COSITED:CAPS">
+<ANCHOR id="GST-VIDEO-CHROMA-SITE-JPEG:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-GstVideoChroma.html#GST-VIDEO-CHROMA-SITE-JPEG:CAPS">
+<ANCHOR id="GST-VIDEO-CHROMA-SITE-MPEG2:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-GstVideoChroma.html#GST-VIDEO-CHROMA-SITE-MPEG2:CAPS">
+<ANCHOR id="GST-VIDEO-CHROMA-SITE-DV:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-GstVideoChroma.html#GST-VIDEO-CHROMA-SITE-DV:CAPS">
+<ANCHOR id="GstVideoChromaFlags" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-GstVideoChroma.html#GstVideoChromaFlags">
+<ANCHOR id="GST-VIDEO-CHROMA-FLAG-NONE:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-GstVideoChroma.html#GST-VIDEO-CHROMA-FLAG-NONE:CAPS">
+<ANCHOR id="GST-VIDEO-CHROMA-FLAG-INTERLACED:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-GstVideoChroma.html#GST-VIDEO-CHROMA-FLAG-INTERLACED:CAPS">
+<ANCHOR id="GstVideoChromaMethod" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-GstVideoChroma.html#GstVideoChromaMethod">
+<ANCHOR id="GST-VIDEO-CHROMA-METHOD-NEAREST:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-GstVideoChroma.html#GST-VIDEO-CHROMA-METHOD-NEAREST:CAPS">
+<ANCHOR id="GST-VIDEO-CHROMA-METHOD-LINEAR:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-GstVideoChroma.html#GST-VIDEO-CHROMA-METHOD-LINEAR:CAPS">
+<ANCHOR id="GstVideoChromaResample" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-GstVideoChroma.html#GstVideoChromaResample">
+<ANCHOR id="gst-plugins-base-libs-GstVideoResampler" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-GstVideoResampler.html">
+<ANCHOR id="gst-plugins-base-libs-GstVideoResampler.functions" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-GstVideoResampler.html#gst-plugins-base-libs-GstVideoResampler.functions">
+<ANCHOR id="gst-plugins-base-libs-GstVideoResampler.other" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-GstVideoResampler.html#gst-plugins-base-libs-GstVideoResampler.other">
+<ANCHOR id="gst-plugins-base-libs-GstVideoResampler.includes" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-GstVideoResampler.html#gst-plugins-base-libs-GstVideoResampler.includes">
+<ANCHOR id="gst-plugins-base-libs-GstVideoResampler.description" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-GstVideoResampler.html#gst-plugins-base-libs-GstVideoResampler.description">
+<ANCHOR id="gst-plugins-base-libs-GstVideoResampler.functions_details" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-GstVideoResampler.html#gst-plugins-base-libs-GstVideoResampler.functions_details">
+<ANCHOR id="gst-video-resampler-clear" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-GstVideoResampler.html#gst-video-resampler-clear">
+<ANCHOR id="gst-video-resampler-init" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-GstVideoResampler.html#gst-video-resampler-init">
+<ANCHOR id="gst-plugins-base-libs-GstVideoResampler.other_details" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-GstVideoResampler.html#gst-plugins-base-libs-GstVideoResampler.other_details">
+<ANCHOR id="GstVideoResampler" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-GstVideoResampler.html#GstVideoResampler">
+<ANCHOR id="GstVideoResamplerFlags" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-GstVideoResampler.html#GstVideoResamplerFlags">
+<ANCHOR id="GST-VIDEO-RESAMPLER-FLAG-NONE:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-GstVideoResampler.html#GST-VIDEO-RESAMPLER-FLAG-NONE:CAPS">
+<ANCHOR id="GstVideoResamplerMethod" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-GstVideoResampler.html#GstVideoResamplerMethod">
+<ANCHOR id="GST-VIDEO-RESAMPLER-METHOD-NEAREST:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-GstVideoResampler.html#GST-VIDEO-RESAMPLER-METHOD-NEAREST:CAPS">
+<ANCHOR id="GST-VIDEO-RESAMPLER-METHOD-LINEAR:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-GstVideoResampler.html#GST-VIDEO-RESAMPLER-METHOD-LINEAR:CAPS">
+<ANCHOR id="GST-VIDEO-RESAMPLER-METHOD-CUBIC:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-GstVideoResampler.html#GST-VIDEO-RESAMPLER-METHOD-CUBIC:CAPS">
+<ANCHOR id="GST-VIDEO-RESAMPLER-METHOD-SINC:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-GstVideoResampler.html#GST-VIDEO-RESAMPLER-METHOD-SINC:CAPS">
+<ANCHOR id="GST-VIDEO-RESAMPLER-METHOD-LANCZOS:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-GstVideoResampler.html#GST-VIDEO-RESAMPLER-METHOD-LANCZOS:CAPS">
+<ANCHOR id="GST-VIDEO-RESAMPLER-OPT-CUBIC-B:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-GstVideoResampler.html#GST-VIDEO-RESAMPLER-OPT-CUBIC-B:CAPS">
+<ANCHOR id="GST-VIDEO-RESAMPLER-OPT-CUBIC-C:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-GstVideoResampler.html#GST-VIDEO-RESAMPLER-OPT-CUBIC-C:CAPS">
+<ANCHOR id="GST-VIDEO-RESAMPLER-OPT-ENVELOPE:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-GstVideoResampler.html#GST-VIDEO-RESAMPLER-OPT-ENVELOPE:CAPS">
+<ANCHOR id="GST-VIDEO-RESAMPLER-OPT-MAX-TAPS:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-GstVideoResampler.html#GST-VIDEO-RESAMPLER-OPT-MAX-TAPS:CAPS">
+<ANCHOR id="GST-VIDEO-RESAMPLER-OPT-SHARPEN:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-GstVideoResampler.html#GST-VIDEO-RESAMPLER-OPT-SHARPEN:CAPS">
+<ANCHOR id="GST-VIDEO-RESAMPLER-OPT-SHARPNESS:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-GstVideoResampler.html#GST-VIDEO-RESAMPLER-OPT-SHARPNESS:CAPS">
+<ANCHOR id="gst-plugins-base-libs-GstVideoScaler" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-GstVideoScaler.html">
+<ANCHOR id="gst-plugins-base-libs-GstVideoScaler.functions" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-GstVideoScaler.html#gst-plugins-base-libs-GstVideoScaler.functions">
+<ANCHOR id="gst-plugins-base-libs-GstVideoScaler.other" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-GstVideoScaler.html#gst-plugins-base-libs-GstVideoScaler.other">
+<ANCHOR id="gst-plugins-base-libs-GstVideoScaler.includes" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-GstVideoScaler.html#gst-plugins-base-libs-GstVideoScaler.includes">
+<ANCHOR id="gst-plugins-base-libs-GstVideoScaler.description" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-GstVideoScaler.html#gst-plugins-base-libs-GstVideoScaler.description">
+<ANCHOR id="gst-plugins-base-libs-GstVideoScaler.functions_details" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-GstVideoScaler.html#gst-plugins-base-libs-GstVideoScaler.functions_details">
+<ANCHOR id="gst-video-scaler-2d" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-GstVideoScaler.html#gst-video-scaler-2d">
+<ANCHOR id="gst-video-scaler-combine-packed-YUV" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-GstVideoScaler.html#gst-video-scaler-combine-packed-YUV">
+<ANCHOR id="gst-video-scaler-free" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-GstVideoScaler.html#gst-video-scaler-free">
+<ANCHOR id="gst-video-scaler-get-coeff" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-GstVideoScaler.html#gst-video-scaler-get-coeff">
+<ANCHOR id="gst-video-scaler-horizontal" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-GstVideoScaler.html#gst-video-scaler-horizontal">
+<ANCHOR id="gst-video-scaler-new" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-GstVideoScaler.html#gst-video-scaler-new">
+<ANCHOR id="gst-video-scaler-vertical" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-GstVideoScaler.html#gst-video-scaler-vertical">
+<ANCHOR id="gst-plugins-base-libs-GstVideoScaler.other_details" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-GstVideoScaler.html#gst-plugins-base-libs-GstVideoScaler.other_details">
+<ANCHOR id="GstVideoScaler" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-GstVideoScaler.html#GstVideoScaler">
+<ANCHOR id="GstVideoScalerFlags" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-GstVideoScaler.html#GstVideoScalerFlags">
+<ANCHOR id="GST-VIDEO-SCALER-FLAG-NONE:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-GstVideoScaler.html#GST-VIDEO-SCALER-FLAG-NONE:CAPS">
+<ANCHOR id="GST-VIDEO-SCALER-FLAG-INTERLACED:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-GstVideoScaler.html#GST-VIDEO-SCALER-FLAG-INTERLACED:CAPS">
 <ANCHOR id="gst-plugins-base-libs-gstvideosink" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstvideosink.html">
 <ANCHOR id="gst-plugins-base-libs-gstvideosink.functions" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstvideosink.html#gst-plugins-base-libs-gstvideosink.functions">
 <ANCHOR id="gst-plugins-base-libs-gstvideosink.properties" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstvideosink.html#gst-plugins-base-libs-gstvideosink.properties">
@@ -1850,6 +2703,8 @@
 <ANCHOR id="GstColorBalance-struct" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstcolorbalance.html#GstColorBalance-struct">
 <ANCHOR id="GstColorBalanceInterface" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstcolorbalance.html#GstColorBalanceInterface">
 <ANCHOR id="GstColorBalanceType" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstcolorbalance.html#GstColorBalanceType">
+<ANCHOR id="GST-COLOR-BALANCE-HARDWARE:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstcolorbalance.html#GST-COLOR-BALANCE-HARDWARE:CAPS">
+<ANCHOR id="GST-COLOR-BALANCE-SOFTWARE:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstcolorbalance.html#GST-COLOR-BALANCE-SOFTWARE:CAPS">
 <ANCHOR id="gst-plugins-base-libs-gstcolorbalance.signal-details" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstcolorbalance.html#gst-plugins-base-libs-gstcolorbalance.signal-details">
 <ANCHOR id="GstColorBalance-value-changed" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstcolorbalance.html#GstColorBalance-value-changed">
 <ANCHOR id="gst-plugins-base-libs-gstcolorbalancechannel" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstcolorbalancechannel.html">
@@ -1943,6 +2798,7 @@
 <ANCHOR id="gst-video-decoder-get-needs-format" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-GstVideoDecoder.html#gst-video-decoder-get-needs-format">
 <ANCHOR id="gst-video-decoder-set-needs-format" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-GstVideoDecoder.html#gst-video-decoder-set-needs-format">
 <ANCHOR id="gst-video-decoder-merge-tags" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-GstVideoDecoder.html#gst-video-decoder-merge-tags">
+<ANCHOR id="gst-video-decoder-proxy-getcaps" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-GstVideoDecoder.html#gst-video-decoder-proxy-getcaps">
 <ANCHOR id="gst-plugins-base-libs-GstVideoDecoder.other_details" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-GstVideoDecoder.html#gst-plugins-base-libs-GstVideoDecoder.other_details">
 <ANCHOR id="GST-VIDEO-DECODER-FLOW-NEED-DATA:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-GstVideoDecoder.html#GST-VIDEO-DECODER-FLOW-NEED-DATA:CAPS">
 <ANCHOR id="GST-VIDEO-DECODER-MAX-ERRORS:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-GstVideoDecoder.html#GST-VIDEO-DECODER-MAX-ERRORS:CAPS">
@@ -2028,6 +2884,10 @@
 <ANCHOR id="gst-plugins-base-libs-gstvideoutils.other_details" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstvideoutils.html#gst-plugins-base-libs-gstvideoutils.other_details">
 <ANCHOR id="GstVideoCodecFrame" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstvideoutils.html#GstVideoCodecFrame">
 <ANCHOR id="GstVideoCodecFrameFlags" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstvideoutils.html#GstVideoCodecFrameFlags">
+<ANCHOR id="GST-VIDEO-CODEC-FRAME-FLAG-DECODE-ONLY:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstvideoutils.html#GST-VIDEO-CODEC-FRAME-FLAG-DECODE-ONLY:CAPS">
+<ANCHOR id="GST-VIDEO-CODEC-FRAME-FLAG-SYNC-POINT:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstvideoutils.html#GST-VIDEO-CODEC-FRAME-FLAG-SYNC-POINT:CAPS">
+<ANCHOR id="GST-VIDEO-CODEC-FRAME-FLAG-FORCE-KEYFRAME:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstvideoutils.html#GST-VIDEO-CODEC-FRAME-FLAG-FORCE-KEYFRAME:CAPS">
+<ANCHOR id="GST-VIDEO-CODEC-FRAME-FLAG-FORCE-KEYFRAME-HEADERS:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstvideoutils.html#GST-VIDEO-CODEC-FRAME-FLAG-FORCE-KEYFRAME-HEADERS:CAPS">
 <ANCHOR id="GstVideoCodecState" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstvideoutils.html#GstVideoCodecState">
 <ANCHOR id="gst-plugins-base-libs-gstnavigation" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstnavigation.html">
 <ANCHOR id="gst-plugins-base-libs-gstnavigation.functions" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstnavigation.html#gst-plugins-base-libs-gstnavigation.functions">
@@ -2048,9 +2908,11 @@
 <ANCHOR id="gst-navigation-message-get-type" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstnavigation.html#gst-navigation-message-get-type">
 <ANCHOR id="gst-navigation-message-new-angles-changed" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstnavigation.html#gst-navigation-message-new-angles-changed">
 <ANCHOR id="gst-navigation-message-new-commands-changed" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstnavigation.html#gst-navigation-message-new-commands-changed">
+<ANCHOR id="gst-navigation-message-new-event" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstnavigation.html#gst-navigation-message-new-event">
 <ANCHOR id="gst-navigation-message-new-mouse-over" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstnavigation.html#gst-navigation-message-new-mouse-over">
-<ANCHOR id="gst-navigation-message-parse-mouse-over" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstnavigation.html#gst-navigation-message-parse-mouse-over">
 <ANCHOR id="gst-navigation-message-parse-angles-changed" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstnavigation.html#gst-navigation-message-parse-angles-changed">
+<ANCHOR id="gst-navigation-message-parse-event" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstnavigation.html#gst-navigation-message-parse-event">
+<ANCHOR id="gst-navigation-message-parse-mouse-over" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstnavigation.html#gst-navigation-message-parse-mouse-over">
 <ANCHOR id="gst-navigation-query-new-angles" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstnavigation.html#gst-navigation-query-new-angles">
 <ANCHOR id="gst-navigation-query-get-type" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstnavigation.html#gst-navigation-query-get-type">
 <ANCHOR id="gst-navigation-query-new-commands" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstnavigation.html#gst-navigation-query-new-commands">
@@ -2064,9 +2926,39 @@
 <ANCHOR id="GstNavigation-struct" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstnavigation.html#GstNavigation-struct">
 <ANCHOR id="GstNavigationInterface" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstnavigation.html#GstNavigationInterface">
 <ANCHOR id="GstNavigationCommand" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstnavigation.html#GstNavigationCommand">
+<ANCHOR id="GST-NAVIGATION-COMMAND-INVALID:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstnavigation.html#GST-NAVIGATION-COMMAND-INVALID:CAPS">
+<ANCHOR id="GST-NAVIGATION-COMMAND-MENU1:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstnavigation.html#GST-NAVIGATION-COMMAND-MENU1:CAPS">
+<ANCHOR id="GST-NAVIGATION-COMMAND-MENU2:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstnavigation.html#GST-NAVIGATION-COMMAND-MENU2:CAPS">
+<ANCHOR id="GST-NAVIGATION-COMMAND-MENU3:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstnavigation.html#GST-NAVIGATION-COMMAND-MENU3:CAPS">
+<ANCHOR id="GST-NAVIGATION-COMMAND-MENU4:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstnavigation.html#GST-NAVIGATION-COMMAND-MENU4:CAPS">
+<ANCHOR id="GST-NAVIGATION-COMMAND-MENU5:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstnavigation.html#GST-NAVIGATION-COMMAND-MENU5:CAPS">
+<ANCHOR id="GST-NAVIGATION-COMMAND-MENU6:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstnavigation.html#GST-NAVIGATION-COMMAND-MENU6:CAPS">
+<ANCHOR id="GST-NAVIGATION-COMMAND-MENU7:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstnavigation.html#GST-NAVIGATION-COMMAND-MENU7:CAPS">
+<ANCHOR id="GST-NAVIGATION-COMMAND-LEFT:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstnavigation.html#GST-NAVIGATION-COMMAND-LEFT:CAPS">
+<ANCHOR id="GST-NAVIGATION-COMMAND-RIGHT:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstnavigation.html#GST-NAVIGATION-COMMAND-RIGHT:CAPS">
+<ANCHOR id="GST-NAVIGATION-COMMAND-UP:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstnavigation.html#GST-NAVIGATION-COMMAND-UP:CAPS">
+<ANCHOR id="GST-NAVIGATION-COMMAND-DOWN:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstnavigation.html#GST-NAVIGATION-COMMAND-DOWN:CAPS">
+<ANCHOR id="GST-NAVIGATION-COMMAND-ACTIVATE:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstnavigation.html#GST-NAVIGATION-COMMAND-ACTIVATE:CAPS">
+<ANCHOR id="GST-NAVIGATION-COMMAND-PREV-ANGLE:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstnavigation.html#GST-NAVIGATION-COMMAND-PREV-ANGLE:CAPS">
+<ANCHOR id="GST-NAVIGATION-COMMAND-NEXT-ANGLE:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstnavigation.html#GST-NAVIGATION-COMMAND-NEXT-ANGLE:CAPS">
 <ANCHOR id="GstNavigationEventType" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstnavigation.html#GstNavigationEventType">
+<ANCHOR id="GST-NAVIGATION-EVENT-INVALID:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstnavigation.html#GST-NAVIGATION-EVENT-INVALID:CAPS">
+<ANCHOR id="GST-NAVIGATION-EVENT-KEY-PRESS:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstnavigation.html#GST-NAVIGATION-EVENT-KEY-PRESS:CAPS">
+<ANCHOR id="GST-NAVIGATION-EVENT-KEY-RELEASE:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstnavigation.html#GST-NAVIGATION-EVENT-KEY-RELEASE:CAPS">
+<ANCHOR id="GST-NAVIGATION-EVENT-MOUSE-BUTTON-PRESS:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstnavigation.html#GST-NAVIGATION-EVENT-MOUSE-BUTTON-PRESS:CAPS">
+<ANCHOR id="GST-NAVIGATION-EVENT-MOUSE-BUTTON-RELEASE:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstnavigation.html#GST-NAVIGATION-EVENT-MOUSE-BUTTON-RELEASE:CAPS">
+<ANCHOR id="GST-NAVIGATION-EVENT-MOUSE-MOVE:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstnavigation.html#GST-NAVIGATION-EVENT-MOUSE-MOVE:CAPS">
+<ANCHOR id="GST-NAVIGATION-EVENT-COMMAND:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstnavigation.html#GST-NAVIGATION-EVENT-COMMAND:CAPS">
 <ANCHOR id="GstNavigationMessageType" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstnavigation.html#GstNavigationMessageType">
+<ANCHOR id="GST-NAVIGATION-MESSAGE-INVALID:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstnavigation.html#GST-NAVIGATION-MESSAGE-INVALID:CAPS">
+<ANCHOR id="GST-NAVIGATION-MESSAGE-MOUSE-OVER:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstnavigation.html#GST-NAVIGATION-MESSAGE-MOUSE-OVER:CAPS">
+<ANCHOR id="GST-NAVIGATION-MESSAGE-COMMANDS-CHANGED:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstnavigation.html#GST-NAVIGATION-MESSAGE-COMMANDS-CHANGED:CAPS">
+<ANCHOR id="GST-NAVIGATION-MESSAGE-ANGLES-CHANGED:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstnavigation.html#GST-NAVIGATION-MESSAGE-ANGLES-CHANGED:CAPS">
+<ANCHOR id="GST-NAVIGATION-MESSAGE-EVENT:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstnavigation.html#GST-NAVIGATION-MESSAGE-EVENT:CAPS">
 <ANCHOR id="GstNavigationQueryType" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstnavigation.html#GstNavigationQueryType">
+<ANCHOR id="GST-NAVIGATION-QUERY-INVALID:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstnavigation.html#GST-NAVIGATION-QUERY-INVALID:CAPS">
+<ANCHOR id="GST-NAVIGATION-QUERY-COMMANDS:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstnavigation.html#GST-NAVIGATION-QUERY-COMMANDS:CAPS">
+<ANCHOR id="GST-NAVIGATION-QUERY-ANGLES:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstnavigation.html#GST-NAVIGATION-QUERY-ANGLES:CAPS">
 <ANCHOR id="GST-NAVIGATION-COMMAND-DVD-ANGLE-MENU:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstnavigation.html#GST-NAVIGATION-COMMAND-DVD-ANGLE-MENU:CAPS">
 <ANCHOR id="GST-NAVIGATION-COMMAND-DVD-AUDIO-MENU:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstnavigation.html#GST-NAVIGATION-COMMAND-DVD-AUDIO-MENU:CAPS">
 <ANCHOR id="GST-NAVIGATION-COMMAND-DVD-CHAPTER-MENU:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstnavigation.html#GST-NAVIGATION-COMMAND-DVD-CHAPTER-MENU:CAPS">
@@ -2080,7 +2972,11 @@
 <ANCHOR id="annotation-glossterm-element-type" href="gst-plugins-base-libs-1.0/annotation-glossary.html#annotation-glossterm-element-type">
 <ANCHOR id="annotation-glossterm-nullable" href="gst-plugins-base-libs-1.0/annotation-glossary.html#annotation-glossterm-nullable">
 <ANCHOR id="annotation-glossterm-out" href="gst-plugins-base-libs-1.0/annotation-glossary.html#annotation-glossterm-out">
+<ANCHOR id="annotation-glossterm-rename-to" href="gst-plugins-base-libs-1.0/annotation-glossary.html#annotation-glossterm-rename-to">
 <ANCHOR id="annotation-glossterm-scope async" href="gst-plugins-base-libs-1.0/annotation-glossary.html#annotation-glossterm-scope async">
+<ANCHOR id="annotation-glossterm-scope call" href="gst-plugins-base-libs-1.0/annotation-glossary.html#annotation-glossterm-scope call">
+<ANCHOR id="annotation-glossterm-skip" href="gst-plugins-base-libs-1.0/annotation-glossary.html#annotation-glossterm-skip">
+<ANCHOR id="annotation-glossterm-transfer floating" href="gst-plugins-base-libs-1.0/annotation-glossary.html#annotation-glossterm-transfer floating">
 <ANCHOR id="annotation-glossterm-transfer full" href="gst-plugins-base-libs-1.0/annotation-glossary.html#annotation-glossterm-transfer full">
 <ANCHOR id="annotation-glossterm-transfer none" href="gst-plugins-base-libs-1.0/annotation-glossary.html#annotation-glossterm-transfer none">
 <ANCHOR id="annotation-glossterm-type" href="gst-plugins-base-libs-1.0/annotation-glossary.html#annotation-glossterm-type">
diff --git a/docs/libs/html/style.css b/docs/libs/html/style.css
index c141ddd..3675420 100644
--- a/docs/libs/html/style.css
+++ b/docs/libs/html/style.css
@@ -60,7 +60,7 @@
 div.informaltable table
 {
   border-collapse: separate;
-  border-spacing: 1em 0.5em;
+  border-spacing: 1em 0.3em;
   border: none;
 }
 
@@ -148,6 +148,8 @@
 h4
 {
   color: #555753;
+  margin-top: 1em;
+  margin-bottom: 1em;
 }
 
 hr
@@ -166,17 +168,16 @@
   padding-bottom: 0.25em;
 }
 
-dl.toc > dd > dl > dt
+dl.toc > dt
 {
   padding-top: 0.25em;
   padding-bottom: 0.25em;
+  font-weight: bold;
 }
 
-dl.toc > dt
+dl.toc > dl
 {
-  padding-top: 1em;
   padding-bottom: 0.5em;
-  font-weight: bold;
 }
 
 .parameter
@@ -346,7 +347,9 @@
 }
 
 @media screen {
-  sup a.footnote
+  /* these have a <sup> as a first child, but since there are no parent selectors
+   * we can't use that. */
+  a.footnote
   {
     position: relative;
     top: 0em ! important;
diff --git a/docs/plugins/Makefile.am b/docs/plugins/Makefile.am
index f6e467d..254b9a9 100644
--- a/docs/plugins/Makefile.am
+++ b/docs/plugins/Makefile.am
@@ -80,6 +80,7 @@
 	$(top_srcdir)/gst/audiorate/gstaudiorate.h \
 	$(top_srcdir)/gst/audioresample/gstaudioresample.h \
 	$(top_srcdir)/gst/tcp/gstmultisocketsink.h \
+	$(top_srcdir)/gst/tcp/gstsocketsrc.h \
 	$(top_srcdir)/gst/tcp/gsttcpclientsrc.h \
 	$(top_srcdir)/gst/tcp/gsttcpclientsink.h \
 	$(top_srcdir)/gst/tcp/gsttcpserversrc.h \
@@ -108,9 +109,6 @@
 GTKDOC_CFLAGS = $(GST_BASE_CFLAGS) -I$(top_builddir) -I$(top_builddir)/gst-libs
 GTKDOC_LIBS = $(GST_BASE_LIBS)
 
-GTKDOC_CC=$(LIBTOOL) --tag=CC --mode=compile $(CC)
-GTKDOC_LD=$(LIBTOOL) --tag=CC --mode=link $(CC)
-
 # If you need to override some of the declarations, place them in this file
 DOC_OVERRIDES = $(DOC_MODULE)-overrides.txt
 
diff --git a/docs/plugins/Makefile.in b/docs/plugins/Makefile.in
index 84d2568..4c8e70b 100644
--- a/docs/plugins/Makefile.in
+++ b/docs/plugins/Makefile.in
@@ -1,7 +1,7 @@
-# Makefile.in generated by automake 1.14.1 from Makefile.am.
+# Makefile.in generated by automake 1.15 from Makefile.am.
 # @configure_input@
 
-# Copyright (C) 1994-2013 Free Software Foundation, Inc.
+# 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,
@@ -31,7 +31,17 @@
 # This is an include file specifically tuned for building documentation
 # for GStreamer plug-ins
 VPATH = @srcdir@
-am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)'
+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 \
       ?) ;; \
@@ -95,9 +105,6 @@
 build_triplet = @build@
 host_triplet = @host@
 target_triplet = @target@
-DIST_COMMON = $(top_srcdir)/common/upload-doc.mak \
-	$(top_srcdir)/common/gtk-doc-plugins.mak $(srcdir)/Makefile.in \
-	$(srcdir)/Makefile.am
 subdir = docs/plugins
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
 am__aclocal_m4_deps = $(top_srcdir)/common/m4/as-ac-expand.m4 \
@@ -119,7 +126,6 @@
 	$(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-x11.m4 \
 	$(top_srcdir)/common/m4/gst.m4 \
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
@@ -136,6 +142,7 @@
 	$(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
 mkinstalldirs = $(install_sh) -d
 CONFIG_HEADER = $(top_builddir)/config.h
 CONFIG_CLEAN_FILES =
@@ -160,6 +167,9 @@
     *) (install-info --version) >/dev/null 2>&1;; \
   esac
 am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+am__DIST_COMMON = $(srcdir)/Makefile.in \
+	$(top_srcdir)/common/gtk-doc-plugins.mak \
+	$(top_srcdir)/common/upload-doc.mak
 DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
 ACLOCAL = @ACLOCAL@
 ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@
@@ -220,6 +230,8 @@
 GIO_CFLAGS = @GIO_CFLAGS@
 GIO_LDFLAGS = @GIO_LDFLAGS@
 GIO_LIBS = @GIO_LIBS@
+GIO_UNIX_2_0_CFLAGS = @GIO_UNIX_2_0_CFLAGS@
+GIO_UNIX_2_0_LIBS = @GIO_UNIX_2_0_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
@@ -249,6 +261,8 @@
 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_OPTION_CFLAGS = @GST_OPTION_CFLAGS@
 GST_OPTION_CXXFLAGS = @GST_OPTION_CXXFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
@@ -276,7 +290,6 @@
 GTK_X11_CFLAGS = @GTK_X11_CFLAGS@
 GTK_X11_LIBS = @GTK_X11_LIBS@
 HAVE_CDPARANOIA = @HAVE_CDPARANOIA@
-HAVE_X = @HAVE_X@
 HAVE_XSHM = @HAVE_XSHM@
 HAVE_ZLIB = @HAVE_ZLIB@
 HTML_DIR = @HTML_DIR@
@@ -291,6 +304,7 @@
 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@
@@ -380,13 +394,12 @@
 XGETTEXT = @XGETTEXT@
 XGETTEXT_015 = @XGETTEXT_015@
 XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
-XMKMF = @XMKMF@
+XSHM_CFLAGS = @XSHM_CFLAGS@
 XSHM_LIBS = @XSHM_LIBS@
+XVIDEO_CFLAGS = @XVIDEO_CFLAGS@
 XVIDEO_LIBS = @XVIDEO_LIBS@
 X_CFLAGS = @X_CFLAGS@
-X_EXTRA_LIBS = @X_EXTRA_LIBS@
 X_LIBS = @X_LIBS@
-X_PRE_LIBS = @X_PRE_LIBS@
 ZLIB_CFLAGS = @ZLIB_CFLAGS@
 ZLIB_LIBS = @ZLIB_LIBS@
 abs_builddir = @abs_builddir@
@@ -439,6 +452,7 @@
 psdir = @psdir@
 pyexecdir = @pyexecdir@
 pythondir = @pythondir@
+runstatedir = @runstatedir@
 sbindir = @sbindir@
 sharedstatedir = @sharedstatedir@
 srcdir = @srcdir@
@@ -534,6 +548,7 @@
 	$(top_srcdir)/gst/audiorate/gstaudiorate.h \
 	$(top_srcdir)/gst/audioresample/gstaudioresample.h \
 	$(top_srcdir)/gst/tcp/gstmultisocketsink.h \
+	$(top_srcdir)/gst/tcp/gstsocketsrc.h \
 	$(top_srcdir)/gst/tcp/gsttcpclientsrc.h \
 	$(top_srcdir)/gst/tcp/gsttcpclientsink.h \
 	$(top_srcdir)/gst/tcp/gsttcpserversrc.h \
@@ -562,11 +577,15 @@
 # contains GtkObjects/GObjects and you want to document signals and properties.
 GTKDOC_CFLAGS = $(GST_BASE_CFLAGS) -I$(top_builddir) -I$(top_builddir)/gst-libs
 GTKDOC_LIBS = $(GST_BASE_LIBS)
-GTKDOC_CC = $(LIBTOOL) --tag=CC --mode=compile $(CC)
-GTKDOC_LD = $(LIBTOOL) --tag=CC --mode=link $(CC)
 
 # If you need to override some of the declarations, place them in this file
 DOC_OVERRIDES = $(DOC_MODULE)-overrides.txt
+@GTK_DOC_USE_LIBTOOL_FALSE@GTKDOC_CC = $(CC) $(INCLUDES) $(GTKDOC_DEPS_CFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+@GTK_DOC_USE_LIBTOOL_TRUE@GTKDOC_CC = $(LIBTOOL) --tag=CC --mode=compile $(CC) $(INCLUDES) $(GTKDOC_DEPS_CFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+@GTK_DOC_USE_LIBTOOL_FALSE@GTKDOC_LD = $(CC) $(GTKDOC_DEPS_LIBS) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS)
+@GTK_DOC_USE_LIBTOOL_TRUE@GTKDOC_LD = $(LIBTOOL) --tag=CC --mode=link $(CC) $(GTKDOC_DEPS_LIBS) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS)
+@GTK_DOC_USE_LIBTOOL_FALSE@GTKDOC_RUN = 
+@GTK_DOC_USE_LIBTOOL_TRUE@GTKDOC_RUN = $(LIBTOOL) --mode=execute
 
 # We set GPATH here; this gives us semantics for GNU make
 # which are more like other make's VPATH, when it comes to
@@ -596,11 +615,9 @@
 # maintainers and result is commited to git
 DOC_STAMPS = \
 	scan-build.stamp		\
-	tmpl-build.stamp		\
 	sgml-build.stamp		\
 	html-build.stamp		\
 	scan.stamp			\
-	tmpl.stamp			\
 	sgml.stamp			\
 	html.stamp
 
@@ -669,7 +686,6 @@
 	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu docs/plugins/Makefile'; \
 	$(am__cd) $(top_srcdir) && \
 	  $(AUTOMAKE) --gnu docs/plugins/Makefile
-.PRECIOUS: Makefile
 Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
 	@case '$?' in \
 	  *config.status*) \
@@ -678,7 +694,7 @@
 	    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/upload-doc.mak $(top_srcdir)/common/gtk-doc-plugins.mak:
+$(top_srcdir)/common/upload-doc.mak $(top_srcdir)/common/gtk-doc-plugins.mak $(am__empty):
 
 $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
 	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
@@ -849,6 +865,8 @@
 	mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \
 	ps ps-am tags-am uninstall uninstall-am uninstall-local
 
+.PRECIOUS: Makefile
+
 html: html-build.stamp
 
 upload: $(FORMATS)
@@ -936,7 +954,7 @@
 @ENABLE_GTK_DOC_TRUE@	    scanobj_options="--verbose"; \
 @ENABLE_GTK_DOC_TRUE@	fi; \
 @ENABLE_GTK_DOC_TRUE@	$(INSPECT_ENVIRONMENT) 					\
-@ENABLE_GTK_DOC_TRUE@	CC="$(GTKDOC_CC)" LD="$(GTKDOC_LD)"				\
+@ENABLE_GTK_DOC_TRUE@	CC="$(GTKDOC_CC)" LD="$(GTKDOC_LD)" RUN="$(GTKDOC_RUN)"	\
 @ENABLE_GTK_DOC_TRUE@	CFLAGS="$(GTKDOC_CFLAGS) $(CFLAGS) $(WARNING_CFLAGS)"	\
 @ENABLE_GTK_DOC_TRUE@	LDFLAGS="$(GTKDOC_LIBS) $(LDFLAGS)"				\
 @ENABLE_GTK_DOC_TRUE@	$(GST_DOC_SCANOBJ) $$scanobj_options --type-init-func="gst_init(NULL,NULL)"	\
@@ -975,29 +993,9 @@
 @ENABLE_GTK_DOC_TRUE@	    --ignore-headers="$(IGNORE_HFILES)";			\
 @ENABLE_GTK_DOC_TRUE@	touch scan-build.stamp
 
-#### update templates; done on every build ####
-
-# in a non-srcdir build, we need to copy files from the previous step
-# and the files from previous runs of this step
-@ENABLE_GTK_DOC_TRUE@tmpl-build.stamp: $(DOC_MODULE)-decl.txt $(SCANOBJ_FILES) $(DOC_MODULE)-sections.txt $(DOC_OVERRIDES)
-@ENABLE_GTK_DOC_TRUE@	@echo '  DOC   Rebuilding template files'
-@ENABLE_GTK_DOC_TRUE@	@if test x"$(srcdir)" != x. ; then				\
-@ENABLE_GTK_DOC_TRUE@	    for f in $(SCANOBJ_FILES) $(SCAN_FILES);			\
-@ENABLE_GTK_DOC_TRUE@	    do								\
-@ENABLE_GTK_DOC_TRUE@	        if test -e $(srcdir)/$$f; then cp -u $(srcdir)/$$f . ; fi;	\
-@ENABLE_GTK_DOC_TRUE@	    done;							\
-@ENABLE_GTK_DOC_TRUE@	fi
-@ENABLE_GTK_DOC_TRUE@	@gtkdoc-mktmpl --module=$(DOC_MODULE)
-@ENABLE_GTK_DOC_TRUE@	@$(PYTHON) \
-@ENABLE_GTK_DOC_TRUE@		$(top_srcdir)/common/mangle-tmpl.py $(srcdir)/$(INSPECT_DIR) tmpl
-@ENABLE_GTK_DOC_TRUE@	@touch tmpl-build.stamp
-
-@ENABLE_GTK_DOC_TRUE@tmpl.stamp: tmpl-build.stamp
-@ENABLE_GTK_DOC_TRUE@	@true
-
 #### xml ####
 
-@ENABLE_GTK_DOC_TRUE@sgml-build.stamp: tmpl.stamp scan-build.stamp $(CFILE_GLOB) $(top_srcdir)/common/plugins.xsl $(expand_content_files)
+@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 \
@@ -1013,6 +1011,7 @@
 @ENABLE_GTK_DOC_TRUE@		--output-format=xml \
 @ENABLE_GTK_DOC_TRUE@		--ignore-files="$(IGNORE_HFILES) $(IGNORE_CFILES)" \
 @ENABLE_GTK_DOC_TRUE@		$(MKDB_OPTIONS)
+@ENABLE_GTK_DOC_TRUE@	@$(PYTHON) $(top_srcdir)/common/mangle-db.py xml
 @ENABLE_GTK_DOC_TRUE@	@cp ../version.entities xml
 @ENABLE_GTK_DOC_TRUE@	@touch sgml-build.stamp
 
diff --git a/docs/plugins/gst-plugins-base-plugins-docs.sgml b/docs/plugins/gst-plugins-base-plugins-docs.sgml
index 6ae5478..812f73c 100644
--- a/docs/plugins/gst-plugins-base-plugins-docs.sgml
+++ b/docs/plugins/gst-plugins-base-plugins-docs.sgml
@@ -18,10 +18,10 @@
   <chapter>
     <title>gst-plugins-base Elements</title>
     <xi:include href="xml/element-adder.xml" />
-    <xi:include href="xml/element-appsrc.xml" />
-    <xi:include href="xml/element-appsink.xml" />
     <xi:include href="xml/element-alsasink.xml" />
     <xi:include href="xml/element-alsasrc.xml" />
+    <xi:include href="xml/element-appsink.xml" />
+    <xi:include href="xml/element-appsrc.xml" />
     <xi:include href="xml/element-audioconvert.xml" />
     <xi:include href="xml/element-audiorate.xml" />
     <xi:include href="xml/element-audioresample.xml" />
@@ -30,23 +30,30 @@
     <xi:include href="xml/element-clockoverlay.xml" />
     <xi:include href="xml/element-decodebin.xml" />
     <xi:include href="xml/element-encodebin.xml" />
-    <xi:include href="xml/element-videoconvert.xml" />
     <xi:include href="xml/element-giosink.xml" />
     <xi:include href="xml/element-giosrc.xml" />
     <xi:include href="xml/element-giostreamsink.xml" />
     <xi:include href="xml/element-giostreamsrc.xml" />
     <xi:include href="xml/element-multifdsink.xml" />
     <xi:include href="xml/element-multisocketsink.xml" />
+    <xi:include href="xml/element-oggaviparse.xml" />
     <xi:include href="xml/element-oggdemux.xml" />
     <xi:include href="xml/element-oggmux.xml" />
+    <xi:include href="xml/element-oggparse.xml" />
+    <xi:include href="xml/element-ogmaudioparse.xml" />
+    <xi:include href="xml/element-ogmtextparse.xml" />
+    <xi:include href="xml/element-ogmvideoparse.xml" />
     <xi:include href="xml/element-playbin.xml" />
     <xi:include href="xml/element-playsink.xml" />
+    <xi:include href="xml/element-socketsrc.xml" />
+    <xi:include href="xml/element-ssaparse.xml" />
     <xi:include href="xml/element-streamsynchronizer.xml" />
+    <xi:include href="xml/element-subparse.xml" />
     <xi:include href="xml/element-subtitleoverlay.xml" />
-    <xi:include href="xml/element-tcpclientsrc.xml" />
     <xi:include href="xml/element-tcpclientsink.xml" />
-    <xi:include href="xml/element-tcpserversrc.xml" />
+    <xi:include href="xml/element-tcpclientsrc.xml" />
     <xi:include href="xml/element-tcpserversink.xml" />
+    <xi:include href="xml/element-tcpserversrc.xml" />
     <xi:include href="xml/element-textoverlay.xml" />
     <xi:include href="xml/element-textrender.xml" />
     <xi:include href="xml/element-theoradec.xml" />
@@ -54,6 +61,7 @@
     <xi:include href="xml/element-theoraparse.xml" />
     <xi:include href="xml/element-timeoverlay.xml" />
     <xi:include href="xml/element-uridecodebin.xml" />
+    <xi:include href="xml/element-videoconvert.xml" />
     <xi:include href="xml/element-videorate.xml" />
     <xi:include href="xml/element-videoscale.xml" />
     <xi:include href="xml/element-videotestsrc.xml" />
@@ -77,8 +85,8 @@
     <xi:include href="xml/plugin-audiotestsrc.xml" />
     <xi:include href="xml/plugin-cdparanoia.xml" />
     <xi:include href="xml/plugin-encoding.xml" />
-    <xi:include href="xml/plugin-videoconvert.xml" />
     <xi:include href="xml/plugin-gio.xml" />
+    <xi:include href="xml/plugin-ivorbisdec.xml" />
     <xi:include href="xml/plugin-libvisual.xml" />
     <xi:include href="xml/plugin-ogg.xml" />
     <xi:include href="xml/plugin-pango.xml" />
@@ -87,6 +95,7 @@
     <xi:include href="xml/plugin-tcp.xml" />
     <xi:include href="xml/plugin-theora.xml" />
     <xi:include href="xml/plugin-typefindfunctions.xml" />
+    <xi:include href="xml/plugin-videoconvert.xml" />
     <xi:include href="xml/plugin-videorate.xml" />
     <xi:include href="xml/plugin-videoscale.xml" />
     <xi:include href="xml/plugin-videotestsrc.xml" />
diff --git a/docs/plugins/gst-plugins-base-plugins-sections.txt b/docs/plugins/gst-plugins-base-plugins-sections.txt
index 858dd0b..d351ec1 100644
--- a/docs/plugins/gst-plugins-base-plugins-sections.txt
+++ b/docs/plugins/gst-plugins-base-plugins-sections.txt
@@ -3,12 +3,13 @@
 <TITLE>adder</TITLE>
 GstAdder
 <SUBSECTION Standard>
+GstAdderClass
 GST_ADDER
 GST_IS_ADDER
-GST_TYPE_ADDER
 GST_ADDER_CLASS
 GST_IS_ADDER_CLASS
-GST_ADDER_GET_CLASS
+GST_TYPE_ADDER
+<SUBSECTION Private>
 gst_adder_get_type
 GstAdderClass
 GstAdderFormat
@@ -17,36 +18,41 @@
 </SECTION>
 
 <SECTION>
-<FILE>element-appsrc</FILE>
-<TITLE>appsrc</TITLE>
-GstAppSrc
+<FILE>element-alsasink</FILE>
+<TITLE>alsasink</TITLE>
+GstAlsaSink
 <SUBSECTION Standard>
-gst_app_src_set_caps
-gst_app_src_get_caps
-gst_app_src_set_size
-gst_app_src_get_size
-gst_app_src_set_stream_type
-gst_app_src_get_stream_type
-gst_app_src_set_max_bytes
-gst_app_src_get_max_bytes
-gst_app_src_set_latency
-gst_app_src_get_latency
-gst_app_src_set_emit_signals
-gst_app_src_get_emit_signals
-gst_app_src_push_buffer
-gst_app_src_end_of_stream
-GstAppSrcCallbacks
-gst_app_src_set_callbacks
+GstAlsaSinkClass
+GST_ALSA_SINK
+GST_ALSA_SINK_CAST
+GST_IS_ALSA_SINK
+GST_ALSA_SINK_CLASS
+GST_IS_ALSA_SINK_CLASS
+GST_TYPE_ALSA_SINK
+GST_ALSA_SINK_GET_LOCK
+GST_ALSA_SINK_LOCK
+GST_ALSA_SINK_UNLOCK
+<SUBSECTION Private>
+gst_alsa_sink_get_type
+</SECTION>
 
-GstAppSrcClass
-GstAppSrcPrivate
-GstAppStreamType
-GST_APP_SRC
-GST_IS_APP_SRC
-GST_TYPE_APP_SRC
-gst_app_src_get_type
-GST_APP_SRC_CLASS
-GST_IS_APP_SRC_CLASS
+<SECTION>
+<FILE>element-alsasrc</FILE>
+<TITLE>alsasrc</TITLE>
+GstAlsaSrc
+<SUBSECTION Standard>
+GstAlsaSrcClass
+GST_ALSA_SRC
+GST_ALSA_SRC_CAST
+GST_IS_ALSA_SRC
+GST_ALSA_SRC_CLASS
+GST_IS_ALSA_SRC_CLASS
+GST_TYPE_ALSA_SRC
+GST_ALSA_SRC_GET_LOCK
+GST_ALSA_SRC_LOCK
+GST_ALSA_SRC_UNLOCK
+<SUBSECTION Private>
+gst_alsa_src_get_type
 </SECTION>
 
 <SECTION>
@@ -71,60 +77,44 @@
 GstAppSinkCallbacks
 GST_APP_SINK
 GST_IS_APP_SINK
-GST_TYPE_APP_SINK
-gst_app_sink_get_type
 GST_APP_SINK_CLASS
 GST_IS_APP_SINK_CLASS
+GST_TYPE_APP_SINK
+<SUBSECTION Private>
+gst_app_sink_get_type
 </SECTION>
 
 <SECTION>
-<FILE>element-alsamixer</FILE>
-<TITLE>alsamixer</TITLE>
-GstAlsaMixerElement
+<FILE>element-appsrc</FILE>
+<TITLE>appsrc</TITLE>
+GstAppSrc
 <SUBSECTION Standard>
-GstAlsaMixerElementClass
-GST_ALSA_MIXER_ELEMENT
-GST_IS_ALSA_MIXER_ELEMENT
-GST_TYPE_ALSA_MIXER_ELEMENT
-gst_alsa_mixer_element_get_type
-GST_ALSA_MIXER_ELEMENT_CLASS
-GST_IS_ALSA_MIXER_ELEMENT_CLASS
-</SECTION>
-
-<SECTION>
-<FILE>element-alsasink</FILE>
-<TITLE>alsasink</TITLE>
-GstAlsaSink
-<SUBSECTION Standard>
-GstAlsaSinkClass
-GST_ALSA_SINK
-GST_ALSA_SINK_CAST
-GST_IS_ALSA_SINK
-GST_TYPE_ALSA_SINK
-GST_ALSA_SINK_CLASS
-GST_IS_ALSA_SINK_CLASS
-GST_ALSA_SINK_GET_LOCK
-GST_ALSA_SINK_LOCK
-GST_ALSA_SINK_UNLOCK
-gst_alsasink_get_type
-</SECTION>
-
-<SECTION>
-<FILE>element-alsasrc</FILE>
-<TITLE>alsasrc</TITLE>
-GstAlsaSrc
-<SUBSECTION Standard>
-GstAlsaSrcClass
-GST_ALSA_SRC
-GST_IS_ALSA_SRC
-GST_TYPE_ALSA_SRC
-GST_ALSA_SRC_CLASS
-GST_IS_ALSA_SRC_CLASS
-GST_ALSA_SRC_CAST
-GST_ALSA_SRC_GET_LOCK
-GST_ALSA_SRC_LOCK
-GST_ALSA_SRC_UNLOCK
-gst_alsasrc_get_type
+gst_app_src_set_caps
+gst_app_src_get_caps
+gst_app_src_set_size
+gst_app_src_get_size
+gst_app_src_set_stream_type
+gst_app_src_get_stream_type
+gst_app_src_set_max_bytes
+gst_app_src_get_max_bytes
+gst_app_src_set_latency
+gst_app_src_get_latency
+gst_app_src_set_emit_signals
+gst_app_src_get_emit_signals
+gst_app_src_push_buffer
+gst_app_src_end_of_stream
+GstAppSrcCallbacks
+gst_app_src_set_callbacks
+GstAppSrcClass
+GstAppSrcPrivate
+GstAppStreamType
+GST_APP_SRC
+GST_IS_APP_SRC
+GST_APP_SRC_CLASS
+GST_IS_APP_SRC_CLASS
+GST_TYPE_APP_SRC
+<SUBSECTION Private>
+gst_app_src_get_type
 </SECTION>
 
 <SECTION>
@@ -134,12 +124,12 @@
 GstAudioConvertDithering
 GstAudioConvertNoiseShaping
 <SUBSECTION Standard>
+GstAudioConvertClass
 GST_AUDIO_CONVERT
-GST_AUDIO_CONVERT_CLASS
 GST_IS_AUDIO_CONVERT
+GST_AUDIO_CONVERT_CLASS
 GST_IS_AUDIO_CONVERT_CLASS
 GST_TYPE_AUDIO_CONVERT
-GstAudioConvertClass
 AudioConvertCtx
 AudioConvertFmt
 AudioConvertMix
@@ -151,6 +141,8 @@
 audio_convert_convert
 audio_convert_get_sizes
 audio_convert_prepare_context
+<SUBSECTION Private>
+gst_audio_convert_get_type
 </SECTION>
 
 <SECTION>
@@ -158,13 +150,14 @@
 <TITLE>audiorate</TITLE>
 GstAudioRate
 <SUBSECTION Standard>
+GstAudioRateClass
 GST_AUDIO_RATE
 GST_IS_AUDIO_RATE
-GST_TYPE_AUDIO_RATE
-gst_audio_rate_get_type
 GST_AUDIO_RATE_CLASS
 GST_IS_AUDIO_RATE_CLASS
-GstAudioRateClass
+GST_TYPE_AUDIO_RATE
+<SUBSECTION Private>
+gst_audio_rate_get_type
 </SECTION>
 
 <SECTION>
@@ -172,13 +165,14 @@
 <TITLE>audioresample</TITLE>
 GstAudioResample
 <SUBSECTION Standard>
+GstAudioResampleClass
 GST_AUDIO_RESAMPLE
 GST_IS_AUDIO_RESAMPLE
-GST_TYPE_AUDIO_RESAMPLE
-gst_audio_resample_get_type
 GST_AUDIO_RESAMPLE_CLASS
 GST_IS_AUDIO_RESAMPLE_CLASS
-GstAudioResampleClass
+GST_TYPE_AUDIO_RESAMPLE
+<SUBSECTION Private>
+gst_audio_resample_get_type
 </SECTION>
 
 <SECTION>
@@ -187,19 +181,14 @@
 GstAudioTestSrc
 GstAudioTestSrcWave
 <SUBSECTION Standard>
+GstAudioTestSrcClass
 GST_AUDIO_TEST_SRC
-GST_AUDIO_TEST_SRC_CLASS
 GST_IS_AUDIO_TEST_SRC
+GST_AUDIO_TEST_SRC_CLASS
 GST_IS_AUDIO_TEST_SRC_CLASS
 GST_TYPE_AUDIO_TEST_SRC
-GstAudioTestSrcClass
-GstAudioTestSrcFormat
+<SUBSECTION Private>
 gst_audio_test_src_get_type
-GstPinkNoise
-PINK_MAX_RANDOM_ROWS
-PINK_RANDOM_BITS
-PINK_RANDOM_SHIFT
-ProcessFunc
 </SECTION>
 
 <SECTION>
@@ -209,14 +198,12 @@
 <SUBSECTION Standard>
 GstCdParanoiaSrcClass
 GST_CD_PARANOIA_SRC
-GST_CD_PARANOIA_SRC_CLASS
-GST_CD_PARANOIA_SRC_GET_CLASS
 GST_IS_CD_PARANOIA_SRC
+GST_CD_PARANOIA_SRC_CLASS
 GST_IS_CD_PARANOIA_SRC_CLASS
 GST_TYPE_CD_PARANOIA_SRC
+<SUBSECTION Private>
 gst_cd_paranoia_src_get_type
-size16
-size32
 </SECTION>
 
 <SECTION>
@@ -224,12 +211,13 @@
 <TITLE>clockoverlay</TITLE>
 GstClockOverlay
 <SUBSECTION Standard>
+GstClockOverlayClass
 GST_CLOCK_OVERLAY
-GST_CLOCK_OVERLAY_CLASS
 GST_IS_CLOCK_OVERLAY
+GST_CLOCK_OVERLAY_CLASS
 GST_IS_CLOCK_OVERLAY_CLASS
 GST_TYPE_CLOCK_OVERLAY
-GstClockOverlayClass
+<SUBSECTION Private>
 gst_clock_overlay_get_type
 </SECTION>
 
@@ -238,42 +226,33 @@
 <TITLE>decodebin</TITLE>
 GstDecodeBin
 <SUBSECTION Standard>
-</SECTION>
-
-<SECTION>
-<FILE>element-decodebin</FILE>
-<TITLE>decodebin</TITLE>
-GstDecodeBin
-<SUBSECTION Standard>
+GstDecodeBinClass
+GST_DECODE_BIN
+GST_DECODE_BIN_CAST
+GST_IS_DECODE_BIN
+GST_DECODE_BIN_CLASS
+GST_IS_DECODE_BIN_CLASS
+GST_TYPE_DECODE_BIN
+<SUBSECTION Private>
+gst_decode_bin_get_type
 </SECTION>
 
 <SECTION>
 <FILE>element-encodebin</FILE>
 <TITLE>encodebin</TITLE>
 GstEncodeBin
+GstEncodeBinFlags
 <SUBSECTION Standard>
+GstEncodeBinClass
 GST_ENCODE_BIN
-GST_ENCODE_BIN_CLASS
 GST_IS_ENCODE_BIN
+GST_ENCODE_BIN_CLASS
 GST_IS_ENCODE_BIN_CLASS
 GST_TYPE_ENCODE_BIN
-GstEncodeBinClass
+<SUBSECTION Private>
 gst_encode_bin_get_type
 </SECTION>
 
-
-
-<SECTION>
-<FILE>element-videoconvert</FILE>
-<TITLE>videoconvert</TITLE>
-GstVideoConvert
-<SUBSECTION Standard>
-GST_VIDEO_CONVERT
-GST_VIDEO_CONVERT_CLASS
-GST_IS_VIDEO_CONVERT_CLASS
-GstVideoConvertClass
-</SECTION>
-
 <SECTION>
 <FILE>element-giosink</FILE>
 <TITLE>giosink</TITLE>
@@ -281,10 +260,11 @@
 <SUBSECTION Standard>
 GstGioSinkClass
 GST_GIO_SINK
-GST_GIO_SINK_CLASS
 GST_IS_GIO_SINK
+GST_GIO_SINK_CLASS
 GST_IS_GIO_SINK_CLASS
 GST_TYPE_GIO_SINK
+<SUBSECTION Private>
 gst_gio_sink_get_type
 </SECTION>
 
@@ -295,10 +275,11 @@
 <SUBSECTION Standard>
 GstGioSrcClass
 GST_GIO_SRC
-GST_GIO_SRC_CLASS
 GST_IS_GIO_SRC
+GST_GIO_SRC_CLASS
 GST_IS_GIO_SRC_CLASS
 GST_TYPE_GIO_SRC
+<SUBSECTION Private>
 gst_gio_src_get_type
 </SECTION>
 
@@ -309,10 +290,11 @@
 <SUBSECTION Standard>
 GstGioStreamSinkClass
 GST_GIO_STREAM_SINK
-GST_GIO_STREAM_SINK_CLASS
 GST_IS_GIO_STREAM_SINK
+GST_GIO_STREAM_SINK_CLASS
 GST_IS_GIO_STREAM_SINK_CLASS
 GST_TYPE_GIO_STREAM_SINK
+<SUBSECTION Private>
 gst_gio_stream_sink_get_type
 </SECTION>
 
@@ -323,10 +305,11 @@
 <SUBSECTION Standard>
 GstGioStreamSrcClass
 GST_GIO_STREAM_SRC
-GST_GIO_STREAM_SRC_CLASS
 GST_IS_GIO_STREAM_SRC
+GST_GIO_STREAM_SRC_CLASS
 GST_IS_GIO_STREAM_SRC_CLASS
 GST_TYPE_GIO_STREAM_SRC
+<SUBSECTION Private>
 gst_gio_stream_src_get_type
 </SECTION>
 
@@ -340,28 +323,15 @@
 GstTCPProtocol
 GstTCPUnitType
 <SUBSECTION Standard>
-CLIENTS_LOCK
-CLIENTS_LOCK_FREE
-CLIENTS_LOCK_INIT
-CLIENTS_UNLOCK
-GST_TYPE_MULTI_FD_SINK
-GST_IS_MULTI_FD_SINK
-GST_IS_MULTI_FD_SINK_CLASS
-GST_MULTI_FD_SINK
-GST_MULTI_FD_SINK_CLASS
-GST_MULTI_FD_SINK_GET_CLASS
-GstTCPClient
-GstMultiFdSinkFlags
 GstMultiFdSinkClass
-gst_multi_fd_sink_add
-gst_multi_fd_sink_add_full
-gst_multi_fd_sink_clear
-gst_multi_fd_sink_get_stats
+GST_MULTI_FD_SINK
+GST_IS_MULTI_FD_SINK
+GST_MULTI_FD_SINK_CLASS
+GST_IS_MULTI_FD_SINK_CLASS
+GST_TYPE_MULTI_FD_SINK
+GstTCPClient
+<SUBSECTION Private>
 gst_multi_fd_sink_get_type
-gst_multi_fd_sink_remove
-gst_multi_fd_sink_remove_flush
-GST_TYPE_TCP_PROTOCOL
-gst_tcp_protocol_get_type
 </SECTION>
 
 <SECTION>
@@ -374,42 +344,44 @@
 GstTCPProtocol
 GstTCPUnitType
 <SUBSECTION Standard>
-CLIENTS_LOCK
-CLIENTS_LOCK_FREE
-CLIENTS_LOCK_INIT
-CLIENTS_UNLOCK
-GST_TYPE_MULTI_SOCKET_SINK
-GST_IS_MULTI_SOCKET_SINK
-GST_IS_MULTI_SOCKET_SINK_CLASS
-GST_MULTI_SOCKET_SINK
-GST_MULTI_SOCKET_SINK_CLASS
-GST_MULTI_SOCKET_SINK_GET_CLASS
-GstTCPClient
-GstMultiSocketSinkFlags
 GstMultiSocketSinkClass
-gst_multi_socket_sink_add
-gst_multi_socket_sink_add_full
-gst_multi_socket_sink_clear
-gst_multi_socket_sink_get_stats
+GST_MULTI_SOCKET_SINK
+GST_IS_MULTI_SOCKET_SINK
+GST_MULTI_SOCKET_SINK_CLASS
+GST_IS_MULTI_SOCKET_SINK_CLASS
+GST_TYPE_MULTI_SOCKET_SINK
+GstTCPClient
+<SUBSECTION Private>
 gst_multi_socket_sink_get_type
-gst_multi_socket_sink_remove
-gst_multi_socket_sink_remove_flush
-GST_TYPE_TCP_PROTOCOL
-gst_tcp_protocol_get_type
 </SECTION>
 
+<SECTION>
+<FILE>element-oggaviparse</FILE>
+<TITLE>oggaviparse</TITLE>
+GstOggAviParse
+<SUBSECTION Standard>
+GstOggAviParseClass
+GST_OGG_AVI_PARSE
+GST_OGG_AVI_PARSE_CAST
+GST_IS_OGG_AVI_PARSE
+GST_OGG_AVI_PARSE_CLASS
+GST_IS_OGG_AVI_PARSE_CLASS
+GST_TYPE_OGG_AVI_PARSE
+<SUBSECTION Private>
+gst_ogg_avi_parse_get_type
+</SECTION>
 
 <SECTION>
 <FILE>element-oggdemux</FILE>
 <TITLE>oggdemux</TITLE>
 GstOggDemux
 <SUBSECTION Standard>
+GstOggDemuxClass
 GST_OGG_DEMUX
-GST_OGG_DEMUX_CLASS
 GST_IS_OGG_DEMUX
+GST_OGG_DEMUX_CLASS
 GST_IS_OGG_DEMUX_CLASS
 GST_TYPE_OGG_DEMUX
-GstOggDemuxClass
 GST_IS_OGG_PAD
 GST_IS_OGG_PAD_CLASS
 GST_OGG_PAD
@@ -420,6 +392,8 @@
 GstOggPadClass
 GstOggPadMode
 GstOggPadState
+<SUBSECTION Private>
+gst_ogg_demux_get_type
 </SECTION>
 
 <SECTION>
@@ -427,13 +401,78 @@
 <TITLE>oggmux</TITLE>
 GstOggMux
 <SUBSECTION Standard>
-gst_ogg_mux_get_type
+GstOggMuxClass
 GST_OGG_MUX
-GST_OGG_MUX_CLASS
 GST_IS_OGG_MUX
+GST_OGG_MUX_CLASS
 GST_IS_OGG_MUX_CLASS
 GST_TYPE_OGG_MUX
-GstOggMuxClass
+<SUBSECTION Private>
+gst_ogg_mux_get_type
+</SECTION>
+
+<SECTION>
+<FILE>element-oggparse</FILE>
+<TITLE>oggparse</TITLE>
+GstOggParse
+<SUBSECTION Standard>
+GstOggParseClass
+GST_OGG_PARSE
+GST_OGG_PARSE_CAST
+GST_IS_OGG_PARSE
+GST_OGG_PARSE_CLASS
+GST_IS_OGG_PARSE_CLASS
+GST_TYPE_OGG_PARSE
+<SUBSECTION Private>
+gst_ogg_parse_get_type
+</SECTION>
+
+<SECTION>
+<FILE>element-ogmaudioparse</FILE>
+<TITLE>ogmaudioparse</TITLE>
+GstOgmAudioParse
+<SUBSECTION Standard>
+GstOgmAudioParseClass
+GST_OGM_AUDIO_PARSE
+GST_OGM_AUDIO_PARSE_CAST
+GST_IS_OGM_AUDIO_PARSE
+GST_OGM_AUDIO_PARSE_CLASS
+GST_IS_OGM_AUDIO_PARSE_CLASS
+GST_TYPE_OGM_AUDIO_PARSE
+<SUBSECTION Private>
+gst_ogm_audio_parse_get_type
+</SECTION>
+
+<SECTION>
+<FILE>element-ogmtextparse</FILE>
+<TITLE>ogmtextparse</TITLE>
+GstOgmTextParse
+<SUBSECTION Standard>
+GstOgmTextParseClass
+GST_OGM_TEXT_PARSE
+GST_OGM_TEXT_PARSE_CAST
+GST_IS_OGM_TEXT_PARSE
+GST_OGM_TEXT_PARSE_CLASS
+GST_IS_OGM_TEXT_PARSE_CLASS
+GST_TYPE_OGM_TEXT_PARSE
+<SUBSECTION Private>
+gst_ogm_text_parse_get_type
+</SECTION>
+
+<SECTION>
+<FILE>element-ogmvideoparse</FILE>
+<TITLE>ogmvideoparse</TITLE>
+GstOgmVideoParse
+<SUBSECTION Standard>
+GstOgmVideoParseClass
+GST_OGM_VIDEO_PARSE
+GST_OGM_VIDEO_PARSE_CAST
+GST_IS_OGM_VIDEO_PARSE
+GST_OGM_VIDEO_PARSE_CLASS
+GST_IS_OGM_VIDEO_PARSE_CLASS
+GST_TYPE_OGM_VIDEO_PARSE
+<SUBSECTION Private>
+gst_ogm_video_parse_get_type
 </SECTION>
 
 <SECTION>
@@ -442,22 +481,31 @@
 GstPlayBin
 GstPlayFlags
 <SUBSECTION Standard>
+GstPlayBinClass
+GST_PLAY_BIN
+GST_PLAY_BIN_CAST
+GST_IS_PLAY_BIN
+GST_PLAY_BIN_CLASS
+GST_IS_PLAY_BIN_CLASS
+GST_TYPE_PLAY_BIN
 gst_play_flags_get_type
 GST_TYPE_PLAY_FLAGS
+<SUBSECTION Private>
+gst_play_bin_get_type
 </SECTION>
 
 <SECTION>
 <FILE>element-playsink</FILE>
 <TITLE>playsink</TITLE>
 GstPlaySink
+GstPlaySinkSendEventMode
 <SUBSECTION Standard>
-GST_TYPE_PLAY_SINK
+GstPlaySinkClass
 GST_PLAY_SINK
-GST_PLAY_SINK_CLASS
 GST_IS_PLAY_SINK
+GST_PLAY_SINK_CLASS
 GST_IS_PLAY_SINK_CLASS
 GstPlaySinkType
-gst_play_sink_get_type
 gst_play_sink_request_pad
 gst_play_sink_release_pad
 gst_play_sink_refresh_pad
@@ -483,6 +531,40 @@
 gst_play_sink_convert_sample
 gst_play_sink_reconfigure
 gst_play_sink_plugin_init
+GST_TYPE_PLAY_SINK
+<SUBSECTION Private>
+gst_play_sink_get_type
+</SECTION>
+
+<SECTION>
+<FILE>element-socketsrc</FILE>
+<TITLE>socketsrc</TITLE>
+GstSocketSrc
+<SUBSECTION Standard>
+GstSocketSrcClass
+GST_SOCKET_SRC
+GST_IS_SOCKET_SRC
+GST_SOCKET_SRC_CLASS
+GST_IS_SOCKET_SRC_CLASS
+GST_TYPE_SOCKET_SRC
+<SUBSECTION Private>
+gst_socket_src_get_type
+</SECTION>
+
+<SECTION>
+<FILE>element-ssaparse</FILE>
+<TITLE>ssaparse</TITLE>
+GstSsaParse
+<SUBSECTION Standard>
+GstSsaParseClass
+GST_SSA_PARSE
+GST_SSA_PARSE_CAST
+GST_IS_SSA_PARSE
+GST_SSA_PARSE_CLASS
+GST_IS_SSA_PARSE_CLASS
+GST_TYPE_SSA_PARSE
+<SUBSECTION Private>
+gst_ssa_parse_get_type
 </SECTION>
 
 <SECTION>
@@ -490,14 +572,30 @@
 <TITLE>streamsynchronizer</TITLE>
 GstStreamSynchronizer
 <SUBSECTION Standard>
-GST_TYPE_STREAM_SYNCHRONIZER
-GST_STREAM_SYNCHRONIZER
-GST_STREAM_SYNCHRONIZER_CLASS
-GST_IS_STREAM_SYNCHRONIZER
-GST_IS_STREAM_SYNCHRONIZER_CLASS
 GstStreamSynchronizerClass
+GST_STREAM_SYNCHRONIZER
+GST_IS_STREAM_SYNCHRONIZER
+GST_STREAM_SYNCHRONIZER_CLASS
+GST_IS_STREAM_SYNCHRONIZER_CLASS
+GST_TYPE_STREAM_SYNCHRONIZER
+<SUBSECTION Private>
 gst_stream_synchronizer_get_type
-gst_stream_synchronizer_plugin_init
+</SECTION>
+
+<SECTION>
+<FILE>element-subparse</FILE>
+<TITLE>subparse</TITLE>
+GstSubParse
+<SUBSECTION Standard>
+GstSubParseClass
+GST_SUB_PARSE
+GST_SUB_PARSE_CAST
+GST_IS_SUB_PARSE
+GST_SUB_PARSE_CLASS
+GST_IS_SUB_PARSE_CLASS
+GST_TYPE_SUB_PARSE
+<SUBSECTION Private>
+gst_sub_parse_get_type
 </SECTION>
 
 <SECTION>
@@ -506,62 +604,48 @@
 GstSubtitleOverlay
 <SUBSECTION Standard>
 GstSubtitleOverlayClass
-
-GST_IS_SUBTITLE_OVERLAY
-GST_IS_SUBTITLE_OVERLAY_CLASS
 GST_SUBTITLE_OVERLAY
 GST_SUBTITLE_OVERLAY_CAST
+GST_IS_SUBTITLE_OVERLAY
 GST_SUBTITLE_OVERLAY_CLASS
+GST_IS_SUBTITLE_OVERLAY_CLASS
 GST_SUBTITLE_OVERLAY_LOCK
 GST_SUBTITLE_OVERLAY_UNLOCK
 GST_TYPE_SUBTITLE_OVERLAY
+<SUBSECTION Private>
 gst_subtitle_overlay_plugin_init
 gst_subtitle_overlay_get_type
 </SECTION>
 
 <SECTION>
-<FILE>element-tcpclientsrc</FILE>
-<TITLE>tcpclientsrc</TITLE>
-GstTCPClientSrc
-<SUBSECTION Standard>
-GstTCPClientSrcClass
-GST_TCP_CLIENT_SRC
-GST_TCP_CLIENT_SINK_CLASS
-GstTCPClientSrcFlags
-GST_TYPE_TCP_CLIENT_SRC
-gst_tcp_client_src_get_type
-GST_IS_TCP_CLIENT_SRC_CLASS
-GST_IS_TCP_CLIENT_SRC
-</SECTION>
-
-<SECTION>
 <FILE>element-tcpclientsink</FILE>
 <TITLE>tcpclientsink</TITLE>
 GstTCPClientSink
 <SUBSECTION Standard>
 GstTCPClientSinkClass
-GST_TCP_CLIENT_SINK
-GST_TCP_CLIENT_SRC_CLASS
 GstTCPClientSinkFlags
-GST_TYPE_TCP_CLIENT_SINK
-gst_tcp_client_sink_get_type
-GST_IS_TCP_CLIENT_SINK_CLASS
+GST_TCP_CLIENT_SINK
 GST_IS_TCP_CLIENT_SINK
+GST_TCP_CLIENT_SINK_CLASS
+GST_IS_TCP_CLIENT_SINK_CLASS
+GST_TYPE_TCP_CLIENT_SINK
+<SUBSECTION Private>
+gst_tcp_client_sink_get_type
 </SECTION>
 
 <SECTION>
-<FILE>element-tcpserversrc</FILE>
-<TITLE>tcpserversrc</TITLE>
-GstTCPServerSrc
+<FILE>element-tcpclientsrc</FILE>
+<TITLE>tcpclientsrc</TITLE>
+GstTCPClientSrc
 <SUBSECTION Standard>
-GstTCPServerSrcClass
-GST_TCP_SERVER_SRC
-GST_TCP_SERVER_SRC_CLASS
-GstTCPServerSrcFlags
-GST_TYPE_TCP_SERVER_SRC
-gst_tcp_server_src_get_type
-GST_IS_TCP_SERVER_SRC_CLASS
-GST_IS_TCP_SERVER_SRC
+GstTCPClientSrcClass
+GstTCPClientSrcFlags
+GST_TCP_CLIENT_SRC
+GST_IS_TCP_CLIENT_SRC
+GST_TCP_CLIENT_SRC_CLASS
+GST_IS_TCP_CLIENT_SRC_CLASS
+GST_TYPE_TCP_CLIENT_SRC
+gst_tcp_client_src_get_type
 </SECTION>
 
 <SECTION>
@@ -570,20 +654,30 @@
 GstTCPServerSink
 <SUBSECTION Standard>
 GstTCPServerSinkClass
-GST_TCP_SERVER_SINK
-GST_TCP_SERVER_SINK_CLASS
 GstTCPServerSinkFlags
-GST_TYPE_TCP_SERVER_SINK
-gst_tcp_server_sink_get_type
-GST_IS_TCP_SERVER_SINK_CLASS
+GST_TCP_SERVER_SINK
 GST_IS_TCP_SERVER_SINK
-TCP_DEFAULT_HOST
-TCP_DEFAULT_PORT
-TCP_HIGHEST_PORT
-gst_tcp_host_to_ip
-gst_tcp_read_buffer
-gst_tcp_socket_close
-gst_tcp_socket_write
+GST_TCP_SERVER_SINK_CLASS
+GST_IS_TCP_SERVER_SINK_CLASS
+GST_TYPE_TCP_SERVER_SINK
+<SUBSECTION Private>
+gst_tcp_server_sink_get_type
+</SECTION>
+
+<SECTION>
+<FILE>element-tcpserversrc</FILE>
+<TITLE>tcpserversrc</TITLE>
+GstTCPServerSrc
+<SUBSECTION Standard>
+GstTCPServerSrcClass
+GstTCPServerSrcFlags
+GST_TCP_SERVER_SRC
+GST_IS_TCP_SERVER_SRC
+GST_TCP_SERVER_SRC_CLASS
+GST_IS_TCP_SERVER_SRC_CLASS
+GST_TYPE_TCP_SERVER_SRC
+<SUBSECTION Private>
+gst_tcp_server_src_get_type
 </SECTION>
 
 <SECTION>
@@ -594,15 +688,16 @@
 GstTextOverlayHAlign
 GstTextOverlayWrapMode
 <SUBSECTION Standard>
-GST_TEXT_OVERLAY
-GST_TEXT_OVERLAY_CLASS
-GST_TEXT_OVERLAY_GET_CLASS
-GST_IS_TEXT_OVERLAY
-GST_IS_TEXT_OVERLAY_CLASS
-GST_TYPE_TEXT_OVERLAY
 GstTextOverlayClass
-gst_text_overlay_get_type
 GstTextOverlayLineAlign
+GST_TEXT_OVERLAY
+GST_IS_TEXT_OVERLAY
+GST_TEXT_OVERLAY_CLASS
+GST_IS_TEXT_OVERLAY_CLASS
+GST_TEXT_OVERLAY_GET_CLASS
+GST_TYPE_TEXT_OVERLAY
+<SUBSECTION Private>
+gst_text_overlay_get_type
 </SECTION>
 
 <SECTION>
@@ -610,13 +705,14 @@
 <TITLE>textrender</TITLE>
 GstTextRender
 <SUBSECTION Standard>
-GST_TEXT_RENDER
-GST_TEXT_RENDER_CLASS
-GST_TEXT_RENDER_GET_CLASS
-GST_IS_TEXT_RENDER
-GST_IS_TEXT_RENDER_CLASS
-GST_TYPE_TEXT_RENDER
 GstTextRenderClass
+GST_TEXT_RENDER
+GST_IS_TEXT_RENDER
+GST_TEXT_RENDER_CLASS
+GST_IS_TEXT_RENDER_CLASS
+GST_TEXT_RENDER_GET_CLASS
+GST_TYPE_TEXT_RENDER
+<SUBSECTION Private>
 gst_text_render_get_type
 </SECTION>
 
@@ -625,26 +721,30 @@
 <TITLE>theoradec</TITLE>
 GstTheoraDec
 <SUBSECTION Standard>
+GstTheoraDecClass
 GST_THEORA_DEC
 GST_IS_THEORA_DEC
-GST_TYPE_THEORA_DEC
 GST_THEORA_DEC_CLASS
 GST_IS_THEORA_DEC_CLASS
-GstTheoraDecClass
+GST_TYPE_THEORA_DEC
+<SUBSECTION Private>
+gst_theora_dec_get_type
 </SECTION>
 
 <SECTION>
 <FILE>element-theoraenc</FILE>
 <TITLE>theoraenc</TITLE>
 GstTheoraEnc
-GstTheoraEncBorderMode
+GstTheoraEncMultipassMode
 <SUBSECTION Standard>
+GstTheoraEncClass
 GST_THEORA_ENC
-GST_THEORA_ENC_CLASS
 GST_IS_THEORA_ENC
+GST_THEORA_ENC_CLASS
 GST_IS_THEORA_ENC_CLASS
 GST_TYPE_THEORA_ENC
-GstTheoraEncClass
+<SUBSECTION Private>
+gst_theora_enc_get_type
 </SECTION>
 
 <SECTION>
@@ -655,23 +755,26 @@
 GstTheoraParseClass
 GST_THEORA_PARSE
 GST_IS_THEORA_PARSE
-GST_TYPE_THEORA_PARSE
-gst_theora_parse_get_type
 GST_THEORA_PARSE_CLASS
 GST_IS_THEORA_PARSE_CLASS
+GST_TYPE_THEORA_PARSE
+<SUBSECTION Private>
+gst_theora_parse_get_type
 </SECTION>
 
 <SECTION>
 <FILE>element-timeoverlay</FILE>
 <TITLE>timeoverlay</TITLE>
 GstTimeOverlay
+GstTimeOverlayTimeLine
 <SUBSECTION Standard>
+GstTimeOverlayClass
 GST_TIME_OVERLAY
-GST_TIME_OVERLAY_CLASS
 GST_IS_TIME_OVERLAY
+GST_TIME_OVERLAY_CLASS
 GST_IS_TIME_OVERLAY_CLASS
 GST_TYPE_TIME_OVERLAY
-GstTimeOverlayClass
+<SUBSECTION Private>
 gst_time_overlay_get_type
 </SECTION>
 
@@ -681,11 +784,35 @@
 GstURIDecodeBin
 GstAutoplugSelectResult
 <SUBSECTION Standard>
+GstURIDecodeBinClass
+GST_URI_DECODE_BIN
+GST_URI_DECODE_BIN_CAST
+GST_IS_URI_DECODE_BIN
+GST_URI_DECODE_BIN_CLASS
+GST_IS_URI_DECODE_BIN_CLASS
+GST_TYPE_URI_DECODE_BIN
 GST_TYPE_AUTOPLUG_SELECT_RESULT
+<SUBSECTION Private>
+gst_uri_decode_bin_get_type
 gst_autoplug_select_result_get_type
 </SECTION>
 
 <SECTION>
+<FILE>element-videoconvert</FILE>
+<TITLE>videoconvert</TITLE>
+GstVideoConvert
+<SUBSECTION Standard>
+GstVideoConvertClass
+GST_VIDEO_CONVERT
+GST_IS_VIDEO_CONVERT
+GST_VIDEO_CONVERT_CLASS
+GST_IS_VIDEO_CONVERT_CLASS
+GST_TYPE_VIDEO_CONVERT
+<SUBSECTION Private>
+gst_video_convert_get_type
+</SECTION>
+
+<SECTION>
 <FILE>element-videorate</FILE>
 <TITLE>videorate</TITLE>
 GstVideoRate
@@ -693,9 +820,11 @@
 GstVideoRateClass
 GST_VIDEO_RATE
 GST_IS_VIDEO_RATE
-GST_TYPE_VIDEO_RATE
 GST_VIDEO_RATE_CLASS
 GST_IS_VIDEO_RATE_CLASS
+GST_TYPE_VIDEO_RATE
+<SUBSECTION Private>
+gst_video_rate_get_type
 </SECTION>
 
 <SECTION>
@@ -705,13 +834,13 @@
 GstVideoScaleMethod
 <SUBSECTION Standard>
 GstVideoScaleClass
-GST_CAT_DEFAULT
 GST_VIDEO_SCALE
 GST_IS_VIDEO_SCALE
-GST_TYPE_VIDEO_SCALE
-gst_video_scale_get_type
 GST_VIDEO_SCALE_CLASS
 GST_IS_VIDEO_SCALE_CLASS
+GST_TYPE_VIDEO_SCALE
+<SUBSECTION Private>
+gst_video_scale_get_type
 </SECTION>
 
 <SECTION>
@@ -721,12 +850,13 @@
 GstVideoTestSrcPattern
 GstVideoTestSrcColorSpec
 <SUBSECTION Standard>
+GstVideoTestSrcClass
 GST_VIDEO_TEST_SRC
-GST_VIDEO_TEST_SRC_CLASS
 GST_IS_VIDEO_TEST_SRC
+GST_VIDEO_TEST_SRC_CLASS
 GST_IS_VIDEO_TEST_SRC_CLASS
 GST_TYPE_VIDEO_TEST_SRC
-GstVideoTestSrcClass
+<SUBSECTION Private>
 gst_video_test_src_get_type
 </SECTION>
 
@@ -735,12 +865,13 @@
 <TITLE>volume</TITLE>
 GstVolume
 <SUBSECTION Standard>
+GstVolumeClass
 GST_VOLUME
-GST_VOLUME_CLASS
 GST_IS_VOLUME
+GST_VOLUME_CLASS
 GST_IS_VOLUME_CLASS
 GST_TYPE_VOLUME
-GstVolumeClass
+<SUBSECTION Private>
 gst_volume_get_type
 </SECTION>
 
@@ -752,10 +883,11 @@
 GstVorbisDecClass
 GST_VORBIS_DEC
 GST_IS_VORBIS_DEC
-GST_TYPE_VORBIS_DEC
-gst_vorbis_dec_get_type
 GST_VORBIS_DEC_CLASS
 GST_IS_VORBIS_DEC_CLASS
+GST_TYPE_VORBIS_DEC
+<SUBSECTION Private>
+gst_vorbis_dec_get_type
 </SECTION>
 
 <SECTION>
@@ -764,11 +896,12 @@
 GstVorbisEnc
 <SUBSECTION Standard>
 GstVorbisEncClass
-GST_IS_VORBISENC
-GST_VORBISENC_CLASS
-GST_VORBISENC
-GST_TYPE_VORBISENC
-GST_IS_VORBISENC_CLASS
+GST_VORBIS_ENC
+GST_IS_VORBIS_ENC
+GST_VORBIS_ENC_CLASS
+GST_IS_VORBIS_ENC_CLASS
+GST_TYPE_VORBIS_ENC
+<SUBSECTION Private>
 gst_vorbis_enc_get_type
 </SECTION>
 
@@ -780,10 +913,11 @@
 GstVorbisParseClass
 GST_VORBIS_PARSE
 GST_IS_VORBIS_PARSE
-GST_TYPE_VORBIS_PARSE
-gst_vorbis_parse_get_type
 GST_VORBIS_PARSE_CLASS
 GST_IS_VORBIS_PARSE_CLASS
+GST_TYPE_VORBIS_PARSE
+<SUBSECTION Private>
+gst_vorbis_parse_get_type
 </SECTION>
 
 <SECTION>
@@ -794,10 +928,11 @@
 GstVorbisTagClass
 GST_VORBIS_TAG
 GST_IS_VORBIS_TAG
-GST_TYPE_VORBIS_TAG
-gst_vorbis_tag_get_type
 GST_VORBIS_TAG_CLASS
 GST_IS_VORBIS_TAG_CLASS
+GST_TYPE_VORBIS_TAG
+<SUBSECTION Private>
+gst_vorbis_tag_get_type
 </SECTION>
 
 <SECTION>
@@ -805,17 +940,18 @@
 <TITLE>ximagesink</TITLE>
 GstXImageSink
 <SUBSECTION Standard>
-GST_XIMAGESINK
-GST_XIMAGESINK_CLASS
-GST_IS_XIMAGESINK
-GST_IS_XIMAGESINK_CLASS
-GST_TYPE_XIMAGESINK
-gst_ximagesink_get_type
+GstXImageSinkClass
+GST_X_IMAGE_SINK
+GST_IS_X_IMAGE_SINK
+GST_X_IMAGE_SINK_CLASS
+GST_IS_X_IMAGE_SINK_CLASS
+GST_TYPE_X_IMAGE_SINK
 GstXImageBuffer
 GstXImageBufferClass
-GstXImageSinkClass
 GstXContext
 GstXWindow
+<SUBSECTION Private>
+gst_x_image_sink_get_type
 </SECTION>
 
 <SECTION>
@@ -823,14 +959,15 @@
 <TITLE>xvimagesink</TITLE>
 GstXvImageSink
 <SUBSECTION Standard>
-GST_XVIMAGESINK
-GST_XVIMAGESINK_CLASS
-GST_IS_XVIMAGESINK
-GST_IS_XVIMAGESINK_CLASS
-GST_TYPE_XVIMAGESINK
-gst_xvimagesink_get_type
+GstXvImageSinkClass
+GST_XV_IMAGE_SINK
+GST_IS_XV_IMAGE_SINK
+GST_XV_IMAGE_SINK_CLASS
+GST_IS_XV_IMAGE_SINK_CLASS
+GST_TYPE_XV_IMAGE_SINK
 GstXvImageBuffer
 GstXvImageBufferClass
 GstXvImageFormat
-GstXvImageSinkClass
+<SUBSECTION Private>
+gst_xv_image_sink_get_type
 </SECTION>
diff --git a/docs/plugins/gst-plugins-base-plugins.args b/docs/plugins/gst-plugins-base-plugins.args
index 538a008..3479582 100644
--- a/docs/plugins/gst-plugins-base-plugins.args
+++ b/docs/plugins/gst-plugins-base-plugins.args
@@ -45,7 +45,7 @@
 <FLAGS>rw</FLAGS>
 <NICK>method</NICK>
 <BLURB>method.</BLURB>
-<DEFAULT>Bilinear</DEFAULT>
+<DEFAULT>Bilinear (2-tap)</DEFAULT>
 </ARG>
 
 <ARG>
@@ -69,6 +69,16 @@
 </ARG>
 
 <ARG>
+<NAME>GstVideoScale::gamma-decode</NAME>
+<TYPE>gboolean</TYPE>
+<RANGE></RANGE>
+<FLAGS>rwx</FLAGS>
+<NICK>Gamma Decode</NICK>
+<BLURB>Decode gamma before scaling.</BLURB>
+<DEFAULT>FALSE</DEFAULT>
+</ARG>
+
+<ARG>
 <NAME>GstURIDecodeBin::buffer-duration</NAME>
 <TYPE>gint64</TYPE>
 <RANGE>>= G_MAXULONG</RANGE>
@@ -679,6 +689,26 @@
 </ARG>
 
 <ARG>
+<NAME>GstPlayBin::video-multiview-flags</NAME>
+<TYPE>GstVideoMultiviewFlags</TYPE>
+<RANGE></RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Multiview Flags Override</NICK>
+<BLURB>Override details of the multiview frame layout.</BLURB>
+<DEFAULT></DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstPlayBin::video-multiview-mode</NAME>
+<TYPE>GstVideoMultiviewFramePacking</TYPE>
+<RANGE></RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Multiview Mode Override</NICK>
+<BLURB>Re-interpret a video stream as one of several frame-packed stereoscopic modes.</BLURB>
+<DEFAULT>GST_VIDEO_MULTIVIEW_FRAME_PACKING_NONE</DEFAULT>
+</ARG>
+
+<ARG>
 <NAME>GstDecodeBin::caps</NAME>
 <TYPE>GstCaps*</TYPE>
 <RANGE></RANGE>
@@ -850,12 +880,92 @@
 
 <ARG>
 <NAME>GstVideoConvert::dither</NAME>
-<TYPE>GstVideoConvertDitherMethod</TYPE>
+<TYPE>GstVideoDitherMethod</TYPE>
 <RANGE></RANGE>
 <FLAGS>rw</FLAGS>
 <NICK>Dither</NICK>
 <BLURB>Apply dithering while converting.</BLURB>
-<DEFAULT>No dithering (default)</DEFAULT>
+<DEFAULT>GST_VIDEO_DITHER_BAYER</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstVideoConvert::alpha-mode</NAME>
+<TYPE>GstVideoAlphaMode</TYPE>
+<RANGE></RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Alpha Mode</NICK>
+<BLURB>Alpha Mode to use.</BLURB>
+<DEFAULT>GST_VIDEO_ALPHA_MODE_COPY</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstVideoConvert::alpha-value</NAME>
+<TYPE>gdouble</TYPE>
+<RANGE>[0,1]</RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Alpha Value</NICK>
+<BLURB>Alpha Value to use.</BLURB>
+<DEFAULT>1</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstVideoConvert::chroma-mode</NAME>
+<TYPE>GstVideoChromaMode</TYPE>
+<RANGE></RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Chroma Mode</NICK>
+<BLURB>Chroma Resampling Mode.</BLURB>
+<DEFAULT>GST_VIDEO_CHROMA_MODE_FULL</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstVideoConvert::chroma-resampler</NAME>
+<TYPE>GstVideoResamplerMethod</TYPE>
+<RANGE></RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Chroma resampler</NICK>
+<BLURB>Chroma resampler method.</BLURB>
+<DEFAULT>GST_VIDEO_RESAMPLER_METHOD_LINEAR</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstVideoConvert::dither-quantization</NAME>
+<TYPE>guint</TYPE>
+<RANGE></RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Dither Quantize</NICK>
+<BLURB>Quantizer to use.</BLURB>
+<DEFAULT>1</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstVideoConvert::gamma-mode</NAME>
+<TYPE>GstVideoGammaMode</TYPE>
+<RANGE></RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Gamma Mode</NICK>
+<BLURB>Gamma Conversion Mode.</BLURB>
+<DEFAULT>GST_VIDEO_GAMMA_MODE_NONE</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstVideoConvert::matrix-mode</NAME>
+<TYPE>GstVideoMatrixMode</TYPE>
+<RANGE></RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Matrix Mode</NICK>
+<BLURB>Matrix Conversion Mode.</BLURB>
+<DEFAULT>GST_VIDEO_MATRIX_MODE_FULL</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstVideoConvert::primaries-mode</NAME>
+<TYPE>GstVideoPrimariesMode</TYPE>
+<RANGE></RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Primaries Mode</NICK>
+<BLURB>Primaries Conversion Mode.</BLURB>
+<DEFAULT>GST_VIDEO_PRIMARIES_MODE_NONE</DEFAULT>
 </ARG>
 
 <ARG>
@@ -1411,7 +1521,7 @@
 <ARG>
 <NAME>GstVideoTestSrc::timestamp-offset</NAME>
 <TYPE>gint64</TYPE>
-<RANGE></RANGE>
+<RANGE>>= 0</RANGE>
 <FLAGS>rw</FLAGS>
 <NICK>Timestamp offset</NICK>
 <BLURB>An offset added to timestamps set on buffers (in ns).</BLURB>
@@ -2408,3 +2518,33 @@
 <DEFAULT>FALSE</DEFAULT>
 </ARG>
 
+<ARG>
+<NAME>GstSocketSrc::socket</NAME>
+<TYPE>GSocket*</TYPE>
+<RANGE></RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Socket</NICK>
+<BLURB>The socket to receive packets from.</BLURB>
+<DEFAULT></DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstSocketSrc::caps</NAME>
+<TYPE>GstCaps*</TYPE>
+<RANGE></RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Caps</NICK>
+<BLURB>The caps of the source pad.</BLURB>
+<DEFAULT></DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstTimeOverlay::time-mode</NAME>
+<TYPE>GstTimeOverlayTimeLine</TYPE>
+<RANGE></RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Time Mode</NICK>
+<BLURB>What time to show.</BLURB>
+<DEFAULT>buffer-time</DEFAULT>
+</ARG>
+
diff --git a/docs/plugins/gst-plugins-base-plugins.hierarchy b/docs/plugins/gst-plugins-base-plugins.hierarchy
index c65cd17..df2fd05 100644
--- a/docs/plugins/gst-plugins-base-plugins.hierarchy
+++ b/docs/plugins/gst-plugins-base-plugins.hierarchy
@@ -57,6 +57,7 @@
                 GstAlsaSrc
             GstAudioCdSrc
               GstCdParanoiaSrc
+            GstSocketSrc
             GstTCPClientSrc
             GstTCPServerSrc
             GstVideoTestSrc
diff --git a/docs/plugins/gst-plugins-base-plugins.signals b/docs/plugins/gst-plugins-base-plugins.signals
index 74e285f..7daf891 100644
--- a/docs/plugins/gst-plugins-base-plugins.signals
+++ b/docs/plugins/gst-plugins-base-plugins.signals
@@ -320,6 +320,14 @@
 </SIGNAL>
 
 <SIGNAL>
+<NAME>GstAppSrc::push-sample</NAME>
+<RETURNS>GstFlowReturn</RETURNS>
+<FLAGS>la</FLAGS>
+GstAppSrc *gstappsrc
+GstSample *arg1
+</SIGNAL>
+
+<SIGNAL>
 <NAME>GstAppSink::eos</NAME>
 <RETURNS>void</RETURNS>
 <FLAGS>l</FLAGS>
@@ -510,3 +518,10 @@
 gint  arg1
 </SIGNAL>
 
+<SIGNAL>
+<NAME>GstSocketSrc::connection-closed-by-peer</NAME>
+<RETURNS>void</RETURNS>
+<FLAGS>f</FLAGS>
+GstSocketSrc *gstsocketsrc
+</SIGNAL>
+
diff --git a/docs/plugins/html/ch01.html b/docs/plugins/html/ch01.html
index e5a9e88..6651ec8 100644
--- a/docs/plugins/html/ch01.html
+++ b/docs/plugins/html/ch01.html
@@ -2,13 +2,13 @@
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>GStreamer Base Plugins 1.0 Plugins Reference Manual: gst-plugins-base Elements</title>
+<title>gst-plugins-base Elements: GStreamer Base 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 Base Plugins 1.0 Plugins Reference Manual">
 <link rel="up" href="index.html" title="GStreamer Base Plugins 1.0 Plugins Reference Manual">
 <link rel="prev" href="index.html" title="GStreamer Base Plugins 1.0 Plugins Reference Manual">
 <link rel="next" href="gst-plugins-base-plugins-adder.html" title="adder">
-<meta name="generator" content="GTK-Doc V1.21 (XML mode)">
+<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">
@@ -24,150 +24,173 @@
 <a name="id-1.2"></a>gst-plugins-base Elements</h1></div></div></div>
 <div class="toc"><dl class="toc">
 <dt>
-<span class="refentrytitle"><a href="gst-plugins-base-plugins-adder.html">adder</a></span><span class="refpurpose"> — Add N audio channels together</span>
+<span class="refentrytitle"><a href="gst-plugins-base-plugins-adder.html">adder</a></span><span class="refpurpose"></span>
 </dt>
 <dt>
-<span class="refentrytitle"><a href="gst-plugins-base-plugins-appsrc.html">appsrc</a></span><span class="refpurpose"> — Allow the application to feed buffers to a pipeline</span>
+<span class="refentrytitle"><a href="gst-plugins-base-plugins-alsasink.html">alsasink</a></span><span class="refpurpose"></span>
 </dt>
 <dt>
-<span class="refentrytitle"><a href="gst-plugins-base-plugins-appsink.html">appsink</a></span><span class="refpurpose"> — Allow the application to get access to raw buffer</span>
+<span class="refentrytitle"><a href="gst-plugins-base-plugins-alsasrc.html">alsasrc</a></span><span class="refpurpose"></span>
 </dt>
 <dt>
-<span class="refentrytitle"><a href="gst-plugins-base-plugins-alsasink.html">alsasink</a></span><span class="refpurpose"> — Output to a sound card via ALSA</span>
+<span class="refentrytitle"><a href="gst-plugins-base-plugins-appsink.html">appsink</a></span><span class="refpurpose"></span>
 </dt>
 <dt>
-<span class="refentrytitle"><a href="gst-plugins-base-plugins-alsasrc.html">alsasrc</a></span><span class="refpurpose"> — Read from a sound card via ALSA</span>
+<span class="refentrytitle"><a href="gst-plugins-base-plugins-appsrc.html">appsrc</a></span><span class="refpurpose"></span>
 </dt>
 <dt>
-<span class="refentrytitle"><a href="gst-plugins-base-plugins-audioconvert.html">audioconvert</a></span><span class="refpurpose"> — Convert audio to different formats</span>
+<span class="refentrytitle"><a href="gst-plugins-base-plugins-audioconvert.html">audioconvert</a></span><span class="refpurpose"></span>
 </dt>
 <dt>
-<span class="refentrytitle"><a href="gst-plugins-base-plugins-audiorate.html">audiorate</a></span><span class="refpurpose"> — Drops/duplicates/adjusts timestamps on audio samples to make a perfect stream</span>
+<span class="refentrytitle"><a href="gst-plugins-base-plugins-audiorate.html">audiorate</a></span><span class="refpurpose"></span>
 </dt>
 <dt>
-<span class="refentrytitle"><a href="gst-plugins-base-plugins-audioresample.html">audioresample</a></span><span class="refpurpose"> — Resamples audio</span>
+<span class="refentrytitle"><a href="gst-plugins-base-plugins-audioresample.html">audioresample</a></span><span class="refpurpose"></span>
 </dt>
 <dt>
-<span class="refentrytitle"><a href="gst-plugins-base-plugins-audiotestsrc.html">audiotestsrc</a></span><span class="refpurpose"> — Creates audio test signals of given frequency and volume</span>
+<span class="refentrytitle"><a href="gst-plugins-base-plugins-audiotestsrc.html">audiotestsrc</a></span><span class="refpurpose"></span>
 </dt>
 <dt>
-<span class="refentrytitle"><a href="gst-plugins-base-plugins-cdparanoiasrc.html">cdparanoiasrc</a></span><span class="refpurpose"> — Read audio from CD in paranoid mode</span>
+<span class="refentrytitle"><a href="gst-plugins-base-plugins-cdparanoiasrc.html">cdparanoiasrc</a></span><span class="refpurpose"></span>
 </dt>
 <dt>
-<span class="refentrytitle"><a href="gst-plugins-base-plugins-clockoverlay.html">clockoverlay</a></span><span class="refpurpose"> — Overlays the current clock time on a video stream</span>
+<span class="refentrytitle"><a href="gst-plugins-base-plugins-clockoverlay.html">clockoverlay</a></span><span class="refpurpose"></span>
 </dt>
 <dt>
-<span class="refentrytitle"><a href="gst-plugins-base-plugins-decodebin.html">decodebin</a></span><span class="refpurpose"> — Autoplug and decode to raw media</span>
+<span class="refentrytitle"><a href="gst-plugins-base-plugins-decodebin.html">decodebin</a></span><span class="refpurpose"></span>
 </dt>
 <dt>
-<span class="refentrytitle"><a href="gst-plugins-base-plugins-encodebin.html">encodebin</a></span><span class="refpurpose"> — Convenience encoding/muxing element</span>
+<span class="refentrytitle"><a href="gst-plugins-base-plugins-encodebin.html">encodebin</a></span><span class="refpurpose"></span>
 </dt>
 <dt>
-<span class="refentrytitle"><a href="gst-plugins-base-plugins-videoconvert.html">videoconvert</a></span><span class="refpurpose"> — Converts video from one colorspace to another</span>
+<span class="refentrytitle"><a href="gst-plugins-base-plugins-giosink.html">giosink</a></span><span class="refpurpose"></span>
 </dt>
 <dt>
-<span class="refentrytitle"><a href="gst-plugins-base-plugins-giosink.html">giosink</a></span><span class="refpurpose"> — Write to any GIO-supported location</span>
+<span class="refentrytitle"><a href="gst-plugins-base-plugins-giosrc.html">giosrc</a></span><span class="refpurpose"></span>
 </dt>
 <dt>
-<span class="refentrytitle"><a href="gst-plugins-base-plugins-giosrc.html">giosrc</a></span><span class="refpurpose"> — Read from any GIO-supported location</span>
+<span class="refentrytitle"><a href="gst-plugins-base-plugins-giostreamsink.html">giostreamsink</a></span><span class="refpurpose"></span>
 </dt>
 <dt>
-<span class="refentrytitle"><a href="gst-plugins-base-plugins-giostreamsink.html">giostreamsink</a></span><span class="refpurpose"> — Write to any GIO stream</span>
+<span class="refentrytitle"><a href="gst-plugins-base-plugins-giostreamsrc.html">giostreamsrc</a></span><span class="refpurpose"></span>
 </dt>
 <dt>
-<span class="refentrytitle"><a href="gst-plugins-base-plugins-giostreamsrc.html">giostreamsrc</a></span><span class="refpurpose"> — Read from any GIO stream</span>
+<span class="refentrytitle"><a href="gst-plugins-base-plugins-multifdsink.html">multifdsink</a></span><span class="refpurpose"></span>
 </dt>
 <dt>
-<span class="refentrytitle"><a href="gst-plugins-base-plugins-multifdsink.html">multifdsink</a></span><span class="refpurpose"> — Send data to multiple filedescriptors</span>
+<span class="refentrytitle"><a href="gst-plugins-base-plugins-multisocketsink.html">multisocketsink</a></span><span class="refpurpose"></span>
 </dt>
 <dt>
-<span class="refentrytitle"><a href="gst-plugins-base-plugins-multisocketsink.html">multisocketsink</a></span><span class="refpurpose"> — Send data to multiple sockets</span>
+<span class="refentrytitle"><a href="gst-plugins-base-plugins-oggaviparse.html">oggaviparse</a></span><span class="refpurpose"></span>
 </dt>
 <dt>
-<span class="refentrytitle"><a href="gst-plugins-base-plugins-oggdemux.html">oggdemux</a></span><span class="refpurpose"> — demux ogg streams (info about ogg: http://xiph.org)</span>
+<span class="refentrytitle"><a href="gst-plugins-base-plugins-oggdemux.html">oggdemux</a></span><span class="refpurpose"></span>
 </dt>
 <dt>
-<span class="refentrytitle"><a href="gst-plugins-base-plugins-oggmux.html">oggmux</a></span><span class="refpurpose"> — mux ogg streams (info about ogg: http://xiph.org)</span>
+<span class="refentrytitle"><a href="gst-plugins-base-plugins-oggmux.html">oggmux</a></span><span class="refpurpose"></span>
 </dt>
 <dt>
-<span class="refentrytitle"><a href="gst-plugins-base-plugins-playbin.html">playbin</a></span><span class="refpurpose"> — Autoplug and play media from an uri</span>
+<span class="refentrytitle"><a href="gst-plugins-base-plugins-oggparse.html">oggparse</a></span><span class="refpurpose"></span>
 </dt>
 <dt>
-<span class="refentrytitle"><a href="gst-plugins-base-plugins-playsink.html">playsink</a></span><span class="refpurpose"> — Convenience sink for multiple streams</span>
+<span class="refentrytitle"><a href="gst-plugins-base-plugins-ogmaudioparse.html">ogmaudioparse</a></span><span class="refpurpose"></span>
 </dt>
 <dt>
-<span class="refentrytitle"><a href="gst-plugins-base-plugins-streamsynchronizer.html">streamsynchronizer</a></span><span class="refpurpose"> — Synchronizes a group of streams to have equal durations and starting points</span>
+<span class="refentrytitle"><a href="gst-plugins-base-plugins-ogmtextparse.html">ogmtextparse</a></span><span class="refpurpose"></span>
 </dt>
 <dt>
-<span class="refentrytitle"><a href="gst-plugins-base-plugins-subtitleoverlay.html">subtitleoverlay</a></span><span class="refpurpose"> — Overlays a video stream with subtitles</span>
+<span class="refentrytitle"><a href="gst-plugins-base-plugins-ogmvideoparse.html">ogmvideoparse</a></span><span class="refpurpose"></span>
 </dt>
 <dt>
-<span class="refentrytitle"><a href="gst-plugins-base-plugins-tcpclientsrc.html">tcpclientsrc</a></span><span class="refpurpose"> — Receive data as a client over the network via TCP</span>
+<span class="refentrytitle"><a href="gst-plugins-base-plugins-playbin.html">playbin</a></span><span class="refpurpose"></span>
 </dt>
 <dt>
-<span class="refentrytitle"><a href="gst-plugins-base-plugins-tcpclientsink.html">tcpclientsink</a></span><span class="refpurpose"> — Send data as a client over the network via TCP</span>
+<span class="refentrytitle"><a href="gst-plugins-base-plugins-playsink.html">playsink</a></span><span class="refpurpose"></span>
 </dt>
 <dt>
-<span class="refentrytitle"><a href="gst-plugins-base-plugins-tcpserversrc.html">tcpserversrc</a></span><span class="refpurpose"> — Receive data as a server over the network via TCP</span>
+<span class="refentrytitle"><a href="gst-plugins-base-plugins-socketsrc.html">socketsrc</a></span><span class="refpurpose"></span>
 </dt>
 <dt>
-<span class="refentrytitle"><a href="gst-plugins-base-plugins-tcpserversink.html">tcpserversink</a></span><span class="refpurpose"> — Send data as a server over the network via TCP</span>
+<span class="refentrytitle"><a href="gst-plugins-base-plugins-ssaparse.html">ssaparse</a></span><span class="refpurpose"></span>
 </dt>
 <dt>
-<span class="refentrytitle"><a href="gst-plugins-base-plugins-textoverlay.html">textoverlay</a></span><span class="refpurpose"> — Adds text strings on top of a video buffer</span>
+<span class="refentrytitle"><a href="gst-plugins-base-plugins-streamsynchronizer.html">streamsynchronizer</a></span><span class="refpurpose"></span>
 </dt>
 <dt>
-<span class="refentrytitle"><a href="gst-plugins-base-plugins-textrender.html">textrender</a></span><span class="refpurpose"> — Renders a text string to an image bitmap</span>
+<span class="refentrytitle"><a href="gst-plugins-base-plugins-subparse.html">subparse</a></span><span class="refpurpose"></span>
 </dt>
 <dt>
-<span class="refentrytitle"><a href="gst-plugins-base-plugins-theoradec.html">theoradec</a></span><span class="refpurpose"> — decode raw theora streams to raw YUV video</span>
+<span class="refentrytitle"><a href="gst-plugins-base-plugins-subtitleoverlay.html">subtitleoverlay</a></span><span class="refpurpose"></span>
 </dt>
 <dt>
-<span class="refentrytitle"><a href="gst-plugins-base-plugins-theoraenc.html">theoraenc</a></span><span class="refpurpose"> — encode raw YUV video to a theora stream</span>
+<span class="refentrytitle"><a href="gst-plugins-base-plugins-tcpclientsink.html">tcpclientsink</a></span><span class="refpurpose"></span>
 </dt>
 <dt>
-<span class="refentrytitle"><a href="gst-plugins-base-plugins-theoraparse.html">theoraparse</a></span><span class="refpurpose"> — parse raw theora streams</span>
+<span class="refentrytitle"><a href="gst-plugins-base-plugins-tcpclientsrc.html">tcpclientsrc</a></span><span class="refpurpose"></span>
 </dt>
 <dt>
-<span class="refentrytitle"><a href="gst-plugins-base-plugins-timeoverlay.html">timeoverlay</a></span><span class="refpurpose"> — Overlays buffer time stamps on a video stream</span>
+<span class="refentrytitle"><a href="gst-plugins-base-plugins-tcpserversink.html">tcpserversink</a></span><span class="refpurpose"></span>
 </dt>
 <dt>
-<span class="refentrytitle"><a href="gst-plugins-base-plugins-uridecodebin.html">uridecodebin</a></span><span class="refpurpose"> — Autoplug and decode an URI to raw media</span>
+<span class="refentrytitle"><a href="gst-plugins-base-plugins-tcpserversrc.html">tcpserversrc</a></span><span class="refpurpose"></span>
 </dt>
 <dt>
-<span class="refentrytitle"><a href="gst-plugins-base-plugins-videorate.html">videorate</a></span><span class="refpurpose"> — Drops/duplicates/adjusts timestamps on video frames to make a perfect stream</span>
+<span class="refentrytitle"><a href="gst-plugins-base-plugins-textoverlay.html">textoverlay</a></span><span class="refpurpose"></span>
 </dt>
 <dt>
-<span class="refentrytitle"><a href="gst-plugins-base-plugins-videoscale.html">videoscale</a></span><span class="refpurpose"> — Resizes video</span>
+<span class="refentrytitle"><a href="gst-plugins-base-plugins-textrender.html">textrender</a></span><span class="refpurpose"></span>
 </dt>
 <dt>
-<span class="refentrytitle"><a href="gst-plugins-base-plugins-videotestsrc.html">videotestsrc</a></span><span class="refpurpose"> — Creates a test video stream</span>
+<span class="refentrytitle"><a href="gst-plugins-base-plugins-theoradec.html">theoradec</a></span><span class="refpurpose"></span>
 </dt>
 <dt>
-<span class="refentrytitle"><a href="gst-plugins-base-plugins-volume.html">volume</a></span><span class="refpurpose"> — Set volume on audio/raw streams</span>
+<span class="refentrytitle"><a href="gst-plugins-base-plugins-theoraenc.html">theoraenc</a></span><span class="refpurpose"></span>
 </dt>
 <dt>
-<span class="refentrytitle"><a href="gst-plugins-base-plugins-vorbisdec.html">vorbisdec</a></span><span class="refpurpose"> — decode raw vorbis streams to float audio</span>
+<span class="refentrytitle"><a href="gst-plugins-base-plugins-theoraparse.html">theoraparse</a></span><span class="refpurpose"></span>
 </dt>
 <dt>
-<span class="refentrytitle"><a href="gst-plugins-base-plugins-vorbisenc.html">vorbisenc</a></span><span class="refpurpose"> — Encodes audio in Vorbis format</span>
+<span class="refentrytitle"><a href="gst-plugins-base-plugins-timeoverlay.html">timeoverlay</a></span><span class="refpurpose"></span>
 </dt>
 <dt>
-<span class="refentrytitle"><a href="gst-plugins-base-plugins-vorbisparse.html">vorbisparse</a></span><span class="refpurpose"> — parse raw vorbis streams</span>
+<span class="refentrytitle"><a href="gst-plugins-base-plugins-uridecodebin.html">uridecodebin</a></span><span class="refpurpose"></span>
 </dt>
 <dt>
-<span class="refentrytitle"><a href="gst-plugins-base-plugins-vorbistag.html">vorbistag</a></span><span class="refpurpose"> — Retags vorbis streams</span>
+<span class="refentrytitle"><a href="gst-plugins-base-plugins-videoconvert.html">videoconvert</a></span><span class="refpurpose"></span>
 </dt>
 <dt>
-<span class="refentrytitle"><a href="gst-plugins-base-plugins-ximagesink.html">ximagesink</a></span><span class="refpurpose"> — A standard X based videosink</span>
+<span class="refentrytitle"><a href="gst-plugins-base-plugins-videorate.html">videorate</a></span><span class="refpurpose"></span>
 </dt>
 <dt>
-<span class="refentrytitle"><a href="gst-plugins-base-plugins-xvimagesink.html">xvimagesink</a></span><span class="refpurpose"> — A Xv based videosink</span>
+<span class="refentrytitle"><a href="gst-plugins-base-plugins-videoscale.html">videoscale</a></span><span class="refpurpose"></span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-plugins-videotestsrc.html">videotestsrc</a></span><span class="refpurpose"></span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-plugins-volume.html">volume</a></span><span class="refpurpose"></span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-plugins-vorbisdec.html">vorbisdec</a></span><span class="refpurpose"></span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-plugins-vorbisenc.html">vorbisenc</a></span><span class="refpurpose"></span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-plugins-vorbisparse.html">vorbisparse</a></span><span class="refpurpose"></span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-plugins-vorbistag.html">vorbistag</a></span><span class="refpurpose"></span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-plugins-ximagesink.html">ximagesink</a></span><span class="refpurpose"></span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-plugins-xvimagesink.html">xvimagesink</a></span><span class="refpurpose"></span>
 </dt>
 </dl></div>
 </div>
 <div class="footer">
-<hr>
-          Generated by GTK-Doc V1.21</div>
+<hr>Generated by GTK-Doc V1.24</div>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/plugins/html/ch02.html b/docs/plugins/html/ch02.html
index 6650057..d9802a4 100644
--- a/docs/plugins/html/ch02.html
+++ b/docs/plugins/html/ch02.html
@@ -2,13 +2,13 @@
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>GStreamer Base Plugins 1.0 Plugins Reference Manual: gst-plugins-base Plugins</title>
+<title>gst-plugins-base Plugins: GStreamer Base 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 Base Plugins 1.0 Plugins Reference Manual">
 <link rel="up" href="index.html" title="GStreamer Base Plugins 1.0 Plugins Reference Manual">
 <link rel="prev" href="gst-plugins-base-plugins-xvimagesink.html" title="xvimagesink">
 <link rel="next" href="gst-plugins-base-plugins-plugin-adder.html" title="adder">
-<meta name="generator" content="GTK-Doc V1.21 (XML mode)">
+<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">
@@ -24,87 +24,89 @@
 <a name="id-1.3"></a>gst-plugins-base Plugins</h1></div></div></div>
 <div class="toc"><dl class="toc">
 <dt>
-<span class="refentrytitle"><a href="gst-plugins-base-plugins-plugin-adder.html">adder</a></span><span class="refpurpose">Adds multiple streams</span>
+<span class="refentrytitle"><a href="gst-plugins-base-plugins-plugin-adder.html">adder</a></span><span class="refpurpose"> — Adds multiple streams</span>
 </dt>
 <dt>
-<span class="refentrytitle"><a href="gst-plugins-base-plugins-plugin-alsa.html">alsa</a></span><span class="refpurpose">ALSA plugin library</span>
+<span class="refentrytitle"><a href="gst-plugins-base-plugins-plugin-alsa.html">alsa</a></span><span class="refpurpose"> — ALSA plugin library</span>
 </dt>
 <dt>
-<span class="refentrytitle"><a href="gst-plugins-base-plugins-plugin-app.html">app</a></span><span class="refpurpose">Elements used to communicate with applications</span>
+<span class="refentrytitle"><a href="gst-plugins-base-plugins-plugin-app.html">app</a></span><span class="refpurpose"> — Elements used to communicate with applications</span>
 </dt>
 <dt>
-<span class="refentrytitle"><a href="gst-plugins-base-plugins-plugin-audioconvert.html">audioconvert</a></span><span class="refpurpose">Convert audio to different formats</span>
+<span class="refentrytitle"><a href="gst-plugins-base-plugins-plugin-audioconvert.html">audioconvert</a></span><span class="refpurpose"> — Convert audio to different formats</span>
 </dt>
 <dt>
-<span class="refentrytitle"><a href="gst-plugins-base-plugins-plugin-audiorate.html">audiorate</a></span><span class="refpurpose">Adjusts audio frames</span>
+<span class="refentrytitle"><a href="gst-plugins-base-plugins-plugin-audiorate.html">audiorate</a></span><span class="refpurpose"> — Adjusts audio frames</span>
 </dt>
 <dt>
-<span class="refentrytitle"><a href="gst-plugins-base-plugins-plugin-audioresample.html">audioresample</a></span><span class="refpurpose">Resamples audio</span>
+<span class="refentrytitle"><a href="gst-plugins-base-plugins-plugin-audioresample.html">audioresample</a></span><span class="refpurpose"> — Resamples audio</span>
 </dt>
 <dt>
-<span class="refentrytitle"><a href="gst-plugins-base-plugins-plugin-audiotestsrc.html">audiotestsrc</a></span><span class="refpurpose">Creates audio test signals of given frequency and volume</span>
+<span class="refentrytitle"><a href="gst-plugins-base-plugins-plugin-audiotestsrc.html">audiotestsrc</a></span><span class="refpurpose"> — Creates audio test signals of given frequency and volume</span>
 </dt>
 <dt>
-<span class="refentrytitle"><a href="gst-plugins-base-plugins-plugin-cdparanoia.html">cdparanoia</a></span><span class="refpurpose">Read audio from CD in paranoid mode</span>
+<span class="refentrytitle"><a href="gst-plugins-base-plugins-plugin-cdparanoia.html">cdparanoia</a></span><span class="refpurpose"> — Read audio from CD in paranoid mode</span>
 </dt>
 <dt>
-<span class="refentrytitle"><a href="gst-plugins-base-plugins-plugin-encoding.html">encoding</a></span><span class="refpurpose">various encoding-related elements</span>
+<span class="refentrytitle"><a href="gst-plugins-base-plugins-plugin-encoding.html">encoding</a></span><span class="refpurpose"> — various encoding-related elements</span>
 </dt>
 <dt>
-<span class="refentrytitle"><a href="gst-plugins-base-plugins-plugin-videoconvert.html">videoconvert</a></span><span class="refpurpose">Colorspace conversion</span>
+<span class="refentrytitle"><a href="gst-plugins-base-plugins-plugin-gio.html">gio</a></span><span class="refpurpose"> — GIO elements</span>
 </dt>
 <dt>
-<span class="refentrytitle"><a href="gst-plugins-base-plugins-plugin-gio.html">gio</a></span><span class="refpurpose">GIO elements</span>
+<span class="refentrytitle"><a href="gst-plugins-base-plugins-plugin-ivorbisdec.html">ivorbisdec</a></span><span class="refpurpose"> — Vorbis Tremor decoder</span>
 </dt>
 <dt>
-<span class="refentrytitle"><a href="gst-plugins-base-plugins-plugin-libvisual.html">libvisual</a></span><span class="refpurpose">libvisual visualization plugins</span>
+<span class="refentrytitle"><a href="gst-plugins-base-plugins-plugin-libvisual.html">libvisual</a></span><span class="refpurpose"> — libvisual visualization plugins</span>
 </dt>
 <dt>
-<span class="refentrytitle"><a href="gst-plugins-base-plugins-plugin-ogg.html">ogg</a></span><span class="refpurpose">ogg stream manipulation (info about ogg: http://xiph.org)</span>
+<span class="refentrytitle"><a href="gst-plugins-base-plugins-plugin-ogg.html">ogg</a></span><span class="refpurpose"> — ogg stream manipulation (info about ogg: http://xiph.org)</span>
 </dt>
 <dt>
-<span class="refentrytitle"><a href="gst-plugins-base-plugins-plugin-pango.html">pango</a></span><span class="refpurpose">Pango-based text rendering and overlay</span>
+<span class="refentrytitle"><a href="gst-plugins-base-plugins-plugin-pango.html">pango</a></span><span class="refpurpose"> — Pango-based text rendering and overlay</span>
 </dt>
 <dt>
-<span class="refentrytitle"><a href="gst-plugins-base-plugins-plugin-playback.html">playback</a></span><span class="refpurpose">various playback elements</span>
+<span class="refentrytitle"><a href="gst-plugins-base-plugins-plugin-playback.html">playback</a></span><span class="refpurpose"> — various playback elements</span>
 </dt>
 <dt>
-<span class="refentrytitle"><a href="gst-plugins-base-plugins-plugin-subparse.html">subparse</a></span><span class="refpurpose">Subtitle parsing</span>
+<span class="refentrytitle"><a href="gst-plugins-base-plugins-plugin-subparse.html">subparse</a></span><span class="refpurpose"> — Subtitle parsing</span>
 </dt>
 <dt>
-<span class="refentrytitle"><a href="gst-plugins-base-plugins-plugin-tcp.html">tcp</a></span><span class="refpurpose">transfer data over the network via TCP</span>
+<span class="refentrytitle"><a href="gst-plugins-base-plugins-plugin-tcp.html">tcp</a></span><span class="refpurpose"> — transfer data over the network via TCP</span>
 </dt>
 <dt>
-<span class="refentrytitle"><a href="gst-plugins-base-plugins-plugin-theora.html">theora</a></span><span class="refpurpose">Theora plugin library</span>
+<span class="refentrytitle"><a href="gst-plugins-base-plugins-plugin-theora.html">theora</a></span><span class="refpurpose"> — Theora plugin library</span>
 </dt>
 <dt>
-<span class="refentrytitle"><a href="gst-plugins-base-plugins-plugin-typefindfunctions.html">typefindfunctions</a></span><span class="refpurpose">default typefind functions</span>
+<span class="refentrytitle"><a href="gst-plugins-base-plugins-plugin-typefindfunctions.html">typefindfunctions</a></span><span class="refpurpose"> — default typefind functions</span>
 </dt>
 <dt>
-<span class="refentrytitle"><a href="gst-plugins-base-plugins-plugin-videorate.html">videorate</a></span><span class="refpurpose">Adjusts video frames</span>
+<span class="refentrytitle"><a href="gst-plugins-base-plugins-plugin-videoconvert.html">videoconvert</a></span><span class="refpurpose"> — Colorspace conversion</span>
 </dt>
 <dt>
-<span class="refentrytitle"><a href="gst-plugins-base-plugins-plugin-videoscale.html">videoscale</a></span><span class="refpurpose">Resizes video</span>
+<span class="refentrytitle"><a href="gst-plugins-base-plugins-plugin-videorate.html">videorate</a></span><span class="refpurpose"> — Adjusts video frames</span>
 </dt>
 <dt>
-<span class="refentrytitle"><a href="gst-plugins-base-plugins-plugin-videotestsrc.html">videotestsrc</a></span><span class="refpurpose">Creates a test video stream</span>
+<span class="refentrytitle"><a href="gst-plugins-base-plugins-plugin-videoscale.html">videoscale</a></span><span class="refpurpose"> — Resizes video</span>
 </dt>
 <dt>
-<span class="refentrytitle"><a href="gst-plugins-base-plugins-plugin-volume.html">volume</a></span><span class="refpurpose">plugin for controlling audio volume</span>
+<span class="refentrytitle"><a href="gst-plugins-base-plugins-plugin-videotestsrc.html">videotestsrc</a></span><span class="refpurpose"> — Creates a test video stream</span>
 </dt>
 <dt>
-<span class="refentrytitle"><a href="gst-plugins-base-plugins-plugin-vorbis.html">vorbis</a></span><span class="refpurpose">Vorbis plugin library</span>
+<span class="refentrytitle"><a href="gst-plugins-base-plugins-plugin-volume.html">volume</a></span><span class="refpurpose"> — plugin for controlling audio volume</span>
 </dt>
 <dt>
-<span class="refentrytitle"><a href="gst-plugins-base-plugins-plugin-ximagesink.html">ximagesink</a></span><span class="refpurpose">X11 video output element based on standard Xlib calls</span>
+<span class="refentrytitle"><a href="gst-plugins-base-plugins-plugin-vorbis.html">vorbis</a></span><span class="refpurpose"> — Vorbis plugin library</span>
 </dt>
 <dt>
-<span class="refentrytitle"><a href="gst-plugins-base-plugins-plugin-xvimagesink.html">xvimagesink</a></span><span class="refpurpose">XFree86 video output plugin using Xv extension</span>
+<span class="refentrytitle"><a href="gst-plugins-base-plugins-plugin-ximagesink.html">ximagesink</a></span><span class="refpurpose"> — X11 video output element based on standard Xlib calls</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-plugins-plugin-xvimagesink.html">xvimagesink</a></span><span class="refpurpose"> — XFree86 video output plugin using Xv extension</span>
 </dt>
 </dl></div>
 </div>
 <div class="footer">
-<hr>
-          Generated by GTK-Doc V1.21</div>
+<hr>Generated by GTK-Doc V1.24</div>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/plugins/html/gst-plugins-base-plugins-1.0.devhelp2 b/docs/plugins/html/gst-plugins-base-plugins-1.0.devhelp2
index c69f95b..6749db0 100644
--- a/docs/plugins/html/gst-plugins-base-plugins-1.0.devhelp2
+++ b/docs/plugins/html/gst-plugins-base-plugins-1.0.devhelp2
@@ -1,13 +1,12 @@
 <?xml version="1.0" encoding="utf-8" standalone="no"?>
-<!DOCTYPE book PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "">
 <book xmlns="http://www.devhelp.net/book" title="GStreamer Base Plugins 1.0 Plugins Reference Manual" link="index.html" author="" name="gst-plugins-base-plugins-1.0" version="2" language="c">
   <chapters>
     <sub name="gst-plugins-base Elements" link="ch01.html">
       <sub name="adder" link="gst-plugins-base-plugins-adder.html"/>
-      <sub name="appsrc" link="gst-plugins-base-plugins-appsrc.html"/>
-      <sub name="appsink" link="gst-plugins-base-plugins-appsink.html"/>
       <sub name="alsasink" link="gst-plugins-base-plugins-alsasink.html"/>
       <sub name="alsasrc" link="gst-plugins-base-plugins-alsasrc.html"/>
+      <sub name="appsink" link="gst-plugins-base-plugins-appsink.html"/>
+      <sub name="appsrc" link="gst-plugins-base-plugins-appsrc.html"/>
       <sub name="audioconvert" link="gst-plugins-base-plugins-audioconvert.html"/>
       <sub name="audiorate" link="gst-plugins-base-plugins-audiorate.html"/>
       <sub name="audioresample" link="gst-plugins-base-plugins-audioresample.html"/>
@@ -16,23 +15,30 @@
       <sub name="clockoverlay" link="gst-plugins-base-plugins-clockoverlay.html"/>
       <sub name="decodebin" link="gst-plugins-base-plugins-decodebin.html"/>
       <sub name="encodebin" link="gst-plugins-base-plugins-encodebin.html"/>
-      <sub name="videoconvert" link="gst-plugins-base-plugins-videoconvert.html"/>
       <sub name="giosink" link="gst-plugins-base-plugins-giosink.html"/>
       <sub name="giosrc" link="gst-plugins-base-plugins-giosrc.html"/>
       <sub name="giostreamsink" link="gst-plugins-base-plugins-giostreamsink.html"/>
       <sub name="giostreamsrc" link="gst-plugins-base-plugins-giostreamsrc.html"/>
       <sub name="multifdsink" link="gst-plugins-base-plugins-multifdsink.html"/>
       <sub name="multisocketsink" link="gst-plugins-base-plugins-multisocketsink.html"/>
+      <sub name="oggaviparse" link="gst-plugins-base-plugins-oggaviparse.html"/>
       <sub name="oggdemux" link="gst-plugins-base-plugins-oggdemux.html"/>
       <sub name="oggmux" link="gst-plugins-base-plugins-oggmux.html"/>
+      <sub name="oggparse" link="gst-plugins-base-plugins-oggparse.html"/>
+      <sub name="ogmaudioparse" link="gst-plugins-base-plugins-ogmaudioparse.html"/>
+      <sub name="ogmtextparse" link="gst-plugins-base-plugins-ogmtextparse.html"/>
+      <sub name="ogmvideoparse" link="gst-plugins-base-plugins-ogmvideoparse.html"/>
       <sub name="playbin" link="gst-plugins-base-plugins-playbin.html"/>
       <sub name="playsink" link="gst-plugins-base-plugins-playsink.html"/>
+      <sub name="socketsrc" link="gst-plugins-base-plugins-socketsrc.html"/>
+      <sub name="ssaparse" link="gst-plugins-base-plugins-ssaparse.html"/>
       <sub name="streamsynchronizer" link="gst-plugins-base-plugins-streamsynchronizer.html"/>
+      <sub name="subparse" link="gst-plugins-base-plugins-subparse.html"/>
       <sub name="subtitleoverlay" link="gst-plugins-base-plugins-subtitleoverlay.html"/>
-      <sub name="tcpclientsrc" link="gst-plugins-base-plugins-tcpclientsrc.html"/>
       <sub name="tcpclientsink" link="gst-plugins-base-plugins-tcpclientsink.html"/>
-      <sub name="tcpserversrc" link="gst-plugins-base-plugins-tcpserversrc.html"/>
+      <sub name="tcpclientsrc" link="gst-plugins-base-plugins-tcpclientsrc.html"/>
       <sub name="tcpserversink" link="gst-plugins-base-plugins-tcpserversink.html"/>
+      <sub name="tcpserversrc" link="gst-plugins-base-plugins-tcpserversrc.html"/>
       <sub name="textoverlay" link="gst-plugins-base-plugins-textoverlay.html"/>
       <sub name="textrender" link="gst-plugins-base-plugins-textrender.html"/>
       <sub name="theoradec" link="gst-plugins-base-plugins-theoradec.html"/>
@@ -40,6 +46,7 @@
       <sub name="theoraparse" link="gst-plugins-base-plugins-theoraparse.html"/>
       <sub name="timeoverlay" link="gst-plugins-base-plugins-timeoverlay.html"/>
       <sub name="uridecodebin" link="gst-plugins-base-plugins-uridecodebin.html"/>
+      <sub name="videoconvert" link="gst-plugins-base-plugins-videoconvert.html"/>
       <sub name="videorate" link="gst-plugins-base-plugins-videorate.html"/>
       <sub name="videoscale" link="gst-plugins-base-plugins-videoscale.html"/>
       <sub name="videotestsrc" link="gst-plugins-base-plugins-videotestsrc.html"/>
@@ -61,8 +68,8 @@
       <sub name="audiotestsrc" link="gst-plugins-base-plugins-plugin-audiotestsrc.html"/>
       <sub name="cdparanoia" link="gst-plugins-base-plugins-plugin-cdparanoia.html"/>
       <sub name="encoding" link="gst-plugins-base-plugins-plugin-encoding.html"/>
-      <sub name="videoconvert" link="gst-plugins-base-plugins-plugin-videoconvert.html"/>
       <sub name="gio" link="gst-plugins-base-plugins-plugin-gio.html"/>
+      <sub name="ivorbisdec" link="gst-plugins-base-plugins-plugin-ivorbisdec.html"/>
       <sub name="libvisual" link="gst-plugins-base-plugins-plugin-libvisual.html"/>
       <sub name="ogg" link="gst-plugins-base-plugins-plugin-ogg.html"/>
       <sub name="pango" link="gst-plugins-base-plugins-plugin-pango.html"/>
@@ -71,6 +78,7 @@
       <sub name="tcp" link="gst-plugins-base-plugins-plugin-tcp.html"/>
       <sub name="theora" link="gst-plugins-base-plugins-plugin-theora.html"/>
       <sub name="typefindfunctions" link="gst-plugins-base-plugins-plugin-typefindfunctions.html"/>
+      <sub name="videoconvert" link="gst-plugins-base-plugins-plugin-videoconvert.html"/>
       <sub name="videorate" link="gst-plugins-base-plugins-plugin-videorate.html"/>
       <sub name="videoscale" link="gst-plugins-base-plugins-plugin-videoscale.html"/>
       <sub name="videotestsrc" link="gst-plugins-base-plugins-plugin-videotestsrc.html"/>
@@ -81,13 +89,27 @@
     </sub>
   </chapters>
   <functions>
-    <keyword type="" name="Example launch line" link="gst-plugins-base-plugins-adder.html#id-1.2.2.8.4"/>
-    <keyword type="" name="Element Information" link="gst-plugins-base-plugins-adder.html#id-1.2.2.8.5.1"/>
-    <keyword type="" name="Element Pads" link="gst-plugins-base-plugins-adder.html#id-1.2.2.8.5.2"/>
     <keyword type="struct" name="struct GstAdder" link="gst-plugins-base-plugins-adder.html#GstAdder-struct"/>
     <keyword type="property" name="The “caps” property" link="gst-plugins-base-plugins-adder.html#GstAdder--caps"/>
-    <keyword type="" name="Element Information" link="gst-plugins-base-plugins-appsrc.html#id-1.2.3.9.5.1.1"/>
-    <keyword type="" name="Element Pads" link="gst-plugins-base-plugins-appsrc.html#id-1.2.3.9.5.1.2"/>
+    <keyword type="struct" name="struct GstAlsaSink" link="gst-plugins-base-plugins-alsasink.html#GstAlsaSink-struct"/>
+    <keyword type="property" name="The “card-name” property" link="gst-plugins-base-plugins-alsasink.html#GstAlsaSink--card-name"/>
+    <keyword type="property" name="The “device” property" link="gst-plugins-base-plugins-alsasink.html#GstAlsaSink--device"/>
+    <keyword type="property" name="The “device-name” property" link="gst-plugins-base-plugins-alsasink.html#GstAlsaSink--device-name"/>
+    <keyword type="struct" name="struct GstAlsaSrc" link="gst-plugins-base-plugins-alsasrc.html#GstAlsaSrc-struct"/>
+    <keyword type="property" name="The “card-name” property" link="gst-plugins-base-plugins-alsasrc.html#GstAlsaSrc--card-name"/>
+    <keyword type="property" name="The “device” property" link="gst-plugins-base-plugins-alsasrc.html#GstAlsaSrc--device"/>
+    <keyword type="property" name="The “device-name” property" link="gst-plugins-base-plugins-alsasrc.html#GstAlsaSrc--device-name"/>
+    <keyword type="struct" name="struct GstAppSink" link="gst-plugins-base-plugins-appsink.html#GstAppSink-struct"/>
+    <keyword type="property" name="The “caps” property" link="gst-plugins-base-plugins-appsink.html#GstAppSink--caps"/>
+    <keyword type="property" name="The “drop” property" link="gst-plugins-base-plugins-appsink.html#GstAppSink--drop"/>
+    <keyword type="property" name="The “emit-signals” property" link="gst-plugins-base-plugins-appsink.html#GstAppSink--emit-signals"/>
+    <keyword type="property" name="The “eos” property" link="gst-plugins-base-plugins-appsink.html#GstAppSink--eos"/>
+    <keyword type="property" name="The “max-buffers” property" link="gst-plugins-base-plugins-appsink.html#GstAppSink--max-buffers"/>
+    <keyword type="signal" name="The “eos” signal" link="gst-plugins-base-plugins-appsink.html#GstAppSink-eos"/>
+    <keyword type="signal" name="The “new-preroll” signal" link="gst-plugins-base-plugins-appsink.html#GstAppSink-new-preroll"/>
+    <keyword type="signal" name="The “new-sample” signal" link="gst-plugins-base-plugins-appsink.html#GstAppSink-new-sample"/>
+    <keyword type="signal" name="The “pull-preroll” signal" link="gst-plugins-base-plugins-appsink.html#GstAppSink-pull-preroll"/>
+    <keyword type="signal" name="The “pull-sample” signal" link="gst-plugins-base-plugins-appsink.html#GstAppSink-pull-sample"/>
     <keyword type="struct" name="struct GstAppSrc" link="gst-plugins-base-plugins-appsrc.html#GstAppSrc-struct"/>
     <keyword type="property" name="The “block” property" link="gst-plugins-base-plugins-appsrc.html#GstAppSrc--block"/>
     <keyword type="property" name="The “caps” property" link="gst-plugins-base-plugins-appsrc.html#GstAppSrc--caps"/>
@@ -106,42 +128,12 @@
     <keyword type="signal" name="The “need-data” signal" link="gst-plugins-base-plugins-appsrc.html#GstAppSrc-need-data"/>
     <keyword type="signal" name="The “push-buffer” signal" link="gst-plugins-base-plugins-appsrc.html#GstAppSrc-push-buffer"/>
     <keyword type="signal" name="The “seek-data” signal" link="gst-plugins-base-plugins-appsrc.html#GstAppSrc-seek-data"/>
-    <keyword type="" name="Element Information" link="gst-plugins-base-plugins-appsink.html#id-1.2.4.9.5.1.1"/>
-    <keyword type="" name="Element Pads" link="gst-plugins-base-plugins-appsink.html#id-1.2.4.9.5.1.2"/>
-    <keyword type="struct" name="struct GstAppSink" link="gst-plugins-base-plugins-appsink.html#GstAppSink-struct"/>
-    <keyword type="property" name="The “caps” property" link="gst-plugins-base-plugins-appsink.html#GstAppSink--caps"/>
-    <keyword type="property" name="The “drop” property" link="gst-plugins-base-plugins-appsink.html#GstAppSink--drop"/>
-    <keyword type="property" name="The “emit-signals” property" link="gst-plugins-base-plugins-appsink.html#GstAppSink--emit-signals"/>
-    <keyword type="property" name="The “eos” property" link="gst-plugins-base-plugins-appsink.html#GstAppSink--eos"/>
-    <keyword type="property" name="The “max-buffers” property" link="gst-plugins-base-plugins-appsink.html#GstAppSink--max-buffers"/>
-    <keyword type="signal" name="The “eos” signal" link="gst-plugins-base-plugins-appsink.html#GstAppSink-eos"/>
-    <keyword type="signal" name="The “new-preroll” signal" link="gst-plugins-base-plugins-appsink.html#GstAppSink-new-preroll"/>
-    <keyword type="signal" name="The “new-sample” signal" link="gst-plugins-base-plugins-appsink.html#GstAppSink-new-sample"/>
-    <keyword type="signal" name="The “pull-preroll” signal" link="gst-plugins-base-plugins-appsink.html#GstAppSink-pull-preroll"/>
-    <keyword type="signal" name="The “pull-sample” signal" link="gst-plugins-base-plugins-appsink.html#GstAppSink-pull-sample"/>
-    <keyword type="" name="Element Information" link="gst-plugins-base-plugins-alsasink.html#id-1.2.5.7.2.1"/>
-    <keyword type="" name="Element Pads" link="gst-plugins-base-plugins-alsasink.html#id-1.2.5.7.2.2"/>
-    <keyword type="struct" name="struct GstAlsaSink" link="gst-plugins-base-plugins-alsasink.html#GstAlsaSink-struct"/>
-    <keyword type="property" name="The “card-name” property" link="gst-plugins-base-plugins-alsasink.html#GstAlsaSink--card-name"/>
-    <keyword type="property" name="The “device” property" link="gst-plugins-base-plugins-alsasink.html#GstAlsaSink--device"/>
-    <keyword type="property" name="The “device-name” property" link="gst-plugins-base-plugins-alsasink.html#GstAlsaSink--device-name"/>
-    <keyword type="" name="Element Information" link="gst-plugins-base-plugins-alsasrc.html#id-1.2.6.7.2.1"/>
-    <keyword type="" name="Element Pads" link="gst-plugins-base-plugins-alsasrc.html#id-1.2.6.7.2.2"/>
-    <keyword type="struct" name="struct GstAlsaSrc" link="gst-plugins-base-plugins-alsasrc.html#GstAlsaSrc-struct"/>
-    <keyword type="property" name="The “card-name” property" link="gst-plugins-base-plugins-alsasrc.html#GstAlsaSrc--card-name"/>
-    <keyword type="property" name="The “device” property" link="gst-plugins-base-plugins-alsasrc.html#GstAlsaSrc--device"/>
-    <keyword type="property" name="The “device-name” property" link="gst-plugins-base-plugins-alsasrc.html#GstAlsaSrc--device-name"/>
-    <keyword type="" name="Example launch line" link="gst-plugins-base-plugins-audioconvert.html#id-1.2.7.7.3"/>
-    <keyword type="" name="Element Information" link="gst-plugins-base-plugins-audioconvert.html#id-1.2.7.7.4.1"/>
-    <keyword type="" name="Element Pads" link="gst-plugins-base-plugins-audioconvert.html#id-1.2.7.7.4.2"/>
+    <keyword type="signal" name="The “push-sample” signal" link="gst-plugins-base-plugins-appsrc.html#GstAppSrc-push-sample"/>
     <keyword type="struct" name="struct GstAudioConvert" link="gst-plugins-base-plugins-audioconvert.html#GstAudioConvert-struct"/>
     <keyword type="enum" name="enum GstAudioConvertDithering" link="gst-plugins-base-plugins-audioconvert.html#GstAudioConvertDithering"/>
     <keyword type="enum" name="enum GstAudioConvertNoiseShaping" link="gst-plugins-base-plugins-audioconvert.html#GstAudioConvertNoiseShaping"/>
     <keyword type="property" name="The “dithering” property" link="gst-plugins-base-plugins-audioconvert.html#GstAudioConvert--dithering"/>
     <keyword type="property" name="The “noise-shaping” property" link="gst-plugins-base-plugins-audioconvert.html#GstAudioConvert--noise-shaping"/>
-    <keyword type="" name="Example pipelines" link="gst-plugins-base-plugins-audiorate.html#id-1.2.8.7.7"/>
-    <keyword type="" name="Element Information" link="gst-plugins-base-plugins-audiorate.html#id-1.2.8.7.8.1"/>
-    <keyword type="" name="Element Pads" link="gst-plugins-base-plugins-audiorate.html#id-1.2.8.7.8.2"/>
     <keyword type="struct" name="struct GstAudioRate" link="gst-plugins-base-plugins-audiorate.html#GstAudioRate-struct"/>
     <keyword type="property" name="The “add” property" link="gst-plugins-base-plugins-audiorate.html#GstAudioRate--add"/>
     <keyword type="property" name="The “drop” property" link="gst-plugins-base-plugins-audiorate.html#GstAudioRate--drop"/>
@@ -150,16 +142,10 @@
     <keyword type="property" name="The “silent” property" link="gst-plugins-base-plugins-audiorate.html#GstAudioRate--silent"/>
     <keyword type="property" name="The “skip-to-first” property" link="gst-plugins-base-plugins-audiorate.html#GstAudioRate--skip-to-first"/>
     <keyword type="property" name="The “tolerance” property" link="gst-plugins-base-plugins-audiorate.html#GstAudioRate--tolerance"/>
-    <keyword type="" name="Example launch line" link="gst-plugins-base-plugins-audioresample.html#id-1.2.9.7.4"/>
-    <keyword type="" name="Element Information" link="gst-plugins-base-plugins-audioresample.html#id-1.2.9.7.5.1"/>
-    <keyword type="" name="Element Pads" link="gst-plugins-base-plugins-audioresample.html#id-1.2.9.7.5.2"/>
     <keyword type="struct" name="struct GstAudioResample" link="gst-plugins-base-plugins-audioresample.html#GstAudioResample-struct"/>
     <keyword type="property" name="The “quality” property" link="gst-plugins-base-plugins-audioresample.html#GstAudioResample--quality"/>
     <keyword type="property" name="The “sinc-filter-auto-threshold” property" link="gst-plugins-base-plugins-audioresample.html#GstAudioResample--sinc-filter-auto-threshold"/>
     <keyword type="property" name="The “sinc-filter-mode” property" link="gst-plugins-base-plugins-audioresample.html#GstAudioResample--sinc-filter-mode"/>
-    <keyword type="" name="Example launch line" link="gst-plugins-base-plugins-audiotestsrc.html#id-1.2.10.7.3"/>
-    <keyword type="" name="Element Information" link="gst-plugins-base-plugins-audiotestsrc.html#id-1.2.10.7.4.1"/>
-    <keyword type="" name="Element Pads" link="gst-plugins-base-plugins-audiotestsrc.html#id-1.2.10.7.4.2"/>
     <keyword type="struct" name="struct GstAudioTestSrc" link="gst-plugins-base-plugins-audiotestsrc.html#GstAudioTestSrc-struct"/>
     <keyword type="enum" name="enum GstAudioTestSrcWave" link="gst-plugins-base-plugins-audiotestsrc.html#GstAudioTestSrcWave"/>
     <keyword type="property" name="The “can-activate-pull” property" link="gst-plugins-base-plugins-audiotestsrc.html#GstAudioTestSrc--can-activate-pull"/>
@@ -170,8 +156,6 @@
     <keyword type="property" name="The “timestamp-offset” property" link="gst-plugins-base-plugins-audiotestsrc.html#GstAudioTestSrc--timestamp-offset"/>
     <keyword type="property" name="The “volume” property" link="gst-plugins-base-plugins-audiotestsrc.html#GstAudioTestSrc--volume"/>
     <keyword type="property" name="The “wave” property" link="gst-plugins-base-plugins-audiotestsrc.html#GstAudioTestSrc--wave"/>
-    <keyword type="" name="Element Information" link="gst-plugins-base-plugins-cdparanoiasrc.html#id-1.2.11.9.2.1"/>
-    <keyword type="" name="Element Pads" link="gst-plugins-base-plugins-cdparanoiasrc.html#id-1.2.11.9.2.2"/>
     <keyword type="struct" name="struct GstCdParanoiaSrc" link="gst-plugins-base-plugins-cdparanoiasrc.html#GstCdParanoiaSrc-struct"/>
     <keyword type="property" name="The “cache-size” property" link="gst-plugins-base-plugins-cdparanoiasrc.html#GstCdParanoiaSrc--cache-size"/>
     <keyword type="property" name="The “generic-device” property" link="gst-plugins-base-plugins-cdparanoiasrc.html#GstCdParanoiaSrc--generic-device"/>
@@ -180,12 +164,8 @@
     <keyword type="property" name="The “search-overlap” property" link="gst-plugins-base-plugins-cdparanoiasrc.html#GstCdParanoiaSrc--search-overlap"/>
     <keyword type="signal" name="The “transport-error” signal" link="gst-plugins-base-plugins-cdparanoiasrc.html#GstCdParanoiaSrc-transport-error"/>
     <keyword type="signal" name="The “uncorrected-error” signal" link="gst-plugins-base-plugins-cdparanoiasrc.html#GstCdParanoiaSrc-uncorrected-error"/>
-    <keyword type="" name="Element Information" link="gst-plugins-base-plugins-clockoverlay.html#id-1.2.12.7.2.1"/>
-    <keyword type="" name="Element Pads" link="gst-plugins-base-plugins-clockoverlay.html#id-1.2.12.7.2.2"/>
     <keyword type="struct" name="struct GstClockOverlay" link="gst-plugins-base-plugins-clockoverlay.html#GstClockOverlay-struct"/>
     <keyword type="property" name="The “time-format” property" link="gst-plugins-base-plugins-clockoverlay.html#GstClockOverlay--time-format"/>
-    <keyword type="" name="Element Information" link="gst-plugins-base-plugins-decodebin.html#id-1.2.13.9.3.3.1"/>
-    <keyword type="" name="Element Pads" link="gst-plugins-base-plugins-decodebin.html#id-1.2.13.9.3.3.2"/>
     <keyword type="struct" name="struct GstDecodeBin" link="gst-plugins-base-plugins-decodebin.html#GstDecodeBin-struct"/>
     <keyword type="property" name="The “caps” property" link="gst-plugins-base-plugins-decodebin.html#GstDecodeBin--caps"/>
     <keyword type="property" name="The “connection-speed” property" link="gst-plugins-base-plugins-decodebin.html#GstDecodeBin--connection-speed"/>
@@ -206,9 +186,6 @@
     <keyword type="signal" name="The “autoplug-sort” signal" link="gst-plugins-base-plugins-decodebin.html#GstDecodeBin-autoplug-sort"/>
     <keyword type="signal" name="The “drained” signal" link="gst-plugins-base-plugins-decodebin.html#GstDecodeBin-drained"/>
     <keyword type="signal" name="The “unknown-type” signal" link="gst-plugins-base-plugins-decodebin.html#GstDecodeBin-unknown-type"/>
-    <keyword type="" name="Features" link="gst-plugins-base-plugins-encodebin.html#id-1.2.14.9.4"/>
-    <keyword type="" name="Element Information" link="gst-plugins-base-plugins-encodebin.html#id-1.2.14.9.5.1"/>
-    <keyword type="" name="Element Pads" link="gst-plugins-base-plugins-encodebin.html#id-1.2.14.9.5.2"/>
     <keyword type="struct" name="GstEncodeBin" link="gst-plugins-base-plugins-encodebin.html#GstEncodeBin-struct"/>
     <keyword type="property" name="The “audio-jitter-tolerance” property" link="gst-plugins-base-plugins-encodebin.html#GstEncodeBin--audio-jitter-tolerance"/>
     <keyword type="property" name="The “avoid-reencoding” property" link="gst-plugins-base-plugins-encodebin.html#GstEncodeBin--avoid-reencoding"/>
@@ -219,35 +196,16 @@
     <keyword type="property" name="The “queue-time-max” property" link="gst-plugins-base-plugins-encodebin.html#GstEncodeBin--queue-time-max"/>
     <keyword type="signal" name="The “request-pad” signal" link="gst-plugins-base-plugins-encodebin.html#GstEncodeBin-request-pad"/>
     <keyword type="signal" name="The “request-profile-pad” signal" link="gst-plugins-base-plugins-encodebin.html#GstEncodeBin-request-profile-pad"/>
-    <keyword type="" name="Example launch line" link="gst-plugins-base-plugins-videoconvert.html#id-1.2.15.7.3"/>
-    <keyword type="" name="Element Information" link="gst-plugins-base-plugins-videoconvert.html#id-1.2.15.7.4.1"/>
-    <keyword type="" name="Element Pads" link="gst-plugins-base-plugins-videoconvert.html#id-1.2.15.7.4.2"/>
-    <keyword type="struct" name="struct GstVideoConvert" link="gst-plugins-base-plugins-videoconvert.html#GstVideoConvert-struct"/>
-    <keyword type="property" name="The “dither” property" link="gst-plugins-base-plugins-videoconvert.html#GstVideoConvert--dither"/>
-    <keyword type="" name="Example pipelines" link="gst-plugins-base-plugins-giosink.html#id-1.2.16.8.5"/>
-    <keyword type="" name="Element Information" link="gst-plugins-base-plugins-giosink.html#id-1.2.16.8.6.1"/>
-    <keyword type="" name="Element Pads" link="gst-plugins-base-plugins-giosink.html#id-1.2.16.8.6.2"/>
     <keyword type="struct" name="struct GstGioSink" link="gst-plugins-base-plugins-giosink.html#GstGioSink-struct"/>
     <keyword type="property" name="The “file” property" link="gst-plugins-base-plugins-giosink.html#GstGioSink--file"/>
     <keyword type="property" name="The “location” property" link="gst-plugins-base-plugins-giosink.html#GstGioSink--location"/>
-    <keyword type="" name="Example launch lines" link="gst-plugins-base-plugins-giosrc.html#id-1.2.17.8.4"/>
-    <keyword type="" name="Element Information" link="gst-plugins-base-plugins-giosrc.html#id-1.2.17.8.5.1"/>
-    <keyword type="" name="Element Pads" link="gst-plugins-base-plugins-giosrc.html#id-1.2.17.8.5.2"/>
     <keyword type="struct" name="struct GstGioSrc" link="gst-plugins-base-plugins-giosrc.html#GstGioSrc-struct"/>
     <keyword type="property" name="The “file” property" link="gst-plugins-base-plugins-giosrc.html#GstGioSrc--file"/>
     <keyword type="property" name="The “location” property" link="gst-plugins-base-plugins-giosrc.html#GstGioSrc--location"/>
-    <keyword type="" name="Example code" link="gst-plugins-base-plugins-giostreamsink.html#id-1.2.18.7.4"/>
-    <keyword type="" name="Element Information" link="gst-plugins-base-plugins-giostreamsink.html#id-1.2.18.7.5.1"/>
-    <keyword type="" name="Element Pads" link="gst-plugins-base-plugins-giostreamsink.html#id-1.2.18.7.5.2"/>
     <keyword type="struct" name="struct GstGioStreamSink" link="gst-plugins-base-plugins-giostreamsink.html#GstGioStreamSink-struct"/>
     <keyword type="property" name="The “stream” property" link="gst-plugins-base-plugins-giostreamsink.html#GstGioStreamSink--stream"/>
-    <keyword type="" name="Example code" link="gst-plugins-base-plugins-giostreamsrc.html#id-1.2.19.7.4"/>
-    <keyword type="" name="Element Information" link="gst-plugins-base-plugins-giostreamsrc.html#id-1.2.19.7.5.1"/>
-    <keyword type="" name="Element Pads" link="gst-plugins-base-plugins-giostreamsrc.html#id-1.2.19.7.5.2"/>
     <keyword type="struct" name="struct GstGioStreamSrc" link="gst-plugins-base-plugins-giostreamsrc.html#GstGioStreamSrc-struct"/>
     <keyword type="property" name="The “stream” property" link="gst-plugins-base-plugins-giostreamsrc.html#GstGioStreamSrc--stream"/>
-    <keyword type="" name="Element Information" link="gst-plugins-base-plugins-multifdsink.html#id-1.2.20.8.12.1.1"/>
-    <keyword type="" name="Element Pads" link="gst-plugins-base-plugins-multifdsink.html#id-1.2.20.8.12.1.2"/>
     <keyword type="struct" name="struct GstMultiFdSink" link="gst-plugins-base-plugins-multifdsink.html#GstMultiFdSink-struct"/>
     <keyword type="enum" name="enum GstRecoverPolicy" link="gst-plugins-base-plugins-multifdsink.html#GstRecoverPolicy"/>
     <keyword type="enum" name="enum GstSyncMethod" link="gst-plugins-base-plugins-multifdsink.html#GstSyncMethod"/>
@@ -261,8 +219,6 @@
     <keyword type="signal" name="The “get-stats” signal" link="gst-plugins-base-plugins-multifdsink.html#GstMultiFdSink-get-stats"/>
     <keyword type="signal" name="The “remove” signal" link="gst-plugins-base-plugins-multifdsink.html#GstMultiFdSink-remove"/>
     <keyword type="signal" name="The “remove-flush” signal" link="gst-plugins-base-plugins-multifdsink.html#GstMultiFdSink-remove-flush"/>
-    <keyword type="" name="Element Information" link="gst-plugins-base-plugins-multisocketsink.html#id-1.2.21.7.11.1.1"/>
-    <keyword type="" name="Element Pads" link="gst-plugins-base-plugins-multisocketsink.html#id-1.2.21.7.11.1.2"/>
     <keyword type="struct" name="struct GstMultiSocketSink" link="gst-plugins-base-plugins-multisocketsink.html#GstMultiSocketSink-struct"/>
     <keyword type="enum" name="enum GstRecoverPolicy" link="gst-plugins-base-plugins-multisocketsink.html#GstRecoverPolicy"/>
     <keyword type="enum" name="enum GstSyncMethod" link="gst-plugins-base-plugins-multisocketsink.html#GstSyncMethod"/>
@@ -275,26 +231,12 @@
     <keyword type="signal" name="The “get-stats” signal" link="gst-plugins-base-plugins-multisocketsink.html#GstMultiSocketSink-get-stats"/>
     <keyword type="signal" name="The “remove” signal" link="gst-plugins-base-plugins-multisocketsink.html#GstMultiSocketSink-remove"/>
     <keyword type="signal" name="The “remove-flush” signal" link="gst-plugins-base-plugins-multisocketsink.html#GstMultiSocketSink-remove-flush"/>
-    <keyword type="" name="Element Information" link="gst-plugins-base-plugins-oggdemux.html#id-1.2.22.6.2.1"/>
-    <keyword type="" name="Element Pads" link="gst-plugins-base-plugins-oggdemux.html#id-1.2.22.6.2.2"/>
     <keyword type="struct" name="struct GstOggDemux" link="gst-plugins-base-plugins-oggdemux.html#GstOggDemux-struct"/>
-    <keyword type="" name="Element Information" link="gst-plugins-base-plugins-oggmux.html#id-1.2.23.8.2.1"/>
-    <keyword type="" name="Element Pads" link="gst-plugins-base-plugins-oggmux.html#id-1.2.23.8.2.2"/>
     <keyword type="struct" name="struct GstOggMux" link="gst-plugins-base-plugins-oggmux.html#GstOggMux-struct"/>
     <keyword type="property" name="The “max-delay” property" link="gst-plugins-base-plugins-oggmux.html#GstOggMux--max-delay"/>
     <keyword type="property" name="The “max-page-delay” property" link="gst-plugins-base-plugins-oggmux.html#GstOggMux--max-page-delay"/>
     <keyword type="property" name="The “max-tolerance” property" link="gst-plugins-base-plugins-oggmux.html#GstOggMux--max-tolerance"/>
     <keyword type="property" name="The “skeleton” property" link="gst-plugins-base-plugins-oggmux.html#GstOggMux--skeleton"/>
-    <keyword type="" name="Usage" link="gst-plugins-base-plugins-playbin.html#id-1.2.24.9.5"/>
-    <keyword type="" name="Advanced Usage: specifying the audio and video sink" link="gst-plugins-base-plugins-playbin.html#id-1.2.24.9.6"/>
-    <keyword type="" name="Retrieving Tags and Other Meta Data" link="gst-plugins-base-plugins-playbin.html#id-1.2.24.9.7"/>
-    <keyword type="" name="Buffering" link="gst-plugins-base-plugins-playbin.html#id-1.2.24.9.8"/>
-    <keyword type="" name="Embedding the video window in your application" link="gst-plugins-base-plugins-playbin.html#id-1.2.24.9.9"/>
-    <keyword type="" name="Specifying which CD/DVD device to use" link="gst-plugins-base-plugins-playbin.html#id-1.2.24.9.10"/>
-    <keyword type="" name="Handling redirects" link="gst-plugins-base-plugins-playbin.html#id-1.2.24.9.11"/>
-    <keyword type="" name="Examples" link="gst-plugins-base-plugins-playbin.html#id-1.2.24.9.12"/>
-    <keyword type="" name="Element Information" link="gst-plugins-base-plugins-playbin.html#id-1.2.24.9.13.1"/>
-    <keyword type="" name="Element Pads" link="gst-plugins-base-plugins-playbin.html#id-1.2.24.9.13.2"/>
     <keyword type="struct" name="struct GstPlayBin" link="gst-plugins-base-plugins-playbin.html#GstPlayBin-struct"/>
     <keyword type="enum" name="enum GstPlayFlags" link="gst-plugins-base-plugins-playbin.html#GstPlayFlags"/>
     <keyword type="property" name="The “audio-sink” property" link="gst-plugins-base-plugins-playbin.html#GstPlayBin--audio-sink"/>
@@ -329,6 +271,8 @@
     <keyword type="property" name="The “volume” property" link="gst-plugins-base-plugins-playbin.html#GstPlayBin--volume"/>
     <keyword type="property" name="The “audio-filter” property" link="gst-plugins-base-plugins-playbin.html#GstPlayBin--audio-filter"/>
     <keyword type="property" name="The “video-filter” property" link="gst-plugins-base-plugins-playbin.html#GstPlayBin--video-filter"/>
+    <keyword type="property" name="The “video-multiview-flags” property" link="gst-plugins-base-plugins-playbin.html#GstPlayBin--video-multiview-flags"/>
+    <keyword type="property" name="The “video-multiview-mode” property" link="gst-plugins-base-plugins-playbin.html#GstPlayBin--video-multiview-mode"/>
     <keyword type="signal" name="The “about-to-finish” signal" link="gst-plugins-base-plugins-playbin.html#GstPlayBin-about-to-finish"/>
     <keyword type="signal" name="The “audio-changed” signal" link="gst-plugins-base-plugins-playbin.html#GstPlayBin-audio-changed"/>
     <keyword type="signal" name="The “audio-tags-changed” signal" link="gst-plugins-base-plugins-playbin.html#GstPlayBin-audio-tags-changed"/>
@@ -344,8 +288,6 @@
     <keyword type="signal" name="The “text-tags-changed” signal" link="gst-plugins-base-plugins-playbin.html#GstPlayBin-text-tags-changed"/>
     <keyword type="signal" name="The “video-changed” signal" link="gst-plugins-base-plugins-playbin.html#GstPlayBin-video-changed"/>
     <keyword type="signal" name="The “video-tags-changed” signal" link="gst-plugins-base-plugins-playbin.html#GstPlayBin-video-tags-changed"/>
-    <keyword type="" name="Element Information" link="gst-plugins-base-plugins-playsink.html#id-1.2.25.9.2.1"/>
-    <keyword type="" name="Element Pads" link="gst-plugins-base-plugins-playsink.html#id-1.2.25.9.2.2"/>
     <keyword type="struct" name="GstPlaySink" link="gst-plugins-base-plugins-playsink.html#GstPlaySink-struct"/>
     <keyword type="property" name="The “audio-sink” property" link="gst-plugins-base-plugins-playsink.html#GstPlaySink--audio-sink"/>
     <keyword type="property" name="The “av-offset” property" link="gst-plugins-base-plugins-playsink.html#GstPlaySink--av-offset"/>
@@ -364,47 +306,34 @@
     <keyword type="property" name="The “video-filter” property" link="gst-plugins-base-plugins-playsink.html#GstPlaySink--video-filter"/>
     <keyword type="signal" name="The “convert-sample” signal" link="gst-plugins-base-plugins-playsink.html#GstPlaySink-convert-sample"/>
     <keyword type="signal" name="The “reconfigure” signal" link="gst-plugins-base-plugins-playsink.html#GstPlaySink-reconfigure"/>
-    <keyword type="" name="Element Information" link="gst-plugins-base-plugins-streamsynchronizer.html#id-1.2.26.6.2.1"/>
-    <keyword type="" name="Element Pads" link="gst-plugins-base-plugins-streamsynchronizer.html#id-1.2.26.6.2.2"/>
+    <keyword type="struct" name="struct GstSocketSrc" link="gst-plugins-base-plugins-socketsrc.html#GstSocketSrc-struct"/>
+    <keyword type="property" name="The “socket” property" link="gst-plugins-base-plugins-socketsrc.html#GstSocketSrc--socket"/>
+    <keyword type="property" name="The “caps” property" link="gst-plugins-base-plugins-socketsrc.html#GstSocketSrc--caps"/>
+    <keyword type="signal" name="The “connection-closed-by-peer” signal" link="gst-plugins-base-plugins-socketsrc.html#GstSocketSrc-connection-closed-by-peer"/>
+    <keyword type="struct" name="struct GstSsaParse" link="gst-plugins-base-plugins-ssaparse.html#GstSsaParse-struct"/>
     <keyword type="struct" name="struct GstStreamSynchronizer" link="gst-plugins-base-plugins-streamsynchronizer.html#GstStreamSynchronizer-struct"/>
-    <keyword type="" name="Examples" link="gst-plugins-base-plugins-subtitleoverlay.html#id-1.2.27.8.4"/>
-    <keyword type="" name="Element Information" link="gst-plugins-base-plugins-subtitleoverlay.html#id-1.2.27.8.5.1"/>
-    <keyword type="" name="Element Pads" link="gst-plugins-base-plugins-subtitleoverlay.html#id-1.2.27.8.5.2"/>
+    <keyword type="struct" name="struct GstSubParse" link="gst-plugins-base-plugins-subparse.html#GstSubParse-struct"/>
+    <keyword type="property" name="The “subtitle-encoding” property" link="gst-plugins-base-plugins-subparse.html#GstSubParse--subtitle-encoding"/>
+    <keyword type="property" name="The “video-fps” property" link="gst-plugins-base-plugins-subparse.html#GstSubParse--video-fps"/>
     <keyword type="struct" name="struct GstSubtitleOverlay" link="gst-plugins-base-plugins-subtitleoverlay.html#GstSubtitleOverlay-struct"/>
     <keyword type="property" name="The “font-desc” property" link="gst-plugins-base-plugins-subtitleoverlay.html#GstSubtitleOverlay--font-desc"/>
     <keyword type="property" name="The “silent” property" link="gst-plugins-base-plugins-subtitleoverlay.html#GstSubtitleOverlay--silent"/>
     <keyword type="property" name="The “subtitle-encoding” property" link="gst-plugins-base-plugins-subtitleoverlay.html#GstSubtitleOverlay--subtitle-encoding"/>
-    <keyword type="" name="Example launch line" link="gst-plugins-base-plugins-tcpclientsrc.html#id-1.2.28.7.2"/>
-    <keyword type="" name="Element Information" link="gst-plugins-base-plugins-tcpclientsrc.html#id-1.2.28.7.3.1"/>
-    <keyword type="" name="Element Pads" link="gst-plugins-base-plugins-tcpclientsrc.html#id-1.2.28.7.3.2"/>
-    <keyword type="struct" name="struct GstTCPClientSrc" link="gst-plugins-base-plugins-tcpclientsrc.html#GstTCPClientSrc-struct"/>
-    <keyword type="property" name="The “host” property" link="gst-plugins-base-plugins-tcpclientsrc.html#GstTCPClientSrc--host"/>
-    <keyword type="property" name="The “port” property" link="gst-plugins-base-plugins-tcpclientsrc.html#GstTCPClientSrc--port"/>
-    <keyword type="" name="Example launch line" link="gst-plugins-base-plugins-tcpclientsink.html#id-1.2.29.7.2"/>
-    <keyword type="" name="Element Information" link="gst-plugins-base-plugins-tcpclientsink.html#id-1.2.29.7.3.1"/>
-    <keyword type="" name="Element Pads" link="gst-plugins-base-plugins-tcpclientsink.html#id-1.2.29.7.3.2"/>
     <keyword type="struct" name="struct GstTCPClientSink" link="gst-plugins-base-plugins-tcpclientsink.html#GstTCPClientSink-struct"/>
     <keyword type="property" name="The “host” property" link="gst-plugins-base-plugins-tcpclientsink.html#GstTCPClientSink--host"/>
     <keyword type="property" name="The “port” property" link="gst-plugins-base-plugins-tcpclientsink.html#GstTCPClientSink--port"/>
-    <keyword type="" name="Example launch line" link="gst-plugins-base-plugins-tcpserversrc.html#id-1.2.30.7.2"/>
-    <keyword type="" name="Element Information" link="gst-plugins-base-plugins-tcpserversrc.html#id-1.2.30.7.3.1"/>
-    <keyword type="" name="Element Pads" link="gst-plugins-base-plugins-tcpserversrc.html#id-1.2.30.7.3.2"/>
-    <keyword type="struct" name="struct GstTCPServerSrc" link="gst-plugins-base-plugins-tcpserversrc.html#GstTCPServerSrc-struct"/>
-    <keyword type="property" name="The “current-port” property" link="gst-plugins-base-plugins-tcpserversrc.html#GstTCPServerSrc--current-port"/>
-    <keyword type="property" name="The “host” property" link="gst-plugins-base-plugins-tcpserversrc.html#GstTCPServerSrc--host"/>
-    <keyword type="property" name="The “port” property" link="gst-plugins-base-plugins-tcpserversrc.html#GstTCPServerSrc--port"/>
-    <keyword type="" name="Example launch line" link="gst-plugins-base-plugins-tcpserversink.html#id-1.2.31.7.2"/>
-    <keyword type="" name="Element Information" link="gst-plugins-base-plugins-tcpserversink.html#id-1.2.31.7.3.1"/>
-    <keyword type="" name="Element Pads" link="gst-plugins-base-plugins-tcpserversink.html#id-1.2.31.7.3.2"/>
+    <keyword type="struct" name="struct GstTCPClientSrc" link="gst-plugins-base-plugins-tcpclientsrc.html#GstTCPClientSrc-struct"/>
+    <keyword type="property" name="The “host” property" link="gst-plugins-base-plugins-tcpclientsrc.html#GstTCPClientSrc--host"/>
+    <keyword type="property" name="The “port” property" link="gst-plugins-base-plugins-tcpclientsrc.html#GstTCPClientSrc--port"/>
     <keyword type="struct" name="struct GstTCPServerSink" link="gst-plugins-base-plugins-tcpserversink.html#GstTCPServerSink-struct"/>
     <keyword type="property" name="The “current-port” property" link="gst-plugins-base-plugins-tcpserversink.html#GstTCPServerSink--current-port"/>
     <keyword type="property" name="The “host” property" link="gst-plugins-base-plugins-tcpserversink.html#GstTCPServerSink--host"/>
     <keyword type="property" name="The “port” property" link="gst-plugins-base-plugins-tcpserversink.html#GstTCPServerSink--port"/>
-    <keyword type="" name="Element Information" link="gst-plugins-base-plugins-textoverlay.html#id-1.2.32.6.2.1"/>
-    <keyword type="" name="Element Pads" link="gst-plugins-base-plugins-textoverlay.html#id-1.2.32.6.2.2"/>
+    <keyword type="struct" name="struct GstTCPServerSrc" link="gst-plugins-base-plugins-tcpserversrc.html#GstTCPServerSrc-struct"/>
+    <keyword type="property" name="The “current-port” property" link="gst-plugins-base-plugins-tcpserversrc.html#GstTCPServerSrc--current-port"/>
+    <keyword type="property" name="The “host” property" link="gst-plugins-base-plugins-tcpserversrc.html#GstTCPServerSrc--host"/>
+    <keyword type="property" name="The “port” property" link="gst-plugins-base-plugins-tcpserversrc.html#GstTCPServerSrc--port"/>
     <keyword type="struct" name="struct GstTextOverlay" link="gst-plugins-base-plugins-textoverlay.html#GstTextOverlay-struct"/>
-    <keyword type="" name="Element Information" link="gst-plugins-base-plugins-textrender.html#id-1.2.33.7.2.1"/>
-    <keyword type="" name="Element Pads" link="gst-plugins-base-plugins-textrender.html#id-1.2.33.7.2.2"/>
     <keyword type="struct" name="struct GstTextRender" link="gst-plugins-base-plugins-textrender.html#GstTextRender-struct"/>
     <keyword type="property" name="The “font-desc” property" link="gst-plugins-base-plugins-textrender.html#GstTextRender--font-desc"/>
     <keyword type="property" name="The “halignment” property" link="gst-plugins-base-plugins-textrender.html#GstTextRender--halignment"/>
@@ -412,12 +341,9 @@
     <keyword type="property" name="The “valignment” property" link="gst-plugins-base-plugins-textrender.html#GstTextRender--valignment"/>
     <keyword type="property" name="The “xpad” property" link="gst-plugins-base-plugins-textrender.html#GstTextRender--xpad"/>
     <keyword type="property" name="The “ypad” property" link="gst-plugins-base-plugins-textrender.html#GstTextRender--ypad"/>
-    <keyword type="" name="Element Information" link="gst-plugins-base-plugins-theoradec.html#id-1.2.34.6.2.1"/>
-    <keyword type="" name="Element Pads" link="gst-plugins-base-plugins-theoradec.html#id-1.2.34.6.2.2"/>
     <keyword type="struct" name="struct GstTheoraDec" link="gst-plugins-base-plugins-theoradec.html#GstTheoraDec-struct"/>
-    <keyword type="" name="Element Information" link="gst-plugins-base-plugins-theoraenc.html#id-1.2.35.8.2.1"/>
-    <keyword type="" name="Element Pads" link="gst-plugins-base-plugins-theoraenc.html#id-1.2.35.8.2.2"/>
     <keyword type="struct" name="struct GstTheoraEnc" link="gst-plugins-base-plugins-theoraenc.html#GstTheoraEnc-struct"/>
+    <keyword type="enum" name="enum GstTheoraEncMultipassMode" link="gst-plugins-base-plugins-theoraenc.html#GstTheoraEncMultipassMode"/>
     <keyword type="property" name="The “bitrate” property" link="gst-plugins-base-plugins-theoraenc.html#GstTheoraEnc--bitrate"/>
     <keyword type="property" name="The “cap-overflow” property" link="gst-plugins-base-plugins-theoraenc.html#GstTheoraEnc--cap-overflow"/>
     <keyword type="property" name="The “cap-underflow” property" link="gst-plugins-base-plugins-theoraenc.html#GstTheoraEnc--cap-underflow"/>
@@ -431,14 +357,10 @@
     <keyword type="property" name="The “rate-buffer” property" link="gst-plugins-base-plugins-theoraenc.html#GstTheoraEnc--rate-buffer"/>
     <keyword type="property" name="The “speed-level” property" link="gst-plugins-base-plugins-theoraenc.html#GstTheoraEnc--speed-level"/>
     <keyword type="property" name="The “vp3-compatible” property" link="gst-plugins-base-plugins-theoraenc.html#GstTheoraEnc--vp3-compatible"/>
-    <keyword type="" name="Element Information" link="gst-plugins-base-plugins-theoraparse.html#id-1.2.36.6.2.1"/>
-    <keyword type="" name="Element Pads" link="gst-plugins-base-plugins-theoraparse.html#id-1.2.36.6.2.2"/>
     <keyword type="struct" name="struct GstTheoraParse" link="gst-plugins-base-plugins-theoraparse.html#GstTheoraParse-struct"/>
-    <keyword type="" name="Element Information" link="gst-plugins-base-plugins-timeoverlay.html#id-1.2.37.6.2.1"/>
-    <keyword type="" name="Element Pads" link="gst-plugins-base-plugins-timeoverlay.html#id-1.2.37.6.2.2"/>
     <keyword type="struct" name="struct GstTimeOverlay" link="gst-plugins-base-plugins-timeoverlay.html#GstTimeOverlay-struct"/>
-    <keyword type="" name="Element Information" link="gst-plugins-base-plugins-uridecodebin.html#id-1.2.38.9.2.2.1"/>
-    <keyword type="" name="Element Pads" link="gst-plugins-base-plugins-uridecodebin.html#id-1.2.38.9.2.2.2"/>
+    <keyword type="enum" name="enum GstTimeOverlayTimeLine" link="gst-plugins-base-plugins-timeoverlay.html#GstTimeOverlayTimeLine"/>
+    <keyword type="property" name="The “time-mode” property" link="gst-plugins-base-plugins-timeoverlay.html#GstTimeOverlay--time-mode"/>
     <keyword type="struct" name="struct GstURIDecodeBin" link="gst-plugins-base-plugins-uridecodebin.html#GstURIDecodeBin-struct"/>
     <keyword type="enum" name="enum GstAutoplugSelectResult" link="gst-plugins-base-plugins-uridecodebin.html#GstAutoplugSelectResult"/>
     <keyword type="property" name="The “buffer-duration” property" link="gst-plugins-base-plugins-uridecodebin.html#GstURIDecodeBin--buffer-duration"/>
@@ -460,9 +382,16 @@
     <keyword type="signal" name="The “drained” signal" link="gst-plugins-base-plugins-uridecodebin.html#GstURIDecodeBin-drained"/>
     <keyword type="signal" name="The “source-setup” signal" link="gst-plugins-base-plugins-uridecodebin.html#GstURIDecodeBin-source-setup"/>
     <keyword type="signal" name="The “unknown-type” signal" link="gst-plugins-base-plugins-uridecodebin.html#GstURIDecodeBin-unknown-type"/>
-    <keyword type="" name="Example pipelines" link="gst-plugins-base-plugins-videorate.html#id-1.2.39.7.10"/>
-    <keyword type="" name="Element Information" link="gst-plugins-base-plugins-videorate.html#id-1.2.39.7.11.1"/>
-    <keyword type="" name="Element Pads" link="gst-plugins-base-plugins-videorate.html#id-1.2.39.7.11.2"/>
+    <keyword type="struct" name="struct GstVideoConvert" link="gst-plugins-base-plugins-videoconvert.html#GstVideoConvert-struct"/>
+    <keyword type="property" name="The “dither” property" link="gst-plugins-base-plugins-videoconvert.html#GstVideoConvert--dither"/>
+    <keyword type="property" name="The “alpha-mode” property" link="gst-plugins-base-plugins-videoconvert.html#GstVideoConvert--alpha-mode"/>
+    <keyword type="property" name="The “alpha-value” property" link="gst-plugins-base-plugins-videoconvert.html#GstVideoConvert--alpha-value"/>
+    <keyword type="property" name="The “chroma-mode” property" link="gst-plugins-base-plugins-videoconvert.html#GstVideoConvert--chroma-mode"/>
+    <keyword type="property" name="The “chroma-resampler” property" link="gst-plugins-base-plugins-videoconvert.html#GstVideoConvert--chroma-resampler"/>
+    <keyword type="property" name="The “dither-quantization” property" link="gst-plugins-base-plugins-videoconvert.html#GstVideoConvert--dither-quantization"/>
+    <keyword type="property" name="The “gamma-mode” property" link="gst-plugins-base-plugins-videoconvert.html#GstVideoConvert--gamma-mode"/>
+    <keyword type="property" name="The “matrix-mode” property" link="gst-plugins-base-plugins-videoconvert.html#GstVideoConvert--matrix-mode"/>
+    <keyword type="property" name="The “primaries-mode” property" link="gst-plugins-base-plugins-videoconvert.html#GstVideoConvert--primaries-mode"/>
     <keyword type="struct" name="struct GstVideoRate" link="gst-plugins-base-plugins-videorate.html#GstVideoRate-struct"/>
     <keyword type="property" name="The “average-period” property" link="gst-plugins-base-plugins-videorate.html#GstVideoRate--average-period"/>
     <keyword type="property" name="The “drop” property" link="gst-plugins-base-plugins-videorate.html#GstVideoRate--drop"/>
@@ -474,9 +403,6 @@
     <keyword type="property" name="The “out” property" link="gst-plugins-base-plugins-videorate.html#GstVideoRate--out"/>
     <keyword type="property" name="The “silent” property" link="gst-plugins-base-plugins-videorate.html#GstVideoRate--silent"/>
     <keyword type="property" name="The “skip-to-first” property" link="gst-plugins-base-plugins-videorate.html#GstVideoRate--skip-to-first"/>
-    <keyword type="" name="Example pipelines" link="gst-plugins-base-plugins-videoscale.html#id-1.2.40.7.4"/>
-    <keyword type="" name="Element Information" link="gst-plugins-base-plugins-videoscale.html#id-1.2.40.7.5.1"/>
-    <keyword type="" name="Element Pads" link="gst-plugins-base-plugins-videoscale.html#id-1.2.40.7.5.2"/>
     <keyword type="struct" name="struct GstVideoScale" link="gst-plugins-base-plugins-videoscale.html#GstVideoScale-struct"/>
     <keyword type="enum" name="enum GstVideoScaleMethod" link="gst-plugins-base-plugins-videoscale.html#GstVideoScaleMethod"/>
     <keyword type="property" name="The “add-borders” property" link="gst-plugins-base-plugins-videoscale.html#GstVideoScale--add-borders"/>
@@ -485,9 +411,7 @@
     <keyword type="property" name="The “method” property" link="gst-plugins-base-plugins-videoscale.html#GstVideoScale--method"/>
     <keyword type="property" name="The “sharpen” property" link="gst-plugins-base-plugins-videoscale.html#GstVideoScale--sharpen"/>
     <keyword type="property" name="The “sharpness” property" link="gst-plugins-base-plugins-videoscale.html#GstVideoScale--sharpness"/>
-    <keyword type="" name="Example launch line" link="gst-plugins-base-plugins-videotestsrc.html#id-1.2.41.7.3"/>
-    <keyword type="" name="Element Information" link="gst-plugins-base-plugins-videotestsrc.html#id-1.2.41.7.4.1"/>
-    <keyword type="" name="Element Pads" link="gst-plugins-base-plugins-videotestsrc.html#id-1.2.41.7.4.2"/>
+    <keyword type="property" name="The “gamma-decode” property" link="gst-plugins-base-plugins-videoscale.html#GstVideoScale--gamma-decode"/>
     <keyword type="struct" name="struct GstVideoTestSrc" link="gst-plugins-base-plugins-videotestsrc.html#GstVideoTestSrc-struct"/>
     <keyword type="enum" name="enum GstVideoTestSrcPattern" link="gst-plugins-base-plugins-videotestsrc.html#GstVideoTestSrcPattern"/>
     <keyword type="property" name="The “background-color” property" link="gst-plugins-base-plugins-videotestsrc.html#GstVideoTestSrc--background-color"/>
@@ -508,17 +432,10 @@
     <keyword type="property" name="The “timestamp-offset” property" link="gst-plugins-base-plugins-videotestsrc.html#GstVideoTestSrc--timestamp-offset"/>
     <keyword type="property" name="The “xoffset” property" link="gst-plugins-base-plugins-videotestsrc.html#GstVideoTestSrc--xoffset"/>
     <keyword type="property" name="The “yoffset” property" link="gst-plugins-base-plugins-videotestsrc.html#GstVideoTestSrc--yoffset"/>
-    <keyword type="" name="Example launch line" link="gst-plugins-base-plugins-volume.html#id-1.2.42.8.3"/>
-    <keyword type="" name="Element Information" link="gst-plugins-base-plugins-volume.html#id-1.2.42.8.4.1"/>
-    <keyword type="" name="Element Pads" link="gst-plugins-base-plugins-volume.html#id-1.2.42.8.4.2"/>
     <keyword type="struct" name="struct GstVolume" link="gst-plugins-base-plugins-volume.html#GstVolume-struct"/>
     <keyword type="property" name="The “mute” property" link="gst-plugins-base-plugins-volume.html#GstVolume--mute"/>
     <keyword type="property" name="The “volume” property" link="gst-plugins-base-plugins-volume.html#GstVolume--volume"/>
-    <keyword type="" name="Element Information" link="gst-plugins-base-plugins-vorbisdec.html#id-1.2.43.6.2.1"/>
-    <keyword type="" name="Element Pads" link="gst-plugins-base-plugins-vorbisdec.html#id-1.2.43.6.2.2"/>
     <keyword type="struct" name="struct GstVorbisDec" link="gst-plugins-base-plugins-vorbisdec.html#GstVorbisDec-struct"/>
-    <keyword type="" name="Element Information" link="gst-plugins-base-plugins-vorbisenc.html#id-1.2.44.8.2.1"/>
-    <keyword type="" name="Element Pads" link="gst-plugins-base-plugins-vorbisenc.html#id-1.2.44.8.2.2"/>
     <keyword type="struct" name="struct GstVorbisEnc" link="gst-plugins-base-plugins-vorbisenc.html#GstVorbisEnc-struct"/>
     <keyword type="property" name="The “bitrate” property" link="gst-plugins-base-plugins-vorbisenc.html#GstVorbisEnc--bitrate"/>
     <keyword type="property" name="The “last-message” property" link="gst-plugins-base-plugins-vorbisenc.html#GstVorbisEnc--last-message"/>
@@ -526,14 +443,8 @@
     <keyword type="property" name="The “max-bitrate” property" link="gst-plugins-base-plugins-vorbisenc.html#GstVorbisEnc--max-bitrate"/>
     <keyword type="property" name="The “min-bitrate” property" link="gst-plugins-base-plugins-vorbisenc.html#GstVorbisEnc--min-bitrate"/>
     <keyword type="property" name="The “quality” property" link="gst-plugins-base-plugins-vorbisenc.html#GstVorbisEnc--quality"/>
-    <keyword type="" name="Element Information" link="gst-plugins-base-plugins-vorbisparse.html#id-1.2.45.6.2.1"/>
-    <keyword type="" name="Element Pads" link="gst-plugins-base-plugins-vorbisparse.html#id-1.2.45.6.2.2"/>
     <keyword type="struct" name="struct GstVorbisParse" link="gst-plugins-base-plugins-vorbisparse.html#GstVorbisParse-struct"/>
-    <keyword type="" name="Element Information" link="gst-plugins-base-plugins-vorbistag.html#id-1.2.46.7.2.1"/>
-    <keyword type="" name="Element Pads" link="gst-plugins-base-plugins-vorbistag.html#id-1.2.46.7.2.2"/>
     <keyword type="struct" name="struct GstVorbisTag" link="gst-plugins-base-plugins-vorbistag.html#GstVorbisTag-struct"/>
-    <keyword type="" name="Element Information" link="gst-plugins-base-plugins-ximagesink.html#id-1.2.47.8.2.1"/>
-    <keyword type="" name="Element Pads" link="gst-plugins-base-plugins-ximagesink.html#id-1.2.47.8.2.2"/>
     <keyword type="struct" name="struct GstXImageSink" link="gst-plugins-base-plugins-ximagesink.html#GstXImageSink-struct"/>
     <keyword type="property" name="The “display” property" link="gst-plugins-base-plugins-ximagesink.html#GstXImageSink--display"/>
     <keyword type="property" name="The “force-aspect-ratio” property" link="gst-plugins-base-plugins-ximagesink.html#GstXImageSink--force-aspect-ratio"/>
@@ -543,8 +454,6 @@
     <keyword type="property" name="The “synchronous” property" link="gst-plugins-base-plugins-ximagesink.html#GstXImageSink--synchronous"/>
     <keyword type="property" name="The “window-height” property" link="gst-plugins-base-plugins-ximagesink.html#GstXImageSink--window-height"/>
     <keyword type="property" name="The “window-width” property" link="gst-plugins-base-plugins-ximagesink.html#GstXImageSink--window-width"/>
-    <keyword type="" name="Element Information" link="gst-plugins-base-plugins-xvimagesink.html#id-1.2.48.8.2.1"/>
-    <keyword type="" name="Element Pads" link="gst-plugins-base-plugins-xvimagesink.html#id-1.2.48.8.2.2"/>
     <keyword type="struct" name="struct GstXvImageSink" link="gst-plugins-base-plugins-xvimagesink.html#GstXvImageSink-struct"/>
     <keyword type="property" name="The “autopaint-colorkey” property" link="gst-plugins-base-plugins-xvimagesink.html#GstXvImageSink--autopaint-colorkey"/>
     <keyword type="property" name="The “brightness” property" link="gst-plugins-base-plugins-xvimagesink.html#GstXvImageSink--brightness"/>
@@ -564,5 +473,117 @@
     <keyword type="property" name="The “synchronous” property" link="gst-plugins-base-plugins-xvimagesink.html#GstXvImageSink--synchronous"/>
     <keyword type="property" name="The “window-height” property" link="gst-plugins-base-plugins-xvimagesink.html#GstXvImageSink--window-height"/>
     <keyword type="property" name="The “window-width” property" link="gst-plugins-base-plugins-xvimagesink.html#GstXvImageSink--window-width"/>
+    <keyword type="constant" name="DITHER_NONE" link="gst-plugins-base-plugins-audioconvert.html#DITHER-NONE:CAPS"/>
+    <keyword type="constant" name="DITHER_RPDF" link="gst-plugins-base-plugins-audioconvert.html#DITHER-RPDF:CAPS"/>
+    <keyword type="constant" name="DITHER_TPDF" link="gst-plugins-base-plugins-audioconvert.html#DITHER-TPDF:CAPS"/>
+    <keyword type="constant" name="DITHER_TPDF_HF" link="gst-plugins-base-plugins-audioconvert.html#DITHER-TPDF-HF:CAPS"/>
+    <keyword type="constant" name="NOISE_SHAPING_NONE" link="gst-plugins-base-plugins-audioconvert.html#NOISE-SHAPING-NONE:CAPS"/>
+    <keyword type="constant" name="NOISE_SHAPING_ERROR_FEEDBACK" link="gst-plugins-base-plugins-audioconvert.html#NOISE-SHAPING-ERROR-FEEDBACK:CAPS"/>
+    <keyword type="constant" name="NOISE_SHAPING_SIMPLE" link="gst-plugins-base-plugins-audioconvert.html#NOISE-SHAPING-SIMPLE:CAPS"/>
+    <keyword type="constant" name="NOISE_SHAPING_MEDIUM" link="gst-plugins-base-plugins-audioconvert.html#NOISE-SHAPING-MEDIUM:CAPS"/>
+    <keyword type="constant" name="NOISE_SHAPING_HIGH" link="gst-plugins-base-plugins-audioconvert.html#NOISE-SHAPING-HIGH:CAPS"/>
+    <keyword type="constant" name="GST_AUDIO_TEST_SRC_WAVE_SINE" link="gst-plugins-base-plugins-audiotestsrc.html#GST-AUDIO-TEST-SRC-WAVE-SINE:CAPS"/>
+    <keyword type="constant" name="GST_AUDIO_TEST_SRC_WAVE_SQUARE" link="gst-plugins-base-plugins-audiotestsrc.html#GST-AUDIO-TEST-SRC-WAVE-SQUARE:CAPS"/>
+    <keyword type="constant" name="GST_AUDIO_TEST_SRC_WAVE_SAW" link="gst-plugins-base-plugins-audiotestsrc.html#GST-AUDIO-TEST-SRC-WAVE-SAW:CAPS"/>
+    <keyword type="constant" name="GST_AUDIO_TEST_SRC_WAVE_TRIANGLE" link="gst-plugins-base-plugins-audiotestsrc.html#GST-AUDIO-TEST-SRC-WAVE-TRIANGLE:CAPS"/>
+    <keyword type="constant" name="GST_AUDIO_TEST_SRC_WAVE_SILENCE" link="gst-plugins-base-plugins-audiotestsrc.html#GST-AUDIO-TEST-SRC-WAVE-SILENCE:CAPS"/>
+    <keyword type="constant" name="GST_AUDIO_TEST_SRC_WAVE_WHITE_NOISE" link="gst-plugins-base-plugins-audiotestsrc.html#GST-AUDIO-TEST-SRC-WAVE-WHITE-NOISE:CAPS"/>
+    <keyword type="constant" name="GST_AUDIO_TEST_SRC_WAVE_PINK_NOISE" link="gst-plugins-base-plugins-audiotestsrc.html#GST-AUDIO-TEST-SRC-WAVE-PINK-NOISE:CAPS"/>
+    <keyword type="constant" name="GST_AUDIO_TEST_SRC_WAVE_SINE_TAB" link="gst-plugins-base-plugins-audiotestsrc.html#GST-AUDIO-TEST-SRC-WAVE-SINE-TAB:CAPS"/>
+    <keyword type="constant" name="GST_AUDIO_TEST_SRC_WAVE_TICKS" link="gst-plugins-base-plugins-audiotestsrc.html#GST-AUDIO-TEST-SRC-WAVE-TICKS:CAPS"/>
+    <keyword type="constant" name="GST_AUDIO_TEST_SRC_WAVE_GAUSSIAN_WHITE_NOISE" link="gst-plugins-base-plugins-audiotestsrc.html#GST-AUDIO-TEST-SRC-WAVE-GAUSSIAN-WHITE-NOISE:CAPS"/>
+    <keyword type="constant" name="GST_AUDIO_TEST_SRC_WAVE_RED_NOISE" link="gst-plugins-base-plugins-audiotestsrc.html#GST-AUDIO-TEST-SRC-WAVE-RED-NOISE:CAPS"/>
+    <keyword type="constant" name="GST_AUDIO_TEST_SRC_WAVE_BLUE_NOISE" link="gst-plugins-base-plugins-audiotestsrc.html#GST-AUDIO-TEST-SRC-WAVE-BLUE-NOISE:CAPS"/>
+    <keyword type="constant" name="GST_AUDIO_TEST_SRC_WAVE_VIOLET_NOISE" link="gst-plugins-base-plugins-audiotestsrc.html#GST-AUDIO-TEST-SRC-WAVE-VIOLET-NOISE:CAPS"/>
+    <keyword type="constant" name="GST_RECOVER_POLICY_NONE" link="gst-plugins-base-plugins-multifdsink.html#GST-RECOVER-POLICY-NONE:CAPS"/>
+    <keyword type="constant" name="GST_RECOVER_POLICY_RESYNC_LATEST" link="gst-plugins-base-plugins-multifdsink.html#GST-RECOVER-POLICY-RESYNC-LATEST:CAPS"/>
+    <keyword type="constant" name="GST_RECOVER_POLICY_RESYNC_SOFT_LIMIT" link="gst-plugins-base-plugins-multifdsink.html#GST-RECOVER-POLICY-RESYNC-SOFT-LIMIT:CAPS"/>
+    <keyword type="constant" name="GST_RECOVER_POLICY_RESYNC_KEYFRAME" link="gst-plugins-base-plugins-multifdsink.html#GST-RECOVER-POLICY-RESYNC-KEYFRAME:CAPS"/>
+    <keyword type="constant" name="GST_SYNC_METHOD_LATEST" link="gst-plugins-base-plugins-multifdsink.html#GST-SYNC-METHOD-LATEST:CAPS"/>
+    <keyword type="constant" name="GST_SYNC_METHOD_NEXT_KEYFRAME" link="gst-plugins-base-plugins-multifdsink.html#GST-SYNC-METHOD-NEXT-KEYFRAME:CAPS"/>
+    <keyword type="constant" name="GST_SYNC_METHOD_LATEST_KEYFRAME" link="gst-plugins-base-plugins-multifdsink.html#GST-SYNC-METHOD-LATEST-KEYFRAME:CAPS"/>
+    <keyword type="constant" name="GST_SYNC_METHOD_BURST" link="gst-plugins-base-plugins-multifdsink.html#GST-SYNC-METHOD-BURST:CAPS"/>
+    <keyword type="constant" name="GST_SYNC_METHOD_BURST_KEYFRAME" link="gst-plugins-base-plugins-multifdsink.html#GST-SYNC-METHOD-BURST-KEYFRAME:CAPS"/>
+    <keyword type="constant" name="GST_SYNC_METHOD_BURST_WITH_KEYFRAME" link="gst-plugins-base-plugins-multifdsink.html#GST-SYNC-METHOD-BURST-WITH-KEYFRAME:CAPS"/>
+    <keyword type="constant" name="GST_CLIENT_STATUS_OK" link="gst-plugins-base-plugins-multifdsink.html#GST-CLIENT-STATUS-OK:CAPS"/>
+    <keyword type="constant" name="GST_CLIENT_STATUS_CLOSED" link="gst-plugins-base-plugins-multifdsink.html#GST-CLIENT-STATUS-CLOSED:CAPS"/>
+    <keyword type="constant" name="GST_CLIENT_STATUS_REMOVED" link="gst-plugins-base-plugins-multifdsink.html#GST-CLIENT-STATUS-REMOVED:CAPS"/>
+    <keyword type="constant" name="GST_CLIENT_STATUS_SLOW" link="gst-plugins-base-plugins-multifdsink.html#GST-CLIENT-STATUS-SLOW:CAPS"/>
+    <keyword type="constant" name="GST_CLIENT_STATUS_ERROR" link="gst-plugins-base-plugins-multifdsink.html#GST-CLIENT-STATUS-ERROR:CAPS"/>
+    <keyword type="constant" name="GST_CLIENT_STATUS_DUPLICATE" link="gst-plugins-base-plugins-multifdsink.html#GST-CLIENT-STATUS-DUPLICATE:CAPS"/>
+    <keyword type="constant" name="GST_CLIENT_STATUS_FLUSHING" link="gst-plugins-base-plugins-multifdsink.html#GST-CLIENT-STATUS-FLUSHING:CAPS"/>
+    <keyword type="constant" name="GST_RECOVER_POLICY_NONE" link="gst-plugins-base-plugins-multisocketsink.html#GST-RECOVER-POLICY-NONE:CAPS"/>
+    <keyword type="constant" name="GST_RECOVER_POLICY_RESYNC_LATEST" link="gst-plugins-base-plugins-multisocketsink.html#GST-RECOVER-POLICY-RESYNC-LATEST:CAPS"/>
+    <keyword type="constant" name="GST_RECOVER_POLICY_RESYNC_SOFT_LIMIT" link="gst-plugins-base-plugins-multisocketsink.html#GST-RECOVER-POLICY-RESYNC-SOFT-LIMIT:CAPS"/>
+    <keyword type="constant" name="GST_RECOVER_POLICY_RESYNC_KEYFRAME" link="gst-plugins-base-plugins-multisocketsink.html#GST-RECOVER-POLICY-RESYNC-KEYFRAME:CAPS"/>
+    <keyword type="constant" name="GST_SYNC_METHOD_LATEST" link="gst-plugins-base-plugins-multisocketsink.html#GST-SYNC-METHOD-LATEST:CAPS"/>
+    <keyword type="constant" name="GST_SYNC_METHOD_NEXT_KEYFRAME" link="gst-plugins-base-plugins-multisocketsink.html#GST-SYNC-METHOD-NEXT-KEYFRAME:CAPS"/>
+    <keyword type="constant" name="GST_SYNC_METHOD_LATEST_KEYFRAME" link="gst-plugins-base-plugins-multisocketsink.html#GST-SYNC-METHOD-LATEST-KEYFRAME:CAPS"/>
+    <keyword type="constant" name="GST_SYNC_METHOD_BURST" link="gst-plugins-base-plugins-multisocketsink.html#GST-SYNC-METHOD-BURST:CAPS"/>
+    <keyword type="constant" name="GST_SYNC_METHOD_BURST_KEYFRAME" link="gst-plugins-base-plugins-multisocketsink.html#GST-SYNC-METHOD-BURST-KEYFRAME:CAPS"/>
+    <keyword type="constant" name="GST_SYNC_METHOD_BURST_WITH_KEYFRAME" link="gst-plugins-base-plugins-multisocketsink.html#GST-SYNC-METHOD-BURST-WITH-KEYFRAME:CAPS"/>
+    <keyword type="constant" name="GST_CLIENT_STATUS_OK" link="gst-plugins-base-plugins-multisocketsink.html#GST-CLIENT-STATUS-OK:CAPS"/>
+    <keyword type="constant" name="GST_CLIENT_STATUS_CLOSED" link="gst-plugins-base-plugins-multisocketsink.html#GST-CLIENT-STATUS-CLOSED:CAPS"/>
+    <keyword type="constant" name="GST_CLIENT_STATUS_REMOVED" link="gst-plugins-base-plugins-multisocketsink.html#GST-CLIENT-STATUS-REMOVED:CAPS"/>
+    <keyword type="constant" name="GST_CLIENT_STATUS_SLOW" link="gst-plugins-base-plugins-multisocketsink.html#GST-CLIENT-STATUS-SLOW:CAPS"/>
+    <keyword type="constant" name="GST_CLIENT_STATUS_ERROR" link="gst-plugins-base-plugins-multisocketsink.html#GST-CLIENT-STATUS-ERROR:CAPS"/>
+    <keyword type="constant" name="GST_CLIENT_STATUS_DUPLICATE" link="gst-plugins-base-plugins-multisocketsink.html#GST-CLIENT-STATUS-DUPLICATE:CAPS"/>
+    <keyword type="constant" name="GST_CLIENT_STATUS_FLUSHING" link="gst-plugins-base-plugins-multisocketsink.html#GST-CLIENT-STATUS-FLUSHING:CAPS"/>
+    <keyword type="constant" name="GST_PLAY_FLAG_VIDEO" link="gst-plugins-base-plugins-playbin.html#GST-PLAY-FLAG-VIDEO:CAPS"/>
+    <keyword type="constant" name="GST_PLAY_FLAG_AUDIO" link="gst-plugins-base-plugins-playbin.html#GST-PLAY-FLAG-AUDIO:CAPS"/>
+    <keyword type="constant" name="GST_PLAY_FLAG_TEXT" link="gst-plugins-base-plugins-playbin.html#GST-PLAY-FLAG-TEXT:CAPS"/>
+    <keyword type="constant" name="GST_PLAY_FLAG_VIS" link="gst-plugins-base-plugins-playbin.html#GST-PLAY-FLAG-VIS:CAPS"/>
+    <keyword type="constant" name="GST_PLAY_FLAG_SOFT_VOLUME" link="gst-plugins-base-plugins-playbin.html#GST-PLAY-FLAG-SOFT-VOLUME:CAPS"/>
+    <keyword type="constant" name="GST_PLAY_FLAG_NATIVE_AUDIO" link="gst-plugins-base-plugins-playbin.html#GST-PLAY-FLAG-NATIVE-AUDIO:CAPS"/>
+    <keyword type="constant" name="GST_PLAY_FLAG_NATIVE_VIDEO" link="gst-plugins-base-plugins-playbin.html#GST-PLAY-FLAG-NATIVE-VIDEO:CAPS"/>
+    <keyword type="constant" name="GST_PLAY_FLAG_DOWNLOAD" link="gst-plugins-base-plugins-playbin.html#GST-PLAY-FLAG-DOWNLOAD:CAPS"/>
+    <keyword type="constant" name="GST_PLAY_FLAG_BUFFERING" link="gst-plugins-base-plugins-playbin.html#GST-PLAY-FLAG-BUFFERING:CAPS"/>
+    <keyword type="constant" name="GST_PLAY_FLAG_DEINTERLACE" link="gst-plugins-base-plugins-playbin.html#GST-PLAY-FLAG-DEINTERLACE:CAPS"/>
+    <keyword type="constant" name="GST_PLAY_FLAG_SOFT_COLORBALANCE" link="gst-plugins-base-plugins-playbin.html#GST-PLAY-FLAG-SOFT-COLORBALANCE:CAPS"/>
+    <keyword type="constant" name="GST_PLAY_FLAG_FORCE_FILTERS" link="gst-plugins-base-plugins-playbin.html#GST-PLAY-FLAG-FORCE-FILTERS:CAPS"/>
+    <keyword type="constant" name="MULTIPASS_MODE_SINGLE_PASS" link="gst-plugins-base-plugins-theoraenc.html#MULTIPASS-MODE-SINGLE-PASS:CAPS"/>
+    <keyword type="constant" name="MULTIPASS_MODE_FIRST_PASS" link="gst-plugins-base-plugins-theoraenc.html#MULTIPASS-MODE-FIRST-PASS:CAPS"/>
+    <keyword type="constant" name="MULTIPASS_MODE_SECOND_PASS" link="gst-plugins-base-plugins-theoraenc.html#MULTIPASS-MODE-SECOND-PASS:CAPS"/>
+    <keyword type="constant" name="GST_TIME_OVERLAY_TIME_LINE_BUFFER_TIME" link="gst-plugins-base-plugins-timeoverlay.html#GST-TIME-OVERLAY-TIME-LINE-BUFFER-TIME:CAPS"/>
+    <keyword type="constant" name="GST_TIME_OVERLAY_TIME_LINE_STREAM_TIME" link="gst-plugins-base-plugins-timeoverlay.html#GST-TIME-OVERLAY-TIME-LINE-STREAM-TIME:CAPS"/>
+    <keyword type="constant" name="GST_TIME_OVERLAY_TIME_LINE_RUNNING_TIME" link="gst-plugins-base-plugins-timeoverlay.html#GST-TIME-OVERLAY-TIME-LINE-RUNNING-TIME:CAPS"/>
+    <keyword type="constant" name="GST_AUTOPLUG_SELECT_TRY" link="gst-plugins-base-plugins-uridecodebin.html#GST-AUTOPLUG-SELECT-TRY:CAPS"/>
+    <keyword type="constant" name="GST_AUTOPLUG_SELECT_EXPOSE" link="gst-plugins-base-plugins-uridecodebin.html#GST-AUTOPLUG-SELECT-EXPOSE:CAPS"/>
+    <keyword type="constant" name="GST_AUTOPLUG_SELECT_SKIP" link="gst-plugins-base-plugins-uridecodebin.html#GST-AUTOPLUG-SELECT-SKIP:CAPS"/>
+    <keyword type="constant" name="GST_VIDEO_SCALE_NEAREST" link="gst-plugins-base-plugins-videoscale.html#GST-VIDEO-SCALE-NEAREST:CAPS"/>
+    <keyword type="constant" name="GST_VIDEO_SCALE_BILINEAR" link="gst-plugins-base-plugins-videoscale.html#GST-VIDEO-SCALE-BILINEAR:CAPS"/>
+    <keyword type="constant" name="GST_VIDEO_SCALE_4TAP" link="gst-plugins-base-plugins-videoscale.html#GST-VIDEO-SCALE-4TAP:CAPS"/>
+    <keyword type="constant" name="GST_VIDEO_SCALE_LANCZOS" link="gst-plugins-base-plugins-videoscale.html#GST-VIDEO-SCALE-LANCZOS:CAPS"/>
+    <keyword type="constant" name="GST_VIDEO_SCALE_BILINEAR2" link="gst-plugins-base-plugins-videoscale.html#GST-VIDEO-SCALE-BILINEAR2:CAPS"/>
+    <keyword type="constant" name="GST_VIDEO_SCALE_SINC" link="gst-plugins-base-plugins-videoscale.html#GST-VIDEO-SCALE-SINC:CAPS"/>
+    <keyword type="constant" name="GST_VIDEO_SCALE_HERMITE" link="gst-plugins-base-plugins-videoscale.html#GST-VIDEO-SCALE-HERMITE:CAPS"/>
+    <keyword type="constant" name="GST_VIDEO_SCALE_SPLINE" link="gst-plugins-base-plugins-videoscale.html#GST-VIDEO-SCALE-SPLINE:CAPS"/>
+    <keyword type="constant" name="GST_VIDEO_SCALE_CATROM" link="gst-plugins-base-plugins-videoscale.html#GST-VIDEO-SCALE-CATROM:CAPS"/>
+    <keyword type="constant" name="GST_VIDEO_SCALE_MITCHELL" link="gst-plugins-base-plugins-videoscale.html#GST-VIDEO-SCALE-MITCHELL:CAPS"/>
+    <keyword type="constant" name="GST_VIDEO_TEST_SRC_SMPTE" link="gst-plugins-base-plugins-videotestsrc.html#GST-VIDEO-TEST-SRC-SMPTE:CAPS"/>
+    <keyword type="constant" name="GST_VIDEO_TEST_SRC_SNOW" link="gst-plugins-base-plugins-videotestsrc.html#GST-VIDEO-TEST-SRC-SNOW:CAPS"/>
+    <keyword type="constant" name="GST_VIDEO_TEST_SRC_BLACK" link="gst-plugins-base-plugins-videotestsrc.html#GST-VIDEO-TEST-SRC-BLACK:CAPS"/>
+    <keyword type="constant" name="GST_VIDEO_TEST_SRC_WHITE" link="gst-plugins-base-plugins-videotestsrc.html#GST-VIDEO-TEST-SRC-WHITE:CAPS"/>
+    <keyword type="constant" name="GST_VIDEO_TEST_SRC_RED" link="gst-plugins-base-plugins-videotestsrc.html#GST-VIDEO-TEST-SRC-RED:CAPS"/>
+    <keyword type="constant" name="GST_VIDEO_TEST_SRC_GREEN" link="gst-plugins-base-plugins-videotestsrc.html#GST-VIDEO-TEST-SRC-GREEN:CAPS"/>
+    <keyword type="constant" name="GST_VIDEO_TEST_SRC_BLUE" link="gst-plugins-base-plugins-videotestsrc.html#GST-VIDEO-TEST-SRC-BLUE:CAPS"/>
+    <keyword type="constant" name="GST_VIDEO_TEST_SRC_CHECKERS1" link="gst-plugins-base-plugins-videotestsrc.html#GST-VIDEO-TEST-SRC-CHECKERS1:CAPS"/>
+    <keyword type="constant" name="GST_VIDEO_TEST_SRC_CHECKERS2" link="gst-plugins-base-plugins-videotestsrc.html#GST-VIDEO-TEST-SRC-CHECKERS2:CAPS"/>
+    <keyword type="constant" name="GST_VIDEO_TEST_SRC_CHECKERS4" link="gst-plugins-base-plugins-videotestsrc.html#GST-VIDEO-TEST-SRC-CHECKERS4:CAPS"/>
+    <keyword type="constant" name="GST_VIDEO_TEST_SRC_CHECKERS8" link="gst-plugins-base-plugins-videotestsrc.html#GST-VIDEO-TEST-SRC-CHECKERS8:CAPS"/>
+    <keyword type="constant" name="GST_VIDEO_TEST_SRC_CIRCULAR" link="gst-plugins-base-plugins-videotestsrc.html#GST-VIDEO-TEST-SRC-CIRCULAR:CAPS"/>
+    <keyword type="constant" name="GST_VIDEO_TEST_SRC_BLINK" link="gst-plugins-base-plugins-videotestsrc.html#GST-VIDEO-TEST-SRC-BLINK:CAPS"/>
+    <keyword type="constant" name="GST_VIDEO_TEST_SRC_SMPTE75" link="gst-plugins-base-plugins-videotestsrc.html#GST-VIDEO-TEST-SRC-SMPTE75:CAPS"/>
+    <keyword type="constant" name="GST_VIDEO_TEST_SRC_ZONE_PLATE" link="gst-plugins-base-plugins-videotestsrc.html#GST-VIDEO-TEST-SRC-ZONE-PLATE:CAPS"/>
+    <keyword type="constant" name="GST_VIDEO_TEST_SRC_GAMUT" link="gst-plugins-base-plugins-videotestsrc.html#GST-VIDEO-TEST-SRC-GAMUT:CAPS"/>
+    <keyword type="constant" name="GST_VIDEO_TEST_SRC_CHROMA_ZONE_PLATE" link="gst-plugins-base-plugins-videotestsrc.html#GST-VIDEO-TEST-SRC-CHROMA-ZONE-PLATE:CAPS"/>
+    <keyword type="constant" name="GST_VIDEO_TEST_SRC_SOLID" link="gst-plugins-base-plugins-videotestsrc.html#GST-VIDEO-TEST-SRC-SOLID:CAPS"/>
+    <keyword type="constant" name="GST_VIDEO_TEST_SRC_BALL" link="gst-plugins-base-plugins-videotestsrc.html#GST-VIDEO-TEST-SRC-BALL:CAPS"/>
+    <keyword type="constant" name="GST_VIDEO_TEST_SRC_SMPTE100" link="gst-plugins-base-plugins-videotestsrc.html#GST-VIDEO-TEST-SRC-SMPTE100:CAPS"/>
+    <keyword type="constant" name="GST_VIDEO_TEST_SRC_BAR" link="gst-plugins-base-plugins-videotestsrc.html#GST-VIDEO-TEST-SRC-BAR:CAPS"/>
+    <keyword type="constant" name="GST_VIDEO_TEST_SRC_PINWHEEL" link="gst-plugins-base-plugins-videotestsrc.html#GST-VIDEO-TEST-SRC-PINWHEEL:CAPS"/>
+    <keyword type="constant" name="GST_VIDEO_TEST_SRC_SPOKES" link="gst-plugins-base-plugins-videotestsrc.html#GST-VIDEO-TEST-SRC-SPOKES:CAPS"/>
+    <keyword type="constant" name="GST_VIDEO_TEST_SRC_GRADIENT" link="gst-plugins-base-plugins-videotestsrc.html#GST-VIDEO-TEST-SRC-GRADIENT:CAPS"/>
+    <keyword type="constant" name="GST_VIDEO_TEST_SRC_COLORS" link="gst-plugins-base-plugins-videotestsrc.html#GST-VIDEO-TEST-SRC-COLORS:CAPS"/>
   </functions>
 </book>
diff --git a/docs/plugins/html/gst-plugins-base-plugins-adder.html b/docs/plugins/html/gst-plugins-base-plugins-adder.html
index 0a5d2c7..f8c8c86 100644
--- a/docs/plugins/html/gst-plugins-base-plugins-adder.html
+++ b/docs/plugins/html/gst-plugins-base-plugins-adder.html
@@ -2,13 +2,13 @@
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>GStreamer Base Plugins 1.0 Plugins Reference Manual: adder</title>
+<title>adder: GStreamer Base 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 Base Plugins 1.0 Plugins Reference Manual">
 <link rel="up" href="ch01.html" title="gst-plugins-base Elements">
 <link rel="prev" href="ch01.html" title="gst-plugins-base Elements">
-<link rel="next" href="gst-plugins-base-plugins-appsrc.html" title="appsrc">
-<meta name="generator" content="GTK-Doc V1.21 (XML mode)">
+<link rel="next" href="gst-plugins-base-plugins-alsasink.html" title="alsasink">
+<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">
@@ -23,14 +23,14 @@
 <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="ch01.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
-<td><a accesskey="n" href="gst-plugins-base-plugins-appsrc.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
+<td><a accesskey="n" href="gst-plugins-base-plugins-alsasink.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
 </tr></table>
 <div class="refentry">
 <a name="gst-plugins-base-plugins-adder"></a><div class="titlepage"></div>
 <div class="refnamediv"><table width="100%"><tr>
 <td valign="top">
 <h2><span class="refentrytitle"><a name="gst-plugins-base-plugins-adder.top_of_page"></a>adder</span></h2>
-<p>adder — Add N audio channels together</p>
+<p>adder</p>
 </td>
 <td class="gallery_image" valign="top" align="right"></td>
 </tr></table></div>
@@ -84,14 +84,17 @@
 Mixed data is clamped to the min/max values of the data format.</p>
 <p>The adder currently mixes all data received on the sinkpads as soon as
 possible without trying to synchronize the streams.</p>
+<p>Check out the audiomixer element in gst-plugins-bad for a better-behaving
+audio mixing element: It will sync input streams correctly and also handle
+live inputs properly.</p>
 <div class="refsect2">
-<a name="id-1.2.2.8.4"></a><h3>Example launch line</h3>
+<a name="id-1.2.2.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 audiotestsrc freq<span class="gtkdoc opt">=</span><span class="number">100</span> <span class="gtkdoc opt">!</span> adder 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> adder name<span class="gtkdoc opt">=</span>mix <span class="gtkdoc opt">!</span> audioconvert <span class="gtkdoc opt">!</span> autoaudiosink 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>
@@ -101,7 +104,7 @@
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="id-1.2.2.8.5.1"></a><h3>Element Information</h3>
+<a name="id-1.2.2.8.6.1"></a><h3>Element Information</h3>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
@@ -127,7 +130,7 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="id-1.2.2.8.5.2"></a><h3>Element Pads</h3>
+<a name="id-1.2.2.8.6.2"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
@@ -178,11 +181,10 @@
 </table></div>
 </div>
 </div>
-<p>
-</p>
 </div>
 <div class="refsect1">
 <a name="gst-plugins-base-plugins-adder.functions_details"></a><h2>Functions</h2>
+<p></p>
 </div>
 <div class="refsect1">
 <a name="gst-plugins-base-plugins-adder.other_details"></a><h2>Types and Values</h2>
@@ -203,7 +205,6 @@
 </div>
 </div>
 <div class="footer">
-<hr>
-          Generated by GTK-Doc V1.21</div>
+<hr>Generated by GTK-Doc V1.24</div>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/plugins/html/gst-plugins-base-plugins-alsasink.html b/docs/plugins/html/gst-plugins-base-plugins-alsasink.html
index 362ec0e..76b9ac8 100644
--- a/docs/plugins/html/gst-plugins-base-plugins-alsasink.html
+++ b/docs/plugins/html/gst-plugins-base-plugins-alsasink.html
@@ -2,13 +2,13 @@
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>GStreamer Base Plugins 1.0 Plugins Reference Manual: alsasink</title>
+<title>alsasink: GStreamer Base 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 Base Plugins 1.0 Plugins Reference Manual">
 <link rel="up" href="ch01.html" title="gst-plugins-base Elements">
-<link rel="prev" href="gst-plugins-base-plugins-appsink.html" title="appsink">
+<link rel="prev" href="gst-plugins-base-plugins-adder.html" title="adder">
 <link rel="next" href="gst-plugins-base-plugins-alsasrc.html" title="alsasrc">
-<meta name="generator" content="GTK-Doc V1.21 (XML mode)">
+<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">
@@ -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-base-plugins-appsink.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
+<td><a accesskey="p" href="gst-plugins-base-plugins-adder.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
 <td><a accesskey="n" href="gst-plugins-base-plugins-alsasrc.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
 </tr></table>
 <div class="refentry">
@@ -29,7 +29,7 @@
 <div class="refnamediv"><table width="100%"><tr>
 <td valign="top">
 <h2><span class="refentrytitle"><a name="gst-plugins-base-plugins-alsasink.top_of_page"></a>alsasink</span></h2>
-<p>alsasink — Output to a sound card via ALSA</p>
+<p>alsasink</p>
 </td>
 <td class="gallery_image" valign="top" align="right"></td>
 </tr></table></div>
@@ -93,7 +93,7 @@
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="id-1.2.5.7.2.1"></a><h3>Element Information</h3>
+<a name="id-1.2.3.7.2.1"></a><h3>Element Information</h3>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
@@ -119,7 +119,7 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="id-1.2.5.7.2.2"></a><h3>Element Pads</h3>
+<a name="id-1.2.3.7.2.2"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
@@ -162,19 +162,16 @@
 </table></div>
 </div>
 </div>
-<p>
-</p>
 </div>
 <div class="refsect1">
 <a name="gst-plugins-base-plugins-alsasink.functions_details"></a><h2>Functions</h2>
+<p></p>
 </div>
 <div class="refsect1">
 <a name="gst-plugins-base-plugins-alsasink.other_details"></a><h2>Types and Values</h2>
 <div class="refsect2">
 <a name="GstAlsaSink-struct"></a><h3>struct GstAlsaSink</h3>
 <pre class="programlisting">struct GstAlsaSink;</pre>
-<p>
-</p>
 </div>
 </div>
 <div class="refsect1">
@@ -205,7 +202,6 @@
 </div>
 </div>
 <div class="footer">
-<hr>
-          Generated by GTK-Doc V1.21</div>
+<hr>Generated by GTK-Doc V1.24</div>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/plugins/html/gst-plugins-base-plugins-alsasrc.html b/docs/plugins/html/gst-plugins-base-plugins-alsasrc.html
index 0dcd4bf..0fea3c9 100644
--- a/docs/plugins/html/gst-plugins-base-plugins-alsasrc.html
+++ b/docs/plugins/html/gst-plugins-base-plugins-alsasrc.html
@@ -2,13 +2,13 @@
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>GStreamer Base Plugins 1.0 Plugins Reference Manual: alsasrc</title>
+<title>alsasrc: GStreamer Base 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 Base Plugins 1.0 Plugins Reference Manual">
 <link rel="up" href="ch01.html" title="gst-plugins-base Elements">
 <link rel="prev" href="gst-plugins-base-plugins-alsasink.html" title="alsasink">
-<link rel="next" href="gst-plugins-base-plugins-audioconvert.html" title="audioconvert">
-<meta name="generator" content="GTK-Doc V1.21 (XML mode)">
+<link rel="next" href="gst-plugins-base-plugins-appsink.html" title="appsink">
+<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">
@@ -22,14 +22,14 @@
 <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-base-plugins-alsasink.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
-<td><a accesskey="n" href="gst-plugins-base-plugins-audioconvert.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
+<td><a accesskey="n" href="gst-plugins-base-plugins-appsink.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
 </tr></table>
 <div class="refentry">
 <a name="gst-plugins-base-plugins-alsasrc"></a><div class="titlepage"></div>
 <div class="refnamediv"><table width="100%"><tr>
 <td valign="top">
 <h2><span class="refentrytitle"><a name="gst-plugins-base-plugins-alsasrc.top_of_page"></a>alsasrc</span></h2>
-<p>alsasrc — Read from a sound card via ALSA</p>
+<p>alsasrc</p>
 </td>
 <td class="gallery_image" valign="top" align="right"></td>
 </tr></table></div>
@@ -94,7 +94,7 @@
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="id-1.2.6.7.2.1"></a><h3>Element Information</h3>
+<a name="id-1.2.4.7.2.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.6.7.2.2"></a><h3>Element Pads</h3>
+<a name="id-1.2.4.7.2.2"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
@@ -147,19 +147,16 @@
 </table></div>
 </div>
 </div>
-<p>
-</p>
 </div>
 <div class="refsect1">
 <a name="gst-plugins-base-plugins-alsasrc.functions_details"></a><h2>Functions</h2>
+<p></p>
 </div>
 <div class="refsect1">
 <a name="gst-plugins-base-plugins-alsasrc.other_details"></a><h2>Types and Values</h2>
 <div class="refsect2">
 <a name="GstAlsaSrc-struct"></a><h3>struct GstAlsaSrc</h3>
 <pre class="programlisting">struct GstAlsaSrc;</pre>
-<p>
-</p>
 </div>
 </div>
 <div class="refsect1">
@@ -190,7 +187,6 @@
 </div>
 </div>
 <div class="footer">
-<hr>
-          Generated by GTK-Doc V1.21</div>
+<hr>Generated by GTK-Doc V1.24</div>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/plugins/html/gst-plugins-base-plugins-appsink.html b/docs/plugins/html/gst-plugins-base-plugins-appsink.html
index 18d6b2e..33b8fb6 100644
--- a/docs/plugins/html/gst-plugins-base-plugins-appsink.html
+++ b/docs/plugins/html/gst-plugins-base-plugins-appsink.html
@@ -2,13 +2,13 @@
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>GStreamer Base Plugins 1.0 Plugins Reference Manual: appsink</title>
+<title>appsink: GStreamer Base 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 Base Plugins 1.0 Plugins Reference Manual">
 <link rel="up" href="ch01.html" title="gst-plugins-base Elements">
-<link rel="prev" href="gst-plugins-base-plugins-appsrc.html" title="appsrc">
-<link rel="next" href="gst-plugins-base-plugins-alsasink.html" title="alsasink">
-<meta name="generator" content="GTK-Doc V1.21 (XML mode)">
+<link rel="prev" href="gst-plugins-base-plugins-alsasrc.html" title="alsasrc">
+<link rel="next" href="gst-plugins-base-plugins-appsrc.html" title="appsrc">
+<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">
@@ -23,15 +23,15 @@
 </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-base-plugins-appsrc.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
-<td><a accesskey="n" href="gst-plugins-base-plugins-alsasink.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
+<td><a accesskey="p" href="gst-plugins-base-plugins-alsasrc.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
+<td><a accesskey="n" href="gst-plugins-base-plugins-appsrc.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
 </tr></table>
 <div class="refentry">
 <a name="gst-plugins-base-plugins-appsink"></a><div class="titlepage"></div>
 <div class="refnamediv"><table width="100%"><tr>
 <td valign="top">
 <h2><span class="refentrytitle"><a name="gst-plugins-base-plugins-appsink.top_of_page"></a>appsink</span></h2>
-<p>appsink — Allow the application to get access to raw buffer</p>
+<p>appsink</p>
 </td>
 <td class="gallery_image" valign="top" align="right"></td>
 </tr></table></div>
@@ -85,29 +85,29 @@
 <tr>
 <td class="signal_type"><span class="returnvalue">void</span></td>
 <td class="signal_name"><a class="link" href="gst-plugins-base-plugins-appsink.html#GstAppSink-eos" title="The “eos” signal">eos</a></td>
-<td class="signal_flags">Run Last</td>
+<td class="signal_flags"><a href="https://developer.gnome.org/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS">Run Last</a></td>
 </tr>
 <tr>
 <td class="signal_type"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html#GstFlowReturn"><span class="returnvalue">GstFlowReturn</span></a></td>
 <td class="signal_name"><a class="link" href="gst-plugins-base-plugins-appsink.html#GstAppSink-new-preroll" title="The “new-preroll” signal">new-preroll</a></td>
-<td class="signal_flags">Run Last</td>
+<td class="signal_flags"><a href="https://developer.gnome.org/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS">Run Last</a></td>
 </tr>
 <tr>
 <td class="signal_type"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html#GstFlowReturn"><span class="returnvalue">GstFlowReturn</span></a></td>
 <td class="signal_name"><a class="link" href="gst-plugins-base-plugins-appsink.html#GstAppSink-new-sample" title="The “new-sample” signal">new-sample</a></td>
-<td class="signal_flags">Run Last</td>
+<td class="signal_flags"><a href="https://developer.gnome.org/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS">Run Last</a></td>
 </tr>
 <tr>
 <td class="signal_type">
 <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstSample.html"><span class="returnvalue">GstSample</span></a>*</td>
 <td class="signal_name"><a class="link" href="gst-plugins-base-plugins-appsink.html#GstAppSink-pull-preroll" title="The “pull-preroll” signal">pull-preroll</a></td>
-<td class="signal_flags">Action</td>
+<td class="signal_flags"><a href="https://developer.gnome.org/gobject/unstable/gobject-Signals.html#G-SIGNAL-ACTION:CAPS">Action</a></td>
 </tr>
 <tr>
 <td class="signal_type">
 <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstSample.html"><span class="returnvalue">GstSample</span></a>*</td>
 <td class="signal_name"><a class="link" href="gst-plugins-base-plugins-appsink.html#GstAppSink-pull-sample" title="The “pull-sample” signal">pull-sample</a></td>
-<td class="signal_flags">Action</td>
+<td class="signal_flags"><a href="https://developer.gnome.org/gobject/unstable/gobject-Signals.html#G-SIGNAL-ACTION:CAPS">Action</a></td>
 </tr>
 </tbody>
 </table></div>
@@ -152,7 +152,7 @@
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="id-1.2.4.9.5.1.1"></a><h3>Element Information</h3>
+<a name="id-1.2.5.9.6.1"></a><h3>Element Information</h3>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
@@ -178,7 +178,7 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="id-1.2.4.9.5.1.2"></a><h3>Element Pads</h3>
+<a name="id-1.2.5.9.6.2"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
@@ -205,19 +205,16 @@
 </table></div>
 </div>
 </div>
-<p>
-</p>
 </div>
 <div class="refsect1">
 <a name="gst-plugins-base-plugins-appsink.functions_details"></a><h2>Functions</h2>
+<p></p>
 </div>
 <div class="refsect1">
 <a name="gst-plugins-base-plugins-appsink.other_details"></a><h2>Types and Values</h2>
 <div class="refsect2">
 <a name="GstAppSink-struct"></a><h3>struct GstAppSink</h3>
 <pre class="programlisting">struct GstAppSink;</pre>
-<p>
-</p>
 </div>
 </div>
 <div class="refsect1">
@@ -268,31 +265,7 @@
 <pre class="programlisting"><span class="returnvalue">void</span>
 user_function (<a class="link" href="gst-plugins-base-plugins-appsink.html#GstAppSink"><span class="type">GstAppSink</span></a> *gstappsink,
                <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a>    user_data)</pre>
-<p>
-</p>
-<div class="refsect3">
-<a name="id-1.2.4.13.2.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>gstappsink</p></td>
-<td class="parameter_description"><p>the object which received the signal.</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 set when the signal handler was connected.</p></td>
-<td class="parameter_annotations"> </td>
-</tr>
-</tbody>
-</table></div>
-</div>
-<p>Flags: Run Last</p>
+<p>Flags: <a href="https://developer.gnome.org/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS">Run Last</a></p>
 </div>
 <hr>
 <div class="refsect2">
@@ -300,35 +273,7 @@
 <pre class="programlisting"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html#GstFlowReturn"><span class="returnvalue">GstFlowReturn</span></a>
 user_function (<a class="link" href="gst-plugins-base-plugins-appsink.html#GstAppSink"><span class="type">GstAppSink</span></a> *gstappsink,
                <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a>    user_data)</pre>
-<p>
-</p>
-<div class="refsect3">
-<a name="id-1.2.4.13.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>gstappsink</p></td>
-<td class="parameter_description"><p>the object which received the signal.</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 set when the signal handler was connected.</p></td>
-<td class="parameter_annotations"> </td>
-</tr>
-</tbody>
-</table></div>
-</div>
-<div class="refsect3">
-<a name="id-1.2.4.13.3.6"></a><h4>Returns</h4>
-<p></p>
-</div>
-<p>Flags: Run Last</p>
+<p>Flags: <a href="https://developer.gnome.org/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS">Run Last</a></p>
 </div>
 <hr>
 <div class="refsect2">
@@ -336,35 +281,7 @@
 <pre class="programlisting"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html#GstFlowReturn"><span class="returnvalue">GstFlowReturn</span></a>
 user_function (<a class="link" href="gst-plugins-base-plugins-appsink.html#GstAppSink"><span class="type">GstAppSink</span></a> *gstappsink,
                <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a>    user_data)</pre>
-<p>
-</p>
-<div class="refsect3">
-<a name="id-1.2.4.13.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>gstappsink</p></td>
-<td class="parameter_description"><p>the object which received the signal.</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 set when the signal handler was connected.</p></td>
-<td class="parameter_annotations"> </td>
-</tr>
-</tbody>
-</table></div>
-</div>
-<div class="refsect3">
-<a name="id-1.2.4.13.4.6"></a><h4>Returns</h4>
-<p></p>
-</div>
-<p>Flags: Run Last</p>
+<p>Flags: <a href="https://developer.gnome.org/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS">Run Last</a></p>
 </div>
 <hr>
 <div class="refsect2">
@@ -372,35 +289,7 @@
 <pre class="programlisting"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstSample.html"><span class="returnvalue">GstSample</span></a>*
 user_function (<a class="link" href="gst-plugins-base-plugins-appsink.html#GstAppSink"><span class="type">GstAppSink</span></a> *gstappsink,
                <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a>    user_data)</pre>
-<p>
-</p>
-<div class="refsect3">
-<a name="id-1.2.4.13.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>gstappsink</p></td>
-<td class="parameter_description"><p>the object which received the signal.</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 set when the signal handler was connected.</p></td>
-<td class="parameter_annotations"> </td>
-</tr>
-</tbody>
-</table></div>
-</div>
-<div class="refsect3">
-<a name="id-1.2.4.13.5.6"></a><h4>Returns</h4>
-<p></p>
-</div>
-<p>Flags: Action</p>
+<p>Flags: <a href="https://developer.gnome.org/gobject/unstable/gobject-Signals.html#G-SIGNAL-ACTION:CAPS">Action</a></p>
 </div>
 <hr>
 <div class="refsect2">
@@ -408,40 +297,11 @@
 <pre class="programlisting"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstSample.html"><span class="returnvalue">GstSample</span></a>*
 user_function (<a class="link" href="gst-plugins-base-plugins-appsink.html#GstAppSink"><span class="type">GstAppSink</span></a> *gstappsink,
                <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a>    user_data)</pre>
-<p>
-</p>
-<div class="refsect3">
-<a name="id-1.2.4.13.6.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>gstappsink</p></td>
-<td class="parameter_description"><p>the object which received the signal.</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 set when the signal handler was connected.</p></td>
-<td class="parameter_annotations"> </td>
-</tr>
-</tbody>
-</table></div>
-</div>
-<div class="refsect3">
-<a name="id-1.2.4.13.6.6"></a><h4>Returns</h4>
-<p></p>
-</div>
-<p>Flags: Action</p>
+<p>Flags: <a href="https://developer.gnome.org/gobject/unstable/gobject-Signals.html#G-SIGNAL-ACTION:CAPS">Action</a></p>
 </div>
 </div>
 </div>
 <div class="footer">
-<hr>
-          Generated by GTK-Doc V1.21</div>
+<hr>Generated by GTK-Doc V1.24</div>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/plugins/html/gst-plugins-base-plugins-appsrc.html b/docs/plugins/html/gst-plugins-base-plugins-appsrc.html
index bb73644..ef3f5ac 100644
--- a/docs/plugins/html/gst-plugins-base-plugins-appsrc.html
+++ b/docs/plugins/html/gst-plugins-base-plugins-appsrc.html
@@ -2,13 +2,13 @@
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>GStreamer Base Plugins 1.0 Plugins Reference Manual: appsrc</title>
+<title>appsrc: GStreamer Base 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 Base Plugins 1.0 Plugins Reference Manual">
 <link rel="up" href="ch01.html" title="gst-plugins-base Elements">
-<link rel="prev" href="gst-plugins-base-plugins-adder.html" title="adder">
-<link rel="next" href="gst-plugins-base-plugins-appsink.html" title="appsink">
-<meta name="generator" content="GTK-Doc V1.21 (XML mode)">
+<link rel="prev" href="gst-plugins-base-plugins-appsink.html" title="appsink">
+<link rel="next" href="gst-plugins-base-plugins-audioconvert.html" title="audioconvert">
+<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">
@@ -23,15 +23,15 @@
 </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-base-plugins-adder.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
-<td><a accesskey="n" href="gst-plugins-base-plugins-appsink.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
+<td><a accesskey="p" href="gst-plugins-base-plugins-appsink.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
+<td><a accesskey="n" href="gst-plugins-base-plugins-audioconvert.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
 </tr></table>
 <div class="refentry">
 <a name="gst-plugins-base-plugins-appsrc"></a><div class="titlepage"></div>
 <div class="refnamediv"><table width="100%"><tr>
 <td valign="top">
 <h2><span class="refentrytitle"><a name="gst-plugins-base-plugins-appsrc.top_of_page"></a>appsrc</span></h2>
-<p>appsrc — Allow the application to feed buffers to a pipeline</p>
+<p>appsrc</p>
 </td>
 <td class="gallery_image" valign="top" align="right"></td>
 </tr></table></div>
@@ -120,27 +120,32 @@
 <tr>
 <td class="signal_type"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html#GstFlowReturn"><span class="returnvalue">GstFlowReturn</span></a></td>
 <td class="signal_name"><a class="link" href="gst-plugins-base-plugins-appsrc.html#GstAppSrc-end-of-stream" title="The “end-of-stream” signal">end-of-stream</a></td>
-<td class="signal_flags">Action</td>
+<td class="signal_flags"><a href="https://developer.gnome.org/gobject/unstable/gobject-Signals.html#G-SIGNAL-ACTION:CAPS">Action</a></td>
 </tr>
 <tr>
 <td class="signal_type"><span class="returnvalue">void</span></td>
 <td class="signal_name"><a class="link" href="gst-plugins-base-plugins-appsrc.html#GstAppSrc-enough-data" title="The “enough-data” signal">enough-data</a></td>
-<td class="signal_flags">Run Last</td>
+<td class="signal_flags"><a href="https://developer.gnome.org/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS">Run Last</a></td>
 </tr>
 <tr>
 <td class="signal_type"><span class="returnvalue">void</span></td>
 <td class="signal_name"><a class="link" href="gst-plugins-base-plugins-appsrc.html#GstAppSrc-need-data" title="The “need-data” signal">need-data</a></td>
-<td class="signal_flags">Run Last</td>
+<td class="signal_flags"><a href="https://developer.gnome.org/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS">Run Last</a></td>
 </tr>
 <tr>
 <td class="signal_type"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html#GstFlowReturn"><span class="returnvalue">GstFlowReturn</span></a></td>
 <td class="signal_name"><a class="link" href="gst-plugins-base-plugins-appsrc.html#GstAppSrc-push-buffer" title="The “push-buffer” signal">push-buffer</a></td>
-<td class="signal_flags">Action</td>
+<td class="signal_flags"><a href="https://developer.gnome.org/gobject/unstable/gobject-Signals.html#G-SIGNAL-ACTION:CAPS">Action</a></td>
 </tr>
 <tr>
 <td class="signal_type"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a></td>
 <td class="signal_name"><a class="link" href="gst-plugins-base-plugins-appsrc.html#GstAppSrc-seek-data" title="The “seek-data” signal">seek-data</a></td>
-<td class="signal_flags">Run Last</td>
+<td class="signal_flags"><a href="https://developer.gnome.org/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS">Run Last</a></td>
+</tr>
+<tr>
+<td class="signal_type"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html#GstFlowReturn"><span class="returnvalue">GstFlowReturn</span></a></td>
+<td class="signal_name"><a class="link" href="gst-plugins-base-plugins-appsrc.html#GstAppSrc-push-sample" title="The “push-sample” signal">push-sample</a></td>
+<td class="signal_flags"><a href="https://developer.gnome.org/gobject/unstable/gobject-Signals.html#G-SIGNAL-ACTION:CAPS">Action</a></td>
 </tr>
 </tbody>
 </table></div>
@@ -185,7 +190,7 @@
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="id-1.2.3.9.5.1.1"></a><h3>Element Information</h3>
+<a name="id-1.2.6.9.6.1"></a><h3>Element Information</h3>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
@@ -211,7 +216,7 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="id-1.2.3.9.5.1.2"></a><h3>Element Pads</h3>
+<a name="id-1.2.6.9.6.2"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
@@ -238,19 +243,16 @@
 </table></div>
 </div>
 </div>
-<p>
-</p>
 </div>
 <div class="refsect1">
 <a name="gst-plugins-base-plugins-appsrc.functions_details"></a><h2>Functions</h2>
+<p></p>
 </div>
 <div class="refsect1">
 <a name="gst-plugins-base-plugins-appsrc.other_details"></a><h2>Types and Values</h2>
 <div class="refsect2">
 <a name="GstAppSrc-struct"></a><h3>struct GstAppSrc</h3>
 <pre class="programlisting">struct GstAppSrc;</pre>
-<p>
-</p>
 </div>
 </div>
 <div class="refsect1">
@@ -361,35 +363,7 @@
 <pre class="programlisting"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html#GstFlowReturn"><span class="returnvalue">GstFlowReturn</span></a>
 user_function (<a class="link" href="gst-plugins-base-plugins-appsrc.html#GstAppSrc"><span class="type">GstAppSrc</span></a> *gstappsrc,
                <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a>   user_data)</pre>
-<p>
-</p>
-<div class="refsect3">
-<a name="id-1.2.3.13.2.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>gstappsrc</p></td>
-<td class="parameter_description"><p>the object which received the signal.</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 set when the signal handler was connected.</p></td>
-<td class="parameter_annotations"> </td>
-</tr>
-</tbody>
-</table></div>
-</div>
-<div class="refsect3">
-<a name="id-1.2.3.13.2.6"></a><h4>Returns</h4>
-<p></p>
-</div>
-<p>Flags: Action</p>
+<p>Flags: <a href="https://developer.gnome.org/gobject/unstable/gobject-Signals.html#G-SIGNAL-ACTION:CAPS">Action</a></p>
 </div>
 <hr>
 <div class="refsect2">
@@ -397,31 +371,7 @@
 <pre class="programlisting"><span class="returnvalue">void</span>
 user_function (<a class="link" href="gst-plugins-base-plugins-appsrc.html#GstAppSrc"><span class="type">GstAppSrc</span></a> *gstappsrc,
                <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a>   user_data)</pre>
-<p>
-</p>
-<div class="refsect3">
-<a name="id-1.2.3.13.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>gstappsrc</p></td>
-<td class="parameter_description"><p>the object which received the signal.</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 set when the signal handler was connected.</p></td>
-<td class="parameter_annotations"> </td>
-</tr>
-</tbody>
-</table></div>
-</div>
-<p>Flags: Run Last</p>
+<p>Flags: <a href="https://developer.gnome.org/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS">Run Last</a></p>
 </div>
 <hr>
 <div class="refsect2">
@@ -430,31 +380,7 @@
 user_function (<a class="link" href="gst-plugins-base-plugins-appsrc.html#GstAppSrc"><span class="type">GstAppSrc</span></a> *gstappsrc,
                <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</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>
-</p>
-<div class="refsect3">
-<a name="id-1.2.3.13.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>gstappsrc</p></td>
-<td class="parameter_description"><p>the object which received the signal.</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 set when the signal handler was connected.</p></td>
-<td class="parameter_annotations"> </td>
-</tr>
-</tbody>
-</table></div>
-</div>
-<p>Flags: Run Last</p>
+<p>Flags: <a href="https://developer.gnome.org/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS">Run Last</a></p>
 </div>
 <hr>
 <div class="refsect2">
@@ -463,35 +389,7 @@
 user_function (<a class="link" href="gst-plugins-base-plugins-appsrc.html#GstAppSrc"><span class="type">GstAppSrc</span></a> *gstappsrc,
                <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstBuffer.html"><span class="type">GstBuffer</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>
-</p>
-<div class="refsect3">
-<a name="id-1.2.3.13.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>gstappsrc</p></td>
-<td class="parameter_description"><p>the object which received the signal.</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 set when the signal handler was connected.</p></td>
-<td class="parameter_annotations"> </td>
-</tr>
-</tbody>
-</table></div>
-</div>
-<div class="refsect3">
-<a name="id-1.2.3.13.5.6"></a><h4>Returns</h4>
-<p></p>
-</div>
-<p>Flags: Action</p>
+<p>Flags: <a href="https://developer.gnome.org/gobject/unstable/gobject-Signals.html#G-SIGNAL-ACTION:CAPS">Action</a></p>
 </div>
 <hr>
 <div class="refsect2">
@@ -500,40 +398,20 @@
 user_function (<a class="link" href="gst-plugins-base-plugins-appsrc.html#GstAppSrc"><span class="type">GstAppSrc</span></a> *gstappsrc,
                <span class="type">guint64</span>    arg1,
                <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a>   user_data)</pre>
-<p>
-</p>
-<div class="refsect3">
-<a name="id-1.2.3.13.6.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>gstappsrc</p></td>
-<td class="parameter_description"><p>the object which received the signal.</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 set when the signal handler was connected.</p></td>
-<td class="parameter_annotations"> </td>
-</tr>
-</tbody>
-</table></div>
+<p>Flags: <a href="https://developer.gnome.org/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS">Run Last</a></p>
 </div>
-<div class="refsect3">
-<a name="id-1.2.3.13.6.6"></a><h4>Returns</h4>
-<p></p>
-</div>
-<p>Flags: Run Last</p>
+<hr>
+<div class="refsect2">
+<a name="GstAppSrc-push-sample"></a><h3>The <code class="literal">“push-sample”</code> signal</h3>
+<pre class="programlisting"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html#GstFlowReturn"><span class="returnvalue">GstFlowReturn</span></a>
+user_function (<a class="link" href="gst-plugins-base-plugins-appsrc.html#GstAppSrc"><span class="type">GstAppSrc</span></a> *gstappsrc,
+               <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstSample.html"><span class="type">GstSample</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-ACTION:CAPS">Action</a></p>
 </div>
 </div>
 </div>
 <div class="footer">
-<hr>
-          Generated by GTK-Doc V1.21</div>
+<hr>Generated by GTK-Doc V1.24</div>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/plugins/html/gst-plugins-base-plugins-audioconvert.html b/docs/plugins/html/gst-plugins-base-plugins-audioconvert.html
index 2040a52..76859aa 100644
--- a/docs/plugins/html/gst-plugins-base-plugins-audioconvert.html
+++ b/docs/plugins/html/gst-plugins-base-plugins-audioconvert.html
@@ -2,13 +2,13 @@
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>GStreamer Base Plugins 1.0 Plugins Reference Manual: audioconvert</title>
+<title>audioconvert: GStreamer Base 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 Base Plugins 1.0 Plugins Reference Manual">
 <link rel="up" href="ch01.html" title="gst-plugins-base Elements">
-<link rel="prev" href="gst-plugins-base-plugins-alsasrc.html" title="alsasrc">
+<link rel="prev" href="gst-plugins-base-plugins-appsrc.html" title="appsrc">
 <link rel="next" href="gst-plugins-base-plugins-audiorate.html" title="audiorate">
-<meta name="generator" content="GTK-Doc V1.21 (XML mode)">
+<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">
@@ -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-base-plugins-alsasrc.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
+<td><a accesskey="p" href="gst-plugins-base-plugins-appsrc.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
 <td><a accesskey="n" href="gst-plugins-base-plugins-audiorate.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
 </tr></table>
 <div class="refentry">
@@ -29,7 +29,7 @@
 <div class="refnamediv"><table width="100%"><tr>
 <td valign="top">
 <h2><span class="refentrytitle"><a name="gst-plugins-base-plugins-audioconvert.top_of_page"></a>audioconvert</span></h2>
-<p>audioconvert — Convert audio to different formats</p>
+<p>audioconvert</p>
 </td>
 <td class="gallery_image" valign="top" align="right"></td>
 </tr></table></div>
@@ -92,7 +92,8 @@
 <a name="gst-plugins-base-plugins-audioconvert.description"></a><h2>Description</h2>
 <p>Audioconvert converts raw audio buffers between various possible formats.
 It supports integer to float conversion, width/depth conversion,
-signedness and endianness conversion and channel transformations.</p>
+signedness and endianness conversion and channel transformations
+(ie. upmixing and downmixing), as well as dithering and noise-shaping.</p>
 <div class="refsect2">
 <a name="id-1.2.7.7.3"></a><h3>Example launch line</h3>
 <div class="informalexample">
@@ -100,7 +101,7 @@
     <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 <span class="gtkdoc opt">-</span>m audiotestsrc <span class="gtkdoc opt">!</span> audioconvert <span class="gtkdoc opt">!</span> audio<span class="gtkdoc opt">/</span>x<span class="gtkdoc opt">-</span>raw<span class="gtkdoc opt">,</span>format<span class="gtkdoc opt">=</span>S8<span class="gtkdoc opt">,</span>channels<span class="gtkdoc opt">=</span><span class="number">2</span> <span class="gtkdoc opt">!</span> level <span class="gtkdoc opt">!</span> fakesink silent<span class="gtkdoc opt">=</span>TRUE</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 <span class="gtkdoc opt">-</span>m audiotestsrc <span class="gtkdoc opt">!</span> audioconvert <span class="gtkdoc opt">!</span> audio<span class="gtkdoc opt">/</span>x<span class="gtkdoc opt">-</span>raw<span class="gtkdoc opt">,</span>format<span class="gtkdoc opt">=</span>S8<span class="gtkdoc opt">,</span>channels<span class="gtkdoc opt">=</span><span class="number">2</span> <span class="gtkdoc opt">!</span> level <span class="gtkdoc opt">!</span> fakesink silent<span class="gtkdoc opt">=</span>TRUE</pre></td>
       </tr>
     </tbody>
   </table>
@@ -112,13 +113,15 @@
     <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 <span class="gtkdoc opt">-</span>m audiotestsrc <span class="gtkdoc opt">!</span> audioconvert <span class="gtkdoc opt">!</span> vorbisenc <span class="gtkdoc opt">!</span> fakesink silent<span class="gtkdoc opt">=</span>TRUE</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 <span class="gtkdoc opt">-</span>m uridecodebin uri<span class="gtkdoc opt">=</span>file<span class="gtkdoc opt">:</span><span class="gtkdoc slc">///path/to/audio.flac ! audioconvert ! vorbisenc ! oggmux ! filesink location=audio.ogg</span></pre></td>
       </tr>
     </tbody>
   </table>
 </div>
  The vorbis encoder takes float audio data instead of the integer data
-generated by audiotestsrc.
+output by most other audio elements. This pipeline decodes a FLAC audio file
+(or any other audio file for which decoders are installed) and re-encodes
+it into an Ogg/Vorbis audio file.
 </div>
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
@@ -200,11 +203,10 @@
 </table></div>
 </div>
 </div>
-<p>
-</p>
 </div>
 <div class="refsect1">
 <a name="gst-plugins-base-plugins-audioconvert.functions_details"></a><h2>Functions</h2>
+<p></p>
 </div>
 <div class="refsect1">
 <a name="gst-plugins-base-plugins-audioconvert.other_details"></a><h2>Types and Values</h2>
@@ -331,7 +333,6 @@
 </div>
 </div>
 <div class="footer">
-<hr>
-          Generated by GTK-Doc V1.21</div>
+<hr>Generated by GTK-Doc V1.24</div>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/plugins/html/gst-plugins-base-plugins-audiorate.html b/docs/plugins/html/gst-plugins-base-plugins-audiorate.html
index 764d2fc..fc7808a 100644
--- a/docs/plugins/html/gst-plugins-base-plugins-audiorate.html
+++ b/docs/plugins/html/gst-plugins-base-plugins-audiorate.html
@@ -2,13 +2,13 @@
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>GStreamer Base Plugins 1.0 Plugins Reference Manual: audiorate</title>
+<title>audiorate: GStreamer Base 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 Base Plugins 1.0 Plugins Reference Manual">
 <link rel="up" href="ch01.html" title="gst-plugins-base Elements">
 <link rel="prev" href="gst-plugins-base-plugins-audioconvert.html" title="audioconvert">
 <link rel="next" href="gst-plugins-base-plugins-audioresample.html" title="audioresample">
-<meta name="generator" content="GTK-Doc V1.21 (XML mode)">
+<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">
@@ -29,7 +29,7 @@
 <div class="refnamediv"><table width="100%"><tr>
 <td valign="top">
 <h2><span class="refentrytitle"><a name="gst-plugins-base-plugins-audiorate.top_of_page"></a>audiorate</span></h2>
-<p>audiorate — Drops/duplicates/adjusts timestamps on audio samples to make a perfect stream</p>
+<p>audiorate</p>
 </td>
 <td class="gallery_image" valign="top" align="right"></td>
 </tr></table></div>
@@ -133,13 +133,27 @@
     <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 alsasrc <span class="gtkdoc opt">!</span> audiorate <span class="gtkdoc opt">!</span> wavenc <span class="gtkdoc opt">!</span> filesink location<span class="gtkdoc opt">=</span>alsa<span class="gtkdoc opt">.</span>wav</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 autoaudiosrc <span class="gtkdoc opt">!</span> audiorate <span class="gtkdoc opt">!</span> audioconvert <span class="gtkdoc opt">!</span> wavenc <span class="gtkdoc opt">!</span> filesink location<span class="gtkdoc opt">=</span>alsa<span class="gtkdoc opt">.</span>wav</pre></td>
       </tr>
     </tbody>
   </table>
 </div>
- Capture audio from an ALSA device, and turn it into a perfect stream
+ Capture audio from the sound card and turn it into a perfect stream
 for saving in a raw audio file.
+<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 uridecodebin uri<span class="gtkdoc opt">=</span>file<span class="gtkdoc opt">:</span><span class="gtkdoc slc">///path/to/audio.file ! audiorate ! audioconvert ! wavenc ! filesink location=alsa.wav</span></pre></td>
+      </tr>
+    </tbody>
+  </table>
+</div>
+ Decodes an audio file and transforms it into a perfect stream for saving
+in a raw audio WAV file. Without the audio rate, the timing might not be
+preserved correctly in the WAV file in case the decoded stream is jittery
+or there are samples missing.
 </div>
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
@@ -221,11 +235,10 @@
 </table></div>
 </div>
 </div>
-<p>
-</p>
 </div>
 <div class="refsect1">
 <a name="gst-plugins-base-plugins-audiorate.functions_details"></a><h2>Functions</h2>
+<p></p>
 </div>
 <div class="refsect1">
 <a name="gst-plugins-base-plugins-audiorate.other_details"></a><h2>Types and Values</h2>
@@ -300,7 +313,6 @@
 </div>
 </div>
 <div class="footer">
-<hr>
-          Generated by GTK-Doc V1.21</div>
+<hr>Generated by GTK-Doc V1.24</div>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/plugins/html/gst-plugins-base-plugins-audioresample.html b/docs/plugins/html/gst-plugins-base-plugins-audioresample.html
index a7069bc..45111ab 100644
--- a/docs/plugins/html/gst-plugins-base-plugins-audioresample.html
+++ b/docs/plugins/html/gst-plugins-base-plugins-audioresample.html
@@ -2,13 +2,13 @@
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>GStreamer Base Plugins 1.0 Plugins Reference Manual: audioresample</title>
+<title>audioresample: GStreamer Base 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 Base Plugins 1.0 Plugins Reference Manual">
 <link rel="up" href="ch01.html" title="gst-plugins-base Elements">
 <link rel="prev" href="gst-plugins-base-plugins-audiorate.html" title="audiorate">
 <link rel="next" href="gst-plugins-base-plugins-audiotestsrc.html" title="audiotestsrc">
-<meta name="generator" content="GTK-Doc V1.21 (XML mode)">
+<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">
@@ -29,7 +29,7 @@
 <div class="refnamediv"><table width="100%"><tr>
 <td valign="top">
 <h2><span class="refentrytitle"><a name="gst-plugins-base-plugins-audioresample.top_of_page"></a>audioresample</span></h2>
-<p>audioresample — Resamples audio</p>
+<p>audioresample</p>
 </td>
 <td class="gallery_image" valign="top" align="right"></td>
 </tr></table></div>
@@ -101,13 +101,14 @@
     <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 filesrc location<span class="gtkdoc opt">=</span>sine<span class="gtkdoc opt">.</span>ogg <span class="gtkdoc opt">!</span> oggdemux <span class="gtkdoc opt">!</span> vorbisdec <span class="gtkdoc opt">!</span> audioconvert <span class="gtkdoc opt">!</span> audioresample <span class="gtkdoc opt">!</span> audio<span class="gtkdoc opt">/</span>x<span class="gtkdoc opt">-</span>raw<span class="gtkdoc opt">,</span> rate<span class="gtkdoc opt">=</span><span class="number">8000</span> <span class="gtkdoc opt">!</span> alsasink</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 uridecodebin uri<span class="gtkdoc opt">=</span>file<span class="gtkdoc opt">:</span><span class="gtkdoc slc">///path/to/audio.ogg ! audioconvert ! audioresample ! audio/x-raw, rate=8000 ! autoaudiosink</span></pre></td>
       </tr>
     </tbody>
   </table>
 </div>
- Decode an Ogg/Vorbis downsample to 8Khz and play sound through alsa.
+ Decode an audio file and downsample it to 8Khz and play sound.
 To create the Ogg/Vorbis file refer to the documentation of vorbisenc.
+This assumes there is an audio sink that will accept/handle 8kHz audio.
 </div>
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
@@ -189,11 +190,10 @@
 </table></div>
 </div>
 </div>
-<p>
-</p>
 </div>
 <div class="refsect1">
 <a name="gst-plugins-base-plugins-audioresample.functions_details"></a><h2>Functions</h2>
+<p></p>
 </div>
 <div class="refsect1">
 <a name="gst-plugins-base-plugins-audioresample.other_details"></a><h2>Types and Values</h2>
@@ -232,7 +232,6 @@
 </div>
 </div>
 <div class="footer">
-<hr>
-          Generated by GTK-Doc V1.21</div>
+<hr>Generated by GTK-Doc V1.24</div>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/plugins/html/gst-plugins-base-plugins-audiotestsrc.html b/docs/plugins/html/gst-plugins-base-plugins-audiotestsrc.html
index ac773f2..6c3c549 100644
--- a/docs/plugins/html/gst-plugins-base-plugins-audiotestsrc.html
+++ b/docs/plugins/html/gst-plugins-base-plugins-audiotestsrc.html
@@ -2,13 +2,13 @@
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>GStreamer Base Plugins 1.0 Plugins Reference Manual: audiotestsrc</title>
+<title>audiotestsrc: GStreamer Base 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 Base Plugins 1.0 Plugins Reference Manual">
 <link rel="up" href="ch01.html" title="gst-plugins-base Elements">
 <link rel="prev" href="gst-plugins-base-plugins-audioresample.html" title="audioresample">
 <link rel="next" href="gst-plugins-base-plugins-cdparanoiasrc.html" title="cdparanoiasrc">
-<meta name="generator" content="GTK-Doc V1.21 (XML mode)">
+<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">
@@ -29,7 +29,7 @@
 <div class="refnamediv"><table width="100%"><tr>
 <td valign="top">
 <h2><span class="refentrytitle"><a name="gst-plugins-base-plugins-audiotestsrc.top_of_page"></a>audiotestsrc</span></h2>
-<p>audiotestsrc — Creates audio test signals of given frequency and volume</p>
+<p>audiotestsrc</p>
 </td>
 <td class="gallery_image" valign="top" align="right"></td>
 </tr></table></div>
@@ -125,7 +125,7 @@
     <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> alsasink</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> autoaudiosink</pre></td>
       </tr>
     </tbody>
   </table>
@@ -137,7 +137,7 @@
     <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 wave<span class="gtkdoc opt">=</span><span class="number">2</span> freq<span class="gtkdoc opt">=</span><span class="number">200</span> <span class="gtkdoc opt">!</span> audioconvert <span class="gtkdoc opt">!</span> tee name<span class="gtkdoc opt">=</span>t <span class="gtkdoc opt">!</span> queue <span class="gtkdoc opt">!</span> alsasink t<span class="gtkdoc opt">. !</span> queue <span class="gtkdoc opt">!</span> libvisual_lv_scope <span class="gtkdoc opt">!</span> videoconvert <span class="gtkdoc opt">!</span> xvimagesink</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 wave<span class="gtkdoc opt">=</span><span class="number">2</span> freq<span class="gtkdoc opt">=</span><span class="number">200</span> <span class="gtkdoc opt">!</span> tee name<span class="gtkdoc opt">=</span>t <span class="gtkdoc opt">!</span> queue <span class="gtkdoc opt">!</span> audioconvert <span class="gtkdoc opt">!</span> autoaudiosink t<span class="gtkdoc opt">. !</span> queue <span class="gtkdoc opt">!</span> audioconvert <span class="gtkdoc opt">!</span> libvisual_lv_scope <span class="gtkdoc opt">!</span> videoconvert <span class="gtkdoc opt">!</span> autovideosink</pre></td>
       </tr>
     </tbody>
   </table>
@@ -202,11 +202,10 @@
 </table></div>
 </div>
 </div>
-<p>
-</p>
 </div>
 <div class="refsect1">
 <a name="gst-plugins-base-plugins-audiotestsrc.functions_details"></a><h2>Functions</h2>
+<p></p>
 </div>
 <div class="refsect1">
 <a name="gst-plugins-base-plugins-audiotestsrc.other_details"></a><h2>Types and Values</h2>
@@ -395,7 +394,6 @@
 </div>
 </div>
 <div class="footer">
-<hr>
-          Generated by GTK-Doc V1.21</div>
+<hr>Generated by GTK-Doc V1.24</div>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/plugins/html/gst-plugins-base-plugins-cdparanoiasrc.html b/docs/plugins/html/gst-plugins-base-plugins-cdparanoiasrc.html
index 5ac556d..a531435 100644
--- a/docs/plugins/html/gst-plugins-base-plugins-cdparanoiasrc.html
+++ b/docs/plugins/html/gst-plugins-base-plugins-cdparanoiasrc.html
@@ -2,13 +2,13 @@
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>GStreamer Base Plugins 1.0 Plugins Reference Manual: cdparanoiasrc</title>
+<title>cdparanoiasrc: GStreamer Base 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 Base Plugins 1.0 Plugins Reference Manual">
 <link rel="up" href="ch01.html" title="gst-plugins-base Elements">
 <link rel="prev" href="gst-plugins-base-plugins-audiotestsrc.html" title="audiotestsrc">
 <link rel="next" href="gst-plugins-base-plugins-clockoverlay.html" title="clockoverlay">
-<meta name="generator" content="GTK-Doc V1.21 (XML mode)">
+<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">
@@ -31,7 +31,7 @@
 <div class="refnamediv"><table width="100%"><tr>
 <td valign="top">
 <h2><span class="refentrytitle"><a name="gst-plugins-base-plugins-cdparanoiasrc.top_of_page"></a>cdparanoiasrc</span></h2>
-<p>cdparanoiasrc — Read audio from CD in paranoid mode</p>
+<p>cdparanoiasrc</p>
 </td>
 <td class="gallery_image" valign="top" align="right"></td>
 </tr></table></div>
@@ -85,12 +85,12 @@
 <tr>
 <td class="signal_type"><span class="returnvalue">void</span></td>
 <td class="signal_name"><a class="link" href="gst-plugins-base-plugins-cdparanoiasrc.html#GstCdParanoiaSrc-transport-error" title="The “transport-error” signal">transport-error</a></td>
-<td class="signal_flags">Run Last</td>
+<td class="signal_flags"><a href="https://developer.gnome.org/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS">Run Last</a></td>
 </tr>
 <tr>
 <td class="signal_type"><span class="returnvalue">void</span></td>
 <td class="signal_name"><a class="link" href="gst-plugins-base-plugins-cdparanoiasrc.html#GstCdParanoiaSrc-uncorrected-error" title="The “uncorrected-error” signal">uncorrected-error</a></td>
-<td class="signal_flags">Run Last</td>
+<td class="signal_flags"><a href="https://developer.gnome.org/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS">Run Last</a></td>
 </tr>
 </tbody>
 </table></div>
@@ -184,19 +184,16 @@
 </table></div>
 </div>
 </div>
-<p>
-</p>
 </div>
 <div class="refsect1">
 <a name="gst-plugins-base-plugins-cdparanoiasrc.functions_details"></a><h2>Functions</h2>
+<p></p>
 </div>
 <div class="refsect1">
 <a name="gst-plugins-base-plugins-cdparanoiasrc.other_details"></a><h2>Types and Values</h2>
 <div class="refsect2">
 <a name="GstCdParanoiaSrc-struct"></a><h3>struct GstCdParanoiaSrc</h3>
 <pre class="programlisting">struct GstCdParanoiaSrc;</pre>
-<p>
-</p>
 </div>
 </div>
 <div class="refsect1">
@@ -252,31 +249,7 @@
 user_function (<a class="link" href="gst-plugins-base-plugins-cdparanoiasrc.html#GstCdParanoiaSrc"><span class="type">GstCdParanoiaSrc</span></a> *gstcdparanoiasrc,
                <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>
-</p>
-<div class="refsect3">
-<a name="id-1.2.11.13.2.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>gstcdparanoiasrc</p></td>
-<td class="parameter_description"><p>the object which received the signal.</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 set when the signal handler was connected.</p></td>
-<td class="parameter_annotations"> </td>
-</tr>
-</tbody>
-</table></div>
-</div>
-<p>Flags: Run Last</p>
+<p>Flags: <a href="https://developer.gnome.org/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS">Run Last</a></p>
 </div>
 <hr>
 <div class="refsect2">
@@ -285,36 +258,11 @@
 user_function (<a class="link" href="gst-plugins-base-plugins-cdparanoiasrc.html#GstCdParanoiaSrc"><span class="type">GstCdParanoiaSrc</span></a> *gstcdparanoiasrc,
                <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>
-</p>
-<div class="refsect3">
-<a name="id-1.2.11.13.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>gstcdparanoiasrc</p></td>
-<td class="parameter_description"><p>the object which received the signal.</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 set when the signal handler was connected.</p></td>
-<td class="parameter_annotations"> </td>
-</tr>
-</tbody>
-</table></div>
-</div>
-<p>Flags: Run Last</p>
+<p>Flags: <a href="https://developer.gnome.org/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS">Run Last</a></p>
 </div>
 </div>
 </div>
 <div class="footer">
-<hr>
-          Generated by GTK-Doc V1.21</div>
+<hr>Generated by GTK-Doc V1.24</div>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/plugins/html/gst-plugins-base-plugins-clockoverlay.html b/docs/plugins/html/gst-plugins-base-plugins-clockoverlay.html
index aec6fb5..55769ad 100644
--- a/docs/plugins/html/gst-plugins-base-plugins-clockoverlay.html
+++ b/docs/plugins/html/gst-plugins-base-plugins-clockoverlay.html
@@ -2,13 +2,13 @@
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>GStreamer Base Plugins 1.0 Plugins Reference Manual: clockoverlay</title>
+<title>clockoverlay: GStreamer Base 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 Base Plugins 1.0 Plugins Reference Manual">
 <link rel="up" href="ch01.html" title="gst-plugins-base Elements">
 <link rel="prev" href="gst-plugins-base-plugins-cdparanoiasrc.html" title="cdparanoiasrc">
 <link rel="next" href="gst-plugins-base-plugins-decodebin.html" title="decodebin">
-<meta name="generator" content="GTK-Doc V1.21 (XML mode)">
+<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">
@@ -29,7 +29,7 @@
 <div class="refnamediv"><table width="100%"><tr>
 <td valign="top">
 <h2><span class="refentrytitle"><a name="gst-plugins-base-plugins-clockoverlay.top_of_page"></a>clockoverlay</span></h2>
-<p>clockoverlay — Overlays the current clock time on a video stream</p>
+<p>clockoverlay</p>
 </td>
 <td class="gallery_image" valign="top" align="right"></td>
 </tr></table></div>
@@ -128,7 +128,7 @@
 </tr>
 <tr>
 <td><p><span class="term"></span></p></td>
-<td> video/x-raw(ANY), format=(string){ I420, YV12, YUY2, UYVY, AYUV, RGBx, BGRx, xRGB, xBGR, RGBA, BGRA, ARGB, ABGR, RGB, BGR, Y41B, Y42B, YVYU, Y444, v210, v216, NV12, NV21, NV16, NV24, GRAY8, GRAY16_BE, GRAY16_LE, v308, RGB16, BGR16, RGB15, BGR15, UYVP, A420, RGB8P, YUV9, YVU9, IYU1, ARGB64, AYUV64, r210, I420_10LE, I420_10BE, I422_10LE, I422_10BE, Y444_10LE, Y444_10BE, GBR, GBR_10LE, GBR_10BE, NV12_64Z32 }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</td>
+<td> video/x-raw(ANY), format=(string){ I420, YV12, YUY2, UYVY, AYUV, RGBx, BGRx, xRGB, xBGR, RGBA, BGRA, ARGB, ABGR, RGB, BGR, Y41B, Y42B, YVYU, Y444, v210, v216, NV12, NV21, NV16, NV61, NV24, GRAY8, GRAY16_BE, GRAY16_LE, v308, RGB16, BGR16, RGB15, BGR15, UYVP, A420, RGB8P, YUV9, YVU9, IYU1, ARGB64, AYUV64, r210, I420_10LE, I420_10BE, I422_10LE, I422_10BE, Y444_10LE, Y444_10BE, GBR, GBR_10LE, GBR_10BE, NV12_64Z32, A420_10LE, A420_10BE, A422_10LE, A422_10BE, A444_10LE, A444_10BE }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</td>
 </tr>
 </tbody>
 </table></div>
@@ -156,25 +156,22 @@
 </tr>
 <tr>
 <td><p><span class="term"></span></p></td>
-<td> video/x-raw(ANY), format=(string){ I420, YV12, YUY2, UYVY, AYUV, RGBx, BGRx, xRGB, xBGR, RGBA, BGRA, ARGB, ABGR, RGB, BGR, Y41B, Y42B, YVYU, Y444, v210, v216, NV12, NV21, NV16, NV24, GRAY8, GRAY16_BE, GRAY16_LE, v308, RGB16, BGR16, RGB15, BGR15, UYVP, A420, RGB8P, YUV9, YVU9, IYU1, ARGB64, AYUV64, r210, I420_10LE, I420_10BE, I422_10LE, I422_10BE, Y444_10LE, Y444_10BE, GBR, GBR_10LE, GBR_10BE, NV12_64Z32 }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</td>
+<td> video/x-raw(ANY), format=(string){ I420, YV12, YUY2, UYVY, AYUV, RGBx, BGRx, xRGB, xBGR, RGBA, BGRA, ARGB, ABGR, RGB, BGR, Y41B, Y42B, YVYU, Y444, v210, v216, NV12, NV21, NV16, NV61, NV24, GRAY8, GRAY16_BE, GRAY16_LE, v308, RGB16, BGR16, RGB15, BGR15, UYVP, A420, RGB8P, YUV9, YVU9, IYU1, ARGB64, AYUV64, r210, I420_10LE, I420_10BE, I422_10LE, I422_10BE, Y444_10LE, Y444_10BE, GBR, GBR_10LE, GBR_10BE, NV12_64Z32, A420_10LE, A420_10BE, A422_10LE, A422_10BE, A444_10LE, A444_10BE }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</td>
 </tr>
 </tbody>
 </table></div>
 </div>
 </div>
-<p>
-</p>
 </div>
 <div class="refsect1">
 <a name="gst-plugins-base-plugins-clockoverlay.functions_details"></a><h2>Functions</h2>
+<p></p>
 </div>
 <div class="refsect1">
 <a name="gst-plugins-base-plugins-clockoverlay.other_details"></a><h2>Types and Values</h2>
 <div class="refsect2">
 <a name="GstClockOverlay-struct"></a><h3>struct GstClockOverlay</h3>
 <pre class="programlisting">struct GstClockOverlay;</pre>
-<p>
-</p>
 </div>
 </div>
 <div class="refsect1">
@@ -189,7 +186,6 @@
 </div>
 </div>
 <div class="footer">
-<hr>
-          Generated by GTK-Doc V1.21</div>
+<hr>Generated by GTK-Doc V1.24</div>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/plugins/html/gst-plugins-base-plugins-decodebin.html b/docs/plugins/html/gst-plugins-base-plugins-decodebin.html
index 89d48cd..0187812 100644
--- a/docs/plugins/html/gst-plugins-base-plugins-decodebin.html
+++ b/docs/plugins/html/gst-plugins-base-plugins-decodebin.html
@@ -2,13 +2,13 @@
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>GStreamer Base Plugins 1.0 Plugins Reference Manual: decodebin</title>
+<title>decodebin: GStreamer Base 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 Base Plugins 1.0 Plugins Reference Manual">
 <link rel="up" href="ch01.html" title="gst-plugins-base Elements">
 <link rel="prev" href="gst-plugins-base-plugins-clockoverlay.html" title="clockoverlay">
 <link rel="next" href="gst-plugins-base-plugins-encodebin.html" title="encodebin">
-<meta name="generator" content="GTK-Doc V1.21 (XML mode)">
+<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">
@@ -31,7 +31,7 @@
 <div class="refnamediv"><table width="100%"><tr>
 <td valign="top">
 <h2><span class="refentrytitle"><a name="gst-plugins-base-plugins-decodebin.top_of_page"></a>decodebin</span></h2>
-<p>decodebin — Autoplug and decode to raw media</p>
+<p>decodebin</p>
 </td>
 <td class="gallery_image" valign="top" align="right"></td>
 </tr></table></div>
@@ -122,39 +122,39 @@
 <tr>
 <td class="signal_type"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a></td>
 <td class="signal_name"><a class="link" href="gst-plugins-base-plugins-decodebin.html#GstDecodeBin-autoplug-continue" title="The “autoplug-continue” signal">autoplug-continue</a></td>
-<td class="signal_flags">Run Last</td>
+<td class="signal_flags"><a href="https://developer.gnome.org/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS">Run Last</a></td>
 </tr>
 <tr>
 <td class="signal_type">
 <a href="https://developer.gnome.org/gobject/unstable/gobject-Value-arrays.html#GValueArray"><span class="returnvalue">GValueArray</span></a>*</td>
 <td class="signal_name"><a class="link" href="gst-plugins-base-plugins-decodebin.html#GstDecodeBin-autoplug-factories" title="The “autoplug-factories” signal">autoplug-factories</a></td>
-<td class="signal_flags">Run Last</td>
+<td class="signal_flags"><a href="https://developer.gnome.org/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS">Run Last</a></td>
 </tr>
 <tr>
 <td class="signal_type"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a></td>
 <td class="signal_name"><a class="link" href="gst-plugins-base-plugins-decodebin.html#GstDecodeBin-autoplug-query" title="The “autoplug-query” signal">autoplug-query</a></td>
-<td class="signal_flags">Run Last</td>
+<td class="signal_flags"><a href="https://developer.gnome.org/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS">Run Last</a></td>
 </tr>
 <tr>
 <td class="signal_type"><a class="link" href="gst-plugins-base-plugins-uridecodebin.html#GstAutoplugSelectResult" title="enum GstAutoplugSelectResult"><span class="returnvalue">GstAutoplugSelectResult</span></a></td>
 <td class="signal_name"><a class="link" href="gst-plugins-base-plugins-decodebin.html#GstDecodeBin-autoplug-select" title="The “autoplug-select” signal">autoplug-select</a></td>
-<td class="signal_flags">Run Last</td>
+<td class="signal_flags"><a href="https://developer.gnome.org/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS">Run Last</a></td>
 </tr>
 <tr>
 <td class="signal_type">
 <a href="https://developer.gnome.org/gobject/unstable/gobject-Value-arrays.html#GValueArray"><span class="returnvalue">GValueArray</span></a>*</td>
 <td class="signal_name"><a class="link" href="gst-plugins-base-plugins-decodebin.html#GstDecodeBin-autoplug-sort" title="The “autoplug-sort” signal">autoplug-sort</a></td>
-<td class="signal_flags">Run Last</td>
+<td class="signal_flags"><a href="https://developer.gnome.org/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS">Run Last</a></td>
 </tr>
 <tr>
 <td class="signal_type"><span class="returnvalue">void</span></td>
 <td class="signal_name"><a class="link" href="gst-plugins-base-plugins-decodebin.html#GstDecodeBin-drained" title="The “drained” signal">drained</a></td>
-<td class="signal_flags">Run Last</td>
+<td class="signal_flags"><a href="https://developer.gnome.org/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS">Run Last</a></td>
 </tr>
 <tr>
 <td class="signal_type"><span class="returnvalue">void</span></td>
 <td class="signal_name"><a class="link" href="gst-plugins-base-plugins-decodebin.html#GstDecodeBin-unknown-type" title="The “unknown-type” signal">unknown-type</a></td>
-<td class="signal_flags">Run Last</td>
+<td class="signal_flags"><a href="https://developer.gnome.org/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS">Run Last</a></td>
 </tr>
 </tbody>
 </table></div>
@@ -198,7 +198,7 @@
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="id-1.2.13.9.3.3.1"></a><h3>Element Information</h3>
+<a name="id-1.2.13.9.4.1"></a><h3>Element Information</h3>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
@@ -224,7 +224,7 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="id-1.2.13.9.3.3.2"></a><h3>Element Pads</h3>
+<a name="id-1.2.13.9.4.2"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
@@ -275,11 +275,10 @@
 </table></div>
 </div>
 </div>
-<p>
-</p>
 </div>
 <div class="refsect1">
 <a name="gst-plugins-base-plugins-decodebin.functions_details"></a><h2>Functions</h2>
+<p></p>
 </div>
 <div class="refsect1">
 <a name="gst-plugins-base-plugins-decodebin.other_details"></a><h2>Types and Values</h2>
@@ -443,9 +442,8 @@
 . If <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><span class="type">FALSE</span></a>, those caps will be considered as
 final and the pad will be exposed as such (see 'pad-added' signal of
 <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html"><span class="type">GstElement</span></a>).</p>
-<p></p>
 </div>
-<p>Flags: Run Last</p>
+<p>Flags: <a href="https://developer.gnome.org/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS">Run Last</a></p>
 </div>
 <hr>
 <div class="refsect2">
@@ -466,7 +464,7 @@
 having an unhandled type media type.</p>
 <div class="note">
   Only the signal handler that is connected first will ever by invoked.
-  Don't connect signal handlers with the <span class="type">G_CONNECT_AFTER</span> flag to this
+  Don't connect signal handlers with the <a href="https://developer.gnome.org/gobject/unstable/gobject-Signals.html#G-CONNECT-AFTER:CAPS"><span class="type">G_CONNECT_AFTER</span></a> flag to this
   signal, they will never be invoked!
 </div>
 <div class="refsect3">
@@ -506,9 +504,8 @@
 <p> a <a href="https://developer.gnome.org/gobject/unstable/gobject-Value-arrays.html#GValueArray"><span class="type">GValueArray</span></a>* with a list of factories to try. The factories are
 by default tried in the returned order or based on the index returned by
 "autoplug-select".</p>
-<p></p>
 </div>
-<p>Flags: Run Last</p>
+<p>Flags: <a href="https://developer.gnome.org/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS">Run Last</a></p>
 </div>
 <hr>
 <div class="refsect2">
@@ -568,9 +565,8 @@
 <div class="refsect3">
 <a name="id-1.2.13.13.4.6"></a><h4>Returns</h4>
 <p> <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><span class="type">TRUE</span></a> if the query was handled, <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><span class="type">FALSE</span></a> otherwise.</p>
-<p></p>
 </div>
-<p>Flags: Run Last</p>
+<p>Flags: <a href="https://developer.gnome.org/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS">Run Last</a></p>
 </div>
 <hr>
 <div class="refsect2">
@@ -645,9 +641,8 @@
 <p> a <span class="type">GST_TYPE_AUTOPLUG_SELECT_RESULT</span> that indicates the required
 operation. the default handler will always return
 <a class="link" href="gst-plugins-base-plugins-uridecodebin.html#GST-AUTOPLUG-SELECT-TRY:CAPS"><span class="type">GST_AUTOPLUG_SELECT_TRY</span></a>.</p>
-<p></p>
 </div>
-<p>Flags: Run Last</p>
+<p>Flags: <a href="https://developer.gnome.org/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS">Run Last</a></p>
 </div>
 <hr>
 <div class="refsect2">
@@ -671,7 +666,7 @@
   Invocation of signal handlers stops after one signal handler has
   returned something else than <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><span class="type">NULL</span></a>. Signal handlers are invoked in
   the order they were connected in.
-  Don't connect signal handlers with the <span class="type">G_CONNECT_AFTER</span> flag to this
+  Don't connect signal handlers with the <a href="https://developer.gnome.org/gobject/unstable/gobject-Signals.html#G-CONNECT-AFTER:CAPS"><span class="type">G_CONNECT_AFTER</span></a> flag to this
   signal, they will never be invoked!
 </div>
 <div class="refsect3">
@@ -714,9 +709,8 @@
 <div class="refsect3">
 <a name="id-1.2.13.13.6.8"></a><h4>Returns</h4>
 <p> A new sorted array of <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElementFactory.html"><span class="type">GstElementFactory</span></a> objects.</p>
-<p></p>
 </div>
-<p>Flags: Run Last</p>
+<p>Flags: <a href="https://developer.gnome.org/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS">Run Last</a></p>
 </div>
 <hr>
 <div class="refsect2">
@@ -747,7 +741,7 @@
 </tbody>
 </table></div>
 </div>
-<p>Flags: Run Last</p>
+<p>Flags: <a href="https://developer.gnome.org/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS">Run Last</a></p>
 </div>
 <hr>
 <div class="refsect2">
@@ -792,12 +786,11 @@
 </tbody>
 </table></div>
 </div>
-<p>Flags: Run Last</p>
+<p>Flags: <a href="https://developer.gnome.org/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS">Run Last</a></p>
 </div>
 </div>
 </div>
 <div class="footer">
-<hr>
-          Generated by GTK-Doc V1.21</div>
+<hr>Generated by GTK-Doc V1.24</div>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/plugins/html/gst-plugins-base-plugins-encodebin.html b/docs/plugins/html/gst-plugins-base-plugins-encodebin.html
index 2cb36e2..57c9544 100644
--- a/docs/plugins/html/gst-plugins-base-plugins-encodebin.html
+++ b/docs/plugins/html/gst-plugins-base-plugins-encodebin.html
@@ -2,13 +2,13 @@
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>GStreamer Base Plugins 1.0 Plugins Reference Manual: encodebin</title>
+<title>encodebin: GStreamer Base 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 Base Plugins 1.0 Plugins Reference Manual">
 <link rel="up" href="ch01.html" title="gst-plugins-base Elements">
 <link rel="prev" href="gst-plugins-base-plugins-decodebin.html" title="decodebin">
-<link rel="next" href="gst-plugins-base-plugins-videoconvert.html" title="videoconvert">
-<meta name="generator" content="GTK-Doc V1.21 (XML mode)">
+<link rel="next" href="gst-plugins-base-plugins-giosink.html" title="giosink">
+<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">
@@ -24,14 +24,14 @@
 <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-base-plugins-decodebin.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
-<td><a accesskey="n" href="gst-plugins-base-plugins-videoconvert.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
+<td><a accesskey="n" href="gst-plugins-base-plugins-giosink.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
 </tr></table>
 <div class="refentry">
 <a name="gst-plugins-base-plugins-encodebin"></a><div class="titlepage"></div>
 <div class="refnamediv"><table width="100%"><tr>
 <td valign="top">
 <h2><span class="refentrytitle"><a name="gst-plugins-base-plugins-encodebin.top_of_page"></a>encodebin</span></h2>
-<p>encodebin — Convenience encoding/muxing element</p>
+<p>encodebin</p>
 </td>
 <td class="gallery_image" valign="top" align="right"></td>
 </tr></table></div>
@@ -96,13 +96,13 @@
 <td class="signal_type">
 <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html"><span class="returnvalue">GstPad</span></a>*</td>
 <td class="signal_name"><a class="link" href="gst-plugins-base-plugins-encodebin.html#GstEncodeBin-request-pad" title="The “request-pad” signal">request-pad</a></td>
-<td class="signal_flags">Action</td>
+<td class="signal_flags"><a href="https://developer.gnome.org/gobject/unstable/gobject-Signals.html#G-SIGNAL-ACTION:CAPS">Action</a></td>
 </tr>
 <tr>
 <td class="signal_type">
 <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html"><span class="returnvalue">GstPad</span></a>*</td>
 <td class="signal_name"><a class="link" href="gst-plugins-base-plugins-encodebin.html#GstEncodeBin-request-profile-pad" title="The “request-profile-pad” signal">request-profile-pad</a></td>
-<td class="signal_flags">Action</td>
+<td class="signal_flags"><a href="https://developer.gnome.org/gobject/unstable/gobject-Signals.html#G-SIGNAL-ACTION:CAPS">Action</a></td>
 </tr>
 </tbody>
 </table></div>
@@ -334,19 +334,16 @@
 </table></div>
 </div>
 </div>
-<p>
-</p>
 </div>
 <div class="refsect1">
 <a name="gst-plugins-base-plugins-encodebin.functions_details"></a><h2>Functions</h2>
+<p></p>
 </div>
 <div class="refsect1">
 <a name="gst-plugins-base-plugins-encodebin.other_details"></a><h2>Types and Values</h2>
 <div class="refsect2">
 <a name="GstEncodeBin-struct"></a><h3>GstEncodeBin</h3>
 <pre class="programlisting">typedef struct _GstEncodeBin GstEncodeBin;</pre>
-<p>
-</p>
 </div>
 </div>
 <div class="refsect1">
@@ -378,7 +375,7 @@
 <a name="GstEncodeBin--profile"></a><h3>The <code class="literal">“profile”</code> property</h3>
 <pre class="programlisting">  “profile”                  <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base-libs/html/gst-plugins-base-libs-encoding-profile.html#GstEncodingProfile"><span class="type">GstEncodingProfile</span></a> *</pre>
 <p>The <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base-libs/html/gst-plugins-base-libs-encoding-profile.html#GstEncodingProfile"><span class="type">GstEncodingProfile</span></a> to use. This property must be set before going
-to <code class="literal">GST_STATE_PAUSED</code> or higher.</p>
+to <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html#GST-STATE-PAUSED:CAPS"><code class="literal">GST_STATE_PAUSED</code></a> or higher.</p>
 <p>Flags: Read / Write</p>
 </div>
 <hr>
@@ -449,9 +446,8 @@
 <a name="id-1.2.14.13.2.6"></a><h4>Returns</h4>
 <p> A compatible <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html"><span class="type">GstPad</span></a>, or <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> if no compatible <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html"><span class="type">GstPad</span></a> could be
 created or is available.</p>
-<p></p>
 </div>
-<p>Flags: Action</p>
+<p>Flags: <a href="https://developer.gnome.org/gobject/unstable/gobject-Signals.html#G-SIGNAL-ACTION:CAPS">Action</a></p>
 </div>
 <hr>
 <div class="refsect2">
@@ -495,14 +491,12 @@
 <a name="id-1.2.14.13.3.6"></a><h4>Returns</h4>
 <p> A compatible <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html"><span class="type">GstPad</span></a>, or <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> if no compatible <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html"><span class="type">GstPad</span></a> could be
 created or is available.</p>
-<p></p>
 </div>
-<p>Flags: Action</p>
+<p>Flags: <a href="https://developer.gnome.org/gobject/unstable/gobject-Signals.html#G-SIGNAL-ACTION:CAPS">Action</a></p>
 </div>
 </div>
 </div>
 <div class="footer">
-<hr>
-          Generated by GTK-Doc V1.21</div>
+<hr>Generated by GTK-Doc V1.24</div>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/plugins/html/gst-plugins-base-plugins-giosink.html b/docs/plugins/html/gst-plugins-base-plugins-giosink.html
index f30276e..d49d247 100644
--- a/docs/plugins/html/gst-plugins-base-plugins-giosink.html
+++ b/docs/plugins/html/gst-plugins-base-plugins-giosink.html
@@ -2,13 +2,13 @@
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>GStreamer Base Plugins 1.0 Plugins Reference Manual: giosink</title>
+<title>giosink: GStreamer Base 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 Base Plugins 1.0 Plugins Reference Manual">
 <link rel="up" href="ch01.html" title="gst-plugins-base Elements">
-<link rel="prev" href="gst-plugins-base-plugins-videoconvert.html" title="videoconvert">
+<link rel="prev" href="gst-plugins-base-plugins-encodebin.html" title="encodebin">
 <link rel="next" href="gst-plugins-base-plugins-giosrc.html" title="giosrc">
-<meta name="generator" content="GTK-Doc V1.21 (XML mode)">
+<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">
@@ -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-base-plugins-videoconvert.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
+<td><a accesskey="p" href="gst-plugins-base-plugins-encodebin.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
 <td><a accesskey="n" href="gst-plugins-base-plugins-giosrc.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
 </tr></table>
 <div class="refentry">
@@ -30,7 +30,7 @@
 <div class="refnamediv"><table width="100%"><tr>
 <td valign="top">
 <h2><span class="refentrytitle"><a name="gst-plugins-base-plugins-giosink.top_of_page"></a>giosink</span></h2>
-<p>giosink — Write to any GIO-supported location</p>
+<p>giosink</p>
 </td>
 <td class="gallery_image" valign="top" align="right"></td>
 </tr></table></div>
@@ -95,7 +95,7 @@
 the GIO library or it's VFS backends. Common protocols are 'file', 'ftp',
 or 'smb'.</p>
 <p>If the URI or <a href="https://developer.gnome.org/gio/unstable/GFile.html"><span class="type">GFile</span></a> already exists giosink will post a message of
-type <code class="literal">GST_MESSAGE_ELEMENT</code> with name "file-exists" on the bus. The message
+type <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstMessage.html#GST-MESSAGE-ELEMENT:CAPS"><code class="literal">GST_MESSAGE_ELEMENT</code></a> with name "file-exists" on the bus. The message
 also contains the <a href="https://developer.gnome.org/gio/unstable/GFile.html"><span class="type">GFile</span></a> and the corresponding URI.
 Applications can use the "file-exists" message to notify the user about
 the problem and to set a different target location or to remove the
@@ -110,13 +110,13 @@
 mounted. This message can be used by application to mount the location
 and retry after the location was mounted successfully.</p>
 <div class="refsect2">
-<a name="id-1.2.16.8.5"></a><h3>Example pipelines</h3>
+<a name="id-1.2.15.8.5"></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</pre></td>
-        <td class="listing_code"><pre class="programlisting">gst<span class="gtkdoc opt">-</span>launch <span class="gtkdoc opt">-</span>v filesrc location<span class="gtkdoc opt">=</span>input<span class="gtkdoc opt">.</span>xyz <span class="gtkdoc opt">!</span> giosink location<span class="gtkdoc opt">=</span>file<span class="gtkdoc opt">:</span><span class="gtkdoc slc">///home/joe/out.xyz</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 filesrc location<span class="gtkdoc opt">=</span>input<span class="gtkdoc opt">.</span>xyz <span class="gtkdoc opt">!</span> giosink location<span class="gtkdoc opt">=</span>file<span class="gtkdoc opt">:</span><span class="gtkdoc slc">///home/joe/out.xyz</span></pre></td>
       </tr>
     </tbody>
   </table>
@@ -128,19 +128,19 @@
     <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 filesrc location<span class="gtkdoc opt">=</span>foo<span class="gtkdoc opt">.</span>mp3 <span class="gtkdoc opt">!</span> mad <span class="gtkdoc opt">!</span> flacenc <span class="gtkdoc opt">!</span> giosink location<span class="gtkdoc opt">=</span>smb<span class="gtkdoc opt">:</span><span class="gtkdoc slc">//othercomputer/foo.flac</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 uridecodebin uri<span class="gtkdoc opt">=</span>file<span class="gtkdoc opt">:</span><span class="gtkdoc slc">///path/to/audio.file ! audioconvert ! flacenc ! giosink location=smb://othercomputer/foo.flac</span></pre></td>
       </tr>
     </tbody>
   </table>
 </div>
- The above pipeline will re-encode an mp3 file into FLAC format and store
+ The above pipeline will re-encode an audio file into FLAC format and store
 it on a remote host using the Samba protocol.
 <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 audiotestsrc num<span class="gtkdoc opt">-</span>buffers<span class="gtkdoc opt">=</span><span class="number">100</span> <span class="gtkdoc opt">!</span> vorbisenc <span class="gtkdoc opt">!</span> oggmux <span class="gtkdoc opt">!</span> giosink location<span class="gtkdoc opt">=</span>file<span class="gtkdoc opt">:</span><span class="gtkdoc slc">///home/foo/bar.ogg</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 audiotestsrc num<span class="gtkdoc opt">-</span>buffers<span class="gtkdoc opt">=</span><span class="number">100</span> <span class="gtkdoc opt">!</span> vorbisenc <span class="gtkdoc opt">!</span> oggmux <span class="gtkdoc opt">!</span> giosink location<span class="gtkdoc opt">=</span>file<span class="gtkdoc opt">:</span><span class="gtkdoc slc">///home/foo/bar.ogg</span></pre></td>
       </tr>
     </tbody>
   </table>
@@ -151,7 +151,7 @@
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="id-1.2.16.8.6.1"></a><h3>Element Information</h3>
+<a name="id-1.2.15.8.6.1"></a><h3>Element Information</h3>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
@@ -177,7 +177,7 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="id-1.2.16.8.6.2"></a><h3>Element Pads</h3>
+<a name="id-1.2.15.8.6.2"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
@@ -204,11 +204,10 @@
 </table></div>
 </div>
 </div>
-<p>
-</p>
 </div>
 <div class="refsect1">
 <a name="gst-plugins-base-plugins-giosink.functions_details"></a><h2>Functions</h2>
+<p></p>
 </div>
 <div class="refsect1">
 <a name="gst-plugins-base-plugins-giosink.other_details"></a><h2>Types and Values</h2>
@@ -241,7 +240,6 @@
 </div>
 </div>
 <div class="footer">
-<hr>
-          Generated by GTK-Doc V1.21</div>
+<hr>Generated by GTK-Doc V1.24</div>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/plugins/html/gst-plugins-base-plugins-giosrc.html b/docs/plugins/html/gst-plugins-base-plugins-giosrc.html
index 2a4f4cf..9dc3d0b 100644
--- a/docs/plugins/html/gst-plugins-base-plugins-giosrc.html
+++ b/docs/plugins/html/gst-plugins-base-plugins-giosrc.html
@@ -2,13 +2,13 @@
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>GStreamer Base Plugins 1.0 Plugins Reference Manual: giosrc</title>
+<title>giosrc: GStreamer Base 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 Base Plugins 1.0 Plugins Reference Manual">
 <link rel="up" href="ch01.html" title="gst-plugins-base Elements">
 <link rel="prev" href="gst-plugins-base-plugins-giosink.html" title="giosink">
 <link rel="next" href="gst-plugins-base-plugins-giostreamsink.html" title="giostreamsink">
-<meta name="generator" content="GTK-Doc V1.21 (XML mode)">
+<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">
@@ -30,7 +30,7 @@
 <div class="refnamediv"><table width="100%"><tr>
 <td valign="top">
 <h2><span class="refentrytitle"><a name="gst-plugins-base-plugins-giosrc.top_of_page"></a>giosrc</span></h2>
-<p>giosrc — Read from any GIO-supported location</p>
+<p>giosrc</p>
 </td>
 <td class="gallery_image" valign="top" align="right"></td>
 </tr></table></div>
@@ -95,7 +95,7 @@
 the GIO library or it's VFS backends. Common protocols are 'file', 'http',
 'ftp', or 'smb'.</p>
 <p>If an URI or <a href="https://developer.gnome.org/gio/unstable/GFile.html"><span class="type">GFile</span></a> is not mounted giosrc will post a message of type
-<code class="literal">GST_MESSAGE_ELEMENT</code> with name "not-mounted" on the bus. The message
+<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstMessage.html#GST-MESSAGE-ELEMENT:CAPS"><code class="literal">GST_MESSAGE_ELEMENT</code></a> with name "not-mounted" on the bus. The message
 also contains the <a href="https://developer.gnome.org/gio/unstable/GFile.html"><span class="type">GFile</span></a> and the corresponding URI.
 Applications can use the "not-mounted" message to mount the <a href="https://developer.gnome.org/gio/unstable/GFile.html"><span class="type">GFile</span></a>
 by calling <a href="https://developer.gnome.org/gio/unstable/GFile.html#g-file-mount-enclosing-volume"><code class="function">g_file_mount_enclosing_volume()</code></a> and then restart the
@@ -106,13 +106,13 @@
 message was received and gst_bus_set_flushing(bus, FALSE) after the
 mounting was successful.</p>
 <div class="refsect2">
-<a name="id-1.2.17.8.4"></a><h3>Example launch lines</h3>
+<a name="id-1.2.16.8.4"></a><h3>Example launch lines</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 giosrc location<span class="gtkdoc opt">=</span>file<span class="gtkdoc opt">:</span><span class="gtkdoc slc">///home/joe/foo.xyz ! 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> <span class="gtkdoc opt">-</span>v giosrc location<span class="gtkdoc opt">=</span>file<span class="gtkdoc opt">:</span><span class="gtkdoc slc">///home/joe/foo.xyz ! fakesink</span></pre></td>
       </tr>
     </tbody>
   </table>
@@ -125,7 +125,7 @@
     <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 giosrc location<span class="gtkdoc opt">=</span>smb<span class="gtkdoc opt">:</span><span class="gtkdoc slc">//othercomputer/foo.xyz ! filesink location=/home/joe/foo.xyz</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 giosrc location<span class="gtkdoc opt">=</span>smb<span class="gtkdoc opt">:</span><span class="gtkdoc slc">//othercomputer/foo.xyz ! filesink location=/home/joe/foo.xyz</span></pre></td>
       </tr>
     </tbody>
   </table>
@@ -137,18 +137,18 @@
     <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 giosrc location<span class="gtkdoc opt">=</span>http<span class="gtkdoc opt">:</span><span class="gtkdoc slc">//music.foobar.com/demo.mp3 ! mad ! audioconvert ! audioresample ! alsasink</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 giosrc location<span class="gtkdoc opt">=</span>smb<span class="gtkdoc opt">:</span><span class="gtkdoc slc">//othercomputer/demo.mp3 ! decodebin ! audioconvert ! audioresample ! autoaudiosink</span></pre></td>
       </tr>
     </tbody>
   </table>
 </div>
  The above pipeline will read and decode and play an mp3 file from a
-web server using the http protocol.
+SAMBA server.
 </div>
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="id-1.2.17.8.5.1"></a><h3>Element Information</h3>
+<a name="id-1.2.16.8.5.1"></a><h3>Element Information</h3>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
@@ -174,7 +174,7 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="id-1.2.17.8.5.2"></a><h3>Element Pads</h3>
+<a name="id-1.2.16.8.5.2"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
@@ -201,11 +201,10 @@
 </table></div>
 </div>
 </div>
-<p>
-</p>
 </div>
 <div class="refsect1">
 <a name="gst-plugins-base-plugins-giosrc.functions_details"></a><h2>Functions</h2>
+<p></p>
 </div>
 <div class="refsect1">
 <a name="gst-plugins-base-plugins-giosrc.other_details"></a><h2>Types and Values</h2>
@@ -238,7 +237,6 @@
 </div>
 </div>
 <div class="footer">
-<hr>
-          Generated by GTK-Doc V1.21</div>
+<hr>Generated by GTK-Doc V1.24</div>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/plugins/html/gst-plugins-base-plugins-giostreamsink.html b/docs/plugins/html/gst-plugins-base-plugins-giostreamsink.html
index cae09f8..40544e0 100644
--- a/docs/plugins/html/gst-plugins-base-plugins-giostreamsink.html
+++ b/docs/plugins/html/gst-plugins-base-plugins-giostreamsink.html
@@ -2,13 +2,13 @@
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>GStreamer Base Plugins 1.0 Plugins Reference Manual: giostreamsink</title>
+<title>giostreamsink: GStreamer Base 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 Base Plugins 1.0 Plugins Reference Manual">
 <link rel="up" href="ch01.html" title="gst-plugins-base Elements">
 <link rel="prev" href="gst-plugins-base-plugins-giosrc.html" title="giosrc">
 <link rel="next" href="gst-plugins-base-plugins-giostreamsrc.html" title="giostreamsrc">
-<meta name="generator" content="GTK-Doc V1.21 (XML mode)">
+<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">
@@ -29,7 +29,7 @@
 <div class="refnamediv"><table width="100%"><tr>
 <td valign="top">
 <h2><span class="refentrytitle"><a name="gst-plugins-base-plugins-giostreamsink.top_of_page"></a>giostreamsink</span></h2>
-<p>giostreamsink — Write to any GIO stream</p>
+<p>giostreamsink</p>
 </td>
 <td class="gallery_image" valign="top" align="right"></td>
 </tr></table></div>
@@ -79,7 +79,7 @@
 <p>It can, for example, be used to write a stream to memory with a
 <span class="type">GMemoryOuputStream</span> or to write to a file with a <span class="type">GFileOuputStream</span>.</p>
 <div class="refsect2">
-<a name="id-1.2.18.7.4"></a><h3>Example code</h3>
+<a name="id-1.2.17.7.4"></a><h3>Example code</h3>
 <p>
 The following example writes the received data to a <a href="https://developer.gnome.org/gio/unstable/GMemoryOutputStream.html"><span class="type">GMemoryOutputStream</span></a>.
 </p>
@@ -144,7 +144,7 @@
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="id-1.2.18.7.5.1"></a><h3>Element Information</h3>
+<a name="id-1.2.17.7.5.1"></a><h3>Element Information</h3>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
@@ -170,7 +170,7 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="id-1.2.18.7.5.2"></a><h3>Element Pads</h3>
+<a name="id-1.2.17.7.5.2"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
@@ -197,11 +197,10 @@
 </table></div>
 </div>
 </div>
-<p>
-</p>
 </div>
 <div class="refsect1">
 <a name="gst-plugins-base-plugins-giostreamsink.functions_details"></a><h2>Functions</h2>
+<p></p>
 </div>
 <div class="refsect1">
 <a name="gst-plugins-base-plugins-giostreamsink.other_details"></a><h2>Types and Values</h2>
@@ -222,7 +221,6 @@
 </div>
 </div>
 <div class="footer">
-<hr>
-          Generated by GTK-Doc V1.21</div>
+<hr>Generated by GTK-Doc V1.24</div>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/plugins/html/gst-plugins-base-plugins-giostreamsrc.html b/docs/plugins/html/gst-plugins-base-plugins-giostreamsrc.html
index e697e47..9f716cc 100644
--- a/docs/plugins/html/gst-plugins-base-plugins-giostreamsrc.html
+++ b/docs/plugins/html/gst-plugins-base-plugins-giostreamsrc.html
@@ -2,13 +2,13 @@
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>GStreamer Base Plugins 1.0 Plugins Reference Manual: giostreamsrc</title>
+<title>giostreamsrc: GStreamer Base 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 Base Plugins 1.0 Plugins Reference Manual">
 <link rel="up" href="ch01.html" title="gst-plugins-base Elements">
 <link rel="prev" href="gst-plugins-base-plugins-giostreamsink.html" title="giostreamsink">
 <link rel="next" href="gst-plugins-base-plugins-multifdsink.html" title="multifdsink">
-<meta name="generator" content="GTK-Doc V1.21 (XML mode)">
+<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">
@@ -29,7 +29,7 @@
 <div class="refnamediv"><table width="100%"><tr>
 <td valign="top">
 <h2><span class="refentrytitle"><a name="gst-plugins-base-plugins-giostreamsrc.top_of_page"></a>giostreamsrc</span></h2>
-<p>giostreamsrc — Read from any GIO stream</p>
+<p>giostreamsrc</p>
 </td>
 <td class="gallery_image" valign="top" align="right"></td>
 </tr></table></div>
@@ -80,7 +80,7 @@
 <a href="https://developer.gnome.org/gio/unstable/GMemoryInputStream.html"><span class="type">GMemoryInputStream</span></a> or to read from a file with a
 <a href="https://developer.gnome.org/gio/unstable/GFileInputStream.html"><span class="type">GFileInputStream</span></a>.</p>
 <div class="refsect2">
-<a name="id-1.2.19.7.4"></a><h3>Example code</h3>
+<a name="id-1.2.18.7.4"></a><h3>Example code</h3>
 <p>
 The following example reads data from a <a href="https://developer.gnome.org/gio/unstable/GMemoryInputStream.html"><span class="type">GMemoryInputStream</span></a>.
 </p>
@@ -143,7 +143,7 @@
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="id-1.2.19.7.5.1"></a><h3>Element Information</h3>
+<a name="id-1.2.18.7.5.1"></a><h3>Element Information</h3>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
@@ -169,7 +169,7 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="id-1.2.19.7.5.2"></a><h3>Element Pads</h3>
+<a name="id-1.2.18.7.5.2"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
@@ -196,11 +196,10 @@
 </table></div>
 </div>
 </div>
-<p>
-</p>
 </div>
 <div class="refsect1">
 <a name="gst-plugins-base-plugins-giostreamsrc.functions_details"></a><h2>Functions</h2>
+<p></p>
 </div>
 <div class="refsect1">
 <a name="gst-plugins-base-plugins-giostreamsrc.other_details"></a><h2>Types and Values</h2>
@@ -221,7 +220,6 @@
 </div>
 </div>
 <div class="footer">
-<hr>
-          Generated by GTK-Doc V1.21</div>
+<hr>Generated by GTK-Doc V1.24</div>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/plugins/html/gst-plugins-base-plugins-multifdsink.html b/docs/plugins/html/gst-plugins-base-plugins-multifdsink.html
index c5a14c7..03713de 100644
--- a/docs/plugins/html/gst-plugins-base-plugins-multifdsink.html
+++ b/docs/plugins/html/gst-plugins-base-plugins-multifdsink.html
@@ -2,13 +2,13 @@
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>GStreamer Base Plugins 1.0 Plugins Reference Manual: multifdsink</title>
+<title>multifdsink: GStreamer Base 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 Base Plugins 1.0 Plugins Reference Manual">
 <link rel="up" href="ch01.html" title="gst-plugins-base Elements">
 <link rel="prev" href="gst-plugins-base-plugins-giostreamsrc.html" title="giostreamsrc">
 <link rel="next" href="gst-plugins-base-plugins-multisocketsink.html" title="multisocketsink">
-<meta name="generator" content="GTK-Doc V1.21 (XML mode)">
+<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">
@@ -30,7 +30,7 @@
 <div class="refnamediv"><table width="100%"><tr>
 <td valign="top">
 <h2><span class="refentrytitle"><a name="gst-plugins-base-plugins-multifdsink.top_of_page"></a>multifdsink</span></h2>
-<p>multifdsink — Send data to multiple filedescriptors</p>
+<p>multifdsink</p>
 </td>
 <td class="gallery_image" valign="top" align="right"></td>
 </tr></table></div>
@@ -61,43 +61,43 @@
 <tr>
 <td class="signal_type"><span class="returnvalue">void</span></td>
 <td class="signal_name"><a class="link" href="gst-plugins-base-plugins-multifdsink.html#GstMultiFdSink-add" title="The “add” signal">add</a></td>
-<td class="signal_flags">Action</td>
+<td class="signal_flags"><a href="https://developer.gnome.org/gobject/unstable/gobject-Signals.html#G-SIGNAL-ACTION:CAPS">Action</a></td>
 </tr>
 <tr>
 <td class="signal_type"><span class="returnvalue">void</span></td>
 <td class="signal_name"><a class="link" href="gst-plugins-base-plugins-multifdsink.html#GstMultiFdSink-add-full" title="The “add-full” signal">add-full</a></td>
-<td class="signal_flags">Action</td>
+<td class="signal_flags"><a href="https://developer.gnome.org/gobject/unstable/gobject-Signals.html#G-SIGNAL-ACTION:CAPS">Action</a></td>
 </tr>
 <tr>
 <td class="signal_type"><span class="returnvalue">void</span></td>
 <td class="signal_name"><a class="link" href="gst-plugins-base-plugins-multifdsink.html#GstMultiFdSink-client-added" title="The “client-added” signal">client-added</a></td>
-<td class="signal_flags">Run Last</td>
+<td class="signal_flags"><a href="https://developer.gnome.org/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS">Run Last</a></td>
 </tr>
 <tr>
 <td class="signal_type"><span class="returnvalue">void</span></td>
 <td class="signal_name"><a class="link" href="gst-plugins-base-plugins-multifdsink.html#GstMultiFdSink-client-fd-removed" title="The “client-fd-removed” signal">client-fd-removed</a></td>
-<td class="signal_flags">Run Last</td>
+<td class="signal_flags"><a href="https://developer.gnome.org/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS">Run Last</a></td>
 </tr>
 <tr>
 <td class="signal_type"><span class="returnvalue">void</span></td>
 <td class="signal_name"><a class="link" href="gst-plugins-base-plugins-multifdsink.html#GstMultiFdSink-client-removed" title="The “client-removed” signal">client-removed</a></td>
-<td class="signal_flags">Run Last</td>
+<td class="signal_flags"><a href="https://developer.gnome.org/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS">Run Last</a></td>
 </tr>
 <tr>
 <td class="signal_type">
 <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstStructure.html"><span class="returnvalue">GstStructure</span></a>*</td>
 <td class="signal_name"><a class="link" href="gst-plugins-base-plugins-multifdsink.html#GstMultiFdSink-get-stats" title="The “get-stats” signal">get-stats</a></td>
-<td class="signal_flags">Action</td>
+<td class="signal_flags"><a href="https://developer.gnome.org/gobject/unstable/gobject-Signals.html#G-SIGNAL-ACTION:CAPS">Action</a></td>
 </tr>
 <tr>
 <td class="signal_type"><span class="returnvalue">void</span></td>
 <td class="signal_name"><a class="link" href="gst-plugins-base-plugins-multifdsink.html#GstMultiFdSink-remove" title="The “remove” signal">remove</a></td>
-<td class="signal_flags">Action</td>
+<td class="signal_flags"><a href="https://developer.gnome.org/gobject/unstable/gobject-Signals.html#G-SIGNAL-ACTION:CAPS">Action</a></td>
 </tr>
 <tr>
 <td class="signal_type"><span class="returnvalue">void</span></td>
 <td class="signal_name"><a class="link" href="gst-plugins-base-plugins-multifdsink.html#GstMultiFdSink-remove-flush" title="The “remove-flush” signal">remove-flush</a></td>
-<td class="signal_flags">Action</td>
+<td class="signal_flags"><a href="https://developer.gnome.org/gobject/unstable/gobject-Signals.html#G-SIGNAL-ACTION:CAPS">Action</a></td>
 </tr>
 </tbody>
 </table></div>
@@ -209,7 +209,7 @@
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="id-1.2.20.8.12.1.1"></a><h3>Element Information</h3>
+<a name="id-1.2.19.8.13.1"></a><h3>Element Information</h3>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
@@ -235,7 +235,7 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="id-1.2.20.8.12.1.2"></a><h3>Element Pads</h3>
+<a name="id-1.2.19.8.13.2"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
@@ -262,11 +262,10 @@
 </table></div>
 </div>
 </div>
-<p>
-</p>
 </div>
 <div class="refsect1">
 <a name="gst-plugins-base-plugins-multifdsink.functions_details"></a><h2>Functions</h2>
+<p></p>
 </div>
 <div class="refsect1">
 <a name="gst-plugins-base-plugins-multifdsink.other_details"></a><h2>Types and Values</h2>
@@ -281,7 +280,7 @@
 <p>Possible values for the recovery procedure to use when a client consumes
 data too slow and has a backlag of more that soft-limit buffers.</p>
 <div class="refsect3">
-<a name="id-1.2.20.10.3.4"></a><h4>Members</h4>
+<a name="id-1.2.19.10.3.4"></a><h4>Members</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="300px" class="enum_members_name">
@@ -327,7 +326,7 @@
 <p>This enum defines the selection of the first buffer that is sent
 to a new client.</p>
 <div class="refsect3">
-<a name="id-1.2.20.10.4.4"></a><h4>Members</h4>
+<a name="id-1.2.19.10.4.4"></a><h4>Members</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="300px" class="enum_members_name">
@@ -390,7 +389,7 @@
 <p>This specifies the reason why a client was removed from
 multisocketsink and is received in the "client-removed" signal.</p>
 <div class="refsect3">
-<a name="id-1.2.20.10.5.4"></a><h4>Members</h4>
+<a name="id-1.2.19.10.5.4"></a><h4>Members</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="300px" class="enum_members_name">
@@ -472,7 +471,7 @@
                <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a>        user_data)</pre>
 <p>Hand the given open file descriptor to multifdsink to write to.</p>
 <div class="refsect3">
-<a name="id-1.2.20.12.2.5"></a><h4>Parameters</h4>
+<a name="id-1.2.19.12.2.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -498,7 +497,7 @@
 </tbody>
 </table></div>
 </div>
-<p>Flags: Action</p>
+<p>Flags: <a href="https://developer.gnome.org/gobject/unstable/gobject-Signals.html#G-SIGNAL-ACTION:CAPS">Action</a></p>
 </div>
 <hr>
 <div class="refsect2">
@@ -515,7 +514,7 @@
 <p>Hand the given open file descriptor to multifdsink to write to and
 specify the burst parameters for the new connection.</p>
 <div class="refsect3">
-<a name="id-1.2.20.12.3.5"></a><h4>Parameters</h4>
+<a name="id-1.2.19.12.3.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -572,7 +571,7 @@
 </tbody>
 </table></div>
 </div>
-<p>Flags: Action</p>
+<p>Flags: <a href="https://developer.gnome.org/gobject/unstable/gobject-Signals.html#G-SIGNAL-ACTION:CAPS">Action</a></p>
 </div>
 <hr>
 <div class="refsect2">
@@ -585,7 +584,7 @@
 be emitted from the streaming thread so application should be prepared
 for that.</p>
 <div class="refsect3">
-<a name="id-1.2.20.12.4.5"></a><h4>Parameters</h4>
+<a name="id-1.2.19.12.4.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -611,7 +610,7 @@
 </tbody>
 </table></div>
 </div>
-<p>Flags: Run Last</p>
+<p>Flags: <a href="https://developer.gnome.org/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS">Run Last</a></p>
 </div>
 <hr>
 <div class="refsect2">
@@ -631,7 +630,7 @@
 . It is however safe to <code class="function">close()</code> and reuse <em class="parameter"><code>fd</code></em>
  in the callback.</p>
 <div class="refsect3">
-<a name="id-1.2.20.12.5.6"></a><h4>Parameters</h4>
+<a name="id-1.2.19.12.5.6"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -657,7 +656,7 @@
 </tbody>
 </table></div>
 </div>
-<p>Flags: Run Last</p>
+<p>Flags: <a href="https://developer.gnome.org/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS">Run Last</a></p>
 </div>
 <hr>
 <div class="refsect2">
@@ -677,7 +676,7 @@
 not safe to <code class="function">close()</code> and reuse <em class="parameter"><code>fd</code></em>
  in this callback.</p>
 <div class="refsect3">
-<a name="id-1.2.20.12.6.6"></a><h4>Parameters</h4>
+<a name="id-1.2.19.12.6.6"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -708,7 +707,7 @@
 </tbody>
 </table></div>
 </div>
-<p>Flags: Run Last</p>
+<p>Flags: <a href="https://developer.gnome.org/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS">Run Last</a></p>
 </div>
 <hr>
 <div class="refsect2">
@@ -721,7 +720,7 @@
 . This function returns a GValueArray to ease
 automatic wrapping for bindings.</p>
 <div class="refsect3">
-<a name="id-1.2.20.12.7.5"></a><h4>Parameters</h4>
+<a name="id-1.2.19.12.7.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -748,7 +747,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.20.12.7.6"></a><h4>Returns</h4>
+<a name="id-1.2.19.12.7.6"></a><h4>Returns</h4>
 <p> a GValueArray with the statistics. The array contains guint64
 values that represent respectively: total number of bytes sent, time
 when the client was added, time when the client was
@@ -756,9 +755,8 @@
 time (in epoch seconds), number of buffers dropped.
 All times are expressed in nanoseconds (GstClockTime).
 The array can be 0-length if the client was not found.</p>
-<p></p>
 </div>
-<p>Flags: Action</p>
+<p>Flags: <a href="https://developer.gnome.org/gobject/unstable/gobject-Signals.html#G-SIGNAL-ACTION:CAPS">Action</a></p>
 </div>
 <hr>
 <div class="refsect2">
@@ -769,7 +767,7 @@
                <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a>        user_data)</pre>
 <p>Remove the given open file descriptor from multifdsink.</p>
 <div class="refsect3">
-<a name="id-1.2.20.12.8.5"></a><h4>Parameters</h4>
+<a name="id-1.2.19.12.8.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -795,7 +793,7 @@
 </tbody>
 </table></div>
 </div>
-<p>Flags: Action</p>
+<p>Flags: <a href="https://developer.gnome.org/gobject/unstable/gobject-Signals.html#G-SIGNAL-ACTION:CAPS">Action</a></p>
 </div>
 <hr>
 <div class="refsect2">
@@ -807,7 +805,7 @@
 <p>Remove the given open file descriptor from multifdsink after flushing all
 the pending data to the fd.</p>
 <div class="refsect3">
-<a name="id-1.2.20.12.9.5"></a><h4>Parameters</h4>
+<a name="id-1.2.19.12.9.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -833,7 +831,7 @@
 </tbody>
 </table></div>
 </div>
-<p>Flags: Action</p>
+<p>Flags: <a href="https://developer.gnome.org/gobject/unstable/gobject-Signals.html#G-SIGNAL-ACTION:CAPS">Action</a></p>
 </div>
 </div>
 <div class="refsect1">
@@ -842,7 +840,6 @@
 </div>
 </div>
 <div class="footer">
-<hr>
-          Generated by GTK-Doc V1.21</div>
+<hr>Generated by GTK-Doc V1.24</div>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/plugins/html/gst-plugins-base-plugins-multisocketsink.html b/docs/plugins/html/gst-plugins-base-plugins-multisocketsink.html
index ee6b661..33ce787 100644
--- a/docs/plugins/html/gst-plugins-base-plugins-multisocketsink.html
+++ b/docs/plugins/html/gst-plugins-base-plugins-multisocketsink.html
@@ -2,13 +2,13 @@
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>GStreamer Base Plugins 1.0 Plugins Reference Manual: multisocketsink</title>
+<title>multisocketsink: GStreamer Base 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 Base Plugins 1.0 Plugins Reference Manual">
 <link rel="up" href="ch01.html" title="gst-plugins-base Elements">
 <link rel="prev" href="gst-plugins-base-plugins-multifdsink.html" title="multifdsink">
-<link rel="next" href="gst-plugins-base-plugins-oggdemux.html" title="oggdemux">
-<meta name="generator" content="GTK-Doc V1.21 (XML mode)">
+<link rel="next" href="gst-plugins-base-plugins-oggaviparse.html" title="oggaviparse">
+<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">
@@ -22,14 +22,14 @@
 <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-base-plugins-multifdsink.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
-<td><a accesskey="n" href="gst-plugins-base-plugins-oggdemux.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
+<td><a accesskey="n" href="gst-plugins-base-plugins-oggaviparse.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
 </tr></table>
 <div class="refentry">
 <a name="gst-plugins-base-plugins-multisocketsink"></a><div class="titlepage"></div>
 <div class="refnamediv"><table width="100%"><tr>
 <td valign="top">
 <h2><span class="refentrytitle"><a name="gst-plugins-base-plugins-multisocketsink.top_of_page"></a>multisocketsink</span></h2>
-<p>multisocketsink — Send data to multiple sockets</p>
+<p>multisocketsink</p>
 </td>
 <td class="gallery_image" valign="top" align="right"></td>
 </tr></table></div>
@@ -45,43 +45,43 @@
 <tr>
 <td class="signal_type"><span class="returnvalue">void</span></td>
 <td class="signal_name"><a class="link" href="gst-plugins-base-plugins-multisocketsink.html#GstMultiSocketSink-add" title="The “add” signal">add</a></td>
-<td class="signal_flags">Action</td>
+<td class="signal_flags"><a href="https://developer.gnome.org/gobject/unstable/gobject-Signals.html#G-SIGNAL-ACTION:CAPS">Action</a></td>
 </tr>
 <tr>
 <td class="signal_type"><span class="returnvalue">void</span></td>
 <td class="signal_name"><a class="link" href="gst-plugins-base-plugins-multisocketsink.html#GstMultiSocketSink-add-full" title="The “add-full” signal">add-full</a></td>
-<td class="signal_flags">Action</td>
+<td class="signal_flags"><a href="https://developer.gnome.org/gobject/unstable/gobject-Signals.html#G-SIGNAL-ACTION:CAPS">Action</a></td>
 </tr>
 <tr>
 <td class="signal_type"><span class="returnvalue">void</span></td>
 <td class="signal_name"><a class="link" href="gst-plugins-base-plugins-multisocketsink.html#GstMultiSocketSink-client-added" title="The “client-added” signal">client-added</a></td>
-<td class="signal_flags">Run Last</td>
+<td class="signal_flags"><a href="https://developer.gnome.org/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS">Run Last</a></td>
 </tr>
 <tr>
 <td class="signal_type"><span class="returnvalue">void</span></td>
 <td class="signal_name"><a class="link" href="gst-plugins-base-plugins-multisocketsink.html#GstMultiSocketSink-client-removed" title="The “client-removed” signal">client-removed</a></td>
-<td class="signal_flags">Run Last</td>
+<td class="signal_flags"><a href="https://developer.gnome.org/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS">Run Last</a></td>
 </tr>
 <tr>
 <td class="signal_type"><span class="returnvalue">void</span></td>
 <td class="signal_name"><a class="link" href="gst-plugins-base-plugins-multisocketsink.html#GstMultiSocketSink-client-socket-removed" title="The “client-socket-removed” signal">client-socket-removed</a></td>
-<td class="signal_flags">Run Last</td>
+<td class="signal_flags"><a href="https://developer.gnome.org/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS">Run Last</a></td>
 </tr>
 <tr>
 <td class="signal_type">
 <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstStructure.html"><span class="returnvalue">GstStructure</span></a>*</td>
 <td class="signal_name"><a class="link" href="gst-plugins-base-plugins-multisocketsink.html#GstMultiSocketSink-get-stats" title="The “get-stats” signal">get-stats</a></td>
-<td class="signal_flags">Action</td>
+<td class="signal_flags"><a href="https://developer.gnome.org/gobject/unstable/gobject-Signals.html#G-SIGNAL-ACTION:CAPS">Action</a></td>
 </tr>
 <tr>
 <td class="signal_type"><span class="returnvalue">void</span></td>
 <td class="signal_name"><a class="link" href="gst-plugins-base-plugins-multisocketsink.html#GstMultiSocketSink-remove" title="The “remove” signal">remove</a></td>
-<td class="signal_flags">Action</td>
+<td class="signal_flags"><a href="https://developer.gnome.org/gobject/unstable/gobject-Signals.html#G-SIGNAL-ACTION:CAPS">Action</a></td>
 </tr>
 <tr>
 <td class="signal_type"><span class="returnvalue">void</span></td>
 <td class="signal_name"><a class="link" href="gst-plugins-base-plugins-multisocketsink.html#GstMultiSocketSink-remove-flush" title="The “remove-flush” signal">remove-flush</a></td>
-<td class="signal_flags">Action</td>
+<td class="signal_flags"><a href="https://developer.gnome.org/gobject/unstable/gobject-Signals.html#G-SIGNAL-ACTION:CAPS">Action</a></td>
 </tr>
 </tbody>
 </table></div>
@@ -192,7 +192,7 @@
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="id-1.2.21.7.11.1.1"></a><h3>Element Information</h3>
+<a name="id-1.2.20.7.12.1"></a><h3>Element Information</h3>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
@@ -218,7 +218,7 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="id-1.2.21.7.11.1.2"></a><h3>Element Pads</h3>
+<a name="id-1.2.20.7.12.2"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
@@ -245,11 +245,10 @@
 </table></div>
 </div>
 </div>
-<p>
-</p>
 </div>
 <div class="refsect1">
 <a name="gst-plugins-base-plugins-multisocketsink.functions_details"></a><h2>Functions</h2>
+<p></p>
 </div>
 <div class="refsect1">
 <a name="gst-plugins-base-plugins-multisocketsink.other_details"></a><h2>Types and Values</h2>
@@ -264,7 +263,7 @@
 <p>Possible values for the recovery procedure to use when a client consumes
 data too slow and has a backlag of more that soft-limit buffers.</p>
 <div class="refsect3">
-<a name="id-1.2.21.9.3.4"></a><h4>Members</h4>
+<a name="id-1.2.20.9.3.4"></a><h4>Members</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="300px" class="enum_members_name">
@@ -274,22 +273,30 @@
 <tbody>
 <tr>
 <td class="enum_member_name"><p><a name="GST-RECOVER-POLICY-NONE:CAPS"></a>GST_RECOVER_POLICY_NONE</p></td>
-<td class="enum_member_description"> </td>
+<td class="enum_member_description">
+<p>no recovering is done</p>
+</td>
 <td class="enum_member_annotations"> </td>
 </tr>
 <tr>
 <td class="enum_member_name"><p><a name="GST-RECOVER-POLICY-RESYNC-LATEST:CAPS"></a>GST_RECOVER_POLICY_RESYNC_LATEST</p></td>
-<td class="enum_member_description"> </td>
+<td class="enum_member_description">
+<p>client is moved to last buffer</p>
+</td>
 <td class="enum_member_annotations"> </td>
 </tr>
 <tr>
 <td class="enum_member_name"><p><a name="GST-RECOVER-POLICY-RESYNC-SOFT-LIMIT:CAPS"></a>GST_RECOVER_POLICY_RESYNC_SOFT_LIMIT</p></td>
-<td class="enum_member_description"> </td>
+<td class="enum_member_description">
+<p>client is moved to the soft limit</p>
+</td>
 <td class="enum_member_annotations"> </td>
 </tr>
 <tr>
 <td class="enum_member_name"><p><a name="GST-RECOVER-POLICY-RESYNC-KEYFRAME:CAPS"></a>GST_RECOVER_POLICY_RESYNC_KEYFRAME</p></td>
-<td class="enum_member_description"> </td>
+<td class="enum_member_description">
+<p>client is moved to latest keyframe</p>
+</td>
 <td class="enum_member_annotations"> </td>
 </tr>
 </tbody>
@@ -302,7 +309,7 @@
 <p>This enum defines the selection of the first buffer that is sent
 to a new client.</p>
 <div class="refsect3">
-<a name="id-1.2.21.9.4.4"></a><h4>Members</h4>
+<a name="id-1.2.20.9.4.4"></a><h4>Members</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="300px" class="enum_members_name">
@@ -312,32 +319,47 @@
 <tbody>
 <tr>
 <td class="enum_member_name"><p><a name="GST-SYNC-METHOD-LATEST:CAPS"></a>GST_SYNC_METHOD_LATEST</p></td>
-<td class="enum_member_description"> </td>
+<td class="enum_member_description">
+<p>client receives most recent buffer</p>
+</td>
 <td class="enum_member_annotations"> </td>
 </tr>
 <tr>
 <td class="enum_member_name"><p><a name="GST-SYNC-METHOD-NEXT-KEYFRAME:CAPS"></a>GST_SYNC_METHOD_NEXT_KEYFRAME</p></td>
-<td class="enum_member_description"> </td>
+<td class="enum_member_description">
+<p>client receives next keyframe</p>
+</td>
 <td class="enum_member_annotations"> </td>
 </tr>
 <tr>
 <td class="enum_member_name"><p><a name="GST-SYNC-METHOD-LATEST-KEYFRAME:CAPS"></a>GST_SYNC_METHOD_LATEST_KEYFRAME</p></td>
-<td class="enum_member_description"> </td>
+<td class="enum_member_description">
+<p>client receives latest keyframe (burst)</p>
+</td>
 <td class="enum_member_annotations"> </td>
 </tr>
 <tr>
 <td class="enum_member_name"><p><a name="GST-SYNC-METHOD-BURST:CAPS"></a>GST_SYNC_METHOD_BURST</p></td>
-<td class="enum_member_description"> </td>
+<td class="enum_member_description">
+<p>client receives specific amount of data</p>
+</td>
 <td class="enum_member_annotations"> </td>
 </tr>
 <tr>
 <td class="enum_member_name"><p><a name="GST-SYNC-METHOD-BURST-KEYFRAME:CAPS"></a>GST_SYNC_METHOD_BURST_KEYFRAME</p></td>
-<td class="enum_member_description"> </td>
+<td class="enum_member_description">
+<p>client receives specific amount of data 
+                                       starting from latest keyframe</p>
+</td>
 <td class="enum_member_annotations"> </td>
 </tr>
 <tr>
 <td class="enum_member_name"><p><a name="GST-SYNC-METHOD-BURST-WITH-KEYFRAME:CAPS"></a>GST_SYNC_METHOD_BURST_WITH_KEYFRAME</p></td>
-<td class="enum_member_description"> </td>
+<td class="enum_member_description">
+<p>client receives specific amount of data from
+                                       a keyframe, or if there is not enough data after
+                                       the keyframe, starting before the keyframe</p>
+</td>
 <td class="enum_member_annotations"> </td>
 </tr>
 </tbody>
@@ -350,7 +372,7 @@
 <p>This specifies the reason why a client was removed from
 multisocketsink and is received in the "client-removed" signal.</p>
 <div class="refsect3">
-<a name="id-1.2.21.9.5.4"></a><h4>Members</h4>
+<a name="id-1.2.20.9.5.4"></a><h4>Members</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="300px" class="enum_members_name">
@@ -360,37 +382,51 @@
 <tbody>
 <tr>
 <td class="enum_member_name"><p><a name="GST-CLIENT-STATUS-OK:CAPS"></a>GST_CLIENT_STATUS_OK</p></td>
-<td class="enum_member_description"> </td>
+<td class="enum_member_description">
+<p>client is ok</p>
+</td>
 <td class="enum_member_annotations"> </td>
 </tr>
 <tr>
 <td class="enum_member_name"><p><a name="GST-CLIENT-STATUS-CLOSED:CAPS"></a>GST_CLIENT_STATUS_CLOSED</p></td>
-<td class="enum_member_description"> </td>
+<td class="enum_member_description">
+<p>client closed the socket</p>
+</td>
 <td class="enum_member_annotations"> </td>
 </tr>
 <tr>
 <td class="enum_member_name"><p><a name="GST-CLIENT-STATUS-REMOVED:CAPS"></a>GST_CLIENT_STATUS_REMOVED</p></td>
-<td class="enum_member_description"> </td>
+<td class="enum_member_description">
+<p>client is removed</p>
+</td>
 <td class="enum_member_annotations"> </td>
 </tr>
 <tr>
 <td class="enum_member_name"><p><a name="GST-CLIENT-STATUS-SLOW:CAPS"></a>GST_CLIENT_STATUS_SLOW</p></td>
-<td class="enum_member_description"> </td>
+<td class="enum_member_description">
+<p>client is too slow</p>
+</td>
 <td class="enum_member_annotations"> </td>
 </tr>
 <tr>
 <td class="enum_member_name"><p><a name="GST-CLIENT-STATUS-ERROR:CAPS"></a>GST_CLIENT_STATUS_ERROR</p></td>
-<td class="enum_member_description"> </td>
+<td class="enum_member_description">
+<p>client is in error</p>
+</td>
 <td class="enum_member_annotations"> </td>
 </tr>
 <tr>
 <td class="enum_member_name"><p><a name="GST-CLIENT-STATUS-DUPLICATE:CAPS"></a>GST_CLIENT_STATUS_DUPLICATE</p></td>
-<td class="enum_member_description"> </td>
+<td class="enum_member_description">
+<p>same client added twice</p>
+</td>
 <td class="enum_member_annotations"> </td>
 </tr>
 <tr>
 <td class="enum_member_name"><p><a name="GST-CLIENT-STATUS-FLUSHING:CAPS"></a>GST_CLIENT_STATUS_FLUSHING</p></td>
-<td class="enum_member_description"> </td>
+<td class="enum_member_description">
+<p>client is flushing out the remaining buffers.</p>
+</td>
 <td class="enum_member_annotations"> </td>
 </tr>
 </tbody>
@@ -408,7 +444,7 @@
                <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a>            user_data)</pre>
 <p>Hand the given open socket to multisocketsink to write to.</p>
 <div class="refsect3">
-<a name="id-1.2.21.10.2.5"></a><h4>Parameters</h4>
+<a name="id-1.2.20.10.2.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -434,7 +470,7 @@
 </tbody>
 </table></div>
 </div>
-<p>Flags: Action</p>
+<p>Flags: <a href="https://developer.gnome.org/gobject/unstable/gobject-Signals.html#G-SIGNAL-ACTION:CAPS">Action</a></p>
 </div>
 <hr>
 <div class="refsect2">
@@ -451,7 +487,7 @@
 <p>Hand the given open socket to multisocketsink to write to and
 specify the burst parameters for the new connection.</p>
 <div class="refsect3">
-<a name="id-1.2.21.10.3.5"></a><h4>Parameters</h4>
+<a name="id-1.2.20.10.3.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -508,7 +544,7 @@
 </tbody>
 </table></div>
 </div>
-<p>Flags: Action</p>
+<p>Flags: <a href="https://developer.gnome.org/gobject/unstable/gobject-Signals.html#G-SIGNAL-ACTION:CAPS">Action</a></p>
 </div>
 <hr>
 <div class="refsect2">
@@ -521,7 +557,7 @@
 be emitted from the streaming thread so application should be prepared
 for that.</p>
 <div class="refsect3">
-<a name="id-1.2.21.10.4.5"></a><h4>Parameters</h4>
+<a name="id-1.2.20.10.4.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -547,7 +583,7 @@
 </tbody>
 </table></div>
 </div>
-<p>Flags: Run Last</p>
+<p>Flags: <a href="https://developer.gnome.org/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS">Run Last</a></p>
 </div>
 <hr>
 <div class="refsect2">
@@ -567,7 +603,7 @@
 not safe to <code class="function">close()</code> and reuse <em class="parameter"><code>socket</code></em>
  in this callback.</p>
 <div class="refsect3">
-<a name="id-1.2.21.10.5.6"></a><h4>Parameters</h4>
+<a name="id-1.2.20.10.5.6"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -598,7 +634,7 @@
 </tbody>
 </table></div>
 </div>
-<p>Flags: Run Last</p>
+<p>Flags: <a href="https://developer.gnome.org/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS">Run Last</a></p>
 </div>
 <hr>
 <div class="refsect2">
@@ -618,7 +654,7 @@
 . It is however safe to <code class="function">close()</code> and reuse <em class="parameter"><code>fd</code></em>
  in the callback.</p>
 <div class="refsect3">
-<a name="id-1.2.21.10.6.6"></a><h4>Parameters</h4>
+<a name="id-1.2.20.10.6.6"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -644,7 +680,7 @@
 </tbody>
 </table></div>
 </div>
-<p>Flags: Run Last</p>
+<p>Flags: <a href="https://developer.gnome.org/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS">Run Last</a></p>
 </div>
 <hr>
 <div class="refsect2">
@@ -656,7 +692,7 @@
 <p>Get statistics about <em class="parameter"><code>socket</code></em>
 . This function returns a GstStructure.</p>
 <div class="refsect3">
-<a name="id-1.2.21.10.7.5"></a><h4>Parameters</h4>
+<a name="id-1.2.20.10.7.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -683,16 +719,15 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.21.10.7.6"></a><h4>Returns</h4>
+<a name="id-1.2.20.10.7.6"></a><h4>Returns</h4>
 <p> a GstStructure with the statistics. The structure contains
 values that represent: total number of bytes sent, time
 when the client was added, time when the client was
 disconnected/removed, time the client is/was active, last activity
 time (in epoch seconds), number of buffers dropped.
 All times are expressed in nanoseconds (GstClockTime).</p>
-<p></p>
 </div>
-<p>Flags: Action</p>
+<p>Flags: <a href="https://developer.gnome.org/gobject/unstable/gobject-Signals.html#G-SIGNAL-ACTION:CAPS">Action</a></p>
 </div>
 <hr>
 <div class="refsect2">
@@ -703,7 +738,7 @@
                <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a>            user_data)</pre>
 <p>Remove the given open socket from multisocketsink.</p>
 <div class="refsect3">
-<a name="id-1.2.21.10.8.5"></a><h4>Parameters</h4>
+<a name="id-1.2.20.10.8.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -729,7 +764,7 @@
 </tbody>
 </table></div>
 </div>
-<p>Flags: Action</p>
+<p>Flags: <a href="https://developer.gnome.org/gobject/unstable/gobject-Signals.html#G-SIGNAL-ACTION:CAPS">Action</a></p>
 </div>
 <hr>
 <div class="refsect2">
@@ -741,7 +776,7 @@
 <p>Remove the given open socket from multisocketsink after flushing all
 the pending data to the socket.</p>
 <div class="refsect3">
-<a name="id-1.2.21.10.9.5"></a><h4>Parameters</h4>
+<a name="id-1.2.20.10.9.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -767,7 +802,7 @@
 </tbody>
 </table></div>
 </div>
-<p>Flags: Action</p>
+<p>Flags: <a href="https://developer.gnome.org/gobject/unstable/gobject-Signals.html#G-SIGNAL-ACTION:CAPS">Action</a></p>
 </div>
 </div>
 <div class="refsect1">
@@ -776,7 +811,6 @@
 </div>
 </div>
 <div class="footer">
-<hr>
-          Generated by GTK-Doc V1.21</div>
+<hr>Generated by GTK-Doc V1.24</div>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/plugins/html/gst-plugins-base-plugins-oggaviparse.html b/docs/plugins/html/gst-plugins-base-plugins-oggaviparse.html
new file mode 100644
index 0000000..3e601d7
--- /dev/null
+++ b/docs/plugins/html/gst-plugins-base-plugins-oggaviparse.html
@@ -0,0 +1,128 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>oggaviparse: GStreamer Base 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 Base Plugins 1.0 Plugins Reference Manual">
+<link rel="up" href="ch01.html" title="gst-plugins-base Elements">
+<link rel="prev" href="gst-plugins-base-plugins-multisocketsink.html" title="multisocketsink">
+<link rel="next" href="gst-plugins-base-plugins-oggdemux.html" title="oggdemux">
+<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-base-plugins-oggaviparse.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>
+<td><a accesskey="p" href="gst-plugins-base-plugins-multisocketsink.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
+<td><a accesskey="n" href="gst-plugins-base-plugins-oggdemux.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
+</tr></table>
+<div class="refentry">
+<a name="gst-plugins-base-plugins-oggaviparse"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="gst-plugins-base-plugins-oggaviparse.top_of_page"></a>oggaviparse</span></h2>
+<p>oggaviparse</p>
+</td>
+<td class="gallery_image" valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsect1">
+<a name="gst-plugins-base-plugins-oggaviparse.description"></a><h2>Description</h2>
+<div class="refsynopsisdiv">
+<h2>Synopsis</h2>
+<div class="refsect2">
+<a name="id-1.2.21.3.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-base-plugins-plugin-ogg.html#plugin-ogg">ogg</a>
+          </td>
+</tr>
+<tr>
+<td><p><span class="term">author</span></p></td>
+<td>Wim Taymans &lt;wim@fluendo.com&gt;</td>
+</tr>
+<tr>
+<td><p><span class="term">class</span></p></td>
+<td>Codec/Parser</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="id-1.2.21.3.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-ogg-avi</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-vorbis</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-plugins-oggaviparse.functions_details"></a><h2>Functions</h2>
+<p></p>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-plugins-oggaviparse.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/plugins/html/gst-plugins-base-plugins-oggdemux.html b/docs/plugins/html/gst-plugins-base-plugins-oggdemux.html
index 1022a10..c9d5dd0 100644
--- a/docs/plugins/html/gst-plugins-base-plugins-oggdemux.html
+++ b/docs/plugins/html/gst-plugins-base-plugins-oggdemux.html
@@ -2,13 +2,13 @@
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>GStreamer Base Plugins 1.0 Plugins Reference Manual: oggdemux</title>
+<title>oggdemux: GStreamer Base 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 Base Plugins 1.0 Plugins Reference Manual">
 <link rel="up" href="ch01.html" title="gst-plugins-base Elements">
-<link rel="prev" href="gst-plugins-base-plugins-multisocketsink.html" title="multisocketsink">
+<link rel="prev" href="gst-plugins-base-plugins-oggaviparse.html" title="oggaviparse">
 <link rel="next" href="gst-plugins-base-plugins-oggmux.html" title="oggmux">
-<meta name="generator" content="GTK-Doc V1.21 (XML mode)">
+<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">
@@ -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="ch01.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
-<td><a accesskey="p" href="gst-plugins-base-plugins-multisocketsink.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
+<td><a accesskey="p" href="gst-plugins-base-plugins-oggaviparse.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
 <td><a accesskey="n" href="gst-plugins-base-plugins-oggmux.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
 </tr></table>
 <div class="refentry">
@@ -28,7 +28,7 @@
 <div class="refnamediv"><table width="100%"><tr>
 <td valign="top">
 <h2><span class="refentrytitle"><a name="gst-plugins-base-plugins-oggdemux.top_of_page"></a>oggdemux</span></h2>
-<p>oggdemux — demux ogg streams (info about ogg: http://xiph.org)</p>
+<p>oggdemux</p>
 </td>
 <td class="gallery_image" valign="top" align="right"></td>
 </tr></table></div>
@@ -148,24 +148,20 @@
 </table></div>
 </div>
 </div>
-<p>
-</p>
 </div>
 <div class="refsect1">
 <a name="gst-plugins-base-plugins-oggdemux.functions_details"></a><h2>Functions</h2>
+<p></p>
 </div>
 <div class="refsect1">
 <a name="gst-plugins-base-plugins-oggdemux.other_details"></a><h2>Types and Values</h2>
 <div class="refsect2">
 <a name="GstOggDemux-struct"></a><h3>struct GstOggDemux</h3>
 <pre class="programlisting">struct GstOggDemux;</pre>
-<p>
-</p>
 </div>
 </div>
 </div>
 <div class="footer">
-<hr>
-          Generated by GTK-Doc V1.21</div>
+<hr>Generated by GTK-Doc V1.24</div>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/plugins/html/gst-plugins-base-plugins-oggmux.html b/docs/plugins/html/gst-plugins-base-plugins-oggmux.html
index 6d9e59e..8731f89 100644
--- a/docs/plugins/html/gst-plugins-base-plugins-oggmux.html
+++ b/docs/plugins/html/gst-plugins-base-plugins-oggmux.html
@@ -2,13 +2,13 @@
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>GStreamer Base Plugins 1.0 Plugins Reference Manual: oggmux</title>
+<title>oggmux: GStreamer Base 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 Base Plugins 1.0 Plugins Reference Manual">
 <link rel="up" href="ch01.html" title="gst-plugins-base Elements">
 <link rel="prev" href="gst-plugins-base-plugins-oggdemux.html" title="oggdemux">
-<link rel="next" href="gst-plugins-base-plugins-playbin.html" title="playbin">
-<meta name="generator" content="GTK-Doc V1.21 (XML mode)">
+<link rel="next" href="gst-plugins-base-plugins-oggparse.html" title="oggparse">
+<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">
@@ -23,14 +23,14 @@
 <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-base-plugins-oggdemux.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
-<td><a accesskey="n" href="gst-plugins-base-plugins-playbin.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
+<td><a accesskey="n" href="gst-plugins-base-plugins-oggparse.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
 </tr></table>
 <div class="refentry">
 <a name="gst-plugins-base-plugins-oggmux"></a><div class="titlepage"></div>
 <div class="refnamediv"><table width="100%"><tr>
 <td valign="top">
 <h2><span class="refentrytitle"><a name="gst-plugins-base-plugins-oggmux.top_of_page"></a>oggmux</span></h2>
-<p>oggmux — mux ogg streams (info about ogg: http://xiph.org)</p>
+<p>oggmux</p>
 </td>
 <td class="gallery_image" valign="top" align="right"></td>
 </tr></table></div>
@@ -280,19 +280,16 @@
 </table></div>
 </div>
 </div>
-<p>
-</p>
 </div>
 <div class="refsect1">
 <a name="gst-plugins-base-plugins-oggmux.functions_details"></a><h2>Functions</h2>
+<p></p>
 </div>
 <div class="refsect1">
 <a name="gst-plugins-base-plugins-oggmux.other_details"></a><h2>Types and Values</h2>
 <div class="refsect2">
 <a name="GstOggMux-struct"></a><h3>struct GstOggMux</h3>
 <pre class="programlisting">struct GstOggMux;</pre>
-<p>
-</p>
 </div>
 </div>
 <div class="refsect1">
@@ -331,7 +328,6 @@
 </div>
 </div>
 <div class="footer">
-<hr>
-          Generated by GTK-Doc V1.21</div>
+<hr>Generated by GTK-Doc V1.24</div>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/plugins/html/gst-plugins-base-plugins-oggparse.html b/docs/plugins/html/gst-plugins-base-plugins-oggparse.html
new file mode 100644
index 0000000..236197a
--- /dev/null
+++ b/docs/plugins/html/gst-plugins-base-plugins-oggparse.html
@@ -0,0 +1,128 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>oggparse: GStreamer Base 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 Base Plugins 1.0 Plugins Reference Manual">
+<link rel="up" href="ch01.html" title="gst-plugins-base Elements">
+<link rel="prev" href="gst-plugins-base-plugins-oggmux.html" title="oggmux">
+<link rel="next" href="gst-plugins-base-plugins-ogmaudioparse.html" title="ogmaudioparse">
+<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-base-plugins-oggparse.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>
+<td><a accesskey="p" href="gst-plugins-base-plugins-oggmux.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
+<td><a accesskey="n" href="gst-plugins-base-plugins-ogmaudioparse.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
+</tr></table>
+<div class="refentry">
+<a name="gst-plugins-base-plugins-oggparse"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="gst-plugins-base-plugins-oggparse.top_of_page"></a>oggparse</span></h2>
+<p>oggparse</p>
+</td>
+<td class="gallery_image" valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsect1">
+<a name="gst-plugins-base-plugins-oggparse.description"></a><h2>Description</h2>
+<div class="refsynopsisdiv">
+<h2>Synopsis</h2>
+<div class="refsect2">
+<a name="id-1.2.24.3.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-base-plugins-plugin-ogg.html#plugin-ogg">ogg</a>
+          </td>
+</tr>
+<tr>
+<td><p><span class="term">author</span></p></td>
+<td>Michael Smith &lt;msmith@fluendo.com&gt;</td>
+</tr>
+<tr>
+<td><p><span class="term">class</span></p></td>
+<td>Codec/Parser</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="id-1.2.24.3.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/ogg</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/ogg</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-plugins-oggparse.functions_details"></a><h2>Functions</h2>
+<p></p>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-plugins-oggparse.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/plugins/html/gst-plugins-base-plugins-ogmaudioparse.html b/docs/plugins/html/gst-plugins-base-plugins-ogmaudioparse.html
new file mode 100644
index 0000000..23d8f31
--- /dev/null
+++ b/docs/plugins/html/gst-plugins-base-plugins-ogmaudioparse.html
@@ -0,0 +1,232 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>ogmaudioparse: GStreamer Base 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 Base Plugins 1.0 Plugins Reference Manual">
+<link rel="up" href="ch01.html" title="gst-plugins-base Elements">
+<link rel="prev" href="gst-plugins-base-plugins-oggparse.html" title="oggparse">
+<link rel="next" href="gst-plugins-base-plugins-ogmtextparse.html" title="ogmtextparse">
+<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-base-plugins-ogmaudioparse.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>
+<td><a accesskey="p" href="gst-plugins-base-plugins-oggparse.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
+<td><a accesskey="n" href="gst-plugins-base-plugins-ogmtextparse.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
+</tr></table>
+<div class="refentry">
+<a name="gst-plugins-base-plugins-ogmaudioparse"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="gst-plugins-base-plugins-ogmaudioparse.top_of_page"></a>ogmaudioparse</span></h2>
+<p>ogmaudioparse</p>
+</td>
+<td class="gallery_image" valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsect1">
+<a name="gst-plugins-base-plugins-ogmaudioparse.description"></a><h2>Description</h2>
+<div class="refsynopsisdiv">
+<h2>Synopsis</h2>
+<div class="refsect2">
+<a name="id-1.2.25.3.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-base-plugins-plugin-ogg.html#plugin-ogg">ogg</a>
+          </td>
+</tr>
+<tr>
+<td><p><span class="term">author</span></p></td>
+<td>GStreamer maintainers &lt;gstreamer-devel@lists.freedesktop.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.25.3.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-ogm-audio</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>sometimes</td>
+</tr>
+<tr>
+<td><p><span class="term">details</span></p></td>
+<td>audio/ms-gsm, rate=(int)[ 1, 96000 ], channels=(int)[ 1, 2 ]</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> audio/mpeg, mpegversion=(int)1, layer=(int)3, rate=(int)[ 8000, 48000 ], channels=(int)[ 1, 2 ]</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> audio/mpeg, mpegversion=(int)1, layer=(int)2, rate=(int)[ 16000, 48000 ], channels=(int)[ 1, 2 ]</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> audio/x-raw, format=(string){ S8, U8, S16LE, U16LE, S24LE, U24LE, S32LE, U32LE }, layout=(string)interleaved, rate=(int)[ 1000, 192000 ], channels=(int)[ 1, 8 ]</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> audio/x-vorbis, rate=(int)[ 1000, 192000 ], channels=(int)[ 1, 2 ]</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> audio/x-ac3, rate=(int)[ 1000, 96000 ], channels=(int)[ 1, 6 ]</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> audio/x-dts</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> audio/mpeg, mpegversion=(int)4, rate=(int)[ 1000, 96000 ], channels=(int)[ 1, 8 ]</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> audio/x-alaw, rate=(int)[ 1000, 48000 ], channels=(int)[ 1, 2 ]</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> audio/x-mulaw, rate=(int)[ 1000, 48000 ], channels=(int)[ 1, 2 ]</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> audio/x-wms, bitrate=(int)[ 0, 2147483647 ], rate=(int)[ 1000, 96000 ], channels=(int)[ 1, 2 ], block_align=(int)[ 1, 2147483647 ]</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> audio/x-adpcm, layout=(string)microsoft, rate=(int)[ 1000, 96000 ], channels=(int)[ 1, 2 ], block_align=(int)[ 1, 2147483647 ]</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> audio/x-adpcm, layout=(string)dvi, rate=(int)[ 1000, 96000 ], channels=(int)[ 1, 2 ], block_align=(int)[ 1, 2147483647 ]</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> audio/x-truespeech, rate=(int)8000, channels=(int)[ 1, 2 ]</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> audio/x-wma, wmaversion=(int)1, bitrate=(int)[ 0, 2147483647 ], rate=(int)[ 1000, 96000 ], channels=(int)[ 1, 8 ], block_align=(int)[ 1, 2147483647 ]</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> audio/x-wma, wmaversion=(int)2, bitrate=(int)[ 0, 2147483647 ], rate=(int)[ 1000, 96000 ], channels=(int)[ 1, 8 ], block_align=(int)[ 1, 2147483647 ]</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> audio/x-wma, wmaversion=(int)3, bitrate=(int)[ 0, 2147483647 ], rate=(int)[ 1000, 96000 ], channels=(int)[ 1, 8 ], block_align=(int)[ 1, 2147483647 ]</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> audio/x-vnd.sony.atrac3, rate=(int)[ 1000, 96000 ], channels=(int)[ 1, 2 ]</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> audio/x-raw, format=(string){ F32LE, F64LE }, layout=(string)interleaved, rate=(int)[ 1000, 192000 ], channels=(int)[ 1, 8 ]</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> audio/x-voxware, voxwaretype=(int)117, rate=(int)[ 1000, 96000 ], channels=(int)[ 1, 2 ]</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> audio/x-adpcm, layout=(string)dk4, rate=(int)[ 8000, 96000 ], channels=(int)[ 1, 2 ]</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> audio/x-adpcm, layout=(string)dk3, rate=(int)[ 8000, 96000 ], channels=(int)[ 1, 2 ]</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> audio/x-adpcm, layout=(string)dvi, rate=(int)[ 8000, 96000 ], channels=(int)[ 1, 2 ]</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> audio/AMR, rate=(int)8000, channels=(int)1</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> audio/AMR-WB, rate=(int)16000, channels=(int)1</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> audio/x-siren</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> application/x-ogg-avi</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-plugins-ogmaudioparse.functions_details"></a><h2>Functions</h2>
+<p></p>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-plugins-ogmaudioparse.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/plugins/html/gst-plugins-base-plugins-ogmtextparse.html b/docs/plugins/html/gst-plugins-base-plugins-ogmtextparse.html
new file mode 100644
index 0000000..cdce3ad
--- /dev/null
+++ b/docs/plugins/html/gst-plugins-base-plugins-ogmtextparse.html
@@ -0,0 +1,128 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>ogmtextparse: GStreamer Base 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 Base Plugins 1.0 Plugins Reference Manual">
+<link rel="up" href="ch01.html" title="gst-plugins-base Elements">
+<link rel="prev" href="gst-plugins-base-plugins-ogmaudioparse.html" title="ogmaudioparse">
+<link rel="next" href="gst-plugins-base-plugins-ogmvideoparse.html" title="ogmvideoparse">
+<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-base-plugins-ogmtextparse.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>
+<td><a accesskey="p" href="gst-plugins-base-plugins-ogmaudioparse.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
+<td><a accesskey="n" href="gst-plugins-base-plugins-ogmvideoparse.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
+</tr></table>
+<div class="refentry">
+<a name="gst-plugins-base-plugins-ogmtextparse"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="gst-plugins-base-plugins-ogmtextparse.top_of_page"></a>ogmtextparse</span></h2>
+<p>ogmtextparse</p>
+</td>
+<td class="gallery_image" valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsect1">
+<a name="gst-plugins-base-plugins-ogmtextparse.description"></a><h2>Description</h2>
+<div class="refsynopsisdiv">
+<h2>Synopsis</h2>
+<div class="refsect2">
+<a name="id-1.2.26.3.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-base-plugins-plugin-ogg.html#plugin-ogg">ogg</a>
+          </td>
+</tr>
+<tr>
+<td><p><span class="term">author</span></p></td>
+<td>GStreamer maintainers &lt;gstreamer-devel@lists.freedesktop.org&gt;</td>
+</tr>
+<tr>
+<td><p><span class="term">class</span></p></td>
+<td>Codec/Decoder/Subtitle</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="id-1.2.26.3.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-ogm-text</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>sometimes</td>
+</tr>
+<tr>
+<td><p><span class="term">details</span></p></td>
+<td>text/x-raw, format=(string)utf8</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-plugins-ogmtextparse.functions_details"></a><h2>Functions</h2>
+<p></p>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-plugins-ogmtextparse.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/plugins/html/gst-plugins-base-plugins-ogmvideoparse.html b/docs/plugins/html/gst-plugins-base-plugins-ogmvideoparse.html
new file mode 100644
index 0000000..41e736e
--- /dev/null
+++ b/docs/plugins/html/gst-plugins-base-plugins-ogmvideoparse.html
@@ -0,0 +1,448 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>ogmvideoparse: GStreamer Base 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 Base Plugins 1.0 Plugins Reference Manual">
+<link rel="up" href="ch01.html" title="gst-plugins-base Elements">
+<link rel="prev" href="gst-plugins-base-plugins-ogmtextparse.html" title="ogmtextparse">
+<link rel="next" href="gst-plugins-base-plugins-playbin.html" title="playbin">
+<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-base-plugins-ogmvideoparse.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>
+<td><a accesskey="p" href="gst-plugins-base-plugins-ogmtextparse.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
+<td><a accesskey="n" href="gst-plugins-base-plugins-playbin.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
+</tr></table>
+<div class="refentry">
+<a name="gst-plugins-base-plugins-ogmvideoparse"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="gst-plugins-base-plugins-ogmvideoparse.top_of_page"></a>ogmvideoparse</span></h2>
+<p>ogmvideoparse</p>
+</td>
+<td class="gallery_image" valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsect1">
+<a name="gst-plugins-base-plugins-ogmvideoparse.description"></a><h2>Description</h2>
+<div class="refsynopsisdiv">
+<h2>Synopsis</h2>
+<div class="refsect2">
+<a name="id-1.2.27.3.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-base-plugins-plugin-ogg.html#plugin-ogg">ogg</a>
+          </td>
+</tr>
+<tr>
+<td><p><span class="term">author</span></p></td>
+<td>GStreamer maintainers &lt;gstreamer-devel@lists.freedesktop.org&gt;</td>
+</tr>
+<tr>
+<td><p><span class="term">class</span></p></td>
+<td>Codec/Decoder/Video</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="id-1.2.27.3.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-ogm-video</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>sometimes</td>
+</tr>
+<tr>
+<td><p><span class="term">details</span></p></td>
+<td>video/mpeg, mpegversion=(int)4, systemstream=(boolean)false, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-asus, asusversion=(int)1, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-asus, asusversion=(int)2, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-cirrus-logic-accupak, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-camstudio, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-compressed-yuv, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-raw, format=(string){ RGB8P, BGR, BGRx }, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-divx, divxversion=(int)3, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-divx, divxversion=(int)4, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-truemotion, trueversion=(int)1, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-dv, systemstream=(boolean)false, dvversion=(int)25, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-dv, systemstream=(boolean)false, dvversion=(int)50, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-divx, divxversion=(int)5, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/mpeg, mpegversion=(int)4, systemstream=(boolean)false, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-flash-video, flvversion=(int)1, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-vp6-flash, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-h263, variant=(string)itu, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-h263, variant=(string)lucent, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-h264, variant=(string)itu, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-huffyuv, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-intel-h263, variant=(string)intel, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-raw, format=(string)I420, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-indeo, indeoversion=(int)3, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-indeo, indeoversion=(int)4, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-indeo, indeoversion=(int)5, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-h263, variant=(string)lead, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-h264, variant=(string)lead, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-h263, variant=(string)microsoft, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/mpeg, mpegversion=(int)4, systemstream=(boolean)false, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> image/jpeg, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-msmpeg, msmpegversion=(int)42, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-msmpeg, msmpegversion=(int)43, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/mpeg, systemstream=(boolean)false, mpegversion=(int)1, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/mpeg, systemstream=(boolean)false, mpegversion=(int)2, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-msmpeg, msmpegversion=(int)41, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-mszh, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> image/png, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-rle, layout=(string)microsoft, depth=(int)[ 1, 64 ], framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-indeo, indeoversion=(int)2, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/sp5x, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-truemotion, trueversion=(int)2, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-camtasia, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-ultimotion, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-raw, format=(string)UYVY, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-ati-vcr, vcrversion=(int)1, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-ati-vcr, vcrversion=(int)2, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-h263, variant=(string)vdolive, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-h263, variant=(string)vivo, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-vmnc, version=(int)1, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-vp3, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-h264, variant=(string)videosoft, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-wmv, wmvversion=(int)1, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-wmv, wmvversion=(int)2, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-wmv, wmvversion=(int)3, format=(string)WMV3, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/mpeg, mpegversion=(int)4, systemstream=(boolean)false, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-xan, wcversion=(int)4, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-raw, format=(string)YUY2, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-raw, format=(string)YVU9, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-zlib, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-cinepak, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-h264, variant=(string)itu, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-msvideocodec, msvideoversion=(int)1, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-h263, variant=(string)xirlink, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-dirac, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-ffv, ffvversion=(int)1, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-kmvc, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-vp5, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-vp6, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-vp6-flash, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-vp7, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-vp8, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-mimic, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-apple-video, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-theora, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-fraps, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-aasc, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-raw, format=(string)YV12, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-loco, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-zmbv, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-raw, format=(string)v210, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-raw, format=(string)r210, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-plugins-ogmvideoparse.functions_details"></a><h2>Functions</h2>
+<p></p>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-plugins-ogmvideoparse.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/plugins/html/gst-plugins-base-plugins-playbin.html b/docs/plugins/html/gst-plugins-base-plugins-playbin.html
index 326b5a7..31209fa 100644
--- a/docs/plugins/html/gst-plugins-base-plugins-playbin.html
+++ b/docs/plugins/html/gst-plugins-base-plugins-playbin.html
@@ -2,13 +2,13 @@
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>GStreamer Base Plugins 1.0 Plugins Reference Manual: playbin</title>
+<title>playbin: GStreamer Base 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 Base Plugins 1.0 Plugins Reference Manual">
 <link rel="up" href="ch01.html" title="gst-plugins-base Elements">
-<link rel="prev" href="gst-plugins-base-plugins-oggmux.html" title="oggmux">
+<link rel="prev" href="gst-plugins-base-plugins-ogmvideoparse.html" title="ogmvideoparse">
 <link rel="next" href="gst-plugins-base-plugins-playsink.html" title="playsink">
-<meta name="generator" content="GTK-Doc V1.21 (XML mode)">
+<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">
@@ -23,7 +23,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-base-plugins-oggmux.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
+<td><a accesskey="p" href="gst-plugins-base-plugins-ogmvideoparse.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
 <td><a accesskey="n" href="gst-plugins-base-plugins-playsink.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
 </tr></table>
 <div class="refentry">
@@ -31,7 +31,7 @@
 <div class="refnamediv"><table width="100%"><tr>
 <td valign="top">
 <h2><span class="refentrytitle"><a name="gst-plugins-base-plugins-playbin.top_of_page"></a>playbin</span></h2>
-<p>playbin — Autoplug and play media from an uri</p>
+<p>playbin</p>
 </td>
 <td class="gallery_image" valign="top" align="right"></td>
 </tr></table></div>
@@ -221,6 +221,16 @@
 <td class="property_name"><a class="link" href="gst-plugins-base-plugins-playbin.html#GstPlayBin--video-filter" title="The “video-filter” property">video-filter</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/gst-plugins-base-libs/html/gst-plugins-base-libs-gstvideo.html#GstVideoMultiviewFlags"><span class="type">GstVideoMultiviewFlags</span></a></td>
+<td class="property_name"><a class="link" href="gst-plugins-base-plugins-playbin.html#GstPlayBin--video-multiview-flags" title="The “video-multiview-flags” property">video-multiview-flags</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/gst-plugins-base-libs/html/gst-plugins-base-libs-gstvideo.html#GstVideoMultiviewFramePacking"><span class="type">GstVideoMultiviewFramePacking</span></a></td>
+<td class="property_name"><a class="link" href="gst-plugins-base-plugins-playbin.html#GstPlayBin--video-multiview-mode" title="The “video-multiview-mode” property">video-multiview-mode</a></td>
+<td class="property_flags">Read / Write</td>
+</tr>
 </tbody>
 </table></div>
 </div>
@@ -236,84 +246,84 @@
 <tr>
 <td class="signal_type"><span class="returnvalue">void</span></td>
 <td class="signal_name"><a class="link" href="gst-plugins-base-plugins-playbin.html#GstPlayBin-about-to-finish" title="The “about-to-finish” signal">about-to-finish</a></td>
-<td class="signal_flags">Run Last</td>
+<td class="signal_flags"><a href="https://developer.gnome.org/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS">Run Last</a></td>
 </tr>
 <tr>
 <td class="signal_type"><span class="returnvalue">void</span></td>
 <td class="signal_name"><a class="link" href="gst-plugins-base-plugins-playbin.html#GstPlayBin-audio-changed" title="The “audio-changed” signal">audio-changed</a></td>
-<td class="signal_flags">Run Last</td>
+<td class="signal_flags"><a href="https://developer.gnome.org/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS">Run Last</a></td>
 </tr>
 <tr>
 <td class="signal_type"><span class="returnvalue">void</span></td>
 <td class="signal_name"><a class="link" href="gst-plugins-base-plugins-playbin.html#GstPlayBin-audio-tags-changed" title="The “audio-tags-changed” signal">audio-tags-changed</a></td>
-<td class="signal_flags">Run Last</td>
+<td class="signal_flags"><a href="https://developer.gnome.org/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS">Run Last</a></td>
 </tr>
 <tr>
 <td class="signal_type">
 <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstSample.html"><span class="returnvalue">GstSample</span></a>*</td>
 <td class="signal_name"><a class="link" href="gst-plugins-base-plugins-playbin.html#GstPlayBin-convert-sample" title="The “convert-sample” signal">convert-sample</a></td>
-<td class="signal_flags">Action</td>
+<td class="signal_flags"><a href="https://developer.gnome.org/gobject/unstable/gobject-Signals.html#G-SIGNAL-ACTION:CAPS">Action</a></td>
 </tr>
 <tr>
 <td class="signal_type">
 <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html"><span class="returnvalue">GstPad</span></a>*</td>
 <td class="signal_name"><a class="link" href="gst-plugins-base-plugins-playbin.html#GstPlayBin-get-audio-pad" title="The “get-audio-pad” signal">get-audio-pad</a></td>
-<td class="signal_flags">Action</td>
+<td class="signal_flags"><a href="https://developer.gnome.org/gobject/unstable/gobject-Signals.html#G-SIGNAL-ACTION:CAPS">Action</a></td>
 </tr>
 <tr>
 <td class="signal_type">
 <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstTagList.html"><span class="returnvalue">GstTagList</span></a>*</td>
 <td class="signal_name"><a class="link" href="gst-plugins-base-plugins-playbin.html#GstPlayBin-get-audio-tags" title="The “get-audio-tags” signal">get-audio-tags</a></td>
-<td class="signal_flags">Action</td>
+<td class="signal_flags"><a href="https://developer.gnome.org/gobject/unstable/gobject-Signals.html#G-SIGNAL-ACTION:CAPS">Action</a></td>
 </tr>
 <tr>
 <td class="signal_type">
 <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html"><span class="returnvalue">GstPad</span></a>*</td>
 <td class="signal_name"><a class="link" href="gst-plugins-base-plugins-playbin.html#GstPlayBin-get-text-pad" title="The “get-text-pad” signal">get-text-pad</a></td>
-<td class="signal_flags">Action</td>
+<td class="signal_flags"><a href="https://developer.gnome.org/gobject/unstable/gobject-Signals.html#G-SIGNAL-ACTION:CAPS">Action</a></td>
 </tr>
 <tr>
 <td class="signal_type">
 <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstTagList.html"><span class="returnvalue">GstTagList</span></a>*</td>
 <td class="signal_name"><a class="link" href="gst-plugins-base-plugins-playbin.html#GstPlayBin-get-text-tags" title="The “get-text-tags” signal">get-text-tags</a></td>
-<td class="signal_flags">Action</td>
+<td class="signal_flags"><a href="https://developer.gnome.org/gobject/unstable/gobject-Signals.html#G-SIGNAL-ACTION:CAPS">Action</a></td>
 </tr>
 <tr>
 <td class="signal_type">
 <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html"><span class="returnvalue">GstPad</span></a>*</td>
 <td class="signal_name"><a class="link" href="gst-plugins-base-plugins-playbin.html#GstPlayBin-get-video-pad" title="The “get-video-pad” signal">get-video-pad</a></td>
-<td class="signal_flags">Action</td>
+<td class="signal_flags"><a href="https://developer.gnome.org/gobject/unstable/gobject-Signals.html#G-SIGNAL-ACTION:CAPS">Action</a></td>
 </tr>
 <tr>
 <td class="signal_type">
 <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstTagList.html"><span class="returnvalue">GstTagList</span></a>*</td>
 <td class="signal_name"><a class="link" href="gst-plugins-base-plugins-playbin.html#GstPlayBin-get-video-tags" title="The “get-video-tags” signal">get-video-tags</a></td>
-<td class="signal_flags">Action</td>
+<td class="signal_flags"><a href="https://developer.gnome.org/gobject/unstable/gobject-Signals.html#G-SIGNAL-ACTION:CAPS">Action</a></td>
 </tr>
 <tr>
 <td class="signal_type"><span class="returnvalue">void</span></td>
 <td class="signal_name"><a class="link" href="gst-plugins-base-plugins-playbin.html#GstPlayBin-source-setup" title="The “source-setup” signal">source-setup</a></td>
-<td class="signal_flags">Run Last</td>
+<td class="signal_flags"><a href="https://developer.gnome.org/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS">Run Last</a></td>
 </tr>
 <tr>
 <td class="signal_type"><span class="returnvalue">void</span></td>
 <td class="signal_name"><a class="link" href="gst-plugins-base-plugins-playbin.html#GstPlayBin-text-changed" title="The “text-changed” signal">text-changed</a></td>
-<td class="signal_flags">Run Last</td>
+<td class="signal_flags"><a href="https://developer.gnome.org/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS">Run Last</a></td>
 </tr>
 <tr>
 <td class="signal_type"><span class="returnvalue">void</span></td>
 <td class="signal_name"><a class="link" href="gst-plugins-base-plugins-playbin.html#GstPlayBin-text-tags-changed" title="The “text-tags-changed” signal">text-tags-changed</a></td>
-<td class="signal_flags">Run Last</td>
+<td class="signal_flags"><a href="https://developer.gnome.org/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS">Run Last</a></td>
 </tr>
 <tr>
 <td class="signal_type"><span class="returnvalue">void</span></td>
 <td class="signal_name"><a class="link" href="gst-plugins-base-plugins-playbin.html#GstPlayBin-video-changed" title="The “video-changed” signal">video-changed</a></td>
-<td class="signal_flags">Run Last</td>
+<td class="signal_flags"><a href="https://developer.gnome.org/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS">Run Last</a></td>
 </tr>
 <tr>
 <td class="signal_type"><span class="returnvalue">void</span></td>
 <td class="signal_name"><a class="link" href="gst-plugins-base-plugins-playbin.html#GstPlayBin-video-tags-changed" title="The “video-tags-changed” signal">video-tags-changed</a></td>
-<td class="signal_flags">Run Last</td>
+<td class="signal_flags"><a href="https://developer.gnome.org/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS">Run Last</a></td>
 </tr>
 </tbody>
 </table></div>
@@ -388,7 +398,7 @@
 </li>
 </ul></div>
 <div class="refsect2">
-<a name="id-1.2.24.9.5"></a><h3>Usage</h3>
+<a name="id-1.2.28.9.5"></a><h3>Usage</h3>
 <p>
 A playbin element can be created just like any other element using
 <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElementFactory.html#gst-element-factory-make"><code class="function">gst_element_factory_make()</code></a>. The file/URI to play should be set via the <a class="link" href="gst-plugins-base-plugins-playbin.html#GstPlayBin--uri" title="The “uri” property"><span class="type">“uri”</span></a>
@@ -429,7 +439,7 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="id-1.2.24.9.6"></a><h3>Advanced Usage: specifying the audio and video sink</h3>
+<a name="id-1.2.28.9.6"></a><h3>Advanced Usage: specifying the audio and video sink</h3>
 <p>
 By default, if no audio sink or video sink has been specified via the
 <a class="link" href="gst-plugins-base-plugins-playbin.html#GstPlayBin--audio-sink" title="The “audio-sink” property"><span class="type">“audio-sink”</span></a> or <a class="link" href="gst-plugins-base-plugins-playbin.html#GstPlayBin--video-sink" title="The “video-sink” property"><span class="type">“video-sink”</span></a> property, playbin will use the autoaudiosink
@@ -464,7 +474,7 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="id-1.2.24.9.7"></a><h3>Retrieving Tags and Other Meta Data</h3>
+<a name="id-1.2.28.9.7"></a><h3>Retrieving Tags and Other Meta Data</h3>
 <p>
 Most of the common meta data (artist, title, etc.) can be retrieved by
 watching for TAG messages on the pipeline's bus (see above).
@@ -476,7 +486,7 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="id-1.2.24.9.8"></a><h3>Buffering</h3>
+<a name="id-1.2.28.9.8"></a><h3>Buffering</h3>
 Playbin handles buffering automatically for the most part, but applications
 need to handle parts of the buffering process as well. Whenever playbin is
 buffering, it will post BUFFERING messages on the bus with a percentage
@@ -501,7 +511,7 @@
   <span class="keyword">case</span> GST_MESSAGE_BUFFERING<span class="gtkdoc opt">: {</span>
     gint percent <span class="gtkdoc opt">=</span> <span class="number">0</span><span class="gtkdoc opt">;</span>
     <span class="function"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstMessage.html#gst-message-parse-buffering">gst_message_parse_buffering</a></span> <span class="gtkdoc opt">(</span>msg<span class="gtkdoc opt">, &amp;</span>percent<span class="gtkdoc opt">);</span>
-    <span class="function"><a href="https://developer.gnome.org/glib/unstable/glib-Warnings-and-Assertions.html#g-print">g_print</a></span> <span class="gtkdoc opt">(</span><span class="string">&quot;Buffering (%%u percent done)&quot;</span><span class="gtkdoc opt">,</span> percent<span class="gtkdoc opt">);</span>
+    <span class="function"><a href="https://developer.gnome.org/glib/unstable/glib-Warnings-and-Assertions.html#g-print">g_print</a></span> <span class="gtkdoc opt">(</span><span class="string">&quot;Buffering (%u percent done)&quot;</span><span class="gtkdoc opt">,</span> percent<span class="gtkdoc opt">);</span>
     <span class="keyword">break</span><span class="gtkdoc opt">;</span>
   <span class="gtkdoc opt">}</span>
   <span class="gtkdoc opt">...</span>
@@ -518,7 +528,7 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="id-1.2.24.9.9"></a><h3>Embedding the video window in your application</h3>
+<a name="id-1.2.28.9.9"></a><h3>Embedding the video window in your application</h3>
 By default, playbin (or rather the video sinks used) will create their own
 window. Applications will usually want to force output to a window of their
 own, however. This can be done using the <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base-libs/html/gst-plugins-base-libs-gstvideooverlay.html#GstVideoOverlay"><span class="type">GstVideoOverlay</span></a> interface, which most
@@ -526,7 +536,7 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="id-1.2.24.9.10"></a><h3>Specifying which CD/DVD device to use</h3>
+<a name="id-1.2.28.9.10"></a><h3>Specifying which CD/DVD device to use</h3>
 The device to use for CDs/DVDs needs to be set on the source element
 playbin creates before it is opened. The most generic way of doing this
 is to connect to playbin's "source-setup" (or "notify::source") signal,
@@ -540,7 +550,7 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="id-1.2.24.9.11"></a><h3>Handling redirects</h3>
+<a name="id-1.2.28.9.11"></a><h3>Handling redirects</h3>
 <p>
 Some elements may post 'redirect' messages on the bus to tell the
 application to open another location. These are element messages containing
@@ -551,28 +561,28 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="id-1.2.24.9.12"></a><h3>Examples</h3>
+<a name="id-1.2.28.9.12"></a><h3>Examples</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 playbin uri<span class="gtkdoc opt">=</span>file<span class="gtkdoc opt">:</span><span class="gtkdoc slc">///path/to/somefile.avi</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 playbin uri<span class="gtkdoc opt">=</span>file<span class="gtkdoc opt">:</span><span class="gtkdoc slc">///path/to/somefile.mp4</span></pre></td>
       </tr>
     </tbody>
   </table>
 </div>
  This will play back the given AVI video file, given that the video and
 audio decoders required to decode the content are installed. Since no
-special audio sink or video sink is supplied (not possible via gst-launch),
-playbin will try to find a suitable audio and video sink automatically
-using the autoaudiosink and autovideosink elements.
+special audio sink or video sink is supplied (via playbin's audio-sink or
+video-sink properties) playbin will try to find a suitable audio and
+video sink automatically using the autoaudiosink and autovideosink elements.
 <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 playbin uri<span class="gtkdoc opt">=</span>cdda<span class="gtkdoc opt">:</span><span class="gtkdoc slc">//4</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 playbin uri<span class="gtkdoc opt">=</span>cdda<span class="gtkdoc opt">:</span><span class="gtkdoc slc">//4</span></pre></td>
       </tr>
     </tbody>
   </table>
@@ -584,7 +594,7 @@
     <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 playbin uri<span class="gtkdoc opt">=</span>dvd<span class="gtkdoc opt">:</span><span class="gtkdoc slc">//</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 playbin uri<span class="gtkdoc opt">=</span>dvd<span class="gtkdoc opt">:</span><span class="gtkdoc slc">//</span></pre></td>
       </tr>
     </tbody>
   </table>
@@ -595,7 +605,7 @@
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="id-1.2.24.9.13.1"></a><h3>Element Information</h3>
+<a name="id-1.2.28.9.13.1"></a><h3>Element Information</h3>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
@@ -621,14 +631,13 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="id-1.2.24.9.13.2"></a><h3>Element Pads</h3>
+<a name="id-1.2.28.9.13.2"></a><h3>Element Pads</h3>
 </div>
 </div>
-<p>
-</p>
 </div>
 <div class="refsect1">
 <a name="gst-plugins-base-plugins-playbin.functions_details"></a><h2>Functions</h2>
+<p></p>
 </div>
 <div class="refsect1">
 <a name="gst-plugins-base-plugins-playbin.other_details"></a><h2>Types and Values</h2>
@@ -642,7 +651,7 @@
 <a name="GstPlayFlags"></a><h3>enum GstPlayFlags</h3>
 <p>Extra flags to configure the behaviour of the sinks.</p>
 <div class="refsect3">
-<a name="id-1.2.24.11.3.4"></a><h4>Members</h4>
+<a name="id-1.2.28.11.3.4"></a><h4>Members</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="300px" class="enum_members_name">
@@ -726,7 +735,9 @@
 </tr>
 <tr>
 <td class="enum_member_name"><p><a name="GST-PLAY-FLAG-SOFT-COLORBALANCE:CAPS"></a>GST_PLAY_FLAG_SOFT_COLORBALANCE</p></td>
-<td class="enum_member_description"> </td>
+<td class="enum_member_description">
+<p>Use a software filter for colour balance</p>
+</td>
 <td class="enum_member_annotations"> </td>
 </tr>
 <tr>
@@ -1012,6 +1023,21 @@
 <p>the video filter(s) to apply, if possible.</p>
 <p>Flags: Read / Write</p>
 </div>
+<hr>
+<div class="refsect2">
+<a name="GstPlayBin--video-multiview-flags"></a><h3>The <code class="literal">“video-multiview-flags”</code> property</h3>
+<pre class="programlisting">  “video-multiview-flags”    <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base-libs/html/gst-plugins-base-libs-gstvideo.html#GstVideoMultiviewFlags"><span class="type">GstVideoMultiviewFlags</span></a></pre>
+<p>Override details of the multiview frame layout.</p>
+<p>Flags: Read / Write</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstPlayBin--video-multiview-mode"></a><h3>The <code class="literal">“video-multiview-mode”</code> property</h3>
+<pre class="programlisting">  “video-multiview-mode”     <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base-libs/html/gst-plugins-base-libs-gstvideo.html#GstVideoMultiviewFramePacking"><span class="type">GstVideoMultiviewFramePacking</span></a></pre>
+<p>Re-interpret a video stream as one of several frame-packed stereoscopic modes.</p>
+<p>Flags: Read / Write</p>
+<p>Default value: GST_VIDEO_MULTIVIEW_FRAME_PACKING_NONE</p>
+</div>
 </div>
 <div class="refsect1">
 <a name="gst-plugins-base-plugins-playbin.signal-details"></a><h2>Signal Details</h2>
@@ -1024,7 +1050,7 @@
 set the uri and suburi to make sure that playback continues.</p>
 <p>This signal is emitted from the context of a GStreamer streaming thread.</p>
 <div class="refsect3">
-<a name="id-1.2.24.13.2.6"></a><h4>Parameters</h4>
+<a name="id-1.2.28.13.2.6"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1045,7 +1071,7 @@
 </tbody>
 </table></div>
 </div>
-<p>Flags: Run Last</p>
+<p>Flags: <a href="https://developer.gnome.org/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS">Run Last</a></p>
 </div>
 <hr>
 <div class="refsect2">
@@ -1060,7 +1086,7 @@
 You can use <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstMessage.html#gst-message-new-application"><code class="function">gst_message_new_application()</code></a> and <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html#gst-element-post-message"><code class="function">gst_element_post_message()</code></a>
 to notify your application's main thread.</p>
 <div class="refsect3">
-<a name="id-1.2.24.13.3.6"></a><h4>Parameters</h4>
+<a name="id-1.2.28.13.3.6"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1081,7 +1107,7 @@
 </tbody>
 </table></div>
 </div>
-<p>Flags: Run Last</p>
+<p>Flags: <a href="https://developer.gnome.org/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS">Run Last</a></p>
 </div>
 <hr>
 <div class="refsect2">
@@ -1096,7 +1122,7 @@
 You can use <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstMessage.html#gst-message-new-application"><code class="function">gst_message_new_application()</code></a> and <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html#gst-element-post-message"><code class="function">gst_element_post_message()</code></a>
 to notify your application's main thread.</p>
 <div class="refsect3">
-<a name="id-1.2.24.13.4.6"></a><h4>Parameters</h4>
+<a name="id-1.2.28.13.4.6"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1122,7 +1148,7 @@
 </tbody>
 </table></div>
 </div>
-<p>Flags: Run Last</p>
+<p>Flags: <a href="https://developer.gnome.org/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS">Run Last</a></p>
 </div>
 <hr>
 <div class="refsect2">
@@ -1138,7 +1164,7 @@
  is <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>, no conversion will be performed and this function is
 equivalent to the <span class="type">“frame”</span> property.</p>
 <div class="refsect3">
-<a name="id-1.2.24.13.5.5"></a><h4>Parameters</h4>
+<a name="id-1.2.28.13.5.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1165,14 +1191,13 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.24.13.5.6"></a><h4>Returns</h4>
+<a name="id-1.2.28.13.5.6"></a><h4>Returns</h4>
 <p> a <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstSample.html"><span class="type">GstSample</span></a> of the current video frame converted to <span class="type">caps</span>.
 The caps on the sample will describe the final layout of the buffer data.
 <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> is returned when no current buffer can be retrieved or when the
 conversion failed.</p>
-<p></p>
 </div>
-<p>Flags: Action</p>
+<p>Flags: <a href="https://developer.gnome.org/gobject/unstable/gobject-Signals.html#G-SIGNAL-ACTION:CAPS">Action</a></p>
 </div>
 <hr>
 <div class="refsect2">
@@ -1186,7 +1211,7 @@
 This pad can be used for notifications of caps changes, stream-specific
 queries, etc.</p>
 <div class="refsect3">
-<a name="id-1.2.24.13.6.5"></a><h4>Parameters</h4>
+<a name="id-1.2.28.13.6.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1213,11 +1238,10 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.24.13.6.6"></a><h4>Returns</h4>
+<a name="id-1.2.28.13.6.6"></a><h4>Returns</h4>
 <p> a <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html"><span class="type">GstPad</span></a>, or NULL when the stream number does not exist.</p>
-<p></p>
 </div>
-<p>Flags: Action</p>
+<p>Flags: <a href="https://developer.gnome.org/gobject/unstable/gobject-Signals.html#G-SIGNAL-ACTION:CAPS">Action</a></p>
 </div>
 <hr>
 <div class="refsect2">
@@ -1229,7 +1253,7 @@
 <p>Action signal to retrieve the tags of a specific audio stream number.
 This information can be used to select a stream.</p>
 <div class="refsect3">
-<a name="id-1.2.24.13.7.5"></a><h4>Parameters</h4>
+<a name="id-1.2.28.13.7.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1256,12 +1280,11 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.24.13.7.6"></a><h4>Returns</h4>
+<a name="id-1.2.28.13.7.6"></a><h4>Returns</h4>
 <p> a GstTagList with tags or NULL when the stream number does not
 exist.</p>
-<p></p>
 </div>
-<p>Flags: Action</p>
+<p>Flags: <a href="https://developer.gnome.org/gobject/unstable/gobject-Signals.html#G-SIGNAL-ACTION:CAPS">Action</a></p>
 </div>
 <hr>
 <div class="refsect2">
@@ -1275,7 +1298,7 @@
 This pad can be used for notifications of caps changes, stream-specific
 queries, etc.</p>
 <div class="refsect3">
-<a name="id-1.2.24.13.8.5"></a><h4>Parameters</h4>
+<a name="id-1.2.28.13.8.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1302,11 +1325,10 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.24.13.8.6"></a><h4>Returns</h4>
+<a name="id-1.2.28.13.8.6"></a><h4>Returns</h4>
 <p> a <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html"><span class="type">GstPad</span></a>, or NULL when the stream number does not exist.</p>
-<p></p>
 </div>
-<p>Flags: Action</p>
+<p>Flags: <a href="https://developer.gnome.org/gobject/unstable/gobject-Signals.html#G-SIGNAL-ACTION:CAPS">Action</a></p>
 </div>
 <hr>
 <div class="refsect2">
@@ -1318,7 +1340,7 @@
 <p>Action signal to retrieve the tags of a specific text stream number.
 This information can be used to select a stream.</p>
 <div class="refsect3">
-<a name="id-1.2.24.13.9.5"></a><h4>Parameters</h4>
+<a name="id-1.2.28.13.9.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1345,12 +1367,11 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.24.13.9.6"></a><h4>Returns</h4>
+<a name="id-1.2.28.13.9.6"></a><h4>Returns</h4>
 <p> a GstTagList with tags or NULL when the stream number does not
 exist.</p>
-<p></p>
 </div>
-<p>Flags: Action</p>
+<p>Flags: <a href="https://developer.gnome.org/gobject/unstable/gobject-Signals.html#G-SIGNAL-ACTION:CAPS">Action</a></p>
 </div>
 <hr>
 <div class="refsect2">
@@ -1364,7 +1385,7 @@
 This pad can be used for notifications of caps changes, stream-specific
 queries, etc.</p>
 <div class="refsect3">
-<a name="id-1.2.24.13.10.5"></a><h4>Parameters</h4>
+<a name="id-1.2.28.13.10.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1391,11 +1412,10 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.24.13.10.6"></a><h4>Returns</h4>
+<a name="id-1.2.28.13.10.6"></a><h4>Returns</h4>
 <p> a <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html"><span class="type">GstPad</span></a>, or NULL when the stream number does not exist.</p>
-<p></p>
 </div>
-<p>Flags: Action</p>
+<p>Flags: <a href="https://developer.gnome.org/gobject/unstable/gobject-Signals.html#G-SIGNAL-ACTION:CAPS">Action</a></p>
 </div>
 <hr>
 <div class="refsect2">
@@ -1407,7 +1427,7 @@
 <p>Action signal to retrieve the tags of a specific video stream number.
 This information can be used to select a stream.</p>
 <div class="refsect3">
-<a name="id-1.2.24.13.11.5"></a><h4>Parameters</h4>
+<a name="id-1.2.28.13.11.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1434,12 +1454,11 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.24.13.11.6"></a><h4>Returns</h4>
+<a name="id-1.2.28.13.11.6"></a><h4>Returns</h4>
 <p> a GstTagList with tags or NULL when the stream number does not
 exist.</p>
-<p></p>
 </div>
-<p>Flags: Action</p>
+<p>Flags: <a href="https://developer.gnome.org/gobject/unstable/gobject-Signals.html#G-SIGNAL-ACTION:CAPS">Action</a></p>
 </div>
 <hr>
 <div class="refsect2">
@@ -1456,7 +1475,7 @@
 <p>This signal is usually emitted from the context of a GStreamer streaming
 thread.</p>
 <div class="refsect3">
-<a name="id-1.2.24.13.12.6"></a><h4>Parameters</h4>
+<a name="id-1.2.28.13.12.6"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1482,7 +1501,7 @@
 </tbody>
 </table></div>
 </div>
-<p>Flags: Run Last</p>
+<p>Flags: <a href="https://developer.gnome.org/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS">Run Last</a></p>
 </div>
 <hr>
 <div class="refsect2">
@@ -1497,7 +1516,7 @@
 You can use <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstMessage.html#gst-message-new-application"><code class="function">gst_message_new_application()</code></a> and <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html#gst-element-post-message"><code class="function">gst_element_post_message()</code></a>
 to notify your application's main thread.</p>
 <div class="refsect3">
-<a name="id-1.2.24.13.13.6"></a><h4>Parameters</h4>
+<a name="id-1.2.28.13.13.6"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1518,7 +1537,7 @@
 </tbody>
 </table></div>
 </div>
-<p>Flags: Run Last</p>
+<p>Flags: <a href="https://developer.gnome.org/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS">Run Last</a></p>
 </div>
 <hr>
 <div class="refsect2">
@@ -1533,7 +1552,7 @@
 You can use <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstMessage.html#gst-message-new-application"><code class="function">gst_message_new_application()</code></a> and <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html#gst-element-post-message"><code class="function">gst_element_post_message()</code></a>
 to notify your application's main thread.</p>
 <div class="refsect3">
-<a name="id-1.2.24.13.14.6"></a><h4>Parameters</h4>
+<a name="id-1.2.28.13.14.6"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1559,7 +1578,7 @@
 </tbody>
 </table></div>
 </div>
-<p>Flags: Run Last</p>
+<p>Flags: <a href="https://developer.gnome.org/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS">Run Last</a></p>
 </div>
 <hr>
 <div class="refsect2">
@@ -1574,7 +1593,7 @@
 thread. You can use <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstMessage.html#gst-message-new-application"><code class="function">gst_message_new_application()</code></a> and
 <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html#gst-element-post-message"><code class="function">gst_element_post_message()</code></a> to notify your application's main thread.</p>
 <div class="refsect3">
-<a name="id-1.2.24.13.15.6"></a><h4>Parameters</h4>
+<a name="id-1.2.28.13.15.6"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1595,7 +1614,7 @@
 </tbody>
 </table></div>
 </div>
-<p>Flags: Run Last</p>
+<p>Flags: <a href="https://developer.gnome.org/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS">Run Last</a></p>
 </div>
 <hr>
 <div class="refsect2">
@@ -1610,7 +1629,7 @@
 You can use <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstMessage.html#gst-message-new-application"><code class="function">gst_message_new_application()</code></a> and <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html#gst-element-post-message"><code class="function">gst_element_post_message()</code></a>
 to notify your application's main thread.</p>
 <div class="refsect3">
-<a name="id-1.2.24.13.16.6"></a><h4>Parameters</h4>
+<a name="id-1.2.28.13.16.6"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1636,12 +1655,11 @@
 </tbody>
 </table></div>
 </div>
-<p>Flags: Run Last</p>
+<p>Flags: <a href="https://developer.gnome.org/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS">Run Last</a></p>
 </div>
 </div>
 </div>
 <div class="footer">
-<hr>
-          Generated by GTK-Doc V1.21</div>
+<hr>Generated by GTK-Doc V1.24</div>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/plugins/html/gst-plugins-base-plugins-playsink.html b/docs/plugins/html/gst-plugins-base-plugins-playsink.html
index dcc1904..d19d4b1 100644
--- a/docs/plugins/html/gst-plugins-base-plugins-playsink.html
+++ b/docs/plugins/html/gst-plugins-base-plugins-playsink.html
@@ -2,13 +2,13 @@
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>GStreamer Base Plugins 1.0 Plugins Reference Manual: playsink</title>
+<title>playsink: GStreamer Base 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 Base Plugins 1.0 Plugins Reference Manual">
 <link rel="up" href="ch01.html" title="gst-plugins-base Elements">
 <link rel="prev" href="gst-plugins-base-plugins-playbin.html" title="playbin">
-<link rel="next" href="gst-plugins-base-plugins-streamsynchronizer.html" title="streamsynchronizer">
-<meta name="generator" content="GTK-Doc V1.21 (XML mode)">
+<link rel="next" href="gst-plugins-base-plugins-socketsrc.html" title="socketsrc">
+<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">
@@ -24,14 +24,14 @@
 <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-base-plugins-playbin.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
-<td><a accesskey="n" href="gst-plugins-base-plugins-streamsynchronizer.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
+<td><a accesskey="n" href="gst-plugins-base-plugins-socketsrc.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
 </tr></table>
 <div class="refentry">
 <a name="gst-plugins-base-plugins-playsink"></a><div class="titlepage"></div>
 <div class="refnamediv"><table width="100%"><tr>
 <td valign="top">
 <h2><span class="refentrytitle"><a name="gst-plugins-base-plugins-playsink.top_of_page"></a>playsink</span></h2>
-<p>playsink — Convenience sink for multiple streams</p>
+<p>playsink</p>
 </td>
 <td class="gallery_image" valign="top" align="right"></td>
 </tr></table></div>
@@ -144,12 +144,12 @@
 <td class="signal_type">
 <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstSample.html"><span class="returnvalue">GstSample</span></a>*</td>
 <td class="signal_name"><a class="link" href="gst-plugins-base-plugins-playsink.html#GstPlaySink-convert-sample" title="The “convert-sample” signal">convert-sample</a></td>
-<td class="signal_flags">Action</td>
+<td class="signal_flags"><a href="https://developer.gnome.org/gobject/unstable/gobject-Signals.html#G-SIGNAL-ACTION:CAPS">Action</a></td>
 </tr>
 <tr>
 <td class="signal_type"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a></td>
 <td class="signal_name"><a class="link" href="gst-plugins-base-plugins-playsink.html#GstPlaySink-reconfigure" title="The “reconfigure” signal">reconfigure</a></td>
-<td class="signal_flags">Action</td>
+<td class="signal_flags"><a href="https://developer.gnome.org/gobject/unstable/gobject-Signals.html#G-SIGNAL-ACTION:CAPS">Action</a></td>
 </tr>
 </tbody>
 </table></div>
@@ -188,7 +188,7 @@
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="id-1.2.25.9.2.1"></a><h3>Element Information</h3>
+<a name="id-1.2.29.9.2.1"></a><h3>Element Information</h3>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
@@ -214,7 +214,7 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="id-1.2.25.9.2.2"></a><h3>Element Pads</h3>
+<a name="id-1.2.29.9.2.2"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
@@ -337,19 +337,16 @@
 </table></div>
 </div>
 </div>
-<p>
-</p>
 </div>
 <div class="refsect1">
 <a name="gst-plugins-base-plugins-playsink.functions_details"></a><h2>Functions</h2>
+<p></p>
 </div>
 <div class="refsect1">
 <a name="gst-plugins-base-plugins-playsink.other_details"></a><h2>Types and Values</h2>
 <div class="refsect2">
 <a name="GstPlaySink-struct"></a><h3>GstPlaySink</h3>
 <pre class="programlisting">typedef struct _GstPlaySink GstPlaySink;</pre>
-<p>
-</p>
 </div>
 </div>
 <div class="refsect1">
@@ -358,7 +355,7 @@
 <a name="GstPlaySink--audio-sink"></a><h3>The <code class="literal">“audio-sink”</code> property</h3>
 <pre class="programlisting">  “audio-sink”               <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html"><span class="type">GstElement</span></a> *</pre>
 <p>Set the used audio sink element. NULL will use the default sink. playsink
-must be in <code class="literal">GST_STATE_NULL</code></p>
+must be in <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html#GST-STATE-NULL:CAPS"><code class="literal">GST_STATE_NULL</code></a></p>
 <p>Flags: Read / Write</p>
 </div>
 <hr>
@@ -432,7 +429,7 @@
 <a name="GstPlaySink--text-sink"></a><h3>The <code class="literal">“text-sink”</code> property</h3>
 <pre class="programlisting">  “text-sink”                <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html"><span class="type">GstElement</span></a> *</pre>
 <p>Set the used text sink element. NULL will use the default sink. playsink
-must be in <code class="literal">GST_STATE_NULL</code></p>
+must be in <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html#GST-STATE-NULL:CAPS"><code class="literal">GST_STATE_NULL</code></a></p>
 <p>Flags: Read / Write</p>
 </div>
 <hr>
@@ -440,7 +437,7 @@
 <a name="GstPlaySink--video-sink"></a><h3>The <code class="literal">“video-sink”</code> property</h3>
 <pre class="programlisting">  “video-sink”               <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html"><span class="type">GstElement</span></a> *</pre>
 <p>Set the used video sink element. NULL will use the default sink. playsink
-must be in <code class="literal">GST_STATE_NULL</code></p>
+must be in <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html#GST-STATE-NULL:CAPS"><code class="literal">GST_STATE_NULL</code></a></p>
 <p>Flags: Read / Write</p>
 </div>
 <hr>
@@ -466,7 +463,7 @@
 <pre class="programlisting">  “audio-filter”             <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html"><span class="type">GstElement</span></a> *</pre>
 <p>Set the audio filter element/bin to use. Will apply on a best-effort basis
 unless GST_PLAY_FLAG_FORCE_FILTERS is set. playsink must be in
-<code class="literal">GST_STATE_NULL</code></p>
+<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html#GST-STATE-NULL:CAPS"><code class="literal">GST_STATE_NULL</code></a></p>
 <p>Flags: Read / Write</p>
 </div>
 <hr>
@@ -475,7 +472,7 @@
 <pre class="programlisting">  “video-filter”             <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html"><span class="type">GstElement</span></a> *</pre>
 <p>Set the video filter element/bin to use. Will apply on a best-effort basis
 unless GST_PLAY_FLAG_FORCE_FILTERS is set. playsink must be in
-<code class="literal">GST_STATE_NULL</code></p>
+<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html#GST-STATE-NULL:CAPS"><code class="literal">GST_STATE_NULL</code></a></p>
 <p>Flags: Read / Write</p>
 </div>
 </div>
@@ -494,7 +491,7 @@
  is <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>, no conversion will be performed and this function is
 equivalent to the <span class="type">“sample”</span> property.</p>
 <div class="refsect3">
-<a name="id-1.2.25.13.2.5"></a><h4>Parameters</h4>
+<a name="id-1.2.29.13.2.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -521,14 +518,13 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.25.13.2.6"></a><h4>Returns</h4>
+<a name="id-1.2.29.13.2.6"></a><h4>Returns</h4>
 <p> a <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstSample.html"><span class="type">GstSample</span></a> of the current video sample converted to <span class="type">caps</span>.
 The caps in the sample will describe the final layout of the buffer data.
 <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> is returned when no current sample can be retrieved or when the
 conversion failed.</p>
-<p></p>
 </div>
-<p>Flags: Action</p>
+<p>Flags: <a href="https://developer.gnome.org/gobject/unstable/gobject-Signals.html#G-SIGNAL-ACTION:CAPS">Action</a></p>
 </div>
 <hr>
 <div class="refsect2">
@@ -536,40 +532,11 @@
 <pre class="programlisting"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
 user_function (<a class="link" href="gst-plugins-base-plugins-playsink.html#GstPlaySink"><span class="type">GstPlaySink</span></a> *gstplaysink,
                <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a>     user_data)</pre>
-<p>
-</p>
-<div class="refsect3">
-<a name="id-1.2.25.13.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>gstplaysink</p></td>
-<td class="parameter_description"><p>the object which received the signal.</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 set when the signal handler was connected.</p></td>
-<td class="parameter_annotations"> </td>
-</tr>
-</tbody>
-</table></div>
-</div>
-<div class="refsect3">
-<a name="id-1.2.25.13.3.6"></a><h4>Returns</h4>
-<p></p>
-</div>
-<p>Flags: Action</p>
+<p>Flags: <a href="https://developer.gnome.org/gobject/unstable/gobject-Signals.html#G-SIGNAL-ACTION:CAPS">Action</a></p>
 </div>
 </div>
 </div>
 <div class="footer">
-<hr>
-          Generated by GTK-Doc V1.21</div>
+<hr>Generated by GTK-Doc V1.24</div>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/plugins/html/gst-plugins-base-plugins-plugin-adder.html b/docs/plugins/html/gst-plugins-base-plugins-plugin-adder.html
index d750f1d..c2d7a63 100644
--- a/docs/plugins/html/gst-plugins-base-plugins-plugin-adder.html
+++ b/docs/plugins/html/gst-plugins-base-plugins-plugin-adder.html
@@ -2,13 +2,13 @@
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>GStreamer Base Plugins 1.0 Plugins Reference Manual: adder</title>
+<title>adder: GStreamer Base 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 Base Plugins 1.0 Plugins Reference Manual">
 <link rel="up" href="ch02.html" title="gst-plugins-base Plugins">
 <link rel="prev" href="ch02.html" title="gst-plugins-base Plugins">
 <link rel="next" href="gst-plugins-base-plugins-plugin-alsa.html" title="alsa">
-<meta name="generator" content="GTK-Doc V1.21 (XML mode)">
+<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">
@@ -42,7 +42,7 @@
 </tr>
 <tr>
 <td><p><span class="term">version</span></p></td>
-<td>1.4.5</td>
+<td>1.5.91</td>
 </tr>
 <tr>
 <td><p><span class="term">run-time license</span></p></td>
@@ -74,7 +74,6 @@
 </div>
 </div>
 <div class="footer">
-<hr>
-          Generated by GTK-Doc V1.21</div>
+<hr>Generated by GTK-Doc V1.24</div>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/plugins/html/gst-plugins-base-plugins-plugin-alsa.html b/docs/plugins/html/gst-plugins-base-plugins-plugin-alsa.html
index 91538f9..a156c4b 100644
--- a/docs/plugins/html/gst-plugins-base-plugins-plugin-alsa.html
+++ b/docs/plugins/html/gst-plugins-base-plugins-plugin-alsa.html
@@ -2,13 +2,13 @@
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>GStreamer Base Plugins 1.0 Plugins Reference Manual: alsa</title>
+<title>alsa: GStreamer Base 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 Base Plugins 1.0 Plugins Reference Manual">
 <link rel="up" href="ch02.html" title="gst-plugins-base Plugins">
 <link rel="prev" href="gst-plugins-base-plugins-plugin-adder.html" title="adder">
 <link rel="next" href="gst-plugins-base-plugins-plugin-app.html" title="app">
-<meta name="generator" content="GTK-Doc V1.21 (XML mode)">
+<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">
@@ -42,7 +42,7 @@
 </tr>
 <tr>
 <td><p><span class="term">version</span></p></td>
-<td>1.4.5</td>
+<td>1.5.91</td>
 </tr>
 <tr>
 <td><p><span class="term">run-time license</span></p></td>
@@ -80,7 +80,6 @@
 </div>
 </div>
 <div class="footer">
-<hr>
-          Generated by GTK-Doc V1.21</div>
+<hr>Generated by GTK-Doc V1.24</div>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/plugins/html/gst-plugins-base-plugins-plugin-app.html b/docs/plugins/html/gst-plugins-base-plugins-plugin-app.html
index d3bf3af..95c867a 100644
--- a/docs/plugins/html/gst-plugins-base-plugins-plugin-app.html
+++ b/docs/plugins/html/gst-plugins-base-plugins-plugin-app.html
@@ -2,13 +2,13 @@
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>GStreamer Base Plugins 1.0 Plugins Reference Manual: app</title>
+<title>app: GStreamer Base 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 Base Plugins 1.0 Plugins Reference Manual">
 <link rel="up" href="ch02.html" title="gst-plugins-base Plugins">
 <link rel="prev" href="gst-plugins-base-plugins-plugin-alsa.html" title="alsa">
 <link rel="next" href="gst-plugins-base-plugins-plugin-audioconvert.html" title="audioconvert">
-<meta name="generator" content="GTK-Doc V1.21 (XML mode)">
+<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">
@@ -42,7 +42,7 @@
 </tr>
 <tr>
 <td><p><span class="term">version</span></p></td>
-<td>1.4.5</td>
+<td>1.5.91</td>
 </tr>
 <tr>
 <td><p><span class="term">run-time license</span></p></td>
@@ -80,7 +80,6 @@
 </div>
 </div>
 <div class="footer">
-<hr>
-          Generated by GTK-Doc V1.21</div>
+<hr>Generated by GTK-Doc V1.24</div>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/plugins/html/gst-plugins-base-plugins-plugin-audioconvert.html b/docs/plugins/html/gst-plugins-base-plugins-plugin-audioconvert.html
index 870ca4f..3a1a345 100644
--- a/docs/plugins/html/gst-plugins-base-plugins-plugin-audioconvert.html
+++ b/docs/plugins/html/gst-plugins-base-plugins-plugin-audioconvert.html
@@ -2,13 +2,13 @@
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>GStreamer Base Plugins 1.0 Plugins Reference Manual: audioconvert</title>
+<title>audioconvert: GStreamer Base 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 Base Plugins 1.0 Plugins Reference Manual">
 <link rel="up" href="ch02.html" title="gst-plugins-base Plugins">
 <link rel="prev" href="gst-plugins-base-plugins-plugin-app.html" title="app">
 <link rel="next" href="gst-plugins-base-plugins-plugin-audiorate.html" title="audiorate">
-<meta name="generator" content="GTK-Doc V1.21 (XML mode)">
+<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">
@@ -42,7 +42,7 @@
 </tr>
 <tr>
 <td><p><span class="term">version</span></p></td>
-<td>1.4.5</td>
+<td>1.5.91</td>
 </tr>
 <tr>
 <td><p><span class="term">run-time license</span></p></td>
@@ -74,7 +74,6 @@
 </div>
 </div>
 <div class="footer">
-<hr>
-          Generated by GTK-Doc V1.21</div>
+<hr>Generated by GTK-Doc V1.24</div>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/plugins/html/gst-plugins-base-plugins-plugin-audiorate.html b/docs/plugins/html/gst-plugins-base-plugins-plugin-audiorate.html
index effe1d6..e3a99d1 100644
--- a/docs/plugins/html/gst-plugins-base-plugins-plugin-audiorate.html
+++ b/docs/plugins/html/gst-plugins-base-plugins-plugin-audiorate.html
@@ -2,13 +2,13 @@
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>GStreamer Base Plugins 1.0 Plugins Reference Manual: audiorate</title>
+<title>audiorate: GStreamer Base 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 Base Plugins 1.0 Plugins Reference Manual">
 <link rel="up" href="ch02.html" title="gst-plugins-base Plugins">
 <link rel="prev" href="gst-plugins-base-plugins-plugin-audioconvert.html" title="audioconvert">
 <link rel="next" href="gst-plugins-base-plugins-plugin-audioresample.html" title="audioresample">
-<meta name="generator" content="GTK-Doc V1.21 (XML mode)">
+<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">
@@ -42,7 +42,7 @@
 </tr>
 <tr>
 <td><p><span class="term">version</span></p></td>
-<td>1.4.5</td>
+<td>1.5.91</td>
 </tr>
 <tr>
 <td><p><span class="term">run-time license</span></p></td>
@@ -74,7 +74,6 @@
 </div>
 </div>
 <div class="footer">
-<hr>
-          Generated by GTK-Doc V1.21</div>
+<hr>Generated by GTK-Doc V1.24</div>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/plugins/html/gst-plugins-base-plugins-plugin-audioresample.html b/docs/plugins/html/gst-plugins-base-plugins-plugin-audioresample.html
index 2c62ac6..db84e0e 100644
--- a/docs/plugins/html/gst-plugins-base-plugins-plugin-audioresample.html
+++ b/docs/plugins/html/gst-plugins-base-plugins-plugin-audioresample.html
@@ -2,13 +2,13 @@
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>GStreamer Base Plugins 1.0 Plugins Reference Manual: audioresample</title>
+<title>audioresample: GStreamer Base 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 Base Plugins 1.0 Plugins Reference Manual">
 <link rel="up" href="ch02.html" title="gst-plugins-base Plugins">
 <link rel="prev" href="gst-plugins-base-plugins-plugin-audiorate.html" title="audiorate">
 <link rel="next" href="gst-plugins-base-plugins-plugin-audiotestsrc.html" title="audiotestsrc">
-<meta name="generator" content="GTK-Doc V1.21 (XML mode)">
+<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">
@@ -42,7 +42,7 @@
 </tr>
 <tr>
 <td><p><span class="term">version</span></p></td>
-<td>1.4.5</td>
+<td>1.5.91</td>
 </tr>
 <tr>
 <td><p><span class="term">run-time license</span></p></td>
@@ -74,7 +74,6 @@
 </div>
 </div>
 <div class="footer">
-<hr>
-          Generated by GTK-Doc V1.21</div>
+<hr>Generated by GTK-Doc V1.24</div>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/plugins/html/gst-plugins-base-plugins-plugin-audiotestsrc.html b/docs/plugins/html/gst-plugins-base-plugins-plugin-audiotestsrc.html
index 353aea6..6626d6a 100644
--- a/docs/plugins/html/gst-plugins-base-plugins-plugin-audiotestsrc.html
+++ b/docs/plugins/html/gst-plugins-base-plugins-plugin-audiotestsrc.html
@@ -2,13 +2,13 @@
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>GStreamer Base Plugins 1.0 Plugins Reference Manual: audiotestsrc</title>
+<title>audiotestsrc: GStreamer Base 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 Base Plugins 1.0 Plugins Reference Manual">
 <link rel="up" href="ch02.html" title="gst-plugins-base Plugins">
 <link rel="prev" href="gst-plugins-base-plugins-plugin-audioresample.html" title="audioresample">
 <link rel="next" href="gst-plugins-base-plugins-plugin-cdparanoia.html" title="cdparanoia">
-<meta name="generator" content="GTK-Doc V1.21 (XML mode)">
+<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">
@@ -42,7 +42,7 @@
 </tr>
 <tr>
 <td><p><span class="term">version</span></p></td>
-<td>1.4.5</td>
+<td>1.5.91</td>
 </tr>
 <tr>
 <td><p><span class="term">run-time license</span></p></td>
@@ -74,7 +74,6 @@
 </div>
 </div>
 <div class="footer">
-<hr>
-          Generated by GTK-Doc V1.21</div>
+<hr>Generated by GTK-Doc V1.24</div>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/plugins/html/gst-plugins-base-plugins-plugin-cdparanoia.html b/docs/plugins/html/gst-plugins-base-plugins-plugin-cdparanoia.html
index e9cd65a..b4e03db 100644
--- a/docs/plugins/html/gst-plugins-base-plugins-plugin-cdparanoia.html
+++ b/docs/plugins/html/gst-plugins-base-plugins-plugin-cdparanoia.html
@@ -2,13 +2,13 @@
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>GStreamer Base Plugins 1.0 Plugins Reference Manual: cdparanoia</title>
+<title>cdparanoia: GStreamer Base 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 Base Plugins 1.0 Plugins Reference Manual">
 <link rel="up" href="ch02.html" title="gst-plugins-base Plugins">
 <link rel="prev" href="gst-plugins-base-plugins-plugin-audiotestsrc.html" title="audiotestsrc">
 <link rel="next" href="gst-plugins-base-plugins-plugin-encoding.html" title="encoding">
-<meta name="generator" content="GTK-Doc V1.21 (XML mode)">
+<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">
@@ -42,7 +42,7 @@
 </tr>
 <tr>
 <td><p><span class="term">version</span></p></td>
-<td>1.4.5</td>
+<td>1.5.91</td>
 </tr>
 <tr>
 <td><p><span class="term">run-time license</span></p></td>
@@ -74,7 +74,6 @@
 </div>
 </div>
 <div class="footer">
-<hr>
-          Generated by GTK-Doc V1.21</div>
+<hr>Generated by GTK-Doc V1.24</div>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/plugins/html/gst-plugins-base-plugins-plugin-encoding.html b/docs/plugins/html/gst-plugins-base-plugins-plugin-encoding.html
index 29bbf9a..0b9b7d8 100644
--- a/docs/plugins/html/gst-plugins-base-plugins-plugin-encoding.html
+++ b/docs/plugins/html/gst-plugins-base-plugins-plugin-encoding.html
@@ -2,13 +2,13 @@
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>GStreamer Base Plugins 1.0 Plugins Reference Manual: encoding</title>
+<title>encoding: GStreamer Base 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 Base Plugins 1.0 Plugins Reference Manual">
 <link rel="up" href="ch02.html" title="gst-plugins-base Plugins">
 <link rel="prev" href="gst-plugins-base-plugins-plugin-cdparanoia.html" title="cdparanoia">
-<link rel="next" href="gst-plugins-base-plugins-plugin-videoconvert.html" title="videoconvert">
-<meta name="generator" content="GTK-Doc V1.21 (XML mode)">
+<link rel="next" href="gst-plugins-base-plugins-plugin-gio.html" title="gio">
+<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">
@@ -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-base-plugins-plugin-cdparanoia.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
-<td><a accesskey="n" href="gst-plugins-base-plugins-plugin-videoconvert.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
+<td><a accesskey="n" href="gst-plugins-base-plugins-plugin-gio.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
 </tr></table>
 <div class="refentry">
 <a name="gst-plugins-base-plugins-plugin-encoding"></a><div class="titlepage"></div>
@@ -42,7 +42,7 @@
 </tr>
 <tr>
 <td><p><span class="term">version</span></p></td>
-<td>1.4.5</td>
+<td>1.5.91</td>
 </tr>
 <tr>
 <td><p><span class="term">run-time license</span></p></td>
@@ -74,7 +74,6 @@
 </div>
 </div>
 <div class="footer">
-<hr>
-          Generated by GTK-Doc V1.21</div>
+<hr>Generated by GTK-Doc V1.24</div>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/plugins/html/gst-plugins-base-plugins-plugin-gio.html b/docs/plugins/html/gst-plugins-base-plugins-plugin-gio.html
index 57183bb..fd33e36 100644
--- a/docs/plugins/html/gst-plugins-base-plugins-plugin-gio.html
+++ b/docs/plugins/html/gst-plugins-base-plugins-plugin-gio.html
@@ -2,13 +2,13 @@
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>GStreamer Base Plugins 1.0 Plugins Reference Manual: gio</title>
+<title>gio: GStreamer Base 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 Base Plugins 1.0 Plugins Reference Manual">
 <link rel="up" href="ch02.html" title="gst-plugins-base Plugins">
-<link rel="prev" href="gst-plugins-base-plugins-plugin-videoconvert.html" title="videoconvert">
-<link rel="next" href="gst-plugins-base-plugins-plugin-libvisual.html" title="libvisual">
-<meta name="generator" content="GTK-Doc V1.21 (XML mode)">
+<link rel="prev" href="gst-plugins-base-plugins-plugin-encoding.html" title="encoding">
+<link rel="next" href="gst-plugins-base-plugins-plugin-ivorbisdec.html" title="ivorbisdec">
+<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">
@@ -16,8 +16,8 @@
 <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-base-plugins-plugin-videoconvert.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
-<td><a accesskey="n" href="gst-plugins-base-plugins-plugin-libvisual.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
+<td><a accesskey="p" href="gst-plugins-base-plugins-plugin-encoding.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
+<td><a accesskey="n" href="gst-plugins-base-plugins-plugin-ivorbisdec.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
 </tr></table>
 <div class="refentry">
 <a name="gst-plugins-base-plugins-plugin-gio"></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.12.3"></a><h2>Plugin Information</h2>
+<a name="id-1.3.11.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.4.5</td>
+<td>1.5.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.12.4"></a><h2>Elements</h2>
+<a name="id-1.3.11.4"></a><h2>Elements</h2>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
@@ -88,7 +88,6 @@
 </div>
 </div>
 <div class="footer">
-<hr>
-          Generated by GTK-Doc V1.21</div>
+<hr>Generated by GTK-Doc V1.24</div>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/plugins/html/gst-plugins-base-plugins-plugin-ivorbisdec.html b/docs/plugins/html/gst-plugins-base-plugins-plugin-ivorbisdec.html
new file mode 100644
index 0000000..d278991
--- /dev/null
+++ b/docs/plugins/html/gst-plugins-base-plugins-plugin-ivorbisdec.html
@@ -0,0 +1,79 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>ivorbisdec: GStreamer Base 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 Base Plugins 1.0 Plugins Reference Manual">
+<link rel="up" href="ch02.html" title="gst-plugins-base Plugins">
+<link rel="prev" href="gst-plugins-base-plugins-plugin-gio.html" title="gio">
+<link rel="next" href="gst-plugins-base-plugins-plugin-libvisual.html" title="libvisual">
+<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-base-plugins-plugin-gio.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
+<td><a accesskey="n" href="gst-plugins-base-plugins-plugin-libvisual.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
+</tr></table>
+<div class="refentry">
+<a name="gst-plugins-base-plugins-plugin-ivorbisdec"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle">ivorbisdec</span></h2>
+<p>ivorbisdec — <a name="plugin-ivorbisdec"></a>Vorbis Tremor decoder</p>
+</td>
+<td class="gallery_image" valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsect1">
+<a name="id-1.3.12.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>libgstivorbisdec.so</td>
+</tr>
+<tr>
+<td><p><span class="term">version</span></p></td>
+<td>1.4.0</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 Base 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.12.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">ivorbisdec</span></p></td>
+<td>decode raw vorbis streams to integer audio</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-base-plugins-plugin-libvisual.html b/docs/plugins/html/gst-plugins-base-plugins-plugin-libvisual.html
index aa9ec47..e22c809 100644
--- a/docs/plugins/html/gst-plugins-base-plugins-plugin-libvisual.html
+++ b/docs/plugins/html/gst-plugins-base-plugins-plugin-libvisual.html
@@ -2,13 +2,13 @@
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>GStreamer Base Plugins 1.0 Plugins Reference Manual: libvisual</title>
+<title>libvisual: GStreamer Base 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 Base Plugins 1.0 Plugins Reference Manual">
 <link rel="up" href="ch02.html" title="gst-plugins-base Plugins">
-<link rel="prev" href="gst-plugins-base-plugins-plugin-gio.html" title="gio">
+<link rel="prev" href="gst-plugins-base-plugins-plugin-ivorbisdec.html" title="ivorbisdec">
 <link rel="next" href="gst-plugins-base-plugins-plugin-ogg.html" title="ogg">
-<meta name="generator" content="GTK-Doc V1.21 (XML mode)">
+<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">
@@ -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-base-plugins-plugin-gio.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
+<td><a accesskey="p" href="gst-plugins-base-plugins-plugin-ivorbisdec.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
 <td><a accesskey="n" href="gst-plugins-base-plugins-plugin-ogg.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
 </tr></table>
 <div class="refentry">
@@ -42,7 +42,7 @@
 </tr>
 <tr>
 <td><p><span class="term">version</span></p></td>
-<td>1.4.5</td>
+<td>1.5.91</td>
 </tr>
 <tr>
 <td><p><span class="term">run-time license</span></p></td>
@@ -104,7 +104,6 @@
 </div>
 </div>
 <div class="footer">
-<hr>
-          Generated by GTK-Doc V1.21</div>
+<hr>Generated by GTK-Doc V1.24</div>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/plugins/html/gst-plugins-base-plugins-plugin-ogg.html b/docs/plugins/html/gst-plugins-base-plugins-plugin-ogg.html
index 27df494..42e4413 100644
--- a/docs/plugins/html/gst-plugins-base-plugins-plugin-ogg.html
+++ b/docs/plugins/html/gst-plugins-base-plugins-plugin-ogg.html
@@ -2,13 +2,13 @@
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>GStreamer Base Plugins 1.0 Plugins Reference Manual: ogg</title>
+<title>ogg: GStreamer Base 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 Base Plugins 1.0 Plugins Reference Manual">
 <link rel="up" href="ch02.html" title="gst-plugins-base Plugins">
 <link rel="prev" href="gst-plugins-base-plugins-plugin-libvisual.html" title="libvisual">
 <link rel="next" href="gst-plugins-base-plugins-plugin-pango.html" title="pango">
-<meta name="generator" content="GTK-Doc V1.21 (XML mode)">
+<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">
@@ -42,7 +42,7 @@
 </tr>
 <tr>
 <td><p><span class="term">version</span></p></td>
-<td>1.4.5</td>
+<td>1.5.91</td>
 </tr>
 <tr>
 <td><p><span class="term">run-time license</span></p></td>
@@ -68,7 +68,7 @@
 </colgroup>
 <tbody>
 <tr>
-<td><p><span class="term">oggaviparse</span></p></td>
+<td><p><span class="term"><a class="link" href="gst-plugins-base-plugins-oggaviparse.html" title="oggaviparse">oggaviparse</a></span></p></td>
 <td>parse an ogg avi stream into pages (info about ogg: http://xiph.org)</td>
 </tr>
 <tr>
@@ -80,19 +80,19 @@
 <td>mux ogg streams (info about ogg: http://xiph.org)</td>
 </tr>
 <tr>
-<td><p><span class="term">oggparse</span></p></td>
+<td><p><span class="term"><a class="link" href="gst-plugins-base-plugins-oggparse.html" title="oggparse">oggparse</a></span></p></td>
 <td>parse ogg streams into pages (info about ogg: http://xiph.org)</td>
 </tr>
 <tr>
-<td><p><span class="term">ogmaudioparse</span></p></td>
+<td><p><span class="term"><a class="link" href="gst-plugins-base-plugins-ogmaudioparse.html" title="ogmaudioparse">ogmaudioparse</a></span></p></td>
 <td>parse an OGM audio header and stream</td>
 </tr>
 <tr>
-<td><p><span class="term">ogmtextparse</span></p></td>
+<td><p><span class="term"><a class="link" href="gst-plugins-base-plugins-ogmtextparse.html" title="ogmtextparse">ogmtextparse</a></span></p></td>
 <td>parse an OGM text header and stream</td>
 </tr>
 <tr>
-<td><p><span class="term">ogmvideoparse</span></p></td>
+<td><p><span class="term"><a class="link" href="gst-plugins-base-plugins-ogmvideoparse.html" title="ogmvideoparse">ogmvideoparse</a></span></p></td>
 <td>parse an OGM video header and stream</td>
 </tr>
 </tbody>
@@ -100,7 +100,6 @@
 </div>
 </div>
 <div class="footer">
-<hr>
-          Generated by GTK-Doc V1.21</div>
+<hr>Generated by GTK-Doc V1.24</div>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/plugins/html/gst-plugins-base-plugins-plugin-pango.html b/docs/plugins/html/gst-plugins-base-plugins-plugin-pango.html
index dd6f75a..408ddf5 100644
--- a/docs/plugins/html/gst-plugins-base-plugins-plugin-pango.html
+++ b/docs/plugins/html/gst-plugins-base-plugins-plugin-pango.html
@@ -2,13 +2,13 @@
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>GStreamer Base Plugins 1.0 Plugins Reference Manual: pango</title>
+<title>pango: GStreamer Base 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 Base Plugins 1.0 Plugins Reference Manual">
 <link rel="up" href="ch02.html" title="gst-plugins-base Plugins">
 <link rel="prev" href="gst-plugins-base-plugins-plugin-ogg.html" title="ogg">
 <link rel="next" href="gst-plugins-base-plugins-plugin-playback.html" title="playback">
-<meta name="generator" content="GTK-Doc V1.21 (XML mode)">
+<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">
@@ -42,7 +42,7 @@
 </tr>
 <tr>
 <td><p><span class="term">version</span></p></td>
-<td>1.4.5</td>
+<td>1.5.91</td>
 </tr>
 <tr>
 <td><p><span class="term">run-time license</span></p></td>
@@ -88,7 +88,6 @@
 </div>
 </div>
 <div class="footer">
-<hr>
-          Generated by GTK-Doc V1.21</div>
+<hr>Generated by GTK-Doc V1.24</div>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/plugins/html/gst-plugins-base-plugins-plugin-playback.html b/docs/plugins/html/gst-plugins-base-plugins-plugin-playback.html
index d8b6502..83bb165 100644
--- a/docs/plugins/html/gst-plugins-base-plugins-plugin-playback.html
+++ b/docs/plugins/html/gst-plugins-base-plugins-plugin-playback.html
@@ -2,13 +2,13 @@
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>GStreamer Base Plugins 1.0 Plugins Reference Manual: playback</title>
+<title>playback: GStreamer Base 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 Base Plugins 1.0 Plugins Reference Manual">
 <link rel="up" href="ch02.html" title="gst-plugins-base Plugins">
 <link rel="prev" href="gst-plugins-base-plugins-plugin-pango.html" title="pango">
 <link rel="next" href="gst-plugins-base-plugins-plugin-subparse.html" title="subparse">
-<meta name="generator" content="GTK-Doc V1.21 (XML mode)">
+<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">
@@ -42,7 +42,7 @@
 </tr>
 <tr>
 <td><p><span class="term">version</span></p></td>
-<td>1.4.5</td>
+<td>1.5.91</td>
 </tr>
 <tr>
 <td><p><span class="term">run-time license</span></p></td>
@@ -96,7 +96,6 @@
 </div>
 </div>
 <div class="footer">
-<hr>
-          Generated by GTK-Doc V1.21</div>
+<hr>Generated by GTK-Doc V1.24</div>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/plugins/html/gst-plugins-base-plugins-plugin-subparse.html b/docs/plugins/html/gst-plugins-base-plugins-plugin-subparse.html
index 4b913cc..b739338 100644
--- a/docs/plugins/html/gst-plugins-base-plugins-plugin-subparse.html
+++ b/docs/plugins/html/gst-plugins-base-plugins-plugin-subparse.html
@@ -2,13 +2,13 @@
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>GStreamer Base Plugins 1.0 Plugins Reference Manual: subparse</title>
+<title>subparse: GStreamer Base 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 Base Plugins 1.0 Plugins Reference Manual">
 <link rel="up" href="ch02.html" title="gst-plugins-base Plugins">
 <link rel="prev" href="gst-plugins-base-plugins-plugin-playback.html" title="playback">
 <link rel="next" href="gst-plugins-base-plugins-plugin-tcp.html" title="tcp">
-<meta name="generator" content="GTK-Doc V1.21 (XML mode)">
+<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">
@@ -42,7 +42,7 @@
 </tr>
 <tr>
 <td><p><span class="term">version</span></p></td>
-<td>1.4.5</td>
+<td>1.5.91</td>
 </tr>
 <tr>
 <td><p><span class="term">run-time license</span></p></td>
@@ -68,11 +68,11 @@
 </colgroup>
 <tbody>
 <tr>
-<td><p><span class="term">ssaparse</span></p></td>
+<td><p><span class="term"><a class="link" href="gst-plugins-base-plugins-ssaparse.html" title="ssaparse">ssaparse</a></span></p></td>
 <td>Parses SSA subtitle streams</td>
 </tr>
 <tr>
-<td><p><span class="term">subparse</span></p></td>
+<td><p><span class="term"><a class="link" href="gst-plugins-base-plugins-subparse.html" title="subparse">subparse</a></span></p></td>
 <td>Parses subtitle (.sub) files into text streams</td>
 </tr>
 </tbody>
@@ -80,7 +80,6 @@
 </div>
 </div>
 <div class="footer">
-<hr>
-          Generated by GTK-Doc V1.21</div>
+<hr>Generated by GTK-Doc V1.24</div>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/plugins/html/gst-plugins-base-plugins-plugin-tcp.html b/docs/plugins/html/gst-plugins-base-plugins-plugin-tcp.html
index 5e55c47..4afb7ed 100644
--- a/docs/plugins/html/gst-plugins-base-plugins-plugin-tcp.html
+++ b/docs/plugins/html/gst-plugins-base-plugins-plugin-tcp.html
@@ -2,13 +2,13 @@
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>GStreamer Base Plugins 1.0 Plugins Reference Manual: tcp</title>
+<title>tcp: GStreamer Base 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 Base Plugins 1.0 Plugins Reference Manual">
 <link rel="up" href="ch02.html" title="gst-plugins-base Plugins">
 <link rel="prev" href="gst-plugins-base-plugins-plugin-subparse.html" title="subparse">
 <link rel="next" href="gst-plugins-base-plugins-plugin-theora.html" title="theora">
-<meta name="generator" content="GTK-Doc V1.21 (XML mode)">
+<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">
@@ -42,7 +42,7 @@
 </tr>
 <tr>
 <td><p><span class="term">version</span></p></td>
-<td>1.4.5</td>
+<td>1.5.91</td>
 </tr>
 <tr>
 <td><p><span class="term">run-time license</span></p></td>
@@ -76,6 +76,10 @@
 <td>Send data to multiple sockets</td>
 </tr>
 <tr>
+<td><p><span class="term"><a class="link" href="gst-plugins-base-plugins-socketsrc.html" title="socketsrc">socketsrc</a></span></p></td>
+<td>Receive data from a socket</td>
+</tr>
+<tr>
 <td><p><span class="term"><a class="link" href="gst-plugins-base-plugins-tcpclientsink.html" title="tcpclientsink">tcpclientsink</a></span></p></td>
 <td>Send data as a client over the network via TCP</td>
 </tr>
@@ -96,7 +100,6 @@
 </div>
 </div>
 <div class="footer">
-<hr>
-          Generated by GTK-Doc V1.21</div>
+<hr>Generated by GTK-Doc V1.24</div>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/plugins/html/gst-plugins-base-plugins-plugin-theora.html b/docs/plugins/html/gst-plugins-base-plugins-plugin-theora.html
index b0d8e6f..851949b 100644
--- a/docs/plugins/html/gst-plugins-base-plugins-plugin-theora.html
+++ b/docs/plugins/html/gst-plugins-base-plugins-plugin-theora.html
@@ -2,13 +2,13 @@
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>GStreamer Base Plugins 1.0 Plugins Reference Manual: theora</title>
+<title>theora: GStreamer Base 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 Base Plugins 1.0 Plugins Reference Manual">
 <link rel="up" href="ch02.html" title="gst-plugins-base Plugins">
 <link rel="prev" href="gst-plugins-base-plugins-plugin-tcp.html" title="tcp">
 <link rel="next" href="gst-plugins-base-plugins-plugin-typefindfunctions.html" title="typefindfunctions">
-<meta name="generator" content="GTK-Doc V1.21 (XML mode)">
+<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">
@@ -42,7 +42,7 @@
 </tr>
 <tr>
 <td><p><span class="term">version</span></p></td>
-<td>1.4.5</td>
+<td>1.5.91</td>
 </tr>
 <tr>
 <td><p><span class="term">run-time license</span></p></td>
@@ -84,7 +84,6 @@
 </div>
 </div>
 <div class="footer">
-<hr>
-          Generated by GTK-Doc V1.21</div>
+<hr>Generated by GTK-Doc V1.24</div>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/plugins/html/gst-plugins-base-plugins-plugin-typefindfunctions.html b/docs/plugins/html/gst-plugins-base-plugins-plugin-typefindfunctions.html
index feb864c..6e8408b 100644
--- a/docs/plugins/html/gst-plugins-base-plugins-plugin-typefindfunctions.html
+++ b/docs/plugins/html/gst-plugins-base-plugins-plugin-typefindfunctions.html
@@ -2,13 +2,13 @@
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>GStreamer Base Plugins 1.0 Plugins Reference Manual: typefindfunctions</title>
+<title>typefindfunctions: GStreamer Base 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 Base Plugins 1.0 Plugins Reference Manual">
 <link rel="up" href="ch02.html" title="gst-plugins-base Plugins">
 <link rel="prev" href="gst-plugins-base-plugins-plugin-theora.html" title="theora">
-<link rel="next" href="gst-plugins-base-plugins-plugin-videorate.html" title="videorate">
-<meta name="generator" content="GTK-Doc V1.21 (XML mode)">
+<link rel="next" href="gst-plugins-base-plugins-plugin-videoconvert.html" title="videoconvert">
+<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">
@@ -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-base-plugins-plugin-theora.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
-<td><a accesskey="n" href="gst-plugins-base-plugins-plugin-videorate.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
+<td><a accesskey="n" href="gst-plugins-base-plugins-plugin-videoconvert.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
 </tr></table>
 <div class="refentry">
 <a name="gst-plugins-base-plugins-plugin-typefindfunctions"></a><div class="titlepage"></div>
@@ -42,7 +42,7 @@
 </tr>
 <tr>
 <td><p><span class="term">version</span></p></td>
-<td>1.4.5</td>
+<td>1.5.91</td>
 </tr>
 <tr>
 <td><p><span class="term">run-time license</span></p></td>
@@ -71,7 +71,6 @@
 </div>
 </div>
 <div class="footer">
-<hr>
-          Generated by GTK-Doc V1.21</div>
+<hr>Generated by GTK-Doc V1.24</div>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/plugins/html/gst-plugins-base-plugins-plugin-videoconvert.html b/docs/plugins/html/gst-plugins-base-plugins-plugin-videoconvert.html
index 51d8c16..2410344 100644
--- a/docs/plugins/html/gst-plugins-base-plugins-plugin-videoconvert.html
+++ b/docs/plugins/html/gst-plugins-base-plugins-plugin-videoconvert.html
@@ -2,13 +2,13 @@
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>GStreamer Base Plugins 1.0 Plugins Reference Manual: videoconvert</title>
+<title>videoconvert: GStreamer Base 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 Base Plugins 1.0 Plugins Reference Manual">
 <link rel="up" href="ch02.html" title="gst-plugins-base Plugins">
-<link rel="prev" href="gst-plugins-base-plugins-plugin-encoding.html" title="encoding">
-<link rel="next" href="gst-plugins-base-plugins-plugin-gio.html" title="gio">
-<meta name="generator" content="GTK-Doc V1.21 (XML mode)">
+<link rel="prev" href="gst-plugins-base-plugins-plugin-typefindfunctions.html" title="typefindfunctions">
+<link rel="next" href="gst-plugins-base-plugins-plugin-videorate.html" title="videorate">
+<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">
@@ -16,8 +16,8 @@
 <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-base-plugins-plugin-encoding.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
-<td><a accesskey="n" href="gst-plugins-base-plugins-plugin-gio.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
+<td><a accesskey="p" href="gst-plugins-base-plugins-plugin-typefindfunctions.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
+<td><a accesskey="n" href="gst-plugins-base-plugins-plugin-videorate.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
 </tr></table>
 <div class="refentry">
 <a name="gst-plugins-base-plugins-plugin-videoconvert"></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.11.3"></a><h2>Plugin Information</h2>
+<a name="id-1.3.21.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.4.5</td>
+<td>1.5.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.11.4"></a><h2>Elements</h2>
+<a name="id-1.3.21.4"></a><h2>Elements</h2>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
@@ -74,7 +74,6 @@
 </div>
 </div>
 <div class="footer">
-<hr>
-          Generated by GTK-Doc V1.21</div>
+<hr>Generated by GTK-Doc V1.24</div>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/plugins/html/gst-plugins-base-plugins-plugin-videorate.html b/docs/plugins/html/gst-plugins-base-plugins-plugin-videorate.html
index eaadc97..b3d45df 100644
--- a/docs/plugins/html/gst-plugins-base-plugins-plugin-videorate.html
+++ b/docs/plugins/html/gst-plugins-base-plugins-plugin-videorate.html
@@ -2,13 +2,13 @@
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>GStreamer Base Plugins 1.0 Plugins Reference Manual: videorate</title>
+<title>videorate: GStreamer Base 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 Base Plugins 1.0 Plugins Reference Manual">
 <link rel="up" href="ch02.html" title="gst-plugins-base Plugins">
-<link rel="prev" href="gst-plugins-base-plugins-plugin-typefindfunctions.html" title="typefindfunctions">
+<link rel="prev" href="gst-plugins-base-plugins-plugin-videoconvert.html" title="videoconvert">
 <link rel="next" href="gst-plugins-base-plugins-plugin-videoscale.html" title="videoscale">
-<meta name="generator" content="GTK-Doc V1.21 (XML mode)">
+<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">
@@ -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-base-plugins-plugin-typefindfunctions.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
+<td><a accesskey="p" href="gst-plugins-base-plugins-plugin-videoconvert.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
 <td><a accesskey="n" href="gst-plugins-base-plugins-plugin-videoscale.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.21.3"></a><h2>Plugin Information</h2>
+<a name="id-1.3.22.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.4.5</td>
+<td>1.5.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.21.4"></a><h2>Elements</h2>
+<a name="id-1.3.22.4"></a><h2>Elements</h2>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
@@ -74,7 +74,6 @@
 </div>
 </div>
 <div class="footer">
-<hr>
-          Generated by GTK-Doc V1.21</div>
+<hr>Generated by GTK-Doc V1.24</div>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/plugins/html/gst-plugins-base-plugins-plugin-videoscale.html b/docs/plugins/html/gst-plugins-base-plugins-plugin-videoscale.html
index 8c70a7c..697dc9a 100644
--- a/docs/plugins/html/gst-plugins-base-plugins-plugin-videoscale.html
+++ b/docs/plugins/html/gst-plugins-base-plugins-plugin-videoscale.html
@@ -2,13 +2,13 @@
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>GStreamer Base Plugins 1.0 Plugins Reference Manual: videoscale</title>
+<title>videoscale: GStreamer Base 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 Base Plugins 1.0 Plugins Reference Manual">
 <link rel="up" href="ch02.html" title="gst-plugins-base Plugins">
 <link rel="prev" href="gst-plugins-base-plugins-plugin-videorate.html" title="videorate">
 <link rel="next" href="gst-plugins-base-plugins-plugin-videotestsrc.html" title="videotestsrc">
-<meta name="generator" content="GTK-Doc V1.21 (XML mode)">
+<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">
@@ -29,7 +29,7 @@
 <td class="gallery_image" valign="top" align="right"></td>
 </tr></table></div>
 <div class="refsect1">
-<a name="id-1.3.22.3"></a><h2>Plugin Information</h2>
+<a name="id-1.3.23.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.4.5</td>
+<td>1.5.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.22.4"></a><h2>Elements</h2>
+<a name="id-1.3.23.4"></a><h2>Elements</h2>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
@@ -74,7 +74,6 @@
 </div>
 </div>
 <div class="footer">
-<hr>
-          Generated by GTK-Doc V1.21</div>
+<hr>Generated by GTK-Doc V1.24</div>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/plugins/html/gst-plugins-base-plugins-plugin-videotestsrc.html b/docs/plugins/html/gst-plugins-base-plugins-plugin-videotestsrc.html
index efbee54..4258d08 100644
--- a/docs/plugins/html/gst-plugins-base-plugins-plugin-videotestsrc.html
+++ b/docs/plugins/html/gst-plugins-base-plugins-plugin-videotestsrc.html
@@ -2,13 +2,13 @@
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>GStreamer Base Plugins 1.0 Plugins Reference Manual: videotestsrc</title>
+<title>videotestsrc: GStreamer Base 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 Base Plugins 1.0 Plugins Reference Manual">
 <link rel="up" href="ch02.html" title="gst-plugins-base Plugins">
 <link rel="prev" href="gst-plugins-base-plugins-plugin-videoscale.html" title="videoscale">
 <link rel="next" href="gst-plugins-base-plugins-plugin-volume.html" title="volume">
-<meta name="generator" content="GTK-Doc V1.21 (XML mode)">
+<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">
@@ -29,7 +29,7 @@
 <td class="gallery_image" valign="top" align="right"></td>
 </tr></table></div>
 <div class="refsect1">
-<a name="id-1.3.23.3"></a><h2>Plugin Information</h2>
+<a name="id-1.3.24.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.4.5</td>
+<td>1.5.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.23.4"></a><h2>Elements</h2>
+<a name="id-1.3.24.4"></a><h2>Elements</h2>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
@@ -74,7 +74,6 @@
 </div>
 </div>
 <div class="footer">
-<hr>
-          Generated by GTK-Doc V1.21</div>
+<hr>Generated by GTK-Doc V1.24</div>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/plugins/html/gst-plugins-base-plugins-plugin-volume.html b/docs/plugins/html/gst-plugins-base-plugins-plugin-volume.html
index 04e4c0c..950a59d 100644
--- a/docs/plugins/html/gst-plugins-base-plugins-plugin-volume.html
+++ b/docs/plugins/html/gst-plugins-base-plugins-plugin-volume.html
@@ -2,13 +2,13 @@
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>GStreamer Base Plugins 1.0 Plugins Reference Manual: volume</title>
+<title>volume: GStreamer Base 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 Base Plugins 1.0 Plugins Reference Manual">
 <link rel="up" href="ch02.html" title="gst-plugins-base Plugins">
 <link rel="prev" href="gst-plugins-base-plugins-plugin-videotestsrc.html" title="videotestsrc">
 <link rel="next" href="gst-plugins-base-plugins-plugin-vorbis.html" title="vorbis">
-<meta name="generator" content="GTK-Doc V1.21 (XML mode)">
+<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">
@@ -29,7 +29,7 @@
 <td class="gallery_image" valign="top" align="right"></td>
 </tr></table></div>
 <div class="refsect1">
-<a name="id-1.3.24.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.4.5</td>
+<td>1.5.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.24.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">
@@ -74,7 +74,6 @@
 </div>
 </div>
 <div class="footer">
-<hr>
-          Generated by GTK-Doc V1.21</div>
+<hr>Generated by GTK-Doc V1.24</div>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/plugins/html/gst-plugins-base-plugins-plugin-vorbis.html b/docs/plugins/html/gst-plugins-base-plugins-plugin-vorbis.html
index 7a7f209..91b37bf 100644
--- a/docs/plugins/html/gst-plugins-base-plugins-plugin-vorbis.html
+++ b/docs/plugins/html/gst-plugins-base-plugins-plugin-vorbis.html
@@ -2,13 +2,13 @@
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>GStreamer Base Plugins 1.0 Plugins Reference Manual: vorbis</title>
+<title>vorbis: GStreamer Base 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 Base Plugins 1.0 Plugins Reference Manual">
 <link rel="up" href="ch02.html" title="gst-plugins-base Plugins">
 <link rel="prev" href="gst-plugins-base-plugins-plugin-volume.html" title="volume">
 <link rel="next" href="gst-plugins-base-plugins-plugin-ximagesink.html" title="ximagesink">
-<meta name="generator" content="GTK-Doc V1.21 (XML mode)">
+<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">
@@ -29,7 +29,7 @@
 <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>
+<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.4.5</td>
+<td>1.5.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.25.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">
@@ -88,7 +88,6 @@
 </div>
 </div>
 <div class="footer">
-<hr>
-          Generated by GTK-Doc V1.21</div>
+<hr>Generated by GTK-Doc V1.24</div>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/plugins/html/gst-plugins-base-plugins-plugin-ximagesink.html b/docs/plugins/html/gst-plugins-base-plugins-plugin-ximagesink.html
index b3f632a..1dfd30a 100644
--- a/docs/plugins/html/gst-plugins-base-plugins-plugin-ximagesink.html
+++ b/docs/plugins/html/gst-plugins-base-plugins-plugin-ximagesink.html
@@ -2,13 +2,13 @@
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>GStreamer Base Plugins 1.0 Plugins Reference Manual: ximagesink</title>
+<title>ximagesink: GStreamer Base 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 Base Plugins 1.0 Plugins Reference Manual">
 <link rel="up" href="ch02.html" title="gst-plugins-base Plugins">
 <link rel="prev" href="gst-plugins-base-plugins-plugin-vorbis.html" title="vorbis">
 <link rel="next" href="gst-plugins-base-plugins-plugin-xvimagesink.html" title="xvimagesink">
-<meta name="generator" content="GTK-Doc V1.21 (XML mode)">
+<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">
@@ -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.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.4.5</td>
+<td>1.5.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.27.4"></a><h2>Elements</h2>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
@@ -74,7 +74,6 @@
 </div>
 </div>
 <div class="footer">
-<hr>
-          Generated by GTK-Doc V1.21</div>
+<hr>Generated by GTK-Doc V1.24</div>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/plugins/html/gst-plugins-base-plugins-plugin-xvimagesink.html b/docs/plugins/html/gst-plugins-base-plugins-plugin-xvimagesink.html
index 5b6d18c..344405a 100644
--- a/docs/plugins/html/gst-plugins-base-plugins-plugin-xvimagesink.html
+++ b/docs/plugins/html/gst-plugins-base-plugins-plugin-xvimagesink.html
@@ -2,12 +2,12 @@
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>GStreamer Base Plugins 1.0 Plugins Reference Manual: xvimagesink</title>
+<title>xvimagesink: GStreamer Base 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 Base Plugins 1.0 Plugins Reference Manual">
 <link rel="up" href="ch02.html" title="gst-plugins-base Plugins">
 <link rel="prev" href="gst-plugins-base-plugins-plugin-ximagesink.html" title="ximagesink">
-<meta name="generator" content="GTK-Doc V1.21 (XML mode)">
+<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">
@@ -28,7 +28,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.28.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.4.5</td>
+<td>1.5.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.27.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">
@@ -73,7 +73,6 @@
 </div>
 </div>
 <div class="footer">
-<hr>
-          Generated by GTK-Doc V1.21</div>
+<hr>Generated by GTK-Doc V1.24</div>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/plugins/html/gst-plugins-base-plugins-socketsrc.html b/docs/plugins/html/gst-plugins-base-plugins-socketsrc.html
new file mode 100644
index 0000000..8f873e3
--- /dev/null
+++ b/docs/plugins/html/gst-plugins-base-plugins-socketsrc.html
@@ -0,0 +1,214 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>socketsrc: GStreamer Base 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 Base Plugins 1.0 Plugins Reference Manual">
+<link rel="up" href="ch01.html" title="gst-plugins-base Elements">
+<link rel="prev" href="gst-plugins-base-plugins-playsink.html" title="playsink">
+<link rel="next" href="gst-plugins-base-plugins-ssaparse.html" title="ssaparse">
+<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-base-plugins-socketsrc.description" class="shortcut">Description</a></span><span id="nav_hierarchy">  <span class="dim">|</span> 
+                  <a href="#gst-plugins-base-plugins-socketsrc.object-hierarchy" class="shortcut">Object Hierarchy</a></span><span id="nav_properties">  <span class="dim">|</span> 
+                  <a href="#gst-plugins-base-plugins-socketsrc.properties" class="shortcut">Properties</a></span><span id="nav_signals">  <span class="dim">|</span> 
+                  <a href="#gst-plugins-base-plugins-socketsrc.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="ch01.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
+<td><a accesskey="p" href="gst-plugins-base-plugins-playsink.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
+<td><a accesskey="n" href="gst-plugins-base-plugins-ssaparse.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
+</tr></table>
+<div class="refentry">
+<a name="gst-plugins-base-plugins-socketsrc"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="gst-plugins-base-plugins-socketsrc.top_of_page"></a>socketsrc</span></h2>
+<p>socketsrc</p>
+</td>
+<td class="gallery_image" valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsect1">
+<a name="gst-plugins-base-plugins-socketsrc.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/gio/unstable/GSocket.html"><span class="type">GSocket</span></a> *</td>
+<td class="property_name"><a class="link" href="gst-plugins-base-plugins-socketsrc.html#GstSocketSrc--socket" title="The “socket” property">socket</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/GstCaps.html"><span class="type">GstCaps</span></a> *</td>
+<td class="property_name"><a class="link" href="gst-plugins-base-plugins-socketsrc.html#GstSocketSrc--caps" title="The “caps” property">caps</a></td>
+<td class="property_flags">Read / Write</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-plugins-socketsrc.signals"></a><h2>Signals</h2>
+<div class="informaltable"><table 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-base-plugins-socketsrc.html#GstSocketSrc-connection-closed-by-peer" title="The “connection-closed-by-peer” signal">connection-closed-by-peer</a></td>
+<td class="signal_flags"><a href="https://developer.gnome.org/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-FIRST:CAPS">Run First</a></td>
+</tr></tbody>
+</table></div>
+</div>
+<a name="GstSocketSrc"></a><div class="refsect1">
+<a name="gst-plugins-base-plugins-socketsrc.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-base-plugins-socketsrc.html#GstSocketSrc-struct" title="struct GstSocketSrc">GstSocketSrc</a></td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-plugins-socketsrc.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/GstBaseSrc.html">GstBaseSrc</a>
+                    <span class="lineart">╰──</span> <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer-libs/html/GstPushSrc.html">GstPushSrc</a>
+                        <span class="lineart">╰──</span> GstSocketSrc
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-plugins-socketsrc.description"></a><h2>Description</h2>
+<p>Receive data from a socket.</p>
+<p>As compared to other elements:</p>
+<p>socketsrc can be considered a source counterpart to the <span class="type">multisocketsink</span>
+sink.</p>
+<p>socketsrc can also be considered a generalization of <span class="type">tcpclientsrc</span> and
+<span class="type">tcpserversrc</span>: it contains all the logic required to communicate over the
+socket but none of the logic for creating the sockets/establishing the
+connection in the first place, allowing the user to accomplish this
+externally in whatever manner they wish making it applicable to other types
+of sockets besides TCP.</p>
+<p>As compared to <span class="type">fdsrc</span> socketsrc is socket specific and deals with <a href="https://developer.gnome.org/gio/unstable/GSocket.html"><span class="type">GSocket</span></a>
+objects rather than sockets via integer file-descriptors.</p>
+<p><em class="parameter"><code>see_also</code></em>
+: <span class="type">multisocketsink</span></p>
+<div class="refsynopsisdiv">
+<h2>Synopsis</h2>
+<div class="refsect2">
+<a name="id-1.2.30.8.8.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-base-plugins-plugin-tcp.html#plugin-tcp">tcp</a>
+          </td>
+</tr>
+<tr>
+<td><p><span class="term">author</span></p></td>
+<td>Thomas Vander Stichele &lt;thomas at apestaart dot org&gt;, William Manley &lt;will@williammanley.net&gt;</td>
+</tr>
+<tr>
+<td><p><span class="term">class</span></p></td>
+<td>Source/Network</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="id-1.2.30.8.8.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>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>ANY</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-plugins-socketsrc.functions_details"></a><h2>Functions</h2>
+<p></p>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-plugins-socketsrc.other_details"></a><h2>Types and Values</h2>
+<div class="refsect2">
+<a name="GstSocketSrc-struct"></a><h3>struct GstSocketSrc</h3>
+<pre class="programlisting">struct GstSocketSrc;</pre>
+</div>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-plugins-socketsrc.property-details"></a><h2>Property Details</h2>
+<div class="refsect2">
+<a name="GstSocketSrc--socket"></a><h3>The <code class="literal">“socket”</code> property</h3>
+<pre class="programlisting">  “socket”                   <a href="https://developer.gnome.org/gio/unstable/GSocket.html"><span class="type">GSocket</span></a> *</pre>
+<p>The socket to receive packets from.</p>
+<p>Flags: Read / Write</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstSocketSrc--caps"></a><h3>The <code class="literal">“caps”</code> property</h3>
+<pre class="programlisting">  “caps”                     <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstCaps.html"><span class="type">GstCaps</span></a> *</pre>
+<p>The caps of the source pad.</p>
+<p>Flags: Read / Write</p>
+</div>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-plugins-socketsrc.signal-details"></a><h2>Signal Details</h2>
+<div class="refsect2">
+<a name="GstSocketSrc-connection-closed-by-peer"></a><h3>The <code class="literal">“connection-closed-by-peer”</code> signal</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+user_function (<a class="link" href="gst-plugins-base-plugins-socketsrc.html#GstSocketSrc"><span class="type">GstSocketSrc</span></a> *gstsocketsrc,
+               <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-RUN-FIRST:CAPS">Run First</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/plugins/html/gst-plugins-base-plugins-ssaparse.html b/docs/plugins/html/gst-plugins-base-plugins-ssaparse.html
new file mode 100644
index 0000000..2d9db11
--- /dev/null
+++ b/docs/plugins/html/gst-plugins-base-plugins-ssaparse.html
@@ -0,0 +1,159 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>ssaparse: GStreamer Base 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 Base Plugins 1.0 Plugins Reference Manual">
+<link rel="up" href="ch01.html" title="gst-plugins-base Elements">
+<link rel="prev" href="gst-plugins-base-plugins-socketsrc.html" title="socketsrc">
+<link rel="next" href="gst-plugins-base-plugins-streamsynchronizer.html" title="streamsynchronizer">
+<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-base-plugins-ssaparse.description" class="shortcut">Description</a></span><span id="nav_hierarchy">  <span class="dim">|</span> 
+                  <a href="#gst-plugins-base-plugins-ssaparse.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-base-plugins-socketsrc.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
+<td><a accesskey="n" href="gst-plugins-base-plugins-streamsynchronizer.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
+</tr></table>
+<div class="refentry">
+<a name="gst-plugins-base-plugins-ssaparse"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="gst-plugins-base-plugins-ssaparse.top_of_page"></a>ssaparse</span></h2>
+<p>ssaparse</p>
+</td>
+<td class="gallery_image" valign="top" align="right"></td>
+</tr></table></div>
+<a name="GstSsaParse"></a><div class="refsect1">
+<a name="gst-plugins-base-plugins-ssaparse.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-base-plugins-ssaparse.html#GstSsaParse-struct" title="struct GstSsaParse">GstSsaParse</a></td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-plugins-ssaparse.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> GstSsaParse
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-plugins-ssaparse.description"></a><h2>Description</h2>
+<div class="refsynopsisdiv">
+<h2>Synopsis</h2>
+<div class="refsect2">
+<a name="id-1.2.31.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>
+            <a class="link" href="gst-plugins-base-plugins-plugin-subparse.html#plugin-subparse">subparse</a>
+          </td>
+</tr>
+<tr>
+<td><p><span class="term">author</span></p></td>
+<td>Tim-Philipp Müller &lt;tim centricular net&gt;</td>
+</tr>
+<tr>
+<td><p><span class="term">class</span></p></td>
+<td>Codec/Parser/Subtitle</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="id-1.2.31.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>application/x-ssa</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> application/x-ass</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>text/x-raw, format=(string)pango-markup</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-plugins-ssaparse.functions_details"></a><h2>Functions</h2>
+<p></p>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-plugins-ssaparse.other_details"></a><h2>Types and Values</h2>
+<div class="refsect2">
+<a name="GstSsaParse-struct"></a><h3>struct GstSsaParse</h3>
+<pre class="programlisting">struct GstSsaParse;</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-base-plugins-streamsynchronizer.html b/docs/plugins/html/gst-plugins-base-plugins-streamsynchronizer.html
index acbf3f2..ced91b3 100644
--- a/docs/plugins/html/gst-plugins-base-plugins-streamsynchronizer.html
+++ b/docs/plugins/html/gst-plugins-base-plugins-streamsynchronizer.html
@@ -2,13 +2,13 @@
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>GStreamer Base Plugins 1.0 Plugins Reference Manual: streamsynchronizer</title>
+<title>streamsynchronizer: GStreamer Base 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 Base Plugins 1.0 Plugins Reference Manual">
 <link rel="up" href="ch01.html" title="gst-plugins-base Elements">
-<link rel="prev" href="gst-plugins-base-plugins-playsink.html" title="playsink">
-<link rel="next" href="gst-plugins-base-plugins-subtitleoverlay.html" title="subtitleoverlay">
-<meta name="generator" content="GTK-Doc V1.21 (XML mode)">
+<link rel="prev" href="gst-plugins-base-plugins-ssaparse.html" title="ssaparse">
+<link rel="next" href="gst-plugins-base-plugins-subparse.html" title="subparse">
+<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">
@@ -20,15 +20,15 @@
 </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-base-plugins-playsink.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
-<td><a accesskey="n" href="gst-plugins-base-plugins-subtitleoverlay.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
+<td><a accesskey="p" href="gst-plugins-base-plugins-ssaparse.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
+<td><a accesskey="n" href="gst-plugins-base-plugins-subparse.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
 </tr></table>
 <div class="refentry">
 <a name="gst-plugins-base-plugins-streamsynchronizer"></a><div class="titlepage"></div>
 <div class="refnamediv"><table width="100%"><tr>
 <td valign="top">
 <h2><span class="refentrytitle"><a name="gst-plugins-base-plugins-streamsynchronizer.top_of_page"></a>streamsynchronizer</span></h2>
-<p>streamsynchronizer — Synchronizes a group of streams to have equal durations and starting points</p>
+<p>streamsynchronizer</p>
 </td>
 <td class="gallery_image" valign="top" align="right"></td>
 </tr></table></div>
@@ -59,7 +59,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.32.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.26.6.2.2"></a><h3>Element Pads</h3>
+<a name="id-1.2.32.6.2.2"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
@@ -136,24 +136,20 @@
 </table></div>
 </div>
 </div>
-<p>
-</p>
 </div>
 <div class="refsect1">
 <a name="gst-plugins-base-plugins-streamsynchronizer.functions_details"></a><h2>Functions</h2>
+<p></p>
 </div>
 <div class="refsect1">
 <a name="gst-plugins-base-plugins-streamsynchronizer.other_details"></a><h2>Types and Values</h2>
 <div class="refsect2">
 <a name="GstStreamSynchronizer-struct"></a><h3>struct GstStreamSynchronizer</h3>
 <pre class="programlisting">struct GstStreamSynchronizer;</pre>
-<p>
-</p>
 </div>
 </div>
 </div>
 <div class="footer">
-<hr>
-          Generated by GTK-Doc V1.21</div>
+<hr>Generated by GTK-Doc V1.24</div>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/plugins/html/gst-plugins-base-plugins-subparse.html b/docs/plugins/html/gst-plugins-base-plugins-subparse.html
new file mode 100644
index 0000000..dd29e47
--- /dev/null
+++ b/docs/plugins/html/gst-plugins-base-plugins-subparse.html
@@ -0,0 +1,220 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>subparse: GStreamer Base 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 Base Plugins 1.0 Plugins Reference Manual">
+<link rel="up" href="ch01.html" title="gst-plugins-base Elements">
+<link rel="prev" href="gst-plugins-base-plugins-streamsynchronizer.html" title="streamsynchronizer">
+<link rel="next" href="gst-plugins-base-plugins-subtitleoverlay.html" title="subtitleoverlay">
+<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-base-plugins-subparse.description" class="shortcut">Description</a></span><span id="nav_hierarchy">  <span class="dim">|</span> 
+                  <a href="#gst-plugins-base-plugins-subparse.object-hierarchy" class="shortcut">Object Hierarchy</a></span><span id="nav_properties">  <span class="dim">|</span> 
+                  <a href="#gst-plugins-base-plugins-subparse.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-base-plugins-streamsynchronizer.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
+<td><a accesskey="n" href="gst-plugins-base-plugins-subtitleoverlay.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
+</tr></table>
+<div class="refentry">
+<a name="gst-plugins-base-plugins-subparse"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="gst-plugins-base-plugins-subparse.top_of_page"></a>subparse</span></h2>
+<p>subparse</p>
+</td>
+<td class="gallery_image" valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsect1">
+<a name="gst-plugins-base-plugins-subparse.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-base-plugins-subparse.html#GstSubParse--subtitle-encoding" title="The “subtitle-encoding” property">subtitle-encoding</a></td>
+<td class="property_flags">Read / Write</td>
+</tr>
+<tr>
+<td class="property_type"><span class="type">GstFraction</span></td>
+<td class="property_name"><a class="link" href="gst-plugins-base-plugins-subparse.html#GstSubParse--video-fps" title="The “video-fps” property">video-fps</a></td>
+<td class="property_flags">Read / Write</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<a name="GstSubParse"></a><div class="refsect1">
+<a name="gst-plugins-base-plugins-subparse.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-base-plugins-subparse.html#GstSubParse-struct" title="struct GstSubParse">GstSubParse</a></td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-plugins-subparse.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> GstSubParse
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-plugins-subparse.description"></a><h2>Description</h2>
+<div class="refsynopsisdiv">
+<h2>Synopsis</h2>
+<div class="refsect2">
+<a name="id-1.2.33.7.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-base-plugins-plugin-subparse.html#plugin-subparse">subparse</a>
+          </td>
+</tr>
+<tr>
+<td><p><span class="term">author</span></p></td>
+<td>Gustavo J. A. M. Carneiro &lt;gjc@inescporto.pt&gt;, GStreamer maintainers &lt;gstreamer-devel@lists.freedesktop.org&gt;</td>
+</tr>
+<tr>
+<td><p><span class="term">class</span></p></td>
+<td>Codec/Parser/Subtitle</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="id-1.2.33.7.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-subtitle</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> application/x-subtitle-sami</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> application/x-subtitle-tmplayer</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> application/x-subtitle-mpl2</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> application/x-subtitle-dks</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> application/x-subtitle-qttext</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> application/x-subtitle-lrc</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>text/x-raw, format=(string){ pango-markup, utf8 }</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-plugins-subparse.functions_details"></a><h2>Functions</h2>
+<p></p>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-plugins-subparse.other_details"></a><h2>Types and Values</h2>
+<div class="refsect2">
+<a name="GstSubParse-struct"></a><h3>struct GstSubParse</h3>
+<pre class="programlisting">struct GstSubParse;</pre>
+</div>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-plugins-subparse.property-details"></a><h2>Property Details</h2>
+<div class="refsect2">
+<a name="GstSubParse--subtitle-encoding"></a><h3>The <code class="literal">“subtitle-encoding”</code> property</h3>
+<pre class="programlisting">  “subtitle-encoding”        <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *</pre>
+<p>Encoding to assume if input subtitles are not in UTF-8 or any other Unicode encoding. If not set, the GST_SUBTITLE_ENCODING environment variable will be checked for an encoding to use. If that is not set either, ISO-8859-15 will be assumed.</p>
+<p>Flags: Read / Write</p>
+<p>Default value: NULL</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstSubParse--video-fps"></a><h3>The <code class="literal">“video-fps”</code> property</h3>
+<pre class="programlisting">  “video-fps”                <span class="type">GstFraction</span></pre>
+<p>Framerate of the video stream. This is needed by some subtitle formats to synchronize subtitles and video properly. If not set and the subtitle format requires it subtitles may be out of sync.</p>
+<p>Flags: Read / Write</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-base-plugins-subtitleoverlay.html b/docs/plugins/html/gst-plugins-base-plugins-subtitleoverlay.html
index 7cbdb3f..bd971ee 100644
--- a/docs/plugins/html/gst-plugins-base-plugins-subtitleoverlay.html
+++ b/docs/plugins/html/gst-plugins-base-plugins-subtitleoverlay.html
@@ -2,13 +2,13 @@
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>GStreamer Base Plugins 1.0 Plugins Reference Manual: subtitleoverlay</title>
+<title>subtitleoverlay: GStreamer Base 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 Base Plugins 1.0 Plugins Reference Manual">
 <link rel="up" href="ch01.html" title="gst-plugins-base Elements">
-<link rel="prev" href="gst-plugins-base-plugins-streamsynchronizer.html" title="streamsynchronizer">
-<link rel="next" href="gst-plugins-base-plugins-tcpclientsrc.html" title="tcpclientsrc">
-<meta name="generator" content="GTK-Doc V1.21 (XML mode)">
+<link rel="prev" href="gst-plugins-base-plugins-subparse.html" title="subparse">
+<link rel="next" href="gst-plugins-base-plugins-tcpclientsink.html" title="tcpclientsink">
+<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">
@@ -22,15 +22,15 @@
 </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-base-plugins-streamsynchronizer.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
-<td><a accesskey="n" href="gst-plugins-base-plugins-tcpclientsrc.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
+<td><a accesskey="p" href="gst-plugins-base-plugins-subparse.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
+<td><a accesskey="n" href="gst-plugins-base-plugins-tcpclientsink.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
 </tr></table>
 <div class="refentry">
 <a name="gst-plugins-base-plugins-subtitleoverlay"></a><div class="titlepage"></div>
 <div class="refnamediv"><table width="100%"><tr>
 <td valign="top">
 <h2><span class="refentrytitle"><a name="gst-plugins-base-plugins-subtitleoverlay.top_of_page"></a>subtitleoverlay</span></h2>
-<p>subtitleoverlay — Overlays a video stream with subtitles</p>
+<p>subtitleoverlay</p>
 </td>
 <td class="gallery_image" valign="top" align="right"></td>
 </tr></table></div>
@@ -99,23 +99,23 @@
 <p>It supports raw, timestamped text, different textual subtitle formats and
 DVD subpicture subtitles.</p>
 <div class="refsect2">
-<a name="id-1.2.27.8.4"></a><h3>Examples</h3>
+<a name="id-1.2.34.8.4"></a><h3>Examples</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 filesrc location<span class="gtkdoc opt">=</span>test<span class="gtkdoc opt">.</span>mkv <span class="gtkdoc opt">!</span> matroskademux name<span class="gtkdoc opt">=</span>demux <span class="gtkdoc opt">!</span> <span class="string">&quot;video/x-h264&quot;</span> <span class="gtkdoc opt">!</span> queue2 <span class="gtkdoc opt">!</span> decodebin <span class="gtkdoc opt">!</span> subtitleoverlay name<span class="gtkdoc opt">=</span>overlay <span class="gtkdoc opt">!</span> videoconvert <span class="gtkdoc opt">!</span> autovideosink  demux<span class="gtkdoc opt">. !</span> <span class="string">&quot;subpicture/x-dvd&quot;</span> <span class="gtkdoc opt">!</span> queue2 <span class="gtkdoc opt">!</span> overlay<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 filesrc location<span class="gtkdoc opt">=</span>test<span class="gtkdoc opt">.</span>mkv <span class="gtkdoc opt">!</span> matroskademux name<span class="gtkdoc opt">=</span>demux <span class="gtkdoc opt">!</span> video<span class="gtkdoc opt">/</span>x<span class="gtkdoc opt">-</span>h264 <span class="gtkdoc opt">!</span> queue <span class="gtkdoc opt">!</span> decodebin <span class="gtkdoc opt">!</span> subtitleoverlay name<span class="gtkdoc opt">=</span>overlay <span class="gtkdoc opt">!</span> videoconvert <span class="gtkdoc opt">!</span> autovideosink  demux<span class="gtkdoc opt">. !</span> subpicture<span class="gtkdoc opt">/</span>x<span class="gtkdoc opt">-</span>dvd <span class="gtkdoc opt">!</span> queue <span class="gtkdoc opt">!</span> overlay<span class="gtkdoc opt">.</span></pre></td>
       </tr>
     </tbody>
   </table>
 </div>
- This will play back the given Matroska file with h264 video and subpicture subtitles.
+ This will play back the given Matroska file with h264 video and dvd subpicture style subtitles.
 </div>
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="id-1.2.27.8.5.1"></a><h3>Element Information</h3>
+<a name="id-1.2.34.8.5.1"></a><h3>Element Information</h3>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
@@ -141,7 +141,7 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="id-1.2.27.8.5.2"></a><h3>Element Pads</h3>
+<a name="id-1.2.34.8.5.2"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
@@ -216,19 +216,16 @@
 </table></div>
 </div>
 </div>
-<p>
-</p>
 </div>
 <div class="refsect1">
 <a name="gst-plugins-base-plugins-subtitleoverlay.functions_details"></a><h2>Functions</h2>
+<p></p>
 </div>
 <div class="refsect1">
 <a name="gst-plugins-base-plugins-subtitleoverlay.other_details"></a><h2>Types and Values</h2>
 <div class="refsect2">
 <a name="GstSubtitleOverlay-struct"></a><h3>struct GstSubtitleOverlay</h3>
 <pre class="programlisting">struct GstSubtitleOverlay;</pre>
-<p>
-</p>
 </div>
 </div>
 <div class="refsect1">
@@ -259,7 +256,6 @@
 </div>
 </div>
 <div class="footer">
-<hr>
-          Generated by GTK-Doc V1.21</div>
+<hr>Generated by GTK-Doc V1.24</div>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/plugins/html/gst-plugins-base-plugins-tcpclientsink.html b/docs/plugins/html/gst-plugins-base-plugins-tcpclientsink.html
index 44c452c..b9616a6 100644
--- a/docs/plugins/html/gst-plugins-base-plugins-tcpclientsink.html
+++ b/docs/plugins/html/gst-plugins-base-plugins-tcpclientsink.html
@@ -2,13 +2,13 @@
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>GStreamer Base Plugins 1.0 Plugins Reference Manual: tcpclientsink</title>
+<title>tcpclientsink: GStreamer Base 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 Base Plugins 1.0 Plugins Reference Manual">
 <link rel="up" href="ch01.html" title="gst-plugins-base Elements">
-<link rel="prev" href="gst-plugins-base-plugins-tcpclientsrc.html" title="tcpclientsrc">
-<link rel="next" href="gst-plugins-base-plugins-tcpserversrc.html" title="tcpserversrc">
-<meta name="generator" content="GTK-Doc V1.21 (XML mode)">
+<link rel="prev" href="gst-plugins-base-plugins-subtitleoverlay.html" title="subtitleoverlay">
+<link rel="next" href="gst-plugins-base-plugins-tcpclientsrc.html" title="tcpclientsrc">
+<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">
@@ -21,15 +21,15 @@
 </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-base-plugins-tcpclientsrc.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
-<td><a accesskey="n" href="gst-plugins-base-plugins-tcpserversrc.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
+<td><a accesskey="p" href="gst-plugins-base-plugins-subtitleoverlay.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
+<td><a accesskey="n" href="gst-plugins-base-plugins-tcpclientsrc.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
 </tr></table>
 <div class="refentry">
 <a name="gst-plugins-base-plugins-tcpclientsink"></a><div class="titlepage"></div>
 <div class="refnamediv"><table width="100%"><tr>
 <td valign="top">
 <h2><span class="refentrytitle"><a name="gst-plugins-base-plugins-tcpclientsink.top_of_page"></a>tcpclientsink</span></h2>
-<p>tcpclientsink — Send data as a client over the network via TCP</p>
+<p>tcpclientsink</p>
 </td>
 <td class="gallery_image" valign="top" align="right"></td>
 </tr></table></div>
@@ -82,7 +82,7 @@
 <div class="refsect1">
 <a name="gst-plugins-base-plugins-tcpclientsink.description"></a><h2>Description</h2>
 <div class="refsect2">
-<a name="id-1.2.29.7.2"></a><h3>Example launch line</h3>
+<a name="id-1.2.35.7.2"></a><h3>Example launch line</h3>
 <div class="informalexample">
   <table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
     <tbody>
@@ -94,17 +94,18 @@
         <td class="listing_code"><pre class="programlisting"><span class="gtkdoc ppc"># server:</span>
 nc <span class="gtkdoc opt">-</span>l <span class="gtkdoc opt">-</span>p <span class="number">3000</span>
 <span class="gtkdoc ppc"># client:</span>
-gst<span class="gtkdoc opt">-</span>launch fdsink fd<span class="gtkdoc opt">=</span><span class="number">1</span> <span class="gtkdoc opt">!</span> tcpclientsink port<span class="gtkdoc opt">=</span><span class="number">3000</span></pre></td>
+gst<span class="gtkdoc opt">-</span>launch<span class="gtkdoc opt">-</span><span class="number">1.0</span> fdsink fd<span class="gtkdoc opt">=</span><span class="number">1</span> <span class="gtkdoc opt">!</span> tcpclientsink port<span class="gtkdoc opt">=</span><span class="number">3000</span></pre></td>
       </tr>
     </tbody>
   </table>
 </div>
- everything you type in the client is shown on the server
+ everything you type in the client is shown on the server (fd=1 means
+standard input which is the command line input file descriptor)
 </div>
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="id-1.2.29.7.3.1"></a><h3>Element Information</h3>
+<a name="id-1.2.35.7.3.1"></a><h3>Element Information</h3>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
@@ -130,7 +131,7 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="id-1.2.29.7.3.2"></a><h3>Element Pads</h3>
+<a name="id-1.2.35.7.3.2"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
@@ -157,19 +158,16 @@
 </table></div>
 </div>
 </div>
-<p>
-</p>
 </div>
 <div class="refsect1">
 <a name="gst-plugins-base-plugins-tcpclientsink.functions_details"></a><h2>Functions</h2>
+<p></p>
 </div>
 <div class="refsect1">
 <a name="gst-plugins-base-plugins-tcpclientsink.other_details"></a><h2>Types and Values</h2>
 <div class="refsect2">
 <a name="GstTCPClientSink-struct"></a><h3>struct GstTCPClientSink</h3>
 <pre class="programlisting">struct GstTCPClientSink;</pre>
-<p>
-</p>
 </div>
 </div>
 <div class="refsect1">
@@ -197,7 +195,6 @@
 </div>
 </div>
 <div class="footer">
-<hr>
-          Generated by GTK-Doc V1.21</div>
+<hr>Generated by GTK-Doc V1.24</div>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/plugins/html/gst-plugins-base-plugins-tcpclientsrc.html b/docs/plugins/html/gst-plugins-base-plugins-tcpclientsrc.html
index 9f0cfc6..72be2c0 100644
--- a/docs/plugins/html/gst-plugins-base-plugins-tcpclientsrc.html
+++ b/docs/plugins/html/gst-plugins-base-plugins-tcpclientsrc.html
@@ -2,13 +2,13 @@
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>GStreamer Base Plugins 1.0 Plugins Reference Manual: tcpclientsrc</title>
+<title>tcpclientsrc: GStreamer Base 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 Base Plugins 1.0 Plugins Reference Manual">
 <link rel="up" href="ch01.html" title="gst-plugins-base Elements">
-<link rel="prev" href="gst-plugins-base-plugins-subtitleoverlay.html" title="subtitleoverlay">
-<link rel="next" href="gst-plugins-base-plugins-tcpclientsink.html" title="tcpclientsink">
-<meta name="generator" content="GTK-Doc V1.21 (XML mode)">
+<link rel="prev" href="gst-plugins-base-plugins-tcpclientsink.html" title="tcpclientsink">
+<link rel="next" href="gst-plugins-base-plugins-tcpserversink.html" title="tcpserversink">
+<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">
@@ -21,15 +21,15 @@
 </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-base-plugins-subtitleoverlay.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
-<td><a accesskey="n" href="gst-plugins-base-plugins-tcpclientsink.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
+<td><a accesskey="p" href="gst-plugins-base-plugins-tcpclientsink.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
+<td><a accesskey="n" href="gst-plugins-base-plugins-tcpserversink.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
 </tr></table>
 <div class="refentry">
 <a name="gst-plugins-base-plugins-tcpclientsrc"></a><div class="titlepage"></div>
 <div class="refnamediv"><table width="100%"><tr>
 <td valign="top">
 <h2><span class="refentrytitle"><a name="gst-plugins-base-plugins-tcpclientsrc.top_of_page"></a>tcpclientsrc</span></h2>
-<p>tcpclientsrc — Receive data as a client over the network via TCP</p>
+<p>tcpclientsrc</p>
 </td>
 <td class="gallery_image" valign="top" align="right"></td>
 </tr></table></div>
@@ -83,7 +83,7 @@
 <div class="refsect1">
 <a name="gst-plugins-base-plugins-tcpclientsrc.description"></a><h2>Description</h2>
 <div class="refsect2">
-<a name="id-1.2.28.7.2"></a><h3>Example launch line</h3>
+<a name="id-1.2.36.7.2"></a><h3>Example launch line</h3>
 <div class="informalexample">
   <table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
     <tbody>
@@ -95,7 +95,7 @@
         <td class="listing_code"><pre class="programlisting"><span class="gtkdoc ppc"># server:</span>
 nc <span class="gtkdoc opt">-</span>l <span class="gtkdoc opt">-</span>p <span class="number">3000</span>
 <span class="gtkdoc ppc"># client:</span>
-gst<span class="gtkdoc opt">-</span>launch tcpclientsrc port<span class="gtkdoc opt">=</span><span class="number">3000</span> <span class="gtkdoc opt">!</span> fdsink fd<span class="gtkdoc opt">=</span><span class="number">2</span></pre></td>
+gst<span class="gtkdoc opt">-</span>launch<span class="gtkdoc opt">-</span><span class="number">1.0</span> tcpclientsrc port<span class="gtkdoc opt">=</span><span class="number">3000</span> <span class="gtkdoc opt">!</span> fdsink fd<span class="gtkdoc opt">=</span><span class="number">2</span></pre></td>
       </tr>
     </tbody>
   </table>
@@ -105,7 +105,7 @@
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="id-1.2.28.7.3.1"></a><h3>Element Information</h3>
+<a name="id-1.2.36.7.3.1"></a><h3>Element Information</h3>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
@@ -131,7 +131,7 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="id-1.2.28.7.3.2"></a><h3>Element Pads</h3>
+<a name="id-1.2.36.7.3.2"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
@@ -158,19 +158,16 @@
 </table></div>
 </div>
 </div>
-<p>
-</p>
 </div>
 <div class="refsect1">
 <a name="gst-plugins-base-plugins-tcpclientsrc.functions_details"></a><h2>Functions</h2>
+<p></p>
 </div>
 <div class="refsect1">
 <a name="gst-plugins-base-plugins-tcpclientsrc.other_details"></a><h2>Types and Values</h2>
 <div class="refsect2">
 <a name="GstTCPClientSrc-struct"></a><h3>struct GstTCPClientSrc</h3>
 <pre class="programlisting">struct GstTCPClientSrc;</pre>
-<p>
-</p>
 </div>
 </div>
 <div class="refsect1">
@@ -198,7 +195,6 @@
 </div>
 </div>
 <div class="footer">
-<hr>
-          Generated by GTK-Doc V1.21</div>
+<hr>Generated by GTK-Doc V1.24</div>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/plugins/html/gst-plugins-base-plugins-tcpserversink.html b/docs/plugins/html/gst-plugins-base-plugins-tcpserversink.html
index fd8e0cc..0e3e117 100644
--- a/docs/plugins/html/gst-plugins-base-plugins-tcpserversink.html
+++ b/docs/plugins/html/gst-plugins-base-plugins-tcpserversink.html
@@ -2,13 +2,13 @@
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>GStreamer Base Plugins 1.0 Plugins Reference Manual: tcpserversink</title>
+<title>tcpserversink: GStreamer Base 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 Base Plugins 1.0 Plugins Reference Manual">
 <link rel="up" href="ch01.html" title="gst-plugins-base Elements">
-<link rel="prev" href="gst-plugins-base-plugins-tcpserversrc.html" title="tcpserversrc">
-<link rel="next" href="gst-plugins-base-plugins-textoverlay.html" title="textoverlay">
-<meta name="generator" content="GTK-Doc V1.21 (XML mode)">
+<link rel="prev" href="gst-plugins-base-plugins-tcpclientsrc.html" title="tcpclientsrc">
+<link rel="next" href="gst-plugins-base-plugins-tcpserversrc.html" title="tcpserversrc">
+<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">
@@ -21,15 +21,15 @@
 </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-base-plugins-tcpserversrc.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
-<td><a accesskey="n" href="gst-plugins-base-plugins-textoverlay.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
+<td><a accesskey="p" href="gst-plugins-base-plugins-tcpclientsrc.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
+<td><a accesskey="n" href="gst-plugins-base-plugins-tcpserversrc.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
 </tr></table>
 <div class="refentry">
 <a name="gst-plugins-base-plugins-tcpserversink"></a><div class="titlepage"></div>
 <div class="refnamediv"><table width="100%"><tr>
 <td valign="top">
 <h2><span class="refentrytitle"><a name="gst-plugins-base-plugins-tcpserversink.top_of_page"></a>tcpserversink</span></h2>
-<p>tcpserversink — Send data as a server over the network via TCP</p>
+<p>tcpserversink</p>
 </td>
 <td class="gallery_image" valign="top" align="right"></td>
 </tr></table></div>
@@ -89,7 +89,7 @@
 <div class="refsect1">
 <a name="gst-plugins-base-plugins-tcpserversink.description"></a><h2>Description</h2>
 <div class="refsect2">
-<a name="id-1.2.31.7.2"></a><h3>Example launch line</h3>
+<a name="id-1.2.37.7.2"></a><h3>Example launch line</h3>
 <div class="informalexample">
   <table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
     <tbody>
@@ -99,9 +99,9 @@
 3
 4</pre></td>
         <td class="listing_code"><pre class="programlisting"><span class="gtkdoc ppc"># server:</span>
-gst<span class="gtkdoc opt">-</span>launch fdsrc fd<span class="gtkdoc opt">=</span><span class="number">1</span> <span class="gtkdoc opt">!</span> tcpserversink port<span class="gtkdoc opt">=</span><span class="number">3000</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">1</span> <span class="gtkdoc opt">!</span> tcpserversink port<span class="gtkdoc opt">=</span><span class="number">3000</span>
 <span class="gtkdoc ppc"># client:</span>
-gst<span class="gtkdoc opt">-</span>launch tcpclientsrc port<span class="gtkdoc opt">=</span><span class="number">3000</span> <span class="gtkdoc opt">!</span> fdsink fd<span class="gtkdoc opt">=</span><span class="number">2</span></pre></td>
+gst<span class="gtkdoc opt">-</span>launch<span class="gtkdoc opt">-</span><span class="number">1.0</span> tcpclientsrc port<span class="gtkdoc opt">=</span><span class="number">3000</span> <span class="gtkdoc opt">!</span> fdsink fd<span class="gtkdoc opt">=</span><span class="number">2</span></pre></td>
       </tr>
     </tbody>
   </table>
@@ -111,7 +111,7 @@
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="id-1.2.31.7.3.1"></a><h3>Element Information</h3>
+<a name="id-1.2.37.7.3.1"></a><h3>Element Information</h3>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
@@ -137,7 +137,7 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="id-1.2.31.7.3.2"></a><h3>Element Pads</h3>
+<a name="id-1.2.37.7.3.2"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
@@ -164,11 +164,10 @@
 </table></div>
 </div>
 </div>
-<p>
-</p>
 </div>
 <div class="refsect1">
 <a name="gst-plugins-base-plugins-tcpserversink.functions_details"></a><h2>Functions</h2>
+<p></p>
 </div>
 <div class="refsect1">
 <a name="gst-plugins-base-plugins-tcpserversink.other_details"></a><h2>Types and Values</h2>
@@ -189,7 +188,7 @@
 <p>Flags: Read</p>
 <p>Allowed values: [0,65535]</p>
 <p>Default value: 0</p>
-<p class="since">Since 1.0.2</p>
+<p class="since">Since: 1.0.2</p>
 </div>
 <hr>
 <div class="refsect2">
@@ -215,7 +214,6 @@
 </div>
 </div>
 <div class="footer">
-<hr>
-          Generated by GTK-Doc V1.21</div>
+<hr>Generated by GTK-Doc V1.24</div>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/plugins/html/gst-plugins-base-plugins-tcpserversrc.html b/docs/plugins/html/gst-plugins-base-plugins-tcpserversrc.html
index 41b3830..4db360d 100644
--- a/docs/plugins/html/gst-plugins-base-plugins-tcpserversrc.html
+++ b/docs/plugins/html/gst-plugins-base-plugins-tcpserversrc.html
@@ -2,13 +2,13 @@
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>GStreamer Base Plugins 1.0 Plugins Reference Manual: tcpserversrc</title>
+<title>tcpserversrc: GStreamer Base 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 Base Plugins 1.0 Plugins Reference Manual">
 <link rel="up" href="ch01.html" title="gst-plugins-base Elements">
-<link rel="prev" href="gst-plugins-base-plugins-tcpclientsink.html" title="tcpclientsink">
-<link rel="next" href="gst-plugins-base-plugins-tcpserversink.html" title="tcpserversink">
-<meta name="generator" content="GTK-Doc V1.21 (XML mode)">
+<link rel="prev" href="gst-plugins-base-plugins-tcpserversink.html" title="tcpserversink">
+<link rel="next" href="gst-plugins-base-plugins-textoverlay.html" title="textoverlay">
+<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">
@@ -21,15 +21,15 @@
 </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-base-plugins-tcpclientsink.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
-<td><a accesskey="n" href="gst-plugins-base-plugins-tcpserversink.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
+<td><a accesskey="p" href="gst-plugins-base-plugins-tcpserversink.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
+<td><a accesskey="n" href="gst-plugins-base-plugins-textoverlay.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
 </tr></table>
 <div class="refentry">
 <a name="gst-plugins-base-plugins-tcpserversrc"></a><div class="titlepage"></div>
 <div class="refnamediv"><table width="100%"><tr>
 <td valign="top">
 <h2><span class="refentrytitle"><a name="gst-plugins-base-plugins-tcpserversrc.top_of_page"></a>tcpserversrc</span></h2>
-<p>tcpserversrc — Receive data as a server over the network via TCP</p>
+<p>tcpserversrc</p>
 </td>
 <td class="gallery_image" valign="top" align="right"></td>
 </tr></table></div>
@@ -88,7 +88,7 @@
 <div class="refsect1">
 <a name="gst-plugins-base-plugins-tcpserversrc.description"></a><h2>Description</h2>
 <div class="refsect2">
-<a name="id-1.2.30.7.2"></a><h3>Example launch line</h3>
+<a name="id-1.2.38.7.2"></a><h3>Example launch line</h3>
 <div class="informalexample">
   <table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
     <tbody>
@@ -98,9 +98,9 @@
 3
 4</pre></td>
         <td class="listing_code"><pre class="programlisting"><span class="gtkdoc ppc"># server:</span>
-gst<span class="gtkdoc opt">-</span>launch tcpserversrc port<span class="gtkdoc opt">=</span><span class="number">3000</span> <span class="gtkdoc opt">!</span> fdsink fd<span class="gtkdoc opt">=</span><span class="number">2</span>
+gst<span class="gtkdoc opt">-</span>launch<span class="gtkdoc opt">-</span><span class="number">1.0</span> tcpserversrc port<span class="gtkdoc opt">=</span><span class="number">3000</span> <span class="gtkdoc opt">!</span> fdsink fd<span class="gtkdoc opt">=</span><span class="number">2</span>
 <span class="gtkdoc ppc"># client:</span>
-gst<span class="gtkdoc opt">-</span>launch fdsrc fd<span class="gtkdoc opt">=</span><span class="number">1</span> <span class="gtkdoc opt">!</span> tcpclientsink port<span class="gtkdoc opt">=</span><span class="number">3000</span></pre></td>
+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">1</span> <span class="gtkdoc opt">!</span> tcpclientsink port<span class="gtkdoc opt">=</span><span class="number">3000</span></pre></td>
       </tr>
     </tbody>
   </table>
@@ -110,7 +110,7 @@
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="id-1.2.30.7.3.1"></a><h3>Element Information</h3>
+<a name="id-1.2.38.7.3.1"></a><h3>Element Information</h3>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
@@ -136,7 +136,7 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="id-1.2.30.7.3.2"></a><h3>Element Pads</h3>
+<a name="id-1.2.38.7.3.2"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
@@ -163,19 +163,16 @@
 </table></div>
 </div>
 </div>
-<p>
-</p>
 </div>
 <div class="refsect1">
 <a name="gst-plugins-base-plugins-tcpserversrc.functions_details"></a><h2>Functions</h2>
+<p></p>
 </div>
 <div class="refsect1">
 <a name="gst-plugins-base-plugins-tcpserversrc.other_details"></a><h2>Types and Values</h2>
 <div class="refsect2">
 <a name="GstTCPServerSrc-struct"></a><h3>struct GstTCPServerSrc</h3>
 <pre class="programlisting">struct GstTCPServerSrc;</pre>
-<p>
-</p>
 </div>
 </div>
 <div class="refsect1">
@@ -189,7 +186,7 @@
 <p>Flags: Read</p>
 <p>Allowed values: [0,65535]</p>
 <p>Default value: 0</p>
-<p class="since">Since 1.0.2</p>
+<p class="since">Since: 1.0.2</p>
 </div>
 <hr>
 <div class="refsect2">
@@ -215,7 +212,6 @@
 </div>
 </div>
 <div class="footer">
-<hr>
-          Generated by GTK-Doc V1.21</div>
+<hr>Generated by GTK-Doc V1.24</div>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/plugins/html/gst-plugins-base-plugins-textoverlay.html b/docs/plugins/html/gst-plugins-base-plugins-textoverlay.html
index 0c8e4d2..82b44e7 100644
--- a/docs/plugins/html/gst-plugins-base-plugins-textoverlay.html
+++ b/docs/plugins/html/gst-plugins-base-plugins-textoverlay.html
@@ -2,13 +2,13 @@
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>GStreamer Base Plugins 1.0 Plugins Reference Manual: textoverlay</title>
+<title>textoverlay: GStreamer Base 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 Base Plugins 1.0 Plugins Reference Manual">
 <link rel="up" href="ch01.html" title="gst-plugins-base Elements">
-<link rel="prev" href="gst-plugins-base-plugins-tcpserversink.html" title="tcpserversink">
+<link rel="prev" href="gst-plugins-base-plugins-tcpserversrc.html" title="tcpserversrc">
 <link rel="next" href="gst-plugins-base-plugins-textrender.html" title="textrender">
-<meta name="generator" content="GTK-Doc V1.21 (XML mode)">
+<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">
@@ -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="ch01.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
-<td><a accesskey="p" href="gst-plugins-base-plugins-tcpserversink.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
+<td><a accesskey="p" href="gst-plugins-base-plugins-tcpserversrc.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
 <td><a accesskey="n" href="gst-plugins-base-plugins-textrender.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
 </tr></table>
 <div class="refentry">
@@ -28,7 +28,7 @@
 <div class="refnamediv"><table width="100%"><tr>
 <td valign="top">
 <h2><span class="refentrytitle"><a name="gst-plugins-base-plugins-textoverlay.top_of_page"></a>textoverlay</span></h2>
-<p>textoverlay — Adds text strings on top of a video buffer</p>
+<p>textoverlay</p>
 </td>
 <td class="gallery_image" valign="top" align="right"></td>
 </tr></table></div>
@@ -60,7 +60,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.39.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.32.6.2.2"></a><h3>Element Pads</h3>
+<a name="id-1.2.39.6.2.2"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
@@ -135,7 +135,7 @@
 </tr>
 <tr>
 <td><p><span class="term"></span></p></td>
-<td> video/x-raw(ANY), format=(string){ I420, YV12, YUY2, UYVY, AYUV, RGBx, BGRx, xRGB, xBGR, RGBA, BGRA, ARGB, ABGR, RGB, BGR, Y41B, Y42B, YVYU, Y444, v210, v216, NV12, NV21, NV16, NV24, GRAY8, GRAY16_BE, GRAY16_LE, v308, RGB16, BGR16, RGB15, BGR15, UYVP, A420, RGB8P, YUV9, YVU9, IYU1, ARGB64, AYUV64, r210, I420_10LE, I420_10BE, I422_10LE, I422_10BE, Y444_10LE, Y444_10BE, GBR, GBR_10LE, GBR_10BE, NV12_64Z32 }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</td>
+<td> video/x-raw(ANY), format=(string){ I420, YV12, YUY2, UYVY, AYUV, RGBx, BGRx, xRGB, xBGR, RGBA, BGRA, ARGB, ABGR, RGB, BGR, Y41B, Y42B, YVYU, Y444, v210, v216, NV12, NV21, NV16, NV61, NV24, GRAY8, GRAY16_BE, GRAY16_LE, v308, RGB16, BGR16, RGB15, BGR15, UYVP, A420, RGB8P, YUV9, YVU9, IYU1, ARGB64, AYUV64, r210, I420_10LE, I420_10BE, I422_10LE, I422_10BE, Y444_10LE, Y444_10BE, GBR, GBR_10LE, GBR_10BE, NV12_64Z32, A420_10LE, A420_10BE, A422_10LE, A422_10BE, A444_10LE, A444_10BE }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</td>
 </tr>
 </tbody>
 </table></div>
@@ -163,30 +163,26 @@
 </tr>
 <tr>
 <td><p><span class="term"></span></p></td>
-<td> video/x-raw(ANY), format=(string){ I420, YV12, YUY2, UYVY, AYUV, RGBx, BGRx, xRGB, xBGR, RGBA, BGRA, ARGB, ABGR, RGB, BGR, Y41B, Y42B, YVYU, Y444, v210, v216, NV12, NV21, NV16, NV24, GRAY8, GRAY16_BE, GRAY16_LE, v308, RGB16, BGR16, RGB15, BGR15, UYVP, A420, RGB8P, YUV9, YVU9, IYU1, ARGB64, AYUV64, r210, I420_10LE, I420_10BE, I422_10LE, I422_10BE, Y444_10LE, Y444_10BE, GBR, GBR_10LE, GBR_10BE, NV12_64Z32 }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</td>
+<td> video/x-raw(ANY), format=(string){ I420, YV12, YUY2, UYVY, AYUV, RGBx, BGRx, xRGB, xBGR, RGBA, BGRA, ARGB, ABGR, RGB, BGR, Y41B, Y42B, YVYU, Y444, v210, v216, NV12, NV21, NV16, NV61, NV24, GRAY8, GRAY16_BE, GRAY16_LE, v308, RGB16, BGR16, RGB15, BGR15, UYVP, A420, RGB8P, YUV9, YVU9, IYU1, ARGB64, AYUV64, r210, I420_10LE, I420_10BE, I422_10LE, I422_10BE, Y444_10LE, Y444_10BE, GBR, GBR_10LE, GBR_10BE, NV12_64Z32, A420_10LE, A420_10BE, A422_10LE, A422_10BE, A444_10LE, A444_10BE }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</td>
 </tr>
 </tbody>
 </table></div>
 </div>
 </div>
-<p>
-</p>
 </div>
 <div class="refsect1">
 <a name="gst-plugins-base-plugins-textoverlay.functions_details"></a><h2>Functions</h2>
+<p></p>
 </div>
 <div class="refsect1">
 <a name="gst-plugins-base-plugins-textoverlay.other_details"></a><h2>Types and Values</h2>
 <div class="refsect2">
 <a name="GstTextOverlay-struct"></a><h3>struct GstTextOverlay</h3>
 <pre class="programlisting">struct GstTextOverlay;</pre>
-<p>
-</p>
 </div>
 </div>
 </div>
 <div class="footer">
-<hr>
-          Generated by GTK-Doc V1.21</div>
+<hr>Generated by GTK-Doc V1.24</div>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/plugins/html/gst-plugins-base-plugins-textrender.html b/docs/plugins/html/gst-plugins-base-plugins-textrender.html
index ee2526e..33697bf 100644
--- a/docs/plugins/html/gst-plugins-base-plugins-textrender.html
+++ b/docs/plugins/html/gst-plugins-base-plugins-textrender.html
@@ -2,13 +2,13 @@
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>GStreamer Base Plugins 1.0 Plugins Reference Manual: textrender</title>
+<title>textrender: GStreamer Base 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 Base Plugins 1.0 Plugins Reference Manual">
 <link rel="up" href="ch01.html" title="gst-plugins-base Elements">
 <link rel="prev" href="gst-plugins-base-plugins-textoverlay.html" title="textoverlay">
 <link rel="next" href="gst-plugins-base-plugins-theoradec.html" title="theoradec">
-<meta name="generator" content="GTK-Doc V1.21 (XML mode)">
+<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">
@@ -29,7 +29,7 @@
 <div class="refnamediv"><table width="100%"><tr>
 <td valign="top">
 <h2><span class="refentrytitle"><a name="gst-plugins-base-plugins-textrender.top_of_page"></a>textrender</span></h2>
-<p>textrender — Renders a text string to an image bitmap</p>
+<p>textrender</p>
 </td>
 <td class="gallery_image" valign="top" align="right"></td>
 </tr></table></div>
@@ -103,7 +103,7 @@
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="id-1.2.33.7.2.1"></a><h3>Element Information</h3>
+<a name="id-1.2.40.7.2.1"></a><h3>Element Information</h3>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
@@ -118,7 +118,7 @@
 </tr>
 <tr>
 <td><p><span class="term">author</span></p></td>
-<td>David Schleef &lt;ds@schleef.org&gt;, GStreamer maintainers &lt;gstreamer-devel@lists.sourceforge.net&gt;</td>
+<td>David Schleef &lt;ds@schleef.org&gt;, GStreamer maintainers &lt;gstreamer-devel@lists.freedesktop.org&gt;</td>
 </tr>
 <tr>
 <td><p><span class="term">class</span></p></td>
@@ -129,7 +129,7 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="id-1.2.33.7.2.2"></a><h3>Element Pads</h3>
+<a name="id-1.2.40.7.2.2"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
@@ -180,19 +180,16 @@
 </table></div>
 </div>
 </div>
-<p>
-</p>
 </div>
 <div class="refsect1">
 <a name="gst-plugins-base-plugins-textrender.functions_details"></a><h2>Functions</h2>
+<p></p>
 </div>
 <div class="refsect1">
 <a name="gst-plugins-base-plugins-textrender.other_details"></a><h2>Types and Values</h2>
 <div class="refsect2">
 <a name="GstTextRender-struct"></a><h3>struct GstTextRender</h3>
 <pre class="programlisting">struct GstTextRender;</pre>
-<p>
-</p>
 </div>
 </div>
 <div class="refsect1">
@@ -249,7 +246,6 @@
 </div>
 </div>
 <div class="footer">
-<hr>
-          Generated by GTK-Doc V1.21</div>
+<hr>Generated by GTK-Doc V1.24</div>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/plugins/html/gst-plugins-base-plugins-theoradec.html b/docs/plugins/html/gst-plugins-base-plugins-theoradec.html
index 85cea18..fcc941a 100644
--- a/docs/plugins/html/gst-plugins-base-plugins-theoradec.html
+++ b/docs/plugins/html/gst-plugins-base-plugins-theoradec.html
@@ -2,13 +2,13 @@
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>GStreamer Base Plugins 1.0 Plugins Reference Manual: theoradec</title>
+<title>theoradec: GStreamer Base 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 Base Plugins 1.0 Plugins Reference Manual">
 <link rel="up" href="ch01.html" title="gst-plugins-base Elements">
 <link rel="prev" href="gst-plugins-base-plugins-textrender.html" title="textrender">
 <link rel="next" href="gst-plugins-base-plugins-theoraenc.html" title="theoraenc">
-<meta name="generator" content="GTK-Doc V1.21 (XML mode)">
+<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">
@@ -28,7 +28,7 @@
 <div class="refnamediv"><table width="100%"><tr>
 <td valign="top">
 <h2><span class="refentrytitle"><a name="gst-plugins-base-plugins-theoradec.top_of_page"></a>theoradec</span></h2>
-<p>theoradec — decode raw theora streams to raw YUV video</p>
+<p>theoradec</p>
 </td>
 <td class="gallery_image" valign="top" align="right"></td>
 </tr></table></div>
@@ -60,7 +60,7 @@
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="id-1.2.34.6.2.1"></a><h3>Element Information</h3>
+<a name="id-1.2.41.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.34.6.2.2"></a><h3>Element Pads</h3>
+<a name="id-1.2.41.6.2.2"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
@@ -137,24 +137,20 @@
 </table></div>
 </div>
 </div>
-<p>
-</p>
 </div>
 <div class="refsect1">
 <a name="gst-plugins-base-plugins-theoradec.functions_details"></a><h2>Functions</h2>
+<p></p>
 </div>
 <div class="refsect1">
 <a name="gst-plugins-base-plugins-theoradec.other_details"></a><h2>Types and Values</h2>
 <div class="refsect2">
 <a name="GstTheoraDec-struct"></a><h3>struct GstTheoraDec</h3>
 <pre class="programlisting">struct GstTheoraDec;</pre>
-<p>
-</p>
 </div>
 </div>
 </div>
 <div class="footer">
-<hr>
-          Generated by GTK-Doc V1.21</div>
+<hr>Generated by GTK-Doc V1.24</div>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/plugins/html/gst-plugins-base-plugins-theoraenc.html b/docs/plugins/html/gst-plugins-base-plugins-theoraenc.html
index 64bf548..59771ee 100644
--- a/docs/plugins/html/gst-plugins-base-plugins-theoraenc.html
+++ b/docs/plugins/html/gst-plugins-base-plugins-theoraenc.html
@@ -2,13 +2,13 @@
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>GStreamer Base Plugins 1.0 Plugins Reference Manual: theoraenc</title>
+<title>theoraenc: GStreamer Base 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 Base Plugins 1.0 Plugins Reference Manual">
 <link rel="up" href="ch01.html" title="gst-plugins-base Elements">
 <link rel="prev" href="gst-plugins-base-plugins-theoradec.html" title="theoradec">
 <link rel="next" href="gst-plugins-base-plugins-theoraparse.html" title="theoraparse">
-<meta name="generator" content="GTK-Doc V1.21 (XML mode)">
+<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">
@@ -30,7 +30,7 @@
 <div class="refnamediv"><table width="100%"><tr>
 <td valign="top">
 <h2><span class="refentrytitle"><a name="gst-plugins-base-plugins-theoraenc.top_of_page"></a>theoraenc</span></h2>
-<p>theoraenc — encode raw YUV video to a theora stream</p>
+<p>theoraenc</p>
 </td>
 <td class="gallery_image" valign="top" align="right"></td>
 </tr></table></div>
@@ -85,7 +85,7 @@
 <td class="property_flags">Read / Write</td>
 </tr>
 <tr>
-<td class="property_type"><span class="type">GstTheoraEncMultipassMode</span></td>
+<td class="property_type"><a class="link" href="gst-plugins-base-plugins-theoraenc.html#GstTheoraEncMultipassMode" title="enum GstTheoraEncMultipassMode"><span class="type">GstTheoraEncMultipassMode</span></a></td>
 <td class="property_name"><a class="link" href="gst-plugins-base-plugins-theoraenc.html#GstTheoraEnc--multipass-mode" title="The “multipass-mode” property">multipass-mode</a></td>
 <td class="property_flags">Read / Write</td>
 </tr>
@@ -119,10 +119,16 @@
 <col width="150px" class="name">
 <col class="description">
 </colgroup>
-<tbody><tr>
+<tbody>
+<tr>
 <td class="datatype_keyword">struct</td>
 <td class="function_name"><a class="link" href="gst-plugins-base-plugins-theoraenc.html#GstTheoraEnc-struct" title="struct GstTheoraEnc">GstTheoraEnc</a></td>
-</tr></tbody>
+</tr>
+<tr>
+<td class="datatype_keyword">enum</td>
+<td class="function_name"><a class="link" href="gst-plugins-base-plugins-theoraenc.html#GstTheoraEncMultipassMode" title="enum GstTheoraEncMultipassMode">GstTheoraEncMultipassMode</a></td>
+</tr>
+</tbody>
 </table></div>
 </div>
 <div class="refsect1">
@@ -146,7 +152,7 @@
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="id-1.2.35.8.2.1"></a><h3>Element Information</h3>
+<a name="id-1.2.42.8.2.1"></a><h3>Element Information</h3>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
@@ -172,7 +178,7 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="id-1.2.35.8.2.2"></a><h3>Element Pads</h3>
+<a name="id-1.2.42.8.2.2"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
@@ -223,19 +229,47 @@
 </table></div>
 </div>
 </div>
-<p>
-</p>
 </div>
 <div class="refsect1">
 <a name="gst-plugins-base-plugins-theoraenc.functions_details"></a><h2>Functions</h2>
+<p></p>
 </div>
 <div class="refsect1">
 <a name="gst-plugins-base-plugins-theoraenc.other_details"></a><h2>Types and Values</h2>
 <div class="refsect2">
 <a name="GstTheoraEnc-struct"></a><h3>struct GstTheoraEnc</h3>
 <pre class="programlisting">struct GstTheoraEnc;</pre>
-<p>
-</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstTheoraEncMultipassMode"></a><h3>enum GstTheoraEncMultipassMode</h3>
+<div class="refsect3">
+<a name="id-1.2.42.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="MULTIPASS-MODE-SINGLE-PASS:CAPS"></a>MULTIPASS_MODE_SINGLE_PASS</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="MULTIPASS-MODE-FIRST-PASS:CAPS"></a>MULTIPASS_MODE_FIRST_PASS</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="MULTIPASS-MODE-SECOND-PASS:CAPS"></a>MULTIPASS_MODE_SECOND_PASS</p></td>
+<td> </td>
+<td> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
 </div>
 </div>
 <div class="refsect1">
@@ -309,7 +343,7 @@
 <hr>
 <div class="refsect2">
 <a name="GstTheoraEnc--multipass-mode"></a><h3>The <code class="literal">“multipass-mode”</code> property</h3>
-<pre class="programlisting">  “multipass-mode”           <span class="type">GstTheoraEncMultipassMode</span></pre>
+<pre class="programlisting">  “multipass-mode”           <a class="link" href="gst-plugins-base-plugins-theoraenc.html#GstTheoraEncMultipassMode" title="enum GstTheoraEncMultipassMode"><span class="type">GstTheoraEncMultipassMode</span></a></pre>
 <p>Single pass or first/second pass.</p>
 <p>Flags: Read / Write</p>
 <p>Default value: Single pass</p>
@@ -352,7 +386,6 @@
 </div>
 </div>
 <div class="footer">
-<hr>
-          Generated by GTK-Doc V1.21</div>
+<hr>Generated by GTK-Doc V1.24</div>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/plugins/html/gst-plugins-base-plugins-theoraparse.html b/docs/plugins/html/gst-plugins-base-plugins-theoraparse.html
index e2b987d..7796db8 100644
--- a/docs/plugins/html/gst-plugins-base-plugins-theoraparse.html
+++ b/docs/plugins/html/gst-plugins-base-plugins-theoraparse.html
@@ -2,13 +2,13 @@
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>GStreamer Base Plugins 1.0 Plugins Reference Manual: theoraparse</title>
+<title>theoraparse: GStreamer Base 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 Base Plugins 1.0 Plugins Reference Manual">
 <link rel="up" href="ch01.html" title="gst-plugins-base Elements">
 <link rel="prev" href="gst-plugins-base-plugins-theoraenc.html" title="theoraenc">
 <link rel="next" href="gst-plugins-base-plugins-timeoverlay.html" title="timeoverlay">
-<meta name="generator" content="GTK-Doc V1.21 (XML mode)">
+<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">
@@ -28,7 +28,7 @@
 <div class="refnamediv"><table width="100%"><tr>
 <td valign="top">
 <h2><span class="refentrytitle"><a name="gst-plugins-base-plugins-theoraparse.top_of_page"></a>theoraparse</span></h2>
-<p>theoraparse — parse raw theora streams</p>
+<p>theoraparse</p>
 </td>
 <td class="gallery_image" valign="top" align="right"></td>
 </tr></table></div>
@@ -59,7 +59,7 @@
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="id-1.2.36.6.2.1"></a><h3>Element Information</h3>
+<a name="id-1.2.43.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.36.6.2.2"></a><h3>Element Pads</h3>
+<a name="id-1.2.43.6.2.2"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
@@ -136,24 +136,20 @@
 </table></div>
 </div>
 </div>
-<p>
-</p>
 </div>
 <div class="refsect1">
 <a name="gst-plugins-base-plugins-theoraparse.functions_details"></a><h2>Functions</h2>
+<p></p>
 </div>
 <div class="refsect1">
 <a name="gst-plugins-base-plugins-theoraparse.other_details"></a><h2>Types and Values</h2>
 <div class="refsect2">
 <a name="GstTheoraParse-struct"></a><h3>struct GstTheoraParse</h3>
 <pre class="programlisting">struct GstTheoraParse;</pre>
-<p>
-</p>
 </div>
 </div>
 </div>
 <div class="footer">
-<hr>
-          Generated by GTK-Doc V1.21</div>
+<hr>Generated by GTK-Doc V1.24</div>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/plugins/html/gst-plugins-base-plugins-timeoverlay.html b/docs/plugins/html/gst-plugins-base-plugins-timeoverlay.html
index 60e9edd..7fb8a4b 100644
--- a/docs/plugins/html/gst-plugins-base-plugins-timeoverlay.html
+++ b/docs/plugins/html/gst-plugins-base-plugins-timeoverlay.html
@@ -2,13 +2,13 @@
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>GStreamer Base Plugins 1.0 Plugins Reference Manual: timeoverlay</title>
+<title>timeoverlay: GStreamer Base 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 Base Plugins 1.0 Plugins Reference Manual">
 <link rel="up" href="ch01.html" title="gst-plugins-base Elements">
 <link rel="prev" href="gst-plugins-base-plugins-theoraparse.html" title="theoraparse">
 <link rel="next" href="gst-plugins-base-plugins-uridecodebin.html" title="uridecodebin">
-<meta name="generator" content="GTK-Doc V1.21 (XML mode)">
+<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">
@@ -16,7 +16,8 @@
 <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-base-plugins-timeoverlay.description" class="shortcut">Description</a></span><span id="nav_hierarchy">  <span class="dim">|</span> 
-                  <a href="#gst-plugins-base-plugins-timeoverlay.object-hierarchy" class="shortcut">Object Hierarchy</a></span>
+                  <a href="#gst-plugins-base-plugins-timeoverlay.object-hierarchy" class="shortcut">Object Hierarchy</a></span><span id="nav_properties">  <span class="dim">|</span> 
+                  <a href="#gst-plugins-base-plugins-timeoverlay.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>
@@ -28,10 +29,25 @@
 <div class="refnamediv"><table width="100%"><tr>
 <td valign="top">
 <h2><span class="refentrytitle"><a name="gst-plugins-base-plugins-timeoverlay.top_of_page"></a>timeoverlay</span></h2>
-<p>timeoverlay — Overlays buffer time stamps on a video stream</p>
+<p>timeoverlay</p>
 </td>
 <td class="gallery_image" valign="top" align="right"></td>
 </tr></table></div>
+<div class="refsect1">
+<a name="gst-plugins-base-plugins-timeoverlay.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 class="link" href="gst-plugins-base-plugins-timeoverlay.html#GstTimeOverlayTimeLine" title="enum GstTimeOverlayTimeLine"><span class="type">GstTimeOverlayTimeLine</span></a></td>
+<td class="property_name"><a class="link" href="gst-plugins-base-plugins-timeoverlay.html#GstTimeOverlay--time-mode" title="The “time-mode” property">time-mode</a></td>
+<td class="property_flags">Read / Write</td>
+</tr></tbody>
+</table></div>
+</div>
 <a name="GstTimeOverlay"></a><div class="refsect1">
 <a name="gst-plugins-base-plugins-timeoverlay.other"></a><h2>Types and Values</h2>
 <div class="informaltable"><table width="100%" border="0">
@@ -39,10 +55,16 @@
 <col width="150px" class="name">
 <col class="description">
 </colgroup>
-<tbody><tr>
+<tbody>
+<tr>
 <td class="datatype_keyword">struct</td>
 <td class="function_name"><a class="link" href="gst-plugins-base-plugins-timeoverlay.html#GstTimeOverlay-struct" title="struct GstTimeOverlay">GstTimeOverlay</a></td>
-</tr></tbody>
+</tr>
+<tr>
+<td class="datatype_keyword">enum</td>
+<td class="function_name"><a class="link" href="gst-plugins-base-plugins-timeoverlay.html#GstTimeOverlayTimeLine" title="enum GstTimeOverlayTimeLine">GstTimeOverlayTimeLine</a></td>
+</tr>
+</tbody>
 </table></div>
 </div>
 <div class="refsect1">
@@ -60,7 +82,7 @@
 <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.44.7.2.1"></a><h3>Element Information</h3>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
@@ -86,7 +108,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.44.7.2.2"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
@@ -111,7 +133,7 @@
 </tr>
 <tr>
 <td><p><span class="term"></span></p></td>
-<td> video/x-raw(ANY), format=(string){ I420, YV12, YUY2, UYVY, AYUV, RGBx, BGRx, xRGB, xBGR, RGBA, BGRA, ARGB, ABGR, RGB, BGR, Y41B, Y42B, YVYU, Y444, v210, v216, NV12, NV21, NV16, NV24, GRAY8, GRAY16_BE, GRAY16_LE, v308, RGB16, BGR16, RGB15, BGR15, UYVP, A420, RGB8P, YUV9, YVU9, IYU1, ARGB64, AYUV64, r210, I420_10LE, I420_10BE, I422_10LE, I422_10BE, Y444_10LE, Y444_10BE, GBR, GBR_10LE, GBR_10BE, NV12_64Z32 }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</td>
+<td> video/x-raw(ANY), format=(string){ I420, YV12, YUY2, UYVY, AYUV, RGBx, BGRx, xRGB, xBGR, RGBA, BGRA, ARGB, ABGR, RGB, BGR, Y41B, Y42B, YVYU, Y444, v210, v216, NV12, NV21, NV16, NV61, NV24, GRAY8, GRAY16_BE, GRAY16_LE, v308, RGB16, BGR16, RGB15, BGR15, UYVP, A420, RGB8P, YUV9, YVU9, IYU1, ARGB64, AYUV64, r210, I420_10LE, I420_10BE, I422_10LE, I422_10BE, Y444_10LE, Y444_10BE, GBR, GBR_10LE, GBR_10BE, NV12_64Z32, A420_10LE, A420_10BE, A422_10LE, A422_10BE, A444_10LE, A444_10BE }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</td>
 </tr>
 </tbody>
 </table></div>
@@ -139,30 +161,67 @@
 </tr>
 <tr>
 <td><p><span class="term"></span></p></td>
-<td> video/x-raw(ANY), format=(string){ I420, YV12, YUY2, UYVY, AYUV, RGBx, BGRx, xRGB, xBGR, RGBA, BGRA, ARGB, ABGR, RGB, BGR, Y41B, Y42B, YVYU, Y444, v210, v216, NV12, NV21, NV16, NV24, GRAY8, GRAY16_BE, GRAY16_LE, v308, RGB16, BGR16, RGB15, BGR15, UYVP, A420, RGB8P, YUV9, YVU9, IYU1, ARGB64, AYUV64, r210, I420_10LE, I420_10BE, I422_10LE, I422_10BE, Y444_10LE, Y444_10BE, GBR, GBR_10LE, GBR_10BE, NV12_64Z32 }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</td>
+<td> video/x-raw(ANY), format=(string){ I420, YV12, YUY2, UYVY, AYUV, RGBx, BGRx, xRGB, xBGR, RGBA, BGRA, ARGB, ABGR, RGB, BGR, Y41B, Y42B, YVYU, Y444, v210, v216, NV12, NV21, NV16, NV61, NV24, GRAY8, GRAY16_BE, GRAY16_LE, v308, RGB16, BGR16, RGB15, BGR15, UYVP, A420, RGB8P, YUV9, YVU9, IYU1, ARGB64, AYUV64, r210, I420_10LE, I420_10BE, I422_10LE, I422_10BE, Y444_10LE, Y444_10BE, GBR, GBR_10LE, GBR_10BE, NV12_64Z32, A420_10LE, A420_10BE, A422_10LE, A422_10BE, A444_10LE, A444_10BE }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</td>
 </tr>
 </tbody>
 </table></div>
 </div>
 </div>
-<p>
-</p>
 </div>
 <div class="refsect1">
 <a name="gst-plugins-base-plugins-timeoverlay.functions_details"></a><h2>Functions</h2>
+<p></p>
 </div>
 <div class="refsect1">
 <a name="gst-plugins-base-plugins-timeoverlay.other_details"></a><h2>Types and Values</h2>
 <div class="refsect2">
 <a name="GstTimeOverlay-struct"></a><h3>struct GstTimeOverlay</h3>
 <pre class="programlisting">struct GstTimeOverlay;</pre>
-<p>
-</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstTimeOverlayTimeLine"></a><h3>enum GstTimeOverlayTimeLine</h3>
+<div class="refsect3">
+<a name="id-1.2.44.9.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-TIME-OVERLAY-TIME-LINE-BUFFER-TIME:CAPS"></a>GST_TIME_OVERLAY_TIME_LINE_BUFFER_TIME</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-TIME-OVERLAY-TIME-LINE-STREAM-TIME:CAPS"></a>GST_TIME_OVERLAY_TIME_LINE_STREAM_TIME</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-TIME-OVERLAY-TIME-LINE-RUNNING-TIME:CAPS"></a>GST_TIME_OVERLAY_TIME_LINE_RUNNING_TIME</p></td>
+<td> </td>
+<td> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-plugins-timeoverlay.property-details"></a><h2>Property Details</h2>
+<div class="refsect2">
+<a name="GstTimeOverlay--time-mode"></a><h3>The <code class="literal">“time-mode”</code> property</h3>
+<pre class="programlisting">  “time-mode”                <a class="link" href="gst-plugins-base-plugins-timeoverlay.html#GstTimeOverlayTimeLine" title="enum GstTimeOverlayTimeLine"><span class="type">GstTimeOverlayTimeLine</span></a></pre>
+<p>What time to show.</p>
+<p>Flags: Read / Write</p>
+<p>Default value: buffer-time</p>
 </div>
 </div>
 </div>
 <div class="footer">
-<hr>
-          Generated by GTK-Doc V1.21</div>
+<hr>Generated by GTK-Doc V1.24</div>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/plugins/html/gst-plugins-base-plugins-uridecodebin.html b/docs/plugins/html/gst-plugins-base-plugins-uridecodebin.html
index 98c1b53..284ccb0 100644
--- a/docs/plugins/html/gst-plugins-base-plugins-uridecodebin.html
+++ b/docs/plugins/html/gst-plugins-base-plugins-uridecodebin.html
@@ -2,13 +2,13 @@
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>GStreamer Base Plugins 1.0 Plugins Reference Manual: uridecodebin</title>
+<title>uridecodebin: GStreamer Base 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 Base Plugins 1.0 Plugins Reference Manual">
 <link rel="up" href="ch01.html" title="gst-plugins-base Elements">
 <link rel="prev" href="gst-plugins-base-plugins-timeoverlay.html" title="timeoverlay">
-<link rel="next" href="gst-plugins-base-plugins-videorate.html" title="videorate">
-<meta name="generator" content="GTK-Doc V1.21 (XML mode)">
+<link rel="next" href="gst-plugins-base-plugins-videoconvert.html" title="videoconvert">
+<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">
@@ -24,14 +24,14 @@
 <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-base-plugins-timeoverlay.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
-<td><a accesskey="n" href="gst-plugins-base-plugins-videorate.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
+<td><a accesskey="n" href="gst-plugins-base-plugins-videoconvert.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
 </tr></table>
 <div class="refentry">
 <a name="gst-plugins-base-plugins-uridecodebin"></a><div class="titlepage"></div>
 <div class="refnamediv"><table width="100%"><tr>
 <td valign="top">
 <h2><span class="refentrytitle"><a name="gst-plugins-base-plugins-uridecodebin.top_of_page"></a>uridecodebin</span></h2>
-<p>uridecodebin — Autoplug and decode an URI to raw media</p>
+<p>uridecodebin</p>
 </td>
 <td class="gallery_image" valign="top" align="right"></td>
 </tr></table></div>
@@ -118,44 +118,44 @@
 <tr>
 <td class="signal_type"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a></td>
 <td class="signal_name"><a class="link" href="gst-plugins-base-plugins-uridecodebin.html#GstURIDecodeBin-autoplug-continue" title="The “autoplug-continue” signal">autoplug-continue</a></td>
-<td class="signal_flags">Run Last</td>
+<td class="signal_flags"><a href="https://developer.gnome.org/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS">Run Last</a></td>
 </tr>
 <tr>
 <td class="signal_type">
 <a href="https://developer.gnome.org/gobject/unstable/gobject-Value-arrays.html#GValueArray"><span class="returnvalue">GValueArray</span></a>*</td>
 <td class="signal_name"><a class="link" href="gst-plugins-base-plugins-uridecodebin.html#GstURIDecodeBin-autoplug-factories" title="The “autoplug-factories” signal">autoplug-factories</a></td>
-<td class="signal_flags">Run Last</td>
+<td class="signal_flags"><a href="https://developer.gnome.org/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS">Run Last</a></td>
 </tr>
 <tr>
 <td class="signal_type"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a></td>
 <td class="signal_name"><a class="link" href="gst-plugins-base-plugins-uridecodebin.html#GstURIDecodeBin-autoplug-query" title="The “autoplug-query” signal">autoplug-query</a></td>
-<td class="signal_flags">Run Last</td>
+<td class="signal_flags"><a href="https://developer.gnome.org/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS">Run Last</a></td>
 </tr>
 <tr>
 <td class="signal_type"><a class="link" href="gst-plugins-base-plugins-uridecodebin.html#GstAutoplugSelectResult" title="enum GstAutoplugSelectResult"><span class="returnvalue">GstAutoplugSelectResult</span></a></td>
 <td class="signal_name"><a class="link" href="gst-plugins-base-plugins-uridecodebin.html#GstURIDecodeBin-autoplug-select" title="The “autoplug-select” signal">autoplug-select</a></td>
-<td class="signal_flags">Run Last</td>
+<td class="signal_flags"><a href="https://developer.gnome.org/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS">Run Last</a></td>
 </tr>
 <tr>
 <td class="signal_type">
 <a href="https://developer.gnome.org/gobject/unstable/gobject-Value-arrays.html#GValueArray"><span class="returnvalue">GValueArray</span></a>*</td>
 <td class="signal_name"><a class="link" href="gst-plugins-base-plugins-uridecodebin.html#GstURIDecodeBin-autoplug-sort" title="The “autoplug-sort” signal">autoplug-sort</a></td>
-<td class="signal_flags">Run Last</td>
+<td class="signal_flags"><a href="https://developer.gnome.org/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS">Run Last</a></td>
 </tr>
 <tr>
 <td class="signal_type"><span class="returnvalue">void</span></td>
 <td class="signal_name"><a class="link" href="gst-plugins-base-plugins-uridecodebin.html#GstURIDecodeBin-drained" title="The “drained” signal">drained</a></td>
-<td class="signal_flags">Run Last</td>
+<td class="signal_flags"><a href="https://developer.gnome.org/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS">Run Last</a></td>
 </tr>
 <tr>
 <td class="signal_type"><span class="returnvalue">void</span></td>
 <td class="signal_name"><a class="link" href="gst-plugins-base-plugins-uridecodebin.html#GstURIDecodeBin-source-setup" title="The “source-setup” signal">source-setup</a></td>
-<td class="signal_flags">Run Last</td>
+<td class="signal_flags"><a href="https://developer.gnome.org/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS">Run Last</a></td>
 </tr>
 <tr>
 <td class="signal_type"><span class="returnvalue">void</span></td>
 <td class="signal_name"><a class="link" href="gst-plugins-base-plugins-uridecodebin.html#GstURIDecodeBin-unknown-type" title="The “unknown-type” signal">unknown-type</a></td>
-<td class="signal_flags">Run Last</td>
+<td class="signal_flags"><a href="https://developer.gnome.org/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS">Run Last</a></td>
 </tr>
 </tbody>
 </table></div>
@@ -202,7 +202,7 @@
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="id-1.2.38.9.2.2.1"></a><h3>Element Information</h3>
+<a name="id-1.2.45.9.3.1"></a><h3>Element Information</h3>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
@@ -228,7 +228,7 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="id-1.2.38.9.2.2.2"></a><h3>Element Pads</h3>
+<a name="id-1.2.45.9.3.2"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
@@ -255,11 +255,10 @@
 </table></div>
 </div>
 </div>
-<p>
-</p>
 </div>
 <div class="refsect1">
 <a name="gst-plugins-base-plugins-uridecodebin.functions_details"></a><h2>Functions</h2>
+<p></p>
 </div>
 <div class="refsect1">
 <a name="gst-plugins-base-plugins-uridecodebin.other_details"></a><h2>Types and Values</h2>
@@ -273,7 +272,7 @@
 <a name="GstAutoplugSelectResult"></a><h3>enum GstAutoplugSelectResult</h3>
 <p>return values for the autoplug-select signal.</p>
 <div class="refsect3">
-<a name="id-1.2.38.11.3.4"></a><h4>Members</h4>
+<a name="id-1.2.45.11.3.4"></a><h4>Members</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="300px" class="enum_members_name">
@@ -416,7 +415,7 @@
   connected in.
 </div>
 <div class="refsect3">
-<a name="id-1.2.38.13.2.6"></a><h4>Parameters</h4>
+<a name="id-1.2.45.13.2.6"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -448,15 +447,14 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.38.13.2.7"></a><h4>Returns</h4>
+<a name="id-1.2.45.13.2.7"></a><h4>Returns</h4>
 <p> <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><span class="type">TRUE</span></a> if you wish uridecodebin to look for elements that can
 handle the given <em class="parameter"><code>caps</code></em>
 . If <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><span class="type">FALSE</span></a>, those caps will be considered as
 final and the pad will be exposed as such (see 'pad-added' signal of
 <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html"><span class="type">GstElement</span></a>).</p>
-<p></p>
 </div>
-<p>Flags: Run Last</p>
+<p>Flags: <a href="https://developer.gnome.org/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS">Run Last</a></p>
 </div>
 <hr>
 <div class="refsect2">
@@ -477,11 +475,11 @@
 having an unhandled type media type.</p>
 <div class="note">
   Only the signal handler that is connected first will ever by invoked.
-  Don't connect signal handlers with the <span class="type">G_CONNECT_AFTER</span> flag to this
+  Don't connect signal handlers with the <a href="https://developer.gnome.org/gobject/unstable/gobject-Signals.html#G-CONNECT-AFTER:CAPS"><span class="type">G_CONNECT_AFTER</span></a> flag to this
   signal, they will never be invoked!
 </div>
 <div class="refsect3">
-<a name="id-1.2.38.13.3.8"></a><h4>Parameters</h4>
+<a name="id-1.2.45.13.3.8"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -513,13 +511,12 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.38.13.3.9"></a><h4>Returns</h4>
+<a name="id-1.2.45.13.3.9"></a><h4>Returns</h4>
 <p> a <a href="https://developer.gnome.org/gobject/unstable/gobject-Value-arrays.html#GValueArray"><span class="type">GValueArray</span></a>* with a list of factories to try. The factories are
 by default tried in the returned order or based on the index returned by
 "autoplug-select".</p>
-<p></p>
 </div>
-<p>Flags: Run Last</p>
+<p>Flags: <a href="https://developer.gnome.org/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS">Run Last</a></p>
 </div>
 <hr>
 <div class="refsect2">
@@ -530,35 +527,7 @@
                <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html"><span class="type">GstElement</span></a>      *arg2,
                <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstQuery.html"><span class="type">GstQuery</span></a>        *arg3,
                <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a>         user_data)</pre>
-<p>
-</p>
-<div class="refsect3">
-<a name="id-1.2.38.13.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>gsturidecodebin</p></td>
-<td class="parameter_description"><p>the object which received the signal.</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 set when the signal handler was connected.</p></td>
-<td class="parameter_annotations"> </td>
-</tr>
-</tbody>
-</table></div>
-</div>
-<div class="refsect3">
-<a name="id-1.2.38.13.4.6"></a><h4>Returns</h4>
-<p></p>
-</div>
-<p>Flags: Run Last</p>
+<p>Flags: <a href="https://developer.gnome.org/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS">Run Last</a></p>
 </div>
 <hr>
 <div class="refsect2">
@@ -592,7 +561,7 @@
   registered next (again, if any) can override that decision.
 </div>
 <div class="refsect3">
-<a name="id-1.2.38.13.5.10"></a><h4>Parameters</h4>
+<a name="id-1.2.45.13.5.10"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -629,13 +598,12 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.38.13.5.11"></a><h4>Returns</h4>
+<a name="id-1.2.45.13.5.11"></a><h4>Returns</h4>
 <p> a <span class="type">GST_TYPE_AUTOPLUG_SELECT_RESULT</span> that indicates the required
 operation. The default handler will always return
 <a class="link" href="gst-plugins-base-plugins-uridecodebin.html#GST-AUTOPLUG-SELECT-TRY:CAPS"><span class="type">GST_AUTOPLUG_SELECT_TRY</span></a>.</p>
-<p></p>
 </div>
-<p>Flags: Run Last</p>
+<p>Flags: <a href="https://developer.gnome.org/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS">Run Last</a></p>
 </div>
 <hr>
 <div class="refsect2">
@@ -659,11 +627,11 @@
   Invocation of signal handlers stops after one signal handler has
   returned something else than <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><span class="type">NULL</span></a>. Signal handlers are invoked in
   the order they were connected in.
-  Don't connect signal handlers with the <span class="type">G_CONNECT_AFTER</span> flag to this
+  Don't connect signal handlers with the <a href="https://developer.gnome.org/gobject/unstable/gobject-Signals.html#G-CONNECT-AFTER:CAPS"><span class="type">G_CONNECT_AFTER</span></a> flag to this
   signal, they will never be invoked!
 </div>
 <div class="refsect3">
-<a name="id-1.2.38.13.6.7"></a><h4>Parameters</h4>
+<a name="id-1.2.45.13.6.7"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -700,12 +668,11 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.38.13.6.8"></a><h4>Returns</h4>
+<a name="id-1.2.45.13.6.8"></a><h4>Returns</h4>
 <p> A new sorted array of <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElementFactory.html"><span class="type">GstElementFactory</span></a> objects.</p>
-<p></p>
 </div>
-<p>Flags: Run Last</p>
-<p class="since">Since 0.10.33</p>
+<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.33</p>
 </div>
 <hr>
 <div class="refsect2">
@@ -715,7 +682,7 @@
                <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a>         user_data)</pre>
 <p>This signal is emitted when the data for the current uri is played.</p>
 <div class="refsect3">
-<a name="id-1.2.38.13.7.5"></a><h4>Parameters</h4>
+<a name="id-1.2.45.13.7.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -729,7 +696,7 @@
 </tr></tbody>
 </table></div>
 </div>
-<p>Flags: Run Last</p>
+<p>Flags: <a href="https://developer.gnome.org/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS">Run Last</a></p>
 </div>
 <hr>
 <div class="refsect2">
@@ -744,7 +711,7 @@
 an audio cd source). This is functionally equivalent to connecting to
 the notify::source signal, but more convenient.</p>
 <div class="refsect3">
-<a name="id-1.2.38.13.8.5"></a><h4>Parameters</h4>
+<a name="id-1.2.45.13.8.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -770,8 +737,8 @@
 </tbody>
 </table></div>
 </div>
-<p>Flags: Run Last</p>
-<p class="since">Since 0.10.33</p>
+<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.33</p>
 </div>
 <hr>
 <div class="refsect2">
@@ -784,7 +751,7 @@
 <p>This signal is emitted when a pad for which there is no further possible
 decoding is added to the uridecodebin.</p>
 <div class="refsect3">
-<a name="id-1.2.38.13.9.5"></a><h4>Parameters</h4>
+<a name="id-1.2.45.13.9.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -816,12 +783,11 @@
 </tbody>
 </table></div>
 </div>
-<p>Flags: Run Last</p>
+<p>Flags: <a href="https://developer.gnome.org/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS">Run Last</a></p>
 </div>
 </div>
 </div>
 <div class="footer">
-<hr>
-          Generated by GTK-Doc V1.21</div>
+<hr>Generated by GTK-Doc V1.24</div>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/plugins/html/gst-plugins-base-plugins-videoconvert.html b/docs/plugins/html/gst-plugins-base-plugins-videoconvert.html
index aed54fb..d49e01c 100644
--- a/docs/plugins/html/gst-plugins-base-plugins-videoconvert.html
+++ b/docs/plugins/html/gst-plugins-base-plugins-videoconvert.html
@@ -2,13 +2,13 @@
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>GStreamer Base Plugins 1.0 Plugins Reference Manual: videoconvert</title>
+<title>videoconvert: GStreamer Base 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 Base Plugins 1.0 Plugins Reference Manual">
 <link rel="up" href="ch01.html" title="gst-plugins-base Elements">
-<link rel="prev" href="gst-plugins-base-plugins-encodebin.html" title="encodebin">
-<link rel="next" href="gst-plugins-base-plugins-giosink.html" title="giosink">
-<meta name="generator" content="GTK-Doc V1.21 (XML mode)">
+<link rel="prev" href="gst-plugins-base-plugins-uridecodebin.html" title="uridecodebin">
+<link rel="next" href="gst-plugins-base-plugins-videorate.html" title="videorate">
+<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">
@@ -21,15 +21,15 @@
 </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-base-plugins-encodebin.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
-<td><a accesskey="n" href="gst-plugins-base-plugins-giosink.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
+<td><a accesskey="p" href="gst-plugins-base-plugins-uridecodebin.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
+<td><a accesskey="n" href="gst-plugins-base-plugins-videorate.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
 </tr></table>
 <div class="refentry">
 <a name="gst-plugins-base-plugins-videoconvert"></a><div class="titlepage"></div>
 <div class="refnamediv"><table width="100%"><tr>
 <td valign="top">
 <h2><span class="refentrytitle"><a name="gst-plugins-base-plugins-videoconvert.top_of_page"></a>videoconvert</span></h2>
-<p>videoconvert — Converts video from one colorspace to another</p>
+<p>videoconvert</p>
 </td>
 <td class="gallery_image" valign="top" align="right"></td>
 </tr></table></div>
@@ -41,11 +41,53 @@
 <col width="300px" class="properties_name">
 <col width="200px" class="properties_flags">
 </colgroup>
-<tbody><tr>
-<td class="property_type"><span class="type">GstVideoConvertDitherMethod</span></td>
+<tbody>
+<tr>
+<td class="property_type"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base-libs/html/gst-plugins-base-libs-GstVideoDither.html#GstVideoDitherMethod"><span class="type">GstVideoDitherMethod</span></a></td>
 <td class="property_name"><a class="link" href="gst-plugins-base-plugins-videoconvert.html#GstVideoConvert--dither" title="The “dither” property">dither</a></td>
 <td class="property_flags">Read / Write</td>
-</tr></tbody>
+</tr>
+<tr>
+<td class="property_type"><span class="type">GstVideoAlphaMode</span></td>
+<td class="property_name"><a class="link" href="gst-plugins-base-plugins-videoconvert.html#GstVideoConvert--alpha-mode" title="The “alpha-mode” property">alpha-mode</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-base-plugins-videoconvert.html#GstVideoConvert--alpha-value" title="The “alpha-value” property">alpha-value</a></td>
+<td class="property_flags">Read / Write</td>
+</tr>
+<tr>
+<td class="property_type"><span class="type">GstVideoChromaMode</span></td>
+<td class="property_name"><a class="link" href="gst-plugins-base-plugins-videoconvert.html#GstVideoConvert--chroma-mode" title="The “chroma-mode” property">chroma-mode</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/gst-plugins-base-libs/html/gst-plugins-base-libs-GstVideoResampler.html#GstVideoResamplerMethod"><span class="type">GstVideoResamplerMethod</span></a></td>
+<td class="property_name"><a class="link" href="gst-plugins-base-plugins-videoconvert.html#GstVideoConvert--chroma-resampler" title="The “chroma-resampler” property">chroma-resampler</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-base-plugins-videoconvert.html#GstVideoConvert--dither-quantization" title="The “dither-quantization” property">dither-quantization</a></td>
+<td class="property_flags">Read / Write</td>
+</tr>
+<tr>
+<td class="property_type"><span class="type">GstVideoGammaMode</span></td>
+<td class="property_name"><a class="link" href="gst-plugins-base-plugins-videoconvert.html#GstVideoConvert--gamma-mode" title="The “gamma-mode” property">gamma-mode</a></td>
+<td class="property_flags">Read / Write</td>
+</tr>
+<tr>
+<td class="property_type"><span class="type">GstVideoMatrixMode</span></td>
+<td class="property_name"><a class="link" href="gst-plugins-base-plugins-videoconvert.html#GstVideoConvert--matrix-mode" title="The “matrix-mode” property">matrix-mode</a></td>
+<td class="property_flags">Read / Write</td>
+</tr>
+<tr>
+<td class="property_type"><span class="type">GstVideoPrimariesMode</span></td>
+<td class="property_name"><a class="link" href="gst-plugins-base-plugins-videoconvert.html#GstVideoConvert--primaries-mode" title="The “primaries-mode” property">primaries-mode</a></td>
+<td class="property_flags">Read / Write</td>
+</tr>
+</tbody>
 </table></div>
 </div>
 <a name="GstVideoConvert"></a><div class="refsect1">
@@ -76,23 +118,25 @@
 <a name="gst-plugins-base-plugins-videoconvert.description"></a><h2>Description</h2>
 <p>Convert video frames between a great variety of video formats.</p>
 <div class="refsect2">
-<a name="id-1.2.15.7.3"></a><h3>Example launch line</h3>
+<a name="id-1.2.46.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> video<span class="gtkdoc opt">/</span>x<span class="gtkdoc opt">-</span>raw<span class="gtkdoc opt">,</span>format<span class="gtkdoc opt">=</span>\<span class="gtkdoc opt">(</span>string\<span class="gtkdoc opt">)</span>YUY2 <span class="gtkdoc opt">!</span> videoconvert <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> <span class="gtkdoc opt">-</span>v videotestsrc <span class="gtkdoc opt">!</span> video<span class="gtkdoc opt">/</span>x<span class="gtkdoc opt">-</span>raw<span class="gtkdoc opt">,</span>format<span class="gtkdoc opt">=</span>YUY2 <span class="gtkdoc opt">!</span> videoconvert <span class="gtkdoc opt">!</span> autovideosink</pre></td>
       </tr>
     </tbody>
   </table>
 </div>
-
+ This will output a test video (generated in YUY2 format) in a video
+window. If the video sink selected does not support YUY2 videoconvert will
+automatically convert the video to a format understood by the video sink.
 </div>
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="id-1.2.15.7.4.1"></a><h3>Element Information</h3>
+<a name="id-1.2.46.7.4.1"></a><h3>Element Information</h3>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
@@ -107,7 +151,7 @@
 </tr>
 <tr>
 <td><p><span class="term">author</span></p></td>
-<td>GStreamer maintainers &lt;gstreamer-devel@lists.sourceforge.net&gt;</td>
+<td>GStreamer maintainers &lt;gstreamer-devel@lists.freedesktop.org&gt;</td>
 </tr>
 <tr>
 <td><p><span class="term">class</span></p></td>
@@ -118,7 +162,7 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="id-1.2.15.7.4.2"></a><h3>Element Pads</h3>
+<a name="id-1.2.46.7.4.2"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
@@ -139,11 +183,11 @@
 </tr>
 <tr>
 <td><p><span class="term">details</span></p></td>
-<td>video/x-raw, format=(string){ I420, YV12, YUY2, UYVY, AYUV, RGBx, BGRx, xRGB, xBGR, RGBA, BGRA, ARGB, ABGR, RGB, BGR, Y41B, Y42B, YVYU, Y444, v210, v216, NV12, NV21, NV16, NV24, GRAY8, GRAY16_BE, GRAY16_LE, v308, RGB16, BGR16, RGB15, BGR15, UYVP, A420, RGB8P, YUV9, YVU9, IYU1, ARGB64, AYUV64, r210, I420_10LE, I420_10BE, I422_10LE, I422_10BE, Y444_10LE, Y444_10BE, GBR, GBR_10LE, GBR_10BE, NV12_64Z32 }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</td>
+<td>video/x-raw, format=(string){ I420, YV12, YUY2, UYVY, AYUV, RGBx, BGRx, xRGB, xBGR, RGBA, BGRA, ARGB, ABGR, RGB, BGR, Y41B, Y42B, YVYU, Y444, v210, v216, NV12, NV21, NV16, NV61, NV24, GRAY8, GRAY16_BE, GRAY16_LE, v308, RGB16, BGR16, RGB15, BGR15, UYVP, A420, RGB8P, YUV9, YVU9, IYU1, ARGB64, AYUV64, r210, I420_10LE, I420_10BE, I422_10LE, I422_10BE, Y444_10LE, Y444_10BE, GBR, GBR_10LE, GBR_10BE, NV12_64Z32, A420_10LE, A420_10BE, A422_10LE, A422_10BE, A444_10LE, A444_10BE }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</td>
 </tr>
 <tr>
 <td><p><span class="term"></span></p></td>
-<td> video/x-raw(ANY), format=(string){ I420, YV12, YUY2, UYVY, AYUV, RGBx, BGRx, xRGB, xBGR, RGBA, BGRA, ARGB, ABGR, RGB, BGR, Y41B, Y42B, YVYU, Y444, v210, v216, NV12, NV21, NV16, NV24, GRAY8, GRAY16_BE, GRAY16_LE, v308, RGB16, BGR16, RGB15, BGR15, UYVP, A420, RGB8P, YUV9, YVU9, IYU1, ARGB64, AYUV64, r210, I420_10LE, I420_10BE, I422_10LE, I422_10BE, Y444_10LE, Y444_10BE, GBR, GBR_10LE, GBR_10BE, NV12_64Z32 }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</td>
+<td> video/x-raw(ANY), format=(string){ I420, YV12, YUY2, UYVY, AYUV, RGBx, BGRx, xRGB, xBGR, RGBA, BGRA, ARGB, ABGR, RGB, BGR, Y41B, Y42B, YVYU, Y444, v210, v216, NV12, NV21, NV16, NV61, NV24, GRAY8, GRAY16_BE, GRAY16_LE, v308, RGB16, BGR16, RGB15, BGR15, UYVP, A420, RGB8P, YUV9, YVU9, IYU1, ARGB64, AYUV64, r210, I420_10LE, I420_10BE, I422_10LE, I422_10BE, Y444_10LE, Y444_10BE, GBR, GBR_10LE, GBR_10BE, NV12_64Z32, A420_10LE, A420_10BE, A422_10LE, A422_10BE, A444_10LE, A444_10BE }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</td>
 </tr>
 </tbody>
 </table></div>
@@ -167,21 +211,20 @@
 </tr>
 <tr>
 <td><p><span class="term">details</span></p></td>
-<td>video/x-raw, format=(string){ I420, YV12, YUY2, UYVY, AYUV, RGBx, BGRx, xRGB, xBGR, RGBA, BGRA, ARGB, ABGR, RGB, BGR, Y41B, Y42B, YVYU, Y444, v210, v216, NV12, NV21, NV16, NV24, GRAY8, GRAY16_BE, GRAY16_LE, v308, RGB16, BGR16, RGB15, BGR15, UYVP, A420, RGB8P, YUV9, YVU9, IYU1, ARGB64, AYUV64, r210, I420_10LE, I420_10BE, I422_10LE, I422_10BE, Y444_10LE, Y444_10BE, GBR, GBR_10LE, GBR_10BE, NV12_64Z32 }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</td>
+<td>video/x-raw, format=(string){ I420, YV12, YUY2, UYVY, AYUV, RGBx, BGRx, xRGB, xBGR, RGBA, BGRA, ARGB, ABGR, RGB, BGR, Y41B, Y42B, YVYU, Y444, v210, v216, NV12, NV21, NV16, NV61, NV24, GRAY8, GRAY16_BE, GRAY16_LE, v308, RGB16, BGR16, RGB15, BGR15, UYVP, A420, RGB8P, YUV9, YVU9, IYU1, ARGB64, AYUV64, r210, I420_10LE, I420_10BE, I422_10LE, I422_10BE, Y444_10LE, Y444_10BE, GBR, GBR_10LE, GBR_10BE, NV12_64Z32, A420_10LE, A420_10BE, A422_10LE, A422_10BE, A444_10LE, A444_10BE }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</td>
 </tr>
 <tr>
 <td><p><span class="term"></span></p></td>
-<td> video/x-raw(ANY), format=(string){ I420, YV12, YUY2, UYVY, AYUV, RGBx, BGRx, xRGB, xBGR, RGBA, BGRA, ARGB, ABGR, RGB, BGR, Y41B, Y42B, YVYU, Y444, v210, v216, NV12, NV21, NV16, NV24, GRAY8, GRAY16_BE, GRAY16_LE, v308, RGB16, BGR16, RGB15, BGR15, UYVP, A420, RGB8P, YUV9, YVU9, IYU1, ARGB64, AYUV64, r210, I420_10LE, I420_10BE, I422_10LE, I422_10BE, Y444_10LE, Y444_10BE, GBR, GBR_10LE, GBR_10BE, NV12_64Z32 }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</td>
+<td> video/x-raw(ANY), format=(string){ I420, YV12, YUY2, UYVY, AYUV, RGBx, BGRx, xRGB, xBGR, RGBA, BGRA, ARGB, ABGR, RGB, BGR, Y41B, Y42B, YVYU, Y444, v210, v216, NV12, NV21, NV16, NV61, NV24, GRAY8, GRAY16_BE, GRAY16_LE, v308, RGB16, BGR16, RGB15, BGR15, UYVP, A420, RGB8P, YUV9, YVU9, IYU1, ARGB64, AYUV64, r210, I420_10LE, I420_10BE, I422_10LE, I422_10BE, Y444_10LE, Y444_10BE, GBR, GBR_10LE, GBR_10BE, NV12_64Z32, A420_10LE, A420_10BE, A422_10LE, A422_10BE, A444_10LE, A444_10BE }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</td>
 </tr>
 </tbody>
 </table></div>
 </div>
 </div>
-<p>
-</p>
 </div>
 <div class="refsect1">
 <a name="gst-plugins-base-plugins-videoconvert.functions_details"></a><h2>Functions</h2>
+<p></p>
 </div>
 <div class="refsect1">
 <a name="gst-plugins-base-plugins-videoconvert.other_details"></a><h2>Types and Values</h2>
@@ -195,15 +238,79 @@
 <a name="gst-plugins-base-plugins-videoconvert.property-details"></a><h2>Property Details</h2>
 <div class="refsect2">
 <a name="GstVideoConvert--dither"></a><h3>The <code class="literal">“dither”</code> property</h3>
-<pre class="programlisting">  “dither”                   <span class="type">GstVideoConvertDitherMethod</span></pre>
+<pre class="programlisting">  “dither”                   <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base-libs/html/gst-plugins-base-libs-GstVideoDither.html#GstVideoDitherMethod"><span class="type">GstVideoDitherMethod</span></a></pre>
 <p>Apply dithering while converting.</p>
 <p>Flags: Read / Write</p>
-<p>Default value: No dithering (default)</p>
+<p>Default value: GST_VIDEO_DITHER_BAYER</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstVideoConvert--alpha-mode"></a><h3>The <code class="literal">“alpha-mode”</code> property</h3>
+<pre class="programlisting">  “alpha-mode”               <span class="type">GstVideoAlphaMode</span></pre>
+<p>Alpha Mode to use.</p>
+<p>Flags: Read / Write</p>
+<p>Default value: GST_VIDEO_ALPHA_MODE_COPY</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstVideoConvert--alpha-value"></a><h3>The <code class="literal">“alpha-value”</code> property</h3>
+<pre class="programlisting">  “alpha-value”              <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gdouble"><span class="type">gdouble</span></a></pre>
+<p>Alpha Value to use.</p>
+<p>Flags: Read / Write</p>
+<p>Allowed values: [0,1]</p>
+<p>Default value: 1</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstVideoConvert--chroma-mode"></a><h3>The <code class="literal">“chroma-mode”</code> property</h3>
+<pre class="programlisting">  “chroma-mode”              <span class="type">GstVideoChromaMode</span></pre>
+<p>Chroma Resampling Mode.</p>
+<p>Flags: Read / Write</p>
+<p>Default value: GST_VIDEO_CHROMA_MODE_FULL</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstVideoConvert--chroma-resampler"></a><h3>The <code class="literal">“chroma-resampler”</code> property</h3>
+<pre class="programlisting">  “chroma-resampler”         <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base-libs/html/gst-plugins-base-libs-GstVideoResampler.html#GstVideoResamplerMethod"><span class="type">GstVideoResamplerMethod</span></a></pre>
+<p>Chroma resampler method.</p>
+<p>Flags: Read / Write</p>
+<p>Default value: GST_VIDEO_RESAMPLER_METHOD_LINEAR</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstVideoConvert--dither-quantization"></a><h3>The <code class="literal">“dither-quantization”</code> property</h3>
+<pre class="programlisting">  “dither-quantization”      <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a></pre>
+<p>Quantizer to use.</p>
+<p>Flags: Read / Write</p>
+<p>Default value: 1</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstVideoConvert--gamma-mode"></a><h3>The <code class="literal">“gamma-mode”</code> property</h3>
+<pre class="programlisting">  “gamma-mode”               <span class="type">GstVideoGammaMode</span></pre>
+<p>Gamma Conversion Mode.</p>
+<p>Flags: Read / Write</p>
+<p>Default value: GST_VIDEO_GAMMA_MODE_NONE</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstVideoConvert--matrix-mode"></a><h3>The <code class="literal">“matrix-mode”</code> property</h3>
+<pre class="programlisting">  “matrix-mode”              <span class="type">GstVideoMatrixMode</span></pre>
+<p>Matrix Conversion Mode.</p>
+<p>Flags: Read / Write</p>
+<p>Default value: GST_VIDEO_MATRIX_MODE_FULL</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstVideoConvert--primaries-mode"></a><h3>The <code class="literal">“primaries-mode”</code> property</h3>
+<pre class="programlisting">  “primaries-mode”           <span class="type">GstVideoPrimariesMode</span></pre>
+<p>Primaries Conversion Mode.</p>
+<p>Flags: Read / Write</p>
+<p>Default value: GST_VIDEO_PRIMARIES_MODE_NONE</p>
 </div>
 </div>
 </div>
 <div class="footer">
-<hr>
-          Generated by GTK-Doc V1.21</div>
+<hr>Generated by GTK-Doc V1.24</div>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/plugins/html/gst-plugins-base-plugins-videorate.html b/docs/plugins/html/gst-plugins-base-plugins-videorate.html
index b136548..5589c4d 100644
--- a/docs/plugins/html/gst-plugins-base-plugins-videorate.html
+++ b/docs/plugins/html/gst-plugins-base-plugins-videorate.html
@@ -2,13 +2,13 @@
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>GStreamer Base Plugins 1.0 Plugins Reference Manual: videorate</title>
+<title>videorate: GStreamer Base 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 Base Plugins 1.0 Plugins Reference Manual">
 <link rel="up" href="ch01.html" title="gst-plugins-base Elements">
-<link rel="prev" href="gst-plugins-base-plugins-uridecodebin.html" title="uridecodebin">
+<link rel="prev" href="gst-plugins-base-plugins-videoconvert.html" title="videoconvert">
 <link rel="next" href="gst-plugins-base-plugins-videoscale.html" title="videoscale">
-<meta name="generator" content="GTK-Doc V1.21 (XML mode)">
+<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">
@@ -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-base-plugins-uridecodebin.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
+<td><a accesskey="p" href="gst-plugins-base-plugins-videoconvert.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
 <td><a accesskey="n" href="gst-plugins-base-plugins-videoscale.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
 </tr></table>
 <div class="refentry">
@@ -29,7 +29,7 @@
 <div class="refnamediv"><table width="100%"><tr>
 <td valign="top">
 <h2><span class="refentrytitle"><a name="gst-plugins-base-plugins-videorate.top_of_page"></a>videorate</span></h2>
-<p>videorate — Drops/duplicates/adjusts timestamps on video frames to make a perfect stream</p>
+<p>videorate</p>
 </td>
 <td class="gallery_image" valign="top" align="right"></td>
 </tr></table></div>
@@ -145,36 +145,47 @@
 Note that property notification will happen from the streaming thread, so
 applications should be prepared for this.</p>
 <div class="refsect2">
-<a name="id-1.2.39.7.10"></a><h3>Example pipelines</h3>
+<a name="id-1.2.47.7.10"></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</pre></td>
-        <td class="listing_code"><pre class="programlisting">gst<span class="gtkdoc opt">-</span>launch <span class="gtkdoc opt">-</span>v filesrc location<span class="gtkdoc opt">=</span>videotestsrc<span class="gtkdoc opt">.</span>ogg <span class="gtkdoc opt">!</span> oggdemux <span class="gtkdoc opt">!</span> theoradec <span class="gtkdoc opt">!</span> videorate <span class="gtkdoc opt">!</span> video<span class="gtkdoc opt">/</span>x<span class="gtkdoc opt">-</span>raw<span class="gtkdoc opt">,</span>framerate<span class="gtkdoc opt">=</span><span class="number">15</span><span class="gtkdoc opt">/</span><span class="number">1</span> <span class="gtkdoc opt">!</span> xvimagesink</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 uridecodebin uri<span class="gtkdoc opt">=</span>file<span class="gtkdoc opt">:</span><span class="gtkdoc slc">///path/to/video.ogg ! videoconvert ! videoscale ! videorate ! video/x-raw,framerate=15/1 ! autovideosink</span></pre></td>
       </tr>
     </tbody>
   </table>
 </div>
- Decode an Ogg/Theora file and adjust the framerate to 15 fps before playing.
-To create the test Ogg/Theora file refer to the documentation of theoraenc.
+ Decode a video file and adjust the framerate to 15 fps before playing.
+To create a test Ogg/Theora file refer to the documentation of theoraenc.
 <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 v4l2src <span class="gtkdoc opt">!</span> videorate <span class="gtkdoc opt">!</span> video<span class="gtkdoc opt">/</span>x<span class="gtkdoc opt">-</span>raw<span class="gtkdoc opt">,</span>framerate<span class="gtkdoc opt">=</span><span class="number">25</span><span class="gtkdoc opt">/</span><span class="number">2</span> <span class="gtkdoc opt">!</span> theoraenc <span class="gtkdoc opt">!</span> oggmux <span class="gtkdoc opt">!</span> filesink location<span class="gtkdoc opt">=</span>recording<span class="gtkdoc opt">.</span>ogg</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 v4l2src <span class="gtkdoc opt">!</span> videorate <span class="gtkdoc opt">!</span> video<span class="gtkdoc opt">/</span>x<span class="gtkdoc opt">-</span>raw<span class="gtkdoc opt">,</span>framerate<span class="gtkdoc opt">=</span><span class="number">25</span><span class="gtkdoc opt">/</span><span class="number">2</span> <span class="gtkdoc opt">!</span> theoraenc <span class="gtkdoc opt">!</span> oggmux <span class="gtkdoc opt">!</span> filesink location<span class="gtkdoc opt">=</span>recording<span class="gtkdoc opt">.</span>ogg</pre></td>
       </tr>
     </tbody>
   </table>
 </div>
  Capture video from a V4L device, and adjust the stream to 12.5 fps before
 encoding to Ogg/Theora.
+<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 uridecodebin uri<span class="gtkdoc opt">=</span>file<span class="gtkdoc opt">:</span><span class="gtkdoc slc">///path/to/video.ogg ! videoconvert ! videoscale ! videorate ! video/x-raw,framerate=1/5 ! jpegenc ! multifilesink location=snapshot-%05d.jpg</span></pre></td>
+      </tr>
+    </tbody>
+  </table>
+</div>
+ Decode a video file and save a snapshot every 5 seconds as consecutively numbered jpeg file.
 </div>
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="id-1.2.39.7.11.1"></a><h3>Element Information</h3>
+<a name="id-1.2.47.7.11.1"></a><h3>Element Information</h3>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
@@ -200,7 +211,7 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="id-1.2.39.7.11.2"></a><h3>Element Pads</h3>
+<a name="id-1.2.47.7.11.2"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
@@ -221,15 +232,19 @@
 </tr>
 <tr>
 <td><p><span class="term">details</span></p></td>
-<td>video/x-raw</td>
+<td>video/x-raw(ANY)</td>
 </tr>
 <tr>
 <td><p><span class="term"></span></p></td>
-<td> image/jpeg</td>
+<td> video/x-bayer(ANY)</td>
 </tr>
 <tr>
 <td><p><span class="term"></span></p></td>
-<td> image/png</td>
+<td> image/jpeg(ANY)</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> image/png(ANY)</td>
 </tr>
 </tbody>
 </table></div>
@@ -253,25 +268,28 @@
 </tr>
 <tr>
 <td><p><span class="term">details</span></p></td>
-<td>video/x-raw</td>
+<td>video/x-raw(ANY)</td>
 </tr>
 <tr>
 <td><p><span class="term"></span></p></td>
-<td> image/jpeg</td>
+<td> video/x-bayer(ANY)</td>
 </tr>
 <tr>
 <td><p><span class="term"></span></p></td>
-<td> image/png</td>
+<td> image/jpeg(ANY)</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> image/png(ANY)</td>
 </tr>
 </tbody>
 </table></div>
 </div>
 </div>
-<p>
-</p>
 </div>
 <div class="refsect1">
 <a name="gst-plugins-base-plugins-videorate.functions_details"></a><h2>Functions</h2>
+<p></p>
 </div>
 <div class="refsect1">
 <a name="gst-plugins-base-plugins-videorate.other_details"></a><h2>Types and Values</h2>
@@ -370,7 +388,6 @@
 </div>
 </div>
 <div class="footer">
-<hr>
-          Generated by GTK-Doc V1.21</div>
+<hr>Generated by GTK-Doc V1.24</div>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/plugins/html/gst-plugins-base-plugins-videoscale.html b/docs/plugins/html/gst-plugins-base-plugins-videoscale.html
index 54077d9..6393016 100644
--- a/docs/plugins/html/gst-plugins-base-plugins-videoscale.html
+++ b/docs/plugins/html/gst-plugins-base-plugins-videoscale.html
@@ -2,13 +2,13 @@
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>GStreamer Base Plugins 1.0 Plugins Reference Manual: videoscale</title>
+<title>videoscale: GStreamer Base 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 Base Plugins 1.0 Plugins Reference Manual">
 <link rel="up" href="ch01.html" title="gst-plugins-base Elements">
 <link rel="prev" href="gst-plugins-base-plugins-videorate.html" title="videorate">
 <link rel="next" href="gst-plugins-base-plugins-videotestsrc.html" title="videotestsrc">
-<meta name="generator" content="GTK-Doc V1.21 (XML mode)">
+<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">
@@ -29,7 +29,7 @@
 <div class="refnamediv"><table width="100%"><tr>
 <td valign="top">
 <h2><span class="refentrytitle"><a name="gst-plugins-base-plugins-videoscale.top_of_page"></a>videoscale</span></h2>
-<p>videoscale — Resizes video</p>
+<p>videoscale</p>
 </td>
 <td class="gallery_image" valign="top" align="right"></td>
 </tr></table></div>
@@ -72,6 +72,11 @@
 <td class="property_name"><a class="link" href="gst-plugins-base-plugins-videoscale.html#GstVideoScale--sharpness" title="The “sharpness” property">sharpness</a></td>
 <td class="property_flags">Read / Write / Construct</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-base-plugins-videoscale.html#GstVideoScale--gamma-decode" title="The “gamma-decode” property">gamma-decode</a></td>
+<td class="property_flags">Read / Write / Construct</td>
+</tr>
 </tbody>
 </table></div>
 </div>
@@ -115,38 +120,37 @@
 RGB formats and is therefore generally able to operate anywhere in a
 pipeline.</p>
 <div class="refsect2">
-<a name="id-1.2.40.7.4"></a><h3>Example pipelines</h3>
+<a name="id-1.2.48.7.4"></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</pre></td>
-        <td class="listing_code"><pre class="programlisting">gst<span class="gtkdoc opt">-</span>launch <span class="gtkdoc opt">-</span>v filesrc location<span class="gtkdoc opt">=</span>videotestsrc<span class="gtkdoc opt">.</span>ogg <span class="gtkdoc opt">!</span> oggdemux <span class="gtkdoc opt">!</span> theoradec <span class="gtkdoc opt">!</span> videoconvert <span class="gtkdoc opt">!</span> videoscale <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> <span class="gtkdoc opt">-</span>v filesrc location<span class="gtkdoc opt">=</span>videotestsrc<span class="gtkdoc opt">.</span>ogg <span class="gtkdoc opt">!</span> oggdemux <span class="gtkdoc opt">!</span> theoradec <span class="gtkdoc opt">!</span> videoconvert <span class="gtkdoc opt">!</span> videoscale <span class="gtkdoc opt">!</span> autovideosink</pre></td>
       </tr>
     </tbody>
   </table>
 </div>
- Decode an Ogg/Theora and display the video using ximagesink. Since
-ximagesink cannot perform scaling, the video scaling will be performed by
-videoscale when you resize the video window.
+ Decode an Ogg/Theora and display the video. If the video sink chosen
+cannot perform scaling, the video scaling will be performed by videoscale
+when you resize the video window.
 To create the test Ogg/Theora file refer to the documentation of theoraenc.
 <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 filesrc location<span class="gtkdoc opt">=</span>videotestsrc<span class="gtkdoc opt">.</span>ogg <span class="gtkdoc opt">!</span> oggdemux <span class="gtkdoc opt">!</span> theoradec <span class="gtkdoc opt">!</span> videoscale <span class="gtkdoc opt">!</span> video<span class="gtkdoc opt">/</span>x<span class="gtkdoc opt">-</span>raw<span class="gtkdoc opt">,</span> width<span class="gtkdoc opt">=</span><span class="number">50</span> <span class="gtkdoc opt">!</span> xvimagesink</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 filesrc location<span class="gtkdoc opt">=</span>videotestsrc<span class="gtkdoc opt">.</span>ogg <span class="gtkdoc opt">!</span> oggdemux <span class="gtkdoc opt">!</span> theoradec <span class="gtkdoc opt">!</span> videoconvert <span class="gtkdoc opt">!</span> videoscale <span class="gtkdoc opt">!</span> video<span class="gtkdoc opt">/</span>x<span class="gtkdoc opt">-</span>raw<span class="gtkdoc opt">,</span>width<span class="gtkdoc opt">=</span><span class="number">100</span> <span class="gtkdoc opt">!</span> autovideosink</pre></td>
       </tr>
     </tbody>
   </table>
 </div>
- Decode an Ogg/Theora and display the video using xvimagesink with a width
-of 50.
+ Decode an Ogg/Theora and display the video with a width of 100.
 </div>
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="id-1.2.40.7.5.1"></a><h3>Element Information</h3>
+<a name="id-1.2.48.7.5.1"></a><h3>Element Information</h3>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
@@ -161,7 +165,7 @@
 </tr>
 <tr>
 <td><p><span class="term">author</span></p></td>
-<td>Wim Taymans &lt;wim.taymans@chello.be&gt;</td>
+<td>Wim Taymans &lt;wim.taymans@gmail.com&gt;</td>
 </tr>
 <tr>
 <td><p><span class="term">class</span></p></td>
@@ -172,7 +176,7 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="id-1.2.40.7.5.2"></a><h3>Element Pads</h3>
+<a name="id-1.2.48.7.5.2"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
@@ -193,11 +197,11 @@
 </tr>
 <tr>
 <td><p><span class="term">details</span></p></td>
-<td>video/x-raw, format=(string){ I420, YV12, YUY2, UYVY, AYUV, RGBx, BGRx, xRGB, xBGR, RGBA, BGRA, ARGB, ABGR, RGB, BGR, Y41B, Y42B, YVYU, Y444, GRAY8, GRAY16_BE, GRAY16_LE, v308, RGB16, RGB15, ARGB64, AYUV64, NV12 }, width=(int)[ 1, 32767 ], height=(int)[ 1, 32767 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</td>
+<td>video/x-raw, format=(string){ I420, YV12, YUY2, UYVY, AYUV, RGBx, BGRx, xRGB, xBGR, RGBA, BGRA, ARGB, ABGR, RGB, BGR, Y41B, Y42B, YVYU, Y444, v210, v216, NV12, NV21, NV16, NV61, NV24, GRAY8, GRAY16_BE, GRAY16_LE, v308, RGB16, BGR16, RGB15, BGR15, UYVP, A420, RGB8P, YUV9, YVU9, IYU1, ARGB64, AYUV64, r210, I420_10LE, I420_10BE, I422_10LE, I422_10BE, Y444_10LE, Y444_10BE, GBR, GBR_10LE, GBR_10BE, NV12_64Z32, A420_10LE, A420_10BE, A422_10LE, A422_10BE, A444_10LE, A444_10BE }, width=(int)[ 1, 32767 ], height=(int)[ 1, 32767 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</td>
 </tr>
 <tr>
 <td><p><span class="term"></span></p></td>
-<td> video/x-raw(ANY), format=(string){ I420, YV12, YUY2, UYVY, AYUV, RGBx, BGRx, xRGB, xBGR, RGBA, BGRA, ARGB, ABGR, RGB, BGR, Y41B, Y42B, YVYU, Y444, GRAY8, GRAY16_BE, GRAY16_LE, v308, RGB16, RGB15, ARGB64, AYUV64, NV12 }, width=(int)[ 1, 32767 ], height=(int)[ 1, 32767 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</td>
+<td> video/x-raw(ANY), format=(string){ I420, YV12, YUY2, UYVY, AYUV, RGBx, BGRx, xRGB, xBGR, RGBA, BGRA, ARGB, ABGR, RGB, BGR, Y41B, Y42B, YVYU, Y444, v210, v216, NV12, NV21, NV16, NV61, NV24, GRAY8, GRAY16_BE, GRAY16_LE, v308, RGB16, BGR16, RGB15, BGR15, UYVP, A420, RGB8P, YUV9, YVU9, IYU1, ARGB64, AYUV64, r210, I420_10LE, I420_10BE, I422_10LE, I422_10BE, Y444_10LE, Y444_10BE, GBR, GBR_10LE, GBR_10BE, NV12_64Z32, A420_10LE, A420_10BE, A422_10LE, A422_10BE, A444_10LE, A444_10BE }, width=(int)[ 1, 32767 ], height=(int)[ 1, 32767 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</td>
 </tr>
 </tbody>
 </table></div>
@@ -221,21 +225,20 @@
 </tr>
 <tr>
 <td><p><span class="term">details</span></p></td>
-<td>video/x-raw, format=(string){ I420, YV12, YUY2, UYVY, AYUV, RGBx, BGRx, xRGB, xBGR, RGBA, BGRA, ARGB, ABGR, RGB, BGR, Y41B, Y42B, YVYU, Y444, GRAY8, GRAY16_BE, GRAY16_LE, v308, RGB16, RGB15, ARGB64, AYUV64, NV12 }, width=(int)[ 1, 32767 ], height=(int)[ 1, 32767 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</td>
+<td>video/x-raw, format=(string){ I420, YV12, YUY2, UYVY, AYUV, RGBx, BGRx, xRGB, xBGR, RGBA, BGRA, ARGB, ABGR, RGB, BGR, Y41B, Y42B, YVYU, Y444, v210, v216, NV12, NV21, NV16, NV61, NV24, GRAY8, GRAY16_BE, GRAY16_LE, v308, RGB16, BGR16, RGB15, BGR15, UYVP, A420, RGB8P, YUV9, YVU9, IYU1, ARGB64, AYUV64, r210, I420_10LE, I420_10BE, I422_10LE, I422_10BE, Y444_10LE, Y444_10BE, GBR, GBR_10LE, GBR_10BE, NV12_64Z32, A420_10LE, A420_10BE, A422_10LE, A422_10BE, A444_10LE, A444_10BE }, width=(int)[ 1, 32767 ], height=(int)[ 1, 32767 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</td>
 </tr>
 <tr>
 <td><p><span class="term"></span></p></td>
-<td> video/x-raw(ANY), format=(string){ I420, YV12, YUY2, UYVY, AYUV, RGBx, BGRx, xRGB, xBGR, RGBA, BGRA, ARGB, ABGR, RGB, BGR, Y41B, Y42B, YVYU, Y444, GRAY8, GRAY16_BE, GRAY16_LE, v308, RGB16, RGB15, ARGB64, AYUV64, NV12 }, width=(int)[ 1, 32767 ], height=(int)[ 1, 32767 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</td>
+<td> video/x-raw(ANY), format=(string){ I420, YV12, YUY2, UYVY, AYUV, RGBx, BGRx, xRGB, xBGR, RGBA, BGRA, ARGB, ABGR, RGB, BGR, Y41B, Y42B, YVYU, Y444, v210, v216, NV12, NV21, NV16, NV61, NV24, GRAY8, GRAY16_BE, GRAY16_LE, v308, RGB16, BGR16, RGB15, BGR15, UYVP, A420, RGB8P, YUV9, YVU9, IYU1, ARGB64, AYUV64, r210, I420_10LE, I420_10BE, I422_10LE, I422_10BE, Y444_10LE, Y444_10BE, GBR, GBR_10LE, GBR_10BE, NV12_64Z32, A420_10LE, A420_10BE, A422_10LE, A422_10BE, A444_10LE, A444_10BE }, width=(int)[ 1, 32767 ], height=(int)[ 1, 32767 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</td>
 </tr>
 </tbody>
 </table></div>
 </div>
 </div>
-<p>
-</p>
 </div>
 <div class="refsect1">
 <a name="gst-plugins-base-plugins-videoscale.functions_details"></a><h2>Functions</h2>
+<p></p>
 </div>
 <div class="refsect1">
 <a name="gst-plugins-base-plugins-videoscale.other_details"></a><h2>Types and Values</h2>
@@ -249,7 +252,7 @@
 <a name="GstVideoScaleMethod"></a><h3>enum GstVideoScaleMethod</h3>
 <p>The videoscale method to use.</p>
 <div class="refsect3">
-<a name="id-1.2.40.9.3.4"></a><h4>Members</h4>
+<a name="id-1.2.48.9.3.4"></a><h4>Members</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="300px" class="enum_members_name">
@@ -267,14 +270,14 @@
 <tr>
 <td class="enum_member_name"><p><a name="GST-VIDEO-SCALE-BILINEAR:CAPS"></a>GST_VIDEO_SCALE_BILINEAR</p></td>
 <td class="enum_member_description">
-<p>use bilinear scaling (slower but prettier).</p>
+<p>use 2-tap bilinear scaling (slower but prettier).</p>
 </td>
 <td class="enum_member_annotations"> </td>
 </tr>
 <tr>
 <td class="enum_member_name"><p><a name="GST-VIDEO-SCALE-4TAP:CAPS"></a>GST_VIDEO_SCALE_4TAP</p></td>
 <td class="enum_member_description">
-<p>use a 4-tap filter for scaling (slow).</p>
+<p>use a 4-tap sinc filter for scaling (slow).</p>
 </td>
 <td class="enum_member_annotations"> </td>
 </tr>
@@ -285,6 +288,48 @@
 </td>
 <td class="enum_member_annotations"> </td>
 </tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-VIDEO-SCALE-BILINEAR2:CAPS"></a>GST_VIDEO_SCALE_BILINEAR2</p></td>
+<td class="enum_member_description">
+<p>use a multitap bilinear filter</p>
+</td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-VIDEO-SCALE-SINC:CAPS"></a>GST_VIDEO_SCALE_SINC</p></td>
+<td class="enum_member_description">
+<p>use a multitap sinc filter</p>
+</td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-VIDEO-SCALE-HERMITE:CAPS"></a>GST_VIDEO_SCALE_HERMITE</p></td>
+<td class="enum_member_description">
+<p>use a multitap bicubic Hermite filter</p>
+</td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-VIDEO-SCALE-SPLINE:CAPS"></a>GST_VIDEO_SCALE_SPLINE</p></td>
+<td class="enum_member_description">
+<p>use a multitap bicubic spline filter</p>
+</td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-VIDEO-SCALE-CATROM:CAPS"></a>GST_VIDEO_SCALE_CATROM</p></td>
+<td class="enum_member_description">
+<p>use a multitap bicubic Catmull-Rom filter</p>
+</td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-VIDEO-SCALE-MITCHELL:CAPS"></a>GST_VIDEO_SCALE_MITCHELL</p></td>
+<td class="enum_member_description">
+<p>use a multitap bicubic Mitchell filter</p>
+</td>
+<td class="enum_member_annotations"> </td>
+</tr>
 </tbody>
 </table></div>
 </div>
@@ -322,7 +367,7 @@
 <pre class="programlisting">  “method”                   <a class="link" href="gst-plugins-base-plugins-videoscale.html#GstVideoScaleMethod" title="enum GstVideoScaleMethod"><span class="type">GstVideoScaleMethod</span></a></pre>
 <p>method.</p>
 <p>Flags: Read / Write</p>
-<p>Default value: Bilinear</p>
+<p>Default value: Bilinear (2-tap)</p>
 </div>
 <hr>
 <div class="refsect2">
@@ -342,6 +387,14 @@
 <p>Allowed values: [0.5,1.5]</p>
 <p>Default value: 1</p>
 </div>
+<hr>
+<div class="refsect2">
+<a name="GstVideoScale--gamma-decode"></a><h3>The <code class="literal">“gamma-decode”</code> property</h3>
+<pre class="programlisting">  “gamma-decode”             <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a></pre>
+<p>Decode gamma before scaling.</p>
+<p>Flags: Read / Write / Construct</p>
+<p>Default value: FALSE</p>
+</div>
 </div>
 <div class="refsect1">
 <a name="gst-plugins-base-plugins-videoscale.see-also"></a><h2>See Also</h2>
@@ -349,7 +402,6 @@
 </div>
 </div>
 <div class="footer">
-<hr>
-          Generated by GTK-Doc V1.21</div>
+<hr>Generated by GTK-Doc V1.24</div>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/plugins/html/gst-plugins-base-plugins-videotestsrc.html b/docs/plugins/html/gst-plugins-base-plugins-videotestsrc.html
index 0055603..df1b8eb 100644
--- a/docs/plugins/html/gst-plugins-base-plugins-videotestsrc.html
+++ b/docs/plugins/html/gst-plugins-base-plugins-videotestsrc.html
@@ -2,13 +2,13 @@
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>GStreamer Base Plugins 1.0 Plugins Reference Manual: videotestsrc</title>
+<title>videotestsrc: GStreamer Base 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 Base Plugins 1.0 Plugins Reference Manual">
 <link rel="up" href="ch01.html" title="gst-plugins-base Elements">
 <link rel="prev" href="gst-plugins-base-plugins-videoscale.html" title="videoscale">
 <link rel="next" href="gst-plugins-base-plugins-volume.html" title="volume">
-<meta name="generator" content="GTK-Doc V1.21 (XML mode)">
+<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">
@@ -29,7 +29,7 @@
 <div class="refnamediv"><table width="100%"><tr>
 <td valign="top">
 <h2><span class="refentrytitle"><a name="gst-plugins-base-plugins-videotestsrc.top_of_page"></a>videotestsrc</span></h2>
-<p>videotestsrc — Creates a test video stream</p>
+<p>videotestsrc</p>
 </td>
 <td class="gallery_image" valign="top" align="right"></td>
 </tr></table></div>
@@ -171,23 +171,23 @@
 of formats. The video test data produced can be controlled with the "pattern"
 property.</p>
 <div class="refsect2">
-<a name="id-1.2.41.7.3"></a><h3>Example launch line</h3>
+<a name="id-1.2.49.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 pattern<span class="gtkdoc opt">=</span>snow <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> <span class="gtkdoc opt">-</span>v videotestsrc pattern<span class="gtkdoc opt">=</span>snow <span class="gtkdoc opt">!</span> video<span class="gtkdoc opt">/</span>x<span class="gtkdoc opt">-</span>raw<span class="gtkdoc opt">,</span>width<span class="gtkdoc opt">=</span><span class="number">1280</span><span class="gtkdoc opt">,</span>height<span class="gtkdoc opt">=</span><span class="number">720</span> <span class="gtkdoc opt">!</span> autovideosink</pre></td>
       </tr>
     </tbody>
   </table>
 </div>
- Shows random noise in an X window.
+ Shows random noise in a video window.
 </div>
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="id-1.2.41.7.4.1"></a><h3>Element Information</h3>
+<a name="id-1.2.49.7.4.1"></a><h3>Element Information</h3>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
@@ -213,7 +213,7 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="id-1.2.41.7.4.2"></a><h3>Element Pads</h3>
+<a name="id-1.2.49.7.4.2"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
@@ -234,7 +234,7 @@
 </tr>
 <tr>
 <td><p><span class="term">details</span></p></td>
-<td>video/x-raw, format=(string){ I420, YV12, YUY2, UYVY, AYUV, RGBx, BGRx, xRGB, xBGR, RGBA, BGRA, ARGB, ABGR, RGB, BGR, Y41B, Y42B, YVYU, Y444, v210, v216, NV12, NV21, NV16, NV24, GRAY8, GRAY16_BE, GRAY16_LE, v308, RGB16, BGR16, RGB15, BGR15, UYVP, A420, RGB8P, YUV9, YVU9, IYU1, ARGB64, AYUV64, r210, I420_10LE, I420_10BE, I422_10LE, I422_10BE, Y444_10LE, Y444_10BE, GBR, GBR_10LE, GBR_10BE, NV12_64Z32 }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</td>
+<td>video/x-raw, format=(string){ I420, YV12, YUY2, UYVY, AYUV, RGBx, BGRx, xRGB, xBGR, RGBA, BGRA, ARGB, ABGR, RGB, BGR, Y41B, Y42B, YVYU, Y444, v210, v216, NV12, NV21, NV16, NV61, NV24, GRAY8, GRAY16_BE, GRAY16_LE, v308, RGB16, BGR16, RGB15, BGR15, UYVP, A420, RGB8P, YUV9, YVU9, IYU1, ARGB64, AYUV64, r210, I420_10LE, I420_10BE, I422_10LE, I422_10BE, Y444_10LE, Y444_10BE, GBR, GBR_10LE, GBR_10BE, NV12_64Z32, A420_10LE, A420_10BE, A422_10LE, A422_10BE, A444_10LE, A444_10BE }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</td>
 </tr>
 <tr>
 <td><p><span class="term"></span></p></td>
@@ -244,11 +244,10 @@
 </table></div>
 </div>
 </div>
-<p>
-</p>
 </div>
 <div class="refsect1">
 <a name="gst-plugins-base-plugins-videotestsrc.functions_details"></a><h2>Functions</h2>
+<p></p>
 </div>
 <div class="refsect1">
 <a name="gst-plugins-base-plugins-videotestsrc.other_details"></a><h2>Types and Values</h2>
@@ -277,7 +276,7 @@
 pattern=zone-plate kx2=20 ky2=20 kt=1' to produce something
 interesting.</p>
 <div class="refsect3">
-<a name="id-1.2.41.9.3.6"></a><h4>Members</h4>
+<a name="id-1.2.49.9.3.6"></a><h4>Members</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="300px" class="enum_members_name">
@@ -406,7 +405,10 @@
 </tr>
 <tr>
 <td class="enum_member_name"><p><a name="GST-VIDEO-TEST-SRC-SOLID:CAPS"></a>GST_VIDEO_TEST_SRC_SOLID</p></td>
-<td class="enum_member_description"> </td>
+<td class="enum_member_description">
+<p>A solid color, defined by the
+<a class="link" href="gst-plugins-base-plugins-videotestsrc.html#GstVideoTestSrc--foreground-color" title="The “foreground-color” property"><span class="type">“foreground-color”</span></a> property</p>
+</td>
 <td class="enum_member_annotations"> </td>
 </tr>
 <tr>
@@ -444,6 +446,20 @@
 </td>
 <td class="enum_member_annotations"> </td>
 </tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-VIDEO-TEST-SRC-GRADIENT:CAPS"></a>GST_VIDEO_TEST_SRC_GRADIENT</p></td>
+<td class="enum_member_description">
+<p>Gradient</p>
+</td>
+<td class="enum_member_annotations"> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-VIDEO-TEST-SRC-COLORS:CAPS"></a>GST_VIDEO_TEST_SRC_COLORS</p></td>
+<td class="enum_member_description">
+<p>All colors</p>
+</td>
+<td class="enum_member_annotations"> </td>
+</tr>
 </tbody>
 </table></div>
 </div>
@@ -578,6 +594,7 @@
 <pre class="programlisting">  “timestamp-offset”         <span class="type">gint64</span></pre>
 <p>An offset added to timestamps set on buffers (in ns).</p>
 <p>Flags: Read / Write</p>
+<p>Allowed values: &gt;= 0</p>
 <p>Default value: 0</p>
 </div>
 <hr>
@@ -599,7 +616,6 @@
 </div>
 </div>
 <div class="footer">
-<hr>
-          Generated by GTK-Doc V1.21</div>
+<hr>Generated by GTK-Doc V1.24</div>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/plugins/html/gst-plugins-base-plugins-volume.html b/docs/plugins/html/gst-plugins-base-plugins-volume.html
index a7292bb..8d2d24f 100644
--- a/docs/plugins/html/gst-plugins-base-plugins-volume.html
+++ b/docs/plugins/html/gst-plugins-base-plugins-volume.html
@@ -2,13 +2,13 @@
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>GStreamer Base Plugins 1.0 Plugins Reference Manual: volume</title>
+<title>volume: GStreamer Base 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 Base Plugins 1.0 Plugins Reference Manual">
 <link rel="up" href="ch01.html" title="gst-plugins-base Elements">
 <link rel="prev" href="gst-plugins-base-plugins-videotestsrc.html" title="videotestsrc">
 <link rel="next" href="gst-plugins-base-plugins-vorbisdec.html" title="vorbisdec">
-<meta name="generator" content="GTK-Doc V1.21 (XML mode)">
+<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">
@@ -30,7 +30,7 @@
 <div class="refnamediv"><table width="100%"><tr>
 <td valign="top">
 <h2><span class="refentrytitle"><a name="gst-plugins-base-plugins-volume.top_of_page"></a>volume</span></h2>
-<p>volume — Set volume on audio/raw streams</p>
+<p>volume</p>
 </td>
 <td class="gallery_image" valign="top" align="right"></td>
 </tr></table></div>
@@ -90,13 +90,13 @@
 <a name="gst-plugins-base-plugins-volume.description"></a><h2>Description</h2>
 <p>The volume element changes the volume of the audio data.</p>
 <div class="refsect2">
-<a name="id-1.2.42.8.3"></a><h3>Example launch line</h3>
+<a name="id-1.2.50.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>v <span class="gtkdoc opt">-</span>m audiotestsrc <span class="gtkdoc opt">!</span> volume volume<span class="gtkdoc opt">=</span><span class="number">0.5</span> <span class="gtkdoc opt">!</span> level <span class="gtkdoc opt">!</span> fakesink silent<span class="gtkdoc opt">=</span>TRUE</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 <span class="gtkdoc opt">-</span>m audiotestsrc <span class="gtkdoc opt">!</span> volume volume<span class="gtkdoc opt">=</span><span class="number">0.5</span> <span class="gtkdoc opt">!</span> level <span class="gtkdoc opt">!</span> fakesink silent<span class="gtkdoc opt">=</span>TRUE</pre></td>
       </tr>
     </tbody>
   </table>
@@ -108,7 +108,7 @@
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="id-1.2.42.8.4.1"></a><h3>Element Information</h3>
+<a name="id-1.2.50.8.4.1"></a><h3>Element Information</h3>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
@@ -134,7 +134,7 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="id-1.2.42.8.4.2"></a><h3>Element Pads</h3>
+<a name="id-1.2.50.8.4.2"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
@@ -185,11 +185,10 @@
 </table></div>
 </div>
 </div>
-<p>
-</p>
 </div>
 <div class="refsect1">
 <a name="gst-plugins-base-plugins-volume.functions_details"></a><h2>Functions</h2>
+<p></p>
 </div>
 <div class="refsect1">
 <a name="gst-plugins-base-plugins-volume.other_details"></a><h2>Types and Values</h2>
@@ -220,7 +219,6 @@
 </div>
 </div>
 <div class="footer">
-<hr>
-          Generated by GTK-Doc V1.21</div>
+<hr>Generated by GTK-Doc V1.24</div>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/plugins/html/gst-plugins-base-plugins-vorbisdec.html b/docs/plugins/html/gst-plugins-base-plugins-vorbisdec.html
index 9e3ac37..9335c8f 100644
--- a/docs/plugins/html/gst-plugins-base-plugins-vorbisdec.html
+++ b/docs/plugins/html/gst-plugins-base-plugins-vorbisdec.html
@@ -2,13 +2,13 @@
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>GStreamer Base Plugins 1.0 Plugins Reference Manual: vorbisdec</title>
+<title>vorbisdec: GStreamer Base 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 Base Plugins 1.0 Plugins Reference Manual">
 <link rel="up" href="ch01.html" title="gst-plugins-base Elements">
 <link rel="prev" href="gst-plugins-base-plugins-volume.html" title="volume">
 <link rel="next" href="gst-plugins-base-plugins-vorbisenc.html" title="vorbisenc">
-<meta name="generator" content="GTK-Doc V1.21 (XML mode)">
+<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">
@@ -28,7 +28,7 @@
 <div class="refnamediv"><table width="100%"><tr>
 <td valign="top">
 <h2><span class="refentrytitle"><a name="gst-plugins-base-plugins-vorbisdec.top_of_page"></a>vorbisdec</span></h2>
-<p>vorbisdec — decode raw vorbis streams to float audio</p>
+<p>vorbisdec</p>
 </td>
 <td class="gallery_image" valign="top" align="right"></td>
 </tr></table></div>
@@ -60,7 +60,7 @@
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="id-1.2.43.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">
@@ -86,7 +86,7 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="id-1.2.43.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">
@@ -137,24 +137,20 @@
 </table></div>
 </div>
 </div>
-<p>
-</p>
 </div>
 <div class="refsect1">
 <a name="gst-plugins-base-plugins-vorbisdec.functions_details"></a><h2>Functions</h2>
+<p></p>
 </div>
 <div class="refsect1">
 <a name="gst-plugins-base-plugins-vorbisdec.other_details"></a><h2>Types and Values</h2>
 <div class="refsect2">
 <a name="GstVorbisDec-struct"></a><h3>struct GstVorbisDec</h3>
 <pre class="programlisting">struct GstVorbisDec;</pre>
-<p>
-</p>
 </div>
 </div>
 </div>
 <div class="footer">
-<hr>
-          Generated by GTK-Doc V1.21</div>
+<hr>Generated by GTK-Doc V1.24</div>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/plugins/html/gst-plugins-base-plugins-vorbisenc.html b/docs/plugins/html/gst-plugins-base-plugins-vorbisenc.html
index 3219070..96b3d23 100644
--- a/docs/plugins/html/gst-plugins-base-plugins-vorbisenc.html
+++ b/docs/plugins/html/gst-plugins-base-plugins-vorbisenc.html
@@ -2,13 +2,13 @@
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>GStreamer Base Plugins 1.0 Plugins Reference Manual: vorbisenc</title>
+<title>vorbisenc: GStreamer Base 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 Base Plugins 1.0 Plugins Reference Manual">
 <link rel="up" href="ch01.html" title="gst-plugins-base Elements">
 <link rel="prev" href="gst-plugins-base-plugins-vorbisdec.html" title="vorbisdec">
 <link rel="next" href="gst-plugins-base-plugins-vorbisparse.html" title="vorbisparse">
-<meta name="generator" content="GTK-Doc V1.21 (XML mode)">
+<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">
@@ -30,7 +30,7 @@
 <div class="refnamediv"><table width="100%"><tr>
 <td valign="top">
 <h2><span class="refentrytitle"><a name="gst-plugins-base-plugins-vorbisenc.top_of_page"></a>vorbisenc</span></h2>
-<p>vorbisenc — Encodes audio in Vorbis format</p>
+<p>vorbisenc</p>
 </td>
 <td class="gallery_image" valign="top" align="right"></td>
 </tr></table></div>
@@ -111,7 +111,7 @@
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="id-1.2.44.8.2.1"></a><h3>Element Information</h3>
+<a name="id-1.2.52.8.2.1"></a><h3>Element Information</h3>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
@@ -137,7 +137,7 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="id-1.2.44.8.2.2"></a><h3>Element Pads</h3>
+<a name="id-1.2.52.8.2.2"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
@@ -158,7 +158,39 @@
 </tr>
 <tr>
 <td><p><span class="term">details</span></p></td>
-<td>audio/x-raw, format=(string)F32LE, layout=(string)interleaved, rate=(int)[ 1, 200000 ], channels=(int)[ 1, 255 ]</td>
+<td>audio/x-raw, format=(string)F32LE, layout=(string)interleaved, rate=(int)[ 1, 200000 ], channels=(int)1</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> audio/x-raw, format=(string)F32LE, layout=(string)interleaved, rate=(int)[ 1, 200000 ], channels=(int)2, channel-mask=(bitmask)0x0000000000000003</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> audio/x-raw, format=(string)F32LE, layout=(string)interleaved, rate=(int)[ 1, 200000 ], channels=(int)3, channel-mask=(bitmask)0x0000000000000007</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> audio/x-raw, format=(string)F32LE, layout=(string)interleaved, rate=(int)[ 1, 200000 ], channels=(int)4, channel-mask=(bitmask)0x0000000000000033</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> audio/x-raw, format=(string)F32LE, layout=(string)interleaved, rate=(int)[ 1, 200000 ], channels=(int)5, channel-mask=(bitmask)0x0000000000000037</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> audio/x-raw, format=(string)F32LE, layout=(string)interleaved, rate=(int)[ 1, 200000 ], channels=(int)6, channel-mask=(bitmask)0x000000000000003f</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> audio/x-raw, format=(string)F32LE, layout=(string)interleaved, rate=(int)[ 1, 200000 ], channels=(int)7, channel-mask=(bitmask)0x0000000000000d0f</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> audio/x-raw, format=(string)F32LE, layout=(string)interleaved, rate=(int)[ 1, 200000 ], channels=(int)8, channel-mask=(bitmask)0x0000000000000c3f</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> audio/x-raw, format=(string)F32LE, layout=(string)interleaved, rate=(int)[ 1, 200000 ], channels=(int)[ 9, 255 ], channel-mask=(bitmask)0x0000000000000000</td>
 </tr>
 </tbody>
 </table></div>
@@ -188,19 +220,16 @@
 </table></div>
 </div>
 </div>
-<p>
-</p>
 </div>
 <div class="refsect1">
 <a name="gst-plugins-base-plugins-vorbisenc.functions_details"></a><h2>Functions</h2>
+<p></p>
 </div>
 <div class="refsect1">
 <a name="gst-plugins-base-plugins-vorbisenc.other_details"></a><h2>Types and Values</h2>
 <div class="refsect2">
 <a name="GstVorbisEnc-struct"></a><h3>struct GstVorbisEnc</h3>
 <pre class="programlisting">struct GstVorbisEnc;</pre>
-<p>
-</p>
 </div>
 </div>
 <div class="refsect1">
@@ -259,7 +288,6 @@
 </div>
 </div>
 <div class="footer">
-<hr>
-          Generated by GTK-Doc V1.21</div>
+<hr>Generated by GTK-Doc V1.24</div>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/plugins/html/gst-plugins-base-plugins-vorbisparse.html b/docs/plugins/html/gst-plugins-base-plugins-vorbisparse.html
index f7ff5e8..f312629 100644
--- a/docs/plugins/html/gst-plugins-base-plugins-vorbisparse.html
+++ b/docs/plugins/html/gst-plugins-base-plugins-vorbisparse.html
@@ -2,13 +2,13 @@
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>GStreamer Base Plugins 1.0 Plugins Reference Manual: vorbisparse</title>
+<title>vorbisparse: GStreamer Base 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 Base Plugins 1.0 Plugins Reference Manual">
 <link rel="up" href="ch01.html" title="gst-plugins-base Elements">
 <link rel="prev" href="gst-plugins-base-plugins-vorbisenc.html" title="vorbisenc">
 <link rel="next" href="gst-plugins-base-plugins-vorbistag.html" title="vorbistag">
-<meta name="generator" content="GTK-Doc V1.21 (XML mode)">
+<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">
@@ -28,7 +28,7 @@
 <div class="refnamediv"><table width="100%"><tr>
 <td valign="top">
 <h2><span class="refentrytitle"><a name="gst-plugins-base-plugins-vorbisparse.top_of_page"></a>vorbisparse</span></h2>
-<p>vorbisparse — parse raw vorbis streams</p>
+<p>vorbisparse</p>
 </td>
 <td class="gallery_image" valign="top" align="right"></td>
 </tr></table></div>
@@ -60,7 +60,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.53.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.45.6.2.2"></a><h3>Element Pads</h3>
+<a name="id-1.2.53.6.2.2"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
@@ -137,24 +137,20 @@
 </table></div>
 </div>
 </div>
-<p>
-</p>
 </div>
 <div class="refsect1">
 <a name="gst-plugins-base-plugins-vorbisparse.functions_details"></a><h2>Functions</h2>
+<p></p>
 </div>
 <div class="refsect1">
 <a name="gst-plugins-base-plugins-vorbisparse.other_details"></a><h2>Types and Values</h2>
 <div class="refsect2">
 <a name="GstVorbisParse-struct"></a><h3>struct GstVorbisParse</h3>
 <pre class="programlisting">struct GstVorbisParse;</pre>
-<p>
-</p>
 </div>
 </div>
 </div>
 <div class="footer">
-<hr>
-          Generated by GTK-Doc V1.21</div>
+<hr>Generated by GTK-Doc V1.24</div>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/plugins/html/gst-plugins-base-plugins-vorbistag.html b/docs/plugins/html/gst-plugins-base-plugins-vorbistag.html
index e83bb7d..5c14762 100644
--- a/docs/plugins/html/gst-plugins-base-plugins-vorbistag.html
+++ b/docs/plugins/html/gst-plugins-base-plugins-vorbistag.html
@@ -2,13 +2,13 @@
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>GStreamer Base Plugins 1.0 Plugins Reference Manual: vorbistag</title>
+<title>vorbistag: GStreamer Base 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 Base Plugins 1.0 Plugins Reference Manual">
 <link rel="up" href="ch01.html" title="gst-plugins-base Elements">
 <link rel="prev" href="gst-plugins-base-plugins-vorbisparse.html" title="vorbisparse">
 <link rel="next" href="gst-plugins-base-plugins-ximagesink.html" title="ximagesink">
-<meta name="generator" content="GTK-Doc V1.21 (XML mode)">
+<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">
@@ -29,7 +29,7 @@
 <div class="refnamediv"><table width="100%"><tr>
 <td valign="top">
 <h2><span class="refentrytitle"><a name="gst-plugins-base-plugins-vorbistag.top_of_page"></a>vorbistag</span></h2>
-<p>vorbistag — Retags vorbis streams</p>
+<p>vorbistag</p>
 </td>
 <td class="gallery_image" valign="top" align="right"></td>
 </tr></table></div>
@@ -67,7 +67,7 @@
 <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.54.7.2.1"></a><h3>Element Information</h3>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
@@ -93,7 +93,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.54.7.2.2"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
@@ -144,24 +144,20 @@
 </table></div>
 </div>
 </div>
-<p>
-</p>
 </div>
 <div class="refsect1">
 <a name="gst-plugins-base-plugins-vorbistag.functions_details"></a><h2>Functions</h2>
+<p></p>
 </div>
 <div class="refsect1">
 <a name="gst-plugins-base-plugins-vorbistag.other_details"></a><h2>Types and Values</h2>
 <div class="refsect2">
 <a name="GstVorbisTag-struct"></a><h3>struct GstVorbisTag</h3>
 <pre class="programlisting">struct GstVorbisTag;</pre>
-<p>
-</p>
 </div>
 </div>
 </div>
 <div class="footer">
-<hr>
-          Generated by GTK-Doc V1.21</div>
+<hr>Generated by GTK-Doc V1.24</div>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/plugins/html/gst-plugins-base-plugins-ximagesink.html b/docs/plugins/html/gst-plugins-base-plugins-ximagesink.html
index 98330f0..6ddfe1e 100644
--- a/docs/plugins/html/gst-plugins-base-plugins-ximagesink.html
+++ b/docs/plugins/html/gst-plugins-base-plugins-ximagesink.html
@@ -2,13 +2,13 @@
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>GStreamer Base Plugins 1.0 Plugins Reference Manual: ximagesink</title>
+<title>ximagesink: GStreamer Base 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 Base Plugins 1.0 Plugins Reference Manual">
 <link rel="up" href="ch01.html" title="gst-plugins-base Elements">
 <link rel="prev" href="gst-plugins-base-plugins-vorbistag.html" title="vorbistag">
 <link rel="next" href="gst-plugins-base-plugins-xvimagesink.html" title="xvimagesink">
-<meta name="generator" content="GTK-Doc V1.21 (XML mode)">
+<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">
@@ -30,7 +30,7 @@
 <div class="refnamediv"><table width="100%"><tr>
 <td valign="top">
 <h2><span class="refentrytitle"><a name="gst-plugins-base-plugins-ximagesink.top_of_page"></a>ximagesink</span></h2>
-<p>ximagesink — A standard X based videosink</p>
+<p>ximagesink</p>
 </td>
 <td class="gallery_image" valign="top" align="right"></td>
 </tr></table></div>
@@ -123,7 +123,7 @@
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="id-1.2.47.8.2.1"></a><h3>Element Information</h3>
+<a name="id-1.2.55.8.2.1"></a><h3>Element Information</h3>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
@@ -149,7 +149,7 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="id-1.2.47.8.2.2"></a><h3>Element Pads</h3>
+<a name="id-1.2.55.8.2.2"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
@@ -176,19 +176,16 @@
 </table></div>
 </div>
 </div>
-<p>
-</p>
 </div>
 <div class="refsect1">
 <a name="gst-plugins-base-plugins-ximagesink.functions_details"></a><h2>Functions</h2>
+<p></p>
 </div>
 <div class="refsect1">
 <a name="gst-plugins-base-plugins-ximagesink.other_details"></a><h2>Types and Values</h2>
 <div class="refsect2">
 <a name="GstXImageSink-struct"></a><h3>struct GstXImageSink</h3>
 <pre class="programlisting">struct GstXImageSink;</pre>
-<p>
-</p>
 </div>
 </div>
 <div class="refsect1">
@@ -259,7 +256,6 @@
 </div>
 </div>
 <div class="footer">
-<hr>
-          Generated by GTK-Doc V1.21</div>
+<hr>Generated by GTK-Doc V1.24</div>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/plugins/html/gst-plugins-base-plugins-xvimagesink.html b/docs/plugins/html/gst-plugins-base-plugins-xvimagesink.html
index 5a47ce1..e5a01f5 100644
--- a/docs/plugins/html/gst-plugins-base-plugins-xvimagesink.html
+++ b/docs/plugins/html/gst-plugins-base-plugins-xvimagesink.html
@@ -2,13 +2,13 @@
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>GStreamer Base Plugins 1.0 Plugins Reference Manual: xvimagesink</title>
+<title>xvimagesink: GStreamer Base 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 Base Plugins 1.0 Plugins Reference Manual">
 <link rel="up" href="ch01.html" title="gst-plugins-base Elements">
 <link rel="prev" href="gst-plugins-base-plugins-ximagesink.html" title="ximagesink">
 <link rel="next" href="ch02.html" title="gst-plugins-base Plugins">
-<meta name="generator" content="GTK-Doc V1.21 (XML mode)">
+<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">
@@ -30,7 +30,7 @@
 <div class="refnamediv"><table width="100%"><tr>
 <td valign="top">
 <h2><span class="refentrytitle"><a name="gst-plugins-base-plugins-xvimagesink.top_of_page"></a>xvimagesink</span></h2>
-<p>xvimagesink — A Xv based videosink</p>
+<p>xvimagesink</p>
 </td>
 <td class="gallery_image" valign="top" align="right"></td>
 </tr></table></div>
@@ -175,7 +175,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.56.8.2.1"></a><h3>Element Information</h3>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
@@ -201,7 +201,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.56.8.2.2"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
@@ -228,19 +228,16 @@
 </table></div>
 </div>
 </div>
-<p>
-</p>
 </div>
 <div class="refsect1">
 <a name="gst-plugins-base-plugins-xvimagesink.functions_details"></a><h2>Functions</h2>
+<p></p>
 </div>
 <div class="refsect1">
 <a name="gst-plugins-base-plugins-xvimagesink.other_details"></a><h2>Types and Values</h2>
 <div class="refsect2">
 <a name="GstXvImageSink-struct"></a><h3>struct GstXvImageSink</h3>
 <pre class="programlisting">struct GstXvImageSink;</pre>
-<p>
-</p>
 </div>
 </div>
 <div class="refsect1">
@@ -395,7 +392,6 @@
 </div>
 </div>
 <div class="footer">
-<hr>
-          Generated by GTK-Doc V1.21</div>
+<hr>Generated by GTK-Doc V1.24</div>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/plugins/html/index.html b/docs/plugins/html/index.html
index e9d19f8..c599dc3 100644
--- a/docs/plugins/html/index.html
+++ b/docs/plugins/html/index.html
@@ -6,7 +6,7 @@
 <meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
 <link rel="home" href="index.html" title="GStreamer Base Plugins 1.0 Plugins Reference Manual">
 <link rel="next" href="ch01.html" title="gst-plugins-base Elements">
-<meta name="generator" content="GTK-Doc V1.21 (XML mode)">
+<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">
@@ -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 Base Plugins 1.0 Plugins Reference Manual</p></th></tr></table></div>
 <div><p class="releaseinfo">
-      for GStreamer Base Plugins 1.0 (1.4.5)
+      for GStreamer Base Plugins 1.0 (1.5.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-base/html/" target="_top">http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base/html/</a>.
     </p></div>
@@ -26,232 +26,258 @@
 <dt><span class="chapter"><a href="ch01.html">gst-plugins-base Elements</a></span></dt>
 <dd><dl>
 <dt>
-<span class="refentrytitle"><a href="gst-plugins-base-plugins-adder.html">adder</a></span><span class="refpurpose"> — Add N audio channels together</span>
+<span class="refentrytitle"><a href="gst-plugins-base-plugins-adder.html">adder</a></span><span class="refpurpose"></span>
 </dt>
 <dt>
-<span class="refentrytitle"><a href="gst-plugins-base-plugins-appsrc.html">appsrc</a></span><span class="refpurpose"> — Allow the application to feed buffers to a pipeline</span>
+<span class="refentrytitle"><a href="gst-plugins-base-plugins-alsasink.html">alsasink</a></span><span class="refpurpose"></span>
 </dt>
 <dt>
-<span class="refentrytitle"><a href="gst-plugins-base-plugins-appsink.html">appsink</a></span><span class="refpurpose"> — Allow the application to get access to raw buffer</span>
+<span class="refentrytitle"><a href="gst-plugins-base-plugins-alsasrc.html">alsasrc</a></span><span class="refpurpose"></span>
 </dt>
 <dt>
-<span class="refentrytitle"><a href="gst-plugins-base-plugins-alsasink.html">alsasink</a></span><span class="refpurpose"> — Output to a sound card via ALSA</span>
+<span class="refentrytitle"><a href="gst-plugins-base-plugins-appsink.html">appsink</a></span><span class="refpurpose"></span>
 </dt>
 <dt>
-<span class="refentrytitle"><a href="gst-plugins-base-plugins-alsasrc.html">alsasrc</a></span><span class="refpurpose"> — Read from a sound card via ALSA</span>
+<span class="refentrytitle"><a href="gst-plugins-base-plugins-appsrc.html">appsrc</a></span><span class="refpurpose"></span>
 </dt>
 <dt>
-<span class="refentrytitle"><a href="gst-plugins-base-plugins-audioconvert.html">audioconvert</a></span><span class="refpurpose"> — Convert audio to different formats</span>
+<span class="refentrytitle"><a href="gst-plugins-base-plugins-audioconvert.html">audioconvert</a></span><span class="refpurpose"></span>
 </dt>
 <dt>
-<span class="refentrytitle"><a href="gst-plugins-base-plugins-audiorate.html">audiorate</a></span><span class="refpurpose"> — Drops/duplicates/adjusts timestamps on audio samples to make a perfect stream</span>
+<span class="refentrytitle"><a href="gst-plugins-base-plugins-audiorate.html">audiorate</a></span><span class="refpurpose"></span>
 </dt>
 <dt>
-<span class="refentrytitle"><a href="gst-plugins-base-plugins-audioresample.html">audioresample</a></span><span class="refpurpose"> — Resamples audio</span>
+<span class="refentrytitle"><a href="gst-plugins-base-plugins-audioresample.html">audioresample</a></span><span class="refpurpose"></span>
 </dt>
 <dt>
-<span class="refentrytitle"><a href="gst-plugins-base-plugins-audiotestsrc.html">audiotestsrc</a></span><span class="refpurpose"> — Creates audio test signals of given frequency and volume</span>
+<span class="refentrytitle"><a href="gst-plugins-base-plugins-audiotestsrc.html">audiotestsrc</a></span><span class="refpurpose"></span>
 </dt>
 <dt>
-<span class="refentrytitle"><a href="gst-plugins-base-plugins-cdparanoiasrc.html">cdparanoiasrc</a></span><span class="refpurpose"> — Read audio from CD in paranoid mode</span>
+<span class="refentrytitle"><a href="gst-plugins-base-plugins-cdparanoiasrc.html">cdparanoiasrc</a></span><span class="refpurpose"></span>
 </dt>
 <dt>
-<span class="refentrytitle"><a href="gst-plugins-base-plugins-clockoverlay.html">clockoverlay</a></span><span class="refpurpose"> — Overlays the current clock time on a video stream</span>
+<span class="refentrytitle"><a href="gst-plugins-base-plugins-clockoverlay.html">clockoverlay</a></span><span class="refpurpose"></span>
 </dt>
 <dt>
-<span class="refentrytitle"><a href="gst-plugins-base-plugins-decodebin.html">decodebin</a></span><span class="refpurpose"> — Autoplug and decode to raw media</span>
+<span class="refentrytitle"><a href="gst-plugins-base-plugins-decodebin.html">decodebin</a></span><span class="refpurpose"></span>
 </dt>
 <dt>
-<span class="refentrytitle"><a href="gst-plugins-base-plugins-encodebin.html">encodebin</a></span><span class="refpurpose"> — Convenience encoding/muxing element</span>
+<span class="refentrytitle"><a href="gst-plugins-base-plugins-encodebin.html">encodebin</a></span><span class="refpurpose"></span>
 </dt>
 <dt>
-<span class="refentrytitle"><a href="gst-plugins-base-plugins-videoconvert.html">videoconvert</a></span><span class="refpurpose"> — Converts video from one colorspace to another</span>
+<span class="refentrytitle"><a href="gst-plugins-base-plugins-giosink.html">giosink</a></span><span class="refpurpose"></span>
 </dt>
 <dt>
-<span class="refentrytitle"><a href="gst-plugins-base-plugins-giosink.html">giosink</a></span><span class="refpurpose"> — Write to any GIO-supported location</span>
+<span class="refentrytitle"><a href="gst-plugins-base-plugins-giosrc.html">giosrc</a></span><span class="refpurpose"></span>
 </dt>
 <dt>
-<span class="refentrytitle"><a href="gst-plugins-base-plugins-giosrc.html">giosrc</a></span><span class="refpurpose"> — Read from any GIO-supported location</span>
+<span class="refentrytitle"><a href="gst-plugins-base-plugins-giostreamsink.html">giostreamsink</a></span><span class="refpurpose"></span>
 </dt>
 <dt>
-<span class="refentrytitle"><a href="gst-plugins-base-plugins-giostreamsink.html">giostreamsink</a></span><span class="refpurpose"> — Write to any GIO stream</span>
+<span class="refentrytitle"><a href="gst-plugins-base-plugins-giostreamsrc.html">giostreamsrc</a></span><span class="refpurpose"></span>
 </dt>
 <dt>
-<span class="refentrytitle"><a href="gst-plugins-base-plugins-giostreamsrc.html">giostreamsrc</a></span><span class="refpurpose"> — Read from any GIO stream</span>
+<span class="refentrytitle"><a href="gst-plugins-base-plugins-multifdsink.html">multifdsink</a></span><span class="refpurpose"></span>
 </dt>
 <dt>
-<span class="refentrytitle"><a href="gst-plugins-base-plugins-multifdsink.html">multifdsink</a></span><span class="refpurpose"> — Send data to multiple filedescriptors</span>
+<span class="refentrytitle"><a href="gst-plugins-base-plugins-multisocketsink.html">multisocketsink</a></span><span class="refpurpose"></span>
 </dt>
 <dt>
-<span class="refentrytitle"><a href="gst-plugins-base-plugins-multisocketsink.html">multisocketsink</a></span><span class="refpurpose"> — Send data to multiple sockets</span>
+<span class="refentrytitle"><a href="gst-plugins-base-plugins-oggaviparse.html">oggaviparse</a></span><span class="refpurpose"></span>
 </dt>
 <dt>
-<span class="refentrytitle"><a href="gst-plugins-base-plugins-oggdemux.html">oggdemux</a></span><span class="refpurpose"> — demux ogg streams (info about ogg: http://xiph.org)</span>
+<span class="refentrytitle"><a href="gst-plugins-base-plugins-oggdemux.html">oggdemux</a></span><span class="refpurpose"></span>
 </dt>
 <dt>
-<span class="refentrytitle"><a href="gst-plugins-base-plugins-oggmux.html">oggmux</a></span><span class="refpurpose"> — mux ogg streams (info about ogg: http://xiph.org)</span>
+<span class="refentrytitle"><a href="gst-plugins-base-plugins-oggmux.html">oggmux</a></span><span class="refpurpose"></span>
 </dt>
 <dt>
-<span class="refentrytitle"><a href="gst-plugins-base-plugins-playbin.html">playbin</a></span><span class="refpurpose"> — Autoplug and play media from an uri</span>
+<span class="refentrytitle"><a href="gst-plugins-base-plugins-oggparse.html">oggparse</a></span><span class="refpurpose"></span>
 </dt>
 <dt>
-<span class="refentrytitle"><a href="gst-plugins-base-plugins-playsink.html">playsink</a></span><span class="refpurpose"> — Convenience sink for multiple streams</span>
+<span class="refentrytitle"><a href="gst-plugins-base-plugins-ogmaudioparse.html">ogmaudioparse</a></span><span class="refpurpose"></span>
 </dt>
 <dt>
-<span class="refentrytitle"><a href="gst-plugins-base-plugins-streamsynchronizer.html">streamsynchronizer</a></span><span class="refpurpose"> — Synchronizes a group of streams to have equal durations and starting points</span>
+<span class="refentrytitle"><a href="gst-plugins-base-plugins-ogmtextparse.html">ogmtextparse</a></span><span class="refpurpose"></span>
 </dt>
 <dt>
-<span class="refentrytitle"><a href="gst-plugins-base-plugins-subtitleoverlay.html">subtitleoverlay</a></span><span class="refpurpose"> — Overlays a video stream with subtitles</span>
+<span class="refentrytitle"><a href="gst-plugins-base-plugins-ogmvideoparse.html">ogmvideoparse</a></span><span class="refpurpose"></span>
 </dt>
 <dt>
-<span class="refentrytitle"><a href="gst-plugins-base-plugins-tcpclientsrc.html">tcpclientsrc</a></span><span class="refpurpose"> — Receive data as a client over the network via TCP</span>
+<span class="refentrytitle"><a href="gst-plugins-base-plugins-playbin.html">playbin</a></span><span class="refpurpose"></span>
 </dt>
 <dt>
-<span class="refentrytitle"><a href="gst-plugins-base-plugins-tcpclientsink.html">tcpclientsink</a></span><span class="refpurpose"> — Send data as a client over the network via TCP</span>
+<span class="refentrytitle"><a href="gst-plugins-base-plugins-playsink.html">playsink</a></span><span class="refpurpose"></span>
 </dt>
 <dt>
-<span class="refentrytitle"><a href="gst-plugins-base-plugins-tcpserversrc.html">tcpserversrc</a></span><span class="refpurpose"> — Receive data as a server over the network via TCP</span>
+<span class="refentrytitle"><a href="gst-plugins-base-plugins-socketsrc.html">socketsrc</a></span><span class="refpurpose"></span>
 </dt>
 <dt>
-<span class="refentrytitle"><a href="gst-plugins-base-plugins-tcpserversink.html">tcpserversink</a></span><span class="refpurpose"> — Send data as a server over the network via TCP</span>
+<span class="refentrytitle"><a href="gst-plugins-base-plugins-ssaparse.html">ssaparse</a></span><span class="refpurpose"></span>
 </dt>
 <dt>
-<span class="refentrytitle"><a href="gst-plugins-base-plugins-textoverlay.html">textoverlay</a></span><span class="refpurpose"> — Adds text strings on top of a video buffer</span>
+<span class="refentrytitle"><a href="gst-plugins-base-plugins-streamsynchronizer.html">streamsynchronizer</a></span><span class="refpurpose"></span>
 </dt>
 <dt>
-<span class="refentrytitle"><a href="gst-plugins-base-plugins-textrender.html">textrender</a></span><span class="refpurpose"> — Renders a text string to an image bitmap</span>
+<span class="refentrytitle"><a href="gst-plugins-base-plugins-subparse.html">subparse</a></span><span class="refpurpose"></span>
 </dt>
 <dt>
-<span class="refentrytitle"><a href="gst-plugins-base-plugins-theoradec.html">theoradec</a></span><span class="refpurpose"> — decode raw theora streams to raw YUV video</span>
+<span class="refentrytitle"><a href="gst-plugins-base-plugins-subtitleoverlay.html">subtitleoverlay</a></span><span class="refpurpose"></span>
 </dt>
 <dt>
-<span class="refentrytitle"><a href="gst-plugins-base-plugins-theoraenc.html">theoraenc</a></span><span class="refpurpose"> — encode raw YUV video to a theora stream</span>
+<span class="refentrytitle"><a href="gst-plugins-base-plugins-tcpclientsink.html">tcpclientsink</a></span><span class="refpurpose"></span>
 </dt>
 <dt>
-<span class="refentrytitle"><a href="gst-plugins-base-plugins-theoraparse.html">theoraparse</a></span><span class="refpurpose"> — parse raw theora streams</span>
+<span class="refentrytitle"><a href="gst-plugins-base-plugins-tcpclientsrc.html">tcpclientsrc</a></span><span class="refpurpose"></span>
 </dt>
 <dt>
-<span class="refentrytitle"><a href="gst-plugins-base-plugins-timeoverlay.html">timeoverlay</a></span><span class="refpurpose"> — Overlays buffer time stamps on a video stream</span>
+<span class="refentrytitle"><a href="gst-plugins-base-plugins-tcpserversink.html">tcpserversink</a></span><span class="refpurpose"></span>
 </dt>
 <dt>
-<span class="refentrytitle"><a href="gst-plugins-base-plugins-uridecodebin.html">uridecodebin</a></span><span class="refpurpose"> — Autoplug and decode an URI to raw media</span>
+<span class="refentrytitle"><a href="gst-plugins-base-plugins-tcpserversrc.html">tcpserversrc</a></span><span class="refpurpose"></span>
 </dt>
 <dt>
-<span class="refentrytitle"><a href="gst-plugins-base-plugins-videorate.html">videorate</a></span><span class="refpurpose"> — Drops/duplicates/adjusts timestamps on video frames to make a perfect stream</span>
+<span class="refentrytitle"><a href="gst-plugins-base-plugins-textoverlay.html">textoverlay</a></span><span class="refpurpose"></span>
 </dt>
 <dt>
-<span class="refentrytitle"><a href="gst-plugins-base-plugins-videoscale.html">videoscale</a></span><span class="refpurpose"> — Resizes video</span>
+<span class="refentrytitle"><a href="gst-plugins-base-plugins-textrender.html">textrender</a></span><span class="refpurpose"></span>
 </dt>
 <dt>
-<span class="refentrytitle"><a href="gst-plugins-base-plugins-videotestsrc.html">videotestsrc</a></span><span class="refpurpose"> — Creates a test video stream</span>
+<span class="refentrytitle"><a href="gst-plugins-base-plugins-theoradec.html">theoradec</a></span><span class="refpurpose"></span>
 </dt>
 <dt>
-<span class="refentrytitle"><a href="gst-plugins-base-plugins-volume.html">volume</a></span><span class="refpurpose"> — Set volume on audio/raw streams</span>
+<span class="refentrytitle"><a href="gst-plugins-base-plugins-theoraenc.html">theoraenc</a></span><span class="refpurpose"></span>
 </dt>
 <dt>
-<span class="refentrytitle"><a href="gst-plugins-base-plugins-vorbisdec.html">vorbisdec</a></span><span class="refpurpose"> — decode raw vorbis streams to float audio</span>
+<span class="refentrytitle"><a href="gst-plugins-base-plugins-theoraparse.html">theoraparse</a></span><span class="refpurpose"></span>
 </dt>
 <dt>
-<span class="refentrytitle"><a href="gst-plugins-base-plugins-vorbisenc.html">vorbisenc</a></span><span class="refpurpose"> — Encodes audio in Vorbis format</span>
+<span class="refentrytitle"><a href="gst-plugins-base-plugins-timeoverlay.html">timeoverlay</a></span><span class="refpurpose"></span>
 </dt>
 <dt>
-<span class="refentrytitle"><a href="gst-plugins-base-plugins-vorbisparse.html">vorbisparse</a></span><span class="refpurpose"> — parse raw vorbis streams</span>
+<span class="refentrytitle"><a href="gst-plugins-base-plugins-uridecodebin.html">uridecodebin</a></span><span class="refpurpose"></span>
 </dt>
 <dt>
-<span class="refentrytitle"><a href="gst-plugins-base-plugins-vorbistag.html">vorbistag</a></span><span class="refpurpose"> — Retags vorbis streams</span>
+<span class="refentrytitle"><a href="gst-plugins-base-plugins-videoconvert.html">videoconvert</a></span><span class="refpurpose"></span>
 </dt>
 <dt>
-<span class="refentrytitle"><a href="gst-plugins-base-plugins-ximagesink.html">ximagesink</a></span><span class="refpurpose"> — A standard X based videosink</span>
+<span class="refentrytitle"><a href="gst-plugins-base-plugins-videorate.html">videorate</a></span><span class="refpurpose"></span>
 </dt>
 <dt>
-<span class="refentrytitle"><a href="gst-plugins-base-plugins-xvimagesink.html">xvimagesink</a></span><span class="refpurpose"> — A Xv based videosink</span>
+<span class="refentrytitle"><a href="gst-plugins-base-plugins-videoscale.html">videoscale</a></span><span class="refpurpose"></span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-plugins-videotestsrc.html">videotestsrc</a></span><span class="refpurpose"></span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-plugins-volume.html">volume</a></span><span class="refpurpose"></span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-plugins-vorbisdec.html">vorbisdec</a></span><span class="refpurpose"></span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-plugins-vorbisenc.html">vorbisenc</a></span><span class="refpurpose"></span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-plugins-vorbisparse.html">vorbisparse</a></span><span class="refpurpose"></span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-plugins-vorbistag.html">vorbistag</a></span><span class="refpurpose"></span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-plugins-ximagesink.html">ximagesink</a></span><span class="refpurpose"></span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-plugins-xvimagesink.html">xvimagesink</a></span><span class="refpurpose"></span>
 </dt>
 </dl></dd>
 <dt><span class="chapter"><a href="ch02.html">gst-plugins-base Plugins</a></span></dt>
 <dd><dl>
 <dt>
-<span class="refentrytitle"><a href="gst-plugins-base-plugins-plugin-adder.html">adder</a></span><span class="refpurpose">Adds multiple streams</span>
+<span class="refentrytitle"><a href="gst-plugins-base-plugins-plugin-adder.html">adder</a></span><span class="refpurpose"> — Adds multiple streams</span>
 </dt>
 <dt>
-<span class="refentrytitle"><a href="gst-plugins-base-plugins-plugin-alsa.html">alsa</a></span><span class="refpurpose">ALSA plugin library</span>
+<span class="refentrytitle"><a href="gst-plugins-base-plugins-plugin-alsa.html">alsa</a></span><span class="refpurpose"> — ALSA plugin library</span>
 </dt>
 <dt>
-<span class="refentrytitle"><a href="gst-plugins-base-plugins-plugin-app.html">app</a></span><span class="refpurpose">Elements used to communicate with applications</span>
+<span class="refentrytitle"><a href="gst-plugins-base-plugins-plugin-app.html">app</a></span><span class="refpurpose"> — Elements used to communicate with applications</span>
 </dt>
 <dt>
-<span class="refentrytitle"><a href="gst-plugins-base-plugins-plugin-audioconvert.html">audioconvert</a></span><span class="refpurpose">Convert audio to different formats</span>
+<span class="refentrytitle"><a href="gst-plugins-base-plugins-plugin-audioconvert.html">audioconvert</a></span><span class="refpurpose"> — Convert audio to different formats</span>
 </dt>
 <dt>
-<span class="refentrytitle"><a href="gst-plugins-base-plugins-plugin-audiorate.html">audiorate</a></span><span class="refpurpose">Adjusts audio frames</span>
+<span class="refentrytitle"><a href="gst-plugins-base-plugins-plugin-audiorate.html">audiorate</a></span><span class="refpurpose"> — Adjusts audio frames</span>
 </dt>
 <dt>
-<span class="refentrytitle"><a href="gst-plugins-base-plugins-plugin-audioresample.html">audioresample</a></span><span class="refpurpose">Resamples audio</span>
+<span class="refentrytitle"><a href="gst-plugins-base-plugins-plugin-audioresample.html">audioresample</a></span><span class="refpurpose"> — Resamples audio</span>
 </dt>
 <dt>
-<span class="refentrytitle"><a href="gst-plugins-base-plugins-plugin-audiotestsrc.html">audiotestsrc</a></span><span class="refpurpose">Creates audio test signals of given frequency and volume</span>
+<span class="refentrytitle"><a href="gst-plugins-base-plugins-plugin-audiotestsrc.html">audiotestsrc</a></span><span class="refpurpose"> — Creates audio test signals of given frequency and volume</span>
 </dt>
 <dt>
-<span class="refentrytitle"><a href="gst-plugins-base-plugins-plugin-cdparanoia.html">cdparanoia</a></span><span class="refpurpose">Read audio from CD in paranoid mode</span>
+<span class="refentrytitle"><a href="gst-plugins-base-plugins-plugin-cdparanoia.html">cdparanoia</a></span><span class="refpurpose"> — Read audio from CD in paranoid mode</span>
 </dt>
 <dt>
-<span class="refentrytitle"><a href="gst-plugins-base-plugins-plugin-encoding.html">encoding</a></span><span class="refpurpose">various encoding-related elements</span>
+<span class="refentrytitle"><a href="gst-plugins-base-plugins-plugin-encoding.html">encoding</a></span><span class="refpurpose"> — various encoding-related elements</span>
 </dt>
 <dt>
-<span class="refentrytitle"><a href="gst-plugins-base-plugins-plugin-videoconvert.html">videoconvert</a></span><span class="refpurpose">Colorspace conversion</span>
+<span class="refentrytitle"><a href="gst-plugins-base-plugins-plugin-gio.html">gio</a></span><span class="refpurpose"> — GIO elements</span>
 </dt>
 <dt>
-<span class="refentrytitle"><a href="gst-plugins-base-plugins-plugin-gio.html">gio</a></span><span class="refpurpose">GIO elements</span>
+<span class="refentrytitle"><a href="gst-plugins-base-plugins-plugin-ivorbisdec.html">ivorbisdec</a></span><span class="refpurpose"> — Vorbis Tremor decoder</span>
 </dt>
 <dt>
-<span class="refentrytitle"><a href="gst-plugins-base-plugins-plugin-libvisual.html">libvisual</a></span><span class="refpurpose">libvisual visualization plugins</span>
+<span class="refentrytitle"><a href="gst-plugins-base-plugins-plugin-libvisual.html">libvisual</a></span><span class="refpurpose"> — libvisual visualization plugins</span>
 </dt>
 <dt>
-<span class="refentrytitle"><a href="gst-plugins-base-plugins-plugin-ogg.html">ogg</a></span><span class="refpurpose">ogg stream manipulation (info about ogg: http://xiph.org)</span>
+<span class="refentrytitle"><a href="gst-plugins-base-plugins-plugin-ogg.html">ogg</a></span><span class="refpurpose"> — ogg stream manipulation (info about ogg: http://xiph.org)</span>
 </dt>
 <dt>
-<span class="refentrytitle"><a href="gst-plugins-base-plugins-plugin-pango.html">pango</a></span><span class="refpurpose">Pango-based text rendering and overlay</span>
+<span class="refentrytitle"><a href="gst-plugins-base-plugins-plugin-pango.html">pango</a></span><span class="refpurpose"> — Pango-based text rendering and overlay</span>
 </dt>
 <dt>
-<span class="refentrytitle"><a href="gst-plugins-base-plugins-plugin-playback.html">playback</a></span><span class="refpurpose">various playback elements</span>
+<span class="refentrytitle"><a href="gst-plugins-base-plugins-plugin-playback.html">playback</a></span><span class="refpurpose"> — various playback elements</span>
 </dt>
 <dt>
-<span class="refentrytitle"><a href="gst-plugins-base-plugins-plugin-subparse.html">subparse</a></span><span class="refpurpose">Subtitle parsing</span>
+<span class="refentrytitle"><a href="gst-plugins-base-plugins-plugin-subparse.html">subparse</a></span><span class="refpurpose"> — Subtitle parsing</span>
 </dt>
 <dt>
-<span class="refentrytitle"><a href="gst-plugins-base-plugins-plugin-tcp.html">tcp</a></span><span class="refpurpose">transfer data over the network via TCP</span>
+<span class="refentrytitle"><a href="gst-plugins-base-plugins-plugin-tcp.html">tcp</a></span><span class="refpurpose"> — transfer data over the network via TCP</span>
 </dt>
 <dt>
-<span class="refentrytitle"><a href="gst-plugins-base-plugins-plugin-theora.html">theora</a></span><span class="refpurpose">Theora plugin library</span>
+<span class="refentrytitle"><a href="gst-plugins-base-plugins-plugin-theora.html">theora</a></span><span class="refpurpose"> — Theora plugin library</span>
 </dt>
 <dt>
-<span class="refentrytitle"><a href="gst-plugins-base-plugins-plugin-typefindfunctions.html">typefindfunctions</a></span><span class="refpurpose">default typefind functions</span>
+<span class="refentrytitle"><a href="gst-plugins-base-plugins-plugin-typefindfunctions.html">typefindfunctions</a></span><span class="refpurpose"> — default typefind functions</span>
 </dt>
 <dt>
-<span class="refentrytitle"><a href="gst-plugins-base-plugins-plugin-videorate.html">videorate</a></span><span class="refpurpose">Adjusts video frames</span>
+<span class="refentrytitle"><a href="gst-plugins-base-plugins-plugin-videoconvert.html">videoconvert</a></span><span class="refpurpose"> — Colorspace conversion</span>
 </dt>
 <dt>
-<span class="refentrytitle"><a href="gst-plugins-base-plugins-plugin-videoscale.html">videoscale</a></span><span class="refpurpose">Resizes video</span>
+<span class="refentrytitle"><a href="gst-plugins-base-plugins-plugin-videorate.html">videorate</a></span><span class="refpurpose"> — Adjusts video frames</span>
 </dt>
 <dt>
-<span class="refentrytitle"><a href="gst-plugins-base-plugins-plugin-videotestsrc.html">videotestsrc</a></span><span class="refpurpose">Creates a test video stream</span>
+<span class="refentrytitle"><a href="gst-plugins-base-plugins-plugin-videoscale.html">videoscale</a></span><span class="refpurpose"> — Resizes video</span>
 </dt>
 <dt>
-<span class="refentrytitle"><a href="gst-plugins-base-plugins-plugin-volume.html">volume</a></span><span class="refpurpose">plugin for controlling audio volume</span>
+<span class="refentrytitle"><a href="gst-plugins-base-plugins-plugin-videotestsrc.html">videotestsrc</a></span><span class="refpurpose"> — Creates a test video stream</span>
 </dt>
 <dt>
-<span class="refentrytitle"><a href="gst-plugins-base-plugins-plugin-vorbis.html">vorbis</a></span><span class="refpurpose">Vorbis plugin library</span>
+<span class="refentrytitle"><a href="gst-plugins-base-plugins-plugin-volume.html">volume</a></span><span class="refpurpose"> — plugin for controlling audio volume</span>
 </dt>
 <dt>
-<span class="refentrytitle"><a href="gst-plugins-base-plugins-plugin-ximagesink.html">ximagesink</a></span><span class="refpurpose">X11 video output element based on standard Xlib calls</span>
+<span class="refentrytitle"><a href="gst-plugins-base-plugins-plugin-vorbis.html">vorbis</a></span><span class="refpurpose"> — Vorbis plugin library</span>
 </dt>
 <dt>
-<span class="refentrytitle"><a href="gst-plugins-base-plugins-plugin-xvimagesink.html">xvimagesink</a></span><span class="refpurpose">XFree86 video output plugin using Xv extension</span>
+<span class="refentrytitle"><a href="gst-plugins-base-plugins-plugin-ximagesink.html">ximagesink</a></span><span class="refpurpose"> — X11 video output element based on standard Xlib calls</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="gst-plugins-base-plugins-plugin-xvimagesink.html">xvimagesink</a></span><span class="refpurpose"> — XFree86 video output plugin using Xv extension</span>
 </dt>
 </dl></dd>
 </dl></div>
 </div>
 <div class="footer">
-<hr>
-          Generated by GTK-Doc V1.21</div>
+<hr>Generated by GTK-Doc V1.24</div>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/plugins/html/index.sgml b/docs/plugins/html/index.sgml
index dd01807..550f1da 100644
--- a/docs/plugins/html/index.sgml
+++ b/docs/plugins/html/index.sgml
@@ -11,6 +11,55 @@
 <ANCHOR id="GstAdder-struct" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-adder.html#GstAdder-struct">
 <ANCHOR id="gst-plugins-base-plugins-adder.property-details" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-adder.html#gst-plugins-base-plugins-adder.property-details">
 <ANCHOR id="GstAdder--caps" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-adder.html#GstAdder--caps">
+<ANCHOR id="gst-plugins-base-plugins-alsasink" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-alsasink.html">
+<ANCHOR id="gst-plugins-base-plugins-alsasink.properties" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-alsasink.html#gst-plugins-base-plugins-alsasink.properties">
+<ANCHOR id="GstAlsaSink" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-alsasink.html#GstAlsaSink">
+<ANCHOR id="gst-plugins-base-plugins-alsasink.other" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-alsasink.html#gst-plugins-base-plugins-alsasink.other">
+<ANCHOR id="gst-plugins-base-plugins-alsasink.object-hierarchy" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-alsasink.html#gst-plugins-base-plugins-alsasink.object-hierarchy">
+<ANCHOR id="gst-plugins-base-plugins-alsasink.description" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-alsasink.html#gst-plugins-base-plugins-alsasink.description">
+<ANCHOR id="gst-plugins-base-plugins-alsasink.functions_details" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-alsasink.html#gst-plugins-base-plugins-alsasink.functions_details">
+<ANCHOR id="gst-plugins-base-plugins-alsasink.other_details" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-alsasink.html#gst-plugins-base-plugins-alsasink.other_details">
+<ANCHOR id="GstAlsaSink-struct" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-alsasink.html#GstAlsaSink-struct">
+<ANCHOR id="gst-plugins-base-plugins-alsasink.property-details" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-alsasink.html#gst-plugins-base-plugins-alsasink.property-details">
+<ANCHOR id="GstAlsaSink--card-name" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-alsasink.html#GstAlsaSink--card-name">
+<ANCHOR id="GstAlsaSink--device" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-alsasink.html#GstAlsaSink--device">
+<ANCHOR id="GstAlsaSink--device-name" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-alsasink.html#GstAlsaSink--device-name">
+<ANCHOR id="gst-plugins-base-plugins-alsasrc" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-alsasrc.html">
+<ANCHOR id="gst-plugins-base-plugins-alsasrc.properties" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-alsasrc.html#gst-plugins-base-plugins-alsasrc.properties">
+<ANCHOR id="GstAlsaSrc" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-alsasrc.html#GstAlsaSrc">
+<ANCHOR id="gst-plugins-base-plugins-alsasrc.other" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-alsasrc.html#gst-plugins-base-plugins-alsasrc.other">
+<ANCHOR id="gst-plugins-base-plugins-alsasrc.object-hierarchy" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-alsasrc.html#gst-plugins-base-plugins-alsasrc.object-hierarchy">
+<ANCHOR id="gst-plugins-base-plugins-alsasrc.description" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-alsasrc.html#gst-plugins-base-plugins-alsasrc.description">
+<ANCHOR id="gst-plugins-base-plugins-alsasrc.functions_details" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-alsasrc.html#gst-plugins-base-plugins-alsasrc.functions_details">
+<ANCHOR id="gst-plugins-base-plugins-alsasrc.other_details" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-alsasrc.html#gst-plugins-base-plugins-alsasrc.other_details">
+<ANCHOR id="GstAlsaSrc-struct" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-alsasrc.html#GstAlsaSrc-struct">
+<ANCHOR id="gst-plugins-base-plugins-alsasrc.property-details" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-alsasrc.html#gst-plugins-base-plugins-alsasrc.property-details">
+<ANCHOR id="GstAlsaSrc--card-name" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-alsasrc.html#GstAlsaSrc--card-name">
+<ANCHOR id="GstAlsaSrc--device" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-alsasrc.html#GstAlsaSrc--device">
+<ANCHOR id="GstAlsaSrc--device-name" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-alsasrc.html#GstAlsaSrc--device-name">
+<ANCHOR id="gst-plugins-base-plugins-appsink" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-appsink.html">
+<ANCHOR id="gst-plugins-base-plugins-appsink.properties" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-appsink.html#gst-plugins-base-plugins-appsink.properties">
+<ANCHOR id="gst-plugins-base-plugins-appsink.signals" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-appsink.html#gst-plugins-base-plugins-appsink.signals">
+<ANCHOR id="GstAppSink" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-appsink.html#GstAppSink">
+<ANCHOR id="gst-plugins-base-plugins-appsink.other" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-appsink.html#gst-plugins-base-plugins-appsink.other">
+<ANCHOR id="gst-plugins-base-plugins-appsink.object-hierarchy" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-appsink.html#gst-plugins-base-plugins-appsink.object-hierarchy">
+<ANCHOR id="gst-plugins-base-plugins-appsink.implemented-interfaces" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-appsink.html#gst-plugins-base-plugins-appsink.implemented-interfaces">
+<ANCHOR id="gst-plugins-base-plugins-appsink.description" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-appsink.html#gst-plugins-base-plugins-appsink.description">
+<ANCHOR id="gst-plugins-base-plugins-appsink.functions_details" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-appsink.html#gst-plugins-base-plugins-appsink.functions_details">
+<ANCHOR id="gst-plugins-base-plugins-appsink.other_details" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-appsink.html#gst-plugins-base-plugins-appsink.other_details">
+<ANCHOR id="GstAppSink-struct" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-appsink.html#GstAppSink-struct">
+<ANCHOR id="gst-plugins-base-plugins-appsink.property-details" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-appsink.html#gst-plugins-base-plugins-appsink.property-details">
+<ANCHOR id="GstAppSink--caps" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-appsink.html#GstAppSink--caps">
+<ANCHOR id="GstAppSink--drop" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-appsink.html#GstAppSink--drop">
+<ANCHOR id="GstAppSink--emit-signals" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-appsink.html#GstAppSink--emit-signals">
+<ANCHOR id="GstAppSink--eos" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-appsink.html#GstAppSink--eos">
+<ANCHOR id="GstAppSink--max-buffers" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-appsink.html#GstAppSink--max-buffers">
+<ANCHOR id="gst-plugins-base-plugins-appsink.signal-details" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-appsink.html#gst-plugins-base-plugins-appsink.signal-details">
+<ANCHOR id="GstAppSink-eos" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-appsink.html#GstAppSink-eos">
+<ANCHOR id="GstAppSink-new-preroll" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-appsink.html#GstAppSink-new-preroll">
+<ANCHOR id="GstAppSink-new-sample" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-appsink.html#GstAppSink-new-sample">
+<ANCHOR id="GstAppSink-pull-preroll" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-appsink.html#GstAppSink-pull-preroll">
+<ANCHOR id="GstAppSink-pull-sample" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-appsink.html#GstAppSink-pull-sample">
 <ANCHOR id="gst-plugins-base-plugins-appsrc" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-appsrc.html">
 <ANCHOR id="gst-plugins-base-plugins-appsrc.properties" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-appsrc.html#gst-plugins-base-plugins-appsrc.properties">
 <ANCHOR id="gst-plugins-base-plugins-appsrc.signals" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-appsrc.html#gst-plugins-base-plugins-appsrc.signals">
@@ -41,55 +90,7 @@
 <ANCHOR id="GstAppSrc-need-data" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-appsrc.html#GstAppSrc-need-data">
 <ANCHOR id="GstAppSrc-push-buffer" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-appsrc.html#GstAppSrc-push-buffer">
 <ANCHOR id="GstAppSrc-seek-data" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-appsrc.html#GstAppSrc-seek-data">
-<ANCHOR id="gst-plugins-base-plugins-appsink" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-appsink.html">
-<ANCHOR id="gst-plugins-base-plugins-appsink.properties" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-appsink.html#gst-plugins-base-plugins-appsink.properties">
-<ANCHOR id="gst-plugins-base-plugins-appsink.signals" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-appsink.html#gst-plugins-base-plugins-appsink.signals">
-<ANCHOR id="GstAppSink" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-appsink.html#GstAppSink">
-<ANCHOR id="gst-plugins-base-plugins-appsink.other" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-appsink.html#gst-plugins-base-plugins-appsink.other">
-<ANCHOR id="gst-plugins-base-plugins-appsink.object-hierarchy" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-appsink.html#gst-plugins-base-plugins-appsink.object-hierarchy">
-<ANCHOR id="gst-plugins-base-plugins-appsink.implemented-interfaces" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-appsink.html#gst-plugins-base-plugins-appsink.implemented-interfaces">
-<ANCHOR id="gst-plugins-base-plugins-appsink.description" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-appsink.html#gst-plugins-base-plugins-appsink.description">
-<ANCHOR id="gst-plugins-base-plugins-appsink.functions_details" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-appsink.html#gst-plugins-base-plugins-appsink.functions_details">
-<ANCHOR id="gst-plugins-base-plugins-appsink.other_details" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-appsink.html#gst-plugins-base-plugins-appsink.other_details">
-<ANCHOR id="GstAppSink-struct" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-appsink.html#GstAppSink-struct">
-<ANCHOR id="gst-plugins-base-plugins-appsink.property-details" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-appsink.html#gst-plugins-base-plugins-appsink.property-details">
-<ANCHOR id="GstAppSink--caps" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-appsink.html#GstAppSink--caps">
-<ANCHOR id="GstAppSink--drop" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-appsink.html#GstAppSink--drop">
-<ANCHOR id="GstAppSink--emit-signals" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-appsink.html#GstAppSink--emit-signals">
-<ANCHOR id="GstAppSink--eos" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-appsink.html#GstAppSink--eos">
-<ANCHOR id="GstAppSink--max-buffers" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-appsink.html#GstAppSink--max-buffers">
-<ANCHOR id="gst-plugins-base-plugins-appsink.signal-details" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-appsink.html#gst-plugins-base-plugins-appsink.signal-details">
-<ANCHOR id="GstAppSink-eos" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-appsink.html#GstAppSink-eos">
-<ANCHOR id="GstAppSink-new-preroll" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-appsink.html#GstAppSink-new-preroll">
-<ANCHOR id="GstAppSink-new-sample" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-appsink.html#GstAppSink-new-sample">
-<ANCHOR id="GstAppSink-pull-preroll" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-appsink.html#GstAppSink-pull-preroll">
-<ANCHOR id="GstAppSink-pull-sample" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-appsink.html#GstAppSink-pull-sample">
-<ANCHOR id="gst-plugins-base-plugins-alsasink" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-alsasink.html">
-<ANCHOR id="gst-plugins-base-plugins-alsasink.properties" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-alsasink.html#gst-plugins-base-plugins-alsasink.properties">
-<ANCHOR id="GstAlsaSink" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-alsasink.html#GstAlsaSink">
-<ANCHOR id="gst-plugins-base-plugins-alsasink.other" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-alsasink.html#gst-plugins-base-plugins-alsasink.other">
-<ANCHOR id="gst-plugins-base-plugins-alsasink.object-hierarchy" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-alsasink.html#gst-plugins-base-plugins-alsasink.object-hierarchy">
-<ANCHOR id="gst-plugins-base-plugins-alsasink.description" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-alsasink.html#gst-plugins-base-plugins-alsasink.description">
-<ANCHOR id="gst-plugins-base-plugins-alsasink.functions_details" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-alsasink.html#gst-plugins-base-plugins-alsasink.functions_details">
-<ANCHOR id="gst-plugins-base-plugins-alsasink.other_details" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-alsasink.html#gst-plugins-base-plugins-alsasink.other_details">
-<ANCHOR id="GstAlsaSink-struct" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-alsasink.html#GstAlsaSink-struct">
-<ANCHOR id="gst-plugins-base-plugins-alsasink.property-details" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-alsasink.html#gst-plugins-base-plugins-alsasink.property-details">
-<ANCHOR id="GstAlsaSink--card-name" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-alsasink.html#GstAlsaSink--card-name">
-<ANCHOR id="GstAlsaSink--device" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-alsasink.html#GstAlsaSink--device">
-<ANCHOR id="GstAlsaSink--device-name" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-alsasink.html#GstAlsaSink--device-name">
-<ANCHOR id="gst-plugins-base-plugins-alsasrc" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-alsasrc.html">
-<ANCHOR id="gst-plugins-base-plugins-alsasrc.properties" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-alsasrc.html#gst-plugins-base-plugins-alsasrc.properties">
-<ANCHOR id="GstAlsaSrc" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-alsasrc.html#GstAlsaSrc">
-<ANCHOR id="gst-plugins-base-plugins-alsasrc.other" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-alsasrc.html#gst-plugins-base-plugins-alsasrc.other">
-<ANCHOR id="gst-plugins-base-plugins-alsasrc.object-hierarchy" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-alsasrc.html#gst-plugins-base-plugins-alsasrc.object-hierarchy">
-<ANCHOR id="gst-plugins-base-plugins-alsasrc.description" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-alsasrc.html#gst-plugins-base-plugins-alsasrc.description">
-<ANCHOR id="gst-plugins-base-plugins-alsasrc.functions_details" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-alsasrc.html#gst-plugins-base-plugins-alsasrc.functions_details">
-<ANCHOR id="gst-plugins-base-plugins-alsasrc.other_details" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-alsasrc.html#gst-plugins-base-plugins-alsasrc.other_details">
-<ANCHOR id="GstAlsaSrc-struct" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-alsasrc.html#GstAlsaSrc-struct">
-<ANCHOR id="gst-plugins-base-plugins-alsasrc.property-details" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-alsasrc.html#gst-plugins-base-plugins-alsasrc.property-details">
-<ANCHOR id="GstAlsaSrc--card-name" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-alsasrc.html#GstAlsaSrc--card-name">
-<ANCHOR id="GstAlsaSrc--device" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-alsasrc.html#GstAlsaSrc--device">
-<ANCHOR id="GstAlsaSrc--device-name" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-alsasrc.html#GstAlsaSrc--device-name">
+<ANCHOR id="GstAppSrc-push-sample" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-appsrc.html#GstAppSrc-push-sample">
 <ANCHOR id="gst-plugins-base-plugins-audioconvert" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-audioconvert.html">
 <ANCHOR id="gst-plugins-base-plugins-audioconvert.properties" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-audioconvert.html#gst-plugins-base-plugins-audioconvert.properties">
 <ANCHOR id="GstAudioConvert" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-audioconvert.html#GstAudioConvert">
@@ -100,7 +101,16 @@
 <ANCHOR id="gst-plugins-base-plugins-audioconvert.other_details" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-audioconvert.html#gst-plugins-base-plugins-audioconvert.other_details">
 <ANCHOR id="GstAudioConvert-struct" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-audioconvert.html#GstAudioConvert-struct">
 <ANCHOR id="GstAudioConvertDithering" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-audioconvert.html#GstAudioConvertDithering">
+<ANCHOR id="DITHER-NONE:CAPS" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-audioconvert.html#DITHER-NONE:CAPS">
+<ANCHOR id="DITHER-RPDF:CAPS" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-audioconvert.html#DITHER-RPDF:CAPS">
+<ANCHOR id="DITHER-TPDF:CAPS" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-audioconvert.html#DITHER-TPDF:CAPS">
+<ANCHOR id="DITHER-TPDF-HF:CAPS" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-audioconvert.html#DITHER-TPDF-HF:CAPS">
 <ANCHOR id="GstAudioConvertNoiseShaping" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-audioconvert.html#GstAudioConvertNoiseShaping">
+<ANCHOR id="NOISE-SHAPING-NONE:CAPS" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-audioconvert.html#NOISE-SHAPING-NONE:CAPS">
+<ANCHOR id="NOISE-SHAPING-ERROR-FEEDBACK:CAPS" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-audioconvert.html#NOISE-SHAPING-ERROR-FEEDBACK:CAPS">
+<ANCHOR id="NOISE-SHAPING-SIMPLE:CAPS" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-audioconvert.html#NOISE-SHAPING-SIMPLE:CAPS">
+<ANCHOR id="NOISE-SHAPING-MEDIUM:CAPS" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-audioconvert.html#NOISE-SHAPING-MEDIUM:CAPS">
+<ANCHOR id="NOISE-SHAPING-HIGH:CAPS" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-audioconvert.html#NOISE-SHAPING-HIGH:CAPS">
 <ANCHOR id="gst-plugins-base-plugins-audioconvert.property-details" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-audioconvert.html#gst-plugins-base-plugins-audioconvert.property-details">
 <ANCHOR id="GstAudioConvert--dithering" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-audioconvert.html#GstAudioConvert--dithering">
 <ANCHOR id="GstAudioConvert--noise-shaping" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-audioconvert.html#GstAudioConvert--noise-shaping">
@@ -145,6 +155,19 @@
 <ANCHOR id="gst-plugins-base-plugins-audiotestsrc.other_details" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-audiotestsrc.html#gst-plugins-base-plugins-audiotestsrc.other_details">
 <ANCHOR id="GstAudioTestSrc-struct" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-audiotestsrc.html#GstAudioTestSrc-struct">
 <ANCHOR id="GstAudioTestSrcWave" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-audiotestsrc.html#GstAudioTestSrcWave">
+<ANCHOR id="GST-AUDIO-TEST-SRC-WAVE-SINE:CAPS" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-audiotestsrc.html#GST-AUDIO-TEST-SRC-WAVE-SINE:CAPS">
+<ANCHOR id="GST-AUDIO-TEST-SRC-WAVE-SQUARE:CAPS" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-audiotestsrc.html#GST-AUDIO-TEST-SRC-WAVE-SQUARE:CAPS">
+<ANCHOR id="GST-AUDIO-TEST-SRC-WAVE-SAW:CAPS" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-audiotestsrc.html#GST-AUDIO-TEST-SRC-WAVE-SAW:CAPS">
+<ANCHOR id="GST-AUDIO-TEST-SRC-WAVE-TRIANGLE:CAPS" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-audiotestsrc.html#GST-AUDIO-TEST-SRC-WAVE-TRIANGLE:CAPS">
+<ANCHOR id="GST-AUDIO-TEST-SRC-WAVE-SILENCE:CAPS" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-audiotestsrc.html#GST-AUDIO-TEST-SRC-WAVE-SILENCE:CAPS">
+<ANCHOR id="GST-AUDIO-TEST-SRC-WAVE-WHITE-NOISE:CAPS" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-audiotestsrc.html#GST-AUDIO-TEST-SRC-WAVE-WHITE-NOISE:CAPS">
+<ANCHOR id="GST-AUDIO-TEST-SRC-WAVE-PINK-NOISE:CAPS" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-audiotestsrc.html#GST-AUDIO-TEST-SRC-WAVE-PINK-NOISE:CAPS">
+<ANCHOR id="GST-AUDIO-TEST-SRC-WAVE-SINE-TAB:CAPS" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-audiotestsrc.html#GST-AUDIO-TEST-SRC-WAVE-SINE-TAB:CAPS">
+<ANCHOR id="GST-AUDIO-TEST-SRC-WAVE-TICKS:CAPS" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-audiotestsrc.html#GST-AUDIO-TEST-SRC-WAVE-TICKS:CAPS">
+<ANCHOR id="GST-AUDIO-TEST-SRC-WAVE-GAUSSIAN-WHITE-NOISE:CAPS" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-audiotestsrc.html#GST-AUDIO-TEST-SRC-WAVE-GAUSSIAN-WHITE-NOISE:CAPS">
+<ANCHOR id="GST-AUDIO-TEST-SRC-WAVE-RED-NOISE:CAPS" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-audiotestsrc.html#GST-AUDIO-TEST-SRC-WAVE-RED-NOISE:CAPS">
+<ANCHOR id="GST-AUDIO-TEST-SRC-WAVE-BLUE-NOISE:CAPS" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-audiotestsrc.html#GST-AUDIO-TEST-SRC-WAVE-BLUE-NOISE:CAPS">
+<ANCHOR id="GST-AUDIO-TEST-SRC-WAVE-VIOLET-NOISE:CAPS" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-audiotestsrc.html#GST-AUDIO-TEST-SRC-WAVE-VIOLET-NOISE:CAPS">
 <ANCHOR id="gst-plugins-base-plugins-audiotestsrc.property-details" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-audiotestsrc.html#gst-plugins-base-plugins-audiotestsrc.property-details">
 <ANCHOR id="GstAudioTestSrc--can-activate-pull" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-audiotestsrc.html#GstAudioTestSrc--can-activate-pull">
 <ANCHOR id="GstAudioTestSrc--can-activate-push" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-audiotestsrc.html#GstAudioTestSrc--can-activate-push">
@@ -239,17 +262,6 @@
 <ANCHOR id="gst-plugins-base-plugins-encodebin.signal-details" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-encodebin.html#gst-plugins-base-plugins-encodebin.signal-details">
 <ANCHOR id="GstEncodeBin-request-pad" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-encodebin.html#GstEncodeBin-request-pad">
 <ANCHOR id="GstEncodeBin-request-profile-pad" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-encodebin.html#GstEncodeBin-request-profile-pad">
-<ANCHOR id="gst-plugins-base-plugins-videoconvert" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-videoconvert.html">
-<ANCHOR id="gst-plugins-base-plugins-videoconvert.properties" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-videoconvert.html#gst-plugins-base-plugins-videoconvert.properties">
-<ANCHOR id="GstVideoConvert" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-videoconvert.html#GstVideoConvert">
-<ANCHOR id="gst-plugins-base-plugins-videoconvert.other" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-videoconvert.html#gst-plugins-base-plugins-videoconvert.other">
-<ANCHOR id="gst-plugins-base-plugins-videoconvert.object-hierarchy" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-videoconvert.html#gst-plugins-base-plugins-videoconvert.object-hierarchy">
-<ANCHOR id="gst-plugins-base-plugins-videoconvert.description" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-videoconvert.html#gst-plugins-base-plugins-videoconvert.description">
-<ANCHOR id="gst-plugins-base-plugins-videoconvert.functions_details" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-videoconvert.html#gst-plugins-base-plugins-videoconvert.functions_details">
-<ANCHOR id="gst-plugins-base-plugins-videoconvert.other_details" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-videoconvert.html#gst-plugins-base-plugins-videoconvert.other_details">
-<ANCHOR id="GstVideoConvert-struct" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-videoconvert.html#GstVideoConvert-struct">
-<ANCHOR id="gst-plugins-base-plugins-videoconvert.property-details" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-videoconvert.html#gst-plugins-base-plugins-videoconvert.property-details">
-<ANCHOR id="GstVideoConvert--dither" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-videoconvert.html#GstVideoConvert--dither">
 <ANCHOR id="gst-plugins-base-plugins-giosink" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-giosink.html">
 <ANCHOR id="gst-plugins-base-plugins-giosink.properties" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-giosink.html#gst-plugins-base-plugins-giosink.properties">
 <ANCHOR id="GstGioSink" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-giosink.html#GstGioSink">
@@ -311,8 +323,25 @@
 <ANCHOR id="gst-plugins-base-plugins-multifdsink.other_details" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-multifdsink.html#gst-plugins-base-plugins-multifdsink.other_details">
 <ANCHOR id="GstMultiFdSink-struct" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-multifdsink.html#GstMultiFdSink-struct">
 <ANCHOR id="GstRecoverPolicy" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-multifdsink.html#GstRecoverPolicy">
+<ANCHOR id="GST-RECOVER-POLICY-NONE:CAPS" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-multifdsink.html#GST-RECOVER-POLICY-NONE:CAPS">
+<ANCHOR id="GST-RECOVER-POLICY-RESYNC-LATEST:CAPS" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-multifdsink.html#GST-RECOVER-POLICY-RESYNC-LATEST:CAPS">
+<ANCHOR id="GST-RECOVER-POLICY-RESYNC-SOFT-LIMIT:CAPS" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-multifdsink.html#GST-RECOVER-POLICY-RESYNC-SOFT-LIMIT:CAPS">
+<ANCHOR id="GST-RECOVER-POLICY-RESYNC-KEYFRAME:CAPS" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-multifdsink.html#GST-RECOVER-POLICY-RESYNC-KEYFRAME:CAPS">
 <ANCHOR id="GstSyncMethod" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-multifdsink.html#GstSyncMethod">
+<ANCHOR id="GST-SYNC-METHOD-LATEST:CAPS" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-multifdsink.html#GST-SYNC-METHOD-LATEST:CAPS">
+<ANCHOR id="GST-SYNC-METHOD-NEXT-KEYFRAME:CAPS" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-multifdsink.html#GST-SYNC-METHOD-NEXT-KEYFRAME:CAPS">
+<ANCHOR id="GST-SYNC-METHOD-LATEST-KEYFRAME:CAPS" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-multifdsink.html#GST-SYNC-METHOD-LATEST-KEYFRAME:CAPS">
+<ANCHOR id="GST-SYNC-METHOD-BURST:CAPS" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-multifdsink.html#GST-SYNC-METHOD-BURST:CAPS">
+<ANCHOR id="GST-SYNC-METHOD-BURST-KEYFRAME:CAPS" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-multifdsink.html#GST-SYNC-METHOD-BURST-KEYFRAME:CAPS">
+<ANCHOR id="GST-SYNC-METHOD-BURST-WITH-KEYFRAME:CAPS" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-multifdsink.html#GST-SYNC-METHOD-BURST-WITH-KEYFRAME:CAPS">
 <ANCHOR id="GstClientStatus" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-multifdsink.html#GstClientStatus">
+<ANCHOR id="GST-CLIENT-STATUS-OK:CAPS" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-multifdsink.html#GST-CLIENT-STATUS-OK:CAPS">
+<ANCHOR id="GST-CLIENT-STATUS-CLOSED:CAPS" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-multifdsink.html#GST-CLIENT-STATUS-CLOSED:CAPS">
+<ANCHOR id="GST-CLIENT-STATUS-REMOVED:CAPS" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-multifdsink.html#GST-CLIENT-STATUS-REMOVED:CAPS">
+<ANCHOR id="GST-CLIENT-STATUS-SLOW:CAPS" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-multifdsink.html#GST-CLIENT-STATUS-SLOW:CAPS">
+<ANCHOR id="GST-CLIENT-STATUS-ERROR:CAPS" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-multifdsink.html#GST-CLIENT-STATUS-ERROR:CAPS">
+<ANCHOR id="GST-CLIENT-STATUS-DUPLICATE:CAPS" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-multifdsink.html#GST-CLIENT-STATUS-DUPLICATE:CAPS">
+<ANCHOR id="GST-CLIENT-STATUS-FLUSHING:CAPS" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-multifdsink.html#GST-CLIENT-STATUS-FLUSHING:CAPS">
 <ANCHOR id="gst-plugins-base-plugins-multifdsink.property-details" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-multifdsink.html#gst-plugins-base-plugins-multifdsink.property-details">
 <ANCHOR id="GstMultiFdSink--handle-read" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-multifdsink.html#GstMultiFdSink--handle-read">
 <ANCHOR id="gst-plugins-base-plugins-multifdsink.signal-details" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-multifdsink.html#gst-plugins-base-plugins-multifdsink.signal-details">
@@ -335,8 +364,25 @@
 <ANCHOR id="gst-plugins-base-plugins-multisocketsink.other_details" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-multisocketsink.html#gst-plugins-base-plugins-multisocketsink.other_details">
 <ANCHOR id="GstMultiSocketSink-struct" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-multisocketsink.html#GstMultiSocketSink-struct">
 <ANCHOR id="GstRecoverPolicy" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-multisocketsink.html#GstRecoverPolicy">
+<ANCHOR id="GST-RECOVER-POLICY-NONE:CAPS" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-multisocketsink.html#GST-RECOVER-POLICY-NONE:CAPS">
+<ANCHOR id="GST-RECOVER-POLICY-RESYNC-LATEST:CAPS" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-multisocketsink.html#GST-RECOVER-POLICY-RESYNC-LATEST:CAPS">
+<ANCHOR id="GST-RECOVER-POLICY-RESYNC-SOFT-LIMIT:CAPS" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-multisocketsink.html#GST-RECOVER-POLICY-RESYNC-SOFT-LIMIT:CAPS">
+<ANCHOR id="GST-RECOVER-POLICY-RESYNC-KEYFRAME:CAPS" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-multisocketsink.html#GST-RECOVER-POLICY-RESYNC-KEYFRAME:CAPS">
 <ANCHOR id="GstSyncMethod" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-multisocketsink.html#GstSyncMethod">
+<ANCHOR id="GST-SYNC-METHOD-LATEST:CAPS" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-multisocketsink.html#GST-SYNC-METHOD-LATEST:CAPS">
+<ANCHOR id="GST-SYNC-METHOD-NEXT-KEYFRAME:CAPS" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-multisocketsink.html#GST-SYNC-METHOD-NEXT-KEYFRAME:CAPS">
+<ANCHOR id="GST-SYNC-METHOD-LATEST-KEYFRAME:CAPS" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-multisocketsink.html#GST-SYNC-METHOD-LATEST-KEYFRAME:CAPS">
+<ANCHOR id="GST-SYNC-METHOD-BURST:CAPS" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-multisocketsink.html#GST-SYNC-METHOD-BURST:CAPS">
+<ANCHOR id="GST-SYNC-METHOD-BURST-KEYFRAME:CAPS" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-multisocketsink.html#GST-SYNC-METHOD-BURST-KEYFRAME:CAPS">
+<ANCHOR id="GST-SYNC-METHOD-BURST-WITH-KEYFRAME:CAPS" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-multisocketsink.html#GST-SYNC-METHOD-BURST-WITH-KEYFRAME:CAPS">
 <ANCHOR id="GstClientStatus" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-multisocketsink.html#GstClientStatus">
+<ANCHOR id="GST-CLIENT-STATUS-OK:CAPS" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-multisocketsink.html#GST-CLIENT-STATUS-OK:CAPS">
+<ANCHOR id="GST-CLIENT-STATUS-CLOSED:CAPS" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-multisocketsink.html#GST-CLIENT-STATUS-CLOSED:CAPS">
+<ANCHOR id="GST-CLIENT-STATUS-REMOVED:CAPS" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-multisocketsink.html#GST-CLIENT-STATUS-REMOVED:CAPS">
+<ANCHOR id="GST-CLIENT-STATUS-SLOW:CAPS" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-multisocketsink.html#GST-CLIENT-STATUS-SLOW:CAPS">
+<ANCHOR id="GST-CLIENT-STATUS-ERROR:CAPS" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-multisocketsink.html#GST-CLIENT-STATUS-ERROR:CAPS">
+<ANCHOR id="GST-CLIENT-STATUS-DUPLICATE:CAPS" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-multisocketsink.html#GST-CLIENT-STATUS-DUPLICATE:CAPS">
+<ANCHOR id="GST-CLIENT-STATUS-FLUSHING:CAPS" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-multisocketsink.html#GST-CLIENT-STATUS-FLUSHING:CAPS">
 <ANCHOR id="gst-plugins-base-plugins-multisocketsink.signal-details" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-multisocketsink.html#gst-plugins-base-plugins-multisocketsink.signal-details">
 <ANCHOR id="GstMultiSocketSink-add" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-multisocketsink.html#GstMultiSocketSink-add">
 <ANCHOR id="GstMultiSocketSink-add-full" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-multisocketsink.html#GstMultiSocketSink-add-full">
@@ -347,6 +393,10 @@
 <ANCHOR id="GstMultiSocketSink-remove" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-multisocketsink.html#GstMultiSocketSink-remove">
 <ANCHOR id="GstMultiSocketSink-remove-flush" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-multisocketsink.html#GstMultiSocketSink-remove-flush">
 <ANCHOR id="gst-plugins-base-plugins-multisocketsink.see-also" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-multisocketsink.html#gst-plugins-base-plugins-multisocketsink.see-also">
+<ANCHOR id="gst-plugins-base-plugins-oggaviparse" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-oggaviparse.html">
+<ANCHOR id="gst-plugins-base-plugins-oggaviparse.description" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-oggaviparse.html#gst-plugins-base-plugins-oggaviparse.description">
+<ANCHOR id="gst-plugins-base-plugins-oggaviparse.functions_details" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-oggaviparse.html#gst-plugins-base-plugins-oggaviparse.functions_details">
+<ANCHOR id="gst-plugins-base-plugins-oggaviparse.other_details" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-oggaviparse.html#gst-plugins-base-plugins-oggaviparse.other_details">
 <ANCHOR id="gst-plugins-base-plugins-oggdemux" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-oggdemux.html">
 <ANCHOR id="GstOggDemux" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-oggdemux.html#GstOggDemux">
 <ANCHOR id="gst-plugins-base-plugins-oggdemux.other" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-oggdemux.html#gst-plugins-base-plugins-oggdemux.other">
@@ -370,6 +420,22 @@
 <ANCHOR id="GstOggMux--max-page-delay" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-oggmux.html#GstOggMux--max-page-delay">
 <ANCHOR id="GstOggMux--max-tolerance" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-oggmux.html#GstOggMux--max-tolerance">
 <ANCHOR id="GstOggMux--skeleton" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-oggmux.html#GstOggMux--skeleton">
+<ANCHOR id="gst-plugins-base-plugins-oggparse" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-oggparse.html">
+<ANCHOR id="gst-plugins-base-plugins-oggparse.description" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-oggparse.html#gst-plugins-base-plugins-oggparse.description">
+<ANCHOR id="gst-plugins-base-plugins-oggparse.functions_details" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-oggparse.html#gst-plugins-base-plugins-oggparse.functions_details">
+<ANCHOR id="gst-plugins-base-plugins-oggparse.other_details" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-oggparse.html#gst-plugins-base-plugins-oggparse.other_details">
+<ANCHOR id="gst-plugins-base-plugins-ogmaudioparse" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-ogmaudioparse.html">
+<ANCHOR id="gst-plugins-base-plugins-ogmaudioparse.description" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-ogmaudioparse.html#gst-plugins-base-plugins-ogmaudioparse.description">
+<ANCHOR id="gst-plugins-base-plugins-ogmaudioparse.functions_details" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-ogmaudioparse.html#gst-plugins-base-plugins-ogmaudioparse.functions_details">
+<ANCHOR id="gst-plugins-base-plugins-ogmaudioparse.other_details" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-ogmaudioparse.html#gst-plugins-base-plugins-ogmaudioparse.other_details">
+<ANCHOR id="gst-plugins-base-plugins-ogmtextparse" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-ogmtextparse.html">
+<ANCHOR id="gst-plugins-base-plugins-ogmtextparse.description" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-ogmtextparse.html#gst-plugins-base-plugins-ogmtextparse.description">
+<ANCHOR id="gst-plugins-base-plugins-ogmtextparse.functions_details" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-ogmtextparse.html#gst-plugins-base-plugins-ogmtextparse.functions_details">
+<ANCHOR id="gst-plugins-base-plugins-ogmtextparse.other_details" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-ogmtextparse.html#gst-plugins-base-plugins-ogmtextparse.other_details">
+<ANCHOR id="gst-plugins-base-plugins-ogmvideoparse" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-ogmvideoparse.html">
+<ANCHOR id="gst-plugins-base-plugins-ogmvideoparse.description" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-ogmvideoparse.html#gst-plugins-base-plugins-ogmvideoparse.description">
+<ANCHOR id="gst-plugins-base-plugins-ogmvideoparse.functions_details" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-ogmvideoparse.html#gst-plugins-base-plugins-ogmvideoparse.functions_details">
+<ANCHOR id="gst-plugins-base-plugins-ogmvideoparse.other_details" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-ogmvideoparse.html#gst-plugins-base-plugins-ogmvideoparse.other_details">
 <ANCHOR id="gst-plugins-base-plugins-playbin" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-playbin.html">
 <ANCHOR id="gst-plugins-base-plugins-playbin.properties" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-playbin.html#gst-plugins-base-plugins-playbin.properties">
 <ANCHOR id="gst-plugins-base-plugins-playbin.signals" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-playbin.html#gst-plugins-base-plugins-playbin.signals">
@@ -382,6 +448,18 @@
 <ANCHOR id="gst-plugins-base-plugins-playbin.other_details" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-playbin.html#gst-plugins-base-plugins-playbin.other_details">
 <ANCHOR id="GstPlayBin-struct" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-playbin.html#GstPlayBin-struct">
 <ANCHOR id="GstPlayFlags" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-playbin.html#GstPlayFlags">
+<ANCHOR id="GST-PLAY-FLAG-VIDEO:CAPS" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-playbin.html#GST-PLAY-FLAG-VIDEO:CAPS">
+<ANCHOR id="GST-PLAY-FLAG-AUDIO:CAPS" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-playbin.html#GST-PLAY-FLAG-AUDIO:CAPS">
+<ANCHOR id="GST-PLAY-FLAG-TEXT:CAPS" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-playbin.html#GST-PLAY-FLAG-TEXT:CAPS">
+<ANCHOR id="GST-PLAY-FLAG-VIS:CAPS" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-playbin.html#GST-PLAY-FLAG-VIS:CAPS">
+<ANCHOR id="GST-PLAY-FLAG-SOFT-VOLUME:CAPS" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-playbin.html#GST-PLAY-FLAG-SOFT-VOLUME:CAPS">
+<ANCHOR id="GST-PLAY-FLAG-NATIVE-AUDIO:CAPS" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-playbin.html#GST-PLAY-FLAG-NATIVE-AUDIO:CAPS">
+<ANCHOR id="GST-PLAY-FLAG-NATIVE-VIDEO:CAPS" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-playbin.html#GST-PLAY-FLAG-NATIVE-VIDEO:CAPS">
+<ANCHOR id="GST-PLAY-FLAG-DOWNLOAD:CAPS" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-playbin.html#GST-PLAY-FLAG-DOWNLOAD:CAPS">
+<ANCHOR id="GST-PLAY-FLAG-BUFFERING:CAPS" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-playbin.html#GST-PLAY-FLAG-BUFFERING:CAPS">
+<ANCHOR id="GST-PLAY-FLAG-DEINTERLACE:CAPS" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-playbin.html#GST-PLAY-FLAG-DEINTERLACE:CAPS">
+<ANCHOR id="GST-PLAY-FLAG-SOFT-COLORBALANCE:CAPS" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-playbin.html#GST-PLAY-FLAG-SOFT-COLORBALANCE:CAPS">
+<ANCHOR id="GST-PLAY-FLAG-FORCE-FILTERS:CAPS" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-playbin.html#GST-PLAY-FLAG-FORCE-FILTERS:CAPS">
 <ANCHOR id="gst-plugins-base-plugins-playbin.property-details" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-playbin.html#gst-plugins-base-plugins-playbin.property-details">
 <ANCHOR id="GstPlayBin--audio-sink" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-playbin.html#GstPlayBin--audio-sink">
 <ANCHOR id="GstPlayBin--audio-stream-combiner" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-playbin.html#GstPlayBin--audio-stream-combiner">
@@ -415,6 +493,8 @@
 <ANCHOR id="GstPlayBin--volume" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-playbin.html#GstPlayBin--volume">
 <ANCHOR id="GstPlayBin--audio-filter" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-playbin.html#GstPlayBin--audio-filter">
 <ANCHOR id="GstPlayBin--video-filter" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-playbin.html#GstPlayBin--video-filter">
+<ANCHOR id="GstPlayBin--video-multiview-flags" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-playbin.html#GstPlayBin--video-multiview-flags">
+<ANCHOR id="GstPlayBin--video-multiview-mode" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-playbin.html#GstPlayBin--video-multiview-mode">
 <ANCHOR id="gst-plugins-base-plugins-playbin.signal-details" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-playbin.html#gst-plugins-base-plugins-playbin.signal-details">
 <ANCHOR id="GstPlayBin-about-to-finish" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-playbin.html#GstPlayBin-about-to-finish">
 <ANCHOR id="GstPlayBin-audio-changed" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-playbin.html#GstPlayBin-audio-changed">
@@ -461,6 +541,29 @@
 <ANCHOR id="gst-plugins-base-plugins-playsink.signal-details" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-playsink.html#gst-plugins-base-plugins-playsink.signal-details">
 <ANCHOR id="GstPlaySink-convert-sample" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-playsink.html#GstPlaySink-convert-sample">
 <ANCHOR id="GstPlaySink-reconfigure" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-playsink.html#GstPlaySink-reconfigure">
+<ANCHOR id="gst-plugins-base-plugins-socketsrc" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-socketsrc.html">
+<ANCHOR id="gst-plugins-base-plugins-socketsrc.properties" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-socketsrc.html#gst-plugins-base-plugins-socketsrc.properties">
+<ANCHOR id="gst-plugins-base-plugins-socketsrc.signals" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-socketsrc.html#gst-plugins-base-plugins-socketsrc.signals">
+<ANCHOR id="GstSocketSrc" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-socketsrc.html#GstSocketSrc">
+<ANCHOR id="gst-plugins-base-plugins-socketsrc.other" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-socketsrc.html#gst-plugins-base-plugins-socketsrc.other">
+<ANCHOR id="gst-plugins-base-plugins-socketsrc.object-hierarchy" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-socketsrc.html#gst-plugins-base-plugins-socketsrc.object-hierarchy">
+<ANCHOR id="gst-plugins-base-plugins-socketsrc.description" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-socketsrc.html#gst-plugins-base-plugins-socketsrc.description">
+<ANCHOR id="gst-plugins-base-plugins-socketsrc.functions_details" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-socketsrc.html#gst-plugins-base-plugins-socketsrc.functions_details">
+<ANCHOR id="gst-plugins-base-plugins-socketsrc.other_details" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-socketsrc.html#gst-plugins-base-plugins-socketsrc.other_details">
+<ANCHOR id="GstSocketSrc-struct" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-socketsrc.html#GstSocketSrc-struct">
+<ANCHOR id="gst-plugins-base-plugins-socketsrc.property-details" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-socketsrc.html#gst-plugins-base-plugins-socketsrc.property-details">
+<ANCHOR id="GstSocketSrc--socket" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-socketsrc.html#GstSocketSrc--socket">
+<ANCHOR id="GstSocketSrc--caps" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-socketsrc.html#GstSocketSrc--caps">
+<ANCHOR id="gst-plugins-base-plugins-socketsrc.signal-details" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-socketsrc.html#gst-plugins-base-plugins-socketsrc.signal-details">
+<ANCHOR id="GstSocketSrc-connection-closed-by-peer" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-socketsrc.html#GstSocketSrc-connection-closed-by-peer">
+<ANCHOR id="gst-plugins-base-plugins-ssaparse" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-ssaparse.html">
+<ANCHOR id="GstSsaParse" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-ssaparse.html#GstSsaParse">
+<ANCHOR id="gst-plugins-base-plugins-ssaparse.other" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-ssaparse.html#gst-plugins-base-plugins-ssaparse.other">
+<ANCHOR id="gst-plugins-base-plugins-ssaparse.object-hierarchy" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-ssaparse.html#gst-plugins-base-plugins-ssaparse.object-hierarchy">
+<ANCHOR id="gst-plugins-base-plugins-ssaparse.description" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-ssaparse.html#gst-plugins-base-plugins-ssaparse.description">
+<ANCHOR id="gst-plugins-base-plugins-ssaparse.functions_details" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-ssaparse.html#gst-plugins-base-plugins-ssaparse.functions_details">
+<ANCHOR id="gst-plugins-base-plugins-ssaparse.other_details" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-ssaparse.html#gst-plugins-base-plugins-ssaparse.other_details">
+<ANCHOR id="GstSsaParse-struct" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-ssaparse.html#GstSsaParse-struct">
 <ANCHOR id="gst-plugins-base-plugins-streamsynchronizer" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-streamsynchronizer.html">
 <ANCHOR id="GstStreamSynchronizer" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-streamsynchronizer.html#GstStreamSynchronizer">
 <ANCHOR id="gst-plugins-base-plugins-streamsynchronizer.other" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-streamsynchronizer.html#gst-plugins-base-plugins-streamsynchronizer.other">
@@ -469,6 +572,18 @@
 <ANCHOR id="gst-plugins-base-plugins-streamsynchronizer.functions_details" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-streamsynchronizer.html#gst-plugins-base-plugins-streamsynchronizer.functions_details">
 <ANCHOR id="gst-plugins-base-plugins-streamsynchronizer.other_details" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-streamsynchronizer.html#gst-plugins-base-plugins-streamsynchronizer.other_details">
 <ANCHOR id="GstStreamSynchronizer-struct" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-streamsynchronizer.html#GstStreamSynchronizer-struct">
+<ANCHOR id="gst-plugins-base-plugins-subparse" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-subparse.html">
+<ANCHOR id="gst-plugins-base-plugins-subparse.properties" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-subparse.html#gst-plugins-base-plugins-subparse.properties">
+<ANCHOR id="GstSubParse" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-subparse.html#GstSubParse">
+<ANCHOR id="gst-plugins-base-plugins-subparse.other" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-subparse.html#gst-plugins-base-plugins-subparse.other">
+<ANCHOR id="gst-plugins-base-plugins-subparse.object-hierarchy" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-subparse.html#gst-plugins-base-plugins-subparse.object-hierarchy">
+<ANCHOR id="gst-plugins-base-plugins-subparse.description" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-subparse.html#gst-plugins-base-plugins-subparse.description">
+<ANCHOR id="gst-plugins-base-plugins-subparse.functions_details" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-subparse.html#gst-plugins-base-plugins-subparse.functions_details">
+<ANCHOR id="gst-plugins-base-plugins-subparse.other_details" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-subparse.html#gst-plugins-base-plugins-subparse.other_details">
+<ANCHOR id="GstSubParse-struct" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-subparse.html#GstSubParse-struct">
+<ANCHOR id="gst-plugins-base-plugins-subparse.property-details" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-subparse.html#gst-plugins-base-plugins-subparse.property-details">
+<ANCHOR id="GstSubParse--subtitle-encoding" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-subparse.html#GstSubParse--subtitle-encoding">
+<ANCHOR id="GstSubParse--video-fps" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-subparse.html#GstSubParse--video-fps">
 <ANCHOR id="gst-plugins-base-plugins-subtitleoverlay" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-subtitleoverlay.html">
 <ANCHOR id="gst-plugins-base-plugins-subtitleoverlay.properties" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-subtitleoverlay.html#gst-plugins-base-plugins-subtitleoverlay.properties">
 <ANCHOR id="GstSubtitleOverlay" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-subtitleoverlay.html#GstSubtitleOverlay">
@@ -483,19 +598,6 @@
 <ANCHOR id="GstSubtitleOverlay--font-desc" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-subtitleoverlay.html#GstSubtitleOverlay--font-desc">
 <ANCHOR id="GstSubtitleOverlay--silent" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-subtitleoverlay.html#GstSubtitleOverlay--silent">
 <ANCHOR id="GstSubtitleOverlay--subtitle-encoding" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-subtitleoverlay.html#GstSubtitleOverlay--subtitle-encoding">
-<ANCHOR id="gst-plugins-base-plugins-tcpclientsrc" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-tcpclientsrc.html">
-<ANCHOR id="gst-plugins-base-plugins-tcpclientsrc.properties" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-tcpclientsrc.html#gst-plugins-base-plugins-tcpclientsrc.properties">
-<ANCHOR id="GstTCPClientSrc" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-tcpclientsrc.html#GstTCPClientSrc">
-<ANCHOR id="gst-plugins-base-plugins-tcpclientsrc.other" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-tcpclientsrc.html#gst-plugins-base-plugins-tcpclientsrc.other">
-<ANCHOR id="gst-plugins-base-plugins-tcpclientsrc.object-hierarchy" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-tcpclientsrc.html#gst-plugins-base-plugins-tcpclientsrc.object-hierarchy">
-<ANCHOR id="gst-plugins-base-plugins-tcpclientsrc.description" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-tcpclientsrc.html#gst-plugins-base-plugins-tcpclientsrc.description">
-<ANCHOR id="gst-plugins-base-plugins-tcpclientsrc.functions_details" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-tcpclientsrc.html#gst-plugins-base-plugins-tcpclientsrc.functions_details">
-<ANCHOR id="gst-plugins-base-plugins-tcpclientsrc.other_details" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-tcpclientsrc.html#gst-plugins-base-plugins-tcpclientsrc.other_details">
-<ANCHOR id="GstTCPClientSrc-struct" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-tcpclientsrc.html#GstTCPClientSrc-struct">
-<ANCHOR id="gst-plugins-base-plugins-tcpclientsrc.property-details" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-tcpclientsrc.html#gst-plugins-base-plugins-tcpclientsrc.property-details">
-<ANCHOR id="GstTCPClientSrc--host" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-tcpclientsrc.html#GstTCPClientSrc--host">
-<ANCHOR id="GstTCPClientSrc--port" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-tcpclientsrc.html#GstTCPClientSrc--port">
-<ANCHOR id="gst-plugins-base-plugins-tcpclientsrc.see-also" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-tcpclientsrc.html#gst-plugins-base-plugins-tcpclientsrc.see-also">
 <ANCHOR id="gst-plugins-base-plugins-tcpclientsink" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-tcpclientsink.html">
 <ANCHOR id="gst-plugins-base-plugins-tcpclientsink.properties" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-tcpclientsink.html#gst-plugins-base-plugins-tcpclientsink.properties">
 <ANCHOR id="GstTCPClientSink" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-tcpclientsink.html#GstTCPClientSink">
@@ -509,20 +611,19 @@
 <ANCHOR id="GstTCPClientSink--host" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-tcpclientsink.html#GstTCPClientSink--host">
 <ANCHOR id="GstTCPClientSink--port" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-tcpclientsink.html#GstTCPClientSink--port">
 <ANCHOR id="gst-plugins-base-plugins-tcpclientsink.see-also" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-tcpclientsink.html#gst-plugins-base-plugins-tcpclientsink.see-also">
-<ANCHOR id="gst-plugins-base-plugins-tcpserversrc" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-tcpserversrc.html">
-<ANCHOR id="gst-plugins-base-plugins-tcpserversrc.properties" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-tcpserversrc.html#gst-plugins-base-plugins-tcpserversrc.properties">
-<ANCHOR id="GstTCPServerSrc" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-tcpserversrc.html#GstTCPServerSrc">
-<ANCHOR id="gst-plugins-base-plugins-tcpserversrc.other" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-tcpserversrc.html#gst-plugins-base-plugins-tcpserversrc.other">
-<ANCHOR id="gst-plugins-base-plugins-tcpserversrc.object-hierarchy" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-tcpserversrc.html#gst-plugins-base-plugins-tcpserversrc.object-hierarchy">
-<ANCHOR id="gst-plugins-base-plugins-tcpserversrc.description" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-tcpserversrc.html#gst-plugins-base-plugins-tcpserversrc.description">
-<ANCHOR id="gst-plugins-base-plugins-tcpserversrc.functions_details" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-tcpserversrc.html#gst-plugins-base-plugins-tcpserversrc.functions_details">
-<ANCHOR id="gst-plugins-base-plugins-tcpserversrc.other_details" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-tcpserversrc.html#gst-plugins-base-plugins-tcpserversrc.other_details">
-<ANCHOR id="GstTCPServerSrc-struct" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-tcpserversrc.html#GstTCPServerSrc-struct">
-<ANCHOR id="gst-plugins-base-plugins-tcpserversrc.property-details" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-tcpserversrc.html#gst-plugins-base-plugins-tcpserversrc.property-details">
-<ANCHOR id="GstTCPServerSrc--current-port" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-tcpserversrc.html#GstTCPServerSrc--current-port">
-<ANCHOR id="GstTCPServerSrc--host" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-tcpserversrc.html#GstTCPServerSrc--host">
-<ANCHOR id="GstTCPServerSrc--port" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-tcpserversrc.html#GstTCPServerSrc--port">
-<ANCHOR id="gst-plugins-base-plugins-tcpserversrc.see-also" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-tcpserversrc.html#gst-plugins-base-plugins-tcpserversrc.see-also">
+<ANCHOR id="gst-plugins-base-plugins-tcpclientsrc" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-tcpclientsrc.html">
+<ANCHOR id="gst-plugins-base-plugins-tcpclientsrc.properties" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-tcpclientsrc.html#gst-plugins-base-plugins-tcpclientsrc.properties">
+<ANCHOR id="GstTCPClientSrc" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-tcpclientsrc.html#GstTCPClientSrc">
+<ANCHOR id="gst-plugins-base-plugins-tcpclientsrc.other" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-tcpclientsrc.html#gst-plugins-base-plugins-tcpclientsrc.other">
+<ANCHOR id="gst-plugins-base-plugins-tcpclientsrc.object-hierarchy" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-tcpclientsrc.html#gst-plugins-base-plugins-tcpclientsrc.object-hierarchy">
+<ANCHOR id="gst-plugins-base-plugins-tcpclientsrc.description" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-tcpclientsrc.html#gst-plugins-base-plugins-tcpclientsrc.description">
+<ANCHOR id="gst-plugins-base-plugins-tcpclientsrc.functions_details" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-tcpclientsrc.html#gst-plugins-base-plugins-tcpclientsrc.functions_details">
+<ANCHOR id="gst-plugins-base-plugins-tcpclientsrc.other_details" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-tcpclientsrc.html#gst-plugins-base-plugins-tcpclientsrc.other_details">
+<ANCHOR id="GstTCPClientSrc-struct" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-tcpclientsrc.html#GstTCPClientSrc-struct">
+<ANCHOR id="gst-plugins-base-plugins-tcpclientsrc.property-details" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-tcpclientsrc.html#gst-plugins-base-plugins-tcpclientsrc.property-details">
+<ANCHOR id="GstTCPClientSrc--host" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-tcpclientsrc.html#GstTCPClientSrc--host">
+<ANCHOR id="GstTCPClientSrc--port" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-tcpclientsrc.html#GstTCPClientSrc--port">
+<ANCHOR id="gst-plugins-base-plugins-tcpclientsrc.see-also" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-tcpclientsrc.html#gst-plugins-base-plugins-tcpclientsrc.see-also">
 <ANCHOR id="gst-plugins-base-plugins-tcpserversink" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-tcpserversink.html">
 <ANCHOR id="gst-plugins-base-plugins-tcpserversink.properties" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-tcpserversink.html#gst-plugins-base-plugins-tcpserversink.properties">
 <ANCHOR id="GstTCPServerSink" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-tcpserversink.html#GstTCPServerSink">
@@ -537,6 +638,20 @@
 <ANCHOR id="GstTCPServerSink--host" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-tcpserversink.html#GstTCPServerSink--host">
 <ANCHOR id="GstTCPServerSink--port" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-tcpserversink.html#GstTCPServerSink--port">
 <ANCHOR id="gst-plugins-base-plugins-tcpserversink.see-also" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-tcpserversink.html#gst-plugins-base-plugins-tcpserversink.see-also">
+<ANCHOR id="gst-plugins-base-plugins-tcpserversrc" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-tcpserversrc.html">
+<ANCHOR id="gst-plugins-base-plugins-tcpserversrc.properties" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-tcpserversrc.html#gst-plugins-base-plugins-tcpserversrc.properties">
+<ANCHOR id="GstTCPServerSrc" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-tcpserversrc.html#GstTCPServerSrc">
+<ANCHOR id="gst-plugins-base-plugins-tcpserversrc.other" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-tcpserversrc.html#gst-plugins-base-plugins-tcpserversrc.other">
+<ANCHOR id="gst-plugins-base-plugins-tcpserversrc.object-hierarchy" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-tcpserversrc.html#gst-plugins-base-plugins-tcpserversrc.object-hierarchy">
+<ANCHOR id="gst-plugins-base-plugins-tcpserversrc.description" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-tcpserversrc.html#gst-plugins-base-plugins-tcpserversrc.description">
+<ANCHOR id="gst-plugins-base-plugins-tcpserversrc.functions_details" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-tcpserversrc.html#gst-plugins-base-plugins-tcpserversrc.functions_details">
+<ANCHOR id="gst-plugins-base-plugins-tcpserversrc.other_details" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-tcpserversrc.html#gst-plugins-base-plugins-tcpserversrc.other_details">
+<ANCHOR id="GstTCPServerSrc-struct" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-tcpserversrc.html#GstTCPServerSrc-struct">
+<ANCHOR id="gst-plugins-base-plugins-tcpserversrc.property-details" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-tcpserversrc.html#gst-plugins-base-plugins-tcpserversrc.property-details">
+<ANCHOR id="GstTCPServerSrc--current-port" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-tcpserversrc.html#GstTCPServerSrc--current-port">
+<ANCHOR id="GstTCPServerSrc--host" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-tcpserversrc.html#GstTCPServerSrc--host">
+<ANCHOR id="GstTCPServerSrc--port" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-tcpserversrc.html#GstTCPServerSrc--port">
+<ANCHOR id="gst-plugins-base-plugins-tcpserversrc.see-also" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-tcpserversrc.html#gst-plugins-base-plugins-tcpserversrc.see-also">
 <ANCHOR id="gst-plugins-base-plugins-textoverlay" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-textoverlay.html">
 <ANCHOR id="GstTextOverlay" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-textoverlay.html#GstTextOverlay">
 <ANCHOR id="gst-plugins-base-plugins-textoverlay.other" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-textoverlay.html#gst-plugins-base-plugins-textoverlay.other">
@@ -579,6 +694,10 @@
 <ANCHOR id="gst-plugins-base-plugins-theoraenc.functions_details" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-theoraenc.html#gst-plugins-base-plugins-theoraenc.functions_details">
 <ANCHOR id="gst-plugins-base-plugins-theoraenc.other_details" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-theoraenc.html#gst-plugins-base-plugins-theoraenc.other_details">
 <ANCHOR id="GstTheoraEnc-struct" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-theoraenc.html#GstTheoraEnc-struct">
+<ANCHOR id="GstTheoraEncMultipassMode" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-theoraenc.html#GstTheoraEncMultipassMode">
+<ANCHOR id="MULTIPASS-MODE-SINGLE-PASS:CAPS" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-theoraenc.html#MULTIPASS-MODE-SINGLE-PASS:CAPS">
+<ANCHOR id="MULTIPASS-MODE-FIRST-PASS:CAPS" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-theoraenc.html#MULTIPASS-MODE-FIRST-PASS:CAPS">
+<ANCHOR id="MULTIPASS-MODE-SECOND-PASS:CAPS" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-theoraenc.html#MULTIPASS-MODE-SECOND-PASS:CAPS">
 <ANCHOR id="gst-plugins-base-plugins-theoraenc.property-details" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-theoraenc.html#gst-plugins-base-plugins-theoraenc.property-details">
 <ANCHOR id="GstTheoraEnc--bitrate" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-theoraenc.html#GstTheoraEnc--bitrate">
 <ANCHOR id="GstTheoraEnc--cap-overflow" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-theoraenc.html#GstTheoraEnc--cap-overflow">
@@ -602,6 +721,7 @@
 <ANCHOR id="gst-plugins-base-plugins-theoraparse.other_details" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-theoraparse.html#gst-plugins-base-plugins-theoraparse.other_details">
 <ANCHOR id="GstTheoraParse-struct" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-theoraparse.html#GstTheoraParse-struct">
 <ANCHOR id="gst-plugins-base-plugins-timeoverlay" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-timeoverlay.html">
+<ANCHOR id="gst-plugins-base-plugins-timeoverlay.properties" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-timeoverlay.html#gst-plugins-base-plugins-timeoverlay.properties">
 <ANCHOR id="GstTimeOverlay" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-timeoverlay.html#GstTimeOverlay">
 <ANCHOR id="gst-plugins-base-plugins-timeoverlay.other" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-timeoverlay.html#gst-plugins-base-plugins-timeoverlay.other">
 <ANCHOR id="gst-plugins-base-plugins-timeoverlay.object-hierarchy" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-timeoverlay.html#gst-plugins-base-plugins-timeoverlay.object-hierarchy">
@@ -609,6 +729,12 @@
 <ANCHOR id="gst-plugins-base-plugins-timeoverlay.functions_details" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-timeoverlay.html#gst-plugins-base-plugins-timeoverlay.functions_details">
 <ANCHOR id="gst-plugins-base-plugins-timeoverlay.other_details" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-timeoverlay.html#gst-plugins-base-plugins-timeoverlay.other_details">
 <ANCHOR id="GstTimeOverlay-struct" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-timeoverlay.html#GstTimeOverlay-struct">
+<ANCHOR id="GstTimeOverlayTimeLine" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-timeoverlay.html#GstTimeOverlayTimeLine">
+<ANCHOR id="GST-TIME-OVERLAY-TIME-LINE-BUFFER-TIME:CAPS" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-timeoverlay.html#GST-TIME-OVERLAY-TIME-LINE-BUFFER-TIME:CAPS">
+<ANCHOR id="GST-TIME-OVERLAY-TIME-LINE-STREAM-TIME:CAPS" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-timeoverlay.html#GST-TIME-OVERLAY-TIME-LINE-STREAM-TIME:CAPS">
+<ANCHOR id="GST-TIME-OVERLAY-TIME-LINE-RUNNING-TIME:CAPS" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-timeoverlay.html#GST-TIME-OVERLAY-TIME-LINE-RUNNING-TIME:CAPS">
+<ANCHOR id="gst-plugins-base-plugins-timeoverlay.property-details" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-timeoverlay.html#gst-plugins-base-plugins-timeoverlay.property-details">
+<ANCHOR id="GstTimeOverlay--time-mode" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-timeoverlay.html#GstTimeOverlay--time-mode">
 <ANCHOR id="gst-plugins-base-plugins-uridecodebin" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-uridecodebin.html">
 <ANCHOR id="gst-plugins-base-plugins-uridecodebin.properties" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-uridecodebin.html#gst-plugins-base-plugins-uridecodebin.properties">
 <ANCHOR id="gst-plugins-base-plugins-uridecodebin.signals" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-uridecodebin.html#gst-plugins-base-plugins-uridecodebin.signals">
@@ -621,6 +747,9 @@
 <ANCHOR id="gst-plugins-base-plugins-uridecodebin.other_details" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-uridecodebin.html#gst-plugins-base-plugins-uridecodebin.other_details">
 <ANCHOR id="GstURIDecodeBin-struct" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-uridecodebin.html#GstURIDecodeBin-struct">
 <ANCHOR id="GstAutoplugSelectResult" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-uridecodebin.html#GstAutoplugSelectResult">
+<ANCHOR id="GST-AUTOPLUG-SELECT-TRY:CAPS" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-uridecodebin.html#GST-AUTOPLUG-SELECT-TRY:CAPS">
+<ANCHOR id="GST-AUTOPLUG-SELECT-EXPOSE:CAPS" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-uridecodebin.html#GST-AUTOPLUG-SELECT-EXPOSE:CAPS">
+<ANCHOR id="GST-AUTOPLUG-SELECT-SKIP:CAPS" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-uridecodebin.html#GST-AUTOPLUG-SELECT-SKIP:CAPS">
 <ANCHOR id="gst-plugins-base-plugins-uridecodebin.property-details" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-uridecodebin.html#gst-plugins-base-plugins-uridecodebin.property-details">
 <ANCHOR id="GstURIDecodeBin--buffer-duration" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-uridecodebin.html#GstURIDecodeBin--buffer-duration">
 <ANCHOR id="GstURIDecodeBin--buffer-size" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-uridecodebin.html#GstURIDecodeBin--buffer-size">
@@ -642,6 +771,25 @@
 <ANCHOR id="GstURIDecodeBin-drained" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-uridecodebin.html#GstURIDecodeBin-drained">
 <ANCHOR id="GstURIDecodeBin-source-setup" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-uridecodebin.html#GstURIDecodeBin-source-setup">
 <ANCHOR id="GstURIDecodeBin-unknown-type" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-uridecodebin.html#GstURIDecodeBin-unknown-type">
+<ANCHOR id="gst-plugins-base-plugins-videoconvert" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-videoconvert.html">
+<ANCHOR id="gst-plugins-base-plugins-videoconvert.properties" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-videoconvert.html#gst-plugins-base-plugins-videoconvert.properties">
+<ANCHOR id="GstVideoConvert" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-videoconvert.html#GstVideoConvert">
+<ANCHOR id="gst-plugins-base-plugins-videoconvert.other" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-videoconvert.html#gst-plugins-base-plugins-videoconvert.other">
+<ANCHOR id="gst-plugins-base-plugins-videoconvert.object-hierarchy" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-videoconvert.html#gst-plugins-base-plugins-videoconvert.object-hierarchy">
+<ANCHOR id="gst-plugins-base-plugins-videoconvert.description" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-videoconvert.html#gst-plugins-base-plugins-videoconvert.description">
+<ANCHOR id="gst-plugins-base-plugins-videoconvert.functions_details" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-videoconvert.html#gst-plugins-base-plugins-videoconvert.functions_details">
+<ANCHOR id="gst-plugins-base-plugins-videoconvert.other_details" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-videoconvert.html#gst-plugins-base-plugins-videoconvert.other_details">
+<ANCHOR id="GstVideoConvert-struct" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-videoconvert.html#GstVideoConvert-struct">
+<ANCHOR id="gst-plugins-base-plugins-videoconvert.property-details" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-videoconvert.html#gst-plugins-base-plugins-videoconvert.property-details">
+<ANCHOR id="GstVideoConvert--dither" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-videoconvert.html#GstVideoConvert--dither">
+<ANCHOR id="GstVideoConvert--alpha-mode" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-videoconvert.html#GstVideoConvert--alpha-mode">
+<ANCHOR id="GstVideoConvert--alpha-value" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-videoconvert.html#GstVideoConvert--alpha-value">
+<ANCHOR id="GstVideoConvert--chroma-mode" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-videoconvert.html#GstVideoConvert--chroma-mode">
+<ANCHOR id="GstVideoConvert--chroma-resampler" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-videoconvert.html#GstVideoConvert--chroma-resampler">
+<ANCHOR id="GstVideoConvert--dither-quantization" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-videoconvert.html#GstVideoConvert--dither-quantization">
+<ANCHOR id="GstVideoConvert--gamma-mode" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-videoconvert.html#GstVideoConvert--gamma-mode">
+<ANCHOR id="GstVideoConvert--matrix-mode" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-videoconvert.html#GstVideoConvert--matrix-mode">
+<ANCHOR id="GstVideoConvert--primaries-mode" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-videoconvert.html#GstVideoConvert--primaries-mode">
 <ANCHOR id="gst-plugins-base-plugins-videorate" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-videorate.html">
 <ANCHOR id="gst-plugins-base-plugins-videorate.properties" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-videorate.html#gst-plugins-base-plugins-videorate.properties">
 <ANCHOR id="GstVideoRate" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-videorate.html#GstVideoRate">
@@ -672,6 +820,16 @@
 <ANCHOR id="gst-plugins-base-plugins-videoscale.other_details" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-videoscale.html#gst-plugins-base-plugins-videoscale.other_details">
 <ANCHOR id="GstVideoScale-struct" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-videoscale.html#GstVideoScale-struct">
 <ANCHOR id="GstVideoScaleMethod" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-videoscale.html#GstVideoScaleMethod">
+<ANCHOR id="GST-VIDEO-SCALE-NEAREST:CAPS" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-videoscale.html#GST-VIDEO-SCALE-NEAREST:CAPS">
+<ANCHOR id="GST-VIDEO-SCALE-BILINEAR:CAPS" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-videoscale.html#GST-VIDEO-SCALE-BILINEAR:CAPS">
+<ANCHOR id="GST-VIDEO-SCALE-4TAP:CAPS" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-videoscale.html#GST-VIDEO-SCALE-4TAP:CAPS">
+<ANCHOR id="GST-VIDEO-SCALE-LANCZOS:CAPS" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-videoscale.html#GST-VIDEO-SCALE-LANCZOS:CAPS">
+<ANCHOR id="GST-VIDEO-SCALE-BILINEAR2:CAPS" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-videoscale.html#GST-VIDEO-SCALE-BILINEAR2:CAPS">
+<ANCHOR id="GST-VIDEO-SCALE-SINC:CAPS" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-videoscale.html#GST-VIDEO-SCALE-SINC:CAPS">
+<ANCHOR id="GST-VIDEO-SCALE-HERMITE:CAPS" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-videoscale.html#GST-VIDEO-SCALE-HERMITE:CAPS">
+<ANCHOR id="GST-VIDEO-SCALE-SPLINE:CAPS" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-videoscale.html#GST-VIDEO-SCALE-SPLINE:CAPS">
+<ANCHOR id="GST-VIDEO-SCALE-CATROM:CAPS" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-videoscale.html#GST-VIDEO-SCALE-CATROM:CAPS">
+<ANCHOR id="GST-VIDEO-SCALE-MITCHELL:CAPS" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-videoscale.html#GST-VIDEO-SCALE-MITCHELL:CAPS">
 <ANCHOR id="gst-plugins-base-plugins-videoscale.property-details" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-videoscale.html#gst-plugins-base-plugins-videoscale.property-details">
 <ANCHOR id="GstVideoScale--add-borders" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-videoscale.html#GstVideoScale--add-borders">
 <ANCHOR id="GstVideoScale--dither" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-videoscale.html#GstVideoScale--dither">
@@ -679,6 +837,7 @@
 <ANCHOR id="GstVideoScale--method" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-videoscale.html#GstVideoScale--method">
 <ANCHOR id="GstVideoScale--sharpen" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-videoscale.html#GstVideoScale--sharpen">
 <ANCHOR id="GstVideoScale--sharpness" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-videoscale.html#GstVideoScale--sharpness">
+<ANCHOR id="GstVideoScale--gamma-decode" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-videoscale.html#GstVideoScale--gamma-decode">
 <ANCHOR id="gst-plugins-base-plugins-videoscale.see-also" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-videoscale.html#gst-plugins-base-plugins-videoscale.see-also">
 <ANCHOR id="gst-plugins-base-plugins-videotestsrc" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-videotestsrc.html">
 <ANCHOR id="gst-plugins-base-plugins-videotestsrc.properties" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-videotestsrc.html#gst-plugins-base-plugins-videotestsrc.properties">
@@ -690,6 +849,31 @@
 <ANCHOR id="gst-plugins-base-plugins-videotestsrc.other_details" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-videotestsrc.html#gst-plugins-base-plugins-videotestsrc.other_details">
 <ANCHOR id="GstVideoTestSrc-struct" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-videotestsrc.html#GstVideoTestSrc-struct">
 <ANCHOR id="GstVideoTestSrcPattern" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-videotestsrc.html#GstVideoTestSrcPattern">
+<ANCHOR id="GST-VIDEO-TEST-SRC-SMPTE:CAPS" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-videotestsrc.html#GST-VIDEO-TEST-SRC-SMPTE:CAPS">
+<ANCHOR id="GST-VIDEO-TEST-SRC-SNOW:CAPS" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-videotestsrc.html#GST-VIDEO-TEST-SRC-SNOW:CAPS">
+<ANCHOR id="GST-VIDEO-TEST-SRC-BLACK:CAPS" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-videotestsrc.html#GST-VIDEO-TEST-SRC-BLACK:CAPS">
+<ANCHOR id="GST-VIDEO-TEST-SRC-WHITE:CAPS" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-videotestsrc.html#GST-VIDEO-TEST-SRC-WHITE:CAPS">
+<ANCHOR id="GST-VIDEO-TEST-SRC-RED:CAPS" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-videotestsrc.html#GST-VIDEO-TEST-SRC-RED:CAPS">
+<ANCHOR id="GST-VIDEO-TEST-SRC-GREEN:CAPS" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-videotestsrc.html#GST-VIDEO-TEST-SRC-GREEN:CAPS">
+<ANCHOR id="GST-VIDEO-TEST-SRC-BLUE:CAPS" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-videotestsrc.html#GST-VIDEO-TEST-SRC-BLUE:CAPS">
+<ANCHOR id="GST-VIDEO-TEST-SRC-CHECKERS1:CAPS" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-videotestsrc.html#GST-VIDEO-TEST-SRC-CHECKERS1:CAPS">
+<ANCHOR id="GST-VIDEO-TEST-SRC-CHECKERS2:CAPS" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-videotestsrc.html#GST-VIDEO-TEST-SRC-CHECKERS2:CAPS">
+<ANCHOR id="GST-VIDEO-TEST-SRC-CHECKERS4:CAPS" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-videotestsrc.html#GST-VIDEO-TEST-SRC-CHECKERS4:CAPS">
+<ANCHOR id="GST-VIDEO-TEST-SRC-CHECKERS8:CAPS" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-videotestsrc.html#GST-VIDEO-TEST-SRC-CHECKERS8:CAPS">
+<ANCHOR id="GST-VIDEO-TEST-SRC-CIRCULAR:CAPS" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-videotestsrc.html#GST-VIDEO-TEST-SRC-CIRCULAR:CAPS">
+<ANCHOR id="GST-VIDEO-TEST-SRC-BLINK:CAPS" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-videotestsrc.html#GST-VIDEO-TEST-SRC-BLINK:CAPS">
+<ANCHOR id="GST-VIDEO-TEST-SRC-SMPTE75:CAPS" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-videotestsrc.html#GST-VIDEO-TEST-SRC-SMPTE75:CAPS">
+<ANCHOR id="GST-VIDEO-TEST-SRC-ZONE-PLATE:CAPS" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-videotestsrc.html#GST-VIDEO-TEST-SRC-ZONE-PLATE:CAPS">
+<ANCHOR id="GST-VIDEO-TEST-SRC-GAMUT:CAPS" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-videotestsrc.html#GST-VIDEO-TEST-SRC-GAMUT:CAPS">
+<ANCHOR id="GST-VIDEO-TEST-SRC-CHROMA-ZONE-PLATE:CAPS" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-videotestsrc.html#GST-VIDEO-TEST-SRC-CHROMA-ZONE-PLATE:CAPS">
+<ANCHOR id="GST-VIDEO-TEST-SRC-SOLID:CAPS" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-videotestsrc.html#GST-VIDEO-TEST-SRC-SOLID:CAPS">
+<ANCHOR id="GST-VIDEO-TEST-SRC-BALL:CAPS" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-videotestsrc.html#GST-VIDEO-TEST-SRC-BALL:CAPS">
+<ANCHOR id="GST-VIDEO-TEST-SRC-SMPTE100:CAPS" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-videotestsrc.html#GST-VIDEO-TEST-SRC-SMPTE100:CAPS">
+<ANCHOR id="GST-VIDEO-TEST-SRC-BAR:CAPS" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-videotestsrc.html#GST-VIDEO-TEST-SRC-BAR:CAPS">
+<ANCHOR id="GST-VIDEO-TEST-SRC-PINWHEEL:CAPS" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-videotestsrc.html#GST-VIDEO-TEST-SRC-PINWHEEL:CAPS">
+<ANCHOR id="GST-VIDEO-TEST-SRC-SPOKES:CAPS" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-videotestsrc.html#GST-VIDEO-TEST-SRC-SPOKES:CAPS">
+<ANCHOR id="GST-VIDEO-TEST-SRC-GRADIENT:CAPS" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-videotestsrc.html#GST-VIDEO-TEST-SRC-GRADIENT:CAPS">
+<ANCHOR id="GST-VIDEO-TEST-SRC-COLORS:CAPS" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-videotestsrc.html#GST-VIDEO-TEST-SRC-COLORS:CAPS">
 <ANCHOR id="gst-plugins-base-plugins-videotestsrc.property-details" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-videotestsrc.html#gst-plugins-base-plugins-videotestsrc.property-details">
 <ANCHOR id="GstVideoTestSrc--background-color" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-videotestsrc.html#GstVideoTestSrc--background-color">
 <ANCHOR id="GstVideoTestSrc--foreground-color" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-videotestsrc.html#GstVideoTestSrc--foreground-color">
@@ -830,10 +1014,10 @@
 <ANCHOR id="plugin-cdparanoia" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-plugin-cdparanoia.html#plugin-cdparanoia">
 <ANCHOR id="gst-plugins-base-plugins-plugin-encoding" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-plugin-encoding.html">
 <ANCHOR id="plugin-encoding" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-plugin-encoding.html#plugin-encoding">
-<ANCHOR id="gst-plugins-base-plugins-plugin-videoconvert" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-plugin-videoconvert.html">
-<ANCHOR id="plugin-videoconvert" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-plugin-videoconvert.html#plugin-videoconvert">
 <ANCHOR id="gst-plugins-base-plugins-plugin-gio" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-plugin-gio.html">
 <ANCHOR id="plugin-gio" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-plugin-gio.html#plugin-gio">
+<ANCHOR id="gst-plugins-base-plugins-plugin-ivorbisdec" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-plugin-ivorbisdec.html">
+<ANCHOR id="plugin-ivorbisdec" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-plugin-ivorbisdec.html#plugin-ivorbisdec">
 <ANCHOR id="gst-plugins-base-plugins-plugin-libvisual" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-plugin-libvisual.html">
 <ANCHOR id="plugin-libvisual" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-plugin-libvisual.html#plugin-libvisual">
 <ANCHOR id="gst-plugins-base-plugins-plugin-ogg" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-plugin-ogg.html">
@@ -850,6 +1034,8 @@
 <ANCHOR id="plugin-theora" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-plugin-theora.html#plugin-theora">
 <ANCHOR id="gst-plugins-base-plugins-plugin-typefindfunctions" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-plugin-typefindfunctions.html">
 <ANCHOR id="plugin-typefindfunctions" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-plugin-typefindfunctions.html#plugin-typefindfunctions">
+<ANCHOR id="gst-plugins-base-plugins-plugin-videoconvert" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-plugin-videoconvert.html">
+<ANCHOR id="plugin-videoconvert" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-plugin-videoconvert.html#plugin-videoconvert">
 <ANCHOR id="gst-plugins-base-plugins-plugin-videorate" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-plugin-videorate.html">
 <ANCHOR id="plugin-videorate" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-plugin-videorate.html#plugin-videorate">
 <ANCHOR id="gst-plugins-base-plugins-plugin-videoscale" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-plugin-videoscale.html">
diff --git a/docs/plugins/html/style.css b/docs/plugins/html/style.css
index c141ddd..3675420 100644
--- a/docs/plugins/html/style.css
+++ b/docs/plugins/html/style.css
@@ -60,7 +60,7 @@
 div.informaltable table
 {
   border-collapse: separate;
-  border-spacing: 1em 0.5em;
+  border-spacing: 1em 0.3em;
   border: none;
 }
 
@@ -148,6 +148,8 @@
 h4
 {
   color: #555753;
+  margin-top: 1em;
+  margin-bottom: 1em;
 }
 
 hr
@@ -166,17 +168,16 @@
   padding-bottom: 0.25em;
 }
 
-dl.toc > dd > dl > dt
+dl.toc > dt
 {
   padding-top: 0.25em;
   padding-bottom: 0.25em;
+  font-weight: bold;
 }
 
-dl.toc > dt
+dl.toc > dl
 {
-  padding-top: 1em;
   padding-bottom: 0.5em;
-  font-weight: bold;
 }
 
 .parameter
@@ -346,7 +347,9 @@
 }
 
 @media screen {
-  sup a.footnote
+  /* these have a <sup> as a first child, but since there are no parent selectors
+   * we can't use that. */
+  a.footnote
   {
     position: relative;
     top: 0em ! important;
diff --git a/docs/plugins/inspect/plugin-adder.xml b/docs/plugins/inspect/plugin-adder.xml
index 939a772..1eb7273 100644
--- a/docs/plugins/inspect/plugin-adder.xml
+++ b/docs/plugins/inspect/plugin-adder.xml
@@ -3,7 +3,7 @@
   <description>Adds multiple streams</description>
   <filename>../../gst/adder/.libs/libgstadder.so</filename>
   <basename>libgstadder.so</basename>
-  <version>1.4.5</version>
+  <version>1.5.91</version>
   <license>LGPL</license>
   <source>gst-plugins-base</source>
   <package>GStreamer Base Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-alsa.xml b/docs/plugins/inspect/plugin-alsa.xml
index f61707e..560bde7 100644
--- a/docs/plugins/inspect/plugin-alsa.xml
+++ b/docs/plugins/inspect/plugin-alsa.xml
@@ -3,7 +3,7 @@
   <description>ALSA plugin library</description>
   <filename>../../ext/alsa/.libs/libgstalsa.so</filename>
   <basename>libgstalsa.so</basename>
-  <version>1.4.5</version>
+  <version>1.5.91</version>
   <license>LGPL</license>
   <source>gst-plugins-base</source>
   <package>GStreamer Base Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-app.xml b/docs/plugins/inspect/plugin-app.xml
index 45a9525..e3b4180 100644
--- a/docs/plugins/inspect/plugin-app.xml
+++ b/docs/plugins/inspect/plugin-app.xml
@@ -3,7 +3,7 @@
   <description>Elements used to communicate with applications</description>
   <filename>../../gst/app/.libs/libgstapp.so</filename>
   <basename>libgstapp.so</basename>
-  <version>1.4.5</version>
+  <version>1.5.91</version>
   <license>LGPL</license>
   <source>gst-plugins-base</source>
   <package>GStreamer Base Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-audioconvert.xml b/docs/plugins/inspect/plugin-audioconvert.xml
index 5179a05..e122b66 100644
--- a/docs/plugins/inspect/plugin-audioconvert.xml
+++ b/docs/plugins/inspect/plugin-audioconvert.xml
@@ -3,7 +3,7 @@
   <description>Convert audio to different formats</description>
   <filename>../../gst/audioconvert/.libs/libgstaudioconvert.so</filename>
   <basename>libgstaudioconvert.so</basename>
-  <version>1.4.5</version>
+  <version>1.5.91</version>
   <license>LGPL</license>
   <source>gst-plugins-base</source>
   <package>GStreamer Base Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-audiorate.xml b/docs/plugins/inspect/plugin-audiorate.xml
index 20294f3..6ff76be 100644
--- a/docs/plugins/inspect/plugin-audiorate.xml
+++ b/docs/plugins/inspect/plugin-audiorate.xml
@@ -3,7 +3,7 @@
   <description>Adjusts audio frames</description>
   <filename>../../gst/audiorate/.libs/libgstaudiorate.so</filename>
   <basename>libgstaudiorate.so</basename>
-  <version>1.4.5</version>
+  <version>1.5.91</version>
   <license>LGPL</license>
   <source>gst-plugins-base</source>
   <package>GStreamer Base Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-audioresample.xml b/docs/plugins/inspect/plugin-audioresample.xml
index 8713609..b88ebdb 100644
--- a/docs/plugins/inspect/plugin-audioresample.xml
+++ b/docs/plugins/inspect/plugin-audioresample.xml
@@ -3,7 +3,7 @@
   <description>Resamples audio</description>
   <filename>../../gst/audioresample/.libs/libgstaudioresample.so</filename>
   <basename>libgstaudioresample.so</basename>
-  <version>1.4.5</version>
+  <version>1.5.91</version>
   <license>LGPL</license>
   <source>gst-plugins-base</source>
   <package>GStreamer Base Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-audiotestsrc.xml b/docs/plugins/inspect/plugin-audiotestsrc.xml
index cf912a3..42517e2 100644
--- a/docs/plugins/inspect/plugin-audiotestsrc.xml
+++ b/docs/plugins/inspect/plugin-audiotestsrc.xml
@@ -3,7 +3,7 @@
   <description>Creates audio test signals of given frequency and volume</description>
   <filename>../../gst/audiotestsrc/.libs/libgstaudiotestsrc.so</filename>
   <basename>libgstaudiotestsrc.so</basename>
-  <version>1.4.5</version>
+  <version>1.5.91</version>
   <license>LGPL</license>
   <source>gst-plugins-base</source>
   <package>GStreamer Base Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-cdparanoia.xml b/docs/plugins/inspect/plugin-cdparanoia.xml
index 381f4e7..800b3ca 100644
--- a/docs/plugins/inspect/plugin-cdparanoia.xml
+++ b/docs/plugins/inspect/plugin-cdparanoia.xml
@@ -3,7 +3,7 @@
   <description>Read audio from CD in paranoid mode</description>
   <filename>../../ext/cdparanoia/.libs/libgstcdparanoia.so</filename>
   <basename>libgstcdparanoia.so</basename>
-  <version>1.4.5</version>
+  <version>1.5.91</version>
   <license>LGPL</license>
   <source>gst-plugins-base</source>
   <package>GStreamer Base Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-encoding.xml b/docs/plugins/inspect/plugin-encoding.xml
index 5d3b66c..92d5a0d 100644
--- a/docs/plugins/inspect/plugin-encoding.xml
+++ b/docs/plugins/inspect/plugin-encoding.xml
@@ -3,7 +3,7 @@
   <description>various encoding-related elements</description>
   <filename>../../gst/encoding/.libs/libgstencodebin.so</filename>
   <basename>libgstencodebin.so</basename>
-  <version>1.4.5</version>
+  <version>1.5.91</version>
   <license>LGPL</license>
   <source>gst-plugins-base</source>
   <package>GStreamer Base Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-gio.xml b/docs/plugins/inspect/plugin-gio.xml
index 731b634..58cdaee 100644
--- a/docs/plugins/inspect/plugin-gio.xml
+++ b/docs/plugins/inspect/plugin-gio.xml
@@ -3,7 +3,7 @@
   <description>GIO elements</description>
   <filename>../../gst/gio/.libs/libgstgio.so</filename>
   <basename>libgstgio.so</basename>
-  <version>1.4.5</version>
+  <version>1.5.91</version>
   <license>LGPL</license>
   <source>gst-plugins-base</source>
   <package>GStreamer Base Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-ivorbisdec.xml b/docs/plugins/inspect/plugin-ivorbisdec.xml
index f73f3dc..3655ff8 100644
--- a/docs/plugins/inspect/plugin-ivorbisdec.xml
+++ b/docs/plugins/inspect/plugin-ivorbisdec.xml
@@ -3,7 +3,7 @@
   <description>Vorbis Tremor decoder</description>
   <filename>../../ext/vorbis/.libs/libgstivorbisdec.so</filename>
   <basename>libgstivorbisdec.so</basename>
-  <version>1.4.3</version>
+  <version>1.4.0</version>
   <license>LGPL</license>
   <source>gst-plugins-base</source>
   <package>GStreamer Base Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-libvisual.xml b/docs/plugins/inspect/plugin-libvisual.xml
index 9154ca2..42c2577 100644
--- a/docs/plugins/inspect/plugin-libvisual.xml
+++ b/docs/plugins/inspect/plugin-libvisual.xml
@@ -3,7 +3,7 @@
   <description>libvisual visualization plugins</description>
   <filename>../../ext/libvisual/.libs/libgstlibvisual.so</filename>
   <basename>libgstlibvisual.so</basename>
-  <version>1.4.5</version>
+  <version>1.5.91</version>
   <license>LGPL</license>
   <source>gst-plugins-base</source>
   <package>GStreamer Base Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-ogg.xml b/docs/plugins/inspect/plugin-ogg.xml
index f012757..ae7c377 100644
--- a/docs/plugins/inspect/plugin-ogg.xml
+++ b/docs/plugins/inspect/plugin-ogg.xml
@@ -3,7 +3,7 @@
   <description>ogg stream manipulation (info about ogg: http://xiph.org)</description>
   <filename>../../ext/ogg/.libs/libgstogg.so</filename>
   <basename>libgstogg.so</basename>
-  <version>1.4.5</version>
+  <version>1.5.91</version>
   <license>LGPL</license>
   <source>gst-plugins-base</source>
   <package>GStreamer Base Plug-ins source release</package>
@@ -110,7 +110,7 @@
       <longname>OGM audio stream parser</longname>
       <class>Codec/Decoder/Audio</class>
       <description>parse an OGM audio header and stream</description>
-      <author>GStreamer maintainers &lt;gstreamer-devel@lists.sourceforge.net&gt;</author>
+      <author>GStreamer maintainers &lt;gstreamer-devel@lists.freedesktop.org&gt;</author>
       <pads>
         <caps>
           <name>sink</name>
@@ -131,7 +131,7 @@
       <longname>OGM text stream parser</longname>
       <class>Codec/Decoder/Subtitle</class>
       <description>parse an OGM text header and stream</description>
-      <author>GStreamer maintainers &lt;gstreamer-devel@lists.sourceforge.net&gt;</author>
+      <author>GStreamer maintainers &lt;gstreamer-devel@lists.freedesktop.org&gt;</author>
       <pads>
         <caps>
           <name>sink</name>
@@ -152,7 +152,7 @@
       <longname>OGM video stream parser</longname>
       <class>Codec/Decoder/Video</class>
       <description>parse an OGM video header and stream</description>
-      <author>GStreamer maintainers &lt;gstreamer-devel@lists.sourceforge.net&gt;</author>
+      <author>GStreamer maintainers &lt;gstreamer-devel@lists.freedesktop.org&gt;</author>
       <pads>
         <caps>
           <name>sink</name>
diff --git a/docs/plugins/inspect/plugin-pango.xml b/docs/plugins/inspect/plugin-pango.xml
index a5a557b..ff77f72 100644
--- a/docs/plugins/inspect/plugin-pango.xml
+++ b/docs/plugins/inspect/plugin-pango.xml
@@ -3,7 +3,7 @@
   <description>Pango-based text rendering and overlay</description>
   <filename>../../ext/pango/.libs/libgstpango.so</filename>
   <basename>libgstpango.so</basename>
-  <version>1.4.5</version>
+  <version>1.5.91</version>
   <license>LGPL</license>
   <source>gst-plugins-base</source>
   <package>GStreamer Base Plug-ins source release</package>
@@ -20,13 +20,13 @@
           <name>video_sink</name>
           <direction>sink</direction>
           <presence>always</presence>
-          <details>video/x-raw, format=(string){ BGRx, RGBx, xRGB, xBGR, RGBA, BGRA, ARGB, ABGR, RGB, BGR, I420, YV12, AYUV, YUY2, UYVY, v308, Y41B, Y42B, Y444, NV12, NV21, A420, YUV9, YVU9, IYU1, GRAY8 }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw(ANY), format=(string){ I420, YV12, YUY2, UYVY, AYUV, RGBx, BGRx, xRGB, xBGR, RGBA, BGRA, ARGB, ABGR, RGB, BGR, Y41B, Y42B, YVYU, Y444, v210, v216, NV12, NV21, NV16, NV24, GRAY8, GRAY16_BE, GRAY16_LE, v308, RGB16, BGR16, RGB15, BGR15, UYVP, A420, RGB8P, YUV9, YVU9, IYU1, ARGB64, AYUV64, r210, I420_10LE, I420_10BE, I422_10LE, I422_10BE, Y444_10LE, Y444_10BE, GBR, GBR_10LE, GBR_10BE, NV12_64Z32 }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details>
+          <details>video/x-raw, format=(string){ BGRx, RGBx, xRGB, xBGR, RGBA, BGRA, ARGB, ABGR, RGB, BGR, I420, YV12, AYUV, YUY2, UYVY, v308, Y41B, Y42B, Y444, NV12, NV21, A420, YUV9, YVU9, IYU1, GRAY8 }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw(ANY), format=(string){ I420, YV12, YUY2, UYVY, AYUV, RGBx, BGRx, xRGB, xBGR, RGBA, BGRA, ARGB, ABGR, RGB, BGR, Y41B, Y42B, YVYU, Y444, v210, v216, NV12, NV21, NV16, NV61, NV24, GRAY8, GRAY16_BE, GRAY16_LE, v308, RGB16, BGR16, RGB15, BGR15, UYVP, A420, RGB8P, YUV9, YVU9, IYU1, ARGB64, AYUV64, r210, I420_10LE, I420_10BE, I422_10LE, I422_10BE, Y444_10LE, Y444_10BE, GBR, GBR_10LE, GBR_10BE, NV12_64Z32, A420_10LE, A420_10BE, A422_10LE, A422_10BE, A444_10LE, A444_10BE }, 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){ BGRx, RGBx, xRGB, xBGR, RGBA, BGRA, ARGB, ABGR, RGB, BGR, I420, YV12, AYUV, YUY2, UYVY, v308, Y41B, Y42B, Y444, NV12, NV21, A420, YUV9, YVU9, IYU1, GRAY8 }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw(ANY), format=(string){ I420, YV12, YUY2, UYVY, AYUV, RGBx, BGRx, xRGB, xBGR, RGBA, BGRA, ARGB, ABGR, RGB, BGR, Y41B, Y42B, YVYU, Y444, v210, v216, NV12, NV21, NV16, NV24, GRAY8, GRAY16_BE, GRAY16_LE, v308, RGB16, BGR16, RGB15, BGR15, UYVP, A420, RGB8P, YUV9, YVU9, IYU1, ARGB64, AYUV64, r210, I420_10LE, I420_10BE, I422_10LE, I422_10BE, Y444_10LE, Y444_10BE, GBR, GBR_10LE, GBR_10BE, NV12_64Z32 }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details>
+          <details>video/x-raw, format=(string){ BGRx, RGBx, xRGB, xBGR, RGBA, BGRA, ARGB, ABGR, RGB, BGR, I420, YV12, AYUV, YUY2, UYVY, v308, Y41B, Y42B, Y444, NV12, NV21, A420, YUV9, YVU9, IYU1, GRAY8 }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw(ANY), format=(string){ I420, YV12, YUY2, UYVY, AYUV, RGBx, BGRx, xRGB, xBGR, RGBA, BGRA, ARGB, ABGR, RGB, BGR, Y41B, Y42B, YVYU, Y444, v210, v216, NV12, NV21, NV16, NV61, NV24, GRAY8, GRAY16_BE, GRAY16_LE, v308, RGB16, BGR16, RGB15, BGR15, UYVP, A420, RGB8P, YUV9, YVU9, IYU1, ARGB64, AYUV64, r210, I420_10LE, I420_10BE, I422_10LE, I422_10BE, Y444_10LE, Y444_10BE, GBR, GBR_10LE, GBR_10BE, NV12_64Z32, A420_10LE, A420_10BE, A422_10LE, A422_10BE, A444_10LE, A444_10BE }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details>
         </caps>
       </pads>
     </element>
@@ -47,13 +47,13 @@
           <name>video_sink</name>
           <direction>sink</direction>
           <presence>always</presence>
-          <details>video/x-raw, format=(string){ BGRx, RGBx, xRGB, xBGR, RGBA, BGRA, ARGB, ABGR, RGB, BGR, I420, YV12, AYUV, YUY2, UYVY, v308, Y41B, Y42B, Y444, NV12, NV21, A420, YUV9, YVU9, IYU1, GRAY8 }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw(ANY), format=(string){ I420, YV12, YUY2, UYVY, AYUV, RGBx, BGRx, xRGB, xBGR, RGBA, BGRA, ARGB, ABGR, RGB, BGR, Y41B, Y42B, YVYU, Y444, v210, v216, NV12, NV21, NV16, NV24, GRAY8, GRAY16_BE, GRAY16_LE, v308, RGB16, BGR16, RGB15, BGR15, UYVP, A420, RGB8P, YUV9, YVU9, IYU1, ARGB64, AYUV64, r210, I420_10LE, I420_10BE, I422_10LE, I422_10BE, Y444_10LE, Y444_10BE, GBR, GBR_10LE, GBR_10BE, NV12_64Z32 }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details>
+          <details>video/x-raw, format=(string){ BGRx, RGBx, xRGB, xBGR, RGBA, BGRA, ARGB, ABGR, RGB, BGR, I420, YV12, AYUV, YUY2, UYVY, v308, Y41B, Y42B, Y444, NV12, NV21, A420, YUV9, YVU9, IYU1, GRAY8 }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw(ANY), format=(string){ I420, YV12, YUY2, UYVY, AYUV, RGBx, BGRx, xRGB, xBGR, RGBA, BGRA, ARGB, ABGR, RGB, BGR, Y41B, Y42B, YVYU, Y444, v210, v216, NV12, NV21, NV16, NV61, NV24, GRAY8, GRAY16_BE, GRAY16_LE, v308, RGB16, BGR16, RGB15, BGR15, UYVP, A420, RGB8P, YUV9, YVU9, IYU1, ARGB64, AYUV64, r210, I420_10LE, I420_10BE, I422_10LE, I422_10BE, Y444_10LE, Y444_10BE, GBR, GBR_10LE, GBR_10BE, NV12_64Z32, A420_10LE, A420_10BE, A422_10LE, A422_10BE, A444_10LE, A444_10BE }, 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){ BGRx, RGBx, xRGB, xBGR, RGBA, BGRA, ARGB, ABGR, RGB, BGR, I420, YV12, AYUV, YUY2, UYVY, v308, Y41B, Y42B, Y444, NV12, NV21, A420, YUV9, YVU9, IYU1, GRAY8 }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw(ANY), format=(string){ I420, YV12, YUY2, UYVY, AYUV, RGBx, BGRx, xRGB, xBGR, RGBA, BGRA, ARGB, ABGR, RGB, BGR, Y41B, Y42B, YVYU, Y444, v210, v216, NV12, NV21, NV16, NV24, GRAY8, GRAY16_BE, GRAY16_LE, v308, RGB16, BGR16, RGB15, BGR15, UYVP, A420, RGB8P, YUV9, YVU9, IYU1, ARGB64, AYUV64, r210, I420_10LE, I420_10BE, I422_10LE, I422_10BE, Y444_10LE, Y444_10BE, GBR, GBR_10LE, GBR_10BE, NV12_64Z32 }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details>
+          <details>video/x-raw, format=(string){ BGRx, RGBx, xRGB, xBGR, RGBA, BGRA, ARGB, ABGR, RGB, BGR, I420, YV12, AYUV, YUY2, UYVY, v308, Y41B, Y42B, Y444, NV12, NV21, A420, YUV9, YVU9, IYU1, GRAY8 }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw(ANY), format=(string){ I420, YV12, YUY2, UYVY, AYUV, RGBx, BGRx, xRGB, xBGR, RGBA, BGRA, ARGB, ABGR, RGB, BGR, Y41B, Y42B, YVYU, Y444, v210, v216, NV12, NV21, NV16, NV61, NV24, GRAY8, GRAY16_BE, GRAY16_LE, v308, RGB16, BGR16, RGB15, BGR15, UYVP, A420, RGB8P, YUV9, YVU9, IYU1, ARGB64, AYUV64, r210, I420_10LE, I420_10BE, I422_10LE, I422_10BE, Y444_10LE, Y444_10BE, GBR, GBR_10LE, GBR_10BE, NV12_64Z32, A420_10LE, A420_10BE, A422_10LE, A422_10BE, A444_10LE, A444_10BE }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details>
         </caps>
       </pads>
     </element>
@@ -62,7 +62,7 @@
       <longname>Text renderer</longname>
       <class>Filter/Editor/Video</class>
       <description>Renders a text string to an image bitmap</description>
-      <author>David Schleef &lt;ds@schleef.org&gt;, GStreamer maintainers &lt;gstreamer-devel@lists.sourceforge.net&gt;</author>
+      <author>David Schleef &lt;ds@schleef.org&gt;, GStreamer maintainers &lt;gstreamer-devel@lists.freedesktop.org&gt;</author>
       <pads>
         <caps>
           <name>sink</name>
@@ -89,13 +89,13 @@
           <name>video_sink</name>
           <direction>sink</direction>
           <presence>always</presence>
-          <details>video/x-raw, format=(string){ BGRx, RGBx, xRGB, xBGR, RGBA, BGRA, ARGB, ABGR, RGB, BGR, I420, YV12, AYUV, YUY2, UYVY, v308, Y41B, Y42B, Y444, NV12, NV21, A420, YUV9, YVU9, IYU1, GRAY8 }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw(ANY), format=(string){ I420, YV12, YUY2, UYVY, AYUV, RGBx, BGRx, xRGB, xBGR, RGBA, BGRA, ARGB, ABGR, RGB, BGR, Y41B, Y42B, YVYU, Y444, v210, v216, NV12, NV21, NV16, NV24, GRAY8, GRAY16_BE, GRAY16_LE, v308, RGB16, BGR16, RGB15, BGR15, UYVP, A420, RGB8P, YUV9, YVU9, IYU1, ARGB64, AYUV64, r210, I420_10LE, I420_10BE, I422_10LE, I422_10BE, Y444_10LE, Y444_10BE, GBR, GBR_10LE, GBR_10BE, NV12_64Z32 }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details>
+          <details>video/x-raw, format=(string){ BGRx, RGBx, xRGB, xBGR, RGBA, BGRA, ARGB, ABGR, RGB, BGR, I420, YV12, AYUV, YUY2, UYVY, v308, Y41B, Y42B, Y444, NV12, NV21, A420, YUV9, YVU9, IYU1, GRAY8 }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw(ANY), format=(string){ I420, YV12, YUY2, UYVY, AYUV, RGBx, BGRx, xRGB, xBGR, RGBA, BGRA, ARGB, ABGR, RGB, BGR, Y41B, Y42B, YVYU, Y444, v210, v216, NV12, NV21, NV16, NV61, NV24, GRAY8, GRAY16_BE, GRAY16_LE, v308, RGB16, BGR16, RGB15, BGR15, UYVP, A420, RGB8P, YUV9, YVU9, IYU1, ARGB64, AYUV64, r210, I420_10LE, I420_10BE, I422_10LE, I422_10BE, Y444_10LE, Y444_10BE, GBR, GBR_10LE, GBR_10BE, NV12_64Z32, A420_10LE, A420_10BE, A422_10LE, A422_10BE, A444_10LE, A444_10BE }, 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){ BGRx, RGBx, xRGB, xBGR, RGBA, BGRA, ARGB, ABGR, RGB, BGR, I420, YV12, AYUV, YUY2, UYVY, v308, Y41B, Y42B, Y444, NV12, NV21, A420, YUV9, YVU9, IYU1, GRAY8 }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw(ANY), format=(string){ I420, YV12, YUY2, UYVY, AYUV, RGBx, BGRx, xRGB, xBGR, RGBA, BGRA, ARGB, ABGR, RGB, BGR, Y41B, Y42B, YVYU, Y444, v210, v216, NV12, NV21, NV16, NV24, GRAY8, GRAY16_BE, GRAY16_LE, v308, RGB16, BGR16, RGB15, BGR15, UYVP, A420, RGB8P, YUV9, YVU9, IYU1, ARGB64, AYUV64, r210, I420_10LE, I420_10BE, I422_10LE, I422_10BE, Y444_10LE, Y444_10BE, GBR, GBR_10LE, GBR_10BE, NV12_64Z32 }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details>
+          <details>video/x-raw, format=(string){ BGRx, RGBx, xRGB, xBGR, RGBA, BGRA, ARGB, ABGR, RGB, BGR, I420, YV12, AYUV, YUY2, UYVY, v308, Y41B, Y42B, Y444, NV12, NV21, A420, YUV9, YVU9, IYU1, GRAY8 }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw(ANY), format=(string){ I420, YV12, YUY2, UYVY, AYUV, RGBx, BGRx, xRGB, xBGR, RGBA, BGRA, ARGB, ABGR, RGB, BGR, Y41B, Y42B, YVYU, Y444, v210, v216, NV12, NV21, NV16, NV61, NV24, GRAY8, GRAY16_BE, GRAY16_LE, v308, RGB16, BGR16, RGB15, BGR15, UYVP, A420, RGB8P, YUV9, YVU9, IYU1, ARGB64, AYUV64, r210, I420_10LE, I420_10BE, I422_10LE, I422_10BE, Y444_10LE, Y444_10BE, GBR, GBR_10LE, GBR_10BE, NV12_64Z32, A420_10LE, A420_10BE, A422_10LE, A422_10BE, A444_10LE, A444_10BE }, 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-playback.xml b/docs/plugins/inspect/plugin-playback.xml
index de56494..9095896 100644
--- a/docs/plugins/inspect/plugin-playback.xml
+++ b/docs/plugins/inspect/plugin-playback.xml
@@ -3,7 +3,7 @@
   <description>various playback elements</description>
   <filename>../../gst/playback/.libs/libgstplayback.so</filename>
   <basename>libgstplayback.so</basename>
-  <version>1.4.5</version>
+  <version>1.5.91</version>
   <license>LGPL</license>
   <source>gst-plugins-base</source>
   <package>GStreamer Base Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-subparse.xml b/docs/plugins/inspect/plugin-subparse.xml
index 6089257..a9d39cb 100644
--- a/docs/plugins/inspect/plugin-subparse.xml
+++ b/docs/plugins/inspect/plugin-subparse.xml
@@ -3,7 +3,7 @@
   <description>Subtitle parsing</description>
   <filename>../../gst/subparse/.libs/libgstsubparse.so</filename>
   <basename>libgstsubparse.so</basename>
-  <version>1.4.5</version>
+  <version>1.5.91</version>
   <license>LGPL</license>
   <source>gst-plugins-base</source>
   <package>GStreamer Base Plug-ins source release</package>
@@ -35,7 +35,7 @@
       <longname>Subtitle parser</longname>
       <class>Codec/Parser/Subtitle</class>
       <description>Parses subtitle (.sub) files into text streams</description>
-      <author>Gustavo J. A. M. Carneiro &lt;gjc@inescporto.pt&gt;, GStreamer maintainers &lt;gstreamer-devel@lists.sourceforge.net&gt;</author>
+      <author>Gustavo J. A. M. Carneiro &lt;gjc@inescporto.pt&gt;, GStreamer maintainers &lt;gstreamer-devel@lists.freedesktop.org&gt;</author>
       <pads>
         <caps>
           <name>sink</name>
diff --git a/docs/plugins/inspect/plugin-tcp.xml b/docs/plugins/inspect/plugin-tcp.xml
index 621cc0b..7e4e69b 100644
--- a/docs/plugins/inspect/plugin-tcp.xml
+++ b/docs/plugins/inspect/plugin-tcp.xml
@@ -3,7 +3,7 @@
   <description>transfer data over the network via TCP</description>
   <filename>../../gst/tcp/.libs/libgsttcp.so</filename>
   <basename>libgsttcp.so</basename>
-  <version>1.4.5</version>
+  <version>1.5.91</version>
   <license>LGPL</license>
   <source>gst-plugins-base</source>
   <package>GStreamer Base Plug-ins source release</package>
@@ -40,6 +40,21 @@
       </pads>
     </element>
     <element>
+      <name>socketsrc</name>
+      <longname>socket source</longname>
+      <class>Source/Network</class>
+      <description>Receive data from a socket</description>
+      <author>Thomas Vander Stichele &lt;thomas at apestaart dot org&gt;, William Manley &lt;will@williammanley.net&gt;</author>
+      <pads>
+        <caps>
+          <name>src</name>
+          <direction>source</direction>
+          <presence>always</presence>
+          <details>ANY</details>
+        </caps>
+      </pads>
+    </element>
+    <element>
       <name>tcpclientsink</name>
       <longname>TCP client sink</longname>
       <class>Sink/Network</class>
diff --git a/docs/plugins/inspect/plugin-theora.xml b/docs/plugins/inspect/plugin-theora.xml
index bc27442..f99da0c 100644
--- a/docs/plugins/inspect/plugin-theora.xml
+++ b/docs/plugins/inspect/plugin-theora.xml
@@ -3,7 +3,7 @@
   <description>Theora plugin library</description>
   <filename>../../ext/theora/.libs/libgsttheora.so</filename>
   <basename>libgsttheora.so</basename>
-  <version>1.4.5</version>
+  <version>1.5.91</version>
   <license>LGPL</license>
   <source>gst-plugins-base</source>
   <package>GStreamer Base Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-typefindfunctions.xml b/docs/plugins/inspect/plugin-typefindfunctions.xml
index 71cfe45..bf5cff8 100644
--- a/docs/plugins/inspect/plugin-typefindfunctions.xml
+++ b/docs/plugins/inspect/plugin-typefindfunctions.xml
@@ -3,7 +3,7 @@
   <description>default typefind functions</description>
   <filename>../../gst/typefind/.libs/libgsttypefindfunctions.so</filename>
   <basename>libgsttypefindfunctions.so</basename>
-  <version>1.4.5</version>
+  <version>1.5.91</version>
   <license>LGPL</license>
   <source>gst-plugins-base</source>
   <package>GStreamer Base Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-videoconvert.xml b/docs/plugins/inspect/plugin-videoconvert.xml
index 1b73604..747f936 100644
--- a/docs/plugins/inspect/plugin-videoconvert.xml
+++ b/docs/plugins/inspect/plugin-videoconvert.xml
@@ -3,7 +3,7 @@
   <description>Colorspace conversion</description>
   <filename>../../gst/videoconvert/.libs/libgstvideoconvert.so</filename>
   <basename>libgstvideoconvert.so</basename>
-  <version>1.4.5</version>
+  <version>1.5.91</version>
   <license>LGPL</license>
   <source>gst-plugins-base</source>
   <package>GStreamer Base Plug-ins source release</package>
@@ -14,19 +14,19 @@
       <longname>Colorspace converter</longname>
       <class>Filter/Converter/Video</class>
       <description>Converts video from one colorspace to another</description>
-      <author>GStreamer maintainers &lt;gstreamer-devel@lists.sourceforge.net&gt;</author>
+      <author>GStreamer maintainers &lt;gstreamer-devel@lists.freedesktop.org&gt;</author>
       <pads>
         <caps>
           <name>sink</name>
           <direction>sink</direction>
           <presence>always</presence>
-          <details>video/x-raw, format=(string){ I420, YV12, YUY2, UYVY, AYUV, RGBx, BGRx, xRGB, xBGR, RGBA, BGRA, ARGB, ABGR, RGB, BGR, Y41B, Y42B, YVYU, Y444, v210, v216, NV12, NV21, NV16, NV24, GRAY8, GRAY16_BE, GRAY16_LE, v308, RGB16, BGR16, RGB15, BGR15, UYVP, A420, RGB8P, YUV9, YVU9, IYU1, ARGB64, AYUV64, r210, I420_10LE, I420_10BE, I422_10LE, I422_10BE, Y444_10LE, Y444_10BE, GBR, GBR_10LE, GBR_10BE, NV12_64Z32 }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw(ANY), format=(string){ I420, YV12, YUY2, UYVY, AYUV, RGBx, BGRx, xRGB, xBGR, RGBA, BGRA, ARGB, ABGR, RGB, BGR, Y41B, Y42B, YVYU, Y444, v210, v216, NV12, NV21, NV16, NV24, GRAY8, GRAY16_BE, GRAY16_LE, v308, RGB16, BGR16, RGB15, BGR15, UYVP, A420, RGB8P, YUV9, YVU9, IYU1, ARGB64, AYUV64, r210, I420_10LE, I420_10BE, I422_10LE, I422_10BE, Y444_10LE, Y444_10BE, GBR, GBR_10LE, GBR_10BE, NV12_64Z32 }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details>
+          <details>video/x-raw, format=(string){ I420, YV12, YUY2, UYVY, AYUV, RGBx, BGRx, xRGB, xBGR, RGBA, BGRA, ARGB, ABGR, RGB, BGR, Y41B, Y42B, YVYU, Y444, v210, v216, NV12, NV21, NV16, NV61, NV24, GRAY8, GRAY16_BE, GRAY16_LE, v308, RGB16, BGR16, RGB15, BGR15, UYVP, A420, RGB8P, YUV9, YVU9, IYU1, ARGB64, AYUV64, r210, I420_10LE, I420_10BE, I422_10LE, I422_10BE, Y444_10LE, Y444_10BE, GBR, GBR_10LE, GBR_10BE, NV12_64Z32, A420_10LE, A420_10BE, A422_10LE, A422_10BE, A444_10LE, A444_10BE }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw(ANY), format=(string){ I420, YV12, YUY2, UYVY, AYUV, RGBx, BGRx, xRGB, xBGR, RGBA, BGRA, ARGB, ABGR, RGB, BGR, Y41B, Y42B, YVYU, Y444, v210, v216, NV12, NV21, NV16, NV61, NV24, GRAY8, GRAY16_BE, GRAY16_LE, v308, RGB16, BGR16, RGB15, BGR15, UYVP, A420, RGB8P, YUV9, YVU9, IYU1, ARGB64, AYUV64, r210, I420_10LE, I420_10BE, I422_10LE, I422_10BE, Y444_10LE, Y444_10BE, GBR, GBR_10LE, GBR_10BE, NV12_64Z32, A420_10LE, A420_10BE, A422_10LE, A422_10BE, A444_10LE, A444_10BE }, 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){ I420, YV12, YUY2, UYVY, AYUV, RGBx, BGRx, xRGB, xBGR, RGBA, BGRA, ARGB, ABGR, RGB, BGR, Y41B, Y42B, YVYU, Y444, v210, v216, NV12, NV21, NV16, NV24, GRAY8, GRAY16_BE, GRAY16_LE, v308, RGB16, BGR16, RGB15, BGR15, UYVP, A420, RGB8P, YUV9, YVU9, IYU1, ARGB64, AYUV64, r210, I420_10LE, I420_10BE, I422_10LE, I422_10BE, Y444_10LE, Y444_10BE, GBR, GBR_10LE, GBR_10BE, NV12_64Z32 }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw(ANY), format=(string){ I420, YV12, YUY2, UYVY, AYUV, RGBx, BGRx, xRGB, xBGR, RGBA, BGRA, ARGB, ABGR, RGB, BGR, Y41B, Y42B, YVYU, Y444, v210, v216, NV12, NV21, NV16, NV24, GRAY8, GRAY16_BE, GRAY16_LE, v308, RGB16, BGR16, RGB15, BGR15, UYVP, A420, RGB8P, YUV9, YVU9, IYU1, ARGB64, AYUV64, r210, I420_10LE, I420_10BE, I422_10LE, I422_10BE, Y444_10LE, Y444_10BE, GBR, GBR_10LE, GBR_10BE, NV12_64Z32 }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details>
+          <details>video/x-raw, format=(string){ I420, YV12, YUY2, UYVY, AYUV, RGBx, BGRx, xRGB, xBGR, RGBA, BGRA, ARGB, ABGR, RGB, BGR, Y41B, Y42B, YVYU, Y444, v210, v216, NV12, NV21, NV16, NV61, NV24, GRAY8, GRAY16_BE, GRAY16_LE, v308, RGB16, BGR16, RGB15, BGR15, UYVP, A420, RGB8P, YUV9, YVU9, IYU1, ARGB64, AYUV64, r210, I420_10LE, I420_10BE, I422_10LE, I422_10BE, Y444_10LE, Y444_10BE, GBR, GBR_10LE, GBR_10BE, NV12_64Z32, A420_10LE, A420_10BE, A422_10LE, A422_10BE, A444_10LE, A444_10BE }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw(ANY), format=(string){ I420, YV12, YUY2, UYVY, AYUV, RGBx, BGRx, xRGB, xBGR, RGBA, BGRA, ARGB, ABGR, RGB, BGR, Y41B, Y42B, YVYU, Y444, v210, v216, NV12, NV21, NV16, NV61, NV24, GRAY8, GRAY16_BE, GRAY16_LE, v308, RGB16, BGR16, RGB15, BGR15, UYVP, A420, RGB8P, YUV9, YVU9, IYU1, ARGB64, AYUV64, r210, I420_10LE, I420_10BE, I422_10LE, I422_10BE, Y444_10LE, Y444_10BE, GBR, GBR_10LE, GBR_10BE, NV12_64Z32, A420_10LE, A420_10BE, A422_10LE, A422_10BE, A444_10LE, A444_10BE }, 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-videorate.xml b/docs/plugins/inspect/plugin-videorate.xml
index e7382b6..4efe6c8 100644
--- a/docs/plugins/inspect/plugin-videorate.xml
+++ b/docs/plugins/inspect/plugin-videorate.xml
@@ -3,7 +3,7 @@
   <description>Adjusts video frames</description>
   <filename>../../gst/videorate/.libs/libgstvideorate.so</filename>
   <basename>libgstvideorate.so</basename>
-  <version>1.4.5</version>
+  <version>1.5.91</version>
   <license>LGPL</license>
   <source>gst-plugins-base</source>
   <package>GStreamer Base Plug-ins source release</package>
@@ -20,13 +20,13 @@
           <name>sink</name>
           <direction>sink</direction>
           <presence>always</presence>
-          <details>video/x-raw; image/jpeg; image/png</details>
+          <details>video/x-raw(ANY); video/x-bayer(ANY); image/jpeg(ANY); image/png(ANY)</details>
         </caps>
         <caps>
           <name>src</name>
           <direction>source</direction>
           <presence>always</presence>
-          <details>video/x-raw; image/jpeg; image/png</details>
+          <details>video/x-raw(ANY); video/x-bayer(ANY); image/jpeg(ANY); image/png(ANY)</details>
         </caps>
       </pads>
     </element>
diff --git a/docs/plugins/inspect/plugin-videoscale.xml b/docs/plugins/inspect/plugin-videoscale.xml
index 7941dcb..e3eb28b 100644
--- a/docs/plugins/inspect/plugin-videoscale.xml
+++ b/docs/plugins/inspect/plugin-videoscale.xml
@@ -3,7 +3,7 @@
   <description>Resizes video</description>
   <filename>../../gst/videoscale/.libs/libgstvideoscale.so</filename>
   <basename>libgstvideoscale.so</basename>
-  <version>1.4.5</version>
+  <version>1.5.91</version>
   <license>LGPL</license>
   <source>gst-plugins-base</source>
   <package>GStreamer Base Plug-ins source release</package>
@@ -14,19 +14,19 @@
       <longname>Video scaler</longname>
       <class>Filter/Converter/Video/Scaler</class>
       <description>Resizes video</description>
-      <author>Wim Taymans &lt;wim.taymans@chello.be&gt;</author>
+      <author>Wim Taymans &lt;wim.taymans@gmail.com&gt;</author>
       <pads>
         <caps>
           <name>sink</name>
           <direction>sink</direction>
           <presence>always</presence>
-          <details>video/x-raw, format=(string){ I420, YV12, YUY2, UYVY, AYUV, RGBx, BGRx, xRGB, xBGR, RGBA, BGRA, ARGB, ABGR, RGB, BGR, Y41B, Y42B, YVYU, Y444, GRAY8, GRAY16_BE, GRAY16_LE, v308, RGB16, RGB15, ARGB64, AYUV64, NV12 }, width=(int)[ 1, 32767 ], height=(int)[ 1, 32767 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw(ANY), format=(string){ I420, YV12, YUY2, UYVY, AYUV, RGBx, BGRx, xRGB, xBGR, RGBA, BGRA, ARGB, ABGR, RGB, BGR, Y41B, Y42B, YVYU, Y444, GRAY8, GRAY16_BE, GRAY16_LE, v308, RGB16, RGB15, ARGB64, AYUV64, NV12 }, width=(int)[ 1, 32767 ], height=(int)[ 1, 32767 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details>
+          <details>video/x-raw, format=(string){ I420, YV12, YUY2, UYVY, AYUV, RGBx, BGRx, xRGB, xBGR, RGBA, BGRA, ARGB, ABGR, RGB, BGR, Y41B, Y42B, YVYU, Y444, v210, v216, NV12, NV21, NV16, NV61, NV24, GRAY8, GRAY16_BE, GRAY16_LE, v308, RGB16, BGR16, RGB15, BGR15, UYVP, A420, RGB8P, YUV9, YVU9, IYU1, ARGB64, AYUV64, r210, I420_10LE, I420_10BE, I422_10LE, I422_10BE, Y444_10LE, Y444_10BE, GBR, GBR_10LE, GBR_10BE, NV12_64Z32, A420_10LE, A420_10BE, A422_10LE, A422_10BE, A444_10LE, A444_10BE }, width=(int)[ 1, 32767 ], height=(int)[ 1, 32767 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw(ANY), format=(string){ I420, YV12, YUY2, UYVY, AYUV, RGBx, BGRx, xRGB, xBGR, RGBA, BGRA, ARGB, ABGR, RGB, BGR, Y41B, Y42B, YVYU, Y444, v210, v216, NV12, NV21, NV16, NV61, NV24, GRAY8, GRAY16_BE, GRAY16_LE, v308, RGB16, BGR16, RGB15, BGR15, UYVP, A420, RGB8P, YUV9, YVU9, IYU1, ARGB64, AYUV64, r210, I420_10LE, I420_10BE, I422_10LE, I422_10BE, Y444_10LE, Y444_10BE, GBR, GBR_10LE, GBR_10BE, NV12_64Z32, A420_10LE, A420_10BE, A422_10LE, A422_10BE, A444_10LE, A444_10BE }, width=(int)[ 1, 32767 ], height=(int)[ 1, 32767 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details>
         </caps>
         <caps>
           <name>src</name>
           <direction>source</direction>
           <presence>always</presence>
-          <details>video/x-raw, format=(string){ I420, YV12, YUY2, UYVY, AYUV, RGBx, BGRx, xRGB, xBGR, RGBA, BGRA, ARGB, ABGR, RGB, BGR, Y41B, Y42B, YVYU, Y444, GRAY8, GRAY16_BE, GRAY16_LE, v308, RGB16, RGB15, ARGB64, AYUV64, NV12 }, width=(int)[ 1, 32767 ], height=(int)[ 1, 32767 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw(ANY), format=(string){ I420, YV12, YUY2, UYVY, AYUV, RGBx, BGRx, xRGB, xBGR, RGBA, BGRA, ARGB, ABGR, RGB, BGR, Y41B, Y42B, YVYU, Y444, GRAY8, GRAY16_BE, GRAY16_LE, v308, RGB16, RGB15, ARGB64, AYUV64, NV12 }, width=(int)[ 1, 32767 ], height=(int)[ 1, 32767 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details>
+          <details>video/x-raw, format=(string){ I420, YV12, YUY2, UYVY, AYUV, RGBx, BGRx, xRGB, xBGR, RGBA, BGRA, ARGB, ABGR, RGB, BGR, Y41B, Y42B, YVYU, Y444, v210, v216, NV12, NV21, NV16, NV61, NV24, GRAY8, GRAY16_BE, GRAY16_LE, v308, RGB16, BGR16, RGB15, BGR15, UYVP, A420, RGB8P, YUV9, YVU9, IYU1, ARGB64, AYUV64, r210, I420_10LE, I420_10BE, I422_10LE, I422_10BE, Y444_10LE, Y444_10BE, GBR, GBR_10LE, GBR_10BE, NV12_64Z32, A420_10LE, A420_10BE, A422_10LE, A422_10BE, A444_10LE, A444_10BE }, width=(int)[ 1, 32767 ], height=(int)[ 1, 32767 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw(ANY), format=(string){ I420, YV12, YUY2, UYVY, AYUV, RGBx, BGRx, xRGB, xBGR, RGBA, BGRA, ARGB, ABGR, RGB, BGR, Y41B, Y42B, YVYU, Y444, v210, v216, NV12, NV21, NV16, NV61, NV24, GRAY8, GRAY16_BE, GRAY16_LE, v308, RGB16, BGR16, RGB15, BGR15, UYVP, A420, RGB8P, YUV9, YVU9, IYU1, ARGB64, AYUV64, r210, I420_10LE, I420_10BE, I422_10LE, I422_10BE, Y444_10LE, Y444_10BE, GBR, GBR_10LE, GBR_10BE, NV12_64Z32, A420_10LE, A420_10BE, A422_10LE, A422_10BE, A444_10LE, A444_10BE }, width=(int)[ 1, 32767 ], height=(int)[ 1, 32767 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details>
         </caps>
       </pads>
     </element>
diff --git a/docs/plugins/inspect/plugin-videotestsrc.xml b/docs/plugins/inspect/plugin-videotestsrc.xml
index a0bc660..663f537 100644
--- a/docs/plugins/inspect/plugin-videotestsrc.xml
+++ b/docs/plugins/inspect/plugin-videotestsrc.xml
@@ -3,7 +3,7 @@
   <description>Creates a test video stream</description>
   <filename>../../gst/videotestsrc/.libs/libgstvideotestsrc.so</filename>
   <basename>libgstvideotestsrc.so</basename>
-  <version>1.4.5</version>
+  <version>1.5.91</version>
   <license>LGPL</license>
   <source>gst-plugins-base</source>
   <package>GStreamer Base Plug-ins source release</package>
@@ -20,7 +20,7 @@
           <name>src</name>
           <direction>source</direction>
           <presence>always</presence>
-          <details>video/x-raw, format=(string){ I420, YV12, YUY2, UYVY, AYUV, RGBx, BGRx, xRGB, xBGR, RGBA, BGRA, ARGB, ABGR, RGB, BGR, Y41B, Y42B, YVYU, Y444, v210, v216, NV12, NV21, NV16, NV24, GRAY8, GRAY16_BE, GRAY16_LE, v308, RGB16, BGR16, RGB15, BGR15, UYVP, A420, RGB8P, YUV9, YVU9, IYU1, ARGB64, AYUV64, r210, I420_10LE, I420_10BE, I422_10LE, I422_10BE, Y444_10LE, Y444_10BE, GBR, GBR_10LE, GBR_10BE, NV12_64Z32 }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-bayer, format=(string){ bggr, rggb, grbg, gbrg }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details>
+          <details>video/x-raw, format=(string){ I420, YV12, YUY2, UYVY, AYUV, RGBx, BGRx, xRGB, xBGR, RGBA, BGRA, ARGB, ABGR, RGB, BGR, Y41B, Y42B, YVYU, Y444, v210, v216, NV12, NV21, NV16, NV61, NV24, GRAY8, GRAY16_BE, GRAY16_LE, v308, RGB16, BGR16, RGB15, BGR15, UYVP, A420, RGB8P, YUV9, YVU9, IYU1, ARGB64, AYUV64, r210, I420_10LE, I420_10BE, I422_10LE, I422_10BE, Y444_10LE, Y444_10BE, GBR, GBR_10LE, GBR_10BE, NV12_64Z32, A420_10LE, A420_10BE, A422_10LE, A422_10BE, A444_10LE, A444_10BE }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-bayer, format=(string){ bggr, rggb, grbg, gbrg }, 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-volume.xml b/docs/plugins/inspect/plugin-volume.xml
index 552a549..39641a3 100644
--- a/docs/plugins/inspect/plugin-volume.xml
+++ b/docs/plugins/inspect/plugin-volume.xml
@@ -3,7 +3,7 @@
   <description>plugin for controlling audio volume</description>
   <filename>../../gst/volume/.libs/libgstvolume.so</filename>
   <basename>libgstvolume.so</basename>
-  <version>1.4.5</version>
+  <version>1.5.91</version>
   <license>LGPL</license>
   <source>gst-plugins-base</source>
   <package>GStreamer Base Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-vorbis.xml b/docs/plugins/inspect/plugin-vorbis.xml
index 62a11d9..8194894 100644
--- a/docs/plugins/inspect/plugin-vorbis.xml
+++ b/docs/plugins/inspect/plugin-vorbis.xml
@@ -3,7 +3,7 @@
   <description>Vorbis plugin library</description>
   <filename>../../ext/vorbis/.libs/libgstvorbis.so</filename>
   <basename>libgstvorbis.so</basename>
-  <version>1.4.5</version>
+  <version>1.5.91</version>
   <license>LGPL</license>
   <source>gst-plugins-base</source>
   <package>GStreamer Base Plug-ins source release</package>
@@ -41,7 +41,7 @@
           <name>sink</name>
           <direction>sink</direction>
           <presence>always</presence>
-          <details>audio/x-raw, format=(string)F32LE, layout=(string)interleaved, rate=(int)[ 1, 200000 ], channels=(int)[ 1, 255 ]</details>
+          <details>audio/x-raw, format=(string)F32LE, layout=(string)interleaved, rate=(int)[ 1, 200000 ], channels=(int)1; audio/x-raw, format=(string)F32LE, layout=(string)interleaved, rate=(int)[ 1, 200000 ], channels=(int)2, channel-mask=(bitmask)0x0000000000000003; audio/x-raw, format=(string)F32LE, layout=(string)interleaved, rate=(int)[ 1, 200000 ], channels=(int)3, channel-mask=(bitmask)0x0000000000000007; audio/x-raw, format=(string)F32LE, layout=(string)interleaved, rate=(int)[ 1, 200000 ], channels=(int)4, channel-mask=(bitmask)0x0000000000000033; audio/x-raw, format=(string)F32LE, layout=(string)interleaved, rate=(int)[ 1, 200000 ], channels=(int)5, channel-mask=(bitmask)0x0000000000000037; audio/x-raw, format=(string)F32LE, layout=(string)interleaved, rate=(int)[ 1, 200000 ], channels=(int)6, channel-mask=(bitmask)0x000000000000003f; audio/x-raw, format=(string)F32LE, layout=(string)interleaved, rate=(int)[ 1, 200000 ], channels=(int)7, channel-mask=(bitmask)0x0000000000000d0f; audio/x-raw, format=(string)F32LE, layout=(string)interleaved, rate=(int)[ 1, 200000 ], channels=(int)8, channel-mask=(bitmask)0x0000000000000c3f; audio/x-raw, format=(string)F32LE, layout=(string)interleaved, rate=(int)[ 1, 200000 ], channels=(int)[ 9, 255 ], channel-mask=(bitmask)0x0000000000000000</details>
         </caps>
         <caps>
           <name>src</name>
diff --git a/docs/plugins/inspect/plugin-ximagesink.xml b/docs/plugins/inspect/plugin-ximagesink.xml
index 609fe39..afa2579 100644
--- a/docs/plugins/inspect/plugin-ximagesink.xml
+++ b/docs/plugins/inspect/plugin-ximagesink.xml
@@ -3,7 +3,7 @@
   <description>X11 video output element based on standard Xlib calls</description>
   <filename>../../sys/ximage/.libs/libgstximagesink.so</filename>
   <basename>libgstximagesink.so</basename>
-  <version>1.4.5</version>
+  <version>1.5.91</version>
   <license>LGPL</license>
   <source>gst-plugins-base</source>
   <package>GStreamer Base Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-xvimagesink.xml b/docs/plugins/inspect/plugin-xvimagesink.xml
index a08ba54..29fe5b5 100644
--- a/docs/plugins/inspect/plugin-xvimagesink.xml
+++ b/docs/plugins/inspect/plugin-xvimagesink.xml
@@ -3,7 +3,7 @@
   <description>XFree86 video output plugin using Xv extension</description>
   <filename>../../sys/xvimage/.libs/libgstxvimagesink.so</filename>
   <basename>libgstxvimagesink.so</basename>
-  <version>1.4.5</version>
+  <version>1.5.91</version>
   <license>LGPL</license>
   <source>gst-plugins-base</source>
   <package>GStreamer Base Plug-ins source release</package>
diff --git a/ext/Makefile.in b/ext/Makefile.in
index 5719a5d..34e71b1 100644
--- a/ext/Makefile.in
+++ b/ext/Makefile.in
@@ -1,7 +1,7 @@
-# Makefile.in generated by automake 1.14.1 from Makefile.am.
+# Makefile.in generated by automake 1.15 from Makefile.am.
 # @configure_input@
 
-# Copyright (C) 1994-2013 Free Software Foundation, Inc.
+# 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,
@@ -19,7 +19,17 @@
 # descending into all subdirectories a second time, but only after the first
 # (parallel) run has finished, so it should go right through the second time.
 VPATH = @srcdir@
-am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)'
+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 \
       ?) ;; \
@@ -83,8 +93,6 @@
 build_triplet = @build@
 host_triplet = @host@
 target_triplet = @target@
-DIST_COMMON = $(top_srcdir)/common/parallel-subdirs.mak \
-	$(srcdir)/Makefile.in $(srcdir)/Makefile.am
 subdir = ext
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
 am__aclocal_m4_deps = $(top_srcdir)/common/m4/as-ac-expand.m4 \
@@ -106,7 +114,6 @@
 	$(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-x11.m4 \
 	$(top_srcdir)/common/m4/gst.m4 \
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
@@ -123,6 +130,7 @@
 	$(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
 mkinstalldirs = $(install_sh) -d
 CONFIG_HEADER = $(top_builddir)/config.h
 CONFIG_CLEAN_FILES =
@@ -181,6 +189,8 @@
   done | $(am__uniquify_input)`
 ETAGS = etags
 CTAGS = ctags
+am__DIST_COMMON = $(srcdir)/Makefile.in \
+	$(top_srcdir)/common/parallel-subdirs.mak
 DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
 am__relativize = \
   dir0=`pwd`; \
@@ -266,6 +276,8 @@
 GIO_CFLAGS = @GIO_CFLAGS@
 GIO_LDFLAGS = @GIO_LDFLAGS@
 GIO_LIBS = @GIO_LIBS@
+GIO_UNIX_2_0_CFLAGS = @GIO_UNIX_2_0_CFLAGS@
+GIO_UNIX_2_0_LIBS = @GIO_UNIX_2_0_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
@@ -295,6 +307,8 @@
 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_OPTION_CFLAGS = @GST_OPTION_CFLAGS@
 GST_OPTION_CXXFLAGS = @GST_OPTION_CXXFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
@@ -322,7 +336,6 @@
 GTK_X11_CFLAGS = @GTK_X11_CFLAGS@
 GTK_X11_LIBS = @GTK_X11_LIBS@
 HAVE_CDPARANOIA = @HAVE_CDPARANOIA@
-HAVE_X = @HAVE_X@
 HAVE_XSHM = @HAVE_XSHM@
 HAVE_ZLIB = @HAVE_ZLIB@
 HTML_DIR = @HTML_DIR@
@@ -337,6 +350,7 @@
 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@
@@ -426,13 +440,12 @@
 XGETTEXT = @XGETTEXT@
 XGETTEXT_015 = @XGETTEXT_015@
 XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
-XMKMF = @XMKMF@
+XSHM_CFLAGS = @XSHM_CFLAGS@
 XSHM_LIBS = @XSHM_LIBS@
+XVIDEO_CFLAGS = @XVIDEO_CFLAGS@
 XVIDEO_LIBS = @XVIDEO_LIBS@
 X_CFLAGS = @X_CFLAGS@
-X_EXTRA_LIBS = @X_EXTRA_LIBS@
 X_LIBS = @X_LIBS@
-X_PRE_LIBS = @X_PRE_LIBS@
 ZLIB_CFLAGS = @ZLIB_CFLAGS@
 ZLIB_LIBS = @ZLIB_LIBS@
 abs_builddir = @abs_builddir@
@@ -485,6 +498,7 @@
 psdir = @psdir@
 pyexecdir = @pyexecdir@
 pythondir = @pythondir@
+runstatedir = @runstatedir@
 sbindir = @sbindir@
 sharedstatedir = @sharedstatedir@
 srcdir = @srcdir@
@@ -545,7 +559,6 @@
 	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu ext/Makefile'; \
 	$(am__cd) $(top_srcdir) && \
 	  $(AUTOMAKE) --gnu ext/Makefile
-.PRECIOUS: Makefile
 Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
 	@case '$?' in \
 	  *config.status*) \
@@ -554,7 +567,7 @@
 	    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/parallel-subdirs.mak:
+$(top_srcdir)/common/parallel-subdirs.mak $(am__empty):
 
 $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
 	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
@@ -841,6 +854,8 @@
 	mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \
 	ps ps-am tags tags-am uninstall uninstall-am
 
+.PRECIOUS: Makefile
+
 
 .PHONY: independent-subdirs $(SUBDIRS)
 
diff --git a/ext/alsa/Makefile.in b/ext/alsa/Makefile.in
index 09d2042..c47fc68 100644
--- a/ext/alsa/Makefile.in
+++ b/ext/alsa/Makefile.in
@@ -1,7 +1,7 @@
-# Makefile.in generated by automake 1.14.1 from Makefile.am.
+# Makefile.in generated by automake 1.15 from Makefile.am.
 # @configure_input@
 
-# Copyright (C) 1994-2013 Free Software Foundation, Inc.
+# 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,
@@ -16,7 +16,17 @@
 
 
 VPATH = @srcdir@
-am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)'
+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 \
       ?) ;; \
@@ -81,8 +91,6 @@
 host_triplet = @host@
 target_triplet = @target@
 subdir = ext/alsa
-DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \
-	$(top_srcdir)/depcomp $(noinst_HEADERS)
 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 \
@@ -103,7 +111,6 @@
 	$(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-x11.m4 \
 	$(top_srcdir)/common/m4/gst.m4 \
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
@@ -120,6 +127,8 @@
 	$(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 =
@@ -229,6 +238,7 @@
   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@
@@ -289,6 +299,8 @@
 GIO_CFLAGS = @GIO_CFLAGS@
 GIO_LDFLAGS = @GIO_LDFLAGS@
 GIO_LIBS = @GIO_LIBS@
+GIO_UNIX_2_0_CFLAGS = @GIO_UNIX_2_0_CFLAGS@
+GIO_UNIX_2_0_LIBS = @GIO_UNIX_2_0_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
@@ -318,6 +330,8 @@
 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_OPTION_CFLAGS = @GST_OPTION_CFLAGS@
 GST_OPTION_CXXFLAGS = @GST_OPTION_CXXFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
@@ -345,7 +359,6 @@
 GTK_X11_CFLAGS = @GTK_X11_CFLAGS@
 GTK_X11_LIBS = @GTK_X11_LIBS@
 HAVE_CDPARANOIA = @HAVE_CDPARANOIA@
-HAVE_X = @HAVE_X@
 HAVE_XSHM = @HAVE_XSHM@
 HAVE_ZLIB = @HAVE_ZLIB@
 HTML_DIR = @HTML_DIR@
@@ -360,6 +373,7 @@
 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@
@@ -449,13 +463,12 @@
 XGETTEXT = @XGETTEXT@
 XGETTEXT_015 = @XGETTEXT_015@
 XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
-XMKMF = @XMKMF@
+XSHM_CFLAGS = @XSHM_CFLAGS@
 XSHM_LIBS = @XSHM_LIBS@
+XVIDEO_CFLAGS = @XVIDEO_CFLAGS@
 XVIDEO_LIBS = @XVIDEO_LIBS@
 X_CFLAGS = @X_CFLAGS@
-X_EXTRA_LIBS = @X_EXTRA_LIBS@
 X_LIBS = @X_LIBS@
-X_PRE_LIBS = @X_PRE_LIBS@
 ZLIB_CFLAGS = @ZLIB_CFLAGS@
 ZLIB_LIBS = @ZLIB_LIBS@
 abs_builddir = @abs_builddir@
@@ -508,6 +521,7 @@
 psdir = @psdir@
 pyexecdir = @pyexecdir@
 pythondir = @pythondir@
+runstatedir = @runstatedir@
 sbindir = @sbindir@
 sharedstatedir = @sharedstatedir@
 srcdir = @srcdir@
@@ -563,7 +577,6 @@
 	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu ext/alsa/Makefile'; \
 	$(am__cd) $(top_srcdir) && \
 	  $(AUTOMAKE) --gnu ext/alsa/Makefile
-.PRECIOUS: Makefile
 Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
 	@case '$?' in \
 	  *config.status*) \
@@ -904,6 +917,8 @@
 	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.
diff --git a/ext/alsa/gstalsa.c b/ext/alsa/gstalsa.c
index d702a23..9d2a973 100644
--- a/ext/alsa/gstalsa.c
+++ b/ext/alsa/gstalsa.c
@@ -149,7 +149,8 @@
 
   finfo = gst_audio_format_get_info (format);
 
-  if (GST_AUDIO_FORMAT_INFO_ENDIANNESS (finfo) != endianness)
+  if (GST_AUDIO_FORMAT_INFO_ENDIANNESS (finfo) != endianness
+      && GST_AUDIO_FORMAT_INFO_ENDIANNESS (finfo) != 0)
     return FALSE;
 
   pcm_format = gst_alsa_get_pcm_format (format);
@@ -713,38 +714,40 @@
 #define ITEM(x, y) \
   [SND_CHMAP_ ## x] = GST_AUDIO_CHANNEL_POSITION_ ## y + 1
 
-static GstAudioChannelPosition gst_pos[SND_CHMAP_LAST + 1] = {
-  ITEM(MONO, MONO),
-  ITEM(FL, FRONT_LEFT),
-  ITEM(FR, FRONT_RIGHT),
-  ITEM(FC, FRONT_CENTER),
-  ITEM(RL, REAR_LEFT),
-  ITEM(RR, REAR_RIGHT),
-  ITEM(RC, REAR_CENTER),
-  ITEM(LFE, LFE1),
-  ITEM(SL, SIDE_LEFT),
-  ITEM(SR, SIDE_RIGHT),
-  ITEM(FLC, FRONT_LEFT_OF_CENTER),
-  ITEM(FRC, FRONT_RIGHT_OF_CENTER),
-  ITEM(FLW, WIDE_LEFT),
-  ITEM(FRW, WIDE_RIGHT),
-  ITEM(TC, TOP_CENTER),
-  ITEM(TFL, TOP_FRONT_LEFT),
-  ITEM(TFR, TOP_FRONT_RIGHT),
-  ITEM(TFC, TOP_FRONT_CENTER),
-  ITEM(TRL, TOP_REAR_LEFT),
-  ITEM(TRR, TOP_REAR_RIGHT),
-  ITEM(TRC, TOP_REAR_CENTER),
-  ITEM(LLFE, LFE1),
-  ITEM(RLFE, LFE2),
-  ITEM(BC, BOTTOM_FRONT_CENTER),
-  ITEM(BLC, BOTTOM_FRONT_LEFT),
-  ITEM(BRC, BOTTOM_FRONT_LEFT),
+static const GstAudioChannelPosition gst_pos[SND_CHMAP_LAST + 1] = {
+  ITEM (MONO, MONO),
+  ITEM (FL, FRONT_LEFT),
+  ITEM (FR, FRONT_RIGHT),
+  ITEM (FC, FRONT_CENTER),
+  ITEM (RL, REAR_LEFT),
+  ITEM (RR, REAR_RIGHT),
+  ITEM (RC, REAR_CENTER),
+  ITEM (LFE, LFE1),
+  ITEM (SL, SIDE_LEFT),
+  ITEM (SR, SIDE_RIGHT),
+  ITEM (FLC, FRONT_LEFT_OF_CENTER),
+  ITEM (FRC, FRONT_RIGHT_OF_CENTER),
+  ITEM (FLW, WIDE_LEFT),
+  ITEM (FRW, WIDE_RIGHT),
+  ITEM (TC, TOP_CENTER),
+  ITEM (TFL, TOP_FRONT_LEFT),
+  ITEM (TFR, TOP_FRONT_RIGHT),
+  ITEM (TFC, TOP_FRONT_CENTER),
+  ITEM (TRL, TOP_REAR_LEFT),
+  ITEM (TRR, TOP_REAR_RIGHT),
+  ITEM (TRC, TOP_REAR_CENTER),
+  ITEM (LLFE, LFE1),
+  ITEM (RLFE, LFE2),
+  ITEM (BC, BOTTOM_FRONT_CENTER),
+  ITEM (BLC, BOTTOM_FRONT_LEFT),
+  ITEM (BRC, BOTTOM_FRONT_LEFT),
 };
+
 #undef ITEM
 
-gboolean alsa_chmap_to_channel_positions (const snd_pcm_chmap_t *chmap,
-					  GstAudioChannelPosition *pos)
+gboolean
+alsa_chmap_to_channel_positions (const snd_pcm_chmap_t * chmap,
+    GstAudioChannelPosition * pos)
 {
   int c;
 
diff --git a/ext/alsa/gstalsasink.c b/ext/alsa/gstalsasink.c
index ad8803a..cc72304 100644
--- a/ext/alsa/gstalsasink.c
+++ b/ext/alsa/gstalsasink.c
@@ -24,13 +24,13 @@
  * SECTION:element-alsasink
  * @see_also: alsasrc
  *
- * This element renders raw audio samples using the ALSA api.
+ * This element renders raw audio samples using the ALSA audio API.
  *
  * <refsect2>
  * <title>Example pipelines</title>
  * |[
- * gst-launch -v filesrc location=sine.ogg ! oggdemux ! vorbisdec ! audioconvert ! audioresample ! alsasink
- * ]| Play an Ogg/Vorbis file.
+ * gst-launch-1.0 -v uridecodebin uri=file:///path/to/audio.ogg ! audioconvert ! audioresample ! autoaudiosink
+ * ]| Play an Ogg/Vorbis file and output audio via ALSA.
  * </refsect2>
  */
 
@@ -986,7 +986,7 @@
 static gint
 xrun_recovery (GstAlsaSink * alsa, snd_pcm_t * handle, gint err)
 {
-  GST_DEBUG_OBJECT (alsa, "xrun recovery %d: %s", err, g_strerror (-err));
+  GST_WARNING_OBJECT (alsa, "xrun recovery %d: %s", err, g_strerror (-err));
 
   if (err == -EPIPE) {          /* under-run */
     err = snd_pcm_prepare (handle);
@@ -994,6 +994,7 @@
       GST_WARNING_OBJECT (alsa,
           "Can't recover from underrun, prepare failed: %s",
           snd_strerror (err));
+    gst_audio_base_sink_report_device_failure (GST_AUDIO_BASE_SINK (alsa));
     return 0;
   } else if (err == -ESTRPIPE) {
     while ((err = snd_pcm_resume (handle)) == -EAGAIN)
@@ -1006,6 +1007,8 @@
             "Can't recover from suspend, prepare failed: %s",
             snd_strerror (err));
     }
+    if (err == 0)
+      gst_audio_base_sink_report_device_failure (GST_AUDIO_BASE_SINK (alsa));
     return 0;
   }
   return err;
diff --git a/ext/alsa/gstalsasrc.c b/ext/alsa/gstalsasrc.c
index 28bc498..0233748 100644
--- a/ext/alsa/gstalsasrc.c
+++ b/ext/alsa/gstalsasrc.c
@@ -28,7 +28,7 @@
  * <refsect2>
  * <title>Example pipelines</title>
  * |[
- * gst-launch -v alsasrc ! audioconvert ! vorbisenc ! oggmux ! filesink location=alsasrc.ogg
+ * gst-launch-1.0 -v alsasrc ! queue ! audioconvert ! vorbisenc ! oggmux ! filesink location=alsasrc.ogg
  * ]| Record from a sound card using ALSA and encode to Ogg/Vorbis.
  * </refsect2>
  */
@@ -725,8 +725,7 @@
   alsa = GST_ALSA_SRC (asrc);
 
   CHECK (snd_pcm_open (&alsa->handle, alsa->device, SND_PCM_STREAM_CAPTURE,
-          (alsa->driver_timestamps == TRUE) ? 0 : SND_PCM_NONBLOCK),
-      open_error);
+          (alsa->driver_timestamps) ? 0 : SND_PCM_NONBLOCK), open_error);
 
   return TRUE;
 
@@ -791,7 +790,8 @@
     if (chmap && chmap->channels == alsa->channels) {
       GstAudioChannelPosition pos[8];
       if (alsa_chmap_to_channel_positions (chmap, pos))
-	gst_audio_ring_buffer_set_channel_positions (GST_AUDIO_BASE_SRC (alsa)->ringbuffer, pos);
+        gst_audio_ring_buffer_set_channel_positions (GST_AUDIO_BASE_SRC
+            (alsa)->ringbuffer, pos);
     }
     free (chmap);
   }
@@ -865,13 +865,13 @@
 static gint
 xrun_recovery (GstAlsaSrc * alsa, snd_pcm_t * handle, gint err)
 {
-  GST_DEBUG_OBJECT (alsa, "xrun recovery %d: %s", err, g_strerror (err));
+  GST_WARNING_OBJECT (alsa, "xrun recovery %d: %s", err, g_strerror (-err));
 
   if (err == -EPIPE) {          /* under-run */
     err = snd_pcm_prepare (handle);
     if (err < 0)
       GST_WARNING_OBJECT (alsa,
-          "Can't recovery from underrun, prepare failed: %s",
+          "Can't recover from underrun, prepare failed: %s",
           snd_strerror (err));
     return 0;
   } else if (err == -ESTRPIPE) {
@@ -882,7 +882,7 @@
       err = snd_pcm_prepare (handle);
       if (err < 0)
         GST_WARNING_OBJECT (alsa,
-            "Can't recovery from suspend, prepare failed: %s",
+            "Can't recover from suspend, prepare failed: %s",
             snd_strerror (err));
     }
     return 0;
diff --git a/ext/cdparanoia/Makefile.in b/ext/cdparanoia/Makefile.in
index 805cd67..39d4c0c 100644
--- a/ext/cdparanoia/Makefile.in
+++ b/ext/cdparanoia/Makefile.in
@@ -1,7 +1,7 @@
-# Makefile.in generated by automake 1.14.1 from Makefile.am.
+# Makefile.in generated by automake 1.15 from Makefile.am.
 # @configure_input@
 
-# Copyright (C) 1994-2013 Free Software Foundation, Inc.
+# 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,
@@ -16,7 +16,17 @@
 
 
 VPATH = @srcdir@
-am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)'
+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 \
       ?) ;; \
@@ -81,8 +91,6 @@
 host_triplet = @host@
 target_triplet = @target@
 subdir = ext/cdparanoia
-DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \
-	$(top_srcdir)/depcomp $(noinst_HEADERS)
 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 \
@@ -103,7 +111,6 @@
 	$(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-x11.m4 \
 	$(top_srcdir)/common/m4/gst.m4 \
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
@@ -120,6 +127,8 @@
 	$(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 =
@@ -229,6 +238,7 @@
   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@
@@ -289,6 +299,8 @@
 GIO_CFLAGS = @GIO_CFLAGS@
 GIO_LDFLAGS = @GIO_LDFLAGS@
 GIO_LIBS = @GIO_LIBS@
+GIO_UNIX_2_0_CFLAGS = @GIO_UNIX_2_0_CFLAGS@
+GIO_UNIX_2_0_LIBS = @GIO_UNIX_2_0_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
@@ -318,6 +330,8 @@
 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_OPTION_CFLAGS = @GST_OPTION_CFLAGS@
 GST_OPTION_CXXFLAGS = @GST_OPTION_CXXFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
@@ -345,7 +359,6 @@
 GTK_X11_CFLAGS = @GTK_X11_CFLAGS@
 GTK_X11_LIBS = @GTK_X11_LIBS@
 HAVE_CDPARANOIA = @HAVE_CDPARANOIA@
-HAVE_X = @HAVE_X@
 HAVE_XSHM = @HAVE_XSHM@
 HAVE_ZLIB = @HAVE_ZLIB@
 HTML_DIR = @HTML_DIR@
@@ -360,6 +373,7 @@
 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@
@@ -449,13 +463,12 @@
 XGETTEXT = @XGETTEXT@
 XGETTEXT_015 = @XGETTEXT_015@
 XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
-XMKMF = @XMKMF@
+XSHM_CFLAGS = @XSHM_CFLAGS@
 XSHM_LIBS = @XSHM_LIBS@
+XVIDEO_CFLAGS = @XVIDEO_CFLAGS@
 XVIDEO_LIBS = @XVIDEO_LIBS@
 X_CFLAGS = @X_CFLAGS@
-X_EXTRA_LIBS = @X_EXTRA_LIBS@
 X_LIBS = @X_LIBS@
-X_PRE_LIBS = @X_PRE_LIBS@
 ZLIB_CFLAGS = @ZLIB_CFLAGS@
 ZLIB_LIBS = @ZLIB_LIBS@
 abs_builddir = @abs_builddir@
@@ -508,6 +521,7 @@
 psdir = @psdir@
 pyexecdir = @pyexecdir@
 pythondir = @pythondir@
+runstatedir = @runstatedir@
 sbindir = @sbindir@
 sharedstatedir = @sharedstatedir@
 srcdir = @srcdir@
@@ -553,7 +567,6 @@
 	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu ext/cdparanoia/Makefile'; \
 	$(am__cd) $(top_srcdir) && \
 	  $(AUTOMAKE) --gnu ext/cdparanoia/Makefile
-.PRECIOUS: Makefile
 Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
 	@case '$?' in \
 	  *config.status*) \
@@ -862,6 +875,8 @@
 	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.
diff --git a/ext/cdparanoia/gstcdparanoiasrc.h b/ext/cdparanoia/gstcdparanoiasrc.h
index 0183e92..0f0be38 100644
--- a/ext/cdparanoia/gstcdparanoiasrc.h
+++ b/ext/cdparanoia/gstcdparanoiasrc.h
@@ -24,13 +24,10 @@
 
 G_BEGIN_DECLS
 
-#define size16 gint16
-#define size32 gint32
-
 /* on OSX the cdparanoia headers include IOKit framework headers (in particular
  * SCSICmds_INQUIRY_Definitions.h) which define a structure that has a member
  * named VERSION, so we must #undef VERSION here for things to compile on OSX */
-static char GST_PLUGINS_BASE_VERSION[] = VERSION;
+static const char GST_PLUGINS_BASE_VERSION[] = VERSION;
 #undef VERSION
 
 #ifdef CDPARANOIA_HEADERS_IN_DIR
@@ -46,7 +43,6 @@
 #define GST_CD_PARANOIA_SRC_CLASS(klass)    (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_CD_PARANOIA_SRC,GstCdParanoiaSrcClass))
 #define GST_IS_CD_PARANOIA_SRC(obj)         (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_CD_PARANOIA_SRC))
 #define GST_IS_CD_PARANOIA_SRC_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_CD_PARANOIA_SRC))
-#define GST_CD_PARANOIA_SRC_GET_CLASS(obj)  (G_TYPE_INSTANCE_GET_CLASS ((obj), GST_TYPE_CDDA_BASAE_SRC, GstCdParanoiaSrcClass))
 
 typedef struct _GstCdParanoiaSrc GstCdParanoiaSrc;
 typedef struct _GstCdParanoiaSrcClass GstCdParanoiaSrcClass;
diff --git a/ext/libvisual/Makefile.in b/ext/libvisual/Makefile.in
index 5f8c788..f4c0729 100644
--- a/ext/libvisual/Makefile.in
+++ b/ext/libvisual/Makefile.in
@@ -1,7 +1,7 @@
-# Makefile.in generated by automake 1.14.1 from Makefile.am.
+# Makefile.in generated by automake 1.15 from Makefile.am.
 # @configure_input@
 
-# Copyright (C) 1994-2013 Free Software Foundation, Inc.
+# 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,
@@ -16,7 +16,17 @@
 
 
 VPATH = @srcdir@
-am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)'
+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 \
       ?) ;; \
@@ -81,8 +91,6 @@
 host_triplet = @host@
 target_triplet = @target@
 subdir = ext/libvisual
-DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \
-	$(top_srcdir)/depcomp $(noinst_HEADERS)
 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 \
@@ -103,7 +111,6 @@
 	$(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-x11.m4 \
 	$(top_srcdir)/common/m4/gst.m4 \
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
@@ -120,6 +127,8 @@
 	$(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 =
@@ -230,6 +239,7 @@
   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@
@@ -290,6 +300,8 @@
 GIO_CFLAGS = @GIO_CFLAGS@
 GIO_LDFLAGS = @GIO_LDFLAGS@
 GIO_LIBS = @GIO_LIBS@
+GIO_UNIX_2_0_CFLAGS = @GIO_UNIX_2_0_CFLAGS@
+GIO_UNIX_2_0_LIBS = @GIO_UNIX_2_0_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
@@ -319,6 +331,8 @@
 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_OPTION_CFLAGS = @GST_OPTION_CFLAGS@
 GST_OPTION_CXXFLAGS = @GST_OPTION_CXXFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
@@ -346,7 +360,6 @@
 GTK_X11_CFLAGS = @GTK_X11_CFLAGS@
 GTK_X11_LIBS = @GTK_X11_LIBS@
 HAVE_CDPARANOIA = @HAVE_CDPARANOIA@
-HAVE_X = @HAVE_X@
 HAVE_XSHM = @HAVE_XSHM@
 HAVE_ZLIB = @HAVE_ZLIB@
 HTML_DIR = @HTML_DIR@
@@ -361,6 +374,7 @@
 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@
@@ -450,13 +464,12 @@
 XGETTEXT = @XGETTEXT@
 XGETTEXT_015 = @XGETTEXT_015@
 XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
-XMKMF = @XMKMF@
+XSHM_CFLAGS = @XSHM_CFLAGS@
 XSHM_LIBS = @XSHM_LIBS@
+XVIDEO_CFLAGS = @XVIDEO_CFLAGS@
 XVIDEO_LIBS = @XVIDEO_LIBS@
 X_CFLAGS = @X_CFLAGS@
-X_EXTRA_LIBS = @X_EXTRA_LIBS@
 X_LIBS = @X_LIBS@
-X_PRE_LIBS = @X_PRE_LIBS@
 ZLIB_CFLAGS = @ZLIB_CFLAGS@
 ZLIB_LIBS = @ZLIB_LIBS@
 abs_builddir = @abs_builddir@
@@ -509,6 +522,7 @@
 psdir = @psdir@
 pyexecdir = @pyexecdir@
 pythondir = @pythondir@
+runstatedir = @runstatedir@
 sbindir = @sbindir@
 sharedstatedir = @sharedstatedir@
 srcdir = @srcdir@
@@ -548,7 +562,6 @@
 	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu ext/libvisual/Makefile'; \
 	$(am__cd) $(top_srcdir) && \
 	  $(AUTOMAKE) --gnu ext/libvisual/Makefile
-.PRECIOUS: Makefile
 Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
 	@case '$?' in \
 	  *config.status*) \
@@ -873,6 +886,8 @@
 	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.
diff --git a/ext/libvisual/gstaudiovisualizer.c b/ext/libvisual/gstaudiovisualizer.c
index 3d5a39c..805336d 100644
--- a/ext/libvisual/gstaudiovisualizer.c
+++ b/ext/libvisual/gstaudiovisualizer.c
@@ -1,21 +1,23 @@
 /* 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 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 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 program is distributed in the hope that it will be useful,
+ * 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 General Public License for more details.
+ * 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 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.
+ * 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
@@ -63,7 +65,7 @@
     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_dispose (GObject * object);
+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 *
@@ -91,6 +93,48 @@
 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())
@@ -158,9 +202,10 @@
     GstVideoFrame * dframe)
 {
   guint i, j;
-  guint r = (scope->shade_amount >> 16) & 0xff;
-  guint g = (scope->shade_amount >> 8) & 0xff;
-  guint b = (scope->shade_amount >> 0) & 0xff;
+  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;
 
@@ -186,9 +231,10 @@
     const GstVideoFrame * sframe, GstVideoFrame * dframe)
 {
   guint i, j;
-  guint r = (scope->shade_amount >> 16) & 0xff;
-  guint g = (scope->shade_amount >> 8) & 0xff;
-  guint b = (scope->shade_amount >> 0) & 0xff;
+  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;
 
@@ -214,9 +260,10 @@
     const GstVideoFrame * sframe, GstVideoFrame * dframe)
 {
   guint i, j;
-  guint r = (scope->shade_amount >> 16) & 0xff;
-  guint g = (scope->shade_amount >> 8) & 0xff;
-  guint b = (scope->shade_amount >> 0) & 0xff;
+  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;
 
@@ -242,9 +289,10 @@
     const GstVideoFrame * sframe, GstVideoFrame * dframe)
 {
   guint i, j;
-  guint r = (scope->shade_amount >> 16) & 0xff;
-  guint g = (scope->shade_amount >> 8) & 0xff;
-  guint b = (scope->shade_amount >> 0) & 0xff;
+  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;
 
@@ -274,9 +322,10 @@
     const GstVideoFrame * sframe, GstVideoFrame * dframe)
 {
   guint i, j;
-  guint r = (scope->shade_amount >> 16) & 0xff;
-  guint g = (scope->shade_amount >> 8) & 0xff;
-  guint b = (scope->shade_amount >> 0) & 0xff;
+  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;
 
@@ -306,9 +355,10 @@
     const GstVideoFrame * sframe, GstVideoFrame * dframe)
 {
   guint i, j;
-  guint r = (scope->shade_amount >> 16) & 0xff;
-  guint g = (scope->shade_amount >> 8) & 0xff;
-  guint b = (scope->shade_amount >> 0) & 0xff;
+  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;
 
@@ -343,9 +393,10 @@
     const GstVideoFrame * sframe, GstVideoFrame * dframe)
 {
   guint i, j;
-  guint r = (scope->shade_amount >> 16) & 0xff;
-  guint g = (scope->shade_amount >> 8) & 0xff;
-  guint b = (scope->shade_amount >> 0) & 0xff;
+  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;
 
@@ -380,9 +431,10 @@
     const GstVideoFrame * sframe, GstVideoFrame * dframe)
 {
   guint i, j;
-  guint r = (scope->shade_amount >> 16) & 0xff;
-  guint g = (scope->shade_amount >> 8) & 0xff;
-  guint b = (scope->shade_amount >> 0) & 0xff;
+  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;
 
@@ -415,9 +467,10 @@
     const GstVideoFrame * sframe, GstVideoFrame * dframe)
 {
   guint i, j;
-  guint r = (scope->shade_amount >> 16) & 0xff;
-  guint g = (scope->shade_amount >> 8) & 0xff;
-  guint b = (scope->shade_amount >> 0) & 0xff;
+  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;
 
@@ -448,60 +501,50 @@
 static void
 gst_audio_visualizer_change_shader (GstAudioVisualizer * scope)
 {
-  switch (scope->shader_type) {
+  GstAudioVisualizerShaderFunc shader;
+
+  switch (scope->priv->shader_type) {
     case GST_AUDIO_VISUALIZER_SHADER_NONE:
-      scope->shader = NULL;
+      shader = NULL;
       break;
     case GST_AUDIO_VISUALIZER_SHADER_FADE:
-      scope->shader = shader_fade;
+      shader = shader_fade;
       break;
     case GST_AUDIO_VISUALIZER_SHADER_FADE_AND_MOVE_UP:
-      scope->shader = shader_fade_and_move_up;
+      shader = shader_fade_and_move_up;
       break;
     case GST_AUDIO_VISUALIZER_SHADER_FADE_AND_MOVE_DOWN:
-      scope->shader = shader_fade_and_move_down;
+      shader = shader_fade_and_move_down;
       break;
     case GST_AUDIO_VISUALIZER_SHADER_FADE_AND_MOVE_LEFT:
-      scope->shader = shader_fade_and_move_left;
+      shader = shader_fade_and_move_left;
       break;
     case GST_AUDIO_VISUALIZER_SHADER_FADE_AND_MOVE_RIGHT:
-      scope->shader = shader_fade_and_move_right;
+      shader = shader_fade_and_move_right;
       break;
     case GST_AUDIO_VISUALIZER_SHADER_FADE_AND_MOVE_HORIZ_OUT:
-      scope->shader = shader_fade_and_move_horiz_out;
+      shader = shader_fade_and_move_horiz_out;
       break;
     case GST_AUDIO_VISUALIZER_SHADER_FADE_AND_MOVE_HORIZ_IN:
-      scope->shader = shader_fade_and_move_horiz_in;
+      shader = shader_fade_and_move_horiz_in;
       break;
     case GST_AUDIO_VISUALIZER_SHADER_FADE_AND_MOVE_VERT_OUT:
-      scope->shader = shader_fade_and_move_vert_out;
+      shader = shader_fade_and_move_vert_out;
       break;
     case GST_AUDIO_VISUALIZER_SHADER_FADE_AND_MOVE_VERT_IN:
-      scope->shader = shader_fade_and_move_vert_in;
+      shader = shader_fade_and_move_vert_in;
       break;
     default:
       GST_ERROR ("invalid shader function");
-      scope->shader = NULL;
+      shader = NULL;
       break;
   }
+
+  scope->priv->shader = shader;
 }
 
 /* base class */
 
-#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;
-};
-
 GType
 libvisual_gst_audio_visualizer_get_type (void)
 {
@@ -546,7 +589,7 @@
 
   gobject_class->set_property = gst_audio_visualizer_set_property;
   gobject_class->get_property = gst_audio_visualizer_get_property;
-  gobject_class->dispose = gst_audio_visualizer_dispose;
+  gobject_class->finalize = gst_audio_visualizer_finalize;
 
   element_class->change_state =
       GST_DEBUG_FUNCPTR (gst_audio_visualizer_change_state);
@@ -577,40 +620,40 @@
   pad_template =
       gst_element_class_get_pad_template (GST_ELEMENT_CLASS (g_class), "sink");
   g_return_if_fail (pad_template != NULL);
-  scope->sinkpad = gst_pad_new_from_template (pad_template, "sink");
-  gst_pad_set_chain_function (scope->sinkpad,
+  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->sinkpad,
+  gst_pad_set_event_function (scope->priv->sinkpad,
       GST_DEBUG_FUNCPTR (gst_audio_visualizer_sink_event));
-  gst_element_add_pad (GST_ELEMENT (scope), scope->sinkpad);
+  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->srcpad = gst_pad_new_from_template (pad_template, "src");
-  gst_pad_set_event_function (scope->srcpad,
+  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->srcpad,
+  gst_pad_set_query_function (scope->priv->srcpad,
       GST_DEBUG_FUNCPTR (gst_audio_visualizer_src_query));
-  gst_element_add_pad (GST_ELEMENT (scope), scope->srcpad);
+  gst_element_add_pad (GST_ELEMENT (scope), scope->priv->srcpad);
 
-  scope->adapter = gst_adapter_new ();
-  scope->inbuf = gst_buffer_new ();
+  scope->priv->adapter = gst_adapter_new ();
+  scope->priv->inbuf = gst_buffer_new ();
 
   /* properties */
-  scope->shader_type = DEFAULT_SHADER;
+  scope->priv->shader_type = DEFAULT_SHADER;
   gst_audio_visualizer_change_shader (scope);
-  scope->shade_amount = DEFAULT_SHADE_AMOUNT;
+  scope->priv->shade_amount = DEFAULT_SHADE_AMOUNT;
 
   /* reset the initial video state */
   gst_video_info_init (&scope->vinfo);
-  scope->frame_duration = GST_CLOCK_TIME_NONE;
+  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->config_lock);
+  g_mutex_init (&scope->priv->config_lock);
 }
 
 static void
@@ -621,11 +664,11 @@
 
   switch (prop_id) {
     case PROP_SHADER:
-      scope->shader_type = g_value_get_enum (value);
+      scope->priv->shader_type = g_value_get_enum (value);
       gst_audio_visualizer_change_shader (scope);
       break;
     case PROP_SHADE_AMOUNT:
-      scope->shade_amount = g_value_get_uint (value);
+      scope->priv->shade_amount = g_value_get_uint (value);
       break;
     default:
       G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
@@ -641,10 +684,10 @@
 
   switch (prop_id) {
     case PROP_SHADER:
-      g_value_set_enum (value, scope->shader_type);
+      g_value_set_enum (value, scope->priv->shader_type);
       break;
     case PROP_SHADE_AMOUNT:
-      g_value_set_uint (value, scope->shade_amount);
+      g_value_set_uint (value, scope->priv->shade_amount);
       break;
     default:
       G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
@@ -653,39 +696,43 @@
 }
 
 static void
-gst_audio_visualizer_dispose (GObject * object)
+gst_audio_visualizer_finalize (GObject * object)
 {
   GstAudioVisualizer *scope = GST_AUDIO_VISUALIZER (object);
+  GstAudioVisualizerPrivate *priv = scope->priv;
 
-  if (scope->adapter) {
-    g_object_unref (scope->adapter);
-    scope->adapter = NULL;
+  if (priv->adapter) {
+    g_object_unref (priv->adapter);
+    priv->adapter = NULL;
   }
-  if (scope->inbuf) {
-    gst_buffer_unref (scope->inbuf);
-    scope->inbuf = NULL;
+  if (priv->inbuf) {
+    gst_buffer_unref (priv->inbuf);
+    priv->inbuf = NULL;
   }
-  if (scope->tempbuf) {
-    gst_video_frame_unmap (&scope->tempframe);
-    gst_buffer_unref (scope->tempbuf);
-    scope->tempbuf = NULL;
+  if (priv->tempbuf) {
+    gst_video_frame_unmap (&priv->tempframe);
+    gst_buffer_unref (priv->tempbuf);
+    priv->tempbuf = NULL;
   }
-  if (scope->config_lock.p) {
-    g_mutex_clear (&scope->config_lock);
-    scope->config_lock.p = NULL;
-  }
-  G_OBJECT_CLASS (parent_class)->dispose (object);
+
+  g_mutex_clear (&priv->config_lock);
+
+  G_OBJECT_CLASS (parent_class)->finalize (object);
 }
 
 static void
 gst_audio_visualizer_reset (GstAudioVisualizer * scope)
 {
-  gst_adapter_clear (scope->adapter);
-  gst_segment_init (&scope->segment, GST_FORMAT_UNDEFINED);
+  GstAudioVisualizerPrivate *priv = scope->priv;
+
+  gst_adapter_clear (priv->adapter);
+  gst_segment_init (&priv->segment, GST_FORMAT_UNDEFINED);
 
   GST_OBJECT_LOCK (scope);
-  scope->proportion = 1.0;
-  scope->earliest_time = -1;
+  priv->proportion = 1.0;
+  priv->earliest_time = -1;
+  priv->dropped = 0;
+  priv->processed = 0;
   GST_OBJECT_UNLOCK (scope);
 }
 
@@ -726,6 +773,7 @@
 {
   GstVideoInfo info;
   GstAudioVisualizerClass *klass;
+  GstAudioVisualizerPrivate *priv;
   gboolean res;
 
   if (!gst_video_info_from_caps (&info, caps))
@@ -733,45 +781,55 @@
 
   klass = GST_AUDIO_VISUALIZER_CLASS (G_OBJECT_GET_CLASS (scope));
 
+  priv = scope->priv;
+
   scope->vinfo = info;
 
-  scope->frame_duration = gst_util_uint64_scale_int (GST_SECOND,
+  priv->frame_duration = gst_util_uint64_scale_int (GST_SECOND,
       GST_VIDEO_INFO_FPS_D (&info), GST_VIDEO_INFO_FPS_N (&info));
-  scope->spf = gst_util_uint64_scale_int (GST_AUDIO_INFO_RATE (&scope->ainfo),
+  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 = scope->spf;
+  scope->req_spf = priv->spf;
 
-  if (scope->tempbuf) {
-    gst_video_frame_unmap (&scope->tempframe);
-    gst_buffer_unref (scope->tempbuf);
+  if (priv->tempbuf) {
+    gst_video_frame_unmap (&priv->tempframe);
+    gst_buffer_unref (priv->tempbuf);
   }
-  scope->tempbuf = gst_buffer_new_wrapped (g_malloc0 (scope->vinfo.size),
+  priv->tempbuf = gst_buffer_new_wrapped (g_malloc0 (scope->vinfo.size),
       scope->vinfo.size);
-  gst_video_frame_map (&scope->tempframe, &scope->vinfo, scope->tempbuf,
+  gst_video_frame_map (&priv->tempframe, &scope->vinfo, priv->tempbuf,
       GST_MAP_READWRITE);
 
-  if (klass->setup)
-    res = klass->setup (scope);
+  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",
-      scope->spf, scope->req_spf);
+  GST_DEBUG_OBJECT (scope, "blocks: spf %u, req_spf %u", priv->spf,
+      scope->req_spf);
 
-  gst_pad_set_caps (scope->srcpad, caps);
+  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
@@ -782,12 +840,12 @@
   GstCaps *templ;
   gboolean ret;
 
-  templ = gst_pad_get_pad_template_caps (scope->srcpad);
+  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->srcpad, NULL);
+  othercaps = gst_pad_peer_query_caps (scope->priv->srcpad, NULL);
   if (othercaps) {
     target = gst_caps_intersect (othercaps, templ);
     gst_caps_unref (othercaps);
@@ -880,7 +938,7 @@
   GST_DEBUG_OBJECT (scope, "doing allocation query");
   query = gst_query_new_allocation (outcaps, TRUE);
 
-  if (!gst_pad_peer_query (scope->srcpad, query)) {
+  if (!gst_pad_peer_query (scope->priv->srcpad, query)) {
     /* not a problem, we use the query defaults */
     GST_DEBUG_OBJECT (scope, "allocation query failed");
   }
@@ -1027,6 +1085,7 @@
 {
   GstFlowReturn ret = GST_FLOW_OK;
   GstAudioVisualizer *scope;
+  GstAudioVisualizerPrivate *priv;
   GstAudioVisualizerClass *klass;
   GstBuffer *inbuf;
   guint64 dist, ts;
@@ -1035,19 +1094,20 @@
   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 (scope->adapter);
+    gst_adapter_clear (priv->adapter);
   }
 
   /* Make sure have an output format */
-  if (gst_pad_check_reconfigure (scope->srcpad)) {
+  if (gst_pad_check_reconfigure (priv->srcpad)) {
     if (!gst_audio_visualizer_src_negotiate (scope)) {
-      gst_pad_mark_reconfigure (scope->srcpad);
+      gst_pad_mark_reconfigure (priv->srcpad);
       goto not_negotiated;
     }
   }
@@ -1061,56 +1121,75 @@
     goto beach;
   }
 
-  gst_adapter_push (scope->adapter, buffer);
+  gst_adapter_push (priv->adapter, buffer);
 
-  g_mutex_lock (&scope->config_lock);
+  g_mutex_lock (&priv->config_lock);
 
   /* this is what we want */
   sbpf = scope->req_spf * channels * sizeof (gint16);
 
-  inbuf = scope->inbuf;
+  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 (scope->adapter);
+  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 (scope->adapter, &dist);
+    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;
-      gboolean need_skip;
 
       qostime =
-          gst_segment_to_running_time (&scope->segment, GST_FORMAT_TIME, ts) +
-          scope->frame_duration;
+          gst_segment_to_running_time (&priv->segment, GST_FORMAT_TIME,
+          ts) + priv->frame_duration;
 
       GST_OBJECT_LOCK (scope);
-      /* check for QoS, don't compute buffers that are known to be late */
-      need_skip = scope->earliest_time != -1 && qostime <= scope->earliest_time;
+      earliest_time = priv->earliest_time;
+      proportion = priv->proportion;
       GST_OBJECT_UNLOCK (scope);
 
-      if (need_skip) {
-        GST_WARNING_OBJECT (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 (scope->earliest_time));
+            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;
       }
     }
 
-    g_mutex_unlock (&scope->config_lock);
+    ++priv->processed;
+
+    g_mutex_unlock (&priv->config_lock);
     ret = default_prepare_output_buffer (scope, &outbuf);
-    g_mutex_lock (&scope->config_lock);
+    g_mutex_lock (&priv->config_lock);
     /* recheck as the value could have changed */
     sbpf = scope->req_spf * channels * sizeof (gint16);
 
@@ -1123,16 +1202,16 @@
       gst_object_sync_values (GST_OBJECT (scope), ts);
 
     GST_BUFFER_TIMESTAMP (outbuf) = ts;
-    GST_BUFFER_DURATION (outbuf) = scope->frame_duration;
+    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 (scope->adapter, sbpf)))
+    if (!(adata = (gpointer) gst_adapter_map (priv->adapter, sbpf)))
       break;
 
     gst_video_frame_map (&outframe, &scope->vinfo, outbuf, GST_MAP_READWRITE);
 
-    if (scope->shader) {
-      gst_video_frame_copy (&outframe, &scope->tempframe);
+    if (priv->shader) {
+      gst_video_frame_copy (&outframe, &priv->tempframe);
     } else {
       /* gst_video_frame_clear() or is output frame already cleared */
       gint i;
@@ -1150,21 +1229,22 @@
     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 (scope->shader &&
-            GST_VIDEO_INFO_COMP_PSTRIDE (&scope->vinfo, 0) == 4) {
-          scope->shader (scope, &outframe, &scope->tempframe);
+        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 (&scope->config_lock);
-    ret = gst_pad_push (scope->srcpad, outbuf);
+    g_mutex_unlock (&priv->config_lock);
+    ret = gst_pad_push (priv->srcpad, outbuf);
     outbuf = NULL;
-    g_mutex_lock (&scope->config_lock);
+    g_mutex_lock (&priv->config_lock);
 
   skip:
     /* recheck as the value could have changed */
@@ -1172,21 +1252,21 @@
     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 (scope->adapter, sbpf);
-      gst_adapter_unmap (scope->adapter);
+      gst_adapter_flush (priv->adapter, sbpf);
+      gst_adapter_unmap (priv->adapter);
     } else if (avail >= sbpf) {
       /* just flush a bit and stop */
-      gst_adapter_flush (scope->adapter, (avail - sbpf));
-      gst_adapter_unmap (scope->adapter);
+      gst_adapter_flush (priv->adapter, (avail - sbpf));
+      gst_adapter_unmap (priv->adapter);
       break;
     }
-    avail = gst_adapter_available (scope->adapter);
+    avail = gst_adapter_available (priv->adapter);
 
     if (ret != GST_FLOW_OK)
       break;
   }
 
-  g_mutex_unlock (&scope->config_lock);
+  g_mutex_unlock (&priv->config_lock);
 
 beach:
   return ret;
@@ -1205,8 +1285,10 @@
 {
   gboolean res;
   GstAudioVisualizer *scope;
+  GstAudioVisualizerPrivate *priv;
 
   scope = GST_AUDIO_VISUALIZER (parent);
+  priv = scope->priv;
 
   switch (GST_EVENT_TYPE (event)) {
     case GST_EVENT_QOS:
@@ -1219,16 +1301,16 @@
 
       /* save stuff for the _chain() function */
       GST_OBJECT_LOCK (scope);
-      scope->proportion = proportion;
+      priv->proportion = proportion;
       if (diff >= 0)
         /* we're late, this is a good estimate for next displayable
          * frame (see part-qos.txt) */
-        scope->earliest_time = timestamp + 2 * diff + scope->frame_duration;
+        priv->earliest_time = timestamp + 2 * diff + priv->frame_duration;
       else
-        scope->earliest_time = timestamp + diff;
+        priv->earliest_time = timestamp + diff;
       GST_OBJECT_UNLOCK (scope);
 
-      res = gst_pad_push_event (scope->sinkpad, event);
+      res = gst_pad_push_event (priv->sinkpad, event);
       break;
     }
     case GST_EVENT_RECONFIGURE:
@@ -1260,20 +1342,21 @@
 
       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->srcpad, event);
+      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->segment);
+      gst_event_copy_segment (event, &scope->priv->segment);
 
-      res = gst_pad_push_event (scope->srcpad, event);
+      res = gst_pad_push_event (scope->priv->srcpad, event);
       break;
     }
     default:
@@ -1307,7 +1390,7 @@
       if (rate == 0)
         break;
 
-      if ((res = gst_pad_peer_query (scope->sinkpad, query))) {
+      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 %"
@@ -1315,7 +1398,7 @@
             GST_TIME_ARGS (min_latency), GST_TIME_ARGS (max_latency));
 
         /* the max samples we must buffer buffer */
-        max_samples = MAX (scope->req_spf, scope->spf);
+        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,
diff --git a/ext/libvisual/gstaudiovisualizer.h b/ext/libvisual/gstaudiovisualizer.h
index a9b7a9c..9dbf0bc 100644
--- a/ext/libvisual/gstaudiovisualizer.h
+++ b/ext/libvisual/gstaudiovisualizer.h
@@ -1,21 +1,23 @@
 /* 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 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 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 program is distributed in the hope that it will be useful,
+ * 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 General Public License for more details.
+ * 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 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.
+ * 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__
@@ -73,37 +75,14 @@
 {
   GstElement parent;
 
-  /* pads */
-  GstPad *srcpad, *sinkpad;
-
-  GstAdapter *adapter;
-  GstBuffer *inbuf;
-  GstBuffer *tempbuf;
-  GstVideoFrame tempframe;
-
-  GstAudioVisualizerShader shader_type;
-  GstAudioVisualizerShaderFunc shader;
-  guint32 shade_amount;
-
-  guint spf;                    /* samples per video frame */
   guint req_spf;                /* min samples per frame wanted by the subclass */
 
   /* video state */
   GstVideoInfo vinfo;
-  guint64 frame_duration;
 
   /* audio state */
   GstAudioInfo ainfo;
 
-  /* configuration mutex */
-  GMutex config_lock;
-
-  /* QoS stuff *//* with LOCK */
-  gdouble proportion;
-  GstClockTime earliest_time;
-
-  GstSegment segment;
-
   /* <private> */
   GstAudioVisualizerPrivate *priv;
 };
diff --git a/ext/ogg/Makefile.am b/ext/ogg/Makefile.am
index 9fd326c..1128141 100644
--- a/ext/ogg/Makefile.am
+++ b/ext/ogg/Makefile.am
@@ -35,18 +35,3 @@
 	$(OGG_LIBS)
 libgstogg_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS)
 libgstogg_la_LIBTOOLFLAGS = $(GST_PLUGIN_LIBTOOLFLAGS)
-
-
-Android.mk: Makefile.am $(BUILT_SOURCES)
-	androgenizer \
-	-:PROJECT libgstogg -:SHARED libgstogg \
-	 -:TAGS eng debug \
-         -:REL_TOP $(top_srcdir) -:ABS_TOP $(abs_top_srcdir) \
-	 -:SOURCES $(libgstogg_la_SOURCES) \
-	 -:CFLAGS $(DEFS) $(DEFAULT_INCLUDES) $(libgstogg_la_CFLAGS) \
-	 -:LDFLAGS $(libgstogg_la_LDFLAGS) \
-	           $(libgstogg_la_LIBADD) \
-	           -ldl \
-	 -:PASSTHROUGH LOCAL_ARM_MODE:=arm \
-		       LOCAL_MODULE_PATH:='$$(TARGET_OUT)/lib/gstreamer-0.10' \
-	> $@
diff --git a/ext/ogg/Makefile.in b/ext/ogg/Makefile.in
index 4d0c7cc..155dfce 100644
--- a/ext/ogg/Makefile.in
+++ b/ext/ogg/Makefile.in
@@ -1,7 +1,7 @@
-# Makefile.in generated by automake 1.14.1 from Makefile.am.
+# Makefile.in generated by automake 1.15 from Makefile.am.
 # @configure_input@
 
-# Copyright (C) 1994-2013 Free Software Foundation, Inc.
+# 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,
@@ -16,7 +16,17 @@
 
 
 VPATH = @srcdir@
-am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)'
+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 \
       ?) ;; \
@@ -81,8 +91,6 @@
 host_triplet = @host@
 target_triplet = @target@
 subdir = ext/ogg
-DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \
-	$(top_srcdir)/depcomp $(noinst_HEADERS) README
 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 \
@@ -103,7 +111,6 @@
 	$(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-x11.m4 \
 	$(top_srcdir)/common/m4/gst.m4 \
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
@@ -120,6 +127,8 @@
 	$(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 =
@@ -234,6 +243,7 @@
   done | $(am__uniquify_input)`
 ETAGS = etags
 CTAGS = ctags
+am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp README
 DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
 ACLOCAL = @ACLOCAL@
 ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@
@@ -294,6 +304,8 @@
 GIO_CFLAGS = @GIO_CFLAGS@
 GIO_LDFLAGS = @GIO_LDFLAGS@
 GIO_LIBS = @GIO_LIBS@
+GIO_UNIX_2_0_CFLAGS = @GIO_UNIX_2_0_CFLAGS@
+GIO_UNIX_2_0_LIBS = @GIO_UNIX_2_0_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
@@ -323,6 +335,8 @@
 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_OPTION_CFLAGS = @GST_OPTION_CFLAGS@
 GST_OPTION_CXXFLAGS = @GST_OPTION_CXXFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
@@ -350,7 +364,6 @@
 GTK_X11_CFLAGS = @GTK_X11_CFLAGS@
 GTK_X11_LIBS = @GTK_X11_LIBS@
 HAVE_CDPARANOIA = @HAVE_CDPARANOIA@
-HAVE_X = @HAVE_X@
 HAVE_XSHM = @HAVE_XSHM@
 HAVE_ZLIB = @HAVE_ZLIB@
 HTML_DIR = @HTML_DIR@
@@ -365,6 +378,7 @@
 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@
@@ -454,13 +468,12 @@
 XGETTEXT = @XGETTEXT@
 XGETTEXT_015 = @XGETTEXT_015@
 XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
-XMKMF = @XMKMF@
+XSHM_CFLAGS = @XSHM_CFLAGS@
 XSHM_LIBS = @XSHM_LIBS@
+XVIDEO_CFLAGS = @XVIDEO_CFLAGS@
 XVIDEO_LIBS = @XVIDEO_LIBS@
 X_CFLAGS = @X_CFLAGS@
-X_EXTRA_LIBS = @X_EXTRA_LIBS@
 X_LIBS = @X_LIBS@
-X_PRE_LIBS = @X_PRE_LIBS@
 ZLIB_CFLAGS = @ZLIB_CFLAGS@
 ZLIB_LIBS = @ZLIB_LIBS@
 abs_builddir = @abs_builddir@
@@ -513,6 +526,7 @@
 psdir = @psdir@
 pyexecdir = @pyexecdir@
 pythondir = @pythondir@
+runstatedir = @runstatedir@
 sbindir = @sbindir@
 sharedstatedir = @sharedstatedir@
 srcdir = @srcdir@
@@ -578,7 +592,6 @@
 	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu ext/ogg/Makefile'; \
 	$(am__cd) $(top_srcdir) && \
 	  $(AUTOMAKE) --gnu ext/ogg/Makefile
-.PRECIOUS: Makefile
 Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
 	@case '$?' in \
 	  *config.status*) \
@@ -951,20 +964,8 @@
 	pdf pdf-am ps ps-am tags tags-am uninstall uninstall-am \
 	uninstall-pluginLTLIBRARIES
 
+.PRECIOUS: Makefile
 
-Android.mk: Makefile.am $(BUILT_SOURCES)
-	androgenizer \
-	-:PROJECT libgstogg -:SHARED libgstogg \
-	 -:TAGS eng debug \
-         -:REL_TOP $(top_srcdir) -:ABS_TOP $(abs_top_srcdir) \
-	 -:SOURCES $(libgstogg_la_SOURCES) \
-	 -:CFLAGS $(DEFS) $(DEFAULT_INCLUDES) $(libgstogg_la_CFLAGS) \
-	 -:LDFLAGS $(libgstogg_la_LDFLAGS) \
-	           $(libgstogg_la_LIBADD) \
-	           -ldl \
-	 -:PASSTHROUGH LOCAL_ARM_MODE:=arm \
-		       LOCAL_MODULE_PATH:='$$(TARGET_OUT)/lib/gstreamer-0.10' \
-	> $@
 
 # 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/ext/ogg/gstoggdemux.c b/ext/ogg/gstoggdemux.c
index 1ea27a1..ee750b2 100644
--- a/ext/ogg/gstoggdemux.c
+++ b/ext/ogg/gstoggdemux.c
@@ -28,8 +28,8 @@
  * <refsect2>
  * <title>Example pipelines</title>
  * |[
- * gst-launch -v filesrc location=test.ogg ! oggdemux ! vorbisdec ! audioconvert ! alsasink
- * ]| Decodes the vorbis audio stored inside an ogg container.
+ * gst-launch-1.0 -v filesrc location=test.ogg ! oggdemux ! vorbisdec ! audioconvert ! audioresample ! autoaudiosink
+ * ]| Decodes a vorbis audio stream stored inside an ogg container and plays it.
  * </refsect2>
  */
 
@@ -59,6 +59,8 @@
 #define GST_FLOW_LIMIT GST_FLOW_CUSTOM_ERROR
 #define GST_FLOW_SKIP_PUSH GST_FLOW_CUSTOM_SUCCESS_1
 
+#define SEEK_GIVE_UP_THRESHOLD (3*GST_SECOND)
+
 #define GST_CHAIN_LOCK(ogg)     g_mutex_lock(&(ogg)->chain_lock)
 #define GST_CHAIN_UNLOCK(ogg)   g_mutex_unlock(&(ogg)->chain_lock)
 
@@ -177,6 +179,7 @@
   gst_pad_use_fixed_caps (GST_PAD (pad));
 
   pad->current_granule = -1;
+  pad->prev_granule = -1;
   pad->keyframe_granule = -1;
 
   pad->start_time = GST_CLOCK_TIME_NONE;
@@ -458,6 +461,7 @@
   pad->last_ret = GST_FLOW_OK;
   pad->position = GST_CLOCK_TIME_NONE;
   pad->current_granule = -1;
+  pad->prev_granule = -1;
   pad->keyframe_granule = -1;
   pad->is_eos = FALSE;
 }
@@ -582,6 +586,74 @@
     GST_DEBUG_OBJECT (ogg, "packet duration %" G_GUINT64_FORMAT, duration);
   }
 
+
+  /* If we get a hole at start, it might be we're catching a stream
+   * partway through. In that case, if the stream has an index, the
+   * index might be mooted. However, as it's totally valid to index
+   * a stream with a hole at start (ie, capturing a live stream and
+   * then index it), we now check whether the index references some
+   * offset beyond the byte length (if known). If this is the case,
+   * we can be reasonably sure we're getting a stream partway, with
+   * its index being now useless since we don't know how many bytes
+   * were skipped, preventing us from patching the index offsets to
+   * match the hole size. */
+  if (!is_header && ogg->check_index_overflow) {
+    GstQuery *query;
+    GstFormat format;
+    int i;
+    gint64 length;
+    gboolean beyond;
+
+    if (ogg->current_chain) {
+      query = gst_query_new_duration (GST_FORMAT_BYTES);
+      if (gst_pad_peer_query (ogg->sinkpad, query)) {
+        gst_query_parse_duration (query, &format, &length);
+        if (format == GST_FORMAT_BYTES && length >= 0) {
+          for (i = 0; i < ogg->current_chain->streams->len; i++) {
+            GstOggPad *ipad =
+                g_array_index (ogg->current_chain->streams, GstOggPad *, i);
+            if (!ipad->map.index)
+              continue;
+            beyond = ipad->map.n_index
+                && ipad->map.index[ipad->map.n_index - 1].offset >= length;
+            if (beyond) {
+              GST_WARNING_OBJECT (pad, "Index offsets beyong byte length");
+              if (ipad->discont) {
+                /* hole - the index is most likely screwed up */
+                GST_WARNING_OBJECT (ogg, "Discarding entire index");
+                g_free (ipad->map.index);
+                ipad->map.index = NULL;
+                ipad->map.n_index = 0;
+              } else {
+                /* no hole - we can just clip the index if needed */
+                GST_WARNING_OBJECT (ogg, "Clipping index");
+                while (ipad->map.n_index > 0
+                    && ipad->map.index[ipad->map.n_index - 1].offset >= length)
+                  ipad->map.n_index--;
+                if (ipad->map.n_index == 0) {
+                  GST_WARNING_OBJECT (ogg, "The entire index was clipped");
+                  g_free (ipad->map.index);
+                  ipad->map.index = NULL;
+                }
+              }
+              /* We can't trust the total time if the index goes beyond */
+              ipad->map.total_time = -1;
+            } else {
+              /* use total time to update the total ogg time */
+              if (ogg->total_time == -1) {
+                ogg->total_time = ipad->map.total_time;
+              } else if (ipad->map.total_time > 0) {
+                ogg->total_time = MAX (ogg->total_time, ipad->map.total_time);
+              }
+            }
+          }
+        }
+      }
+      gst_query_unref (query);
+    }
+    ogg->check_index_overflow = FALSE;
+  }
+
   if (packet->b_o_s) {
     out_timestamp = GST_CLOCK_TIME_NONE;
     out_duration = GST_CLOCK_TIME_NONE;
@@ -640,8 +712,21 @@
               GST_SECOND * pad->map.granulerate_d, pad->map.granulerate_n);
         }
       } else {
-        out_timestamp = gst_ogg_stream_granule_to_time (&pad->map,
-            pad->current_granule - duration);
+        /* The last packet may be clipped. This will be represented
+           by the last granule being smaller than what it would otherwise
+           have been, had no content been clipped. In that case, we
+           cannot calculate the PTS of the audio from the packet length
+           and granule. */
+        if (packet->e_o_s) {
+          if (pad->prev_granule >= 0)
+            out_timestamp = gst_ogg_stream_granule_to_time (&pad->map,
+                pad->prev_granule);
+          else
+            out_timestamp = 0;
+        } else {
+          out_timestamp = gst_ogg_stream_granule_to_time (&pad->map,
+              pad->current_granule - duration);
+        }
         out_duration =
             gst_ogg_stream_granule_to_time (&pad->map,
             pad->current_granule) - out_timestamp;
@@ -652,6 +737,7 @@
       out_offset =
           gst_ogg_stream_granule_to_time (&pad->map, pad->current_granule);
     }
+    pad->prev_granule = pad->current_granule;
   }
 
   if (pad->map.is_ogm_text) {
@@ -687,7 +773,9 @@
   /* Mark discont on the buffer */
   if (pad->discont) {
     GST_BUFFER_FLAG_SET (buf, GST_BUFFER_FLAG_DISCONT);
-    pad->discont = FALSE;
+    if GST_BUFFER_TIMESTAMP_IS_VALID
+      (buf)
+          pad->discont = FALSE;
   }
 
   pad->position = ogg->segment.position;
@@ -695,6 +783,7 @@
   /* don't push the header packets when we are asked to skip them */
   if (!packet->b_o_s || push_headers) {
     if (pad->last_ret == GST_FLOW_OK) {
+      GST_LOG_OBJECT (ogg, "Pushing buf %" GST_PTR_FORMAT, buf);
       ret = gst_pad_push (GST_PAD_CAST (pad), buf);
     } else {
       GST_DEBUG_OBJECT (ogg, "not pushing buffer on error pad");
@@ -732,8 +821,8 @@
   /* and store as the current position */
   ogg->segment.position = current_time;
 
-  GST_DEBUG_OBJECT (ogg, "ogg current time %" GST_TIME_FORMAT,
-      GST_TIME_ARGS (current_time));
+  GST_DEBUG_OBJECT (ogg, "ogg current time %" GST_TIME_FORMAT
+      " (%" G_GINT64_FORMAT ")", GST_TIME_ARGS (current_time), current_time);
 
   /* check stream eos */
   if (!pad->is_eos && !delta_unit &&
@@ -898,13 +987,7 @@
           case GST_OGG_SKELETON_INDEX:
             gst_ogg_map_add_index (&skel_pad->map, &pad->map, packet->packet,
                 packet->bytes);
-
-            /* use total time to update the total ogg time */
-            if (ogg->total_time == -1) {
-              ogg->total_time = skel_pad->map.total_time;
-            } else if (skel_pad->map.total_time > 0) {
-              ogg->total_time = MAX (ogg->total_time, skel_pad->map.total_time);
-            }
+            ogg->check_index_overflow = TRUE;
             break;
           default:
             break;
@@ -919,9 +1002,11 @@
 
   granule = gst_ogg_stream_granulepos_to_granule (&pad->map,
       packet->granulepos);
-  if (granule >= 0) {
+  if (granule > 0) {
     GST_DEBUG_OBJECT (ogg, "%p has granulepos %" G_GINT64_FORMAT, pad, granule);
     pad->current_granule = granule;
+  } else if (granule == 0) {
+    /* headers */
   } else if (granule != -1) {
     GST_ERROR_OBJECT (ogg,
         "granulepos %" G_GINT64_FORMAT " yielded granule %" G_GINT64_FORMAT,
@@ -993,7 +1078,8 @@
             (gint64) packet->granulepos, granule, pad->map.accumulated_granule);
       } else {
         packet->granulepos = gst_ogg_stream_granule_to_granulepos (&pad->map,
-            pad->map.accumulated_granule, pad->keyframe_granule);
+            pad->map.accumulated_granule + pad->current_granule,
+            pad->keyframe_granule);
       }
     }
   } else {
@@ -1053,19 +1139,20 @@
                 GST_TIME_ARGS (start_time));
             segment.rate = ogg->push_seek_rate;
             segment.start = ogg->push_seek_time_original_target;
+            segment.position = ogg->push_seek_time_original_target;
             segment.stop = ogg->push_seek_time_original_stop;
             segment.time = ogg->push_seek_time_original_target;
-            segment.base = ogg->push_seek_time_original_target;
+            segment.base = ogg->segment.base;
             event = gst_event_new_segment (&segment);
-            gst_event_set_seqnum (event, ogg->push_seek_seqnum);
             ogg->push_state = PUSH_PLAYING;
           } else {
             segment.rate = ogg->segment.rate;
             segment.applied_rate = ogg->segment.applied_rate;
             segment.start = start_time;
+            segment.position = start_time;
             segment.stop = chain->segment_stop;
             segment.time = segment_time;
-            segment.base = segment_time;
+            segment.base = ogg->segment.base;
             event = gst_event_new_segment (&segment);
           }
           GST_PUSH_UNLOCK (ogg);
@@ -1090,9 +1177,10 @@
           segment.rate = ogg->segment.rate;
           segment.applied_rate = ogg->segment.applied_rate;
           segment.start = chain->segment_start;
+          segment.position = chain->segment_start;
           segment.stop = chain->segment_stop;
           segment.time = chain->begin_time;
-          segment.base = chain->begin_time;
+          segment.base = ogg->segment.base;
           event = gst_event_new_segment (&segment);
         }
       }
@@ -1190,6 +1278,65 @@
 }
 
 static void
+gst_ogg_demux_setup_first_granule (GstOggDemux * ogg, GstOggPad * pad,
+    ogg_page * page)
+{
+  /* When we submit a page, we check if we have started tracking granules.
+   * If not, we calculate the granule corresponding to the first packet
+   * on the page. */
+  if (pad->current_granule == -1) {
+    ogg_int64_t granpos = ogg_page_granulepos (page);
+    if (granpos > 0) {
+      gint64 granule =
+          (gint64) gst_ogg_stream_granulepos_to_granule (&pad->map, granpos);
+      gint64 duration;
+      int packets = ogg_page_packets (page), n;
+      GST_DEBUG_OBJECT (pad,
+          "This page completes %d packets, granule %" G_GINT64_FORMAT, packets,
+          granule);
+      if (packets > 0) {
+        ogg_stream_state os;
+        ogg_packet op;
+        int last_size = pad->map.last_size;
+
+        memcpy (&os, &pad->map.stream, sizeof (os));
+        for (n = 0; n < packets; ++n) {
+          int ret = ogg_stream_packetout (&os, &op);
+          if (ret < 0) {
+            GST_WARNING_OBJECT (pad, "Failed to read packets off first page");
+            granule = -1;
+            break;
+          }
+          if (ret == 0) {
+            GST_WARNING_OBJECT (pad,
+                "Short read getting %d packets off first page", packets);
+            granule = -1;
+            break;
+          }
+          duration = gst_ogg_stream_get_packet_duration (&pad->map, &op);
+          GST_DEBUG_OBJECT (pad, "Packet %d has duration %" G_GINT64_FORMAT, n,
+              duration);
+          granule -= duration;
+        }
+        pad->map.last_size = last_size;
+        if (granule >= 0) {
+          pad->current_granule = granule;
+          GST_INFO_OBJECT (pad, "Starting with first granule %" G_GINT64_FORMAT,
+              granule);
+        } else {
+          pad->current_granule = 0;
+          GST_INFO_OBJECT (pad, "Extrapolated first granule is negative, "
+              "used to clip samples at start");
+        }
+      } else {
+        GST_WARNING_OBJECT (pad,
+            "Ogg page finishing no packets, but a valid granule");
+      }
+    }
+  }
+}
+
+static void
 gst_ogg_demux_setup_bisection_bounds (GstOggDemux * ogg)
 {
   if (ogg->push_last_seek_time >= ogg->push_seek_time_target) {
@@ -1369,22 +1516,20 @@
 
   ogg->push_state = PUSH_PLAYING;
 
-  GST_PUSH_UNLOCK (ogg);
-
-  if (event) {
-    /* If there is one, perform it */
-    gst_ogg_demux_perform_seek_push (ogg, event);
-  } else {
-    /* If there wasn't, seek back at start to start normal playback */
+  /* If there is one, perform it. Otherwise, seek back at start to start
+   * normal playback  */
+  if (!event) {
     GST_INFO_OBJECT (ogg, "Seeking back to 0 after duration check");
     event = gst_event_new_seek (1.0, GST_FORMAT_BYTES,
         GST_SEEK_FLAG_ACCURATE | GST_SEEK_FLAG_FLUSH,
         GST_SEEK_TYPE_SET, 1, GST_SEEK_TYPE_SET, GST_CLOCK_TIME_NONE);
-    if (!gst_pad_push_event (ogg->sinkpad, event)) {
-      GST_WARNING_OBJECT (ogg, "Failed seeking back to start");
-      return GST_FLOW_ERROR;
-    }
   }
+  gst_event_replace (&ogg->seek_event, event);
+  gst_event_unref (event);
+  GST_PUSH_UNLOCK (ogg);
+  g_mutex_lock (&ogg->seek_event_mutex);
+  g_cond_broadcast (&ogg->seek_event_cond);
+  g_mutex_unlock (&ogg->seek_event_mutex);
 
   return GST_FLOW_OK;
 }
@@ -1514,7 +1659,6 @@
     GstClockTime t;
     gint64 best = -1;
     GstEvent *sevent;
-    int res;
     gboolean close_enough;
     float seek_quality;
 
@@ -1523,6 +1667,8 @@
       GST_PUSH_UNLOCK (ogg);
       if (ogg_stream_pagein (&pad->map.stream, page) != 0)
         goto choked;
+      if (pad->current_granule == -1)
+        gst_ogg_demux_setup_first_granule (ogg, pad, page);
       return GST_FLOW_SKIP_PUSH;
     }
 
@@ -1542,6 +1688,8 @@
             "Not enough timing info collected for sync, waiting for more");
         if (ogg_stream_pagein (&pad->map.stream, page) != 0)
           goto choked;
+        if (pad->current_granule == -1)
+          gst_ogg_demux_setup_first_granule (ogg, pad, page);
         return GST_FLOW_SKIP_PUSH;
       }
       ogg->push_last_seek_time = sync_time;
@@ -1705,15 +1853,14 @@
           gst_event_new_seek (ogg->push_seek_rate, GST_FORMAT_BYTES,
           ogg->push_seek_flags, GST_SEEK_TYPE_SET, best,
           GST_SEEK_TYPE_NONE, -1);
-      gst_event_set_seqnum (sevent, ogg->push_seek_seqnum);
+      gst_event_set_seqnum (sevent, ogg->seqnum);
 
+      gst_event_replace (&ogg->seek_event, sevent);
+      gst_event_unref (sevent);
       GST_PUSH_UNLOCK (ogg);
-      res = gst_pad_push_event (ogg->sinkpad, sevent);
-      if (!res) {
-        /* We failed to send the seek event, notify the pipeline */
-        GST_ELEMENT_ERROR (ogg, RESOURCE, SEEK, (NULL), ("Failed to seek"));
-        return GST_FLOW_ERROR;
-      }
+      g_mutex_lock (&ogg->seek_event_mutex);
+      g_cond_broadcast (&ogg->seek_event_cond);
+      g_mutex_unlock (&ogg->seek_event_mutex);
       return GST_FLOW_SKIP_PUSH;
     }
 
@@ -1737,6 +1884,36 @@
   }
 }
 
+static void
+gst_ogg_demux_query_duration_push (GstOggDemux * ogg)
+{
+  if (!ogg->pullmode && ogg->push_byte_length == -1) {
+    GstQuery *query;
+    gboolean seekable = FALSE;
+
+    query = gst_query_new_seeking (GST_FORMAT_BYTES);
+    if (gst_pad_peer_query (ogg->sinkpad, query))
+      gst_query_parse_seeking (query, NULL, &seekable, NULL, NULL);
+    gst_query_unref (query);
+
+    if (seekable) {
+      gint64 length = -1;
+      if (!gst_element_query_duration (GST_ELEMENT (ogg), GST_FORMAT_BYTES,
+              &length)
+          || length <= 0) {
+        GST_DEBUG_OBJECT (ogg,
+            "Unable to determine stream size, assuming live, seeking disabled");
+        ogg->push_disable_seeking = TRUE;
+      } else {
+        ogg->push_disable_seeking = FALSE;
+      }
+    } else {
+      GST_DEBUG_OBJECT (ogg, "Stream is not seekable, seeking disabled");
+      ogg->push_disable_seeking = TRUE;
+    }
+  }
+}
+
 /* submit a page to an oggpad, this function will then submit all
  * the packets in the page.
  */
@@ -1775,6 +1952,8 @@
     }
   }
 
+  gst_ogg_demux_query_duration_push (ogg);
+
   /* keep track of time in push mode */
   if (!ogg->pullmode) {
     result = gst_ogg_pad_handle_push_mode_state (pad, page);
@@ -1789,6 +1968,8 @@
 
   if (ogg_stream_pagein (&pad->map.stream, page) != 0)
     goto choked;
+  if (pad->current_granule == -1)
+    gst_ogg_demux_setup_first_granule (ogg, pad, page);
 
   /* flush all packets in the stream layer, this might not give a packet if
    * the page had no packets finishing on the page (npackets == 0). */
@@ -1912,7 +2093,6 @@
 gst_ogg_chain_new_stream (GstOggChain * chain, guint32 serialno)
 {
   GstOggPad *ret;
-  GstTagList *list;
   gchar *name;
 
   GST_DEBUG_OBJECT (chain->ogg,
@@ -1934,12 +2114,6 @@
   if (ogg_stream_init (&ret->map.stream, serialno) != 0)
     goto init_failed;
 
-  /* FIXME: either do something with it or remove it */
-  list = gst_tag_list_new_empty ();
-  gst_tag_list_add (list, GST_TAG_MERGE_REPLACE, GST_TAG_SERIAL, serialno,
-      NULL);
-  gst_tag_list_unref (list);
-
   GST_DEBUG_OBJECT (chain->ogg,
       "created new ogg src %p for stream with serial %08x", ret, serialno);
 
@@ -2098,6 +2272,9 @@
 
   gst_flow_combiner_free (ogg->flowcombiner);
 
+  if (ogg->building_chain)
+    gst_ogg_chain_free (ogg->building_chain);
+
   G_OBJECT_CLASS (parent_class)->finalize (object);
 }
 
@@ -2116,11 +2293,13 @@
 
     stream->start_time = -1;
     stream->map.accumulated_granule = 0;
+    stream->current_granule = -1;
   }
   ogg->building_chain = chain;
   GST_DEBUG_OBJECT (ogg, "Resetting current chain");
   ogg->current_chain = NULL;
   ogg->resync = TRUE;
+  gst_ogg_chain_mark_discont (chain);
 
   ogg->chunk_size = CHUNKSIZE;
 }
@@ -2161,7 +2340,7 @@
           ogg->push_byte_offset = segment.start;
           ogg->push_last_seek_offset = segment.start;
 
-          if (gst_event_get_seqnum (event) == ogg->push_seek_seqnum) {
+          if (gst_event_get_seqnum (event) == ogg->seqnum) {
             GstSeekType stop_type = GST_SEEK_TYPE_NONE;
             if (ogg->push_seek_time_original_stop != -1)
               stop_type = GST_SEEK_TYPE_SET;
@@ -2171,12 +2350,43 @@
                 ogg->push_seek_time_original_stop, &update);
           }
 
+          if (!ogg->pullmode && !(ogg->push_seek_flags & GST_SEEK_FLAG_FLUSH)) {
+            int i;
+            GstOggChain *chain = ogg->current_chain;
+
+            ogg->push_seek_flags = 0;
+            if (!chain) {
+              /* This will happen when we bisect, as we clear the chain when
+                 we do the first seek. On subsequent ones, we just reset the
+                 ogg sync object as we already reset the chain */
+              GST_DEBUG_OBJECT (ogg, "No chain, just resetting ogg sync");
+              ogg_sync_reset (&ogg->sync);
+            } else {
+              /* reset pad push mode seeking state */
+              for (i = 0; i < chain->streams->len; i++) {
+                GstOggPad *pad = g_array_index (chain->streams, GstOggPad *, i);
+                pad->push_kf_time = GST_CLOCK_TIME_NONE;
+                pad->push_sync_time = GST_CLOCK_TIME_NONE;
+              }
+              ogg_sync_reset (&ogg->sync);
+              gst_ogg_demux_reset_streams (ogg);
+            }
+          }
+
+          if (!ogg->pullmode) {
+            if (ogg->seek_event_drop_till == gst_event_get_seqnum (event)) {
+              GST_DEBUG_OBJECT (ogg, "Got event seqnum %u, stopping dropping",
+                  ogg->seek_event_drop_till);
+              ogg->seek_event_drop_till = 0;
+            }
+          }
           GST_PUSH_UNLOCK (ogg);
         } else {
           GST_WARNING_OBJECT (ogg, "unexpected segment format: %s",
               gst_format_get_name (segment.format));
         }
       }
+
       gst_event_unref (event);
       res = TRUE;
       break;
@@ -2204,8 +2414,10 @@
 #endif
       res = gst_ogg_demux_send_event (ogg, event);
       if (ogg->current_chain == NULL) {
-        GST_ELEMENT_ERROR (ogg, STREAM, DEMUX, (NULL),
-            ("can't get first chain"));
+        GST_WARNING_OBJECT (ogg,
+            "EOS while trying to retrieve chain, seeking disabled");
+        ogg->push_disable_seeking = TRUE;
+        res = TRUE;
       }
       break;
     }
@@ -2563,6 +2775,9 @@
   /* if we cannot seek back to the chain, we can destroy the chain 
    * completely */
   if (!ogg->pullmode) {
+    if (ogg->building_chain == chain)
+      ogg->building_chain = NULL;
+    ogg->current_chain = NULL;
     gst_ogg_chain_free (chain);
   }
 
@@ -2971,6 +3186,8 @@
   GstFlowReturn ret;
   gint i, pending;
   gint serialno = 0;
+  gboolean found_keyframe = FALSE;
+  GstClockTime ts, first_ts = GST_CLOCK_TIME_NONE;
 
   position = segment->position;
 
@@ -3064,6 +3281,28 @@
       continue;
     }
 
+    /* We have a valid granpos, and we bail out when the time since the
+       first seen time to the time corresponding to this granpos is larger
+       then a threshold, to guard against some streams having large holes
+       (eg, a stream ending early, which would cause seeking after that
+       to fill up a queue for streams still active). */
+    ts = gst_ogg_stream_get_end_time_for_granulepos (&pad->map, granulepos);
+    if (GST_CLOCK_TIME_IS_VALID (ts)) {
+      if (first_ts == GST_CLOCK_TIME_NONE) {
+        GST_WARNING_OBJECT (pad, "Locking on ts %" GST_TIME_FORMAT,
+            GST_TIME_ARGS (ts));
+        first_ts = ts;
+      }
+      if (ts - first_ts > SEEK_GIVE_UP_THRESHOLD) {
+        GST_WARNING_OBJECT (pad,
+            "No data found for %" GST_TIME_FORMAT ", giving up",
+            GST_TIME_ARGS (SEEK_GIVE_UP_THRESHOLD));
+        found_keyframe = FALSE;
+        keytarget = target;
+        break;
+      }
+    }
+
     /* in reverse we want to go past the page with the lower timestamp */
     if (segment->rate < 0.0) {
       /* get time for this pad */
@@ -3101,6 +3340,7 @@
       if (keyframe_time < keytarget) {
         serialno = pad->map.serialno;
         keytarget = keyframe_time;
+        found_keyframe = TRUE;
       }
     }
 
@@ -3114,6 +3354,10 @@
   if (segment->rate < 0.0)
     goto done;
 
+  /* No keyframe found, no need to bisect again, keytarget == target here */
+  if (!found_keyframe)
+    best = 0;
+
   if (keytarget != target) {
     GST_LOG_OBJECT (ogg, "final seek to target %" GST_TIME_FORMAT,
         GST_TIME_ARGS (keytarget));
@@ -3388,7 +3632,6 @@
   /* In push mode, we get to the end of the stream to get the duration */
   gint64 position;
   GstEvent *sevent;
-  gboolean res;
 
   /* A full Ogg page can be almost 64 KB. There's no guarantee that there'll be a
      granpos there, but it's fairly likely */
@@ -3403,16 +3646,12 @@
   /* do not read the last byte */
   sevent = gst_event_new_seek (1.0, GST_FORMAT_BYTES, flags, GST_SEEK_TYPE_SET,
       position, GST_SEEK_TYPE_SET, ogg->push_byte_length - 1);
-  res = gst_pad_push_event (ogg->sinkpad, sevent);
-  if (res) {
-    GST_DEBUG_OBJECT (ogg, "Seek succesful");
-    return TRUE;
-  } else {
-    GST_INFO_OBJECT (ogg, "Seek failed, duration will stay unknown");
-    ogg->push_state = PUSH_PLAYING;
-    ogg->push_disable_seeking = TRUE;
-    return FALSE;
-  }
+  gst_event_replace (&ogg->seek_event, sevent);
+  gst_event_unref (sevent);
+  g_mutex_lock (&ogg->seek_event_mutex);
+  g_cond_broadcast (&ogg->seek_event_cond);
+  g_mutex_unlock (&ogg->seek_event_mutex);
+  return TRUE;
 }
 
 static gboolean
@@ -3435,6 +3674,7 @@
       } else {
         GST_DEBUG_OBJECT (ogg, "File byte length unknown, assuming live");
         ogg->push_disable_seeking = TRUE;
+        gst_object_unref (peer);
         return TRUE;
       }
       res = gst_pad_query_duration (peer, GST_FORMAT_TIME, &length);
@@ -3499,11 +3739,6 @@
   if (stop_type == GST_SEEK_TYPE_NONE)
     stop = -1;
 
-  if (!(flags & GST_SEEK_FLAG_FLUSH)) {
-    GST_DEBUG_OBJECT (ogg, "can only do flushing seeks");
-    goto error;
-  }
-
   GST_DEBUG_OBJECT (ogg, "Push mode seek request: %" GST_TIME_FORMAT,
       GST_TIME_ARGS (start));
 
@@ -3586,7 +3821,7 @@
   ogg->push_offset1 = ogg->push_byte_length - 1;
   ogg->push_time0 = ogg->push_start_time;
   ogg->push_time1 = ogg->push_time_length;
-  ogg->push_seek_seqnum = gst_event_get_seqnum (event);
+  ogg->seqnum = gst_event_get_seqnum (event);
   ogg->push_seek_time_target = start;
   ogg->push_prev_seek_time = GST_CLOCK_TIME_NONE;
   ogg->push_seek_time_original_target = start;
@@ -3595,11 +3830,13 @@
   ogg->seek_secant = FALSE;
   ogg->seek_undershot = FALSE;
 
-  /* reset pad push mode seeking state */
-  for (i = 0; i < chain->streams->len; i++) {
-    GstOggPad *pad = g_array_index (chain->streams, GstOggPad *, i);
-    pad->push_kf_time = GST_CLOCK_TIME_NONE;
-    pad->push_sync_time = GST_CLOCK_TIME_NONE;
+  if (flags & GST_SEEK_FLAG_FLUSH) {
+    /* reset pad push mode seeking state */
+    for (i = 0; i < chain->streams->len; i++) {
+      GstOggPad *pad = g_array_index (chain->streams, GstOggPad *, i);
+      pad->push_kf_time = GST_CLOCK_TIME_NONE;
+      pad->push_sync_time = GST_CLOCK_TIME_NONE;
+    }
   }
 
   GST_DEBUG_OBJECT (ogg,
@@ -3620,8 +3857,12 @@
       start_type, best, GST_SEEK_TYPE_NONE, -1);
   gst_event_set_seqnum (sevent, gst_event_get_seqnum (event));
 
+  gst_event_replace (&ogg->seek_event, sevent);
+  gst_event_unref (sevent);
   GST_PUSH_UNLOCK (ogg);
-  res = gst_pad_push_event (ogg->sinkpad, sevent);
+  g_mutex_lock (&ogg->seek_event_mutex);
+  g_cond_broadcast (&ogg->seek_event_cond);
+  g_mutex_unlock (&ogg->seek_event_mutex);
 
   return res;
 
@@ -4074,8 +4315,12 @@
    * ogg file. */
   gst_ogg_demux_seek (ogg, 0);
   ret = gst_ogg_demux_read_chain (ogg, &chain);
-  if (ret != GST_FLOW_OK)
-    goto no_first_chain;
+  if (ret != GST_FLOW_OK) {
+    if (ret == GST_FLOW_FLUSHING)
+      goto flushing;
+    else
+      goto no_first_chain;
+  }
 
   /* read page from end offset, we use this page to check if its serial
    * number is contained in the first chain. If this is the case then
@@ -4135,6 +4380,11 @@
       gst_ogg_chain_free (chain);
     return ret;
   }
+flushing:
+  {
+    GST_DEBUG_OBJECT (ogg, "Flushing, can't read chain");
+    return GST_FLOW_FLUSHING;
+  }
 }
 
 static void
@@ -4185,7 +4435,7 @@
       segment.start = start;
       segment.stop = chain->segment_stop;
       segment.time = chain->begin_time;
-      segment.base = chain->begin_time;
+      segment.base += chain->begin_time;
       event = gst_event_new_segment (&segment);
       gst_event_set_seqnum (event, ogg->seqnum);
 
@@ -4279,9 +4529,19 @@
   GstOggDemux *ogg;
   gint ret = 0;
   GstFlowReturn result = GST_FLOW_OK;
+  gboolean drop;
 
   ogg = GST_OGG_DEMUX (parent);
 
+  GST_PUSH_LOCK (ogg);
+  drop = (ogg->seek_event_drop_till > 0);
+  GST_PUSH_UNLOCK (ogg);
+  if (drop) {
+    GST_ERROR_OBJECT (ogg, "Dropping buffer because we have a pending seek");
+    gst_buffer_unref (buffer);
+    return GST_FLOW_OK;
+  }
+
   GST_DEBUG_OBJECT (ogg, "enter");
   result = gst_ogg_demux_submit_buffer (ogg, buffer);
   if (result < 0) {
@@ -4347,7 +4607,8 @@
   pad->last_ret = ret;
   pad->is_eos = (ret == GST_FLOW_EOS);
 
-  return gst_flow_combiner_update_flow (ogg->flowcombiner, ret);
+  return gst_flow_combiner_update_pad_flow (ogg->flowcombiner,
+      GST_PAD_CAST (pad), ret);
 }
 
 static GstFlowReturn
@@ -4442,10 +4703,10 @@
   for (i = 0; i < chain->streams->len; i++) {
     GstOggPad *stream = g_array_index (chain->streams, GstOggPad *, i);
 
-    /* Theoretically, we should be doing this for all streams, but we're only
-     * doing it for known-to-be-sparse streams at the moment in order not to
-     * break things for wrongly-muxed streams (like we used to produce once) */
-    if (stream->map.is_sparse && stream->position != GST_CLOCK_TIME_NONE) {
+    /* Theoretically, we should be doing this for all streams, so we're doing
+     * it, but it might break things break things for wrongly-muxed streams
+     * (like we used to produce once) */
+    if ( /*stream->map.is_sparse && */ stream->position != GST_CLOCK_TIME_NONE) {
 
       /* Does this stream lag? Random threshold of 2 seconds */
       if (GST_CLOCK_DIFF (stream->position, cur) > (2 * GST_SECOND)) {
@@ -4518,9 +4779,18 @@
   }
 seek_failed:
   {
-    GST_ELEMENT_ERROR (ogg, STREAM, DEMUX, (NULL),
-        ("failed to start demuxing ogg"));
-    ret = GST_FLOW_ERROR;
+    gboolean flushing;
+
+    GST_OBJECT_LOCK (pad);
+    flushing = GST_PAD_IS_FLUSHING (pad);
+    GST_OBJECT_UNLOCK (pad);
+    if (flushing) {
+      ret = GST_FLOW_FLUSHING;
+    } else {
+      GST_ELEMENT_ERROR (ogg, STREAM, DEMUX, (NULL),
+          ("failed to start demuxing ogg"));
+      ret = GST_FLOW_ERROR;
+    }
     goto pause;
   }
 pause:
@@ -4588,6 +4858,55 @@
   }
 }
 
+/* The sink pad task function for push mode.
+ * It just sends any seek events queued by the streaming thread.
+ */
+static gpointer
+gst_ogg_demux_loop_push (GstOggDemux * ogg)
+{
+  GstEvent *event;
+
+  while (1) {
+    g_mutex_lock (&ogg->seek_event_mutex);
+    if (ogg->seek_event_thread_stop) {
+      g_mutex_unlock (&ogg->seek_event_mutex);
+      break;
+    }
+    g_cond_wait (&ogg->seek_event_cond, &ogg->seek_event_mutex);
+    if (ogg->seek_event_thread_stop) {
+      g_mutex_unlock (&ogg->seek_event_mutex);
+      break;
+    }
+    g_mutex_unlock (&ogg->seek_event_mutex);
+
+    GST_PUSH_LOCK (ogg);
+    event = ogg->seek_event;
+    ogg->seek_event = NULL;
+    if (event) {
+      ogg->seek_event_drop_till = gst_event_get_seqnum (event);
+    }
+    GST_PUSH_UNLOCK (ogg);
+
+    if (!event)
+      continue;
+
+    GST_DEBUG_OBJECT (ogg->sinkpad, "Pushing event %" GST_PTR_FORMAT, event);
+    if (!gst_pad_push_event (ogg->sinkpad, event)) {
+      GST_WARNING_OBJECT (ogg, "Failed to push event");
+      GST_PUSH_LOCK (ogg);
+      if (!ogg->pullmode) {
+        ogg->push_state = PUSH_PLAYING;
+        ogg->push_disable_seeking = TRUE;
+      }
+      GST_PUSH_UNLOCK (ogg);
+    } else {
+      GST_DEBUG_OBJECT (ogg->sinkpad, "Pushed event ok");
+    }
+  }
+  gst_object_unref (ogg);
+  return NULL;
+}
+
 static void
 gst_ogg_demux_clear_chains (GstOggDemux * ogg)
 {
@@ -4602,6 +4921,8 @@
     gst_ogg_chain_free (chain);
   }
   ogg->chains = g_array_set_size (ogg->chains, 0);
+  ogg->current_chain = NULL;
+  ogg->building_chain = NULL;
   GST_CHAIN_UNLOCK (ogg);
 }
 
@@ -4615,8 +4936,7 @@
 gst_ogg_demux_sink_activate (GstPad * sinkpad, GstObject * parent)
 {
   GstQuery *query;
-  gboolean pull_mode = FALSE;
-  GstSchedulingFlags flags;
+  gboolean pull_mode;
 
   query = gst_query_new_scheduling ();
 
@@ -4625,13 +4945,8 @@
     goto activate_push;
   }
 
-  gst_query_parse_scheduling (query, &flags, NULL, NULL, NULL);
-
-  /* Don't use pull mode if sequential access is suggested */
-  if (gst_query_has_scheduling_mode (query, GST_PAD_MODE_PULL)) {
-    pull_mode = (flags & GST_SCHEDULING_FLAG_SEEKABLE) &&
-        !(flags & GST_SCHEDULING_FLAG_SEQUENTIAL);
-  }
+  pull_mode = gst_query_has_scheduling_mode_with_flags (query,
+      GST_PAD_MODE_PULL, GST_SCHEDULING_FLAG_SEEKABLE);
   gst_query_unref (query);
 
   if (!pull_mode)
@@ -4660,6 +4975,22 @@
     case GST_PAD_MODE_PUSH:
       ogg->pullmode = FALSE;
       ogg->resync = FALSE;
+      if (active) {
+        ogg->seek_event_thread_stop = FALSE;
+        g_mutex_init (&ogg->seek_event_mutex);
+        g_cond_init (&ogg->seek_event_cond);
+        ogg->seek_event_thread = g_thread_new ("seek_event_thread",
+            (GThreadFunc) gst_ogg_demux_loop_push, gst_object_ref (ogg));
+      } else {
+        g_mutex_lock (&ogg->seek_event_mutex);
+        ogg->seek_event_thread_stop = TRUE;
+        g_cond_broadcast (&ogg->seek_event_cond);
+        g_mutex_unlock (&ogg->seek_event_mutex);
+        g_thread_join (ogg->seek_event_thread);
+        g_cond_clear (&ogg->seek_event_cond);
+        g_mutex_clear (&ogg->seek_event_mutex);
+        ogg->seek_event_thread = NULL;
+      }
       res = TRUE;
       break;
     case GST_PAD_MODE_PULL:
@@ -4708,25 +5039,10 @@
       ogg->group_id = G_MAXUINT;
 
       ogg->push_disable_seeking = FALSE;
-      if (!ogg->pullmode) {
-        GstPad *peer;
-        if ((peer = gst_pad_get_peer (ogg->sinkpad)) != NULL) {
-          gint64 length = -1;
-          if (!gst_pad_query_duration (peer, GST_FORMAT_BYTES, &length)
-              || length <= 0) {
-            GST_DEBUG_OBJECT (ogg,
-                "Unable to determine stream size, assuming live, seeking disabled");
-            ogg->push_disable_seeking = TRUE;
-          }
-          gst_object_unref (peer);
-        }
-      }
-
+      gst_ogg_demux_query_duration_push (ogg);
       GST_PUSH_UNLOCK (ogg);
       gst_segment_init (&ogg->segment, GST_FORMAT_TIME);
       break;
-    case GST_STATE_CHANGE_PAUSED_TO_PLAYING:
-      break;
     default:
       break;
   }
diff --git a/ext/ogg/gstoggdemux.h b/ext/ogg/gstoggdemux.h
index d679f64..db1f393 100644
--- a/ext/ogg/gstoggdemux.h
+++ b/ext/ogg/gstoggdemux.h
@@ -89,6 +89,7 @@
 
   gint64 packetno;
   gint64 current_granule;
+  gint64 prev_granule;
   gint64 keyframe_granule;
 
   GstClockTime start_time;      /* the timestamp of the first sample */
@@ -147,6 +148,8 @@
      useful for skewing when seeking */
   guint64 max_packet_size, max_page_size;
 
+  gboolean check_index_overflow;
+
   /* state */
   GMutex chain_lock;           /* we need the lock to protect the chains */
   GArray *chains;               /* list of chains we know */
@@ -190,7 +193,6 @@
   gboolean seek_secant;
   gboolean seek_undershot;
   GstClockTime push_prev_seek_time;
-  guint32 push_seek_seqnum;
 
   gint push_bisection_steps[2];
   gint stats_bisection_steps[2];
@@ -200,6 +202,14 @@
   /* ogg stuff */
   ogg_sync_state sync;
   long chunk_size;
+
+  /* Seek events set up by the streaming thread in push mode */
+  GstEvent *seek_event;
+  GThread *seek_event_thread;
+  GMutex seek_event_mutex;
+  GCond seek_event_cond;
+  gboolean seek_event_thread_stop;
+  guint32 seek_event_drop_till;
 };
 
 struct _GstOggDemuxClass
diff --git a/ext/ogg/gstoggmux.c b/ext/ogg/gstoggmux.c
index b4f1816..b62f125 100644
--- a/ext/ogg/gstoggmux.c
+++ b/ext/ogg/gstoggmux.c
@@ -27,7 +27,7 @@
  * <refsect2>
  * <title>Example pipelines</title>
  * |[
- * gst-launch v4l2src num-buffers=500 ! video/x-raw,width=320,height=240 ! videoconvert ! theoraenc ! oggmux ! filesink location=video.ogg
+ * gst-launch-1.0 v4l2src num-buffers=500 ! video/x-raw,width=320,height=240 ! videoconvert ! videorate ! theoraenc ! oggmux ! filesink location=video.ogg
  * ]| Encodes a video stream captured from a v4l2-compatible camera to Ogg/Theora
  * (the encoding will stop automatically after 500 frames)
  * </refsect2>
@@ -63,20 +63,6 @@
 #define GST_GP_FORMAT "[gp %8" G_GINT64_FORMAT "]"
 #define GST_GP_CAST(_gp) ((gint64) _gp)
 
-typedef enum
-{
-  GST_OGG_FLAG_BOS = GST_ELEMENT_FLAG_LAST,
-  GST_OGG_FLAG_EOS
-}
-GstOggFlag;
-
-/* OggMux signals and args */
-enum
-{
-  /* FILL ME */
-  LAST_SIGNAL
-};
-
 /* set to 0.5 seconds by default */
 #define DEFAULT_MAX_DELAY       G_GINT64_CONSTANT(500000000)
 #define DEFAULT_MAX_PAGE_DELAY  G_GINT64_CONSTANT(500000000)
@@ -228,8 +214,6 @@
   gst_pad_set_event_function (ogg_mux->srcpad, gst_ogg_mux_handle_src_event);
   gst_element_add_pad (GST_ELEMENT (ogg_mux), ogg_mux->srcpad);
 
-  GST_OBJECT_FLAG_SET (GST_ELEMENT (ogg_mux), GST_OGG_FLAG_BOS);
-
   /* seed random number generator for creation of serial numbers */
   srand (time (NULL));
 
@@ -316,7 +300,7 @@
   GstOggMux *ogg_mux = GST_OGG_MUX (user_data);
   GstOggPadData *ogg_pad = (GstOggPadData *) pad;
 
-  GST_DEBUG_OBJECT (pad, "Got %s event", GST_EVENT_TYPE_NAME (event));
+  GST_DEBUG_OBJECT (pad->pad, "Got %s event", GST_EVENT_TYPE_NAME (event));
 
   switch (GST_EVENT_TYPE (event)) {
     case GST_EVENT_SEGMENT:
@@ -642,14 +626,14 @@
       }
     } else {
       /* We then need to check for a non-negative granulepos */
-      int i;
       gboolean valid = FALSE;
+      GList *l;
 
-      for (i = 0; i < pad->pagebuffers->length; i++) {
-        buf = g_queue_peek_nth (pad->pagebuffers, i);
+      for (l = pad->pagebuffers->head; l != NULL; l = l->next) {
+        buf = l->data;
         /* Here we check the OFFSET_END, which is actually temporarily the
          * granulepos value for this buffer */
-        if (GST_BUFFER_OFFSET_END (buf) != -1) {
+        if (GST_BUFFER_OFFSET_END_IS_VALID (buf)) {
           valid = TRUE;
           break;
         }
@@ -816,7 +800,7 @@
 gst_ogg_mux_decorate_buffer (GstOggMux * ogg_mux, GstOggPadData * pad,
     GstBuffer * buf)
 {
-  GstClockTime time;
+  GstClockTime time, end_time;
   gint64 duration, granule, limit;
   GstClockTime next_time;
   GstClockTimeDiff diff;
@@ -866,6 +850,25 @@
     goto no_granule;
   }
 
+  /* The last packet may have clipped samples. We need to test against
+   * the segment to ensure we do not use a granpos that encompasses those.
+   */
+  end_time =
+      gst_ogg_stream_granule_to_time (&pad->map, pad->next_granule + duration);
+  if (end_time > pad->segment.stop
+      && !GST_CLOCK_TIME_IS_VALID (gst_segment_to_running_time (&pad->segment,
+              GST_FORMAT_TIME, pad->segment.start + end_time))) {
+    gint64 actual_duration =
+        gst_util_uint64_scale_round (pad->segment.stop - time,
+        pad->map.granulerate_n,
+        GST_SECOND * pad->map.granulerate_d);
+    GST_INFO_OBJECT (ogg_mux,
+        "Got clipped last packet of duration %" G_GINT64_FORMAT " (%"
+        G_GINT64_FORMAT " clipped)", actual_duration,
+        duration - actual_duration);
+    duration = actual_duration;
+  }
+
   GST_LOG_OBJECT (pad->collect.pad, "buffer ts %" GST_TIME_FORMAT
       ", duration %" GST_TIME_FORMAT ", granule duration %" G_GINT64_FORMAT,
       GST_TIME_ARGS (time), GST_TIME_ARGS (GST_BUFFER_DURATION (buf)),
@@ -1660,7 +1663,7 @@
     if (next_buf) {
       ogg_mux->pulling->eos = FALSE;
       gst_buffer_unref (next_buf);
-    } else {
+    } else if (!ogg_mux->pulling->map.is_sparse) {
       GST_DEBUG_OBJECT (ogg_mux->pulling->collect.pad, "setting eos to true");
       ogg_mux->pulling->eos = TRUE;
     }
@@ -1673,7 +1676,7 @@
     if (next_buf) {
       best->eos = FALSE;
       gst_buffer_unref (next_buf);
-    } else {
+    } else if (!best->map.is_sparse) {
       GST_DEBUG_OBJECT (best->collect.pad, "setting eos to true");
       best->eos = TRUE;
     }
@@ -1976,7 +1979,7 @@
     GST_DEBUG_OBJECT (oggpad->collect.pad,
         "oggpad %p eos %d", oggpad, oggpad->eos);
 
-    if (oggpad->eos == FALSE)
+    if (!oggpad->eos)
       return FALSE;
 
     walk = g_slist_next (walk);
@@ -2041,6 +2044,14 @@
   if (best->eos && all_pads_eos (pads))
     goto eos;
 
+  /* We might have used up a cached pad->buffer. If all streams
+   * have a buffer ready in collectpads, collectpads will block at
+   * next chain, and will never call collected again. So we make a
+   * last call to _queue_pads now, to ensure that collectpads can
+   * push to at least one pad (mostly for streams with a single
+   * logical stream). */
+  gst_ogg_mux_queue_pads (ogg_mux, &popped);
+
   return ret;
 
 eos:
diff --git a/ext/ogg/gstogmparse.c b/ext/ogg/gstogmparse.c
index a08c5df..c85c064 100644
--- a/ext/ogg/gstogmparse.c
+++ b/ext/ogg/gstogmparse.c
@@ -279,7 +279,7 @@
   gst_element_class_set_static_metadata (element_class,
       "OGM audio stream parser", "Codec/Decoder/Audio",
       "parse an OGM audio header and stream",
-      "GStreamer maintainers <gstreamer-devel@lists.sourceforge.net>");
+      "GStreamer maintainers <gstreamer-devel@lists.freedesktop.org>");
 
   gst_element_class_add_pad_template (element_class,
       gst_static_pad_template_get (&sink_factory_audio));
@@ -298,7 +298,7 @@
   gst_element_class_set_static_metadata (element_class,
       "OGM video stream parser", "Codec/Decoder/Video",
       "parse an OGM video header and stream",
-      "GStreamer maintainers <gstreamer-devel@lists.sourceforge.net>");
+      "GStreamer maintainers <gstreamer-devel@lists.freedesktop.org>");
 
   gst_element_class_add_pad_template (element_class,
       gst_static_pad_template_get (&sink_factory_video));
@@ -318,7 +318,7 @@
   gst_element_class_set_static_metadata (element_class,
       "OGM text stream parser", "Codec/Decoder/Subtitle",
       "parse an OGM text header and stream",
-      "GStreamer maintainers <gstreamer-devel@lists.sourceforge.net>");
+      "GStreamer maintainers <gstreamer-devel@lists.freedesktop.org>");
 
   gst_element_class_add_pad_template (element_class,
       gst_static_pad_template_get (&sink_factory_text));
diff --git a/ext/pango/Makefile.am b/ext/pango/Makefile.am
index 7ecfbda..9320e9e 100644
--- a/ext/pango/Makefile.am
+++ b/ext/pango/Makefile.am
@@ -23,6 +23,7 @@
 	$(top_builddir)/gst-libs/gst/video/libgstvideo-$(GST_API_VERSION).la \
 	$(GST_BASE_LIBS) \
 	$(GST_LIBS) \
+	$(LIBM) \
 	$(PANGO_LIBS)
 libgstpango_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS)
 libgstpango_la_LIBTOOLFLAGS = $(GST_PLUGIN_LIBTOOLFLAGS)
diff --git a/ext/pango/Makefile.in b/ext/pango/Makefile.in
index 1085dbc..7228ede 100644
--- a/ext/pango/Makefile.in
+++ b/ext/pango/Makefile.in
@@ -1,7 +1,7 @@
-# Makefile.in generated by automake 1.14.1 from Makefile.am.
+# Makefile.in generated by automake 1.15 from Makefile.am.
 # @configure_input@
 
-# Copyright (C) 1994-2013 Free Software Foundation, Inc.
+# 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,
@@ -16,7 +16,17 @@
 
 
 VPATH = @srcdir@
-am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)'
+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 \
       ?) ;; \
@@ -81,8 +91,6 @@
 host_triplet = @host@
 target_triplet = @target@
 subdir = ext/pango
-DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \
-	$(top_srcdir)/depcomp $(noinst_HEADERS)
 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 \
@@ -103,7 +111,6 @@
 	$(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-x11.m4 \
 	$(top_srcdir)/common/m4/gst.m4 \
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
@@ -120,6 +127,8 @@
 	$(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 =
@@ -156,7 +165,7 @@
 am__DEPENDENCIES_1 =
 libgstpango_la_DEPENDENCIES = $(top_builddir)/gst-libs/gst/video/libgstvideo-$(GST_API_VERSION).la \
 	$(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
-	$(am__DEPENDENCIES_1)
+	$(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1)
 am_libgstpango_la_OBJECTS = libgstpango_la-gstbasetextoverlay.lo \
 	libgstpango_la-gstclockoverlay.lo \
 	libgstpango_la-gsttextoverlay.lo \
@@ -232,6 +241,7 @@
   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@
@@ -292,6 +302,8 @@
 GIO_CFLAGS = @GIO_CFLAGS@
 GIO_LDFLAGS = @GIO_LDFLAGS@
 GIO_LIBS = @GIO_LIBS@
+GIO_UNIX_2_0_CFLAGS = @GIO_UNIX_2_0_CFLAGS@
+GIO_UNIX_2_0_LIBS = @GIO_UNIX_2_0_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
@@ -321,6 +333,8 @@
 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_OPTION_CFLAGS = @GST_OPTION_CFLAGS@
 GST_OPTION_CXXFLAGS = @GST_OPTION_CXXFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
@@ -348,7 +362,6 @@
 GTK_X11_CFLAGS = @GTK_X11_CFLAGS@
 GTK_X11_LIBS = @GTK_X11_LIBS@
 HAVE_CDPARANOIA = @HAVE_CDPARANOIA@
-HAVE_X = @HAVE_X@
 HAVE_XSHM = @HAVE_XSHM@
 HAVE_ZLIB = @HAVE_ZLIB@
 HTML_DIR = @HTML_DIR@
@@ -363,6 +376,7 @@
 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@
@@ -452,13 +466,12 @@
 XGETTEXT = @XGETTEXT@
 XGETTEXT_015 = @XGETTEXT_015@
 XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
-XMKMF = @XMKMF@
+XSHM_CFLAGS = @XSHM_CFLAGS@
 XSHM_LIBS = @XSHM_LIBS@
+XVIDEO_CFLAGS = @XVIDEO_CFLAGS@
 XVIDEO_LIBS = @XVIDEO_LIBS@
 X_CFLAGS = @X_CFLAGS@
-X_EXTRA_LIBS = @X_EXTRA_LIBS@
 X_LIBS = @X_LIBS@
-X_PRE_LIBS = @X_PRE_LIBS@
 ZLIB_CFLAGS = @ZLIB_CFLAGS@
 ZLIB_LIBS = @ZLIB_LIBS@
 abs_builddir = @abs_builddir@
@@ -511,6 +524,7 @@
 psdir = @psdir@
 pyexecdir = @pyexecdir@
 pythondir = @pythondir@
+runstatedir = @runstatedir@
 sbindir = @sbindir@
 sharedstatedir = @sharedstatedir@
 srcdir = @srcdir@
@@ -548,6 +562,7 @@
 	$(top_builddir)/gst-libs/gst/video/libgstvideo-$(GST_API_VERSION).la \
 	$(GST_BASE_LIBS) \
 	$(GST_LIBS) \
+	$(LIBM) \
 	$(PANGO_LIBS)
 
 libgstpango_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS)
@@ -568,7 +583,6 @@
 	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu ext/pango/Makefile'; \
 	$(am__cd) $(top_srcdir) && \
 	  $(AUTOMAKE) --gnu ext/pango/Makefile
-.PRECIOUS: Makefile
 Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
 	@case '$?' in \
 	  *config.status*) \
@@ -909,6 +923,8 @@
 	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.
diff --git a/ext/pango/gstbasetextoverlay.c b/ext/pango/gstbasetextoverlay.c
index a5f8d7e..bde4303 100644
--- a/ext/pango/gstbasetextoverlay.c
+++ b/ext/pango/gstbasetextoverlay.c
@@ -22,55 +22,6 @@
  * Boston, MA 02110-1301, USA.
  */
 
-/**
- * SECTION:element-textoverlay
- * @see_also: #GstTextRender, #GstClockOverlay, #GstTimeOverlay, #GstSubParse
- *
- * This plugin renders text on top of a video stream. This can be either
- * static text or text from buffers received on the text sink pad, e.g.
- * as produced by the subparse element. If the text sink pad is not linked,
- * the text set via the "text" property will be rendered. If the text sink
- * pad is linked, text will be rendered as it is received on that pad,
- * honouring and matching the buffer timestamps of both input streams.
- *
- * The text can contain newline characters and text wrapping is enabled by
- * default.
- *
- * <refsect2>
- * <title>Example launch lines</title>
- * |[
- * gst-launch -v videotestsrc ! textoverlay text="Room A" valign=top halign=left ! xvimagesink
- * ]| Here is a simple pipeline that displays a static text in the top left
- * corner of the video picture
- * |[
- * gst-launch -v filesrc location=subtitles.srt ! subparse ! txt.   videotestsrc ! timeoverlay ! textoverlay name=txt shaded-background=yes ! xvimagesink
- * ]| Here is another pipeline that displays subtitles from an .srt subtitle
- * file, centered at the bottom of the picture and with a rectangular shading
- * around the text in the background:
- * <para>
- * If you do not have such a subtitle file, create one looking like this
- * in a text editor:
- * |[
- * 1
- * 00:00:03,000 --> 00:00:05,000
- * Hello? (3-5s)
- *
- * 2
- * 00:00:08,000 --> 00:00:13,000
- * Yes, this is a subtitle. Don&apos;t
- * you like it? (8-13s)
- *
- * 3
- * 00:00:18,826 --> 00:01:02,886
- * Uh? What are you talking about?
- * I don&apos;t understand  (18-62s)
- * ]|
- * </para>
- * </refsect2>
- */
-
-/* FIXME: alloc segment as part of instance struct */
-
 #ifdef HAVE_CONFIG_H
 #include <config.h>
 #endif
@@ -84,12 +35,12 @@
 #include "gstclockoverlay.h"
 #include "gsttextrender.h"
 #include <string.h>
+#include <math.h>
 
 /* FIXME:
  *  - use proper strides and offset for I420
  *  - if text is wider than the video picture, it does not get
  *    clipped properly during blitting (if wrapping is disabled)
- *  - make 'shading_value' a property (or enum:  light/normal/dark/verydark)?
  */
 
 GST_DEBUG_CATEGORY (pango_debug);
@@ -112,11 +63,11 @@
 #define DEFAULT_PROP_WAIT_TEXT	TRUE
 #define DEFAULT_PROP_AUTO_ADJUST_SIZE TRUE
 #define DEFAULT_PROP_VERTICAL_RENDER  FALSE
+#define DEFAULT_PROP_DRAW_SHADOW TRUE
+#define DEFAULT_PROP_DRAW_OUTLINE TRUE
 #define DEFAULT_PROP_COLOR      0xffffffff
 #define DEFAULT_PROP_OUTLINE_COLOR 0xff000000
-
-/* make a property of me */
-#define DEFAULT_SHADING_VALUE    -80
+#define DEFAULT_PROP_SHADING_VALUE    80
 
 #define MINIMUM_OUTLINE_OFFSET 1.0
 #define DEFAULT_SCALE_BASIS    640
@@ -126,6 +77,7 @@
   PROP_0,
   PROP_TEXT,
   PROP_SHADING,
+  PROP_SHADING_VALUE,
   PROP_HALIGNMENT,
   PROP_VALIGNMENT,
   PROP_XPAD,
@@ -142,7 +94,8 @@
   PROP_AUTO_ADJUST_SIZE,
   PROP_VERTICAL_RENDER,
   PROP_COLOR,
-  PROP_SHADOW,
+  PROP_DRAW_SHADOW,
+  PROP_DRAW_OUTLINE,
   PROP_OUTLINE_COLOR,
   PROP_LAST
 };
@@ -302,8 +255,6 @@
 static void gst_base_text_overlay_text_pad_unlink (GstPad * pad,
     GstObject * parent);
 static void gst_base_text_overlay_pop_text (GstBaseTextOverlay * overlay);
-static void gst_base_text_overlay_update_render_mode (GstBaseTextOverlay *
-    overlay);
 
 static void gst_base_text_overlay_finalize (GObject * object);
 static void gst_base_text_overlay_set_property (GObject * object, guint prop_id,
@@ -316,6 +267,9 @@
     PangoFontDescription * desc);
 static gboolean gst_base_text_overlay_can_handle_caps (GstCaps * incaps);
 
+static void
+gst_base_text_overlay_update_render_size (GstBaseTextOverlay * overlay);
+
 GType
 gst_base_text_overlay_get_type (void)
 {
@@ -363,6 +317,7 @@
   fontmap = pango_cairo_font_map_get_default ();
   klass->pango_context =
       pango_font_map_create_context (PANGO_FONT_MAP (fontmap));
+  pango_context_set_base_gravity (klass->pango_context, PANGO_GRAVITY_SOUTH);
   if (klass->pango_lock)
     g_mutex_unlock (klass->pango_lock);
 }
@@ -403,6 +358,11 @@
       g_param_spec_boolean ("shaded-background", "shaded background",
           "Whether to shade the background under the text area",
           DEFAULT_PROP_SHADING, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+  g_object_class_install_property (G_OBJECT_CLASS (klass), PROP_SHADING_VALUE,
+      g_param_spec_uint ("shading-value", "background shading value",
+          "Shading value to apply if shaded-background is true", 1, 255,
+          DEFAULT_PROP_SHADING_VALUE,
+          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
   g_object_class_install_property (G_OBJECT_CLASS (klass), PROP_VALIGNMENT,
       g_param_spec_enum ("valignment", "vertical alignment",
           "Vertical alignment of the text", GST_TYPE_BASE_TEXT_OVERLAY_VALIGN,
@@ -423,11 +383,12 @@
       g_param_spec_int ("deltax", "X position modifier",
           "Shift X position to the left or to the right. Unit is pixels.",
           G_MININT, G_MAXINT, DEFAULT_PROP_DELTAX,
-          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+          GST_PARAM_CONTROLLABLE | G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
   g_object_class_install_property (G_OBJECT_CLASS (klass), PROP_DELTAY,
       g_param_spec_int ("deltay", "Y position modifier",
           "Shift Y position up or down. Unit is pixels.", G_MININT, G_MAXINT,
-          DEFAULT_PROP_DELTAY, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+          GST_PARAM_CONTROLLABLE | DEFAULT_PROP_DELTAY,
+          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
   /**
    * GstBaseTextOverlay:xpos:
    *
@@ -458,7 +419,7 @@
           "Pango font description of font to be used for rendering. "
           "See documentation of pango_font_description_from_string "
           "for syntax.", DEFAULT_PROP_FONT_DESC,
-          G_PARAM_WRITABLE | G_PARAM_STATIC_STRINGS));
+          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
   /**
    * GstBaseTextOverlay:color:
    *
@@ -503,6 +464,30 @@
           DEFAULT_PROP_SILENT,
           G_PARAM_READWRITE | GST_PARAM_CONTROLLABLE | G_PARAM_STATIC_STRINGS));
   /**
+   * GstBaseTextOverlay:draw-shadow:
+   *
+   * If set, a text shadow is drawn.
+   *
+   * Since: 1.6
+   */
+  g_object_class_install_property (G_OBJECT_CLASS (klass), PROP_DRAW_SHADOW,
+      g_param_spec_boolean ("draw-shadow", "draw-shadow",
+          "Whether to draw shadow",
+          DEFAULT_PROP_DRAW_SHADOW,
+          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+  /**
+   * GstBaseTextOverlay:draw-outline:
+   *
+   * If set, an outline is drawn.
+   *
+   * Since: 1.6
+   */
+  g_object_class_install_property (G_OBJECT_CLASS (klass), PROP_DRAW_OUTLINE,
+      g_param_spec_boolean ("draw-outline", "draw-outline",
+          "Whether to draw outline",
+          DEFAULT_PROP_DRAW_OUTLINE,
+          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+  /**
    * GstBaseTextOverlay:wait-text:
    *
    * If set, the video will block until a subtitle is received on the text pad.
@@ -608,7 +593,6 @@
   gst_element_add_pad (GST_ELEMENT (overlay), overlay->srcpad);
 
   g_mutex_lock (GST_BASE_TEXT_OVERLAY_GET_CLASS (overlay)->pango_lock);
-  overlay->line_align = DEFAULT_PROP_LINE_ALIGNMENT;
   overlay->layout =
       pango_layout_new (GST_BASE_TEXT_OVERLAY_GET_CLASS
       (overlay)->pango_context);
@@ -631,8 +615,10 @@
   overlay->wrap_mode = DEFAULT_PROP_WRAP_MODE;
 
   overlay->want_shading = DEFAULT_PROP_SHADING;
-  overlay->shading_value = DEFAULT_SHADING_VALUE;
+  overlay->shading_value = DEFAULT_PROP_SHADING_VALUE;
   overlay->silent = DEFAULT_PROP_SILENT;
+  overlay->draw_shadow = DEFAULT_PROP_DRAW_SHADOW;
+  overlay->draw_outline = DEFAULT_PROP_DRAW_OUTLINE;
   overlay->wait_text = DEFAULT_PROP_WAIT_TEXT;
   overlay->auto_adjust_size = DEFAULT_PROP_AUTO_ADJUST_SIZE;
 
@@ -640,11 +626,30 @@
   overlay->need_render = TRUE;
   overlay->text_image = NULL;
   overlay->use_vertical_render = DEFAULT_PROP_VERTICAL_RENDER;
-  gst_base_text_overlay_update_render_mode (overlay);
+
+  overlay->line_align = DEFAULT_PROP_LINE_ALIGNMENT;
+  pango_layout_set_alignment (overlay->layout,
+      (PangoAlignment) overlay->line_align);
 
   overlay->text_buffer = NULL;
   overlay->text_linked = FALSE;
 
+  overlay->composition = NULL;
+  overlay->upstream_composition = NULL;
+
+  overlay->width = 1;
+  overlay->height = 1;
+
+  overlay->window_width = 1;
+  overlay->window_height = 1;
+
+  overlay->image_width = 1;
+  overlay->image_height = 1;
+
+  overlay->render_width = 1;
+  overlay->render_height = 1;
+  overlay->render_scale = 1.0l;
+
   g_mutex_init (&overlay->lock);
   g_cond_init (&overlay->cond);
   gst_segment_init (&overlay->segment, GST_FORMAT_TIME);
@@ -652,49 +657,20 @@
 }
 
 static void
-gst_base_text_overlay_update_wrap_mode (GstBaseTextOverlay * overlay)
+gst_base_text_overlay_set_wrap_mode (GstBaseTextOverlay * overlay, gint width)
 {
   if (overlay->wrap_mode == GST_BASE_TEXT_OVERLAY_WRAP_MODE_NONE) {
     GST_DEBUG_OBJECT (overlay, "Set wrap mode NONE");
     pango_layout_set_width (overlay->layout, -1);
   } else {
-    int width;
+    width = width * PANGO_SCALE;
 
-    if (overlay->auto_adjust_size) {
-      width = DEFAULT_SCALE_BASIS * PANGO_SCALE;
-      if (overlay->use_vertical_render) {
-        width = width * (overlay->height - overlay->ypad * 2) / overlay->width;
-      }
-    } else {
-      width =
-          (overlay->use_vertical_render ? overlay->height : overlay->width) *
-          PANGO_SCALE;
-    }
-
-    GST_DEBUG_OBJECT (overlay, "Set layout width %d", overlay->width);
+    GST_DEBUG_OBJECT (overlay, "Set layout width %d", width);
     GST_DEBUG_OBJECT (overlay, "Set wrap mode    %d", overlay->wrap_mode);
     pango_layout_set_width (overlay->layout, width);
-    pango_layout_set_wrap (overlay->layout, (PangoWrapMode) overlay->wrap_mode);
   }
-}
 
-static void
-gst_base_text_overlay_update_render_mode (GstBaseTextOverlay * overlay)
-{
-  PangoMatrix matrix = PANGO_MATRIX_INIT;
-  PangoContext *context = pango_layout_get_context (overlay->layout);
-
-  if (overlay->use_vertical_render) {
-    pango_matrix_rotate (&matrix, -90);
-    pango_context_set_base_gravity (context, PANGO_GRAVITY_AUTO);
-    pango_context_set_matrix (context, &matrix);
-    pango_layout_set_alignment (overlay->layout, PANGO_ALIGN_LEFT);
-  } else {
-    pango_context_set_base_gravity (context, PANGO_GRAVITY_SOUTH);
-    pango_context_set_matrix (context, &matrix);
-    pango_layout_set_alignment (overlay->layout,
-        (PangoAlignment) overlay->line_align);
-  }
+  pango_layout_set_wrap (overlay->layout, (PangoWrapMode) overlay->wrap_mode);
 }
 
 static gboolean
@@ -714,17 +690,22 @@
 static gboolean
 gst_base_text_overlay_negotiate (GstBaseTextOverlay * overlay, GstCaps * caps)
 {
-  GstQuery *query;
+  gboolean upstream_has_meta = FALSE;
+  gboolean caps_has_meta = FALSE;
+  gboolean alloc_has_meta = FALSE;
   gboolean attach = FALSE;
-  gboolean caps_has_meta = TRUE;
-  gboolean ret;
+  gboolean ret = TRUE;
+  guint width, height;
   GstCapsFeatures *f;
-  GstCaps *original_caps;
-  gboolean original_has_meta = FALSE;
-  gboolean allocation_ret = TRUE;
+  GstCaps *overlay_caps;
+  GstQuery *query;
+  guint alloc_index;
 
   GST_DEBUG_OBJECT (overlay, "performing negotiation");
 
+  /* Clear any pending reconfigure to avoid negotiating twice */
+  gst_pad_check_reconfigure (overlay->srcpad);
+
   if (!caps)
     caps = gst_pad_get_current_caps (overlay->video_sinkpad);
   else
@@ -733,88 +714,119 @@
   if (!caps || gst_caps_is_empty (caps))
     goto no_format;
 
-  original_caps = caps;
-
-  /* Try to use the overlay meta if possible */
-  f = gst_caps_get_features (caps, 0);
-
-  /* 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;
-
-    /* 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);
-    if (f == NULL) {
-      f = gst_caps_features_new
-          (GST_CAPS_FEATURE_META_GST_VIDEO_OVERLAY_COMPOSITION, NULL);
-    } else {
-      gst_caps_features_add (f,
-          GST_CAPS_FEATURE_META_GST_VIDEO_OVERLAY_COMPOSITION);
-    }
-
-    ret = gst_pad_peer_query_accept_caps (overlay->srcpad, overlay_caps);
-    GST_DEBUG_OBJECT (overlay, "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;
-    }
-  } else {
-    original_has_meta = TRUE;
+  /* 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);
   }
-  GST_DEBUG_OBJECT (overlay, "Using caps %" GST_PTR_FORMAT, caps);
-  ret = gst_pad_set_caps (overlay->srcpad, caps);
 
-  if (ret) {
-    /* find supported meta */
-    query = gst_query_new_allocation (caps, FALSE);
+  /* Initialize dimensions */
+  width = overlay->width;
+  height = overlay->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 (overlay->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 (overlay->srcpad, overlay_caps);
+
+    /* First check if the allocation meta has compositon */
+    query = gst_query_new_allocation (overlay_caps, FALSE);
 
     if (!gst_pad_peer_query (overlay->srcpad, query)) {
       /* no problem, we use the query defaults */
       GST_DEBUG_OBJECT (overlay, "ALLOCATION query failed");
-      allocation_ret = FALSE;
+
+      /* In case we were flushing, mark reconfigure and fail this method,
+       * will make it retry */
+      if (overlay->video_flushing)
+        ret = FALSE;
     }
 
-    if (caps_has_meta && gst_query_find_allocation_meta (query,
-            GST_VIDEO_OVERLAY_COMPOSITION_META_API_TYPE, NULL))
-      attach = TRUE;
+    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);
   }
 
-  overlay->attach_compo_to_buffer = attach;
+  /* Update render size if needed */
+  overlay->window_width = width;
+  overlay->window_height = height;
+  gst_base_text_overlay_update_render_size (overlay);
 
-  if (!allocation_ret && overlay->video_flushing) {
-    ret = FALSE;
-  } else if (original_caps && !original_has_meta && !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 */
-      gst_caps_unref (caps);
-      caps = gst_caps_ref (original_caps);
-      ret = gst_pad_set_caps (overlay->srcpad, caps);
-      if (ret && !gst_base_text_overlay_can_handle_caps (caps))
-        ret = FALSE;
+  /* 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_base_text_overlay_can_handle_caps (caps);
     }
+  } else {
+    ret = gst_base_text_overlay_can_handle_caps (caps);
   }
 
+  /* If we attach, then pick the overlay caps */
+  if (attach) {
+    GST_DEBUG_OBJECT (overlay, "Using caps %" GST_PTR_FORMAT, overlay_caps);
+    /* Caps where already sent */
+  } else if (ret) {
+    GST_DEBUG_OBJECT (overlay, "Using caps %" GST_PTR_FORMAT, caps);
+    ret = gst_pad_set_caps (overlay->srcpad, caps);
+  }
+
+  overlay->attach_compo_to_buffer = attach;
+
   if (!ret) {
     GST_DEBUG_OBJECT (overlay, "negotiation failed, schedule reconfigure");
     gst_pad_mark_reconfigure (overlay->srcpad);
   }
 
+  gst_caps_unref (overlay_caps);
   gst_caps_unref (caps);
 
   return ret;
@@ -850,6 +862,11 @@
   if (!gst_video_info_from_caps (&info, caps))
     goto invalid_caps;
 
+  /* Render again if size have changed */
+  if (GST_VIDEO_INFO_WIDTH (&info) != GST_VIDEO_INFO_WIDTH (&overlay->info) ||
+      GST_VIDEO_INFO_HEIGHT (&info) != GST_VIDEO_INFO_HEIGHT (&overlay->info))
+    overlay->need_render = TRUE;
+
   overlay->info = info;
   overlay->format = GST_VIDEO_INFO_FORMAT (&info);
   overlay->width = GST_VIDEO_INFO_WIDTH (&info);
@@ -858,15 +875,12 @@
   ret = gst_base_text_overlay_negotiate (overlay, caps);
 
   GST_BASE_TEXT_OVERLAY_LOCK (overlay);
-  g_mutex_lock (GST_BASE_TEXT_OVERLAY_GET_CLASS (overlay)->pango_lock);
+
   if (!overlay->attach_compo_to_buffer &&
       !gst_base_text_overlay_can_handle_caps (caps)) {
     GST_DEBUG_OBJECT (overlay, "unsupported caps %" GST_PTR_FORMAT, caps);
     ret = FALSE;
   }
-
-  gst_base_text_overlay_update_wrap_mode (overlay);
-  g_mutex_unlock (GST_BASE_TEXT_OVERLAY_GET_CLASS (overlay)->pango_lock);
   GST_BASE_TEXT_OVERLAY_UNLOCK (overlay);
 
   return ret;
@@ -890,7 +904,6 @@
     case PROP_TEXT:
       g_free (overlay->default_text);
       overlay->default_text = g_value_dup_string (value);
-      overlay->need_render = TRUE;
       break;
     case PROP_SHADING:
       overlay->want_shading = g_value_get_boolean (value);
@@ -921,9 +934,6 @@
       break;
     case PROP_WRAP_MODE:
       overlay->wrap_mode = g_value_get_enum (value);
-      g_mutex_lock (GST_BASE_TEXT_OVERLAY_GET_CLASS (overlay)->pango_lock);
-      gst_base_text_overlay_update_wrap_mode (overlay);
-      g_mutex_unlock (GST_BASE_TEXT_OVERLAY_GET_CLASS (overlay)->pango_lock);
       break;
     case PROP_FONT_DESC:
     {
@@ -954,6 +964,12 @@
     case PROP_SILENT:
       overlay->silent = g_value_get_boolean (value);
       break;
+    case PROP_DRAW_SHADOW:
+      overlay->draw_shadow = g_value_get_boolean (value);
+      break;
+    case PROP_DRAW_OUTLINE:
+      overlay->draw_outline = g_value_get_boolean (value);
+      break;
     case PROP_LINE_ALIGNMENT:
       overlay->line_align = g_value_get_enum (value);
       g_mutex_lock (GST_BASE_TEXT_OVERLAY_GET_CLASS (overlay)->pango_lock);
@@ -966,14 +982,21 @@
       break;
     case PROP_AUTO_ADJUST_SIZE:
       overlay->auto_adjust_size = g_value_get_boolean (value);
-      overlay->need_render = TRUE;
       break;
     case PROP_VERTICAL_RENDER:
       overlay->use_vertical_render = g_value_get_boolean (value);
-      g_mutex_lock (GST_BASE_TEXT_OVERLAY_GET_CLASS (overlay)->pango_lock);
-      gst_base_text_overlay_update_render_mode (overlay);
-      g_mutex_unlock (GST_BASE_TEXT_OVERLAY_GET_CLASS (overlay)->pango_lock);
-      overlay->need_render = TRUE;
+      if (overlay->use_vertical_render) {
+        overlay->valign = GST_BASE_TEXT_OVERLAY_VALIGN_TOP;
+        overlay->halign = GST_BASE_TEXT_OVERLAY_HALIGN_RIGHT;
+        overlay->line_align = GST_BASE_TEXT_OVERLAY_LINE_ALIGN_LEFT;
+        g_mutex_lock (GST_BASE_TEXT_OVERLAY_GET_CLASS (overlay)->pango_lock);
+        pango_layout_set_alignment (overlay->layout,
+            (PangoAlignment) overlay->line_align);
+        g_mutex_unlock (GST_BASE_TEXT_OVERLAY_GET_CLASS (overlay)->pango_lock);
+      }
+      break;
+    case PROP_SHADING_VALUE:
+      overlay->shading_value = g_value_get_uint (value);
       break;
     default:
       G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
@@ -1028,6 +1051,12 @@
     case PROP_SILENT:
       g_value_set_boolean (value, overlay->silent);
       break;
+    case PROP_DRAW_SHADOW:
+      g_value_set_boolean (value, overlay->draw_shadow);
+      break;
+    case PROP_DRAW_OUTLINE:
+      g_value_set_boolean (value, overlay->draw_outline);
+      break;
     case PROP_LINE_ALIGNMENT:
       g_value_set_enum (value, overlay->line_align);
       break;
@@ -1046,6 +1075,23 @@
     case PROP_OUTLINE_COLOR:
       g_value_set_uint (value, overlay->outline_color);
       break;
+    case PROP_SHADING_VALUE:
+      g_value_set_uint (value, overlay->shading_value);
+      break;
+    case PROP_FONT_DESC:
+    {
+      const PangoFontDescription *desc;
+
+      g_mutex_lock (GST_BASE_TEXT_OVERLAY_GET_CLASS (overlay)->pango_lock);
+      desc = pango_layout_get_font_description (overlay->layout);
+      if (!desc)
+        g_value_set_string (value, "");
+      else {
+        g_value_take_string (value, pango_font_description_to_string (desc));
+      }
+      g_mutex_unlock (GST_BASE_TEXT_OVERLAY_GET_CLASS (overlay)->pango_lock);
+      break;
+    }
     default:
       G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
       break;
@@ -1084,64 +1130,57 @@
   return ret;
 }
 
+static void
+gst_base_text_overlay_update_render_size (GstBaseTextOverlay * overlay)
+{
+  gdouble video_aspect = (gdouble) overlay->width / (gdouble) overlay->height;
+  gdouble window_aspect = (gdouble) overlay->window_width /
+      (gdouble) overlay->window_height;
+
+  guint text_buffer_width = 0;
+  guint text_buffer_height = 0;
+
+  if (video_aspect >= window_aspect) {
+    text_buffer_width = overlay->window_width;
+    text_buffer_height = window_aspect * overlay->window_height / video_aspect;
+  } else if (video_aspect < window_aspect) {
+    text_buffer_width = video_aspect * overlay->window_width / window_aspect;
+    text_buffer_height = overlay->window_height;
+  }
+
+  if ((overlay->render_width == text_buffer_width) &&
+      (overlay->render_height == text_buffer_height))
+    return;
+
+  overlay->need_render = TRUE;
+  overlay->render_width = text_buffer_width;
+  overlay->render_height = text_buffer_height;
+  overlay->render_scale = (gdouble) overlay->render_width /
+      (gdouble) overlay->width;
+
+  GST_DEBUG ("updating render dimensions %dx%d from stream %dx%d, window %dx%d "
+      "and render scale %f", overlay->render_width, overlay->render_height,
+      overlay->width, overlay->height, overlay->window_width,
+      overlay->window_height, overlay->render_scale);
+}
+
 static gboolean
 gst_base_text_overlay_src_event (GstPad * pad, GstObject * parent,
     GstEvent * event)
 {
-  gboolean ret = FALSE;
-  GstBaseTextOverlay *overlay = NULL;
+  GstBaseTextOverlay *overlay;
+  gboolean ret;
 
   overlay = GST_BASE_TEXT_OVERLAY (parent);
 
-  switch (GST_EVENT_TYPE (event)) {
-    case GST_EVENT_SEEK:{
-      GstSeekFlags flags;
-
-      /* We don't handle seek if we have not text pad */
-      if (!overlay->text_linked) {
-        GST_DEBUG_OBJECT (overlay, "seek received, pushing upstream");
-        ret = gst_pad_push_event (overlay->video_sinkpad, event);
-        goto beach;
-      }
-
-      GST_DEBUG_OBJECT (overlay, "seek received, driving from here");
-
-      gst_event_parse_seek (event, NULL, NULL, &flags, NULL, NULL, NULL, NULL);
-
-      /* Flush downstream, only for flushing seek */
-      if (flags & GST_SEEK_FLAG_FLUSH)
-        gst_pad_push_event (overlay->srcpad, gst_event_new_flush_start ());
-
-      /* Mark ourself as flushing, unblock chains */
-      GST_BASE_TEXT_OVERLAY_LOCK (overlay);
-      overlay->video_flushing = TRUE;
-      overlay->text_flushing = TRUE;
-      gst_base_text_overlay_pop_text (overlay);
-      GST_BASE_TEXT_OVERLAY_UNLOCK (overlay);
-
-      /* Seek on each sink pad */
-      gst_event_ref (event);
-      ret = gst_pad_push_event (overlay->video_sinkpad, event);
-      if (ret) {
-        ret = gst_pad_push_event (overlay->text_sinkpad, event);
-      } else {
-        gst_event_unref (event);
-      }
-      break;
-    }
-    default:
-      if (overlay->text_linked) {
-        gst_event_ref (event);
-        ret = gst_pad_push_event (overlay->video_sinkpad, event);
-        gst_pad_push_event (overlay->text_sinkpad, event);
-      } else {
-        ret = gst_pad_push_event (overlay->video_sinkpad, event);
-      }
-      break;
+  if (overlay->text_linked) {
+    gst_event_ref (event);
+    ret = gst_pad_push_event (overlay->video_sinkpad, event);
+    gst_pad_push_event (overlay->text_sinkpad, event);
+  } else {
+    ret = gst_pad_push_event (overlay->video_sinkpad, event);
   }
 
-beach:
-
   return ret;
 }
 
@@ -1370,30 +1409,26 @@
     gint * xpos, gint * ypos)
 {
   gint width, height;
-  GstBaseTextOverlayVAlign valign;
-  GstBaseTextOverlayHAlign halign;
 
-  width = overlay->image_width;
-  height = overlay->image_height;
+  width = overlay->logical_rect.width;
+  height = overlay->logical_rect.height;
 
-  if (overlay->use_vertical_render)
-    halign = GST_BASE_TEXT_OVERLAY_HALIGN_RIGHT;
-  else
-    halign = overlay->halign;
-
-  switch (halign) {
+  *xpos = overlay->ink_rect.x - overlay->logical_rect.x;
+  switch (overlay->halign) {
     case GST_BASE_TEXT_OVERLAY_HALIGN_LEFT:
-      *xpos = overlay->xpad;
+      *xpos += overlay->xpad;
+      *xpos = MAX (0, *xpos);
       break;
     case GST_BASE_TEXT_OVERLAY_HALIGN_CENTER:
-      *xpos = (overlay->width - width) / 2;
+      *xpos += (overlay->width - width) / 2;
       break;
     case GST_BASE_TEXT_OVERLAY_HALIGN_RIGHT:
-      *xpos = overlay->width - width - overlay->xpad;
+      *xpos += overlay->width - width - overlay->xpad;
+      *xpos = MIN (overlay->width - overlay->ink_rect.width, *xpos);
       break;
     case GST_BASE_TEXT_OVERLAY_HALIGN_POS:
-      *xpos = (gint) (overlay->width * overlay->xpos) - width / 2;
-      *xpos = CLAMP (*xpos, 0, overlay->width - width);
+      *xpos += (gint) (overlay->width * overlay->xpos) - width / 2;
+      *xpos = CLAMP (*xpos, 0, overlay->width - overlay->ink_rect.width);
       if (*xpos < 0)
         *xpos = 0;
       break;
@@ -1402,24 +1437,25 @@
   }
   *xpos += overlay->deltax;
 
-  if (overlay->use_vertical_render)
-    valign = GST_BASE_TEXT_OVERLAY_VALIGN_TOP;
-  else
-    valign = overlay->valign;
-
-  switch (valign) {
+  *ypos = overlay->ink_rect.y - overlay->logical_rect.y;
+  switch (overlay->valign) {
     case GST_BASE_TEXT_OVERLAY_VALIGN_BOTTOM:
-      *ypos = overlay->height - height - overlay->ypad;
+      /* This will be the same as baseline, if there is enough padding,
+       * otherwise it will avoid clipping the text */
+      *ypos += overlay->height - height - overlay->ypad;
+      *ypos = MIN (overlay->height - overlay->ink_rect.height, *ypos);
       break;
     case GST_BASE_TEXT_OVERLAY_VALIGN_BASELINE:
-      *ypos = overlay->height - (height + overlay->ypad);
+      *ypos += overlay->height - height - overlay->ypad;
+      /* Don't clip, this would not respect the base line */
       break;
     case GST_BASE_TEXT_OVERLAY_VALIGN_TOP:
-      *ypos = overlay->ypad;
+      *ypos += overlay->ypad;
+      *ypos = MAX (0.0, *ypos);
       break;
     case GST_BASE_TEXT_OVERLAY_VALIGN_POS:
       *ypos = (gint) (overlay->height * overlay->ypos) - height / 2;
-      *ypos = CLAMP (*ypos, 0, overlay->height - height);
+      *ypos = CLAMP (*ypos, 0, overlay->height - overlay->ink_rect.height);
       break;
     case GST_BASE_TEXT_OVERLAY_VALIGN_CENTER:
       *ypos = (overlay->height - height) / 2;
@@ -1429,6 +1465,8 @@
       break;
   }
   *ypos += overlay->deltay;
+
+  GST_DEBUG_OBJECT (overlay, "Placing overlay at (%d, %d)", *xpos, *ypos);
 }
 
 static inline void
@@ -1437,21 +1475,49 @@
   gint xpos, ypos;
   GstVideoOverlayRectangle *rectangle;
 
-  gst_base_text_overlay_get_pos (overlay, &xpos, &ypos);
+  if (overlay->text_image && overlay->image_width != 1) {
+    gint render_width, render_height;
 
-  if (overlay->text_image) {
+    gst_base_text_overlay_get_pos (overlay, &xpos, &ypos);
+
+    render_width = overlay->ink_rect.width;
+    render_height = overlay->ink_rect.height;
+
+    GST_DEBUG ("updating composition for '%s' with window size %dx%d, "
+        "buffer size %dx%d, render size %dx%d and position (%d, %d)",
+        overlay->default_text, overlay->window_width, overlay->window_height,
+        overlay->image_width, overlay->image_height, render_width,
+        render_height, xpos, ypos);
+
     gst_buffer_add_video_meta (overlay->text_image, GST_VIDEO_FRAME_FLAG_NONE,
         GST_VIDEO_OVERLAY_COMPOSITION_FORMAT_RGB,
         overlay->image_width, overlay->image_height);
+
     rectangle = gst_video_overlay_rectangle_new_raw (overlay->text_image,
-        xpos, ypos, overlay->image_width, overlay->image_height,
+        xpos, ypos, render_width, render_height,
         GST_VIDEO_OVERLAY_FORMAT_FLAG_PREMULTIPLIED_ALPHA);
 
     if (overlay->composition)
       gst_video_overlay_composition_unref (overlay->composition);
+
     overlay->composition = gst_video_overlay_composition_new (rectangle);
     gst_video_overlay_rectangle_unref (rectangle);
 
+    if (overlay->upstream_composition) {
+      guint num_overlays =
+          gst_video_overlay_composition_n_rectangles
+          (overlay->upstream_composition);
+
+      for (guint i = 0; i < num_overlays; i++) {
+        GstVideoOverlayRectangle *rectangle;
+        rectangle =
+            gst_video_overlay_composition_get_rectangle
+            (overlay->upstream_composition, i);
+        gst_video_overlay_composition_add_rectangle (overlay->composition,
+            rectangle);
+      }
+    }
+
   } else if (overlay->composition) {
     gst_video_overlay_composition_unref (overlay->composition);
     overlay->composition = NULL;
@@ -1476,9 +1542,14 @@
   cairo_surface_t *surface;
   PangoRectangle ink_rect, logical_rect;
   cairo_matrix_t cairo_matrix;
-  int width, height;
+  gint unscaled_width, unscaled_height;
+  gint width, height;
+  gboolean full_width = FALSE;
   double scalef = 1.0;
   double a, r, g, b;
+  gdouble shadow_offset = 0.0;
+  gdouble outline_offset = 0.0;
+  gint xpad = 0, ypad = 0;
   GstBuffer *buffer;
   GstMapInfo map;
 
@@ -1488,6 +1559,23 @@
     /* 640 pixel is default */
     scalef = (double) (overlay->width) / DEFAULT_SCALE_BASIS;
   }
+
+  if (overlay->draw_shadow)
+    shadow_offset = ceil (overlay->shadow_offset);
+
+  /* This value is uses as cairo line width, which is the diameter of a pen
+   * that is circular. That's why only half of it is used to offset */
+  if (overlay->draw_outline)
+    outline_offset = ceil (overlay->outline_offset);
+
+  if (overlay->halign == GST_BASE_TEXT_OVERLAY_HALIGN_LEFT ||
+      overlay->halign == GST_BASE_TEXT_OVERLAY_HALIGN_RIGHT)
+    xpad = overlay->xpad;
+
+  if (overlay->valign == GST_BASE_TEXT_OVERLAY_VALIGN_TOP ||
+      overlay->valign == GST_BASE_TEXT_OVERLAY_VALIGN_BOTTOM)
+    ypad = overlay->ypad;
+
   pango_layout_set_width (overlay->layout, -1);
   /* set text on pango layout */
   pango_layout_set_markup (overlay->layout, string, textlen);
@@ -1495,58 +1583,136 @@
   /* get subtitle image size */
   pango_layout_get_pixel_extents (overlay->layout, &ink_rect, &logical_rect);
 
-  width = (logical_rect.width + overlay->shadow_offset) * scalef;
+  unscaled_width = ink_rect.width + shadow_offset + outline_offset;
+  width = ceil (unscaled_width * scalef);
 
-  if (width + overlay->deltax >
-      (overlay->use_vertical_render ? overlay->height : overlay->width)) {
-    /*
-     * subtitle image width is larger then overlay width
-     * so rearrange overlay wrap mode.
-     */
-    gst_base_text_overlay_update_wrap_mode (overlay);
-    pango_layout_get_pixel_extents (overlay->layout, &ink_rect, &logical_rect);
-    width = overlay->width;
-  }
-
-  height =
-      (logical_rect.height + logical_rect.y + overlay->shadow_offset) * scalef;
-  if (height > overlay->height) {
-    height = overlay->height;
-  }
+  /*
+   * subtitle image width can be larger then overlay width
+   * so rearrange overlay wrap mode.
+   */
   if (overlay->use_vertical_render) {
-    PangoRectangle rect;
-    PangoContext *context;
-    PangoMatrix matrix = PANGO_MATRIX_INIT;
-    int tmp;
+    if (width + ypad > overlay->height) {
+      width = overlay->height - ypad;
+      full_width = TRUE;
+    }
+  } else if (width + xpad > overlay->width) {
+    width = overlay->width - xpad;
+    full_width = TRUE;
+  }
 
-    context = pango_layout_get_context (overlay->layout);
+  if (full_width) {
+    unscaled_width = width / scalef;
+    gst_base_text_overlay_set_wrap_mode (overlay,
+        unscaled_width - shadow_offset - outline_offset);
+    pango_layout_get_pixel_extents (overlay->layout, &ink_rect, &logical_rect);
 
-    pango_matrix_rotate (&matrix, -90);
+    unscaled_width = ink_rect.width + shadow_offset + outline_offset;
+    width = ceil (unscaled_width * scalef);
+  }
 
-    rect.x = rect.y = 0;
-    rect.width = width;
-    rect.height = height;
-    pango_matrix_transform_pixel_rectangle (&matrix, &rect);
-    matrix.x0 = -rect.x;
-    matrix.y0 = -rect.y;
+  unscaled_height = ink_rect.height + shadow_offset + outline_offset;
+  height = ceil (unscaled_height * scalef);
 
-    pango_context_set_matrix (context, &matrix);
+  if (overlay->use_vertical_render) {
+    if (height + xpad > overlay->width) {
+      height = overlay->width - xpad;
+      unscaled_height = width / scalef;
+    }
+  } else if (height + ypad > overlay->height) {
+    height = overlay->height - ypad;
+    unscaled_height = height / scalef;
+  }
 
-    cairo_matrix.xx = matrix.xx;
-    cairo_matrix.yx = matrix.yx;
-    cairo_matrix.xy = matrix.xy;
-    cairo_matrix.yy = matrix.yy;
-    cairo_matrix.x0 = matrix.x0;
-    cairo_matrix.y0 = matrix.y0;
-    cairo_matrix_scale (&cairo_matrix, scalef, scalef);
+  GST_DEBUG_OBJECT (overlay, "Rendering with ink rect (%d, %d) %dx%d and "
+      "logical rect (%d, %d) %dx%d", ink_rect.x, ink_rect.y, ink_rect.width,
+      ink_rect.height, logical_rect.x, logical_rect.y, logical_rect.width,
+      logical_rect.height);
+  GST_DEBUG_OBJECT (overlay, "Rendering with width %d and height %d "
+      "(shadow %f, outline %f)", unscaled_width, unscaled_height,
+      shadow_offset, outline_offset);
 
+
+  /* Save and scale the rectangles so get_pos() can place the text */
+  overlay->ink_rect.x =
+      ceil ((ink_rect.x - ceil (outline_offset / 2.0l)) * scalef);
+  overlay->ink_rect.y =
+      ceil ((ink_rect.y - ceil (outline_offset / 2.0l)) * scalef);
+  overlay->ink_rect.width = width;
+  overlay->ink_rect.height = height;
+
+  overlay->logical_rect.x =
+      ceil ((logical_rect.x - ceil (outline_offset / 2.0l)) * scalef);
+  overlay->logical_rect.y =
+      ceil ((logical_rect.y - ceil (outline_offset / 2.0l)) * scalef);
+  overlay->logical_rect.width =
+      ceil ((logical_rect.width + shadow_offset + outline_offset) * scalef);
+  overlay->logical_rect.height =
+      ceil ((logical_rect.height + shadow_offset + outline_offset) * scalef);
+
+  /* flip the rectangle if doing vertical render */
+  if (overlay->use_vertical_render) {
+    PangoRectangle tmp = overlay->ink_rect;
+
+    overlay->ink_rect.x = tmp.y;
+    overlay->ink_rect.y = tmp.x;
+    overlay->ink_rect.width = tmp.height;
+    overlay->ink_rect.height = tmp.width;
+    /* We want the top left corect, but we now have the top right */
+    overlay->ink_rect.x += overlay->ink_rect.width;
+
+    tmp = overlay->logical_rect;
+    overlay->logical_rect.x = tmp.y;
+    overlay->logical_rect.y = tmp.x;
+    overlay->logical_rect.width = tmp.height;
+    overlay->logical_rect.height = tmp.width;
+    overlay->logical_rect.x += overlay->logical_rect.width;
+  }
+
+  /* scale to reported window size */
+  width = ceil (width * overlay->render_scale);
+  height = ceil (height * overlay->render_scale);
+  scalef *= overlay->render_scale;
+
+  if (width <= 0 || height <= 0) {
+    g_mutex_unlock (GST_BASE_TEXT_OVERLAY_GET_CLASS (overlay)->pango_lock);
+    GST_DEBUG_OBJECT (overlay,
+        "Overlay is outside video frame. Skipping text rendering");
+    return;
+  }
+
+  if (unscaled_height <= 0 || unscaled_width <= 0) {
+    g_mutex_unlock (GST_BASE_TEXT_OVERLAY_GET_CLASS (overlay)->pango_lock);
+    GST_DEBUG_OBJECT (overlay,
+        "Overlay is outside video frame. Skipping text rendering");
+    return;
+  }
+  /* Prepare the transformation matrix. Note that the transformation happens
+   * in reverse order. So for horizontal text, we will translate and then
+   * scale. This is important to understand which scale shall be used. */
+  cairo_matrix_init_scale (&cairo_matrix, scalef, scalef);
+
+  if (overlay->use_vertical_render) {
+    gint tmp;
+
+    /* tranlate to the center of the image, rotate, and tranlate the rotated
+     * image back to the right place */
+    cairo_matrix_translate (&cairo_matrix, unscaled_height / 2.0l,
+        unscaled_width / 2.0l);
+    /* 90 degree clockwise rotation which is PI / 2 in radiants */
+    cairo_matrix_rotate (&cairo_matrix, G_PI_2);
+    cairo_matrix_translate (&cairo_matrix, -(unscaled_width / 2.0l),
+        -(unscaled_height / 2.0l));
+
+    /* Swap width and height */
     tmp = height;
     height = width;
     width = tmp;
-  } else {
-    cairo_matrix_init_scale (&cairo_matrix, scalef, scalef);
   }
 
+  cairo_matrix_translate (&cairo_matrix,
+      ceil (outline_offset / 2.0l) - ink_rect.x,
+      ceil (outline_offset / 2.0l) - ink_rect.y);
+
   /* reallocate overlay buffer */
   buffer = gst_buffer_new_and_alloc (4 * width * height);
   gst_buffer_replace (&overlay->text_image, buffer);
@@ -1563,9 +1729,6 @@
 
   cairo_set_operator (cr, CAIRO_OPERATOR_OVER);
 
-  if (overlay->want_shading)
-    cairo_paint_with_alpha (cr, overlay->shading_value);
-
   /* apply transformations */
   cairo_set_matrix (cr, &cairo_matrix);
 
@@ -1582,7 +1745,7 @@
    */
 
   /* draw shadow text */
-  {
+  if (overlay->draw_shadow) {
     PangoAttrList *origin_attr, *filtered_attr, *temp_attr;
 
     /* Store a ref on the original attributes for later restoration */
@@ -1607,18 +1770,20 @@
     cairo_restore (cr);
   }
 
-  a = (overlay->outline_color >> 24) & 0xff;
-  r = (overlay->outline_color >> 16) & 0xff;
-  g = (overlay->outline_color >> 8) & 0xff;
-  b = (overlay->outline_color >> 0) & 0xff;
-
   /* draw outline text */
-  cairo_save (cr);
-  cairo_set_source_rgba (cr, r / 255.0, g / 255.0, b / 255.0, a / 255.0);
-  cairo_set_line_width (cr, overlay->outline_offset);
-  pango_cairo_layout_path (cr, overlay->layout);
-  cairo_stroke (cr);
-  cairo_restore (cr);
+  if (overlay->draw_outline) {
+    a = (overlay->outline_color >> 24) & 0xff;
+    r = (overlay->outline_color >> 16) & 0xff;
+    g = (overlay->outline_color >> 8) & 0xff;
+    b = (overlay->outline_color >> 0) & 0xff;
+
+    cairo_save (cr);
+    cairo_set_source_rgba (cr, r / 255.0, g / 255.0, b / 255.0, a / 255.0);
+    cairo_set_line_width (cr, overlay->outline_offset);
+    pango_cairo_layout_path (cr, overlay->layout);
+    cairo_stroke (cr);
+    cairo_restore (cr);
+  }
 
   a = (overlay->color >> 24) & 0xff;
   r = (overlay->color >> 16) & 0xff;
@@ -1634,9 +1799,10 @@
   cairo_destroy (cr);
   cairo_surface_destroy (surface);
   gst_buffer_unmap (buffer, &map);
-  overlay->image_width = width;
-  overlay->image_height = height;
-  overlay->baseline_y = ink_rect.y;
+  if (width != 0)
+    overlay->image_width = width;
+  if (height != 0)
+    overlay->image_height = height;
   g_mutex_unlock (GST_BASE_TEXT_OVERLAY_GET_CLASS (overlay)->pango_lock);
 
   gst_base_text_overlay_set_composition (overlay);
@@ -1654,7 +1820,7 @@
 
   for (i = y0; i < y1; ++i) {
     for (j = x0; j < x1; ++j) {
-      gint y = dest_ptr[(i * dest_stride) + j] + overlay->shading_value;
+      gint y = dest_ptr[(i * dest_stride) + j] - overlay->shading_value;
 
       dest_ptr[(i * dest_stride) + j] = CLAMP (y, 0, 255);
     }
@@ -1689,7 +1855,7 @@
       gint y_pos;
 
       y_pos = (i * dest_stride) + j * pixel_stride;
-      y = dest_ptr[y_pos] + overlay->shading_value;
+      y = dest_ptr[y_pos] - overlay->shading_value;
 
       dest_ptr[y_pos] = CLAMP (y, 0, 255);
     }
@@ -1714,7 +1880,7 @@
 
       y_pos = (i * 4 * overlay->width) + j * 4;
       for (k = 0; k < 4; k++) {
-        y = dest_ptr[y_pos + k] + overlay->shading_value;
+        y = dest_ptr[y_pos + k] - overlay->shading_value;
         dest_ptr[y_pos + k] = CLAMP (y, 0, 255);
       }
     }
@@ -1730,7 +1896,7 @@
   gint y, x, stride, shading_val, tmp;
   guint8 *p;
 
-  shading_val = overlay->shading_value;
+  shading_val = -overlay->shading_value;
   stride = GST_VIDEO_FRAME_PLANE_STRIDE (frame, 0);
 
   for (y = y0; y < y1; ++y) {
@@ -1754,7 +1920,7 @@
   gint y, x, stride, shading_val, tmp;
   guint8 *p;
 
-  shading_val = overlay->shading_value;
+  shading_val = -overlay->shading_value;
   stride = GST_VIDEO_FRAME_PLANE_STRIDE (frame, 0);
 
   /* IYU1: packed 4:1:1 YUV (Cb-Y0-Y1-Cr-Y2-Y3 ...) */
@@ -1790,7 +1956,7 @@
       gint y, y_pos, k;\
       y_pos = (i * 4 * overlay->width) + j * 4;\
       for (k = OFFSET; k < 3+OFFSET; k++) {\
-        y = dest_ptr[y_pos + k] + overlay->shading_value;\
+        y = dest_ptr[y_pos + k] - overlay->shading_value;\
         dest_ptr[y_pos + k] = CLAMP (y, 0, 255);\
       }\
     }\
@@ -2294,7 +2460,9 @@
     if (GST_BUFFER_TIMESTAMP_IS_VALID (buffer))
       overlay->text_segment.position = clip_start;
 
-    overlay->text_buffer = buffer;
+    overlay->text_buffer = buffer;      /* pass ownership of @buffer */
+    buffer = NULL;
+
     /* That's a new text buffer we need to render */
     overlay->need_render = TRUE;
 
@@ -2305,6 +2473,8 @@
   GST_BASE_TEXT_OVERLAY_UNLOCK (overlay);
 
 beach:
+  if (buffer)
+    gst_buffer_unref (buffer);
 
   return ret;
 }
@@ -2319,8 +2489,22 @@
   gboolean in_seg = FALSE;
   guint64 start, stop, clip_start = 0, clip_stop = 0;
   gchar *text = NULL;
+  GstVideoOverlayCompositionMeta *composition_meta;
 
   overlay = GST_BASE_TEXT_OVERLAY (parent);
+
+  composition_meta = gst_buffer_get_video_overlay_composition_meta (buffer);
+  if (composition_meta) {
+    if (overlay->upstream_composition != composition_meta->overlay) {
+      GST_DEBUG ("GstVideoOverlayCompositionMeta found.");
+      overlay->upstream_composition = composition_meta->overlay;
+      overlay->need_render = TRUE;
+    }
+  } else if (overlay->upstream_composition != NULL) {
+    overlay->upstream_composition = NULL;
+    overlay->need_render = TRUE;
+  }
+
   klass = GST_BASE_TEXT_OVERLAY_GET_CLASS (overlay);
 
   if (!GST_BUFFER_TIMESTAMP_IS_VALID (buffer))
diff --git a/ext/pango/gstbasetextoverlay.h b/ext/pango/gstbasetextoverlay.h
index e31977b..ab9a8af 100644
--- a/ext/pango/gstbasetextoverlay.h
+++ b/ext/pango/gstbasetextoverlay.h
@@ -1,3 +1,27 @@
+/* GStreamer
+ * Copyright (C) <1999> Erik Walthinsen <omega@cse.ogi.edu>
+ * Copyright (C) <2003> David Schleef <ds@schleef.org>
+ * Copyright (C) <2006> Julien Moutte <julien@moutte.net>
+ * Copyright (C) <2006> Zeeshan Ali <zeeshan.ali@nokia.com>
+ * Copyright (C) <2006-2008> Tim-Philipp Müller <tim centricular net>
+ * Copyright (C) <2009> Young-Ho Cha <ganadist@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_BASE_TEXT_OVERLAY_H__
 #define __GST_BASE_TEXT_OVERLAY_H__
 
@@ -104,11 +128,11 @@
     GstSegment               segment;
     GstSegment               text_segment;
     GstBuffer               *text_buffer;
-    gboolean                text_linked;
-    gboolean                video_flushing;
-    gboolean                video_eos;
-    gboolean                text_flushing;
-    gboolean                text_eos;
+    gboolean                 text_linked;
+    gboolean                 video_flushing;
+    gboolean                 video_eos;
+    gboolean                 text_flushing;
+    gboolean                 text_eos;
 
     GMutex                   lock;
     GCond                    cond;  /* to signal removal of a queued text
@@ -116,16 +140,13 @@
                                      * a text segment update, or a change
                                      * in status (e.g. shutdown, flushing) */
 
+    /* stream metrics */
     GstVideoInfo             info;
     GstVideoFormat           format;
     gint                     width;
     gint                     height;
 
-    GstBaseTextOverlayVAlign     valign;
-    GstBaseTextOverlayHAlign     halign;
-    GstBaseTextOverlayWrapMode   wrap_mode;
-    GstBaseTextOverlayLineAlign  line_align;
-
+    /* properties */
     gint                     xpad;
     gint                     ypad;
     gint                     deltax;
@@ -137,26 +158,49 @@
     gboolean                 silent;
     gboolean                 wait_text;
     guint                    color, outline_color;
-
     PangoLayout             *layout;
-    gdouble                  shadow_offset;
-    gdouble                  outline_offset;
+    gboolean                 auto_adjust_size;
+    gboolean                 draw_shadow;
+    gboolean                 draw_outline;
+    gint                     shading_value;  /* for timeoverlay subclass */
+    gboolean                 use_vertical_render;
+    GstBaseTextOverlayVAlign     valign;
+    GstBaseTextOverlayHAlign     halign;
+    GstBaseTextOverlayWrapMode   wrap_mode;
+    GstBaseTextOverlayLineAlign  line_align;
+
+    /* text pad format */
+    gboolean                 have_pango_markup;
+
+    /* rendering state */
+    gboolean                 need_render;
     GstBuffer               *text_image;
+
+    /* dimension relative to witch the render is done, this is the stream size
+     * or a portion of the window_size (adapted to aspect ratio) */
+    gint                     render_width;
+    gint                     render_height;
+    /* This is (render_width / width) uses to convert to stream scale */
+    gdouble                  render_scale;
+
+    /* dimension of text_image, the physical dimension */
     gint                     image_width;
     gint                     image_height;
-    gint                     baseline_y;
 
-    gboolean                 auto_adjust_size;
-    gboolean                 need_render;
+    /* window dimension, reported in the composition meta params. This is set
+     * to stream width, height if missing */
+    gint                     window_width;
+    gint                     window_height;
 
-    gint                     shading_value;  /* for timeoverlay subclass */
+    gdouble                  shadow_offset;
+    gdouble                  outline_offset;
 
-    gboolean                 have_pango_markup;
-    gboolean                 use_vertical_render;
+    PangoRectangle           ink_rect;
+    PangoRectangle           logical_rect;
 
-    gboolean                 attach_compo_to_buffer;
-
+    gboolean                    attach_compo_to_buffer;
     GstVideoOverlayComposition *composition;
+    GstVideoOverlayComposition *upstream_composition;
 };
 
 struct _GstBaseTextOverlayClass {
diff --git a/ext/pango/gstclockoverlay.c b/ext/pango/gstclockoverlay.c
index 8fb1ecf..e5e177f 100644
--- a/ext/pango/gstclockoverlay.c
+++ b/ext/pango/gstclockoverlay.c
@@ -31,10 +31,10 @@
  * <refsect2>
  * <title>Example launch lines</title>
  * |[
- * gst-launch -v videotestsrc ! clockoverlay ! xvimagesink
- * ]| Display the current time in the top left corner of the video picture
+ * gst-launch-1.0 -v videotestsrc ! clockoverlay ! autovideosink
+ * ]| Display the current wall clock time in the top left corner of the video picture
  * |[
- * gst-launch -v videotestsrc ! clockoverlay halign=right valign=bottom text="Edge City" shaded-background=true ! videoconvert ! ximagesink
+ * gst-launch-1.0 -v videotestsrc ! clockoverlay halignment=right valignment=bottom text="Edge City" shaded-background=true font-desc="Sans, 36" ! videoconvert ! autovideosink
  * ]| Another pipeline that displays the current time with some leading
  * text in the bottom right corner of the video picture, with the background
  * of the text being shaded in order to make it more legible on top of a
diff --git a/ext/pango/gsttextoverlay.c b/ext/pango/gsttextoverlay.c
index 9e3f9de..d036579 100644
--- a/ext/pango/gsttextoverlay.c
+++ b/ext/pango/gsttextoverlay.c
@@ -40,11 +40,11 @@
  * <refsect2>
  * <title>Example launch lines</title>
  * |[
- * gst-launch -v videotestsrc ! textoverlay text="Room A" valign=top halign=left ! xvimagesink
+ * gst-launch-1.0 -v gst-launch-1.0 videotestsrc ! textoverlay text="Room A" valignment=top halignment=left font-desc="Sans, 72" ! autovideosink
  * ]| Here is a simple pipeline that displays a static text in the top left
  * corner of the video picture
  * |[
- * gst-launch -v filesrc location=subtitles.srt ! subparse ! txt.   videotestsrc ! timeoverlay ! textoverlay name=txt shaded-background=yes ! xvimagesink
+ * gst-launch-1.0 -v filesrc location=subtitles.srt ! subparse ! txt.   videotestsrc ! timeoverlay ! textoverlay name=txt shaded-background=yes ! autovideosink
  * ]| Here is another pipeline that displays subtitles from an .srt subtitle
  * file, centered at the bottom of the picture and with a rectangular shading
  * around the text in the background:
@@ -66,15 +66,6 @@
  * Uh? What are you talking about?
  * I don&apos;t understand  (18-62s)
  * ]|
- * One can also feed arbitrary live text into the element:
- * |[
- * gst-launch fdsrc fd=0 ! text/x-raw,format=utf8 ! txt. videotestsrc ! \
- * textoverlay  name=txt shaded-background=yes font-desc="Serif 40" wait-text=false ! \
- * xvimagesink
- * ]| This shows new text as entered on the terminal (stdin). This is not suited
- * for subtitles as the test overlay is not timed. Subtitles should use
- * timestamped formats. For the above use case one can also read the text from
- * the application as set the #GstTextOverlay:text property.
  * </para>
  * </refsect2>
  */
diff --git a/ext/pango/gsttextrender.c b/ext/pango/gsttextrender.c
index be7df62..c16dce4 100644
--- a/ext/pango/gsttextrender.c
+++ b/ext/pango/gsttextrender.c
@@ -34,7 +34,7 @@
  * <refsect2>
  * <title>Example launch lines</title>
  * |[
- * gst-launch -v filesrc location=subtitles.srt ! subparse ! textrender ! xvimagesink
+ * gst-launch-1.0 -v filesrc location=subtitles.srt ! subparse ! textrender ! videoconvert ! autovideosink
  * ]|
  * </refsect2>
  */
@@ -197,7 +197,7 @@
       "Filter/Editor/Video",
       "Renders a text string to an image bitmap",
       "David Schleef <ds@schleef.org>, "
-      "GStreamer maintainers <gstreamer-devel@lists.sourceforge.net>");
+      "GStreamer maintainers <gstreamer-devel@lists.freedesktop.org>");
 
   fontmap = pango_cairo_font_map_get_default ();
   klass->pango_context =
diff --git a/ext/pango/gsttimeoverlay.c b/ext/pango/gsttimeoverlay.c
index ffd6124..0cedd66 100644
--- a/ext/pango/gsttimeoverlay.c
+++ b/ext/pango/gsttimeoverlay.c
@@ -1,6 +1,6 @@
 /* GStreamer
- * Copyright (C) <1999> Erik Walthinsen <omega@cse.ogi.edu>
- * Copyright (C) <2005> Tim-Philipp Müller <tim@centricular.net>
+ * Copyright (C) 1999 Erik Walthinsen <omega@cse.ogi.edu>
+ * Copyright (C) 2005-2014 Tim-Philipp Müller <tim@centricular.net>
  *
  * This library is free software; you can redistribute it and/or
  * modify it under the terms of the GNU Library General Public
@@ -30,11 +30,10 @@
  *
  * <refsect2>
  * |[
- * gst-launch -v videotestsrc ! timeoverlay ! xvimagesink
- * ]| Display the time stamps in the top left
- * corner of the video picture.
+ * gst-launch-1.0 -v videotestsrc ! timeoverlay ! autovideosink
+ * ]| Display the time stamps in the top left corner of the video picture.
  * |[
- * gst-launch -v videotestsrc ! timeoverlay halign=right valign=bottom text="Stream time:" shaded-background=true ! xvimagesink
+ * gst-launch-1.0 -v videotestsrc ! timeoverlay halignment=right valignment=bottom text="Stream time:" shaded-background=true font-desc="Sans, 24" ! autovideosink
  * ]| Another pipeline that displays the time stamps with some leading
  * text in the bottom right corner of the video picture, with the background
  * of the text being shaded in order to make it more legible on top of a
@@ -50,9 +49,40 @@
 
 #include "gsttimeoverlay.h"
 
+#define DEFAULT_TIME_LINE GST_TIME_OVERLAY_TIME_LINE_BUFFER_TIME
+
+enum
+{
+  PROP_0,
+  PROP_TIME_LINE
+};
+
 #define gst_time_overlay_parent_class parent_class
 G_DEFINE_TYPE (GstTimeOverlay, gst_time_overlay, GST_TYPE_BASE_TEXT_OVERLAY);
 
+static void gst_time_overlay_set_property (GObject * object, guint prop_id,
+    const GValue * value, GParamSpec * pspec);
+static void gst_time_overlay_get_property (GObject * object, guint prop_id,
+    GValue * value, GParamSpec * pspec);
+
+#define GST_TYPE_TIME_OVERLAY_TIME_LINE (gst_time_overlay_time_line_type())
+static GType
+gst_time_overlay_time_line_type (void)
+{
+  static GType time_line_type = 0;
+  static const GEnumValue modes[] = {
+    {GST_TIME_OVERLAY_TIME_LINE_BUFFER_TIME, "buffer-time", "buffer-time"},
+    {GST_TIME_OVERLAY_TIME_LINE_STREAM_TIME, "stream-time", "stream-time"},
+    {GST_TIME_OVERLAY_TIME_LINE_RUNNING_TIME, "running-time", "running-time"},
+    {0, NULL, NULL},
+  };
+
+  if (!time_line_type) {
+    time_line_type = g_enum_register_static ("GstTimeOverlayTimeLine", modes);
+  }
+  return time_line_type;
+}
+
 static gchar *
 gst_time_overlay_render_time (GstTimeOverlay * overlay, GstClockTime time)
 {
@@ -74,21 +104,40 @@
 gst_time_overlay_get_text (GstBaseTextOverlay * overlay,
     GstBuffer * video_frame)
 {
-  GstClockTime time = GST_BUFFER_TIMESTAMP (video_frame);
+  GstTimeOverlayTimeLine time_line;
+  GstClockTime ts, ts_buffer;
+  GstSegment *segment = &overlay->segment;
   gchar *time_str, *txt, *ret;
 
   overlay->need_render = TRUE;
 
-  if (!GST_CLOCK_TIME_IS_VALID (time)) {
+  ts_buffer = GST_BUFFER_TIMESTAMP (video_frame);
+
+  if (!GST_CLOCK_TIME_IS_VALID (ts_buffer)) {
     GST_DEBUG ("buffer without valid timestamp");
     return g_strdup ("");
   }
 
-  GST_DEBUG ("buffer with timestamp %" GST_TIME_FORMAT, GST_TIME_ARGS (time));
+  GST_DEBUG ("buffer with timestamp %" GST_TIME_FORMAT,
+      GST_TIME_ARGS (ts_buffer));
+
+  time_line = g_atomic_int_get (&GST_TIME_OVERLAY_CAST (overlay)->time_line);
+  switch (time_line) {
+    case GST_TIME_OVERLAY_TIME_LINE_STREAM_TIME:
+      ts = gst_segment_to_stream_time (segment, GST_FORMAT_TIME, ts_buffer);
+      break;
+    case GST_TIME_OVERLAY_TIME_LINE_RUNNING_TIME:
+      ts = gst_segment_to_running_time (segment, GST_FORMAT_TIME, ts_buffer);
+      break;
+    case GST_TIME_OVERLAY_TIME_LINE_BUFFER_TIME:
+    default:
+      ts = ts_buffer;
+      break;
+  }
 
   txt = g_strdup (overlay->default_text);
 
-  time_str = gst_time_overlay_render_time (GST_TIME_OVERLAY (overlay), time);
+  time_str = gst_time_overlay_render_time (GST_TIME_OVERLAY (overlay), ts);
   if (txt != NULL && *txt != '\0') {
     ret = g_strdup_printf ("%s %s", txt, time_str);
   } else {
@@ -107,11 +156,13 @@
 {
   GstElementClass *gstelement_class;
   GstBaseTextOverlayClass *gsttextoverlay_class;
+  GObjectClass *gobject_class;
   PangoContext *context;
   PangoFontDescription *font_description;
 
   gsttextoverlay_class = (GstBaseTextOverlayClass *) klass;
   gstelement_class = (GstElementClass *) klass;
+  gobject_class = (GObjectClass *) klass;
 
   gst_element_class_set_static_metadata (gstelement_class, "Time overlay",
       "Filter/Editor/Video",
@@ -120,6 +171,14 @@
 
   gsttextoverlay_class->get_text = gst_time_overlay_get_text;
 
+  gobject_class->set_property = gst_time_overlay_set_property;
+  gobject_class->get_property = gst_time_overlay_get_property;
+
+  g_object_class_install_property (gobject_class, PROP_TIME_LINE,
+      g_param_spec_enum ("time-mode", "Time Mode", "What time to show",
+          GST_TYPE_TIME_OVERLAY_TIME_LINE, DEFAULT_TIME_LINE,
+          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+
   g_mutex_lock (gsttextoverlay_class->pango_lock);
   context = gsttextoverlay_class->pango_context;
 
@@ -147,4 +206,38 @@
 
   textoverlay->valign = GST_BASE_TEXT_OVERLAY_VALIGN_TOP;
   textoverlay->halign = GST_BASE_TEXT_OVERLAY_HALIGN_LEFT;
+
+  overlay->time_line = DEFAULT_TIME_LINE;
+}
+
+static void
+gst_time_overlay_set_property (GObject * object, guint prop_id,
+    const GValue * value, GParamSpec * pspec)
+{
+  GstTimeOverlay *overlay = GST_TIME_OVERLAY (object);
+
+  switch (prop_id) {
+    case PROP_TIME_LINE:
+      g_atomic_int_set (&overlay->time_line, g_value_get_enum (value));
+      break;
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      break;
+  }
+}
+
+static void
+gst_time_overlay_get_property (GObject * object, guint prop_id,
+    GValue * value, GParamSpec * pspec)
+{
+  GstTimeOverlay *overlay = GST_TIME_OVERLAY (object);
+
+  switch (prop_id) {
+    case PROP_TIME_LINE:
+      g_value_set_enum (value, g_atomic_int_get (&overlay->time_line));
+      break;
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      break;
+  }
 }
diff --git a/ext/pango/gsttimeoverlay.h b/ext/pango/gsttimeoverlay.h
index 3e37709..f895200 100644
--- a/ext/pango/gsttimeoverlay.h
+++ b/ext/pango/gsttimeoverlay.h
@@ -36,10 +36,17 @@
   (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_TIME_OVERLAY))
 #define GST_IS_TIME_OVERLAY_CLASS(klass) \
   (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_TIME_OVERLAY))
+#define GST_TIME_OVERLAY_CAST(obj) ((GstTimeOverlay*)(obj))
 
 typedef struct _GstTimeOverlay GstTimeOverlay;
 typedef struct _GstTimeOverlayClass GstTimeOverlayClass;
 
+typedef enum {
+  GST_TIME_OVERLAY_TIME_LINE_BUFFER_TIME,
+  GST_TIME_OVERLAY_TIME_LINE_STREAM_TIME,
+  GST_TIME_OVERLAY_TIME_LINE_RUNNING_TIME
+} GstTimeOverlayTimeLine;
+
 /**
  * GstTimeOverlay:
  *
@@ -47,6 +54,9 @@
  */
 struct _GstTimeOverlay {
   GstBaseTextOverlay textoverlay;
+
+  /*< private >*/
+  GstTimeOverlayTimeLine time_line;
 };
 
 struct _GstTimeOverlayClass {
diff --git a/ext/theora/Makefile.in b/ext/theora/Makefile.in
index efbda5e..154207d 100644
--- a/ext/theora/Makefile.in
+++ b/ext/theora/Makefile.in
@@ -1,7 +1,7 @@
-# Makefile.in generated by automake 1.14.1 from Makefile.am.
+# Makefile.in generated by automake 1.15 from Makefile.am.
 # @configure_input@
 
-# Copyright (C) 1994-2013 Free Software Foundation, Inc.
+# 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,
@@ -16,7 +16,17 @@
 
 
 VPATH = @srcdir@
-am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)'
+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 \
       ?) ;; \
@@ -81,8 +91,6 @@
 host_triplet = @host@
 target_triplet = @target@
 subdir = ext/theora
-DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \
-	$(top_srcdir)/depcomp $(noinst_HEADERS)
 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 \
@@ -103,7 +111,6 @@
 	$(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-x11.m4 \
 	$(top_srcdir)/common/m4/gst.m4 \
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
@@ -120,6 +127,8 @@
 	$(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 =
@@ -232,6 +241,7 @@
   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@
@@ -292,6 +302,8 @@
 GIO_CFLAGS = @GIO_CFLAGS@
 GIO_LDFLAGS = @GIO_LDFLAGS@
 GIO_LIBS = @GIO_LIBS@
+GIO_UNIX_2_0_CFLAGS = @GIO_UNIX_2_0_CFLAGS@
+GIO_UNIX_2_0_LIBS = @GIO_UNIX_2_0_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
@@ -321,6 +333,8 @@
 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_OPTION_CFLAGS = @GST_OPTION_CFLAGS@
 GST_OPTION_CXXFLAGS = @GST_OPTION_CXXFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
@@ -348,7 +362,6 @@
 GTK_X11_CFLAGS = @GTK_X11_CFLAGS@
 GTK_X11_LIBS = @GTK_X11_LIBS@
 HAVE_CDPARANOIA = @HAVE_CDPARANOIA@
-HAVE_X = @HAVE_X@
 HAVE_XSHM = @HAVE_XSHM@
 HAVE_ZLIB = @HAVE_ZLIB@
 HTML_DIR = @HTML_DIR@
@@ -363,6 +376,7 @@
 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@
@@ -452,13 +466,12 @@
 XGETTEXT = @XGETTEXT@
 XGETTEXT_015 = @XGETTEXT_015@
 XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
-XMKMF = @XMKMF@
+XSHM_CFLAGS = @XSHM_CFLAGS@
 XSHM_LIBS = @XSHM_LIBS@
+XVIDEO_CFLAGS = @XVIDEO_CFLAGS@
 XVIDEO_LIBS = @XVIDEO_LIBS@
 X_CFLAGS = @X_CFLAGS@
-X_EXTRA_LIBS = @X_EXTRA_LIBS@
 X_LIBS = @X_LIBS@
-X_PRE_LIBS = @X_PRE_LIBS@
 ZLIB_CFLAGS = @ZLIB_CFLAGS@
 ZLIB_LIBS = @ZLIB_LIBS@
 abs_builddir = @abs_builddir@
@@ -511,6 +524,7 @@
 psdir = @psdir@
 pyexecdir = @pyexecdir@
 pythondir = @pythondir@
+runstatedir = @runstatedir@
 sbindir = @sbindir@
 sharedstatedir = @sharedstatedir@
 srcdir = @srcdir@
@@ -559,7 +573,6 @@
 	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu ext/theora/Makefile'; \
 	$(am__cd) $(top_srcdir) && \
 	  $(AUTOMAKE) --gnu ext/theora/Makefile
-.PRECIOUS: Makefile
 Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
 	@case '$?' in \
 	  *config.status*) \
@@ -892,6 +905,8 @@
 	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.
diff --git a/ext/theora/gsttheoradec.c b/ext/theora/gsttheoradec.c
index 11ecffd..81589c5 100644
--- a/ext/theora/gsttheoradec.c
+++ b/ext/theora/gsttheoradec.c
@@ -32,9 +32,9 @@
  * <refsect2>
  * <title>Example pipeline</title>
  * |[
- * gst-launch -v filesrc location=videotestsrc.ogg ! oggdemux ! theoradec ! xvimagesink
- * ]| This example pipeline will decode an ogg stream and decodes the theora video. Refer to
- * the theoraenc example to create the ogg file.
+ * gst-launch-1.0 -v filesrc location=videotestsrc.ogg ! oggdemux ! theoradec ! videoconvert ! videoscale ! autovideosink
+ * ]| This example pipeline will decode an ogg stream and decodes the theora video in it.
+ * Refer to the theoraenc example to create the ogg file.
  * </refsect2>
  */
 
@@ -206,6 +206,10 @@
    * but is not marked that way so data gets parsed and keyframes marked */
   gst_video_decoder_set_packetized (GST_VIDEO_DECODER (dec), FALSE);
   gst_video_decoder_set_needs_format (GST_VIDEO_DECODER (dec), TRUE);
+
+  gst_video_decoder_set_use_default_pad_acceptcaps (GST_VIDEO_DECODER_CAST
+      (dec), TRUE);
+  GST_PAD_SET_ACCEPT_TEMPLATE (GST_VIDEO_DECODER_SINK_PAD (dec));
 }
 
 static gboolean
@@ -418,7 +422,7 @@
   }
   /* theora has:
    *
-   *  width/height : dimension of the encoded frame 
+   *  width/height : dimension of the encoded frame
    *  pic_width/pic_height : dimension of the visible part
    *  pic_x/pic_y : offset in encoded frame where visible part starts
    */
@@ -507,6 +511,8 @@
       break;
   }
 
+  dec->uncropped_info = state->info;
+
   gst_video_decoder_negotiate (GST_VIDEO_DECODER (dec));
 
   dec->have_header = TRUE;
@@ -559,6 +565,62 @@
   }
 }
 
+#define MIN_NUM_HEADERS 3
+static GstFlowReturn
+theoradec_handle_header_caps (GstTheoraDec * dec)
+{
+  GstFlowReturn result = GST_CUSTOM_FLOW_DROP;
+  GstCaps *caps;
+  GstStructure *s = NULL;
+  const GValue *array = NULL;
+
+  GST_DEBUG_OBJECT (dec, "Looking for Theora headers in caps");
+  caps = gst_pad_get_current_caps (GST_VIDEO_DECODER_SINK_PAD (dec));
+  if (caps)
+    s = gst_caps_get_structure (caps, 0);
+  if (s)
+    array = gst_structure_get_value (s, "streamheader");
+
+  if (caps)
+    gst_caps_unref (caps);
+
+  if (array && (gst_value_array_get_size (array) >= MIN_NUM_HEADERS)) {
+    const GValue *value = NULL;
+    GstBuffer *buf = NULL;
+    gint i = 0;
+
+    while (result == GST_CUSTOM_FLOW_DROP
+        && i < gst_value_array_get_size (array)) {
+      value = gst_value_array_get_value (array, i);
+      buf = gst_value_get_buffer (value);
+      if (!buf)
+        goto null_buffer;
+      GST_LOG_OBJECT (dec, "Submitting header packet");
+      result = theora_dec_decode_buffer (dec, buf, NULL);
+      i++;
+    }
+  } else
+    goto array_error;
+
+done:
+  return (result !=
+      GST_CUSTOM_FLOW_DROP ? GST_FLOW_NOT_NEGOTIATED : GST_FLOW_OK);
+
+  /* ERRORS */
+array_error:
+  {
+    GST_WARNING_OBJECT (dec, "streamheader array not found");
+    result = GST_FLOW_ERROR;
+    goto done;
+  }
+null_buffer:
+  {
+    GST_WARNING_OBJECT (dec, "streamheader with null buffer received");
+    result = GST_FLOW_ERROR;
+    goto done;
+  }
+}
+
 /* Allocate buffer and copy image data into Y444 format */
 static GstFlowReturn
 theora_handle_image (GstTheoraDec * dec, th_ycbcr_buffer buf,
@@ -638,7 +700,7 @@
   GST_CAT_TRACE_OBJECT (GST_CAT_PERFORMANCE, dec,
       "doing unavoidable video frame copy");
 
-  if (G_UNLIKELY (!gst_video_frame_map (&vframe, &dec->output_state->info,
+  if (G_UNLIKELY (!gst_video_frame_map (&vframe, &dec->uncropped_info,
               frame->output_buffer, GST_MAP_WRITE)))
     goto invalid_frame;
 
@@ -683,10 +745,13 @@
   GstFlowReturn result;
   ogg_int64_t gp;
 
-  if (G_UNLIKELY (!dec->have_header))
-    goto not_initialized;
+  if (G_UNLIKELY (!dec->have_header)) {
+    result = theoradec_handle_header_caps (dec);
+    if (result != GST_FLOW_OK)
+      goto not_initialized;
+  }
 
-  /* the second most significant bit of the first data byte is cleared 
+  /* the second most significant bit of the first data byte is cleared
    * for keyframes. We can only check it if it's not a zero-length packet. */
   keyframe = packet->bytes && ((packet->packet[0] & 0x40) == 0);
   if (G_UNLIKELY (keyframe)) {
@@ -782,19 +847,15 @@
   /* switch depending on packet type. A zero byte packet is always a data
    * packet; we don't dereference it in that case. */
   if (packet.bytes && packet.packet[0] & 0x80) {
+    /* header packets are not meant to be displayed - return FLOW_DROP */
     if (dec->have_header) {
       GST_WARNING_OBJECT (GST_OBJECT (dec), "Ignoring header");
-      GST_VIDEO_CODEC_FRAME_FLAG_SET (frame,
-          GST_VIDEO_CODEC_FRAME_FLAG_DECODE_ONLY);
       result = GST_CUSTOM_FLOW_DROP;
       goto done;
     }
-    result = theora_handle_header_packet (dec, &packet);
-    /* header packets are not meant to be displayed */
-    /* FIXME : This is a temporary hack. The proper fix would be to
-     * not call _finish_frame() for these types of packets */
-    GST_VIDEO_CODEC_FRAME_FLAG_SET (frame,
-        GST_VIDEO_CODEC_FRAME_FLAG_DECODE_ONLY);
+    if ((result = theora_handle_header_packet (dec, &packet)) != GST_FLOW_OK)
+      goto done;
+    result = GST_CUSTOM_FLOW_DROP;
   } else {
     result = theora_handle_data_packet (dec, &packet, frame);
   }
@@ -857,14 +918,18 @@
   }
 
   if (dec->can_crop) {
-    GstVideoInfo info = state->info;
+    GstVideoInfo *info = &dec->uncropped_info;
     GstCaps *caps;
 
-    /* Calculate uncropped size */
-    gst_video_info_set_format (&info, info.finfo->format, dec->info.frame_width,
+    GST_LOG_OBJECT (decoder, "Using GstVideoCropMeta, uncropped wxh = %dx%d",
+        info->width, info->height);
+
+    gst_video_info_set_format (info, info->finfo->format, dec->info.frame_width,
         dec->info.frame_height);
-    size = MAX (size, info.size);
-    caps = gst_video_info_to_caps (&info);
+
+    /* Calculate uncropped size */
+    size = MAX (size, info->size);
+    caps = gst_video_info_to_caps (info);
     gst_buffer_pool_config_set_params (config, caps, size, min, max);
     gst_caps_unref (caps);
   }
diff --git a/ext/theora/gsttheoradec.h b/ext/theora/gsttheoradec.h
index 1ca5583..2445ad3 100644
--- a/ext/theora/gsttheoradec.h
+++ b/ext/theora/gsttheoradec.h
@@ -77,6 +77,7 @@
   gint telemetry_bits;
 
   gboolean can_crop;
+  GstVideoInfo uncropped_info;
 };
 
 struct _GstTheoraDecClass
diff --git a/ext/theora/gsttheoraenc.c b/ext/theora/gsttheoraenc.c
index 126c5e3..d106050 100644
--- a/ext/theora/gsttheoraenc.c
+++ b/ext/theora/gsttheoraenc.c
@@ -42,10 +42,13 @@
  * bitrate (CBR) stream while setting the quality property will produce a
  * variable bitrate (VBR) stream.
  *
+ * A videorate element is often required in front of theoraenc, especially
+ * when transcoding and when putting Theora into the Ogg container.
+ *
  * <refsect2>
  * <title>Example pipeline</title>
  * |[
- * gst-launch -v videotestsrc num-buffers=1000 ! theoraenc ! oggmux ! filesink location=videotestsrc.ogg
+ * gst-launch-1.0 -v videotestsrc num-buffers=500 ! video/x-raw,width=1280,height=720 ! queue ! progressreport ! theoraenc ! oggmux ! filesink location=videotestsrc.ogg
  * ]| This example pipeline will encode a test video source to theora muxed in an
  * ogg container. Refer to the theoradec documentation to decode the create
  * stream.
@@ -303,6 +306,8 @@
 static void
 gst_theora_enc_init (GstTheoraEnc * enc)
 {
+  GST_PAD_SET_ACCEPT_TEMPLATE (GST_VIDEO_ENCODER_SINK_PAD (enc));
+
   enc->video_bitrate = THEORA_DEF_BITRATE;
   enc->video_quality = THEORA_DEF_QUALITY;
   enc->keyframe_auto = THEORA_DEF_KEYFRAME_AUTO;
diff --git a/ext/theora/gsttheoraparse.c b/ext/theora/gsttheoraparse.c
index f3558e8..5c58644 100644
--- a/ext/theora/gsttheoraparse.c
+++ b/ext/theora/gsttheoraparse.c
@@ -43,11 +43,11 @@
  * <refsect2>
  * <title>Example pipelines</title>
  * |[
- * gst-launch -v filesrc location=video.ogg ! oggdemux ! theoraparse ! fakesink
+ * gst-launch-1.0 -v filesrc location=video.ogg ! oggdemux ! theoraparse ! fakesink
  * ]| This pipeline shows that the streamheader is set in the caps, and that each
  * buffer has the timestamp, duration, offset, and offset_end set.
  * |[
- * gst-launch filesrc location=video.ogg ! oggdemux ! theoraparse \
+ * gst-launch-1.0 filesrc location=video.ogg ! oggdemux ! theoraparse \
  *            ! oggmux ! filesink location=video-remuxed.ogg
  * ]| This pipeline shows remuxing. video-remuxed.ogg might not be exactly the same
  * as video.ogg, but they should produce exactly the same decoded data.
diff --git a/ext/vorbis/Makefile.am b/ext/vorbis/Makefile.am
index 41062bb..cc3d28e 100644
--- a/ext/vorbis/Makefile.am
+++ b/ext/vorbis/Makefile.am
@@ -45,18 +45,3 @@
 		 gstvorbisparse.h \
 		 gstvorbistag.h \
 		 gstvorbiscommon.h
-
-Android.mk: Makefile.am $(BUILT_SOURCES)
-	androgenizer \
-	-:PROJECT libgstivorbisdec -:SHARED libgstivorbisdec \
-	 -:TAGS eng debug \
-         -:REL_TOP $(top_srcdir) -:ABS_TOP $(abs_top_srcdir) \
-	 -:SOURCES $(libgstivorbisdec_la_SOURCES) \
-	 -:CFLAGS $(DEFS) $(DEFAULT_INCLUDES) $(libgstivorbisdec_la_CFLAGS) \
-	 -:LDFLAGS $(libgstivorbisdec_la_LDFLAGS) \
-	           $(libgstivorbisdec_la_LIBADD) \
-		   -lvorbisidec \
-	           -ldl \
-	 -:PASSTHROUGH LOCAL_ARM_MODE:=arm \
-		       LOCAL_MODULE_PATH:='$$(TARGET_OUT)/lib/gstreamer-0.10' \
-	> $@
diff --git a/ext/vorbis/Makefile.in b/ext/vorbis/Makefile.in
index 219ef54..c0a254d 100644
--- a/ext/vorbis/Makefile.in
+++ b/ext/vorbis/Makefile.in
@@ -1,7 +1,7 @@
-# Makefile.in generated by automake 1.14.1 from Makefile.am.
+# Makefile.in generated by automake 1.15 from Makefile.am.
 # @configure_input@
 
-# Copyright (C) 1994-2013 Free Software Foundation, Inc.
+# 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,
@@ -16,7 +16,17 @@
 
 
 VPATH = @srcdir@
-am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)'
+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 \
       ?) ;; \
@@ -83,8 +93,6 @@
 @USE_VORBIS_TRUE@am__append_1 = libgstvorbis.la
 @USE_IVORBIS_TRUE@am__append_2 = libgstivorbisdec.la
 subdir = ext/vorbis
-DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \
-	$(top_srcdir)/depcomp $(noinst_HEADERS) README
 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 \
@@ -105,7 +113,6 @@
 	$(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-x11.m4 \
 	$(top_srcdir)/common/m4/gst.m4 \
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
@@ -122,6 +129,8 @@
 	$(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 =
@@ -258,6 +267,7 @@
   done | $(am__uniquify_input)`
 ETAGS = etags
 CTAGS = ctags
+am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp README
 DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
 ACLOCAL = @ACLOCAL@
 ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@
@@ -318,6 +328,8 @@
 GIO_CFLAGS = @GIO_CFLAGS@
 GIO_LDFLAGS = @GIO_LDFLAGS@
 GIO_LIBS = @GIO_LIBS@
+GIO_UNIX_2_0_CFLAGS = @GIO_UNIX_2_0_CFLAGS@
+GIO_UNIX_2_0_LIBS = @GIO_UNIX_2_0_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
@@ -347,6 +359,8 @@
 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_OPTION_CFLAGS = @GST_OPTION_CFLAGS@
 GST_OPTION_CXXFLAGS = @GST_OPTION_CXXFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
@@ -374,7 +388,6 @@
 GTK_X11_CFLAGS = @GTK_X11_CFLAGS@
 GTK_X11_LIBS = @GTK_X11_LIBS@
 HAVE_CDPARANOIA = @HAVE_CDPARANOIA@
-HAVE_X = @HAVE_X@
 HAVE_XSHM = @HAVE_XSHM@
 HAVE_ZLIB = @HAVE_ZLIB@
 HTML_DIR = @HTML_DIR@
@@ -389,6 +402,7 @@
 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@
@@ -478,13 +492,12 @@
 XGETTEXT = @XGETTEXT@
 XGETTEXT_015 = @XGETTEXT_015@
 XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
-XMKMF = @XMKMF@
+XSHM_CFLAGS = @XSHM_CFLAGS@
 XSHM_LIBS = @XSHM_LIBS@
+XVIDEO_CFLAGS = @XVIDEO_CFLAGS@
 XVIDEO_LIBS = @XVIDEO_LIBS@
 X_CFLAGS = @X_CFLAGS@
-X_EXTRA_LIBS = @X_EXTRA_LIBS@
 X_LIBS = @X_LIBS@
-X_PRE_LIBS = @X_PRE_LIBS@
 ZLIB_CFLAGS = @ZLIB_CFLAGS@
 ZLIB_LIBS = @ZLIB_LIBS@
 abs_builddir = @abs_builddir@
@@ -537,6 +550,7 @@
 psdir = @psdir@
 pyexecdir = @pyexecdir@
 pythondir = @pythondir@
+runstatedir = @runstatedir@
 sbindir = @sbindir@
 sharedstatedir = @sharedstatedir@
 srcdir = @srcdir@
@@ -606,7 +620,6 @@
 	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu ext/vorbis/Makefile'; \
 	$(am__cd) $(top_srcdir) && \
 	  $(AUTOMAKE) --gnu ext/vorbis/Makefile
-.PRECIOUS: Makefile
 Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
 	@case '$?' in \
 	  *config.status*) \
@@ -998,21 +1011,8 @@
 	pdf pdf-am ps ps-am tags tags-am uninstall uninstall-am \
 	uninstall-pluginLTLIBRARIES
 
+.PRECIOUS: Makefile
 
-Android.mk: Makefile.am $(BUILT_SOURCES)
-	androgenizer \
-	-:PROJECT libgstivorbisdec -:SHARED libgstivorbisdec \
-	 -:TAGS eng debug \
-         -:REL_TOP $(top_srcdir) -:ABS_TOP $(abs_top_srcdir) \
-	 -:SOURCES $(libgstivorbisdec_la_SOURCES) \
-	 -:CFLAGS $(DEFS) $(DEFAULT_INCLUDES) $(libgstivorbisdec_la_CFLAGS) \
-	 -:LDFLAGS $(libgstivorbisdec_la_LDFLAGS) \
-	           $(libgstivorbisdec_la_LIBADD) \
-		   -lvorbisidec \
-	           -ldl \
-	 -:PASSTHROUGH LOCAL_ARM_MODE:=arm \
-		       LOCAL_MODULE_PATH:='$$(TARGET_OUT)/lib/gstreamer-0.10' \
-	> $@
 
 # 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/ext/vorbis/gstvorbisdec.c b/ext/vorbis/gstvorbisdec.c
index 3a5a334..f679d7e 100644
--- a/ext/vorbis/gstvorbisdec.c
+++ b/ext/vorbis/gstvorbisdec.c
@@ -24,12 +24,14 @@
  * This element decodes a Vorbis stream to raw float audio.
  * <ulink url="http://www.vorbis.com/">Vorbis</ulink> is a royalty-free
  * audio codec maintained by the <ulink url="http://www.xiph.org/">Xiph.org
- * Foundation</ulink>.
+ * Foundation</ulink>. As it outputs raw float audio you will often need to
+ * put an audioconvert element after it.
+ *
  *
  * <refsect2>
  * <title>Example pipelines</title>
  * |[
- * gst-launch -v filesrc location=sine.ogg ! oggdemux ! vorbisdec ! audioconvert ! alsasink
+ * gst-launch-1.0 -v filesrc location=sine.ogg ! oggdemux ! vorbisdec ! audioconvert ! audioresample ! autoaudiosink
  * ]| Decode an Ogg/Vorbis. To create an Ogg/Vorbis file refer to the documentation of vorbisenc.
  * </refsect2>
  */
@@ -107,6 +109,9 @@
 static void
 gst_vorbis_dec_init (GstVorbisDec * dec)
 {
+  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));
 }
 
 static void
@@ -270,7 +275,7 @@
 {
   gint res;
 
-  g_assert (vd->initialized == FALSE);
+  g_assert (!vd->initialized);
 
 #ifdef USE_TREMOLO
   if (G_UNLIKELY ((res = vorbis_dsp_init (&vd->vd, &vd->vi))))
diff --git a/ext/vorbis/gstvorbisenc.c b/ext/vorbis/gstvorbisenc.c
index 824390e..818a010 100644
--- a/ext/vorbis/gstvorbisenc.c
+++ b/ext/vorbis/gstvorbisenc.c
@@ -29,12 +29,12 @@
  * <refsect2>
  * <title>Example pipelines</title>
  * |[
- * gst-launch -v audiotestsrc wave=sine num-buffers=100 ! audioconvert ! vorbisenc ! oggmux ! filesink location=sine.ogg
+ * gst-launch-1.0 -v audiotestsrc wave=sine num-buffers=100 ! audioconvert ! vorbisenc ! oggmux ! filesink location=sine.ogg
  * ]| Encode a test sine signal to Ogg/Vorbis.  Note that the resulting file
  * will be really small because a sine signal compresses very well.
  * |[
- * gst-launch -v alsasrc ! audioconvert ! vorbisenc ! oggmux ! filesink location=alsasrc.ogg
- * ]| Record from a sound card using ALSA and encode to Ogg/Vorbis.
+ * gst-launch-1.0 -v autoaudiosrc ! audioconvert ! vorbisenc ! oggmux ! filesink location=alsasrc.ogg
+ * ]| Record from a sound card and encode to Ogg/Vorbis.
  * </refsect2>
  */
 #ifdef HAVE_CONFIG_H
@@ -56,16 +56,6 @@
 GST_DEBUG_CATEGORY_EXTERN (vorbisenc_debug);
 #define GST_CAT_DEFAULT vorbisenc_debug
 
-static GstStaticPadTemplate vorbis_enc_sink_factory =
-GST_STATIC_PAD_TEMPLATE ("sink",
-    GST_PAD_SINK,
-    GST_PAD_ALWAYS,
-    GST_STATIC_CAPS ("audio/x-raw, "
-        "format = (string) " GST_AUDIO_NE (F32) ", "
-        "layout = (string) interleaved, "
-        "rate = (int) [ 1, 200000 ], " "channels = (int) [ 1, 255 ]")
-    );
-
 static GstStaticPadTemplate vorbis_enc_src_factory =
 GST_STATIC_PAD_TEMPLATE ("src",
     GST_PAD_SRC,
@@ -86,6 +76,7 @@
 };
 
 static GstFlowReturn gst_vorbis_enc_output_buffers (GstVorbisEnc * vorbisenc);
+static GstCaps *gst_vorbis_enc_generate_sink_caps (void);
 
 
 #define MAX_BITRATE_DEFAULT     -1
@@ -101,8 +92,6 @@
     GstAudioInfo * info);
 static GstFlowReturn gst_vorbis_enc_handle_frame (GstAudioEncoder * enc,
     GstBuffer * in_buf);
-static GstCaps *gst_vorbis_enc_getcaps (GstAudioEncoder * enc,
-    GstCaps * filter);
 static gboolean gst_vorbis_enc_sink_event (GstAudioEncoder * enc,
     GstEvent * event);
 
@@ -125,6 +114,8 @@
   GObjectClass *gobject_class;
   GstElementClass *gstelement_class;
   GstAudioEncoderClass *base_class;
+  GstCaps *sink_caps;
+  GstPadTemplate *sink_templ;
 
   gobject_class = (GObjectClass *) klass;
   gstelement_class = (GstElementClass *) klass;
@@ -165,10 +156,14 @@
           "The last status message", NULL,
           G_PARAM_READABLE | G_PARAM_STATIC_STRINGS));
 
+  sink_caps = gst_vorbis_enc_generate_sink_caps ();
+  sink_templ = gst_pad_template_new ("sink",
+      GST_PAD_SINK, GST_PAD_ALWAYS, sink_caps);
+  gst_element_class_add_pad_template (gstelement_class, sink_templ);
+  gst_caps_unref (sink_caps);
+
   gst_element_class_add_pad_template (gstelement_class,
       gst_static_pad_template_get (&vorbis_enc_src_factory));
-  gst_element_class_add_pad_template (gstelement_class,
-      gst_static_pad_template_get (&vorbis_enc_sink_factory));
 
   gst_element_class_set_static_metadata (gstelement_class,
       "Vorbis audio encoder", "Codec/Encoder/Audio",
@@ -179,7 +174,6 @@
   base_class->stop = GST_DEBUG_FUNCPTR (gst_vorbis_enc_stop);
   base_class->set_format = GST_DEBUG_FUNCPTR (gst_vorbis_enc_set_format);
   base_class->handle_frame = GST_DEBUG_FUNCPTR (gst_vorbis_enc_handle_frame);
-  base_class->getcaps = GST_DEBUG_FUNCPTR (gst_vorbis_enc_getcaps);
   base_class->sink_event = GST_DEBUG_FUNCPTR (gst_vorbis_enc_sink_event);
   base_class->flush = GST_DEBUG_FUNCPTR (gst_vorbis_enc_flush);
 }
@@ -189,6 +183,8 @@
 {
   GstAudioEncoder *enc = GST_AUDIO_ENCODER (vorbisenc);
 
+  GST_PAD_SET_ACCEPT_TEMPLATE (GST_AUDIO_ENCODER_SINK_PAD (enc));
+
   vorbisenc->channels = -1;
   vorbisenc->frequency = -1;
 
@@ -289,27 +285,6 @@
   return caps;
 }
 
-static GstCaps *
-gst_vorbis_enc_getcaps (GstAudioEncoder * enc, GstCaps * filter)
-{
-  GstVorbisEnc *vorbisenc = GST_VORBISENC (enc);
-  GstCaps *caps;
-
-  if (vorbisenc->sinkcaps == NULL)
-    vorbisenc->sinkcaps = gst_vorbis_enc_generate_sink_caps ();
-
-  if (filter) {
-    GstCaps *int_caps = gst_caps_intersect_full (filter, vorbisenc->sinkcaps,
-        GST_CAPS_INTERSECT_FIRST);
-    caps = gst_audio_encoder_proxy_getcaps (enc, int_caps, filter);
-    gst_caps_unref (int_caps);
-  } else {
-    caps = gst_audio_encoder_proxy_getcaps (enc, vorbisenc->sinkcaps, filter);
-  }
-
-  return caps;
-}
-
 static gint64
 gst_vorbis_enc_get_latency (GstVorbisEnc * vorbisenc)
 {
@@ -616,16 +591,17 @@
 /*
  * (really really) FIXME: move into core (dixit tpm)
  */
-/**
+/*
  * _gst_caps_set_buffer_array:
- * @caps: a #GstCaps
+ * @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: input caps with a streamheader field added, or NULL if some error
+ * 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,
@@ -799,6 +775,27 @@
     while (vorbis_bitrate_flushpacket (&vorbisenc->vd, &op)) {
       GstBuffer *buf;
 
+      if (op.e_o_s) {
+        GstAudioEncoder *enc = GST_AUDIO_ENCODER (vorbisenc);
+        GstClockTime duration;
+
+        GST_DEBUG_OBJECT (vorbisenc, "Got EOS packet from libvorbis");
+        GST_AUDIO_ENCODER_STREAM_LOCK (enc);
+        if (!GST_CLOCK_TIME_IS_VALID (enc->output_segment.stop)) {
+          GST_DEBUG_OBJECT (vorbisenc,
+              "Output segment has no end time, setting");
+          duration =
+              gst_util_uint64_scale (op.granulepos, GST_SECOND,
+              vorbisenc->frequency);
+          enc->output_segment.stop = enc->output_segment.start + duration;
+          GST_DEBUG_OBJECT (enc, "new output segment %" GST_SEGMENT_FORMAT,
+              &enc->output_segment);
+          gst_pad_push_event (GST_AUDIO_ENCODER_SRC_PAD (enc),
+              gst_event_new_segment (&enc->output_segment));
+        }
+        GST_AUDIO_ENCODER_STREAM_UNLOCK (enc);
+      }
+
       GST_LOG_OBJECT (vorbisenc, "pushing out a data packet");
       buf =
           gst_audio_encoder_allocate_output_buffer (GST_AUDIO_ENCODER
diff --git a/ext/vorbis/gstvorbisparse.c b/ext/vorbis/gstvorbisparse.c
index 57b792c..f9f9198 100644
--- a/ext/vorbis/gstvorbisparse.c
+++ b/ext/vorbis/gstvorbisparse.c
@@ -36,11 +36,11 @@
  * <refsect2>
  * <title>Example pipelines</title>
  * |[
- * gst-launch -v filesrc location=sine.ogg ! oggdemux ! vorbisparse ! fakesink
+ * gst-launch-1.0 -v filesrc location=sine.ogg ! oggdemux ! vorbisparse ! fakesink
  * ]| This pipeline shows that the streamheader is set in the caps, and that each
  * buffer has the timestamp, duration, offset, and offset_end set.
  * |[
- * gst-launch filesrc location=sine.ogg ! oggdemux ! vorbisparse \
+ * gst-launch-1.0 filesrc location=sine.ogg ! oggdemux ! vorbisparse \
  *            ! oggmux ! filesink location=sine-remuxed.ogg
  * ]| This pipeline shows remuxing. sine-remuxed.ogg might not be exactly the same
  * as sine.ogg, but they should produce exactly the same decoded data.
@@ -227,7 +227,7 @@
   /* get the headers into the caps, passing them to vorbis as we go */
   caps = gst_caps_new_simple ("audio/x-vorbis",
       "rate", G_TYPE_INT, parse->sample_rate,
-      "channels", G_TYPE_INT, parse->channels, NULL);;
+      "channels", G_TYPE_INT, parse->channels, NULL);
   vorbis_parse_set_header_on_caps (parse, caps);
   GST_DEBUG_OBJECT (parse, "here are the caps: %" GST_PTR_FORMAT, caps);
   gst_pad_set_caps (parse->srcpad, caps);
diff --git a/ext/vorbis/gstvorbistag.c b/ext/vorbis/gstvorbistag.c
index fa7af7a..fded30c 100644
--- a/ext/vorbis/gstvorbistag.c
+++ b/ext/vorbis/gstvorbistag.c
@@ -37,8 +37,8 @@
  * <refsect2>
  * <title>Example pipelines</title>
  * |[
- * gst-launch -v filesrc location=foo.ogg ! oggdemux ! vorbistag ! oggmux ! filesink location=bar.ogg
- * ]| This element is not useful with gst-launch, because it does not support
+ * gst-launch-1.0 -v filesrc location=foo.ogg ! oggdemux ! vorbistag ! oggmux ! filesink location=bar.ogg
+ * ]| This element is not useful with gst-launch-1.0, because it does not support
  * setting the tags on a #GstTagSetter interface. Conceptually, the element
  * will usually be used in this order though.
  * </refsect2>
diff --git a/gst-libs/Makefile.in b/gst-libs/Makefile.in
index 887ab9d..d360ec6 100644
--- a/gst-libs/Makefile.in
+++ b/gst-libs/Makefile.in
@@ -1,7 +1,7 @@
-# Makefile.in generated by automake 1.14.1 from Makefile.am.
+# Makefile.in generated by automake 1.15 from Makefile.am.
 # @configure_input@
 
-# Copyright (C) 1994-2013 Free Software Foundation, Inc.
+# 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,
@@ -14,7 +14,17 @@
 
 @SET_MAKE@
 VPATH = @srcdir@
-am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)'
+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 \
       ?) ;; \
@@ -79,7 +89,6 @@
 host_triplet = @host@
 target_triplet = @target@
 subdir = gst-libs
-DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am
 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 \
@@ -100,7 +109,6 @@
 	$(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-x11.m4 \
 	$(top_srcdir)/common/m4/gst.m4 \
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
@@ -117,6 +125,7 @@
 	$(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
 mkinstalldirs = $(install_sh) -d
 CONFIG_HEADER = $(top_builddir)/config.h
 CONFIG_CLEAN_FILES =
@@ -176,6 +185,7 @@
 ETAGS = etags
 CTAGS = ctags
 DIST_SUBDIRS = $(SUBDIRS)
+am__DIST_COMMON = $(srcdir)/Makefile.in
 DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
 am__relativize = \
   dir0=`pwd`; \
@@ -261,6 +271,8 @@
 GIO_CFLAGS = @GIO_CFLAGS@
 GIO_LDFLAGS = @GIO_LDFLAGS@
 GIO_LIBS = @GIO_LIBS@
+GIO_UNIX_2_0_CFLAGS = @GIO_UNIX_2_0_CFLAGS@
+GIO_UNIX_2_0_LIBS = @GIO_UNIX_2_0_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
@@ -290,6 +302,8 @@
 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_OPTION_CFLAGS = @GST_OPTION_CFLAGS@
 GST_OPTION_CXXFLAGS = @GST_OPTION_CXXFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
@@ -317,7 +331,6 @@
 GTK_X11_CFLAGS = @GTK_X11_CFLAGS@
 GTK_X11_LIBS = @GTK_X11_LIBS@
 HAVE_CDPARANOIA = @HAVE_CDPARANOIA@
-HAVE_X = @HAVE_X@
 HAVE_XSHM = @HAVE_XSHM@
 HAVE_ZLIB = @HAVE_ZLIB@
 HTML_DIR = @HTML_DIR@
@@ -332,6 +345,7 @@
 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@
@@ -421,13 +435,12 @@
 XGETTEXT = @XGETTEXT@
 XGETTEXT_015 = @XGETTEXT_015@
 XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
-XMKMF = @XMKMF@
+XSHM_CFLAGS = @XSHM_CFLAGS@
 XSHM_LIBS = @XSHM_LIBS@
+XVIDEO_CFLAGS = @XVIDEO_CFLAGS@
 XVIDEO_LIBS = @XVIDEO_LIBS@
 X_CFLAGS = @X_CFLAGS@
-X_EXTRA_LIBS = @X_EXTRA_LIBS@
 X_LIBS = @X_LIBS@
-X_PRE_LIBS = @X_PRE_LIBS@
 ZLIB_CFLAGS = @ZLIB_CFLAGS@
 ZLIB_LIBS = @ZLIB_LIBS@
 abs_builddir = @abs_builddir@
@@ -480,6 +493,7 @@
 psdir = @psdir@
 pyexecdir = @pyexecdir@
 pythondir = @pythondir@
+runstatedir = @runstatedir@
 sbindir = @sbindir@
 sharedstatedir = @sharedstatedir@
 srcdir = @srcdir@
@@ -508,7 +522,6 @@
 	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu gst-libs/Makefile'; \
 	$(am__cd) $(top_srcdir) && \
 	  $(AUTOMAKE) --gnu gst-libs/Makefile
-.PRECIOUS: Makefile
 Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
 	@case '$?' in \
 	  *config.status*) \
@@ -803,6 +816,8 @@
 	mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \
 	ps ps-am tags tags-am uninstall uninstall-am
 
+.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.
diff --git a/gst-libs/gst/Makefile.am b/gst-libs/gst/Makefile.am
index 0634d15..6d3bc10 100644
--- a/gst-libs/gst/Makefile.am
+++ b/gst-libs/gst/Makefile.am
@@ -1,11 +1,11 @@
 SUBDIRS = \
 	tag \
 	fft \
-	rtp \
 	sdp \
 	rtsp \
 	video \
 	audio \
+	rtp \
 	pbutils \
 	riff \
 	app \
@@ -22,8 +22,10 @@
 
 pbutils: video audio
 
+rtp: audio
+
 INDEPENDENT_SUBDIRS = \
-	tag audio fft rtp sdp video app
+	tag audio fft sdp video app
 
 .PHONY: independent-subdirs $(INDEPENDENT_SUBDIRS)
 
diff --git a/gst-libs/gst/Makefile.in b/gst-libs/gst/Makefile.in
index fd881b3..92c522d 100644
--- a/gst-libs/gst/Makefile.in
+++ b/gst-libs/gst/Makefile.in
@@ -1,7 +1,7 @@
-# Makefile.in generated by automake 1.14.1 from Makefile.am.
+# Makefile.in generated by automake 1.15 from Makefile.am.
 # @configure_input@
 
-# Copyright (C) 1994-2013 Free Software Foundation, Inc.
+# 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,
@@ -15,7 +15,17 @@
 @SET_MAKE@
 
 VPATH = @srcdir@
-am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)'
+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 \
       ?) ;; \
@@ -80,8 +90,6 @@
 host_triplet = @host@
 target_triplet = @target@
 subdir = gst-libs/gst
-DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \
-	$(noinst_HEADERS)
 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 \
@@ -102,7 +110,6 @@
 	$(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-x11.m4 \
 	$(top_srcdir)/common/m4/gst.m4 \
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
@@ -119,6 +126,8 @@
 	$(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 =
@@ -179,6 +188,7 @@
 ETAGS = etags
 CTAGS = ctags
 DIST_SUBDIRS = $(SUBDIRS)
+am__DIST_COMMON = $(srcdir)/Makefile.in
 DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
 am__relativize = \
   dir0=`pwd`; \
@@ -264,6 +274,8 @@
 GIO_CFLAGS = @GIO_CFLAGS@
 GIO_LDFLAGS = @GIO_LDFLAGS@
 GIO_LIBS = @GIO_LIBS@
+GIO_UNIX_2_0_CFLAGS = @GIO_UNIX_2_0_CFLAGS@
+GIO_UNIX_2_0_LIBS = @GIO_UNIX_2_0_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
@@ -293,6 +305,8 @@
 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_OPTION_CFLAGS = @GST_OPTION_CFLAGS@
 GST_OPTION_CXXFLAGS = @GST_OPTION_CXXFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
@@ -320,7 +334,6 @@
 GTK_X11_CFLAGS = @GTK_X11_CFLAGS@
 GTK_X11_LIBS = @GTK_X11_LIBS@
 HAVE_CDPARANOIA = @HAVE_CDPARANOIA@
-HAVE_X = @HAVE_X@
 HAVE_XSHM = @HAVE_XSHM@
 HAVE_ZLIB = @HAVE_ZLIB@
 HTML_DIR = @HTML_DIR@
@@ -335,6 +348,7 @@
 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@
@@ -424,13 +438,12 @@
 XGETTEXT = @XGETTEXT@
 XGETTEXT_015 = @XGETTEXT_015@
 XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
-XMKMF = @XMKMF@
+XSHM_CFLAGS = @XSHM_CFLAGS@
 XSHM_LIBS = @XSHM_LIBS@
+XVIDEO_CFLAGS = @XVIDEO_CFLAGS@
 XVIDEO_LIBS = @XVIDEO_LIBS@
 X_CFLAGS = @X_CFLAGS@
-X_EXTRA_LIBS = @X_EXTRA_LIBS@
 X_LIBS = @X_LIBS@
-X_PRE_LIBS = @X_PRE_LIBS@
 ZLIB_CFLAGS = @ZLIB_CFLAGS@
 ZLIB_LIBS = @ZLIB_LIBS@
 abs_builddir = @abs_builddir@
@@ -483,6 +496,7 @@
 psdir = @psdir@
 pyexecdir = @pyexecdir@
 pythondir = @pythondir@
+runstatedir = @runstatedir@
 sbindir = @sbindir@
 sharedstatedir = @sharedstatedir@
 srcdir = @srcdir@
@@ -498,11 +512,11 @@
 SUBDIRS = \
 	tag \
 	fft \
-	rtp \
 	sdp \
 	rtsp \
 	video \
 	audio \
+	rtp \
 	pbutils \
 	riff \
 	app \
@@ -510,7 +524,7 @@
 
 noinst_HEADERS = gettext.h gst-i18n-app.h gst-i18n-plugin.h glib-compat-private.h
 INDEPENDENT_SUBDIRS = \
-	tag audio fft rtp sdp video app
+	tag audio fft sdp video app
 
 all: all-recursive
 
@@ -527,7 +541,6 @@
 	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu gst-libs/gst/Makefile'; \
 	$(am__cd) $(top_srcdir) && \
 	  $(AUTOMAKE) --gnu gst-libs/gst/Makefile
-.PRECIOUS: Makefile
 Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
 	@case '$?' in \
 	  *config.status*) \
@@ -822,6 +835,8 @@
 	mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \
 	ps ps-am tags tags-am uninstall uninstall-am
 
+.PRECIOUS: Makefile
+
 
 # dependencies:
 audio: tag
@@ -832,6 +847,8 @@
 
 pbutils: video audio
 
+rtp: audio
+
 .PHONY: independent-subdirs $(INDEPENDENT_SUBDIRS)
 
 independent-subdirs: $(INDEPENDENT_SUBDIRS)
diff --git a/gst-libs/gst/allocators/Makefile.am b/gst-libs/gst/allocators/Makefile.am
index c550ab0..9361bf9 100644
--- a/gst-libs/gst/allocators/Makefile.am
+++ b/gst-libs/gst/allocators/Makefile.am
@@ -4,11 +4,13 @@
 
 libgstallocators_@GST_API_VERSION@_include_HEADERS = \
 	allocators.h \
+	gstfdmemory.h \
 	gstdmabuf.h
 
 noinst_HEADERS =
 
 libgstallocators_@GST_API_VERSION@_la_SOURCES = \
+	gstfdmemory.c \
 	gstdmabuf.c 
 
 libgstallocators_@GST_API_VERSION@_la_LIBADD = $(GST_LIBS) $(LIBM)
@@ -23,7 +25,7 @@
 gir_cincludes=$(patsubst %,--c-include='gst/allocators/%',$(libgstallocators_@GST_API_VERSION@_include_HEADERS))
 
 GstAllocators-@GST_API_VERSION@.gir: $(INTROSPECTION_SCANNER) libgstallocators-@GST_API_VERSION@.la
-	$(AM_V_GEN)PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" \
+	$(AM_V_GEN)PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" GI_SCANNER_DISABLE_CACHE=yes\
 		GST_PLUGIN_SYSTEM_PATH="" GST_PLUGIN_PATH="" GST_REGISTRY_UPDATE=no \
 		$(INTROSPECTION_SCANNER) -v --namespace GstAllocators \
 		--nsversion=@GST_API_VERSION@ \
@@ -61,17 +63,3 @@
 
 CLEANFILES = $(BUILT_GIRSOURCES) $(typelibs_DATA)
 endif
-
-Android.mk: Makefile.am
-	androgenizer -:PROJECT libgstallocators -:SHARED libgstallocators-@GST_API_VERSION@ \
-	 -:TAGS eng debug \
-         -:REL_TOP $(top_srcdir) -:ABS_TOP $(abs_top_srcdir) \
-	 -:SOURCES $(libgstallocators_@GST_API_VERSION@_la_SOURCES) \
-	 -:CFLAGS $(DEFS) $(libgstallocators_@GST_API_VERSION@_la_CFLAGS) \
-	 -:LDFLAGS $(libgstallocators_@GST_API_VERSION@_la_LDFLAGS) \
-	           $(libgstallocators_@GST_API_VERSION@_la_LIBADD) \
-	           -ldl \
-	 -:HEADER_TARGET gstreamer-@GST_API_VERSION@/gst/allocators \
-	 -:HEADERS $(libgstallocatorsinclude_HEADERS) \
-	 -:PASSTHROUGH LOCAL_ARM_MODE:=arm \
-	> $@
diff --git a/gst-libs/gst/allocators/Makefile.in b/gst-libs/gst/allocators/Makefile.in
index dfcd0d0..c08058c 100644
--- a/gst-libs/gst/allocators/Makefile.in
+++ b/gst-libs/gst/allocators/Makefile.in
@@ -1,7 +1,7 @@
-# Makefile.in generated by automake 1.14.1 from Makefile.am.
+# Makefile.in generated by automake 1.15 from Makefile.am.
 # @configure_input@
 
-# Copyright (C) 1994-2013 Free Software Foundation, Inc.
+# 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,
@@ -17,7 +17,17 @@
 
 
 VPATH = @srcdir@
-am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)'
+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 \
       ?) ;; \
@@ -82,10 +92,6 @@
 host_triplet = @host@
 target_triplet = @target@
 subdir = gst-libs/gst/allocators
-DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \
-	$(top_srcdir)/depcomp \
-	$(libgstallocators_@GST_API_VERSION@_include_HEADERS) \
-	$(noinst_HEADERS)
 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 \
@@ -106,7 +112,6 @@
 	$(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-x11.m4 \
 	$(top_srcdir)/common/m4/gst.m4 \
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
@@ -123,6 +128,9 @@
 	$(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am \
+	$(libgstallocators_@GST_API_VERSION@_include_HEADERS) \
+	$(noinst_HEADERS) $(am__DIST_COMMON)
 mkinstalldirs = $(install_sh) -d
 CONFIG_HEADER = $(top_builddir)/config.h
 CONFIG_CLEAN_FILES =
@@ -162,6 +170,7 @@
 libgstallocators_@GST_API_VERSION@_la_DEPENDENCIES =  \
 	$(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1)
 am_libgstallocators_@GST_API_VERSION@_la_OBJECTS =  \
+	libgstallocators_@GST_API_VERSION@_la-gstfdmemory.lo \
 	libgstallocators_@GST_API_VERSION@_la-gstdmabuf.lo
 libgstallocators_@GST_API_VERSION@_la_OBJECTS =  \
 	$(am_libgstallocators_@GST_API_VERSION@_la_OBJECTS)
@@ -219,6 +228,7 @@
 HEADERS = $(libgstallocators_@GST_API_VERSION@_include_HEADERS) \
 	$(noinst_HEADERS)
 am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp
 DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
 ACLOCAL = @ACLOCAL@
 ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@
@@ -279,6 +289,8 @@
 GIO_CFLAGS = @GIO_CFLAGS@
 GIO_LDFLAGS = @GIO_LDFLAGS@
 GIO_LIBS = @GIO_LIBS@
+GIO_UNIX_2_0_CFLAGS = @GIO_UNIX_2_0_CFLAGS@
+GIO_UNIX_2_0_LIBS = @GIO_UNIX_2_0_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
@@ -308,6 +320,8 @@
 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_OPTION_CFLAGS = @GST_OPTION_CFLAGS@
 GST_OPTION_CXXFLAGS = @GST_OPTION_CXXFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
@@ -335,7 +349,6 @@
 GTK_X11_CFLAGS = @GTK_X11_CFLAGS@
 GTK_X11_LIBS = @GTK_X11_LIBS@
 HAVE_CDPARANOIA = @HAVE_CDPARANOIA@
-HAVE_X = @HAVE_X@
 HAVE_XSHM = @HAVE_XSHM@
 HAVE_ZLIB = @HAVE_ZLIB@
 HTML_DIR = @HTML_DIR@
@@ -350,6 +363,7 @@
 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@
@@ -439,13 +453,12 @@
 XGETTEXT = @XGETTEXT@
 XGETTEXT_015 = @XGETTEXT_015@
 XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
-XMKMF = @XMKMF@
+XSHM_CFLAGS = @XSHM_CFLAGS@
 XSHM_LIBS = @XSHM_LIBS@
+XVIDEO_CFLAGS = @XVIDEO_CFLAGS@
 XVIDEO_LIBS = @XVIDEO_LIBS@
 X_CFLAGS = @X_CFLAGS@
-X_EXTRA_LIBS = @X_EXTRA_LIBS@
 X_LIBS = @X_LIBS@
-X_PRE_LIBS = @X_PRE_LIBS@
 ZLIB_CFLAGS = @ZLIB_CFLAGS@
 ZLIB_LIBS = @ZLIB_LIBS@
 abs_builddir = @abs_builddir@
@@ -498,6 +511,7 @@
 psdir = @psdir@
 pyexecdir = @pyexecdir@
 pythondir = @pythondir@
+runstatedir = @runstatedir@
 sbindir = @sbindir@
 sharedstatedir = @sharedstatedir@
 srcdir = @srcdir@
@@ -514,10 +528,12 @@
 libgstallocators_@GST_API_VERSION@_includedir = $(includedir)/gstreamer-@GST_API_VERSION@/gst/allocators
 libgstallocators_@GST_API_VERSION@_include_HEADERS = \
 	allocators.h \
+	gstfdmemory.h \
 	gstdmabuf.h
 
 noinst_HEADERS = 
 libgstallocators_@GST_API_VERSION@_la_SOURCES = \
+	gstfdmemory.c \
 	gstdmabuf.c 
 
 libgstallocators_@GST_API_VERSION@_la_LIBADD = $(GST_LIBS) $(LIBM)
@@ -551,7 +567,6 @@
 	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu gst-libs/gst/allocators/Makefile'; \
 	$(am__cd) $(top_srcdir) && \
 	  $(AUTOMAKE) --gnu gst-libs/gst/allocators/Makefile
-.PRECIOUS: Makefile
 Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
 	@case '$?' in \
 	  *config.status*) \
@@ -615,6 +630,7 @@
 	-rm -f *.tab.c
 
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstallocators_@GST_API_VERSION@_la-gstdmabuf.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstallocators_@GST_API_VERSION@_la-gstfdmemory.Plo@am__quote@
 
 .c.o:
 @am__fastdepCC_TRUE@	$(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\
@@ -640,6 +656,13 @@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $<
 
+libgstallocators_@GST_API_VERSION@_la-gstfdmemory.lo: gstfdmemory.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) $(libgstallocators_@GST_API_VERSION@_la_CFLAGS) $(CFLAGS) -MT libgstallocators_@GST_API_VERSION@_la-gstfdmemory.lo -MD -MP -MF $(DEPDIR)/libgstallocators_@GST_API_VERSION@_la-gstfdmemory.Tpo -c -o libgstallocators_@GST_API_VERSION@_la-gstfdmemory.lo `test -f 'gstfdmemory.c' || echo '$(srcdir)/'`gstfdmemory.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstallocators_@GST_API_VERSION@_la-gstfdmemory.Tpo $(DEPDIR)/libgstallocators_@GST_API_VERSION@_la-gstfdmemory.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='gstfdmemory.c' object='libgstallocators_@GST_API_VERSION@_la-gstfdmemory.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) $(libgstallocators_@GST_API_VERSION@_la_CFLAGS) $(CFLAGS) -c -o libgstallocators_@GST_API_VERSION@_la-gstfdmemory.lo `test -f 'gstfdmemory.c' || echo '$(srcdir)/'`gstfdmemory.c
+
 libgstallocators_@GST_API_VERSION@_la-gstdmabuf.lo: gstdmabuf.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) $(libgstallocators_@GST_API_VERSION@_la_CFLAGS) $(CFLAGS) -MT libgstallocators_@GST_API_VERSION@_la-gstdmabuf.lo -MD -MP -MF $(DEPDIR)/libgstallocators_@GST_API_VERSION@_la-gstdmabuf.Tpo -c -o libgstallocators_@GST_API_VERSION@_la-gstdmabuf.lo `test -f 'gstdmabuf.c' || echo '$(srcdir)/'`gstdmabuf.c
 @am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstallocators_@GST_API_VERSION@_la-gstdmabuf.Tpo $(DEPDIR)/libgstallocators_@GST_API_VERSION@_la-gstdmabuf.Plo
@@ -885,9 +908,11 @@
 	uninstall-libgstallocators_@GST_API_VERSION@_includeHEADERS \
 	uninstall-typelibsDATA
 
+.PRECIOUS: Makefile
+
 
 @HAVE_INTROSPECTION_TRUE@GstAllocators-@GST_API_VERSION@.gir: $(INTROSPECTION_SCANNER) libgstallocators-@GST_API_VERSION@.la
-@HAVE_INTROSPECTION_TRUE@	$(AM_V_GEN)PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" \
+@HAVE_INTROSPECTION_TRUE@	$(AM_V_GEN)PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" GI_SCANNER_DISABLE_CACHE=yes\
 @HAVE_INTROSPECTION_TRUE@		GST_PLUGIN_SYSTEM_PATH="" GST_PLUGIN_PATH="" GST_REGISTRY_UPDATE=no \
 @HAVE_INTROSPECTION_TRUE@		$(INTROSPECTION_SCANNER) -v --namespace GstAllocators \
 @HAVE_INTROSPECTION_TRUE@		--nsversion=@GST_API_VERSION@ \
@@ -914,20 +939,6 @@
 @HAVE_INTROSPECTION_TRUE@		--includedir=`PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" $(PKG_CONFIG) --variable=girdir gstreamer-@GST_API_VERSION@` \
 @HAVE_INTROSPECTION_TRUE@		$(INTROSPECTION_COMPILER_OPTS) $< -o $(@F)
 
-Android.mk: Makefile.am
-	androgenizer -:PROJECT libgstallocators -:SHARED libgstallocators-@GST_API_VERSION@ \
-	 -:TAGS eng debug \
-         -:REL_TOP $(top_srcdir) -:ABS_TOP $(abs_top_srcdir) \
-	 -:SOURCES $(libgstallocators_@GST_API_VERSION@_la_SOURCES) \
-	 -:CFLAGS $(DEFS) $(libgstallocators_@GST_API_VERSION@_la_CFLAGS) \
-	 -:LDFLAGS $(libgstallocators_@GST_API_VERSION@_la_LDFLAGS) \
-	           $(libgstallocators_@GST_API_VERSION@_la_LIBADD) \
-	           -ldl \
-	 -:HEADER_TARGET gstreamer-@GST_API_VERSION@/gst/allocators \
-	 -:HEADERS $(libgstallocatorsinclude_HEADERS) \
-	 -:PASSTHROUGH LOCAL_ARM_MODE:=arm \
-	> $@
-
 # 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-libs/gst/allocators/allocators.h b/gst-libs/gst/allocators/allocators.h
index c12beff..14a4ac8 100644
--- a/gst-libs/gst/allocators/allocators.h
+++ b/gst-libs/gst/allocators/allocators.h
@@ -23,6 +23,7 @@
 #define __GST_ALLOCATORS_H__
 
 #include <gst/allocators/gstdmabuf.h>
+#include <gst/allocators/gstfdmemory.h>
 
 #endif /* __GST_ALLOCATORS_H__ */
 
diff --git a/gst-libs/gst/allocators/gstdmabuf.c b/gst-libs/gst/allocators/gstdmabuf.c
index 02a5eed..785a076 100644
--- a/gst-libs/gst/allocators/gstdmabuf.c
+++ b/gst-libs/gst/allocators/gstdmabuf.c
@@ -22,6 +22,7 @@
 #include "config.h"
 #endif
 
+#include "gstfdmemory.h"
 #include "gstdmabuf.h"
 
 /**
@@ -37,166 +38,21 @@
 #include <unistd.h>
 #endif
 
-/*
- * GstDmaBufMemory
- * @fd: the file descriptor associated this memory
- * @data: mmapped address
- * @mmapping_flags: mmapping flags
- * @mmap_count: mmapping counter
- * @lock: a mutex to make mmapping thread safe
- */
-typedef struct
-{
-  GstMemory mem;
-
-  gint fd;
-  gpointer data;
-  gint mmapping_flags;
-  gint mmap_count;
-  GMutex lock;
-} GstDmaBufMemory;
-
 GST_DEBUG_CATEGORY_STATIC (dmabuf_debug);
 #define GST_CAT_DEFAULT dmabuf_debug
 
-static void
-gst_dmabuf_allocator_free (GstAllocator * allocator, GstMemory * gmem)
-{
-#ifdef HAVE_MMAP
-  GstDmaBufMemory *mem = (GstDmaBufMemory *) gmem;
-
-  if (mem->data) {
-    g_warning (G_STRLOC ":%s: Freeing memory %p still mapped", G_STRFUNC, mem);
-    munmap ((void *) mem->data, gmem->maxsize);
-  }
-  if (mem->fd >= 0 && gmem->parent == NULL)
-    close (mem->fd);
-  g_mutex_clear (&mem->lock);
-  g_slice_free (GstDmaBufMemory, mem);
-  GST_DEBUG ("%p: freed", mem);
-#endif
-}
-
-static gpointer
-gst_dmabuf_mem_map (GstMemory * gmem, gsize maxsize, GstMapFlags flags)
-{
-#ifdef HAVE_MMAP
-  GstDmaBufMemory *mem = (GstDmaBufMemory *) gmem;
-  gint prot;
-  gpointer ret = NULL;
-
-  if (gmem->parent)
-    return gst_dmabuf_mem_map (gmem->parent, maxsize, flags);
-
-  g_mutex_lock (&mem->lock);
-
-  prot = flags & GST_MAP_READ ? PROT_READ : 0;
-  prot |= flags & GST_MAP_WRITE ? PROT_WRITE : 0;
-
-  /* do not mmap twice the buffer */
-  if (mem->data) {
-    /* only return address if mapping flags are a subset
-     * of the previous flags */
-    if ((mem->mmapping_flags & prot) == prot) {
-      ret = mem->data;
-      mem->mmap_count++;
-    }
-
-    goto out;
-  }
-
-  if (mem->fd != -1) {
-    mem->data = mmap (0, gmem->maxsize, prot, MAP_SHARED, mem->fd, 0);
-    if (mem->data == MAP_FAILED) {
-      mem->data = NULL;
-      GST_ERROR ("%p: fd %d: mmap failed: %s", mem, mem->fd,
-          g_strerror (errno));
-      goto out;
-    }
-  }
-
-  GST_DEBUG ("%p: fd %d: mapped %p", mem, mem->fd, mem->data);
-
-  if (mem->data) {
-    mem->mmapping_flags = prot;
-    mem->mmap_count++;
-    ret = mem->data;
-  }
-
-out:
-  g_mutex_unlock (&mem->lock);
-  return ret;
-#else /* !HAVE_MMAP */
-  return FALSE;
-#endif
-}
-
-static void
-gst_dmabuf_mem_unmap (GstMemory * gmem)
-{
-#ifdef HAVE_MMAP
-  GstDmaBufMemory *mem = (GstDmaBufMemory *) gmem;
-
-  if (gmem->parent)
-    return gst_dmabuf_mem_unmap (gmem->parent);
-
-  g_mutex_lock (&mem->lock);
-
-  if (mem->data && !(--mem->mmap_count)) {
-    munmap ((void *) mem->data, gmem->maxsize);
-    mem->data = NULL;
-    mem->mmapping_flags = 0;
-    GST_DEBUG ("%p: fd %d unmapped", mem, mem->fd);
-  }
-  g_mutex_unlock (&mem->lock);
-#endif
-}
-
-static GstMemory *
-gst_dmabuf_mem_share (GstMemory * gmem, gssize offset, gssize size)
-{
-#ifdef HAVE_MMAP
-  GstDmaBufMemory *mem = (GstDmaBufMemory *) gmem;
-  GstDmaBufMemory *sub;
-  GstMemory *parent;
-
-  GST_DEBUG ("%p: share %" G_GSSIZE_FORMAT " %" G_GSIZE_FORMAT, mem, offset,
-      size);
-
-  /* find the real parent */
-  if ((parent = mem->mem.parent) == NULL)
-    parent = (GstMemory *) mem;
-
-  if (size == -1)
-    size = gmem->maxsize - offset;
-
-  sub = g_slice_new0 (GstDmaBufMemory);
-  /* the shared memory is always readonly */
-  gst_memory_init (GST_MEMORY_CAST (sub), GST_MINI_OBJECT_FLAGS (parent) |
-      GST_MINI_OBJECT_FLAG_LOCK_READONLY, mem->mem.allocator, parent,
-      mem->mem.maxsize, mem->mem.align, mem->mem.offset + offset, size);
-
-  sub->fd = mem->fd;
-  g_mutex_init (&sub->lock);
-
-  return GST_MEMORY_CAST (sub);
-#else /* !HAVE_MMAP */
-  return NULL;
-#endif
-}
-
 typedef struct
 {
-  GstAllocator parent;
+  GstFdAllocator parent;
 } GstDmaBufAllocator;
 
 typedef struct
 {
-  GstAllocatorClass parent_class;
+  GstFdAllocatorClass parent_class;
 } GstDmaBufAllocatorClass;
 
 GType dmabuf_mem_allocator_get_type (void);
-G_DEFINE_TYPE (GstDmaBufAllocator, dmabuf_mem_allocator, GST_TYPE_ALLOCATOR);
+G_DEFINE_TYPE (GstDmaBufAllocator, dmabuf_mem_allocator, GST_TYPE_FD_ALLOCATOR);
 
 #define GST_TYPE_DMABUF_ALLOCATOR   (dmabuf_mem_allocator_get_type())
 #define GST_IS_DMABUF_ALLOCATOR(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GST_TYPE_DMABUF_ALLOCATOR))
@@ -204,12 +60,6 @@
 static void
 dmabuf_mem_allocator_class_init (GstDmaBufAllocatorClass * klass)
 {
-  GstAllocatorClass *allocator_class;
-
-  allocator_class = (GstAllocatorClass *) klass;
-
-  allocator_class->alloc = NULL;
-  allocator_class->free = gst_dmabuf_allocator_free;
 }
 
 static void
@@ -218,12 +68,6 @@
   GstAllocator *alloc = GST_ALLOCATOR_CAST (allocator);
 
   alloc->mem_type = GST_ALLOCATOR_DMABUF;
-  alloc->mem_map = gst_dmabuf_mem_map;
-  alloc->mem_unmap = gst_dmabuf_mem_unmap;
-  alloc->mem_share = gst_dmabuf_mem_share;
-  /* Use the default, fallback copy function */
-
-  GST_OBJECT_FLAG_SET (allocator, GST_ALLOCATOR_FLAG_CUSTOM_ALLOC);
 }
 
 /**
@@ -262,30 +106,9 @@
 GstMemory *
 gst_dmabuf_allocator_alloc (GstAllocator * allocator, gint fd, gsize size)
 {
-#ifdef HAVE_MMAP
-  GstDmaBufMemory *mem;
+  g_return_val_if_fail (GST_IS_DMABUF_ALLOCATOR (allocator), NULL);
 
-  if (!GST_IS_DMABUF_ALLOCATOR (allocator)) {
-    GST_WARNING ("it isn't the correct allocator for dmabuf");
-    return NULL;
-  }
-
-  GST_DEBUG ("alloc from allocator %p", allocator);
-
-  mem = g_slice_new0 (GstDmaBufMemory);
-
-  gst_memory_init (GST_MEMORY_CAST (mem), 0, allocator, NULL, size, 0, 0, size);
-
-  mem->fd = fd;
-  g_mutex_init (&mem->lock);
-
-  GST_DEBUG ("%p: fd: %d size %" G_GSIZE_FORMAT, mem, mem->fd,
-      mem->mem.maxsize);
-
-  return (GstMemory *) mem;
-#else /* !HAVE_MMAP */
-  return NULL;
-#endif
+  return gst_fd_allocator_alloc (allocator, fd, size, GST_FD_MEMORY_FLAG_NONE);
 }
 
 /**
@@ -294,18 +117,18 @@
  *
  * Return the file descriptor associated with @mem.
  *
- * Returns: the file descriptor associated with the memory, or -1
+ * Returns: the file descriptor associated with the memory, or -1.  The file
+ *     descriptor is still owned by the GstMemory.  Use dup to take a copy
+ *     if you intend to use it beyond the lifetime of this GstMemory.
  *
  * Since: 1.2
  */
 gint
 gst_dmabuf_memory_get_fd (GstMemory * mem)
 {
-  GstDmaBufMemory *dbmem = (GstDmaBufMemory *) mem;
-
   g_return_val_if_fail (gst_is_dmabuf_memory (mem), -1);
 
-  return dbmem->fd;
+  return gst_fd_memory_get_fd (mem);
 }
 
 /**
diff --git a/gst-libs/gst/allocators/gstfdmemory.c b/gst-libs/gst/allocators/gstfdmemory.c
new file mode 100644
index 0000000..4f2348d
--- /dev/null
+++ b/gst-libs/gst/allocators/gstfdmemory.c
@@ -0,0 +1,311 @@
+/* GStreamer fd backed memory
+ * Copyright (C) 2013 Linaro SA
+ * Author: Benjamin Gaignard <benjamin.gaignard@linaro.org> for Linaro.
+ *
+ * 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.
+ */
+
+/**
+ * SECTION:gstfdmemory
+ * @short_description: Memory wrapper for fd backed memory
+ * @see_also: #GstMemory
+ *
+ * Since: 1.4
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include "gstfdmemory.h"
+
+#ifdef HAVE_MMAP
+#include <sys/mman.h>
+#include <unistd.h>
+#endif
+
+typedef struct
+{
+  GstMemory mem;
+
+  GstFdMemoryFlags flags;
+  gint fd;
+  gpointer data;
+  gint mmapping_flags;
+  gint mmap_count;
+  GMutex lock;
+} GstFdMemory;
+
+static void
+gst_fd_mem_free (GstAllocator * allocator, GstMemory * gmem)
+{
+#ifdef HAVE_MMAP
+  GstFdMemory *mem = (GstFdMemory *) gmem;
+
+  if (mem->data) {
+    if (!(mem->flags & GST_FD_MEMORY_FLAG_KEEP_MAPPED))
+      g_warning (G_STRLOC ":%s: Freeing memory %p still mapped", G_STRFUNC,
+          mem);
+
+    munmap ((void *) mem->data, gmem->maxsize);
+  }
+  if (mem->fd >= 0 && gmem->parent == NULL)
+    close (mem->fd);
+  g_mutex_clear (&mem->lock);
+  g_slice_free (GstFdMemory, mem);
+  GST_DEBUG ("%p: freed", mem);
+#endif
+}
+
+static gpointer
+gst_fd_mem_map (GstMemory * gmem, gsize maxsize, GstMapFlags flags)
+{
+#ifdef HAVE_MMAP
+  GstFdMemory *mem = (GstFdMemory *) gmem;
+  gint prot;
+  gpointer ret = NULL;
+
+  if (gmem->parent)
+    return gst_fd_mem_map (gmem->parent, maxsize, flags);
+
+  prot = flags & GST_MAP_READ ? PROT_READ : 0;
+  prot |= flags & GST_MAP_WRITE ? PROT_WRITE : 0;
+
+  g_mutex_lock (&mem->lock);
+  /* do not mmap twice the buffer */
+  if (mem->data) {
+    /* only return address if mapping flags are a subset
+     * of the previous flags */
+    if ((mem->mmapping_flags & prot) == prot) {
+      ret = mem->data;
+      mem->mmap_count++;
+    }
+
+    goto out;
+  }
+
+  if (mem->fd != -1) {
+    gint flags;
+
+    flags =
+        (mem->flags & GST_FD_MEMORY_FLAG_MAP_PRIVATE) ? MAP_PRIVATE :
+        MAP_SHARED;
+
+    mem->data = mmap (0, gmem->maxsize, prot, flags, mem->fd, 0);
+    if (mem->data == MAP_FAILED) {
+      mem->data = NULL;
+      GST_ERROR ("%p: fd %d: mmap failed: %s", mem, mem->fd,
+          g_strerror (errno));
+      goto out;
+    }
+  }
+
+  GST_DEBUG ("%p: fd %d: mapped %p", mem, mem->fd, mem->data);
+
+  if (mem->data) {
+    mem->mmapping_flags = prot;
+    mem->mmap_count++;
+    ret = mem->data;
+  }
+
+out:
+  g_mutex_unlock (&mem->lock);
+  return ret;
+#else /* !HAVE_MMAP */
+  return FALSE;
+#endif
+}
+
+static void
+gst_fd_mem_unmap (GstMemory * gmem)
+{
+#ifdef HAVE_MMAP
+  GstFdMemory *mem = (GstFdMemory *) gmem;
+
+  if (gmem->parent)
+    return gst_fd_mem_unmap (gmem->parent);
+
+  if (mem->flags & GST_FD_MEMORY_FLAG_KEEP_MAPPED)
+    return;
+
+  g_mutex_lock (&mem->lock);
+  if (mem->data && !(--mem->mmap_count)) {
+    munmap ((void *) mem->data, gmem->maxsize);
+    mem->data = NULL;
+    mem->mmapping_flags = 0;
+    GST_DEBUG ("%p: fd %d unmapped", mem, mem->fd);
+  }
+  g_mutex_unlock (&mem->lock);
+#endif
+}
+
+static GstMemory *
+gst_fd_mem_share (GstMemory * gmem, gssize offset, gssize size)
+{
+#ifdef HAVE_MMAP
+  GstFdMemory *mem = (GstFdMemory *) gmem;
+  GstFdMemory *sub;
+  GstMemory *parent;
+
+  GST_DEBUG ("%p: share %" G_GSSIZE_FORMAT " %" G_GSIZE_FORMAT, mem, offset,
+      size);
+
+  /* find the real parent */
+  if ((parent = mem->mem.parent) == NULL)
+    parent = (GstMemory *) mem;
+
+  if (size == -1)
+    size = gmem->maxsize - offset;
+
+  sub = g_slice_new0 (GstFdMemory);
+  /* the shared memory is always readonly */
+  gst_memory_init (GST_MEMORY_CAST (sub), GST_MINI_OBJECT_FLAGS (parent) |
+      GST_MINI_OBJECT_FLAG_LOCK_READONLY, mem->mem.allocator, parent,
+      mem->mem.maxsize, mem->mem.align, mem->mem.offset + offset, size);
+
+  sub->fd = mem->fd;
+  g_mutex_init (&sub->lock);
+
+  return GST_MEMORY_CAST (sub);
+#else /* !HAVE_MMAP */
+  return NULL;
+#endif
+}
+
+G_DEFINE_TYPE (GstFdAllocator, gst_fd_allocator, GST_TYPE_ALLOCATOR);
+
+static void
+gst_fd_allocator_class_init (GstFdAllocatorClass * klass)
+{
+  GstAllocatorClass *allocator_class;
+
+  allocator_class = (GstAllocatorClass *) klass;
+
+  allocator_class->alloc = NULL;
+  allocator_class->free = gst_fd_mem_free;
+
+}
+
+static void
+gst_fd_allocator_init (GstFdAllocator * allocator)
+{
+  GstAllocator *alloc = GST_ALLOCATOR_CAST (allocator);
+
+  alloc->mem_type = GST_ALLOCATOR_FD;
+
+  alloc->mem_map = gst_fd_mem_map;
+  alloc->mem_unmap = gst_fd_mem_unmap;
+  alloc->mem_share = gst_fd_mem_share;
+
+  GST_OBJECT_FLAG_SET (allocator, GST_ALLOCATOR_FLAG_CUSTOM_ALLOC);
+}
+
+/**
+ * gst_fd_allocator_new:
+ *
+ * Return a new fd allocator.
+ *
+ * Returns: (transfer full): a new fd allocator, or NULL if the allocator
+ *    isn't available. Use gst_object_unref() to release the allocator after
+ *    usage
+ *
+ * Since: 1.6
+ */
+GstAllocator *
+gst_fd_allocator_new (void)
+{
+  return g_object_new (GST_TYPE_FD_ALLOCATOR, NULL);
+}
+
+/**
+ * gst_fd_allocator_alloc:
+ * @allocator: (allow-none): allocator to be used for this memory
+ * @fd: file descriptor
+ * @size: memory size
+ * @flags: extra #GstFdMemoryFlags
+ *
+ * Return a %GstMemory that wraps a generic file descriptor.
+ *
+ * Returns: (transfer full): a GstMemory based on @allocator.
+ * When the buffer will be released the allocator will close the @fd.
+ * The memory is only mmapped on gst_buffer_mmap() request.
+ *
+ * Since: 1.6
+ */
+GstMemory *
+gst_fd_allocator_alloc (GstAllocator * allocator, gint fd, gsize size,
+    GstFdMemoryFlags flags)
+{
+#ifdef HAVE_MMAP
+  GstFdMemory *mem;
+
+  g_return_val_if_fail (GST_IS_FD_ALLOCATOR (allocator), NULL);
+
+  mem = g_slice_new0 (GstFdMemory);
+  gst_memory_init (GST_MEMORY_CAST (mem), 0, GST_ALLOCATOR_CAST (allocator),
+      NULL, size, 0, 0, size);
+
+  mem->flags = flags;
+  mem->fd = fd;
+  g_mutex_init (&mem->lock);
+
+  GST_DEBUG ("%p: fd: %d size %" G_GSIZE_FORMAT, mem, mem->fd,
+      mem->mem.maxsize);
+
+  return (GstMemory *) mem;
+#else /* !HAVE_MMAP */
+  return NULL;
+#endif
+}
+
+/**
+ * gst_is_fd_memory:
+ * @mem: #GstMemory
+ *
+ * Check if @mem is memory backed by an fd
+ *
+ * Returns: %TRUE when @mem has an fd that can be retrieved with
+ * gst_fd_memory_get_fd().
+ *
+ * Since: 1.6
+ */
+gboolean
+gst_is_fd_memory (GstMemory * mem)
+{
+  g_return_val_if_fail (mem != NULL, FALSE);
+
+  return GST_IS_FD_ALLOCATOR (mem->allocator);
+}
+
+/**
+ * gst_fd_memory_get_fd:
+ * @mem: #GstMemory
+ *
+ * Get the fd from @mem. Call gst_is_fd_memory() to check if @mem has
+ * an fd.
+ *
+ * Returns: the fd of @mem or -1 when there is no fd on @mem
+ *
+ * Since: 1.6
+ */
+gint
+gst_fd_memory_get_fd (GstMemory * mem)
+{
+  g_return_val_if_fail (mem != NULL, -1);
+  g_return_val_if_fail (GST_IS_FD_ALLOCATOR (mem->allocator), -1);
+
+  return ((GstFdMemory *) mem)->fd;
+}
diff --git a/gst-libs/gst/allocators/gstfdmemory.h b/gst-libs/gst/allocators/gstfdmemory.h
new file mode 100644
index 0000000..e2da2d7
--- /dev/null
+++ b/gst-libs/gst/allocators/gstfdmemory.h
@@ -0,0 +1,87 @@
+/* GStreamer fd memory
+ * Copyright (C) 2013 Linaro SA
+ * Author: Benjamin Gaignard <benjamin.gaignard@linaro.org> for Linaro.
+ *
+ * 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_FD_ALLOCATOR_H__
+#define __GST_FD_ALLOCATOR_H__
+
+#include <gst/gst.h>
+
+G_BEGIN_DECLS
+
+typedef struct _GstFdAllocator GstFdAllocator;
+typedef struct _GstFdAllocatorClass GstFdAllocatorClass;
+
+#define GST_ALLOCATOR_FD "fd"
+
+#define GST_TYPE_FD_ALLOCATOR              (gst_fd_allocator_get_type())
+#define GST_IS_FD_ALLOCATOR(obj)           (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GST_TYPE_FD_ALLOCATOR))
+#define GST_IS_FD_ALLOCATOR_CLASS(klass)   (G_TYPE_CHECK_CLASS_TYPE ((klass), GST_TYPE_FD_ALLOCATOR))
+#define GST_FD_ALLOCATOR_GET_CLASS(obj)    (G_TYPE_INSTANCE_GET_CLASS ((obj), GST_TYPE_FD_ALLOCATOR, GstFdAllocatorClass))
+#define GST_FD_ALLOCATOR(obj)              (G_TYPE_CHECK_INSTANCE_CAST ((obj), GST_TYPE_FD_ALLOCATOR, GstFdAllocator))
+#define GST_FD_ALLOCATOR_CLASS(klass)      (G_TYPE_CHECK_CLASS_CAST ((klass), GST_TYPE_FD_ALLOCATOR, GstFdAllocatorClass))
+#define GST_FD_ALLOCATOR_CAST(obj)         ((GstFdAllocator *)(obj))
+
+/**
+ * GstFdMemoryFlags:
+ * @GST_FD_MEMORY_FLAG_NONE: no flag
+ * @GST_FD_MEMORY_FLAG_KEEP_MAPPED: once the memory is mapped,
+ *        keep it mapped until the memory is destroyed.
+ * @GST_FD_MEMORY_FLAG_MAP_PRIVATE: do a private mapping instead of
+ *        the default shared mapping.
+ *
+ * Various flags to control the operation of the fd backed memory.
+ *
+ * Since: 1.6
+ */
+typedef enum {
+  GST_FD_MEMORY_FLAG_NONE = 0,
+  GST_FD_MEMORY_FLAG_KEEP_MAPPED = (1 << 0),
+  GST_FD_MEMORY_FLAG_MAP_PRIVATE = (1 << 1),
+} GstFdMemoryFlags;
+
+/**
+ * GstFdAllocator:
+ *
+ * Base class for allocators with fd-backed memory
+ *
+ * Since: 1.6
+ */
+struct _GstFdAllocator
+{
+  GstAllocator parent;
+};
+
+struct _GstFdAllocatorClass
+{
+  GstAllocatorClass parent_class;
+};
+
+GType gst_fd_allocator_get_type (void);
+
+GstAllocator *  gst_fd_allocator_new    (void);
+GstMemory *     gst_fd_allocator_alloc  (GstAllocator * allocator, gint fd,
+                                         gsize size, GstFdMemoryFlags flags);
+
+gboolean        gst_is_fd_memory        (GstMemory *mem);
+gint            gst_fd_memory_get_fd    (GstMemory *mem);
+
+G_END_DECLS
+
+#endif /* __GST_FD_ALLOCATOR_H__ */
diff --git a/gst-libs/gst/app/Makefile.am b/gst-libs/gst/app/Makefile.am
index e89057a..8f3bb59 100644
--- a/gst-libs/gst/app/Makefile.am
+++ b/gst-libs/gst/app/Makefile.am
@@ -38,7 +38,7 @@
 gir_sources+=$(patsubst %,$(builddir)/%, $(nodist_libgstapp_@GST_API_VERSION@_la_SOURCES))
 
 GstApp-@GST_API_VERSION@.gir: $(INTROSPECTION_SCANNER) libgstapp-@GST_API_VERSION@.la
-	$(AM_V_GEN)PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" \
+	$(AM_V_GEN)PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" GI_SCANNER_DISABLE_CACHE=yes\
 		GST_PLUGIN_SYSTEM_PATH_1_0="" GST_PLUGIN_PATH_1_0="" GST_REGISTRY_UPDATE=no \
 		$(INTROSPECTION_SCANNER) -v --namespace GstApp \
 		--nsversion=@GST_API_VERSION@ \
@@ -56,7 +56,7 @@
 		--pkg gstreamer-@GST_API_VERSION@ \
 		--pkg gstreamer-base-@GST_API_VERSION@ \
 		--pkg-export gstreamer-app-@GST_API_VERSION@ \
-		--add-init-section="gst_init(NULL,NULL);" \
+		--add-init-section="$(INTROSPECTION_INIT)" \
 		--output $@ \
 		$(gir_headers) \
 		$(gir_sources)
@@ -81,18 +81,3 @@
 
 CLEANFILES += $(BUILT_GIRSOURCES) $(typelibs_DATA)
 endif
-
-Android.mk: Makefile.am $(BUILT_SOURCES)
-	androgenizer -:PROJECT libgstapp -:SHARED libgstapp-@GST_API_VERSION@ \
-	 -:TAGS eng debug \
-         -:REL_TOP $(top_srcdir) -:ABS_TOP $(abs_top_srcdir) \
-	 -:SOURCES $(libgstapp_@GST_API_VERSION@_la_SOURCES) \
-	           $(nodist_libgstapp_@GST_API_VERSION@_la_SOURCES) \
-	 -:CFLAGS $(DEFS) $(DEFAULT_INCLUDES) $(libgstapp_@GST_API_VERSION@_la_CFLAGS) \
-	 -:LDFLAGS $(libgstapp_@GST_API_VERSION@_la_LDFLAGS) \
-	           $(libgstapp_@GST_API_VERSION@_la_LIBADD) \
-	           -ldl \
-	 -:HEADER_TARGET gstreamer-@GST_API_VERSION@/gst/app \
-	 -:HEADERS $(libgstapp_@GST_API_VERSION@include_HEADERS) \
-	 -:PASSTHROUGH LOCAL_ARM_MODE:=arm \
-	> $@
diff --git a/gst-libs/gst/app/Makefile.in b/gst-libs/gst/app/Makefile.in
index 9eaaa6a..81a0ee1 100644
--- a/gst-libs/gst/app/Makefile.in
+++ b/gst-libs/gst/app/Makefile.in
@@ -1,7 +1,7 @@
-# Makefile.in generated by automake 1.14.1 from Makefile.am.
+# Makefile.in generated by automake 1.15 from Makefile.am.
 # @configure_input@
 
-# Copyright (C) 1994-2013 Free Software Foundation, Inc.
+# 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,
@@ -25,7 +25,17 @@
 
 
 VPATH = @srcdir@
-am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)'
+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 \
       ?) ;; \
@@ -89,10 +99,6 @@
 build_triplet = @build@
 host_triplet = @host@
 target_triplet = @target@
-DIST_COMMON = $(top_srcdir)/common/gst-glib-gen.mak \
-	$(srcdir)/Makefile.in $(srcdir)/Makefile.am \
-	$(top_srcdir)/depcomp \
-	$(libgstapp_@GST_API_VERSION@include_HEADERS)
 @HAVE_INTROSPECTION_TRUE@am__append_1 = $(BUILT_GIRSOURCES) $(typelibs_DATA)
 subdir = gst-libs/gst/app
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
@@ -115,7 +121,6 @@
 	$(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-x11.m4 \
 	$(top_srcdir)/common/m4/gst.m4 \
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
@@ -132,6 +137,9 @@
 	$(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am \
+	$(libgstapp_@GST_API_VERSION@include_HEADERS) \
+	$(am__DIST_COMMON)
 mkinstalldirs = $(install_sh) -d
 CONFIG_HEADER = $(top_builddir)/config.h
 CONFIG_CLEAN_FILES =
@@ -230,6 +238,8 @@
 DATA = $(gir_DATA) $(typelibs_DATA)
 HEADERS = $(libgstapp_@GST_API_VERSION@include_HEADERS)
 am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+am__DIST_COMMON = $(srcdir)/Makefile.in \
+	$(top_srcdir)/common/gst-glib-gen.mak $(top_srcdir)/depcomp
 DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
 ACLOCAL = @ACLOCAL@
 ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@
@@ -290,6 +300,8 @@
 GIO_CFLAGS = @GIO_CFLAGS@
 GIO_LDFLAGS = @GIO_LDFLAGS@
 GIO_LIBS = @GIO_LIBS@
+GIO_UNIX_2_0_CFLAGS = @GIO_UNIX_2_0_CFLAGS@
+GIO_UNIX_2_0_LIBS = @GIO_UNIX_2_0_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
@@ -319,6 +331,8 @@
 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_OPTION_CFLAGS = @GST_OPTION_CFLAGS@
 GST_OPTION_CXXFLAGS = @GST_OPTION_CXXFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
@@ -346,7 +360,6 @@
 GTK_X11_CFLAGS = @GTK_X11_CFLAGS@
 GTK_X11_LIBS = @GTK_X11_LIBS@
 HAVE_CDPARANOIA = @HAVE_CDPARANOIA@
-HAVE_X = @HAVE_X@
 HAVE_XSHM = @HAVE_XSHM@
 HAVE_ZLIB = @HAVE_ZLIB@
 HTML_DIR = @HTML_DIR@
@@ -361,6 +374,7 @@
 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@
@@ -450,13 +464,12 @@
 XGETTEXT = @XGETTEXT@
 XGETTEXT_015 = @XGETTEXT_015@
 XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
-XMKMF = @XMKMF@
+XSHM_CFLAGS = @XSHM_CFLAGS@
 XSHM_LIBS = @XSHM_LIBS@
+XVIDEO_CFLAGS = @XVIDEO_CFLAGS@
 XVIDEO_LIBS = @XVIDEO_LIBS@
 X_CFLAGS = @X_CFLAGS@
-X_EXTRA_LIBS = @X_EXTRA_LIBS@
 X_LIBS = @X_LIBS@
-X_PRE_LIBS = @X_PRE_LIBS@
 ZLIB_CFLAGS = @ZLIB_CFLAGS@
 ZLIB_LIBS = @ZLIB_LIBS@
 abs_builddir = @abs_builddir@
@@ -509,6 +522,7 @@
 psdir = @psdir@
 pyexecdir = @pyexecdir@
 pythondir = @pythondir@
+runstatedir = @runstatedir@
 sbindir = @sbindir@
 sharedstatedir = @sharedstatedir@
 srcdir = @srcdir@
@@ -576,7 +590,6 @@
 	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu gst-libs/gst/app/Makefile'; \
 	$(am__cd) $(top_srcdir) && \
 	  $(AUTOMAKE) --gnu gst-libs/gst/app/Makefile
-.PRECIOUS: Makefile
 Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
 	@case '$?' in \
 	  *config.status*) \
@@ -585,7 +598,7 @@
 	    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:
+$(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
@@ -930,6 +943,8 @@
 	uninstall-libgstapp_@GST_API_VERSION@includeHEADERS \
 	uninstall-typelibsDATA
 
+.PRECIOUS: Makefile
+
 
 # these are all the rules generating the relevant files
 $(glib_gen_basename)-marshal.h: $(glib_gen_basename)-marshal.list
@@ -968,7 +983,7 @@
 	@touch $@
 
 @HAVE_INTROSPECTION_TRUE@GstApp-@GST_API_VERSION@.gir: $(INTROSPECTION_SCANNER) libgstapp-@GST_API_VERSION@.la
-@HAVE_INTROSPECTION_TRUE@	$(AM_V_GEN)PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" \
+@HAVE_INTROSPECTION_TRUE@	$(AM_V_GEN)PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" GI_SCANNER_DISABLE_CACHE=yes\
 @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 GstApp \
 @HAVE_INTROSPECTION_TRUE@		--nsversion=@GST_API_VERSION@ \
@@ -986,7 +1001,7 @@
 @HAVE_INTROSPECTION_TRUE@		--pkg gstreamer-@GST_API_VERSION@ \
 @HAVE_INTROSPECTION_TRUE@		--pkg gstreamer-base-@GST_API_VERSION@ \
 @HAVE_INTROSPECTION_TRUE@		--pkg-export gstreamer-app-@GST_API_VERSION@ \
-@HAVE_INTROSPECTION_TRUE@		--add-init-section="gst_init(NULL,NULL);" \
+@HAVE_INTROSPECTION_TRUE@		--add-init-section="$(INTROSPECTION_INIT)" \
 @HAVE_INTROSPECTION_TRUE@		--output $@ \
 @HAVE_INTROSPECTION_TRUE@		$(gir_headers) \
 @HAVE_INTROSPECTION_TRUE@		$(gir_sources)
@@ -1000,21 +1015,6 @@
 @HAVE_INTROSPECTION_TRUE@		--includedir=`$(PKG_CONFIG) --variable=girdir gstreamer-base-@GST_API_VERSION@` \
 @HAVE_INTROSPECTION_TRUE@		$(INTROSPECTION_COMPILER_OPTS) $< -o $(@F)
 
-Android.mk: Makefile.am $(BUILT_SOURCES)
-	androgenizer -:PROJECT libgstapp -:SHARED libgstapp-@GST_API_VERSION@ \
-	 -:TAGS eng debug \
-         -:REL_TOP $(top_srcdir) -:ABS_TOP $(abs_top_srcdir) \
-	 -:SOURCES $(libgstapp_@GST_API_VERSION@_la_SOURCES) \
-	           $(nodist_libgstapp_@GST_API_VERSION@_la_SOURCES) \
-	 -:CFLAGS $(DEFS) $(DEFAULT_INCLUDES) $(libgstapp_@GST_API_VERSION@_la_CFLAGS) \
-	 -:LDFLAGS $(libgstapp_@GST_API_VERSION@_la_LDFLAGS) \
-	           $(libgstapp_@GST_API_VERSION@_la_LIBADD) \
-	           -ldl \
-	 -:HEADER_TARGET gstreamer-@GST_API_VERSION@/gst/app \
-	 -:HEADERS $(libgstapp_@GST_API_VERSION@include_HEADERS) \
-	 -:PASSTHROUGH LOCAL_ARM_MODE:=arm \
-	> $@
-
 # 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-libs/gst/app/gstappsink.c b/gst-libs/gst/app/gstappsink.c
index f6408d6..9a7fcb4 100644
--- a/gst-libs/gst/app/gstappsink.c
+++ b/gst-libs/gst/app/gstappsink.c
@@ -86,6 +86,7 @@
   GstBuffer *preroll;
   GstCaps *preroll_caps;
   GstCaps *last_caps;
+  GstSegment preroll_segment;
   GstSegment last_segment;
   gboolean flushing;
   gboolean unlock;
@@ -214,7 +215,7 @@
    * @appsink: the appsink element that emitted the signal
    *
    * Signal that the end-of-stream has been reached. This signal is emitted from
-   * the steaming thread.
+   * the streaming thread.
    */
   gst_app_sink_signals[SIGNAL_EOS] =
       g_signal_new ("eos", G_TYPE_FROM_CLASS (klass), G_SIGNAL_RUN_LAST,
@@ -226,7 +227,7 @@
    *
    * Signal that a new preroll sample is available.
    *
-   * This signal is emitted from the steaming thread and only when the
+   * This signal is emitted from the streaming thread and only when the
    * "emit-signals" property is %TRUE.
    *
    * The new preroll sample can be retrieved with the "pull-preroll" action
@@ -247,7 +248,7 @@
    *
    * Signal that a new sample is available.
    *
-   * This signal is emitted from the steaming thread and only when the
+   * This signal is emitted from the streaming thread and only when the
    * "emit-signals" property is %TRUE.
    *
    * The new sample can be retrieved with the "pull-sample" action
@@ -519,6 +520,7 @@
   GST_DEBUG_OBJECT (appsink, "starting");
   priv->flushing = FALSE;
   priv->started = TRUE;
+  gst_segment_init (&priv->preroll_segment, GST_FORMAT_TIME);
   gst_segment_init (&priv->last_segment, GST_FORMAT_TIME);
   g_mutex_unlock (&priv->mutex);
 
@@ -536,8 +538,11 @@
   priv->flushing = TRUE;
   priv->started = FALSE;
   gst_app_sink_flush_unlocked (appsink);
+  gst_buffer_replace (&priv->preroll, NULL);
   gst_caps_replace (&priv->preroll_caps, NULL);
   gst_caps_replace (&priv->last_caps, NULL);
+  gst_segment_init (&priv->preroll_segment, GST_FORMAT_UNDEFINED);
+  gst_segment_init (&priv->last_segment, GST_FORMAT_UNDEFINED);
   g_mutex_unlock (&priv->mutex);
 
   return TRUE;
@@ -552,7 +557,8 @@
   g_mutex_lock (&priv->mutex);
   GST_DEBUG_OBJECT (appsink, "receiving CAPS");
   g_queue_push_tail (priv->queue, gst_event_new_caps (caps));
-  gst_caps_replace (&priv->preroll_caps, caps);
+  if (!priv->preroll)
+    gst_caps_replace (&priv->preroll_caps, caps);
   g_mutex_unlock (&priv->mutex);
 
   return TRUE;
@@ -569,22 +575,40 @@
       g_mutex_lock (&priv->mutex);
       GST_DEBUG_OBJECT (appsink, "receiving SEGMENT");
       g_queue_push_tail (priv->queue, gst_event_ref (event));
+      if (!priv->preroll)
+        gst_event_copy_segment (event, &priv->preroll_segment);
       g_mutex_unlock (&priv->mutex);
       break;
-    case GST_EVENT_EOS:
+    case GST_EVENT_EOS:{
+      gboolean emit = TRUE;
+
       g_mutex_lock (&priv->mutex);
       GST_DEBUG_OBJECT (appsink, "receiving EOS");
       priv->is_eos = TRUE;
       g_cond_signal (&priv->cond);
       g_mutex_unlock (&priv->mutex);
 
-      /* emit EOS now */
-      if (priv->callbacks.eos)
-        priv->callbacks.eos (appsink, priv->user_data);
-      else
-        g_signal_emit (appsink, gst_app_sink_signals[SIGNAL_EOS], 0);
+      g_mutex_lock (&priv->mutex);
+      /* wait until all buffers are consumed or we're flushing.
+       * Otherwise we might signal EOS before all buffers are
+       * consumed, which is a bit confusing for the application
+       */
+      while (priv->num_buffers > 0 && !priv->flushing)
+        g_cond_wait (&priv->cond, &priv->mutex);
+      if (priv->flushing)
+        emit = FALSE;
+      g_mutex_unlock (&priv->mutex);
+
+      if (emit) {
+        /* emit EOS now */
+        if (priv->callbacks.eos)
+          priv->callbacks.eos (appsink, priv->user_data);
+        else
+          g_signal_emit (appsink, gst_app_sink_signals[SIGNAL_EOS], 0);
+      }
 
       break;
+    }
     case GST_EVENT_FLUSH_START:
       /* we don't have to do anything here, the base class will call unlock
        * which will make sure we exit the _render method */
@@ -820,8 +844,8 @@
  *
  * Set the capabilities on the appsink element.  This function takes
  * a copy of the caps structure. After calling this method, the sink will only
- * accept caps that match @caps. If @caps is non-fixed, you must check the caps
- * on the buffers to get the actual used caps.
+ * accept caps that match @caps. If @caps is non-fixed, or incomplete,
+ * you must check the caps on the samples to get the actual used caps.
  */
 void
 gst_app_sink_set_caps (GstAppSink * appsink, const GstCaps * caps)
@@ -1124,7 +1148,7 @@
     g_cond_wait (&priv->cond, &priv->mutex);
   }
   sample =
-      gst_sample_new (priv->preroll, priv->preroll_caps, &priv->last_segment,
+      gst_sample_new (priv->preroll, priv->preroll_caps, &priv->preroll_segment,
       NULL);
   GST_DEBUG_OBJECT (appsink, "we have the preroll sample %p", sample);
   g_mutex_unlock (&priv->mutex);
diff --git a/gst-libs/gst/app/gstappsink.h b/gst-libs/gst/app/gstappsink.h
index e7b91fd..4e84858 100644
--- a/gst-libs/gst/app/gstappsink.h
+++ b/gst-libs/gst/app/gstappsink.h
@@ -42,17 +42,19 @@
 typedef struct _GstAppSinkClass GstAppSinkClass;
 typedef struct _GstAppSinkPrivate GstAppSinkPrivate;
 
+/* FIXME 2.0: Make the instance/class struct private */
+
 /**
  * GstAppSinkCallbacks: (skip)
  * @eos: Called when the end-of-stream has been reached. This callback
- *       is called from the steaming thread.
+ *       is called from the streaming thread.
  * @new_preroll: Called when a new preroll sample is available.
- *       This callback is called from the steaming thread.
+ *       This callback is called from the streaming thread.
  *       The new preroll sample can be retrieved with
  *       gst_app_sink_pull_preroll() either from this callback
  *       or from any other thread.
  * @new_sample: Called when a new sample is available.
- *       This callback is called from the steaming thread.
+ *       This callback is called from the streaming thread.
  *       The new sample can be retrieved with
  *       gst_app_sink_pull_sample() either from this callback
  *       or from any other thread.
diff --git a/gst-libs/gst/app/gstappsrc.c b/gst-libs/gst/app/gstappsrc.c
index aeefdb8..e540cf4 100644
--- a/gst-libs/gst/app/gstappsrc.c
+++ b/gst-libs/gst/app/gstappsrc.c
@@ -24,17 +24,20 @@
  * @see_also: #GstBaseSrc, appsink
  *
  * The appsrc element can be used by applications to insert data into a
- * GStreamer pipeline. Unlike most GStreamer elements, Appsrc provides
+ * GStreamer pipeline. Unlike most GStreamer elements, appsrc provides
  * external API functions.
  *
  * appsrc can be used by linking with the libgstapp library to access the
  * methods directly or by using the appsrc action signals.
  *
- * Before operating appsrc, the caps property must be set to a fixed caps
+ * Before operating appsrc, the caps property must be set to fixed caps
  * describing the format of the data that will be pushed with appsrc. An
  * exception to this is when pushing buffers with unknown caps, in which case no
  * caps should be set. This is typically true of file-like sources that push raw
- * byte buffers.
+ * byte buffers. If you don't want to explicitly set the caps, you can use
+ * gst_app_src_push_sample. This method gets the caps associated with the
+ * sample and sets them on the appsrc replacing any previously set caps (if
+ * different from sample's caps).
  *
  * The main way of handing data to the appsrc element is by calling the
  * gst_app_src_push_buffer() method or by emitting the push-buffer action signal.
@@ -62,16 +65,16 @@
  * These signals allow the application to operate the appsrc in two different
  * ways:
  *
- * The push model, in which the application repeatedly calls the push-buffer method
- * with a new buffer. Optionally, the queue size in the appsrc can be controlled
- * with the enough-data and need-data signals by respectively stopping/starting
- * the push-buffer calls. This is a typical mode of operation for the
- * stream-type "stream" and "seekable". Use this model when implementing various
- * network protocols or hardware devices.
+ * The push mode, in which the application repeatedly calls the push-buffer/push-sample
+ * method with a new buffer/sample. Optionally, the queue size in the appsrc 
+ * can be controlled with the enough-data and need-data signals by respectively 
+ * stopping/starting the push-buffer/push-sample calls. This is a typical 
+ * mode of operation for the stream-type "stream" and "seekable". Use this 
+ * mode when implementing various network protocols or hardware devices.
  *
- * The pull model where the need-data signal triggers the next push-buffer call.
+ * The pull mode, in which the need-data signal triggers the next push-buffer call.
  * This mode is typically used in the "random-access" stream-type. Use this
- * model for file access or other randomly accessable sources. In this mode, a
+ * mode for file access or other randomly accessable sources. In this mode, a
  * buffer of exactly the amount of bytes given by the need-data signal should be
  * pushed into appsrc.
  *
@@ -80,10 +83,10 @@
  * For the stream and seekable modes, setting this property is optional but
  * recommended.
  *
- * When the application is finished pushing data into appsrc, it should call
+ * When the application has finished pushing data into appsrc, it should call
  * gst_app_src_end_of_stream() or emit the end-of-stream action signal. After
  * this call, no more buffers can be pushed into appsrc until a flushing seek
- * happened or the state of the appsrc has gone through READY.
+ * occurs or the state of the appsrc has gone through READY.
  */
 
 #ifdef HAVE_CONFIG_H
@@ -104,14 +107,15 @@
   GMutex mutex;
   GQueue *queue;
 
-  GstCaps *caps;
+  GstCaps *last_caps;
+  GstCaps *current_caps;
+
   gint64 size;
   GstAppStreamType stream_type;
   guint64 max_bytes;
   GstFormat format;
   gboolean block;
   gchar *uri;
-  gboolean new_caps;
 
   gboolean flushing;
   gboolean started;
@@ -143,6 +147,7 @@
   /* actions */
   SIGNAL_PUSH_BUFFER,
   SIGNAL_END_OF_STREAM,
+  SIGNAL_PUSH_SAMPLE,
 
   LAST_SIGNAL
 };
@@ -235,6 +240,8 @@
 
 static GstFlowReturn gst_app_src_push_buffer_action (GstAppSrc * appsrc,
     GstBuffer * buffer);
+static GstFlowReturn gst_app_src_push_sample_action (GstAppSrc * appsrc,
+    GstSample * sample);
 
 static guint gst_app_src_signals[LAST_SIGNAL] = { 0 };
 
@@ -462,6 +469,33 @@
           push_buffer), NULL, NULL, __gst_app_marshal_ENUM__BOXED,
       GST_TYPE_FLOW_RETURN, 1, GST_TYPE_BUFFER);
 
+  /**
+    * GstAppSrc::push-sample:
+    * @appsrc: the appsrc
+    * @sample: a sample from which extract buffer to push
+    *
+    * Extract a buffer from the provided sample and adds the extracted buffer 
+    * to the queue of buffers that the appsrc element will
+    * push to its source pad. This function set the appsrc caps based on the caps
+    * in the sample and reset the caps if they change. 
+    * Only the caps and the buffer of the provided sample are used and not 
+    * for example the segment in the sample. 
+    * This function does not take ownership of the
+    * sample so the sample needs to be unreffed after calling this function.
+    *
+    * When the block property is TRUE, this function can block until free space
+    * becomes available in the queue.
+    * 
+    * Since: 1.6
+    * 
+    */
+  gst_app_src_signals[SIGNAL_PUSH_SAMPLE] =
+      g_signal_new ("push-sample", G_TYPE_FROM_CLASS (klass),
+      G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION, G_STRUCT_OFFSET (GstAppSrcClass,
+          push_sample), NULL, NULL, __gst_app_marshal_ENUM__BOXED,
+      GST_TYPE_FLOW_RETURN, 1, GST_TYPE_SAMPLE);
+
+
    /**
     * GstAppSrc::end-of-stream:
     * @appsrc: the appsrc
@@ -493,10 +527,10 @@
   basesrc_class->do_seek = gst_app_src_do_seek;
   basesrc_class->is_seekable = gst_app_src_is_seekable;
   basesrc_class->get_size = gst_app_src_do_get_size;
-  basesrc_class->get_size = gst_app_src_do_get_size;
   basesrc_class->query = gst_app_src_query;
 
   klass->push_buffer = gst_app_src_push_buffer_action;
+  klass->push_sample = gst_app_src_push_sample_action;
   klass->end_of_stream = gst_app_src_end_of_stream;
 
   g_type_class_add_private (klass, sizeof (GstAppSrcPrivate));
@@ -527,14 +561,28 @@
   gst_base_src_set_live (GST_BASE_SRC (appsrc), DEFAULT_PROP_IS_LIVE);
 }
 
+/* Must be called with priv->mutex */
 static void
-gst_app_src_flush_queued (GstAppSrc * src)
+gst_app_src_flush_queued (GstAppSrc * src, gboolean retain_last_caps)
 {
-  GstBuffer *buf;
+  GstMiniObject *obj;
   GstAppSrcPrivate *priv = src->priv;
+  GstCaps *requeue_caps = NULL;
 
-  while ((buf = g_queue_pop_head (priv->queue)))
-    gst_buffer_unref (buf);
+  while (!g_queue_is_empty (priv->queue)) {
+    obj = g_queue_pop_head (priv->queue);
+    if (obj) {
+      if (GST_IS_CAPS (obj) && retain_last_caps) {
+        gst_caps_replace (&requeue_caps, GST_CAPS_CAST (obj));
+      }
+      gst_mini_object_unref (obj);
+    }
+  }
+
+  if (requeue_caps) {
+    g_queue_push_tail (priv->queue, requeue_caps);
+  }
+
   priv->queued_bytes = 0;
 }
 
@@ -545,9 +593,13 @@
   GstAppSrcPrivate *priv = appsrc->priv;
 
   GST_OBJECT_LOCK (appsrc);
-  if (priv->caps) {
-    gst_caps_unref (priv->caps);
-    priv->caps = NULL;
+  if (priv->current_caps) {
+    gst_caps_unref (priv->current_caps);
+    priv->current_caps = NULL;
+  }
+  if (priv->last_caps) {
+    gst_caps_unref (priv->last_caps);
+    priv->last_caps = NULL;
   }
   if (priv->notify) {
     priv->notify (priv->user_data);
@@ -556,7 +608,10 @@
   priv->notify = NULL;
 
   GST_OBJECT_UNLOCK (appsrc);
-  gst_app_src_flush_queued (appsrc);
+
+  g_mutex_lock (&priv->mutex);
+  gst_app_src_flush_queued (appsrc, FALSE);
+  g_mutex_unlock (&priv->mutex);
 
   G_OBJECT_CLASS (parent_class)->dispose (obj);
 }
@@ -583,7 +638,7 @@
   GstCaps *caps;
 
   GST_OBJECT_LOCK (appsrc);
-  if ((caps = appsrc->priv->caps))
+  if ((caps = appsrc->priv->current_caps))
     gst_caps_ref (caps);
   GST_OBJECT_UNLOCK (appsrc);
 
@@ -716,10 +771,13 @@
 gst_app_src_send_event (GstElement * element, GstEvent * event)
 {
   GstAppSrc *appsrc = GST_APP_SRC_CAST (element);
+  GstAppSrcPrivate *priv = appsrc->priv;
 
   switch (GST_EVENT_TYPE (event)) {
     case GST_EVENT_FLUSH_STOP:
-      gst_app_src_flush_queued (appsrc);
+      g_mutex_lock (&priv->mutex);
+      gst_app_src_flush_queued (appsrc, TRUE);
+      g_mutex_unlock (&priv->mutex);
       break;
     default:
       break;
@@ -767,7 +825,6 @@
 
   g_mutex_lock (&priv->mutex);
   GST_DEBUG_OBJECT (appsrc, "starting");
-  priv->new_caps = FALSE;
   priv->started = TRUE;
   /* set the offset to -1 so that we always do a first seek. This is only used
    * in random-access mode. */
@@ -791,7 +848,7 @@
   priv->is_eos = FALSE;
   priv->flushing = TRUE;
   priv->started = FALSE;
-  gst_app_src_flush_queued (appsrc);
+  gst_app_src_flush_queued (appsrc, TRUE);
   g_cond_broadcast (&priv->cond);
   g_mutex_unlock (&priv->mutex);
 
@@ -844,10 +901,10 @@
 
       /* overwrite with our values when we need to */
       g_mutex_lock (&priv->mutex);
-      if (priv->min_latency != -1)
+      if (priv->min_latency != -1) {
         min = priv->min_latency;
-      if (priv->max_latency != -1)
         max = priv->max_latency;
+      }
       g_mutex_unlock (&priv->mutex);
 
       gst_query_set_latency (query, live, min, max);
@@ -888,13 +945,13 @@
 
   desired_position = segment->position;
 
-  GST_DEBUG_OBJECT (appsrc, "seeking to %" G_GINT64_FORMAT ", format %s",
-      desired_position, gst_format_get_name (segment->format));
-
   /* no need to try to seek in streaming mode */
   if (priv->stream_type == GST_APP_STREAM_TYPE_STREAM)
     return TRUE;
 
+  GST_DEBUG_OBJECT (appsrc, "seeking to %" G_GINT64_FORMAT ", format %s",
+      desired_position, gst_format_get_name (segment->format));
+
   if (priv->callbacks.seek_data)
     res = priv->callbacks.seek_data (appsrc, desired_position, priv->user_data);
   else {
@@ -911,7 +968,9 @@
 
   if (res) {
     GST_DEBUG_OBJECT (appsrc, "flushing queue");
-    gst_app_src_flush_queued (appsrc);
+    g_mutex_lock (&priv->mutex);
+    gst_app_src_flush_queued (appsrc, TRUE);
+    g_mutex_unlock (&priv->mutex);
     priv->is_eos = FALSE;
   } else {
     GST_WARNING_OBJECT (appsrc, "seek failed");
@@ -978,7 +1037,7 @@
   GstCaps *caps;
 
   GST_OBJECT_LOCK (basesrc);
-  caps = priv->caps ? gst_caps_ref (priv->caps) : NULL;
+  caps = priv->current_caps ? gst_caps_ref (priv->current_caps) : NULL;
   GST_OBJECT_UNLOCK (basesrc);
 
   /* Avoid deadlock by unlocking mutex
@@ -1003,7 +1062,6 @@
   gboolean result;
 
   g_mutex_lock (&priv->mutex);
-  priv->new_caps = FALSE;
   result = gst_app_src_do_negotiate (basesrc);
   g_mutex_unlock (&priv->mutex);
   return result;
@@ -1059,10 +1117,25 @@
     /* return data as long as we have some */
     if (!g_queue_is_empty (priv->queue)) {
       guint buf_size;
+      GstMiniObject *obj = g_queue_pop_head (priv->queue);
 
-      if (priv->new_caps) {
-        priv->new_caps = FALSE;
-        gst_app_src_do_negotiate (bsrc);
+      if (!GST_IS_BUFFER (obj)) {
+        GstCaps *next_caps = GST_CAPS (obj);
+        gboolean caps_changed = TRUE;
+
+        if (next_caps && priv->current_caps)
+          caps_changed = !gst_caps_is_equal (next_caps, priv->current_caps);
+        else
+          caps_changed = (next_caps != priv->current_caps);
+
+        gst_caps_replace (&priv->current_caps, next_caps);
+
+        if (next_caps) {
+          gst_caps_unref (next_caps);
+        }
+
+        if (caps_changed)
+          gst_app_src_do_negotiate (bsrc);
 
         /* Lock has released so now may need
          *- flushing
@@ -1070,10 +1143,12 @@
          *- check queue has data */
         if (G_UNLIKELY (priv->flushing))
           goto flushing;
-        /* Contiue checks caps and queue */
+
+        /* Continue checks caps and queue */
         continue;
       }
-      *buf = g_queue_pop_head (priv->queue);
+
+      *buf = GST_BUFFER (obj);
       buf_size = gst_buffer_get_size (*buf);
 
       GST_DEBUG_OBJECT (appsrc, "we have buffer %p of size %u", *buf, buf_size);
@@ -1161,8 +1236,8 @@
 void
 gst_app_src_set_caps (GstAppSrc * appsrc, const GstCaps * caps)
 {
-  GstCaps *old;
   GstAppSrcPrivate *priv;
+  gboolean caps_changed;
 
   g_return_if_fail (GST_IS_APP_SRC (appsrc));
 
@@ -1171,16 +1246,22 @@
   g_mutex_lock (&priv->mutex);
 
   GST_OBJECT_LOCK (appsrc);
-  GST_DEBUG_OBJECT (appsrc, "setting caps to %" GST_PTR_FORMAT, caps);
-  if ((old = priv->caps) != caps) {
-    if (caps)
-      priv->caps = gst_caps_copy (caps);
-    else
-      priv->caps = NULL;
-    if (old)
-      gst_caps_unref (old);
-    priv->new_caps = TRUE;
+  if (caps && priv->last_caps)
+    caps_changed = !gst_caps_is_equal (caps, priv->last_caps);
+  else
+    caps_changed = (caps != priv->last_caps);
+
+  if (caps_changed) {
+    GstCaps *new_caps;
+    new_caps = caps ? gst_caps_copy (caps) : NULL;
+    GST_DEBUG_OBJECT (appsrc, "setting caps to %" GST_PTR_FORMAT, caps);
+    if (priv->queue->tail != NULL && GST_IS_CAPS (priv->queue->tail->data)) {
+      gst_caps_unref (g_queue_pop_tail (priv->queue));
+    }
+    g_queue_push_tail (priv->queue, new_caps);
+    gst_caps_replace (&priv->last_caps, new_caps);
   }
+
   GST_OBJECT_UNLOCK (appsrc);
 
   g_mutex_unlock (&priv->mutex);
@@ -1197,9 +1278,18 @@
 GstCaps *
 gst_app_src_get_caps (GstAppSrc * appsrc)
 {
+
+  GstCaps *caps;
+
   g_return_val_if_fail (GST_IS_APP_SRC (appsrc), NULL);
 
-  return gst_app_src_internal_get_caps (GST_BASE_SRC_CAST (appsrc), NULL);
+  GST_OBJECT_LOCK (appsrc);
+  if ((caps = appsrc->priv->last_caps))
+    gst_caps_ref (caps);
+  GST_OBJECT_UNLOCK (appsrc);
+
+  return caps;
+
 }
 
 /**
@@ -1590,6 +1680,30 @@
   }
 }
 
+static GstFlowReturn
+gst_app_src_push_sample_internal (GstAppSrc * appsrc, GstSample * sample)
+{
+  GstBuffer *buffer;
+  GstCaps *caps;
+
+  g_return_val_if_fail (GST_IS_SAMPLE (sample), GST_FLOW_ERROR);
+
+  caps = gst_sample_get_caps (sample);
+  if (caps != NULL) {
+    gst_app_src_set_caps (appsrc, caps);
+  } else {
+    GST_WARNING_OBJECT (appsrc, "received sample without caps");
+  }
+
+  buffer = gst_sample_get_buffer (sample);
+  if (buffer == NULL) {
+    GST_WARNING_OBJECT (appsrc, "received sample without buffer");
+    return GST_FLOW_OK;
+  }
+
+  return gst_app_src_push_buffer_full (appsrc, buffer, FALSE);
+}
+
 /**
  * gst_app_src_push_buffer:
  * @appsrc: a #GstAppSrc
@@ -1611,6 +1725,33 @@
   return gst_app_src_push_buffer_full (appsrc, buffer, TRUE);
 }
 
+/**
+ * gst_app_src_push_sample:
+ * @appsrc: a #GstAppSrc
+ * @sample: (transfer none): a #GstSample from wich extract buffer to 
+ * push and caps to set
+ *
+ * Extract a buffer from the provided sample and adds it to the queue of 
+ * buffers that the appsrc element will push to its source pad. Any 
+ * previous caps setted on appsrc will be replaced by the caps associated 
+ * with the sample if not equal.
+ *
+ * When the block property is TRUE, this function can block until free
+ * space becomes available in the queue.
+ *
+ * Returns: #GST_FLOW_OK when the buffer was successfuly queued.
+ * #GST_FLOW_FLUSHING when @appsrc is not PAUSED or PLAYING.
+ * #GST_FLOW_EOS when EOS occured.
+ * 
+ * Since: 1.6
+ * 
+ */
+GstFlowReturn
+gst_app_src_push_sample (GstAppSrc * appsrc, GstSample * sample)
+{
+  return gst_app_src_push_sample_internal (appsrc, sample);
+}
+
 /* push a buffer without stealing the ref of the buffer. This is used for the
  * action signal. */
 static GstFlowReturn
@@ -1619,6 +1760,14 @@
   return gst_app_src_push_buffer_full (appsrc, buffer, FALSE);
 }
 
+/* push a sample without stealing the ref. This is used for the
+ * action signal. */
+static GstFlowReturn
+gst_app_src_push_sample_action (GstAppSrc * appsrc, GstSample * sample)
+{
+  return gst_app_src_push_sample_internal (appsrc, sample);
+}
+
 /**
  * gst_app_src_end_of_stream:
  * @appsrc: a #GstAppSrc
diff --git a/gst-libs/gst/app/gstappsrc.h b/gst-libs/gst/app/gstappsrc.h
index d88c823..783b10c 100644
--- a/gst-libs/gst/app/gstappsrc.h
+++ b/gst-libs/gst/app/gstappsrc.h
@@ -42,6 +42,8 @@
 typedef struct _GstAppSrcClass GstAppSrcClass;
 typedef struct _GstAppSrcPrivate GstAppSrcPrivate;
 
+/* FIXME 2.0: Make the instance/class struct private */
+
 /**
  * GstAppSrcCallbacks: (skip)
  * @need_data: Called when the appsrc needs more data. A buffer or EOS should be
@@ -107,9 +109,10 @@
   /* actions */
   GstFlowReturn (*push_buffer)     (GstAppSrc *appsrc, GstBuffer *buffer);
   GstFlowReturn (*end_of_stream)   (GstAppSrc *appsrc);
+  GstFlowReturn (*push_sample)     (GstAppSrc *appsrc, GstSample *sample);
 
   /*< private >*/
-  gpointer     _gst_reserved[GST_PADDING];
+  gpointer     _gst_reserved[GST_PADDING-1];
 };
 
 GType gst_app_src_get_type(void);
@@ -140,6 +143,7 @@
 
 GstFlowReturn    gst_app_src_push_buffer             (GstAppSrc *appsrc, GstBuffer *buffer);
 GstFlowReturn    gst_app_src_end_of_stream           (GstAppSrc *appsrc);
+GstFlowReturn    gst_app_src_push_sample             (GstAppSrc *appsrc, GstSample *sample);
 
 void             gst_app_src_set_callbacks           (GstAppSrc * appsrc,
                                                       GstAppSrcCallbacks *callbacks,
diff --git a/gst-libs/gst/audio/Makefile.am b/gst-libs/gst/audio/Makefile.am
index 0e67b9b..275d222 100644
--- a/gst-libs/gst/audio/Makefile.am
+++ b/gst-libs/gst/audio/Makefile.am
@@ -38,6 +38,7 @@
 	gstaudiometa.c \
 	gstaudiosink.c \
 	gstaudiosrc.c \
+	gstaudioutilsprivate.c \
 	streamvolume.c \
 	gstaudioiec61937.c
 
@@ -66,6 +67,8 @@
 nodist_libgstaudio_@GST_API_VERSION@include_HEADERS = \
 	audio-enumtypes.h
 
+noinst_HEADERS = gstaudioutilsprivate.h
+
 libgstaudio_@GST_API_VERSION@_la_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_BASE_CFLAGS) $(GST_CFLAGS) \
 		$(ORC_CFLAGS)
 libgstaudio_@GST_API_VERSION@_la_LIBADD = \
@@ -84,7 +87,7 @@
 gir_sources+=$(patsubst %,$(builddir)/%, $(built_sources))
 
 GstAudio-@GST_API_VERSION@.gir: $(INTROSPECTION_SCANNER) libgstaudio-@GST_API_VERSION@.la
-	$(AM_V_GEN)PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" \
+	$(AM_V_GEN)PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" GI_SCANNER_DISABLE_CACHE=yes\
 		GST_PLUGIN_SYSTEM_PATH_1_0="" GST_PLUGIN_PATH_1_0="" GST_REGISTRY_UPDATE=no \
 		$(INTROSPECTION_SCANNER) -v --namespace GstAudio \
 		--nsversion=@GST_API_VERSION@ \
@@ -107,7 +110,7 @@
 		--pkg gstreamer-@GST_API_VERSION@ \
 		--pkg gstreamer-base-@GST_API_VERSION@ \
 		--pkg-export gstreamer-audio-@GST_API_VERSION@ \
-		--add-init-section="gst_init(NULL,NULL);" \
+		--add-init-section="$(INTROSPECTION_INIT)" \
 		--output $@ \
 		$(gir_headers) \
 		$(gir_sources)
@@ -133,19 +136,3 @@
 
 CLEANFILES += $(BUILT_GIRSOURCES) $(typelibs_DATA)
 endif
-
-Android.mk: Makefile.am $(BUILT_SOURCES)
-	androgenizer -:PROJECT libgstaudio -:SHARED libgstaudio-@GST_API_VERSION@ \
-	 -:TAGS eng debug \
-         -:REL_TOP $(top_srcdir) -:ABS_TOP $(abs_top_srcdir) \
-	 -:SOURCES $(libgstaudio_@GST_API_VERSION@_la_SOURCES) \
-	           $(nodist_libgstaudio_@GST_API_VERSION@_la_SOURCES) \
-	 -:CFLAGS $(DEFS) $(DEFAULT_INCLUDES) $(libgstaudio_@GST_API_VERSION@_la_CFLAGS) \
-	 -:LDFLAGS $(libgstaudio_@GST_API_VERSION@_la_LDFLAGS) \
-	           $(libgstaudio_@GST_API_VERSION@_la_LIBADD) \
-	           -ldl \
-	 -:HEADER_TARGET gstreamer-@GST_API_VERSION@/gst/tag \
-	 -:HEADERS $(libgstaudio_@GST_API_VERSION@include_HEADERS) \
-	           $(nodist_libgstaudio_@GST_API_VERSION@include_HEADERS) \
-	 -:PASSTHROUGH LOCAL_ARM_MODE:=arm \
-	> $@
diff --git a/gst-libs/gst/audio/Makefile.in b/gst-libs/gst/audio/Makefile.in
index c0adfb2..8da962c 100644
--- a/gst-libs/gst/audio/Makefile.in
+++ b/gst-libs/gst/audio/Makefile.in
@@ -1,7 +1,7 @@
-# Makefile.in generated by automake 1.14.1 from Makefile.am.
+# Makefile.in generated by automake 1.15 from Makefile.am.
 # @configure_input@
 
-# Copyright (C) 1994-2013 Free Software Foundation, Inc.
+# 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,
@@ -47,7 +47,17 @@
 
 
 VPATH = @srcdir@
-am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)'
+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 \
       ?) ;; \
@@ -111,10 +121,6 @@
 build_triplet = @build@
 host_triplet = @host@
 target_triplet = @target@
-DIST_COMMON = $(top_srcdir)/common/orc.mak \
-	$(top_srcdir)/common/gst-glib-gen.mak $(srcdir)/Makefile.in \
-	$(srcdir)/Makefile.am $(top_srcdir)/depcomp \
-	$(libgstaudio_@GST_API_VERSION@include_HEADERS) TODO
 @HAVE_INTROSPECTION_TRUE@am__append_1 = $(BUILT_GIRSOURCES) $(typelibs_DATA)
 subdir = gst-libs/gst/audio
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
@@ -137,7 +143,6 @@
 	$(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-x11.m4 \
 	$(top_srcdir)/common/m4/gst.m4 \
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
@@ -154,6 +159,9 @@
 	$(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am \
+	$(libgstaudio_@GST_API_VERSION@include_HEADERS) \
+	$(noinst_HEADERS) $(am__DIST_COMMON)
 mkinstalldirs = $(install_sh) -d
 CONFIG_HEADER = $(top_builddir)/config.h
 CONFIG_CLEAN_FILES =
@@ -210,6 +218,7 @@
 	libgstaudio_@GST_API_VERSION@_la-gstaudiometa.lo \
 	libgstaudio_@GST_API_VERSION@_la-gstaudiosink.lo \
 	libgstaudio_@GST_API_VERSION@_la-gstaudiosrc.lo \
+	libgstaudio_@GST_API_VERSION@_la-gstaudioutilsprivate.lo \
 	libgstaudio_@GST_API_VERSION@_la-streamvolume.lo \
 	libgstaudio_@GST_API_VERSION@_la-gstaudioiec61937.lo
 am__objects_1 = libgstaudio_@GST_API_VERSION@_la-audio-enumtypes.lo
@@ -272,8 +281,30 @@
   esac
 DATA = $(gir_DATA) $(typelibs_DATA)
 HEADERS = $(libgstaudio_@GST_API_VERSION@include_HEADERS) \
-	$(nodist_libgstaudio_@GST_API_VERSION@include_HEADERS)
+	$(nodist_libgstaudio_@GST_API_VERSION@include_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)/common/gst-glib-gen.mak \
+	$(top_srcdir)/common/orc.mak $(top_srcdir)/depcomp TODO
 DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
 ACLOCAL = @ACLOCAL@
 ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@
@@ -334,6 +365,8 @@
 GIO_CFLAGS = @GIO_CFLAGS@
 GIO_LDFLAGS = @GIO_LDFLAGS@
 GIO_LIBS = @GIO_LIBS@
+GIO_UNIX_2_0_CFLAGS = @GIO_UNIX_2_0_CFLAGS@
+GIO_UNIX_2_0_LIBS = @GIO_UNIX_2_0_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
@@ -363,6 +396,8 @@
 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_OPTION_CFLAGS = @GST_OPTION_CFLAGS@
 GST_OPTION_CXXFLAGS = @GST_OPTION_CXXFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
@@ -390,7 +425,6 @@
 GTK_X11_CFLAGS = @GTK_X11_CFLAGS@
 GTK_X11_LIBS = @GTK_X11_LIBS@
 HAVE_CDPARANOIA = @HAVE_CDPARANOIA@
-HAVE_X = @HAVE_X@
 HAVE_XSHM = @HAVE_XSHM@
 HAVE_ZLIB = @HAVE_ZLIB@
 HTML_DIR = @HTML_DIR@
@@ -405,6 +439,7 @@
 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@
@@ -494,13 +529,12 @@
 XGETTEXT = @XGETTEXT@
 XGETTEXT_015 = @XGETTEXT_015@
 XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
-XMKMF = @XMKMF@
+XSHM_CFLAGS = @XSHM_CFLAGS@
 XSHM_LIBS = @XSHM_LIBS@
+XVIDEO_CFLAGS = @XVIDEO_CFLAGS@
 XVIDEO_LIBS = @XVIDEO_LIBS@
 X_CFLAGS = @X_CFLAGS@
-X_EXTRA_LIBS = @X_EXTRA_LIBS@
 X_LIBS = @X_LIBS@
-X_PRE_LIBS = @X_PRE_LIBS@
 ZLIB_CFLAGS = @ZLIB_CFLAGS@
 ZLIB_LIBS = @ZLIB_LIBS@
 abs_builddir = @abs_builddir@
@@ -553,6 +587,7 @@
 psdir = @psdir@
 pyexecdir = @pyexecdir@
 pythondir = @pythondir@
+runstatedir = @runstatedir@
 sbindir = @sbindir@
 sharedstatedir = @sharedstatedir@
 srcdir = @srcdir@
@@ -610,6 +645,7 @@
 	gstaudiometa.c \
 	gstaudiosink.c \
 	gstaudiosrc.c \
+	gstaudioutilsprivate.c \
 	streamvolume.c \
 	gstaudioiec61937.c
 
@@ -637,6 +673,7 @@
 nodist_libgstaudio_@GST_API_VERSION@include_HEADERS = \
 	audio-enumtypes.h
 
+noinst_HEADERS = gstaudioutilsprivate.h
 libgstaudio_@GST_API_VERSION@_la_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_BASE_CFLAGS) $(GST_CFLAGS) \
 		$(ORC_CFLAGS)
 
@@ -679,7 +716,6 @@
 	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu gst-libs/gst/audio/Makefile'; \
 	$(am__cd) $(top_srcdir) && \
 	  $(AUTOMAKE) --gnu gst-libs/gst/audio/Makefile
-.PRECIOUS: Makefile
 Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
 	@case '$?' in \
 	  *config.status*) \
@@ -688,7 +724,7 @@
 	    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/orc.mak $(top_srcdir)/common/gst-glib-gen.mak:
+$(top_srcdir)/common/orc.mak $(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
@@ -760,6 +796,7 @@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstaudio_@GST_API_VERSION@_la-gstaudioringbuffer.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstaudio_@GST_API_VERSION@_la-gstaudiosink.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstaudio_@GST_API_VERSION@_la-gstaudiosrc.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstaudio_@GST_API_VERSION@_la-gstaudioutilsprivate.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstaudio_@GST_API_VERSION@_la-streamvolume.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstaudio_@GST_API_VERSION@_la-tmp-orc.Plo@am__quote@
 
@@ -892,6 +929,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) $(libgstaudio_@GST_API_VERSION@_la_CFLAGS) $(CFLAGS) -c -o libgstaudio_@GST_API_VERSION@_la-gstaudiosrc.lo `test -f 'gstaudiosrc.c' || echo '$(srcdir)/'`gstaudiosrc.c
 
+libgstaudio_@GST_API_VERSION@_la-gstaudioutilsprivate.lo: gstaudioutilsprivate.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) $(libgstaudio_@GST_API_VERSION@_la_CFLAGS) $(CFLAGS) -MT libgstaudio_@GST_API_VERSION@_la-gstaudioutilsprivate.lo -MD -MP -MF $(DEPDIR)/libgstaudio_@GST_API_VERSION@_la-gstaudioutilsprivate.Tpo -c -o libgstaudio_@GST_API_VERSION@_la-gstaudioutilsprivate.lo `test -f 'gstaudioutilsprivate.c' || echo '$(srcdir)/'`gstaudioutilsprivate.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstaudio_@GST_API_VERSION@_la-gstaudioutilsprivate.Tpo $(DEPDIR)/libgstaudio_@GST_API_VERSION@_la-gstaudioutilsprivate.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='gstaudioutilsprivate.c' object='libgstaudio_@GST_API_VERSION@_la-gstaudioutilsprivate.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) $(libgstaudio_@GST_API_VERSION@_la_CFLAGS) $(CFLAGS) -c -o libgstaudio_@GST_API_VERSION@_la-gstaudioutilsprivate.lo `test -f 'gstaudioutilsprivate.c' || echo '$(srcdir)/'`gstaudioutilsprivate.c
+
 libgstaudio_@GST_API_VERSION@_la-streamvolume.lo: streamvolume.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) $(libgstaudio_@GST_API_VERSION@_la_CFLAGS) $(CFLAGS) -MT libgstaudio_@GST_API_VERSION@_la-streamvolume.lo -MD -MP -MF $(DEPDIR)/libgstaudio_@GST_API_VERSION@_la-streamvolume.Tpo -c -o libgstaudio_@GST_API_VERSION@_la-streamvolume.lo `test -f 'streamvolume.c' || echo '$(srcdir)/'`streamvolume.c
 @am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstaudio_@GST_API_VERSION@_la-streamvolume.Tpo $(DEPDIR)/libgstaudio_@GST_API_VERSION@_la-streamvolume.Plo
@@ -1009,12 +1053,58 @@
 	@list='$(nodist_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:
 
-ctags CTAGS:
+ID: $(am__tagged_files)
+	$(am__define_uniq_tagged_files); mkid -fID $$unique
+tags: tags-am
+TAGS: tags
 
-cscope cscopelist:
+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'`; \
@@ -1098,7 +1188,8 @@
 distclean: distclean-am
 	-rm -rf ./$(DEPDIR)
 	-rm -f Makefile
-distclean-am: clean-am distclean-compile distclean-generic
+distclean-am: clean-am distclean-compile distclean-generic \
+	distclean-tags
 
 dvi: dvi-am
 
@@ -1168,14 +1259,15 @@
 
 .MAKE: all check install install-am install-strip
 
-.PHONY: all all-am check check-am clean clean-generic \
+.PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \
 	clean-libLTLIBRARIES clean-libtool clean-local cscopelist-am \
-	ctags-am dist-hook 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-girDATA install-html install-html-am \
-	install-info install-info-am install-libLTLIBRARIES \
+	ctags ctags-am dist-hook 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-girDATA install-html \
+	install-html-am install-info install-info-am \
+	install-libLTLIBRARIES \
 	install-libgstaudio_@GST_API_VERSION@includeHEADERS \
 	install-man \
 	install-nodist_libgstaudio_@GST_API_VERSION@includeHEADERS \
@@ -1184,12 +1276,14 @@
 	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-girDATA \
+	tags tags-am uninstall uninstall-am uninstall-girDATA \
 	uninstall-libLTLIBRARIES \
 	uninstall-libgstaudio_@GST_API_VERSION@includeHEADERS \
 	uninstall-nodist_libgstaudio_@GST_API_VERSION@includeHEADERS \
 	uninstall-typelibsDATA
 
+.PRECIOUS: Makefile
+
 
 orc-update: tmp-orc.c $(ORC_SOURCE).h
 	$(top_srcdir)/common/gst-indent tmp-orc.c
@@ -1264,7 +1358,7 @@
 	@touch $@
 
 @HAVE_INTROSPECTION_TRUE@GstAudio-@GST_API_VERSION@.gir: $(INTROSPECTION_SCANNER) libgstaudio-@GST_API_VERSION@.la
-@HAVE_INTROSPECTION_TRUE@	$(AM_V_GEN)PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" \
+@HAVE_INTROSPECTION_TRUE@	$(AM_V_GEN)PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" GI_SCANNER_DISABLE_CACHE=yes\
 @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 GstAudio \
 @HAVE_INTROSPECTION_TRUE@		--nsversion=@GST_API_VERSION@ \
@@ -1287,7 +1381,7 @@
 @HAVE_INTROSPECTION_TRUE@		--pkg gstreamer-@GST_API_VERSION@ \
 @HAVE_INTROSPECTION_TRUE@		--pkg gstreamer-base-@GST_API_VERSION@ \
 @HAVE_INTROSPECTION_TRUE@		--pkg-export gstreamer-audio-@GST_API_VERSION@ \
-@HAVE_INTROSPECTION_TRUE@		--add-init-section="gst_init(NULL,NULL);" \
+@HAVE_INTROSPECTION_TRUE@		--add-init-section="$(INTROSPECTION_INIT)" \
 @HAVE_INTROSPECTION_TRUE@		--output $@ \
 @HAVE_INTROSPECTION_TRUE@		$(gir_headers) \
 @HAVE_INTROSPECTION_TRUE@		$(gir_sources)
@@ -1302,22 +1396,6 @@
 @HAVE_INTROSPECTION_TRUE@		--includedir=`PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" $(PKG_CONFIG) --variable=girdir gstreamer-@GST_API_VERSION@` \
 @HAVE_INTROSPECTION_TRUE@		$(INTROSPECTION_COMPILER_OPTS) $< -o $(@F)
 
-Android.mk: Makefile.am $(BUILT_SOURCES)
-	androgenizer -:PROJECT libgstaudio -:SHARED libgstaudio-@GST_API_VERSION@ \
-	 -:TAGS eng debug \
-         -:REL_TOP $(top_srcdir) -:ABS_TOP $(abs_top_srcdir) \
-	 -:SOURCES $(libgstaudio_@GST_API_VERSION@_la_SOURCES) \
-	           $(nodist_libgstaudio_@GST_API_VERSION@_la_SOURCES) \
-	 -:CFLAGS $(DEFS) $(DEFAULT_INCLUDES) $(libgstaudio_@GST_API_VERSION@_la_CFLAGS) \
-	 -:LDFLAGS $(libgstaudio_@GST_API_VERSION@_la_LDFLAGS) \
-	           $(libgstaudio_@GST_API_VERSION@_la_LIBADD) \
-	           -ldl \
-	 -:HEADER_TARGET gstreamer-@GST_API_VERSION@/gst/tag \
-	 -:HEADERS $(libgstaudio_@GST_API_VERSION@include_HEADERS) \
-	           $(nodist_libgstaudio_@GST_API_VERSION@include_HEADERS) \
-	 -:PASSTHROUGH LOCAL_ARM_MODE:=arm \
-	> $@
-
 # 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-libs/gst/audio/audio-channels.c b/gst-libs/gst/audio/audio-channels.c
index e5d2a55..515eb94 100644
--- a/gst-libs/gst/audio/audio-channels.c
+++ b/gst-libs/gst/audio/audio-channels.c
@@ -301,6 +301,8 @@
  * (which should have at least @channels entries ensured by caller).
  * If @channel_mask is set to 0, it is considered as 'not present' for purpose
  * of conversion.
+ * A partially valid @channel_mask with less bits set than the number
+ * of channels is considered valid.
  *
  * Returns: %TRUE if channel and channel mask are valid and could be converted
  */
@@ -331,14 +333,12 @@
       if ((channel_mask & (G_GUINT64_CONSTANT (1) << i))) {
         if (j < channels)
           position[j] = default_channel_order[i];
-        if (default_channel_order[i] == GST_AUDIO_CHANNEL_POSITION_INVALID)
-          goto invalid_channel_mask;
         j++;
       }
     }
-
     if (j != channels)
-      goto invalid_channel_mask;
+      GST_WARNING ("Only partially valid channel mask 0x%016" G_GINT64_MODIFIER
+          "x for %d channels", channel_mask, channels);
   }
 
   return TRUE;
@@ -349,12 +349,6 @@
     GST_ERROR ("no channel-mask property given");
     return FALSE;
   }
-invalid_channel_mask:
-  {
-    GST_ERROR ("Invalid channel mask 0x%016" G_GINT64_MODIFIER
-        "x for %d channels", channel_mask, channels);
-    return FALSE;
-  }
 }
 
 
diff --git a/gst-libs/gst/audio/audio-format.c b/gst-libs/gst/audio/audio-format.c
index 5a06850..783f9e4 100644
--- a/gst-libs/gst/audio/audio-format.c
+++ b/gst-libs/gst/audio/audio-format.c
@@ -225,7 +225,7 @@
 #define SILENT_U20BE     { 0x08, 0x00, 0x00, 0x08, 0x00, 0x00 }
 #define SILENT_U18LE     { 0x00, 0x00, 0x02, 0x00, 0x00, 0x02 }
 #define SILENT_U18BE     { 0x02, 0x00, 0x00, 0x02, 0x00, 0x00 }
-     static GstAudioFormatInfo formats[] = {
+     static const GstAudioFormatInfo formats[] = {
        {GST_AUDIO_FORMAT_UNKNOWN, "UNKNOWN", "Unknown audio", 0, 0, 0, 0},
        {GST_AUDIO_FORMAT_ENCODED, "ENCODED", "Encoded audio",
            GST_AUDIO_FORMAT_FLAG_COMPLEX, 0, 0, 0},
@@ -363,7 +363,7 @@
   gint i, e;
 
   for (i = 0; i < G_N_ELEMENTS (formats); i++) {
-    GstAudioFormatInfo *finfo = &formats[i];
+    const GstAudioFormatInfo *finfo = &formats[i];
 
     /* must be int */
     if (!GST_AUDIO_FORMAT_INFO_IS_INTEGER (finfo))
diff --git a/gst-libs/gst/audio/audio-info.c b/gst-libs/gst/audio/audio-info.c
index 26b96dd..e5f3341 100644
--- a/gst-libs/gst/audio/audio-info.c
+++ b/gst-libs/gst/audio/audio-info.c
@@ -16,12 +16,6 @@
  * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
  * Boston, MA 02110-1301, USA.
  */
-/**
- * SECTION:gstaudio
- * @short_description: Support library for audio elements
- *
- * This library contains some helper functions for audio elements.
- */
 
 #ifdef HAVE_CONFIG_H
 #  include "config.h"
diff --git a/gst-libs/gst/audio/audio-info.h b/gst-libs/gst/audio/audio-info.h
index 384ff83..7e271af 100644
--- a/gst-libs/gst/audio/audio-info.h
+++ b/gst-libs/gst/audio/audio-info.h
@@ -84,7 +84,8 @@
   gpointer _gst_reserved[GST_PADDING];
 };
 
-GType gst_audio_info_get_type        (void);
+#define GST_TYPE_AUDIO_INFO                  (gst_audio_info_get_type ())
+GType gst_audio_info_get_type                (void);
 
 #define GST_AUDIO_INFO_IS_VALID(i)           ((i)->finfo != NULL && (i)->rate > 0 && (i)->channels > 0 && (i)->bpf > 0)
 
diff --git a/gst-libs/gst/audio/gstaudiobasesink.c b/gst-libs/gst/audio/gstaudiobasesink.c
index 4be9988..704801e 100644
--- a/gst-libs/gst/audio/gstaudiobasesink.c
+++ b/gst-libs/gst/audio/gstaudiobasesink.c
@@ -69,6 +69,11 @@
 
   /* number of nanoseconds to wait until creating a discontinuity */
   GstClockTime discont_wait;
+
+  /* custom slaving algorithm callback */
+  GstAudioBaseSinkCustomSlavingCallback custom_slaving_callback;
+  gpointer custom_slaving_cb_data;
+  GDestroyNotify custom_slaving_cb_notify;
 };
 
 /* BaseAudioSink signals and args */
@@ -124,6 +129,8 @@
         "resample"},
     {GST_AUDIO_BASE_SINK_SLAVE_SKEW, "GST_AUDIO_BASE_SINK_SLAVE_SKEW", "skew"},
     {GST_AUDIO_BASE_SINK_SLAVE_NONE, "GST_AUDIO_BASE_SINK_SLAVE_NONE", "none"},
+    {GST_AUDIO_BASE_SINK_SLAVE_CUSTOM, "GST_AUDIO_BASE_SINK_SLAVE_CUSTOM",
+        "custom"},
     {0, NULL, NULL},
   };
 
@@ -304,6 +311,9 @@
   audiobasesink->priv->drift_tolerance = DEFAULT_DRIFT_TOLERANCE;
   audiobasesink->priv->alignment_threshold = DEFAULT_ALIGNMENT_THRESHOLD;
   audiobasesink->priv->discont_wait = DEFAULT_DISCONT_WAIT;
+  audiobasesink->priv->custom_slaving_callback = NULL;
+  audiobasesink->priv->custom_slaving_cb_data = NULL;
+  audiobasesink->priv->custom_slaving_cb_notify = NULL;
 
   audiobasesink->provided_clock = gst_audio_clock_new ("GstAudioSinkClock",
       (GstAudioClockGetTimeFunc) gst_audio_base_sink_get_time, audiobasesink,
@@ -327,6 +337,9 @@
 
   sink = GST_AUDIO_BASE_SINK (object);
 
+  if (sink->priv->custom_slaving_cb_notify)
+    sink->priv->custom_slaving_cb_notify (sink->priv->custom_slaving_cb_data);
+
   if (sink->provided_clock) {
     gst_audio_clock_invalidate (sink->provided_clock);
     gst_object_unref (sink->provided_clock);
@@ -381,6 +394,14 @@
 }
 
 static gboolean
+gst_audio_base_sink_is_self_provided_clock (GstAudioBaseSink * sink)
+{
+  return (sink->provided_clock && GST_IS_AUDIO_CLOCK (sink->provided_clock) &&
+      GST_AUDIO_CLOCK_CAST (sink->provided_clock)->func ==
+      (GstAudioClockGetTimeFunc) gst_audio_base_sink_get_time);
+}
+
+static gboolean
 gst_audio_base_sink_query_pad (GstBaseSink * bsink, GstQuery * query)
 {
   gboolean res = FALSE;
@@ -464,7 +485,6 @@
            * amount of time. */
           max_latency = (max_l == -1) ? -1 : (base_latency + max_l);
 
-
           GST_DEBUG_OBJECT (basesink,
               "peer min %" GST_TIME_FORMAT ", our min latency: %"
               GST_TIME_FORMAT, GST_TIME_ARGS (min_l),
@@ -737,6 +757,73 @@
 }
 
 /**
+ * gst_audio_base_sink_set_custom_slaving_callback:
+ * @sink: a #GstAudioBaseSink
+ * @callback: a #GstAudioBaseSinkCustomSlavingCallback
+ * @user_data: user data passed to the callback
+ * @notify : called when user_data becomes unused
+ *
+ * Sets the custom slaving callback. This callback will
+ * be invoked if the slave-method property is set to
+ * GST_AUDIO_BASE_SINK_SLAVE_CUSTOM and the audio sink
+ * receives and plays samples.
+ *
+ * Setting the callback to NULL causes the sink to
+ * behave as if the GST_AUDIO_BASE_SINK_SLAVE_NONE
+ * method were used.
+ *
+ * Since: 1.6
+ */
+void
+gst_audio_base_sink_set_custom_slaving_callback (GstAudioBaseSink * sink,
+    GstAudioBaseSinkCustomSlavingCallback callback,
+    gpointer user_data, GDestroyNotify notify)
+{
+  g_return_if_fail (GST_IS_AUDIO_BASE_SINK (sink));
+
+  GST_OBJECT_LOCK (sink);
+  sink->priv->custom_slaving_callback = callback;
+  sink->priv->custom_slaving_cb_data = user_data;
+  sink->priv->custom_slaving_cb_notify = notify;
+  GST_OBJECT_UNLOCK (sink);
+}
+
+static void
+gst_audio_base_sink_custom_cb_report_discont (GstAudioBaseSink * sink,
+    GstAudioBaseSinkDiscontReason discont_reason)
+{
+  if ((sink->priv->custom_slaving_callback != NULL) &&
+      (sink->priv->slave_method == GST_AUDIO_BASE_SINK_SLAVE_CUSTOM)) {
+    sink->priv->custom_slaving_callback (sink, GST_CLOCK_TIME_NONE,
+        GST_CLOCK_TIME_NONE, NULL, discont_reason,
+        sink->priv->custom_slaving_cb_data);
+  }
+}
+
+/**
+ * gst_audio_base_sink_report_device_failure:
+ * @sink: a #GstAudioBaseSink
+ *
+ * Informs this base class that the audio output device has failed for
+ * some reason, causing a discontinuity (for example, because the device
+ * recovered from the error, but lost all contents of its ring buffer).
+ * This function is typically called by derived classes, and is useful
+ * for the custom slave method.
+ *
+ * Since: 1.6
+ */
+void
+gst_audio_base_sink_report_device_failure (GstAudioBaseSink * sink)
+{
+  g_return_if_fail (GST_IS_AUDIO_BASE_SINK (sink));
+
+  GST_OBJECT_LOCK (sink);
+  gst_audio_base_sink_custom_cb_report_discont (sink,
+      GST_AUDIO_BASE_SINK_DISCONT_REASON_DEVICE_FAILURE);
+  GST_OBJECT_UNLOCK (sink);
+}
+
+/**
  * gst_audio_base_sink_get_discont_wait:
  * @sink: a #GstAudioBaseSink
  *
@@ -843,7 +930,7 @@
 {
   GstAudioBaseSink *sink = GST_AUDIO_BASE_SINK (bsink);
   GstAudioRingBufferSpec *spec;
-  GstClockTime now;
+  GstClockTime now, internal_time;
   GstClockTime crate_num, crate_denom;
 
   if (!sink->ringbuffer)
@@ -864,6 +951,7 @@
    * gst_audio_clock_reset() which will use this last_time to create an offset
    * so that time from the clock keeps on increasing monotonically. */
   now = gst_clock_get_time (sink->provided_clock);
+  internal_time = gst_clock_get_internal_time (sink->provided_clock);
 
   GST_DEBUG_OBJECT (sink, "time was %" GST_TIME_FORMAT, GST_TIME_ARGS (now));
 
@@ -887,9 +975,17 @@
   if (!gst_audio_ring_buffer_acquire (sink->ringbuffer, spec))
     goto acquire_error;
 
+  /* If we use our own clock, we need to adjust the offset since it will now
+   * restart from zero */
+  if (gst_audio_base_sink_is_self_provided_clock (sink))
+    gst_audio_clock_reset (GST_AUDIO_CLOCK (sink->provided_clock), 0);
+
   /* We need to resync since the ringbuffer restarted */
   gst_audio_base_sink_reset_sync (sink);
 
+  gst_audio_base_sink_custom_cb_report_discont (sink,
+      GST_AUDIO_BASE_SINK_DISCONT_REASON_NEW_CAPS);
+
   if (bsink->pad_mode == GST_PAD_MODE_PUSH) {
     GST_DEBUG_OBJECT (sink, "activate ringbuffer");
     gst_audio_ring_buffer_activate (sink->ringbuffer, TRUE);
@@ -899,8 +995,7 @@
   gst_clock_get_calibration (sink->provided_clock, NULL, NULL,
       &crate_num, &crate_denom);
   gst_clock_set_calibration (sink->provided_clock,
-      gst_clock_get_internal_time (sink->provided_clock), now, crate_num,
-      crate_denom);
+      internal_time, now, crate_num, crate_denom);
 
   /* calculate actual latency and buffer times.
    * FIXME: In 2.0, store the latency_time internally in ns */
@@ -980,6 +1075,16 @@
   *end = GST_CLOCK_TIME_NONE;
 }
 
+static void
+gst_audio_base_sink_force_start (GstAudioBaseSink * sink)
+{
+  /* Set the eos_rendering flag so sub-classes definitely start the clock.
+   * FIXME 2.0: Pass this as a flag to gst_audio_ring_buffer_start() */
+  g_atomic_int_set (&sink->eos_rendering, 1);
+  gst_audio_ring_buffer_start (sink->ringbuffer);
+  g_atomic_int_set (&sink->eos_rendering, 0);
+}
+
 /* This waits for the drain to happen and can be canceled */
 static gboolean
 gst_audio_base_sink_drain (GstAudioBaseSink * sink)
@@ -1019,55 +1124,35 @@
 {
   GstAudioBaseSink *sink = GST_AUDIO_BASE_SINK (bsink);
   GstFlowReturn ret;
+  gboolean clear_force_start_flag = FALSE;
+
+  /* For both gap and EOS events, make sure the ringbuffer is running
+   * before trying to wait on the event! */
+  switch (GST_EVENT_TYPE (event)) {
+    case GST_EVENT_EOS:
+    case GST_EVENT_GAP:
+      /* We must have a negotiated format before starting the ringbuffer */
+      if (G_UNLIKELY (!gst_audio_ring_buffer_is_acquired (sink->ringbuffer))) {
+        GST_ELEMENT_ERROR (sink, STREAM, FORMAT, (NULL),
+            ("Sink not negotiated before %s event.",
+                GST_EVENT_TYPE_NAME (event)));
+        return GST_FLOW_ERROR;
+      }
+
+      gst_audio_base_sink_force_start (sink);
+      /* Make sure the ringbuffer will start again if interrupted during event_wait() */
+      g_atomic_int_set (&sink->eos_rendering, 1);
+      clear_force_start_flag = TRUE;
+      break;
+    default:
+      break;
+  }
 
   ret = GST_BASE_SINK_CLASS (parent_class)->wait_event (bsink, event);
   if (ret != GST_FLOW_OK)
-    return ret;
+    goto done;
 
   switch (GST_EVENT_TYPE (event)) {
-    case GST_EVENT_GAP:{
-      GstClockTime timestamp, duration;
-      GstAudioRingBufferSpec *spec;
-      GstBuffer *buffer;
-      gint n_samples = 0;
-      GstMapInfo minfo;
-
-      spec = &sink->ringbuffer->spec;
-      if (G_UNLIKELY (spec->info.rate == 0)) {
-        GST_ELEMENT_ERROR (sink, STREAM, FORMAT, (NULL),
-            ("Sink not negotiated before GAP event."));
-        ret = GST_FLOW_ERROR;
-        break;
-      }
-
-      gst_event_parse_gap (event, &timestamp, &duration);
-
-      /* If the GAP event has a duration, handle it like a
-       * silence buffer of that duration. Otherwise at least
-       * start the ringbuffer to make sure the clock is running.
-       */
-      if (duration != GST_CLOCK_TIME_NONE) {
-        n_samples =
-            gst_util_uint64_scale_ceil (duration, spec->info.rate, GST_SECOND);
-        buffer = gst_buffer_new_and_alloc (n_samples * spec->info.bpf);
-
-        if (n_samples != 0) {
-          gst_buffer_map (buffer, &minfo, GST_MAP_WRITE);
-          gst_audio_format_fill_silence (spec->info.finfo, minfo.data,
-              minfo.size);
-          gst_buffer_unmap (buffer, &minfo);
-        }
-        GST_BUFFER_PTS (buffer) = timestamp;
-        GST_BUFFER_DURATION (buffer) = duration;
-        GST_BUFFER_FLAG_SET (buffer, GST_BUFFER_FLAG_GAP);
-
-        ret = gst_audio_base_sink_render (bsink, buffer);
-        gst_buffer_unref (buffer);
-      } else {
-        gst_audio_base_sink_drain (sink);
-      }
-      break;
-    }
     case GST_EVENT_EOS:
       /* now wait till we played everything */
       gst_audio_base_sink_drain (sink);
@@ -1075,6 +1160,10 @@
     default:
       break;
   }
+
+done:
+  if (clear_force_start_flag)
+    g_atomic_int_set (&sink->eos_rendering, 0);
   return ret;
 }
 
@@ -1091,6 +1180,10 @@
     case GST_EVENT_FLUSH_STOP:
       /* always resync on sample after a flush */
       gst_audio_base_sink_reset_sync (sink);
+
+      gst_audio_base_sink_custom_cb_report_discont (sink,
+          GST_AUDIO_BASE_SINK_DISCONT_REASON_FLUSH);
+
       if (sink->ringbuffer)
         gst_audio_ring_buffer_set_flushing (sink->ringbuffer, FALSE);
       break;
@@ -1174,6 +1267,104 @@
   return external;
 }
 
+
+/* apply the clock offset and invoke a custom callback
+ * which might also request changes to the playout pointer
+ *
+ * this reuses code from the skewing algorithm, but leaves
+ * decision on whether or not to skew (and how much to skew)
+ * up to the callback */
+static void
+gst_audio_base_sink_custom_slaving (GstAudioBaseSink * sink,
+    GstClockTime render_start, GstClockTime render_stop,
+    GstClockTime * srender_start, GstClockTime * srender_stop)
+{
+  GstClockTime cinternal, cexternal, crate_num, crate_denom;
+  GstClockTime etime, itime;
+  GstClockTimeDiff requested_skew;
+  gint driftsamples;
+  gint64 last_align;
+
+  /* get calibration parameters to compensate for offsets */
+  gst_clock_get_calibration (sink->provided_clock, &cinternal, &cexternal,
+      &crate_num, &crate_denom);
+
+  /* sample clocks and figure out clock skew */
+  etime = gst_clock_get_time (GST_ELEMENT_CLOCK (sink));
+  itime = gst_audio_clock_get_time (sink->provided_clock);
+  itime = gst_audio_clock_adjust (sink->provided_clock, itime);
+
+  GST_DEBUG_OBJECT (sink,
+      "internal %" GST_TIME_FORMAT " external %" GST_TIME_FORMAT
+      " cinternal %" GST_TIME_FORMAT " cexternal %" GST_TIME_FORMAT,
+      GST_TIME_ARGS (itime), GST_TIME_ARGS (etime),
+      GST_TIME_ARGS (cinternal), GST_TIME_ARGS (cexternal));
+
+  /* make sure we never go below 0 */
+  etime = etime > cexternal ? etime - cexternal : 0;
+  itime = itime > cinternal ? itime - cinternal : 0;
+
+  /* don't do any skewing unless the callback explicitely requests one */
+  requested_skew = 0;
+
+  if (sink->priv->custom_slaving_callback != NULL) {
+    sink->priv->custom_slaving_callback (sink, etime, itime, &requested_skew,
+        FALSE, sink->priv->custom_slaving_cb_data);
+    GST_DEBUG_OBJECT (sink, "custom slaving requested skew %" G_GINT64_FORMAT,
+        requested_skew);
+  } else {
+    GST_DEBUG_OBJECT (sink,
+        "no custom slaving callback set - clock drift will not be compensated");
+  }
+
+  if (requested_skew > 0) {
+    cexternal = (cexternal > requested_skew) ? (cexternal - requested_skew) : 0;
+
+    driftsamples =
+        (sink->ringbuffer->spec.info.rate * requested_skew) / GST_SECOND;
+    last_align = sink->priv->last_align;
+
+    /* if we were aligning in the wrong direction or we aligned more than what we
+     * will correct, resync */
+    if ((last_align < 0) || (last_align > driftsamples))
+      sink->next_sample = -1;
+
+    GST_DEBUG_OBJECT (sink,
+        "last_align %" G_GINT64_FORMAT " driftsamples %u, next %"
+        G_GUINT64_FORMAT, last_align, driftsamples, sink->next_sample);
+
+    gst_clock_set_calibration (sink->provided_clock, cinternal, cexternal,
+        crate_num, crate_denom);
+  } else if (requested_skew < 0) {
+    cexternal += ABS (requested_skew);
+
+    driftsamples =
+        (sink->ringbuffer->spec.info.rate * ABS (requested_skew)) / GST_SECOND;
+    last_align = sink->priv->last_align;
+
+    /* if we were aligning in the wrong direction or we aligned more than what we
+     * will correct, resync */
+    if ((last_align > 0) || (-last_align > driftsamples))
+      sink->next_sample = -1;
+
+    GST_DEBUG_OBJECT (sink,
+        "last_align %" G_GINT64_FORMAT " driftsamples %u, next %"
+        G_GUINT64_FORMAT, last_align, driftsamples, sink->next_sample);
+
+    gst_clock_set_calibration (sink->provided_clock, cinternal, cexternal,
+        crate_num, crate_denom);
+  }
+
+  /* convert, ignoring speed */
+  render_start = clock_convert_external (render_start, cinternal, cexternal,
+      crate_num, crate_denom);
+  render_stop = clock_convert_external (render_stop, cinternal, cexternal,
+      crate_num, crate_denom);
+
+  *srender_start = render_start;
+  *srender_stop = render_stop;
+}
+
 /* algorithm to calculate sample positions that will result in resampling to
  * match the clock rate of the master */
 static void
@@ -1390,6 +1581,10 @@
       gst_audio_base_sink_none_slaving (sink, render_start, render_stop,
           srender_start, srender_stop);
       break;
+    case GST_AUDIO_BASE_SINK_SLAVE_CUSTOM:
+      gst_audio_base_sink_custom_slaving (sink, render_start, render_stop,
+          srender_start, srender_stop);
+      break;
     default:
       g_warning ("unknown slaving method %d", sink->priv->slave_method);
       break;
@@ -1466,10 +1661,8 @@
 
   GST_DEBUG_OBJECT (sink, "latency synced");
 
-  /* Do not acquire the sink object lock before trying to get time on the Sink. 
-   * The get_time call may need to acquire the pulse audio mainloop lock. This can 
-   * cause a deadlock with the Pulse Audio main loop thread which in turn has 
-   * acquired its mainloop lock and now needs to acquire Object lock on the sink. */
+  /* We might need to take the object lock within gst_audio_clock_get_time(),
+   * so call that before we take it again */
   itime = gst_audio_clock_get_time (sink->provided_clock);
   itime = gst_audio_clock_adjust (sink->provided_clock, itime);
 
@@ -1487,7 +1680,7 @@
   }
 
   /* start ringbuffer so we can start slaving right away when we need to */
-  gst_audio_ring_buffer_start (sink->ringbuffer);
+  gst_audio_base_sink_force_start (sink);
 
   GST_DEBUG_OBJECT (sink,
       "internal time: %" GST_TIME_FORMAT " external time: %" GST_TIME_FORMAT,
@@ -1508,12 +1701,16 @@
       break;
     case GST_AUDIO_BASE_SINK_SLAVE_SKEW:
     case GST_AUDIO_BASE_SINK_SLAVE_NONE:
+    case GST_AUDIO_BASE_SINK_SLAVE_CUSTOM:
     default:
       break;
   }
 
   gst_audio_base_sink_reset_sync (sink);
 
+  gst_audio_base_sink_custom_cb_report_discont (sink,
+      GST_AUDIO_BASE_SINK_DISCONT_REASON_SYNC_LATENCY);
+
   return GST_FLOW_OK;
 
   /* ERRORS */
@@ -1604,6 +1801,9 @@
         "%s%" GST_TIME_FORMAT ", resyncing",
         sample_offset > sink->next_sample ? "+" : "-", GST_TIME_ARGS (diff_s));
     align = 0;
+
+    gst_audio_base_sink_custom_cb_report_discont (sink,
+        GST_AUDIO_BASE_SINK_DISCONT_REASON_ALIGNMENT);
   }
 
   return align;
@@ -1612,7 +1812,6 @@
 static GstFlowReturn
 gst_audio_base_sink_render (GstBaseSink * bsink, GstBuffer * buf)
 {
-  guint64 in_offset;
   GstClockTime time, stop, render_start, render_stop, sample_offset;
   GstClockTimeDiff sync_offset, ts_offset;
   GstAudioBaseSinkClass *bclass;
@@ -1681,12 +1880,34 @@
   samples = size / bpf;
   out_samples = samples;
 
-  in_offset = GST_BUFFER_OFFSET (buf);
   time = GST_BUFFER_TIMESTAMP (buf);
 
+  /* Last ditch attempt to ensure that we only play silence if
+   * we are in trickmode no-audio mode (or if a buffer is marked as a GAP)
+   * by dropping the buffer contents and rendering as a gap event instead */
+  if (G_UNLIKELY ((bsink->segment.flags & GST_SEGMENT_FLAG_TRICKMODE_NO_AUDIO)
+          || (buf && GST_BUFFER_FLAG_IS_SET (buf, GST_BUFFER_FLAG_GAP)))) {
+    GstClockTime duration;
+    GstEvent *event;
+    GstBaseSinkClass *bclass;
+    GST_DEBUG_OBJECT (bsink,
+        "Received GAP or ignoring audio for trickplay. Dropping contents");
+
+    duration = gst_util_uint64_scale_int (samples, GST_SECOND, rate);
+    event = gst_event_new_gap (time, duration);
+
+    bclass = GST_BASE_SINK_GET_CLASS (bsink);
+    ret = bclass->wait_event (bsink, event);
+    gst_event_unref (event);
+
+    /* Ensure we'll resync on the next buffer as if discont */
+    sink->next_sample = -1;
+    goto done;
+  }
+
   GST_DEBUG_OBJECT (sink,
-      "time %" GST_TIME_FORMAT ", offset %" G_GUINT64_FORMAT ", start %"
-      GST_TIME_FORMAT ", samples %u", GST_TIME_ARGS (time), in_offset,
+      "time %" GST_TIME_FORMAT ", start %"
+      GST_TIME_FORMAT ", samples %u", GST_TIME_ARGS (time),
       GST_TIME_ARGS (bsink->segment.start), samples);
 
   offset = 0;
@@ -1975,7 +2196,7 @@
           && stop >= bsink->segment.stop)) {
     GST_DEBUG_OBJECT (sink,
         "start playback because we are at the end of segment");
-    gst_audio_ring_buffer_start (ringbuf);
+    gst_audio_base_sink_force_start (sink);
   }
 
   ret = GST_FLOW_OK;
@@ -2189,14 +2410,27 @@
   GstAudioBaseSink *sink = GST_AUDIO_BASE_SINK (element);
 
   switch (transition) {
-    case GST_STATE_CHANGE_NULL_TO_READY:
-      if (sink->ringbuffer == NULL) {
-        gst_audio_clock_reset (GST_AUDIO_CLOCK (sink->provided_clock), 0);
-        sink->ringbuffer = gst_audio_base_sink_create_ringbuffer (sink);
-      }
-      if (!gst_audio_ring_buffer_open_device (sink->ringbuffer))
+    case GST_STATE_CHANGE_NULL_TO_READY:{
+      GstAudioRingBuffer *rb;
+
+      gst_audio_clock_reset (GST_AUDIO_CLOCK (sink->provided_clock), 0);
+      rb = gst_audio_base_sink_create_ringbuffer (sink);
+      if (rb == NULL)
+        goto create_failed;
+
+      GST_OBJECT_LOCK (sink);
+      sink->ringbuffer = rb;
+      GST_OBJECT_UNLOCK (sink);
+
+      if (!gst_audio_ring_buffer_open_device (sink->ringbuffer)) {
+        GST_OBJECT_LOCK (sink);
+        gst_object_unparent (GST_OBJECT_CAST (sink->ringbuffer));
+        sink->ringbuffer = NULL;
+        GST_OBJECT_UNLOCK (sink);
         goto open_failed;
+      }
       break;
+    }
     case GST_STATE_CHANGE_READY_TO_PAUSED:
       gst_audio_base_sink_reset_sync (sink);
       gst_audio_ring_buffer_set_flushing (sink->ringbuffer, FALSE);
@@ -2205,9 +2439,7 @@
       /* Only post clock-provide messages if this is the clock that
        * we've created. If the subclass has overriden it the subclass
        * should post this messages whenever necessary */
-      if (sink->provided_clock && GST_IS_AUDIO_CLOCK (sink->provided_clock) &&
-          GST_AUDIO_CLOCK_CAST (sink->provided_clock)->func ==
-          (GstAudioClockGetTimeFunc) gst_audio_base_sink_get_time)
+      if (gst_audio_base_sink_is_self_provided_clock (sink))
         gst_element_post_message (element,
             gst_message_new_clock_provide (GST_OBJECT_CAST (element),
                 sink->provided_clock, TRUE));
@@ -2245,9 +2477,7 @@
       /* Only post clock-lost messages if this is the clock that
        * we've created. If the subclass has overriden it the subclass
        * should post this messages whenever necessary */
-      if (sink->provided_clock && GST_IS_AUDIO_CLOCK (sink->provided_clock) &&
-          GST_AUDIO_CLOCK_CAST (sink->provided_clock)->func ==
-          (GstAudioClockGetTimeFunc) gst_audio_base_sink_get_time)
+      if (gst_audio_base_sink_is_self_provided_clock (sink))
         gst_element_post_message (element,
             gst_message_new_clock_lost (GST_OBJECT_CAST (element),
                 sink->provided_clock));
@@ -2291,6 +2521,12 @@
   return ret;
 
   /* ERRORS */
+create_failed:
+  {
+    /* subclass must post a meaningful error message */
+    GST_DEBUG_OBJECT (sink, "create failed");
+    return GST_STATE_CHANGE_FAILURE;
+  }
 open_failed:
   {
     /* subclass must post a meaningful error message */
diff --git a/gst-libs/gst/audio/gstaudiobasesink.h b/gst-libs/gst/audio/gstaudiobasesink.h
index c149260..fbb85e9 100644
--- a/gst-libs/gst/audio/gstaudiobasesink.h
+++ b/gst-libs/gst/audio/gstaudiobasesink.h
@@ -59,6 +59,7 @@
 
 #define GST_TYPE_AUDIO_BASE_SINK                (gst_audio_base_sink_get_type())
 #define GST_AUDIO_BASE_SINK(obj)                (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_AUDIO_BASE_SINK,GstAudioBaseSink))
+#define GST_AUDIO_BASE_SINK_CAST(obj)           ((GstAudioBaseSink*)obj)
 #define GST_AUDIO_BASE_SINK_CLASS(klass)        (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_AUDIO_BASE_SINK,GstAudioBaseSinkClass))
 #define GST_AUDIO_BASE_SINK_GET_CLASS(obj)      (G_TYPE_INSTANCE_GET_CLASS ((obj), GST_TYPE_AUDIO_BASE_SINK, GstAudioBaseSinkClass))
 #define GST_IS_AUDIO_BASE_SINK(obj)             (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_AUDIO_BASE_SINK))
@@ -85,6 +86,7 @@
  * @GST_AUDIO_BASE_SINK_SLAVE_SKEW: Adjust playout pointer when master clock
  * drifts too much.
  * @GST_AUDIO_BASE_SINK_SLAVE_NONE: No adjustment is done.
+ * @GST_AUDIO_BASE_SINK_SLAVE_CUSTOM: Use custom clock slaving algorithm (Since: 1.6)
  *
  * Different possible clock slaving algorithms used when the internal audio
  * clock is not selected as the pipeline master clock.
@@ -93,7 +95,8 @@
 {
   GST_AUDIO_BASE_SINK_SLAVE_RESAMPLE,
   GST_AUDIO_BASE_SINK_SLAVE_SKEW,
-  GST_AUDIO_BASE_SINK_SLAVE_NONE
+  GST_AUDIO_BASE_SINK_SLAVE_NONE,
+  GST_AUDIO_BASE_SINK_SLAVE_CUSTOM
 } GstAudioBaseSinkSlaveMethod;
 
 #define GST_TYPE_AUDIO_BASE_SINK_SLAVE_METHOD (gst_audio_base_sink_slave_method_get_type ())
@@ -103,6 +106,67 @@
 typedef struct _GstAudioBaseSinkPrivate GstAudioBaseSinkPrivate;
 
 /**
+ * GstAudioBaseSinkDiscontReason:
+ * @GST_AUDIO_BASE_SINK_DISCONT_REASON_NO_DISCONT: No discontinuity occurred
+ * @GST_AUDIO_BASE_SINK_DISCONT_REASON_NEW_CAPS: New caps are set, causing renegotiotion
+ * @GST_AUDIO_BASE_SINK_DISCONT_REASON_FLUSH: Samples have been flushed
+ * @GST_AUDIO_BASE_SINK_DISCONT_REASON_SYNC_LATENCY: Sink was synchronized to the estimated latency (occurs during initialization)
+ * @GST_AUDIO_BASE_SINK_DISCONT_REASON_ALIGNMENT: Aligning buffers failed because the timestamps are too discontinuous
+ * @GST_AUDIO_BASE_SINK_DISCONT_REASON_DEVICE_FAILURE: Audio output device experienced and recovered from an error but introduced latency in the process (see also @gst_audio_base_sink_report_device_failure())
+ *
+ * Different possible reasons for discontinuities. This enum is useful for the custom
+ * slave method.
+ *
+ * Since: 1.6
+ */
+typedef enum
+{
+  GST_AUDIO_BASE_SINK_DISCONT_REASON_NO_DISCONT,
+  GST_AUDIO_BASE_SINK_DISCONT_REASON_NEW_CAPS,
+  GST_AUDIO_BASE_SINK_DISCONT_REASON_FLUSH,
+  GST_AUDIO_BASE_SINK_DISCONT_REASON_SYNC_LATENCY,
+  GST_AUDIO_BASE_SINK_DISCONT_REASON_ALIGNMENT,
+  GST_AUDIO_BASE_SINK_DISCONT_REASON_DEVICE_FAILURE
+} GstAudioBaseSinkDiscontReason;
+
+/**
+ * GstAudioBaseSinkCustomSlavingCallback:
+ * @sink: a #GstAudioBaseSink
+ * @etime: external clock time
+ * @itime: internal clock time
+ * @requested_skew: skew amount requested by the callback
+ * @discont_reason: reason for discontinuity (if any)
+ * @user_data: user data
+ *
+ * This function is set with gst_audio_base_sink_set_custom_slaving_callback()
+ * and is called during playback. It receives the current time of external and
+ * internal clocks, which the callback can then use to apply any custom
+ * slaving/synchronization schemes.
+ *
+ * The external clock is the sink's element clock, the internal one is the
+ * internal audio clock. The internal audio clock's calibration is applied to
+ * the timestamps before they are passed to the callback. The difference between
+ * etime and itime is the skew; how much internal and external clock lie apart
+ * from each other. A skew of 0 means both clocks are perfectly in sync.
+ * itime > etime means the external clock is going slower, while itime < etime
+ * means it is going faster than the internal clock. etime and itime are always
+ * valid timestamps, except for when a discontinuity happens.
+ *
+ * requested_skew is an output value the callback can write to. It informs the
+ * sink of whether or not it should move the playout pointer, and if so, by how
+ * much. This pointer is only NULL if a discontinuity occurs; otherwise, it is
+ * safe to write to *requested_skew. The default skew is 0.
+ *
+ * The sink may experience discontinuities. If one happens, discont is TRUE,
+ * itime, etime are set to GST_CLOCK_TIME_NONE, and requested_skew is NULL.
+ * This makes it possible to reset custom clock slaving algorithms when a
+ * discontinuity happens.
+ *
+ * Since: 1.6
+ */
+typedef void (*GstAudioBaseSinkCustomSlavingCallback) (GstAudioBaseSink *sink, GstClockTime etime, GstClockTime itime, GstClockTimeDiff *requested_skew, GstAudioBaseSinkDiscontReason discont_reason, gpointer user_data);
+
+/**
  * GstAudioBaseSink:
  *
  * Opaque #GstAudioBaseSink.
@@ -186,6 +250,14 @@
 GstClockTime
            gst_audio_base_sink_get_discont_wait        (GstAudioBaseSink * sink);
 
+void
+gst_audio_base_sink_set_custom_slaving_callback        (GstAudioBaseSink * sink,
+                                                        GstAudioBaseSinkCustomSlavingCallback callback,
+                                                        gpointer user_data,
+                                                        GDestroyNotify notify);
+
+void gst_audio_base_sink_report_device_failure         (GstAudioBaseSink * sink);
+
 G_END_DECLS
 
 #endif /* __GST_AUDIO_BASE_SINK_H__ */
diff --git a/gst-libs/gst/audio/gstaudiobasesrc.c b/gst-libs/gst/audio/gstaudiobasesrc.c
index 38b22b5..b529b76 100644
--- a/gst-libs/gst/audio/gstaudiobasesrc.c
+++ b/gst-libs/gst/audio/gstaudiobasesrc.c
@@ -169,14 +169,17 @@
       g_param_spec_int64 ("buffer-time", "Buffer Time",
           "Size of audio buffer in microseconds. This is the maximum amount "
           "of data that is buffered in the device and the maximum latency that "
-          "the source reports", 1, G_MAXINT64, DEFAULT_BUFFER_TIME,
+          "the source reports. This value might be ignored by the element if "
+          "necessary; see \"actual-buffer-time\"",
+          1, G_MAXINT64, DEFAULT_BUFFER_TIME,
           G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
 
   g_object_class_install_property (gobject_class, PROP_LATENCY_TIME,
       g_param_spec_int64 ("latency-time", "Latency Time",
           "The minimum amount of data to read in each iteration in "
-          "microseconds. This is the minimum latency that the source reports",
-          1, G_MAXINT64, DEFAULT_LATENCY_TIME,
+          "microseconds. This is the minimum latency that the source reports. "
+          "This value might be ignored by the element if necessary; see "
+          "\"actual-latency-time\"", 1, G_MAXINT64, DEFAULT_LATENCY_TIME,
           G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
 
   /**
@@ -1124,17 +1127,28 @@
   GstAudioBaseSrc *src = GST_AUDIO_BASE_SRC (element);
 
   switch (transition) {
-    case GST_STATE_CHANGE_NULL_TO_READY:
+    case GST_STATE_CHANGE_NULL_TO_READY:{
+      GstAudioRingBuffer *rb;
+
       GST_DEBUG_OBJECT (src, "NULL->READY");
+      gst_audio_clock_reset (GST_AUDIO_CLOCK (src->clock), 0);
+      rb = gst_audio_base_src_create_ringbuffer (src);
+      if (rb == NULL)
+        goto create_failed;
+
       GST_OBJECT_LOCK (src);
-      if (src->ringbuffer == NULL) {
-        gst_audio_clock_reset (GST_AUDIO_CLOCK (src->clock), 0);
-        src->ringbuffer = gst_audio_base_src_create_ringbuffer (src);
-      }
+      src->ringbuffer = rb;
       GST_OBJECT_UNLOCK (src);
-      if (!gst_audio_ring_buffer_open_device (src->ringbuffer))
+
+      if (!gst_audio_ring_buffer_open_device (src->ringbuffer)) {
+        GST_OBJECT_LOCK (src);
+        gst_object_unparent (GST_OBJECT_CAST (src->ringbuffer));
+        src->ringbuffer = NULL;
+        GST_OBJECT_UNLOCK (src);
         goto open_failed;
+      }
       break;
+    }
     case GST_STATE_CHANGE_READY_TO_PAUSED:
       GST_DEBUG_OBJECT (src, "READY->PAUSED");
       src->next_sample = -1;
@@ -1197,6 +1211,12 @@
   return ret;
 
   /* ERRORS */
+create_failed:
+  {
+    /* subclass must post a meaningful error message */
+    GST_DEBUG_OBJECT (src, "create failed");
+    return GST_STATE_CHANGE_FAILURE;
+  }
 open_failed:
   {
     /* subclass must post a meaningful error message */
diff --git a/gst-libs/gst/audio/gstaudiobasesrc.h b/gst-libs/gst/audio/gstaudiobasesrc.h
index d723514..0c5323e 100644
--- a/gst-libs/gst/audio/gstaudiobasesrc.h
+++ b/gst-libs/gst/audio/gstaudiobasesrc.h
@@ -37,6 +37,7 @@
 
 #define GST_TYPE_AUDIO_BASE_SRC                 (gst_audio_base_src_get_type())
 #define GST_AUDIO_BASE_SRC(obj)                 (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_AUDIO_BASE_SRC,GstAudioBaseSrc))
+#define GST_AUDIO_BASE_SRC_CAST(obj)            ((GstAudioBaseSrc*)obj)
 #define GST_AUDIO_BASE_SRC_CLASS(klass)         (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_AUDIO_BASE_SRC,GstAudioBaseSrcClass))
 #define GST_AUDIO_BASE_SRC_GET_CLASS(obj)       (G_TYPE_INSTANCE_GET_CLASS ((obj), GST_TYPE_AUDIO_BASE_SRC, GstAudioBaseSrcClass))
 #define GST_IS_AUDIO_BASE_SRC(obj)              (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_AUDIO_BASE_SRC))
diff --git a/gst-libs/gst/audio/gstaudioclock.c b/gst-libs/gst/audio/gstaudioclock.c
index 70f5074..17709fc 100644
--- a/gst-libs/gst/audio/gstaudioclock.c
+++ b/gst-libs/gst/audio/gstaudioclock.c
@@ -40,42 +40,12 @@
 GST_DEBUG_CATEGORY_STATIC (gst_audio_clock_debug);
 #define GST_CAT_DEFAULT gst_audio_clock_debug
 
-static void gst_audio_clock_class_init (GstAudioClockClass * klass);
-static void gst_audio_clock_init (GstAudioClock * clock);
-
 static void gst_audio_clock_dispose (GObject * object);
 
 static GstClockTime gst_audio_clock_get_internal_time (GstClock * clock);
 
-static GstSystemClockClass *parent_class = NULL;
-
-/* static guint gst_audio_clock_signals[LAST_SIGNAL] = { 0 }; */
-
-GType
-gst_audio_clock_get_type (void)
-{
-  static volatile gsize clock_type = 0;
-  static const GTypeInfo clock_info = {
-    sizeof (GstAudioClockClass),
-    NULL,
-    NULL,
-    (GClassInitFunc) gst_audio_clock_class_init,
-    NULL,
-    NULL,
-    sizeof (GstAudioClock),
-    4,
-    (GInstanceInitFunc) gst_audio_clock_init,
-    NULL
-  };
-
-  if (g_once_init_enter (&clock_type)) {
-    GType tmp = g_type_register_static (GST_TYPE_SYSTEM_CLOCK, "GstAudioClock",
-        &clock_info, 0);
-    g_once_init_leave (&clock_type, tmp);
-  }
-
-  return (GType) clock_type;
-}
+#define parent_class gst_audio_clock_parent_class
+G_DEFINE_TYPE (GstAudioClock, gst_audio_clock, GST_TYPE_SYSTEM_CLOCK);
 
 static void
 gst_audio_clock_class_init (GstAudioClockClass * klass)
@@ -86,8 +56,6 @@
   gobject_class = (GObjectClass *) klass;
   gstclock_class = (GstClockClass *) klass;
 
-  parent_class = g_type_class_peek_parent (klass);
-
   gobject_class->dispose = gst_audio_clock_dispose;
   gstclock_class->get_internal_time = gst_audio_clock_get_internal_time;
 
diff --git a/gst-libs/gst/audio/gstaudiodecoder.c b/gst-libs/gst/audio/gstaudiodecoder.c
index fca1abd..f4c663a 100644
--- a/gst-libs/gst/audio/gstaudiodecoder.c
+++ b/gst-libs/gst/audio/gstaudiodecoder.c
@@ -149,6 +149,7 @@
 #endif
 
 #include "gstaudiodecoder.h"
+#include "gstaudioutilsprivate.h"
 #include <gst/pbutils/descriptions.h>
 
 #include <string.h>
@@ -238,8 +239,9 @@
   gboolean drained;
   /* subclass currently being forcibly drained */
   gboolean force;
-  /* need to handle changed input caps */
-  gboolean do_caps;
+  /* input_segment are output_segment identical */
+  gboolean in_out_segment_sync;
+
 
   /* input bps estimatation */
   /* global in bytes seen */
@@ -250,9 +252,15 @@
   guint sync_flush;
   /* error count */
   gint error_count;
-  /* codec id tag */
-  GstTagList *taglist;
-  gboolean taglist_changed;
+
+  /* upstream stream tags (global tags are passed through as-is) */
+  GstTagList *upstream_tags;
+
+  /* subclass tags */
+  GstTagList *taglist;          /* FIXME: rename to decoder_tags */
+  GstTagMergeMode decoder_tags_merge_mode;
+
+  gboolean taglist_changed;     /* FIXME: rename to tags_changed */
 
   /* whether circumstances allow output aggregation */
   gint agg;
@@ -277,6 +285,9 @@
 
   /* pending serialized sink events, will be sent from finish_frame() */
   GList *pending_events;
+
+  /* flags */
+  gboolean use_default_pad_acceptcaps;
 };
 
 //* Default channel layouts taken from audioconvert */
@@ -379,6 +390,15 @@
     dec, GstQuery * query);
 static gboolean gst_audio_decoder_negotiate_default (GstAudioDecoder * dec);
 static gboolean gst_audio_decoder_negotiate_unlocked (GstAudioDecoder * dec);
+static gboolean gst_audio_decoder_handle_gap (GstAudioDecoder * dec,
+    GstEvent * event);
+static gboolean gst_audio_decoder_sink_query_default (GstAudioDecoder * dec,
+    GstQuery * query);
+static gboolean gst_audio_decoder_src_query_default (GstAudioDecoder * dec,
+    GstQuery * query);
+
+static gboolean gst_audio_decoder_transform_meta_default (GstAudioDecoder *
+    decoder, GstBuffer * outbuf, GstMeta * meta, GstBuffer * inbuf);
 
 static GstElementClass *parent_class = NULL;
 
@@ -466,6 +486,12 @@
       GST_DEBUG_FUNCPTR (gst_audio_decoder_decide_allocation_default);
   audiodecoder_class->negotiate =
       GST_DEBUG_FUNCPTR (gst_audio_decoder_negotiate_default);
+  audiodecoder_class->sink_query =
+      GST_DEBUG_FUNCPTR (gst_audio_decoder_sink_query_default);
+  audiodecoder_class->src_query =
+      GST_DEBUG_FUNCPTR (gst_audio_decoder_src_query_default);
+  audiodecoder_class->transform_meta =
+      GST_DEBUG_FUNCPTR (gst_audio_decoder_transform_meta_default);
 }
 
 static void
@@ -519,6 +545,8 @@
   dec->priv->needs_format = DEFAULT_NEEDS_FORMAT;
 
   /* init state */
+  dec->priv->ctx.min_latency = 0;
+  dec->priv->ctx.max_latency = 0;
   gst_audio_decoder_reset (dec, TRUE);
   GST_DEBUG_OBJECT (dec, "init ok");
 }
@@ -542,10 +570,16 @@
       gst_tag_list_unref (dec->priv->taglist);
       dec->priv->taglist = NULL;
     }
+    dec->priv->decoder_tags_merge_mode = GST_TAG_MERGE_KEEP_ALL;
+    if (dec->priv->upstream_tags) {
+      gst_tag_list_unref (dec->priv->upstream_tags);
+      dec->priv->upstream_tags = NULL;
+    }
     dec->priv->taglist_changed = FALSE;
 
     gst_segment_init (&dec->input_segment, GST_FORMAT_TIME);
     gst_segment_init (&dec->output_segment, GST_FORMAT_TIME);
+    dec->priv->in_out_segment_sync = TRUE;
 
     g_list_foreach (dec->priv->pending_events, (GFunc) gst_event_unref, NULL);
     g_list_free (dec->priv->pending_events);
@@ -601,6 +635,32 @@
   G_OBJECT_CLASS (parent_class)->finalize (object);
 }
 
+static GstEvent *
+gst_audio_decoder_create_merged_tags_event (GstAudioDecoder * dec)
+{
+  GstTagList *merged_tags;
+
+  GST_LOG_OBJECT (dec, "upstream : %" GST_PTR_FORMAT, dec->priv->upstream_tags);
+  GST_LOG_OBJECT (dec, "decoder  : %" GST_PTR_FORMAT, dec->priv->taglist);
+  GST_LOG_OBJECT (dec, "mode     : %d", dec->priv->decoder_tags_merge_mode);
+
+  merged_tags =
+      gst_tag_list_merge (dec->priv->upstream_tags,
+      dec->priv->taglist, dec->priv->decoder_tags_merge_mode);
+
+  GST_DEBUG_OBJECT (dec, "merged   : %" GST_PTR_FORMAT, merged_tags);
+
+  if (merged_tags == NULL)
+    return NULL;
+
+  if (gst_tag_list_is_empty (merged_tags)) {
+    gst_tag_list_unref (merged_tags);
+    return NULL;
+  }
+
+  return gst_event_new_tag (merged_tags);
+}
+
 static gboolean
 gst_audio_decoder_push_event (GstAudioDecoder * dec, GstEvent * event)
 {
@@ -614,6 +674,8 @@
       GST_DEBUG_OBJECT (dec, "starting segment %" GST_SEGMENT_FORMAT, &seg);
 
       dec->output_segment = seg;
+      dec->priv->in_out_segment_sync =
+          gst_segment_is_equal (&dec->input_segment, &seg);
       GST_AUDIO_DECODER_STREAM_UNLOCK (dec);
       break;
     }
@@ -927,11 +989,15 @@
       ctx->info.bpf);
   if (G_UNLIKELY (!buf)) {
     GST_DEBUG_OBJECT (dec, "no data after clipping to segment");
-    if (dec->output_segment.rate >= 0) {
-      if (ts >= dec->output_segment.stop)
+    /* only check and return EOS if upstream still
+     * in the same segment and interested as such */
+    if (dec->priv->in_out_segment_sync) {
+      if (dec->output_segment.rate >= 0) {
+        if (ts >= dec->output_segment.stop)
+          ret = GST_FLOW_EOS;
+      } else if (ts < dec->output_segment.start) {
         ret = GST_FLOW_EOS;
-    } else if (ts < dec->output_segment.start) {
-      ret = GST_FLOW_EOS;
+      }
     }
     goto exit;
   }
@@ -1077,6 +1143,39 @@
   g_list_free (pending_events);
 }
 
+/* Iterate the list of pending events, and ensure
+ * the current output segment is up to date for
+ * decoding */
+static void
+apply_pending_events (GstAudioDecoder * dec)
+{
+  GstAudioDecoderPrivate *priv = dec->priv;
+  GList *l;
+
+  GST_DEBUG_OBJECT (dec, "Applying pending segments");
+  for (l = priv->pending_events; l; l = l->next) {
+    GstEvent *event = GST_EVENT (l->data);
+    switch (GST_EVENT_TYPE (event)) {
+      case GST_EVENT_SEGMENT:{
+        GstSegment seg;
+
+        GST_AUDIO_DECODER_STREAM_LOCK (dec);
+        gst_event_copy_segment (event, &seg);
+
+        GST_DEBUG_OBJECT (dec, "starting segment %" GST_SEGMENT_FORMAT, &seg);
+
+        dec->output_segment = seg;
+        dec->priv->in_out_segment_sync =
+            gst_segment_is_equal (&dec->input_segment, &seg);
+        GST_AUDIO_DECODER_STREAM_UNLOCK (dec);
+        break;
+      }
+      default:
+        break;
+    }
+  }
+}
+
 static GstFlowReturn
 check_pending_reconfigure (GstAudioDecoder * dec)
 {
@@ -1101,6 +1200,61 @@
   return ret;
 }
 
+static gboolean
+gst_audio_decoder_transform_meta_default (GstAudioDecoder *
+    decoder, GstBuffer * outbuf, GstMeta * meta, GstBuffer * inbuf)
+{
+  const GstMetaInfo *info = meta->info;
+  const gchar *const *tags;
+
+  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))))
+    return TRUE;
+
+  return FALSE;
+}
+
+typedef struct
+{
+  GstAudioDecoder *decoder;
+  GstBuffer *outbuf;
+} CopyMetaData;
+
+static gboolean
+foreach_metadata (GstBuffer * inbuf, GstMeta ** meta, gpointer user_data)
+{
+  CopyMetaData *data = user_data;
+  GstAudioDecoder *decoder = data->decoder;
+  GstAudioDecoderClass *klass = GST_AUDIO_DECODER_GET_CLASS (decoder);
+  GstBuffer *outbuf = data->outbuf;
+  const GstMetaInfo *info = (*meta)->info;
+  gboolean do_copy = FALSE;
+
+  if (gst_meta_api_type_has_tag (info->api, _gst_meta_tag_memory)) {
+    /* never call the transform_meta with memory specific metadata */
+    GST_DEBUG_OBJECT (decoder, "not copying memory specific metadata %s",
+        g_type_name (info->api));
+    do_copy = FALSE;
+  } else if (klass->transform_meta) {
+    do_copy = klass->transform_meta (decoder, outbuf, *meta, inbuf);
+    GST_DEBUG_OBJECT (decoder, "transformed metadata %s: copy: %d",
+        g_type_name (info->api), do_copy);
+  }
+
+  /* we only copy metadata when the subclass implemented a transform_meta
+   * function and when it returns %TRUE */
+  if (do_copy) {
+    GstMetaTransformCopy copy_data = { FALSE, 0, -1 };
+    GST_DEBUG_OBJECT (decoder, "copy metadata %s", g_type_name (info->api));
+    /* simply copy then */
+    info->transform_func (outbuf, *meta, inbuf,
+        _gst_meta_transform_copy, &copy_data);
+  }
+  return TRUE;
+}
 
 /**
  * gst_audio_decoder_finish_frame:
@@ -1127,10 +1281,12 @@
 {
   GstAudioDecoderPrivate *priv;
   GstAudioDecoderContext *ctx;
+  GstAudioDecoderClass *klass = GST_AUDIO_DECODER_GET_CLASS (dec);
   gint samples = 0;
   GstClockTime ts, next_ts;
   gsize size;
   GstFlowReturn ret = GST_FLOW_OK;
+  GQueue inbufs = G_QUEUE_INIT;
 
   /* subclass should not hand us no data */
   g_return_val_if_fail (buf == NULL || gst_buffer_get_size (buf) > 0,
@@ -1198,7 +1354,7 @@
       GST_TIME_ARGS (ts));
 
   while (priv->frames.length && frames) {
-    gst_buffer_unref (g_queue_pop_head (&priv->frames));
+    g_queue_push_tail (&inbufs, g_queue_pop_head (&priv->frames));
     dec->priv->ctx.delay = dec->priv->frames.length;
     frames--;
   }
@@ -1250,10 +1406,13 @@
 
   /* delayed one-shot stuff until confirmed data */
   if (priv->taglist && priv->taglist_changed) {
-    GST_DEBUG_OBJECT (dec, "codec tag %" GST_PTR_FORMAT, priv->taglist);
-    if (!gst_tag_list_is_empty (priv->taglist))
-      gst_audio_decoder_push_event (dec,
-          gst_event_new_tag (gst_tag_list_ref (priv->taglist)));
+    GstEvent *tags_event;
+
+    tags_event = gst_audio_decoder_create_merged_tags_event (dec);
+
+    if (tags_event != NULL)
+      gst_audio_decoder_push_event (dec, tags_event);
+
     priv->taglist_changed = FALSE;
   }
 
@@ -1270,6 +1429,23 @@
     GST_BUFFER_DURATION (buf) =
         GST_FRAMES_TO_CLOCK_TIME (samples, ctx->info.rate);
   }
+
+  if (klass->transform_meta) {
+    if (inbufs.length) {
+      GList *l;
+      for (l = inbufs.head; l; l = l->next) {
+        CopyMetaData data;
+
+        data.decoder = dec;
+        data.outbuf = buf;
+        gst_buffer_foreach_meta (l->data, foreach_metadata, &data);
+      }
+    } else {
+      GST_WARNING_OBJECT (dec,
+          "Can't copy metadata because input buffers disappeared");
+    }
+  }
+
   priv->samples += samples;
   priv->samples_out += samples;
 
@@ -1280,6 +1456,8 @@
   ret = gst_audio_decoder_output (dec, buf);
 
 exit:
+  g_queue_foreach (&inbufs, (GFunc) gst_buffer_unref, NULL);
+  g_queue_clear (&inbufs);
 
   GST_AUDIO_DECODER_STREAM_UNLOCK (dec);
 
@@ -1301,6 +1479,27 @@
 gst_audio_decoder_handle_frame (GstAudioDecoder * dec,
     GstAudioDecoderClass * klass, GstBuffer * buffer)
 {
+  /* Skip decoding and send a GAP instead if
+   * GST_SEGMENT_FLAG_TRICKMODE_NO_AUDIO is set and we have timestamps
+   * FIXME: We only do this for forward playback atm, because reverse
+   * playback would require accumulating GAP events and pushing them
+   * out in reverse order as for normal audio samples
+   */
+  if (G_UNLIKELY (dec->input_segment.rate > 0.0
+          && dec->input_segment.flags & GST_SEGMENT_FLAG_TRICKMODE_NO_AUDIO)) {
+    if (buffer) {
+      GstClockTime ts = GST_BUFFER_PTS (buffer);
+      if (GST_CLOCK_TIME_IS_VALID (ts)) {
+        GstEvent *event = gst_event_new_gap (ts, GST_BUFFER_DURATION (buffer));
+
+        gst_buffer_unref (buffer);
+        GST_LOG_OBJECT (dec, "Skipping decode in trickmode and sending gap");
+        gst_audio_decoder_handle_gap (dec, event);
+        return GST_FLOW_OK;
+      }
+    }
+  }
+
   if (G_LIKELY (buffer)) {
     gsize size = gst_buffer_get_size (buffer);
     /* keep around for admin */
@@ -1442,29 +1641,40 @@
 
   if (dec->priv->drained && !dec->priv->gather)
     return GST_FLOW_OK;
-  else {
-    /* dispatch reverse pending buffers */
-    /* chain eventually calls upon drain as well, but by that time
-     * gather list should be clear, so ok ... */
-    if (dec->output_segment.rate < 0.0 && dec->priv->gather)
-      gst_audio_decoder_chain_reverse (dec, NULL);
-    /* have subclass give all it can */
-    ret = gst_audio_decoder_push_buffers (dec, TRUE);
-    /* ensure all output sent */
-    ret = gst_audio_decoder_output (dec, NULL);
-    /* everything should be away now */
-    if (dec->priv->frames.length) {
-      /* not fatal/impossible though if subclass/codec eats stuff */
-      GST_WARNING_OBJECT (dec, "still %d frames left after draining",
-          dec->priv->frames.length);
-      g_queue_foreach (&dec->priv->frames, (GFunc) gst_buffer_unref, NULL);
-      g_queue_clear (&dec->priv->frames);
-    }
-    /* discard (unparsed) leftover */
-    gst_adapter_clear (dec->priv->adapter);
 
-    return ret;
+  /* Apply any pending events before draining, as that
+   * may update the pending segment info */
+  apply_pending_events (dec);
+
+  /* dispatch reverse pending buffers */
+  /* chain eventually calls upon drain as well, but by that time
+   * gather list should be clear, so ok ... */
+  if (dec->output_segment.rate < 0.0 && dec->priv->gather)
+    gst_audio_decoder_chain_reverse (dec, NULL);
+  /* have subclass give all it can */
+  ret = gst_audio_decoder_push_buffers (dec, TRUE);
+  if (ret != GST_FLOW_OK) {
+    GST_WARNING_OBJECT (dec, "audio decoder push buffers failed");
+    goto drain_failed;
   }
+  /* ensure all output sent */
+  ret = gst_audio_decoder_output (dec, NULL);
+  if (ret != GST_FLOW_OK)
+    GST_WARNING_OBJECT (dec, "audio decoder output failed");
+
+drain_failed:
+  /* everything should be away now */
+  if (dec->priv->frames.length) {
+    /* not fatal/impossible though if subclass/codec eats stuff */
+    GST_WARNING_OBJECT (dec, "still %d frames left after draining",
+        dec->priv->frames.length);
+    g_queue_foreach (&dec->priv->frames, (GFunc) gst_buffer_unref, NULL);
+    g_queue_clear (&dec->priv->frames);
+  }
+
+  /* discard (unparsed) leftover */
+  gst_adapter_clear (dec->priv->adapter);
+  return ret;
 }
 
 /* hard == FLUSH, otherwise discont */
@@ -1729,21 +1939,6 @@
   return result;
 }
 
-static gboolean
-gst_audio_decoder_do_caps (GstAudioDecoder * dec)
-{
-  GstCaps *caps = gst_pad_get_current_caps (dec->sinkpad);
-  if (caps) {
-    if (!gst_audio_decoder_sink_setcaps (dec, caps)) {
-      gst_caps_unref (caps);
-      return FALSE;
-    }
-    gst_caps_unref (caps);
-  }
-  dec->priv->do_caps = FALSE;
-  return TRUE;
-}
-
 static GstFlowReturn
 gst_audio_decoder_chain (GstPad * pad, GstObject * parent, GstBuffer * buffer)
 {
@@ -1752,12 +1947,6 @@
 
   dec = GST_AUDIO_DECODER (parent);
 
-  if (G_UNLIKELY (dec->priv->do_caps)) {
-    if (!gst_audio_decoder_do_caps (dec)) {
-      goto not_negotiated;
-    }
-  }
-
   if (G_UNLIKELY (!gst_pad_has_current_caps (pad) && dec->priv->needs_format))
     goto not_negotiated;
 
@@ -1833,12 +2022,6 @@
   gint caps_size;
   GstStructure *structure;
 
-  caps = gst_pad_get_current_caps (dec->srcpad);
-  if (caps && !gst_audio_info_from_caps (&dec->priv->ctx.info, caps))
-    goto caps_error;
-  if (caps)
-    gst_caps_unref (caps);
-
   caps = gst_pad_get_allowed_caps (dec->srcpad);
   if (!caps || gst_caps_is_empty (caps) || gst_caps_is_any (caps))
     goto caps_error;
@@ -1907,12 +2090,6 @@
       "Chose default caps %" GST_PTR_FORMAT " for initial gap", caps);
   gst_caps_unref (caps);
 
-  if (!gst_audio_decoder_negotiate_unlocked (dec)) {
-    GST_INFO_OBJECT (dec, "Failed to negotiate default caps for initial gap");
-    gst_pad_mark_reconfigure (dec->srcpad);
-    return FALSE;
-  }
-
   return TRUE;
 
 caps_error:
@@ -1928,23 +2105,26 @@
 {
   gboolean ret;
   GstClockTime timestamp, duration;
-
-  /* Check if there is a caps pending to be pushed */
-  if (G_UNLIKELY (dec->priv->do_caps)) {
-    if (!gst_audio_decoder_do_caps (dec)) {
-      goto not_negotiated;
-    }
-  }
+  gboolean needs_reconfigure = FALSE;
 
   /* Ensure we have caps first */
   GST_AUDIO_DECODER_STREAM_LOCK (dec);
   if (!GST_AUDIO_INFO_IS_VALID (&dec->priv->ctx.info)) {
     if (!gst_audio_decoder_negotiate_default_caps (dec)) {
+      GST_AUDIO_DECODER_STREAM_UNLOCK (dec);
       GST_ELEMENT_ERROR (dec, STREAM, FORMAT, (NULL),
           ("Decoder output not negotiated before GAP event."));
-      GST_AUDIO_DECODER_STREAM_UNLOCK (dec);
       return FALSE;
     }
+    needs_reconfigure = TRUE;
+  }
+  needs_reconfigure = gst_pad_check_reconfigure (dec->srcpad)
+      || needs_reconfigure;
+  if (G_UNLIKELY (dec->priv->ctx.output_format_changed || needs_reconfigure)) {
+    if (!gst_audio_decoder_negotiate_unlocked (dec)) {
+      GST_WARNING_OBJECT (dec, "Failed to negotiate with downstream");
+      gst_pad_mark_reconfigure (dec->srcpad);
+    }
   }
   GST_AUDIO_DECODER_STREAM_UNLOCK (dec);
 
@@ -1984,14 +2164,6 @@
     }
   }
   return ret;
-
-  /* ERRORS */
-not_negotiated:
-  {
-    GST_ELEMENT_ERROR (dec, CORE, NEGOTIATION, (NULL),
-        ("decoder not initialized"));
-    return FALSE;
-  }
 }
 
 static GList *
@@ -2020,15 +2192,18 @@
   switch (GST_EVENT_TYPE (event)) {
     case GST_EVENT_STREAM_START:
       GST_AUDIO_DECODER_STREAM_LOCK (dec);
+      /* finish any data in current segment and clear the decoder
+       * to be ready for new stream data */
       gst_audio_decoder_drain (dec);
+      gst_audio_decoder_flush (dec, FALSE);
 
       GST_DEBUG_OBJECT (dec, "received STREAM_START. Clearing taglist");
-      /* Flush our merged taglist after a STREAM_START */
-      if (dec->priv->taglist) {
-        gst_tag_list_unref (dec->priv->taglist);
-        dec->priv->taglist = NULL;
+      /* Flush upstream tags after a STREAM_START */
+      if (dec->priv->upstream_tags) {
+        gst_tag_list_unref (dec->priv->upstream_tags);
+        dec->priv->upstream_tags = NULL;
+        dec->priv->taglist_changed = TRUE;
       }
-      dec->priv->taglist_changed = FALSE;
       GST_AUDIO_DECODER_STREAM_UNLOCK (dec);
 
       ret = gst_audio_decoder_push_event (dec, event);
@@ -2075,22 +2250,17 @@
         }
       }
 
-      /* finish current segment */
-      gst_audio_decoder_drain (dec);
-
-      {
-        /* prepare for next one */
-        gst_audio_decoder_flush (dec, FALSE);
-        /* and that's where we time from,
-         * in case upstream does not come up with anything better
-         * (e.g. upstream BYTE) */
-        if (format != GST_FORMAT_TIME) {
-          dec->priv->base_ts = seg.start;
-          dec->priv->samples = 0;
-        }
+      /* prepare for next segment */
+      /* Use the segment start as a base timestamp
+       * in case upstream does not come up with anything better
+       * (e.g. upstream BYTE) */
+      if (format != GST_FORMAT_TIME) {
+        dec->priv->base_ts = seg.start;
+        dec->priv->samples = 0;
       }
 
       /* and follow along with segment */
+      dec->priv->in_out_segment_sync = FALSE;
       dec->input_segment = seg;
       dec->priv->pending_events =
           g_list_append (dec->priv->pending_events, event);
@@ -2116,6 +2286,18 @@
       ret = gst_audio_decoder_push_event (dec, event);
       break;
 
+    case GST_EVENT_SEGMENT_DONE:
+      GST_AUDIO_DECODER_STREAM_LOCK (dec);
+      gst_audio_decoder_drain (dec);
+      GST_AUDIO_DECODER_STREAM_UNLOCK (dec);
+
+      /* Forward SEGMENT_DONE because no buffer or serialized event might come after
+       * SEGMENT_DONE and nothing could trigger another _finish_frame() call. */
+      if (dec->priv->pending_events)
+        send_pending_events (dec);
+      ret = gst_audio_decoder_push_event (dec, event);
+      break;
+
     case GST_EVENT_EOS:
       GST_AUDIO_DECODER_STREAM_LOCK (dec);
       gst_audio_decoder_drain (dec);
@@ -2136,8 +2318,10 @@
 
     case GST_EVENT_CAPS:
     {
-      ret = TRUE;
-      dec->priv->do_caps = TRUE;
+      GstCaps *caps;
+
+      gst_event_parse_caps (event, &caps);
+      ret = gst_audio_decoder_sink_setcaps (dec, caps);
       gst_event_unref (event);
       break;
     }
@@ -2148,11 +2332,23 @@
       gst_event_parse_tag (event, &tags);
 
       if (gst_tag_list_get_scope (tags) == GST_TAG_SCOPE_STREAM) {
-        gst_audio_decoder_merge_tags (dec, tags, GST_TAG_MERGE_REPLACE);
+        GST_AUDIO_DECODER_STREAM_LOCK (dec);
+        if (dec->priv->upstream_tags != tags) {
+          if (dec->priv->upstream_tags)
+            gst_tag_list_unref (dec->priv->upstream_tags);
+          dec->priv->upstream_tags = gst_tag_list_ref (tags);
+          GST_INFO_OBJECT (dec, "upstream stream tags: %" GST_PTR_FORMAT, tags);
+        }
         gst_event_unref (event);
-        event = NULL;
-        ret = TRUE;
-        break;
+        event = gst_audio_decoder_create_merged_tags_event (dec);
+        dec->priv->taglist_changed = FALSE;
+        GST_AUDIO_DECODER_STREAM_UNLOCK (dec);
+
+        /* No tags, go out of here instead of fall through */
+        if (!event) {
+          ret = TRUE;
+          break;
+        }
       }
 
       /* fall through */
@@ -2223,7 +2419,7 @@
     return FALSE;
   }
 
-  if (end_type != GST_SEEK_TYPE_NONE ||
+  if ((end_type != GST_SEEK_TYPE_SET && end_type != GST_SEEK_TYPE_NONE) ||
       (end_type == GST_SEEK_TYPE_SET && end_time != GST_CLOCK_TIME_NONE)) {
     GST_DEBUG_OBJECT (dec, "unsupported seek: end time");
     return FALSE;
@@ -2452,14 +2648,52 @@
   return res;
 }
 
-static gboolean
-gst_audio_decoder_sink_query (GstPad * pad, GstObject * parent,
-    GstQuery * query)
+/**
+ * gst_audio_decoder_proxy_getcaps:
+ * @decoder: a #GstAudioDecoder
+ * @caps: (allow-none): initial caps
+ * @filter: (allow-none): filter caps
+ *
+ * Returns caps that express @caps (or sink template caps if @caps == NULL)
+ * restricted to rate/channels/... combinations supported by downstream
+ * elements.
+ *
+ * Returns: (transfer full): a #GstCaps owned by caller
+ *
+ * Since: 1.6
+ */
+GstCaps *
+gst_audio_decoder_proxy_getcaps (GstAudioDecoder * decoder, GstCaps * caps,
+    GstCaps * filter)
 {
-  gboolean res = FALSE;
-  GstAudioDecoder *dec;
+  return __gst_audio_element_proxy_getcaps (GST_ELEMENT_CAST (decoder),
+      GST_AUDIO_DECODER_SINK_PAD (decoder),
+      GST_AUDIO_DECODER_SRC_PAD (decoder), caps, filter);
+}
 
-  dec = GST_AUDIO_DECODER (parent);
+static GstCaps *
+gst_audio_decoder_sink_getcaps (GstAudioDecoder * decoder, GstCaps * filter)
+{
+  GstAudioDecoderClass *klass;
+  GstCaps *caps;
+
+  klass = GST_AUDIO_DECODER_GET_CLASS (decoder);
+
+  if (klass->getcaps)
+    caps = klass->getcaps (decoder, filter);
+  else
+    caps = gst_audio_decoder_proxy_getcaps (decoder, NULL, filter);
+
+  GST_LOG_OBJECT (decoder, "Returning caps %" GST_PTR_FORMAT, caps);
+
+  return caps;
+}
+
+static gboolean
+gst_audio_decoder_sink_query_default (GstAudioDecoder * dec, GstQuery * query)
+{
+  GstPad *pad = GST_AUDIO_DECODER_SINK_PAD (dec);
+  gboolean res = FALSE;
 
   GST_LOG_OBJECT (dec, "handling query: %" GST_PTR_FORMAT, query);
 
@@ -2491,6 +2725,47 @@
         res = klass->propose_allocation (dec, query);
       break;
     }
+    case GST_QUERY_CAPS:{
+      GstCaps *filter, *caps;
+
+      gst_query_parse_caps (query, &filter);
+      caps = gst_audio_decoder_sink_getcaps (dec, filter);
+      gst_query_set_caps_result (query, caps);
+      gst_caps_unref (caps);
+      res = TRUE;
+      break;
+    }
+    case GST_QUERY_ACCEPT_CAPS:{
+      if (dec->priv->use_default_pad_acceptcaps) {
+        res =
+            gst_pad_query_default (GST_AUDIO_DECODER_SINK_PAD (dec),
+            GST_OBJECT_CAST (dec), query);
+      } else {
+        GstCaps *caps;
+        GstCaps *allowed_caps;
+        GstCaps *template_caps;
+        gboolean accept;
+
+        gst_query_parse_accept_caps (query, &caps);
+
+        template_caps = gst_pad_get_pad_template_caps (pad);
+        accept = gst_caps_is_subset (caps, template_caps);
+        gst_caps_unref (template_caps);
+
+        if (accept) {
+          allowed_caps = gst_pad_query_caps (GST_AUDIO_DECODER_SINK_PAD (dec),
+              caps);
+
+          accept = gst_caps_can_intersect (caps, allowed_caps);
+
+          gst_caps_unref (allowed_caps);
+        }
+
+        gst_query_set_accept_caps_result (query, accept);
+        res = TRUE;
+      }
+      break;
+    }
     case GST_QUERY_SEEKING:
     {
       GstFormat format;
@@ -2505,7 +2780,7 @@
       /* fall-through */
     }
     default:
-      res = gst_pad_query_default (pad, parent, query);
+      res = gst_pad_query_default (pad, GST_OBJECT_CAST (dec), query);
       break;
   }
 
@@ -2513,18 +2788,35 @@
   return res;
 }
 
+static gboolean
+gst_audio_decoder_sink_query (GstPad * pad, GstObject * parent,
+    GstQuery * query)
+{
+  GstAudioDecoderClass *dec_class;
+  GstAudioDecoder *dec;
+  gboolean ret = FALSE;
+
+  dec = GST_AUDIO_DECODER (parent);
+  dec_class = GST_AUDIO_DECODER_GET_CLASS (dec);
+
+  GST_DEBUG_OBJECT (pad, "received query %" GST_PTR_FORMAT, query);
+
+  if (dec_class->sink_query)
+    ret = dec_class->sink_query (dec, query);
+
+  return ret;
+}
+
 /* FIXME ? are any of these queries (other than latency) a decoder's business ??
  * also, the conversion stuff might seem to make sense, but seems to not mind
  * segment stuff etc at all
  * Supposedly that's backward compatibility ... */
 static gboolean
-gst_audio_decoder_src_query (GstPad * pad, GstObject * parent, GstQuery * query)
+gst_audio_decoder_src_query_default (GstAudioDecoder * dec, GstQuery * query)
 {
-  GstAudioDecoder *dec;
+  GstPad *pad = GST_AUDIO_DECODER_SRC_PAD (dec);
   gboolean res = FALSE;
 
-  dec = GST_AUDIO_DECODER (parent);
-
   GST_LOG_OBJECT (dec, "handling query: %" GST_PTR_FORMAT, query);
 
   switch (GST_QUERY_TYPE (query)) {
@@ -2533,7 +2825,7 @@
       GstFormat format;
 
       /* upstream in any case */
-      if ((res = gst_pad_query_default (pad, parent, query)))
+      if ((res = gst_pad_query_default (pad, GST_OBJECT_CAST (dec), query)))
         break;
 
       gst_query_parse_duration (query, &format, NULL);
@@ -2618,9 +2910,10 @@
 
         GST_OBJECT_LOCK (dec);
         /* add our latency */
-        if (min_latency != -1)
-          min_latency += dec->priv->ctx.min_latency;
-        if (max_latency != -1)
+        min_latency += dec->priv->ctx.min_latency;
+        if (max_latency == -1 || dec->priv->ctx.max_latency == -1)
+          max_latency = -1;
+        else
           max_latency += dec->priv->ctx.max_latency;
         GST_OBJECT_UNLOCK (dec);
 
@@ -2629,7 +2922,7 @@
       break;
     }
     default:
-      res = gst_pad_query_default (pad, parent, query);
+      res = gst_pad_query_default (pad, GST_OBJECT_CAST (dec), query);
       break;
   }
 
@@ -2637,6 +2930,24 @@
 }
 
 static gboolean
+gst_audio_decoder_src_query (GstPad * pad, GstObject * parent, GstQuery * query)
+{
+  GstAudioDecoder *dec;
+  GstAudioDecoderClass *dec_class;
+  gboolean ret = FALSE;
+
+  dec = GST_AUDIO_DECODER (parent);
+  dec_class = GST_AUDIO_DECODER_GET_CLASS (dec);
+
+  GST_DEBUG_OBJECT (pad, "received query %" GST_PTR_FORMAT, query);
+
+  if (dec_class->src_query)
+    ret = dec_class->src_query (dec, query);
+
+  return ret;
+}
+
+static gboolean
 gst_audio_decoder_stop (GstAudioDecoder * dec)
 {
   GstAudioDecoderClass *klass;
@@ -2956,11 +3267,17 @@
     GstClockTime min, GstClockTime max)
 {
   g_return_if_fail (GST_IS_AUDIO_DECODER (dec));
+  g_return_if_fail (GST_CLOCK_TIME_IS_VALID (min));
+  g_return_if_fail (min <= max);
 
   GST_OBJECT_LOCK (dec);
   dec->priv->ctx.min_latency = min;
   dec->priv->ctx.max_latency = max;
   GST_OBJECT_UNLOCK (dec);
+
+  /* post latency message on the bus */
+  gst_element_post_message (GST_ELEMENT (dec),
+      gst_message_new_latency (GST_OBJECT (dec)));
 }
 
 /**
@@ -3235,36 +3552,39 @@
 /**
  * gst_audio_decoder_merge_tags:
  * @dec: a #GstAudioDecoder
- * @tags: a #GstTagList to merge
- * @mode: the #GstTagMergeMode to use
+ * @tags: (allow-none): a #GstTagList to merge, or NULL
+ * @mode: the #GstTagMergeMode to use, usually #GST_TAG_MERGE_REPLACE
  *
- * Adds tags to so-called pending tags, which will be processed
- * before pushing out data downstream.
+ * Sets the audio decoder tags and how they should be merged with any
+ * upstream stream tags. This will override any tags previously-set
+ * with gst_audio_decoder_merge_tags().
  *
  * Note that this is provided for convenience, and the subclass is
- * not required to use this and can still do tag handling on its own,
- * although it should be aware that baseclass already takes care
- * of the usual CODEC/AUDIO_CODEC tags.
- *
- * MT safe.
+ * not required to use this and can still do tag handling on its own.
  */
 void
 gst_audio_decoder_merge_tags (GstAudioDecoder * dec,
     const GstTagList * tags, GstTagMergeMode mode)
 {
-  GstTagList *otags;
-
   g_return_if_fail (GST_IS_AUDIO_DECODER (dec));
   g_return_if_fail (tags == NULL || GST_IS_TAG_LIST (tags));
+  g_return_if_fail (mode != GST_TAG_MERGE_UNDEFINED);
 
   GST_AUDIO_DECODER_STREAM_LOCK (dec);
-  if (tags)
-    GST_DEBUG_OBJECT (dec, "merging tags %" GST_PTR_FORMAT, tags);
-  otags = dec->priv->taglist;
-  dec->priv->taglist = gst_tag_list_merge (dec->priv->taglist, tags, mode);
-  if (otags)
-    gst_tag_list_unref (otags);
-  dec->priv->taglist_changed = TRUE;
+  if (dec->priv->taglist != tags) {
+    if (dec->priv->taglist) {
+      gst_tag_list_unref (dec->priv->taglist);
+      dec->priv->taglist = NULL;
+      dec->priv->decoder_tags_merge_mode = GST_TAG_MERGE_KEEP_ALL;
+    }
+    if (tags) {
+      dec->priv->taglist = gst_tag_list_ref ((GstTagList *) tags);
+      dec->priv->decoder_tags_merge_mode = mode;
+    }
+
+    GST_DEBUG_OBJECT (dec, "setting decoder tags to %" GST_PTR_FORMAT, tags);
+    dec->priv->taglist_changed = TRUE;
+  }
   GST_AUDIO_DECODER_STREAM_UNLOCK (dec);
 }
 
@@ -3345,3 +3665,24 @@
   if (params)
     *params = dec->priv->ctx.params;
 }
+
+/**
+ * gst_audio_decoder_set_use_default_pad_acceptcaps:
+ * @decoder: a #GstAudioDecoder
+ * @use: if the default pad accept-caps query handling should be used
+ *
+ * Lets #GstAudioDecoder sub-classes decide if they want the sink pad
+ * to use the default pad query handler to reply to accept-caps queries.
+ *
+ * By setting this to true it is possible to further customize the default
+ * handler with %GST_PAD_SET_ACCEPT_INTERSECT and
+ * %GST_PAD_SET_ACCEPT_TEMPLATE
+ *
+ * Since: 1.6
+ */
+void
+gst_audio_decoder_set_use_default_pad_acceptcaps (GstAudioDecoder * decoder,
+    gboolean use)
+{
+  decoder->priv->use_default_pad_acceptcaps = use;
+}
diff --git a/gst-libs/gst/audio/gstaudiodecoder.h b/gst-libs/gst/audio/gstaudiodecoder.h
index 8f97fe8..1c498ee 100644
--- a/gst-libs/gst/audio/gstaudiodecoder.h
+++ b/gst-libs/gst/audio/gstaudiodecoder.h
@@ -231,6 +231,26 @@
  *                      Propose buffer allocation parameters for upstream elements.
  *                      Subclasses should chain up to the parent implementation to
  *                      invoke the default handler.
+ * @sink_query:     Optional.
+ *                  Query handler on the sink pad. This function should
+ *                  return TRUE if the query could be performed. Subclasses
+ *                  should chain up to the parent implementation to invoke the
+ *                  default handler. Since 1.6
+ * @src_query:      Optional.
+ *                  Query handler on the source pad. This function should
+ *                  return TRUE if the query could be performed. Subclasses
+ *                  should chain up to the parent implementation to invoke the
+ *                  default handler. Since 1.6
+ * @getcaps:        Optional.
+ *                  Allows for a custom sink getcaps implementation.
+ *                  If not implemented,
+ *                  default returns gst_audio_decoder_proxy_getcaps
+ *                  applied to sink template caps.
+ * @transform_meta: Optional. Transform the metadata on the input buffer to the
+ *                  output buffer. By default this method copies all meta without
+ *                  tags and meta with only the "audio" tag. subclasses can
+ *                  implement this method and return %TRUE if the metadata is to be
+ *                  copied. Since 1.6
  *
  * Subclasses can override any of the available virtual methods or not, as
  * needed. At minimum @handle_frame (and likely @set_format) needs to be
@@ -278,8 +298,18 @@
   gboolean      (*propose_allocation) (GstAudioDecoder *dec,
                                        GstQuery * query);
 
+  gboolean      (*sink_query)         (GstAudioDecoder *dec, GstQuery *query);
+
+  gboolean      (*src_query)          (GstAudioDecoder *dec, GstQuery *query);
+
+  GstCaps *     (*getcaps)            (GstAudioDecoder * dec,
+                                       GstCaps * filter);
+
+  gboolean      (*transform_meta)     (GstAudioDecoder *enc, GstBuffer *outbuf,
+                                       GstMeta *meta, GstBuffer *inbuf);
+
   /*< private >*/
-  gpointer       _gst_reserved[GST_PADDING_LARGE];
+  gpointer       _gst_reserved[GST_PADDING_LARGE - 4];
 };
 
 GType             gst_audio_decoder_get_type (void);
@@ -287,6 +317,9 @@
 gboolean          gst_audio_decoder_set_output_format  (GstAudioDecoder    * dec,
                                                         const GstAudioInfo * info);
 
+GstCaps *         gst_audio_decoder_proxy_getcaps (GstAudioDecoder * decoder,
+                                                   GstCaps         * caps,
+                                                   GstCaps         * filter);
 gboolean          gst_audio_decoder_negotiate (GstAudioDecoder * dec);
 
 GstFlowReturn     gst_audio_decoder_finish_frame (GstAudioDecoder * dec,
@@ -361,6 +394,9 @@
 void              gst_audio_decoder_merge_tags (GstAudioDecoder * dec,
                                                 const GstTagList * tags, GstTagMergeMode mode);
 
+void              gst_audio_decoder_set_use_default_pad_acceptcaps (GstAudioDecoder * decoder,
+                                                                   gboolean use);
+
 G_END_DECLS
 
 #endif /* _GST_AUDIO_DECODER_H_ */
diff --git a/gst-libs/gst/audio/gstaudioencoder.c b/gst-libs/gst/audio/gstaudioencoder.c
index fda9887..17f843a 100644
--- a/gst-libs/gst/audio/gstaudioencoder.c
+++ b/gst-libs/gst/audio/gstaudioencoder.c
@@ -152,6 +152,7 @@
 #endif
 
 #include "gstaudioencoder.h"
+#include "gstaudioutilsprivate.h"
 #include <gst/base/gstadapter.h>
 #include <gst/audio/audio.h>
 #include <gst/pbutils/descriptions.h>
@@ -257,9 +258,15 @@
   gboolean hard_min;
   gboolean drainable;
 
-  /* pending tags */
+  /* upstream stream tags (global tags are passed through as-is) */
+  GstTagList *upstream_tags;
+
+  /* subclass tags */
   GstTagList *tags;
+  GstTagMergeMode tags_merge_mode;
+
   gboolean tags_changed;
+
   /* pending serialized sink events, will be sent from finish_frame() */
   GList *pending_events;
 };
@@ -343,6 +350,14 @@
 static gboolean gst_audio_encoder_negotiate_default (GstAudioEncoder * enc);
 static gboolean gst_audio_encoder_negotiate_unlocked (GstAudioEncoder * enc);
 
+static gboolean gst_audio_encoder_transform_meta_default (GstAudioEncoder *
+    encoder, GstBuffer * outbuf, GstMeta * meta, GstBuffer * inbuf);
+
+static gboolean gst_audio_encoder_sink_query_default (GstAudioEncoder * encoder,
+    GstQuery * query);
+static gboolean gst_audio_encoder_src_query_default (GstAudioEncoder * encoder,
+    GstQuery * query);
+
 static void
 gst_audio_encoder_class_init (GstAudioEncoderClass * klass)
 {
@@ -388,9 +403,12 @@
   klass->getcaps = gst_audio_encoder_getcaps_default;
   klass->sink_event = gst_audio_encoder_sink_event_default;
   klass->src_event = gst_audio_encoder_src_event_default;
+  klass->sink_query = gst_audio_encoder_sink_query_default;
+  klass->src_query = gst_audio_encoder_src_query_default;
   klass->propose_allocation = gst_audio_encoder_propose_allocation_default;
   klass->decide_allocation = gst_audio_encoder_decide_allocation_default;
   klass->negotiate = gst_audio_encoder_negotiate_default;
+  klass->transform_meta = gst_audio_encoder_transform_meta_default;
 }
 
 static void
@@ -445,6 +463,8 @@
   enc->priv->drainable = DEFAULT_DRAINABLE;
 
   /* init state */
+  enc->priv->ctx.min_latency = 0;
+  enc->priv->ctx.max_latency = 0;
   gst_audio_encoder_reset (enc, TRUE);
   GST_DEBUG_OBJECT (enc, "init ok");
 }
@@ -476,9 +496,14 @@
     memset (&enc->priv->ctx, 0, sizeof (enc->priv->ctx));
     gst_audio_info_init (&enc->priv->ctx.info);
 
+    if (enc->priv->upstream_tags) {
+      gst_tag_list_unref (enc->priv->upstream_tags);
+      enc->priv->upstream_tags = NULL;
+    }
     if (enc->priv->tags)
       gst_tag_list_unref (enc->priv->tags);
     enc->priv->tags = NULL;
+    enc->priv->tags_merge_mode = GST_TAG_MERGE_APPEND;
     enc->priv->tags_changed = FALSE;
 
     g_list_foreach (enc->priv->pending_events, (GFunc) gst_event_unref, NULL);
@@ -597,32 +622,111 @@
   }
 }
 
-static inline void
-gst_audio_encoder_check_and_push_ending_tags (GstAudioEncoder * enc)
+static GstEvent *
+gst_audio_encoder_create_merged_tags_event (GstAudioEncoder * enc)
 {
-  if (G_UNLIKELY (enc->priv->tags && enc->priv->tags_changed)) {
+  GstTagList *merged_tags;
+
+  GST_LOG_OBJECT (enc, "upstream : %" GST_PTR_FORMAT, enc->priv->upstream_tags);
+  GST_LOG_OBJECT (enc, "encoder  : %" GST_PTR_FORMAT, enc->priv->tags);
+  GST_LOG_OBJECT (enc, "mode     : %d", enc->priv->tags_merge_mode);
+
+  merged_tags =
+      gst_tag_list_merge (enc->priv->upstream_tags, enc->priv->tags,
+      enc->priv->tags_merge_mode);
+
+  GST_DEBUG_OBJECT (enc, "merged   : %" GST_PTR_FORMAT, merged_tags);
+
+  if (merged_tags == NULL)
+    return NULL;
+
+  if (gst_tag_list_is_empty (merged_tags)) {
+    gst_tag_list_unref (merged_tags);
+    return NULL;
+  }
+
+  /* add codec info to pending tags */
 #if 0
-    GstCaps *caps;
+  caps = gst_pad_get_current_caps (enc->srcpad);
+  gst_pb_utils_add_codec_description_to_tag_list (merged_tags,
+      GST_TAG_AUDIO_CODEC, caps);
 #endif
 
-    /* add codec info to pending tags */
-#if 0
-    if (!enc->priv->tags)
-      enc->priv->tags = gst_tag_list_new ();
-    enc->priv->tags = gst_tag_list_make_writable (enc->priv->tags);
-    caps = gst_pad_get_current_caps (enc->srcpad);
-    gst_pb_utils_add_codec_description_to_tag_list (enc->priv->tags,
-        GST_TAG_CODEC, caps);
-    gst_pb_utils_add_codec_description_to_tag_list (enc->priv->tags,
-        GST_TAG_AUDIO_CODEC, caps);
-#endif
-    GST_DEBUG_OBJECT (enc, "sending tags %" GST_PTR_FORMAT, enc->priv->tags);
-    gst_audio_encoder_push_event (enc,
-        gst_event_new_tag (gst_tag_list_ref (enc->priv->tags)));
+  return gst_event_new_tag (merged_tags);
+}
+
+static void
+gst_audio_encoder_check_and_push_pending_tags (GstAudioEncoder * enc)
+{
+  if (enc->priv->tags_changed) {
+    GstEvent *tags_event;
+
+    tags_event = gst_audio_encoder_create_merged_tags_event (enc);
+
+    if (tags_event != NULL)
+      gst_audio_encoder_push_event (enc, tags_event);
+
     enc->priv->tags_changed = FALSE;
   }
 }
 
+
+static gboolean
+gst_audio_encoder_transform_meta_default (GstAudioEncoder *
+    encoder, GstBuffer * outbuf, GstMeta * meta, GstBuffer * inbuf)
+{
+  const GstMetaInfo *info = meta->info;
+  const gchar *const *tags;
+
+  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))))
+    return TRUE;
+
+  return FALSE;
+}
+
+typedef struct
+{
+  GstAudioEncoder *encoder;
+  GstBuffer *outbuf;
+} CopyMetaData;
+
+static gboolean
+foreach_metadata (GstBuffer * inbuf, GstMeta ** meta, gpointer user_data)
+{
+  CopyMetaData *data = user_data;
+  GstAudioEncoder *encoder = data->encoder;
+  GstAudioEncoderClass *klass = GST_AUDIO_ENCODER_GET_CLASS (encoder);
+  GstBuffer *outbuf = data->outbuf;
+  const GstMetaInfo *info = (*meta)->info;
+  gboolean do_copy = FALSE;
+
+  if (gst_meta_api_type_has_tag (info->api, _gst_meta_tag_memory)) {
+    /* never call the transform_meta with memory specific metadata */
+    GST_DEBUG_OBJECT (encoder, "not copying memory specific metadata %s",
+        g_type_name (info->api));
+    do_copy = FALSE;
+  } else if (klass->transform_meta) {
+    do_copy = klass->transform_meta (encoder, outbuf, *meta, inbuf);
+    GST_DEBUG_OBJECT (encoder, "transformed metadata %s: copy: %d",
+        g_type_name (info->api), do_copy);
+  }
+
+  /* we only copy metadata when the subclass implemented a transform_meta
+   * function and when it returns %TRUE */
+  if (do_copy) {
+    GstMetaTransformCopy copy_data = { FALSE, 0, -1 };
+    GST_DEBUG_OBJECT (encoder, "copy metadata %s", g_type_name (info->api));
+    /* simply copy then */
+    info->transform_func (outbuf, *meta, inbuf,
+        _gst_meta_transform_copy, &copy_data);
+  }
+  return TRUE;
+}
+
 /**
  * gst_audio_encoder_finish_frame:
  * @enc: a #GstAudioEncoder
@@ -651,6 +755,7 @@
   GstAudioEncoderContext *ctx;
   GstFlowReturn ret = GST_FLOW_OK;
   gboolean needs_reconfigure = FALSE;
+  GstBuffer *inbuf = NULL;
 
   klass = GST_AUDIO_ENCODER_GET_CLASS (enc);
   priv = enc->priv;
@@ -688,8 +793,8 @@
 
   gst_audio_encoder_push_pending_events (enc);
 
-  /* send after pending events, which likely includes newsegment event */
-  gst_audio_encoder_check_and_push_ending_tags (enc);
+  /* send after pending events, which likely includes segment event */
+  gst_audio_encoder_check_and_push_pending_tags (enc);
 
   /* remove corresponding samples from input */
   if (samples < 0)
@@ -740,20 +845,30 @@
     }
     /* advance sample view */
     if (G_UNLIKELY (samples * ctx->info.bpf > priv->offset)) {
+      guint avail = gst_adapter_available (priv->adapter);
+
       if (G_LIKELY (!priv->force)) {
-        /* no way we can let this pass */
-        g_assert_not_reached ();
-        /* really no way */
+        /* we should have received EOS to enable force */
         goto overflow;
       } else {
         priv->offset = 0;
-        if (samples * ctx->info.bpf >= gst_adapter_available (priv->adapter))
+        if (avail > 0 && samples * ctx->info.bpf >= avail) {
+          inbuf = gst_adapter_take_buffer_fast (priv->adapter, avail);
           gst_adapter_clear (priv->adapter);
-        else
-          gst_adapter_flush (priv->adapter, samples * ctx->info.bpf);
+        } else if (avail > 0) {
+          inbuf =
+              gst_adapter_take_buffer_fast (priv->adapter,
+              samples * ctx->info.bpf);
+        }
       }
     } else {
-      gst_adapter_flush (priv->adapter, samples * ctx->info.bpf);
+      guint avail = gst_adapter_available (priv->adapter);
+
+      if (avail > 0) {
+        inbuf =
+            gst_adapter_take_buffer_fast (priv->adapter,
+            samples * ctx->info.bpf);
+      }
       priv->offset -= samples * ctx->info.bpf;
       /* avoid subsequent stray prev_ts */
       if (G_UNLIKELY (gst_adapter_available (priv->adapter) == 0))
@@ -843,6 +958,19 @@
       }
     }
 
+    if (klass->transform_meta) {
+      if (G_LIKELY (inbuf)) {
+        CopyMetaData data;
+
+        data.encoder = enc;
+        data.outbuf = buf;
+        gst_buffer_foreach_meta (inbuf, foreach_metadata, &data);
+      } else {
+        GST_WARNING_OBJECT (enc,
+            "Can't copy metadata because input buffer disappeared");
+      }
+    }
+
     priv->bytes_out += size;
 
     if (G_UNLIKELY (priv->discont)) {
@@ -878,6 +1006,9 @@
   }
 
 exit:
+  if (inbuf)
+    gst_buffer_unref (inbuf);
+
   GST_AUDIO_ENCODER_STREAM_UNLOCK (enc);
 
   return ret;
@@ -893,11 +1024,14 @@
 overflow:
   {
     GST_ELEMENT_ERROR (enc, STREAM, ENCODE,
-        ("received more encoded samples %d than provided %d",
+        ("received more encoded samples %d than provided %d as inputs",
             samples, priv->offset / ctx->info.bpf), (NULL));
     if (buf)
       gst_buffer_unref (buf);
     ret = GST_FLOW_ERROR;
+    /* no way we can let this pass */
+    g_assert_not_reached ();
+    /* really no way */
     goto exit;
   }
 }
@@ -1246,8 +1380,6 @@
   GstAudioInfo state;
   gboolean res = TRUE;
   guint old_rate;
-  GstClockTime old_min_latency;
-  GstClockTime old_max_latency;
 
   klass = GST_AUDIO_ENCODER_GET_CLASS (enc);
 
@@ -1290,12 +1422,6 @@
   enc->priv->ctx.frame_max = 0;
   enc->priv->ctx.lookahead = 0;
 
-  /* element might report latency */
-  GST_OBJECT_LOCK (enc);
-  old_min_latency = ctx->min_latency;
-  old_max_latency = ctx->max_latency;
-  GST_OBJECT_UNLOCK (enc);
-
   if (klass->set_format)
     res = klass->set_format (enc, &state);
 
@@ -1309,18 +1435,6 @@
     goto exit;
   }
 
-  /* notify if new latency */
-  GST_OBJECT_LOCK (enc);
-  if ((ctx->min_latency > 0 && ctx->min_latency != old_min_latency) ||
-      (ctx->max_latency > 0 && ctx->max_latency != old_max_latency)) {
-    GST_OBJECT_UNLOCK (enc);
-    /* post latency message on the bus */
-    gst_element_post_message (GST_ELEMENT (enc),
-        gst_message_new_latency (GST_OBJECT (enc)));
-    GST_OBJECT_LOCK (enc);
-  }
-  GST_OBJECT_UNLOCK (enc);
-
 exit:
 
   GST_AUDIO_ENCODER_STREAM_UNLOCK (enc);
@@ -1345,83 +1459,22 @@
 /**
  * gst_audio_encoder_proxy_getcaps:
  * @enc: a #GstAudioEncoder
- * @caps: initial caps
- * @filter: filter caps
+ * @caps: (allow-none): initial caps
+ * @filter: (allow-none): filter caps
  *
  * Returns caps that express @caps (or sink template caps if @caps == NULL)
  * restricted to channel/rate combinations supported by downstream elements
  * (e.g. muxers).
  *
- * Returns: a #GstCaps owned by caller
+ * Returns: (transfer full): a #GstCaps owned by caller
  */
 GstCaps *
 gst_audio_encoder_proxy_getcaps (GstAudioEncoder * enc, GstCaps * caps,
     GstCaps * filter)
 {
-  GstCaps *templ_caps = NULL;
-  GstCaps *allowed = NULL;
-  GstCaps *fcaps, *filter_caps;
-  gint i, j;
-
-  /* we want to be able to communicate to upstream elements like audioconvert
-   * and audioresample any rate/channel restrictions downstream (e.g. muxer
-   * only accepting certain sample rates) */
-  templ_caps =
-      caps ? gst_caps_ref (caps) : gst_pad_get_pad_template_caps (enc->sinkpad);
-  allowed = gst_pad_get_allowed_caps (enc->srcpad);
-  if (!allowed || gst_caps_is_empty (allowed) || gst_caps_is_any (allowed)) {
-    fcaps = templ_caps;
-    goto done;
-  }
-
-  GST_LOG_OBJECT (enc, "template caps %" GST_PTR_FORMAT, templ_caps);
-  GST_LOG_OBJECT (enc, "allowed caps %" GST_PTR_FORMAT, allowed);
-
-  filter_caps = gst_caps_new_empty ();
-
-  for (i = 0; i < gst_caps_get_size (templ_caps); i++) {
-    GQuark q_name;
-
-    q_name = gst_structure_get_name_id (gst_caps_get_structure (templ_caps, i));
-
-    /* pick rate + channel fields from allowed caps */
-    for (j = 0; j < gst_caps_get_size (allowed); j++) {
-      const GstStructure *allowed_s = gst_caps_get_structure (allowed, j);
-      const GValue *val;
-      GstStructure *s;
-
-      s = gst_structure_new_id_empty (q_name);
-      if ((val = gst_structure_get_value (allowed_s, "rate")))
-        gst_structure_set_value (s, "rate", val);
-      if ((val = gst_structure_get_value (allowed_s, "channels")))
-        gst_structure_set_value (s, "channels", val);
-      /* following might also make sense for some encoded formats,
-       * e.g. wavpack */
-      if ((val = gst_structure_get_value (allowed_s, "channel-mask")))
-        gst_structure_set_value (s, "channel-mask", val);
-
-      filter_caps = gst_caps_merge_structure (filter_caps, s);
-    }
-  }
-
-  fcaps = gst_caps_intersect (filter_caps, templ_caps);
-  gst_caps_unref (filter_caps);
-  gst_caps_unref (templ_caps);
-
-  if (filter) {
-    GST_LOG_OBJECT (enc, "intersecting with %" GST_PTR_FORMAT, filter);
-    filter_caps = gst_caps_intersect_full (filter, fcaps,
-        GST_CAPS_INTERSECT_FIRST);
-    gst_caps_unref (fcaps);
-    fcaps = filter_caps;
-  }
-
-done:
-  gst_caps_replace (&allowed, NULL);
-
-  GST_LOG_OBJECT (enc, "proxy caps %" GST_PTR_FORMAT, fcaps);
-
-  return fcaps;
+  return __gst_audio_element_proxy_getcaps (GST_ELEMENT_CAST (enc),
+      GST_AUDIO_ENCODER_SINK_PAD (enc), GST_AUDIO_ENCODER_SRC_PAD (enc),
+      caps, filter);
 }
 
 static GstCaps *
@@ -1520,7 +1573,7 @@
 
       /* check for pending events and tags */
       gst_audio_encoder_push_pending_events (enc);
-      gst_audio_encoder_check_and_push_ending_tags (enc);
+      gst_audio_encoder_check_and_push_pending_tags (enc);
 
       GST_AUDIO_ENCODER_STREAM_UNLOCK (enc);
 
@@ -1541,6 +1594,21 @@
       break;
     }
 
+    case GST_EVENT_STREAM_START:
+    {
+      GST_AUDIO_ENCODER_STREAM_LOCK (enc);
+      /* Flush upstream tags after a STREAM_START */
+      GST_DEBUG_OBJECT (enc, "received STREAM_START. Clearing taglist");
+      if (enc->priv->upstream_tags) {
+        gst_tag_list_unref (enc->priv->upstream_tags);
+        enc->priv->upstream_tags = NULL;
+        enc->priv->tags_changed = TRUE;
+      }
+      GST_AUDIO_ENCODER_STREAM_UNLOCK (enc);
+      res = gst_audio_encoder_push_event (enc, event);
+      break;
+    }
+
     case GST_EVENT_TAG:
     {
       GstTagList *tags;
@@ -1548,31 +1616,40 @@
       gst_event_parse_tag (event, &tags);
 
       if (gst_tag_list_get_scope (tags) == GST_TAG_SCOPE_STREAM) {
-        tags = gst_tag_list_copy (tags);
+        GST_AUDIO_ENCODER_STREAM_LOCK (enc);
+        if (enc->priv->upstream_tags != tags) {
+          tags = gst_tag_list_copy (tags);
 
-        /* FIXME: make generic based on GST_TAG_FLAG_ENCODED */
-        gst_tag_list_remove_tag (tags, GST_TAG_CODEC);
-        gst_tag_list_remove_tag (tags, GST_TAG_AUDIO_CODEC);
-        gst_tag_list_remove_tag (tags, GST_TAG_VIDEO_CODEC);
-        gst_tag_list_remove_tag (tags, GST_TAG_SUBTITLE_CODEC);
-        gst_tag_list_remove_tag (tags, GST_TAG_CONTAINER_FORMAT);
-        gst_tag_list_remove_tag (tags, GST_TAG_BITRATE);
-        gst_tag_list_remove_tag (tags, GST_TAG_NOMINAL_BITRATE);
-        gst_tag_list_remove_tag (tags, GST_TAG_MAXIMUM_BITRATE);
-        gst_tag_list_remove_tag (tags, GST_TAG_MINIMUM_BITRATE);
-        gst_tag_list_remove_tag (tags, GST_TAG_ENCODER);
-        gst_tag_list_remove_tag (tags, GST_TAG_ENCODER_VERSION);
+          /* FIXME: make generic based on GST_TAG_FLAG_ENCODED */
+          gst_tag_list_remove_tag (tags, GST_TAG_CODEC);
+          gst_tag_list_remove_tag (tags, GST_TAG_AUDIO_CODEC);
+          gst_tag_list_remove_tag (tags, GST_TAG_VIDEO_CODEC);
+          gst_tag_list_remove_tag (tags, GST_TAG_SUBTITLE_CODEC);
+          gst_tag_list_remove_tag (tags, GST_TAG_CONTAINER_FORMAT);
+          gst_tag_list_remove_tag (tags, GST_TAG_BITRATE);
+          gst_tag_list_remove_tag (tags, GST_TAG_NOMINAL_BITRATE);
+          gst_tag_list_remove_tag (tags, GST_TAG_MAXIMUM_BITRATE);
+          gst_tag_list_remove_tag (tags, GST_TAG_MINIMUM_BITRATE);
+          gst_tag_list_remove_tag (tags, GST_TAG_ENCODER);
+          gst_tag_list_remove_tag (tags, GST_TAG_ENCODER_VERSION);
 
-        gst_audio_encoder_merge_tags (enc, tags, GST_TAG_MERGE_REPLACE);
-        gst_tag_list_unref (tags);
+          if (enc->priv->upstream_tags)
+            gst_tag_list_unref (enc->priv->upstream_tags);
+          enc->priv->upstream_tags = tags;
+          GST_INFO_OBJECT (enc, "upstream stream tags: %" GST_PTR_FORMAT, tags);
+        }
         gst_event_unref (event);
-        event = NULL;
-        res = TRUE;
-        break;
+        event = gst_audio_encoder_create_merged_tags_event (enc);
+        GST_AUDIO_ENCODER_STREAM_UNLOCK (enc);
+
+        /* No tags, go out of here instead of fall through */
+        if (!event) {
+          res = TRUE;
+          break;
+        }
       }
       /* fall through */
     }
-
     default:
       /* Forward non-serialized events immediately. */
       if (!GST_EVENT_IS_SERIALIZED (event)) {
@@ -1617,13 +1694,10 @@
 }
 
 static gboolean
-gst_audio_encoder_sink_query (GstPad * pad, GstObject * parent,
-    GstQuery * query)
+gst_audio_encoder_sink_query_default (GstAudioEncoder * enc, GstQuery * query)
 {
+  GstPad *pad = GST_AUDIO_ENCODER_SINK_PAD (enc);
   gboolean res = FALSE;
-  GstAudioEncoder *enc;
-
-  enc = GST_AUDIO_ENCODER (parent);
 
   switch (GST_QUERY_TYPE (query)) {
     case GST_QUERY_FORMATS:
@@ -1671,7 +1745,7 @@
       break;
     }
     default:
-      res = gst_pad_query_default (pad, parent, query);
+      res = gst_pad_query_default (pad, GST_OBJECT (enc), query);
       break;
   }
 
@@ -1680,6 +1754,26 @@
 }
 
 static gboolean
+gst_audio_encoder_sink_query (GstPad * pad, GstObject * parent,
+    GstQuery * query)
+{
+  GstAudioEncoder *encoder;
+  GstAudioEncoderClass *encoder_class;
+  gboolean ret = FALSE;
+
+  encoder = GST_AUDIO_ENCODER (parent);
+  encoder_class = GST_AUDIO_ENCODER_GET_CLASS (encoder);
+
+  GST_DEBUG_OBJECT (encoder, "received query %d, %s", GST_QUERY_TYPE (query),
+      GST_QUERY_TYPE_NAME (query));
+
+  if (encoder_class->sink_query)
+    ret = encoder_class->sink_query (encoder, query);
+
+  return ret;
+}
+
+static gboolean
 gst_audio_encoder_src_event_default (GstAudioEncoder * enc, GstEvent * event)
 {
   gboolean res;
@@ -1828,13 +1922,11 @@
  * segment stuff etc at all
  * Supposedly that's backward compatibility ... */
 static gboolean
-gst_audio_encoder_src_query (GstPad * pad, GstObject * parent, GstQuery * query)
+gst_audio_encoder_src_query_default (GstAudioEncoder * enc, GstQuery * query)
 {
-  GstAudioEncoder *enc;
+  GstPad *pad = GST_AUDIO_ENCODER_SRC_PAD (enc);
   gboolean res = FALSE;
 
-  enc = GST_AUDIO_ENCODER (parent);
-
   GST_LOG_OBJECT (enc, "handling query: %" GST_PTR_FORMAT, query);
 
   switch (GST_QUERY_TYPE (query)) {
@@ -1914,9 +2006,10 @@
 
         GST_OBJECT_LOCK (enc);
         /* add our latency */
-        if (min_latency != -1)
-          min_latency += enc->priv->ctx.min_latency;
-        if (max_latency != -1)
+        min_latency += enc->priv->ctx.min_latency;
+        if (max_latency == -1 || enc->priv->ctx.max_latency == -1)
+          max_latency = -1;
+        else
           max_latency += enc->priv->ctx.max_latency;
         GST_OBJECT_UNLOCK (enc);
 
@@ -1925,13 +2018,33 @@
       break;
     }
     default:
-      res = gst_pad_query_default (pad, parent, query);
+      res = gst_pad_query_default (pad, GST_OBJECT (enc), query);
       break;
   }
 
   return res;
 }
 
+static gboolean
+gst_audio_encoder_src_query (GstPad * pad, GstObject * parent, GstQuery * query)
+{
+  GstAudioEncoder *encoder;
+  GstAudioEncoderClass *encoder_class;
+  gboolean ret = FALSE;
+
+  encoder = GST_AUDIO_ENCODER (parent);
+  encoder_class = GST_AUDIO_ENCODER_GET_CLASS (encoder);
+
+  GST_DEBUG_OBJECT (encoder, "received query %d, %s", GST_QUERY_TYPE (query),
+      GST_QUERY_TYPE_NAME (query));
+
+  if (encoder_class->src_query)
+    ret = encoder_class->src_query (encoder, query);
+
+  return ret;
+}
+
+
 static void
 gst_audio_encoder_set_property (GObject * object, guint prop_id,
     const GValue * value, GParamSpec * pspec)
@@ -2000,11 +2113,8 @@
   GST_DEBUG_OBJECT (enc, "activate %d", active);
 
   if (active) {
-
-    if (enc->priv->tags)
-      gst_tag_list_unref (enc->priv->tags);
-    enc->priv->tags = gst_tag_list_new_empty ();
-    enc->priv->tags_changed = FALSE;
+    /* arrange clean state */
+    gst_audio_encoder_reset (enc, TRUE);
 
     if (!enc->priv->active && klass->start)
       result = klass->start (enc);
@@ -2202,6 +2312,8 @@
     GstClockTime min, GstClockTime max)
 {
   g_return_if_fail (GST_IS_AUDIO_ENCODER (enc));
+  g_return_if_fail (GST_CLOCK_TIME_IS_VALID (min));
+  g_return_if_fail (min <= max);
 
   GST_OBJECT_LOCK (enc);
   enc->priv->ctx.min_latency = min;
@@ -2210,6 +2322,10 @@
 
   GST_LOG_OBJECT (enc, "set to %" GST_TIME_FORMAT "-%" GST_TIME_FORMAT,
       GST_TIME_ARGS (min), GST_TIME_ARGS (max));
+
+  /* post latency message on the bus */
+  gst_element_post_message (GST_ELEMENT (enc),
+      gst_message_new_latency (GST_OBJECT (enc)));
 }
 
 /**
@@ -2532,16 +2648,16 @@
 /**
  * gst_audio_encoder_merge_tags:
  * @enc: a #GstAudioEncoder
- * @tags: a #GstTagList to merge
- * @mode: the #GstTagMergeMode to use
+ * @tags: (allow-none): a #GstTagList to merge, or NULL to unset
+ *     previously-set tags
+ * @mode: the #GstTagMergeMode to use, usually #GST_TAG_MERGE_REPLACE
  *
- * Adds tags to so-called pending tags, which will be processed
- * before pushing out data downstream.
+ * Sets the audio encoder tags and how they should be merged with any
+ * upstream stream tags. This will override any tags previously-set
+ * with gst_audio_encoder_merge_tags().
  *
  * Note that this is provided for convenience, and the subclass is
- * not required to use this and can still do tag handling on its own,
- * although it should be aware that baseclass already takes care
- * of the usual CODEC/AUDIO_CODEC tags.
+ * not required to use this and can still do tag handling on its own.
  *
  * MT safe.
  */
@@ -2549,19 +2665,25 @@
 gst_audio_encoder_merge_tags (GstAudioEncoder * enc,
     const GstTagList * tags, GstTagMergeMode mode)
 {
-  GstTagList *otags;
-
   g_return_if_fail (GST_IS_AUDIO_ENCODER (enc));
   g_return_if_fail (tags == NULL || GST_IS_TAG_LIST (tags));
+  g_return_if_fail (tags == NULL || mode != GST_TAG_MERGE_UNDEFINED);
 
   GST_AUDIO_ENCODER_STREAM_LOCK (enc);
-  if (tags)
-    GST_DEBUG_OBJECT (enc, "merging tags %" GST_PTR_FORMAT, tags);
-  otags = enc->priv->tags;
-  enc->priv->tags = gst_tag_list_merge (enc->priv->tags, tags, mode);
-  if (otags)
-    gst_tag_list_unref (otags);
-  enc->priv->tags_changed = TRUE;
+  if (enc->priv->tags != tags) {
+    if (enc->priv->tags) {
+      gst_tag_list_unref (enc->priv->tags);
+      enc->priv->tags = NULL;
+      enc->priv->tags_merge_mode = GST_TAG_MERGE_APPEND;
+    }
+    if (tags) {
+      enc->priv->tags = gst_tag_list_ref ((GstTagList *) tags);
+      enc->priv->tags_merge_mode = mode;
+    }
+
+    GST_DEBUG_OBJECT (enc, "setting encoder tags to %" GST_PTR_FORMAT, tags);
+    enc->priv->tags_changed = TRUE;
+  }
   GST_AUDIO_ENCODER_STREAM_UNLOCK (enc);
 }
 
@@ -2704,7 +2826,7 @@
 /*
  * gst_audio_encoder_set_output_format:
  * @enc: a #GstAudioEncoder
- * @caps: #GstCaps
+ * @caps: (transfer none): #GstCaps
  *
  * Configure output caps on the srcpad of @enc.
  *
diff --git a/gst-libs/gst/audio/gstaudioencoder.h b/gst-libs/gst/audio/gstaudioencoder.h
index a9b691f..c9f8272 100644
--- a/gst-libs/gst/audio/gstaudioencoder.h
+++ b/gst-libs/gst/audio/gstaudioencoder.h
@@ -174,6 +174,21 @@
  *                      Propose buffer allocation parameters for upstream elements.
  *                      Subclasses should chain up to the parent implementation to
  *                      invoke the default handler.
+ * @transform_meta: Optional. Transform the metadata on the input buffer to the
+ *                  output buffer. By default this method copies all meta without
+ *                  tags and meta with only the "audio" tag. subclasses can
+ *                  implement this method and return %TRUE if the metadata is to be
+ *                  copied. Since 1.6
+ * @sink_query:     Optional.
+ *                  Query handler on the sink pad. This function should
+ *                  return TRUE if the query could be performed. Subclasses
+ *                  should chain up to the parent implementation to invoke the
+ *                  default handler. Since 1.6
+ * @src_query:      Optional.
+ *                  Query handler on the source pad. This function should
+ *                  return TRUE if the query could be performed. Subclasses
+ *                  should chain up to the parent implementation to invoke the
+ *                  default handler. Since 1.6
  *
  * Subclasses can override any of the available virtual methods or not, as
  * needed. At minimum @set_format and @handle_frame needs to be overridden.
@@ -218,8 +233,18 @@
   gboolean      (*propose_allocation) (GstAudioEncoder * enc,
                                        GstQuery * query);
 
+  gboolean      (*transform_meta)     (GstAudioEncoder *enc, GstBuffer *outbuf,
+                                       GstMeta *meta, GstBuffer *inbuf);
+
+  gboolean      (*sink_query)         (GstAudioEncoder *encoder,
+				       GstQuery *query);
+
+  gboolean      (*src_query)          (GstAudioEncoder *encoder,
+				       GstQuery *query);
+
+
   /*< private >*/
-  gpointer       _gst_reserved[GST_PADDING_LARGE];
+  gpointer       _gst_reserved[GST_PADDING_LARGE-3];
 };
 
 GType           gst_audio_encoder_get_type         (void);
diff --git a/gst-libs/gst/audio/gstaudiofilter.c b/gst-libs/gst/audio/gstaudiofilter.c
index 94b3a58..ab8eac2 100644
--- a/gst-libs/gst/audio/gstaudiofilter.c
+++ b/gst-libs/gst/audio/gstaudiofilter.c
@@ -63,6 +63,25 @@
 G_DEFINE_ABSTRACT_TYPE_WITH_CODE (GstAudioFilter, gst_audio_filter,
     GST_TYPE_BASE_TRANSFORM, do_init);
 
+static gboolean
+gst_audio_filter_transform_meta (GstBaseTransform * trans, GstBuffer * inbuf,
+    GstMeta * meta, GstBuffer * outbuf)
+{
+  const GstMetaInfo *info = meta->info;
+  const gchar *const *tags;
+
+  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))))
+    return TRUE;
+
+  return
+      GST_BASE_TRANSFORM_CLASS (gst_audio_filter_parent_class)->transform_meta
+      (trans, inbuf, meta, outbuf);
+}
+
 static void
 gst_audio_filter_class_init (GstAudioFilterClass * klass)
 {
@@ -74,6 +93,7 @@
   basetrans_class->set_caps = GST_DEBUG_FUNCPTR (gst_audio_filter_set_caps);
   basetrans_class->get_unit_size =
       GST_DEBUG_FUNCPTR (gst_audio_filter_get_unit_size);
+  basetrans_class->transform_meta = gst_audio_filter_transform_meta;
 }
 
 static void
diff --git a/gst-libs/gst/audio/gstaudioiec61937.c b/gst-libs/gst/audio/gstaudioiec61937.c
index b1ad046..6ae854b 100644
--- a/gst-libs/gst/audio/gstaudioiec61937.c
+++ b/gst-libs/gst/audio/gstaudioiec61937.c
@@ -114,12 +114,15 @@
 
       if (version == 1 && layer == 1)
         frames = 384;
-      else if (version == 2 && layer == 1 && spec->info.rate < 32000)
+      else if (version == 2 && layer == 1 && spec->info.rate <= 12000)
         frames = 768;
-      else if (version == 2 && layer == 1 && spec->info.rate < 32000)
+      else if (version == 2 && layer == 2 && spec->info.rate <= 12000)
         frames = 2304;
-      else
+      else {
+        /* MPEG-1 layer 2,3, MPEG-2 with or without extension,
+         * MPEG-2 layer 3 low sample freq. */
         frames = 1152;
+      }
 
       return frames * 4;
     }
@@ -273,17 +276,18 @@
        *                            06 = MPEG 2, with extension
        *                            08 - MPEG 2 LSF, Layer 1
        *                            09 - MPEG 2 LSF, Layer 2
-       *                            10 - MPEG 2 LSF, Layer 3 */
+       *                            10 - MPEG 2 LSF, Layer 3
+       *                 FIXME: we don't handle type 06 at the moment */
       if (version == 1 && layer == 1)
         dst[five] = 0x04;
       else if ((version == 1 && (layer == 2 || layer == 3)) ||
-          (version == 2 && spec->info.rate >= 32000))
+          (version == 2 && spec->info.rate >= 12000))
         dst[five] = 0x05;
-      else if (version == 2 && layer == 1 && spec->info.rate < 32000)
+      else if (version == 2 && layer == 1 && spec->info.rate < 12000)
         dst[five] = 0x08;
-      else if (version == 2 && layer == 2 && spec->info.rate < 32000)
+      else if (version == 2 && layer == 2 && spec->info.rate < 12000)
         dst[five] = 0x09;
-      else if (version == 2 && layer == 3 && spec->info.rate < 32000)
+      else if (version == 2 && layer == 3 && spec->info.rate < 12000)
         dst[five] = 0x0A;
       else
         g_return_val_if_reached (FALSE);
diff --git a/gst-libs/gst/audio/gstaudiometa.c b/gst-libs/gst/audio/gstaudiometa.c
index 0cadc02..1c5e8a3 100644
--- a/gst-libs/gst/audio/gstaudiometa.c
+++ b/gst-libs/gst/audio/gstaudiometa.c
@@ -59,12 +59,20 @@
 gst_audio_downmix_meta_transform (GstBuffer * dest, GstMeta * meta,
     GstBuffer * buffer, GQuark type, gpointer data)
 {
-  GstAudioDownmixMeta *smeta;
+  GstAudioDownmixMeta *smeta, *dmeta;
 
   smeta = (GstAudioDownmixMeta *) meta;
-  gst_buffer_add_audio_downmix_meta (dest, smeta->from_position,
-      smeta->from_channels, smeta->to_position, smeta->to_channels,
-      (const gfloat **) smeta->matrix);
+
+  if (GST_META_TRANSFORM_IS_COPY (type)) {
+    dmeta = gst_buffer_add_audio_downmix_meta (dest, smeta->from_position,
+        smeta->from_channels, smeta->to_position, smeta->to_channels,
+        (const gfloat **) smeta->matrix);
+    if (!dmeta)
+      return FALSE;
+  } else {
+    /* return FALSE, if transform type is not supported */
+    return FALSE;
+  }
 
   return TRUE;
 }
@@ -79,7 +87,7 @@
  * Find the #GstAudioDownmixMeta on @buffer for the given destination
  * channel positions.
  *
- * Returns: the #GstAudioDownmixMeta on @buffer.
+ * Returns: (transfer none): the #GstAudioDownmixMeta on @buffer.
  */
 GstAudioDownmixMeta *
 gst_buffer_get_audio_downmix_meta_for_channels (GstBuffer * buffer,
@@ -119,7 +127,7 @@
  * the input channels with the coefficients in @matrix[i] and taking the sum
  * of the results.
  *
- * Returns: the #GstAudioDownmixMeta on @buffer.
+ * Returns: (transfer none): the #GstAudioDownmixMeta on @buffer.
  */
 GstAudioDownmixMeta *
 gst_buffer_add_audio_downmix_meta (GstBuffer * buffer,
diff --git a/gst-libs/gst/audio/gstaudioringbuffer.c b/gst-libs/gst/audio/gstaudioringbuffer.c
index 7f4b17b..246c6f6 100644
--- a/gst-libs/gst/audio/gstaudioringbuffer.c
+++ b/gst-libs/gst/audio/gstaudioringbuffer.c
@@ -218,6 +218,10 @@
             gst_structure_get_int (structure, "channels", &info.channels)))
       goto parse_error;
 
+    if (!(gst_audio_channel_positions_from_mask (info.channels, 0,
+                info.position)))
+      goto parse_error;
+
     spec->type = GST_AUDIO_RING_BUFFER_FORMAT_TYPE_A_LAW;
     info.bpf = info.channels;
   } else if (g_str_equal (mimetype, "audio/x-mulaw")) {
@@ -226,6 +230,10 @@
             gst_structure_get_int (structure, "channels", &info.channels)))
       goto parse_error;
 
+    if (!(gst_audio_channel_positions_from_mask (info.channels, 0,
+                info.position)))
+      goto parse_error;
+
     spec->type = GST_AUDIO_RING_BUFFER_FORMAT_TYPE_MU_LAW;
     info.bpf = info.channels;
   } else if (g_str_equal (mimetype, "audio/x-iec958")) {
@@ -675,7 +683,7 @@
   buf->acquired = FALSE;
 
   /* if this fails, something is wrong in this file */
-  g_assert (buf->open == TRUE);
+  g_assert (buf->open);
 
   rclass = GST_AUDIO_RING_BUFFER_GET_CLASS (buf);
   if (G_LIKELY (rclass->release))
@@ -910,7 +918,7 @@
   if (G_UNLIKELY (!buf->acquired))
     goto not_acquired;
 
-  if (G_UNLIKELY (g_atomic_int_get (&buf->may_start) == FALSE))
+  if (G_UNLIKELY (!g_atomic_int_get (&buf->may_start)))
     goto may_not_start;
 
   /* if stopped, set to started */
@@ -1277,7 +1285,7 @@
   if (G_UNLIKELY (g_atomic_int_get (&buf->state) !=
           GST_AUDIO_RING_BUFFER_STATE_STARTED)) {
     /* see if we are allowed to start it */
-    if (G_UNLIKELY (g_atomic_int_get (&buf->may_start) == FALSE))
+    if (G_UNLIKELY (!g_atomic_int_get (&buf->may_start)))
       goto no_start;
 
     GST_DEBUG_OBJECT (buf, "start!");
@@ -1462,6 +1470,18 @@
   g_return_val_if_fail (buf->memory != NULL, -1);
   g_return_val_if_fail (data != NULL, -1);
 
+  /* writing stuff now, ensure running clock */
+  if (G_UNLIKELY (g_atomic_int_get (&buf->state) !=
+          GST_AUDIO_RING_BUFFER_STATE_STARTED)) {
+    /* see if we are allowed to start it */
+    if (G_UNLIKELY (g_atomic_int_get (&buf->may_start) == FALSE)) {
+      GST_DEBUG_OBJECT (buf, "not allowed to start");
+    } else {
+      GST_DEBUG_OBJECT (buf, "start!");
+      gst_audio_ring_buffer_start (buf);
+    }
+  }
+
   need_reorder = buf->need_reorder;
 
   channels = buf->spec.info.channels;
@@ -1725,8 +1745,8 @@
        * reading) */
       diff = segdone - readseg;
 
-      GST_DEBUG
-          ("pointer at %d, sample %" G_GUINT64_FORMAT
+      GST_DEBUG_OBJECT
+          (buf, "pointer at %d, sample %" G_GUINT64_FORMAT
           ", read from %d-%d, to_read %d, diff %d, segtotal %d, segsize %d",
           segdone, sample, readseg, sampleoff, to_read, diff, segtotal,
           segsize);
@@ -1838,7 +1858,7 @@
   *len = buf->spec.segsize;
   *readptr = data + *segment * *len;
 
-  GST_LOG ("prepare read from segment %d (real %d) @%p",
+  GST_LOG_OBJECT (buf, "prepare read from segment %d (real %d) @%p",
       *segment, segdone, *readptr);
 
   /* callback to fill the memory with data, for pull based
@@ -1908,7 +1928,7 @@
   data = buf->memory;
   data += segment * buf->spec.segsize;
 
-  GST_LOG ("clear segment %d @%p", segment, data);
+  GST_LOG_OBJECT (buf, "clear segment %d @%p", segment, data);
 
   memcpy (data, buf->empty_seg, buf->spec.segsize);
 }
diff --git a/gst-libs/gst/audio/gstaudioringbuffer.h b/gst-libs/gst/audio/gstaudioringbuffer.h
index 24fe350..b3c87c4 100644
--- a/gst-libs/gst/audio/gstaudioringbuffer.h
+++ b/gst-libs/gst/audio/gstaudioringbuffer.h
@@ -220,7 +220,7 @@
  * @pause: pause processing of samples
  * @resume: resume processing of samples after pause
  * @stop: stop processing of samples
- * @delay: get number of samples queued in device
+ * @delay: get number of frames queued in device
  * @activate: activate the thread that starts pulling and monitoring the
  * consumed segments in the device.
  * @commit: write samples into the ringbuffer
diff --git a/gst-libs/gst/audio/gstaudiosink.c b/gst-libs/gst/audio/gstaudiosink.c
index d329512..ca2ceda 100644
--- a/gst-libs/gst/audio/gstaudiosink.c
+++ b/gst-libs/gst/audio/gstaudiosink.c
@@ -399,7 +399,6 @@
   GstAudioSink *sink;
   GstAudioSinkClass *csink;
   gboolean result = FALSE;
-  GstAudioClock *clock;
 
   sink = GST_AUDIO_SINK (GST_OBJECT_PARENT (buf));
   csink = GST_AUDIO_SINK_GET_CLASS (sink);
@@ -409,15 +408,21 @@
   if (!result)
     goto could_not_prepare;
 
-  /* our clock will now start from 0 again */
-  clock = GST_AUDIO_CLOCK (GST_AUDIO_BASE_SINK (sink)->provided_clock);
-  gst_audio_clock_reset (clock, 0);
-
   /* set latency to one more segment as we need some headroom */
   spec->seglatency = spec->segtotal + 1;
 
   buf->size = spec->segtotal * spec->segsize;
-  buf->memory = g_malloc0 (buf->size);
+
+  buf->memory = g_malloc (buf->size);
+
+  if (buf->spec.type == GST_AUDIO_RING_BUFFER_FORMAT_TYPE_RAW) {
+    gst_audio_format_fill_silence (buf->spec.info.finfo, buf->memory,
+        buf->size);
+  } else {
+    /* FIXME, non-raw formats get 0 as the empty sample */
+    memset (buf->memory, 0, buf->size);
+  }
+
 
   return TRUE;
 
@@ -475,6 +480,7 @@
       GST_ERROR_OBJECT (sink, "could not create thread %s", error->message);
     else
       GST_ERROR_OBJECT (sink, "could not create thread for unknown reason");
+    g_clear_error (&error);
     return FALSE;
   }
 }
diff --git a/gst-libs/gst/audio/gstaudiosink.h b/gst-libs/gst/audio/gstaudiosink.h
index 9237fef..02d5a7e 100644
--- a/gst-libs/gst/audio/gstaudiosink.h
+++ b/gst-libs/gst/audio/gstaudiosink.h
@@ -66,7 +66,7 @@
  * @unprepare: Undo operations done in prepare.
  * @close: Close the device.
  * @write: Write data to the device.
- * @delay: Return how many samples are still in the device. This is used to
+ * @delay: Return how many frames are still in the device. This is used to
  *         drive the synchronisation.
  * @reset: Returns as quickly as possible from a write and flush any pending
  *         samples from the device.
@@ -88,7 +88,7 @@
   gboolean (*close)     (GstAudioSink *sink);
   /* write samples to the device */
   gint     (*write)     (GstAudioSink *sink, gpointer data, guint length);
-  /* get number of samples queued in the device */
+  /* get number of frames queued in the device */
   guint    (*delay)     (GstAudioSink *sink);
   /* reset the audio device, unblock from a write */
   void     (*reset)     (GstAudioSink *sink);
diff --git a/gst-libs/gst/audio/gstaudiosrc.c b/gst-libs/gst/audio/gstaudiosrc.c
index 197ab17..888fdf2 100644
--- a/gst-libs/gst/audio/gstaudiosrc.c
+++ b/gst-libs/gst/audio/gstaudiosrc.c
@@ -393,7 +393,14 @@
     goto could_not_open;
 
   buf->size = spec->segtotal * spec->segsize;
-  buf->memory = g_malloc0 (buf->size);
+  buf->memory = g_malloc (buf->size);
+  if (buf->spec.type == GST_AUDIO_RING_BUFFER_FORMAT_TYPE_RAW) {
+    gst_audio_format_fill_silence (buf->spec.info.finfo, buf->memory,
+        buf->size);
+  } else {
+    /* FIXME, non-raw formats get 0 as the empty sample */
+    memset (buf->memory, 0, buf->size);
+  }
 
   abuf = GST_AUDIO_SRC_RING_BUFFER (buf);
   abuf->running = TRUE;
diff --git a/gst-libs/gst/audio/gstaudiosrc.h b/gst-libs/gst/audio/gstaudiosrc.h
index 040caa2..89d8af1 100644
--- a/gst-libs/gst/audio/gstaudiosrc.h
+++ b/gst-libs/gst/audio/gstaudiosrc.h
@@ -65,7 +65,7 @@
  * @unprepare: undo the configuration
  * @close: close the device
  * @read: read samples from the audio device
- * @delay: the number of samples queued in the device
+ * @delay: the number of frames queued in the device
  * @reset: unblock a read to the device and reset.
  *
  * #GstAudioSrc class. Override the vmethod to implement
@@ -87,7 +87,7 @@
   /* read samples from the device */
   guint    (*read)      (GstAudioSrc *src, gpointer data, guint length,
       GstClockTime *timestamp);
-  /* get number of samples queued in the device */
+  /* get number of frames queued in the device */
   guint    (*delay)     (GstAudioSrc *src);
   /* reset the audio device, unblock from a write */
   void     (*reset)     (GstAudioSrc *src);
diff --git a/gst-libs/gst/audio/gstaudioutilsprivate.c b/gst-libs/gst/audio/gstaudioutilsprivate.c
new file mode 100644
index 0000000..870bcd6
--- /dev/null
+++ b/gst-libs/gst/audio/gstaudioutilsprivate.c
@@ -0,0 +1,144 @@
+/* GStreamer
+ * Copyright (C) 2011 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>.
+ * Copyright (C) 2011 Nokia Corporation. All rights reserved.
+ *   Contact: Stefan Kost <stefan.kost@nokia.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/audio/audio.h>
+#include "gstaudioutilsprivate.h"
+
+/*
+ * Takes caps and copies its audio fields to tmpl_caps
+ */
+static GstCaps *
+__gst_audio_element_proxy_caps (GstElement * element, GstCaps * templ_caps,
+    GstCaps * caps)
+{
+  GstCaps *result = gst_caps_new_empty ();
+  gint i, j;
+  gint templ_caps_size = gst_caps_get_size (templ_caps);
+  gint caps_size = gst_caps_get_size (caps);
+
+  for (i = 0; i < templ_caps_size; i++) {
+    GQuark q_name =
+        gst_structure_get_name_id (gst_caps_get_structure (templ_caps, i));
+    GstCapsFeatures *features = gst_caps_get_features (templ_caps, i);
+
+    for (j = 0; j < caps_size; j++) {
+      const GstStructure *caps_s = gst_caps_get_structure (caps, j);
+      const GValue *val;
+      GstStructure *s;
+      GstCaps *tmp = gst_caps_new_empty ();
+
+      s = gst_structure_new_id_empty (q_name);
+      if ((val = gst_structure_get_value (caps_s, "rate")))
+        gst_structure_set_value (s, "rate", val);
+      if ((val = gst_structure_get_value (caps_s, "channels")))
+        gst_structure_set_value (s, "channels", val);
+      if ((val = gst_structure_get_value (caps_s, "channels-mask")))
+        gst_structure_set_value (s, "channels-mask", val);
+
+      gst_caps_append_structure_full (tmp, s,
+          gst_caps_features_copy (features));
+      result = gst_caps_merge (result, tmp);
+    }
+  }
+
+  return result;
+}
+
+/**
+ * __gst_audio_element_proxy_getcaps:
+ * @element: a #GstElement
+ * @sinkpad: the element's sink #GstPad
+ * @srcpad: the element's source #GstPad
+ * @initial_caps: initial caps
+ * @filter: filter caps
+ *
+ * Returns caps that express @initial_caps (or sink template caps if
+ * @initial_caps == NULL) restricted to rate/channels/...
+ * combinations supported by downstream elements (e.g. muxers).
+ *
+ * Returns: a #GstCaps owned by caller
+ */
+GstCaps *
+__gst_audio_element_proxy_getcaps (GstElement * element, GstPad * sinkpad,
+    GstPad * srcpad, GstCaps * initial_caps, GstCaps * filter)
+{
+  GstCaps *templ_caps, *src_templ_caps;
+  GstCaps *peer_caps;
+  GstCaps *allowed;
+  GstCaps *fcaps, *filter_caps;
+
+  /* Allow downstream to specify rate/channels constraints
+   * and forward them upstream for audio converters to handle
+   */
+  templ_caps = initial_caps ? gst_caps_ref (initial_caps) :
+      gst_pad_get_pad_template_caps (sinkpad);
+  src_templ_caps = gst_pad_get_pad_template_caps (srcpad);
+  if (filter && !gst_caps_is_any (filter)) {
+    GstCaps *proxy_filter =
+        __gst_audio_element_proxy_caps (element, src_templ_caps, filter);
+
+    peer_caps = gst_pad_peer_query_caps (srcpad, proxy_filter);
+    gst_caps_unref (proxy_filter);
+  } else {
+    peer_caps = gst_pad_peer_query_caps (srcpad, NULL);
+  }
+
+  allowed = gst_caps_intersect_full (peer_caps, src_templ_caps,
+      GST_CAPS_INTERSECT_FIRST);
+
+  gst_caps_unref (src_templ_caps);
+  gst_caps_unref (peer_caps);
+
+  if (!allowed || gst_caps_is_any (allowed)) {
+    fcaps = templ_caps;
+    goto done;
+  } else if (gst_caps_is_empty (allowed)) {
+    fcaps = gst_caps_ref (allowed);
+    goto done;
+  }
+
+  GST_LOG_OBJECT (element, "template caps %" GST_PTR_FORMAT, templ_caps);
+  GST_LOG_OBJECT (element, "allowed caps %" GST_PTR_FORMAT, allowed);
+
+  filter_caps = __gst_audio_element_proxy_caps (element, templ_caps, allowed);
+
+  fcaps = gst_caps_intersect (filter_caps, templ_caps);
+  gst_caps_unref (filter_caps);
+  gst_caps_unref (templ_caps);
+
+  if (filter) {
+    GST_LOG_OBJECT (element, "intersecting with %" GST_PTR_FORMAT, filter);
+    filter_caps = gst_caps_intersect (fcaps, filter);
+    gst_caps_unref (fcaps);
+    fcaps = filter_caps;
+  }
+
+done:
+  gst_caps_replace (&allowed, NULL);
+
+  GST_LOG_OBJECT (element, "proxy caps %" GST_PTR_FORMAT, fcaps);
+
+  return fcaps;
+}
diff --git a/gst-libs/gst/audio/gstaudioutilsprivate.h b/gst-libs/gst/audio/gstaudioutilsprivate.h
new file mode 100644
index 0000000..553af0a
--- /dev/null
+++ b/gst-libs/gst/audio/gstaudioutilsprivate.h
@@ -0,0 +1,40 @@
+/* GStreamer
+ * Copyright (C) 2011 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>.
+ * Copyright (C) 2011 Nokia Corporation. All rights reserved.
+ *   Contact: Stefan Kost <stefan.kost@nokia.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_AUDIO_H__
+#include <gst/audio/audio.h>
+#endif
+
+#ifndef _GST_AUDIO_UTILS_PRIVATE_H_
+#define _GST_AUDIO_UTILS_PRIVATE_H_
+
+#include <gst/gst.h>
+
+G_BEGIN_DECLS
+
+/* Element utility functions */
+GstCaps *__gst_audio_element_proxy_getcaps (GstElement * element, GstPad * sinkpad,
+                                            GstPad * srcpad, GstCaps * initial_caps,
+                                            GstCaps * filter);
+
+G_END_DECLS
+
+#endif
diff --git a/gst-libs/gst/fft/Makefile.am b/gst-libs/gst/fft/Makefile.am
index 99c71ba..09b3d68 100644
--- a/gst-libs/gst/fft/Makefile.am
+++ b/gst-libs/gst/fft/Makefile.am
@@ -52,7 +52,7 @@
 gir_sources=$(patsubst %,$(srcdir)/%, $(libgstfft_@GST_API_VERSION@_la_SOURCES))
 
 GstFft-@GST_API_VERSION@.gir: $(INTROSPECTION_SCANNER) libgstfft-@GST_API_VERSION@.la
-	$(AM_V_GEN)PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" \
+	$(AM_V_GEN)PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" GI_SCANNER_DISABLE_CACHE=yes\
 		GST_PLUGIN_SYSTEM_PATH_1_0="" GST_PLUGIN_PATH_1_0="" GST_REGISTRY_UPDATE=no \
 		$(INTROSPECTION_SCANNER) -v --namespace GstFft \
 		--nsversion=@GST_API_VERSION@ \
@@ -90,17 +90,3 @@
 
 CLEANFILES = $(BUILT_GIRSOURCES) $(typelibs_DATA)
 endif
-
-Android.mk: Makefile.am
-	androgenizer -:PROJECT libgstfft -:SHARED libgstfft-@GST_API_VERSION@ \
-	 -:TAGS eng debug \
-         -:REL_TOP $(top_srcdir) -:ABS_TOP $(abs_top_srcdir) \
-	 -:SOURCES $(libgstfft_@GST_API_VERSION@_la_SOURCES) \
-	 -:CFLAGS $(DEFS) $(libgstfft_@GST_API_VERSION@_la_CFLAGS) \
-	 -:LDFLAGS $(libgstfft_@GST_API_VERSION@_la_LDFLAGS) \
-	           $(libgstfft_@GST_API_VERSION@_la_LIBADD) \
-	           -ldl \
-	 -:HEADER_TARGET gstreamer-@GST_API_VERSION@/gst/fft \
-	 -:HEADERS $(libgstfftinclude_HEADERS) \
-	 -:PASSTHROUGH LOCAL_ARM_MODE:=arm \
-	> $@
diff --git a/gst-libs/gst/fft/Makefile.in b/gst-libs/gst/fft/Makefile.in
index b33304c..4b21b2d 100644
--- a/gst-libs/gst/fft/Makefile.in
+++ b/gst-libs/gst/fft/Makefile.in
@@ -1,7 +1,7 @@
-# Makefile.in generated by automake 1.14.1 from Makefile.am.
+# Makefile.in generated by automake 1.15 from Makefile.am.
 # @configure_input@
 
-# Copyright (C) 1994-2013 Free Software Foundation, Inc.
+# 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,
@@ -17,7 +17,17 @@
 
 
 VPATH = @srcdir@
-am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)'
+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 \
       ?) ;; \
@@ -82,10 +92,6 @@
 host_triplet = @host@
 target_triplet = @target@
 subdir = gst-libs/gst/fft
-DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \
-	$(top_srcdir)/depcomp \
-	$(libgstfft_@GST_API_VERSION@_include_HEADERS) \
-	$(noinst_HEADERS)
 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 \
@@ -106,7 +112,6 @@
 	$(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-x11.m4 \
 	$(top_srcdir)/common/m4/gst.m4 \
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
@@ -123,6 +128,9 @@
 	$(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am \
+	$(libgstfft_@GST_API_VERSION@_include_HEADERS) \
+	$(noinst_HEADERS) $(am__DIST_COMMON)
 mkinstalldirs = $(install_sh) -d
 CONFIG_HEADER = $(top_builddir)/config.h
 CONFIG_CLEAN_FILES =
@@ -248,6 +256,7 @@
   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@
@@ -308,6 +317,8 @@
 GIO_CFLAGS = @GIO_CFLAGS@
 GIO_LDFLAGS = @GIO_LDFLAGS@
 GIO_LIBS = @GIO_LIBS@
+GIO_UNIX_2_0_CFLAGS = @GIO_UNIX_2_0_CFLAGS@
+GIO_UNIX_2_0_LIBS = @GIO_UNIX_2_0_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
@@ -337,6 +348,8 @@
 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_OPTION_CFLAGS = @GST_OPTION_CFLAGS@
 GST_OPTION_CXXFLAGS = @GST_OPTION_CXXFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
@@ -364,7 +377,6 @@
 GTK_X11_CFLAGS = @GTK_X11_CFLAGS@
 GTK_X11_LIBS = @GTK_X11_LIBS@
 HAVE_CDPARANOIA = @HAVE_CDPARANOIA@
-HAVE_X = @HAVE_X@
 HAVE_XSHM = @HAVE_XSHM@
 HAVE_ZLIB = @HAVE_ZLIB@
 HTML_DIR = @HTML_DIR@
@@ -379,6 +391,7 @@
 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@
@@ -468,13 +481,12 @@
 XGETTEXT = @XGETTEXT@
 XGETTEXT_015 = @XGETTEXT_015@
 XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
-XMKMF = @XMKMF@
+XSHM_CFLAGS = @XSHM_CFLAGS@
 XSHM_LIBS = @XSHM_LIBS@
+XVIDEO_CFLAGS = @XVIDEO_CFLAGS@
 XVIDEO_LIBS = @XVIDEO_LIBS@
 X_CFLAGS = @X_CFLAGS@
-X_EXTRA_LIBS = @X_EXTRA_LIBS@
 X_LIBS = @X_LIBS@
-X_PRE_LIBS = @X_PRE_LIBS@
 ZLIB_CFLAGS = @ZLIB_CFLAGS@
 ZLIB_LIBS = @ZLIB_LIBS@
 abs_builddir = @abs_builddir@
@@ -527,6 +539,7 @@
 psdir = @psdir@
 pyexecdir = @pyexecdir@
 pythondir = @pythondir@
+runstatedir = @runstatedir@
 sbindir = @sbindir@
 sharedstatedir = @sharedstatedir@
 srcdir = @srcdir@
@@ -609,7 +622,6 @@
 	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu gst-libs/gst/fft/Makefile'; \
 	$(am__cd) $(top_srcdir) && \
 	  $(AUTOMAKE) --gnu gst-libs/gst/fft/Makefile
-.PRECIOUS: Makefile
 Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
 	@case '$?' in \
 	  *config.status*) \
@@ -1086,9 +1098,11 @@
 	uninstall-libgstfft_@GST_API_VERSION@_includeHEADERS \
 	uninstall-typelibsDATA
 
+.PRECIOUS: Makefile
+
 
 @HAVE_INTROSPECTION_TRUE@GstFft-@GST_API_VERSION@.gir: $(INTROSPECTION_SCANNER) libgstfft-@GST_API_VERSION@.la
-@HAVE_INTROSPECTION_TRUE@	$(AM_V_GEN)PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" \
+@HAVE_INTROSPECTION_TRUE@	$(AM_V_GEN)PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" GI_SCANNER_DISABLE_CACHE=yes\
 @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 GstFft \
 @HAVE_INTROSPECTION_TRUE@		--nsversion=@GST_API_VERSION@ \
@@ -1115,20 +1129,6 @@
 @HAVE_INTROSPECTION_TRUE@		--includedir=`PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" $(PKG_CONFIG) --variable=girdir gstreamer-@GST_API_VERSION@` \
 @HAVE_INTROSPECTION_TRUE@		$(INTROSPECTION_COMPILER_OPTS) $< -o $(@F)
 
-Android.mk: Makefile.am
-	androgenizer -:PROJECT libgstfft -:SHARED libgstfft-@GST_API_VERSION@ \
-	 -:TAGS eng debug \
-         -:REL_TOP $(top_srcdir) -:ABS_TOP $(abs_top_srcdir) \
-	 -:SOURCES $(libgstfft_@GST_API_VERSION@_la_SOURCES) \
-	 -:CFLAGS $(DEFS) $(libgstfft_@GST_API_VERSION@_la_CFLAGS) \
-	 -:LDFLAGS $(libgstfft_@GST_API_VERSION@_la_LDFLAGS) \
-	           $(libgstfft_@GST_API_VERSION@_la_LIBADD) \
-	           -ldl \
-	 -:HEADER_TARGET gstreamer-@GST_API_VERSION@/gst/fft \
-	 -:HEADERS $(libgstfftinclude_HEADERS) \
-	 -:PASSTHROUGH LOCAL_ARM_MODE:=arm \
-	> $@
-
 # 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-libs/gst/fft/gstfftf32.c b/gst-libs/gst/fft/gstfftf32.c
index c803d30..eff4413 100644
--- a/gst-libs/gst/fft/gstfftf32.c
+++ b/gst-libs/gst/fft/gstfftf32.c
@@ -69,7 +69,7 @@
 };
 
 /**
- * gst_fft_f32_new:
+ * gst_fft_f32_new: (skip)
  * @len: Length of the FFT in the time domain
  * @inverse: %TRUE if the #GstFFTF32 instance should be used for the inverse FFT
  *
diff --git a/gst-libs/gst/fft/gstfftf64.c b/gst-libs/gst/fft/gstfftf64.c
index 33be8fd..7ccbcb0 100644
--- a/gst-libs/gst/fft/gstfftf64.c
+++ b/gst-libs/gst/fft/gstfftf64.c
@@ -69,7 +69,7 @@
 };
 
 /**
- * gst_fft_f64_new:
+ * gst_fft_f64_new: (skip)
  * @len: Length of the FFT in the time domain
  * @inverse: %TRUE if the #GstFFTF64 instance should be used for the inverse FFT
  *
diff --git a/gst-libs/gst/fft/gstffts16.c b/gst-libs/gst/fft/gstffts16.c
index 9d07749..0188243 100644
--- a/gst-libs/gst/fft/gstffts16.c
+++ b/gst-libs/gst/fft/gstffts16.c
@@ -69,7 +69,7 @@
 };
 
 /**
- * gst_fft_s16_new:
+ * gst_fft_s16_new: (skip)
  * @len: Length of the FFT in the time domain
  * @inverse: %TRUE if the #GstFFTS16 instance should be used for the inverse FFT
  *
diff --git a/gst-libs/gst/fft/gstffts32.c b/gst-libs/gst/fft/gstffts32.c
index 597955f..ae7d5e5 100644
--- a/gst-libs/gst/fft/gstffts32.c
+++ b/gst-libs/gst/fft/gstffts32.c
@@ -68,7 +68,7 @@
 };
 
 /**
- * gst_fft_s32_new:
+ * gst_fft_s32_new: (skip)
  * @len: Length of the FFT in the time domain
  * @inverse: %TRUE if the #GstFFTS32 instance should be used for the inverse FFT
  *
diff --git a/gst-libs/gst/pbutils/Makefile.am b/gst-libs/gst/pbutils/Makefile.am
index c0f0091..64d5eb0 100644
--- a/gst-libs/gst/pbutils/Makefile.am
+++ b/gst-libs/gst/pbutils/Makefile.am
@@ -70,7 +70,7 @@
 gir_sources+=$(patsubst %,$(builddir)/%, $(nodist_libgstpbutils_@GST_API_VERSION@_la_SOURCES))
 
 GstPbutils-@GST_API_VERSION@.gir: $(INTROSPECTION_SCANNER) libgstpbutils-@GST_API_VERSION@.la
-	$(AM_V_GEN)PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" \
+	$(AM_V_GEN)PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" GI_SCANNER_DISABLE_CACHE=yes\
 		GST_PLUGIN_SYSTEM_PATH_1_0="" GST_PLUGIN_PATH_1_0="" GST_REGISTRY_UPDATE=no \
 		$(INTROSPECTION_SCANNER) -v --namespace GstPbutils \
 		--nsversion=@GST_API_VERSION@ \
@@ -100,7 +100,7 @@
 		--pkg gstreamer-video-@GST_API_VERSION@ \
 		--pkg gstreamer-audio-@GST_API_VERSION@ \
 		--pkg-export gstreamer-pbutils-@GST_API_VERSION@ \
-		--add-init-section="gst_init(NULL,NULL);" \
+		--add-init-section="$(INTROSPECTION_INIT)" \
 		--output $@ \
 		$(gir_headers) \
 		$(gir_sources)
@@ -128,19 +128,3 @@
 
 CLEANFILES += $(BUILT_GIRSOURCES) $(typelibs_DATA)
 endif
-
-Android.mk: Makefile.am $(BUILT_SOURCES)
-	androgenizer -:PROJECT libgstpbutils -:SHARED libgstpbutils-@GST_API_VERSION@ \
-	 -:TAGS eng debug \
-         -:REL_TOP $(top_srcdir) -:ABS_TOP $(abs_top_srcdir) \
-	 -:SOURCES $(libgstpbutils_@GST_API_VERSION@_la_SOURCES) \
-	           $(nodist_libgstpbutils_@GST_API_VERSION@_la_SOURCES) \
-	 -:CFLAGS $(DEFS) $(DEFAULT_INCLUDES) $(libgstpbutils_@GST_API_VERSION@_la_CFLAGS) \
-	 -:LDFLAGS $(libgstpbutils_@GST_API_VERSION@_la_LDFLAGS) \
-	           $(libgstpbutils_@GST_API_VERSION@_la_LIBADD) \
-	           -ldl \
-	 -:HEADER_TARGET gstreamer-@GST_API_VERSION@/gst/pbutils \
-	 -:HEADERS $(libgstpbutils_@GST_API_VERSION@include_HEADERS) \
-	           $(nodist_libgstpbutils_@GST_API_VERSION@include_HEADERS) \
-	 -:PASSTHROUGH LOCAL_ARM_MODE:=arm \
-	> $@
diff --git a/gst-libs/gst/pbutils/Makefile.in b/gst-libs/gst/pbutils/Makefile.in
index 018a4d6..72c9fa4 100644
--- a/gst-libs/gst/pbutils/Makefile.in
+++ b/gst-libs/gst/pbutils/Makefile.in
@@ -1,7 +1,7 @@
-# Makefile.in generated by automake 1.14.1 from Makefile.am.
+# Makefile.in generated by automake 1.15 from Makefile.am.
 # @configure_input@
 
-# Copyright (C) 1994-2013 Free Software Foundation, Inc.
+# 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,
@@ -25,7 +25,17 @@
 
 
 VPATH = @srcdir@
-am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)'
+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 \
       ?) ;; \
@@ -89,11 +99,6 @@
 build_triplet = @build@
 host_triplet = @host@
 target_triplet = @target@
-DIST_COMMON = $(top_srcdir)/common/gst-glib-gen.mak \
-	$(srcdir)/Makefile.in $(srcdir)/Makefile.am \
-	$(srcdir)/gstpluginsbaseversion.h.in $(top_srcdir)/depcomp \
-	$(libgstpbutils_@GST_API_VERSION@include_HEADERS) \
-	$(noinst_HEADERS)
 @HAVE_INTROSPECTION_TRUE@am__append_1 = $(BUILT_GIRSOURCES) $(typelibs_DATA)
 subdir = gst-libs/gst/pbutils
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
@@ -116,7 +121,6 @@
 	$(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-x11.m4 \
 	$(top_srcdir)/common/m4/gst.m4 \
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
@@ -133,6 +137,9 @@
 	$(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am \
+	$(libgstpbutils_@GST_API_VERSION@include_HEADERS) \
+	$(noinst_HEADERS) $(am__DIST_COMMON)
 mkinstalldirs = $(install_sh) -d
 CONFIG_HEADER = $(top_builddir)/config.h
 CONFIG_CLEAN_FILES = gstpluginsbaseversion.h
@@ -262,6 +269,9 @@
   done | $(am__uniquify_input)`
 ETAGS = etags
 CTAGS = ctags
+am__DIST_COMMON = $(srcdir)/Makefile.in \
+	$(srcdir)/gstpluginsbaseversion.h.in \
+	$(top_srcdir)/common/gst-glib-gen.mak $(top_srcdir)/depcomp
 DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
 ACLOCAL = @ACLOCAL@
 ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@
@@ -322,6 +332,8 @@
 GIO_CFLAGS = @GIO_CFLAGS@
 GIO_LDFLAGS = @GIO_LDFLAGS@
 GIO_LIBS = @GIO_LIBS@
+GIO_UNIX_2_0_CFLAGS = @GIO_UNIX_2_0_CFLAGS@
+GIO_UNIX_2_0_LIBS = @GIO_UNIX_2_0_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
@@ -351,6 +363,8 @@
 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_OPTION_CFLAGS = @GST_OPTION_CFLAGS@
 GST_OPTION_CXXFLAGS = @GST_OPTION_CXXFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
@@ -378,7 +392,6 @@
 GTK_X11_CFLAGS = @GTK_X11_CFLAGS@
 GTK_X11_LIBS = @GTK_X11_LIBS@
 HAVE_CDPARANOIA = @HAVE_CDPARANOIA@
-HAVE_X = @HAVE_X@
 HAVE_XSHM = @HAVE_XSHM@
 HAVE_ZLIB = @HAVE_ZLIB@
 HTML_DIR = @HTML_DIR@
@@ -393,6 +406,7 @@
 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@
@@ -482,13 +496,12 @@
 XGETTEXT = @XGETTEXT@
 XGETTEXT_015 = @XGETTEXT_015@
 XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
-XMKMF = @XMKMF@
+XSHM_CFLAGS = @XSHM_CFLAGS@
 XSHM_LIBS = @XSHM_LIBS@
+XVIDEO_CFLAGS = @XVIDEO_CFLAGS@
 XVIDEO_LIBS = @XVIDEO_LIBS@
 X_CFLAGS = @X_CFLAGS@
-X_EXTRA_LIBS = @X_EXTRA_LIBS@
 X_LIBS = @X_LIBS@
-X_PRE_LIBS = @X_PRE_LIBS@
 ZLIB_CFLAGS = @ZLIB_CFLAGS@
 ZLIB_LIBS = @ZLIB_LIBS@
 abs_builddir = @abs_builddir@
@@ -541,6 +554,7 @@
 psdir = @psdir@
 pyexecdir = @pyexecdir@
 pythondir = @pythondir@
+runstatedir = @runstatedir@
 sbindir = @sbindir@
 sharedstatedir = @sharedstatedir@
 srcdir = @srcdir@
@@ -648,7 +662,6 @@
 	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu gst-libs/gst/pbutils/Makefile'; \
 	$(am__cd) $(top_srcdir) && \
 	  $(AUTOMAKE) --gnu gst-libs/gst/pbutils/Makefile
-.PRECIOUS: Makefile
 Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
 	@case '$?' in \
 	  *config.status*) \
@@ -657,7 +670,7 @@
 	    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:
+$(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
@@ -1142,6 +1155,8 @@
 	uninstall-nodist_libgstpbutils_@GST_API_VERSION@includeHEADERS \
 	uninstall-typelibsDATA
 
+.PRECIOUS: Makefile
+
 
 # these are all the rules generating the relevant files
 $(glib_gen_basename)-marshal.h: $(glib_gen_basename)-marshal.list
@@ -1180,7 +1195,7 @@
 	@touch $@
 
 @HAVE_INTROSPECTION_TRUE@GstPbutils-@GST_API_VERSION@.gir: $(INTROSPECTION_SCANNER) libgstpbutils-@GST_API_VERSION@.la
-@HAVE_INTROSPECTION_TRUE@	$(AM_V_GEN)PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" \
+@HAVE_INTROSPECTION_TRUE@	$(AM_V_GEN)PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" GI_SCANNER_DISABLE_CACHE=yes\
 @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 GstPbutils \
 @HAVE_INTROSPECTION_TRUE@		--nsversion=@GST_API_VERSION@ \
@@ -1210,7 +1225,7 @@
 @HAVE_INTROSPECTION_TRUE@		--pkg gstreamer-video-@GST_API_VERSION@ \
 @HAVE_INTROSPECTION_TRUE@		--pkg gstreamer-audio-@GST_API_VERSION@ \
 @HAVE_INTROSPECTION_TRUE@		--pkg-export gstreamer-pbutils-@GST_API_VERSION@ \
-@HAVE_INTROSPECTION_TRUE@		--add-init-section="gst_init(NULL,NULL);" \
+@HAVE_INTROSPECTION_TRUE@		--add-init-section="$(INTROSPECTION_INIT)" \
 @HAVE_INTROSPECTION_TRUE@		--output $@ \
 @HAVE_INTROSPECTION_TRUE@		$(gir_headers) \
 @HAVE_INTROSPECTION_TRUE@		$(gir_sources)
@@ -1227,22 +1242,6 @@
 @HAVE_INTROSPECTION_TRUE@		--includedir="$(top_builddir)/gst-libs/gst/audio/" \
 @HAVE_INTROSPECTION_TRUE@		$(INTROSPECTION_COMPILER_OPTS) $< -o $(@F)
 
-Android.mk: Makefile.am $(BUILT_SOURCES)
-	androgenizer -:PROJECT libgstpbutils -:SHARED libgstpbutils-@GST_API_VERSION@ \
-	 -:TAGS eng debug \
-         -:REL_TOP $(top_srcdir) -:ABS_TOP $(abs_top_srcdir) \
-	 -:SOURCES $(libgstpbutils_@GST_API_VERSION@_la_SOURCES) \
-	           $(nodist_libgstpbutils_@GST_API_VERSION@_la_SOURCES) \
-	 -:CFLAGS $(DEFS) $(DEFAULT_INCLUDES) $(libgstpbutils_@GST_API_VERSION@_la_CFLAGS) \
-	 -:LDFLAGS $(libgstpbutils_@GST_API_VERSION@_la_LDFLAGS) \
-	           $(libgstpbutils_@GST_API_VERSION@_la_LIBADD) \
-	           -ldl \
-	 -:HEADER_TARGET gstreamer-@GST_API_VERSION@/gst/pbutils \
-	 -:HEADERS $(libgstpbutils_@GST_API_VERSION@include_HEADERS) \
-	           $(nodist_libgstpbutils_@GST_API_VERSION@include_HEADERS) \
-	 -:PASSTHROUGH LOCAL_ARM_MODE:=arm \
-	> $@
-
 # 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-libs/gst/pbutils/codec-utils.c b/gst-libs/gst/pbutils/codec-utils.c
index 5964975..8d98481 100644
--- a/gst-libs/gst/pbutils/codec-utils.c
+++ b/gst-libs/gst/pbutils/codec-utils.c
@@ -258,12 +258,19 @@
       num_cpe = 2;
       break;
     case 7:
+    case 12:
+    case 14:
       /* front left, right, center and LFE; outside front left and right;
        * rear left and right surround */
       num_sce = 1;
       num_cpe = 3;
       num_lfe = 1;
       break;
+    case 11:
+      num_sce = 2;
+      num_cpe = 2;
+      num_lfe = 1;
+      break;
     default:
       GST_WARNING ("Unknown channel config in header: %d", channel_config);
       return NULL;
@@ -320,6 +327,10 @@
       ret = 4;
     else if (num_channels <= 5 && rate <= 96000 && pcu <= 38 && rcu <= 15)
       ret = 5;
+    else if (num_channels <= 7 && rate <= 48000 && pcu <= 25 && rcu <= 19)
+      ret = 6;
+    else if (num_channels <= 7 && rate <= 96000 && pcu <= 50 && rcu <= 19)
+      ret = 7;
   } else {
     /* Return the level as per the 'Main Profile' */
     if (pcu < 40 && rcu < 20)
@@ -682,7 +693,6 @@
 gst_codec_utils_h265_get_profile (const guint8 * profile_tier_level, guint len)
 {
   const gchar *profile = NULL;
-  gint gpcf1 = 0, gpcf2 = 0, gpcf3 = 0;
   gint profile_idc;
 
   g_return_val_if_fail (profile_tier_level != NULL, NULL);
@@ -694,15 +704,11 @@
 
   profile_idc = (profile_tier_level[0] & 0x1f);
 
-  gpcf1 = (profile_tier_level[1] & 0x40) >> 6;
-  gpcf2 = (profile_tier_level[1] & 0x20) >> 5;
-  gpcf3 = (profile_tier_level[1] & 0x10) >> 4;
-
-  if (profile_idc == 1 || gpcf1)
+  if (profile_idc == 1)
     profile = "main";
-  else if (profile_idc == 2 || gpcf2)
+  else if (profile_idc == 2)
     profile = "main-10";
-  else if (profile_idc == 3 || gpcf3)
+  else if (profile_idc == 3)
     profile = "main-still-picture";
   else
     profile = NULL;
diff --git a/gst-libs/gst/pbutils/descriptions.c b/gst-libs/gst/pbutils/descriptions.c
index b34ae98..10c6c63 100644
--- a/gst-libs/gst/pbutils/descriptions.c
+++ b/gst-libs/gst/pbutils/descriptions.c
@@ -194,11 +194,11 @@
   {"video/x-apple-video", "Apple video", FLAG_VIDEO, ""},
   {"video/x-aasc", "Autodesk Animator", FLAG_VIDEO, ""},
   {"video/x-camtasia", "TechSmith Camtasia", FLAG_VIDEO, ""},
+  {"video/x-cavs", "Chinese AVS (CAVS)", FLAG_VIDEO, ""},
   {"video/x-cdxa", "RIFF/CDXA (VCD)", AV_CONTAINER, ""},
   {"video/x-cinepak", "Cinepak Video", FLAG_VIDEO, ""},
   {"video/x-cirrus-logic-accupak", "Cirrus Logipak AccuPak", FLAG_VIDEO, ""},
   {"video/x-compressed-yuv", N_("CYUV Lossless"), FLAG_VIDEO, ""},
-  {"video/x-dirac", "Dirac", FLAG_VIDEO, ""},
   {"video/x-dnxhd", "Digital Nonlinear Extensible High Definition (DNxHD)",
       FLAG_VIDEO, ""},
   {"subpicture/x-dvd", "DVD subpicture", FLAG_VIDEO, ""},
@@ -305,6 +305,7 @@
   {"video/mpeg", NULL, FLAG_VIDEO, ""},
   {"video/x-asus", NULL, FLAG_VIDEO, ""},
   {"video/x-ati-vcr", NULL, FLAG_VIDEO, ""},
+  {"video/x-dirac", NULL, FLAG_VIDEO, ""},
   {"video/x-divx", NULL, FLAG_VIDEO, ""},
   {"video/x-dv", "Digital Video (DV) System Stream",
       FLAG_CONTAINER | FLAG_SYSTEMSTREAM, "dv"},
@@ -329,6 +330,102 @@
   {"video/x-tscc", NULL, FLAG_VIDEO, ""}
 };
 
+static const gchar *
+pbutils_desc_get_profile_name_from_nick (const gchar * map, gsize map_len,
+    const gchar * nick)
+{
+  const gchar *end = map + map_len;
+  const gchar *p;
+
+  p = map;
+  while (*p != '\0' && p < end) {
+    guint len = strlen (p);
+
+    if (strcmp (p, nick) == 0)
+      return p + len + 1;
+    p += len + 1;
+    p += strlen (p) + 1;
+  }
+  return NULL;
+}
+
+static const gchar *
+pbutils_desc_get_mpeg2v_profile_name_from_nick (const gchar * nick)
+{
+  static const gchar map[] =
+      "simple\000Simple\000main\000Main\000high\000High\000";
+
+  return pbutils_desc_get_profile_name_from_nick (map, sizeof (map), nick);
+}
+
+static const gchar *
+pbutils_desc_get_mpeg4v_profile_name_from_nick (const gchar * nick)
+{
+  static const gchar map[] = "simple\000Simple\000"
+      "simple-scalable\000Simple Scalable\000"
+      "core\000Core\000"
+      "main\000Main\000"
+      "n-bit\000N-bit\000"
+      "scalable\000Scalable\000"
+      "hybrid\000Hybrid\000"
+      "advanced-real-time-simple\000Advanced Real-Time Simple\000"
+      "core-scalable\000Core-Scalable\000"
+      "advanced-coding-efficiency\000Advanced Coding Efficiency\000"
+      "advanced-core\000Advanced Core\000"
+      "advanced-scalable-texture\000Advanced Scalable Texture\000"
+      "simple-face\000Simple Face Animation\000"
+      "simple-fba\000Simple FBA\000"
+      "simple-studio\000Simple Studio\000"
+      "core-studio\000Core Studio\000"
+      "advanced-simple\000Advanced Simple\000"
+      "fine-granularity-scalable\000Fine Granularity Scalable\000"
+      "basic-animated-texture\000Basic Animated Texture\000"
+      "baseline\000Baseline Profile\000";
+
+  return pbutils_desc_get_profile_name_from_nick (map, sizeof (map), nick);
+}
+
+static const gchar *
+pbutils_desc_get_h264_profile_name_from_nick (const gchar * nick)
+{
+  static const gchar map[] = "baseline\000Baseline\000"
+      "constrained-baseline\000Constrained Baseline\000"
+      "main\000Main\000"
+      "extended\000Extended\000"
+      "high\000High\000"
+      "high-10-intra\000High 10 Intra\000"
+      "high-10\000High 10\000"
+      "high-4:2:2-intra\000High 4:2:2 Intra\000"
+      "high-4:2:2\000High 4:2:2\000"
+      "high-4:4:4-intra\000High 4:4:4 Intra\000"
+      "high-4:4:4\000High 4:4:4\000"
+      "cavlc-4:4:4-intra\000CAVLC 4:4:4 Intra\000"
+      "multiview-high\000Multiview High\000"
+      "stereo-high\000Stereo High\000"
+      "scalable-constrained-baseline\000Scalable Constrained Baseline\000"
+      "scalable-baseline\000Scalable Baseline\000"
+      "scalable-high\000Scalable High\000";
+
+  return pbutils_desc_get_profile_name_from_nick (map, sizeof (map), nick);
+}
+
+static const gchar *
+pbutils_desc_get_h265_profile_name_from_nick (const gchar * nick)
+{
+  static const gchar map[] = "main\000Main\000"
+      "main-10\000Main 10\000"
+      "main-12\000Main 12\000"
+      "main-4:2:2-10\000Main 4:2:2 10\000"
+      "main-4:2:2-12\000Main 4:2:2 12\000"
+      "main-4:4:4\000Main 4:4:4\000"
+      "main-4:4:4-10\000Main 4:4:4 10\000"
+      "main-4:4:4-12\000Main 4:4:4 12\000"
+      "main-4:4:4-16-intra\000Main 4:4:4 16 Intra\000"
+      "main-still-picture\000Main Still Picture\000";
+
+  return pbutils_desc_get_profile_name_from_nick (map, sizeof (map), nick);
+}
+
 /* returns static descriptions and dynamic ones (such as video/x-raw),
  * or NULL if caps aren't known at all */
 static gchar *
@@ -432,6 +529,7 @@
     return g_strdup (ret);
   } else if (strcmp (info->type, "video/x-h264") == 0) {
     const gchar *variant, *ret;
+    const gchar *profile;
 
     variant = gst_structure_get_string (s, "variant");
     if (variant == NULL)
@@ -446,10 +544,34 @@
       GST_WARNING ("Unknown H264 variant '%s'", variant);
       ret = "H.264";
     }
-    return g_strdup (ret);
+    /* profile */
+    profile = gst_structure_get_string (s, "profile");
+    if (profile != NULL)
+      profile = pbutils_desc_get_h264_profile_name_from_nick (profile);
+    if (profile == NULL)
+      return g_strdup (ret);
+    return g_strdup_printf ("%s (%s Profile)", ret, profile);
   } else if (strcmp (info->type, "video/x-h265") == 0) {
-    /* TODO: Any variants? */
+    const gchar *profile = gst_structure_get_string (s, "profile");
+
+    if (profile != NULL)
+      profile = pbutils_desc_get_h265_profile_name_from_nick (profile);
+    if (profile != NULL)
+      return g_strdup_printf ("H.265 (%s Profile)", profile);
+
     return g_strdup ("H.265");
+  } else if (strcmp (info->type, "video/x-dirac") == 0) {
+    const gchar *profile = gst_structure_get_string (s, "profile");
+    if (profile == NULL)
+      return g_strdup ("Dirac");
+    if (strcmp (profile, "vc2-low-delay") == 0)
+      return g_strdup_printf ("Dirac (%s)", "VC-2 Low Delay Profile");
+    else if (strcmp (profile, "vc2-simple") == 0)
+      return g_strdup_printf ("Dirac (%s)", "VC-2 Simple Profile");
+    else if (strcmp (profile, "vc2-main") == 0)
+      return g_strdup_printf ("Dirac (%s)", "VC-2 Main Profile");
+    else
+      return g_strdup ("Dirac");
   } else if (strcmp (info->type, "video/x-divx") == 0) {
     gint ver = 0;
 
@@ -676,7 +798,19 @@
       if (sysstream) {
         return g_strdup_printf ("MPEG-%d System Stream", ver);
       } else {
-        return g_strdup_printf ("MPEG-%d Video", ver);
+        const gchar *profile = gst_structure_get_string (s, "profile");
+        if (profile != NULL) {
+          if (ver == 4)
+            profile = pbutils_desc_get_mpeg4v_profile_name_from_nick (profile);
+          else if (ver == 2)
+            profile = pbutils_desc_get_mpeg2v_profile_name_from_nick (profile);
+          else
+            profile = NULL;
+        }
+        if (profile != NULL)
+          return g_strdup_printf ("MPEG-%d Video (%s Profile)", ver, profile);
+        else
+          return g_strdup_printf ("MPEG-%d Video", ver);
       }
     }
     GST_WARNING ("Missing mpegversion field in mpeg video caps "
diff --git a/gst-libs/gst/pbutils/encoding-profile.c b/gst-libs/gst/pbutils/encoding-profile.c
index ac56436..c1f502e 100644
--- a/gst-libs/gst/pbutils/encoding-profile.c
+++ b/gst-libs/gst/pbutils/encoding-profile.c
@@ -188,6 +188,8 @@
   gchar *preset_name;
   guint presence;
   GstCaps *restriction;
+  gboolean allow_dynamic_output;
+  gboolean enabled;
 };
 
 struct _GstEncodingProfileClass
@@ -400,6 +402,20 @@
 }
 
 /**
+ * gst_encoding_profile_get_enabled:
+ * @profile: a #GstEncodingProfile
+ *
+ * Returns: Whther @profile is enabled or not
+ */
+gboolean
+gst_encoding_profile_is_enabled (GstEncodingProfile * profile)
+{
+  g_return_val_if_fail (GST_IS_ENCODING_PROFILE (profile), FALSE);
+
+  return profile->enabled;
+}
+
+/**
  * gst_encoding_profile_get_restriction:
  * @profile: a #GstEncodingProfile
  *
@@ -465,6 +481,35 @@
 }
 
 /**
+ * gst_encoding_profile_get_allow_dynamic_output:
+ * @profile: a #GstEncodingProfile
+ *
+ * Get whether the format that has been negotiated in at some point can be renegotiated
+ * later during the encoding.
+ */
+gboolean
+gst_encoding_profile_get_allow_dynamic_output (GstEncodingProfile * profile)
+{
+  return profile->allow_dynamic_output;
+}
+
+/**
+ * gst_encoding_profile_set_allow_dynamic_output:
+ * @profile: a #GstEncodingProfile
+ * @allow_dynamic_output: Whether the format that has been negotiated first can be renegotiated
+ * during the encoding
+ *
+ * Sets whether the format that has been negotiated in at some point can be renegotiated
+ * later during the encoding.
+ */
+void
+gst_encoding_profile_set_allow_dynamic_output (GstEncodingProfile * profile,
+    gboolean allow_dynamic_output)
+{
+  profile->allow_dynamic_output = allow_dynamic_output;
+}
+
+/**
  * gst_encoding_profile_set_preset:
  * @profile: a #GstEncodingProfile
  * @preset: the element preset to use
@@ -513,6 +558,22 @@
 }
 
 /**
+ * gst_encoding_profile_set_enabled:
+ * @profile: a #GstEncodingProfile
+ * @enabled: %FALSE to disable #profile, %TRUE to enable it
+ *
+ * Set whether the profile should be used or not.
+ */
+void
+gst_encoding_profile_set_enabled (GstEncodingProfile * profile,
+    gboolean enabled)
+{
+  g_return_if_fail (GST_IS_ENCODING_PROFILE (profile));
+
+  profile->enabled = enabled;
+}
+
+/**
  * gst_encoding_profile_set_restriction:
  * @profile: a #GstEncodingProfile
  * @restriction: (transfer full): the restriction to apply
@@ -837,6 +898,8 @@
     prof->restriction = gst_caps_ref (restriction);
   prof->presence = presence;
   prof->preset_name = NULL;
+  prof->allow_dynamic_output = TRUE;
+  prof->enabled = TRUE;
 
   return prof;
 }
diff --git a/gst-libs/gst/pbutils/encoding-profile.h b/gst-libs/gst/pbutils/encoding-profile.h
index 60e148d..a667f8c 100644
--- a/gst-libs/gst/pbutils/encoding-profile.h
+++ b/gst-libs/gst/pbutils/encoding-profile.h
@@ -125,6 +125,9 @@
 GstCaps *       gst_encoding_profile_get_format         (GstEncodingProfile *profile);
 void            gst_encoding_profile_set_format         (GstEncodingProfile *profile,
                                                          GstCaps *format);
+gboolean  gst_encoding_profile_get_allow_dynamic_output (GstEncodingProfile *profile);
+void      gst_encoding_profile_set_allow_dynamic_output (GstEncodingProfile *profile,
+                                                         gboolean allow_dynamic_output);
 const gchar *   gst_encoding_profile_get_preset         (GstEncodingProfile *profile);
 const gchar *   gst_encoding_profile_get_preset_name    (GstEncodingProfile *profile);
 void            gst_encoding_profile_set_preset         (GstEncodingProfile *profile,
@@ -149,6 +152,9 @@
                                                 const gchar *profilename,
                                                 const gchar *category);
 
+gboolean        gst_encoding_profile_is_enabled        (GstEncodingProfile *profile);
+void            gst_encoding_profile_set_enabled       (GstEncodingProfile *profile,
+                                                         gboolean enabled);
 /* GstEncodingContainerProfile API */
 gboolean        gst_encoding_container_profile_add_profile       (GstEncodingContainerProfile *container,
                                                                   GstEncodingProfile *profile);
diff --git a/gst-libs/gst/pbutils/gstdiscoverer-types.c b/gst-libs/gst/pbutils/gstdiscoverer-types.c
index 9cda787..e743430 100644
--- a/gst-libs/gst/pbutils/gstdiscoverer-types.c
+++ b/gst-libs/gst/pbutils/gstdiscoverer-types.c
@@ -690,7 +690,7 @@
  * @info: a #GstDiscovererStreamInfo
  *
  * Deprecated: This functions is deprecated since version 1.4, use
- * gst_discoverer_stream_get_missing_elements_installer_details
+ * #gst_discoverer_info_get_missing_elements_installer_details
  *
  * Returns: (transfer none): additional information regarding the stream (for
  * example codec version, profile, etc..). If you wish to use the #GstStructure
@@ -1016,7 +1016,7 @@
  * @info: a #GstDiscovererInfo
  *
  * Deprecated: This functions is deprecated since version 1.4, use
- * gst_discoverer_info_get_missing_elements_installer_details
+ * #gst_discoverer_info_get_missing_elements_installer_details
  *
  * Returns: (transfer none): Miscellaneous information stored as a #GstStructure
  * (for example: information about missing plugins). If you wish to use the
@@ -1085,9 +1085,10 @@
  *
  * Get the installer details for missing elements
  *
- * Returns: (transfer full) (array zero-terminated=1): An array of strings
+ * Returns: (transfer none) (array zero-terminated=1): An array of strings
  * containing informations about how to install the various missing elements
- * for @info to be usable. Free with g_strfreev().
+ * for @info to be usable. If you wish to use the strings after the life-time
+ * of @info, you will need to copy them.
  *
  * Since: 1.4
  */
diff --git a/gst-libs/gst/pbutils/gstdiscoverer.c b/gst-libs/gst/pbutils/gstdiscoverer.c
index da650f3..2964933 100644
--- a/gst-libs/gst/pbutils/gstdiscoverer.c
+++ b/gst-libs/gst/pbutils/gstdiscoverer.c
@@ -1423,7 +1423,9 @@
 
       gst_message_parse_toc (msg, &tmp, NULL);
       GST_DEBUG_OBJECT (GST_MESSAGE_SRC (msg), "Got toc %" GST_PTR_FORMAT, tmp);
-      dc->priv->current_info->toc = tmp;
+      if (dc->priv->current_info->toc)
+        gst_toc_unref (dc->priv->current_info->toc);
+      dc->priv->current_info->toc = tmp;        /* transfer ownership */
       GST_DEBUG_OBJECT (GST_MESSAGE_SRC (msg), "Current info %p, toc %"
           GST_PTR_FORMAT, dc->priv->current_info, tmp);
     }
@@ -1462,6 +1464,11 @@
     dc->priv->current_info->result = GST_DISCOVERER_TIMEOUT;
   }
 
+  DISCO_LOCK (dc);
+  dc->priv->processing = FALSE;
+  DISCO_UNLOCK (dc);
+
+
   GST_DEBUG ("Done");
 
   g_timer_stop (timer);
@@ -1630,6 +1637,316 @@
   return res;
 }
 
+/* Serializing code */
+
+static GVariant *
+_serialize_common_stream_info (GstDiscovererStreamInfo * sinfo,
+    GstDiscovererSerializeFlags flags)
+{
+  GVariant *common;
+  gchar *caps_str = NULL, *tags_str = NULL, *misc_str = NULL;
+
+  if (sinfo->caps && (flags & GST_DISCOVERER_SERIALIZE_CAPS))
+    caps_str = gst_caps_to_string (sinfo->caps);
+
+  if (sinfo->tags && (flags & GST_DISCOVERER_SERIALIZE_TAGS))
+    tags_str = gst_tag_list_to_string (sinfo->tags);
+
+  if (sinfo->misc && (flags & GST_DISCOVERER_SERIALIZE_MISC))
+    misc_str = gst_structure_to_string (sinfo->misc);
+
+  common =
+      g_variant_new ("(msmsmsms)", sinfo->stream_id, caps_str, tags_str,
+      misc_str);
+
+  g_free (caps_str);
+  g_free (tags_str);
+  g_free (misc_str);
+
+  return common;
+}
+
+static GVariant *
+_serialize_info (GstDiscovererInfo * info, GstDiscovererSerializeFlags flags)
+{
+  gchar *tags_str = NULL;
+  GVariant *ret;
+
+  if (info->tags && (flags & GST_DISCOVERER_SERIALIZE_TAGS))
+    tags_str = gst_tag_list_to_string (info->tags);
+
+  ret =
+      g_variant_new ("(mstbms)", info->uri, info->duration, info->seekable,
+      tags_str);
+
+  g_free (tags_str);
+
+  return ret;
+}
+
+static GVariant *
+_serialize_audio_stream_info (GstDiscovererAudioInfo * ainfo)
+{
+  return g_variant_new ("(uuuuums)",
+      ainfo->channels,
+      ainfo->sample_rate,
+      ainfo->bitrate, ainfo->max_bitrate, ainfo->depth, ainfo->language);
+}
+
+static GVariant *
+_serialize_video_stream_info (GstDiscovererVideoInfo * vinfo)
+{
+  return g_variant_new ("(uuuuuuubuub)",
+      vinfo->width,
+      vinfo->height,
+      vinfo->depth,
+      vinfo->framerate_num,
+      vinfo->framerate_denom,
+      vinfo->par_num,
+      vinfo->par_denom,
+      vinfo->interlaced, vinfo->bitrate, vinfo->max_bitrate, vinfo->is_image);
+}
+
+static GVariant *
+_serialize_subtitle_stream_info (GstDiscovererSubtitleInfo * sinfo)
+{
+  return g_variant_new ("ms", sinfo->language);
+}
+
+static GVariant *
+gst_discoverer_info_to_variant_recurse (GstDiscovererStreamInfo * sinfo,
+    GstDiscovererSerializeFlags flags)
+{
+  GVariant *stream_variant = NULL;
+  GVariant *common_stream_variant =
+      _serialize_common_stream_info (sinfo, flags);
+
+  if (GST_IS_DISCOVERER_CONTAINER_INFO (sinfo)) {
+    GList *tmp;
+    GList *streams =
+        gst_discoverer_container_info_get_streams (GST_DISCOVERER_CONTAINER_INFO
+        (sinfo));
+
+    if (g_list_length (streams) > 0) {
+      GVariantBuilder children;
+      GVariant *child_variant;
+      g_variant_builder_init (&children, G_VARIANT_TYPE_ARRAY);
+
+      for (tmp = streams; tmp; tmp = tmp->next) {
+        child_variant =
+            gst_discoverer_info_to_variant_recurse (tmp->data, flags);
+        g_variant_builder_add (&children, "v", child_variant);
+      }
+      stream_variant =
+          g_variant_new ("(yvav)", 'c', common_stream_variant, &children);
+    } else {
+      stream_variant =
+          g_variant_new ("(yvav)", 'c', common_stream_variant, NULL);
+    }
+
+    gst_discoverer_stream_info_list_free (streams);
+  } else if (GST_IS_DISCOVERER_AUDIO_INFO (sinfo)) {
+    GVariant *audio_stream_info =
+        _serialize_audio_stream_info (GST_DISCOVERER_AUDIO_INFO (sinfo));
+    stream_variant =
+        g_variant_new ("(yvv)", 'a', common_stream_variant, audio_stream_info);
+  } else if (GST_IS_DISCOVERER_VIDEO_INFO (sinfo)) {
+    GVariant *video_stream_info =
+        _serialize_video_stream_info (GST_DISCOVERER_VIDEO_INFO (sinfo));
+    stream_variant =
+        g_variant_new ("(yvv)", 'v', common_stream_variant, video_stream_info);
+  } else if (GST_IS_DISCOVERER_SUBTITLE_INFO (sinfo)) {
+    GVariant *subtitle_stream_info =
+        _serialize_subtitle_stream_info (GST_DISCOVERER_SUBTITLE_INFO (sinfo));
+    stream_variant =
+        g_variant_new ("(yvv)", 's', common_stream_variant,
+        subtitle_stream_info);
+  }
+
+  return stream_variant;
+}
+
+/* Parsing code */
+
+#define GET_FROM_TUPLE(v, t, n, val) G_STMT_START{         \
+  GVariant *child = g_variant_get_child_value (v, n); \
+  *val = g_variant_get_##t(child); \
+  g_variant_unref (child); \
+}G_STMT_END
+
+static const gchar *
+_maybe_get_string_from_tuple (GVariant * tuple, guint index)
+{
+  const gchar *ret = NULL;
+  GVariant *maybe;
+  GET_FROM_TUPLE (tuple, maybe, index, &maybe);
+  if (maybe) {
+    ret = g_variant_get_string (maybe, NULL);
+    g_variant_unref (maybe);
+  }
+
+  return ret;
+}
+
+static void
+_parse_info (GstDiscovererInfo * info, GVariant * info_variant)
+{
+  const gchar *str;
+
+  str = _maybe_get_string_from_tuple (info_variant, 0);
+  if (str)
+    info->uri = g_strdup (str);
+
+  GET_FROM_TUPLE (info_variant, uint64, 1, &info->duration);
+  GET_FROM_TUPLE (info_variant, boolean, 2, &info->seekable);
+
+  str = _maybe_get_string_from_tuple (info_variant, 3);
+  if (str)
+    info->tags = gst_tag_list_new_from_string (str);
+}
+
+static void
+_parse_common_stream_info (GstDiscovererStreamInfo * sinfo, GVariant * common)
+{
+  const gchar *str;
+
+  str = _maybe_get_string_from_tuple (common, 0);
+  if (str)
+    sinfo->stream_id = g_strdup (str);
+
+  str = _maybe_get_string_from_tuple (common, 1);
+  if (str)
+    sinfo->caps = gst_caps_from_string (str);
+
+  str = _maybe_get_string_from_tuple (common, 2);
+  if (str)
+    sinfo->tags = gst_tag_list_new_from_string (str);
+
+  str = _maybe_get_string_from_tuple (common, 3);
+  if (str)
+    sinfo->misc = gst_structure_new_from_string (str);
+
+  g_variant_unref (common);
+}
+
+static void
+_parse_audio_stream_info (GstDiscovererAudioInfo * ainfo, GVariant * specific)
+{
+  const gchar *str;
+
+  GET_FROM_TUPLE (specific, uint32, 0, &ainfo->channels);
+  GET_FROM_TUPLE (specific, uint32, 1, &ainfo->sample_rate);
+  GET_FROM_TUPLE (specific, uint32, 2, &ainfo->bitrate);
+  GET_FROM_TUPLE (specific, uint32, 3, &ainfo->max_bitrate);
+  GET_FROM_TUPLE (specific, uint32, 4, &ainfo->depth);
+
+  str = _maybe_get_string_from_tuple (specific, 5);
+
+  if (str)
+    ainfo->language = g_strdup (str);
+
+  g_variant_unref (specific);
+}
+
+static void
+_parse_video_stream_info (GstDiscovererVideoInfo * vinfo, GVariant * specific)
+{
+  GET_FROM_TUPLE (specific, uint32, 0, &vinfo->width);
+  GET_FROM_TUPLE (specific, uint32, 1, &vinfo->height);
+  GET_FROM_TUPLE (specific, uint32, 2, &vinfo->depth);
+  GET_FROM_TUPLE (specific, uint32, 3, &vinfo->framerate_num);
+  GET_FROM_TUPLE (specific, uint32, 4, &vinfo->framerate_denom);
+  GET_FROM_TUPLE (specific, uint32, 5, &vinfo->par_num);
+  GET_FROM_TUPLE (specific, uint32, 6, &vinfo->par_denom);
+  GET_FROM_TUPLE (specific, boolean, 7, &vinfo->interlaced);
+  GET_FROM_TUPLE (specific, uint32, 8, &vinfo->bitrate);
+  GET_FROM_TUPLE (specific, uint32, 9, &vinfo->max_bitrate);
+  GET_FROM_TUPLE (specific, boolean, 10, &vinfo->is_image);
+
+  g_variant_unref (specific);
+}
+
+static void
+_parse_subtitle_stream_info (GstDiscovererSubtitleInfo * sinfo,
+    GVariant * specific)
+{
+  GVariant *maybe;
+
+  maybe = g_variant_get_maybe (specific);
+  if (maybe) {
+    sinfo->language = g_strdup (g_variant_get_string (maybe, NULL));
+    g_variant_unref (maybe);
+  }
+
+  g_variant_unref (specific);
+}
+
+static GstDiscovererStreamInfo *
+_parse_discovery (GVariant * variant, GstDiscovererInfo * info)
+{
+  gchar type;
+  GVariant *common = g_variant_get_child_value (variant, 1);
+  GVariant *specific = g_variant_get_child_value (variant, 2);
+  GstDiscovererStreamInfo *sinfo = NULL;
+
+  GET_FROM_TUPLE (variant, byte, 0, &type);
+  switch (type) {
+    case 'c':
+      sinfo = g_object_new (GST_TYPE_DISCOVERER_CONTAINER_INFO, NULL);
+      break;
+    case 'a':
+      sinfo = g_object_new (GST_TYPE_DISCOVERER_AUDIO_INFO, NULL);
+      _parse_audio_stream_info (GST_DISCOVERER_AUDIO_INFO (sinfo),
+          g_variant_get_child_value (specific, 0));
+      break;
+    case 'v':
+      sinfo = g_object_new (GST_TYPE_DISCOVERER_VIDEO_INFO, NULL);
+      _parse_video_stream_info (GST_DISCOVERER_VIDEO_INFO (sinfo),
+          g_variant_get_child_value (specific, 0));
+      break;
+    case 's':
+      sinfo = g_object_new (GST_TYPE_DISCOVERER_SUBTITLE_INFO, NULL);
+      _parse_subtitle_stream_info (GST_DISCOVERER_SUBTITLE_INFO (sinfo),
+          g_variant_get_child_value (specific, 0));
+      break;
+    default:
+      GST_WARNING ("Unexpected discoverer info type %d", type);
+      goto out;
+  }
+
+  _parse_common_stream_info (sinfo, g_variant_get_child_value (common, 0));
+
+  info->stream_list = g_list_append (info->stream_list, sinfo);
+
+  if (!info->stream_info) {
+    info->stream_info = sinfo;
+  }
+
+  if (GST_IS_DISCOVERER_CONTAINER_INFO (sinfo)) {
+    GVariantIter iter;
+    GVariant *child;
+
+    GstDiscovererContainerInfo *cinfo = GST_DISCOVERER_CONTAINER_INFO (sinfo);
+    g_variant_iter_init (&iter, specific);
+    while ((child = g_variant_iter_next_value (&iter))) {
+      GstDiscovererStreamInfo *child_info;
+      child_info = _parse_discovery (g_variant_get_variant (child), info);
+      if (child_info != NULL) {
+        cinfo->streams =
+            g_list_append (cinfo->streams,
+            gst_discoverer_stream_info_ref (child_info));
+      }
+      g_variant_unref (child);
+    }
+  }
+
+out:
+
+  g_variant_unref (common);
+  g_variant_unref (specific);
+  g_variant_unref (variant);
+  return sinfo;
+}
 
 /**
  * gst_discoverer_start:
@@ -1790,6 +2107,9 @@
   if (G_UNLIKELY (discoverer->priv->current_info)) {
     DISCO_UNLOCK (discoverer);
     GST_WARNING_OBJECT (discoverer, "Already handling a uri");
+    if (err)
+      *err = g_error_new (GST_CORE_ERROR, GST_CORE_ERROR_FAILED,
+          "Already handling a uri");
     return NULL;
   }
 
@@ -1847,3 +2167,71 @@
   }
   return res;
 }
+
+/**
+ * gst_discoverer_info_to_variant:
+ * @info: A #GstDiscovererInfo
+ * @flags: A combination of #GstDiscovererSerializeFlags to specify
+ * what needs to be serialized.
+ *
+ * Serializes @info to a #GVariant that can be parsed again
+ * through gst_discoverer_info_from_variant().
+ *
+ * Note that any #GstToc (s) that might have been discovered will not be serialized
+ * for now.
+ *
+ * Returns: (transfer full): A newly-allocated #GVariant representing @info.
+ *
+ * Since: 1.6
+ */
+GVariant *
+gst_discoverer_info_to_variant (GstDiscovererInfo * info,
+    GstDiscovererSerializeFlags flags)
+{
+  /* FIXME: implement TOC support */
+  GVariant *stream_variant;
+  GVariant *variant;
+  GstDiscovererStreamInfo *sinfo = gst_discoverer_info_get_stream_info (info);
+  GVariant *wrapper;
+
+  stream_variant = gst_discoverer_info_to_variant_recurse (sinfo, flags);
+  variant =
+      g_variant_new ("(vv)", _serialize_info (info, flags), stream_variant);
+
+  /* Returning a wrapper implies some small overhead, but simplifies 
+   * deserializing from bytes */
+  wrapper = g_variant_new_variant (variant);
+
+  gst_discoverer_stream_info_unref (sinfo);
+  return wrapper;
+}
+
+/**
+ * gst_discoverer_info_from_variant:
+ * @variant: A #GVariant to deserialize into a #GstDiscovererInfo.
+ *
+ * Parses a #GVariant as produced by gst_discoverer_info_to_variant()
+ * back to a #GstDiscovererInfo.
+ *
+ * Returns: (transfer full): A newly-allocated #GstDiscovererInfo.
+ *
+ * Since: 1.6
+ */
+GstDiscovererInfo *
+gst_discoverer_info_from_variant (GVariant * variant)
+{
+  GstDiscovererInfo *info = g_object_new (GST_TYPE_DISCOVERER_INFO, NULL);
+  GVariant *info_variant = g_variant_get_variant (variant);
+  GVariant *info_specific_variant;
+  GVariant *wrapped;
+
+  GET_FROM_TUPLE (info_variant, variant, 0, &info_specific_variant);
+  GET_FROM_TUPLE (info_variant, variant, 1, &wrapped);
+
+  _parse_info (info, info_specific_variant);
+  _parse_discovery (wrapped, info);
+  g_variant_unref (info_specific_variant);
+  g_variant_unref (info_variant);
+
+  return info;
+}
diff --git a/gst-libs/gst/pbutils/gstdiscoverer.h b/gst-libs/gst/pbutils/gstdiscoverer.h
index bb3db24..553de3c 100644
--- a/gst-libs/gst/pbutils/gstdiscoverer.h
+++ b/gst-libs/gst/pbutils/gstdiscoverer.h
@@ -173,6 +173,29 @@
   GST_DISCOVERER_MISSING_PLUGINS  = 5
 } GstDiscovererResult;
 
+/**
+ * GstDiscovererSerializeFlags:
+ * @GST_DISCOVERER_SERIALIZE_BASIC: Serialize only basic information, excluding
+ * caps, tags and miscellaneous information
+ * @GST_DISCOVERER_SERIALIZE_CAPS: Serialize the caps for each stream
+ * @GST_DISCOVERER_SERIALIZE_TAGS: Serialize the tags for each stream
+ * @GST_DISCOVERER_SERIALIZE_MISC: Serialize miscellaneous information for each stream
+ * @GST_DISCOVERER_SERIALIZE_ALL: Serialize all the available info, including
+ * caps, tags and miscellaneous information
+ *
+ * You can use these flags to control what is serialized by
+ * gst_discoverer_info_to_variant()
+ *
+ * Since: 1.6
+ */
+
+typedef enum {
+  GST_DISCOVERER_SERIALIZE_BASIC = 0,
+  GST_DISCOVERER_SERIALIZE_CAPS  = 1 << 0,
+  GST_DISCOVERER_SERIALIZE_TAGS  = 1 << 1,
+  GST_DISCOVERER_SERIALIZE_MISC  = 1 << 2,
+  GST_DISCOVERER_SERIALIZE_ALL   = GST_DISCOVERER_SERIALIZE_CAPS | GST_DISCOVERER_SERIALIZE_TAGS | GST_DISCOVERER_SERIALIZE_MISC
+} GstDiscovererSerializeFlags;
 
 /**
  * GstDiscovererInfo:
@@ -213,6 +236,10 @@
 GList *                   gst_discoverer_info_get_subtitle_streams (GstDiscovererInfo *info);
 GList *                   gst_discoverer_info_get_container_streams (GstDiscovererInfo *info);
 
+GVariant *                gst_discoverer_info_to_variant (GstDiscovererInfo *info,
+                                                          GstDiscovererSerializeFlags flags);
+GstDiscovererInfo *       gst_discoverer_info_from_variant (GVariant *variant);
+
 void                      gst_discoverer_stream_info_list_free (GList *infos);
 
 #define GST_TYPE_DISCOVERER \
diff --git a/gst-libs/gst/pbutils/install-plugins.c b/gst-libs/gst/pbutils/install-plugins.c
index ebfa76a..8ea1689 100644
--- a/gst-libs/gst/pbutils/install-plugins.c
+++ b/gst-libs/gst/pbutils/install-plugins.c
@@ -381,10 +381,97 @@
 /* private struct */
 struct _GstInstallPluginsContext
 {
+  gchar *confirm_search;
+  gchar *desktop_id;
+  gchar *startup_notification_id;
   guint xid;
 };
 
 /**
+ * gst_install_plugins_context_set_confirm_search:
+ * @ctx: a #GstInstallPluginsContext
+ * @confirm_search: whether to ask for confirmation before searching for plugins
+ *
+ * This function is used to tell the external installer process whether it
+ * should ask for confirmation or not before searching for missing plugins.
+ *
+ * If set, this option will be passed to the installer via a
+ * --interaction=[show-confirm-search|hide-confirm-search] command line option.
+ *
+ * Since: 1.6
+ */
+void
+gst_install_plugins_context_set_confirm_search (GstInstallPluginsContext * ctx,
+    gboolean confirm_search)
+{
+  g_return_if_fail (ctx != NULL);
+
+  if (confirm_search)
+    ctx->confirm_search = g_strdup ("show-confirm-search");
+  else
+    ctx->confirm_search = g_strdup ("hide-confirm-search");
+}
+
+/**
+ * gst_install_plugins_context_set_desktop_id:
+ * @ctx: a #GstInstallPluginsContext
+ * @desktop_id: the desktop file ID of the calling application
+ *
+ * This function is used to pass the calling application's desktop file ID to
+ * the external installer process.
+ *
+ * A desktop file ID is the basename of the desktop file, including the
+ * .desktop extension.
+ *
+ * If set, the desktop file ID will be passed to the installer via a
+ * --desktop-id= command line option.
+ *
+ * Since: 1.6
+ */
+void
+gst_install_plugins_context_set_desktop_id (GstInstallPluginsContext * ctx,
+    const gchar * desktop_id)
+{
+  g_return_if_fail (ctx != NULL);
+
+  ctx->desktop_id = g_strdup (desktop_id);
+}
+
+/**
+ * gst_install_plugins_context_set_startup_notification_id:
+ * @ctx: a #GstInstallPluginsContext
+ * @startup_id: the startup notification ID
+ *
+ * Sets the startup notification ID for the launched process.
+ *
+ * This is typically used to to pass the current X11 event timestamp to the
+ * external installer process.
+ *
+ * Startup notification IDs are defined in the
+ * [FreeDesktop.Org Startup Notifications standard](http://standards.freedesktop.org/startup-notification-spec/startup-notification-latest.txt).
+ *
+ * If set, the ID will be passed to the installer via a
+ * --startup-notification-id= command line option.
+ *
+ * GTK+/GNOME applications should be able to create a startup notification ID
+ * like this:
+ * <programlisting>
+ *   timestamp = gtk_get_current_event_time ();
+ *   startup_id = g_strdup_printf ("_TIME%u", timestamp);
+ * ...
+ * </programlisting>
+ *
+ * Since: 1.6
+ */
+void gst_install_plugins_context_set_startup_notification_id
+    (GstInstallPluginsContext * ctx, const gchar * startup_id)
+{
+  g_return_if_fail (ctx != NULL);
+
+  ctx->startup_notification_id = g_strdup (startup_id);
+}
+
+/**
  * gst_install_plugins_context_set_xid:
  * @ctx: a #GstInstallPluginsContext
  * @xid: the XWindow ID (XID) of the top-level application
@@ -445,6 +532,9 @@
 {
   g_return_if_fail (ctx != NULL);
 
+  g_free (ctx->confirm_search);
+  g_free (ctx->desktop_id);
+  g_free (ctx->startup_notification_id);
   g_free (ctx);
 }
 
@@ -454,6 +544,9 @@
   GstInstallPluginsContext *ret;
 
   ret = gst_install_plugins_context_new ();
+  ret->confirm_search = g_strdup (ctx->confirm_search);
+  ret->desktop_id = g_strdup (ctx->desktop_id);
+  ret->startup_notification_id = g_strdup (ctx->startup_notification_id);
   ret->xid = ctx->xid;
 
   return ret;
@@ -495,23 +588,33 @@
   GPtrArray *arr;
   gboolean ret;
   GError *err = NULL;
-  gchar **argv, xid_str[64] = { 0, };
+  gchar **argv;
 
-  arr = g_ptr_array_new ();
+  arr = g_ptr_array_new_with_free_func (g_free);
 
   /* argv[0] = helper path */
-  g_ptr_array_add (arr, (gchar *) gst_install_plugins_get_helper ());
+  g_ptr_array_add (arr, g_strdup (gst_install_plugins_get_helper ()));
 
   /* add any additional command line args from the context */
+  if (ctx != NULL && ctx->confirm_search) {
+    g_ptr_array_add (arr, g_strdup_printf ("--interaction=%s",
+            ctx->confirm_search));
+  }
+  if (ctx != NULL && ctx->desktop_id != NULL) {
+    g_ptr_array_add (arr, g_strdup_printf ("--desktop-id=%s", ctx->desktop_id));
+  }
+  if (ctx != NULL && ctx->startup_notification_id != NULL) {
+    g_ptr_array_add (arr, g_strdup_printf ("--startup-notification-id=%s",
+            ctx->startup_notification_id));
+  }
   if (ctx != NULL && ctx->xid != 0) {
-    g_snprintf (xid_str, sizeof (xid_str), "--transient-for=%u", ctx->xid);
-    g_ptr_array_add (arr, xid_str);
+    g_ptr_array_add (arr, g_strdup_printf ("--transient-for=%u", ctx->xid));
   }
 
   /* finally, add the detail strings, but without duplicates */
   while (details != NULL && details[0] != NULL) {
     if (!ptr_array_contains_string (arr, details[0]))
-      g_ptr_array_add (arr, (gpointer) details[0]);
+      g_ptr_array_add (arr, g_strdup (details[0]));
     ++details;
   }
 
@@ -538,7 +641,7 @@
     g_error_free (err);
   }
 
-  g_ptr_array_free (arr, TRUE);
+  g_ptr_array_unref (arr);
   return ret;
 }
 
diff --git a/gst-libs/gst/pbutils/install-plugins.h b/gst-libs/gst/pbutils/install-plugins.h
index 4e0efc8..cd3eb00 100644
--- a/gst-libs/gst/pbutils/install-plugins.h
+++ b/gst-libs/gst/pbutils/install-plugins.h
@@ -101,6 +101,15 @@
 
 void   gst_install_plugins_context_free    (GstInstallPluginsContext * ctx);
 
+void   gst_install_plugins_context_set_confirm_search (GstInstallPluginsContext * ctx,
+                                                       gboolean                   confirm_search);
+
+void   gst_install_plugins_context_set_desktop_id (GstInstallPluginsContext * ctx,
+                                                   const gchar              * desktop_id);
+
+void   gst_install_plugins_context_set_startup_notification_id (GstInstallPluginsContext * ctx,
+                                                                const gchar              * startup_id);
+
 void   gst_install_plugins_context_set_xid (GstInstallPluginsContext * ctx,
                                             guint                      xid);
 
diff --git a/gst-libs/gst/pbutils/missing-plugins.c b/gst-libs/gst/pbutils/missing-plugins.c
index 7d7f2f4..4cf9291 100644
--- a/gst-libs/gst/pbutils/missing-plugins.c
+++ b/gst-libs/gst/pbutils/missing-plugins.c
@@ -144,9 +144,9 @@
   /* rtp fields */
   gst_structure_remove_field (s, "config");
   gst_structure_remove_field (s, "clock-rate");
-  gst_structure_remove_field (s, "clock-base");
+  gst_structure_remove_field (s, "timestamp-offset");
   gst_structure_remove_field (s, "maxps");
-  gst_structure_remove_field (s, "seqnum-base");
+  gst_structure_remove_field (s, "seqnum-offset");
   gst_structure_remove_field (s, "npt-start");
   gst_structure_remove_field (s, "npt-stop");
   gst_structure_remove_field (s, "play-speed");
@@ -528,7 +528,7 @@
         else if (missing_type == GST_MISSING_TYPE_URISINK)
           ret = gst_pb_utils_get_sink_description (detail);
         else
-          ret = gst_pb_utils_get_sink_description (detail);
+          ret = gst_pb_utils_get_element_description (detail);
         g_free (detail);
       }
       break;
diff --git a/gst-libs/gst/riff/Makefile.am b/gst-libs/gst/riff/Makefile.am
index 974efd4..83d83cb 100644
--- a/gst-libs/gst/riff/Makefile.am
+++ b/gst-libs/gst/riff/Makefile.am
@@ -20,71 +20,62 @@
 libgstriff_@GST_API_VERSION@_la_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_BASE_CFLAGS) $(GST_CFLAGS)
 libgstriff_@GST_API_VERSION@_la_LDFLAGS = $(GST_LIB_LDFLAGS) $(GST_ALL_LDFLAGS) $(GST_LT_LDFLAGS)
 
-if HAVE_INTROSPECTION
-BUILT_GIRSOURCES = GstRiff-@GST_API_VERSION@.gir
-
-gir_headers=$(patsubst %,$(srcdir)/%, $(libgstriff_@GST_API_VERSION@include_HEADERS))
-gir_sources=$(patsubst %,$(srcdir)/%, $(libgstriff_@GST_API_VERSION@_la_SOURCES))
-
-GstRiff-@GST_API_VERSION@.gir: $(INTROSPECTION_SCANNER) libgstriff-@GST_API_VERSION@.la
-	$(AM_V_GEN)PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" \
-		GST_PLUGIN_SYSTEM_PATH_1_0="" GST_PLUGIN_PATH_1_0="" GST_REGISTRY_UPDATE=no \
-		$(INTROSPECTION_SCANNER) -v --namespace GstRiff \
-		--nsversion=@GST_API_VERSION@ \
-		--strip-prefix=Gst \
-		--warn-all \
-		--c-include "gst/riff/riff.h" \
-		--add-include-path=$(builddir)/../tag \
-		--add-include-path=$(builddir)/../audio \
-		--add-include-path=`PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" $(PKG_CONFIG) --variable=girdir gstreamer-@GST_API_VERSION@` \
-		--add-include-path=`PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" $(PKG_CONFIG) --variable=girdir gstreamer-base-@GST_API_VERSION@` \
-		--library=libgstriff-@GST_API_VERSION@.la \
-		--include=GstAudio-@GST_API_VERSION@ \
-		--include=GstTag-@GST_API_VERSION@ \
-		--include=Gst-@GST_API_VERSION@ \
-		--libtool="$(top_builddir)/libtool" \
-		--pkg gstreamer-@GST_API_VERSION@ \
-		--pkg gstreamer-tag-@GST_API_VERSION@ \
-		--pkg gstreamer-audio-@GST_API_VERSION@ \
-		--pkg-export gstreamer-riff-@GST_API_VERSION@ \
-		--add-init-section="gst_init(NULL,NULL);" \
-		--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) \
-		--includedir=$(builddir) \
-		--includedir=$(builddir)/../tag \
-		--includedir=$(builddir)/../audio \
-		--includedir=`PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" $(PKG_CONFIG) --variable=girdir gstreamer-@GST_API_VERSION@` \
-		--includedir=`PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" $(PKG_CONFIG) --variable=girdir gstreamer-base-@GST_API_VERSION@` \
-		$(INTROSPECTION_COMPILER_OPTS) $< -o $(@F)
-
-CLEANFILES = $(BUILT_GIRSOURCES) $(typelibs_DATA)
-endif
-
-Android.mk: Makefile.am
-	androgenizer -:PROJECT libgstriff -:SHARED libgstriff-@GST_API_VERSION@ \
-	 -:TAGS eng debug \
-         -:REL_TOP $(top_srcdir) -:ABS_TOP $(abs_top_srcdir) \
-	 -:SOURCES $(libgstriff_@GST_API_VERSION@_la_SOURCES) \
-	 -:CFLAGS $(DEFS) $(DEFAULT_INCLUDES) $(libgstriff_@GST_API_VERSION@_la_CFLAGS) \
-	 -:LDFLAGS $(libgstriff_@GST_API_VERSION@_la_LDFLAGS) \
-	           $(libgstriff_@GST_API_VERSION@_la_LIBADD) \
-	           -ldl \
-	 -:HEADER_TARGET gstreamer-@GST_API_VERSION@/gst/tag \
-	 -:HEADERS $(libgstriff_@GST_API_VERSION@include_HEADERS) \
-	 -:PASSTHROUGH LOCAL_ARM_MODE:=arm \
-	> $@
+# *** GIR DISABLED for this library ***
+# 
+# This library does not respect the type naming conventions required to be
+# usable in binded languages.
+#
+#if HAVE_INTROSPECTION
+#BUILT_GIRSOURCES = GstRiff-@GST_API_VERSION@.gir
+#
+#gir_headers=$(patsubst %,$(srcdir)/%, $(libgstriff_@GST_API_VERSION@include_HEADERS))
+#gir_sources=$(patsubst %,$(srcdir)/%, $(libgstriff_@GST_API_VERSION@_la_SOURCES))
+#
+#GstRiff-@GST_API_VERSION@.gir: $(INTROSPECTION_SCANNER) libgstriff-@GST_API_VERSION@.la
+#	$(AM_V_GEN)PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" GI_SCANNER_DISABLE_CACHE=yes\
+#		GST_PLUGIN_SYSTEM_PATH_1_0="" GST_PLUGIN_PATH_1_0="" GST_REGISTRY_UPDATE=no \
+#		$(INTROSPECTION_SCANNER) -v --namespace GstRiff \
+#		--nsversion=@GST_API_VERSION@ \
+#		--strip-prefix=Gst \
+#		--warn-all \
+#		--c-include "gst/riff/riff.h" \
+#		--add-include-path=$(builddir)/../tag \
+#		--add-include-path=$(builddir)/../audio \
+#		--add-include-path=`PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" $(PKG_CONFIG) --variable=girdir gstreamer-@GST_API_VERSION@` \
+#		--add-include-path=`PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" $(PKG_CONFIG) --variable=girdir gstreamer-base-@GST_API_VERSION@` \
+#		--library=libgstriff-@GST_API_VERSION@.la \
+#		--include=GstAudio-@GST_API_VERSION@ \
+#		--include=GstTag-@GST_API_VERSION@ \
+#		--include=Gst-@GST_API_VERSION@ \
+#		--libtool="$(top_builddir)/libtool" \
+#		--pkg gstreamer-@GST_API_VERSION@ \
+#		--pkg gstreamer-tag-@GST_API_VERSION@ \
+#		--pkg gstreamer-audio-@GST_API_VERSION@ \
+#		--pkg-export gstreamer-riff-@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) \
+#		--includedir=$(builddir) \
+#		--includedir=$(builddir)/../tag \
+#		--includedir=$(builddir)/../audio \
+#		--includedir=`PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" $(PKG_CONFIG) --variable=girdir gstreamer-@GST_API_VERSION@` \
+#		--includedir=`PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" $(PKG_CONFIG) --variable=girdir gstreamer-base-@GST_API_VERSION@` \
+#		$(INTROSPECTION_COMPILER_OPTS) $< -o $(@F)
+#
+#CLEANFILES = $(BUILT_GIRSOURCES) $(typelibs_DATA)
+#endif
diff --git a/gst-libs/gst/riff/Makefile.in b/gst-libs/gst/riff/Makefile.in
index 5361be2..d9df2fb 100644
--- a/gst-libs/gst/riff/Makefile.in
+++ b/gst-libs/gst/riff/Makefile.in
@@ -1,7 +1,7 @@
-# Makefile.in generated by automake 1.14.1 from Makefile.am.
+# Makefile.in generated by automake 1.15 from Makefile.am.
 # @configure_input@
 
-# Copyright (C) 1994-2013 Free Software Foundation, Inc.
+# 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,
@@ -15,9 +15,18 @@
 @SET_MAKE@
 
 
-
 VPATH = @srcdir@
-am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)'
+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 \
       ?) ;; \
@@ -82,9 +91,6 @@
 host_triplet = @host@
 target_triplet = @target@
 subdir = gst-libs/gst/riff
-DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \
-	$(top_srcdir)/depcomp \
-	$(libgstriff_@GST_API_VERSION@include_HEADERS)
 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 \
@@ -105,7 +111,6 @@
 	$(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-x11.m4 \
 	$(top_srcdir)/common/m4/gst.m4 \
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
@@ -122,6 +127,9 @@
 	$(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am \
+	$(libgstriff_@GST_API_VERSION@include_HEADERS) \
+	$(am__DIST_COMMON)
 mkinstalldirs = $(install_sh) -d
 CONFIG_HEADER = $(top_builddir)/config.h
 CONFIG_CLEAN_FILES =
@@ -153,8 +161,7 @@
     || { echo " ( cd '$$dir' && rm -f" $$files ")"; \
          $(am__cd) "$$dir" && rm -f $$files; }; \
   }
-am__installdirs = "$(DESTDIR)$(libdir)" "$(DESTDIR)$(girdir)" \
-	"$(DESTDIR)$(typelibsdir)" \
+am__installdirs = "$(DESTDIR)$(libdir)" \
 	"$(DESTDIR)$(libgstriff_@GST_API_VERSION@includedir)"
 LTLIBRARIES = $(lib_LTLIBRARIES)
 am__DEPENDENCIES_1 =
@@ -216,9 +223,9 @@
     n|no|NO) false;; \
     *) (install-info --version) >/dev/null 2>&1;; \
   esac
-DATA = $(gir_DATA) $(typelibs_DATA)
 HEADERS = $(libgstriff_@GST_API_VERSION@include_HEADERS)
 am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp
 DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
 ACLOCAL = @ACLOCAL@
 ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@
@@ -279,6 +286,8 @@
 GIO_CFLAGS = @GIO_CFLAGS@
 GIO_LDFLAGS = @GIO_LDFLAGS@
 GIO_LIBS = @GIO_LIBS@
+GIO_UNIX_2_0_CFLAGS = @GIO_UNIX_2_0_CFLAGS@
+GIO_UNIX_2_0_LIBS = @GIO_UNIX_2_0_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
@@ -308,6 +317,8 @@
 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_OPTION_CFLAGS = @GST_OPTION_CFLAGS@
 GST_OPTION_CXXFLAGS = @GST_OPTION_CXXFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
@@ -335,7 +346,6 @@
 GTK_X11_CFLAGS = @GTK_X11_CFLAGS@
 GTK_X11_LIBS = @GTK_X11_LIBS@
 HAVE_CDPARANOIA = @HAVE_CDPARANOIA@
-HAVE_X = @HAVE_X@
 HAVE_XSHM = @HAVE_XSHM@
 HAVE_ZLIB = @HAVE_ZLIB@
 HTML_DIR = @HTML_DIR@
@@ -350,6 +360,7 @@
 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@
@@ -439,13 +450,12 @@
 XGETTEXT = @XGETTEXT@
 XGETTEXT_015 = @XGETTEXT_015@
 XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
-XMKMF = @XMKMF@
+XSHM_CFLAGS = @XSHM_CFLAGS@
 XSHM_LIBS = @XSHM_LIBS@
+XVIDEO_CFLAGS = @XVIDEO_CFLAGS@
 XVIDEO_LIBS = @XVIDEO_LIBS@
 X_CFLAGS = @X_CFLAGS@
-X_EXTRA_LIBS = @X_EXTRA_LIBS@
 X_LIBS = @X_LIBS@
-X_PRE_LIBS = @X_PRE_LIBS@
 ZLIB_CFLAGS = @ZLIB_CFLAGS@
 ZLIB_LIBS = @ZLIB_LIBS@
 abs_builddir = @abs_builddir@
@@ -498,6 +508,7 @@
 psdir = @psdir@
 pyexecdir = @pyexecdir@
 pythondir = @pythondir@
+runstatedir = @runstatedir@
 sbindir = @sbindir@
 sharedstatedir = @sharedstatedir@
 srcdir = @srcdir@
@@ -530,17 +541,6 @@
 
 libgstriff_@GST_API_VERSION@_la_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_BASE_CFLAGS) $(GST_CFLAGS)
 libgstriff_@GST_API_VERSION@_la_LDFLAGS = $(GST_LIB_LDFLAGS) $(GST_ALL_LDFLAGS) $(GST_LT_LDFLAGS)
-@HAVE_INTROSPECTION_TRUE@BUILT_GIRSOURCES = GstRiff-@GST_API_VERSION@.gir
-@HAVE_INTROSPECTION_TRUE@gir_headers = $(patsubst %,$(srcdir)/%, $(libgstriff_@GST_API_VERSION@include_HEADERS))
-@HAVE_INTROSPECTION_TRUE@gir_sources = $(patsubst %,$(srcdir)/%, $(libgstriff_@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)
-@HAVE_INTROSPECTION_TRUE@CLEANFILES = $(BUILT_GIRSOURCES) $(typelibs_DATA)
 all: all-am
 
 .SUFFIXES:
@@ -557,7 +557,6 @@
 	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu gst-libs/gst/riff/Makefile'; \
 	$(am__cd) $(top_srcdir) && \
 	  $(AUTOMAKE) --gnu gst-libs/gst/riff/Makefile
-.PRECIOUS: Makefile
 Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
 	@case '$?' in \
 	  *config.status*) \
@@ -674,48 +673,6 @@
 
 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-libgstriff_@GST_API_VERSION@includeHEADERS: $(libgstriff_@GST_API_VERSION@include_HEADERS)
 	@$(NORMAL_INSTALL)
 	@list='$(libgstriff_@GST_API_VERSION@include_HEADERS)'; test -n "$(libgstriff_@GST_API_VERSION@includedir)" || list=; \
@@ -776,9 +733,9 @@
 	done
 check-am: all-am
 check: check-am
-all-am: Makefile $(LTLIBRARIES) $(DATA) $(HEADERS)
+all-am: Makefile $(LTLIBRARIES) $(HEADERS)
 installdirs:
-	for dir in "$(DESTDIR)$(libdir)" "$(DESTDIR)$(girdir)" "$(DESTDIR)$(typelibsdir)" "$(DESTDIR)$(libgstriff_@GST_API_VERSION@includedir)"; do \
+	for dir in "$(DESTDIR)$(libdir)" "$(DESTDIR)$(libgstriff_@GST_API_VERSION@includedir)"; do \
 	  test -z "$$dir" || $(MKDIR_P) "$$dir"; \
 	done
 install: install-am
@@ -803,7 +760,6 @@
 mostlyclean-generic:
 
 clean-generic:
-	-test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
 
 distclean-generic:
 	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
@@ -834,9 +790,7 @@
 
 info-am:
 
-install-data-am: install-girDATA \
-	install-libgstriff_@GST_API_VERSION@includeHEADERS \
-	install-typelibsDATA
+install-data-am: install-libgstriff_@GST_API_VERSION@includeHEADERS
 
 install-dvi: install-dvi-am
 
@@ -882,9 +836,8 @@
 
 ps-am:
 
-uninstall-am: uninstall-girDATA uninstall-libLTLIBRARIES \
-	uninstall-libgstriff_@GST_API_VERSION@includeHEADERS \
-	uninstall-typelibsDATA
+uninstall-am: uninstall-libLTLIBRARIES \
+	uninstall-libgstriff_@GST_API_VERSION@includeHEADERS
 
 .MAKE: install-am install-strip
 
@@ -893,71 +846,78 @@
 	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-girDATA \
-	install-html install-html-am install-info install-info-am \
+	install-dvi-am install-exec install-exec-am install-html \
+	install-html-am install-info install-info-am \
 	install-libLTLIBRARIES \
 	install-libgstriff_@GST_API_VERSION@includeHEADERS 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-am uninstall uninstall-am uninstall-girDATA \
+	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-libgstriff_@GST_API_VERSION@includeHEADERS \
-	uninstall-typelibsDATA
+	uninstall-libgstriff_@GST_API_VERSION@includeHEADERS
+
+.PRECIOUS: Makefile
 
 
-@HAVE_INTROSPECTION_TRUE@GstRiff-@GST_API_VERSION@.gir: $(INTROSPECTION_SCANNER) libgstriff-@GST_API_VERSION@.la
-@HAVE_INTROSPECTION_TRUE@	$(AM_V_GEN)PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" \
-@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 GstRiff \
-@HAVE_INTROSPECTION_TRUE@		--nsversion=@GST_API_VERSION@ \
-@HAVE_INTROSPECTION_TRUE@		--strip-prefix=Gst \
-@HAVE_INTROSPECTION_TRUE@		--warn-all \
-@HAVE_INTROSPECTION_TRUE@		--c-include "gst/riff/riff.h" \
-@HAVE_INTROSPECTION_TRUE@		--add-include-path=$(builddir)/../tag \
-@HAVE_INTROSPECTION_TRUE@		--add-include-path=$(builddir)/../audio \
-@HAVE_INTROSPECTION_TRUE@		--add-include-path=`PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" $(PKG_CONFIG) --variable=girdir gstreamer-@GST_API_VERSION@` \
-@HAVE_INTROSPECTION_TRUE@		--add-include-path=`PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" $(PKG_CONFIG) --variable=girdir gstreamer-base-@GST_API_VERSION@` \
-@HAVE_INTROSPECTION_TRUE@		--library=libgstriff-@GST_API_VERSION@.la \
-@HAVE_INTROSPECTION_TRUE@		--include=GstAudio-@GST_API_VERSION@ \
-@HAVE_INTROSPECTION_TRUE@		--include=GstTag-@GST_API_VERSION@ \
-@HAVE_INTROSPECTION_TRUE@		--include=Gst-@GST_API_VERSION@ \
-@HAVE_INTROSPECTION_TRUE@		--libtool="$(top_builddir)/libtool" \
-@HAVE_INTROSPECTION_TRUE@		--pkg gstreamer-@GST_API_VERSION@ \
-@HAVE_INTROSPECTION_TRUE@		--pkg gstreamer-tag-@GST_API_VERSION@ \
-@HAVE_INTROSPECTION_TRUE@		--pkg gstreamer-audio-@GST_API_VERSION@ \
-@HAVE_INTROSPECTION_TRUE@		--pkg-export gstreamer-riff-@GST_API_VERSION@ \
-@HAVE_INTROSPECTION_TRUE@		--add-init-section="gst_init(NULL,NULL);" \
-@HAVE_INTROSPECTION_TRUE@		--output $@ \
-@HAVE_INTROSPECTION_TRUE@		$(gir_headers) \
-@HAVE_INTROSPECTION_TRUE@		$(gir_sources)
-
-@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) \
-@HAVE_INTROSPECTION_TRUE@		--includedir=$(builddir) \
-@HAVE_INTROSPECTION_TRUE@		--includedir=$(builddir)/../tag \
-@HAVE_INTROSPECTION_TRUE@		--includedir=$(builddir)/../audio \
-@HAVE_INTROSPECTION_TRUE@		--includedir=`PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" $(PKG_CONFIG) --variable=girdir gstreamer-@GST_API_VERSION@` \
-@HAVE_INTROSPECTION_TRUE@		--includedir=`PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" $(PKG_CONFIG) --variable=girdir gstreamer-base-@GST_API_VERSION@` \
-@HAVE_INTROSPECTION_TRUE@		$(INTROSPECTION_COMPILER_OPTS) $< -o $(@F)
-
-Android.mk: Makefile.am
-	androgenizer -:PROJECT libgstriff -:SHARED libgstriff-@GST_API_VERSION@ \
-	 -:TAGS eng debug \
-         -:REL_TOP $(top_srcdir) -:ABS_TOP $(abs_top_srcdir) \
-	 -:SOURCES $(libgstriff_@GST_API_VERSION@_la_SOURCES) \
-	 -:CFLAGS $(DEFS) $(DEFAULT_INCLUDES) $(libgstriff_@GST_API_VERSION@_la_CFLAGS) \
-	 -:LDFLAGS $(libgstriff_@GST_API_VERSION@_la_LDFLAGS) \
-	           $(libgstriff_@GST_API_VERSION@_la_LIBADD) \
-	           -ldl \
-	 -:HEADER_TARGET gstreamer-@GST_API_VERSION@/gst/tag \
-	 -:HEADERS $(libgstriff_@GST_API_VERSION@include_HEADERS) \
-	 -:PASSTHROUGH LOCAL_ARM_MODE:=arm \
-	> $@
+# *** GIR DISABLED for this library ***
+# 
+# This library does not respect the type naming conventions required to be
+# usable in binded languages.
+#
+#if HAVE_INTROSPECTION
+#BUILT_GIRSOURCES = GstRiff-@GST_API_VERSION@.gir
+#
+#gir_headers=$(patsubst %,$(srcdir)/%, $(libgstriff_@GST_API_VERSION@include_HEADERS))
+#gir_sources=$(patsubst %,$(srcdir)/%, $(libgstriff_@GST_API_VERSION@_la_SOURCES))
+#
+#GstRiff-@GST_API_VERSION@.gir: $(INTROSPECTION_SCANNER) libgstriff-@GST_API_VERSION@.la
+#	$(AM_V_GEN)PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" GI_SCANNER_DISABLE_CACHE=yes\
+#		GST_PLUGIN_SYSTEM_PATH_1_0="" GST_PLUGIN_PATH_1_0="" GST_REGISTRY_UPDATE=no \
+#		$(INTROSPECTION_SCANNER) -v --namespace GstRiff \
+#		--nsversion=@GST_API_VERSION@ \
+#		--strip-prefix=Gst \
+#		--warn-all \
+#		--c-include "gst/riff/riff.h" \
+#		--add-include-path=$(builddir)/../tag \
+#		--add-include-path=$(builddir)/../audio \
+#		--add-include-path=`PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" $(PKG_CONFIG) --variable=girdir gstreamer-@GST_API_VERSION@` \
+#		--add-include-path=`PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" $(PKG_CONFIG) --variable=girdir gstreamer-base-@GST_API_VERSION@` \
+#		--library=libgstriff-@GST_API_VERSION@.la \
+#		--include=GstAudio-@GST_API_VERSION@ \
+#		--include=GstTag-@GST_API_VERSION@ \
+#		--include=Gst-@GST_API_VERSION@ \
+#		--libtool="$(top_builddir)/libtool" \
+#		--pkg gstreamer-@GST_API_VERSION@ \
+#		--pkg gstreamer-tag-@GST_API_VERSION@ \
+#		--pkg gstreamer-audio-@GST_API_VERSION@ \
+#		--pkg-export gstreamer-riff-@GST_API_VERSION@ \
+#		--add-init-section="$(INTROSPECTION_INIT)" \
+#		--output $@ \
+#		$(gir_headers) \
+#		$(gir_sources)
+#
+#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) \
+#		--includedir=$(builddir) \
+#		--includedir=$(builddir)/../tag \
+#		--includedir=$(builddir)/../audio \
+#		--includedir=`PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" $(PKG_CONFIG) --variable=girdir gstreamer-@GST_API_VERSION@` \
+#		--includedir=`PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" $(PKG_CONFIG) --variable=girdir gstreamer-base-@GST_API_VERSION@` \
+#		$(INTROSPECTION_COMPILER_OPTS) $< -o $(@F)
+#
+#CLEANFILES = $(BUILT_GIRSOURCES) $(typelibs_DATA)
+#endif
 
 # 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/riff/riff-ids.h b/gst-libs/gst/riff/riff-ids.h
index acc75d5..ae64972 100644
--- a/gst-libs/gst/riff/riff-ids.h
+++ b/gst-libs/gst/riff/riff-ids.h
@@ -34,6 +34,7 @@
 /* tags */
 #define GST_RIFF_TAG_RIFF GST_MAKE_FOURCC ('R','I','F','F')
 #define GST_RIFF_TAG_AVF0 GST_MAKE_FOURCC ('A','V','F','0')
+#define GST_RIFF_TAG_RF64 GST_MAKE_FOURCC ('R','F','6','4')
 #define GST_RIFF_TAG_RIFX GST_MAKE_FOURCC ('R','I','F','X')
 #define GST_RIFF_TAG_LIST GST_MAKE_FOURCC ('L','I','S','T')
 #define GST_RIFF_TAG_avih GST_MAKE_FOURCC ('a','v','i','h')
@@ -62,6 +63,7 @@
 #define GST_RIFF_TAG_note GST_MAKE_FOURCC ('n','o','t','e')
 #define GST_RIFF_TAG_smpl GST_MAKE_FOURCC ('s','m','p','l')
 #define GST_RIFF_TAG_inst GST_MAKE_FOURCC ('i','n','s','t')
+#define GST_RIFF_TAG_FLLR GST_MAKE_FOURCC ('F','L','L','R')
 
 /* LIST types */
 #define GST_RIFF_LIST_movi GST_MAKE_FOURCC ('m','o','v','i')
diff --git a/gst-libs/gst/riff/riff-media.c b/gst-libs/gst/riff/riff-media.c
index e4d877e..8c01892 100644
--- a/gst-libs/gst/riff/riff-media.c
+++ b/gst-libs/gst/riff/riff-media.c
@@ -1021,26 +1021,24 @@
 {
   gint i, p;
   guint64 channel_mask = 0;
-  GstAudioChannelPosition from[18], to[18];
+  GstAudioChannelPosition *from, *to;
+  gboolean ret = FALSE;
 
-  if (num_channels < 1 || num_channels > MAX_CHANNEL_POSITIONS) {
+  if (num_channels < 1) {
     GST_DEBUG ("invalid number of channels: %d", num_channels);
     return FALSE;
   }
 
+  from = g_new (GstAudioChannelPosition, num_channels);
+  to = g_new (GstAudioChannelPosition, num_channels);
   p = 0;
   for (i = 0; i < MAX_CHANNEL_POSITIONS; ++i) {
     if ((layout & layout_mapping[i].ms_mask) != 0) {
       if (p >= num_channels) {
         GST_WARNING ("More bits set in the channel layout map than there "
-            "are channels! Broken file");
-        return FALSE;
-      }
-      if (layout_mapping[i].gst_pos == GST_AUDIO_CHANNEL_POSITION_INVALID) {
-        GST_WARNING ("Unsupported channel position (mask 0x%08x) in channel "
-            "layout map - ignoring those channels", layout_mapping[i].ms_mask);
-        /* what to do? just ignore it and let downstream deal with a channel
-         * layout that has INVALID positions in it for now ... */
+            "are channels! Setting channel-mask to 0.");
+        channel_mask = 0;
+        break;
       }
       channel_mask |= G_GUINT64_CONSTANT (1) << layout_mapping[i].gst_pos;
       from[p] = layout_mapping[i].gst_pos;
@@ -1048,25 +1046,33 @@
     }
   }
 
-  if (p != num_channels) {
-    GST_WARNING ("Only %d bits set in the channel layout map, but there are "
-        "supposed to be %d channels! Broken file", p, num_channels);
-    return FALSE;
-  }
-
-  if (channel_reorder_map) {
+  if (channel_mask > 0 && channel_reorder_map) {
+    if (p != num_channels) {
+      /* WAVEFORMATEXTENSIBLE allows to have more channels than bits in
+       * the channel mask. We accept this, too, and hope that downstream
+       * can handle this */
+      GST_WARNING ("Partially unknown positions in channel mask");
+      for (; p < num_channels; ++p)
+        from[p] = GST_AUDIO_CHANNEL_POSITION_INVALID;
+    }
     memcpy (to, from, sizeof (from[0]) * num_channels);
     if (!gst_audio_channel_positions_to_valid_order (to, num_channels))
-      return FALSE;
+      goto fail;
     if (!gst_audio_get_channel_reorder_map (num_channels, from, to,
             channel_reorder_map))
-      return FALSE;
+      goto fail;
   }
 
   gst_caps_set_simple (caps, "channel-mask", GST_TYPE_BITMASK, channel_mask,
       NULL);
 
-  return TRUE;
+  ret = TRUE;
+
+fail:
+  g_free (from);
+  g_free (to);
+
+  return ret;
 }
 
 static gboolean
@@ -1202,17 +1208,21 @@
         gint wd, ws;
         GstAudioFormat format;
 
-        /* If we have an empty blockalign, we take the width contained in 
-         * strf->bits_per_sample */
-        if (ba != 0)
+        if (ba > (32 / 8) * ch) {
+          GST_WARNING ("Invalid block align: %d > %d", ba, (32 / 8) * ch);
+          wd = GST_ROUND_UP_8 (strf->bits_per_sample);
+        } else if (ba != 0) {
+          /* If we have an empty blockalign, we take the width contained in 
+           * strf->bits_per_sample */
           wd = ba * 8 / ch;
-        else
-          wd = strf->bits_per_sample;
+        } else {
+          wd = GST_ROUND_UP_8 (strf->bits_per_sample);
+        }
 
         if (strf->bits_per_sample > 32) {
           GST_WARNING ("invalid depth (%d) of pcm audio, overwriting.",
               strf->bits_per_sample);
-          strf->bits_per_sample = 8 * ((wd + 7) / 8);
+          strf->bits_per_sample = wd;
         }
 
         /* in riff, the depth is stored in the size field but it just means that
@@ -1223,6 +1233,10 @@
 
         format =
             gst_audio_format_build_integer (wd != 8, G_LITTLE_ENDIAN, wd, ws);
+        if (format == GST_AUDIO_FORMAT_UNKNOWN) {
+          GST_WARNING ("Unsupported raw audio format with width %d", wd);
+          return NULL;
+        }
 
         caps = gst_caps_new_simple ("audio/x-raw",
             "format", G_TYPE_STRING, gst_audio_format_to_string (format),
diff --git a/gst-libs/gst/riff/riff-read.c b/gst-libs/gst/riff/riff-read.c
index a60b9cf..5a54029 100644
--- a/gst-libs/gst/riff/riff-read.c
+++ b/gst-libs/gst/riff/riff-read.c
@@ -235,7 +235,8 @@
     goto too_small;
 
   tag = GST_READ_UINT32_LE (info.data);
-  if (tag != GST_RIFF_TAG_RIFF && tag != GST_RIFF_TAG_AVF0)
+  if (tag != GST_RIFF_TAG_RIFF && tag != GST_RIFF_TAG_AVF0
+      && tag != GST_RIFF_TAG_RF64)
     goto not_riff;
 
   *doctype = GST_READ_UINT32_LE (info.data + 8);
diff --git a/gst-libs/gst/rtp/Makefile.am b/gst-libs/gst/rtp/Makefile.am
index 15126ff..fdd01c1 100644
--- a/gst-libs/gst/rtp/Makefile.am
+++ b/gst-libs/gst/rtp/Makefile.am
@@ -2,6 +2,7 @@
 
 libgstrtpinclude_HEADERS = \
 			   rtp.h \
+			   gstrtpdefs.h \
 			   gstrtpbuffer.h \
 			   gstrtcpbuffer.h \
 			   gstrtppayloads.h \
@@ -20,24 +21,43 @@
 				gstrtpbasepayload.c \
 				gstrtpbasedepayload.c
 
+built_sources = gstrtp-enumtypes.c
+built_headers = gstrtp-enumtypes.h
+
 libgstrtp_@GST_API_VERSION@_la_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_BASE_CFLAGS) $(GST_CFLAGS)
 libgstrtp_@GST_API_VERSION@_la_LIBADD = $(GST_BASE_LIBS) $(GST_LIBS)
 libgstrtp_@GST_API_VERSION@_la_LDFLAGS = $(GST_LIB_LDFLAGS) $(GST_ALL_LDFLAGS) $(GST_LT_LDFLAGS)
 
+nodist_libgstrtp_@GST_API_VERSION@_la_SOURCES = $(built_sources)
+nodist_libgstrtpinclude_HEADERS = gstrtp-enumtypes.h
+
+BUILT_SOURCES = $(built_headers) $(built_sources)
+CLEANFILES = $(BUILT_SOURCES)
+
+glib_gen_prefix = __gst_rtp
+glib_enum_define = gst_rtp
+glib_enum_headers = $(libgstrtpinclude_HEADERS)
+glib_gen_basename = gstrtp
+
+include $(top_srcdir)/common/gst-glib-gen.mak
+
 if HAVE_INTROSPECTION
 BUILT_GIRSOURCES = GstRtp-@GST_API_VERSION@.gir
 
 gir_headers=$(patsubst %,$(srcdir)/%, $(libgstrtpinclude_HEADERS))
+gir_headers+=$(patsubst %,$(builddir)/%, $(nodist_libgstrtpinclude_HEADERS))
 gir_sources=$(patsubst %,$(srcdir)/%, $(libgstrtp_@GST_API_VERSION@_la_SOURCES))
+gir_sources+=$(patsubst %,$(builddir)/%, $(nodist_libgstrtp_@GST_API_VERSION@_la_SOURCES))
 
 GstRtp-@GST_API_VERSION@.gir: $(INTROSPECTION_SCANNER) libgstrtp-@GST_API_VERSION@.la
-	$(AM_V_GEN)PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" \
+	$(AM_V_GEN)PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" GI_SCANNER_DISABLE_CACHE=yes\
 		GST_PLUGIN_SYSTEM_PATH_1_0="" GST_PLUGIN_PATH_1_0="" GST_REGISTRY_UPDATE=no \
 		$(INTROSPECTION_SCANNER) -v --namespace GstRtp \
 		--nsversion=@GST_API_VERSION@ \
 		--strip-prefix=Gst \
 		--warn-all \
 		--c-include "gst/rtp/rtp.h" \
+		-I$(top_builddir)/gst-libs \
 		-I$(top_srcdir)/gst-libs \
 		--add-include-path=`PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" $(PKG_CONFIG) --variable=girdir gstreamer-@GST_API_VERSION@` \
 		--add-include-path=`PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" $(PKG_CONFIG) --variable=girdir gstreamer-base-@GST_API_VERSION@` \
@@ -48,7 +68,7 @@
 		--pkg gstreamer-@GST_API_VERSION@ \
 		--pkg gstreamer-base-@GST_API_VERSION@ \
 		--pkg-export gstreamer-rtp-@GST_API_VERSION@ \
-		--add-init-section="gst_init(NULL,NULL);" \
+		--add-init-section="$(INTROSPECTION_INIT)" \
 		--output $@ \
 		$(gir_headers) \
 		$(gir_sources)
@@ -71,19 +91,5 @@
 		--includedir=`PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" $(PKG_CONFIG) --variable=girdir gstreamer-base-@GST_API_VERSION@` \
 		$(INTROSPECTION_COMPILER_OPTS) $< -o $(@F)
 
-CLEANFILES = $(BUILT_GIRSOURCES) $(typelibs_DATA)
+CLEANFILES += $(BUILT_GIRSOURCES) $(typelibs_DATA)
 endif
-
-Android.mk: Makefile.am $(BUILT_SOURCES)
-	androgenizer -:PROJECT libgstrtp -:SHARED libgstrtp-@GST_API_VERSION@ \
-	 -:TAGS eng debug \
-         -:REL_TOP $(top_srcdir) -:ABS_TOP $(abs_top_srcdir) \
-	 -:SOURCES $(libgstrtp_@GST_API_VERSION@_la_SOURCES) \
-	 -:CFLAGS $(DEFS) $(DEFAULT_INCLUDES) $(libgstrtp_@GST_API_VERSION@_la_CFLAGS) \
-	 -:LDFLAGS $(libgstrtp_@GST_API_VERSION@_la_LDFLAGS) \
-	           $(libgstrtp_@GST_API_VERSION@_la_LIBADD) \
-	           -ldl \
-	 -:HEADER_TARGET gstreamer-@GST_API_VERSION@/gst/rtp \
-	 -:HEADERS $(libgstrtp_@GST_API_VERSION@include_HEADERS) \
-	 -:PASSTHROUGH LOCAL_ARM_MODE:=arm \
-	> $@
diff --git a/gst-libs/gst/rtp/Makefile.in b/gst-libs/gst/rtp/Makefile.in
index 7fbb606..8dd4a1e 100644
--- a/gst-libs/gst/rtp/Makefile.in
+++ b/gst-libs/gst/rtp/Makefile.in
@@ -1,7 +1,7 @@
-# Makefile.in generated by automake 1.14.1 from Makefile.am.
+# Makefile.in generated by automake 1.15 from Makefile.am.
 # @configure_input@
 
-# Copyright (C) 1994-2013 Free Software Foundation, Inc.
+# 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,
@@ -14,10 +14,28 @@
 
 @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 = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)'
+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 \
       ?) ;; \
@@ -81,9 +99,8 @@
 build_triplet = @build@
 host_triplet = @host@
 target_triplet = @target@
+@HAVE_INTROSPECTION_TRUE@am__append_1 = $(BUILT_GIRSOURCES) $(typelibs_DATA)
 subdir = gst-libs/gst/rtp
-DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \
-	$(top_srcdir)/depcomp $(libgstrtpinclude_HEADERS) README
 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 \
@@ -104,7 +121,6 @@
 	$(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-x11.m4 \
 	$(top_srcdir)/common/m4/gst.m4 \
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
@@ -121,6 +137,8 @@
 	$(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(libgstrtpinclude_HEADERS) \
+	$(am__DIST_COMMON)
 mkinstalldirs = $(install_sh) -d
 CONFIG_HEADER = $(top_builddir)/config.h
 CONFIG_CLEAN_FILES =
@@ -153,7 +171,8 @@
          $(am__cd) "$$dir" && rm -f $$files; }; \
   }
 am__installdirs = "$(DESTDIR)$(libdir)" "$(DESTDIR)$(girdir)" \
-	"$(DESTDIR)$(typelibsdir)" "$(DESTDIR)$(libgstrtpincludedir)"
+	"$(DESTDIR)$(typelibsdir)" "$(DESTDIR)$(libgstrtpincludedir)" \
+	"$(DESTDIR)$(libgstrtpincludedir)"
 LTLIBRARIES = $(lib_LTLIBRARIES)
 am__DEPENDENCIES_1 =
 libgstrtp_@GST_API_VERSION@_la_DEPENDENCIES = $(am__DEPENDENCIES_1) \
@@ -166,8 +185,11 @@
 	libgstrtp_@GST_API_VERSION@_la-gstrtpbaseaudiopayload.lo \
 	libgstrtp_@GST_API_VERSION@_la-gstrtpbasepayload.lo \
 	libgstrtp_@GST_API_VERSION@_la-gstrtpbasedepayload.lo
+am__objects_1 = libgstrtp_@GST_API_VERSION@_la-gstrtp-enumtypes.lo
+nodist_libgstrtp_@GST_API_VERSION@_la_OBJECTS = $(am__objects_1)
 libgstrtp_@GST_API_VERSION@_la_OBJECTS =  \
-	$(am_libgstrtp_@GST_API_VERSION@_la_OBJECTS)
+	$(am_libgstrtp_@GST_API_VERSION@_la_OBJECTS) \
+	$(nodist_libgstrtp_@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
@@ -210,7 +232,8 @@
 am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@)
 am__v_CCLD_0 = @echo "  CCLD    " $@;
 am__v_CCLD_1 = 
-SOURCES = $(libgstrtp_@GST_API_VERSION@_la_SOURCES)
+SOURCES = $(libgstrtp_@GST_API_VERSION@_la_SOURCES) \
+	$(nodist_libgstrtp_@GST_API_VERSION@_la_SOURCES)
 DIST_SOURCES = $(libgstrtp_@GST_API_VERSION@_la_SOURCES)
 am__can_run_installinfo = \
   case $$AM_UPDATE_INFO_DIR in \
@@ -218,7 +241,8 @@
     *) (install-info --version) >/dev/null 2>&1;; \
   esac
 DATA = $(gir_DATA) $(typelibs_DATA)
-HEADERS = $(libgstrtpinclude_HEADERS)
+HEADERS = $(libgstrtpinclude_HEADERS) \
+	$(nodist_libgstrtpinclude_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
@@ -238,6 +262,9 @@
   done | $(am__uniquify_input)`
 ETAGS = etags
 CTAGS = ctags
+am__DIST_COMMON = $(srcdir)/Makefile.in \
+	$(top_srcdir)/common/gst-glib-gen.mak $(top_srcdir)/depcomp \
+	README
 DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
 ACLOCAL = @ACLOCAL@
 ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@
@@ -298,6 +325,8 @@
 GIO_CFLAGS = @GIO_CFLAGS@
 GIO_LDFLAGS = @GIO_LDFLAGS@
 GIO_LIBS = @GIO_LIBS@
+GIO_UNIX_2_0_CFLAGS = @GIO_UNIX_2_0_CFLAGS@
+GIO_UNIX_2_0_LIBS = @GIO_UNIX_2_0_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
@@ -327,6 +356,8 @@
 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_OPTION_CFLAGS = @GST_OPTION_CFLAGS@
 GST_OPTION_CXXFLAGS = @GST_OPTION_CXXFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
@@ -354,7 +385,6 @@
 GTK_X11_CFLAGS = @GTK_X11_CFLAGS@
 GTK_X11_LIBS = @GTK_X11_LIBS@
 HAVE_CDPARANOIA = @HAVE_CDPARANOIA@
-HAVE_X = @HAVE_X@
 HAVE_XSHM = @HAVE_XSHM@
 HAVE_ZLIB = @HAVE_ZLIB@
 HTML_DIR = @HTML_DIR@
@@ -369,6 +399,7 @@
 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@
@@ -458,13 +489,12 @@
 XGETTEXT = @XGETTEXT@
 XGETTEXT_015 = @XGETTEXT_015@
 XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
-XMKMF = @XMKMF@
+XSHM_CFLAGS = @XSHM_CFLAGS@
 XSHM_LIBS = @XSHM_LIBS@
+XVIDEO_CFLAGS = @XVIDEO_CFLAGS@
 XVIDEO_LIBS = @XVIDEO_LIBS@
 X_CFLAGS = @X_CFLAGS@
-X_EXTRA_LIBS = @X_EXTRA_LIBS@
 X_LIBS = @X_LIBS@
-X_PRE_LIBS = @X_PRE_LIBS@
 ZLIB_CFLAGS = @ZLIB_CFLAGS@
 ZLIB_LIBS = @ZLIB_LIBS@
 abs_builddir = @abs_builddir@
@@ -517,6 +547,7 @@
 psdir = @psdir@
 pyexecdir = @pyexecdir@
 pythondir = @pythondir@
+runstatedir = @runstatedir@
 sbindir = @sbindir@
 sharedstatedir = @sharedstatedir@
 srcdir = @srcdir@
@@ -532,6 +563,7 @@
 libgstrtpincludedir = $(includedir)/gstreamer-@GST_API_VERSION@/gst/rtp
 libgstrtpinclude_HEADERS = \
 			   rtp.h \
+			   gstrtpdefs.h \
 			   gstrtpbuffer.h \
 			   gstrtcpbuffer.h \
 			   gstrtppayloads.h \
@@ -549,12 +581,29 @@
 				gstrtpbasepayload.c \
 				gstrtpbasedepayload.c
 
+built_sources = gstrtp-enumtypes.c
+built_headers = gstrtp-enumtypes.h
 libgstrtp_@GST_API_VERSION@_la_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_BASE_CFLAGS) $(GST_CFLAGS)
 libgstrtp_@GST_API_VERSION@_la_LIBADD = $(GST_BASE_LIBS) $(GST_LIBS)
 libgstrtp_@GST_API_VERSION@_la_LDFLAGS = $(GST_LIB_LDFLAGS) $(GST_ALL_LDFLAGS) $(GST_LT_LDFLAGS)
+nodist_libgstrtp_@GST_API_VERSION@_la_SOURCES = $(built_sources)
+nodist_libgstrtpinclude_HEADERS = gstrtp-enumtypes.h
+BUILT_SOURCES = $(built_headers) $(built_sources)
+CLEANFILES = $(BUILT_SOURCES) $(am__append_1)
+glib_gen_prefix = __gst_rtp
+glib_enum_define = gst_rtp
+glib_enum_headers = $(libgstrtpinclude_HEADERS)
+glib_gen_basename = gstrtp
+enum_headers = $(foreach h,$(glib_enum_headers),\n\#include \"$(h)\")
 @HAVE_INTROSPECTION_TRUE@BUILT_GIRSOURCES = GstRtp-@GST_API_VERSION@.gir
-@HAVE_INTROSPECTION_TRUE@gir_headers = $(patsubst %,$(srcdir)/%, $(libgstrtpinclude_HEADERS))
-@HAVE_INTROSPECTION_TRUE@gir_sources = $(patsubst %,$(srcdir)/%, $(libgstrtp_@GST_API_VERSION@_la_SOURCES))
+@HAVE_INTROSPECTION_TRUE@gir_headers = $(patsubst %,$(srcdir)/%, \
+@HAVE_INTROSPECTION_TRUE@	$(libgstrtpinclude_HEADERS)) \
+@HAVE_INTROSPECTION_TRUE@	$(patsubst %,$(builddir)/%, \
+@HAVE_INTROSPECTION_TRUE@	$(nodist_libgstrtpinclude_HEADERS))
+@HAVE_INTROSPECTION_TRUE@gir_sources = $(patsubst %,$(srcdir)/%, \
+@HAVE_INTROSPECTION_TRUE@	$(libgstrtp_@GST_API_VERSION@_la_SOURCES)) \
+@HAVE_INTROSPECTION_TRUE@	$(patsubst %,$(builddir)/%, \
+@HAVE_INTROSPECTION_TRUE@	$(nodist_libgstrtp_@GST_API_VERSION@_la_SOURCES))
 
 # INTROSPECTION_GIRDIR/INTROSPECTION_TYPELIBDIR aren't the right place to
 # install anything - we need to install inside our prefix.
@@ -562,12 +611,12 @@
 @HAVE_INTROSPECTION_TRUE@gir_DATA = $(BUILT_GIRSOURCES)
 @HAVE_INTROSPECTION_TRUE@typelibsdir = $(libdir)/girepository-1.0/
 @HAVE_INTROSPECTION_TRUE@typelibs_DATA = $(BUILT_GIRSOURCES:.gir=.typelib)
-@HAVE_INTROSPECTION_TRUE@CLEANFILES = $(BUILT_GIRSOURCES) $(typelibs_DATA)
-all: all-am
+all: $(BUILT_SOURCES)
+	$(MAKE) $(AM_MAKEFLAGS) all-am
 
 .SUFFIXES:
 .SUFFIXES: .c .lo .o .obj
-$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(top_srcdir)/common/gst-glib-gen.mak $(am__configure_deps)
 	@for dep in $?; do \
 	  case '$(am__configure_deps)' in \
 	    *$$dep*) \
@@ -579,7 +628,6 @@
 	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu gst-libs/gst/rtp/Makefile'; \
 	$(am__cd) $(top_srcdir) && \
 	  $(AUTOMAKE) --gnu gst-libs/gst/rtp/Makefile
-.PRECIOUS: Makefile
 Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
 	@case '$?' in \
 	  *config.status*) \
@@ -588,6 +636,7 @@
 	    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
@@ -643,6 +692,7 @@
 	-rm -f *.tab.c
 
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstrtp_@GST_API_VERSION@_la-gstrtcpbuffer.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstrtp_@GST_API_VERSION@_la-gstrtp-enumtypes.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstrtp_@GST_API_VERSION@_la-gstrtpbaseaudiopayload.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstrtp_@GST_API_VERSION@_la-gstrtpbasedepayload.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstrtp_@GST_API_VERSION@_la-gstrtpbasepayload.Plo@am__quote@
@@ -723,6 +773,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) $(libgstrtp_@GST_API_VERSION@_la_CFLAGS) $(CFLAGS) -c -o libgstrtp_@GST_API_VERSION@_la-gstrtpbasedepayload.lo `test -f 'gstrtpbasedepayload.c' || echo '$(srcdir)/'`gstrtpbasedepayload.c
 
+libgstrtp_@GST_API_VERSION@_la-gstrtp-enumtypes.lo: gstrtp-enumtypes.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) $(libgstrtp_@GST_API_VERSION@_la_CFLAGS) $(CFLAGS) -MT libgstrtp_@GST_API_VERSION@_la-gstrtp-enumtypes.lo -MD -MP -MF $(DEPDIR)/libgstrtp_@GST_API_VERSION@_la-gstrtp-enumtypes.Tpo -c -o libgstrtp_@GST_API_VERSION@_la-gstrtp-enumtypes.lo `test -f 'gstrtp-enumtypes.c' || echo '$(srcdir)/'`gstrtp-enumtypes.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstrtp_@GST_API_VERSION@_la-gstrtp-enumtypes.Tpo $(DEPDIR)/libgstrtp_@GST_API_VERSION@_la-gstrtp-enumtypes.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='gstrtp-enumtypes.c' object='libgstrtp_@GST_API_VERSION@_la-gstrtp-enumtypes.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) $(libgstrtp_@GST_API_VERSION@_la_CFLAGS) $(CFLAGS) -c -o libgstrtp_@GST_API_VERSION@_la-gstrtp-enumtypes.lo `test -f 'gstrtp-enumtypes.c' || echo '$(srcdir)/'`gstrtp-enumtypes.c
+
 mostlyclean-libtool:
 	-rm -f *.lo
 
@@ -791,6 +848,27 @@
 	@list='$(libgstrtpinclude_HEADERS)'; test -n "$(libgstrtpincludedir)" || list=; \
 	files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
 	dir='$(DESTDIR)$(libgstrtpincludedir)'; $(am__uninstall_files_from_dir)
+install-nodist_libgstrtpincludeHEADERS: $(nodist_libgstrtpinclude_HEADERS)
+	@$(NORMAL_INSTALL)
+	@list='$(nodist_libgstrtpinclude_HEADERS)'; test -n "$(libgstrtpincludedir)" || list=; \
+	if test -n "$$list"; then \
+	  echo " $(MKDIR_P) '$(DESTDIR)$(libgstrtpincludedir)'"; \
+	  $(MKDIR_P) "$(DESTDIR)$(libgstrtpincludedir)" || 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)$(libgstrtpincludedir)'"; \
+	  $(INSTALL_HEADER) $$files "$(DESTDIR)$(libgstrtpincludedir)" || exit $$?; \
+	done
+
+uninstall-nodist_libgstrtpincludeHEADERS:
+	@$(NORMAL_UNINSTALL)
+	@list='$(nodist_libgstrtpinclude_HEADERS)'; test -n "$(libgstrtpincludedir)" || list=; \
+	files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+	dir='$(DESTDIR)$(libgstrtpincludedir)'; $(am__uninstall_files_from_dir)
 
 ID: $(am__tagged_files)
 	$(am__define_uniq_tagged_files); mkid -fID $$unique
@@ -875,13 +953,15 @@
 	  fi; \
 	done
 check-am: all-am
-check: check-am
+check: $(BUILT_SOURCES)
+	$(MAKE) $(AM_MAKEFLAGS) check-am
 all-am: Makefile $(LTLIBRARIES) $(DATA) $(HEADERS)
 installdirs:
-	for dir in "$(DESTDIR)$(libdir)" "$(DESTDIR)$(girdir)" "$(DESTDIR)$(typelibsdir)" "$(DESTDIR)$(libgstrtpincludedir)"; do \
+	for dir in "$(DESTDIR)$(libdir)" "$(DESTDIR)$(girdir)" "$(DESTDIR)$(typelibsdir)" "$(DESTDIR)$(libgstrtpincludedir)" "$(DESTDIR)$(libgstrtpincludedir)"; do \
 	  test -z "$$dir" || $(MKDIR_P) "$$dir"; \
 	done
-install: install-am
+install: $(BUILT_SOURCES)
+	$(MAKE) $(AM_MAKEFLAGS) install-am
 install-exec: install-exec-am
 install-data: install-data-am
 uninstall: uninstall-am
@@ -912,6 +992,7 @@
 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-libLTLIBRARIES clean-libtool \
@@ -936,7 +1017,7 @@
 info-am:
 
 install-data-am: install-girDATA install-libgstrtpincludeHEADERS \
-	install-typelibsDATA
+	install-nodist_libgstrtpincludeHEADERS install-typelibsDATA
 
 install-dvi: install-dvi-am
 
@@ -983,9 +1064,11 @@
 ps-am:
 
 uninstall-am: uninstall-girDATA uninstall-libLTLIBRARIES \
-	uninstall-libgstrtpincludeHEADERS uninstall-typelibsDATA
+	uninstall-libgstrtpincludeHEADERS \
+	uninstall-nodist_libgstrtpincludeHEADERS \
+	uninstall-typelibsDATA
 
-.MAKE: install-am install-strip
+.MAKE: all check install install-am install-strip
 
 .PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \
 	clean-libLTLIBRARIES clean-libtool cscopelist-am ctags \
@@ -995,24 +1078,66 @@
 	install-data-am install-dvi install-dvi-am install-exec \
 	install-exec-am install-girDATA install-html install-html-am \
 	install-info install-info-am install-libLTLIBRARIES \
-	install-libgstrtpincludeHEADERS install-man install-pdf \
+	install-libgstrtpincludeHEADERS install-man \
+	install-nodist_libgstrtpincludeHEADERS 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-girDATA uninstall-libLTLIBRARIES \
-	uninstall-libgstrtpincludeHEADERS uninstall-typelibsDATA
+	uninstall-libgstrtpincludeHEADERS \
+	uninstall-nodist_libgstrtpincludeHEADERS \
+	uninstall-typelibsDATA
 
+.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 $@
 
 @HAVE_INTROSPECTION_TRUE@GstRtp-@GST_API_VERSION@.gir: $(INTROSPECTION_SCANNER) libgstrtp-@GST_API_VERSION@.la
-@HAVE_INTROSPECTION_TRUE@	$(AM_V_GEN)PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" \
+@HAVE_INTROSPECTION_TRUE@	$(AM_V_GEN)PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" GI_SCANNER_DISABLE_CACHE=yes\
 @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 GstRtp \
 @HAVE_INTROSPECTION_TRUE@		--nsversion=@GST_API_VERSION@ \
 @HAVE_INTROSPECTION_TRUE@		--strip-prefix=Gst \
 @HAVE_INTROSPECTION_TRUE@		--warn-all \
 @HAVE_INTROSPECTION_TRUE@		--c-include "gst/rtp/rtp.h" \
+@HAVE_INTROSPECTION_TRUE@		-I$(top_builddir)/gst-libs \
 @HAVE_INTROSPECTION_TRUE@		-I$(top_srcdir)/gst-libs \
 @HAVE_INTROSPECTION_TRUE@		--add-include-path=`PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" $(PKG_CONFIG) --variable=girdir gstreamer-@GST_API_VERSION@` \
 @HAVE_INTROSPECTION_TRUE@		--add-include-path=`PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" $(PKG_CONFIG) --variable=girdir gstreamer-base-@GST_API_VERSION@` \
@@ -1023,7 +1148,7 @@
 @HAVE_INTROSPECTION_TRUE@		--pkg gstreamer-@GST_API_VERSION@ \
 @HAVE_INTROSPECTION_TRUE@		--pkg gstreamer-base-@GST_API_VERSION@ \
 @HAVE_INTROSPECTION_TRUE@		--pkg-export gstreamer-rtp-@GST_API_VERSION@ \
-@HAVE_INTROSPECTION_TRUE@		--add-init-section="gst_init(NULL,NULL);" \
+@HAVE_INTROSPECTION_TRUE@		--add-init-section="$(INTROSPECTION_INIT)" \
 @HAVE_INTROSPECTION_TRUE@		--output $@ \
 @HAVE_INTROSPECTION_TRUE@		$(gir_headers) \
 @HAVE_INTROSPECTION_TRUE@		$(gir_sources)
@@ -1037,20 +1162,6 @@
 @HAVE_INTROSPECTION_TRUE@		--includedir=`PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" $(PKG_CONFIG) --variable=girdir gstreamer-base-@GST_API_VERSION@` \
 @HAVE_INTROSPECTION_TRUE@		$(INTROSPECTION_COMPILER_OPTS) $< -o $(@F)
 
-Android.mk: Makefile.am $(BUILT_SOURCES)
-	androgenizer -:PROJECT libgstrtp -:SHARED libgstrtp-@GST_API_VERSION@ \
-	 -:TAGS eng debug \
-         -:REL_TOP $(top_srcdir) -:ABS_TOP $(abs_top_srcdir) \
-	 -:SOURCES $(libgstrtp_@GST_API_VERSION@_la_SOURCES) \
-	 -:CFLAGS $(DEFS) $(DEFAULT_INCLUDES) $(libgstrtp_@GST_API_VERSION@_la_CFLAGS) \
-	 -:LDFLAGS $(libgstrtp_@GST_API_VERSION@_la_LDFLAGS) \
-	           $(libgstrtp_@GST_API_VERSION@_la_LIBADD) \
-	           -ldl \
-	 -:HEADER_TARGET gstreamer-@GST_API_VERSION@/gst/rtp \
-	 -:HEADERS $(libgstrtp_@GST_API_VERSION@include_HEADERS) \
-	 -:PASSTHROUGH LOCAL_ARM_MODE:=arm \
-	> $@
-
 # 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-libs/gst/rtp/gstrtcpbuffer.c b/gst-libs/gst/rtp/gstrtcpbuffer.c
index d66e986..e5e4ca7 100644
--- a/gst-libs/gst/rtp/gstrtcpbuffer.c
+++ b/gst-libs/gst/rtp/gstrtcpbuffer.c
@@ -87,20 +87,9 @@
   return gst_rtcp_buffer_new_take_data (g_memdup (data, len), len);
 }
 
-/**
- * gst_rtcp_buffer_validate_data:
- * @data: (array length=len): the data to validate
- * @len: the length of @data to validate
- *
- * Check if the @data and @size point to the data of a valid RTCP (compound)
- * packet. 
- * Use this function to validate a packet before using the other functions in
- * this module.
- *
- * Returns: TRUE if the data points to a valid RTCP packet.
- */
-gboolean
-gst_rtcp_buffer_validate_data (guint8 * data, guint len)
+static gboolean
+gst_rtcp_buffer_validate_data_internal (guint8 * data, guint len,
+    guint16 valid_mask)
 {
   guint16 header_mask;
   guint header_len;
@@ -116,7 +105,7 @@
     goto wrong_length;
 
   /* first packet must be RR or SR  and version must be 2 */
-  header_mask = ((data[0] << 8) | data[1]) & GST_RTCP_VALID_MASK;
+  header_mask = ((data[0] << 8) | data[1]) & valid_mask;
   if (G_UNLIKELY (header_mask != GST_RTCP_VALID_VALUE))
     goto wrong_mask;
 
@@ -140,24 +129,28 @@
     if (data_len < 4)
       break;
 
+    /* padding only allowed on last packet */
+    if (padding)
+      break;
+
     /* check version of new packet */
     version = data[0] & 0xc0;
     if (version != (GST_RTCP_VERSION << 6))
       goto wrong_version;
 
-    /* padding only allowed on last packet */
-    if ((padding = data[0] & 0x20))
-      break;
+    /* check padding of new packet */
+    if (data[0] & 0x20) {
+      padding = TRUE;
+      /* last byte of padding contains the number of padded bytes including
+       * itself. must be a multiple of 4, but cannot be 0. */
+      pad_bytes = data[data_len - 1];
+      if (pad_bytes == 0 || (pad_bytes & 0x3))
+        goto wrong_padding;
+    }
   }
-  if (data_len > 0) {
-    /* some leftover bytes, check padding */
-    if (!padding)
-      goto wrong_length;
-
-    /* get padding */
-    pad_bytes = data[data_len - 1];
-    if (data_len != pad_bytes)
-      goto wrong_padding;
+  if (data_len != 0) {
+    /* some leftover bytes */
+    goto wrong_length;
   }
   return TRUE;
 
@@ -169,8 +162,7 @@
   }
 wrong_mask:
   {
-    GST_DEBUG ("mask check failed (%04x != %04x)", header_mask,
-        GST_RTCP_VALID_VALUE);
+    GST_DEBUG ("mask check failed (%04x != %04x)", header_mask, valid_mask);
     return FALSE;
   }
 wrong_version:
@@ -186,6 +178,75 @@
 }
 
 /**
+ * gst_rtcp_buffer_validate_data_reduced:
+ * @data: (array length=len): the data to validate
+ * @len: the length of @data to validate
+ *
+ * Check if the @data and @size point to the data of a valid RTCP packet.
+ * Use this function to validate a packet before using the other functions in
+ * this module.
+ *
+ * This function is updated to support reduced size rtcp packets according to
+ * RFC 5506 and will validate full compound RTCP packets as well as reduced
+ * size RTCP packets.
+ *
+ * Returns: TRUE if the data points to a valid RTCP packet.
+ *
+ * Since: 1.6
+ */
+gboolean
+gst_rtcp_buffer_validate_data_reduced (guint8 * data, guint len)
+{
+  return gst_rtcp_buffer_validate_data_internal (data, len,
+      GST_RTCP_REDUCED_SIZE_VALID_MASK);
+}
+
+/**
+ * gst_rtcp_buffer_validate_data:
+ * @data: (array length=len): the data to validate
+ * @len: the length of @data to validate
+ *
+ * Check if the @data and @size point to the data of a valid compound,
+ * non-reduced size RTCP packet.
+ * Use this function to validate a packet before using the other functions in
+ * this module.
+ *
+ * Returns: TRUE if the data points to a valid RTCP packet.
+ */
+gboolean
+gst_rtcp_buffer_validate_data (guint8 * data, guint len)
+{
+  return gst_rtcp_buffer_validate_data_internal (data, len,
+      GST_RTCP_VALID_MASK);
+}
+
+/**
+ * gst_rtcp_buffer_validate_reduced:
+ * @buffer: the buffer to validate
+ *
+ * Check if the data pointed to by @buffer is a valid RTCP packet using
+ * gst_rtcp_buffer_validate_reduced().
+ *
+ * Returns: TRUE if @buffer is a valid RTCP packet.
+ *
+ * Since: 1.6
+ */
+gboolean
+gst_rtcp_buffer_validate_reduced (GstBuffer * buffer)
+{
+  gboolean res;
+  GstMapInfo map;
+
+  g_return_val_if_fail (GST_IS_BUFFER (buffer), FALSE);
+
+  gst_buffer_map (buffer, &map, GST_MAP_READ);
+  res = gst_rtcp_buffer_validate_data_reduced (map.data, map.size);
+  gst_buffer_unmap (buffer, &map);
+
+  return res;
+}
+
+/**
  * gst_rtcp_buffer_validate:
  * @buffer: the buffer to validate
  *
@@ -261,7 +322,7 @@
  * gst_rtcp_buffer_unmap:
  * @rtcp: a buffer with an RTCP packet
  *
- * Finish @rtcp after being constructured. This function is usually called
+ * Finish @rtcp after being constructed. This function is usually called
  * after gst_rtcp_buffer_map() and after adding the RTCP items to the new buffer.
  *
  * The function adjusts the size of @rtcp with the total length of all the
diff --git a/gst-libs/gst/rtp/gstrtcpbuffer.h b/gst-libs/gst/rtp/gstrtcpbuffer.h
index b5ff4a1..328ecdd 100644
--- a/gst-libs/gst/rtp/gstrtcpbuffer.h
+++ b/gst-libs/gst/rtp/gstrtcpbuffer.h
@@ -59,6 +59,9 @@
   GST_RTCP_TYPE_PSFB    = 206
 } GstRTCPType;
 
+/* FIXME 2.0: backwards compatibility define for enum typo */
+#define GST_RTCP_RTPFB_TYPE_RCTP_SR_REQ GST_RTCP_RTPFB_TYPE_RTCP_SR_REQ
+
 /**
  * GstRTCPFBType:
  * @GST_RTCP_FB_TYPE_INVALID: Invalid type
@@ -66,7 +69,7 @@
  * @GST_RTCP_RTPFB_TYPE_TMMBR: Temporary Maximum Media Stream Bit Rate Request
  * @GST_RTCP_RTPFB_TYPE_TMMBN: Temporary Maximum Media Stream Bit Rate
  *    Notification
- * @GST_RTCP_RTPFB_TYPE_RTCP_SR_SEQ: Request an SR packet for early
+ * @GST_RTCP_RTPFB_TYPE_RTCP_SR_REQ: Request an SR packet for early
  *    synchronization
  * @GST_RTCP_PSFB_TYPE_PLI: Picture Loss Indication
  * @GST_RTCP_PSFB_TYPE_SLI: Slice Loss Indication
@@ -89,7 +92,7 @@
   GST_RTCP_RTPFB_TYPE_TMMBR       = 3,
   GST_RTCP_RTPFB_TYPE_TMMBN       = 4,
   /* RTPFB types assigned in RFC 6051 */
-  GST_RTCP_RTPFB_TYPE_RCTP_SR_REQ = 5,
+  GST_RTCP_RTPFB_TYPE_RTCP_SR_REQ = 5,
   /* PSFB types */
   GST_RTCP_PSFB_TYPE_PLI          = 1,
   GST_RTCP_PSFB_TYPE_SLI          = 2,
@@ -165,6 +168,15 @@
  * Mask for version, padding bit and packet type pair
  */
 #define GST_RTCP_VALID_MASK (0xc000 | 0x2000 | 0xfe)
+
+/**
+ * GST_RTCP_REDUCED_SIZE_VALID_MASK:
+ *
+ * Mask for version, padding bit and packet type pair allowing reduced size
+ * packets, basically it accepts other types than RR and SR
+ */
+#define GST_RTCP_REDUCED_SIZE_VALID_MASK (0xc000 | 0x2000 | 0xf8)
+
 /**
  * GST_RTCP_VALID_VALUE:
  *
@@ -215,6 +227,10 @@
 gboolean        gst_rtcp_buffer_validate_data     (guint8 *data, guint len);
 gboolean        gst_rtcp_buffer_validate          (GstBuffer *buffer);
 
+gboolean        gst_rtcp_buffer_validate_data_reduced   (guint8 *data, guint len);
+gboolean        gst_rtcp_buffer_validate_reduced        (GstBuffer *buffer);
+
+
 GstBuffer*      gst_rtcp_buffer_new               (guint mtu);
 
 gboolean        gst_rtcp_buffer_map               (GstBuffer *buffer, GstMapFlags flags, GstRTCPBuffer *rtcp);
diff --git a/gst-libs/gst/rtp/gstrtpbaseaudiopayload.c b/gst-libs/gst/rtp/gstrtpbaseaudiopayload.c
index d3da4c9..917aeae 100644
--- a/gst-libs/gst/rtp/gstrtpbaseaudiopayload.c
+++ b/gst-libs/gst/rtp/gstrtpbaseaudiopayload.c
@@ -62,6 +62,7 @@
 #include <string.h>
 #include <gst/rtp/gstrtpbuffer.h>
 #include <gst/base/gstadapter.h>
+#include <gst/audio/audio.h>
 
 #include "gstrtpbaseaudiopayload.h"
 
@@ -415,7 +416,7 @@
   }
   gst_rtp_buffer_unmap (&rtp);
 
-  GST_BUFFER_TIMESTAMP (buffer) = timestamp;
+  GST_BUFFER_PTS (buffer) = timestamp;
 
   /* get the offset in RTP time */
   GST_BUFFER_OFFSET (buffer) = priv->bytes_to_rtptime (payload, priv->offset);
@@ -477,6 +478,36 @@
   return ret;
 }
 
+typedef struct
+{
+  GstRTPBaseAudioPayload *pay;
+  GstBuffer *outbuf;
+} CopyMetaData;
+
+static gboolean
+foreach_metadata (GstBuffer * inbuf, GstMeta ** meta, gpointer user_data)
+{
+  CopyMetaData *data = user_data;
+  GstRTPBaseAudioPayload *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_base_audio_payload_push_buffer (GstRTPBaseAudioPayload *
     baseaudiopayload, GstBuffer * buffer, GstClockTime timestamp)
@@ -484,7 +515,6 @@
   GstRTPBasePayload *basepayload;
   GstRTPBaseAudioPayloadPrivate *priv;
   GstBuffer *outbuf;
-  guint8 *payload;
   guint payload_len;
   GstFlowReturn ret;
 
@@ -496,13 +526,8 @@
   GST_DEBUG_OBJECT (baseaudiopayload, "Pushing %d bytes ts %" GST_TIME_FORMAT,
       payload_len, GST_TIME_ARGS (timestamp));
 
-  if (priv->buffer_list) {
-    /* create just the RTP header buffer */
-    outbuf = gst_rtp_buffer_new_allocate (0, 0, 0);
-  } else {
-    /* create buffer to hold the payload */
-    outbuf = gst_rtp_buffer_new_allocate (payload_len, 0, 0);
-  }
+  /* create just the RTP header buffer */
+  outbuf = gst_rtp_buffer_new_allocate (0, 0, 0);
 
   /* set metadata */
   gst_rtp_base_audio_payload_set_meta (baseaudiopayload, outbuf, payload_len,
@@ -525,15 +550,13 @@
     GST_DEBUG_OBJECT (baseaudiopayload, "Pushing list %p", list);
     ret = gst_rtp_base_payload_push_list (basepayload, list);
   } else {
-    GstRTPBuffer rtp = { NULL };
+    CopyMetaData data;
 
     /* copy payload */
-    gst_rtp_buffer_map (outbuf, GST_MAP_WRITE, &rtp);
-    payload = gst_rtp_buffer_get_payload (&rtp);
-    gst_buffer_extract (buffer, 0, payload, payload_len);
-    gst_rtp_buffer_unmap (&rtp);
-
-    gst_buffer_unref (buffer);
+    data.pay = baseaudiopayload;
+    data.outbuf = outbuf;
+    gst_buffer_foreach_meta (buffer, foreach_metadata, &data);
+    outbuf = gst_buffer_append (outbuf, buffer);
 
     GST_DEBUG_OBJECT (baseaudiopayload, "Pushing buffer %p", outbuf);
     ret = gst_rtp_base_payload_push (basepayload, outbuf);
@@ -609,11 +632,17 @@
         timestamp);
   } else {
     GstBuffer *paybuf;
+    CopyMetaData data;
+
 
     /* create buffer to hold the payload */
     outbuf = gst_rtp_buffer_new_allocate (0, 0, 0);
 
     paybuf = gst_adapter_take_buffer_fast (adapter, payload_len);
+
+    data.pay = baseaudiopayload;
+    data.outbuf = outbuf;
+    gst_buffer_foreach_meta (paybuf, foreach_metadata, &data);
     outbuf = gst_buffer_append (outbuf, paybuf);
 
     /* set metadata */
@@ -820,7 +849,7 @@
   payload = GST_RTP_BASE_AUDIO_PAYLOAD_CAST (basepayload);
   priv = payload->priv;
 
-  timestamp = GST_BUFFER_TIMESTAMP (buffer);
+  timestamp = GST_BUFFER_PTS (buffer);
   discont = GST_BUFFER_IS_DISCONT (buffer);
   if (discont) {
 
@@ -885,6 +914,7 @@
     GST_DEBUG_OBJECT (payload, "available now %u", available);
 
     /* as long as we have full frames */
+    /* TODO: Use buffer lists here */
     while (available >= min_payload_len) {
       /* get multiple of alignment */
       payload_len = MIN (max_payload_len, available);
diff --git a/gst-libs/gst/rtp/gstrtpbasedepayload.c b/gst-libs/gst/rtp/gstrtpbasedepayload.c
index 05a9033..4c5637d 100644
--- a/gst-libs/gst/rtp/gstrtpbasedepayload.c
+++ b/gst-libs/gst/rtp/gstrtpbasedepayload.c
@@ -39,6 +39,7 @@
   GstClockTime npt_stop;
   gdouble play_speed;
   gdouble play_scale;
+  guint clock_base;
 
   gboolean discont;
   GstClockTime pts;
@@ -52,6 +53,7 @@
   gboolean negotiated;
 
   GstCaps *last_caps;
+  GstEvent *segment_event;
 };
 
 /* Filter signals and args */
@@ -76,6 +78,8 @@
 
 static GstFlowReturn gst_rtp_base_depayload_chain (GstPad * pad,
     GstObject * parent, GstBuffer * in);
+static GstFlowReturn gst_rtp_base_depayload_chain_list (GstPad * pad,
+    GstObject * parent, GstBufferList * list);
 static gboolean gst_rtp_base_depayload_handle_sink_event (GstPad * pad,
     GstObject * parent, GstEvent * event);
 
@@ -92,6 +96,8 @@
     klass);
 static void gst_rtp_base_depayload_init (GstRTPBaseDepayload * rtpbasepayload,
     GstRTPBaseDepayloadClass * klass);
+static GstEvent *create_segment_event (GstRTPBaseDepayload * filter,
+    guint rtptime, GstClockTime position);
 
 GType
 gst_rtp_base_depayload_get_type (void)
@@ -223,6 +229,8 @@
   g_return_if_fail (pad_template != NULL);
   filter->sinkpad = gst_pad_new_from_template (pad_template, "sink");
   gst_pad_set_chain_function (filter->sinkpad, gst_rtp_base_depayload_chain);
+  gst_pad_set_chain_list_function (filter->sinkpad,
+      gst_rtp_base_depayload_chain_list);
   gst_pad_set_event_function (filter->sinkpad,
       gst_rtp_base_depayload_handle_sink_event);
   gst_element_add_pad (GST_ELEMENT (filter), filter->sinkpad);
@@ -238,6 +246,7 @@
   priv->npt_stop = -1;
   priv->play_speed = 1.0;
   priv->play_scale = 1.0;
+  priv->clock_base = -1;
   priv->dts = -1;
   priv->pts = -1;
   priv->duration = -1;
@@ -306,6 +315,12 @@
   else
     priv->play_scale = 1.0;
 
+  value = gst_structure_get_value (caps_struct, "clock-base");
+  if (value && G_VALUE_HOLDS_UINT (value))
+    priv->clock_base = g_value_get_uint (value);
+  else
+    priv->clock_base = -1;
+
   if (bclass->set_caps) {
     res = bclass->set_caps (filter, caps);
     if (!res) {
@@ -331,23 +346,26 @@
 }
 
 static GstFlowReturn
-gst_rtp_base_depayload_chain (GstPad * pad, GstObject * parent, GstBuffer * in)
+gst_rtp_base_depayload_handle_buffer (GstRTPBaseDepayload * filter,
+    GstRTPBaseDepayloadClass * bclass, GstBuffer * in)
 {
-  GstRTPBaseDepayload *filter;
+  GstBuffer *(*process_rtp_packet_func) (GstRTPBaseDepayload * base,
+      GstRTPBuffer * rtp_buffer);
+  GstBuffer *(*process_func) (GstRTPBaseDepayload * base, GstBuffer * in);
   GstRTPBaseDepayloadPrivate *priv;
-  GstRTPBaseDepayloadClass *bclass;
   GstFlowReturn ret = GST_FLOW_OK;
   GstBuffer *out_buf;
-  GstClockTime pts, dts;
   guint16 seqnum;
   guint32 rtptime;
   gboolean discont, buf_discont;
   gint gap;
   GstRTPBuffer rtp = { NULL };
 
-  filter = GST_RTP_BASE_DEPAYLOAD (parent);
   priv = filter->priv;
 
+  process_func = bclass->process;
+  process_rtp_packet_func = bclass->process_rtp_packet;
+
   /* we must have a setcaps first */
   if (G_UNLIKELY (!priv->negotiated))
     goto not_negotiated;
@@ -357,19 +375,12 @@
 
   buf_discont = GST_BUFFER_IS_DISCONT (in);
 
-  pts = GST_BUFFER_PTS (in);
-  dts = GST_BUFFER_DTS (in);
-  /* convert to running_time and save the timestamp, this is the timestamp
-   * we put on outgoing buffers. */
-  pts = gst_segment_to_running_time (&filter->segment, GST_FORMAT_TIME, pts);
-  dts = gst_segment_to_running_time (&filter->segment, GST_FORMAT_TIME, dts);
-  priv->pts = pts;
-  priv->dts = dts;
+  priv->pts = GST_BUFFER_PTS (in);
+  priv->dts = GST_BUFFER_DTS (in);
   priv->duration = GST_BUFFER_DURATION (in);
 
   seqnum = gst_rtp_buffer_get_seq (&rtp);
   rtptime = gst_rtp_buffer_get_timestamp (&rtp);
-  gst_rtp_buffer_unmap (&rtp);
 
   priv->last_seqnum = seqnum;
   priv->last_rtptime = rtptime;
@@ -378,10 +389,10 @@
 
   GST_LOG_OBJECT (filter, "discont %d, seqnum %u, rtptime %u, pts %"
       GST_TIME_FORMAT ", dts %" GST_TIME_FORMAT, buf_discont, seqnum, rtptime,
-      GST_TIME_ARGS (pts), GST_TIME_ARGS (dts));
+      GST_TIME_ARGS (priv->pts), GST_TIME_ARGS (priv->dts));
 
   /* Check seqnum. This is a very simple check that makes sure that the seqnums
-   * are striclty increasing, dropping anything that is out of the ordinary. We
+   * are strictly increasing, dropping anything that is out of the ordinary. We
    * can only do this when the next_seqnum is known. */
   if (G_LIKELY (priv->next_seqnum != -1)) {
     gap = gst_rtp_buffer_compare_seqnum (seqnum, priv->next_seqnum);
@@ -422,17 +433,27 @@
     }
   }
 
-  bclass = GST_RTP_BASE_DEPAYLOAD_GET_CLASS (filter);
+  /* prepare segment event if needed */
+  if (filter->need_newsegment) {
+    priv->segment_event = create_segment_event (filter, rtptime,
+        GST_BUFFER_PTS (in));
+    filter->need_newsegment = FALSE;
+  }
 
-  if (G_UNLIKELY (bclass->process == NULL))
+  if (process_rtp_packet_func != NULL) {
+    out_buf = process_rtp_packet_func (filter, &rtp);
+    gst_rtp_buffer_unmap (&rtp);
+  } else if (process_func != NULL) {
+    gst_rtp_buffer_unmap (&rtp);
+    out_buf = process_func (filter, in);
+  } else {
     goto no_process;
+  }
 
   /* let's send it out to processing */
-  out_buf = bclass->process (filter, in);
   if (out_buf) {
     ret = gst_rtp_base_depayload_push (filter, out_buf);
   }
-  gst_buffer_unref (in);
 
   return ret;
 
@@ -448,7 +469,6 @@
             "element before the depayloader and setting the 'caps' property "
             "on that. Also see http://cgit.freedesktop.org/gstreamer/"
             "gst-plugins-good/tree/gst/rtp/README"));
-    gst_buffer_unref (in);
     return GST_FLOW_NOT_NEGOTIATED;
   }
 invalid_buffer:
@@ -456,25 +476,82 @@
     /* this is not fatal but should be filtered earlier */
     GST_ELEMENT_WARNING (filter, STREAM, DECODE, (NULL),
         ("Received invalid RTP payload, dropping"));
-    gst_buffer_unref (in);
     return GST_FLOW_OK;
   }
 dropping:
   {
+    gst_rtp_buffer_unmap (&rtp);
     GST_WARNING_OBJECT (filter, "%d <= 100, dropping old packet", gap);
-    gst_buffer_unref (in);
     return GST_FLOW_OK;
   }
 no_process:
   {
+    gst_rtp_buffer_unmap (&rtp);
     /* this is not fatal but should be filtered earlier */
     GST_ELEMENT_ERROR (filter, STREAM, NOT_IMPLEMENTED, (NULL),
-        ("The subclass does not have a process method"));
-    gst_buffer_unref (in);
+        ("The subclass does not have a process or process_rtp_packet method"));
     return GST_FLOW_ERROR;
   }
 }
 
+static GstFlowReturn
+gst_rtp_base_depayload_chain (GstPad * pad, GstObject * parent, GstBuffer * in)
+{
+  GstRTPBaseDepayloadClass *bclass;
+  GstRTPBaseDepayload *basedepay;
+  GstFlowReturn flow_ret;
+
+  basedepay = GST_RTP_BASE_DEPAYLOAD_CAST (parent);
+
+  bclass = GST_RTP_BASE_DEPAYLOAD_GET_CLASS (basedepay);
+
+  flow_ret = gst_rtp_base_depayload_handle_buffer (basedepay, bclass, in);
+
+  gst_buffer_unref (in);
+
+  return flow_ret;
+}
+
+static GstFlowReturn
+gst_rtp_base_depayload_chain_list (GstPad * pad, GstObject * parent,
+    GstBufferList * list)
+{
+  GstRTPBaseDepayloadClass *bclass;
+  GstRTPBaseDepayload *basedepay;
+  GstFlowReturn flow_ret;
+  GstBuffer *buffer;
+  guint i, len;
+
+  basedepay = GST_RTP_BASE_DEPAYLOAD_CAST (parent);
+
+  bclass = GST_RTP_BASE_DEPAYLOAD_GET_CLASS (basedepay);
+
+  flow_ret = GST_FLOW_OK;
+
+  /* chain each buffer in list individually */
+  len = gst_buffer_list_length (list);
+
+  if (len == 0)
+    goto done;
+
+  for (i = 0; i < len; i++) {
+    buffer = gst_buffer_list_get (list, i);
+
+    /* Should we fix up any missing timestamps for list buffers here
+     * (e.g. set to first or previous timestamp in list) or just assume
+     * the's a jitterbuffer that will have done that for us? */
+    flow_ret = gst_rtp_base_depayload_handle_buffer (basedepay, bclass, buffer);
+    if (flow_ret != GST_FLOW_OK)
+      break;
+  }
+
+done:
+
+  gst_buffer_list_unref (list);
+
+  return flow_ret;
+}
+
 static gboolean
 gst_rtp_base_depayload_handle_event (GstRTPBaseDepayload * filter,
     GstEvent * event)
@@ -484,9 +561,13 @@
 
   switch (GST_EVENT_TYPE (event)) {
     case GST_EVENT_FLUSH_STOP:
+      GST_OBJECT_LOCK (filter);
       gst_segment_init (&filter->segment, GST_FORMAT_UNDEFINED);
+      GST_OBJECT_UNLOCK (filter);
+
       filter->need_newsegment = TRUE;
       filter->priv->next_seqnum = -1;
+      gst_event_replace (&filter->priv->segment_event, NULL);
       break;
     case GST_EVENT_CAPS:
     {
@@ -500,7 +581,10 @@
     }
     case GST_EVENT_SEGMENT:
     {
+      GST_OBJECT_LOCK (filter);
       gst_event_copy_segment (event, &filter->segment);
+      GST_OBJECT_UNLOCK (filter);
+
       /* don't pass the event downstream, we generate our own segment including
        * the NTP time and other things we receive in caps */
       forward = FALSE;
@@ -560,28 +644,63 @@
 }
 
 static GstEvent *
-create_segment_event (GstRTPBaseDepayload * filter, GstClockTime position)
+create_segment_event (GstRTPBaseDepayload * filter, guint rtptime,
+    GstClockTime position)
 {
   GstEvent *event;
-  GstClockTime stop;
+  GstClockTime start, stop, running_time;
   GstRTPBaseDepayloadPrivate *priv;
   GstSegment segment;
 
   priv = filter->priv;
 
+  /* We don't need the object lock around - the segment
+   * can't change here while we're holding the STREAM_LOCK
+   */
+
+  /* determining the start of the segment */
+  start = filter->segment.start;
+  if (priv->clock_base != -1 && position != -1) {
+    GstClockTime exttime, gap;
+
+    exttime = priv->clock_base;
+    gst_rtp_buffer_ext_timestamp (&exttime, rtptime);
+    gap = gst_util_uint64_scale_int (exttime - priv->clock_base,
+        filter->clock_rate, GST_SECOND);
+
+    /* account for lost packets */
+    if (position > gap) {
+      GST_DEBUG_OBJECT (filter,
+          "Found gap of %" GST_TIME_FORMAT ", adjusting start: %"
+          GST_TIME_FORMAT " = %" GST_TIME_FORMAT " - %" GST_TIME_FORMAT,
+          GST_TIME_ARGS (gap), GST_TIME_ARGS (position - gap),
+          GST_TIME_ARGS (position), GST_TIME_ARGS (gap));
+      start = position - gap;
+    }
+  }
+
+  /* determining the stop of the segment */
+  stop = filter->segment.stop;
   if (priv->npt_stop != -1)
-    stop = priv->npt_stop - priv->npt_start;
-  else
-    stop = -1;
+    stop = start + (priv->npt_stop - priv->npt_start);
+
+  if (position == -1)
+    position = start;
+
+  running_time = gst_segment_to_running_time (&filter->segment,
+      GST_FORMAT_TIME, start);
 
   gst_segment_init (&segment, GST_FORMAT_TIME);
   segment.rate = priv->play_speed;
   segment.applied_rate = priv->play_scale;
-  segment.start = 0;
+  segment.start = start;
   segment.stop = stop;
   segment.time = priv->npt_start;
   segment.position = position;
+  segment.base = running_time;
 
+  GST_DEBUG_OBJECT (filter, "Creating segment event %" GST_SEGMENT_FORMAT,
+      &segment);
   event = gst_event_new_segment (&segment);
 
   return event;
@@ -647,14 +766,9 @@
   }
 
   /* if this is the first buffer send a NEWSEGMENT */
-  if (G_UNLIKELY (filter->need_newsegment)) {
-    GstEvent *event;
-
-    event = create_segment_event (filter, 0);
-
-    gst_pad_push_event (filter->srcpad, event);
-
-    filter->need_newsegment = FALSE;
+  if (G_UNLIKELY (filter->priv->segment_event)) {
+    gst_pad_push_event (filter->srcpad, filter->priv->segment_event);
+    filter->priv->segment_event = NULL;
     GST_DEBUG_OBJECT (filter, "Pushed newsegment event on this first buffer");
   }
 
@@ -760,6 +874,7 @@
       priv->npt_stop = -1;
       priv->play_speed = 1.0;
       priv->play_scale = 1.0;
+      priv->clock_base = -1;
       priv->next_seqnum = -1;
       priv->negotiated = FALSE;
       priv->discont = FALSE;
@@ -777,6 +892,7 @@
       break;
     case GST_STATE_CHANGE_PAUSED_TO_READY:
       gst_caps_replace (&priv->last_caps, NULL);
+      gst_event_replace (&priv->segment_event, NULL);
       break;
     case GST_STATE_CHANGE_READY_TO_NULL:
       break;
@@ -791,17 +907,27 @@
 {
   GstRTPBaseDepayloadPrivate *priv;
   GstStructure *s;
+  GstClockTime pts = GST_CLOCK_TIME_NONE, dts = GST_CLOCK_TIME_NONE;
 
   priv = depayload->priv;
 
+  GST_OBJECT_LOCK (depayload);
+  if (depayload->segment.format != GST_FORMAT_UNDEFINED) {
+    pts = gst_segment_to_running_time (&depayload->segment, GST_FORMAT_TIME,
+        priv->pts);
+    dts = gst_segment_to_running_time (&depayload->segment, GST_FORMAT_TIME,
+        priv->dts);
+  }
+  GST_OBJECT_UNLOCK (depayload);
+
   s = gst_structure_new ("application/x-rtp-depayload-stats",
       "clock_rate", G_TYPE_UINT, depayload->clock_rate,
       "npt-start", G_TYPE_UINT64, priv->npt_start,
       "npt-stop", G_TYPE_UINT64, priv->npt_stop,
       "play-speed", G_TYPE_DOUBLE, priv->play_speed,
       "play-scale", G_TYPE_DOUBLE, priv->play_scale,
-      "running-time-dts", G_TYPE_UINT64, priv->dts,
-      "running-time-pts", G_TYPE_UINT64, priv->pts,
+      "running-time-dts", G_TYPE_UINT64, dts,
+      "running-time-pts", G_TYPE_UINT64, pts,
       "seqnum", G_TYPE_UINT, (guint) priv->last_seqnum,
       "timestamp", G_TYPE_UINT, (guint) priv->last_rtptime, NULL);
 
diff --git a/gst-libs/gst/rtp/gstrtpbasedepayload.h b/gst-libs/gst/rtp/gstrtpbasedepayload.h
index 91586de..20c0b00 100644
--- a/gst-libs/gst/rtp/gstrtpbasedepayload.h
+++ b/gst-libs/gst/rtp/gstrtpbasedepayload.h
@@ -36,9 +36,10 @@
   (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_RTP_BASE_DEPAYLOAD))
 #define GST_IS_RTP_BASE_DEPAYLOAD_CLASS(klass) \
   (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_RTP_BASE_DEPAYLOAD))
+#define GST_RTP_BASE_DEPAYLOAD_CAST(obj) ((GstRTPBaseDepayload *)(obj))
 
-#define GST_RTP_BASE_DEPAYLOAD_SINKPAD(depayload) (GST_RTP_BASE_DEPAYLOAD (depayload)->sinkpad)
-#define GST_RTP_BASE_DEPAYLOAD_SRCPAD(depayload)  (GST_RTP_BASE_DEPAYLOAD (depayload)->srcpad)
+#define GST_RTP_BASE_DEPAYLOAD_SINKPAD(depayload) (GST_RTP_BASE_DEPAYLOAD_CAST (depayload)->sinkpad)
+#define GST_RTP_BASE_DEPAYLOAD_SRCPAD(depayload)  (GST_RTP_BASE_DEPAYLOAD_CAST (depayload)->srcpad)
 
 typedef struct _GstRTPBaseDepayload      GstRTPBaseDepayload;
 typedef struct _GstRTPBaseDepayloadClass GstRTPBaseDepayloadClass;
@@ -79,7 +80,8 @@
   /* virtuals, inform the subclass of the caps. */
   gboolean (*set_caps) (GstRTPBaseDepayload *filter, GstCaps *caps);
 
-  /* pure virtual function, child must use this to process incoming
+  /* pure virtual function, child must implement either this method
+   * or the process_rtp_packet virtual method to process incoming
    * rtp packets. If the child returns a buffer without a valid timestamp,
    * the timestamp of @in will be applied to the result buffer and the
    * buffer will be pushed. If this function returns %NULL, nothing is
@@ -95,8 +97,21 @@
    * implementation can override. */
   gboolean (*handle_event) (GstRTPBaseDepayload * filter, GstEvent * event);
 
+  /* Optional. Same as the process virtual function, but slightly more
+   * efficient, since it is passed the rtp buffer structure that has already
+   * been mapped (with GST_MAP_READ) by the base class and thus does not have
+   * to be mapped again by the subclass. Can be used by the subclass to process
+   * incoming rtp packets. If the subclass returns a buffer without a valid
+   * timestamp, the timestamp of the input buffer will be applied to the result
+   * buffer and the output buffer will be pushed out. If this function returns
+   * %NULL, nothing is pushed out.
+   *
+   * Since: 1.6
+   */
+  GstBuffer * (*process_rtp_packet) (GstRTPBaseDepayload *base, GstRTPBuffer * rtp_buffer);
+
   /*< private >*/
-  gpointer _gst_reserved[GST_PADDING];
+  gpointer _gst_reserved[GST_PADDING - 1];
 };
 
 GType gst_rtp_base_depayload_get_type (void);
diff --git a/gst-libs/gst/rtp/gstrtpbasepayload.c b/gst-libs/gst/rtp/gstrtpbasepayload.c
index e3bf92a..393d8c6 100644
--- a/gst-libs/gst/rtp/gstrtpbasepayload.c
+++ b/gst-libs/gst/rtp/gstrtpbasepayload.c
@@ -44,6 +44,8 @@
   gboolean perfect_rtptime;
   gint notified_first_timestamp;
 
+  gboolean pt_set;
+
   guint64 base_offset;
   gint64 base_rtime;
   guint64 base_rtime_hz;
@@ -370,6 +372,7 @@
   priv->seqnum_offset_random = (rtpbasepayload->seqnum_offset == -1);
   priv->ts_offset_random = (rtpbasepayload->ts_offset == -1);
   priv->ssrc_random = (rtpbasepayload->ssrc == -1);
+  priv->pt_set = FALSE;
 
   rtpbasepayload->max_ptime = DEFAULT_MAX_PTIME;
   rtpbasepayload->min_ptime = DEFAULT_MIN_PTIME;
@@ -771,7 +774,7 @@
 static gboolean
 gst_rtp_base_payload_negotiate (GstRTPBasePayload * payload)
 {
-  GstCaps *peercaps, *filter, *srccaps;
+  GstCaps *templ, *peercaps, *srccaps;
   gboolean res;
 
   payload->priv->caps_max_ptime = DEFAULT_MAX_PTIME;
@@ -779,22 +782,21 @@
 
   gst_pad_check_reconfigure (payload->srcpad);
 
-  filter = gst_pad_get_pad_template_caps (payload->srcpad);
+  templ = gst_pad_get_pad_template_caps (payload->srcpad);
 
   if (payload->priv->subclass_srccaps) {
     GstCaps *tmp = gst_caps_intersect (payload->priv->subclass_srccaps,
-        filter);
-    gst_caps_unref (filter);
-    filter = tmp;
+        templ);
+    gst_caps_unref (templ);
+    templ = tmp;
   }
 
-  peercaps = gst_pad_peer_query_caps (payload->srcpad, filter);
-  gst_caps_unref (filter);
+  peercaps = gst_pad_peer_query_caps (payload->srcpad, templ);
 
   if (peercaps == NULL) {
     /* no peer caps, just add the other properties */
 
-    srccaps = gst_caps_copy (payload->priv->subclass_srccaps);
+    srccaps = gst_caps_copy (templ);
     gst_caps_set_simple (srccaps,
         "payload", G_TYPE_INT, GST_RTP_BASE_PAYLOAD_PT (payload),
         "ssrc", G_TYPE_UINT, payload->current_ssrc,
@@ -806,18 +808,203 @@
     GstCaps *temp;
     GstStructure *s, *d;
     const GValue *value;
-    gint pt;
+    gboolean have_pt = FALSE;
+    gboolean have_ts_offset = FALSE;
+    gboolean have_seqnum_offset = FALSE;
     guint max_ptime, ptime;
 
     /* peer provides caps we can use to fixate. They are already intersected
      * with our srccaps, just make them writable */
     temp = gst_caps_make_writable (peercaps);
+    peercaps = NULL;
 
     if (gst_caps_is_empty (temp)) {
       gst_caps_unref (temp);
+      gst_caps_unref (templ);
       return FALSE;
     }
 
+    /* We prefer the pt, timestamp-offset, seqnum-offset from the
+     * property (if set), or any previously configured value over what
+     * downstream prefers. Only if downstream can't accept that, or the
+     * properties were not set, we fall back to choosing downstream's
+     * preferred value
+     *
+     * For ssrc we prefer any value downstream suggests, otherwise
+     * the property value or as a last resort a random value.
+     * This difference for ssrc is implemented for retaining backwards
+     * compatibility with changing rtpsession's internal-ssrc property.
+     *
+     * FIXME 2.0: All these properties should go away and be negotiated
+     * via caps only!
+     */
+
+    /* try to use the previously set pt, or the one from the property */
+    if (payload->priv->pt_set || gst_pad_has_current_caps (payload->srcpad)) {
+      GstCaps *probe_caps = gst_caps_copy (templ);
+      GstCaps *intersection;
+
+      gst_caps_set_simple (probe_caps, "payload", G_TYPE_INT,
+          GST_RTP_BASE_PAYLOAD_PT (payload), NULL);
+      intersection = gst_caps_intersect (probe_caps, temp);
+
+      if (!gst_caps_is_empty (intersection)) {
+        GST_LOG_OBJECT (payload, "Using selected pt %d",
+            GST_RTP_BASE_PAYLOAD_PT (payload));
+        have_pt = TRUE;
+        gst_caps_unref (temp);
+        temp = intersection;
+      } else {
+        GST_WARNING_OBJECT (payload, "Can't use selected pt %d",
+            GST_RTP_BASE_PAYLOAD_PT (payload));
+        gst_caps_unref (intersection);
+      }
+      gst_caps_unref (probe_caps);
+    }
+
+    /* If we got no pt above, select one now */
+    if (!have_pt) {
+      gint pt;
+
+      /* get first structure */
+      s = gst_caps_get_structure (temp, 0);
+
+      if (gst_structure_get_int (s, "payload", &pt)) {
+        /* use peer pt */
+        GST_RTP_BASE_PAYLOAD_PT (payload) = pt;
+        GST_LOG_OBJECT (payload, "using peer pt %d", pt);
+      } else {
+        if (gst_structure_has_field (s, "payload")) {
+          /* can only fixate if there is a field */
+          gst_structure_fixate_field_nearest_int (s, "payload",
+              GST_RTP_BASE_PAYLOAD_PT (payload));
+          gst_structure_get_int (s, "payload", &pt);
+          GST_RTP_BASE_PAYLOAD_PT (payload) = pt;
+          GST_LOG_OBJECT (payload, "using peer pt %d", pt);
+        } else {
+          /* no pt field, use the internal pt */
+          pt = GST_RTP_BASE_PAYLOAD_PT (payload);
+          gst_structure_set (s, "payload", G_TYPE_INT, pt, NULL);
+          GST_LOG_OBJECT (payload, "using internal pt %d", pt);
+        }
+      }
+      s = NULL;
+    }
+
+    /* If we got no ssrc above, select one now */
+    /* get first structure */
+    s = gst_caps_get_structure (temp, 0);
+
+    if (gst_structure_has_field_typed (s, "ssrc", G_TYPE_UINT)) {
+      value = gst_structure_get_value (s, "ssrc");
+      payload->current_ssrc = g_value_get_uint (value);
+      GST_LOG_OBJECT (payload, "using peer ssrc %08x", payload->current_ssrc);
+    } else {
+      /* FIXME, fixate_nearest_uint would be even better but we
+       * don't support uint ranges so how likely is it that anybody
+       * uses a list of possible ssrcs */
+      gst_structure_set (s, "ssrc", G_TYPE_UINT, payload->current_ssrc, NULL);
+      GST_LOG_OBJECT (payload, "using internal ssrc %08x",
+          payload->current_ssrc);
+    }
+    s = NULL;
+
+    /* try to select the previously used timestamp-offset, or the one from the property */
+    if (!payload->priv->ts_offset_random
+        || gst_pad_has_current_caps (payload->srcpad)) {
+      GstCaps *probe_caps = gst_caps_copy (templ);
+      GstCaps *intersection;
+
+      gst_caps_set_simple (probe_caps, "timestamp-offset", G_TYPE_UINT,
+          payload->ts_base, NULL);
+      intersection = gst_caps_intersect (probe_caps, temp);
+
+      if (!gst_caps_is_empty (intersection)) {
+        GST_LOG_OBJECT (payload, "Using selected timestamp-offset %u",
+            payload->ts_base);
+        gst_caps_unref (temp);
+        temp = intersection;
+        have_ts_offset = TRUE;
+      } else {
+        GST_WARNING_OBJECT (payload, "Can't use selected timestamp-offset %u",
+            payload->ts_base);
+        gst_caps_unref (intersection);
+      }
+      gst_caps_unref (probe_caps);
+    }
+
+    /* If we got no timestamp-offset above, select one now */
+    if (!have_ts_offset) {
+      /* get first structure */
+      s = gst_caps_get_structure (temp, 0);
+
+      if (gst_structure_has_field_typed (s, "timestamp-offset", G_TYPE_UINT)) {
+        value = gst_structure_get_value (s, "timestamp-offset");
+        payload->ts_base = g_value_get_uint (value);
+        GST_LOG_OBJECT (payload, "using peer timestamp-offset %u",
+            payload->ts_base);
+      } else {
+        /* FIXME, fixate_nearest_uint would be even better but we
+         * don't support uint ranges so how likely is it that anybody
+         * uses a list of possible timestamp-offsets */
+        gst_structure_set (s, "timestamp-offset", G_TYPE_UINT, payload->ts_base,
+            NULL);
+        GST_LOG_OBJECT (payload, "using internal timestamp-offset %u",
+            payload->ts_base);
+      }
+      s = NULL;
+    }
+
+    /* try to select the previously used seqnum-offset, or the one from the property */
+    if (!payload->priv->seqnum_offset_random
+        || gst_pad_has_current_caps (payload->srcpad)) {
+      GstCaps *probe_caps = gst_caps_copy (templ);
+      GstCaps *intersection;
+
+      gst_caps_set_simple (probe_caps, "seqnum-offset", G_TYPE_UINT,
+          payload->seqnum_base, NULL);
+      intersection = gst_caps_intersect (probe_caps, temp);
+
+      if (!gst_caps_is_empty (intersection)) {
+        GST_LOG_OBJECT (payload, "Using selected seqnum-offset %u",
+            payload->seqnum_base);
+        gst_caps_unref (temp);
+        temp = intersection;
+        have_seqnum_offset = TRUE;
+      } else {
+        GST_WARNING_OBJECT (payload, "Can't use selected seqnum-offset %u",
+            payload->seqnum_base);
+        gst_caps_unref (intersection);
+      }
+      gst_caps_unref (probe_caps);
+    }
+
+    /* If we got no seqnum-offset above, select one now */
+    if (!have_seqnum_offset) {
+      /* get first structure */
+      s = gst_caps_get_structure (temp, 0);
+
+      if (gst_structure_has_field_typed (s, "seqnum-offset", G_TYPE_UINT)) {
+        value = gst_structure_get_value (s, "seqnum-offset");
+        payload->seqnum_base = g_value_get_uint (value);
+        GST_LOG_OBJECT (payload, "using peer seqnum-offset %u",
+            payload->seqnum_base);
+        payload->priv->next_seqnum = payload->seqnum_base;
+        payload->seqnum = payload->seqnum_base;
+        payload->priv->seqnum_offset_random = FALSE;
+      } else {
+        /* FIXME, fixate_nearest_uint would be even better but we
+         * don't support uint ranges so how likely is it that anybody
+         * uses a list of possible seqnum-offsets */
+        gst_structure_set (s, "seqnum-offset", G_TYPE_UINT,
+            payload->seqnum_base, NULL);
+        GST_LOG_OBJECT (payload, "using internal seqnum-offset %u",
+            payload->seqnum_base);
+      }
+
+      s = NULL;
+    }
+
     /* now fixate, start by taking the first caps */
     temp = gst_caps_truncate (temp);
 
@@ -830,67 +1017,8 @@
     if (gst_structure_get_uint (s, "ptime", &ptime))
       payload->ptime = ptime * GST_MSECOND;
 
-    if (gst_structure_get_int (s, "payload", &pt)) {
-      /* use peer pt */
-      GST_RTP_BASE_PAYLOAD_PT (payload) = pt;
-      GST_LOG_OBJECT (payload, "using peer pt %d", pt);
-    } else {
-      if (gst_structure_has_field (s, "payload")) {
-        /* can only fixate if there is a field */
-        gst_structure_fixate_field_nearest_int (s, "payload",
-            GST_RTP_BASE_PAYLOAD_PT (payload));
-        gst_structure_get_int (s, "payload", &pt);
-        GST_LOG_OBJECT (payload, "using peer pt %d", pt);
-        GST_RTP_BASE_PAYLOAD_PT (payload) = pt;
-      } else {
-        /* no pt field, use the internal pt */
-        pt = GST_RTP_BASE_PAYLOAD_PT (payload);
-        gst_structure_set (s, "payload", G_TYPE_INT, pt, NULL);
-        GST_LOG_OBJECT (payload, "using internal pt %d", pt);
-      }
-    }
-
-    if (gst_structure_has_field_typed (s, "ssrc", G_TYPE_UINT)) {
-      value = gst_structure_get_value (s, "ssrc");
-      payload->current_ssrc = g_value_get_uint (value);
-      GST_LOG_OBJECT (payload, "using peer ssrc %08x", payload->current_ssrc);
-    } else {
-      /* FIXME, fixate_nearest_uint would be even better */
-      gst_structure_set (s, "ssrc", G_TYPE_UINT, payload->current_ssrc, NULL);
-      GST_LOG_OBJECT (payload, "using internal ssrc %08x",
-          payload->current_ssrc);
-    }
-
-    if (gst_structure_has_field_typed (s, "timestamp-offset", G_TYPE_UINT)) {
-      value = gst_structure_get_value (s, "timestamp-offset");
-      payload->ts_base = g_value_get_uint (value);
-      GST_LOG_OBJECT (payload, "using peer timestamp-offset %u",
-          payload->ts_base);
-    } else {
-      /* FIXME, fixate_nearest_uint would be even better */
-      gst_structure_set (s, "timestamp-offset", G_TYPE_UINT, payload->ts_base,
-          NULL);
-      GST_LOG_OBJECT (payload, "using internal timestamp-offset %u",
-          payload->ts_base);
-    }
-    if (gst_structure_has_field_typed (s, "seqnum-offset", G_TYPE_UINT)) {
-      value = gst_structure_get_value (s, "seqnum-offset");
-      payload->seqnum_base = g_value_get_uint (value);
-      GST_LOG_OBJECT (payload, "using peer seqnum-offset %u",
-          payload->seqnum_base);
-      payload->priv->next_seqnum = payload->seqnum_base;
-      payload->seqnum = payload->seqnum_base;
-      payload->priv->seqnum_offset_random = FALSE;
-    } else {
-      /* FIXME, fixate_nearest_uint would be even better */
-      gst_structure_set (s, "seqnum-offset", G_TYPE_UINT, payload->seqnum_base,
-          NULL);
-      GST_LOG_OBJECT (payload, "using internal seqnum-offset %u",
-          payload->seqnum_base);
-    }
-
-    /* make the target caps by copying over all the fixed caps, removing the
-     * unfixed caps. */
+    /* make the target caps by copying over all the fixed fields, removing the
+     * unfixed fields. */
     srccaps = gst_caps_new_empty_simple (gst_structure_get_name (s));
     d = gst_caps_get_structure (srccaps, 0);
 
@@ -905,6 +1033,7 @@
 
   res = gst_pad_set_caps (GST_RTP_BASE_PAYLOAD_SRCPAD (payload), srccaps);
   gst_caps_unref (srccaps);
+  gst_caps_unref (templ);
 
   return res;
 }
@@ -1222,6 +1351,7 @@
       break;
     case PROP_PT:
       rtpbasepayload->pt = g_value_get_uint (value);
+      priv->pt_set = TRUE;
       break;
     case PROP_SSRC:
       val = g_value_get_uint (value);
diff --git a/gst-libs/gst/rtp/gstrtpbuffer.c b/gst-libs/gst/rtp/gstrtpbuffer.c
index 6ff9256..a61051e 100644
--- a/gst-libs/gst/rtp/gstrtpbuffer.c
+++ b/gst-libs/gst/rtp/gstrtpbuffer.c
@@ -323,12 +323,14 @@
   guint size;
   gsize bufsize, skip;
   guint idx, length;
+  guint n_mem;
 
   g_return_val_if_fail (GST_IS_BUFFER (buffer), FALSE);
   g_return_val_if_fail (rtp != NULL, FALSE);
   g_return_val_if_fail (rtp->buffer == NULL, FALSE);
 
-  if (gst_buffer_n_memory (buffer) < 1)
+  n_mem = gst_buffer_n_memory (buffer);
+  if (n_mem < 1)
     goto no_memory;
 
   /* map first memory, this should be the header */
@@ -423,10 +425,19 @@
     goto wrong_padding;
 
   rtp->buffer = buffer;
-  /* we have not yet mapped the payload */
-  rtp->data[2] = NULL;
-  rtp->size[2] = 0;
-  rtp->state = 0;
+
+  if (n_mem == 1) {
+    /* we have mapped the buffer already, so might just as well fill in the
+     * payload pointer and size and avoid another buffer map/unmap later */
+    rtp->data[2] = rtp->map[0].data + header_len;
+    rtp->size[2] = bufsize - header_len - padding;
+  } else {
+    /* we have not yet mapped the payload */
+    rtp->data[2] = NULL;
+    rtp->size[2] = 0;
+  }
+
+  /* rtp->state = 0; *//* unused */
 
   return TRUE;
 
@@ -469,7 +480,7 @@
     GST_MEMDUMP ("buffer", data, size);
 
     for (i = 0; i < G_N_ELEMENTS (rtp->map); ++i) {
-      if (rtp->data[i] != NULL)
+      if (rtp->map[i].memory != NULL)
         gst_buffer_unmap (buffer, &rtp->map[i]);
     }
     return FALSE;
@@ -491,8 +502,12 @@
   g_return_if_fail (rtp->buffer != NULL);
 
   for (i = 0; i < 4; i++) {
-    if (rtp->data[i])
+    if (rtp->map[i].memory != NULL) {
       gst_buffer_unmap (rtp->buffer, &rtp->map[i]);
+      rtp->map[i].memory = NULL;
+    }
+    rtp->data[i] = NULL;
+    rtp->size[i] = 0;
   }
   rtp->buffer = NULL;
 }
@@ -703,7 +718,7 @@
 }
 
 /**
- * gst_rtp_buffer_get_extension_bytes:
+ * gst_rtp_buffer_get_extension_bytes: (rename-to gst_rtp_buffer_get_extension_data)
  * @rtp: the RTP packet
  * @bits: (out): location for header bits
  *
@@ -719,8 +734,6 @@
  * Returns: (transfer full): A new #GBytes if an extension header was present
  * and %NULL otherwise.
  *
- * Rename to: gst_rtp_buffer_get_extension_data
- *
  * Since: 1.2
  */
 GBytes *
@@ -774,9 +787,11 @@
   }
 
   if (changed) {
+    GstBuffer *buf = rtp->buffer;
+
     gst_rtp_buffer_unmap (rtp);
-    gst_buffer_remove_memory_range (rtp->buffer, pos, -1);
-    gst_rtp_buffer_map (rtp->buffer, GST_MAP_READWRITE, rtp);
+    gst_buffer_remove_memory_range (buf, pos, -1);
+    gst_rtp_buffer_map (buf, GST_MAP_READWRITE, rtp);
   }
 }
 
@@ -1148,7 +1163,7 @@
 }
 
 /**
- * gst_rtp_buffer_get_payload_bytes:
+ * gst_rtp_buffer_get_payload_bytes: (rename-to gst_rtp_buffer_get_payload)
  * @rtp: the RTP packet
  *
  * Similar to gst_rtp_buffer_get_payload, but more suitable for language
@@ -1157,8 +1172,6 @@
  *
  * Returns: (transfer full): A new #GBytes containing the payload data in @rtp.
  *
- * Rename to: gst_rtp_buffer_get_payload
- *
  * Since: 1.2
  */
 GBytes *
@@ -1216,6 +1229,11 @@
 gint
 gst_rtp_buffer_compare_seqnum (guint16 seqnum1, guint16 seqnum2)
 {
+  /* See http://en.wikipedia.org/wiki/Serial_number_arithmetic
+   * for an explanation why this does the right thing even for
+   * wraparounds, under the assumption that the difference is
+   * never bigger than 2**15 sequence numbers
+   */
   return (gint16) (seqnum2 - seqnum1);
 }
 
@@ -1520,7 +1538,7 @@
 
 
 static guint
-get_twobytes_header_end_offset (guint8 * pdata, guint wordlen)
+get_twobytes_header_end_offset (const guint8 * pdata, guint wordlen)
 {
   guint offset = 0;
   guint bytelen = wordlen * 4;
diff --git a/gst-libs/gst/rtp/gstrtpdefs.h b/gst-libs/gst/rtp/gstrtpdefs.h
new file mode 100644
index 0000000..350f1c2
--- /dev/null
+++ b/gst-libs/gst/rtp/gstrtpdefs.h
@@ -0,0 +1,49 @@
+/* GStreamer
+ * Copyright (C) <2005> Philippe Khalaf <burger@speedy.org>
+ *               <2005> Wim Taymans <wim@fluendo.com>
+ *
+ * gstrtpbuffer.h: various helper functions to manipulate buffers
+ *     with RTP payload.
+ *
+ * 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_RTPDEFS_H__
+#define __GST_RTPDEFS_H__
+
+#include <gst/gst.h>
+
+/**
+ * GstRTPProfile:
+ * @GST_RTP_PROFILE_UNKNOWN: invalid profile
+ * @GST_RTP_PROFILE_AVP: the Audio/Visual profile (RFC 3551)
+ * @GST_RTP_PROFILE_SAVP: the secure Audio/Visual profile (RFC 3711)
+ * @GST_RTP_PROFILE_AVPF: the Audio/Visual profile with feedback (RFC 4585)
+ * @GST_RTP_PROFILE_SAVPF: the secure Audio/Visual profile with feedback (RFC 5124)
+ *
+ * The transfer profile to use.
+ *
+ * Since: 1.6
+ */
+typedef enum {
+  GST_RTP_PROFILE_UNKNOWN = 0,
+  GST_RTP_PROFILE_AVP,
+  GST_RTP_PROFILE_SAVP,
+  GST_RTP_PROFILE_AVPF,
+  GST_RTP_PROFILE_SAVPF
+} GstRTPProfile;
+
+#endif /* __GST_RTPDEFS_H__ */
diff --git a/gst-libs/gst/rtp/gstrtphdrext.c b/gst-libs/gst/rtp/gstrtphdrext.c
index 9314ba4..0b9174a 100644
--- a/gst-libs/gst/rtp/gstrtphdrext.c
+++ b/gst-libs/gst/rtp/gstrtphdrext.c
@@ -18,7 +18,7 @@
  */
 
 /**
- * SECTION:gstrtpexthdr
+ * SECTION:gstrtphdrext
  * @short_description: Helper methods for dealing with RTP header extensions
  * @see_also: #GstRTPBasePayload, #GstRTPBaseDepayload, gstrtpbuffer
  *
diff --git a/gst-libs/gst/rtp/rtp.h b/gst-libs/gst/rtp/rtp.h
index f0f8a71..546d4ae 100644
--- a/gst-libs/gst/rtp/rtp.h
+++ b/gst-libs/gst/rtp/rtp.h
@@ -22,6 +22,7 @@
 #ifndef __GST_RTP_H__
 #define __GST_RTP_H__
 
+#include <gst/rtp/gstrtpdefs.h>
 #include <gst/rtp/gstrtpbuffer.h>
 #include <gst/rtp/gstrtcpbuffer.h>
 #include <gst/rtp/gstrtppayloads.h>
@@ -29,5 +30,6 @@
 #include <gst/rtp/gstrtpbaseaudiopayload.h>
 #include <gst/rtp/gstrtpbasepayload.h>
 #include <gst/rtp/gstrtpbasedepayload.h>
+#include <gst/rtp/gstrtp-enumtypes.h>
 
 #endif /* __GST_RTP_H__ */
diff --git a/gst-libs/gst/rtsp/Makefile.am b/gst-libs/gst/rtsp/Makefile.am
index b6e1e9d..ede5706 100644
--- a/gst-libs/gst/rtsp/Makefile.am
+++ b/gst-libs/gst/rtsp/Makefile.am
@@ -16,8 +16,8 @@
 
 lib_LTLIBRARIES = libgstrtsp-@GST_API_VERSION@.la
 
-built_sources = gstrtsp-marshal.c gstrtsp-enumtypes.c
-built_headers = gstrtsp-marshal.h gstrtsp-enumtypes.h
+built_sources = gstrtsp-enumtypes.c
+built_headers = gstrtsp-enumtypes.h
 
 libgstrtsp_@GST_API_VERSION@_la_SOURCES = gstrtsptransport.c \
 					 gstrtspurl.c \
@@ -38,12 +38,11 @@
 libgstrtsp_@GST_API_VERSION@_la_LDFLAGS = $(GST_LIB_LDFLAGS) $(GST_ALL_LDFLAGS) $(GST_LT_LDFLAGS) $(WIN32_LIBS)
 
 BUILT_SOURCES = $(built_headers) $(built_sources)
-EXTRA_DIST = gstrtsp-marshal.list
 CLEANFILES = $(BUILT_SOURCES)
 
 glib_gen_prefix = __gst_rtsp
 glib_enum_define = gst_rtsp
-glib_enum_headers = gstrtspdefs.h
+glib_enum_headers = $(libgstrtspinclude_HEADERS)
 glib_gen_basename = gstrtsp
 
 include $(top_srcdir)/common/gst-glib-gen.mak
@@ -57,7 +56,7 @@
 gir_sources+=$(patsubst %,$(builddir)/%, $(nodist_libgstrtsp_@GST_API_VERSION@_la_SOURCES))
 
 GstRtsp-@GST_API_VERSION@.gir: $(INTROSPECTION_SCANNER) libgstrtsp-@GST_API_VERSION@.la
-	$(AM_V_GEN)PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" \
+	$(AM_V_GEN)PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" GI_SCANNER_DISABLE_CACHE=yes\
 		GST_PLUGIN_SYSTEM_PATH_1_0="" GST_PLUGIN_PATH_1_0="" GST_REGISTRY_UPDATE=no \
 		$(INTROSPECTION_SCANNER) -v --namespace GstRtsp \
 		--nsversion=@GST_API_VERSION@ \
@@ -77,7 +76,7 @@
 		--pkg gstreamer-@GST_API_VERSION@ \
 		--pkg gstreamer-sdp-@GST_API_VERSION@ \
 		--pkg-export gstreamer-rtsp-@GST_API_VERSION@ \
-		--add-init-section="gst_init(NULL,NULL);" \
+		--add-init-section="$(INTROSPECTION_INIT)" \
 		--output $@ \
 		$(gir_headers) \
 		$(gir_sources)
@@ -102,19 +101,3 @@
 
 CLEANFILES += $(BUILT_GIRSOURCES) $(typelibs_DATA)
 endif
-
-Android.mk: Makefile.am $(BUILT_SOURCES)
-	androgenizer -:PROJECT libgstrtsp -:SHARED libgstrtsp-@GST_API_VERSION@ \
-	 -:TAGS eng debug \
-         -:REL_TOP $(top_srcdir) -:ABS_TOP $(abs_top_srcdir) \
-	 -:SOURCES $(libgstrtsp_@GST_API_VERSION@_la_SOURCES) \
-	           $(nodist_libgstrtsp_@GST_API_VERSION@_la_SOURCES) \
-	 -:CFLAGS $(DEFS) $(DEFAULT_INCLUDES) $(libgstrtsp_@GST_API_VERSION@_la_CFLAGS) \
-	 -:LDFLAGS $(libgstrtsp_@GST_API_VERSION@_la_LDFLAGS) \
-	           $(libgstrtsp_@GST_API_VERSION@_la_LIBADD) \
-	           -ldl \
-	 -:HEADER_TARGET gstreamer-@GST_API_VERSION@/gst/rtsp \
-	 -:HEADERS $(libgstrtspinclude_HEADERS) \
-	           $(nodist_libgstrtspinclude_HEADERS) \
-	 -:PASSTHROUGH LOCAL_ARM_MODE:=arm \
-	> $@
diff --git a/gst-libs/gst/rtsp/Makefile.in b/gst-libs/gst/rtsp/Makefile.in
index 4b00ccf..bd948cb 100644
--- a/gst-libs/gst/rtsp/Makefile.in
+++ b/gst-libs/gst/rtsp/Makefile.in
@@ -1,7 +1,7 @@
-# Makefile.in generated by automake 1.14.1 from Makefile.am.
+# Makefile.in generated by automake 1.15 from Makefile.am.
 # @configure_input@
 
-# Copyright (C) 1994-2013 Free Software Foundation, Inc.
+# 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,
@@ -25,7 +25,17 @@
 
 
 VPATH = @srcdir@
-am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)'
+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 \
       ?) ;; \
@@ -89,9 +99,6 @@
 build_triplet = @build@
 host_triplet = @host@
 target_triplet = @target@
-DIST_COMMON = $(top_srcdir)/common/gst-glib-gen.mak \
-	$(srcdir)/Makefile.in $(srcdir)/Makefile.am \
-	$(top_srcdir)/depcomp $(libgstrtspinclude_HEADERS)
 @HAVE_INTROSPECTION_TRUE@am__append_1 = $(BUILT_GIRSOURCES) $(typelibs_DATA)
 subdir = gst-libs/gst/rtsp
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
@@ -114,7 +121,6 @@
 	$(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-x11.m4 \
 	$(top_srcdir)/common/m4/gst.m4 \
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
@@ -131,6 +137,8 @@
 	$(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(libgstrtspinclude_HEADERS) \
+	$(am__DIST_COMMON)
 mkinstalldirs = $(install_sh) -d
 CONFIG_HEADER = $(top_builddir)/config.h
 CONFIG_CLEAN_FILES =
@@ -177,8 +185,7 @@
 	libgstrtsp_@GST_API_VERSION@_la-gstrtspdefs.lo \
 	libgstrtsp_@GST_API_VERSION@_la-gstrtspextension.lo \
 	libgstrtsp_@GST_API_VERSION@_la-gstrtsprange.lo
-am__objects_1 = libgstrtsp_@GST_API_VERSION@_la-gstrtsp-marshal.lo \
-	libgstrtsp_@GST_API_VERSION@_la-gstrtsp-enumtypes.lo
+am__objects_1 = libgstrtsp_@GST_API_VERSION@_la-gstrtsp-enumtypes.lo
 nodist_libgstrtsp_@GST_API_VERSION@_la_OBJECTS = $(am__objects_1)
 libgstrtsp_@GST_API_VERSION@_la_OBJECTS =  \
 	$(am_libgstrtsp_@GST_API_VERSION@_la_OBJECTS) \
@@ -255,6 +262,8 @@
   done | $(am__uniquify_input)`
 ETAGS = etags
 CTAGS = ctags
+am__DIST_COMMON = $(srcdir)/Makefile.in \
+	$(top_srcdir)/common/gst-glib-gen.mak $(top_srcdir)/depcomp
 DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
 ACLOCAL = @ACLOCAL@
 ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@
@@ -315,6 +324,8 @@
 GIO_CFLAGS = @GIO_CFLAGS@
 GIO_LDFLAGS = @GIO_LDFLAGS@
 GIO_LIBS = @GIO_LIBS@
+GIO_UNIX_2_0_CFLAGS = @GIO_UNIX_2_0_CFLAGS@
+GIO_UNIX_2_0_LIBS = @GIO_UNIX_2_0_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
@@ -344,6 +355,8 @@
 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_OPTION_CFLAGS = @GST_OPTION_CFLAGS@
 GST_OPTION_CXXFLAGS = @GST_OPTION_CXXFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
@@ -371,7 +384,6 @@
 GTK_X11_CFLAGS = @GTK_X11_CFLAGS@
 GTK_X11_LIBS = @GTK_X11_LIBS@
 HAVE_CDPARANOIA = @HAVE_CDPARANOIA@
-HAVE_X = @HAVE_X@
 HAVE_XSHM = @HAVE_XSHM@
 HAVE_ZLIB = @HAVE_ZLIB@
 HTML_DIR = @HTML_DIR@
@@ -386,6 +398,7 @@
 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@
@@ -475,13 +488,12 @@
 XGETTEXT = @XGETTEXT@
 XGETTEXT_015 = @XGETTEXT_015@
 XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
-XMKMF = @XMKMF@
+XSHM_CFLAGS = @XSHM_CFLAGS@
 XSHM_LIBS = @XSHM_LIBS@
+XVIDEO_CFLAGS = @XVIDEO_CFLAGS@
 XVIDEO_LIBS = @XVIDEO_LIBS@
 X_CFLAGS = @X_CFLAGS@
-X_EXTRA_LIBS = @X_EXTRA_LIBS@
 X_LIBS = @X_LIBS@
-X_PRE_LIBS = @X_PRE_LIBS@
 ZLIB_CFLAGS = @ZLIB_CFLAGS@
 ZLIB_LIBS = @ZLIB_LIBS@
 abs_builddir = @abs_builddir@
@@ -534,6 +546,7 @@
 psdir = @psdir@
 pyexecdir = @pyexecdir@
 pythondir = @pythondir@
+runstatedir = @runstatedir@
 sbindir = @sbindir@
 sharedstatedir = @sharedstatedir@
 srcdir = @srcdir@
@@ -562,8 +575,8 @@
 #gstrtspextreal.h    
 #gstrtspextwms.h     
 lib_LTLIBRARIES = libgstrtsp-@GST_API_VERSION@.la
-built_sources = gstrtsp-marshal.c gstrtsp-enumtypes.c
-built_headers = gstrtsp-marshal.h gstrtsp-enumtypes.h
+built_sources = gstrtsp-enumtypes.c
+built_headers = gstrtsp-enumtypes.h
 libgstrtsp_@GST_API_VERSION@_la_SOURCES = gstrtsptransport.c \
 					 gstrtspurl.c \
 					 gstrtspmessage.c    \
@@ -581,11 +594,10 @@
 libgstrtsp_@GST_API_VERSION@_la_LIBADD = $(GST_LIBS) $(GIO_LIBS) $(LIBM)
 libgstrtsp_@GST_API_VERSION@_la_LDFLAGS = $(GST_LIB_LDFLAGS) $(GST_ALL_LDFLAGS) $(GST_LT_LDFLAGS) $(WIN32_LIBS)
 BUILT_SOURCES = $(built_headers) $(built_sources)
-EXTRA_DIST = gstrtsp-marshal.list
 CLEANFILES = $(BUILT_SOURCES) $(am__append_1)
 glib_gen_prefix = __gst_rtsp
 glib_enum_define = gst_rtsp
-glib_enum_headers = gstrtspdefs.h
+glib_enum_headers = $(libgstrtspinclude_HEADERS)
 glib_gen_basename = gstrtsp
 enum_headers = $(foreach h,$(glib_enum_headers),\n\#include \"$(h)\")
 @HAVE_INTROSPECTION_TRUE@BUILT_GIRSOURCES = GstRtsp-@GST_API_VERSION@.gir
@@ -621,7 +633,6 @@
 	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu gst-libs/gst/rtsp/Makefile'; \
 	$(am__cd) $(top_srcdir) && \
 	  $(AUTOMAKE) --gnu gst-libs/gst/rtsp/Makefile
-.PRECIOUS: Makefile
 Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
 	@case '$?' in \
 	  *config.status*) \
@@ -630,7 +641,7 @@
 	    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:
+$(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
@@ -686,7 +697,6 @@
 	-rm -f *.tab.c
 
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstrtsp_@GST_API_VERSION@_la-gstrtsp-enumtypes.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstrtsp_@GST_API_VERSION@_la-gstrtsp-marshal.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstrtsp_@GST_API_VERSION@_la-gstrtspconnection.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstrtsp_@GST_API_VERSION@_la-gstrtspdefs.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstrtsp_@GST_API_VERSION@_la-gstrtspextension.Plo@am__quote@
@@ -768,13 +778,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) $(libgstrtsp_@GST_API_VERSION@_la_CFLAGS) $(CFLAGS) -c -o libgstrtsp_@GST_API_VERSION@_la-gstrtsprange.lo `test -f 'gstrtsprange.c' || echo '$(srcdir)/'`gstrtsprange.c
 
-libgstrtsp_@GST_API_VERSION@_la-gstrtsp-marshal.lo: gstrtsp-marshal.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) $(libgstrtsp_@GST_API_VERSION@_la_CFLAGS) $(CFLAGS) -MT libgstrtsp_@GST_API_VERSION@_la-gstrtsp-marshal.lo -MD -MP -MF $(DEPDIR)/libgstrtsp_@GST_API_VERSION@_la-gstrtsp-marshal.Tpo -c -o libgstrtsp_@GST_API_VERSION@_la-gstrtsp-marshal.lo `test -f 'gstrtsp-marshal.c' || echo '$(srcdir)/'`gstrtsp-marshal.c
-@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstrtsp_@GST_API_VERSION@_la-gstrtsp-marshal.Tpo $(DEPDIR)/libgstrtsp_@GST_API_VERSION@_la-gstrtsp-marshal.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='gstrtsp-marshal.c' object='libgstrtsp_@GST_API_VERSION@_la-gstrtsp-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 $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstrtsp_@GST_API_VERSION@_la_CFLAGS) $(CFLAGS) -c -o libgstrtsp_@GST_API_VERSION@_la-gstrtsp-marshal.lo `test -f 'gstrtsp-marshal.c' || echo '$(srcdir)/'`gstrtsp-marshal.c
-
 libgstrtsp_@GST_API_VERSION@_la-gstrtsp-enumtypes.lo: gstrtsp-enumtypes.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) $(libgstrtsp_@GST_API_VERSION@_la_CFLAGS) $(CFLAGS) -MT libgstrtsp_@GST_API_VERSION@_la-gstrtsp-enumtypes.lo -MD -MP -MF $(DEPDIR)/libgstrtsp_@GST_API_VERSION@_la-gstrtsp-enumtypes.Tpo -c -o libgstrtsp_@GST_API_VERSION@_la-gstrtsp-enumtypes.lo `test -f 'gstrtsp-enumtypes.c' || echo '$(srcdir)/'`gstrtsp-enumtypes.c
 @am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstrtsp_@GST_API_VERSION@_la-gstrtsp-enumtypes.Tpo $(DEPDIR)/libgstrtsp_@GST_API_VERSION@_la-gstrtsp-enumtypes.Plo
@@ -1092,6 +1095,8 @@
 	uninstall-nodist_libgstrtspincludeHEADERS \
 	uninstall-typelibsDATA
 
+.PRECIOUS: Makefile
+
 
 # these are all the rules generating the relevant files
 $(glib_gen_basename)-marshal.h: $(glib_gen_basename)-marshal.list
@@ -1130,7 +1135,7 @@
 	@touch $@
 
 @HAVE_INTROSPECTION_TRUE@GstRtsp-@GST_API_VERSION@.gir: $(INTROSPECTION_SCANNER) libgstrtsp-@GST_API_VERSION@.la
-@HAVE_INTROSPECTION_TRUE@	$(AM_V_GEN)PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" \
+@HAVE_INTROSPECTION_TRUE@	$(AM_V_GEN)PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" GI_SCANNER_DISABLE_CACHE=yes\
 @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 GstRtsp \
 @HAVE_INTROSPECTION_TRUE@		--nsversion=@GST_API_VERSION@ \
@@ -1150,7 +1155,7 @@
 @HAVE_INTROSPECTION_TRUE@		--pkg gstreamer-@GST_API_VERSION@ \
 @HAVE_INTROSPECTION_TRUE@		--pkg gstreamer-sdp-@GST_API_VERSION@ \
 @HAVE_INTROSPECTION_TRUE@		--pkg-export gstreamer-rtsp-@GST_API_VERSION@ \
-@HAVE_INTROSPECTION_TRUE@		--add-init-section="gst_init(NULL,NULL);" \
+@HAVE_INTROSPECTION_TRUE@		--add-init-section="$(INTROSPECTION_INIT)" \
 @HAVE_INTROSPECTION_TRUE@		--output $@ \
 @HAVE_INTROSPECTION_TRUE@		$(gir_headers) \
 @HAVE_INTROSPECTION_TRUE@		$(gir_sources)
@@ -1164,22 +1169,6 @@
 @HAVE_INTROSPECTION_TRUE@		--includedir=`PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" $(PKG_CONFIG) --variable=girdir gstreamer-@GST_API_VERSION@` \
 @HAVE_INTROSPECTION_TRUE@		$(INTROSPECTION_COMPILER_OPTS) $< -o $(@F)
 
-Android.mk: Makefile.am $(BUILT_SOURCES)
-	androgenizer -:PROJECT libgstrtsp -:SHARED libgstrtsp-@GST_API_VERSION@ \
-	 -:TAGS eng debug \
-         -:REL_TOP $(top_srcdir) -:ABS_TOP $(abs_top_srcdir) \
-	 -:SOURCES $(libgstrtsp_@GST_API_VERSION@_la_SOURCES) \
-	           $(nodist_libgstrtsp_@GST_API_VERSION@_la_SOURCES) \
-	 -:CFLAGS $(DEFS) $(DEFAULT_INCLUDES) $(libgstrtsp_@GST_API_VERSION@_la_CFLAGS) \
-	 -:LDFLAGS $(libgstrtsp_@GST_API_VERSION@_la_LDFLAGS) \
-	           $(libgstrtsp_@GST_API_VERSION@_la_LIBADD) \
-	           -ldl \
-	 -:HEADER_TARGET gstreamer-@GST_API_VERSION@/gst/rtsp \
-	 -:HEADERS $(libgstrtspinclude_HEADERS) \
-	           $(nodist_libgstrtspinclude_HEADERS) \
-	 -:PASSTHROUGH LOCAL_ARM_MODE:=arm \
-	> $@
-
 # 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-libs/gst/rtsp/gstrtsp-marshal.list b/gst-libs/gst/rtsp/gstrtsp-marshal.list
deleted file mode 100644
index 40b8c72..0000000
--- a/gst-libs/gst/rtsp/gstrtsp-marshal.list
+++ /dev/null
@@ -1,2 +0,0 @@
-# rtsp marshallers
-ENUM:POINTER,POINTER
diff --git a/gst-libs/gst/rtsp/gstrtspconnection.c b/gst-libs/gst/rtsp/gstrtspconnection.c
index bea1645..2063767 100644
--- a/gst-libs/gst/rtsp/gstrtspconnection.c
+++ b/gst-libs/gst/rtsp/gstrtspconnection.c
@@ -159,6 +159,7 @@
 
   /* TLS */
   GTlsDatabase *tls_database;
+  GTlsInteraction *tls_interaction;
 
   DecodeCtx ctx;
   DecodeCtx *ctxp;
@@ -253,7 +254,7 @@
 
 static void
 socket_client_event (GSocketClient * client, GSocketClientEvent event,
-    GSocketConnectable * connectable, GIOStream * connection,
+    GSocketConnectable * connectable, GTlsConnection * connection,
     GstRTSPConnection * rtspconn)
 {
   if (event == G_SOCKET_CLIENT_TLS_HANDSHAKING) {
@@ -261,6 +262,8 @@
 
     g_signal_connect (connection, "accept-certificate",
         (GCallback) tls_accept_certificate, rtspconn);
+
+    g_tls_connection_set_interaction (connection, rtspconn->tls_interaction);
   }
 }
 
@@ -353,6 +356,8 @@
  *
  * Returns: #GST_RTSP_OK when @conn contains a valid connection.
  */
+/* FIXME 2.0 We don't need the ip and port since they can be got from the
+ * GSocket */
 GstRTSPResult
 gst_rtsp_connection_create_from_socket (GSocket * socket, const gchar * ip,
     guint16 port, const gchar * initial_buffer, GstRTSPConnection ** conn)
@@ -622,6 +627,61 @@
   return result;
 }
 
+/**
+ * gst_rtsp_connection_set_tls_interaction:
+ * @conn: a #GstRTSPConnection
+ * @interaction: a #GTlsInteraction
+ *
+ * Sets a #GTlsInteraction object to be used when the connection or certificate
+ * database need to interact with the user. This will be used to prompt the
+ * user for passwords where necessary.
+ *
+ * Since: 1.6
+ */
+void
+gst_rtsp_connection_set_tls_interaction (GstRTSPConnection * conn,
+    GTlsInteraction * interaction)
+{
+  GTlsInteraction *old_interaction;
+
+  g_return_if_fail (conn != NULL);
+
+  if (interaction)
+    g_object_ref (interaction);
+
+  old_interaction = conn->tls_interaction;
+  conn->tls_interaction = interaction;
+
+  if (old_interaction)
+    g_object_unref (old_interaction);
+}
+
+/**
+ * gst_rtsp_connection_get_tls_interaction:
+ * @conn: a #GstRTSPConnection
+ *
+ * Gets a #GTlsInteraction object to be used when the connection or certificate
+ * database need to interact with the user. This will be used to prompt the
+ * user for passwords where necessary.
+ *
+ * Returns: (transfer full): a reference on the #GTlsInteraction. Use
+ * g_object_unref() to release.
+ *
+ * Since: 1.6
+ */
+GTlsInteraction *
+gst_rtsp_connection_get_tls_interaction (GstRTSPConnection * conn)
+{
+  GTlsInteraction *result;
+
+  g_return_val_if_fail (conn != NULL, NULL);
+
+  if ((result = conn->tls_interaction))
+    g_object_ref (result);
+
+  return result;
+}
+
 static GstRTSPResult
 setup_tunneling (GstRTSPConnection * conn, GTimeVal * timeout, gchar * uri)
 {
@@ -1782,6 +1842,19 @@
       next_value++;
     }
 
+    if (msg->type == GST_RTSP_MESSAGE_REQUEST && field == GST_RTSP_HDR_SESSION) {
+      /* The timeout parameter is only allowed in a session response header
+       * but some clients send it as part of the session request header.
+       * Ignore everything from the semicolon to the end of the line. */
+      next_value = value;
+      while (*next_value != '\0') {
+        if (*next_value == ';') {
+          break;
+        }
+        next_value++;
+      }
+    }
+
     /* trim space */
     if (value != next_value && next_value[-1] == ' ')
       next_value[-1] = '\0';
@@ -2285,6 +2358,8 @@
     g_object_unref (conn->client);
   if (conn->tls_database)
     g_object_unref (conn->tls_database);
+  if (conn->tls_interaction)
+    g_object_unref (conn->tls_interaction);
 
   g_timer_destroy (conn->timer);
   gst_rtsp_url_free (conn->url);
@@ -2461,10 +2536,12 @@
 {
   g_return_val_if_fail (conn != NULL, GST_RTSP_EINVAL);
 
-  if (flush)
+  if (flush) {
     g_cancellable_cancel (conn->cancellable);
-  else
-    g_cancellable_reset (conn->cancellable);
+  } else {
+    g_object_unref (conn->cancellable);
+    conn->cancellable = g_cancellable_new ();
+  }
 
   return GST_RTSP_OK;
 }
@@ -2760,7 +2837,7 @@
 }
 
 /**
- * gst_rtsp_connection_get_readfd:
+ * gst_rtsp_connection_get_read_socket:
  * @conn: a #GstRTSPConnection
  *
  * Get the file descriptor for reading.
@@ -2927,7 +3004,8 @@
     conn2->stream1 = NULL;
     conn2->input_stream = NULL;
     conn2->control_stream = NULL;
-    g_cancellable_reset (conn2->cancellable);
+    g_object_unref (conn2->cancellable);
+    conn2->cancellable = NULL;
 
     /* We make socket0 the write socket and socket1 the read socket. */
     conn->write_socket = conn->socket0;
@@ -3418,7 +3496,7 @@
 };
 
 /**
- * gst_rtsp_watch_new:
+ * gst_rtsp_watch_new: (skip)
  * @conn: a #GstRTSPConnection
  * @funcs: watch functions
  * @user_data: user data to pass to @funcs
@@ -3857,7 +3935,7 @@
   g_mutex_lock (&watch->mutex);
   watch->flushing = flushing;
   g_cond_signal (&watch->queue_not_full);
-  if (flushing == TRUE) {
+  if (flushing) {
     g_queue_foreach (watch->messages, (GFunc) gst_rtsp_rec_free, NULL);
     g_queue_clear (watch->messages);
   }
diff --git a/gst-libs/gst/rtsp/gstrtspconnection.h b/gst-libs/gst/rtsp/gstrtspconnection.h
index 7402b68..464764b 100644
--- a/gst-libs/gst/rtsp/gstrtspconnection.h
+++ b/gst-libs/gst/rtsp/gstrtspconnection.h
@@ -78,6 +78,8 @@
 GTlsCertificateFlags gst_rtsp_connection_get_tls_validation_flags (GstRTSPConnection * conn);
 void                 gst_rtsp_connection_set_tls_database (GstRTSPConnection * conn, GTlsDatabase * database);
 GTlsDatabase *       gst_rtsp_connection_get_tls_database (GstRTSPConnection * conn);
+void                 gst_rtsp_connection_set_tls_interaction (GstRTSPConnection * conn, GTlsInteraction * interaction);
+GTlsInteraction *    gst_rtsp_connection_get_tls_interaction (GstRTSPConnection * conn);
 
 /* sending/receiving raw bytes */
 GstRTSPResult      gst_rtsp_connection_read           (GstRTSPConnection * conn, guint8 * data,
@@ -218,7 +220,7 @@
                                                       GTimeVal *timeout);
 
 void               gst_rtsp_watch_set_flushing       (GstRTSPWatch * watch,
-                                                      gboolean flush);
+                                                      gboolean flushing);
 G_END_DECLS
 
 #endif /* __GST_RTSP_CONNECTION_H__ */
diff --git a/gst-libs/gst/rtsp/gstrtspextension.c b/gst-libs/gst/rtsp/gstrtspextension.c
index 5b5eed3..e178bc2 100644
--- a/gst-libs/gst/rtsp/gstrtspextension.c
+++ b/gst-libs/gst/rtsp/gstrtspextension.c
@@ -35,7 +35,6 @@
 #include "config.h"
 #endif
 
-#include "gstrtsp-marshal.h"
 #include "gstrtsp-enumtypes.h"
 #include "gstrtspextension.h"
 
@@ -82,7 +81,7 @@
     gst_rtsp_extension_signals[SIGNAL_SEND] =
         g_signal_new ("send", G_TYPE_FROM_CLASS (iface),
         G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET (GstRTSPExtensionInterface,
-            send), NULL, NULL, __gst_rtsp_marshal_ENUM__POINTER_POINTER,
+            send), NULL, NULL, g_cclosure_marshal_generic,
         GST_TYPE_RTSP_RESULT, 2, G_TYPE_POINTER, G_TYPE_POINTER);
     initialized = TRUE;
   }
diff --git a/gst-libs/gst/rtsp/gstrtspmessage.c b/gst-libs/gst/rtsp/gstrtspmessage.c
index 841aa19..a326e5a 100644
--- a/gst-libs/gst/rtsp/gstrtspmessage.c
+++ b/gst-libs/gst/rtsp/gstrtspmessage.c
@@ -1,6 +1,7 @@
 /* GStreamer
  * Copyright (C) <2005,2006> Wim Taymans <wim@fluendo.com>
  *               <2006> Lutz Mueller <lutz at topfrose dot de>
+ *               <2015> Tim-Philipp Müller <tim@centricular.com>
  *
  * This library is free software; you can redistribute it and/or
  * modify it under the terms of the GNU Library General Public
@@ -58,6 +59,7 @@
 {
   GstRTSPHeaderField field;
   gchar *value;
+  gchar *custom_key;            /* custom header string (field is INVALID then) */
 } RTSPKeyValue;
 
 static void
@@ -462,6 +464,7 @@
       RTSPKeyValue *keyval = &g_array_index (msg->hdr_fields, RTSPKeyValue, i);
 
       g_free (keyval->value);
+      g_free (keyval->custom_key);
     }
     g_array_free (msg->hdr_fields, TRUE);
   }
@@ -516,6 +519,7 @@
 
   key_value.field = field;
   key_value.value = value;
+  key_value.custom_key = NULL;
 
   g_array_append_val (msg->hdr_fields, key_value);
 
@@ -617,6 +621,179 @@
 }
 
 /**
+ * gst_rtsp_message_add_header_by_name:
+ * @msg: a #GstRTSPMessage
+ * @header: (transfer none): header string
+ * @value: (transfer none): the value of the header
+ *
+ * Add a header with key @header and @value to @msg. This function takes a copy
+ * of @value.
+ *
+ * Returns: a #GstRTSPResult.
+ *
+ * Since: 1.6
+ */
+GstRTSPResult
+gst_rtsp_message_add_header_by_name (GstRTSPMessage * msg,
+    const gchar * header, const gchar * value)
+{
+  GstRTSPHeaderField field;
+
+  g_return_val_if_fail (msg != NULL, GST_RTSP_EINVAL);
+  g_return_val_if_fail (header != NULL, GST_RTSP_EINVAL);
+  g_return_val_if_fail (value != NULL, GST_RTSP_EINVAL);
+
+  field = gst_rtsp_find_header_field (header);
+  if (field != GST_RTSP_HDR_INVALID)
+    return gst_rtsp_message_take_header (msg, field, g_strdup (value));
+
+  return gst_rtsp_message_take_header_by_name (msg, header, g_strdup (value));
+}
+
+/**
+ * gst_rtsp_message_take_header_by_name:
+ * @msg: a #GstRTSPMessage
+ * @header: (transfer none): a header string
+ * @value: (transfer full): the value of the header
+ *
+ * Add a header with key @header and @value to @msg. This function takes
+ * ownership of @value, but not of @header.
+ *
+ * Returns: a #GstRTSPResult.
+ *
+ * Since: 1.6
+ */
+GstRTSPResult
+gst_rtsp_message_take_header_by_name (GstRTSPMessage * msg,
+    const gchar * header, gchar * value)
+{
+  RTSPKeyValue key_value;
+
+  g_return_val_if_fail (msg != NULL, GST_RTSP_EINVAL);
+  g_return_val_if_fail (header != NULL, GST_RTSP_EINVAL);
+  g_return_val_if_fail (value != NULL, GST_RTSP_EINVAL);
+
+  key_value.field = GST_RTSP_HDR_INVALID;
+  key_value.value = value;
+  key_value.custom_key = g_strdup (header);
+
+  g_array_append_val (msg->hdr_fields, key_value);
+
+  return GST_RTSP_OK;
+}
+
+/* returns -1 if not found, otherwise index position within msg->hdr_fields */
+static gint
+gst_rtsp_message_find_header_by_name (GstRTSPMessage * msg,
+    const gchar * header, gint index)
+{
+  GstRTSPHeaderField field;
+  gint cnt = 0;
+  guint i;
+
+  /* no header initialized, there are no headers */
+  if (msg->hdr_fields == NULL)
+    return -1;
+
+  field = gst_rtsp_find_header_field (header);
+  for (i = 0; i < msg->hdr_fields->len; i++) {
+    RTSPKeyValue *key_val;
+
+    key_val = &g_array_index (msg->hdr_fields, RTSPKeyValue, i);
+
+    if (key_val->field != field)
+      continue;
+
+    if (key_val->custom_key != NULL &&
+        g_ascii_strcasecmp (key_val->custom_key, header) != 0)
+      continue;
+
+    if (index < 0 || cnt++ == index)
+      return i;
+  }
+
+  return -1;
+}
+
+/**
+ * gst_rtsp_message_remove_header_by_name:
+ * @msg: a #GstRTSPMessage
+ * @header: the header string
+ * @index: the index of the header
+ *
+ * Remove the @index header with key @header from @msg. If @index equals -1,
+ * all matching headers will be removed.
+ *
+ * Returns: a #GstRTSPResult
+ *
+ * Since: 1.6
+ */
+GstRTSPResult
+gst_rtsp_message_remove_header_by_name (GstRTSPMessage * msg,
+    const gchar * header, gint index)
+{
+  GstRTSPResult res = GST_RTSP_ENOTIMPL;
+  RTSPKeyValue *kv;
+  gint pos;
+
+  g_return_val_if_fail (msg != NULL, GST_RTSP_EINVAL);
+  g_return_val_if_fail (header != NULL, GST_RTSP_EINVAL);
+
+  do {
+    pos = gst_rtsp_message_find_header_by_name (msg, header, index);
+
+    if (pos < 0)
+      break;
+
+    kv = &g_array_index (msg->hdr_fields, RTSPKeyValue, pos);
+    g_free (kv->value);
+    g_free (kv->custom_key);
+    g_array_remove_index (msg->hdr_fields, pos);
+    res = GST_RTSP_OK;
+  } while (index < 0);
+
+  return res;
+}
+
+/**
+ * gst_rtsp_message_get_header_by_name:
+ * @msg: a #GstRTSPMessage
+ * @header: a #GstRTSPHeaderField
+ * @value: (out) (transfer none): pointer to hold the result
+ * @index: the index of the header
+ *
+ * Get the @index header value with key @header from @msg. The result in @value
+ * stays valid as long as it remains present in @msg.
+ *
+ * Returns: #GST_RTSP_OK when @field was found, #GST_RTSP_ENOTIMPL if the key
+ * was not found.
+ *
+ * Since: 1.6
+ */
+GstRTSPResult
+gst_rtsp_message_get_header_by_name (GstRTSPMessage * msg,
+    const gchar * header, gchar ** value, gint index)
+{
+  RTSPKeyValue *key_val;
+  gint pos;
+
+  g_return_val_if_fail (msg != NULL, GST_RTSP_EINVAL);
+  g_return_val_if_fail (header != NULL, GST_RTSP_EINVAL);
+
+  pos = gst_rtsp_message_find_header_by_name (msg, header, index);
+
+  if (pos < 0)
+    return GST_RTSP_ENOTIMPL;
+
+  key_val = &g_array_index (msg->hdr_fields, RTSPKeyValue, pos);
+
+  if (value)
+    *value = key_val->value;
+
+  return GST_RTSP_OK;
+}
+
+/**
  * gst_rtsp_message_append_headers:
  * @msg: a #GstRTSPMessage
  * @str: (transfer none): a string
@@ -639,7 +816,11 @@
     const gchar *keystr;
 
     key_value = &g_array_index (msg->hdr_fields, RTSPKeyValue, i);
-    keystr = gst_rtsp_header_as_text (key_value->field);
+
+    if (key_value->custom_key != NULL)
+      keystr = key_value->custom_key;
+    else
+      keystr = gst_rtsp_header_as_text (key_value->field);
 
     g_string_append_printf (str, "%s: %s\r\n", keystr, key_value->value);
   }
@@ -747,9 +928,14 @@
 dump_key_value (gpointer data, gpointer user_data G_GNUC_UNUSED)
 {
   RTSPKeyValue *key_value = (RTSPKeyValue *) data;
+  const gchar *key_string;
 
-  g_print ("   key: '%s', value: '%s'\n",
-      gst_rtsp_header_as_text (key_value->field), key_value->value);
+  if (key_value->custom_key != NULL)
+    key_string = key_value->custom_key;
+  else
+    key_string = gst_rtsp_header_as_text (key_value->field);
+
+  g_print ("   key: '%s', value: '%s'\n", key_string, key_value->value);
 }
 
 /**
diff --git a/gst-libs/gst/rtsp/gstrtspmessage.h b/gst-libs/gst/rtsp/gstrtspmessage.h
index 927e2ce..6f6ea2d 100644
--- a/gst-libs/gst/rtsp/gstrtspmessage.h
+++ b/gst-libs/gst/rtsp/gstrtspmessage.h
@@ -163,6 +163,25 @@
                                                      GstRTSPHeaderField field,
                                                      gchar **value,
                                                      gint indx);
+
+GstRTSPResult      gst_rtsp_message_add_header_by_name    (GstRTSPMessage * msg,
+                                                           const gchar    * header,
+                                                           const gchar    * value);
+
+GstRTSPResult      gst_rtsp_message_take_header_by_name   (GstRTSPMessage * msg,
+                                                           const gchar    * header,
+                                                           gchar          * value);
+
+GstRTSPResult      gst_rtsp_message_remove_header_by_name (GstRTSPMessage * msg,
+                                                           const gchar    * header,
+                                                           gint             index);
+
+GstRTSPResult      gst_rtsp_message_get_header_by_name    (GstRTSPMessage * msg,
+                                                           const gchar    * header,
+                                                           gchar         ** value,
+                                                           gint             index);
+
+/* header serialization */
 GstRTSPResult      gst_rtsp_message_append_headers  (const GstRTSPMessage *msg,
                                                      GString *str);
 
diff --git a/gst-libs/gst/rtsp/gstrtsprange.c b/gst-libs/gst/rtsp/gstrtsprange.c
index 96efd45..553f797 100644
--- a/gst-libs/gst/rtsp/gstrtsprange.c
+++ b/gst-libs/gst/rtsp/gstrtsprange.c
@@ -342,7 +342,7 @@
 time_to_string (const GstRTSPTime * t1, const GstRTSPTime2 * t2,
     GString * string)
 {
-  gboolean res = TRUE;;
+  gboolean res = TRUE;
 
   switch (t1->type) {
     case GST_RTSP_TIME_SECONDS:
diff --git a/gst-libs/gst/rtsp/gstrtsptransport.c b/gst-libs/gst/rtsp/gstrtsptransport.c
index 2dd9acb..6d99f1c 100644
--- a/gst-libs/gst/rtsp/gstrtsptransport.c
+++ b/gst-libs/gst/rtsp/gstrtsptransport.c
@@ -52,6 +52,7 @@
 #include <stdlib.h>
 
 #include "gstrtsptransport.h"
+#include "gstrtsp-enumtypes.h"
 
 #define MAX_MANAGERS	2
 
@@ -118,26 +119,6 @@
   {NULL, GST_RTSP_PROFILE_UNKNOWN}
 };
 
-GType
-gst_rtsp_profile_get_type (void)
-{
-  static volatile gsize rtsp_profile_type = 0;
-  static const GFlagsValue rtsp_profile[] = {
-    {GST_RTSP_PROFILE_AVP, "GST_RTSP_PROFILE_AVP", "avp"},
-    {GST_RTSP_PROFILE_SAVP, "GST_RTSP_PROFILE_SAVP", "savp"},
-    {GST_RTSP_PROFILE_AVPF, "GST_RTSP_PROFILE_AVPF", "avpf"},
-    {GST_RTSP_PROFILE_SAVPF, "GST_RTSP_PROFILE_SAVPF", "savpf"},
-    {0, NULL, NULL},
-  };
-
-  if (g_once_init_enter (&rtsp_profile_type)) {
-    GType tmp = g_flags_register_static ("GstRTSPProfile", rtsp_profile);
-    g_once_init_leave (&rtsp_profile_type, tmp);
-  }
-
-  return (GType) rtsp_profile_type;
-}
-
 typedef struct
 {
   const gchar *name;
@@ -151,28 +132,6 @@
   {NULL, GST_RTSP_LOWER_TRANS_UNKNOWN}
 };
 
-GType
-gst_rtsp_lower_trans_get_type (void)
-{
-  static volatile gsize rtsp_lower_trans_type = 0;
-  static const GFlagsValue rtsp_lower_trans[] = {
-    {GST_RTSP_LOWER_TRANS_UDP, "GST_RTSP_LOWER_TRANS_UDP", "udp-unicast"},
-    {GST_RTSP_LOWER_TRANS_UDP_MCAST, "GST_RTSP_LOWER_TRANS_UDP_MCAST",
-        "udp-multicast"},
-    {GST_RTSP_LOWER_TRANS_TCP, "GST_RTSP_LOWER_TRANS_TCP", "tcp"},
-    {GST_RTSP_LOWER_TRANS_HTTP, "GST_RTSP_LOWER_TRANS_HTTP", "http"},
-    {GST_RTSP_LOWER_TRANS_TLS, "GST_RTSP_LOWER_TRANS_TLS", "tls"},
-    {0, NULL, NULL},
-  };
-
-  if (g_once_init_enter (&rtsp_lower_trans_type)) {
-    GType tmp = g_flags_register_static ("GstRTSPLowerTrans", rtsp_lower_trans);
-    g_once_init_leave (&rtsp_lower_trans_type, tmp);
-  }
-
-  return (GType) rtsp_lower_trans_type;
-}
-
 #define RTSP_TRANSPORT_PARAMETER_IS_UNIQUE(param) \
 G_STMT_START {                                    \
   if ((transport_params & (param)) != 0)          \
diff --git a/gst-libs/gst/rtsp/gstrtsptransport.h b/gst-libs/gst/rtsp/gstrtsptransport.h
index c90652a..8918fc5 100644
--- a/gst-libs/gst/rtsp/gstrtsptransport.h
+++ b/gst-libs/gst/rtsp/gstrtsptransport.h
@@ -45,6 +45,7 @@
 
 #include <gst/gstconfig.h>
 #include <gst/rtsp/gstrtspdefs.h>
+#include <gst/rtsp/gstrtsp-enumtypes.h>
 
 G_BEGIN_DECLS
 
@@ -72,6 +73,8 @@
  *
  * The transfer profile to use.
  */
+/* FIXME 2.0: This should probably be an enum, not flags and maybe be replaced
+ * by GstRTPTransport */
 typedef enum {
   GST_RTSP_PROFILE_UNKNOWN =  0,
   GST_RTSP_PROFILE_AVP     = (1 << 0),
@@ -80,9 +83,6 @@
   GST_RTSP_PROFILE_SAVPF   = (1 << 3),
 } GstRTSPProfile;
 
-#define GST_TYPE_RTSP_PROFILE (gst_rtsp_profile_get_type())
-GType gst_rtsp_profile_get_type (void);
-
 /**
  * GstRTSPLowerTrans:
  * @GST_RTSP_LOWER_TRANS_UNKNOWN: invalid transport flag
@@ -103,9 +103,6 @@
   GST_RTSP_LOWER_TRANS_TLS       = (1 << 5)
 } GstRTSPLowerTrans;
 
-#define GST_TYPE_RTSP_LOWER_TRANS (gst_rtsp_lower_trans_get_type())
-GType gst_rtsp_lower_trans_get_type (void);
-
 typedef struct _GstRTSPRange GstRTSPRange;
 typedef struct _GstRTSPTransport GstRTSPTransport;
 
diff --git a/gst-libs/gst/sdp/Makefile.am b/gst-libs/gst/sdp/Makefile.am
index e15fa93..a90f30b 100644
--- a/gst-libs/gst/sdp/Makefile.am
+++ b/gst-libs/gst/sdp/Makefile.am
@@ -20,7 +20,7 @@
 gir_sources=$(patsubst %,$(srcdir)/%, $(libgstsdp_@GST_API_VERSION@_la_SOURCES))
 
 GstSdp-@GST_API_VERSION@.gir: $(INTROSPECTION_SCANNER) libgstsdp-@GST_API_VERSION@.la
-	$(AM_V_GEN)PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" \
+	$(AM_V_GEN)PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" GI_SCANNER_DISABLE_CACHE=yes\
 		GST_PLUGIN_SYSTEM_PATH_1_0="" GST_PLUGIN_PATH_1_0="" GST_REGISTRY_UPDATE=no \
 		$(INTROSPECTION_SCANNER) -v --namespace GstSdp \
 		--nsversion=@GST_API_VERSION@ \
@@ -57,17 +57,3 @@
 
 CLEANFILES = $(BUILT_GIRSOURCES) $(typelibs_DATA)
 endif
-
-Android.mk: Makefile.am $(BUILT_SOURCES)
-	androgenizer -:PROJECT libgstsdp -:SHARED libgstsdp-@GST_API_VERSION@ \
-	 -:TAGS eng debug \
-         -:REL_TOP $(top_srcdir) -:ABS_TOP $(abs_top_srcdir) \
-	 -:SOURCES $(libgstsdp_@GST_API_VERSION@_la_SOURCES) \
-	 -:CFLAGS $(DEFS) $(DEFAULT_INCLUDES) $(libgstsdp_@GST_API_VERSION@_la_CFLAGS) \
-	 -:LDFLAGS $(libgstsdp_@GST_API_VERSION@_la_LDFLAGS) \
-	           $(libgstsdp_@GST_API_VERSION@_la_LIBADD) \
-	           -ldl \
-	 -:HEADER_TARGET gstreamer-@GST_API_VERSION@/gst/sdp \
-	 -:HEADERS $(libgstsdpinclude_HEADERS) \
-	 -:PASSTHROUGH LOCAL_ARM_MODE:=arm \
-	> $@
diff --git a/gst-libs/gst/sdp/Makefile.in b/gst-libs/gst/sdp/Makefile.in
index a108f3a..e786a81 100644
--- a/gst-libs/gst/sdp/Makefile.in
+++ b/gst-libs/gst/sdp/Makefile.in
@@ -1,7 +1,7 @@
-# Makefile.in generated by automake 1.14.1 from Makefile.am.
+# Makefile.in generated by automake 1.15 from Makefile.am.
 # @configure_input@
 
-# Copyright (C) 1994-2013 Free Software Foundation, Inc.
+# 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,
@@ -17,7 +17,17 @@
 
 
 VPATH = @srcdir@
-am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)'
+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 \
       ?) ;; \
@@ -82,8 +92,6 @@
 host_triplet = @host@
 target_triplet = @target@
 subdir = gst-libs/gst/sdp
-DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \
-	$(top_srcdir)/depcomp $(libgstsdpinclude_HEADERS)
 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 \
@@ -104,7 +112,6 @@
 	$(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-x11.m4 \
 	$(top_srcdir)/common/m4/gst.m4 \
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
@@ -121,6 +128,8 @@
 	$(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(libgstsdpinclude_HEADERS) \
+	$(am__DIST_COMMON)
 mkinstalldirs = $(install_sh) -d
 CONFIG_HEADER = $(top_builddir)/config.h
 CONFIG_CLEAN_FILES =
@@ -233,6 +242,7 @@
   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@
@@ -293,6 +303,8 @@
 GIO_CFLAGS = @GIO_CFLAGS@
 GIO_LDFLAGS = @GIO_LDFLAGS@
 GIO_LIBS = @GIO_LIBS@
+GIO_UNIX_2_0_CFLAGS = @GIO_UNIX_2_0_CFLAGS@
+GIO_UNIX_2_0_LIBS = @GIO_UNIX_2_0_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
@@ -322,6 +334,8 @@
 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_OPTION_CFLAGS = @GST_OPTION_CFLAGS@
 GST_OPTION_CXXFLAGS = @GST_OPTION_CXXFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
@@ -349,7 +363,6 @@
 GTK_X11_CFLAGS = @GTK_X11_CFLAGS@
 GTK_X11_LIBS = @GTK_X11_LIBS@
 HAVE_CDPARANOIA = @HAVE_CDPARANOIA@
-HAVE_X = @HAVE_X@
 HAVE_XSHM = @HAVE_XSHM@
 HAVE_ZLIB = @HAVE_ZLIB@
 HTML_DIR = @HTML_DIR@
@@ -364,6 +377,7 @@
 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@
@@ -453,13 +467,12 @@
 XGETTEXT = @XGETTEXT@
 XGETTEXT_015 = @XGETTEXT_015@
 XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
-XMKMF = @XMKMF@
+XSHM_CFLAGS = @XSHM_CFLAGS@
 XSHM_LIBS = @XSHM_LIBS@
+XVIDEO_CFLAGS = @XVIDEO_CFLAGS@
 XVIDEO_LIBS = @XVIDEO_LIBS@
 X_CFLAGS = @X_CFLAGS@
-X_EXTRA_LIBS = @X_EXTRA_LIBS@
 X_LIBS = @X_LIBS@
-X_PRE_LIBS = @X_PRE_LIBS@
 ZLIB_CFLAGS = @ZLIB_CFLAGS@
 ZLIB_LIBS = @ZLIB_LIBS@
 abs_builddir = @abs_builddir@
@@ -512,6 +525,7 @@
 psdir = @psdir@
 pyexecdir = @pyexecdir@
 pythondir = @pythondir@
+runstatedir = @runstatedir@
 sbindir = @sbindir@
 sharedstatedir = @sharedstatedir@
 srcdir = @srcdir@
@@ -562,7 +576,6 @@
 	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu gst-libs/gst/sdp/Makefile'; \
 	$(am__cd) $(top_srcdir) && \
 	  $(AUTOMAKE) --gnu gst-libs/gst/sdp/Makefile
-.PRECIOUS: Makefile
 Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
 	@case '$?' in \
 	  *config.status*) \
@@ -947,9 +960,11 @@
 	uninstall-girDATA uninstall-libLTLIBRARIES \
 	uninstall-libgstsdpincludeHEADERS uninstall-typelibsDATA
 
+.PRECIOUS: Makefile
+
 
 @HAVE_INTROSPECTION_TRUE@GstSdp-@GST_API_VERSION@.gir: $(INTROSPECTION_SCANNER) libgstsdp-@GST_API_VERSION@.la
-@HAVE_INTROSPECTION_TRUE@	$(AM_V_GEN)PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" \
+@HAVE_INTROSPECTION_TRUE@	$(AM_V_GEN)PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" GI_SCANNER_DISABLE_CACHE=yes\
 @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 GstSdp \
 @HAVE_INTROSPECTION_TRUE@		--nsversion=@GST_API_VERSION@ \
@@ -975,20 +990,6 @@
 @HAVE_INTROSPECTION_TRUE@		--includedir=`PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" $(PKG_CONFIG) --variable=girdir gstreamer-@GST_API_VERSION@` \
 @HAVE_INTROSPECTION_TRUE@		$(INTROSPECTION_COMPILER_OPTS) $< -o $(@F)
 
-Android.mk: Makefile.am $(BUILT_SOURCES)
-	androgenizer -:PROJECT libgstsdp -:SHARED libgstsdp-@GST_API_VERSION@ \
-	 -:TAGS eng debug \
-         -:REL_TOP $(top_srcdir) -:ABS_TOP $(abs_top_srcdir) \
-	 -:SOURCES $(libgstsdp_@GST_API_VERSION@_la_SOURCES) \
-	 -:CFLAGS $(DEFS) $(DEFAULT_INCLUDES) $(libgstsdp_@GST_API_VERSION@_la_CFLAGS) \
-	 -:LDFLAGS $(libgstsdp_@GST_API_VERSION@_la_LDFLAGS) \
-	           $(libgstsdp_@GST_API_VERSION@_la_LIBADD) \
-	           -ldl \
-	 -:HEADER_TARGET gstreamer-@GST_API_VERSION@/gst/sdp \
-	 -:HEADERS $(libgstsdpinclude_HEADERS) \
-	 -:PASSTHROUGH LOCAL_ARM_MODE:=arm \
-	> $@
-
 # 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-libs/gst/sdp/gstmikey.h b/gst-libs/gst/sdp/gstmikey.h
index 91d7be2..02635af 100644
--- a/gst-libs/gst/sdp/gstmikey.h
+++ b/gst-libs/gst/sdp/gstmikey.h
@@ -150,14 +150,14 @@
  * GstMIKEYPayload:
  * @type: the payload type
  * @len: length of the payload
- * @clear_func: function to clear the payload
- * @copy_func: function to copy the payload
  *
  * Hold the common fields for all payloads
  */
 struct _GstMIKEYPayload {
+  /* < private > */
   GstMiniObject mini_object;
 
+  /* < public > */
   GstMIKEYPayloadType type;
   guint len;
 };
@@ -213,7 +213,7 @@
  * Since: 1.4
  */
 #ifdef _FOOL_GTK_DOC_
-G_INLINE_FUNC GstMIKEYPayload * gst_mikey_payload_copy (const GstMIKEYPayload * buf);
+G_INLINE_FUNC GstMIKEYPayload * gst_mikey_payload_copy (const GstMIKEYPayload * payload);
 #endif
 
 static inline GstMIKEYPayload *
@@ -255,7 +255,7 @@
  * @pt: the common #GstMIKEYPayload
  * @enc_alg: the #GstMIKEYEncAlg
  * @mac_alg: the #GstMIKEYMacAlg
- * @subpayload: the subpayloads
+ * @subpayloads: the subpayloads
  *
  * A structure holding the KEMAC payload
  */
@@ -537,8 +537,10 @@
  */
 struct _GstMIKEYMessage
 {
+  /* < private > */
   GstMiniObject mini_object;
 
+  /* < public > */
   guint8 version;
   GstMIKEYType type;
   gboolean V;
@@ -606,7 +608,7 @@
  * Since: 1.4
  */
 #ifdef _FOOL_GTK_DOC_
-G_INLINE_FUNC GstMIKEYMessage * gst_mikey_message_copy (const GstMIKEYMessage * buf);
+G_INLINE_FUNC GstMIKEYMessage * gst_mikey_message_copy (const GstMIKEYMessage * message);
 #endif
 
 static inline GstMIKEYMessage *
diff --git a/gst-libs/gst/sdp/gstsdpmessage.c b/gst-libs/gst/sdp/gstsdpmessage.c
index d2e02f0..1259459 100644
--- a/gst-libs/gst/sdp/gstsdpmessage.c
+++ b/gst-libs/gst/sdp/gstsdpmessage.c
@@ -2962,21 +2962,33 @@
   c.msg = msg;
   c.media = NULL;
 
+#define SIZE_CHECK_GUARD \
+  G_STMT_START { \
+    if (p - (gchar *) data >= size) \
+      goto out; \
+  } G_STMT_END
+
   p = (gchar *) data;
   while (TRUE) {
-    while (g_ascii_isspace (*p))
+    while (p - (gchar *) data < size && g_ascii_isspace (*p))
       p++;
 
+    SIZE_CHECK_GUARD;
+
     type = *p++;
     if (type == '\0')
       break;
 
+    SIZE_CHECK_GUARD;
+
     if (*p != '=')
       goto line_done;
     p++;
 
+    SIZE_CHECK_GUARD;
+
     s = p;
-    while (*p != '\n' && *p != '\r' && *p != '\0')
+    while (p - (gchar *) data < size && *p != '\n' && *p != '\r' && *p != '\0')
       p++;
 
     len = p - s;
@@ -2989,13 +3001,21 @@
 
     gst_sdp_parse_line (&c, type, buffer);
 
+    SIZE_CHECK_GUARD;
+
   line_done:
-    while (*p != '\n' && *p != '\0')
+    while (p - (gchar *) data < size && *p != '\n' && *p != '\0')
       p++;
+
+    SIZE_CHECK_GUARD;
+
     if (*p == '\n')
       p++;
   }
 
+#undef SIZE_CHECK_GUARD
+
+out:
   if (buffer)
     g_free (buffer);
 
diff --git a/gst-libs/gst/tag/Makefile.am b/gst-libs/gst/tag/Makefile.am
index 1883636..c534a4d 100644
--- a/gst-libs/gst/tag/Makefile.am
+++ b/gst-libs/gst/tag/Makefile.am
@@ -30,7 +30,7 @@
 gir_sources=$(patsubst %,$(srcdir)/%, $(libgsttag_@GST_API_VERSION@_la_SOURCES))
 
 GstTag-@GST_API_VERSION@.gir: $(INTROSPECTION_SCANNER) libgsttag-@GST_API_VERSION@.la
-	$(AM_V_GEN)PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" \
+	$(AM_V_GEN)PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" GI_SCANNER_DISABLE_CACHE=yes\
 		GST_PLUGIN_SYSTEM_PATH_1_0="" GST_PLUGIN_PATH_1_0="" GST_REGISTRY_UPDATE=no \
 		$(INTROSPECTION_SCANNER) -v --namespace GstTag \
 		--nsversion=@GST_API_VERSION@ \
@@ -48,7 +48,7 @@
 		--pkg gstreamer-@GST_API_VERSION@ \
 		--pkg gstreamer-base-@GST_API_VERSION@ \
 		--pkg-export gstreamer-tag-@GST_API_VERSION@ \
-		--add-init-section="gst_init(NULL,NULL);" \
+		--add-init-section="$(INTROSPECTION_INIT)" \
 		--output $@ \
 		$(gir_headers) \
 		$(gir_sources)
@@ -105,17 +105,3 @@
 licensetransdir = $(pkgdatadir)/@GST_API_VERSION@
 licensetrans_DATA = $(srcdir)/license-translations.dict
 #endif
-
-Android.mk: Makefile.am
-	androgenizer -:PROJECT libgsttag -:SHARED libgsttag-@GST_API_VERSION@ \
-	 -:TAGS eng debug \
-         -:REL_TOP $(top_srcdir) -:ABS_TOP $(abs_top_srcdir) \
-	 -:SOURCES $(libgsttag_@GST_API_VERSION@_la_SOURCES) \
-	 -:CFLAGS $(DEFS) $(DEFAULT_INCLUDES) $(libgsttag_@GST_API_VERSION@_la_CFLAGS) \
-	 -:LDFLAGS $(libgsttag_@GST_API_VERSION@_la_LDFLAGS) \
-	           $(libgsttag_@GST_API_VERSION@_la_LIBADD) \
-	           -ldl \
-	 -:HEADER_TARGET gstreamer-@GST_API_VERSION@/gst/tag \
-	 -:HEADERS $(libgsttaginclude_HEADERS) \
-	 -:PASSTHROUGH LOCAL_ARM_MODE:=arm \
-	> $@
diff --git a/gst-libs/gst/tag/Makefile.in b/gst-libs/gst/tag/Makefile.in
index abac36f..eab2674 100644
--- a/gst-libs/gst/tag/Makefile.in
+++ b/gst-libs/gst/tag/Makefile.in
@@ -1,7 +1,7 @@
-# Makefile.in generated by automake 1.14.1 from Makefile.am.
+# Makefile.in generated by automake 1.15 from Makefile.am.
 # @configure_input@
 
-# Copyright (C) 1994-2013 Free Software Foundation, Inc.
+# 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,
@@ -17,7 +17,17 @@
 
 
 VPATH = @srcdir@
-am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)'
+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 \
       ?) ;; \
@@ -83,9 +93,6 @@
 target_triplet = @target@
 EXTRA_PROGRAMS = mklangtables$(EXEEXT) mklicensestables$(EXEEXT)
 subdir = gst-libs/gst/tag
-DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \
-	$(top_srcdir)/depcomp $(libgsttaginclude_HEADERS) \
-	$(noinst_HEADERS)
 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 \
@@ -106,7 +113,6 @@
 	$(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-x11.m4 \
 	$(top_srcdir)/common/m4/gst.m4 \
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
@@ -123,6 +129,8 @@
 	$(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(libgsttaginclude_HEADERS) \
+	$(noinst_HEADERS) $(am__DIST_COMMON)
 mkinstalldirs = $(install_sh) -d
 CONFIG_HEADER = $(top_builddir)/config.h
 CONFIG_CLEAN_FILES =
@@ -264,6 +272,7 @@
   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@
@@ -324,6 +333,8 @@
 GIO_CFLAGS = @GIO_CFLAGS@
 GIO_LDFLAGS = @GIO_LDFLAGS@
 GIO_LIBS = @GIO_LIBS@
+GIO_UNIX_2_0_CFLAGS = @GIO_UNIX_2_0_CFLAGS@
+GIO_UNIX_2_0_LIBS = @GIO_UNIX_2_0_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
@@ -353,6 +364,8 @@
 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_OPTION_CFLAGS = @GST_OPTION_CFLAGS@
 GST_OPTION_CXXFLAGS = @GST_OPTION_CXXFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
@@ -380,7 +393,6 @@
 GTK_X11_CFLAGS = @GTK_X11_CFLAGS@
 GTK_X11_LIBS = @GTK_X11_LIBS@
 HAVE_CDPARANOIA = @HAVE_CDPARANOIA@
-HAVE_X = @HAVE_X@
 HAVE_XSHM = @HAVE_XSHM@
 HAVE_ZLIB = @HAVE_ZLIB@
 HTML_DIR = @HTML_DIR@
@@ -395,6 +407,7 @@
 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@
@@ -484,13 +497,12 @@
 XGETTEXT = @XGETTEXT@
 XGETTEXT_015 = @XGETTEXT_015@
 XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
-XMKMF = @XMKMF@
+XSHM_CFLAGS = @XSHM_CFLAGS@
 XSHM_LIBS = @XSHM_LIBS@
+XVIDEO_CFLAGS = @XVIDEO_CFLAGS@
 XVIDEO_LIBS = @XVIDEO_LIBS@
 X_CFLAGS = @X_CFLAGS@
-X_EXTRA_LIBS = @X_EXTRA_LIBS@
 X_LIBS = @X_LIBS@
-X_PRE_LIBS = @X_PRE_LIBS@
 ZLIB_CFLAGS = @ZLIB_CFLAGS@
 ZLIB_LIBS = @ZLIB_LIBS@
 abs_builddir = @abs_builddir@
@@ -543,6 +555,7 @@
 psdir = @psdir@
 pyexecdir = @pyexecdir@
 pythondir = @pythondir@
+runstatedir = @runstatedir@
 sbindir = @sbindir@
 sharedstatedir = @sharedstatedir@
 srcdir = @srcdir@
@@ -623,7 +636,6 @@
 	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu gst-libs/gst/tag/Makefile'; \
 	$(am__cd) $(top_srcdir) && \
 	  $(AUTOMAKE) --gnu gst-libs/gst/tag/Makefile
-.PRECIOUS: Makefile
 Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
 	@case '$?' in \
 	  *config.status*) \
@@ -1157,9 +1169,11 @@
 	uninstall-libLTLIBRARIES uninstall-libgsttagincludeHEADERS \
 	uninstall-licensetransDATA uninstall-typelibsDATA
 
+.PRECIOUS: Makefile
+
 
 @HAVE_INTROSPECTION_TRUE@GstTag-@GST_API_VERSION@.gir: $(INTROSPECTION_SCANNER) libgsttag-@GST_API_VERSION@.la
-@HAVE_INTROSPECTION_TRUE@	$(AM_V_GEN)PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" \
+@HAVE_INTROSPECTION_TRUE@	$(AM_V_GEN)PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" GI_SCANNER_DISABLE_CACHE=yes\
 @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 GstTag \
 @HAVE_INTROSPECTION_TRUE@		--nsversion=@GST_API_VERSION@ \
@@ -1177,7 +1191,7 @@
 @HAVE_INTROSPECTION_TRUE@		--pkg gstreamer-@GST_API_VERSION@ \
 @HAVE_INTROSPECTION_TRUE@		--pkg gstreamer-base-@GST_API_VERSION@ \
 @HAVE_INTROSPECTION_TRUE@		--pkg-export gstreamer-tag-@GST_API_VERSION@ \
-@HAVE_INTROSPECTION_TRUE@		--add-init-section="gst_init(NULL,NULL);" \
+@HAVE_INTROSPECTION_TRUE@		--add-init-section="$(INTROSPECTION_INIT)" \
 @HAVE_INTROSPECTION_TRUE@		--output $@ \
 @HAVE_INTROSPECTION_TRUE@		$(gir_headers) \
 @HAVE_INTROSPECTION_TRUE@		$(gir_sources)
@@ -1202,20 +1216,6 @@
 		echo "Updated licenses-tables.dat and license-translations.dict"
 #endif
 
-Android.mk: Makefile.am
-	androgenizer -:PROJECT libgsttag -:SHARED libgsttag-@GST_API_VERSION@ \
-	 -:TAGS eng debug \
-         -:REL_TOP $(top_srcdir) -:ABS_TOP $(abs_top_srcdir) \
-	 -:SOURCES $(libgsttag_@GST_API_VERSION@_la_SOURCES) \
-	 -:CFLAGS $(DEFS) $(DEFAULT_INCLUDES) $(libgsttag_@GST_API_VERSION@_la_CFLAGS) \
-	 -:LDFLAGS $(libgsttag_@GST_API_VERSION@_la_LDFLAGS) \
-	           $(libgsttag_@GST_API_VERSION@_la_LIBADD) \
-	           -ldl \
-	 -:HEADER_TARGET gstreamer-@GST_API_VERSION@/gst/tag \
-	 -:HEADERS $(libgsttaginclude_HEADERS) \
-	 -:PASSTHROUGH LOCAL_ARM_MODE:=arm \
-	> $@
-
 # 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-libs/gst/tag/gstexiftag.c b/gst-libs/gst/tag/gstexiftag.c
index 8200a9f..1f0528e 100644
--- a/gst-libs/gst/tag/gstexiftag.c
+++ b/gst-libs/gst/tag/gstexiftag.c
@@ -801,6 +801,20 @@
   }
 }
 
+static inline gboolean
+gst_exif_tag_str_is_ascii (const gchar * str, gsize * length)
+{
+  gsize len = 0;
+
+  while (*str) {
+    if (*str++ & 0x80)
+      return FALSE;
+    ++len;
+  }
+  *length = len;
+  return TRUE;
+}
+
 static void
 write_exif_ascii_tag (GstExifWriter * writer, guint16 tag, const gchar * str)
 {
@@ -809,7 +823,11 @@
   gsize ascii_size;
   GError *error = NULL;
 
-  ascii_str = g_convert (str, -1, "latin1", "utf8", NULL, &ascii_size, &error);
+  if (gst_exif_tag_str_is_ascii (str, &ascii_size))
+    ascii_str = g_strndup (str, ascii_size);
+  else
+    ascii_str =
+        g_convert (str, -1, "latin1", "utf8", NULL, &ascii_size, &error);
 
   if (error) {
     GST_WARNING ("Failed to convert exif tag to ascii: 0x%x - %s. Error: %s",
diff --git a/gst-libs/gst/tag/gsttagdemux.c b/gst-libs/gst/tag/gsttagdemux.c
index c36a75d..b736276 100644
--- a/gst-libs/gst/tag/gsttagdemux.c
+++ b/gst-libs/gst/tag/gsttagdemux.c
@@ -455,7 +455,7 @@
     need_sub = TRUE;
   }
 
-  if (need_sub == TRUE) {
+  if (need_sub) {
     if (out_size != bsize || !gst_buffer_is_writable (buf)) {
       GstBuffer *sub;
 
@@ -1614,6 +1614,20 @@
   return res;
 }
 
+static inline GstFlowReturn
+gst_tag_demux_ensure_tags (GstTagDemux * demux)
+{
+  GstFlowReturn flow = GST_FLOW_OK;
+
+  if (G_UNLIKELY (demux->priv->state == GST_TAG_DEMUX_READ_START_TAG &&
+          GST_PAD_MODE (demux->priv->srcpad) == GST_PAD_MODE_PULL)) {
+
+    flow = gst_tag_demux_element_find (demux);
+    GST_INFO_OBJECT (demux, "pulled tags: %s", gst_flow_get_name (flow));
+  }
+  return flow;
+}
+
 static GstFlowReturn
 gst_tag_demux_read_range (GstTagDemux * demux, GstObject * parent,
     guint64 offset, guint length, GstBuffer ** buffer)
@@ -1625,6 +1639,12 @@
 
   g_return_val_if_fail (buffer != NULL, GST_FLOW_ERROR);
 
+  /* Ensure we already have computed our tags to properly use the offsets
+   * below */
+  ret = gst_tag_demux_ensure_tags (demux);
+  if (ret != GST_FLOW_OK)
+    return ret;
+
   /* Adjust offset and length of the request to trim off tag information. 
    * For the returned buffer, adjust the output offset to match what downstream
    * should see */
@@ -1741,13 +1761,7 @@
          * filesrc ! id3demux ! xyzparse ! .., read tags here, since we don't
          * have a streaming thread of our own to do that. We do it here and
          * not in get_range(), so we can return the right size in bytes.. */
-        if (demux->priv->state == GST_TAG_DEMUX_READ_START_TAG &&
-            GST_PAD_MODE (demux->priv->srcpad) == GST_PAD_MODE_PULL) {
-          GstFlowReturn flow G_GNUC_UNUSED;
-
-          flow = gst_tag_demux_element_find (demux);
-          GST_INFO_OBJECT (demux, "pulled tags: %s", gst_flow_get_name (flow));
-        }
+        gst_tag_demux_ensure_tags (demux);
         result -= demux->priv->strip_start + demux->priv->strip_end;
         if (result < 0)
           result = 0;
diff --git a/gst-libs/gst/tag/gsttagmux.c b/gst-libs/gst/tag/gsttagmux.c
index 1140fe9..1d52790 100644
--- a/gst-libs/gst/tag/gsttagmux.c
+++ b/gst-libs/gst/tag/gsttagmux.c
@@ -222,6 +222,9 @@
   mux->priv->final_tags =
       gst_tag_list_merge (tagsetter_tags, mux->priv->event_tags, merge_mode);
 
+  if (mux->priv->final_tags == NULL)
+    mux->priv->final_tags = gst_tag_list_new_empty ();
+
   GST_LOG_OBJECT (mux, "final tags: %" GST_PTR_FORMAT, mux->priv->final_tags);
 
   return mux->priv->final_tags;
diff --git a/gst-libs/gst/tag/gstxmptag.c b/gst-libs/gst/tag/gstxmptag.c
index 57c104d..52112a0 100644
--- a/gst-libs/gst/tag/gstxmptag.c
+++ b/gst-libs/gst/tag/gstxmptag.c
@@ -1237,7 +1237,6 @@
   if (len < max_ft_len)
     goto missing_footer;
 
-  GST_DEBUG ("checking footer: [%s]", &xps[len - max_ft_len]);
   xp2 = g_strstr_len (&xps[len - max_ft_len], max_ft_len, "<?xpacket ");
   if (!xp2)
     goto missing_footer;
diff --git a/gst-libs/gst/tag/id3v2frames.c b/gst-libs/gst/tag/id3v2frames.c
index 3785c2a..4784238 100644
--- a/gst-libs/gst/tag/id3v2frames.c
+++ b/gst-libs/gst/tag/id3v2frames.c
@@ -656,11 +656,16 @@
     }
   }
 
-  peak = peak << (64 - GST_ROUND_UP_8 (peak_bits));
-  peak_val =
-      gst_guint64_to_gdouble (peak) / gst_util_guint64_to_gdouble (G_MAXINT64);
-  GST_LOG ("RVA2 frame: id=%s, chan=%u, adj=%.2fdB, peak_bits=%u, peak=%.2f",
-      id, chan, gain_dB, (guint) peak_bits, peak_val);
+  if (peak_bits > 0) {
+    peak = peak << (64 - GST_ROUND_UP_8 (peak_bits));
+    peak_val =
+        gst_guint64_to_gdouble (peak) /
+        gst_util_guint64_to_gdouble (G_MAXINT64);
+    GST_LOG ("RVA2 frame: id=%s, chan=%u, adj=%.2fdB, peak_bits=%u, peak=%.2f",
+        id, chan, gain_dB, (guint) peak_bits, peak_val);
+  } else {
+    peak_val = 0;
+  }
 
   if (chan == ID3V2_RVA2_CHANNEL_MASTER && strcmp (id, "track") == 0) {
     gain_tag_name = GST_TAG_TRACK_GAIN;
@@ -943,21 +948,17 @@
   return result;
 }
 
-static const gchar utf16enc[] = "UTF-16";
-static const gchar utf16leenc[] = "UTF-16LE";
-static const gchar utf16beenc[] = "UTF-16BE";
-
 static gboolean
-find_utf16_bom (gchar * data, const gchar ** p_in_encoding)
+find_utf16_bom (gchar * data, gint * p_data_endianness)
 {
   guint16 marker = (GST_READ_UINT8 (data) << 8) | GST_READ_UINT8 (data + 1);
 
   switch (marker) {
     case 0xFFFE:
-      *p_in_encoding = utf16leenc;
+      *p_data_endianness = G_LITTLE_ENDIAN;
       return TRUE;
     case 0xFEFF:
-      *p_in_encoding = utf16beenc;
+      *p_data_endianness = G_BIG_ENDIAN;
       return TRUE;
     default:
       break;
@@ -1042,32 +1043,69 @@
     case ID3V2_ENCODING_UTF16:
     case ID3V2_ENCODING_UTF16BE:
     {
-      const gchar *in_encode;
+      gunichar2 *utf16;
+      gint data_endianness;
+      glong n_read = 0, size = 0;
+      guint len, i;
 
       if (encoding == ID3V2_ENCODING_UTF16)
-        in_encode = utf16enc;
+        data_endianness = G_BYTE_ORDER;
       else
-        in_encode = utf16beenc;
+        data_endianness = G_BIG_ENDIAN;
 
       /* Sometimes we see strings with multiple BOM markers at the start.
        * In that case, we assume the innermost one is correct. If that fails
        * to produce valid UTF-8, we try the other endianness anyway */
-      while (data_size > 2 && find_utf16_bom (data, &in_encode)) {
+      while (data_size > 2 && find_utf16_bom (data, &data_endianness)) {
         data += 2;              /* skip BOM */
         data_size -= 2;
       }
 
-      field = g_convert (data, data_size, "UTF-8", in_encode, NULL, NULL, NULL);
+      /* alloc needed to ensure correct alignment which is required by GLib */
+      len = data_size / 2;
+      utf16 = g_try_new (gunichar2, len + 1);
+      if (utf16 == NULL)
+        break;
 
-      if (field == NULL || g_utf8_validate (field, -1, NULL) == FALSE) {
-        /* As a fallback, try interpreting UTF-16 in the other endianness */
-        if (in_encode == utf16beenc)
-          field = g_convert (data, data_size, "UTF-8", utf16leenc,
-              NULL, NULL, NULL);
+      memcpy (utf16, data, 2 * len);
+
+      GST_LOG ("Trying interpreting data as UTF-16-%s first",
+          (data_endianness == G_LITTLE_ENDIAN) ? "LE" : "BE");
+
+      if (data_endianness != G_BYTE_ORDER) {
+        /* convert to native endian UTF-16 */
+        for (i = 0; i < len; ++i)
+          utf16[i] = GUINT16_SWAP_LE_BE (utf16[i]);
       }
-    }
 
+      /* convert to UTF-8 */
+      field = g_utf16_to_utf8 (utf16, len, &n_read, &size, NULL);
+      if (field != NULL && n_read > 0 && g_utf8_validate (field, -1, NULL)) {
+        g_free (utf16);
+        break;
+      }
+
+      GST_DEBUG ("Trying interpreting data as UTF-16-%s now as fallback",
+          (data_endianness == G_LITTLE_ENDIAN) ? "BE" : "LE");
+
+      for (i = 0; i < len; ++i)
+        utf16[i] = GUINT16_SWAP_LE_BE (utf16[i]);
+
+      g_free (field);
+      n_read = size = 0;
+
+      /* try again */
+      field = g_utf16_to_utf8 (utf16, len, &n_read, &size, NULL);
+      g_free (utf16);
+
+      if (field != NULL && n_read > 0 && g_utf8_validate (field, -1, NULL))
+        break;
+
+      GST_DEBUG ("Could not convert UTF-16 string to UTF-8");
+      g_free (field);
+      field = NULL;
       break;
+    }
     case ID3V2_ENCODING_ISO8859:
       if (g_utf8_validate (data, data_size, NULL))
         field = g_strndup (data, data_size);
diff --git a/gst-libs/gst/video/Makefile.am b/gst-libs/gst/video/Makefile.am
index 3932947..5d31fa1 100644
--- a/gst-libs/gst/video/Makefile.am
+++ b/gst-libs/gst/video/Makefile.am
@@ -2,8 +2,9 @@
 ORC_SOURCE=video-orc
 include $(top_srcdir)/common/orc.mak
 
-glib_enum_headers = video.h video-format.h video-color.h video-info.h \
-			colorbalance.h navigation.h video-chroma.h video-tile.h
+glib_enum_headers = video.h video-format.h video-color.h video-info.h video-dither.h \
+			colorbalance.h navigation.h video-chroma.h video-tile.h video-converter.h \
+			video-resampler.h video-frame.h video-scaler.h
 glib_enum_define = GST_VIDEO
 glib_gen_prefix = gst_video
 glib_gen_basename = video
@@ -25,8 +26,11 @@
 	video-format.c         	\
 	video-chroma.c         	\
 	video-color.c         	\
+	video-converter.c    	\
+	video-dither.c    	\
 	video-info.c         	\
 	video-frame.c         	\
+	video-scaler.c          \
 	video-tile.c         	\
 	gstvideosink.c   	\
 	gstvideofilter.c 	\
@@ -38,8 +42,11 @@
 	gstvideodecoder.c       \
 	gstvideoencoder.c       \
 	gstvideoutils.c		\
+	gstvideoutilsprivate.c	\
+	video-resampler.c	\
 	video-blend.c		\
-	video-overlay-composition.c
+	video-overlay-composition.c \
+	video-multiview.c
 
 nodist_libgstvideo_@GST_API_VERSION@_la_SOURCES = $(BUILT_SOURCES)
 
@@ -53,8 +60,11 @@
 	video-format.h         	\
 	video-chroma.h         	\
 	video-color.h         	\
+	video-converter.h      	\
+	video-dither.h      	\
 	video-info.h         	\
 	video-frame.h         	\
+	video-scaler.h          \
 	video-tile.h         	\
 	gstvideosink.h 		\
 	gstvideofilter.h	\
@@ -65,14 +75,17 @@
 	gstvideodecoder.h       \
 	gstvideoencoder.h       \
 	gstvideoutils.h		\
+	video-resampler.h	\
 	video-blend.h		\
-	video-overlay-composition.h
+	video-overlay-composition.h \
+	video-multiview.h
 
 nodist_libgstvideo_@GST_API_VERSION@include_HEADERS = $(built_headers)
+noinst_HEADERS = gstvideoutilsprivate.h
 
 libgstvideo_@GST_API_VERSION@_la_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_BASE_CFLAGS) $(GST_CFLAGS) \
 					$(ORC_CFLAGS)
-libgstvideo_@GST_API_VERSION@_la_LIBADD = $(GST_BASE_LIBS) $(GST_LIBS) $(ORC_LIBS)
+libgstvideo_@GST_API_VERSION@_la_LIBADD = $(GST_BASE_LIBS) $(GST_LIBS) $(ORC_LIBS) $(LIBM)
 libgstvideo_@GST_API_VERSION@_la_LDFLAGS = $(GST_LIB_LDFLAGS) $(GST_ALL_LDFLAGS) $(GST_LT_LDFLAGS)
 
 include $(top_srcdir)/common/gst-glib-gen.mak
@@ -86,7 +99,7 @@
 gir_sources+=$(patsubst %,$(builddir)/%, $(built_sources))
 
 GstVideo-@GST_API_VERSION@.gir: $(INTROSPECTION_SCANNER) libgstvideo-@GST_API_VERSION@.la
-	$(AM_V_GEN)PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" \
+	$(AM_V_GEN)PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" GI_SCANNER_DISABLE_CACHE=yes\
 		GST_PLUGIN_SYSTEM_PATH_1_0="" GST_PLUGIN_PATH_1_0="" GST_REGISTRY_UPDATE=no \
 		$(INTROSPECTION_SCANNER) -v --namespace GstVideo \
 		--nsversion=@GST_API_VERSION@ \
@@ -104,7 +117,7 @@
 		--pkg gstreamer-@GST_API_VERSION@ \
 		--pkg gstreamer-base-@GST_API_VERSION@ \
 		--pkg-export gstreamer-video-@GST_API_VERSION@ \
-		--add-init-section="gst_init(NULL,NULL);" \
+		--add-init-section="$(INTROSPECTION_INIT)" \
 		--output $@ \
 		$(gir_headers) \
 		$(gir_sources)
@@ -129,19 +142,3 @@
 
 CLEANFILES += $(BUILT_GIRSOURCES) $(typelibs_DATA)
 endif
-
-Android.mk: Makefile.am $(BUILT_SOURCES)
-	androgenizer -:PROJECT libgstvideo -:SHARED libgstvideo-@GST_API_VERSION@ \
-	 -:TAGS eng debug \
-         -:REL_TOP $(top_srcdir) -:ABS_TOP $(abs_top_srcdir) \
-	 -:SOURCES $(libgstvideo_@GST_API_VERSION@_la_SOURCES) \
-	           $(nodist_libgstvideo_@GST_API_VERSION@_la_SOURCES) \
-	 -:CFLAGS $(DEFS) $(DEFAULT_INCLUDES) $(libgstvideo_@GST_API_VERSION@_la_CFLAGS) \
-	 -:LDFLAGS $(libgstvideo_@GST_API_VERSION@_la_LDFLAGS) \
-	           $(libgstvideo_@GST_API_VERSION@_la_LIBADD) \
-	           -ldl \
-	 -:HEADER_TARGET gstreamer-@GST_API_VERSION@/gst/tag \
-	 -:HEADERS $(libgstvideo_@GST_API_VERSION@include_HEADERS) \
-	           $(nodist_libgstvideo_@GST_API_VERSION@include_HEADERS) \
-	 -:PASSTHROUGH LOCAL_ARM_MODE:=arm \
-	> $@
diff --git a/gst-libs/gst/video/Makefile.in b/gst-libs/gst/video/Makefile.in
index d526157..4117f35 100644
--- a/gst-libs/gst/video/Makefile.in
+++ b/gst-libs/gst/video/Makefile.in
@@ -1,7 +1,7 @@
-# Makefile.in generated by automake 1.14.1 from Makefile.am.
+# Makefile.in generated by automake 1.15 from Makefile.am.
 # @configure_input@
 
-# Copyright (C) 1994-2013 Free Software Foundation, Inc.
+# 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,
@@ -47,7 +47,17 @@
 
 
 VPATH = @srcdir@
-am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)'
+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 \
       ?) ;; \
@@ -111,10 +121,6 @@
 build_triplet = @build@
 host_triplet = @host@
 target_triplet = @target@
-DIST_COMMON = $(top_srcdir)/common/orc.mak \
-	$(top_srcdir)/common/gst-glib-gen.mak $(srcdir)/Makefile.in \
-	$(srcdir)/Makefile.am $(top_srcdir)/depcomp \
-	$(libgstvideo_@GST_API_VERSION@include_HEADERS) TODO
 @HAVE_INTROSPECTION_TRUE@am__append_1 = $(BUILT_GIRSOURCES) $(typelibs_DATA)
 subdir = gst-libs/gst/video
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
@@ -137,7 +143,6 @@
 	$(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-x11.m4 \
 	$(top_srcdir)/common/m4/gst.m4 \
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
@@ -154,6 +159,9 @@
 	$(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am \
+	$(libgstvideo_@GST_API_VERSION@include_HEADERS) \
+	$(noinst_HEADERS) $(am__DIST_COMMON)
 mkinstalldirs = $(install_sh) -d
 CONFIG_HEADER = $(top_builddir)/config.h
 CONFIG_CLEAN_FILES =
@@ -192,7 +200,8 @@
 LTLIBRARIES = $(lib_LTLIBRARIES)
 am__DEPENDENCIES_1 =
 libgstvideo_@GST_API_VERSION@_la_DEPENDENCIES = $(am__DEPENDENCIES_1) \
-	$(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1)
+	$(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
+	$(am__DEPENDENCIES_1)
 am_libgstvideo_@GST_API_VERSION@_la_OBJECTS =  \
 	libgstvideo_@GST_API_VERSION@_la-colorbalance.lo \
 	libgstvideo_@GST_API_VERSION@_la-colorbalancechannel.lo \
@@ -202,8 +211,11 @@
 	libgstvideo_@GST_API_VERSION@_la-video-format.lo \
 	libgstvideo_@GST_API_VERSION@_la-video-chroma.lo \
 	libgstvideo_@GST_API_VERSION@_la-video-color.lo \
+	libgstvideo_@GST_API_VERSION@_la-video-converter.lo \
+	libgstvideo_@GST_API_VERSION@_la-video-dither.lo \
 	libgstvideo_@GST_API_VERSION@_la-video-info.lo \
 	libgstvideo_@GST_API_VERSION@_la-video-frame.lo \
+	libgstvideo_@GST_API_VERSION@_la-video-scaler.lo \
 	libgstvideo_@GST_API_VERSION@_la-video-tile.lo \
 	libgstvideo_@GST_API_VERSION@_la-gstvideosink.lo \
 	libgstvideo_@GST_API_VERSION@_la-gstvideofilter.lo \
@@ -215,8 +227,11 @@
 	libgstvideo_@GST_API_VERSION@_la-gstvideodecoder.lo \
 	libgstvideo_@GST_API_VERSION@_la-gstvideoencoder.lo \
 	libgstvideo_@GST_API_VERSION@_la-gstvideoutils.lo \
+	libgstvideo_@GST_API_VERSION@_la-gstvideoutilsprivate.lo \
+	libgstvideo_@GST_API_VERSION@_la-video-resampler.lo \
 	libgstvideo_@GST_API_VERSION@_la-video-blend.lo \
-	libgstvideo_@GST_API_VERSION@_la-video-overlay-composition.lo
+	libgstvideo_@GST_API_VERSION@_la-video-overlay-composition.lo \
+	libgstvideo_@GST_API_VERSION@_la-video-multiview.lo
 am__objects_1 = libgstvideo_@GST_API_VERSION@_la-video-enumtypes.lo
 am__objects_2 =
 am__objects_3 = libgstvideo_@GST_API_VERSION@_la-tmp-orc.lo \
@@ -277,8 +292,30 @@
   esac
 DATA = $(gir_DATA) $(typelibs_DATA)
 HEADERS = $(libgstvideo_@GST_API_VERSION@include_HEADERS) \
-	$(nodist_libgstvideo_@GST_API_VERSION@include_HEADERS)
+	$(nodist_libgstvideo_@GST_API_VERSION@include_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)/common/gst-glib-gen.mak \
+	$(top_srcdir)/common/orc.mak $(top_srcdir)/depcomp TODO
 DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
 ACLOCAL = @ACLOCAL@
 ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@
@@ -339,6 +376,8 @@
 GIO_CFLAGS = @GIO_CFLAGS@
 GIO_LDFLAGS = @GIO_LDFLAGS@
 GIO_LIBS = @GIO_LIBS@
+GIO_UNIX_2_0_CFLAGS = @GIO_UNIX_2_0_CFLAGS@
+GIO_UNIX_2_0_LIBS = @GIO_UNIX_2_0_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
@@ -368,6 +407,8 @@
 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_OPTION_CFLAGS = @GST_OPTION_CFLAGS@
 GST_OPTION_CXXFLAGS = @GST_OPTION_CXXFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
@@ -395,7 +436,6 @@
 GTK_X11_CFLAGS = @GTK_X11_CFLAGS@
 GTK_X11_LIBS = @GTK_X11_LIBS@
 HAVE_CDPARANOIA = @HAVE_CDPARANOIA@
-HAVE_X = @HAVE_X@
 HAVE_XSHM = @HAVE_XSHM@
 HAVE_ZLIB = @HAVE_ZLIB@
 HTML_DIR = @HTML_DIR@
@@ -410,6 +450,7 @@
 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@
@@ -499,13 +540,12 @@
 XGETTEXT = @XGETTEXT@
 XGETTEXT_015 = @XGETTEXT_015@
 XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
-XMKMF = @XMKMF@
+XSHM_CFLAGS = @XSHM_CFLAGS@
 XSHM_LIBS = @XSHM_LIBS@
+XVIDEO_CFLAGS = @XVIDEO_CFLAGS@
 XVIDEO_LIBS = @XVIDEO_LIBS@
 X_CFLAGS = @X_CFLAGS@
-X_EXTRA_LIBS = @X_EXTRA_LIBS@
 X_LIBS = @X_LIBS@
-X_PRE_LIBS = @X_PRE_LIBS@
 ZLIB_CFLAGS = @ZLIB_CFLAGS@
 ZLIB_LIBS = @ZLIB_LIBS@
 abs_builddir = @abs_builddir@
@@ -558,6 +598,7 @@
 psdir = @psdir@
 pyexecdir = @pyexecdir@
 pythondir = @pythondir@
+runstatedir = @runstatedir@
 sbindir = @sbindir@
 sharedstatedir = @sharedstatedir@
 srcdir = @srcdir@
@@ -583,8 +624,9 @@
 cp_v_gen = $(cp_v_gen_$(V))
 cp_v_gen_ = $(cp_v_gen_$(AM_DEFAULT_VERBOSITY))
 cp_v_gen_0 = @echo "  CP     $@";
-glib_enum_headers = video.h video-format.h video-color.h video-info.h \
-			colorbalance.h navigation.h video-chroma.h video-tile.h
+glib_enum_headers = video.h video-format.h video-color.h video-info.h video-dither.h \
+			colorbalance.h navigation.h video-chroma.h video-tile.h video-converter.h \
+			video-resampler.h video-frame.h video-scaler.h
 
 glib_enum_define = GST_VIDEO
 glib_gen_prefix = gst_video
@@ -602,8 +644,11 @@
 	video-format.c         	\
 	video-chroma.c         	\
 	video-color.c         	\
+	video-converter.c    	\
+	video-dither.c    	\
 	video-info.c         	\
 	video-frame.c         	\
+	video-scaler.c          \
 	video-tile.c         	\
 	gstvideosink.c   	\
 	gstvideofilter.c 	\
@@ -615,8 +660,11 @@
 	gstvideodecoder.c       \
 	gstvideoencoder.c       \
 	gstvideoutils.c		\
+	gstvideoutilsprivate.c	\
+	video-resampler.c	\
 	video-blend.c		\
-	video-overlay-composition.c
+	video-overlay-composition.c \
+	video-multiview.c
 
 nodist_libgstvideo_@GST_API_VERSION@_la_SOURCES = $(BUILT_SOURCES)
 libgstvideo_@GST_API_VERSION@includedir = $(includedir)/gstreamer-@GST_API_VERSION@/gst/video
@@ -629,8 +677,11 @@
 	video-format.h         	\
 	video-chroma.h         	\
 	video-color.h         	\
+	video-converter.h      	\
+	video-dither.h      	\
 	video-info.h         	\
 	video-frame.h         	\
+	video-scaler.h          \
 	video-tile.h         	\
 	gstvideosink.h 		\
 	gstvideofilter.h	\
@@ -641,14 +692,17 @@
 	gstvideodecoder.h       \
 	gstvideoencoder.h       \
 	gstvideoutils.h		\
+	video-resampler.h	\
 	video-blend.h		\
-	video-overlay-composition.h
+	video-overlay-composition.h \
+	video-multiview.h
 
 nodist_libgstvideo_@GST_API_VERSION@include_HEADERS = $(built_headers)
+noinst_HEADERS = gstvideoutilsprivate.h
 libgstvideo_@GST_API_VERSION@_la_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_BASE_CFLAGS) $(GST_CFLAGS) \
 					$(ORC_CFLAGS)
 
-libgstvideo_@GST_API_VERSION@_la_LIBADD = $(GST_BASE_LIBS) $(GST_LIBS) $(ORC_LIBS)
+libgstvideo_@GST_API_VERSION@_la_LIBADD = $(GST_BASE_LIBS) $(GST_LIBS) $(ORC_LIBS) $(LIBM)
 libgstvideo_@GST_API_VERSION@_la_LDFLAGS = $(GST_LIB_LDFLAGS) $(GST_ALL_LDFLAGS) $(GST_LT_LDFLAGS)
 enum_headers = $(foreach h,$(glib_enum_headers),\n\#include \"$(h)\")
 @HAVE_INTROSPECTION_TRUE@BUILT_GIRSOURCES = GstVideo-@GST_API_VERSION@.gir
@@ -684,7 +738,6 @@
 	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu gst-libs/gst/video/Makefile'; \
 	$(am__cd) $(top_srcdir) && \
 	  $(AUTOMAKE) --gnu gst-libs/gst/video/Makefile
-.PRECIOUS: Makefile
 Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
 	@case '$?' in \
 	  *config.status*) \
@@ -693,7 +746,7 @@
 	    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/orc.mak $(top_srcdir)/common/gst-glib-gen.mak:
+$(top_srcdir)/common/orc.mak $(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
@@ -758,17 +811,23 @@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstvideo_@GST_API_VERSION@_la-gstvideopool.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstvideo_@GST_API_VERSION@_la-gstvideosink.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstvideo_@GST_API_VERSION@_la-gstvideoutils.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstvideo_@GST_API_VERSION@_la-gstvideoutilsprivate.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstvideo_@GST_API_VERSION@_la-navigation.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstvideo_@GST_API_VERSION@_la-tmp-orc.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstvideo_@GST_API_VERSION@_la-video-blend.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstvideo_@GST_API_VERSION@_la-video-chroma.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstvideo_@GST_API_VERSION@_la-video-color.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstvideo_@GST_API_VERSION@_la-video-converter.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstvideo_@GST_API_VERSION@_la-video-dither.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstvideo_@GST_API_VERSION@_la-video-enumtypes.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstvideo_@GST_API_VERSION@_la-video-event.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstvideo_@GST_API_VERSION@_la-video-format.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstvideo_@GST_API_VERSION@_la-video-frame.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstvideo_@GST_API_VERSION@_la-video-info.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstvideo_@GST_API_VERSION@_la-video-multiview.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstvideo_@GST_API_VERSION@_la-video-overlay-composition.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstvideo_@GST_API_VERSION@_la-video-resampler.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstvideo_@GST_API_VERSION@_la-video-scaler.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstvideo_@GST_API_VERSION@_la-video-tile.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstvideo_@GST_API_VERSION@_la-video.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstvideo_@GST_API_VERSION@_la-videoorientation.Plo@am__quote@
@@ -854,6 +913,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) $(libgstvideo_@GST_API_VERSION@_la_CFLAGS) $(CFLAGS) -c -o libgstvideo_@GST_API_VERSION@_la-video-color.lo `test -f 'video-color.c' || echo '$(srcdir)/'`video-color.c
 
+libgstvideo_@GST_API_VERSION@_la-video-converter.lo: video-converter.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) $(libgstvideo_@GST_API_VERSION@_la_CFLAGS) $(CFLAGS) -MT libgstvideo_@GST_API_VERSION@_la-video-converter.lo -MD -MP -MF $(DEPDIR)/libgstvideo_@GST_API_VERSION@_la-video-converter.Tpo -c -o libgstvideo_@GST_API_VERSION@_la-video-converter.lo `test -f 'video-converter.c' || echo '$(srcdir)/'`video-converter.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstvideo_@GST_API_VERSION@_la-video-converter.Tpo $(DEPDIR)/libgstvideo_@GST_API_VERSION@_la-video-converter.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='video-converter.c' object='libgstvideo_@GST_API_VERSION@_la-video-converter.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) $(libgstvideo_@GST_API_VERSION@_la_CFLAGS) $(CFLAGS) -c -o libgstvideo_@GST_API_VERSION@_la-video-converter.lo `test -f 'video-converter.c' || echo '$(srcdir)/'`video-converter.c
+
+libgstvideo_@GST_API_VERSION@_la-video-dither.lo: video-dither.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) $(libgstvideo_@GST_API_VERSION@_la_CFLAGS) $(CFLAGS) -MT libgstvideo_@GST_API_VERSION@_la-video-dither.lo -MD -MP -MF $(DEPDIR)/libgstvideo_@GST_API_VERSION@_la-video-dither.Tpo -c -o libgstvideo_@GST_API_VERSION@_la-video-dither.lo `test -f 'video-dither.c' || echo '$(srcdir)/'`video-dither.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstvideo_@GST_API_VERSION@_la-video-dither.Tpo $(DEPDIR)/libgstvideo_@GST_API_VERSION@_la-video-dither.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='video-dither.c' object='libgstvideo_@GST_API_VERSION@_la-video-dither.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) $(libgstvideo_@GST_API_VERSION@_la_CFLAGS) $(CFLAGS) -c -o libgstvideo_@GST_API_VERSION@_la-video-dither.lo `test -f 'video-dither.c' || echo '$(srcdir)/'`video-dither.c
+
 libgstvideo_@GST_API_VERSION@_la-video-info.lo: video-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) $(libgstvideo_@GST_API_VERSION@_la_CFLAGS) $(CFLAGS) -MT libgstvideo_@GST_API_VERSION@_la-video-info.lo -MD -MP -MF $(DEPDIR)/libgstvideo_@GST_API_VERSION@_la-video-info.Tpo -c -o libgstvideo_@GST_API_VERSION@_la-video-info.lo `test -f 'video-info.c' || echo '$(srcdir)/'`video-info.c
 @am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstvideo_@GST_API_VERSION@_la-video-info.Tpo $(DEPDIR)/libgstvideo_@GST_API_VERSION@_la-video-info.Plo
@@ -868,6 +941,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) $(libgstvideo_@GST_API_VERSION@_la_CFLAGS) $(CFLAGS) -c -o libgstvideo_@GST_API_VERSION@_la-video-frame.lo `test -f 'video-frame.c' || echo '$(srcdir)/'`video-frame.c
 
+libgstvideo_@GST_API_VERSION@_la-video-scaler.lo: video-scaler.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) $(libgstvideo_@GST_API_VERSION@_la_CFLAGS) $(CFLAGS) -MT libgstvideo_@GST_API_VERSION@_la-video-scaler.lo -MD -MP -MF $(DEPDIR)/libgstvideo_@GST_API_VERSION@_la-video-scaler.Tpo -c -o libgstvideo_@GST_API_VERSION@_la-video-scaler.lo `test -f 'video-scaler.c' || echo '$(srcdir)/'`video-scaler.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstvideo_@GST_API_VERSION@_la-video-scaler.Tpo $(DEPDIR)/libgstvideo_@GST_API_VERSION@_la-video-scaler.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='video-scaler.c' object='libgstvideo_@GST_API_VERSION@_la-video-scaler.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) $(libgstvideo_@GST_API_VERSION@_la_CFLAGS) $(CFLAGS) -c -o libgstvideo_@GST_API_VERSION@_la-video-scaler.lo `test -f 'video-scaler.c' || echo '$(srcdir)/'`video-scaler.c
+
 libgstvideo_@GST_API_VERSION@_la-video-tile.lo: video-tile.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) $(libgstvideo_@GST_API_VERSION@_la_CFLAGS) $(CFLAGS) -MT libgstvideo_@GST_API_VERSION@_la-video-tile.lo -MD -MP -MF $(DEPDIR)/libgstvideo_@GST_API_VERSION@_la-video-tile.Tpo -c -o libgstvideo_@GST_API_VERSION@_la-video-tile.lo `test -f 'video-tile.c' || echo '$(srcdir)/'`video-tile.c
 @am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstvideo_@GST_API_VERSION@_la-video-tile.Tpo $(DEPDIR)/libgstvideo_@GST_API_VERSION@_la-video-tile.Plo
@@ -945,6 +1025,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) $(libgstvideo_@GST_API_VERSION@_la_CFLAGS) $(CFLAGS) -c -o libgstvideo_@GST_API_VERSION@_la-gstvideoutils.lo `test -f 'gstvideoutils.c' || echo '$(srcdir)/'`gstvideoutils.c
 
+libgstvideo_@GST_API_VERSION@_la-gstvideoutilsprivate.lo: gstvideoutilsprivate.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) $(libgstvideo_@GST_API_VERSION@_la_CFLAGS) $(CFLAGS) -MT libgstvideo_@GST_API_VERSION@_la-gstvideoutilsprivate.lo -MD -MP -MF $(DEPDIR)/libgstvideo_@GST_API_VERSION@_la-gstvideoutilsprivate.Tpo -c -o libgstvideo_@GST_API_VERSION@_la-gstvideoutilsprivate.lo `test -f 'gstvideoutilsprivate.c' || echo '$(srcdir)/'`gstvideoutilsprivate.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstvideo_@GST_API_VERSION@_la-gstvideoutilsprivate.Tpo $(DEPDIR)/libgstvideo_@GST_API_VERSION@_la-gstvideoutilsprivate.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='gstvideoutilsprivate.c' object='libgstvideo_@GST_API_VERSION@_la-gstvideoutilsprivate.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) $(libgstvideo_@GST_API_VERSION@_la_CFLAGS) $(CFLAGS) -c -o libgstvideo_@GST_API_VERSION@_la-gstvideoutilsprivate.lo `test -f 'gstvideoutilsprivate.c' || echo '$(srcdir)/'`gstvideoutilsprivate.c
+
+libgstvideo_@GST_API_VERSION@_la-video-resampler.lo: video-resampler.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) $(libgstvideo_@GST_API_VERSION@_la_CFLAGS) $(CFLAGS) -MT libgstvideo_@GST_API_VERSION@_la-video-resampler.lo -MD -MP -MF $(DEPDIR)/libgstvideo_@GST_API_VERSION@_la-video-resampler.Tpo -c -o libgstvideo_@GST_API_VERSION@_la-video-resampler.lo `test -f 'video-resampler.c' || echo '$(srcdir)/'`video-resampler.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstvideo_@GST_API_VERSION@_la-video-resampler.Tpo $(DEPDIR)/libgstvideo_@GST_API_VERSION@_la-video-resampler.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='video-resampler.c' object='libgstvideo_@GST_API_VERSION@_la-video-resampler.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) $(libgstvideo_@GST_API_VERSION@_la_CFLAGS) $(CFLAGS) -c -o libgstvideo_@GST_API_VERSION@_la-video-resampler.lo `test -f 'video-resampler.c' || echo '$(srcdir)/'`video-resampler.c
+
 libgstvideo_@GST_API_VERSION@_la-video-blend.lo: video-blend.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) $(libgstvideo_@GST_API_VERSION@_la_CFLAGS) $(CFLAGS) -MT libgstvideo_@GST_API_VERSION@_la-video-blend.lo -MD -MP -MF $(DEPDIR)/libgstvideo_@GST_API_VERSION@_la-video-blend.Tpo -c -o libgstvideo_@GST_API_VERSION@_la-video-blend.lo `test -f 'video-blend.c' || echo '$(srcdir)/'`video-blend.c
 @am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstvideo_@GST_API_VERSION@_la-video-blend.Tpo $(DEPDIR)/libgstvideo_@GST_API_VERSION@_la-video-blend.Plo
@@ -959,6 +1053,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) $(libgstvideo_@GST_API_VERSION@_la_CFLAGS) $(CFLAGS) -c -o libgstvideo_@GST_API_VERSION@_la-video-overlay-composition.lo `test -f 'video-overlay-composition.c' || echo '$(srcdir)/'`video-overlay-composition.c
 
+libgstvideo_@GST_API_VERSION@_la-video-multiview.lo: video-multiview.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) $(libgstvideo_@GST_API_VERSION@_la_CFLAGS) $(CFLAGS) -MT libgstvideo_@GST_API_VERSION@_la-video-multiview.lo -MD -MP -MF $(DEPDIR)/libgstvideo_@GST_API_VERSION@_la-video-multiview.Tpo -c -o libgstvideo_@GST_API_VERSION@_la-video-multiview.lo `test -f 'video-multiview.c' || echo '$(srcdir)/'`video-multiview.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstvideo_@GST_API_VERSION@_la-video-multiview.Tpo $(DEPDIR)/libgstvideo_@GST_API_VERSION@_la-video-multiview.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='video-multiview.c' object='libgstvideo_@GST_API_VERSION@_la-video-multiview.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) $(libgstvideo_@GST_API_VERSION@_la_CFLAGS) $(CFLAGS) -c -o libgstvideo_@GST_API_VERSION@_la-video-multiview.lo `test -f 'video-multiview.c' || echo '$(srcdir)/'`video-multiview.c
+
 libgstvideo_@GST_API_VERSION@_la-tmp-orc.lo: tmp-orc.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) $(libgstvideo_@GST_API_VERSION@_la_CFLAGS) $(CFLAGS) -MT libgstvideo_@GST_API_VERSION@_la-tmp-orc.lo -MD -MP -MF $(DEPDIR)/libgstvideo_@GST_API_VERSION@_la-tmp-orc.Tpo -c -o libgstvideo_@GST_API_VERSION@_la-tmp-orc.lo `test -f 'tmp-orc.c' || echo '$(srcdir)/'`tmp-orc.c
 @am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstvideo_@GST_API_VERSION@_la-tmp-orc.Tpo $(DEPDIR)/libgstvideo_@GST_API_VERSION@_la-tmp-orc.Plo
@@ -1062,12 +1163,58 @@
 	@list='$(nodist_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:
 
-ctags CTAGS:
+ID: $(am__tagged_files)
+	$(am__define_uniq_tagged_files); mkid -fID $$unique
+tags: tags-am
+TAGS: tags
 
-cscope cscopelist:
+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'`; \
@@ -1151,7 +1298,8 @@
 distclean: distclean-am
 	-rm -rf ./$(DEPDIR)
 	-rm -f Makefile
-distclean-am: clean-am distclean-compile distclean-generic
+distclean-am: clean-am distclean-compile distclean-generic \
+	distclean-tags
 
 dvi: dvi-am
 
@@ -1221,14 +1369,15 @@
 
 .MAKE: all check install install-am install-strip
 
-.PHONY: all all-am check check-am clean clean-generic \
+.PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \
 	clean-libLTLIBRARIES clean-libtool clean-local cscopelist-am \
-	ctags-am dist-hook 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-girDATA install-html install-html-am \
-	install-info install-info-am install-libLTLIBRARIES \
+	ctags ctags-am dist-hook 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-girDATA install-html \
+	install-html-am install-info install-info-am \
+	install-libLTLIBRARIES \
 	install-libgstvideo_@GST_API_VERSION@includeHEADERS \
 	install-man \
 	install-nodist_libgstvideo_@GST_API_VERSION@includeHEADERS \
@@ -1237,12 +1386,14 @@
 	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-girDATA \
+	tags tags-am uninstall uninstall-am uninstall-girDATA \
 	uninstall-libLTLIBRARIES \
 	uninstall-libgstvideo_@GST_API_VERSION@includeHEADERS \
 	uninstall-nodist_libgstvideo_@GST_API_VERSION@includeHEADERS \
 	uninstall-typelibsDATA
 
+.PRECIOUS: Makefile
+
 
 orc-update: tmp-orc.c $(ORC_SOURCE).h
 	$(top_srcdir)/common/gst-indent tmp-orc.c
@@ -1317,7 +1468,7 @@
 	@touch $@
 
 @HAVE_INTROSPECTION_TRUE@GstVideo-@GST_API_VERSION@.gir: $(INTROSPECTION_SCANNER) libgstvideo-@GST_API_VERSION@.la
-@HAVE_INTROSPECTION_TRUE@	$(AM_V_GEN)PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" \
+@HAVE_INTROSPECTION_TRUE@	$(AM_V_GEN)PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" GI_SCANNER_DISABLE_CACHE=yes\
 @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 GstVideo \
 @HAVE_INTROSPECTION_TRUE@		--nsversion=@GST_API_VERSION@ \
@@ -1335,7 +1486,7 @@
 @HAVE_INTROSPECTION_TRUE@		--pkg gstreamer-@GST_API_VERSION@ \
 @HAVE_INTROSPECTION_TRUE@		--pkg gstreamer-base-@GST_API_VERSION@ \
 @HAVE_INTROSPECTION_TRUE@		--pkg-export gstreamer-video-@GST_API_VERSION@ \
-@HAVE_INTROSPECTION_TRUE@		--add-init-section="gst_init(NULL,NULL);" \
+@HAVE_INTROSPECTION_TRUE@		--add-init-section="$(INTROSPECTION_INIT)" \
 @HAVE_INTROSPECTION_TRUE@		--output $@ \
 @HAVE_INTROSPECTION_TRUE@		$(gir_headers) \
 @HAVE_INTROSPECTION_TRUE@		$(gir_sources)
@@ -1349,22 +1500,6 @@
 @HAVE_INTROSPECTION_TRUE@		--includedir=`PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" $(PKG_CONFIG) --variable=girdir gstreamer-base-@GST_API_VERSION@` \
 @HAVE_INTROSPECTION_TRUE@		$(INTROSPECTION_COMPILER_OPTS) $< -o $(@F)
 
-Android.mk: Makefile.am $(BUILT_SOURCES)
-	androgenizer -:PROJECT libgstvideo -:SHARED libgstvideo-@GST_API_VERSION@ \
-	 -:TAGS eng debug \
-         -:REL_TOP $(top_srcdir) -:ABS_TOP $(abs_top_srcdir) \
-	 -:SOURCES $(libgstvideo_@GST_API_VERSION@_la_SOURCES) \
-	           $(nodist_libgstvideo_@GST_API_VERSION@_la_SOURCES) \
-	 -:CFLAGS $(DEFS) $(DEFAULT_INCLUDES) $(libgstvideo_@GST_API_VERSION@_la_CFLAGS) \
-	 -:LDFLAGS $(libgstvideo_@GST_API_VERSION@_la_LDFLAGS) \
-	           $(libgstvideo_@GST_API_VERSION@_la_LIBADD) \
-	           -ldl \
-	 -:HEADER_TARGET gstreamer-@GST_API_VERSION@/gst/tag \
-	 -:HEADERS $(libgstvideo_@GST_API_VERSION@include_HEADERS) \
-	           $(nodist_libgstvideo_@GST_API_VERSION@include_HEADERS) \
-	 -:PASSTHROUGH LOCAL_ARM_MODE:=arm \
-	> $@
-
 # 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-libs/gst/video/colorbalance.h b/gst-libs/gst/video/colorbalance.h
index f73d261..d5c2bd5 100644
--- a/gst-libs/gst/video/colorbalance.h
+++ b/gst-libs/gst/video/colorbalance.h
@@ -60,7 +60,7 @@
 /**
  * GstColorBalanceInterface:
  * @iface: the parent interface
- * @balance_type: implementation type
+ * @get_balance_type: implementation type
  * @list_channels: list handled channels
  * @set_value: set a channel value
  * @get_value: get a channel value
diff --git a/gst-libs/gst/video/gstvideodecoder.c b/gst-libs/gst/video/gstvideodecoder.c
index 03640f5..f8a5869 100644
--- a/gst-libs/gst/video/gstvideodecoder.c
+++ b/gst-libs/gst/video/gstvideodecoder.c
@@ -25,12 +25,13 @@
 /**
  * SECTION:gstvideodecoder
  * @short_description: Base class for video decoders
- * @see_also: 
+ * @see_also:
  *
  * This base class is for video decoders turning encoded data into raw video
  * frames.
  *
- * The GstVideoDecoder base class and derived subclasses should cooperate as follows:
+ * The GstVideoDecoder base class and derived subclasses should cooperate as
+ * follows:
  * <orderedlist>
  * <listitem>
  *   <itemizedlist><title>Configuration</title>
@@ -46,7 +47,8 @@
  *     parameters require reconfiguration.
  *   </para></listitem>
  *   <listitem><para>
- *     Incoming data buffers are processed as needed, described in Data Processing below.
+ *     Incoming data buffers are processed as needed, described in Data
+ *     Processing below.
  *   </para></listitem>
  *   <listitem><para>
  *     GstVideoDecoder calls @stop at end of all processing.
@@ -62,15 +64,17 @@
  *       corresponding to and referred to as 'frames'.
  *     </para></listitem>
  *     <listitem><para>
- *       Each input frame is provided in turn to the subclass' @handle_frame callback.
+ *       Each input frame is provided in turn to the subclass' @handle_frame
+ *       callback.
  *       The ownership of the frame is given to the @handle_frame callback.
  *     </para></listitem>
  *     <listitem><para>
  *       If codec processing results in decoded data, the subclass should call
  *       @gst_video_decoder_finish_frame to have decoded data pushed.
- *       downstream. Otherwise, the subclass must call @gst_video_decoder_drop_frame, to
- *       allow the base class to do timestamp and offset tracking, and possibly to
- *       requeue the frame for a later attempt in the case of reverse playback.
+ *       downstream. Otherwise, the subclass must call
+ *       @gst_video_decoder_drop_frame, to allow the base class to do timestamp
+ *       and offset tracking, and possibly to requeue the frame for a later
+ *       attempt in the case of reverse playback.
  *     </para></listitem>
  *   </itemizedlist>
  * </listitem>
@@ -87,20 +91,21 @@
  *   <listitem>
  *     <itemizedlist><title>Seeking/Flushing</title>
  *     <listitem><para>
- *   When the pipeline is seeked or otherwise flushed, the subclass is informed via a call
- *   to its @reset callback, with the hard parameter set to true. This indicates the
- *   subclass should drop any internal data queues and timestamps and prepare for a fresh
- *   set of buffers to arrive for parsing and decoding.
+ *   When the pipeline is seeked or otherwise flushed, the subclass is
+ *   informed via a call to its @reset callback, with the hard parameter
+ *   set to true. This indicates the subclass should drop any internal data
+ *   queues and timestamps and prepare for a fresh set of buffers to arrive
+ *   for parsing and decoding.
  *     </para></listitem>
  *     </itemizedlist>
  *   </listitem>
  *   <listitem>
  *     <itemizedlist><title>End Of Stream</title>
  *     <listitem><para>
- *   At end-of-stream, the subclass @parse function may be called some final times with the 
- *   at_eos parameter set to true, indicating that the element should not expect any more data
- *   to be arriving, and it should parse and remaining frames and call
- *   gst_video_decoder_have_frame() if possible.
+ *   At end-of-stream, the subclass @parse function may be called some final
+ *   times with the at_eos parameter set to true, indicating that the element
+ *   should not expect any more data to be arriving, and it should parse and
+ *   remaining frames and call gst_video_decoder_have_frame() if possible.
  *     </para></listitem>
  *     </itemizedlist>
  *   </listitem>
@@ -125,26 +130,30 @@
  * should rather be left to upstream demuxer, parser or alike.  This simple
  * approach caters for seeking and duration reporting using estimated input
  * bitrates. To enable it, a subclass should call
- * @gst_video_decoder_set_estimate_rate to enable handling of incoming byte-streams.
+ * @gst_video_decoder_set_estimate_rate to enable handling of incoming
+ * byte-streams.
  *
  * The base class provides some support for reverse playback, in particular
  * in case incoming data is not packetized or upstream does not provide
- * fragments on keyframe boundaries.  However, the subclass should then be prepared
- * for the parsing and frame processing stage to occur separately (in normal
- * forward processing, the latter immediately follows the former),
- * The subclass also needs to ensure the parsing stage properly marks keyframes,
- * unless it knows the upstream elements will do so properly for incoming data.
+ * fragments on keyframe boundaries.  However, the subclass should then be
+ * prepared for the parsing and frame processing stage to occur separately
+ * (in normal forward processing, the latter immediately follows the former),
+ * The subclass also needs to ensure the parsing stage properly marks
+ * keyframes, unless it knows the upstream elements will do so properly for
+ * incoming data.
  *
  * The bare minimum that a functional subclass needs to implement is:
  * <itemizedlist>
  *   <listitem><para>Provide pad templates</para></listitem>
  *   <listitem><para>
- *      Inform the base class of output caps via @gst_video_decoder_set_output_state
+ *      Inform the base class of output caps via
+ *      @gst_video_decoder_set_output_state
  *   </para></listitem>
  *   <listitem><para>
  *      Parse input data, if it is not considered packetized from upstream
- *      Data will be provided to @parse which should invoke @gst_video_decoder_add_to_frame and
- *      @gst_video_decoder_have_frame to separate the data belonging to each video frame.
+ *      Data will be provided to @parse which should invoke
+ *      @gst_video_decoder_add_to_frame and @gst_video_decoder_have_frame to
+ *      separate the data belonging to each video frame.
  *   </para></listitem>
  *   <listitem><para>
  *      Accept data in @handle_frame and provide decoded results to
@@ -177,16 +186,17 @@
  * on whether forward or reverse playback is requested.
  *
  * Forward playback:
- *   * Incoming buffer -> @parse() -> add_to_frame()/have_frame() -> handle_frame() -> 
- *     push downstream
+ *   * Incoming buffer -> @parse() -> add_to_frame()/have_frame() ->
+ *     handle_frame() -> push downstream
  *
- * Reverse playback is more complicated, since it involves gathering incoming data regions
- * as we loop backwards through the upstream data. The processing concept (using incoming
- * buffers as containing one frame each to simplify things) is:
+ * Reverse playback is more complicated, since it involves gathering incoming
+ * data regions as we loop backwards through the upstream data. The processing
+ * concept (using incoming buffers as containing one frame each to simplify
+ * things) is:
  *
  * Upstream data we want to play:
  *  Buffer encoded order:  1  2  3  4  5  6  7  8  9  EOS
- *  Keyframe flag:            K        K        
+ *  Keyframe flag:            K        K
  *  Groupings:             AAAAAAA  BBBBBBB  CCCCCCC
  *
  * Input:
@@ -210,19 +220,20 @@
  * this:
  *
  *   while (gather)
- *     take head of queue and prepend to parse queue (this reverses the sequence,
- *     so parse queue is 7 -> 8 -> 9)
+ *     take head of queue and prepend to parse queue (this reverses the
+ *     sequence, so parse queue is 7 -> 8 -> 9)
  *
- *   Next, we process the parse queue, which now contains all un-parsed packets (including
- *   any leftover ones from the previous decode section)
+ *   Next, we process the parse queue, which now contains all un-parsed packets
+ *   (including any leftover ones from the previous decode section)
  *
  *   for each buffer now in the parse queue:
  *     Call the subclass parse function, prepending each resulting frame to
  *     the parse_gather queue. Buffers which precede the first one that
- *     produces a parsed frame are retained in the parse queue for re-processing on
- *     the next cycle of parsing.
+ *     produces a parsed frame are retained in the parse queue for
+ *     re-processing on the next cycle of parsing.
  *
- *   The parse_gather queue now contains frame objects ready for decoding, in reverse order.
+ *   The parse_gather queue now contains frame objects ready for decoding,
+ *   in reverse order.
  *   parse_gather: 9 -> 8 -> 7
  *
  *   while (parse_gather)
@@ -233,8 +244,8 @@
  *  Processing the decode queue results in frames with attached output buffers
  *  stored in the 'output_queue' ready for outputting in reverse order.
  *
- * After we flushed the gather queue and parsed it, we add 4 to the (now empty) gather queue.
- * We get the following situation:
+ * After we flushed the gather queue and parsed it, we add 4 to the (now empty)
+ * gather queue. We get the following situation:
  *
  *  gather queue:    4
  *  decode queue:    7  8  9
@@ -262,7 +273,7 @@
  *   output queue:
  *
  *    gather queue:    4
- *    decode queue:    
+ *    decode queue:
  *    output queue:    9  8  7  6  5
  *
  *   Now output all the frames in the output queue, picking a frame from the
@@ -287,7 +298,7 @@
  *  Decoded output:
  *
  *    gather queue:    1
- *    decode queue:    
+ *    decode queue:
  *    output queue:    4  3  2
  *
  *  Leftover buffer 1 cannot be decoded and must be discarded.
@@ -295,6 +306,7 @@
 
 #include "gstvideodecoder.h"
 #include "gstvideoutils.h"
+#include "gstvideoutilsprivate.h"
 
 #include <gst/video/video.h>
 #include <gst/video/video-event.h>
@@ -337,7 +349,8 @@
   gboolean had_input_data;
 
   gboolean needs_format;
-  gboolean do_caps;
+  /* input_segment are output_segment identical */
+  gboolean in_out_segment_sync;
 
   /* ... being tracked here;
    * only available during parsing */
@@ -406,8 +419,17 @@
   gint64 min_latency;
   gint64 max_latency;
 
+  /* upstream stream tags (global tags are passed through as-is) */
+  GstTagList *upstream_tags;
+
+  /* subclass tags */
   GstTagList *tags;
+  GstTagMergeMode tags_merge_mode;
+
   gboolean tags_changed;
+
+  /* flags */
+  gboolean use_default_pad_acceptcaps;
 };
 
 static GstElementClass *parent_class = NULL;
@@ -437,6 +459,8 @@
 static GstFlowReturn gst_video_decoder_decode_frame (GstVideoDecoder * decoder,
     GstVideoCodecFrame * frame);
 
+static void gst_video_decoder_push_event_list (GstVideoDecoder * decoder,
+    GList * events);
 static GstClockTime gst_video_decoder_get_frame_duration (GstVideoDecoder *
     decoder, GstVideoCodecFrame * frame);
 static GstVideoCodecFrame *gst_video_decoder_new_frame (GstVideoDecoder *
@@ -466,6 +490,9 @@
 static gboolean gst_video_decoder_src_query_default (GstVideoDecoder * decoder,
     GstQuery * query);
 
+static gboolean gst_video_decoder_transform_meta_default (GstVideoDecoder *
+    decoder, GstVideoCodecFrame * frame, GstMeta * meta);
+
 /* we can't use G_DEFINE_ABSTRACT_TYPE because we need the klass in the _init
  * method to get to the padtemplates */
 GType
@@ -521,6 +548,7 @@
   klass->negotiate = gst_video_decoder_negotiate_default;
   klass->sink_query = gst_video_decoder_sink_query_default;
   klass->src_query = gst_video_decoder_src_query_default;
+  klass->transform_meta = gst_video_decoder_transform_meta_default;
 }
 
 static void
@@ -568,6 +596,9 @@
   decoder->priv->packetized = TRUE;
   decoder->priv->needs_format = FALSE;
 
+  decoder->priv->min_latency = 0;
+  decoder->priv->max_latency = 0;
+
   gst_video_decoder_reset (decoder, TRUE, TRUE);
 }
 
@@ -749,6 +780,12 @@
     tgt->par_d = ref->par_d;
     tgt->fps_n = ref->fps_n;
     tgt->fps_d = ref->fps_d;
+    tgt->views = ref->views;
+    if (GST_VIDEO_INFO_MULTIVIEW_MODE (ref) != GST_VIDEO_MULTIVIEW_MODE_NONE) {
+      GST_VIDEO_INFO_MULTIVIEW_MODE (tgt) = GST_VIDEO_INFO_MULTIVIEW_MODE (ref);
+      GST_VIDEO_INFO_MULTIVIEW_FLAGS (tgt) =
+          GST_VIDEO_INFO_MULTIVIEW_FLAGS (ref);
+    }
   }
 
   GST_DEBUG ("reference par %d/%d fps %d/%d",
@@ -884,6 +921,32 @@
   return ret;
 }
 
+static GstEvent *
+gst_video_decoder_create_merged_tags_event (GstVideoDecoder * dec)
+{
+  GstTagList *merged_tags;
+
+  GST_LOG_OBJECT (dec, "upstream : %" GST_PTR_FORMAT, dec->priv->upstream_tags);
+  GST_LOG_OBJECT (dec, "decoder  : %" GST_PTR_FORMAT, dec->priv->tags);
+  GST_LOG_OBJECT (dec, "mode     : %d", dec->priv->tags_merge_mode);
+
+  merged_tags =
+      gst_tag_list_merge (dec->priv->upstream_tags, dec->priv->tags,
+      dec->priv->tags_merge_mode);
+
+  GST_DEBUG_OBJECT (dec, "merged   : %" GST_PTR_FORMAT, merged_tags);
+
+  if (merged_tags == NULL)
+    return NULL;
+
+  if (gst_tag_list_is_empty (merged_tags)) {
+    gst_tag_list_unref (merged_tags);
+    return NULL;
+  }
+
+  return gst_event_new_tag (merged_tags);
+}
+
 static gboolean
 gst_video_decoder_push_event (GstVideoDecoder * decoder, GstEvent * event)
 {
@@ -903,6 +966,8 @@
 
       GST_VIDEO_DECODER_STREAM_LOCK (decoder);
       decoder->output_segment = segment;
+      decoder->priv->in_out_segment_sync =
+          gst_segment_is_equal (&decoder->input_segment, &segment);
       decoder->priv->last_timestamp_out = GST_CLOCK_TIME_NONE;
       GST_VIDEO_DECODER_STREAM_UNLOCK (decoder);
       break;
@@ -985,6 +1050,12 @@
     if (at_eos) {
       if (decoder_class->finish)
         ret = decoder_class->finish (dec);
+    } else {
+      if (decoder_class->drain) {
+        ret = decoder_class->drain (dec);
+      } else {
+        GST_FIXME_OBJECT (dec, "Sub-class should implement drain()");
+      }
     }
   } else {
     /* Reverse playback mode */
@@ -1014,6 +1085,99 @@
   return NULL;
 }
 
+/* Must be called holding the GST_VIDEO_DECODER_STREAM_LOCK */
+static gboolean
+gst_video_decoder_negotiate_default_caps (GstVideoDecoder * decoder)
+{
+  GstCaps *caps;
+  GstVideoCodecState *state;
+  GstVideoInfo info;
+  gint i;
+  gint caps_size;
+  GstStructure *structure;
+
+  caps = gst_pad_get_allowed_caps (decoder->srcpad);
+  if (!caps || gst_caps_is_empty (caps) || gst_caps_is_any (caps))
+    goto caps_error;
+
+  /* before fixating, try to use whatever upstream provided */
+  caps = gst_caps_make_writable (caps);
+  caps_size = gst_caps_get_size (caps);
+  if (decoder->priv->input_state && decoder->priv->input_state->caps) {
+    GstCaps *sinkcaps = decoder->priv->input_state->caps;
+    GstStructure *structure = gst_caps_get_structure (sinkcaps, 0);
+    gint width, height;
+    gint par_n, par_d;
+    gint fps_n, fps_d;
+
+    if (gst_structure_get_int (structure, "width", &width)) {
+      for (i = 0; i < caps_size; i++) {
+        gst_structure_set (gst_caps_get_structure (caps, i), "width",
+            G_TYPE_INT, width, NULL);
+      }
+    }
+
+    if (gst_structure_get_int (structure, "height", &height)) {
+      for (i = 0; i < caps_size; i++) {
+        gst_structure_set (gst_caps_get_structure (caps, i), "height",
+            G_TYPE_INT, height, NULL);
+      }
+    }
+
+    if (gst_structure_get_fraction (structure, "framerate", &fps_n, &fps_d)) {
+      for (i = 0; i < caps_size; i++) {
+        gst_structure_set (gst_caps_get_structure (caps, i), "framerate",
+            GST_TYPE_FRACTION, fps_n, fps_d, NULL);
+      }
+    }
+
+    if (gst_structure_get_fraction (structure, "pixel-aspect-ratio", &par_n,
+            &par_d)) {
+      for (i = 0; i < caps_size; i++) {
+        gst_structure_set (gst_caps_get_structure (caps, i),
+            "pixel-aspect-ratio", GST_TYPE_FRACTION, par_n, par_d, NULL);
+      }
+    }
+  }
+
+  for (i = 0; i < caps_size; i++) {
+    structure = gst_caps_get_structure (caps, i);
+    /* Random 1280x720@30 for fixation */
+    gst_structure_fixate_field_nearest_int (structure, "width", 1280);
+    gst_structure_fixate_field_nearest_int (structure, "height", 720);
+    gst_structure_fixate_field_nearest_fraction (structure, "framerate", 30, 1);
+    if (gst_structure_has_field (structure, "pixel-aspect-ratio")) {
+      gst_structure_fixate_field_nearest_fraction (structure,
+          "pixel-aspect-ratio", 1, 1);
+    } else {
+      gst_structure_set (structure, "pixel-aspect-ratio", GST_TYPE_FRACTION,
+          1, 1, NULL);
+    }
+  }
+  caps = gst_caps_fixate (caps);
+  structure = gst_caps_get_structure (caps, 0);
+
+  if (!caps || !gst_video_info_from_caps (&info, caps))
+    goto caps_error;
+
+  GST_INFO_OBJECT (decoder,
+      "Chose default caps %" GST_PTR_FORMAT " for initial gap", caps);
+  state =
+      gst_video_decoder_set_output_state (decoder, info.finfo->format,
+      info.width, info.height, decoder->priv->input_state);
+  gst_video_codec_state_unref (state);
+  gst_caps_unref (caps);
+
+  return TRUE;
+
+caps_error:
+  {
+    if (caps)
+      gst_caps_unref (caps);
+    return FALSE;
+  }
+}
+
 static gboolean
 gst_video_decoder_sink_event_default (GstVideoDecoder * decoder,
     GstEvent * event)
@@ -1034,11 +1198,12 @@
 
       GST_DEBUG_OBJECT (decoder, "received STREAM_START. Clearing taglist");
       GST_VIDEO_DECODER_STREAM_LOCK (decoder);
-      /* Flush our merged taglist after a STREAM_START */
-      if (priv->tags)
-        gst_tag_list_unref (priv->tags);
-      priv->tags = NULL;
-      priv->tags_changed = FALSE;
+      /* Flush upstream tags after a STREAM_START */
+      if (priv->upstream_tags) {
+        gst_tag_list_unref (priv->upstream_tags);
+        priv->upstream_tags = NULL;
+        priv->tags_changed = TRUE;
+      }
       GST_VIDEO_DECODER_STREAM_UNLOCK (decoder);
 
       /* Forward STREAM_START immediately. Everything is drained after
@@ -1050,12 +1215,33 @@
     }
     case GST_EVENT_CAPS:
     {
-      ret = TRUE;
-      decoder->priv->do_caps = TRUE;
+      GstCaps *caps;
+
+      gst_event_parse_caps (event, &caps);
+      ret = gst_video_decoder_setcaps (decoder, caps);
       gst_event_unref (event);
       event = NULL;
       break;
     }
+    case GST_EVENT_SEGMENT_DONE:
+    {
+      GstFlowReturn flow_ret = GST_FLOW_OK;
+
+      flow_ret = gst_video_decoder_drain_out (decoder, TRUE);
+      ret = (flow_ret == GST_FLOW_OK);
+
+      /* Forward SEGMENT_DONE immediately. This is required
+       * because no buffer or serialized event might come
+       * after SEGMENT_DONE and nothing could trigger another
+       * _finish_frame() call.
+       *
+       * The subclass can override this behaviour by overriding
+       * the ::sink_event() vfunc and not chaining up to the
+       * parent class' ::sink_event() until a later time.
+       */
+      forward_immediate = TRUE;
+      break;
+    }
     case GST_EVENT_EOS:
     {
       GstFlowReturn flow_ret = GST_FLOW_OK;
@@ -1084,10 +1270,47 @@
     case GST_EVENT_GAP:
     {
       GstFlowReturn flow_ret = GST_FLOW_OK;
+      gboolean needs_reconfigure = FALSE;
+      GList *events;
+      GList *frame_events;
 
       flow_ret = gst_video_decoder_drain_out (decoder, FALSE);
       ret = (flow_ret == GST_FLOW_OK);
 
+      /* Ensure we have caps before forwarding the event */
+      GST_VIDEO_DECODER_STREAM_LOCK (decoder);
+      if (!decoder->priv->output_state) {
+        if (!gst_video_decoder_negotiate_default_caps (decoder)) {
+          GST_VIDEO_DECODER_STREAM_UNLOCK (decoder);
+          GST_ELEMENT_ERROR (decoder, STREAM, FORMAT, (NULL),
+              ("Decoder output not negotiated before GAP event."));
+          forward_immediate = TRUE;
+          break;
+        }
+        needs_reconfigure = TRUE;
+      }
+
+      needs_reconfigure = gst_pad_check_reconfigure (decoder->srcpad)
+          || needs_reconfigure;
+      if (decoder->priv->output_state_changed || needs_reconfigure) {
+        if (!gst_video_decoder_negotiate_unlocked (decoder)) {
+          GST_WARNING_OBJECT (decoder, "Failed to negotiate with downstream");
+          gst_pad_mark_reconfigure (decoder->srcpad);
+        }
+      }
+
+      GST_DEBUG_OBJECT (decoder, "Pushing all pending serialized events"
+          " before the gap");
+      events = decoder->priv->pending_events;
+      frame_events = decoder->priv->current_frame_events;
+      decoder->priv->pending_events = NULL;
+      decoder->priv->current_frame_events = NULL;
+
+      GST_VIDEO_DECODER_STREAM_UNLOCK (decoder);
+
+      gst_video_decoder_push_event_list (decoder, events);
+      gst_video_decoder_push_event_list (decoder, frame_events);
+
       /* Forward GAP immediately. Everything is drained after
        * the GAP event and we can forward this event immediately
        * now without having buffers out of order.
@@ -1157,6 +1380,7 @@
       priv->base_picture_number = 0;
 
       decoder->input_segment = segment;
+      decoder->priv->in_out_segment_sync = FALSE;
 
       GST_VIDEO_DECODER_STREAM_UNLOCK (decoder);
       break;
@@ -1191,10 +1415,18 @@
       gst_event_parse_tag (event, &tags);
 
       if (gst_tag_list_get_scope (tags) == GST_TAG_SCOPE_STREAM) {
-        gst_video_decoder_merge_tags (decoder, tags, GST_TAG_MERGE_REPLACE);
+        GST_VIDEO_DECODER_STREAM_LOCK (decoder);
+        if (priv->upstream_tags != tags) {
+          if (priv->upstream_tags)
+            gst_tag_list_unref (priv->upstream_tags);
+          priv->upstream_tags = gst_tag_list_ref (tags);
+          GST_INFO_OBJECT (decoder, "upstream tags: %" GST_PTR_FORMAT, tags);
+        }
         gst_event_unref (event);
-        event = NULL;
-        ret = TRUE;
+        event = gst_video_decoder_create_merged_tags_event (decoder);
+        GST_VIDEO_DECODER_STREAM_UNLOCK (decoder);
+        if (!event)
+          ret = TRUE;
       }
       break;
     }
@@ -1284,7 +1516,7 @@
     return FALSE;
   }
 
-  if (end_type != GST_SEEK_TYPE_NONE ||
+  if ((end_type != GST_SEEK_TYPE_SET && end_type != GST_SEEK_TYPE_NONE) ||
       (end_type == GST_SEEK_TYPE_SET && end_time != GST_CLOCK_TIME_NONE)) {
     GST_DEBUG_OBJECT (dec, "unsupported seek: end time");
     return FALSE;
@@ -1536,11 +1768,11 @@
 
         GST_OBJECT_LOCK (dec);
         min_latency += dec->priv->min_latency;
-        if (dec->priv->max_latency == GST_CLOCK_TIME_NONE) {
+        if (max_latency == GST_CLOCK_TIME_NONE
+            || dec->priv->max_latency == GST_CLOCK_TIME_NONE)
           max_latency = GST_CLOCK_TIME_NONE;
-        } else if (max_latency != GST_CLOCK_TIME_NONE) {
+        else
           max_latency += dec->priv->max_latency;
-        }
         GST_OBJECT_UNLOCK (dec);
 
         gst_query_set_latency (query, live, min_latency, max_latency);
@@ -1576,6 +1808,47 @@
   return ret;
 }
 
+/**
+ * gst_video_decoder_proxy_getcaps:
+ * @decoder: a #GstVideoDecoder
+ * @caps: (allow-none): initial caps
+ * @filter: (allow-none): filter caps
+ *
+ * Returns caps that express @caps (or sink template caps if @caps == NULL)
+ * restricted to resolution/format/... combinations supported by downstream
+ * elements.
+ *
+ * Returns: (transfer full): a #GstCaps owned by caller
+ *
+ * Since: 1.6
+ */
+GstCaps *
+gst_video_decoder_proxy_getcaps (GstVideoDecoder * decoder, GstCaps * caps,
+    GstCaps * filter)
+{
+  return __gst_video_element_proxy_getcaps (GST_ELEMENT_CAST (decoder),
+      GST_VIDEO_DECODER_SINK_PAD (decoder),
+      GST_VIDEO_DECODER_SRC_PAD (decoder), caps, filter);
+}
+
+static GstCaps *
+gst_video_decoder_sink_getcaps (GstVideoDecoder * decoder, GstCaps * filter)
+{
+  GstVideoDecoderClass *klass;
+  GstCaps *caps;
+
+  klass = GST_VIDEO_DECODER_GET_CLASS (decoder);
+
+  if (klass->getcaps)
+    caps = klass->getcaps (decoder, filter);
+  else
+    caps = gst_video_decoder_proxy_getcaps (decoder, NULL, filter);
+
+  GST_LOG_OBJECT (decoder, "Returning caps %" GST_PTR_FORMAT, caps);
+
+  return caps;
+}
+
 static gboolean
 gst_video_decoder_sink_query_default (GstVideoDecoder * decoder,
     GstQuery * query)
@@ -1612,6 +1885,47 @@
         res = klass->propose_allocation (decoder, query);
       break;
     }
+    case GST_QUERY_CAPS:{
+      GstCaps *filter, *caps;
+
+      gst_query_parse_caps (query, &filter);
+      caps = gst_video_decoder_sink_getcaps (decoder, filter);
+      gst_query_set_caps_result (query, caps);
+      gst_caps_unref (caps);
+      res = TRUE;
+      break;
+    }
+    case GST_QUERY_ACCEPT_CAPS:{
+      if (decoder->priv->use_default_pad_acceptcaps) {
+        res =
+            gst_pad_query_default (GST_VIDEO_DECODER_SINK_PAD (decoder),
+            GST_OBJECT_CAST (decoder), query);
+      } else {
+        GstCaps *caps;
+        GstCaps *allowed_caps;
+        GstCaps *template_caps;
+        gboolean accept;
+
+        gst_query_parse_accept_caps (query, &caps);
+
+        template_caps = gst_pad_get_pad_template_caps (pad);
+        accept = gst_caps_is_subset (caps, template_caps);
+        gst_caps_unref (template_caps);
+
+        if (accept) {
+          allowed_caps =
+              gst_pad_query_caps (GST_VIDEO_DECODER_SINK_PAD (decoder), caps);
+
+          accept = gst_caps_can_intersect (caps, allowed_caps);
+
+          gst_caps_unref (allowed_caps);
+        }
+
+        gst_query_set_accept_caps_result (query, accept);
+        res = TRUE;
+      }
+      break;
+    }
     default:
       res = gst_pad_query_default (pad, GST_OBJECT (decoder), query);
       break;
@@ -1757,6 +2071,7 @@
     gst_segment_init (&decoder->input_segment, GST_FORMAT_UNDEFINED);
     gst_segment_init (&decoder->output_segment, GST_FORMAT_UNDEFINED);
     gst_video_decoder_clear_queues (decoder);
+    decoder->priv->in_out_segment_sync = TRUE;
 
     if (priv->current_frame) {
       gst_video_codec_frame_unref (priv->current_frame);
@@ -1792,12 +2107,14 @@
     priv->qos_frame_duration = 0;
     GST_OBJECT_UNLOCK (decoder);
 
-    priv->min_latency = 0;
-    priv->max_latency = 0;
-
     if (priv->tags)
       gst_tag_list_unref (priv->tags);
     priv->tags = NULL;
+    priv->tags_merge_mode = GST_TAG_MERGE_APPEND;
+    if (priv->upstream_tags) {
+      gst_tag_list_unref (priv->upstream_tags);
+      priv->upstream_tags = NULL;
+    }
     priv->tags_changed = FALSE;
     priv->reordered_output = FALSE;
 
@@ -2002,6 +2319,8 @@
           gst_event_copy_segment (event, &segment);
           if (segment.format == GST_FORMAT_TIME) {
             dec->output_segment = segment;
+            dec->priv->in_out_segment_sync =
+                gst_segment_is_equal (&dec->input_segment, &segment);
           }
         }
         dec->priv->pending_events =
@@ -2036,53 +2355,64 @@
       res = gst_video_decoder_flush_decode (dec);
       if (res != GST_FLOW_OK)
         goto done;
+
+      /* We need to tell the subclass to drain now.
+       * We prefer the drain vfunc, but for backward-compat
+       * we use a finish() vfunc if drain isn't implemented */
+      if (decoder_class->drain) {
+        GST_DEBUG_OBJECT (dec, "Draining");
+        res = decoder_class->drain (dec);
+      } else if (decoder_class->finish) {
+        GST_FIXME_OBJECT (dec, "Sub-class should implement drain(). "
+            "Calling finish() for backwards-compat");
+        res = decoder_class->finish (dec);
+      }
+
+      if (res != GST_FLOW_OK)
+        goto done;
+
+      /* now send queued data downstream */
+      walk = priv->output_queued;
+      while (walk) {
+        GstBuffer *buf = GST_BUFFER_CAST (walk->data);
+
+        if (G_LIKELY (res == GST_FLOW_OK)) {
+          /* avoid stray DISCONT from forward processing,
+           * which have no meaning in reverse pushing */
+          GST_BUFFER_FLAG_UNSET (buf, GST_BUFFER_FLAG_DISCONT);
+
+          /* Last chance to calculate a timestamp as we loop backwards
+           * through the list */
+          if (GST_BUFFER_TIMESTAMP (buf) != GST_CLOCK_TIME_NONE)
+            priv->last_timestamp_out = GST_BUFFER_TIMESTAMP (buf);
+          else if (priv->last_timestamp_out != GST_CLOCK_TIME_NONE &&
+              GST_BUFFER_DURATION (buf) != GST_CLOCK_TIME_NONE) {
+            GST_BUFFER_TIMESTAMP (buf) =
+                priv->last_timestamp_out - GST_BUFFER_DURATION (buf);
+            priv->last_timestamp_out = GST_BUFFER_TIMESTAMP (buf);
+            GST_LOG_OBJECT (dec,
+                "Calculated TS %" GST_TIME_FORMAT " working backwards",
+                GST_TIME_ARGS (priv->last_timestamp_out));
+          }
+
+          res = gst_video_decoder_clip_and_push_buf (dec, buf);
+        } else {
+          gst_buffer_unref (buf);
+        }
+
+        priv->output_queued =
+            g_list_delete_link (priv->output_queued, priv->output_queued);
+        walk = priv->output_queued;
+      }
+
+      /* clear buffer and decoder state again
+       * before moving to the previous keyframe */
+      gst_video_decoder_flush (dec, FALSE);
     }
 
     walk = priv->parse_gather;
   }
 
-  /* We need to tell the subclass to drain now */
-  GST_DEBUG_OBJECT (dec, "Finishing");
-  if (decoder_class->finish)
-    res = decoder_class->finish (dec);
-
-  if (res != GST_FLOW_OK)
-    goto done;
-
-  /* now send queued data downstream */
-  walk = priv->output_queued;
-  while (walk) {
-    GstBuffer *buf = GST_BUFFER_CAST (walk->data);
-
-    if (G_LIKELY (res == GST_FLOW_OK)) {
-      /* avoid stray DISCONT from forward processing,
-       * which have no meaning in reverse pushing */
-      GST_BUFFER_FLAG_UNSET (buf, GST_BUFFER_FLAG_DISCONT);
-
-      /* Last chance to calculate a timestamp as we loop backwards
-       * through the list */
-      if (GST_BUFFER_TIMESTAMP (buf) != GST_CLOCK_TIME_NONE)
-        priv->last_timestamp_out = GST_BUFFER_TIMESTAMP (buf);
-      else if (priv->last_timestamp_out != GST_CLOCK_TIME_NONE &&
-          GST_BUFFER_DURATION (buf) != GST_CLOCK_TIME_NONE) {
-        GST_BUFFER_TIMESTAMP (buf) =
-            priv->last_timestamp_out - GST_BUFFER_DURATION (buf);
-        priv->last_timestamp_out = GST_BUFFER_TIMESTAMP (buf);
-        GST_LOG_OBJECT (dec,
-            "Calculated TS %" GST_TIME_FORMAT " working backwards",
-            GST_TIME_ARGS (priv->last_timestamp_out));
-      }
-
-      res = gst_video_decoder_clip_and_push_buf (dec, buf);
-    } else {
-      gst_buffer_unref (buf);
-    }
-
-    priv->output_queued =
-        g_list_delete_link (priv->output_queued, priv->output_queued);
-    walk = priv->output_queued;
-  }
-
 done:
   return res;
 }
@@ -2124,18 +2454,6 @@
 
   decoder = GST_VIDEO_DECODER (parent);
 
-  if (G_UNLIKELY (decoder->priv->do_caps)) {
-    GstCaps *caps = gst_pad_get_current_caps (decoder->sinkpad);
-    if (caps) {
-      if (!gst_video_decoder_setcaps (decoder, caps)) {
-        gst_caps_unref (caps);
-        goto not_negotiated;
-      }
-      gst_caps_unref (caps);
-    }
-    decoder->priv->do_caps = FALSE;
-  }
-
   if (G_UNLIKELY (!decoder->priv->input_state && decoder->priv->needs_format))
     goto not_negotiated;
 
@@ -2205,12 +2523,13 @@
         goto open_failed;
       break;
     case GST_STATE_CHANGE_READY_TO_PAUSED:
-      /* Initialize device/library if needed */
-      if (decoder_class->start && !decoder_class->start (decoder))
-        goto start_failed;
       GST_VIDEO_DECODER_STREAM_LOCK (decoder);
       gst_video_decoder_reset (decoder, TRUE, TRUE);
       GST_VIDEO_DECODER_STREAM_UNLOCK (decoder);
+
+      /* Initialize device/library if needed */
+      if (decoder_class->start && !decoder_class->start (decoder))
+        goto start_failed;
       break;
     default:
       break;
@@ -2222,22 +2541,13 @@
     case GST_STATE_CHANGE_PAUSED_TO_READY:{
       gboolean stopped = TRUE;
 
+      if (decoder_class->stop)
+        stopped = decoder_class->stop (decoder);
+
       GST_VIDEO_DECODER_STREAM_LOCK (decoder);
       gst_video_decoder_reset (decoder, TRUE, TRUE);
       GST_VIDEO_DECODER_STREAM_UNLOCK (decoder);
 
-      if (decoder_class->stop) {
-        stopped = decoder_class->stop (decoder);
-
-        /* the subclass might have released frames and events from freed frames
-         * are stored in the pending_events list */
-        GST_VIDEO_DECODER_STREAM_LOCK (decoder);
-        g_list_free_full (decoder->priv->pending_events, (GDestroyNotify)
-            gst_event_unref);
-        decoder->priv->pending_events = NULL;
-        GST_VIDEO_DECODER_STREAM_UNLOCK (decoder);
-      }
-
       if (!stopped)
         goto stop_failed;
 
@@ -2315,6 +2625,19 @@
 }
 
 static void
+gst_video_decoder_push_event_list (GstVideoDecoder * decoder, GList * events)
+{
+  GList *l;
+
+  /* events are stored in reverse order */
+  for (l = g_list_last (events); l; l = g_list_previous (l)) {
+    GST_LOG_OBJECT (decoder, "pushing %s event", GST_EVENT_TYPE_NAME (l->data));
+    gst_video_decoder_push_event (decoder, l->data);
+  }
+  g_list_free (events);
+}
+
+static void
 gst_video_decoder_prepare_finish_frame (GstVideoDecoder *
     decoder, GstVideoCodecFrame * frame, gboolean dropping)
 {
@@ -2355,21 +2678,10 @@
     decoder->priv->pending_events =
         g_list_concat (decoder->priv->pending_events, events);
   } else {
-    for (l = g_list_last (decoder->priv->pending_events); l;
-        l = g_list_previous (l)) {
-      GST_LOG_OBJECT (decoder, "pushing %s event",
-          GST_EVENT_TYPE_NAME (l->data));
-      gst_video_decoder_push_event (decoder, l->data);
-    }
-    g_list_free (decoder->priv->pending_events);
+    gst_video_decoder_push_event_list (decoder, decoder->priv->pending_events);
     decoder->priv->pending_events = NULL;
 
-    for (l = g_list_last (events); l; l = g_list_previous (l)) {
-      GST_LOG_OBJECT (decoder, "pushing %s event",
-          GST_EVENT_TYPE_NAME (l->data));
-      gst_video_decoder_push_event (decoder, l->data);
-    }
-    g_list_free (events);
+    gst_video_decoder_push_event_list (decoder, events);
   }
 
   /* Check if the data should not be displayed. For example altref/invisible
@@ -2614,6 +2926,62 @@
   return GST_FLOW_OK;
 }
 
+static gboolean
+gst_video_decoder_transform_meta_default (GstVideoDecoder *
+    decoder, GstVideoCodecFrame * frame, GstMeta * meta)
+{
+  const GstMetaInfo *info = meta->info;
+  const gchar *const *tags;
+
+  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))))
+    return TRUE;
+
+  return FALSE;
+}
+
+typedef struct
+{
+  GstVideoDecoder *decoder;
+  GstVideoCodecFrame *frame;
+} CopyMetaData;
+
+static gboolean
+foreach_metadata (GstBuffer * inbuf, GstMeta ** meta, gpointer user_data)
+{
+  CopyMetaData *data = user_data;
+  GstVideoDecoder *decoder = data->decoder;
+  GstVideoDecoderClass *klass = GST_VIDEO_DECODER_GET_CLASS (decoder);
+  GstVideoCodecFrame *frame = data->frame;
+  const GstMetaInfo *info = (*meta)->info;
+  gboolean do_copy = FALSE;
+
+  if (gst_meta_api_type_has_tag (info->api, _gst_meta_tag_memory)) {
+    /* never call the transform_meta with memory specific metadata */
+    GST_DEBUG_OBJECT (decoder, "not copying memory specific metadata %s",
+        g_type_name (info->api));
+    do_copy = FALSE;
+  } else if (klass->transform_meta) {
+    do_copy = klass->transform_meta (decoder, frame, *meta);
+    GST_DEBUG_OBJECT (decoder, "transformed metadata %s: copy: %d",
+        g_type_name (info->api), do_copy);
+  }
+
+  /* we only copy metadata when the subclass implemented a transform_meta
+   * function and when it returns %TRUE */
+  if (do_copy) {
+    GstMetaTransformCopy copy_data = { FALSE, 0, -1 };
+    GST_DEBUG_OBJECT (decoder, "copy metadata %s", g_type_name (info->api));
+    /* simply copy then */
+    info->transform_func (frame->output_buffer, *meta, inbuf,
+        _gst_meta_transform_copy, &copy_data);
+  }
+  return TRUE;
+}
+
 /**
  * gst_video_decoder_finish_frame:
  * @decoder: a #GstVideoDecoder
@@ -2635,6 +3003,7 @@
     GstVideoCodecFrame * frame)
 {
   GstFlowReturn ret = GST_FLOW_OK;
+  GstVideoDecoderClass *decoder_class = GST_VIDEO_DECODER_GET_CLASS (decoder);
   GstVideoDecoderPrivate *priv = decoder->priv;
   GstBuffer *output_buffer;
   gboolean needs_reconfigure = FALSE;
@@ -2659,9 +3028,14 @@
   gst_video_decoder_prepare_finish_frame (decoder, frame, FALSE);
   priv->processed++;
 
-  if (priv->tags && priv->tags_changed) {
-    gst_video_decoder_push_event (decoder,
-        gst_event_new_tag (gst_tag_list_ref (priv->tags)));
+  if (priv->tags_changed) {
+    GstEvent *tags_event;
+
+    tags_event = gst_video_decoder_create_merged_tags_event (decoder);
+
+    if (tags_event != NULL)
+      gst_video_decoder_push_event (decoder, tags_event);
+
     priv->tags_changed = FALSE;
   }
 
@@ -2676,9 +3050,8 @@
 
   GST_BUFFER_FLAG_UNSET (output_buffer, GST_BUFFER_FLAG_DELTA_UNIT);
 
-  /* set PTS and DTS to both the PTS for decoded frames */
   GST_BUFFER_PTS (output_buffer) = frame->pts;
-  GST_BUFFER_DTS (output_buffer) = frame->pts;
+  GST_BUFFER_DTS (output_buffer) = GST_CLOCK_TIME_NONE;
   GST_BUFFER_DURATION (output_buffer) = frame->duration;
 
   GST_BUFFER_OFFSET (output_buffer) = GST_BUFFER_OFFSET_NONE;
@@ -2689,6 +3062,19 @@
     priv->discont = FALSE;
   }
 
+  if (decoder_class->transform_meta) {
+    if (G_LIKELY (frame->input_buffer)) {
+      CopyMetaData data;
+
+      data.decoder = decoder;
+      data.frame = frame;
+      gst_buffer_foreach_meta (frame->input_buffer, foreach_metadata, &data);
+    } else {
+      GST_WARNING_OBJECT (decoder,
+          "Can't copy metadata because input frame disappeared");
+    }
+  }
+
   /* Get an additional ref to the buffer, which is going to be pushed
    * downstream, the original ref is owned by the frame
    *
@@ -2717,7 +3103,6 @@
   return ret;
 }
 
-
 /* With stream lock, takes the frame reference */
 static GstFlowReturn
 gst_video_decoder_clip_and_push_buf (GstVideoDecoder * decoder, GstBuffer * buf)
@@ -2740,23 +3125,33 @@
 
   if (GST_CLOCK_TIME_IS_VALID (start) && GST_CLOCK_TIME_IS_VALID (duration)) {
     stop = start + duration;
+  } else if (GST_CLOCK_TIME_IS_VALID (start)
+      && !GST_CLOCK_TIME_IS_VALID (duration)) {
+    /* 2 second frame duration is rather unlikely... but if we don't clip
+     * away buffers that far before the segment we can cause the pipeline to
+     * lockup. This can happen if audio is properly clipped, and thus the
+     * audio sink does not preroll yet but the video sink prerolls because
+     * we already outputted a buffer here... and then queues run full.
+     *
+     * In the worst case we will clip one buffer too many here now if no
+     * framerate is given, no buffer duration is given and the actual
+     * framerate is less than 0.5fps */
+    stop = start + 2 * GST_SECOND;
   }
 
   segment = &decoder->output_segment;
   if (gst_segment_clip (segment, GST_FORMAT_TIME, start, stop, &cstart, &cstop)) {
-
     GST_BUFFER_PTS (buf) = cstart;
 
-    if (stop != GST_CLOCK_TIME_NONE)
+    if (stop != GST_CLOCK_TIME_NONE && GST_CLOCK_TIME_IS_VALID (duration))
       GST_BUFFER_DURATION (buf) = cstop - cstart;
 
     GST_LOG_OBJECT (decoder,
         "accepting buffer inside segment: %" GST_TIME_FORMAT " %"
         GST_TIME_FORMAT " seg %" GST_TIME_FORMAT " to %" GST_TIME_FORMAT
         " time %" GST_TIME_FORMAT,
-        GST_TIME_ARGS (GST_BUFFER_PTS (buf)),
-        GST_TIME_ARGS (GST_BUFFER_PTS (buf) +
-            GST_BUFFER_DURATION (buf)),
+        GST_TIME_ARGS (cstart),
+        GST_TIME_ARGS (cstop),
         GST_TIME_ARGS (segment->start), GST_TIME_ARGS (segment->stop),
         GST_TIME_ARGS (segment->time));
   } else {
@@ -2768,11 +3163,15 @@
         GST_TIME_ARGS (start), GST_TIME_ARGS (stop),
         GST_TIME_ARGS (segment->start),
         GST_TIME_ARGS (segment->stop), GST_TIME_ARGS (segment->time));
-    if (segment->rate >= 0) {
-      if (GST_BUFFER_PTS (buf) >= segment->stop)
+    /* only check and return EOS if upstream still
+     * in the same segment and interested as such */
+    if (decoder->priv->in_out_segment_sync) {
+      if (segment->rate >= 0) {
+        if (GST_BUFFER_PTS (buf) >= segment->stop)
+          ret = GST_FLOW_EOS;
+      } else if (GST_BUFFER_PTS (buf) < segment->start) {
         ret = GST_FLOW_EOS;
-    } else if (GST_BUFFER_PTS (buf) < segment->start) {
-      ret = GST_FLOW_EOS;
+      }
     }
     gst_buffer_unref (buf);
     goto done;
@@ -3869,11 +4268,13 @@
 /**
  * gst_video_decoder_merge_tags:
  * @decoder: a #GstVideoDecoder
- * @tags: a #GstTagList to merge
- * @mode: the #GstTagMergeMode to use
+ * @tags: (allow-none): a #GstTagList to merge, or NULL to unset
+ *     previously-set tags
+ * @mode: the #GstTagMergeMode to use, usually #GST_TAG_MERGE_REPLACE
  *
- * Adds tags to so-called pending tags, which will be processed
- * before pushing out data downstream.
+ * Sets the audio decoder tags and how they should be merged with any
+ * upstream stream tags. This will override any tags previously-set
+ * with gst_audio_decoder_merge_tags().
  *
  * Note that this is provided for convenience, and the subclass is
  * not required to use this and can still do tag handling on its own.
@@ -3884,19 +4285,25 @@
 gst_video_decoder_merge_tags (GstVideoDecoder * decoder,
     const GstTagList * tags, GstTagMergeMode mode)
 {
-  GstTagList *otags;
-
   g_return_if_fail (GST_IS_VIDEO_DECODER (decoder));
   g_return_if_fail (tags == NULL || GST_IS_TAG_LIST (tags));
+  g_return_if_fail (tags == NULL || mode != GST_TAG_MERGE_UNDEFINED);
 
   GST_VIDEO_DECODER_STREAM_LOCK (decoder);
-  if (tags)
-    GST_DEBUG_OBJECT (decoder, "merging tags %" GST_PTR_FORMAT, tags);
-  otags = decoder->priv->tags;
-  decoder->priv->tags = gst_tag_list_merge (decoder->priv->tags, tags, mode);
-  if (otags)
-    gst_tag_list_unref (otags);
-  decoder->priv->tags_changed = TRUE;
+  if (decoder->priv->tags != tags) {
+    if (decoder->priv->tags) {
+      gst_tag_list_unref (decoder->priv->tags);
+      decoder->priv->tags = NULL;
+      decoder->priv->tags_merge_mode = GST_TAG_MERGE_APPEND;
+    }
+    if (tags) {
+      decoder->priv->tags = gst_tag_list_ref ((GstTagList *) tags);
+      decoder->priv->tags_merge_mode = mode;
+    }
+
+    GST_DEBUG_OBJECT (decoder, "set decoder tags to %" GST_PTR_FORMAT, tags);
+    decoder->priv->tags_changed = TRUE;
+  }
   GST_VIDEO_DECODER_STREAM_UNLOCK (decoder);
 }
 
@@ -3944,3 +4351,24 @@
   if (params)
     *params = decoder->priv->params;
 }
+
+/**
+ * gst_video_decoder_set_use_default_pad_acceptcaps:
+ * @decoder: a #GstVideoDecoder
+ * @use: if the default pad accept-caps query handling should be used
+ *
+ * Lets #GstVideoDecoder sub-classes decide if they want the sink pad
+ * to use the default pad query handler to reply to accept-caps queries.
+ *
+ * By setting this to true it is possible to further customize the default
+ * handler with %GST_PAD_SET_ACCEPT_INTERSECT and
+ * %GST_PAD_SET_ACCEPT_TEMPLATE
+ *
+ * Since: 1.6
+ */
+void
+gst_video_decoder_set_use_default_pad_acceptcaps (GstVideoDecoder * decoder,
+    gboolean use)
+{
+  decoder->priv->use_default_pad_acceptcaps = use;
+}
diff --git a/gst-libs/gst/video/gstvideodecoder.h b/gst-libs/gst/video/gstvideodecoder.h
index e5e3efe..7622477 100644
--- a/gst-libs/gst/video/gstvideodecoder.h
+++ b/gst-libs/gst/video/gstvideodecoder.h
@@ -215,8 +215,12 @@
  * @handle_frame:   Provides input data frame to subclass.
  * @finish:         Optional.
  *                  Called to request subclass to dispatch any pending remaining
- *                  data (e.g. at EOS or segment end). Sub-classes should be prepared
- *                  to handle new data afterward, or seamless segment processing will break.
+ *                  data at EOS. Sub-classes can refuse to decode new data after.
+ * @drain:	    Optional.
+ *                  Called to request subclass to decode any data it can at this
+ *                  point, but that more data may arrive after. (e.g. at segment end).
+ *                  Sub-classes should be prepared to handle new data afterward,
+ *                  or seamless segment processing will break. Since: 1.6
  * @sink_event:     Optional.
  *                  Event handler on the sink pad. This function should return
  *                  TRUE if the event was handled and should be discarded
@@ -256,6 +260,16 @@
  *                  return TRUE if the query could be performed. Subclasses
  *                  should chain up to the parent implementation to invoke the
  *                  default handler. Since 1.4
+ * @getcaps:        Optional.
+ *                  Allows for a custom sink getcaps implementation.
+ *                  If not implemented, default returns
+ *                  gst_video_decoder_proxy_getcaps
+ *                  applied to sink template caps.
+ * @transform_meta: Optional. Transform the metadata on the input buffer to the
+ *                  output buffer. By default this method is copies all meta without
+ *                  tags and meta with only the "video" tag. subclasses can
+ *                  implement this method and return %TRUE if the metadata is to be
+ *                  copied. Since 1.6
  *
  * Subclasses can override any of the available virtual methods or not, as
  * needed. At minimum @handle_frame needs to be overridden, and @set_format
@@ -312,9 +326,17 @@
   gboolean      (*src_query)      (GstVideoDecoder *decoder,
 				   GstQuery *query);
 
+  GstCaps*      (*getcaps)        (GstVideoDecoder *decoder,
+                                   GstCaps *filter);
+
+  GstFlowReturn (*drain)          (GstVideoDecoder *decoder);
+
+  gboolean      (*transform_meta) (GstVideoDecoder *decoder,
+                                   GstVideoCodecFrame *frame,
+                                   GstMeta * meta);
 
   /*< private >*/
-  void         *padding[GST_PADDING_LARGE-3];
+  void         *padding[GST_PADDING_LARGE-6];
 };
 
 GType    gst_video_decoder_get_type (void);
@@ -398,6 +420,13 @@
                                                const GstTagList *tags,
                                                GstTagMergeMode mode);
 
+GstCaps *        gst_video_decoder_proxy_getcaps (GstVideoDecoder * decoder,
+						  GstCaps         * caps,
+                                                  GstCaps         * filter);
+
+void             gst_video_decoder_set_use_default_pad_acceptcaps (GstVideoDecoder * decoder,
+                                                                   gboolean use);
+
 G_END_DECLS
 
 #endif
diff --git a/gst-libs/gst/video/gstvideoencoder.c b/gst-libs/gst/video/gstvideoencoder.c
index 614ba2d..c45bc7d 100644
--- a/gst-libs/gst/video/gstvideoencoder.c
+++ b/gst-libs/gst/video/gstvideoencoder.c
@@ -117,6 +117,7 @@
 #include <gst/video/video.h>
 #include "gstvideoencoder.h"
 #include "gstvideoutils.h"
+#include "gstvideoutilsprivate.h"
 
 #include <gst/video/gstvideometa.h>
 #include <gst/video/gstvideopool.h>
@@ -137,7 +138,6 @@
 
   /* FIXME : (and introduce a context ?) */
   gboolean drained;
-  gboolean do_caps;
 
   gint64 min_latency;
   gint64 max_latency;
@@ -162,8 +162,19 @@
   GstAllocator *allocator;
   GstAllocationParams params;
 
+  /* upstream stream tags (global tags are passed through as-is) */
+  GstTagList *upstream_tags;
+
+  /* subclass tags */
   GstTagList *tags;
+  GstTagMergeMode tags_merge_mode;
+
   gboolean tags_changed;
+
+  GstClockTime min_pts;
+  /* adjustment needed on pts, dts, segment start and stop to accomodate
+   * min_pts */
+  GstClockTime time_adjustment;
 };
 
 typedef struct _ForcedKeyUnitEvent ForcedKeyUnitEvent;
@@ -239,6 +250,9 @@
 static gboolean gst_video_encoder_src_query_default (GstVideoEncoder * encoder,
     GstQuery * query);
 
+static gboolean gst_video_encoder_transform_meta_default (GstVideoEncoder *
+    encoder, GstVideoCodecFrame * frame, GstMeta * meta);
+
 /* we can't use G_DEFINE_ABSTRACT_TYPE because we need the klass in the _init
  * method to get to the padtemplates */
 GType
@@ -302,6 +316,7 @@
   klass->negotiate = gst_video_encoder_negotiate_default;
   klass->sink_query = gst_video_encoder_sink_query_default;
   klass->src_query = gst_video_encoder_src_query_default;
+  klass->transform_meta = gst_video_encoder_transform_meta_default;
 }
 
 static GList *
@@ -340,13 +355,11 @@
 
   priv->drained = TRUE;
 
-  g_list_foreach (priv->frames, (GFunc) gst_video_codec_frame_unref, NULL);
-  g_list_free (priv->frames);
-  priv->frames = NULL;
-
   priv->bytes = 0;
   priv->time = 0;
 
+  priv->time_adjustment = GST_CLOCK_TIME_NONE;
+
   if (hard) {
     gst_segment_init (&encoder->input_segment, GST_FORMAT_TIME);
     gst_segment_init (&encoder->output_segment, GST_FORMAT_TIME);
@@ -358,14 +371,16 @@
       gst_video_codec_state_unref (priv->output_state);
     priv->output_state = NULL;
 
+    if (priv->upstream_tags) {
+      gst_tag_list_unref (priv->upstream_tags);
+      priv->upstream_tags = NULL;
+    }
     if (priv->tags)
       gst_tag_list_unref (priv->tags);
     priv->tags = NULL;
+    priv->tags_merge_mode = GST_TAG_MERGE_APPEND;
     priv->tags_changed = FALSE;
 
-    priv->min_latency = 0;
-    priv->max_latency = 0;
-
     g_list_foreach (priv->headers, (GFunc) gst_event_unref, NULL);
     g_list_free (priv->headers);
     priv->headers = NULL;
@@ -392,6 +407,10 @@
         encoder->priv->current_frame_events);
   }
 
+  g_list_foreach (priv->frames, (GFunc) gst_video_codec_frame_unref, NULL);
+  g_list_free (priv->frames);
+  priv->frames = NULL;
+
   GST_VIDEO_ENCODER_STREAM_UNLOCK (encoder);
 
   return ret;
@@ -456,6 +475,11 @@
   priv->headers = NULL;
   priv->new_headers = FALSE;
 
+  priv->min_latency = 0;
+  priv->max_latency = 0;
+  priv->min_pts = GST_CLOCK_TIME_NONE;
+  priv->time_adjustment = GST_CLOCK_TIME_NONE;
+
   gst_video_encoder_reset (encoder, TRUE);
 }
 
@@ -565,6 +589,9 @@
     tgt->par_d = ref->par_d;
     tgt->fps_n = ref->fps_n;
     tgt->fps_d = ref->fps_d;
+
+    GST_VIDEO_INFO_MULTIVIEW_MODE (tgt) = GST_VIDEO_INFO_MULTIVIEW_MODE (ref);
+    GST_VIDEO_INFO_MULTIVIEW_FLAGS (tgt) = GST_VIDEO_INFO_MULTIVIEW_FLAGS (ref);
   }
 
   return state;
@@ -628,7 +655,7 @@
 
   if (encoder_class->reset) {
     GST_FIXME_OBJECT (encoder, "GstVideoEncoder::reset() is deprecated");
-    ret = encoder_class->reset (encoder, TRUE);
+    encoder_class->reset (encoder, TRUE);
   }
 
   /* and subclass should be ready to configure format at any time around */
@@ -667,82 +694,22 @@
 /**
  * gst_video_encoder_proxy_getcaps:
  * @enc: a #GstVideoEncoder
- * @caps: initial caps
- * @filter: filter caps
+ * @caps: (allow-none): initial caps
+ * @filter: (allow-none): filter caps
  *
  * Returns caps that express @caps (or sink template caps if @caps == NULL)
  * restricted to resolution/format/... combinations supported by downstream
  * elements (e.g. muxers).
  *
- * Returns: a #GstCaps owned by caller
+ * Returns: (transfer full): a #GstCaps owned by caller
  */
 GstCaps *
 gst_video_encoder_proxy_getcaps (GstVideoEncoder * encoder, GstCaps * caps,
     GstCaps * filter)
 {
-  GstCaps *templ_caps;
-  GstCaps *allowed;
-  GstCaps *fcaps, *filter_caps;
-  gint i, j;
-
-  /* Allow downstream to specify width/height/framerate/PAR constraints
-   * and forward them upstream for video converters to handle
-   */
-  templ_caps =
-      caps ? gst_caps_ref (caps) :
-      gst_pad_get_pad_template_caps (encoder->sinkpad);
-  allowed = gst_pad_get_allowed_caps (encoder->srcpad);
-
-  if (!allowed || gst_caps_is_empty (allowed) || gst_caps_is_any (allowed)) {
-    fcaps = templ_caps;
-    goto done;
-  }
-
-  GST_LOG_OBJECT (encoder, "template caps %" GST_PTR_FORMAT, templ_caps);
-  GST_LOG_OBJECT (encoder, "allowed caps %" GST_PTR_FORMAT, allowed);
-
-  filter_caps = gst_caps_new_empty ();
-
-  for (i = 0; i < gst_caps_get_size (templ_caps); i++) {
-    GQuark q_name =
-        gst_structure_get_name_id (gst_caps_get_structure (templ_caps, i));
-
-    for (j = 0; j < gst_caps_get_size (allowed); j++) {
-      const GstStructure *allowed_s = gst_caps_get_structure (allowed, j);
-      const GValue *val;
-      GstStructure *s;
-
-      s = gst_structure_new_id_empty (q_name);
-      if ((val = gst_structure_get_value (allowed_s, "width")))
-        gst_structure_set_value (s, "width", val);
-      if ((val = gst_structure_get_value (allowed_s, "height")))
-        gst_structure_set_value (s, "height", val);
-      if ((val = gst_structure_get_value (allowed_s, "framerate")))
-        gst_structure_set_value (s, "framerate", val);
-      if ((val = gst_structure_get_value (allowed_s, "pixel-aspect-ratio")))
-        gst_structure_set_value (s, "pixel-aspect-ratio", val);
-
-      filter_caps = gst_caps_merge_structure (filter_caps, s);
-    }
-  }
-
-  fcaps = gst_caps_intersect (filter_caps, templ_caps);
-  gst_caps_unref (filter_caps);
-  gst_caps_unref (templ_caps);
-
-  if (filter) {
-    GST_LOG_OBJECT (encoder, "intersecting with %" GST_PTR_FORMAT, filter);
-    filter_caps = gst_caps_intersect (fcaps, filter);
-    gst_caps_unref (fcaps);
-    fcaps = filter_caps;
-  }
-
-done:
-  gst_caps_replace (&allowed, NULL);
-
-  GST_LOG_OBJECT (encoder, "proxy caps %" GST_PTR_FORMAT, fcaps);
-
-  return fcaps;
+  return __gst_video_element_proxy_getcaps (GST_ELEMENT_CAST (encoder),
+      GST_VIDEO_ENCODER_SINK_PAD (encoder),
+      GST_VIDEO_ENCODER_SRC_PAD (encoder), caps, filter);
 }
 
 static GstCaps *
@@ -942,8 +909,19 @@
         break;
       }
 
+      if (encoder->priv->time_adjustment != GST_CLOCK_TIME_NONE) {
+        segment.start += encoder->priv->time_adjustment;
+        if (GST_CLOCK_TIME_IS_VALID (segment.stop)) {
+          segment.stop += encoder->priv->time_adjustment;
+        }
+      }
+
       encoder->output_segment = segment;
       GST_VIDEO_ENCODER_STREAM_UNLOCK (encoder);
+
+      gst_event_unref (event);
+      event = gst_event_new_segment (&encoder->output_segment);
+
       break;
     }
     default:
@@ -953,12 +931,43 @@
   return gst_pad_push_event (encoder->srcpad, event);
 }
 
+static GstEvent *
+gst_video_encoder_create_merged_tags_event (GstVideoEncoder * enc)
+{
+  GstTagList *merged_tags;
+
+  GST_LOG_OBJECT (enc, "upstream : %" GST_PTR_FORMAT, enc->priv->upstream_tags);
+  GST_LOG_OBJECT (enc, "encoder  : %" GST_PTR_FORMAT, enc->priv->tags);
+  GST_LOG_OBJECT (enc, "mode     : %d", enc->priv->tags_merge_mode);
+
+  merged_tags =
+      gst_tag_list_merge (enc->priv->upstream_tags, enc->priv->tags,
+      enc->priv->tags_merge_mode);
+
+  GST_DEBUG_OBJECT (enc, "merged   : %" GST_PTR_FORMAT, merged_tags);
+
+  if (merged_tags == NULL)
+    return NULL;
+
+  if (gst_tag_list_is_empty (merged_tags)) {
+    gst_tag_list_unref (merged_tags);
+    return NULL;
+  }
+
+  return gst_event_new_tag (merged_tags);
+}
+
 static inline void
 gst_video_encoder_check_and_push_tags (GstVideoEncoder * encoder)
 {
-  if (encoder->priv->tags && encoder->priv->tags_changed) {
-    gst_video_encoder_push_event (encoder,
-        gst_event_new_tag (gst_tag_list_ref (encoder->priv->tags)));
+  if (encoder->priv->tags_changed) {
+    GstEvent *tags_event;
+
+    tags_event = gst_video_encoder_create_merged_tags_event (encoder);
+
+    if (tags_event != NULL)
+      gst_video_encoder_push_event (encoder, tags_event);
+
     encoder->priv->tags_changed = FALSE;
   }
 }
@@ -978,8 +987,8 @@
       GstCaps *caps;
 
       gst_event_parse_caps (event, &caps);
-      ret = TRUE;
-      encoder->priv->do_caps = TRUE;
+      ret = gst_video_encoder_setcaps (encoder, caps);
+
       gst_event_unref (event);
       event = NULL;
       break;
@@ -1064,6 +1073,19 @@
       }
       break;
     }
+    case GST_EVENT_STREAM_START:
+    {
+      GST_VIDEO_ENCODER_STREAM_LOCK (encoder);
+      /* Flush upstream tags after a STREAM_START */
+      GST_DEBUG_OBJECT (encoder, "STREAM_START, clearing upstream tags");
+      if (encoder->priv->upstream_tags) {
+        gst_tag_list_unref (encoder->priv->upstream_tags);
+        encoder->priv->upstream_tags = NULL;
+        encoder->priv->tags_changed = TRUE;
+      }
+      GST_VIDEO_ENCODER_STREAM_UNLOCK (encoder);
+      break;
+    }
     case GST_EVENT_TAG:
     {
       GstTagList *tags;
@@ -1071,26 +1093,33 @@
       gst_event_parse_tag (event, &tags);
 
       if (gst_tag_list_get_scope (tags) == GST_TAG_SCOPE_STREAM) {
-        tags = gst_tag_list_copy (tags);
+        GST_VIDEO_ENCODER_STREAM_LOCK (encoder);
+        if (encoder->priv->upstream_tags != tags) {
+          tags = gst_tag_list_copy (tags);
 
-        /* FIXME: make generic based on GST_TAG_FLAG_ENCODED */
-        gst_tag_list_remove_tag (tags, GST_TAG_CODEC);
-        gst_tag_list_remove_tag (tags, GST_TAG_AUDIO_CODEC);
-        gst_tag_list_remove_tag (tags, GST_TAG_VIDEO_CODEC);
-        gst_tag_list_remove_tag (tags, GST_TAG_SUBTITLE_CODEC);
-        gst_tag_list_remove_tag (tags, GST_TAG_CONTAINER_FORMAT);
-        gst_tag_list_remove_tag (tags, GST_TAG_BITRATE);
-        gst_tag_list_remove_tag (tags, GST_TAG_NOMINAL_BITRATE);
-        gst_tag_list_remove_tag (tags, GST_TAG_MAXIMUM_BITRATE);
-        gst_tag_list_remove_tag (tags, GST_TAG_MINIMUM_BITRATE);
-        gst_tag_list_remove_tag (tags, GST_TAG_ENCODER);
-        gst_tag_list_remove_tag (tags, GST_TAG_ENCODER_VERSION);
+          /* FIXME: make generic based on GST_TAG_FLAG_ENCODED */
+          gst_tag_list_remove_tag (tags, GST_TAG_CODEC);
+          gst_tag_list_remove_tag (tags, GST_TAG_AUDIO_CODEC);
+          gst_tag_list_remove_tag (tags, GST_TAG_VIDEO_CODEC);
+          gst_tag_list_remove_tag (tags, GST_TAG_SUBTITLE_CODEC);
+          gst_tag_list_remove_tag (tags, GST_TAG_CONTAINER_FORMAT);
+          gst_tag_list_remove_tag (tags, GST_TAG_BITRATE);
+          gst_tag_list_remove_tag (tags, GST_TAG_NOMINAL_BITRATE);
+          gst_tag_list_remove_tag (tags, GST_TAG_MAXIMUM_BITRATE);
+          gst_tag_list_remove_tag (tags, GST_TAG_MINIMUM_BITRATE);
+          gst_tag_list_remove_tag (tags, GST_TAG_ENCODER);
+          gst_tag_list_remove_tag (tags, GST_TAG_ENCODER_VERSION);
 
-        gst_video_encoder_merge_tags (encoder, tags, GST_TAG_MERGE_REPLACE);
-        gst_tag_list_unref (tags);
+          if (encoder->priv->upstream_tags)
+            gst_tag_list_unref (encoder->priv->upstream_tags);
+          encoder->priv->upstream_tags = tags;
+          GST_INFO_OBJECT (encoder, "upstream tags: %" GST_PTR_FORMAT, tags);
+        }
         gst_event_unref (event);
-        event = NULL;
-        ret = TRUE;
+        event = gst_video_encoder_create_merged_tags_event (encoder);
+        GST_VIDEO_ENCODER_STREAM_UNLOCK (encoder);
+        if (!event)
+          ret = TRUE;
       }
       break;
     }
@@ -1259,11 +1288,11 @@
 
         GST_OBJECT_LOCK (enc);
         min_latency += priv->min_latency;
-        if (enc->priv->max_latency == GST_CLOCK_TIME_NONE) {
+        if (max_latency == GST_CLOCK_TIME_NONE
+            || enc->priv->max_latency == GST_CLOCK_TIME_NONE)
           max_latency = GST_CLOCK_TIME_NONE;
-        } else if (max_latency != GST_CLOCK_TIME_NONE) {
+        else
           max_latency += enc->priv->max_latency;
-        }
         GST_OBJECT_UNLOCK (enc);
 
         gst_query_set_latency (query, live, min_latency, max_latency);
@@ -1347,18 +1376,6 @@
 
   g_return_val_if_fail (klass->handle_frame != NULL, GST_FLOW_ERROR);
 
-  if (G_UNLIKELY (encoder->priv->do_caps)) {
-    GstCaps *caps = gst_pad_get_current_caps (encoder->sinkpad);
-    if (!caps)
-      goto not_negotiated;
-    if (!gst_video_encoder_setcaps (encoder, caps)) {
-      gst_caps_unref (caps);
-      goto not_negotiated;
-    }
-    gst_caps_unref (caps);
-    encoder->priv->do_caps = FALSE;
-  }
-
   if (!encoder->priv->input_state)
     goto not_negotiated;
 
@@ -1392,6 +1409,17 @@
   else
     duration = GST_CLOCK_TIME_NONE;
 
+  if (priv->min_pts != GST_CLOCK_TIME_NONE
+      && priv->time_adjustment == GST_CLOCK_TIME_NONE) {
+    if (cstart < priv->min_pts) {
+      priv->time_adjustment = priv->min_pts - cstart;
+    }
+  }
+
+  if (priv->time_adjustment != GST_CLOCK_TIME_NONE) {
+    cstart += priv->time_adjustment;
+  }
+
   /* incoming DTS is not really relevant and does not make sense anyway,
    * so pass along _NONE and maybe come up with something better later on */
   frame = gst_video_encoder_new_frame (encoder, buf, cstart,
@@ -1483,12 +1511,13 @@
         goto open_failed;
       break;
     case GST_STATE_CHANGE_READY_TO_PAUSED:
-      /* Initialize device/library if needed */
-      if (encoder_class->start && !encoder_class->start (encoder))
-        goto start_failed;
       GST_VIDEO_ENCODER_STREAM_LOCK (encoder);
       gst_video_encoder_reset (encoder, TRUE);
       GST_VIDEO_ENCODER_STREAM_UNLOCK (encoder);
+
+      /* Initialize device/library if needed */
+      if (encoder_class->start && !encoder_class->start (encoder))
+        goto start_failed;
       break;
     default:
       break;
@@ -1497,13 +1526,20 @@
   ret = GST_ELEMENT_CLASS (parent_class)->change_state (element, transition);
 
   switch (transition) {
-    case GST_STATE_CHANGE_PAUSED_TO_READY:
+    case GST_STATE_CHANGE_PAUSED_TO_READY:{
+      gboolean stopped = TRUE;
+
+      if (encoder_class->stop)
+        stopped = encoder_class->stop (encoder);
+
       GST_VIDEO_ENCODER_STREAM_LOCK (encoder);
       gst_video_encoder_reset (encoder, TRUE);
       GST_VIDEO_ENCODER_STREAM_UNLOCK (encoder);
-      if (encoder_class->stop && !encoder_class->stop (encoder))
+
+      if (!stopped)
         goto stop_failed;
       break;
+    }
     case GST_STATE_CHANGE_READY_TO_NULL:
       /* close device/library if needed */
       if (encoder_class->close && !encoder_class->close (encoder))
@@ -1581,6 +1617,16 @@
     if (state->codec_data)
       gst_caps_set_simple (state->caps, "codec_data", GST_TYPE_BUFFER,
           state->codec_data, NULL);
+
+    if (GST_VIDEO_INFO_MULTIVIEW_MODE (info) != GST_VIDEO_MULTIVIEW_MODE_NONE) {
+      const gchar *caps_mview_mode =
+          gst_video_multiview_mode_to_caps_string (GST_VIDEO_INFO_MULTIVIEW_MODE
+          (info));
+
+      gst_caps_set_simple (state->caps, "multiview-mode", G_TYPE_STRING,
+          caps_mview_mode, "multiview-flags", GST_TYPE_VIDEO_MULTIVIEW_FLAGSET,
+          GST_VIDEO_INFO_MULTIVIEW_FLAGS (info), GST_FLAG_SET_MASK_EXACT, NULL);
+    }
     encoder->priv->output_state_changed = FALSE;
   }
 
@@ -1820,6 +1866,62 @@
   gst_video_codec_frame_unref (frame);
 }
 
+static gboolean
+gst_video_encoder_transform_meta_default (GstVideoEncoder *
+    encoder, GstVideoCodecFrame * frame, GstMeta * meta)
+{
+  const GstMetaInfo *info = meta->info;
+  const gchar *const *tags;
+
+  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))))
+    return TRUE;
+
+  return FALSE;
+}
+
+typedef struct
+{
+  GstVideoEncoder *encoder;
+  GstVideoCodecFrame *frame;
+} CopyMetaData;
+
+static gboolean
+foreach_metadata (GstBuffer * inbuf, GstMeta ** meta, gpointer user_data)
+{
+  CopyMetaData *data = user_data;
+  GstVideoEncoder *encoder = data->encoder;
+  GstVideoEncoderClass *klass = GST_VIDEO_ENCODER_GET_CLASS (encoder);
+  GstVideoCodecFrame *frame = data->frame;
+  const GstMetaInfo *info = (*meta)->info;
+  gboolean do_copy = FALSE;
+
+  if (gst_meta_api_type_has_tag (info->api, _gst_meta_tag_memory)) {
+    /* never call the transform_meta with memory specific metadata */
+    GST_DEBUG_OBJECT (encoder, "not copying memory specific metadata %s",
+        g_type_name (info->api));
+    do_copy = FALSE;
+  } else if (klass->transform_meta) {
+    do_copy = klass->transform_meta (encoder, frame, *meta);
+    GST_DEBUG_OBJECT (encoder, "transformed metadata %s: copy: %d",
+        g_type_name (info->api), do_copy);
+  }
+
+  /* we only copy metadata when the subclass implemented a transform_meta
+   * function and when it returns %TRUE */
+  if (do_copy) {
+    GstMetaTransformCopy copy_data = { FALSE, 0, -1 };
+    GST_DEBUG_OBJECT (encoder, "copy metadata %s", g_type_name (info->api));
+    /* simply copy then */
+    info->transform_func (frame->output_buffer, *meta, inbuf,
+        _gst_meta_transform_copy, &copy_data);
+  }
+  return TRUE;
+}
+
 /**
  * gst_video_encoder_finish_frame:
  * @encoder: a #GstVideoEncoder
@@ -1970,7 +2072,7 @@
   if (GST_VIDEO_CODEC_FRAME_IS_SYNC_POINT (frame)) {
     priv->distance_from_sync = 0;
     GST_BUFFER_FLAG_UNSET (frame->output_buffer, GST_BUFFER_FLAG_DELTA_UNIT);
-    /* For keyframes, DTS = PTS, if decoder doesn't decide otherwise */
+    /* For keyframes, DTS = PTS, if encoder doesn't decide otherwise */
     if (!GST_CLOCK_TIME_IS_VALID (frame->dts)) {
       frame->dts = frame->pts;
     }
@@ -2066,6 +2168,19 @@
   if (encoder_class->pre_push)
     ret = encoder_class->pre_push (encoder, frame);
 
+  if (encoder_class->transform_meta) {
+    if (G_LIKELY (frame->input_buffer)) {
+      CopyMetaData data;
+
+      data.encoder = encoder;
+      data.frame = frame;
+      gst_buffer_foreach_meta (frame->input_buffer, foreach_metadata, &data);
+    } else {
+      GST_WARNING_OBJECT (encoder,
+          "Can't copy metadata because input frame disappeared");
+    }
+  }
+
   /* Get an additional ref to the buffer, which is going to be pushed
    * downstream, the original ref is owned by the frame */
   buffer = gst_buffer_ref (frame->output_buffer);
@@ -2291,11 +2406,13 @@
 /**
  * gst_video_encoder_merge_tags:
  * @encoder: a #GstVideoEncoder
- * @tags: a #GstTagList to merge
- * @mode: the #GstTagMergeMode to use
+ * @tags: (allow-none): a #GstTagList to merge, or NULL to unset
+ *     previously-set tags
+ * @mode: the #GstTagMergeMode to use, usually #GST_TAG_MERGE_REPLACE
  *
- * Adds tags to so-called pending tags, which will be processed
- * before pushing out data downstream.
+ * Sets the video encoder tags and how they should be merged with any
+ * upstream stream tags. This will override any tags previously-set
+ * with gst_video_encoder_merge_tags().
  *
  * Note that this is provided for convenience, and the subclass is
  * not required to use this and can still do tag handling on its own.
@@ -2306,19 +2423,26 @@
 gst_video_encoder_merge_tags (GstVideoEncoder * encoder,
     const GstTagList * tags, GstTagMergeMode mode)
 {
-  GstTagList *otags;
-
   g_return_if_fail (GST_IS_VIDEO_ENCODER (encoder));
   g_return_if_fail (tags == NULL || GST_IS_TAG_LIST (tags));
+  g_return_if_fail (tags == NULL || mode != GST_TAG_MERGE_UNDEFINED);
 
   GST_VIDEO_ENCODER_STREAM_LOCK (encoder);
-  if (tags)
-    GST_DEBUG_OBJECT (encoder, "merging tags %" GST_PTR_FORMAT, tags);
-  otags = encoder->priv->tags;
-  encoder->priv->tags = gst_tag_list_merge (encoder->priv->tags, tags, mode);
-  if (otags)
-    gst_tag_list_unref (otags);
-  encoder->priv->tags_changed = TRUE;
+  if (encoder->priv->tags != tags) {
+    if (encoder->priv->tags) {
+      gst_tag_list_unref (encoder->priv->tags);
+      encoder->priv->tags = NULL;
+      encoder->priv->tags_merge_mode = GST_TAG_MERGE_APPEND;
+    }
+    if (tags) {
+      encoder->priv->tags = gst_tag_list_ref ((GstTagList *) tags);
+      encoder->priv->tags_merge_mode = mode;
+    }
+
+    GST_DEBUG_OBJECT (encoder, "setting encoder tags to %" GST_PTR_FORMAT,
+        tags);
+    encoder->priv->tags_changed = TRUE;
+  }
   GST_VIDEO_ENCODER_STREAM_UNLOCK (encoder);
 }
 
@@ -2348,3 +2472,23 @@
   if (params)
     *params = encoder->priv->params;
 }
+
+/**
+ * gst_video_encoder_set_min_pts:
+ * @encoder: a #GstVideoEncoder
+ * @min_pts: minimal PTS that will be passed to handle_frame
+ *
+ * Request minimal value for PTS passed to handle_frame.
+ *
+ * For streams with reordered frames this can be used to ensure that there
+ * is enough time to accomodate first DTS, which may be less than first PTS
+ *
+ * Since 1.6
+ */
+void
+gst_video_encoder_set_min_pts (GstVideoEncoder * encoder, GstClockTime min_pts)
+{
+  g_return_if_fail (GST_IS_VIDEO_ENCODER (encoder));
+  encoder->priv->min_pts = min_pts;
+  encoder->priv->time_adjustment = GST_CLOCK_TIME_NONE;
+}
diff --git a/gst-libs/gst/video/gstvideoencoder.h b/gst-libs/gst/video/gstvideoencoder.h
index aea119d..ea70552 100644
--- a/gst-libs/gst/video/gstvideoencoder.h
+++ b/gst-libs/gst/video/gstvideoencoder.h
@@ -224,6 +224,11 @@
  *                  return TRUE if the query could be performed. Subclasses
  *                  should chain up to the parent implementation to invoke the
  *                  default handler. Since 1.4
+ * @transform_meta: Optional. Transform the metadata on the input buffer to the
+ *                  output buffer. By default this method is copies all meta without
+ *                  tags and meta with only the "video" tag. subclasses can
+ *                  implement this method and return %TRUE if the metadata is to be
+ *                  copied. Since 1.6
  *
  * Subclasses can override any of the available virtual methods or not, as
  * needed. At minimum @handle_frame needs to be overridden, and @set_format
@@ -281,8 +286,12 @@
   gboolean      (*src_query)      (GstVideoEncoder *encoder,
 				   GstQuery *query);
 
+  gboolean      (*transform_meta) (GstVideoEncoder *encoder,
+                                   GstVideoCodecFrame *frame,
+                                   GstMeta * meta);
+
   /*< private >*/
-  gpointer       _gst_reserved[GST_PADDING_LARGE-3];
+  gpointer       _gst_reserved[GST_PADDING_LARGE-4];
 };
 
 GType                gst_video_encoder_get_type (void);
@@ -333,6 +342,8 @@
                                                       GstAllocator **allocator,
                                                       GstAllocationParams *params);
 
+void                 gst_video_encoder_set_min_pts(GstVideoEncoder *encoder, GstClockTime min_pts);
+
 G_END_DECLS
 
 #endif
diff --git a/gst-libs/gst/video/gstvideofilter.c b/gst-libs/gst/video/gstvideofilter.c
index e1fa2c1..a91053e 100644
--- a/gst-libs/gst/video/gstvideofilter.c
+++ b/gst-libs/gst/video/gstvideofilter.c
@@ -260,23 +260,15 @@
   if (fclass->transform_frame) {
     GstVideoFrame in_frame, out_frame;
 
-    if (!gst_video_frame_map (&in_frame, &filter->in_info, inbuf, GST_MAP_READ))
+    if (!gst_video_frame_map (&in_frame, &filter->in_info, inbuf,
+            GST_MAP_READ | GST_VIDEO_FRAME_MAP_FLAG_NO_REF))
       goto invalid_buffer;
 
     if (!gst_video_frame_map (&out_frame, &filter->out_info, outbuf,
-            GST_MAP_WRITE))
+            GST_MAP_WRITE | GST_VIDEO_FRAME_MAP_FLAG_NO_REF))
       goto invalid_buffer;
 
-    /* GstVideoFrame has another reference, so the buffer looks unwriteable,
-     * meaning that we can't attach any metas or anything to it. Other
-     * map() functions like gst_buffer_map() don't get another reference
-     * of the buffer and expect the buffer reference to be kept until
-     * the buffer is unmapped again. */
-    gst_buffer_unref (inbuf);
-    gst_buffer_unref (outbuf);
     res = fclass->transform_frame (filter, &in_frame, &out_frame);
-    gst_buffer_ref (inbuf);
-    gst_buffer_ref (outbuf);
 
     gst_video_frame_unmap (&out_frame);
     gst_video_frame_unmap (&in_frame);
@@ -317,7 +309,7 @@
     GstVideoFrame frame;
     GstMapFlags flags;
 
-    flags = GST_MAP_READ;
+    flags = GST_MAP_READ | GST_VIDEO_FRAME_MAP_FLAG_NO_REF;
 
     if (!gst_base_transform_is_passthrough (trans))
       flags |= GST_MAP_WRITE;
@@ -325,14 +317,7 @@
     if (!gst_video_frame_map (&frame, &filter->in_info, buf, flags))
       goto invalid_buffer;
 
-    /* GstVideoFrame has another reference, so the buffer looks unwriteable,
-     * meaning that we can't attach any metas or anything to it. Other
-     * map() functions like gst_buffer_map() don't get another reference
-     * of the buffer and expect the buffer reference to be kept until
-     * the buffer is unmapped again. */
-    gst_buffer_unref (buf);
     res = fclass->transform_frame_ip (filter, &frame);
-    gst_buffer_ref (buf);
 
     gst_video_frame_unmap (&frame);
   } else {
@@ -366,9 +351,9 @@
 
   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)))
+  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))))
     return TRUE;
 
   return GST_BASE_TRANSFORM_CLASS (parent_class)->transform_meta (trans, inbuf,
diff --git a/gst-libs/gst/video/gstvideometa.c b/gst-libs/gst/video/gstvideometa.c
index a5cd8bd..30c259c 100644
--- a/gst-libs/gst/video/gstvideometa.c
+++ b/gst-libs/gst/video/gstvideometa.c
@@ -21,6 +21,27 @@
 
 #include <string.h>
 
+#ifndef GST_DISABLE_GST_DEBUG
+#define GST_CAT_DEFAULT ensure_debug_category()
+static GstDebugCategory *
+ensure_debug_category (void)
+{
+  static gsize cat_gonce = 0;
+
+  if (g_once_init_enter (&cat_gonce)) {
+    gsize cat_done;
+
+    cat_done = (gsize) _gst_debug_category_new ("videometa", 0, "videometa");
+
+    g_once_init_leave (&cat_gonce, cat_done);
+  }
+
+  return (GstDebugCategory *) cat_gonce;
+}
+#else
+#define ensure_debug_category() /* NOOP */
+#endif /* GST_DISABLE_GST_DEBUG */
+
 static gboolean
 gst_video_meta_transform (GstBuffer * dest, GstMeta * meta,
     GstBuffer * buffer, GQuark type, gpointer data)
@@ -59,6 +80,9 @@
       dmeta->map = smeta->map;
       dmeta->unmap = smeta->unmap;
     }
+  } else {
+    /* return FALSE, if transform type is not supported */
+    return FALSE;
   }
   return TRUE;
 }
@@ -97,6 +121,38 @@
 }
 
 /**
+ * gst_buffer_get_video_meta:
+ * @buffer: a #GstBuffer
+ *
+ * Find the #GstVideoMeta on @buffer with the lowest @id.
+ *
+ * Buffers can contain multiple #GstVideoMeta metadata items when dealing with
+ * multiview buffers.
+ *
+ * Returns: (transfer none): the #GstVideoMeta with lowest id (usually 0) or %NULL when there
+ * is no such metadata on @buffer.
+ */
+GstVideoMeta *
+gst_buffer_get_video_meta (GstBuffer * buffer)
+{
+  gpointer state = NULL;
+  GstVideoMeta *out = NULL;
+  GstMeta *meta;
+  const GstMetaInfo *info = GST_VIDEO_META_INFO;
+
+  while ((meta = gst_buffer_iterate_meta (buffer, &state))) {
+    if (meta->info->api == info->api) {
+      GstVideoMeta *vmeta = (GstVideoMeta *) meta;
+      if (vmeta->id == 0)
+        return vmeta;           /* Early out for id 0 */
+      if (out == NULL || vmeta->id < out->id)
+        out = vmeta;
+    }
+  }
+  return out;
+}
+
+/**
  * gst_buffer_get_video_meta_id:
  * @buffer: a #GstBuffer
  * @id: a metadata id
@@ -106,7 +162,7 @@
  * Buffers can contain multiple #GstVideoMeta metadata items when dealing with
  * multiview buffers.
  *
- * Returns: the #GstVideoMeta with @id or %NULL when there is no such metadata
+ * Returns: (transfer none): the #GstVideoMeta with @id or %NULL when there is no such metadata
  * on @buffer.
  */
 GstVideoMeta *
@@ -186,7 +242,7 @@
  * This function calculates the default offsets and strides and then calls
  * gst_buffer_add_video_meta_full() with them.
  *
- * Returns: the #GstVideoMeta on @buffer.
+ * Returns: (transfer none): the #GstVideoMeta on @buffer.
  */
 GstVideoMeta *
 gst_buffer_add_video_meta (GstBuffer * buffer,
@@ -217,7 +273,7 @@
  *
  * Attaches GstVideoMeta metadata to @buffer with the given parameters.
  *
- * Returns: the #GstVideoMeta on @buffer.
+ * Returns: (transfer none): the #GstVideoMeta on @buffer.
  */
 GstVideoMeta *
 gst_buffer_add_video_meta_full (GstBuffer * buffer,
@@ -315,6 +371,8 @@
   if (GST_META_TRANSFORM_IS_COPY (type)) {
     smeta = (GstVideoCropMeta *) meta;
     dmeta = gst_buffer_add_video_crop_meta (dest);
+    if (!dmeta)
+      return FALSE;
 
     GST_DEBUG ("copy crop metadata");
     dmeta->x = smeta->x;
@@ -327,6 +385,8 @@
 
     smeta = (GstVideoCropMeta *) meta;
     dmeta = gst_buffer_add_video_crop_meta (dest);
+    if (!dmeta)
+      return FALSE;
 
     ow = GST_VIDEO_INFO_WIDTH (trans->in_info);
     nw = GST_VIDEO_INFO_WIDTH (trans->out_info);
@@ -342,6 +402,9 @@
         dmeta->y);
     GST_DEBUG ("crop size   %dx%d -> %dx%d", smeta->width, smeta->height,
         dmeta->width, dmeta->height);
+  } else {
+    /* return FALSE, if transform type is not supported */
+    return FALSE;
   }
   return TRUE;
 }
@@ -452,6 +515,9 @@
       if (dmeta->user_data_copy)
         dmeta->user_data = dmeta->user_data_copy (dmeta->user_data);
     }
+  } else {
+    /* return FALSE, if transform type is not supported */
+    return FALSE;
   }
   return TRUE;
 }
@@ -477,15 +543,18 @@
 /**
  * gst_buffer_add_video_gl_texture_upload_meta:
  * @buffer: a #GstBuffer
- * @upload: the function to upload the buffer to a specific texture ID
+ * @texture_orientation: the #GstVideoGLTextureOrientation
+ * @n_textures: the number of textures
+ * @texture_type: array of #GstVideoGLTextureType
+ * @upload: (scope call): the function to upload the buffer to a specific texture ID
  * @user_data: user data for the implementor of @upload
- * @user_data_copy: function to copy @user_data
- * @user_data_free: function to free @user_data
+ * @user_data_copy: (scope call): function to copy @user_data
+ * @user_data_free: (scope call): function to free @user_data
  *
  * Attaches GstVideoGLTextureUploadMeta metadata to @buffer with the given
  * parameters.
  *
- * Returns: the #GstVideoGLTextureUploadMeta on @buffer.
+ * Returns: (transfer none): the #GstVideoGLTextureUploadMeta on @buffer.
  */
 GstVideoGLTextureUploadMeta *
 gst_buffer_add_video_gl_texture_upload_meta (GstBuffer * buffer,
@@ -571,6 +640,9 @@
     dmeta =
         gst_buffer_add_video_region_of_interest_meta_id (dest,
         smeta->roi_type, smeta->x, smeta->y, smeta->w, smeta->h);
+    if (!dmeta)
+      return FALSE;
+
     dmeta->id = smeta->id;
     dmeta->parent_id = smeta->parent_id;
   } else if (GST_VIDEO_META_TRANSFORM_IS_SCALE (type)) {
@@ -588,6 +660,9 @@
         gst_buffer_add_video_region_of_interest_meta_id (dest,
         smeta->roi_type, (smeta->x * nw) / ow, (smeta->y * nh) / oh,
         (smeta->w * nw) / ow, (smeta->h * nh) / oh);
+    if (!dmeta)
+      return FALSE;
+
     dmeta->id = smeta->id;
     dmeta->parent_id = smeta->parent_id;
 
@@ -595,6 +670,9 @@
         smeta->id, smeta->parent_id, smeta->x, smeta->y, dmeta->x, dmeta->y);
     GST_DEBUG ("region of interest size   %dx%d -> %dx%d", smeta->w, smeta->h,
         dmeta->w, dmeta->h);
+  } else {
+    /* return FALSE, if transform type is not supported */
+    return FALSE;
   }
   return TRUE;
 }
@@ -645,7 +723,7 @@
  * Buffers can contain multiple #GstVideoRegionOfInterestMeta metadata items if
  * multiple regions of interests are marked on a frame.
  *
- * Returns: the #GstVideoeRegionOfInterestMeta with @id or %NULL when there is
+ * Returns: (transfer none): the #GstVideoRegionOfInterestMeta with @id or %NULL when there is
  * no such metadata on @buffer.
  */
 GstVideoRegionOfInterestMeta *
@@ -678,7 +756,7 @@
  * Attaches #GstVideoRegionOfInterestMeta metadata to @buffer with the given
  * parameters.
  *
- * Returns: the #GstVideoRegionOfInterestMeta on @buffer.
+ * Returns: (transfer none): the #GstVideoRegionOfInterestMeta on @buffer.
  */
 GstVideoRegionOfInterestMeta *
 gst_buffer_add_video_region_of_interest_meta (GstBuffer * buffer,
@@ -700,7 +778,7 @@
  * Attaches #GstVideoRegionOfInterestMeta metadata to @buffer with the given
  * parameters.
  *
- * Returns: the #GstVideoRegionOfInterestMeta on @buffer.
+ * Returns: (transfer none): the #GstVideoRegionOfInterestMeta on @buffer.
  */
 GstVideoRegionOfInterestMeta *
 gst_buffer_add_video_region_of_interest_meta_id (GstBuffer * buffer,
diff --git a/gst-libs/gst/video/gstvideometa.h b/gst-libs/gst/video/gstvideometa.h
index e693659..deb793d 100644
--- a/gst-libs/gst/video/gstvideometa.h
+++ b/gst-libs/gst/video/gstvideometa.h
@@ -78,7 +78,7 @@
 GType gst_video_meta_api_get_type (void);
 const GstMetaInfo * gst_video_meta_get_info (void);
 
-#define gst_buffer_get_video_meta(b) ((GstVideoMeta*)gst_buffer_get_meta((b),GST_VIDEO_META_API_TYPE))
+GstVideoMeta * gst_buffer_get_video_meta (GstBuffer *buffer);
 GstVideoMeta * gst_buffer_get_video_meta_id    (GstBuffer *buffer, gint id);
 
 GstVideoMeta * gst_buffer_add_video_meta       (GstBuffer *buffer, GstVideoFrameFlags flags,
@@ -255,8 +255,8 @@
  * @parent_id: identifier of its parent ROI, used f.i. for ROI hierarchisation.
  * @x: x component of upper-left corner
  * @y: y component of upper-left corner
- * @width: bounding box width
- * @height: bounding box height
+ * @w: bounding box width
+ * @h: bounding box height
  *
  * Extra buffer metadata describing an image region of interest
  */
diff --git a/gst-libs/gst/video/gstvideopool.c b/gst-libs/gst/video/gstvideopool.c
index 546a465..62026e9 100644
--- a/gst-libs/gst/video/gstvideopool.c
+++ b/gst-libs/gst/video/gstvideopool.c
@@ -20,6 +20,10 @@
 #include "gst/video/gstvideometa.h"
 #include "gst/video/gstvideopool.h"
 
+
+GST_DEBUG_CATEGORY_STATIC (gst_video_pool_debug);
+#define GST_CAT_DEFAULT gst_video_pool_debug
+
 /**
  * SECTION:gstvideopool
  * @short_description: GstBufferPool for raw video buffers
@@ -138,6 +142,9 @@
   if (!gst_video_info_from_caps (&info, caps))
     goto wrong_caps;
 
+  if (size < info.size)
+    goto wrong_size;
+
   if (!gst_buffer_pool_config_get_allocator (config, &allocator, &params))
     goto wrong_config;
 
@@ -166,11 +173,32 @@
       GST_BUFFER_POOL_OPTION_VIDEO_ALIGNMENT);
 
   if (priv->need_alignment && priv->add_videometa) {
-    /* get an apply the alignment to the info */
+    guint max_align, n;
+
     gst_buffer_pool_config_get_video_alignment (config, &priv->video_align);
+
+    /* ensure GstAllocationParams alignment is compatible with video alignment */
+    max_align = priv->params.align;
+    for (n = 0; n < GST_VIDEO_MAX_PLANES; ++n)
+      max_align |= priv->video_align.stride_align[n];
+
+    for (n = 0; n < GST_VIDEO_MAX_PLANES; ++n)
+      priv->video_align.stride_align[n] = max_align;
+
+    /* apply the alignment to the info */
     gst_video_info_align (&info, &priv->video_align);
+    gst_buffer_pool_config_set_video_alignment (config, &priv->video_align);
+
+    if (priv->params.align < max_align) {
+      GST_WARNING_OBJECT (pool, "allocation params alignment %u is smaller "
+          "than the max specified video stride alignment %u, fixing",
+          (guint) priv->params.align, max_align);
+      priv->params.align = max_align;
+      gst_buffer_pool_config_set_allocator (config, allocator, &priv->params);
+    }
   }
   priv->info = info;
+  info.size = MAX (size, info.size);
 
   gst_buffer_pool_config_set_params (config, caps, info.size, min_buffers,
       max_buffers);
@@ -194,6 +222,13 @@
         "failed getting geometry from caps %" GST_PTR_FORMAT, caps);
     return FALSE;
   }
+wrong_size:
+  {
+    GST_WARNING_OBJECT (pool,
+        "Provided size is to small for the caps: %u", size);
+    return FALSE;
+
+  }
 }
 
 static GstFlowReturn
@@ -238,7 +273,7 @@
  * Create a new bufferpool that can allocate video frames. This bufferpool
  * supports all the video bufferpool options.
  *
- * Returns: a new #GstBufferPool to allocate video frames
+ * Returns: (transfer floating): a new #GstBufferPool to allocate video frames
  */
 GstBufferPool *
 gst_video_buffer_pool_new ()
@@ -265,6 +300,9 @@
   gstbufferpool_class->get_options = video_buffer_pool_get_options;
   gstbufferpool_class->set_config = video_buffer_pool_set_config;
   gstbufferpool_class->alloc_buffer = video_buffer_pool_alloc;
+
+  GST_DEBUG_CATEGORY_INIT (gst_video_pool_debug, "videopool", 0,
+      "videopool object");
 }
 
 static void
diff --git a/gst-libs/gst/video/gstvideosink.c b/gst-libs/gst/video/gstvideosink.c
index 4704593..26b7df2 100644
--- a/gst-libs/gst/video/gstvideosink.c
+++ b/gst-libs/gst/video/gstvideosink.c
@@ -87,8 +87,8 @@
   if (!scaling) {
     result->w = MIN (src.w, dst.w);
     result->h = MIN (src.h, dst.h);
-    result->x = (dst.w - result->w) / 2;
-    result->y = (dst.h - result->h) / 2;
+    result->x = dst.x + (dst.w - result->w) / 2;
+    result->y = dst.y + (dst.h - result->h) / 2;
   } else {
     gdouble src_ratio, dst_ratio;
 
@@ -98,16 +98,16 @@
     if (src_ratio > dst_ratio) {
       result->w = dst.w;
       result->h = dst.w / src_ratio;
-      result->x = 0;
-      result->y = (dst.h - result->h) / 2;
+      result->x = dst.x;
+      result->y = dst.y + (dst.h - result->h) / 2;
     } else if (src_ratio < dst_ratio) {
       result->w = dst.h * src_ratio;
       result->h = dst.h;
-      result->x = (dst.w - result->w) / 2;
-      result->y = 0;
+      result->x = dst.x + (dst.w - result->w) / 2;
+      result->y = dst.y;
     } else {
-      result->x = 0;
-      result->y = 0;
+      result->x = dst.x;
+      result->y = dst.y;
       result->w = dst.w;
       result->h = dst.h;
     }
diff --git a/gst-libs/gst/video/gstvideoutils.h b/gst-libs/gst/video/gstvideoutils.h
index 6349b87..84399d4 100644
--- a/gst-libs/gst/video/gstvideoutils.h
+++ b/gst-libs/gst/video/gstvideoutils.h
@@ -206,6 +206,7 @@
  * @distance_from_sync: Distance in frames from the last synchronization point.
  * @input_buffer: the input #GstBuffer that created this frame. The buffer is owned
  *           by the frame and references to the frame instead of the buffer should
+ *           be kept.
  * @output_buffer: the output #GstBuffer. Implementations should set this either
  *           directly, or by using the
  *           @gst_video_decoder_allocate_output_frame() or
@@ -213,7 +214,6 @@
  *           owned by the frame and references to the frame instead of the
  *           buffer should be kept.
  * @deadline: Running time when the frame will be used.
- * @events: Events that will be pushed downstream before this frame is pushed.
  *
  * A #GstVideoCodecFrame represents a video frame both in raw and
  * encoded form.
diff --git a/gst-libs/gst/video/gstvideoutilsprivate.c b/gst-libs/gst/video/gstvideoutilsprivate.c
new file mode 100644
index 0000000..652c60d
--- /dev/null
+++ b/gst-libs/gst/video/gstvideoutilsprivate.c
@@ -0,0 +1,146 @@
+/* GStreamer
+ * Copyright (C) 2008 David Schleef <ds@schleef.org>
+ * Copyright (C) 2012 Collabora Ltd.
+ *	Author : Edward Hervey <edward@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.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <gst/video/video.h>
+#include "gstvideoutilsprivate.h"
+
+/*
+ * Takes caps and copies its video fields to tmpl_caps
+ */
+static GstCaps *
+__gst_video_element_proxy_caps (GstElement * element, GstCaps * templ_caps,
+    GstCaps * caps)
+{
+  GstCaps *result = gst_caps_new_empty ();
+  gint i, j;
+  gint templ_caps_size = gst_caps_get_size (templ_caps);
+  gint caps_size = gst_caps_get_size (caps);
+
+  for (i = 0; i < templ_caps_size; i++) {
+    GQuark q_name =
+        gst_structure_get_name_id (gst_caps_get_structure (templ_caps, i));
+    GstCapsFeatures *features = gst_caps_get_features (templ_caps, i);
+
+    for (j = 0; j < caps_size; j++) {
+      const GstStructure *caps_s = gst_caps_get_structure (caps, j);
+      const GValue *val;
+      GstStructure *s;
+      GstCaps *tmp = gst_caps_new_empty ();
+
+      s = gst_structure_new_id_empty (q_name);
+      if ((val = gst_structure_get_value (caps_s, "width")))
+        gst_structure_set_value (s, "width", val);
+      if ((val = gst_structure_get_value (caps_s, "height")))
+        gst_structure_set_value (s, "height", val);
+      if ((val = gst_structure_get_value (caps_s, "framerate")))
+        gst_structure_set_value (s, "framerate", val);
+      if ((val = gst_structure_get_value (caps_s, "pixel-aspect-ratio")))
+        gst_structure_set_value (s, "pixel-aspect-ratio", val);
+
+      gst_caps_append_structure_full (tmp, s,
+          gst_caps_features_copy (features));
+      result = gst_caps_merge (result, tmp);
+    }
+  }
+
+  return result;
+}
+
+/**
+ * __gst_video_element_proxy_getcaps:
+ * @element: a #GstElement
+ * @sinkpad: the element's sink #GstPad
+ * @srcpad: the element's source #GstPad
+ * @initial_caps: initial caps
+ * @filter: filter caps
+ *
+ * Returns caps that express @initial_caps (or sink template caps if
+ * @initial_caps == NULL) restricted to resolution/format/...
+ * combinations supported by downstream elements (e.g. muxers).
+ *
+ * Returns: a #GstCaps owned by caller
+ */
+GstCaps *
+__gst_video_element_proxy_getcaps (GstElement * element, GstPad * sinkpad,
+    GstPad * srcpad, GstCaps * initial_caps, GstCaps * filter)
+{
+  GstCaps *templ_caps, *src_templ_caps;
+  GstCaps *peer_caps;
+  GstCaps *allowed;
+  GstCaps *fcaps, *filter_caps;
+
+  /* Allow downstream to specify width/height/framerate/PAR constraints
+   * and forward them upstream for video converters to handle
+   */
+  templ_caps = initial_caps ? gst_caps_ref (initial_caps) :
+      gst_pad_get_pad_template_caps (sinkpad);
+  src_templ_caps = gst_pad_get_pad_template_caps (srcpad);
+  if (filter && !gst_caps_is_any (filter)) {
+    GstCaps *proxy_filter =
+        __gst_video_element_proxy_caps (element, src_templ_caps, filter);
+
+    peer_caps = gst_pad_peer_query_caps (srcpad, proxy_filter);
+    gst_caps_unref (proxy_filter);
+  } else {
+    peer_caps = gst_pad_peer_query_caps (srcpad, NULL);
+  }
+
+  allowed = gst_caps_intersect_full (peer_caps, src_templ_caps,
+      GST_CAPS_INTERSECT_FIRST);
+
+  gst_caps_unref (src_templ_caps);
+  gst_caps_unref (peer_caps);
+
+  if (!allowed || gst_caps_is_any (allowed)) {
+    fcaps = templ_caps;
+    goto done;
+  } else if (gst_caps_is_empty (allowed)) {
+    fcaps = gst_caps_ref (allowed);
+    goto done;
+  }
+
+  GST_LOG_OBJECT (element, "template caps %" GST_PTR_FORMAT, templ_caps);
+  GST_LOG_OBJECT (element, "allowed caps %" GST_PTR_FORMAT, allowed);
+
+  filter_caps = __gst_video_element_proxy_caps (element, templ_caps, allowed);
+
+  fcaps = gst_caps_intersect (filter_caps, templ_caps);
+  gst_caps_unref (filter_caps);
+  gst_caps_unref (templ_caps);
+
+  if (filter) {
+    GST_LOG_OBJECT (element, "intersecting with %" GST_PTR_FORMAT, filter);
+    filter_caps = gst_caps_intersect (fcaps, filter);
+    gst_caps_unref (fcaps);
+    fcaps = filter_caps;
+  }
+
+done:
+  gst_caps_replace (&allowed, NULL);
+
+  GST_LOG_OBJECT (element, "proxy caps %" GST_PTR_FORMAT, fcaps);
+
+  return fcaps;
+}
diff --git a/gst-libs/gst/video/gstvideoutilsprivate.h b/gst-libs/gst/video/gstvideoutilsprivate.h
new file mode 100644
index 0000000..ac5105e
--- /dev/null
+++ b/gst-libs/gst/video/gstvideoutilsprivate.h
@@ -0,0 +1,40 @@
+/* GStreamer
+ * Copyright (C) 2008 David Schleef <ds@schleef.org>
+ * Copyright (C) 2012 Collabora Ltd.
+ *	Author : Edward Hervey <edward@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.
+ */
+
+#ifndef __GST_VIDEO_H__
+#include <gst/video/video.h>
+#endif
+
+#ifndef _GST_VIDEO_UTILS_PRIVATE_H_
+#define _GST_VIDEO_UTILS_PRIVATE_H_
+
+#include <gst/gst.h>
+
+G_BEGIN_DECLS
+
+/* Element utility functions */
+GstCaps *__gst_video_element_proxy_getcaps (GstElement * element, GstPad * sinkpad,
+                                            GstPad * srcpad, GstCaps * initial_caps,
+                                            GstCaps * filter);
+
+G_END_DECLS
+
+#endif
diff --git a/gst-libs/gst/video/navigation.c b/gst-libs/gst/video/navigation.c
index 2fc8836..54bac85 100644
--- a/gst-libs/gst/video/navigation.c
+++ b/gst-libs/gst/video/navigation.c
@@ -115,6 +115,8 @@
 
   if (iface->send_event) {
     iface->send_event (navigation, structure);
+  } else {
+    gst_structure_free (structure);
   }
 }
 
@@ -495,6 +497,8 @@
     return GST_NAVIGATION_MESSAGE_COMMANDS_CHANGED;
   else if (g_str_equal (m_type, "angles-changed"))
     return GST_NAVIGATION_MESSAGE_ANGLES_CHANGED;
+  else if (g_str_equal (m_type, "event"))
+    return GST_NAVIGATION_MESSAGE_EVENT;
 
   return GST_NAVIGATION_MESSAGE_INVALID;
 }
@@ -546,7 +550,62 @@
 
   if (active) {
     const GstStructure *s = gst_message_get_structure (message);
-    if (gst_structure_get_boolean (s, "active", active) == FALSE)
+    if (!gst_structure_get_boolean (s, "active", active))
+      return FALSE;
+  }
+
+  return TRUE;
+}
+
+/**
+ * gst_navigation_message_new_event:
+ * @src: A #GstObject to set as source of the new message.
+ * @event: (transfer none): A navigation #GstEvent
+ *
+ * Creates a new #GstNavigation message with type
+ * #GST_NAVIGATION_MESSAGE_EVENT.
+ *
+ * Returns: The new #GstMessage.
+ *
+ * Since: 1.6
+ */
+GstMessage *
+gst_navigation_message_new_event (GstObject * src, GstEvent * event)
+{
+  GstStructure *s;
+  GstMessage *m;
+
+  s = gst_structure_new (GST_NAVIGATION_MESSAGE_NAME,
+      "type", G_TYPE_STRING, "event", "event", GST_TYPE_EVENT, event, NULL);
+
+  m = gst_message_new_custom (GST_MESSAGE_ELEMENT, src, s);
+
+  return m;
+}
+
+/**
+ * gst_navigation_message_parse_event:
+ * @message: A #GstMessage to inspect.
+ * @event: (out) (transfer full): a pointer to a #GstEvent to receive the
+ *     contained navigation event.
+ *
+ * Parse a #GstNavigation message of type #GST_NAVIGATION_MESSAGE_EVENT
+ * and extract contained #GstEvent. The caller must unref the @event when done
+ * with it.
+ *
+ * Returns: %TRUE if the message could be successfully parsed. %FALSE if not.
+ *
+ * Since: 1.6
+ */
+gboolean
+gst_navigation_message_parse_event (GstMessage * message, GstEvent ** event)
+{
+  if (!GST_NAVIGATION_MESSAGE_HAS_TYPE (message, EVENT))
+    return FALSE;
+
+  if (event) {
+    const GstStructure *s = gst_message_get_structure (message);
+    if (!gst_structure_get (s, "event", GST_TYPE_EVENT, event, NULL))
       return FALSE;
   }
 
diff --git a/gst-libs/gst/video/navigation.h b/gst-libs/gst/video/navigation.h
index 3630dc3..b69c70c 100644
--- a/gst-libs/gst/video/navigation.h
+++ b/gst-libs/gst/video/navigation.h
@@ -178,6 +178,8 @@
  * @GST_NAVIGATION_MESSAGE_ANGLES_CHANGED: Sent when display angles in a multi-angle
  * feature (such as a multiangle DVD) change - either angles have appeared or
  * disappeared.
+ * @GST_NAVIGATION_MESSAGE_EVENT: Sent when a navigation event was not handled
+ * by any element in the pipeline (Since 1.6)
  *
  * A set of notifications that may be received on the bus when navigation
  * related status changes.
@@ -186,7 +188,8 @@
   GST_NAVIGATION_MESSAGE_INVALID,
   GST_NAVIGATION_MESSAGE_MOUSE_OVER,
   GST_NAVIGATION_MESSAGE_COMMANDS_CHANGED,
-  GST_NAVIGATION_MESSAGE_ANGLES_CHANGED
+  GST_NAVIGATION_MESSAGE_ANGLES_CHANGED,
+  GST_NAVIGATION_MESSAGE_EVENT
 } GstNavigationMessageType;
 
 GstNavigationMessageType gst_navigation_message_get_type (GstMessage *message);
@@ -205,6 +208,10 @@
                                                              guint *cur_angle,
                                                              guint *n_angles);
 
+GstMessage *    gst_navigation_message_new_event            (GstObject *src,
+							     GstEvent *event);
+gboolean        gst_navigation_message_parse_event          (GstMessage *message,
+							     GstEvent ** event);
 /* event parsing functions */
 /**
  * GstNavigationEventType:
diff --git a/gst-libs/gst/video/video-blend.c b/gst-libs/gst/video/video-blend.c
index 835b7bb..7a1380b 100644
--- a/gst-libs/gst/video/video-blend.c
+++ b/gst-libs/gst/video/video-blend.c
@@ -146,6 +146,22 @@
   ret = v0 + (v1 * (255 - alpha)) / 255; \
 } G_STMT_END
 
+/**
+ * gst_video_blend_scale_linear_RGBA:
+ * @src: the #GstVideoInfo describing the video data in @src_buffer
+ * @src_buffer: the source buffer containing video pixels to scale
+ * @dest_height: the height in pixels to scale the video data in @src_buffer to
+ * @dest_width: the width in pixels to scale the video data in @src_buffer to
+ * @dest: (out): pointer to a #GstVideoInfo structure that will be filled in
+ *     with the details for @dest_buffer
+ * @dest_buffer: (out): a pointer to a #GstBuffer variable, which will be
+ *     set to a newly-allocated buffer containing the scaled pixels.
+ *
+ * Scales a buffer containing RGBA (or AYUV) video. This is an internal
+ * helper function which is used to scale subtitle overlays, and may be
+ * deprecated in the near future. Use #GstVideoScaler to scale video buffers
+ * instead.
+ */
 /* returns newly-allocated buffer, which caller must unref */
 void
 gst_video_blend_scale_linear_RGBA (GstVideoInfo * src, GstBuffer * src_buffer,
@@ -232,7 +248,8 @@
   g_free (tmpbuf);
 }
 
-/* video_blend:
+/**
+ * gst_video_blend:
  * @dest: The #GstVideoFrame where to blend @src in
  * @src: the #GstVideoFrame that we want to blend into
  * @x: The x offset in pixel where the @src image should be blended
@@ -246,8 +263,8 @@
 gst_video_blend (GstVideoFrame * dest,
     GstVideoFrame * src, gint x, gint y, gfloat global_alpha)
 {
-  guint i, j, global_alpha_val, src_width, src_height, dest_width, dest_height;
-  gint xoff;
+  gint i, j, global_alpha_val, src_width, src_height, dest_width, dest_height;
+  gint src_xoff = 0, src_yoff = 0;
   guint8 *tmpdestline = NULL, *tmpsrcline = NULL;
   gboolean src_premultiplied_alpha, dest_premultiplied_alpha;
   void (*matrix) (guint8 * tmpline, guint width);
@@ -275,6 +292,15 @@
 
   ensure_debug_category ();
 
+  GST_LOG ("blend src %dx%d onto dest %dx%d @ %d,%d", src_width, src_height,
+      dest_width, dest_height, x, y);
+
+  /* In case overlay is completely outside the video, dont render */
+  if (x + src_width <= 0 || y + src_height <= 0
+      || x >= dest_width || y >= dest_height) {
+    goto nothing_to_do;
+  }
+
   dinfo = gst_video_format_get_info (GST_VIDEO_FRAME_FORMAT (dest));
   sinfo = gst_video_format_get_info (GST_VIDEO_FRAME_FORMAT (src));
 
@@ -293,7 +319,7 @@
     goto unpack_format_not_supported;
 
   tmpdestline = g_malloc (sizeof (guint8) * (dest_width + 8) * 4);
-  tmpsrcline = g_malloc (sizeof (guint8) * (dest_width + 8) * 4);
+  tmpsrcline = g_malloc (sizeof (guint8) * (src_width + 8) * 4);
 
   matrix = matrix_identity;
   if (GST_VIDEO_INFO_IS_RGB (&src->info) != GST_VIDEO_INFO_IS_RGB (&dest->info)) {
@@ -309,21 +335,24 @@
     }
   }
 
-  xoff = 0;
+  /* If we're here we know that the overlay image fully or
+   * partially overlaps with the video frame */
 
-  /* adjust src pointers for negative sizes */
+  /* adjust src image for negative offsets */
   if (x < 0) {
-    src_width -= -x;
+    src_xoff = -x;
+    src_width -= src_xoff;
     x = 0;
-    xoff = -x;
   }
 
   if (y < 0) {
-    src_height -= -y;
+    src_yoff = -y;
+    src_height -= src_yoff;
     y = 0;
   }
 
-  /* adjust width/height if the src is bigger than dest */
+  /* adjust width/height to render (i.e. clip source image) if the source
+   * image extends beyond the right or bottom border of the video surface */
   if (x + src_width > dest_width)
     src_width = dest_width - x;
 
@@ -331,17 +360,18 @@
     src_height = dest_height - y;
 
   /* Mainloop doing the needed conversions, and blending */
-  for (i = y; i < y + src_height; i++) {
+  for (i = y; i < y + src_height; i++, src_yoff++) {
 
     dinfo->unpack_func (dinfo, 0, tmpdestline, dest->data, dest->info.stride,
         0, i, dest_width);
     sinfo->unpack_func (sinfo, 0, tmpsrcline, src->data, src->info.stride,
-        xoff, i - y, src_width - xoff);
+        src_xoff, src_yoff, src_width);
+
+    /* FIXME: use the x parameter of the unpack func once implemented */
+    tmpdestline += 4 * x;
 
     matrix (tmpsrcline, src_width);
 
-    tmpdestline += 4 * x;
-
     /* Here dest and src are both either in AYUV or ARGB
      * TODO: Make the orc version working properly*/
 #define BLENDLOOP(blender,alpha_val,alpha_scale)                                  \
@@ -381,6 +411,7 @@
 
 #undef BLENDLOOP
 
+    /* undo previous pointer adjustments to pass right pointer to g_free */
     tmpdestline -= 4 * x;
 
     /* FIXME
@@ -411,4 +442,10 @@
         gst_video_format_to_string (dinfo->unpack_format));
     return FALSE;
   }
+nothing_to_do:
+  {
+    GST_LOG
+        ("Overlay completely outside the video surface, hence not rendering");
+    return TRUE;
+  }
 }
diff --git a/gst-libs/gst/video/video-chroma.c b/gst-libs/gst/video/video-chroma.c
index 15cf61c..0996f7a 100644
--- a/gst-libs/gst/video/video-chroma.c
+++ b/gst-libs/gst/video/video-chroma.c
@@ -24,8 +24,44 @@
 #include <string.h>
 #include <stdio.h>
 
+#include "video-orc.h"
 #include "video-format.h"
 
+
+/**
+ * SECTION:gstvideochroma
+ * @short_description: Functions and utility object for operating on chroma video planes
+ *
+ * The functions gst_video_chroma_from_string() and gst_video_chroma_to_string() convert
+ * between #GstVideoChromaSite and string descriptions.
+ *
+ * #GstVideoChromaResample is a utility object for resampling chroma planes
+ * and converting between different chroma sampling sitings.
+ *
+ */
+
+#ifndef GST_DISABLE_GST_DEBUG
+#define GST_CAT_DEFAULT ensure_debug_category()
+static GstDebugCategory *
+ensure_debug_category (void)
+{
+  static gsize cat_gonce = 0;
+
+  if (g_once_init_enter (&cat_gonce)) {
+    gsize cat_done;
+
+    cat_done = (gsize) _gst_debug_category_new ("video-chroma", 0,
+        "video-chroma object");
+
+    g_once_init_leave (&cat_gonce, cat_done);
+  }
+
+  return (GstDebugCategory *) cat_gonce;
+}
+#else
+#define ensure_debug_category() /* NOOP */
+#endif /* GST_DISABLE_GST_DEBUG */
+
 typedef struct
 {
   const gchar *name;
@@ -105,7 +141,7 @@
 #define PB3(i)         (l3[3 + 4 * (i)])
 
 #define FILT_1_1(a,b)          ((a) + (b) + 1) >> 1
-#define FILT_1_1_1_1(a,b,c,d)  ((a) + (b) + (c) + (d) + 2) >> 2
+#define FILT_1_3_3_1(a,b,c,d)  ((a) + 3*((b)+(c)) + (d) + 4) >> 3
 
 #define FILT_3_1(a,b)          (3*(a) + (b) + 2) >> 2
 #define FILT_1_3(a,b)          ((a) + 3*(b) + 2) >> 2
@@ -119,7 +155,7 @@
 
 #define FILT_10_3_2_1(a,b,c,d)      (10*(a) + 3*(b) + 2*(c) + (d) + 8) >> 16
 #define FILT_1_2_3_10(a,b,c,d)      ((a) + 2*(b) + 3*(c) + 10*(d) + 8) >> 16
-#define FILT_1_2_3_4_3_2_1(a,b,c,d,e,f,g) ((a) + 2*(b) + 3*(c) + 4*(d) + 3*(e) + 2*(f) + (g) + 8) >> 16
+#define FILT_1_2_3_4_3_2_1(a,b,c,d,e,f,g) ((a) + 2*((b)+(f)) + 3*((c)+(e)) + 4*(d) + (g) + 8) >> 16
 
 /* 2x horizontal upsampling without cositing
  *
@@ -131,9 +167,9 @@
  *  x   x
  *  a   b
  */
-#define MAKE_UPSAMPLE_H2(type)                                          \
+#define MAKE_UPSAMPLE_H2(name,type)                                     \
 static void                                                             \
-video_chroma_up_h2_##type (GstVideoChromaResample *resample,            \
+video_chroma_up_h2_##name (GstVideoChromaResample *resample,            \
     gpointer pixels, gint width)                                        \
 {                                                                       \
   type *p = pixels;                                                     \
@@ -163,16 +199,13 @@
  * b x  x  x
  *   O--O--O-  <---- b
  */
-#define MAKE_UPSAMPLE_V2(type)                                          \
+#define MAKE_UPSAMPLE_V2(name,type)                                     \
 static void                                                             \
-video_chroma_up_v2_##type (GstVideoChromaResample *resample,            \
+video_chroma_up_v2_##name (GstVideoChromaResample *resample,            \
     gpointer lines[], gint width)                                       \
 {                                                                       \
-  gint i;                                                               \
   type *l0 = lines[0];                                                  \
   type *l1 = lines[1];                                                  \
-  type tr0, tr1;                                                        \
-  type tb0, tb1;                                                        \
                                                                         \
   if (resample->h_resample) {                                           \
     resample->h_resample (resample, l0, width);                         \
@@ -180,15 +213,7 @@
       resample->h_resample (resample, l1, width);                       \
   }                                                                     \
   if (l0 != l1) {                                                       \
-    for (i = 0; i < width; i++) {                                       \
-      tr0 = PR0(i), tr1 = PR1(i);                                       \
-      tb0 = PB0(i), tb1 = PB1(i);                                       \
-                                                                        \
-      PR0(i) = FILT_3_1 (tr0, tr1);                                     \
-      PB0(i) = FILT_3_1 (tb0, tb1);                                     \
-      PR1(i) = FILT_1_3 (tr0, tr1);                                     \
-      PB1(i) = FILT_1_3 (tb0, tb1);                                     \
-    }                                                                   \
+    video_orc_chroma_up_v2_##name (l0, l1, l0, l1, width);              \
   }                                                                     \
 }
 /* 2x vertical upsampling interlaced without cositing
@@ -208,9 +233,9 @@
  * d               x  x  x
  *   --------------O--O--O-
  */
-#define MAKE_UPSAMPLE_VI2(type)                                         \
+#define MAKE_UPSAMPLE_VI2(name,type)                                    \
 static void                                                             \
-video_chroma_up_vi2_##type (GstVideoChromaResample *resample,           \
+video_chroma_up_vi2_##name (GstVideoChromaResample *resample,           \
     gpointer lines[], gint width)                                       \
 {                                                                       \
   gint i;                                                               \
@@ -259,10 +284,20 @@
  * x x x x
  * a b c d
  */
-#define MAKE_DOWNSAMPLE_H2(type)                                        \
+#define MAKE_DOWNSAMPLE_H2_ORC(name,type)                               \
 static void                                                             \
-video_chroma_down_h2_##type (GstVideoChromaResample *resample,         \
-    gpointer pixels, gint width)                        \
+video_chroma_down_h2_##name (GstVideoChromaResample *resample,          \
+    gpointer pixels, gint width)                                        \
+{                                                                       \
+  type *p = pixels;                                                     \
+                                                                        \
+  video_orc_chroma_down_h2_##name (p, p, width / 2);                    \
+}
+
+#define MAKE_DOWNSAMPLE_H2(name,type)                                   \
+static void                                                             \
+video_chroma_down_h2_##name (GstVideoChromaResample *resample,          \
+    gpointer pixels, gint width)                                        \
 {                                                                       \
   type *p = pixels;                                                     \
   gint i;                                                               \
@@ -284,29 +319,19 @@
  *   O  O  O
  * d x--x--x-
  */
-#define MAKE_DOWNSAMPLE_V2(type)                                        \
+#define MAKE_DOWNSAMPLE_V2(name,type)                                   \
 static void                                                             \
-video_chroma_down_v2_##type (GstVideoChromaResample *resample,          \
+video_chroma_down_v2_##name (GstVideoChromaResample *resample,          \
     gpointer lines[], gint width)                                       \
 {                                                                       \
-  gint i;                                                               \
   type *l0 = lines[0];                                                  \
   type *l1 = lines[1];                                                  \
                                                                         \
-  if (resample->h_resample) {                                           \
-    resample->h_resample (resample, l0, width);                         \
-    if (l0 != l1)                                                       \
-      resample->h_resample (resample, l1, width);                       \
-  }                                                                     \
-  if (l0 != l1) {                                                       \
-    for (i = 0; i < width; i++) {                                       \
-      type tr0 = PR0(i), tr1 = PR1(i);                                  \
-      type tb0 = PB0(i), tb1 = PB1(i);                                  \
+  if (l0 != l1)                                                         \
+    video_orc_chroma_down_v2_##name (l0, l0, l1, width);                \
                                                                         \
-      PR0(i) = FILT_1_1 (tr0, tr1);                                     \
-      PB0(i) = FILT_1_1 (tb0, tb1);                                     \
-    }                                                                   \
-  }                                                                     \
+  if (resample->h_resample)                                             \
+    resample->h_resample (resample, l0, width);                         \
 }
 /* 2x vertical downsampling interlaced without cositing
  *
@@ -319,9 +344,9 @@
  *                 O  O  O  <---
  * d --------------x--x--x-
  */
-#define MAKE_DOWNSAMPLE_VI2(type)                                       \
+#define MAKE_DOWNSAMPLE_VI2(name,type)                                  \
 static void                                                             \
-video_chroma_down_vi2_##type (GstVideoChromaResample *resample,         \
+video_chroma_down_vi2_##name (GstVideoChromaResample *resample,         \
     gpointer lines[], gint width)                                       \
 {                                                                       \
   /* FIXME */                                                           \
@@ -329,18 +354,18 @@
     resample->h_resample (resample, lines[0], width);                   \
 }
 
-MAKE_UPSAMPLE_H2 (guint16);
-MAKE_UPSAMPLE_H2 (guint8);
-MAKE_UPSAMPLE_V2 (guint16);
-MAKE_UPSAMPLE_V2 (guint8);
-MAKE_UPSAMPLE_VI2 (guint16);
-MAKE_UPSAMPLE_VI2 (guint8);
-MAKE_DOWNSAMPLE_H2 (guint16);
-MAKE_DOWNSAMPLE_H2 (guint8);
-MAKE_DOWNSAMPLE_V2 (guint16);
-MAKE_DOWNSAMPLE_V2 (guint8);
-MAKE_DOWNSAMPLE_VI2 (guint16);
-MAKE_DOWNSAMPLE_VI2 (guint8);
+MAKE_UPSAMPLE_H2 (u16, guint16);
+MAKE_UPSAMPLE_H2 (u8, guint8);
+MAKE_UPSAMPLE_V2 (u16, guint16);
+MAKE_UPSAMPLE_V2 (u8, guint8);
+MAKE_UPSAMPLE_VI2 (u16, guint16);
+MAKE_UPSAMPLE_VI2 (u8, guint8);
+MAKE_DOWNSAMPLE_H2 (u16, guint16);
+MAKE_DOWNSAMPLE_H2_ORC (u8, guint8);
+MAKE_DOWNSAMPLE_V2 (u16, guint16);
+MAKE_DOWNSAMPLE_V2 (u8, guint8);
+MAKE_DOWNSAMPLE_VI2 (u16, guint16);
+MAKE_DOWNSAMPLE_VI2 (u8, guint8);
 
 /* 4x horizontal upsampling without cositing
  *
@@ -353,9 +378,9 @@
  *    x       x
  *    a       b
  */
-#define MAKE_UPSAMPLE_H4(type)                                          \
+#define MAKE_UPSAMPLE_H4(name,type)                                          \
 static void                                                             \
-video_chroma_up_h4_##type (GstVideoChromaResample *resample,           \
+video_chroma_up_h4_##name (GstVideoChromaResample *resample,           \
     gpointer pixels, gint width)                        \
 {                                                                       \
   type *p = pixels;                                                     \
@@ -393,9 +418,9 @@
  *   O--O--O-
  *   O--O--O-
  */
-#define MAKE_UPSAMPLE_V4(type)                                          \
+#define MAKE_UPSAMPLE_V4(name,type)                                          \
 static void                                                             \
-video_chroma_up_v4_##type (GstVideoChromaResample *resample,            \
+video_chroma_up_v4_##name (GstVideoChromaResample *resample,            \
     gpointer lines[], gint width)                                       \
 {                                                                       \
   gint i;                                                               \
@@ -435,9 +460,9 @@
 /* 4x vertical upsampling interlaced without cositing
  *
  */
-#define MAKE_UPSAMPLE_VI4(type)                                         \
+#define MAKE_UPSAMPLE_VI4(name,type)                                         \
 static void                                                             \
-video_chroma_up_vi4_##type (GstVideoChromaResample *resample,           \
+video_chroma_up_vi4_##name (GstVideoChromaResample *resample,           \
     gpointer lines[], gint width)                                       \
 {                                                                       \
   /* FIXME */                                                           \
@@ -448,16 +473,16 @@
 
 /* 4x horizontal downsampling without cositing
  *
- *    +------ (a + b + c + d + 2) >> 2
+ *    +------ (a + 3*b + 3*c + d + 4) >> 3
  *    |
  *    v
  * ---O-------O---
  * x x x x x x x x
  * a b c d e f g h
  */
-#define MAKE_DOWNSAMPLE_H4(type)                                        \
+#define MAKE_DOWNSAMPLE_H4(name,type)                                        \
 static void                                                             \
-video_chroma_down_h4_##type (GstVideoChromaResample *resample,         \
+video_chroma_down_h4_##name (GstVideoChromaResample *resample,         \
     gpointer pixels, gint width)                        \
 {                                                                       \
   type *p = pixels;                                                     \
@@ -467,8 +492,8 @@
     type tr0 = PR(i), tr1 = PR(i+1), tr2 = PR(i+2), tr3 = PR(i+3);      \
     type tb0 = PB(i), tb1 = PB(i+1), tb2 = PB(i+2), tb3 = PB(i+3);      \
                                                                         \
-    PR(i) = FILT_1_1_1_1 (tr0, tr1, tr2, tr3);                          \
-    PB(i) = FILT_1_1_1_1 (tb0, tb1, tb2, tb3);                          \
+    PR(i) = FILT_1_3_3_1 (tr0, tr1, tr2, tr3);                          \
+    PB(i) = FILT_1_3_3_1 (tb0, tb1, tb2, tb3);                          \
   }                                                                     \
 }
 
@@ -476,7 +501,7 @@
  *
  * a x--x--x-
  * b x--x--x-
- *   O  O  O   <---- (a + b + c + d + 2) >> 2
+ *   O  O  O   <---- (a + 3*b + 3*c + d + 4) >> 4
  * c x--x--x-
  * d x--x--x-
  * e x--x--x-
@@ -485,42 +510,27 @@
  * g x--x--x-
  * h x--x--x-
  */
-#define MAKE_DOWNSAMPLE_V4(type)                                        \
+#define MAKE_DOWNSAMPLE_V4(name,type)                               \
 static void                                                             \
-video_chroma_down_v4_##type (GstVideoChromaResample *resample,          \
+video_chroma_down_v4_##name (GstVideoChromaResample *resample,          \
     gpointer lines[], gint width)                                       \
 {                                                                       \
-  gint i;                                                               \
   type *l0 = lines[0];                                                  \
   type *l1 = lines[1];                                                  \
   type *l2 = lines[2];                                                  \
   type *l3 = lines[3];                                                  \
                                                                         \
-  if (resample->h_resample) {                                           \
-    resample->h_resample (resample, l0, width);                         \
-    if (l0 != l1)                                                       \
-      resample->h_resample (resample, l1, width);                       \
-    if (l1 != l2)                                                       \
-      resample->h_resample (resample, l2, width);                       \
-    if (l2 != l3)                                                       \
-      resample->h_resample (resample, l3, width);                       \
-  }                                                                     \
-  for (i = 0; i < width; i++) {                                         \
-    type tr0 = PR0(i), tr1 = PR1(i);                                    \
-    type tr2 = PR2(i), tr3 = PR3(i);                                    \
-    type tb0 = PB0(i), tb1 = PB1(i);                                    \
-    type tb2 = PB2(i), tb3 = PB3(i);                                    \
+  video_orc_chroma_down_v4_##name(l0, l0, l1, l2, l3, width);           \
                                                                         \
-    PR0(i) = FILT_1_1_1_1 (tr0, tr1, tr2, tr3);                         \
-    PB0(i) = FILT_1_1_1_1 (tb0, tb1, tb2, tb3);                         \
-  }                                                                     \
+  if (resample->h_resample)                                             \
+    resample->h_resample (resample, l0, width);                         \
 }
 /* 4x vertical downsampling interlaced without cositing
  *
  */
-#define MAKE_DOWNSAMPLE_VI4(type)                                       \
+#define MAKE_DOWNSAMPLE_VI4(name,type)                                       \
 static void                                                             \
-video_chroma_down_vi4_##type (GstVideoChromaResample *resample,         \
+video_chroma_down_vi4_##name (GstVideoChromaResample *resample,         \
     gpointer lines[], gint width)                                       \
 {                                                                       \
   /* FIXME */                                                           \
@@ -529,18 +539,18 @@
   }                                                                     \
 }
 
-MAKE_UPSAMPLE_H4 (guint16);
-MAKE_UPSAMPLE_H4 (guint8);
-MAKE_UPSAMPLE_V4 (guint16);
-MAKE_UPSAMPLE_V4 (guint8);
-MAKE_UPSAMPLE_VI4 (guint16);
-MAKE_UPSAMPLE_VI4 (guint8);
-MAKE_DOWNSAMPLE_H4 (guint16);
-MAKE_DOWNSAMPLE_H4 (guint8);
-MAKE_DOWNSAMPLE_V4 (guint16);
-MAKE_DOWNSAMPLE_V4 (guint8);
-MAKE_DOWNSAMPLE_VI4 (guint16);
-MAKE_DOWNSAMPLE_VI4 (guint8);
+MAKE_UPSAMPLE_H4 (u16, guint16);
+MAKE_UPSAMPLE_H4 (u8, guint8);
+MAKE_UPSAMPLE_V4 (u16, guint16);
+MAKE_UPSAMPLE_V4 (u8, guint8);
+MAKE_UPSAMPLE_VI4 (u16, guint16);
+MAKE_UPSAMPLE_VI4 (u8, guint8);
+MAKE_DOWNSAMPLE_H4 (u16, guint16);
+MAKE_DOWNSAMPLE_H4 (u8, guint8);
+MAKE_DOWNSAMPLE_V4 (u16, guint16);
+MAKE_DOWNSAMPLE_V4 (u8, guint8);
+MAKE_DOWNSAMPLE_VI4 (u16, guint16);
+MAKE_DOWNSAMPLE_VI4 (u8, guint8);
 
 /* 2x horizontal upsampling with cositing
  *
@@ -551,9 +561,19 @@
  * x   x
  * a   b
  */
-#define MAKE_UPSAMPLE_H2_CS(type)                                       \
+#define MAKE_UPSAMPLE_H2_CS_ORC(name,type)                              \
 static void                                                             \
-video_chroma_up_h2_cs_##type (GstVideoChromaResample *resample,         \
+video_chroma_up_h2_cs_##name (GstVideoChromaResample *resample,         \
+    gpointer pixels, gint width)                                        \
+{                                                                       \
+  type *p = pixels;                                                     \
+  /* ORC version is slower */                                           \
+  video_orc_chroma_up_h2_cs_##name (p, p, p, width-1);                  \
+}
+
+#define MAKE_UPSAMPLE_H2_CS(name,type)                                  \
+static void                                                             \
+video_chroma_up_h2_cs_##name (GstVideoChromaResample *resample,         \
     gpointer pixels, gint width)                                        \
 {                                                                       \
   type *p = pixels;                                                     \
@@ -571,9 +591,9 @@
  * b x O--O--O-
  *     O--O--O-
  */
-#define MAKE_UPSAMPLE_V2_CS(type)                                       \
+#define MAKE_UPSAMPLE_V2_CS(name,type)                                       \
 static void                                                             \
-video_chroma_up_v2_cs_##type (GstVideoChromaResample *resample,         \
+video_chroma_up_v2_cs_##name (GstVideoChromaResample *resample,         \
     gpointer lines[], gint width)                                       \
 {                                                                       \
   /* FIXME */                                                           \
@@ -584,9 +604,9 @@
 /* 2x vertical upsampling interlaced with cositing
  *
  */
-#define MAKE_UPSAMPLE_VI2_CS(type)                                      \
+#define MAKE_UPSAMPLE_VI2_CS(name,type)                                      \
 static void                                                             \
-video_chroma_up_vi2_cs_##type (GstVideoChromaResample *resample,        \
+video_chroma_up_vi2_cs_##name (GstVideoChromaResample *resample,        \
     gpointer lines[], gint width)                                       \
 {                                                                       \
   /* FIXME */                                                           \
@@ -604,9 +624,9 @@
  * x x x x x x
  * a b c d e f
  */
-#define MAKE_DOWNSAMPLE_H2_CS(type)                                     \
+#define MAKE_DOWNSAMPLE_H2_CS(name,type)                                     \
 static void                                                             \
-video_chroma_down_h2_cs_##type (GstVideoChromaResample *resample,       \
+video_chroma_down_h2_cs_##name (GstVideoChromaResample *resample,       \
     gpointer pixels, gint width)                                        \
 {                                                                       \
   type *p = pixels;                                                     \
@@ -636,9 +656,9 @@
  * e x O--O--O-
  * f x --------
  */
-#define MAKE_DOWNSAMPLE_V2_CS(type)                                     \
+#define MAKE_DOWNSAMPLE_V2_CS(name,type)                                     \
 static void                                                             \
-video_chroma_down_v2_cs_##type (GstVideoChromaResample *resample,       \
+video_chroma_down_v2_cs_##name (GstVideoChromaResample *resample,       \
     gpointer lines[], gint width)                                       \
 {                                                                       \
   /* FIXME */                                                           \
@@ -649,9 +669,9 @@
 /* 2x vertical downsampling interlaced with cositing
  *
  */
-#define MAKE_DOWNSAMPLE_VI2_CS(type)                                    \
+#define MAKE_DOWNSAMPLE_VI2_CS(name,type)                                    \
 static void                                                             \
-video_chroma_down_vi2_cs_##type (GstVideoChromaResample *resample,      \
+video_chroma_down_vi2_cs_##name (GstVideoChromaResample *resample,      \
     gpointer lines[], gint width)                                       \
 {                                                                       \
   /* FIXME */                                                           \
@@ -660,18 +680,18 @@
   }                                                                     \
 }
 
-MAKE_UPSAMPLE_H2_CS (guint16);
-MAKE_UPSAMPLE_H2_CS (guint8);
-MAKE_UPSAMPLE_V2_CS (guint16);
-MAKE_UPSAMPLE_V2_CS (guint8);
-MAKE_UPSAMPLE_VI2_CS (guint16);
-MAKE_UPSAMPLE_VI2_CS (guint8);
-MAKE_DOWNSAMPLE_H2_CS (guint16);
-MAKE_DOWNSAMPLE_H2_CS (guint8);
-MAKE_DOWNSAMPLE_V2_CS (guint16);
-MAKE_DOWNSAMPLE_V2_CS (guint8);
-MAKE_DOWNSAMPLE_VI2_CS (guint16);
-MAKE_DOWNSAMPLE_VI2_CS (guint8);
+MAKE_UPSAMPLE_H2_CS (u16, guint16);
+MAKE_UPSAMPLE_H2_CS (u8, guint8);
+MAKE_UPSAMPLE_V2_CS (u16, guint16);
+MAKE_UPSAMPLE_V2_CS (u8, guint8);
+MAKE_UPSAMPLE_VI2_CS (u16, guint16);
+MAKE_UPSAMPLE_VI2_CS (u8, guint8);
+MAKE_DOWNSAMPLE_H2_CS (u16, guint16);
+MAKE_DOWNSAMPLE_H2_CS (u8, guint8);
+MAKE_DOWNSAMPLE_V2_CS (u16, guint16);
+MAKE_DOWNSAMPLE_V2_CS (u8, guint8);
+MAKE_DOWNSAMPLE_VI2_CS (u16, guint16);
+MAKE_DOWNSAMPLE_VI2_CS (u8, guint8);
 
 /* 4x horizontal upsampling with cositing
  *
@@ -683,9 +703,9 @@
  * x       x
  * a       b
  */
-#define MAKE_UPSAMPLE_H4_CS(type)                                       \
+#define MAKE_UPSAMPLE_H4_CS(name,type)                                       \
 static void                                                             \
-video_chroma_up_h4_cs_##type (GstVideoChromaResample *resample,        \
+video_chroma_up_h4_cs_##name (GstVideoChromaResample *resample,        \
     gpointer pixels, gint width)                        \
 {                                                                       \
   type *p = pixels;                                                        \
@@ -712,9 +732,9 @@
  * b x O--O--O-
  *     O--O--O-
  */
-#define MAKE_UPSAMPLE_V4_CS(type)                                       \
+#define MAKE_UPSAMPLE_V4_CS(name,type)                                       \
 static void                                                             \
-video_chroma_up_v4_cs_##type (GstVideoChromaResample *resample,         \
+video_chroma_up_v4_cs_##name (GstVideoChromaResample *resample,         \
     gpointer lines[], gint width)                                       \
 {                                                                       \
   /* FIXME */                                                           \
@@ -725,9 +745,9 @@
 /* 4x vertical upsampling interlaced with cositing
  *
  */
-#define MAKE_UPSAMPLE_VI4_CS(type)                                      \
+#define MAKE_UPSAMPLE_VI4_CS(name,type)                                      \
 static void                                                             \
-video_chroma_up_vi4_cs_##type (GstVideoChromaResample *resample,        \
+video_chroma_up_vi4_cs_##name (GstVideoChromaResample *resample,        \
     gpointer lines[], gint width)                                       \
 {                                                                       \
   /* FIXME */                                                           \
@@ -744,9 +764,9 @@
  * x x x x x x x x
  * a b c d e f g h
  */
-#define MAKE_DOWNSAMPLE_H4_CS(type)                                     \
+#define MAKE_DOWNSAMPLE_H4_CS(name,type)                                     \
 static void                                                             \
-video_chroma_down_h4_cs_##type (GstVideoChromaResample *resample,      \
+video_chroma_down_h4_cs_##name (GstVideoChromaResample *resample,      \
     gpointer pixels, gint width)                        \
 {                                                                       \
   type *p = pixels;                                                     \
@@ -780,9 +800,9 @@
  * i x O--O--O-
  * j x --------
  */
-#define MAKE_DOWNSAMPLE_V4_CS(type)                                     \
+#define MAKE_DOWNSAMPLE_V4_CS(name,type)                                     \
 static void                                                             \
-video_chroma_down_v4_cs_##type (GstVideoChromaResample *resample,       \
+video_chroma_down_v4_cs_##name (GstVideoChromaResample *resample,       \
     gpointer lines[], gint width)                                       \
 {                                                                       \
   /* FIXME */                                                           \
@@ -793,9 +813,9 @@
 /* 4x vertical downsampling interlaced with cositing
  *
  */
-#define MAKE_DOWNSAMPLE_VI4_CS(type)                                    \
+#define MAKE_DOWNSAMPLE_VI4_CS(name,type)                                    \
 static void                                                             \
-video_chroma_down_vi4_cs_##type (GstVideoChromaResample *resample,      \
+video_chroma_down_vi4_cs_##name (GstVideoChromaResample *resample,      \
     gpointer lines[], gint width)                                       \
 {                                                                       \
   /* FIXME */                                                           \
@@ -804,18 +824,18 @@
   }                                                                     \
 }
 
-MAKE_UPSAMPLE_H4_CS (guint16);
-MAKE_UPSAMPLE_H4_CS (guint8);
-MAKE_UPSAMPLE_V4_CS (guint16);
-MAKE_UPSAMPLE_V4_CS (guint8);
-MAKE_UPSAMPLE_VI4_CS (guint16);
-MAKE_UPSAMPLE_VI4_CS (guint8);
-MAKE_DOWNSAMPLE_H4_CS (guint16);
-MAKE_DOWNSAMPLE_H4_CS (guint8);
-MAKE_DOWNSAMPLE_V4_CS (guint16);
-MAKE_DOWNSAMPLE_V4_CS (guint8);
-MAKE_DOWNSAMPLE_VI4_CS (guint16);
-MAKE_DOWNSAMPLE_VI4_CS (guint8);
+MAKE_UPSAMPLE_H4_CS (u16, guint16);
+MAKE_UPSAMPLE_H4_CS (u8, guint8);
+MAKE_UPSAMPLE_V4_CS (u16, guint16);
+MAKE_UPSAMPLE_V4_CS (u8, guint8);
+MAKE_UPSAMPLE_VI4_CS (u16, guint16);
+MAKE_UPSAMPLE_VI4_CS (u8, guint8);
+MAKE_DOWNSAMPLE_H4_CS (u16, guint16);
+MAKE_DOWNSAMPLE_H4_CS (u8, guint8);
+MAKE_DOWNSAMPLE_V4_CS (u16, guint16);
+MAKE_DOWNSAMPLE_V4_CS (u8, guint8);
+MAKE_DOWNSAMPLE_VI4_CS (u16, guint16);
+MAKE_DOWNSAMPLE_VI4_CS (u8, guint8);
 
 typedef struct
 {
@@ -825,22 +845,22 @@
 
 static const HorizResampler h_resamplers[] = {
   {NULL},
-  {video_chroma_up_h2_guint8},
-  {video_chroma_down_h2_guint8},
-  {video_chroma_up_h2_guint16},
-  {video_chroma_down_h2_guint16},
-  {video_chroma_up_h2_cs_guint8},
-  {video_chroma_down_h2_cs_guint8},
-  {video_chroma_up_h2_cs_guint16},
-  {video_chroma_down_h2_cs_guint16},
-  {video_chroma_up_h4_guint8},
-  {video_chroma_down_h4_guint8},
-  {video_chroma_up_h4_guint16},
-  {video_chroma_down_h4_guint16},
-  {video_chroma_up_h4_cs_guint8},
-  {video_chroma_down_h4_cs_guint8},
-  {video_chroma_up_h4_cs_guint16},
-  {video_chroma_down_h4_cs_guint16}
+  {video_chroma_up_h2_u8},
+  {video_chroma_down_h2_u8},
+  {video_chroma_up_h2_u16},
+  {video_chroma_down_h2_u16},
+  {video_chroma_up_h2_cs_u8},
+  {video_chroma_down_h2_cs_u8},
+  {video_chroma_up_h2_cs_u16},
+  {video_chroma_down_h2_cs_u16},
+  {video_chroma_up_h4_u8},
+  {video_chroma_down_h4_u8},
+  {video_chroma_up_h4_u16},
+  {video_chroma_down_h4_u16},
+  {video_chroma_up_h4_cs_u8},
+  {video_chroma_down_h4_cs_u8},
+  {video_chroma_up_h4_cs_u16},
+  {video_chroma_down_h4_cs_u16}
 };
 
 typedef struct
@@ -861,46 +881,46 @@
 
 static const VertResampler v_resamplers[] = {
   {video_chroma_none, 1, 0},
-  {video_chroma_up_v2_guint8, 2, -1},
-  {video_chroma_down_v2_guint8, 2, 0},
+  {video_chroma_up_v2_u8, 2, -1},
+  {video_chroma_down_v2_u8, 2, 0},
   /* 16 bits */
-  {video_chroma_up_v2_guint16, 2, -1},
-  {video_chroma_down_v2_guint16, 2, 0},
+  {video_chroma_up_v2_u16, 2, -1},
+  {video_chroma_down_v2_u16, 2, 0},
   /* cosited */
-  {video_chroma_up_v2_cs_guint8, 1, 0}, /* IMPLEMENT ME */
-  {video_chroma_down_v2_cs_guint8, 1, 0},       /* IMPLEMENT ME */
-  {video_chroma_up_v2_cs_guint16, 1, 0},        /* IMPLEMENT ME */
-  {video_chroma_down_v2_cs_guint16, 1, 0},      /* IMPLEMENT ME */
+  {video_chroma_up_v2_cs_u8, 1, 0},     /* IMPLEMENT ME */
+  {video_chroma_down_v2_cs_u8, 1, 0},   /* IMPLEMENT ME */
+  {video_chroma_up_v2_cs_u16, 1, 0},    /* IMPLEMENT ME */
+  {video_chroma_down_v2_cs_u16, 1, 0},  /* IMPLEMENT ME */
   /* 4x */
-  {video_chroma_up_v4_guint8, 4, -2},
-  {video_chroma_down_v4_guint8, 4, 0},
-  {video_chroma_up_v4_guint16, 4, -2},
-  {video_chroma_down_v4_guint16, 4, 0},
-  {video_chroma_up_v4_cs_guint8, 1, 0}, /* IMPLEMENT ME */
-  {video_chroma_down_v4_cs_guint8, 1, 0},       /* IMPLEMENT ME */
-  {video_chroma_up_v4_cs_guint16, 1, 0},        /* IMPLEMENT ME */
-  {video_chroma_down_v4_cs_guint16, 1, 0},      /* IMPLEMENT ME */
+  {video_chroma_up_v4_u8, 4, -2},
+  {video_chroma_down_v4_u8, 4, 0},
+  {video_chroma_up_v4_u16, 4, -2},
+  {video_chroma_down_v4_u16, 4, 0},
+  {video_chroma_up_v4_cs_u8, 1, 0},     /* IMPLEMENT ME */
+  {video_chroma_down_v4_cs_u8, 1, 0},   /* IMPLEMENT ME */
+  {video_chroma_up_v4_cs_u16, 1, 0},    /* IMPLEMENT ME */
+  {video_chroma_down_v4_cs_u16, 1, 0},  /* IMPLEMENT ME */
   /* interlaced */
-  {video_chroma_up_vi2_guint8, 4, -2},
-  {video_chroma_down_vi2_guint8, 1, 0}, /* IMPLEMENT ME */
-  {video_chroma_up_vi2_guint16, 4, -2},
-  {video_chroma_down_vi2_guint16, 1, 0},        /* IMPLEMENT ME */
-  {video_chroma_up_vi2_cs_guint8, 1, 0},        /* IMPLEMENT ME */
-  {video_chroma_down_vi2_cs_guint8, 1, 0},      /* IMPLEMENT ME */
-  {video_chroma_up_vi2_cs_guint16, 1, 0},       /* IMPLEMENT ME */
-  {video_chroma_down_vi2_cs_guint16, 1, 0},     /* IMPLEMENT ME */
-  {video_chroma_up_vi4_guint8, 1, 0},   /* IMPLEMENT ME */
-  {video_chroma_down_vi4_guint8, 1, 0}, /* IMPLEMENT ME */
-  {video_chroma_up_vi4_guint16, 1, 0},  /* IMPLEMENT ME */
-  {video_chroma_down_vi4_guint16, 1, 0},        /* IMPLEMENT ME */
-  {video_chroma_up_vi4_cs_guint8, 1, 0},        /* IMPLEMENT ME */
-  {video_chroma_down_vi4_cs_guint8, 1, 0},      /* IMPLEMENT ME */
-  {video_chroma_up_vi4_cs_guint16, 1, 0},       /* IMPLEMENT ME */
-  {video_chroma_down_vi4_cs_guint16, 1, 0},     /* IMPLEMENT ME */
+  {video_chroma_up_vi2_u8, 4, -2},
+  {video_chroma_down_vi2_u8, 1, 0},     /* IMPLEMENT ME */
+  {video_chroma_up_vi2_u16, 4, -2},
+  {video_chroma_down_vi2_u16, 1, 0},    /* IMPLEMENT ME */
+  {video_chroma_up_vi2_cs_u8, 1, 0},    /* IMPLEMENT ME */
+  {video_chroma_down_vi2_cs_u8, 1, 0},  /* IMPLEMENT ME */
+  {video_chroma_up_vi2_cs_u16, 1, 0},   /* IMPLEMENT ME */
+  {video_chroma_down_vi2_cs_u16, 1, 0}, /* IMPLEMENT ME */
+  {video_chroma_up_vi4_u8, 1, 0},       /* IMPLEMENT ME */
+  {video_chroma_down_vi4_u8, 1, 0},     /* IMPLEMENT ME */
+  {video_chroma_up_vi4_u16, 1, 0},      /* IMPLEMENT ME */
+  {video_chroma_down_vi4_u16, 1, 0},    /* IMPLEMENT ME */
+  {video_chroma_up_vi4_cs_u8, 1, 0},    /* IMPLEMENT ME */
+  {video_chroma_down_vi4_cs_u8, 1, 0},  /* IMPLEMENT ME */
+  {video_chroma_up_vi4_cs_u16, 1, 0},   /* IMPLEMENT ME */
+  {video_chroma_down_vi4_cs_u16, 1, 0}, /* IMPLEMENT ME */
 };
 
 /**
- * gst_video_chroma_resample_new:
+ * gst_video_chroma_resample_new: (skip)
  * @method: a #GstVideoChromaMethod
  * @site: a #GstVideoChromaSite
  * @flags: #GstVideoChromaFlags
@@ -909,7 +929,7 @@
  * @v_factor: vertical resampling factor
  *
  * Create a new resampler object for the given parameters. When @h_factor or
- * @v_factoris > 0, upsampling will be used, otherwise subsampling is
+ * @v_factor is > 0, upsampling will be used, otherwise subsampling is
  * performed.
  *
  * Returns: a new #GstVideoChromaResample that should be freed with
@@ -941,6 +961,9 @@
     h_index =
         ((ABS (h_factor) - 1) * 8) + (cosite ? 4 : 0) + (bits ==
         16 ? 2 : 0) + (h_factor < 0 ? 1 : 0) + 1;
+
+  GST_DEBUG ("h_resample %d, factor %d, cosite %d", h_index, h_factor, cosite);
+
   cosite = (site & GST_VIDEO_CHROMA_SITE_V_COSITED ? 1 : 0);
   if (v_factor == 0)
     v_index = 0;
@@ -949,6 +972,11 @@
         ((ABS (v_factor) - 1) * 8) + (cosite ? 4 : 0) + (bits ==
         16 ? 2 : 0) + (v_factor < 0 ? 1 : 0) + 1;
 
+  if (flags & GST_VIDEO_CHROMA_FLAG_INTERLACED)
+    v_index += 16;
+
+  GST_DEBUG ("v_resample %d, factor %d, cosite %d", v_index, v_factor, cosite);
+
   result = g_slice_new (GstVideoChromaResample);
   result->method = method;
   result->site = site;
@@ -961,8 +989,8 @@
   result->n_lines = v_resamplers[v_index].n_lines;
   result->offset = v_resamplers[v_index].offset;
 
-  GST_DEBUG ("select resample %p %d, factor %d, "
-      "cosite %d, bits %d", result, h_index, h_factor, cosite, bits);
+  GST_DEBUG ("resample %p, bits %d, n_lines %u, offset %d", result, bits,
+      result->n_lines, result->offset);
 
   return result;
 }
diff --git a/gst-libs/gst/video/video-color.c b/gst-libs/gst/video/video-color.c
index 7a576d5..519962d 100644
--- a/gst-libs/gst/video/video-color.c
+++ b/gst-libs/gst/video/video-color.c
@@ -25,9 +25,32 @@
 
 #include <string.h>
 #include <stdio.h>
+#include <math.h>
 
 #include "video-color.h"
 
+#ifndef GST_DISABLE_GST_DEBUG
+#define GST_CAT_DEFAULT ensure_debug_category()
+static GstDebugCategory *
+ensure_debug_category (void)
+{
+  static gsize cat_gonce = 0;
+
+  if (g_once_init_enter (&cat_gonce)) {
+    gsize cat_done;
+
+    cat_done = (gsize) _gst_debug_category_new ("video-color", 0,
+        "video-color object");
+
+    g_once_init_leave (&cat_gonce, cat_done);
+  }
+
+  return (GstDebugCategory *) cat_gonce;
+}
+#else
+#define ensure_debug_category() /* NOOP */
+#endif /* GST_DISABLE_GST_DEBUG */
+
 typedef struct
 {
   const gchar *name;
@@ -45,12 +68,14 @@
 #define DEFAULT_RGB     3
 #define DEFAULT_GRAY    4
 #define DEFAULT_UNKNOWN 5
+#define DEFAULT_YUV_UHD 6
 
 static const ColorimetryInfo colorimetry[] = {
-  MAKE_COLORIMETRY (BT601, _16_235, BT601, BT709, BT470M),
+  MAKE_COLORIMETRY (BT601, _16_235, BT601, BT709, SMPTE170M),
   MAKE_COLORIMETRY (BT709, _16_235, BT709, BT709, BT709),
   MAKE_COLORIMETRY (SMPTE240M, _16_235, SMPTE240M, SMPTE240M, SMPTE240M),
-  MAKE_COLORIMETRY (NONAME, _0_255, RGB, UNKNOWN, UNKNOWN),
+  MAKE_COLORIMETRY (SRGB, _0_255, RGB, SRGB, BT709),
+  MAKE_COLORIMETRY (BT2020, _16_235, BT2020, BT2020_12, BT2020),
   MAKE_COLORIMETRY (NONAME, _0_255, BT601, UNKNOWN, UNKNOWN),
   MAKE_COLORIMETRY (NONAME, _UNKNOWN, UNKNOWN, UNKNOWN, UNKNOWN),
 };
@@ -67,10 +92,12 @@
   return NULL;
 }
 
-#define IS_EQUAL(ci,i) (((ci)->color.range == (i)->range) && \
-                        ((ci)->color.matrix == (i)->matrix) && \
-                        ((ci)->color.transfer == (i)->transfer) && \
-                        ((ci)->color.primaries == (i)->primaries))
+#define CI_IS_EQUAL(ci,i) (((ci)->range == (i)->range) && \
+                        ((ci)->matrix == (i)->matrix) && \
+                        ((ci)->transfer == (i)->transfer) && \
+                        ((ci)->primaries == (i)->primaries))
+
+#define IS_EQUAL(ci,i) CI_IS_EQUAL(&(ci)->color, (i))
 
 #define IS_UNKNOWN(ci) (IS_EQUAL (&colorimetry[DEFAULT_UNKNOWN], ci))
 
@@ -89,9 +116,11 @@
     const gchar * color)
 {
   const ColorimetryInfo *ci;
+  gboolean res = FALSE;
 
   if ((ci = gst_video_get_colorimetry (color))) {
     *cinfo = ci->color;
+    res = TRUE;
   } else {
     gint r, m, t, p;
 
@@ -100,9 +129,10 @@
       cinfo->matrix = m;
       cinfo->transfer = t;
       cinfo->primaries = p;
+      res = TRUE;
     }
   }
-  return TRUE;
+  return res;
 }
 
 /**
@@ -215,21 +245,31 @@
   GST_DEBUG ("offset: %d %d %d %d", offset[0], offset[1], offset[2], offset[3]);
 }
 
-
-#if 0
-typedef struct
+/**
+ * gst_video_colorimetry_is_equal:
+ * @cinfo: a #GstVideoColorimetry
+ * @other: another #GstVideoColorimetry
+ *
+ * Compare the 2 colorimetry sets for equality
+ *
+ * Returns: #TRUE if @cinfo and @other are equal.
+ *
+ * Since: 1.6
+ */
+gboolean
+gst_video_colorimetry_is_equal (const GstVideoColorimetry * cinfo,
+    const GstVideoColorimetry * other)
 {
-  GstVideoColorPrimaries primaries;
-  gdouble xW, yW;
-  gdouble xR, yR;
-  gdouble xG, yG;
-  gdouble xB, yB;
-} PrimariesInfo;
+  g_return_val_if_fail (cinfo != NULL, FALSE);
+  g_return_val_if_fail (other != NULL, FALSE);
+
+  return CI_IS_EQUAL (cinfo, other);
+}
 
 #define WP_C    0.31006, 0.31616
 #define WP_D65  0.31271, 0.32902
 
-static const PrimariesInfo primaries[] = {
+static const GstVideoColorPrimariesInfo color_primaries[] = {
   {GST_VIDEO_COLOR_PRIMARIES_UNKNOWN, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0},
   {GST_VIDEO_COLOR_PRIMARIES_BT709, WP_D65, 0.64, 0.33, 0.30, 0.60, 0.15, 0.06},
   {GST_VIDEO_COLOR_PRIMARIES_BT470M, WP_C, 0.67, 0.33, 0.21, 0.71, 0.14, 0.08},
@@ -240,6 +280,270 @@
   {GST_VIDEO_COLOR_PRIMARIES_SMPTE240M, WP_D65, 0.63, 0.34, 0.31, 0.595, 0.155,
       0.07},
   {GST_VIDEO_COLOR_PRIMARIES_FILM, WP_C, 0.681, 0.319, 0.243, 0.692, 0.145,
-      0.049}
+      0.049},
+  {GST_VIDEO_COLOR_PRIMARIES_BT2020, WP_D65, 0.708, 0.292, 0.170, 0.797, 0.131,
+      0.046}
 };
-#endif
+
+/**
+ * gst_video_color_primaries_get_info:
+ * @primaries: a #GstVideoColorPrimaries
+ *
+ * Get information about the chromaticity coordinates of @primaries.
+ *
+ * Returns: a #GstVideoColorPrimariesInfo for @primaries.
+ *
+ * Since: 1.6
+ */
+const GstVideoColorPrimariesInfo *
+gst_video_color_primaries_get_info (GstVideoColorPrimaries primaries)
+{
+  g_return_val_if_fail (primaries <
+      (GstVideoColorPrimaries) G_N_ELEMENTS (color_primaries), NULL);
+
+  return &color_primaries[primaries];
+}
+
+/**
+ * gst_video_color_matrix_get_Kr_Kb:
+ * @matrix: a #GstVideoColorMatrix
+ * @Kr: result red channel coefficient
+ * @Kb: result blue channel coefficient
+ *
+ * Get the coefficients used to convert between Y'PbPr and R'G'B' using @matrix.
+ *
+ * When:
+ *
+ * |[
+ *   0.0 <= [Y',R',G',B'] <= 1.0)
+ *   (-0.5 <= [Pb,Pr] <= 0.5)
+ * ]|
+ *
+ * the general conversion is given by:
+ *
+ * |[
+ *   Y' = Kr*R' + (1-Kr-Kb)*G' + Kb*B'
+ *   Pb = (B'-Y')/(2*(1-Kb))
+ *   Pr = (R'-Y')/(2*(1-Kr))
+ * ]|
+ *
+ * and the other way around:
+ *
+ * |[
+ *   R' = Y' + Cr*2*(1-Kr)
+ *   G' = Y' - Cb*2*(1-Kb)*Kb/(1-Kr-Kb) - Cr*2*(1-Kr)*Kr/(1-Kr-Kb)
+ *   B' = Y' + Cb*2*(1-Kb)
+ * ]|
+ *
+ * Returns: TRUE if @matrix was a YUV color format and @Kr and @Kb contain valid
+ *    values.
+ *
+ * Since: 1.6
+ */
+gboolean
+gst_video_color_matrix_get_Kr_Kb (GstVideoColorMatrix matrix, gdouble * Kr,
+    gdouble * Kb)
+{
+  gboolean res = TRUE;
+
+  switch (matrix) {
+      /* RGB */
+    default:
+    case GST_VIDEO_COLOR_MATRIX_RGB:
+      res = FALSE;
+      break;
+      /* YUV */
+    case GST_VIDEO_COLOR_MATRIX_FCC:
+      *Kr = 0.30;
+      *Kb = 0.11;
+      break;
+    case GST_VIDEO_COLOR_MATRIX_BT709:
+      *Kr = 0.2126;
+      *Kb = 0.0722;
+      break;
+    case GST_VIDEO_COLOR_MATRIX_BT601:
+      *Kr = 0.2990;
+      *Kb = 0.1140;
+      break;
+    case GST_VIDEO_COLOR_MATRIX_SMPTE240M:
+      *Kr = 0.212;
+      *Kb = 0.087;
+      break;
+    case GST_VIDEO_COLOR_MATRIX_BT2020:
+      *Kr = 0.2627;
+      *Kb = 0.0593;
+      break;
+  }
+  GST_DEBUG ("matrix: %d, Kr %f, Kb %f", matrix, *Kr, *Kb);
+
+  return res;
+}
+
+/**
+ * gst_video_color_transfer_encode:
+ * @func: a #GstVideoTransferFunction
+ * @val: a value
+ *
+ * Convert @val to its gamma encoded value.
+ *
+ * For a linear value L in the range [0..1], conversion to the non-linear
+ * (gamma encoded) L' is in general performed with a power function like:
+ *
+ * |[
+ *    L' = L ^ (1 / gamma)
+ * ]|
+ *
+ * Depending on @func, different formulas might be applied. Some formulas
+ * encode a linear segment in the lower range.
+ *
+ * Returns: the gamme encoded value of @val
+ *
+ * Since: 1.6
+ */
+gdouble
+gst_video_color_transfer_encode (GstVideoTransferFunction func, gdouble val)
+{
+  gdouble res;
+
+  switch (func) {
+    case GST_VIDEO_TRANSFER_UNKNOWN:
+    case GST_VIDEO_TRANSFER_GAMMA10:
+    default:
+      res = val;
+      break;
+    case GST_VIDEO_TRANSFER_GAMMA18:
+      res = pow (val, 1.0 / 1.8);
+      break;
+    case GST_VIDEO_TRANSFER_GAMMA20:
+      res = pow (val, 1.0 / 2.0);
+      break;
+    case GST_VIDEO_TRANSFER_GAMMA22:
+      res = pow (val, 1.0 / 2.2);
+      break;
+    case GST_VIDEO_TRANSFER_BT709:
+      if (val < 0.018)
+        res = 4.5 * val;
+      else
+        res = 1.099 * pow (val, 0.45) - 0.099;
+      break;
+    case GST_VIDEO_TRANSFER_SMPTE240M:
+      if (val < 0.0228)
+        res = val * 4.0;
+      else
+        res = 1.1115 * pow (val, 0.45) - 0.1115;
+      break;
+    case GST_VIDEO_TRANSFER_SRGB:
+      if (val <= 0.0031308)
+        res = 12.92 * val;
+      else
+        res = 1.055 * pow (val, 1.0 / 2.4) - 0.055;
+      break;
+    case GST_VIDEO_TRANSFER_GAMMA28:
+      res = pow (val, 1 / 2.8);
+      break;
+    case GST_VIDEO_TRANSFER_LOG100:
+      if (val < 0.01)
+        res = 0.0;
+      else
+        res = 1.0 + log10 (val) / 2.0;
+      break;
+    case GST_VIDEO_TRANSFER_LOG316:
+      if (val < 0.0031622777)
+        res = 0.0;
+      else
+        res = 1.0 + log10 (val) / 2.5;
+      break;
+    case GST_VIDEO_TRANSFER_BT2020_12:
+      if (val < 0.0181)
+        res = 4.5 * val;
+      else
+        res = 1.0993 * pow (val, 0.45) - 0.0993;
+      break;
+  }
+  return res;
+}
+
+/**
+ * gst_video_color_transfer_decode:
+ * @func: a #GstVideoTransferFunction
+ * @val: a value
+ *
+ * Convert @val to its gamma decoded value. This is the inverse operation of
+ * @gst_video_color_transfer_encode().
+ *
+ * For a non-linear value L' in the range [0..1], conversion to the linear
+ * L is in general performed with a power function like:
+ *
+ * |[
+ *    L = L' ^ gamma
+ * ]|
+ *
+ * Depending on @func, different formulas might be applied. Some formulas
+ * encode a linear segment in the lower range.
+ *
+ * Returns: the gamme decoded value of @val
+ *
+ * Since: 1.6
+ */
+gdouble
+gst_video_color_transfer_decode (GstVideoTransferFunction func, gdouble val)
+{
+  gdouble res;
+
+  switch (func) {
+    case GST_VIDEO_TRANSFER_UNKNOWN:
+    case GST_VIDEO_TRANSFER_GAMMA10:
+    default:
+      res = val;
+      break;
+    case GST_VIDEO_TRANSFER_GAMMA18:
+      res = pow (val, 1.8);
+      break;
+    case GST_VIDEO_TRANSFER_GAMMA20:
+      res = pow (val, 2.0);
+      break;
+    case GST_VIDEO_TRANSFER_GAMMA22:
+      res = pow (val, 2.2);
+      break;
+    case GST_VIDEO_TRANSFER_BT709:
+      if (val < 0.081)
+        res = val / 4.5;
+      else
+        res = pow ((val + 0.099) / 1.099, 1.0 / 0.45);
+      break;
+    case GST_VIDEO_TRANSFER_SMPTE240M:
+      if (val < 0.0913)
+        res = val / 4.0;
+      else
+        res = pow ((val + 0.1115) / 1.1115, 1.0 / 0.45);
+      break;
+    case GST_VIDEO_TRANSFER_SRGB:
+      if (val <= 0.04045)
+        res = val / 12.92;
+      else
+        res = pow ((val + 0.055) / 1.055, 2.4);
+      break;
+    case GST_VIDEO_TRANSFER_GAMMA28:
+      res = pow (val, 2.8);
+      break;
+    case GST_VIDEO_TRANSFER_LOG100:
+      if (val == 0.0)
+        res = 0.0;
+      else
+        res = pow (10.0, 2.0 * (val - 1.0));
+      break;
+    case GST_VIDEO_TRANSFER_LOG316:
+      if (val == 0.0)
+        res = 0.0;
+      else
+        res = pow (10.0, 2.5 * (val - 1.0));
+      break;
+    case GST_VIDEO_TRANSFER_BT2020_12:
+      if (val < 0.08145)
+        res = val / 4.5;
+      else
+        res = pow ((val + 0.0993) / 1.0993, 1.0 / 0.45);
+      break;
+  }
+  return res;
+}
diff --git a/gst-libs/gst/video/video-color.h b/gst-libs/gst/video/video-color.h
index d1b30fa..99fa017 100644
--- a/gst-libs/gst/video/video-color.h
+++ b/gst-libs/gst/video/video-color.h
@@ -50,6 +50,7 @@
  * @GST_VIDEO_COLOR_MATRIX_BT709: ITU-R BT.709 color matrix
  * @GST_VIDEO_COLOR_MATRIX_BT601: ITU-R BT.601 color matrix
  * @GST_VIDEO_COLOR_MATRIX_SMPTE240M: SMPTE 240M color matrix
+ * @GST_VIDEO_COLOR_MATRIX_BT2020: ITU-R BT.2020 color matrix. Since: 1.6.
  *
  * The color matrix is used to convert between Y'PbPr and
  * non-linear RGB (R'G'B')
@@ -60,9 +61,12 @@
   GST_VIDEO_COLOR_MATRIX_FCC,
   GST_VIDEO_COLOR_MATRIX_BT709,
   GST_VIDEO_COLOR_MATRIX_BT601,
-  GST_VIDEO_COLOR_MATRIX_SMPTE240M
+  GST_VIDEO_COLOR_MATRIX_SMPTE240M,
+  GST_VIDEO_COLOR_MATRIX_BT2020
 } GstVideoColorMatrix;
 
+gboolean gst_video_color_matrix_get_Kr_Kb (GstVideoColorMatrix matrix, gdouble * Kr, gdouble * Kb);
+
 /**
  * GstVideoTransferFunction:
  * @GST_VIDEO_TRANSFER_UNKNOWN: unknown transfer function
@@ -81,6 +85,9 @@
  *                             100:1 range
  * @GST_VIDEO_TRANSFER_LOG316: Logarithmic transfer characteristic
  *                             316.22777:1 range
+ * @GST_VIDEO_TRANSFER_BT2020_12: Gamma 2.2 curve with a linear segment in the lower
+ *                                range. Used for BT.2020 with 12 bits per
+ *                                component. Since: 1.6.
  *
  * The video transfer function defines the formula for converting between
  * non-linear RGB (R'G'B') and linear RGB
@@ -96,9 +103,13 @@
   GST_VIDEO_TRANSFER_SRGB,
   GST_VIDEO_TRANSFER_GAMMA28,
   GST_VIDEO_TRANSFER_LOG100,
-  GST_VIDEO_TRANSFER_LOG316
+  GST_VIDEO_TRANSFER_LOG316,
+  GST_VIDEO_TRANSFER_BT2020_12
 } GstVideoTransferFunction;
 
+gdouble      gst_video_color_transfer_encode (GstVideoTransferFunction func, gdouble val);
+gdouble      gst_video_color_transfer_decode (GstVideoTransferFunction func, gdouble val);
+
 /**
  * GstVideoColorPrimaries:
  * @GST_VIDEO_COLOR_PRIMARIES_UNKNOWN: unknown color primaries
@@ -108,6 +119,7 @@
  * @GST_VIDEO_COLOR_PRIMARIES_SMPTE170M: SMPTE170M primaries
  * @GST_VIDEO_COLOR_PRIMARIES_SMPTE240M: SMPTE240M primaries
  * @GST_VIDEO_COLOR_PRIMARIES_FILM: Generic film
+ * @GST_VIDEO_COLOR_PRIMARIES_BT2020: BT2020 primaries. Since: 1.6.
  *
  * The color primaries define the how to transform linear RGB values to and from
  * the CIE XYZ colorspace.
@@ -119,10 +131,40 @@
   GST_VIDEO_COLOR_PRIMARIES_BT470BG,
   GST_VIDEO_COLOR_PRIMARIES_SMPTE170M,
   GST_VIDEO_COLOR_PRIMARIES_SMPTE240M,
-  GST_VIDEO_COLOR_PRIMARIES_FILM
+  GST_VIDEO_COLOR_PRIMARIES_FILM,
+  GST_VIDEO_COLOR_PRIMARIES_BT2020
 } GstVideoColorPrimaries;
 
 /**
+ * GstVideoColorPrimariesInfo:
+ * @primaries: a #GstVideoColorPrimaries
+ * @Wx: reference white x coordinate
+ * @Wy: reference white y coordinate
+ * @Rx: red x coordinate
+ * @Ry: red y coordinate
+ * @Gx: green x coordinate
+ * @Gy: green y coordinate
+ * @Bx: blue x coordinate
+ * @By: blue y coordinate
+ *
+ * Structure describing the chromaticity coordinates of an RGB system. These
+ * values can be used to construct a matrix to transform RGB to and from the
+ * XYZ colorspace.
+ *
+ * Since: 1.6
+ */
+typedef struct {
+  GstVideoColorPrimaries primaries;
+  gdouble Wx, Wy;
+  gdouble Rx, Ry;
+  gdouble Gx, Gy;
+  gdouble Bx, By;
+} GstVideoColorPrimariesInfo;
+
+const GstVideoColorPrimariesInfo *
+                gst_video_color_primaries_get_info     (GstVideoColorPrimaries primaries);
+
+/**
  * GstVideoColorimetry:
  * @range: the color range. This is the valid range for the samples.
  *         It is used to convert the samples to Y'PbPr values.
@@ -144,10 +186,13 @@
 #define GST_VIDEO_COLORIMETRY_BT601       "bt601"
 #define GST_VIDEO_COLORIMETRY_BT709       "bt709"
 #define GST_VIDEO_COLORIMETRY_SMPTE240M   "smpte240m"
+#define GST_VIDEO_COLORIMETRY_SRGB        "sRGB"
+#define GST_VIDEO_COLORIMETRY_BT2020      "bt2020"
 
 gboolean     gst_video_colorimetry_matches     (GstVideoColorimetry *cinfo, const gchar *color);
 gboolean     gst_video_colorimetry_from_string (GstVideoColorimetry *cinfo, const gchar *color);
 gchar *      gst_video_colorimetry_to_string   (GstVideoColorimetry *cinfo);
+gboolean     gst_video_colorimetry_is_equal (const GstVideoColorimetry *cinfo, const GstVideoColorimetry *other);
 
 /* compute offset and scale */
 void         gst_video_color_range_offsets     (GstVideoColorRange range,
diff --git a/gst-libs/gst/video/video-converter.c b/gst-libs/gst/video/video-converter.c
new file mode 100644
index 0000000..31d51e4
--- /dev/null
+++ b/gst-libs/gst/video/video-converter.c
@@ -0,0 +1,4732 @@
+/* GStreamer
+ * Copyright (C) 2010 David Schleef <ds@schleef.org>
+ * 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 "video-converter.h"
+
+#include <glib.h>
+#include <string.h>
+#include <math.h>
+
+#include "video-orc.h"
+
+/**
+ * SECTION:videoconverter
+ * @short_description: Generic video conversion
+ *
+ * <refsect2>
+ * <para>
+ * This object is used to convert video frames from one format to another.
+ * The object can perform conversion of:
+ * <itemizedlist>
+ *  <listitem><para>
+ *    video format
+ *  </para></listitem>
+ *  <listitem><para>
+ *    video colorspace
+ *  </para></listitem>
+ *  <listitem><para>
+ *    chroma-siting
+ *  </para></listitem>
+ *  <listitem><para>
+ *    video size
+ *  </para></listitem>
+ * </para>
+ * </refsect2>
+ */
+
+/*
+ * (a)  unpack
+ * (b)  chroma upsample
+ * (c)  (convert Y'CbCr to R'G'B')
+ * (d)  gamma decode
+ * (e)  downscale
+ * (f)  colorspace convert through XYZ
+ * (g)  upscale
+ * (h)  gamma encode
+ * (i)  (convert R'G'B' to Y'CbCr)
+ * (j)  chroma downsample
+ * (k)  pack
+ *
+ * quality options
+ *
+ *  (a) range truncate, range expand
+ *  (b) full upsample, 1-1 non-cosited upsample, no upsample
+ *  (c) 8 bits, 16 bits
+ *  (d)
+ *  (e) 8 bits, 16 bits
+ *  (f) 8 bits, 16 bits
+ *  (g) 8 bits, 16 bits
+ *  (h)
+ *  (i) 8 bits, 16 bits
+ *  (j) 1-1 cosited downsample, no downsample
+ *  (k)
+ *
+ *
+ *         1 : a ->   ->   ->   -> e  -> f  -> g  ->   ->   ->   -> k
+ *         2 : a ->   ->   ->   -> e  -> f* -> g  ->   ->   ->   -> k
+ *         3 : a ->   ->   ->   -> e* -> f* -> g* ->   ->   ->   -> k
+ *         4 : a -> b ->   ->   -> e  -> f  -> g  ->   ->   -> j -> k
+ *         5 : a -> b ->   ->   -> e* -> f* -> g* ->   ->   -> j -> k
+ *         6 : a -> b -> c -> d -> e  -> f  -> g  -> h -> i -> j -> k
+ *         7 : a -> b -> c -> d -> e* -> f* -> g* -> h -> i -> j -> k
+ *
+ *         8 : a -> b -> c -> d -> e* -> f* -> g* -> h -> i -> j -> k
+ *         9 : a -> b -> c -> d -> e* -> f* -> g* -> h -> i -> j -> k
+ *        10 : a -> b -> c -> d -> e* -> f* -> g* -> h -> i -> j -> k
+ */
+
+#ifndef GST_DISABLE_GST_DEBUG
+#define GST_CAT_DEFAULT ensure_debug_category()
+static GstDebugCategory *
+ensure_debug_category (void)
+{
+  static gsize cat_gonce = 0;
+
+  if (g_once_init_enter (&cat_gonce)) {
+    gsize cat_done;
+
+    cat_done = (gsize) _gst_debug_category_new ("video-converter", 0,
+        "video-converter object");
+
+    g_once_init_leave (&cat_gonce, cat_done);
+  }
+
+  return (GstDebugCategory *) cat_gonce;
+}
+#else
+#define ensure_debug_category() /* NOOP */
+#endif /* GST_DISABLE_GST_DEBUG */
+
+typedef struct _GstLineCache GstLineCache;
+
+#define SCALE    (8)
+#define SCALE_F  ((float) (1 << SCALE))
+
+typedef struct _MatrixData MatrixData;
+
+struct _MatrixData
+{
+  gdouble dm[4][4];
+  gint im[4][4];
+  gint width;
+  guint64 orc_p1;
+  guint64 orc_p2;
+  guint64 orc_p3;
+  guint64 orc_p4;
+  gint64 *t_r;
+  gint64 *t_g;
+  gint64 *t_b;
+  gint64 t_c;
+  void (*matrix_func) (MatrixData * data, gpointer pixels);
+};
+
+typedef struct _GammaData GammaData;
+
+struct _GammaData
+{
+  gpointer gamma_table;
+  gint width;
+  void (*gamma_func) (GammaData * data, gpointer dest, gpointer src);
+};
+
+typedef enum
+{
+  ALPHA_MODE_NONE = 0,
+  ALPHA_MODE_COPY = (1 << 0),
+  ALPHA_MODE_SET = (1 << 1),
+  ALPHA_MODE_MULT = (1 << 2)
+} AlphaMode;
+
+typedef struct
+{
+  guint8 *data;
+  guint stride;
+  guint n_lines;
+  guint idx;
+  gpointer user_data;
+  GDestroyNotify notify;
+} ConverterAlloc;
+
+typedef void (*FastConvertFunc) (GstVideoConverter * convert,
+    const GstVideoFrame * src, GstVideoFrame * dest, gint plane);
+
+struct _GstVideoConverter
+{
+  gint flags;
+
+  GstVideoInfo in_info;
+  GstVideoInfo out_info;
+
+  gint in_x;
+  gint in_y;
+  gint in_width;
+  gint in_height;
+  gint in_maxwidth;
+  gint in_maxheight;
+  gint out_x;
+  gint out_y;
+  gint out_width;
+  gint out_height;
+  gint out_maxwidth;
+  gint out_maxheight;
+
+  gint current_pstride;
+  gint current_width;
+  gint current_height;
+  GstVideoFormat current_format;
+  gint current_bits;
+
+  GstStructure *config;
+
+  guint16 *tmpline;
+
+  gboolean fill_border;
+  gpointer borderline;
+  guint64 borders[4];
+  guint32 border_argb;
+  guint32 alpha_value;
+  AlphaMode alpha_mode;
+
+  void (*convert) (GstVideoConverter * convert, const GstVideoFrame * src,
+      GstVideoFrame * dest);
+
+  /* data for unpack */
+  GstLineCache *unpack_lines;
+  GstVideoFormat unpack_format;
+  guint unpack_bits;
+  gboolean unpack_rgb;
+  gboolean identity_unpack;
+  gint unpack_pstride;
+
+  /* chroma upsample */
+  GstLineCache *upsample_lines;
+  GstVideoChromaResample *upsample;
+  GstVideoChromaResample *upsample_p;
+  GstVideoChromaResample *upsample_i;
+  guint up_n_lines;
+  gint up_offset;
+
+  /* to R'G'B */
+  GstLineCache *to_RGB_lines;
+  MatrixData to_RGB_matrix;
+  /* gamma decode */
+  GammaData gamma_dec;
+
+  /* scaling */
+  GstLineCache *hscale_lines;
+  GstVideoScaler *h_scaler;
+  gint h_scale_format;
+  GstLineCache *vscale_lines;
+  GstVideoScaler *v_scaler;
+  GstVideoScaler *v_scaler_p;
+  GstVideoScaler *v_scaler_i;
+  gint v_scale_width;
+  gint v_scale_format;
+
+  /* color space conversion */
+  GstLineCache *convert_lines;
+  MatrixData convert_matrix;
+  gint in_bits;
+  gint out_bits;
+
+  /* alpha correction */
+  GstLineCache *alpha_lines;
+  void (*alpha_func) (GstVideoConverter * convert, gpointer pixels, gint width);
+
+  /* gamma encode */
+  GammaData gamma_enc;
+  /* to Y'CbCr */
+  GstLineCache *to_YUV_lines;
+  MatrixData to_YUV_matrix;
+
+  /* chroma downsample */
+  GstLineCache *downsample_lines;
+  GstVideoChromaResample *downsample;
+  GstVideoChromaResample *downsample_p;
+  GstVideoChromaResample *downsample_i;
+  guint down_n_lines;
+  gint down_offset;
+
+  /* dither */
+  GstLineCache *dither_lines;
+  GstVideoDither *dither;
+
+  /* pack */
+  GstLineCache *pack_lines;
+  guint pack_nlines;
+  GstVideoFormat pack_format;
+  guint pack_bits;
+  gboolean pack_rgb;
+  gboolean identity_pack;
+  gint pack_pstride;
+  gconstpointer pack_pal;
+  gsize pack_palsize;
+
+  const GstVideoFrame *src;
+  GstVideoFrame *dest;
+
+  /* fastpath */
+  GstVideoFormat fformat[4];
+  gint fin_x[4];
+  gint fin_y[4];
+  gint fout_x[4];
+  gint fout_y[4];
+  gint fout_width[4];
+  gint fout_height[4];
+  gint fsplane[4];
+  gint ffill[4];
+  GstVideoScaler *fh_scaler[4];
+  GstVideoScaler *fv_scaler[4];
+  FastConvertFunc fconvert[4];
+};
+
+typedef gpointer (*GstLineCacheAllocLineFunc) (GstLineCache * cache, gint idx,
+    gpointer user_data);
+typedef gboolean (*GstLineCacheNeedLineFunc) (GstLineCache * cache,
+    gint out_line, gint in_line, gpointer user_data);
+
+struct _GstLineCache
+{
+  gint first;
+  gint backlog;
+  GPtrArray *lines;
+
+  GstLineCache *prev;
+  gboolean write_input;
+  gboolean pass_alloc;
+  gboolean alloc_writable;
+
+  GstLineCacheNeedLineFunc need_line;
+  gpointer need_line_data;
+  GDestroyNotify need_line_notify;
+
+  guint n_lines;
+  guint stride;
+  GstLineCacheAllocLineFunc alloc_line;
+  gpointer alloc_line_data;
+  GDestroyNotify alloc_line_notify;
+};
+
+static GstLineCache *
+gst_line_cache_new (GstLineCache * prev)
+{
+  GstLineCache *result;
+
+  result = g_slice_new0 (GstLineCache);
+  result->lines = g_ptr_array_new ();
+  result->prev = prev;
+
+  return result;
+}
+
+static void
+gst_line_cache_clear (GstLineCache * cache)
+{
+  g_return_if_fail (cache != NULL);
+
+  g_ptr_array_set_size (cache->lines, 0);
+  cache->first = 0;
+}
+
+static void
+gst_line_cache_free (GstLineCache * cache)
+{
+  if (cache->need_line_notify)
+    cache->need_line_notify (cache->need_line_data);
+  if (cache->alloc_line_notify)
+    cache->alloc_line_notify (cache->alloc_line_data);
+  gst_line_cache_clear (cache);
+  g_ptr_array_unref (cache->lines);
+  g_slice_free (GstLineCache, cache);
+}
+
+static void
+gst_line_cache_set_need_line_func (GstLineCache * cache,
+    GstLineCacheNeedLineFunc need_line, gpointer user_data,
+    GDestroyNotify notify)
+{
+  cache->need_line = need_line;
+  cache->need_line_data = user_data;
+  cache->need_line_notify = notify;
+}
+
+static void
+gst_line_cache_set_alloc_line_func (GstLineCache * cache,
+    GstLineCacheAllocLineFunc alloc_line, gpointer user_data,
+    GDestroyNotify notify)
+{
+  cache->alloc_line = alloc_line;
+  cache->alloc_line_data = user_data;
+  cache->alloc_line_notify = notify;
+}
+
+/* keep this much backlog for interlaced video */
+#define BACKLOG 2
+
+static gpointer *
+gst_line_cache_get_lines (GstLineCache * cache, gint out_line, gint in_line,
+    gint n_lines)
+{
+  if (cache->first + cache->backlog < in_line) {
+    gint to_remove =
+        MIN (in_line - (cache->first + cache->backlog), cache->lines->len);
+    if (to_remove > 0) {
+      g_ptr_array_remove_range (cache->lines, 0, to_remove);
+    }
+    cache->first += to_remove;
+    if (cache->first < in_line)
+      cache->first = in_line;
+  } else if (in_line < cache->first) {
+    gst_line_cache_clear (cache);
+    cache->first = in_line;
+  }
+
+  while (TRUE) {
+    gint oline;
+
+    if (cache->first <= in_line
+        && in_line + n_lines <= cache->first + (gint) cache->lines->len) {
+      return cache->lines->pdata + (in_line - cache->first);
+    }
+
+    if (cache->need_line == NULL)
+      break;
+
+    oline = out_line + cache->first + cache->lines->len - in_line;
+
+    if (!cache->need_line (cache, oline, cache->first + cache->lines->len,
+            cache->need_line_data))
+      break;
+  }
+  GST_DEBUG ("no lines");
+  return NULL;
+}
+
+static void
+gst_line_cache_add_line (GstLineCache * cache, gint idx, gpointer line)
+{
+  if (cache->first + cache->lines->len != idx) {
+    gst_line_cache_clear (cache);
+    cache->first = idx;
+  }
+  g_ptr_array_add (cache->lines, line);
+}
+
+static gpointer
+gst_line_cache_alloc_line (GstLineCache * cache, gint idx)
+{
+  gpointer res;
+
+  if (cache->alloc_line)
+    res = cache->alloc_line (cache, idx, cache->alloc_line_data);
+  else
+    res = NULL;
+
+  return res;
+}
+
+static void video_converter_generic (GstVideoConverter * convert,
+    const GstVideoFrame * src, GstVideoFrame * dest);
+static gboolean video_converter_lookup_fastpath (GstVideoConverter * convert);
+static void video_converter_compute_matrix (GstVideoConverter * convert);
+static void video_converter_compute_resample (GstVideoConverter * convert);
+
+static gpointer get_dest_line (GstLineCache * cache, gint idx,
+    gpointer user_data);
+
+static gboolean do_unpack_lines (GstLineCache * cache, gint out_line,
+    gint in_line, gpointer user_data);
+static gboolean do_downsample_lines (GstLineCache * cache, gint out_line,
+    gint in_line, gpointer user_data);
+static gboolean do_convert_to_RGB_lines (GstLineCache * cache, gint out_line,
+    gint in_line, gpointer user_data);
+static gboolean do_convert_lines (GstLineCache * cache, gint out_line,
+    gint in_line, gpointer user_data);
+static gboolean do_alpha_lines (GstLineCache * cache, gint out_line,
+    gint in_line, gpointer user_data);
+static gboolean do_convert_to_YUV_lines (GstLineCache * cache, gint out_line,
+    gint in_line, gpointer user_data);
+static gboolean do_upsample_lines (GstLineCache * cache, gint out_line,
+    gint in_line, gpointer user_data);
+static gboolean do_vscale_lines (GstLineCache * cache, gint out_line,
+    gint in_line, gpointer user_data);
+static gboolean do_hscale_lines (GstLineCache * cache, gint out_line,
+    gint in_line, gpointer user_data);
+static gboolean do_dither_lines (GstLineCache * cache, gint out_line,
+    gint in_line, gpointer user_data);
+
+static ConverterAlloc *
+converter_alloc_new (guint stride, guint n_lines, gpointer user_data,
+    GDestroyNotify notify)
+{
+  ConverterAlloc *alloc;
+
+  GST_DEBUG ("stride %d, n_lines %d", stride, n_lines);
+  alloc = g_slice_new0 (ConverterAlloc);
+  alloc->data = g_malloc (stride * n_lines);
+  alloc->stride = stride;
+  alloc->n_lines = n_lines;
+  alloc->idx = 0;
+  alloc->user_data = user_data;
+  alloc->notify = notify;
+
+  return alloc;
+}
+
+static void
+converter_alloc_free (ConverterAlloc * alloc)
+{
+  if (alloc->notify)
+    alloc->notify (alloc->user_data);
+  g_free (alloc->data);
+  g_slice_free (ConverterAlloc, alloc);
+}
+
+static void
+setup_border_alloc (GstVideoConverter * convert, ConverterAlloc * alloc)
+{
+  gint i;
+
+  if (convert->borderline) {
+    for (i = 0; i < alloc->n_lines; i++)
+      memcpy (&alloc->data[i * alloc->stride], convert->borderline,
+          alloc->stride);
+  }
+}
+
+static gpointer
+get_temp_line (GstLineCache * cache, gint idx, gpointer user_data)
+{
+  ConverterAlloc *alloc = user_data;
+  gpointer tmpline;
+
+  GST_DEBUG ("get temp line %d (%p %d)", idx, alloc, alloc->idx);
+  tmpline = &alloc->data[alloc->stride * alloc->idx];
+  alloc->idx = (alloc->idx + 1) % alloc->n_lines;
+
+  return tmpline;
+}
+
+static gpointer
+get_border_temp_line (GstLineCache * cache, gint idx, gpointer user_data)
+{
+  ConverterAlloc *alloc = user_data;
+  GstVideoConverter *convert = alloc->user_data;
+  gpointer tmpline;
+
+  GST_DEBUG ("get temp line %d (%p %d)", idx, alloc, alloc->idx);
+  tmpline = &alloc->data[alloc->stride * alloc->idx] +
+      (convert->out_x * convert->pack_pstride);
+  alloc->idx = (alloc->idx + 1) % alloc->n_lines;
+
+  return tmpline;
+}
+
+static gint
+get_opt_int (GstVideoConverter * convert, const gchar * opt, gint def)
+{
+  gint res;
+  if (!gst_structure_get_int (convert->config, opt, &res))
+    res = def;
+  return res;
+}
+
+static guint
+get_opt_uint (GstVideoConverter * convert, const gchar * opt, guint def)
+{
+  guint res;
+  if (!gst_structure_get_uint (convert->config, opt, &res))
+    res = def;
+  return res;
+}
+
+static gdouble
+get_opt_double (GstVideoConverter * convert, const gchar * opt, gdouble def)
+{
+  gdouble res;
+  if (!gst_structure_get_double (convert->config, opt, &res))
+    res = def;
+  return res;
+}
+
+static gboolean
+get_opt_bool (GstVideoConverter * convert, const gchar * opt, gboolean def)
+{
+  gboolean res;
+  if (!gst_structure_get_boolean (convert->config, opt, &res))
+    res = def;
+  return res;
+}
+
+static gint
+get_opt_enum (GstVideoConverter * convert, const gchar * opt, GType type,
+    gint def)
+{
+  gint res;
+  if (!gst_structure_get_enum (convert->config, opt, type, &res))
+    res = def;
+  return res;
+}
+
+#define DEFAULT_OPT_FILL_BORDER TRUE
+#define DEFAULT_OPT_ALPHA_VALUE 1.0
+/* options copy, set, mult */
+#define DEFAULT_OPT_ALPHA_MODE GST_VIDEO_ALPHA_MODE_COPY
+#define DEFAULT_OPT_BORDER_ARGB 0xff000000
+/* options full, input-only, output-only, none */
+#define DEFAULT_OPT_MATRIX_MODE GST_VIDEO_MATRIX_MODE_FULL
+/* none, remap */
+#define DEFAULT_OPT_GAMMA_MODE GST_VIDEO_GAMMA_MODE_NONE
+/* none, merge-only, fast */
+#define DEFAULT_OPT_PRIMARIES_MODE GST_VIDEO_PRIMARIES_MODE_NONE
+/* options full, upsample-only, downsample-only, none */
+#define DEFAULT_OPT_CHROMA_MODE GST_VIDEO_CHROMA_MODE_FULL
+#define DEFAULT_OPT_RESAMPLER_METHOD GST_VIDEO_RESAMPLER_METHOD_CUBIC
+#define DEFAULT_OPT_CHROMA_RESAMPLER_METHOD GST_VIDEO_RESAMPLER_METHOD_LINEAR
+#define DEFAULT_OPT_RESAMPLER_TAPS 0
+#define DEFAULT_OPT_DITHER_METHOD GST_VIDEO_DITHER_BAYER
+#define DEFAULT_OPT_DITHER_QUANTIZATION 1
+
+#define GET_OPT_FILL_BORDER(c) get_opt_bool(c, \
+    GST_VIDEO_CONVERTER_OPT_FILL_BORDER, DEFAULT_OPT_FILL_BORDER)
+#define GET_OPT_ALPHA_VALUE(c) get_opt_double(c, \
+    GST_VIDEO_CONVERTER_OPT_ALPHA_VALUE, DEFAULT_OPT_ALPHA_VALUE)
+#define GET_OPT_ALPHA_MODE(c) get_opt_enum(c, \
+    GST_VIDEO_CONVERTER_OPT_ALPHA_MODE, GST_TYPE_VIDEO_ALPHA_MODE, DEFAULT_OPT_ALPHA_MODE)
+#define GET_OPT_BORDER_ARGB(c) get_opt_uint(c, \
+    GST_VIDEO_CONVERTER_OPT_BORDER_ARGB, DEFAULT_OPT_BORDER_ARGB)
+#define GET_OPT_MATRIX_MODE(c) get_opt_enum(c, \
+    GST_VIDEO_CONVERTER_OPT_MATRIX_MODE, GST_TYPE_VIDEO_MATRIX_MODE, DEFAULT_OPT_MATRIX_MODE)
+#define GET_OPT_GAMMA_MODE(c) get_opt_enum(c, \
+    GST_VIDEO_CONVERTER_OPT_GAMMA_MODE, GST_TYPE_VIDEO_GAMMA_MODE, DEFAULT_OPT_GAMMA_MODE)
+#define GET_OPT_PRIMARIES_MODE(c) get_opt_enum(c, \
+    GST_VIDEO_CONVERTER_OPT_PRIMARIES_MODE, GST_TYPE_VIDEO_PRIMARIES_MODE, DEFAULT_OPT_PRIMARIES_MODE)
+#define GET_OPT_CHROMA_MODE(c) get_opt_enum(c, \
+    GST_VIDEO_CONVERTER_OPT_CHROMA_MODE, GST_TYPE_VIDEO_CHROMA_MODE, DEFAULT_OPT_CHROMA_MODE)
+#define GET_OPT_RESAMPLER_METHOD(c) get_opt_enum(c, \
+    GST_VIDEO_CONVERTER_OPT_RESAMPLER_METHOD, GST_TYPE_VIDEO_RESAMPLER_METHOD, \
+    DEFAULT_OPT_RESAMPLER_METHOD)
+#define GET_OPT_CHROMA_RESAMPLER_METHOD(c) get_opt_enum(c, \
+    GST_VIDEO_CONVERTER_OPT_CHROMA_RESAMPLER_METHOD, GST_TYPE_VIDEO_RESAMPLER_METHOD, \
+    DEFAULT_OPT_CHROMA_RESAMPLER_METHOD)
+#define GET_OPT_RESAMPLER_TAPS(c) get_opt_uint(c, \
+    GST_VIDEO_CONVERTER_OPT_RESAMPLER_TAPS, DEFAULT_OPT_RESAMPLER_TAPS)
+#define GET_OPT_DITHER_METHOD(c) get_opt_enum(c, \
+    GST_VIDEO_CONVERTER_OPT_DITHER_METHOD, GST_TYPE_VIDEO_DITHER_METHOD, \
+    DEFAULT_OPT_DITHER_METHOD)
+#define GET_OPT_DITHER_QUANTIZATION(c) get_opt_uint(c, \
+    GST_VIDEO_CONVERTER_OPT_DITHER_QUANTIZATION, DEFAULT_OPT_DITHER_QUANTIZATION)
+
+#define CHECK_ALPHA_COPY(c) (GET_OPT_ALPHA_MODE(c) == GST_VIDEO_ALPHA_MODE_COPY)
+#define CHECK_ALPHA_SET(c) (GET_OPT_ALPHA_MODE(c) == GST_VIDEO_ALPHA_MODE_SET)
+#define CHECK_ALPHA_MULT(c) (GET_OPT_ALPHA_MODE(c) == GST_VIDEO_ALPHA_MODE_MULT)
+
+#define CHECK_MATRIX_FULL(c) (GET_OPT_MATRIX_MODE(c) == GST_VIDEO_MATRIX_MODE_FULL)
+#define CHECK_MATRIX_INPUT(c) (GET_OPT_MATRIX_MODE(c) == GST_VIDEO_MATRIX_MODE_INPUT_ONLY)
+#define CHECK_MATRIX_OUTPUT(c) (GET_OPT_MATRIX_MODE(c) == GST_VIDEO_MATRIX_MODE_OUTPUT_ONLY)
+#define CHECK_MATRIX_NONE(c) (GET_OPT_MATRIX_MODE(c) == GST_VIDEO_MATRIX_MODE_NONE)
+
+#define CHECK_GAMMA_NONE(c) (GET_OPT_GAMMA_MODE(c) == GST_VIDEO_GAMMA_MODE_NONE)
+#define CHECK_GAMMA_REMAP(c) (GET_OPT_GAMMA_MODE(c) == GST_VIDEO_GAMMA_MODE_REMAP)
+
+#define CHECK_PRIMARIES_NONE(c) (GET_OPT_PRIMARIES_MODE(c) == GST_VIDEO_PRIMARIES_MODE_NONE)
+#define CHECK_PRIMARIES_MERGE(c) (GET_OPT_PRIMARIES_MODE(c) == GST_VIDEO_PRIMARIES_MODE_MERGE_ONLY)
+#define CHECK_PRIMARIES_FAST(c) (GET_OPT_PRIMARIES_MODE(c) == GST_VIDEO_PRIMARIES_MODE_FAST)
+
+#define CHECK_CHROMA_FULL(c) (GET_OPT_CHROMA_MODE(c) == GST_VIDEO_CHROMA_MODE_FULL)
+#define CHECK_CHROMA_UPSAMPLE(c) (GET_OPT_CHROMA_MODE(c) == GST_VIDEO_CHROMA_MODE_UPSAMPLE_ONLY)
+#define CHECK_CHROMA_DOWNSAMPLE(c) (GET_OPT_CHROMA_MODE(c) == GST_VIDEO_CHROMA_MODE_DOWNSAMPLE_ONLY)
+#define CHECK_CHROMA_NONE(c) (GET_OPT_CHROMA_MODE(c) == GST_VIDEO_CHROMA_MODE_NONE)
+
+static GstLineCache *
+chain_unpack_line (GstVideoConverter * convert)
+{
+  GstLineCache *prev;
+  GstVideoInfo *info;
+
+  info = &convert->in_info;
+
+  convert->current_format = convert->unpack_format;
+  convert->current_bits = convert->unpack_bits;
+  convert->current_pstride = convert->current_bits >> 1;
+
+  convert->unpack_pstride = convert->current_pstride;
+  convert->identity_unpack = (convert->current_format == info->finfo->format);
+
+  GST_DEBUG ("chain unpack line format %s, pstride %d, identity_unpack %d",
+      gst_video_format_to_string (convert->current_format),
+      convert->current_pstride, convert->identity_unpack);
+
+  prev = convert->unpack_lines = gst_line_cache_new (NULL);
+  prev->write_input = FALSE;
+  prev->pass_alloc = FALSE;
+  prev->n_lines = 1;
+  prev->stride = convert->current_pstride * convert->current_width;
+  gst_line_cache_set_need_line_func (convert->unpack_lines,
+      do_unpack_lines, convert, NULL);
+
+  return convert->unpack_lines;
+}
+
+static GstLineCache *
+chain_upsample (GstVideoConverter * convert, GstLineCache * prev)
+{
+  video_converter_compute_resample (convert);
+
+  if (convert->upsample_p || convert->upsample_i) {
+    GST_DEBUG ("chain upsample");
+    prev = convert->upsample_lines = gst_line_cache_new (prev);
+    prev->write_input = TRUE;
+    prev->pass_alloc = TRUE;
+    prev->n_lines = 4;
+    prev->stride = convert->current_pstride * convert->current_width;
+    gst_line_cache_set_need_line_func (convert->upsample_lines,
+        do_upsample_lines, convert, NULL);
+  }
+  return prev;
+}
+
+static void
+color_matrix_set_identity (MatrixData * m)
+{
+  int i, j;
+
+  for (i = 0; i < 4; i++) {
+    for (j = 0; j < 4; j++) {
+      m->dm[i][j] = (i == j);
+    }
+  }
+}
+
+static void
+color_matrix_copy (MatrixData * d, const MatrixData * s)
+{
+  gint i, j;
+
+  for (i = 0; i < 4; i++)
+    for (j = 0; j < 4; j++)
+      d->dm[i][j] = s->dm[i][j];
+}
+
+/* Perform 4x4 matrix multiplication:
+ *  - @dst@ = @a@ * @b@
+ *  - @dst@ may be a pointer to @a@ andor @b@
+ */
+static void
+color_matrix_multiply (MatrixData * dst, MatrixData * a, MatrixData * b)
+{
+  MatrixData tmp;
+  int i, j, k;
+
+  for (i = 0; i < 4; i++) {
+    for (j = 0; j < 4; j++) {
+      double x = 0;
+      for (k = 0; k < 4; k++) {
+        x += a->dm[i][k] * b->dm[k][j];
+      }
+      tmp.dm[i][j] = x;
+    }
+  }
+  color_matrix_copy (dst, &tmp);
+}
+
+static void
+color_matrix_invert (MatrixData * d, MatrixData * s)
+{
+  MatrixData tmp;
+  int i, j;
+  double det;
+
+  color_matrix_set_identity (&tmp);
+  for (j = 0; j < 3; j++) {
+    for (i = 0; i < 3; i++) {
+      tmp.dm[j][i] =
+          s->dm[(i + 1) % 3][(j + 1) % 3] * s->dm[(i + 2) % 3][(j + 2) % 3] -
+          s->dm[(i + 1) % 3][(j + 2) % 3] * s->dm[(i + 2) % 3][(j + 1) % 3];
+    }
+  }
+  det =
+      tmp.dm[0][0] * s->dm[0][0] + tmp.dm[0][1] * s->dm[1][0] +
+      tmp.dm[0][2] * s->dm[2][0];
+  for (j = 0; j < 3; j++) {
+    for (i = 0; i < 3; i++) {
+      tmp.dm[i][j] /= det;
+    }
+  }
+  color_matrix_copy (d, &tmp);
+}
+
+static void
+color_matrix_offset_components (MatrixData * m, double a1, double a2, double a3)
+{
+  MatrixData a;
+
+  color_matrix_set_identity (&a);
+  a.dm[0][3] = a1;
+  a.dm[1][3] = a2;
+  a.dm[2][3] = a3;
+  color_matrix_multiply (m, &a, m);
+}
+
+static void
+color_matrix_scale_components (MatrixData * m, double a1, double a2, double a3)
+{
+  MatrixData a;
+
+  color_matrix_set_identity (&a);
+  a.dm[0][0] = a1;
+  a.dm[1][1] = a2;
+  a.dm[2][2] = a3;
+  color_matrix_multiply (m, &a, m);
+}
+
+static void
+color_matrix_debug (const MatrixData * s)
+{
+  GST_DEBUG ("[%f %f %f %f]", s->dm[0][0], s->dm[0][1], s->dm[0][2],
+      s->dm[0][3]);
+  GST_DEBUG ("[%f %f %f %f]", s->dm[1][0], s->dm[1][1], s->dm[1][2],
+      s->dm[1][3]);
+  GST_DEBUG ("[%f %f %f %f]", s->dm[2][0], s->dm[2][1], s->dm[2][2],
+      s->dm[2][3]);
+  GST_DEBUG ("[%f %f %f %f]", s->dm[3][0], s->dm[3][1], s->dm[3][2],
+      s->dm[3][3]);
+}
+
+static void
+color_matrix_convert (MatrixData * s)
+{
+  gint i, j;
+
+  for (i = 0; i < 4; i++)
+    for (j = 0; j < 4; j++)
+      s->im[i][j] = rint (s->dm[i][j]);
+
+  GST_DEBUG ("[%6d %6d %6d %6d]", s->im[0][0], s->im[0][1], s->im[0][2],
+      s->im[0][3]);
+  GST_DEBUG ("[%6d %6d %6d %6d]", s->im[1][0], s->im[1][1], s->im[1][2],
+      s->im[1][3]);
+  GST_DEBUG ("[%6d %6d %6d %6d]", s->im[2][0], s->im[2][1], s->im[2][2],
+      s->im[2][3]);
+  GST_DEBUG ("[%6d %6d %6d %6d]", s->im[3][0], s->im[3][1], s->im[3][2],
+      s->im[3][3]);
+}
+
+static void
+color_matrix_YCbCr_to_RGB (MatrixData * m, double Kr, double Kb)
+{
+  double Kg = 1.0 - Kr - Kb;
+  MatrixData k = {
+    {
+          {1., 0., 2 * (1 - Kr), 0.},
+          {1., -2 * Kb * (1 - Kb) / Kg, -2 * Kr * (1 - Kr) / Kg, 0.},
+          {1., 2 * (1 - Kb), 0., 0.},
+          {0., 0., 0., 1.},
+        }
+  };
+
+  color_matrix_multiply (m, &k, m);
+}
+
+static void
+color_matrix_RGB_to_YCbCr (MatrixData * m, double Kr, double Kb)
+{
+  double Kg = 1.0 - Kr - Kb;
+  MatrixData k;
+  double x;
+
+  k.dm[0][0] = Kr;
+  k.dm[0][1] = Kg;
+  k.dm[0][2] = Kb;
+  k.dm[0][3] = 0;
+
+  x = 1 / (2 * (1 - Kb));
+  k.dm[1][0] = -x * Kr;
+  k.dm[1][1] = -x * Kg;
+  k.dm[1][2] = x * (1 - Kb);
+  k.dm[1][3] = 0;
+
+  x = 1 / (2 * (1 - Kr));
+  k.dm[2][0] = x * (1 - Kr);
+  k.dm[2][1] = -x * Kg;
+  k.dm[2][2] = -x * Kb;
+  k.dm[2][3] = 0;
+
+  k.dm[3][0] = 0;
+  k.dm[3][1] = 0;
+  k.dm[3][2] = 0;
+  k.dm[3][3] = 1;
+
+  color_matrix_multiply (m, &k, m);
+}
+
+static void
+color_matrix_RGB_to_XYZ (MatrixData * dst, double Rx, double Ry, double Gx,
+    double Gy, double Bx, double By, double Wx, double Wy)
+{
+  MatrixData m, im;
+  double sx, sy, sz;
+  double wx, wy, wz;
+
+  color_matrix_set_identity (&m);
+
+  m.dm[0][0] = Rx;
+  m.dm[1][0] = Ry;
+  m.dm[2][0] = (1.0 - Rx - Ry);
+  m.dm[0][1] = Gx;
+  m.dm[1][1] = Gy;
+  m.dm[2][1] = (1.0 - Gx - Gy);
+  m.dm[0][2] = Bx;
+  m.dm[1][2] = By;
+  m.dm[2][2] = (1.0 - Bx - By);
+
+  color_matrix_invert (&im, &m);
+
+  wx = Wx / Wy;
+  wy = 1.0;
+  wz = (1.0 - Wx - Wy) / Wy;
+
+  sx = im.dm[0][0] * wx + im.dm[0][1] * wy + im.dm[0][2] * wz;
+  sy = im.dm[1][0] * wx + im.dm[1][1] * wy + im.dm[1][2] * wz;
+  sz = im.dm[2][0] * wx + im.dm[2][1] * wy + im.dm[2][2] * wz;
+
+  m.dm[0][0] *= sx;
+  m.dm[1][0] *= sx;
+  m.dm[2][0] *= sx;
+  m.dm[0][1] *= sy;
+  m.dm[1][1] *= sy;
+  m.dm[2][1] *= sy;
+  m.dm[0][2] *= sz;
+  m.dm[1][2] *= sz;
+  m.dm[2][2] *= sz;
+
+  color_matrix_copy (dst, &m);
+}
+
+static void
+videoconvert_convert_init_tables (MatrixData * data)
+{
+  gint i, j;
+
+  data->t_r = g_new (gint64, 256);
+  data->t_g = g_new (gint64, 256);
+  data->t_b = g_new (gint64, 256);
+
+  for (i = 0; i < 256; i++) {
+    gint64 r = 0, g = 0, b = 0;
+
+    for (j = 0; j < 3; j++) {
+      r = (r << 16) + data->im[j][0] * i;
+      g = (g << 16) + data->im[j][1] * i;
+      b = (b << 16) + data->im[j][2] * i;
+    }
+    data->t_r[i] = r;
+    data->t_g[i] = g;
+    data->t_b[i] = b;
+  }
+  data->t_c = ((gint64) data->im[0][3] << 32)
+      + ((gint64) data->im[1][3] << 16)
+      + ((gint64) data->im[2][3] << 0);
+}
+
+void
+_custom_video_orc_matrix8 (guint8 * ORC_RESTRICT d1,
+    const guint8 * ORC_RESTRICT s1, orc_int64 p1, orc_int64 p2, orc_int64 p3,
+    orc_int64 p4, int n)
+{
+  gint i;
+  gint r, g, b;
+  gint y, u, v;
+  gint a00, a01, a02, a03;
+  gint a10, a11, a12, a13;
+  gint a20, a21, a22, a23;
+
+  a00 = (gint16) (p1 >> 16);
+  a01 = (gint16) (p2 >> 16);
+  a02 = (gint16) (p3 >> 16);
+  a03 = (gint16) (p4 >> 16);
+  a10 = (gint16) (p1 >> 32);
+  a11 = (gint16) (p2 >> 32);
+  a12 = (gint16) (p3 >> 32);
+  a13 = (gint16) (p4 >> 32);
+  a20 = (gint16) (p1 >> 48);
+  a21 = (gint16) (p2 >> 48);
+  a22 = (gint16) (p3 >> 48);
+  a23 = (gint16) (p4 >> 48);
+
+  for (i = 0; i < n; i++) {
+    r = s1[i * 4 + 1];
+    g = s1[i * 4 + 2];
+    b = s1[i * 4 + 3];
+
+    y = ((a00 * r + a01 * g + a02 * b) >> SCALE) + a03;
+    u = ((a10 * r + a11 * g + a12 * b) >> SCALE) + a13;
+    v = ((a20 * r + a21 * g + a22 * b) >> SCALE) + a23;
+
+    d1[i * 4 + 1] = CLAMP (y, 0, 255);
+    d1[i * 4 + 2] = CLAMP (u, 0, 255);
+    d1[i * 4 + 3] = CLAMP (v, 0, 255);
+  }
+}
+
+static void
+video_converter_matrix8 (MatrixData * data, gpointer pixels)
+{
+  video_orc_matrix8 (pixels, pixels, data->orc_p1, data->orc_p2,
+      data->orc_p3, data->orc_p4, data->width);
+}
+
+static void
+video_converter_matrix8_table (MatrixData * data, gpointer pixels)
+{
+  gint i, width = data->width * 4;
+  guint8 r, g, b;
+  gint64 c = data->t_c;
+  guint8 *p = pixels;
+  gint64 x;
+
+  for (i = 0; i < width; i += 4) {
+    r = p[i + 1];
+    g = p[i + 2];
+    b = p[i + 3];
+
+    x = data->t_r[r] + data->t_g[g] + data->t_b[b] + c;
+
+    p[i + 1] = x >> (32 + SCALE);
+    p[i + 2] = x >> (16 + SCALE);
+    p[i + 3] = x >> (0 + SCALE);
+  }
+}
+
+static void
+video_converter_matrix8_AYUV_ARGB (MatrixData * data, gpointer pixels)
+{
+  video_orc_convert_AYUV_ARGB (pixels, 0, pixels, 0,
+      data->im[0][0], data->im[0][2],
+      data->im[2][1], data->im[1][1], data->im[1][2], data->width, 1);
+}
+
+static gboolean
+is_ayuv_to_rgb_matrix (MatrixData * data)
+{
+  if (data->im[0][0] != data->im[1][0] || data->im[1][0] != data->im[2][0])
+    return FALSE;
+
+  if (data->im[0][1] != 0 || data->im[2][2] != 0)
+    return FALSE;
+
+  return TRUE;
+}
+
+static gboolean
+is_identity_matrix (MatrixData * data)
+{
+  gint i, j;
+  gint c = data->im[0][0];
+
+  /* not really checking identity because of rounding errors but given
+   * the conversions we do we just check for anything that looks like:
+   *
+   *  c 0 0 0
+   *  0 c 0 0
+   *  0 0 c 0
+   *  0 0 0 1
+   */
+  for (i = 0; i < 4; i++) {
+    for (j = 0; j < 4; j++) {
+      if (i == j) {
+        if (i == 3 && data->im[i][j] != 1)
+          return FALSE;
+        else if (data->im[i][j] != c)
+          return FALSE;
+      } else if (data->im[i][j] != 0)
+        return FALSE;
+    }
+  }
+  return TRUE;
+}
+
+static gboolean
+is_no_clip_matrix (MatrixData * data)
+{
+  gint i;
+  static const guint8 test[8][3] = {
+    {0, 0, 0},
+    {0, 0, 255},
+    {0, 255, 0},
+    {0, 255, 255},
+    {255, 0, 0},
+    {255, 0, 255},
+    {255, 255, 0},
+    {255, 255, 255}
+  };
+
+  for (i = 0; i < 8; i++) {
+    gint r, g, b;
+    gint y, u, v;
+
+    r = test[i][0];
+    g = test[i][1];
+    b = test[i][2];
+
+    y = (data->im[0][0] * r + data->im[0][1] * g +
+        data->im[0][2] * b + data->im[0][3]) >> SCALE;
+    u = (data->im[1][0] * r + data->im[1][1] * g +
+        data->im[1][2] * b + data->im[1][3]) >> SCALE;
+    v = (data->im[2][0] * r + data->im[2][1] * g +
+        data->im[2][2] * b + data->im[2][3]) >> SCALE;
+
+    if (y != CLAMP (y, 0, 255) || u != CLAMP (u, 0, 255)
+        || v != CLAMP (v, 0, 255))
+      return FALSE;
+  }
+  return TRUE;
+}
+
+static void
+video_converter_matrix16 (MatrixData * data, gpointer pixels)
+{
+  int i;
+  int r, g, b;
+  int y, u, v;
+  guint16 *p = pixels;
+  gint width = data->width;
+
+  for (i = 0; i < width; i++) {
+    r = p[i * 4 + 1];
+    g = p[i * 4 + 2];
+    b = p[i * 4 + 3];
+
+    y = (data->im[0][0] * r + data->im[0][1] * g +
+        data->im[0][2] * b + data->im[0][3]) >> SCALE;
+    u = (data->im[1][0] * r + data->im[1][1] * g +
+        data->im[1][2] * b + data->im[1][3]) >> SCALE;
+    v = (data->im[2][0] * r + data->im[2][1] * g +
+        data->im[2][2] * b + data->im[2][3]) >> SCALE;
+
+    p[i * 4 + 1] = CLAMP (y, 0, 65535);
+    p[i * 4 + 2] = CLAMP (u, 0, 65535);
+    p[i * 4 + 3] = CLAMP (v, 0, 65535);
+  }
+}
+
+
+static void
+prepare_matrix (GstVideoConverter * convert, MatrixData * data)
+{
+  if (is_identity_matrix (data))
+    return;
+
+  color_matrix_scale_components (data, SCALE_F, SCALE_F, SCALE_F);
+  color_matrix_convert (data);
+
+  data->width = convert->current_width;
+
+  if (convert->current_bits == 8) {
+    if (!convert->unpack_rgb && convert->pack_rgb
+        && is_ayuv_to_rgb_matrix (data)) {
+      GST_DEBUG ("use fast AYUV -> RGB matrix");
+      data->matrix_func = video_converter_matrix8_AYUV_ARGB;
+    } else if (is_no_clip_matrix (data)) {
+      GST_DEBUG ("use 8bit table");
+      data->matrix_func = video_converter_matrix8_table;
+      videoconvert_convert_init_tables (data);
+    } else {
+      gint a03, a13, a23;
+
+      GST_DEBUG ("use 8bit matrix");
+      data->matrix_func = video_converter_matrix8;
+
+      data->orc_p1 = (((guint64) (guint16) data->im[2][0]) << 48) |
+          (((guint64) (guint16) data->im[1][0]) << 32) |
+          (((guint64) (guint16) data->im[0][0]) << 16);
+      data->orc_p2 = (((guint64) (guint16) data->im[2][1]) << 48) |
+          (((guint64) (guint16) data->im[1][1]) << 32) |
+          (((guint64) (guint16) data->im[0][1]) << 16);
+      data->orc_p3 = (((guint64) (guint16) data->im[2][2]) << 48) |
+          (((guint64) (guint16) data->im[1][2]) << 32) |
+          (((guint64) (guint16) data->im[0][2]) << 16);
+
+      a03 = data->im[0][3] >> SCALE;
+      a13 = data->im[1][3] >> SCALE;
+      a23 = data->im[2][3] >> SCALE;
+
+      data->orc_p4 = (((guint64) (guint16) a23) << 48) |
+          (((guint64) (guint16) a13) << 32) | (((guint64) (guint16) a03) << 16);
+    }
+  } else {
+    GST_DEBUG ("use 16bit matrix");
+    data->matrix_func = video_converter_matrix16;
+  }
+}
+
+static void
+compute_matrix_to_RGB (GstVideoConverter * convert, MatrixData * data)
+{
+  GstVideoInfo *info;
+  gdouble Kr = 0, Kb = 0;
+
+  info = &convert->in_info;
+
+  {
+    const GstVideoFormatInfo *uinfo;
+    gint offset[4], scale[4];
+
+    uinfo = gst_video_format_get_info (convert->unpack_format);
+
+    /* bring color components to [0..1.0] range */
+    gst_video_color_range_offsets (info->colorimetry.range, uinfo, offset,
+        scale);
+
+    color_matrix_offset_components (data, -offset[0], -offset[1], -offset[2]);
+    color_matrix_scale_components (data, 1 / ((float) scale[0]),
+        1 / ((float) scale[1]), 1 / ((float) scale[2]));
+  }
+
+  if (!convert->unpack_rgb && !CHECK_MATRIX_NONE (convert)) {
+    if (CHECK_MATRIX_OUTPUT (convert))
+      info = &convert->out_info;
+
+    /* bring components to R'G'B' space */
+    if (gst_video_color_matrix_get_Kr_Kb (info->colorimetry.matrix, &Kr, &Kb))
+      color_matrix_YCbCr_to_RGB (data, Kr, Kb);
+  }
+  color_matrix_debug (data);
+}
+
+static void
+compute_matrix_to_YUV (GstVideoConverter * convert, MatrixData * data,
+    gboolean force)
+{
+  GstVideoInfo *info;
+  gdouble Kr = 0, Kb = 0;
+
+  if (force || (!convert->pack_rgb && !CHECK_MATRIX_NONE (convert))) {
+    if (CHECK_MATRIX_INPUT (convert))
+      info = &convert->in_info;
+    else
+      info = &convert->out_info;
+
+    /* bring components to YCbCr space */
+    if (gst_video_color_matrix_get_Kr_Kb (info->colorimetry.matrix, &Kr, &Kb))
+      color_matrix_RGB_to_YCbCr (data, Kr, Kb);
+  }
+
+  info = &convert->out_info;
+
+  {
+    const GstVideoFormatInfo *uinfo;
+    gint offset[4], scale[4];
+
+    uinfo = gst_video_format_get_info (convert->pack_format);
+
+    /* bring color components to nominal range */
+    gst_video_color_range_offsets (info->colorimetry.range, uinfo, offset,
+        scale);
+
+    color_matrix_scale_components (data, (float) scale[0], (float) scale[1],
+        (float) scale[2]);
+    color_matrix_offset_components (data, offset[0], offset[1], offset[2]);
+  }
+
+  color_matrix_debug (data);
+}
+
+
+static void
+gamma_convert_u8_u16 (GammaData * data, gpointer dest, gpointer src)
+{
+  gint i;
+  guint8 *s = src;
+  guint16 *d = dest;
+  guint16 *table = data->gamma_table;
+  gint width = data->width * 4;
+
+  for (i = 0; i < width; i += 4) {
+    d[i + 0] = (s[i] << 8) | s[i];
+    d[i + 1] = table[s[i + 1]];
+    d[i + 2] = table[s[i + 2]];
+    d[i + 3] = table[s[i + 3]];
+  }
+}
+
+static void
+gamma_convert_u16_u8 (GammaData * data, gpointer dest, gpointer src)
+{
+  gint i;
+  guint16 *s = src;
+  guint8 *d = dest;
+  guint8 *table = data->gamma_table;
+  gint width = data->width * 4;
+
+  for (i = 0; i < width; i += 4) {
+    d[i + 0] = s[i] >> 8;
+    d[i + 1] = table[s[i + 1]];
+    d[i + 2] = table[s[i + 2]];
+    d[i + 3] = table[s[i + 3]];
+  }
+}
+
+static void
+gamma_convert_u16_u16 (GammaData * data, gpointer dest, gpointer src)
+{
+  gint i;
+  guint16 *s = src;
+  guint16 *d = dest;
+  guint16 *table = data->gamma_table;
+  gint width = data->width * 4;
+
+  for (i = 0; i < width; i += 4) {
+    d[i + 0] = s[i];
+    d[i + 1] = table[s[i + 1]];
+    d[i + 2] = table[s[i + 2]];
+    d[i + 3] = table[s[i + 3]];
+  }
+}
+
+static void
+setup_gamma_decode (GstVideoConverter * convert)
+{
+  GstVideoTransferFunction func;
+  guint16 *t;
+  gint i;
+
+  func = convert->in_info.colorimetry.transfer;
+
+  convert->gamma_dec.width = convert->current_width;
+  if (convert->current_bits == 8) {
+    GST_DEBUG ("gamma decode 8->16: %d", func);
+    convert->gamma_dec.gamma_func = gamma_convert_u8_u16;
+    t = convert->gamma_dec.gamma_table = g_malloc (sizeof (guint16) * 256);
+
+    for (i = 0; i < 256; i++)
+      t[i] = rint (gst_video_color_transfer_decode (func, i / 255.0) * 65535.0);
+  } else {
+    GST_DEBUG ("gamma decode 16->16: %d", func);
+    convert->gamma_dec.gamma_func = gamma_convert_u16_u16;
+    t = convert->gamma_dec.gamma_table = g_malloc (sizeof (guint16) * 65536);
+
+    for (i = 0; i < 65536; i++)
+      t[i] =
+          rint (gst_video_color_transfer_decode (func, i / 65535.0) * 65535.0);
+  }
+  convert->current_bits = 16;
+  convert->current_pstride = 8;
+  convert->current_format = GST_VIDEO_FORMAT_ARGB64;
+}
+
+static void
+setup_gamma_encode (GstVideoConverter * convert, gint target_bits)
+{
+  GstVideoTransferFunction func;
+  gint i;
+
+  func = convert->out_info.colorimetry.transfer;
+
+  convert->gamma_enc.width = convert->current_width;
+  if (target_bits == 8) {
+    guint8 *t;
+
+    GST_DEBUG ("gamma encode 16->8: %d", func);
+    convert->gamma_enc.gamma_func = gamma_convert_u16_u8;
+    t = convert->gamma_enc.gamma_table = g_malloc (sizeof (guint8) * 65536);
+
+    for (i = 0; i < 65536; i++)
+      t[i] = rint (gst_video_color_transfer_encode (func, i / 65535.0) * 255.0);
+  } else {
+    guint16 *t;
+
+    GST_DEBUG ("gamma encode 16->16: %d", func);
+    convert->gamma_enc.gamma_func = gamma_convert_u16_u16;
+    t = convert->gamma_enc.gamma_table = g_malloc (sizeof (guint16) * 65536);
+
+    for (i = 0; i < 65536; i++)
+      t[i] =
+          rint (gst_video_color_transfer_encode (func, i / 65535.0) * 65535.0);
+  }
+}
+
+static GstLineCache *
+chain_convert_to_RGB (GstVideoConverter * convert, GstLineCache * prev)
+{
+  gboolean do_gamma;
+
+  do_gamma = CHECK_GAMMA_REMAP (convert);
+
+  if (do_gamma) {
+    gint scale;
+
+    if (!convert->unpack_rgb) {
+      color_matrix_set_identity (&convert->to_RGB_matrix);
+      compute_matrix_to_RGB (convert, &convert->to_RGB_matrix);
+
+      /* matrix is in 0..1 range, scale to current bits */
+      GST_DEBUG ("chain RGB convert");
+      scale = 1 << convert->current_bits;
+      color_matrix_scale_components (&convert->to_RGB_matrix,
+          (float) scale, (float) scale, (float) scale);
+
+      prepare_matrix (convert, &convert->to_RGB_matrix);
+
+      if (convert->current_bits == 8)
+        convert->current_format = GST_VIDEO_FORMAT_ARGB;
+      else
+        convert->current_format = GST_VIDEO_FORMAT_ARGB64;
+    }
+
+    prev = convert->to_RGB_lines = gst_line_cache_new (prev);
+    prev->write_input = TRUE;
+    prev->pass_alloc = FALSE;
+    prev->n_lines = 1;
+    prev->stride = convert->current_pstride * convert->current_width;
+    gst_line_cache_set_need_line_func (convert->to_RGB_lines,
+        do_convert_to_RGB_lines, convert, NULL);
+
+    GST_DEBUG ("chain gamma decode");
+    setup_gamma_decode (convert);
+  }
+  return prev;
+}
+
+static GstLineCache *
+chain_hscale (GstVideoConverter * convert, GstLineCache * prev)
+{
+  gint method;
+  guint taps;
+
+  method = GET_OPT_RESAMPLER_METHOD (convert);
+  taps = GET_OPT_RESAMPLER_TAPS (convert);
+
+  convert->h_scaler =
+      gst_video_scaler_new (method, GST_VIDEO_SCALER_FLAG_NONE, taps,
+      convert->in_width, convert->out_width, convert->config);
+
+  gst_video_scaler_get_coeff (convert->h_scaler, 0, NULL, &taps);
+
+  GST_DEBUG ("chain hscale %d->%d, taps %d, method %d",
+      convert->in_width, convert->out_width, taps, method);
+
+  convert->current_width = convert->out_width;
+  convert->h_scale_format = convert->current_format;
+
+  prev = convert->hscale_lines = gst_line_cache_new (prev);
+  prev->write_input = FALSE;
+  prev->pass_alloc = FALSE;
+  prev->n_lines = 1;
+  prev->stride = convert->current_pstride * convert->current_width;
+  gst_line_cache_set_need_line_func (convert->hscale_lines,
+      do_hscale_lines, convert, NULL);
+
+  return prev;
+}
+
+static GstLineCache *
+chain_vscale (GstVideoConverter * convert, GstLineCache * prev)
+{
+  gint method;
+  guint taps, taps_i = 0;
+  gint backlog = 0;
+
+  method = GET_OPT_RESAMPLER_METHOD (convert);
+  taps = GET_OPT_RESAMPLER_TAPS (convert);
+
+  if (GST_VIDEO_INFO_IS_INTERLACED (&convert->in_info)) {
+    convert->v_scaler_i =
+        gst_video_scaler_new (method, GST_VIDEO_SCALER_FLAG_INTERLACED,
+        taps, convert->in_height, convert->out_height, convert->config);
+
+    gst_video_scaler_get_coeff (convert->v_scaler_i, 0, NULL, &taps_i);
+    backlog = BACKLOG;
+  }
+  convert->v_scaler_p =
+      gst_video_scaler_new (method, 0, taps, convert->in_height,
+      convert->out_height, convert->config);
+  convert->v_scale_width = convert->current_width;
+  convert->v_scale_format = convert->current_format;
+  convert->current_height = convert->out_height;
+
+  gst_video_scaler_get_coeff (convert->v_scaler_p, 0, NULL, &taps);
+
+  GST_DEBUG ("chain vscale %d->%d, taps %d, method %d, backlog %d",
+      convert->in_height, convert->out_height, taps, method, backlog);
+
+  prev->backlog = backlog;
+  prev = convert->vscale_lines = gst_line_cache_new (prev);
+  prev->pass_alloc = (taps == 1);
+  prev->write_input = FALSE;
+  prev->n_lines = MAX (taps_i, taps);
+  prev->stride = convert->current_pstride * convert->current_width;
+  gst_line_cache_set_need_line_func (convert->vscale_lines,
+      do_vscale_lines, convert, NULL);
+
+  return prev;
+}
+
+static GstLineCache *
+chain_scale (GstVideoConverter * convert, GstLineCache * prev, gboolean force)
+{
+  gint s0, s1, s2, s3;
+
+  s0 = convert->current_width * convert->current_height;
+  s3 = convert->out_width * convert->out_height;
+
+  GST_DEBUG ("in pixels %d <> out pixels %d", s0, s3);
+
+  if (s3 <= s0 || force) {
+    /* we are making the image smaller or are forced to resample */
+    s1 = convert->out_width * convert->current_height;
+    s2 = convert->current_width * convert->out_height;
+
+    GST_DEBUG ("%d <> %d", s1, s2);
+
+    if (s1 <= s2) {
+      /* h scaling first produces less pixels */
+      if (convert->current_width != convert->out_width)
+        prev = chain_hscale (convert, prev);
+      if (convert->current_height != convert->out_height)
+        prev = chain_vscale (convert, prev);
+    } else {
+      /* v scaling first produces less pixels */
+      if (convert->current_height != convert->out_height)
+        prev = chain_vscale (convert, prev);
+      if (convert->current_width != convert->out_width)
+        prev = chain_hscale (convert, prev);
+    }
+  }
+  return prev;
+}
+
+static GstLineCache *
+chain_convert (GstVideoConverter * convert, GstLineCache * prev)
+{
+  gboolean do_gamma, do_conversion, pass_alloc = FALSE;
+  gboolean same_matrix, same_primaries, same_bits;
+  MatrixData p1, p2;
+
+  same_bits = convert->unpack_bits == convert->pack_bits;
+  if (CHECK_MATRIX_NONE (convert)) {
+    same_matrix = TRUE;
+  } else {
+    same_matrix =
+        convert->in_info.colorimetry.matrix ==
+        convert->out_info.colorimetry.matrix;
+  }
+
+  if (CHECK_PRIMARIES_NONE (convert)) {
+    same_primaries = TRUE;
+  } else {
+    same_primaries =
+        convert->in_info.colorimetry.primaries ==
+        convert->out_info.colorimetry.primaries;
+  }
+
+  GST_DEBUG ("matrix %d -> %d (%d)", convert->in_info.colorimetry.matrix,
+      convert->out_info.colorimetry.matrix, same_matrix);
+  GST_DEBUG ("bits %d -> %d (%d)", convert->unpack_bits, convert->pack_bits,
+      same_bits);
+  GST_DEBUG ("primaries %d -> %d (%d)", convert->in_info.colorimetry.primaries,
+      convert->out_info.colorimetry.primaries, same_primaries);
+
+  color_matrix_set_identity (&convert->convert_matrix);
+
+  if (!same_primaries) {
+    const GstVideoColorPrimariesInfo *pi;
+
+    pi = gst_video_color_primaries_get_info (convert->in_info.colorimetry.
+        primaries);
+    color_matrix_RGB_to_XYZ (&p1, pi->Rx, pi->Ry, pi->Gx, pi->Gy, pi->Bx,
+        pi->By, pi->Wx, pi->Wy);
+    GST_DEBUG ("to XYZ matrix");
+    color_matrix_debug (&p1);
+    GST_DEBUG ("current matrix");
+    color_matrix_multiply (&convert->convert_matrix, &convert->convert_matrix,
+        &p1);
+    color_matrix_debug (&convert->convert_matrix);
+
+    pi = gst_video_color_primaries_get_info (convert->out_info.colorimetry.
+        primaries);
+    color_matrix_RGB_to_XYZ (&p2, pi->Rx, pi->Ry, pi->Gx, pi->Gy, pi->Bx,
+        pi->By, pi->Wx, pi->Wy);
+    color_matrix_invert (&p2, &p2);
+    GST_DEBUG ("to RGB matrix");
+    color_matrix_debug (&p2);
+    color_matrix_multiply (&convert->convert_matrix, &convert->convert_matrix,
+        &p2);
+    GST_DEBUG ("current matrix");
+    color_matrix_debug (&convert->convert_matrix);
+  }
+
+  do_gamma = CHECK_GAMMA_REMAP (convert);
+  if (!do_gamma) {
+
+    convert->in_bits = convert->unpack_bits;
+    convert->out_bits = convert->pack_bits;
+
+    if (!same_bits || !same_matrix || !same_primaries) {
+      /* no gamma, combine all conversions into 1 */
+      if (convert->in_bits < convert->out_bits) {
+        gint scale = 1 << (convert->out_bits - convert->in_bits);
+        color_matrix_scale_components (&convert->convert_matrix,
+            1 / (float) scale, 1 / (float) scale, 1 / (float) scale);
+      }
+      GST_DEBUG ("to RGB matrix");
+      compute_matrix_to_RGB (convert, &convert->convert_matrix);
+      GST_DEBUG ("current matrix");
+      color_matrix_debug (&convert->convert_matrix);
+
+      GST_DEBUG ("to YUV matrix");
+      compute_matrix_to_YUV (convert, &convert->convert_matrix, FALSE);
+      GST_DEBUG ("current matrix");
+      color_matrix_debug (&convert->convert_matrix);
+      if (convert->in_bits > convert->out_bits) {
+        gint scale = 1 << (convert->in_bits - convert->out_bits);
+        color_matrix_scale_components (&convert->convert_matrix,
+            (float) scale, (float) scale, (float) scale);
+      }
+      convert->current_bits = MAX (convert->in_bits, convert->out_bits);
+
+      do_conversion = TRUE;
+      if (!same_matrix || !same_primaries)
+        prepare_matrix (convert, &convert->convert_matrix);
+      if (convert->in_bits == convert->out_bits)
+        pass_alloc = TRUE;
+    } else
+      do_conversion = FALSE;
+
+    convert->current_bits = convert->pack_bits;
+    convert->current_format = convert->pack_format;
+    convert->current_pstride = convert->current_bits >> 1;
+  } else {
+    /* we did gamma, just do colorspace conversion if needed */
+    if (same_primaries) {
+      do_conversion = FALSE;
+    } else {
+      prepare_matrix (convert, &convert->convert_matrix);
+      convert->in_bits = convert->out_bits = 16;
+      pass_alloc = TRUE;
+      do_conversion = TRUE;
+    }
+  }
+
+  if (do_conversion) {
+    GST_DEBUG ("chain conversion");
+    prev = convert->convert_lines = gst_line_cache_new (prev);
+    prev->write_input = TRUE;
+    prev->pass_alloc = pass_alloc;
+    prev->n_lines = 1;
+    prev->stride = convert->current_pstride * convert->current_width;
+    gst_line_cache_set_need_line_func (convert->convert_lines,
+        do_convert_lines, convert, NULL);
+  }
+  return prev;
+}
+
+static void
+convert_set_alpha_u8 (GstVideoConverter * convert, gpointer pixels, gint width)
+{
+  guint8 *p = pixels;
+  guint8 alpha = MIN (convert->alpha_value, 255);
+  int i;
+
+  for (i = 0; i < width; i++)
+    p[i * 4] = alpha;
+}
+
+static void
+convert_set_alpha_u16 (GstVideoConverter * convert, gpointer pixels, gint width)
+{
+  guint16 *p = pixels;
+  guint16 alpha;
+  int i;
+
+  alpha = MIN (convert->alpha_value, 255);
+  alpha |= alpha << 8;
+
+  for (i = 0; i < width; i++)
+    p[i * 4] = alpha;
+}
+
+static void
+convert_mult_alpha_u8 (GstVideoConverter * convert, gpointer pixels, gint width)
+{
+  guint8 *p = pixels;
+  guint alpha = convert->alpha_value;
+  int i;
+
+  for (i = 0; i < width; i++) {
+    gint a = (p[i * 4] * alpha) / 255;
+    p[i * 4] = CLAMP (a, 0, 255);
+  }
+}
+
+static void
+convert_mult_alpha_u16 (GstVideoConverter * convert, gpointer pixels,
+    gint width)
+{
+  guint16 *p = pixels;
+  guint alpha = convert->alpha_value;
+  int i;
+
+  for (i = 0; i < width; i++) {
+    gint a = (p[i * 4] * alpha) / 255;
+    p[i * 4] = CLAMP (a, 0, 65535);
+  }
+}
+
+static GstLineCache *
+chain_alpha (GstVideoConverter * convert, GstLineCache * prev)
+{
+  switch (convert->alpha_mode) {
+    case ALPHA_MODE_NONE:
+    case ALPHA_MODE_COPY:
+      return prev;
+
+    case ALPHA_MODE_SET:
+      if (convert->current_bits == 8)
+        convert->alpha_func = convert_set_alpha_u8;
+      else
+        convert->alpha_func = convert_set_alpha_u16;
+      break;
+    case ALPHA_MODE_MULT:
+      if (convert->current_bits == 8)
+        convert->alpha_func = convert_mult_alpha_u8;
+      else
+        convert->alpha_func = convert_mult_alpha_u16;
+      break;
+  }
+
+  GST_DEBUG ("chain alpha mode %d", convert->alpha_mode);
+  prev = convert->alpha_lines = gst_line_cache_new (prev);
+  prev->write_input = TRUE;
+  prev->pass_alloc = TRUE;
+  prev->n_lines = 1;
+  prev->stride = convert->current_pstride * convert->current_width;
+  gst_line_cache_set_need_line_func (convert->alpha_lines,
+      do_alpha_lines, convert, NULL);
+
+  return prev;
+}
+
+static GstLineCache *
+chain_convert_to_YUV (GstVideoConverter * convert, GstLineCache * prev)
+{
+  gboolean do_gamma;
+
+  do_gamma = CHECK_GAMMA_REMAP (convert);
+
+  if (do_gamma) {
+    gint scale;
+
+    GST_DEBUG ("chain gamma encode");
+    setup_gamma_encode (convert, convert->pack_bits);
+
+    convert->current_bits = convert->pack_bits;
+    convert->current_pstride = convert->current_bits >> 1;
+
+    if (!convert->pack_rgb) {
+      color_matrix_set_identity (&convert->to_YUV_matrix);
+      compute_matrix_to_YUV (convert, &convert->to_YUV_matrix, FALSE);
+
+      /* matrix is in 0..255 range, scale to pack bits */
+      GST_DEBUG ("chain YUV convert");
+      scale = 1 << convert->pack_bits;
+      color_matrix_scale_components (&convert->to_YUV_matrix,
+          1 / (float) scale, 1 / (float) scale, 1 / (float) scale);
+      prepare_matrix (convert, &convert->to_YUV_matrix);
+    }
+    convert->current_format = convert->pack_format;
+
+    prev = convert->to_YUV_lines = gst_line_cache_new (prev);
+    prev->write_input = FALSE;
+    prev->pass_alloc = FALSE;
+    prev->n_lines = 1;
+    prev->stride = convert->current_pstride * convert->current_width;
+    gst_line_cache_set_need_line_func (convert->to_YUV_lines,
+        do_convert_to_YUV_lines, convert, NULL);
+  }
+
+  return prev;
+}
+
+static GstLineCache *
+chain_downsample (GstVideoConverter * convert, GstLineCache * prev)
+{
+  if (convert->downsample_p || convert->downsample_i) {
+    GST_DEBUG ("chain downsample");
+    prev = convert->downsample_lines = gst_line_cache_new (prev);
+    prev->write_input = TRUE;
+    prev->pass_alloc = TRUE;
+    prev->n_lines = 4;
+    prev->stride = convert->current_pstride * convert->current_width;
+    gst_line_cache_set_need_line_func (convert->downsample_lines,
+        do_downsample_lines, convert, NULL);
+  }
+  return prev;
+}
+
+static GstLineCache *
+chain_dither (GstVideoConverter * convert, GstLineCache * prev)
+{
+  gint i;
+  gboolean do_dither = FALSE;
+  GstVideoDitherFlags flags = 0;
+  GstVideoDitherMethod method;
+  guint quant[4], target_quant;
+
+  method = GET_OPT_DITHER_METHOD (convert);
+  if (method == GST_VIDEO_DITHER_NONE)
+    return prev;
+
+  target_quant = GET_OPT_DITHER_QUANTIZATION (convert);
+  GST_DEBUG ("method %d, target-quantization %d", method, target_quant);
+
+  if (convert->pack_pal) {
+    quant[0] = 47;
+    quant[1] = 47;
+    quant[2] = 47;
+    quant[3] = 1;
+    do_dither = TRUE;
+  } else {
+    for (i = 0; i < GST_VIDEO_MAX_COMPONENTS; i++) {
+      gint depth;
+
+      depth = convert->out_info.finfo->depth[i];
+
+      if (depth == 0) {
+        quant[i] = 0;
+        continue;
+      }
+
+      if (convert->current_bits >= depth) {
+        quant[i] = 1 << (convert->current_bits - depth);
+        if (target_quant > quant[i]) {
+          flags |= GST_VIDEO_DITHER_FLAG_QUANTIZE;
+          quant[i] = target_quant;
+        }
+      } else {
+        quant[i] = 0;
+      }
+      if (quant[i] > 1)
+        do_dither = TRUE;
+    }
+  }
+
+  if (do_dither) {
+    GST_DEBUG ("chain dither");
+
+    convert->dither = gst_video_dither_new (method,
+        flags, convert->pack_format, quant, convert->current_width);
+
+    prev = convert->dither_lines = gst_line_cache_new (prev);
+    prev->write_input = TRUE;
+    prev->pass_alloc = TRUE;
+    prev->n_lines = 1;
+    prev->stride = convert->current_pstride * convert->current_width;
+    gst_line_cache_set_need_line_func (prev, do_dither_lines, convert, NULL);
+  }
+  return prev;
+}
+
+static GstLineCache *
+chain_pack (GstVideoConverter * convert, GstLineCache * prev)
+{
+  convert->pack_nlines = convert->out_info.finfo->pack_lines;
+  convert->pack_pstride = convert->current_pstride;
+  convert->identity_pack =
+      (convert->out_info.finfo->format ==
+      convert->out_info.finfo->unpack_format);
+  GST_DEBUG ("chain pack line format %s, pstride %d, identity_pack %d (%d %d)",
+      gst_video_format_to_string (convert->current_format),
+      convert->current_pstride, convert->identity_pack,
+      convert->out_info.finfo->format, convert->out_info.finfo->unpack_format);
+
+  return prev;
+}
+
+static void
+setup_allocators (GstVideoConverter * convert)
+{
+  GstLineCache *cache;
+  GstLineCacheAllocLineFunc alloc_line;
+  gboolean alloc_writable;
+  gpointer user_data;
+  GDestroyNotify notify;
+  gint width, n_lines;
+
+  width = MAX (convert->in_maxwidth, convert->out_maxwidth);
+  width += convert->out_x;
+
+  n_lines = 1;
+
+  /* start with using dest lines if we can directly write into it */
+  if (convert->identity_pack) {
+    alloc_line = get_dest_line;
+    alloc_writable = TRUE;
+    user_data = convert;
+    notify = NULL;
+  } else {
+    user_data =
+        converter_alloc_new (sizeof (guint16) * width * 4, 4 + BACKLOG, convert,
+        NULL);
+    setup_border_alloc (convert, user_data);
+    notify = (GDestroyNotify) converter_alloc_free;
+    alloc_line = get_border_temp_line;
+    /* when we add a border, we need to write */
+    alloc_writable = convert->borderline != NULL;
+  }
+
+  /* now walk backwards, we try to write into the dest lines directly
+   * and keep track if the source needs to be writable */
+  for (cache = convert->pack_lines; cache; cache = cache->prev) {
+    gst_line_cache_set_alloc_line_func (cache, alloc_line, user_data, notify);
+    cache->alloc_writable = alloc_writable;
+    n_lines = MAX (n_lines, cache->n_lines);
+
+    /* make sure only one cache frees the allocator */
+    notify = NULL;
+
+    if (!cache->pass_alloc) {
+      /* can't pass allocator, make new temp line allocator */
+      user_data =
+          converter_alloc_new (sizeof (guint16) * width * 4, n_lines + BACKLOG,
+          convert, NULL);
+      notify = (GDestroyNotify) converter_alloc_free;
+      alloc_line = get_temp_line;
+      alloc_writable = FALSE;
+      n_lines = cache->n_lines;
+    }
+    /* if someone writes to the input, we need a writable line from the
+     * previous cache */
+    if (cache->write_input)
+      alloc_writable = TRUE;
+  }
+  /* free leftover allocator */
+  if (notify)
+    notify (user_data);
+}
+
+static void
+setup_borderline (GstVideoConverter * convert)
+{
+  gint width;
+
+  width = MAX (convert->in_maxwidth, convert->out_maxwidth);
+  width += convert->out_x;
+
+  if (convert->fill_border && (convert->out_height < convert->out_maxheight ||
+          convert->out_width < convert->out_maxwidth)) {
+    guint32 border_val;
+    gint i, w_sub;
+    const GstVideoFormatInfo *out_finfo;
+    gpointer planes[GST_VIDEO_MAX_PLANES];
+    gint strides[GST_VIDEO_MAX_PLANES];
+
+    convert->borderline = g_malloc0 (sizeof (guint16) * width * 4);
+
+    out_finfo = convert->out_info.finfo;
+
+    if (GST_VIDEO_INFO_IS_YUV (&convert->out_info)) {
+      MatrixData cm;
+      gint a, r, g, b;
+      gint y, u, v;
+
+      /* Get Color matrix. */
+      color_matrix_set_identity (&cm);
+      compute_matrix_to_YUV (convert, &cm, TRUE);
+      color_matrix_convert (&cm);
+
+      border_val = GINT32_FROM_BE (convert->border_argb);
+
+      b = (0xFF000000 & border_val) >> 24;
+      g = (0x00FF0000 & border_val) >> 16;
+      r = (0x0000FF00 & border_val) >> 8;
+      a = (0x000000FF & border_val);
+
+      y = 16 + ((r * cm.im[0][0] + g * cm.im[0][1] + b * cm.im[0][2]) >> 8);
+      u = 128 + ((r * cm.im[1][0] + g * cm.im[1][1] + b * cm.im[1][2]) >> 8);
+      v = 128 + ((r * cm.im[2][0] + g * cm.im[2][1] + b * cm.im[2][2]) >> 8);
+
+      a = CLAMP (a, 0, 255);
+      y = CLAMP (y, 0, 255);
+      u = CLAMP (u, 0, 255);
+      v = CLAMP (v, 0, 255);
+
+      border_val = a | (y << 8) | (u << 16) | (v << 24);
+    } else {
+      border_val = GINT32_FROM_BE (convert->border_argb);
+    }
+    if (convert->pack_bits == 8)
+      video_orc_splat_u32 (convert->borderline, border_val, width);
+    else
+      video_orc_splat2_u64 (convert->borderline, border_val, width);
+
+    /* convert pixels */
+    for (i = 0; i < out_finfo->n_planes; i++) {
+      planes[i] = &convert->borders[i];
+      strides[i] = sizeof (guint64);
+    }
+    w_sub = 0;
+    if (out_finfo->n_planes == 1) {
+      /* for packed formats, convert based on subsampling so that we
+       * get a complete group of pixels */
+      for (i = 0; i < out_finfo->n_components; i++) {
+        w_sub = MAX (w_sub, out_finfo->w_sub[i]);
+      }
+    }
+    out_finfo->pack_func (out_finfo, GST_VIDEO_PACK_FLAG_NONE,
+        convert->borderline, 0, planes, strides,
+        GST_VIDEO_CHROMA_SITE_UNKNOWN, 0, 1 << w_sub);
+  } else {
+    convert->borderline = NULL;
+  }
+}
+
+static AlphaMode
+convert_get_alpha_mode (GstVideoConverter * convert)
+{
+  gboolean in_alpha, out_alpha;
+
+  in_alpha = GST_VIDEO_INFO_HAS_ALPHA (&convert->in_info);
+  out_alpha = GST_VIDEO_INFO_HAS_ALPHA (&convert->out_info);
+
+  /* no output alpha, do nothing */
+  if (!out_alpha)
+    return ALPHA_MODE_NONE;
+
+  if (in_alpha) {
+    /* in and out */
+    if (CHECK_ALPHA_COPY (convert))
+      return ALPHA_MODE_COPY;
+
+    if (CHECK_ALPHA_MULT (convert)) {
+      if (GET_OPT_ALPHA_VALUE (convert) == 1.0)
+        return ALPHA_MODE_COPY;
+      else
+        return ALPHA_MODE_MULT;
+    }
+  }
+  /* nothing special, this is what unpack etc does automatically */
+  if (GET_OPT_ALPHA_VALUE (convert) == 1.0)
+    return ALPHA_MODE_NONE;
+
+  /* everything else becomes SET */
+  return ALPHA_MODE_SET;
+}
+
+/**
+ * gst_video_converter_new: (skip)
+ * @in_info: a #GstVideoInfo
+ * @out_info: a #GstVideoInfo
+ * @config: (transfer full): a #GstStructure with configuration options
+ *
+ * Create a new converter object to convert between @in_info and @out_info
+ * with @config.
+ *
+ * Returns: a #GstVideoConverter or %NULL if conversion is not possible.
+ *
+ * Since: 1.6
+ */
+GstVideoConverter *
+gst_video_converter_new (GstVideoInfo * in_info, GstVideoInfo * out_info,
+    GstStructure * config)
+{
+  GstVideoConverter *convert;
+  GstLineCache *prev;
+  const GstVideoFormatInfo *fin, *fout, *finfo;
+  gdouble alpha_value;
+
+  g_return_val_if_fail (in_info != NULL, NULL);
+  g_return_val_if_fail (out_info != NULL, NULL);
+  /* we won't ever do framerate conversion */
+  g_return_val_if_fail (in_info->fps_n == out_info->fps_n, NULL);
+  g_return_val_if_fail (in_info->fps_d == out_info->fps_d, NULL);
+  /* we won't ever do deinterlace */
+  g_return_val_if_fail (in_info->interlace_mode == out_info->interlace_mode,
+      NULL);
+
+  convert = g_slice_new0 (GstVideoConverter);
+
+  fin = in_info->finfo;
+  fout = out_info->finfo;
+
+  convert->in_info = *in_info;
+  convert->out_info = *out_info;
+
+  /* default config */
+  convert->config = gst_structure_new_empty ("GstVideoConverter");
+  if (config)
+    gst_video_converter_set_config (convert, config);
+
+  convert->in_maxwidth = GST_VIDEO_INFO_WIDTH (in_info);
+  convert->in_maxheight = GST_VIDEO_INFO_HEIGHT (in_info);
+  convert->out_maxwidth = GST_VIDEO_INFO_WIDTH (out_info);
+  convert->out_maxheight = GST_VIDEO_INFO_HEIGHT (out_info);
+
+  convert->in_x = get_opt_int (convert, GST_VIDEO_CONVERTER_OPT_SRC_X, 0);
+  convert->in_y = get_opt_int (convert, GST_VIDEO_CONVERTER_OPT_SRC_Y, 0);
+  convert->in_x &= ~((1 << fin->w_sub[1]) - 1);
+  convert->in_y &= ~((1 << fin->h_sub[1]) - 1);
+
+  convert->in_width = get_opt_int (convert,
+      GST_VIDEO_CONVERTER_OPT_SRC_WIDTH, convert->in_maxwidth - convert->in_x);
+  convert->in_height = get_opt_int (convert,
+      GST_VIDEO_CONVERTER_OPT_SRC_HEIGHT,
+      convert->in_maxheight - convert->in_y);
+
+  convert->in_width =
+      MIN (convert->in_width, convert->in_maxwidth - convert->in_x);
+  convert->in_height =
+      MIN (convert->in_height, convert->in_maxheight - convert->in_y);
+
+  convert->out_x = get_opt_int (convert, GST_VIDEO_CONVERTER_OPT_DEST_X, 0);
+  convert->out_y = get_opt_int (convert, GST_VIDEO_CONVERTER_OPT_DEST_Y, 0);
+  convert->out_x &= ~((1 << fout->w_sub[1]) - 1);
+  convert->out_y &= ~((1 << fout->h_sub[1]) - 1);
+
+  convert->out_width = get_opt_int (convert,
+      GST_VIDEO_CONVERTER_OPT_DEST_WIDTH,
+      convert->out_maxwidth - convert->out_x);
+  convert->out_height =
+      get_opt_int (convert, GST_VIDEO_CONVERTER_OPT_DEST_HEIGHT,
+      convert->out_maxheight - convert->out_y);
+
+  convert->out_width =
+      MIN (convert->out_width, convert->out_maxwidth - convert->out_x);
+  convert->out_height =
+      MIN (convert->out_height, convert->out_maxheight - convert->out_y);
+
+  convert->fill_border = GET_OPT_FILL_BORDER (convert);
+  convert->border_argb = get_opt_uint (convert,
+      GST_VIDEO_CONVERTER_OPT_BORDER_ARGB, DEFAULT_OPT_BORDER_ARGB);
+
+  alpha_value = GET_OPT_ALPHA_VALUE (convert);
+  convert->alpha_value = 255 * alpha_value;
+  convert->alpha_mode = convert_get_alpha_mode (convert);
+
+  convert->unpack_format = in_info->finfo->unpack_format;
+  finfo = gst_video_format_get_info (convert->unpack_format);
+  convert->unpack_bits = GST_VIDEO_FORMAT_INFO_DEPTH (finfo, 0);
+  convert->unpack_rgb = GST_VIDEO_FORMAT_INFO_IS_RGB (finfo);
+
+  convert->pack_format = out_info->finfo->unpack_format;
+  finfo = gst_video_format_get_info (convert->pack_format);
+  convert->pack_bits = GST_VIDEO_FORMAT_INFO_DEPTH (finfo, 0);
+  convert->pack_rgb = GST_VIDEO_FORMAT_INFO_IS_RGB (finfo);
+  convert->pack_pal =
+      gst_video_format_get_palette (GST_VIDEO_INFO_FORMAT (out_info),
+      &convert->pack_palsize);
+
+  if (video_converter_lookup_fastpath (convert))
+    goto done;
+
+  if (in_info->finfo->unpack_func == NULL)
+    goto no_unpack_func;
+
+  if (out_info->finfo->pack_func == NULL)
+    goto no_pack_func;
+
+  convert->convert = video_converter_generic;
+
+  convert->current_format = GST_VIDEO_INFO_FORMAT (in_info);
+  convert->current_width = convert->in_width;
+  convert->current_height = convert->in_height;
+
+  /* unpack */
+  prev = chain_unpack_line (convert);
+  /* upsample chroma */
+  prev = chain_upsample (convert, prev);
+  /* convert to gamma decoded RGB */
+  prev = chain_convert_to_RGB (convert, prev);
+  /* do all downscaling */
+  prev = chain_scale (convert, prev, FALSE);
+  /* do conversion between color spaces */
+  prev = chain_convert (convert, prev);
+  /* do alpha channels */
+  prev = chain_alpha (convert, prev);
+  /* do all remaining (up)scaling */
+  prev = chain_scale (convert, prev, TRUE);
+  /* convert to gamma encoded Y'Cb'Cr' */
+  prev = chain_convert_to_YUV (convert, prev);
+  /* downsample chroma */
+  prev = chain_downsample (convert, prev);
+  /* dither */
+  prev = chain_dither (convert, prev);
+  /* pack into final format */
+  convert->pack_lines = chain_pack (convert, prev);
+
+  setup_borderline (convert);
+  /* now figure out allocators */
+  setup_allocators (convert);
+
+done:
+  return convert;
+
+  /* ERRORS */
+no_unpack_func:
+  {
+    GST_ERROR ("no unpack_func for format %s",
+        gst_video_format_to_string (GST_VIDEO_INFO_FORMAT (in_info)));
+    gst_video_converter_free (convert);
+    return NULL;
+  }
+no_pack_func:
+  {
+    GST_ERROR ("no pack_func for format %s",
+        gst_video_format_to_string (GST_VIDEO_INFO_FORMAT (out_info)));
+    gst_video_converter_free (convert);
+    return NULL;
+  }
+}
+
+static void
+clear_matrix_data (MatrixData * data)
+{
+  g_free (data->t_r);
+  g_free (data->t_g);
+  g_free (data->t_b);
+}
+
+/**
+ * gst_video_converter_free:
+ * @convert: a #GstVideoConverter
+ *
+ * Free @convert
+ *
+ * Since: 1.6
+ */
+void
+gst_video_converter_free (GstVideoConverter * convert)
+{
+  gint i;
+
+  g_return_if_fail (convert != NULL);
+
+  if (convert->upsample_p)
+    gst_video_chroma_resample_free (convert->upsample_p);
+  if (convert->upsample_i)
+    gst_video_chroma_resample_free (convert->upsample_i);
+  if (convert->downsample_p)
+    gst_video_chroma_resample_free (convert->downsample_p);
+  if (convert->downsample_i)
+    gst_video_chroma_resample_free (convert->downsample_i);
+  if (convert->v_scaler_p)
+    gst_video_scaler_free (convert->v_scaler_p);
+  if (convert->v_scaler_i)
+    gst_video_scaler_free (convert->v_scaler_i);
+  if (convert->h_scaler)
+    gst_video_scaler_free (convert->h_scaler);
+
+  if (convert->unpack_lines)
+    gst_line_cache_free (convert->unpack_lines);
+  if (convert->upsample_lines)
+    gst_line_cache_free (convert->upsample_lines);
+  if (convert->to_RGB_lines)
+    gst_line_cache_free (convert->to_RGB_lines);
+  if (convert->hscale_lines)
+    gst_line_cache_free (convert->hscale_lines);
+  if (convert->vscale_lines)
+    gst_line_cache_free (convert->vscale_lines);
+  if (convert->convert_lines)
+    gst_line_cache_free (convert->convert_lines);
+  if (convert->alpha_lines)
+    gst_line_cache_free (convert->alpha_lines);
+  if (convert->to_YUV_lines)
+    gst_line_cache_free (convert->to_YUV_lines);
+  if (convert->downsample_lines)
+    gst_line_cache_free (convert->downsample_lines);
+  if (convert->dither_lines)
+    gst_line_cache_free (convert->dither_lines);
+
+  if (convert->dither)
+    gst_video_dither_free (convert->dither);
+
+  g_free (convert->gamma_dec.gamma_table);
+  g_free (convert->gamma_enc.gamma_table);
+
+  g_free (convert->tmpline);
+  g_free (convert->borderline);
+
+  if (convert->config)
+    gst_structure_free (convert->config);
+
+  for (i = 0; i < 4; i++) {
+    if (convert->fv_scaler[i])
+      gst_video_scaler_free (convert->fv_scaler[i]);
+    if (convert->fh_scaler[i])
+      gst_video_scaler_free (convert->fh_scaler[i]);
+  }
+  clear_matrix_data (&convert->to_RGB_matrix);
+  clear_matrix_data (&convert->convert_matrix);
+  clear_matrix_data (&convert->to_YUV_matrix);
+
+  g_slice_free (GstVideoConverter, convert);
+}
+
+static gboolean
+copy_config (GQuark field_id, const GValue * value, gpointer user_data)
+{
+  GstVideoConverter *convert = user_data;
+
+  gst_structure_id_set_value (convert->config, field_id, value);
+
+  return TRUE;
+}
+
+/**
+ * gst_video_converter_set_config:
+ * @convert: a #GstVideoConverter
+ * @config: (transfer full): a #GstStructure
+ *
+ * Set @config as extra configuraion for @convert.
+ *
+ * If the parameters in @config can not be set exactly, this function returns
+ * %FALSE and will try to update as much state as possible. The new state can
+ * then be retrieved and refined with gst_video_converter_get_config().
+ *
+ * Look at the #GST_VIDEO_CONVERTER_OPT_* fields to check valid configuration
+ * option and values.
+ *
+ * Returns: %TRUE when @config could be set.
+ *
+ * Since: 1.6
+ */
+gboolean
+gst_video_converter_set_config (GstVideoConverter * convert,
+    GstStructure * config)
+{
+  g_return_val_if_fail (convert != NULL, FALSE);
+  g_return_val_if_fail (config != NULL, FALSE);
+
+  gst_structure_foreach (config, copy_config, convert);
+  gst_structure_free (config);
+
+  return TRUE;
+}
+
+/**
+ * gst_video_converter_get_config:
+ * @convert: a #GstVideoConverter
+ *
+ * Get the current configuration of @convert.
+ *
+ * Returns: a #GstStructure that remains valid for as long as @convert is valid
+ *   or until gst_video_converter_set_config() is called.
+ */
+const GstStructure *
+gst_video_converter_get_config (GstVideoConverter * convert)
+{
+  g_return_val_if_fail (convert != NULL, NULL);
+
+  return convert->config;
+}
+
+/**
+ * gst_video_converter_frame:
+ * @convert: a #GstVideoConverter
+ * @dest: a #GstVideoFrame
+ * @src: a #GstVideoFrame
+ *
+ * Convert the pixels of @src into @dest using @convert.
+ *
+ * Since: 1.6
+ */
+void
+gst_video_converter_frame (GstVideoConverter * convert,
+    const GstVideoFrame * src, GstVideoFrame * dest)
+{
+  g_return_if_fail (convert != NULL);
+  g_return_if_fail (src != NULL);
+  g_return_if_fail (dest != NULL);
+
+  convert->convert (convert, src, dest);
+}
+
+static void
+video_converter_compute_matrix (GstVideoConverter * convert)
+{
+  MatrixData *dst = &convert->convert_matrix;
+
+  color_matrix_set_identity (dst);
+  compute_matrix_to_RGB (convert, dst);
+  compute_matrix_to_YUV (convert, dst, FALSE);
+
+  convert->current_bits = 8;
+  prepare_matrix (convert, dst);
+}
+
+static void
+video_converter_compute_resample (GstVideoConverter * convert)
+{
+  GstVideoInfo *in_info, *out_info;
+  const GstVideoFormatInfo *sfinfo, *dfinfo;
+
+  if (CHECK_CHROMA_NONE (convert))
+    return;
+
+  in_info = &convert->in_info;
+  out_info = &convert->out_info;
+
+  sfinfo = in_info->finfo;
+  dfinfo = out_info->finfo;
+
+  GST_DEBUG ("site: %d->%d, w_sub: %d->%d, h_sub: %d->%d", in_info->chroma_site,
+      out_info->chroma_site, sfinfo->w_sub[2], dfinfo->w_sub[2],
+      sfinfo->h_sub[2], dfinfo->h_sub[2]);
+
+  if (sfinfo->w_sub[2] != dfinfo->w_sub[2] ||
+      sfinfo->h_sub[2] != dfinfo->h_sub[2] ||
+      in_info->chroma_site != out_info->chroma_site ||
+      in_info->width != out_info->width ||
+      in_info->height != out_info->height) {
+    if (GST_VIDEO_INFO_IS_INTERLACED (in_info)) {
+      if (!CHECK_CHROMA_DOWNSAMPLE (convert))
+        convert->upsample_i = gst_video_chroma_resample_new (0,
+            in_info->chroma_site, GST_VIDEO_CHROMA_FLAG_INTERLACED,
+            sfinfo->unpack_format, sfinfo->w_sub[2], sfinfo->h_sub[2]);
+      if (!CHECK_CHROMA_UPSAMPLE (convert))
+        convert->downsample_i =
+            gst_video_chroma_resample_new (0, out_info->chroma_site,
+            GST_VIDEO_CHROMA_FLAG_INTERLACED, dfinfo->unpack_format,
+            -dfinfo->w_sub[2], -dfinfo->h_sub[2]);
+    }
+    if (!CHECK_CHROMA_DOWNSAMPLE (convert))
+      convert->upsample_p = gst_video_chroma_resample_new (0,
+          in_info->chroma_site, 0, sfinfo->unpack_format, sfinfo->w_sub[2],
+          sfinfo->h_sub[2]);
+    if (!CHECK_CHROMA_UPSAMPLE (convert))
+      convert->downsample_p = gst_video_chroma_resample_new (0,
+          out_info->chroma_site, 0, dfinfo->unpack_format, -dfinfo->w_sub[2],
+          -dfinfo->h_sub[2]);
+  }
+}
+
+#define FRAME_GET_PLANE_STRIDE(frame, plane) \
+  GST_VIDEO_FRAME_PLANE_STRIDE (frame, plane)
+#define FRAME_GET_PLANE_LINE(frame, plane, line) \
+  (gpointer)(((guint8*)(GST_VIDEO_FRAME_PLANE_DATA (frame, plane))) + \
+      FRAME_GET_PLANE_STRIDE (frame, plane) * (line))
+
+#define FRAME_GET_COMP_STRIDE(frame, comp) \
+  GST_VIDEO_FRAME_COMP_STRIDE (frame, comp)
+#define FRAME_GET_COMP_LINE(frame, comp, line) \
+  (gpointer)(((guint8*)(GST_VIDEO_FRAME_COMP_DATA (frame, comp))) + \
+      FRAME_GET_COMP_STRIDE (frame, comp) * (line))
+
+#define FRAME_GET_STRIDE(frame)      FRAME_GET_PLANE_STRIDE (frame, 0)
+#define FRAME_GET_LINE(frame,line)   FRAME_GET_PLANE_LINE (frame, 0, line)
+
+#define FRAME_GET_Y_LINE(frame,line) FRAME_GET_COMP_LINE(frame, GST_VIDEO_COMP_Y, line)
+#define FRAME_GET_U_LINE(frame,line) FRAME_GET_COMP_LINE(frame, GST_VIDEO_COMP_U, line)
+#define FRAME_GET_V_LINE(frame,line) FRAME_GET_COMP_LINE(frame, GST_VIDEO_COMP_V, line)
+#define FRAME_GET_A_LINE(frame,line) FRAME_GET_COMP_LINE(frame, GST_VIDEO_COMP_A, line)
+
+#define FRAME_GET_Y_STRIDE(frame)    FRAME_GET_COMP_STRIDE(frame, GST_VIDEO_COMP_Y)
+#define FRAME_GET_U_STRIDE(frame)    FRAME_GET_COMP_STRIDE(frame, GST_VIDEO_COMP_U)
+#define FRAME_GET_V_STRIDE(frame)    FRAME_GET_COMP_STRIDE(frame, GST_VIDEO_COMP_V)
+#define FRAME_GET_A_STRIDE(frame)    FRAME_GET_COMP_STRIDE(frame, GST_VIDEO_COMP_A)
+
+
+#define UNPACK_FRAME(frame,dest,line,x,width)        \
+  frame->info.finfo->unpack_func (frame->info.finfo, \
+      (GST_VIDEO_FRAME_IS_INTERLACED (frame) ?       \
+        GST_VIDEO_PACK_FLAG_INTERLACED :             \
+        GST_VIDEO_PACK_FLAG_NONE),                   \
+      dest, frame->data, frame->info.stride, x,      \
+      line, width)
+#define PACK_FRAME(frame,src,line,width)             \
+  frame->info.finfo->pack_func (frame->info.finfo,   \
+      (GST_VIDEO_FRAME_IS_INTERLACED (frame) ?       \
+        GST_VIDEO_PACK_FLAG_INTERLACED :             \
+        GST_VIDEO_PACK_FLAG_NONE),                   \
+      src, 0, frame->data, frame->info.stride,       \
+      frame->info.chroma_site, line, width);
+
+static gpointer
+get_dest_line (GstLineCache * cache, gint idx, gpointer user_data)
+{
+  GstVideoConverter *convert = user_data;
+  guint8 *line;
+  gint pstride = convert->pack_pstride;
+  gint out_x = convert->out_x;
+  guint cline;
+
+  cline = CLAMP (idx, 0, convert->out_maxheight - 1);
+
+  line = FRAME_GET_LINE (convert->dest, cline);
+  GST_DEBUG ("get dest line %d %p", cline, line);
+
+  if (convert->borderline) {
+    gint r_border = (out_x + convert->out_width) * pstride;
+    gint rb_width = convert->out_maxwidth * pstride - r_border;
+    gint lb_width = out_x * pstride;
+
+    memcpy (line, convert->borderline, lb_width);
+    memcpy (line + r_border, convert->borderline, rb_width);
+  }
+  line += out_x * pstride;
+
+  return line;
+}
+
+static gboolean
+do_unpack_lines (GstLineCache * cache, gint out_line, gint in_line,
+    gpointer user_data)
+{
+  GstVideoConverter *convert = user_data;
+  gpointer tmpline;
+  guint cline;
+
+  cline = CLAMP (in_line + convert->in_y, 0, convert->in_maxheight - 1);
+
+  if (cache->alloc_writable || !convert->identity_unpack) {
+    tmpline = gst_line_cache_alloc_line (cache, out_line);
+    GST_DEBUG ("unpack line %d (%u) %p", in_line, cline, tmpline);
+    UNPACK_FRAME (convert->src, tmpline, cline, convert->in_x,
+        convert->in_width);
+  } else {
+    tmpline = ((guint8 *) FRAME_GET_LINE (convert->src, cline)) +
+        convert->in_x * convert->unpack_pstride;
+    GST_DEBUG ("get src line %d (%u) %p", in_line, cline, tmpline);
+  }
+  gst_line_cache_add_line (cache, in_line, tmpline);
+
+  return TRUE;
+}
+
+static gboolean
+do_upsample_lines (GstLineCache * cache, gint out_line, gint in_line,
+    gpointer user_data)
+{
+  GstVideoConverter *convert = user_data;
+  gpointer *lines;
+  gint i, start_line, n_lines;
+
+  n_lines = convert->up_n_lines;
+  start_line = in_line;
+  if (start_line < n_lines + convert->up_offset) {
+    start_line += convert->up_offset;
+    out_line += convert->up_offset;
+  }
+
+  /* get the lines needed for chroma upsample */
+  lines = gst_line_cache_get_lines (cache->prev, out_line, start_line, n_lines);
+
+  if (convert->upsample) {
+    GST_DEBUG ("doing upsample %d-%d %p", start_line, start_line + n_lines - 1,
+        lines[0]);
+    gst_video_chroma_resample (convert->upsample, lines, convert->in_width);
+  }
+
+  for (i = 0; i < n_lines; i++)
+    gst_line_cache_add_line (cache, start_line + i, lines[i]);
+
+  return TRUE;
+}
+
+static gboolean
+do_convert_to_RGB_lines (GstLineCache * cache, gint out_line, gint in_line,
+    gpointer user_data)
+{
+  GstVideoConverter *convert = user_data;
+  MatrixData *data = &convert->to_RGB_matrix;
+  gpointer *lines, destline;
+
+  lines = gst_line_cache_get_lines (cache->prev, out_line, in_line, 1);
+  destline = lines[0];
+
+  if (data->matrix_func) {
+    GST_DEBUG ("to RGB line %d %p", in_line, destline);
+    data->matrix_func (data, destline);
+  }
+  if (convert->gamma_dec.gamma_func) {
+    destline = gst_line_cache_alloc_line (cache, out_line);
+
+    GST_DEBUG ("gamma decode line %d %p->%p", in_line, lines[0], destline);
+    convert->gamma_dec.gamma_func (&convert->gamma_dec, destline, lines[0]);
+  }
+  gst_line_cache_add_line (cache, in_line, destline);
+
+  return TRUE;
+}
+
+static gboolean
+do_hscale_lines (GstLineCache * cache, gint out_line, gint in_line,
+    gpointer user_data)
+{
+  GstVideoConverter *convert = user_data;
+  gpointer *lines, destline;
+
+  lines = gst_line_cache_get_lines (cache->prev, out_line, in_line, 1);
+
+  destline = gst_line_cache_alloc_line (cache, out_line);
+
+  GST_DEBUG ("hresample line %d %p->%p", in_line, lines[0], destline);
+  gst_video_scaler_horizontal (convert->h_scaler, convert->h_scale_format,
+      lines[0], destline, 0, convert->out_width);
+
+  gst_line_cache_add_line (cache, in_line, destline);
+
+  return TRUE;
+}
+
+static gboolean
+do_vscale_lines (GstLineCache * cache, gint out_line, gint in_line,
+    gpointer user_data)
+{
+  GstVideoConverter *convert = user_data;
+  gpointer *lines, destline;
+  guint sline, n_lines;
+  guint cline;
+
+  cline = CLAMP (in_line, 0, convert->out_height - 1);
+
+  gst_video_scaler_get_coeff (convert->v_scaler, cline, &sline, &n_lines);
+  lines = gst_line_cache_get_lines (cache->prev, out_line, sline, n_lines);
+
+  destline = gst_line_cache_alloc_line (cache, out_line);
+
+  GST_DEBUG ("vresample line %d %d-%d %p->%p", in_line, sline,
+      sline + n_lines - 1, lines[0], destline);
+  gst_video_scaler_vertical (convert->v_scaler, convert->v_scale_format, lines,
+      destline, cline, convert->v_scale_width);
+
+  gst_line_cache_add_line (cache, in_line, destline);
+
+  return TRUE;
+}
+
+static gboolean
+do_convert_lines (GstLineCache * cache, gint out_line, gint in_line,
+    gpointer user_data)
+{
+  GstVideoConverter *convert = user_data;
+  MatrixData *data = &convert->convert_matrix;
+  gpointer *lines, destline;
+  guint in_bits, out_bits;
+  gint width;
+
+  lines = gst_line_cache_get_lines (cache->prev, out_line, in_line, 1);
+
+  destline = lines[0];
+
+  in_bits = convert->in_bits;
+  out_bits = convert->out_bits;
+
+  width = MIN (convert->in_width, convert->out_width);
+
+  if (out_bits == 16 || in_bits == 16) {
+    gpointer srcline = lines[0];
+
+    if (out_bits != in_bits)
+      destline = gst_line_cache_alloc_line (cache, out_line);
+
+    /* FIXME, we can scale in the conversion matrix */
+    if (in_bits == 8) {
+      GST_DEBUG ("8->16 line %d %p->%p", in_line, srcline, destline);
+      video_orc_convert_u8_to_u16 (destline, srcline, width * 4);
+      srcline = destline;
+    }
+
+    if (data->matrix_func) {
+      GST_DEBUG ("matrix line %d %p", in_line, srcline);
+      data->matrix_func (data, srcline);
+    }
+
+    /* FIXME, dither here */
+    if (out_bits == 8) {
+      GST_DEBUG ("16->8 line %d %p->%p", in_line, srcline, destline);
+      video_orc_convert_u16_to_u8 (destline, srcline, width * 4);
+    }
+  } else {
+    if (data->matrix_func) {
+      GST_DEBUG ("matrix line %d %p", in_line, destline);
+      data->matrix_func (data, destline);
+    }
+  }
+  gst_line_cache_add_line (cache, in_line, destline);
+
+  return TRUE;
+}
+
+static gboolean
+do_alpha_lines (GstLineCache * cache, gint out_line, gint in_line,
+    gpointer user_data)
+{
+  gpointer *lines, destline;
+  GstVideoConverter *convert = user_data;
+  gint width = MIN (convert->in_width, convert->out_width);
+
+  lines = gst_line_cache_get_lines (cache->prev, out_line, in_line, 1);
+  destline = lines[0];
+
+  GST_DEBUG ("alpha line %d %p", in_line, destline);
+  convert->alpha_func (convert, destline, width);
+
+  gst_line_cache_add_line (cache, in_line, destline);
+
+  return TRUE;
+}
+
+static gboolean
+do_convert_to_YUV_lines (GstLineCache * cache, gint out_line, gint in_line,
+    gpointer user_data)
+{
+  GstVideoConverter *convert = user_data;
+  MatrixData *data = &convert->to_YUV_matrix;
+  gpointer *lines, destline;
+
+  lines = gst_line_cache_get_lines (cache->prev, out_line, in_line, 1);
+  destline = lines[0];
+
+  if (convert->gamma_enc.gamma_func) {
+    destline = gst_line_cache_alloc_line (cache, out_line);
+
+    GST_DEBUG ("gamma encode line %d %p->%p", in_line, lines[0], destline);
+    convert->gamma_enc.gamma_func (&convert->gamma_enc, destline, lines[0]);
+  }
+  if (data->matrix_func) {
+    GST_DEBUG ("to YUV line %d %p", in_line, destline);
+    data->matrix_func (data, destline);
+  }
+  gst_line_cache_add_line (cache, in_line, destline);
+
+  return TRUE;
+}
+
+static gboolean
+do_downsample_lines (GstLineCache * cache, gint out_line, gint in_line,
+    gpointer user_data)
+{
+  GstVideoConverter *convert = user_data;
+  gpointer *lines;
+  gint i, start_line, n_lines;
+
+  n_lines = convert->down_n_lines;
+  start_line = in_line;
+  if (start_line < n_lines + convert->down_offset)
+    start_line += convert->down_offset;
+
+  /* get the lines needed for chroma downsample */
+  lines = gst_line_cache_get_lines (cache->prev, out_line, start_line, n_lines);
+
+  if (convert->downsample) {
+    GST_DEBUG ("downsample line %d %d-%d %p", in_line, start_line,
+        start_line + n_lines - 1, lines[0]);
+    gst_video_chroma_resample (convert->downsample, lines, convert->out_width);
+  }
+
+  for (i = 0; i < n_lines; i++)
+    gst_line_cache_add_line (cache, start_line + i, lines[i]);
+
+  return TRUE;
+}
+
+static gboolean
+do_dither_lines (GstLineCache * cache, gint out_line, gint in_line,
+    gpointer user_data)
+{
+  GstVideoConverter *convert = user_data;
+  gpointer *lines, destline;
+
+  lines = gst_line_cache_get_lines (cache->prev, out_line, in_line, 1);
+  destline = lines[0];
+
+  if (convert->dither) {
+    GST_DEBUG ("Dither line %d %p", in_line, destline);
+    gst_video_dither_line (convert->dither, destline, 0, out_line,
+        convert->out_width);
+  }
+  gst_line_cache_add_line (cache, in_line, destline);
+
+  return TRUE;
+}
+
+static void
+video_converter_generic (GstVideoConverter * convert, const GstVideoFrame * src,
+    GstVideoFrame * dest)
+{
+  gint i;
+  gint out_maxwidth, out_maxheight;
+  gint out_x, out_y, out_height;
+  gint pack_lines, pstride;
+  gint lb_width;
+
+  out_height = convert->out_height;
+  out_maxwidth = convert->out_maxwidth;
+  out_maxheight = convert->out_maxheight;
+
+  out_x = convert->out_x;
+  out_y = convert->out_y;
+
+  convert->src = src;
+  convert->dest = dest;
+
+  if (GST_VIDEO_FRAME_IS_INTERLACED (src)) {
+    GST_DEBUG ("setup interlaced frame");
+    convert->upsample = convert->upsample_i;
+    convert->downsample = convert->downsample_i;
+    convert->v_scaler = convert->v_scaler_i;
+  } else {
+    GST_DEBUG ("setup progressive frame");
+    convert->upsample = convert->upsample_p;
+    convert->downsample = convert->downsample_p;
+    convert->v_scaler = convert->v_scaler_p;
+  }
+  if (convert->upsample) {
+    gst_video_chroma_resample_get_info (convert->upsample,
+        &convert->up_n_lines, &convert->up_offset);
+  } else {
+    convert->up_n_lines = 1;
+    convert->up_offset = 0;
+  }
+  if (convert->downsample) {
+    gst_video_chroma_resample_get_info (convert->downsample,
+        &convert->down_n_lines, &convert->down_offset);
+  } else {
+    convert->down_n_lines = 1;
+    convert->down_offset = 0;
+  }
+
+  pack_lines = convert->pack_nlines;    /* only 1 for now */
+  pstride = convert->pack_pstride;
+
+  lb_width = out_x * pstride;
+
+  if (convert->borderline) {
+    /* FIXME we should try to avoid PACK_FRAME */
+    for (i = 0; i < out_y; i++)
+      PACK_FRAME (dest, convert->borderline, i, out_maxwidth);
+  }
+
+  for (i = 0; i < out_height; i += pack_lines) {
+    gpointer *lines;
+
+    /* load the lines needed to pack */
+    lines = gst_line_cache_get_lines (convert->pack_lines, i + out_y,
+        i, pack_lines);
+
+    if (!convert->identity_pack) {
+      /* take away the border */
+      guint8 *l = ((guint8 *) lines[0]) - lb_width;
+      /* and pack into destination */
+      GST_DEBUG ("pack line %d %p (%p)", i + out_y, lines[0], l);
+      PACK_FRAME (dest, l, i + out_y, out_maxwidth);
+    }
+  }
+
+  if (convert->borderline) {
+    for (i = out_y + out_height; i < out_maxheight; i++)
+      PACK_FRAME (dest, convert->borderline, i, out_maxwidth);
+  }
+  if (convert->pack_pal) {
+    memcpy (GST_VIDEO_FRAME_PLANE_DATA (dest, 1), convert->pack_pal,
+        convert->pack_palsize);
+  }
+}
+
+static void convert_fill_border (GstVideoConverter * convert,
+    GstVideoFrame * dest);
+
+/* Fast paths */
+
+#define GET_LINE_OFFSETS(interlaced,line,l1,l2) \
+    if (interlaced) {                           \
+      l1 = (line & 2 ? line - 1 : line);        \
+      l2 = l1 + 2;                              \
+    } else {                                    \
+      l1 = line;                                \
+      l2 = l1 + 1;                              \
+    }
+
+static void
+convert_I420_YUY2 (GstVideoConverter * convert, const GstVideoFrame * src,
+    GstVideoFrame * dest)
+{
+  int i;
+  gint width = convert->in_width;
+  gint height = convert->in_height;
+  gboolean interlaced = GST_VIDEO_FRAME_IS_INTERLACED (src);
+  gint l1, l2;
+
+  for (i = 0; i < GST_ROUND_DOWN_2 (height); i += 2) {
+    GET_LINE_OFFSETS (interlaced, i, l1, l2);
+
+    video_orc_convert_I420_YUY2 (FRAME_GET_LINE (dest, l1),
+        FRAME_GET_LINE (dest, l2),
+        FRAME_GET_Y_LINE (src, l1),
+        FRAME_GET_Y_LINE (src, l2),
+        FRAME_GET_U_LINE (src, i >> 1),
+        FRAME_GET_V_LINE (src, i >> 1), (width + 1) / 2);
+  }
+
+  /* now handle last line */
+  if (height & 1) {
+    UNPACK_FRAME (src, convert->tmpline, height - 1, convert->in_x, width);
+    PACK_FRAME (dest, convert->tmpline, height - 1, width);
+  }
+}
+
+static void
+convert_I420_UYVY (GstVideoConverter * convert, const GstVideoFrame * src,
+    GstVideoFrame * dest)
+{
+  int i;
+  gint width = convert->in_width;
+  gint height = convert->in_height;
+  gboolean interlaced = GST_VIDEO_FRAME_IS_INTERLACED (src);
+  gint l1, l2;
+
+  for (i = 0; i < GST_ROUND_DOWN_2 (height); i += 2) {
+    GET_LINE_OFFSETS (interlaced, i, l1, l2);
+
+    video_orc_convert_I420_UYVY (FRAME_GET_LINE (dest, l1),
+        FRAME_GET_LINE (dest, l2),
+        FRAME_GET_Y_LINE (src, l1),
+        FRAME_GET_Y_LINE (src, l2),
+        FRAME_GET_U_LINE (src, i >> 1),
+        FRAME_GET_V_LINE (src, i >> 1), (width + 1) / 2);
+  }
+
+  /* now handle last line */
+  if (height & 1) {
+    UNPACK_FRAME (src, convert->tmpline, height - 1, convert->in_x, width);
+    PACK_FRAME (dest, convert->tmpline, height - 1, width);
+  }
+}
+
+static void
+convert_I420_AYUV (GstVideoConverter * convert, const GstVideoFrame * src,
+    GstVideoFrame * dest)
+{
+  int i;
+  gint width = convert->in_width;
+  gint height = convert->in_height;
+  gboolean interlaced = GST_VIDEO_FRAME_IS_INTERLACED (src);
+  guint8 alpha = MIN (convert->alpha_value, 255);
+  gint l1, l2;
+
+  for (i = 0; i < GST_ROUND_DOWN_2 (height); i += 2) {
+    GET_LINE_OFFSETS (interlaced, i, l1, l2);
+
+    video_orc_convert_I420_AYUV (FRAME_GET_LINE (dest, l1),
+        FRAME_GET_LINE (dest, l2),
+        FRAME_GET_Y_LINE (src, l1),
+        FRAME_GET_Y_LINE (src, l2),
+        FRAME_GET_U_LINE (src, i >> 1), FRAME_GET_V_LINE (src, i >> 1),
+        alpha, width);
+  }
+
+  /* now handle last line */
+  if (height & 1) {
+    UNPACK_FRAME (src, convert->tmpline, height - 1, convert->in_x, width);
+    if (alpha != 0xff)
+      convert_set_alpha_u8 (convert, convert->tmpline, width);
+    PACK_FRAME (dest, convert->tmpline, height - 1, width);
+  }
+}
+
+static void
+convert_YUY2_I420 (GstVideoConverter * convert, const GstVideoFrame * src,
+    GstVideoFrame * dest)
+{
+  int i;
+  gint width = convert->in_width;
+  gint height = convert->in_height;
+  gboolean interlaced = GST_VIDEO_FRAME_IS_INTERLACED (src);
+  gint l1, l2;
+
+  for (i = 0; i < GST_ROUND_DOWN_2 (height); i += 2) {
+    GET_LINE_OFFSETS (interlaced, i, l1, l2);
+
+    video_orc_convert_YUY2_I420 (FRAME_GET_Y_LINE (dest, l1),
+        FRAME_GET_Y_LINE (dest, l2),
+        FRAME_GET_U_LINE (dest, i >> 1),
+        FRAME_GET_V_LINE (dest, i >> 1),
+        FRAME_GET_LINE (src, l1), FRAME_GET_LINE (src, l2), (width + 1) / 2);
+  }
+
+  /* now handle last line */
+  if (height & 1) {
+    UNPACK_FRAME (src, convert->tmpline, height - 1, convert->in_x, width);
+    PACK_FRAME (dest, convert->tmpline, height - 1, width);
+  }
+}
+
+static void
+convert_YUY2_AYUV (GstVideoConverter * convert, const GstVideoFrame * src,
+    GstVideoFrame * dest)
+{
+  gint width = convert->in_width;
+  gint height = convert->in_height;
+  guint8 *s, *d;
+  guint8 alpha = MIN (convert->alpha_value, 255);
+
+  s = FRAME_GET_LINE (src, convert->in_y);
+  s += (GST_ROUND_UP_2 (convert->in_x) * 2);
+  d = FRAME_GET_LINE (dest, convert->out_y);
+  d += (convert->out_x * 4);
+
+  video_orc_convert_YUY2_AYUV (d, FRAME_GET_STRIDE (dest), s,
+      FRAME_GET_STRIDE (src), alpha, (width + 1) / 2, height);
+
+  convert_fill_border (convert, dest);
+}
+
+static void
+convert_YUY2_Y42B (GstVideoConverter * convert, const GstVideoFrame * src,
+    GstVideoFrame * dest)
+{
+  gint width = convert->in_width;
+  gint height = convert->in_height;
+  guint8 *s, *dy, *du, *dv;
+
+  s = FRAME_GET_LINE (src, convert->in_y);
+  s += (GST_ROUND_UP_2 (convert->in_x) * 2);
+
+  dy = FRAME_GET_Y_LINE (dest, convert->out_y);
+  dy += convert->out_x;
+  du = FRAME_GET_U_LINE (dest, convert->out_y);
+  du += convert->out_x >> 1;
+  dv = FRAME_GET_V_LINE (dest, convert->out_y);
+  dv += convert->out_x >> 1;
+
+  video_orc_convert_YUY2_Y42B (dy, FRAME_GET_Y_STRIDE (dest), du,
+      FRAME_GET_U_STRIDE (dest), dv, FRAME_GET_V_STRIDE (dest),
+      s, FRAME_GET_STRIDE (src), (width + 1) / 2, height);
+
+  convert_fill_border (convert, dest);
+}
+
+static void
+convert_YUY2_Y444 (GstVideoConverter * convert, const GstVideoFrame * src,
+    GstVideoFrame * dest)
+{
+  gint width = convert->in_width;
+  gint height = convert->in_height;
+  guint8 *s, *dy, *du, *dv;
+
+  s = FRAME_GET_LINE (src, convert->in_y);
+  s += (GST_ROUND_UP_2 (convert->in_x) * 2);
+
+  dy = FRAME_GET_Y_LINE (dest, convert->out_y);
+  dy += convert->out_x;
+  du = FRAME_GET_U_LINE (dest, convert->out_y);
+  du += convert->out_x;
+  dv = FRAME_GET_V_LINE (dest, convert->out_y);
+  dv += convert->out_x;
+
+  video_orc_convert_YUY2_Y444 (dy,
+      FRAME_GET_COMP_STRIDE (dest, 0), du,
+      FRAME_GET_COMP_STRIDE (dest, 1), dv,
+      FRAME_GET_COMP_STRIDE (dest, 2), s,
+      FRAME_GET_STRIDE (src), (width + 1) / 2, height);
+
+  convert_fill_border (convert, dest);
+}
+
+
+static void
+convert_UYVY_I420 (GstVideoConverter * convert, const GstVideoFrame * src,
+    GstVideoFrame * dest)
+{
+  int i;
+  gint width = convert->in_width;
+  gint height = convert->in_height;
+  gboolean interlaced = GST_VIDEO_FRAME_IS_INTERLACED (src);
+  gint l1, l2;
+
+  for (i = 0; i < GST_ROUND_DOWN_2 (height); i += 2) {
+    GET_LINE_OFFSETS (interlaced, i, l1, l2);
+
+    video_orc_convert_UYVY_I420 (FRAME_GET_COMP_LINE (dest, 0, l1),
+        FRAME_GET_COMP_LINE (dest, 0, l2),
+        FRAME_GET_COMP_LINE (dest, 1, i >> 1),
+        FRAME_GET_COMP_LINE (dest, 2, i >> 1),
+        FRAME_GET_LINE (src, l1), FRAME_GET_LINE (src, l2), (width + 1) / 2);
+  }
+
+  /* now handle last line */
+  if (height & 1) {
+    UNPACK_FRAME (src, convert->tmpline, height - 1, convert->in_x, width);
+    PACK_FRAME (dest, convert->tmpline, height - 1, width);
+  }
+}
+
+static void
+convert_UYVY_AYUV (GstVideoConverter * convert, const GstVideoFrame * src,
+    GstVideoFrame * dest)
+{
+  gint width = convert->in_width;
+  gint height = convert->in_height;
+  guint8 *s, *d;
+  guint8 alpha = MIN (convert->alpha_value, 255);
+
+  s = FRAME_GET_LINE (src, convert->in_y);
+  s += (GST_ROUND_UP_2 (convert->in_x) * 2);
+  d = FRAME_GET_LINE (dest, convert->out_y);
+  d += (convert->out_x * 4);
+
+  video_orc_convert_UYVY_AYUV (d,
+      FRAME_GET_STRIDE (dest), s,
+      FRAME_GET_STRIDE (src), alpha, (width + 1) / 2, height);
+
+  convert_fill_border (convert, dest);
+}
+
+static void
+convert_UYVY_YUY2 (GstVideoConverter * convert, const GstVideoFrame * src,
+    GstVideoFrame * dest)
+{
+  gint width = convert->in_width;
+  gint height = convert->in_height;
+  guint8 *s, *d;
+
+  s = FRAME_GET_LINE (src, convert->in_y);
+  s += (GST_ROUND_UP_2 (convert->in_x) * 2);
+  d = FRAME_GET_LINE (dest, convert->out_y);
+  d += (GST_ROUND_UP_2 (convert->out_x) * 2);
+
+  video_orc_convert_UYVY_YUY2 (d,
+      FRAME_GET_STRIDE (dest), s,
+      FRAME_GET_STRIDE (src), (width + 1) / 2, height);
+
+  convert_fill_border (convert, dest);
+}
+
+static void
+convert_UYVY_Y42B (GstVideoConverter * convert, const GstVideoFrame * src,
+    GstVideoFrame * dest)
+{
+  gint width = convert->in_width;
+  gint height = convert->in_height;
+  guint8 *s, *dy, *du, *dv;
+
+  s = FRAME_GET_LINE (src, convert->in_y);
+  s += (GST_ROUND_UP_2 (convert->in_x) * 2);
+
+  dy = FRAME_GET_Y_LINE (dest, convert->out_y);
+  dy += convert->out_x;
+  du = FRAME_GET_U_LINE (dest, convert->out_y);
+  du += convert->out_x >> 1;
+  dv = FRAME_GET_V_LINE (dest, convert->out_y);
+  dv += convert->out_x >> 1;
+
+  video_orc_convert_UYVY_Y42B (dy,
+      FRAME_GET_Y_STRIDE (dest), du,
+      FRAME_GET_U_STRIDE (dest), dv,
+      FRAME_GET_V_STRIDE (dest), s,
+      FRAME_GET_STRIDE (src), (width + 1) / 2, height);
+
+  convert_fill_border (convert, dest);
+}
+
+static void
+convert_UYVY_Y444 (GstVideoConverter * convert, const GstVideoFrame * src,
+    GstVideoFrame * dest)
+{
+  gint width = convert->in_width;
+  gint height = convert->in_height;
+  guint8 *s, *dy, *du, *dv;
+
+  s = FRAME_GET_LINE (src, convert->in_y);
+  s += (GST_ROUND_UP_2 (convert->in_x) * 2);
+
+  dy = FRAME_GET_Y_LINE (dest, convert->out_y);
+  dy += convert->out_x;
+  du = FRAME_GET_U_LINE (dest, convert->out_y);
+  du += convert->out_x;
+  dv = FRAME_GET_V_LINE (dest, convert->out_y);
+  dv += convert->out_x;
+
+  video_orc_convert_UYVY_Y444 (dy,
+      FRAME_GET_Y_STRIDE (dest), du,
+      FRAME_GET_U_STRIDE (dest), dv,
+      FRAME_GET_V_STRIDE (dest), s,
+      FRAME_GET_STRIDE (src), (width + 1) / 2, height);
+
+  convert_fill_border (convert, dest);
+}
+
+static void
+convert_AYUV_I420 (GstVideoConverter * convert, const GstVideoFrame * src,
+    GstVideoFrame * dest)
+{
+  gint width = convert->in_width;
+  gint height = convert->in_height;
+  guint8 *s1, *s2, *dy1, *dy2, *du, *dv;
+
+  s1 = FRAME_GET_LINE (src, convert->in_y + 0);
+  s1 += convert->in_x * 4;
+  s2 = FRAME_GET_LINE (src, convert->in_y + 1);
+  s2 += convert->in_x * 4;
+
+  dy1 = FRAME_GET_Y_LINE (dest, convert->out_y + 0);
+  dy1 += convert->out_x;
+  dy2 = FRAME_GET_Y_LINE (dest, convert->out_y + 1);
+  dy2 += convert->out_x;
+  du = FRAME_GET_U_LINE (dest, convert->out_y >> 1);
+  du += convert->out_x >> 1;
+  dv = FRAME_GET_V_LINE (dest, convert->out_y >> 1);
+  dv += convert->out_x >> 1;
+
+  /* only for even width/height */
+  video_orc_convert_AYUV_I420 (dy1,
+      2 * FRAME_GET_Y_STRIDE (dest), dy2,
+      2 * FRAME_GET_Y_STRIDE (dest), du,
+      FRAME_GET_U_STRIDE (dest), dv,
+      FRAME_GET_V_STRIDE (dest), s1,
+      2 * FRAME_GET_STRIDE (src), s2,
+      2 * FRAME_GET_STRIDE (src), width / 2, height / 2);
+
+  convert_fill_border (convert, dest);
+}
+
+static void
+convert_AYUV_YUY2 (GstVideoConverter * convert, const GstVideoFrame * src,
+    GstVideoFrame * dest)
+{
+  gint width = convert->in_width;
+  gint height = convert->in_height;
+  guint8 *s, *d;
+
+  s = FRAME_GET_LINE (src, convert->in_y);
+  s += convert->in_x * 4;
+  d = FRAME_GET_LINE (dest, convert->out_y);
+  d += (GST_ROUND_UP_2 (convert->out_x) * 2);
+
+  /* only for even width */
+  video_orc_convert_AYUV_YUY2 (d,
+      FRAME_GET_STRIDE (dest), s, FRAME_GET_STRIDE (src), width / 2, height);
+
+  convert_fill_border (convert, dest);
+}
+
+static void
+convert_AYUV_UYVY (GstVideoConverter * convert, const GstVideoFrame * src,
+    GstVideoFrame * dest)
+{
+  gint width = convert->in_width;
+  gint height = convert->in_height;
+  guint8 *s, *d;
+
+  s = FRAME_GET_LINE (src, convert->in_y);
+  s += convert->in_x * 4;
+  d = FRAME_GET_LINE (dest, convert->out_y);
+  d += (GST_ROUND_UP_2 (convert->out_x) * 2);
+
+  /* only for even width */
+  video_orc_convert_AYUV_UYVY (d,
+      FRAME_GET_STRIDE (dest), s, FRAME_GET_STRIDE (src), width / 2, height);
+
+  convert_fill_border (convert, dest);
+}
+
+static void
+convert_AYUV_Y42B (GstVideoConverter * convert, const GstVideoFrame * src,
+    GstVideoFrame * dest)
+{
+  gint width = convert->in_width;
+  gint height = convert->in_height;
+  guint8 *s, *dy, *du, *dv;
+
+  s = FRAME_GET_LINE (src, convert->in_y);
+  s += convert->in_x * 4;
+
+  dy = FRAME_GET_Y_LINE (dest, convert->out_y);
+  dy += convert->out_x;
+  du = FRAME_GET_U_LINE (dest, convert->out_y);
+  du += convert->out_x >> 1;
+  dv = FRAME_GET_V_LINE (dest, convert->out_y);
+  dv += convert->out_x >> 1;
+
+  /* only works for even width */
+  video_orc_convert_AYUV_Y42B (dy,
+      FRAME_GET_Y_STRIDE (dest), du,
+      FRAME_GET_U_STRIDE (dest), dv,
+      FRAME_GET_V_STRIDE (dest), s, FRAME_GET_STRIDE (src), width / 2, height);
+
+  convert_fill_border (convert, dest);
+}
+
+static void
+convert_AYUV_Y444 (GstVideoConverter * convert, const GstVideoFrame * src,
+    GstVideoFrame * dest)
+{
+  gint width = convert->in_width;
+  gint height = convert->in_height;
+  guint8 *s, *dy, *du, *dv;
+
+  s = FRAME_GET_LINE (src, convert->in_y);
+  s += convert->in_x * 4;
+
+  dy = FRAME_GET_Y_LINE (dest, convert->out_y);
+  dy += convert->out_x;
+  du = FRAME_GET_U_LINE (dest, convert->out_y);
+  du += convert->out_x;
+  dv = FRAME_GET_V_LINE (dest, convert->out_y);
+  dv += convert->out_x;
+
+  video_orc_convert_AYUV_Y444 (FRAME_GET_Y_LINE (dest, 0),
+      FRAME_GET_Y_STRIDE (dest), FRAME_GET_U_LINE (dest, 0),
+      FRAME_GET_U_STRIDE (dest), FRAME_GET_V_LINE (dest, 0),
+      FRAME_GET_V_STRIDE (dest), FRAME_GET_LINE (src, 0),
+      FRAME_GET_STRIDE (src), width, height);
+
+  convert_fill_border (convert, dest);
+}
+
+static void
+convert_Y42B_YUY2 (GstVideoConverter * convert, const GstVideoFrame * src,
+    GstVideoFrame * dest)
+{
+  gint width = convert->in_width;
+  gint height = convert->in_height;
+  guint8 *sy, *su, *sv, *d;
+
+  sy = FRAME_GET_Y_LINE (src, convert->in_y);
+  sy += convert->in_x;
+  su = FRAME_GET_U_LINE (src, convert->in_y);
+  su += convert->in_x >> 1;
+  sv = FRAME_GET_V_LINE (src, convert->in_y);
+  sv += convert->in_x >> 1;
+
+  d = FRAME_GET_LINE (dest, convert->out_y);
+  d += (GST_ROUND_UP_2 (convert->out_x) * 2);
+
+  video_orc_convert_Y42B_YUY2 (d,
+      FRAME_GET_STRIDE (dest), sy,
+      FRAME_GET_Y_STRIDE (src), su,
+      FRAME_GET_U_STRIDE (src), sv,
+      FRAME_GET_V_STRIDE (src), (width + 1) / 2, height);
+
+  convert_fill_border (convert, dest);
+}
+
+static void
+convert_Y42B_UYVY (GstVideoConverter * convert, const GstVideoFrame * src,
+    GstVideoFrame * dest)
+{
+  gint width = convert->in_width;
+  gint height = convert->in_height;
+  guint8 *sy, *su, *sv, *d;
+
+  sy = FRAME_GET_Y_LINE (src, convert->in_y);
+  sy += convert->in_x;
+  su = FRAME_GET_U_LINE (src, convert->in_y);
+  su += convert->in_x >> 1;
+  sv = FRAME_GET_V_LINE (src, convert->in_y);
+  sv += convert->in_x >> 1;
+
+  d = FRAME_GET_LINE (dest, convert->out_y);
+  d += (GST_ROUND_UP_2 (convert->out_x) * 2);
+
+  video_orc_convert_Y42B_UYVY (d,
+      FRAME_GET_STRIDE (dest), sy,
+      FRAME_GET_Y_STRIDE (src), su,
+      FRAME_GET_U_STRIDE (src), sv,
+      FRAME_GET_V_STRIDE (src), (width + 1) / 2, height);
+
+  convert_fill_border (convert, dest);
+}
+
+static void
+convert_Y42B_AYUV (GstVideoConverter * convert, const GstVideoFrame * src,
+    GstVideoFrame * dest)
+{
+  gint width = convert->in_width;
+  gint height = convert->in_height;
+  guint8 *sy, *su, *sv, *d;
+  guint8 alpha = MIN (convert->alpha_value, 255);
+
+  sy = FRAME_GET_Y_LINE (src, convert->in_y);
+  sy += convert->in_x;
+  su = FRAME_GET_U_LINE (src, convert->in_y);
+  su += convert->in_x >> 1;
+  sv = FRAME_GET_V_LINE (src, convert->in_y);
+  sv += convert->in_x >> 1;
+
+  d = FRAME_GET_LINE (dest, convert->out_y);
+  d += convert->out_x * 4;
+
+  /* only for even width */
+  video_orc_convert_Y42B_AYUV (d,
+      FRAME_GET_STRIDE (dest), sy,
+      FRAME_GET_Y_STRIDE (src), su,
+      FRAME_GET_U_STRIDE (src), sv,
+      FRAME_GET_V_STRIDE (src), alpha, width / 2, height);
+
+  convert_fill_border (convert, dest);
+}
+
+static void
+convert_Y444_YUY2 (GstVideoConverter * convert, const GstVideoFrame * src,
+    GstVideoFrame * dest)
+{
+  gint width = convert->in_width;
+  gint height = convert->in_height;
+  guint8 *sy, *su, *sv, *d;
+
+  sy = FRAME_GET_Y_LINE (src, convert->in_y);
+  sy += convert->in_x;
+  su = FRAME_GET_U_LINE (src, convert->in_y);
+  su += convert->in_x;
+  sv = FRAME_GET_V_LINE (src, convert->in_y);
+  sv += convert->in_x;
+
+  d = FRAME_GET_LINE (dest, convert->out_y);
+  d += (GST_ROUND_UP_2 (convert->out_x) * 2);
+
+  video_orc_convert_Y444_YUY2 (d,
+      FRAME_GET_STRIDE (dest), sy,
+      FRAME_GET_Y_STRIDE (src), su,
+      FRAME_GET_U_STRIDE (src), sv,
+      FRAME_GET_V_STRIDE (src), width / 2, height);
+
+  convert_fill_border (convert, dest);
+}
+
+static void
+convert_Y444_UYVY (GstVideoConverter * convert, const GstVideoFrame * src,
+    GstVideoFrame * dest)
+{
+  gint width = convert->in_width;
+  gint height = convert->in_height;
+  guint8 *sy, *su, *sv, *d;
+
+  sy = FRAME_GET_Y_LINE (src, convert->in_y);
+  sy += convert->in_x;
+  su = FRAME_GET_U_LINE (src, convert->in_y);
+  su += convert->in_x;
+  sv = FRAME_GET_V_LINE (src, convert->in_y);
+  sv += convert->in_x;
+
+  d = FRAME_GET_LINE (dest, convert->out_y);
+  d += (GST_ROUND_UP_2 (convert->out_x) * 2);
+
+  video_orc_convert_Y444_UYVY (d,
+      FRAME_GET_STRIDE (dest), sy,
+      FRAME_GET_Y_STRIDE (src), su,
+      FRAME_GET_U_STRIDE (src), sv,
+      FRAME_GET_V_STRIDE (src), width / 2, height);
+
+  convert_fill_border (convert, dest);
+}
+
+static void
+convert_Y444_AYUV (GstVideoConverter * convert, const GstVideoFrame * src,
+    GstVideoFrame * dest)
+{
+  gint width = convert->in_width;
+  gint height = convert->in_height;
+  guint8 *sy, *su, *sv, *d;
+  guint8 alpha = MIN (convert->alpha_value, 255);
+
+  sy = FRAME_GET_Y_LINE (src, convert->in_y);
+  sy += convert->in_x;
+  su = FRAME_GET_U_LINE (src, convert->in_y);
+  su += convert->in_x;
+  sv = FRAME_GET_V_LINE (src, convert->in_y);
+  sv += convert->in_x;
+
+  d = FRAME_GET_LINE (dest, convert->out_y);
+  d += convert->out_x * 4;
+
+  video_orc_convert_Y444_AYUV (d,
+      FRAME_GET_STRIDE (dest), sy,
+      FRAME_GET_Y_STRIDE (src), su,
+      FRAME_GET_U_STRIDE (src), sv, FRAME_GET_V_STRIDE (src), alpha, width,
+      height);
+
+  convert_fill_border (convert, dest);
+}
+
+#if G_BYTE_ORDER == G_LITTLE_ENDIAN
+static void
+convert_AYUV_ARGB (GstVideoConverter * convert, const GstVideoFrame * src,
+    GstVideoFrame * dest)
+{
+  gint width = convert->in_width;
+  gint height = convert->in_height;
+  MatrixData *data = &convert->convert_matrix;
+  guint8 *s, *d;
+
+  s = FRAME_GET_LINE (src, convert->in_y);
+  s += (convert->in_x * 4);
+  d = FRAME_GET_LINE (dest, convert->out_y);
+  d += (convert->out_x * 4);
+
+  video_orc_convert_AYUV_ARGB (d, FRAME_GET_STRIDE (dest), s,
+      FRAME_GET_STRIDE (src), data->im[0][0], data->im[0][2],
+      data->im[2][1], data->im[1][1], data->im[1][2], width, height);
+
+  convert_fill_border (convert, dest);
+}
+
+static void
+convert_AYUV_BGRA (GstVideoConverter * convert, const GstVideoFrame * src,
+    GstVideoFrame * dest)
+{
+  gint width = convert->in_width;
+  gint height = convert->in_height;
+  MatrixData *data = &convert->convert_matrix;
+  guint8 *s, *d;
+
+  s = FRAME_GET_LINE (src, convert->in_y);
+  s += (convert->in_x * 4);
+  d = FRAME_GET_LINE (dest, convert->out_y);
+  d += (convert->out_x * 4);
+
+  video_orc_convert_AYUV_BGRA (d, FRAME_GET_STRIDE (dest), s,
+      FRAME_GET_STRIDE (src), data->im[0][0], data->im[0][2],
+      data->im[2][1], data->im[1][1], data->im[1][2], width, height);
+
+  convert_fill_border (convert, dest);
+}
+
+static void
+convert_AYUV_ABGR (GstVideoConverter * convert, const GstVideoFrame * src,
+    GstVideoFrame * dest)
+{
+  gint width = convert->in_width;
+  gint height = convert->in_height;
+  MatrixData *data = &convert->convert_matrix;
+  guint8 *s, *d;
+
+  s = FRAME_GET_LINE (src, convert->in_y);
+  s += (convert->in_x * 4);
+  d = FRAME_GET_LINE (dest, convert->out_y);
+  d += (convert->out_x * 4);
+
+  video_orc_convert_AYUV_ABGR (d, FRAME_GET_STRIDE (dest), s,
+      FRAME_GET_STRIDE (src), data->im[0][0], data->im[0][2],
+      data->im[2][1], data->im[1][1], data->im[1][2], width, height);
+
+  convert_fill_border (convert, dest);
+}
+
+static void
+convert_AYUV_RGBA (GstVideoConverter * convert, const GstVideoFrame * src,
+    GstVideoFrame * dest)
+{
+  gint width = convert->in_width;
+  gint height = convert->in_height;
+  MatrixData *data = &convert->convert_matrix;
+  guint8 *s, *d;
+
+  s = FRAME_GET_LINE (src, convert->in_y);
+  s += (convert->in_x * 4);
+  d = FRAME_GET_LINE (dest, convert->out_y);
+  d += (convert->out_x * 4);
+
+  video_orc_convert_AYUV_RGBA (d, FRAME_GET_STRIDE (dest), s,
+      FRAME_GET_STRIDE (src), data->im[0][0], data->im[0][2],
+      data->im[2][1], data->im[1][1], data->im[1][2], width, height);
+
+  convert_fill_border (convert, dest);
+}
+
+static void
+convert_I420_BGRA (GstVideoConverter * convert, const GstVideoFrame * src,
+    GstVideoFrame * dest)
+{
+  int i;
+  gint width = convert->in_width;
+  gint height = convert->in_height;
+  MatrixData *data = &convert->convert_matrix;
+
+  for (i = 0; i < height; i++) {
+    guint8 *sy, *su, *sv, *d;
+
+    d = FRAME_GET_LINE (dest, i + convert->out_y);
+    d += (convert->out_x * 4);
+    sy = FRAME_GET_Y_LINE (src, i + convert->in_y);
+    sy += convert->in_x;
+    su = FRAME_GET_U_LINE (src, (i + convert->in_y) >> 1);
+    su += (convert->in_x >> 1);
+    sv = FRAME_GET_V_LINE (src, (i + convert->in_y) >> 1);
+    sv += (convert->in_x >> 1);
+
+    video_orc_convert_I420_BGRA (d, sy, su, sv,
+        data->im[0][0], data->im[0][2],
+        data->im[2][1], data->im[1][1], data->im[1][2], width);
+  }
+  convert_fill_border (convert, dest);
+}
+#endif
+
+static void
+memset_u24 (guint8 * data, guint8 col[3], unsigned int n)
+{
+  unsigned int i;
+
+  for (i = 0; i < n; i++) {
+    data[0] = col[0];
+    data[1] = col[1];
+    data[2] = col[2];
+    data += 3;
+  }
+}
+
+static void
+memset_u32_16 (guint8 * data, guint8 col[4], unsigned int n)
+{
+  unsigned int i;
+
+  for (i = 0; i < n; i += 2) {
+    data[0] = col[0];
+    data[1] = col[1];
+    if (i + 1 < n) {
+      data[2] = col[2];
+      data[3] = col[3];
+    }
+    data += 4;
+  }
+}
+
+#define MAKE_BORDER_FUNC(func)                                                  \
+        for (i = 0; i < out_y; i++)                                             \
+          func (FRAME_GET_PLANE_LINE (dest, k, i), col, out_maxwidth);          \
+        if (rb_width || lb_width) {                                             \
+          for (i = 0; i < out_height; i++) {                                    \
+            guint8 *d = FRAME_GET_PLANE_LINE (dest, k, i + out_y);              \
+            if (lb_width)                                                       \
+              func (d, col, lb_width);                                          \
+            if (rb_width)                                                       \
+              func (d + (pstride * r_border), col, rb_width);                   \
+          }                                                                     \
+        }                                                                       \
+        for (i = out_y + out_height; i < out_maxheight; i++)                    \
+          func (FRAME_GET_PLANE_LINE (dest, k, i), col, out_maxwidth);          \
+
+static void
+convert_fill_border (GstVideoConverter * convert, GstVideoFrame * dest)
+{
+  int k, n_planes;
+  const GstVideoFormatInfo *out_finfo;
+
+  if (!convert->fill_border || !convert->borderline)
+    return;
+
+  out_finfo = convert->out_info.finfo;
+
+  n_planes = GST_VIDEO_FRAME_N_PLANES (dest);
+
+  for (k = 0; k < n_planes; k++) {
+    gint i, out_x, out_y, out_width, out_height, pstride, pgroup;
+    gint r_border, lb_width, rb_width;
+    gint out_maxwidth, out_maxheight;
+    gpointer borders;
+
+    out_x = GST_VIDEO_FORMAT_INFO_SCALE_WIDTH (out_finfo, k, convert->out_x);
+    out_y = GST_VIDEO_FORMAT_INFO_SCALE_HEIGHT (out_finfo, k, convert->out_y);
+    out_width =
+        GST_VIDEO_FORMAT_INFO_SCALE_WIDTH (out_finfo, k, convert->out_width);
+    out_height =
+        GST_VIDEO_FORMAT_INFO_SCALE_HEIGHT (out_finfo, k, convert->out_height);
+    out_maxwidth =
+        GST_VIDEO_FORMAT_INFO_SCALE_WIDTH (out_finfo, k, convert->out_maxwidth);
+    out_maxheight =
+        GST_VIDEO_FORMAT_INFO_SCALE_HEIGHT (out_finfo, k,
+        convert->out_maxheight);
+
+    pstride = GST_VIDEO_FORMAT_INFO_PSTRIDE (out_finfo, k);
+
+    switch (GST_VIDEO_FORMAT_INFO_FORMAT (out_finfo)) {
+      case GST_VIDEO_FORMAT_YUY2:
+      case GST_VIDEO_FORMAT_YVYU:
+      case GST_VIDEO_FORMAT_UYVY:
+        pgroup = 42;
+        out_maxwidth = GST_ROUND_UP_2 (out_maxwidth);
+        break;
+      default:
+        pgroup = pstride;
+        break;
+    }
+
+    r_border = out_x + out_width;
+    rb_width = out_maxwidth - r_border;
+    lb_width = out_x;
+
+    borders = &convert->borders[k];
+
+    switch (pgroup) {
+      case 1:
+      {
+        guint8 col = ((guint8 *) borders)[0];
+        MAKE_BORDER_FUNC (memset);
+        break;
+      }
+      case 2:
+      {
+        guint16 col = ((guint16 *) borders)[0];
+        MAKE_BORDER_FUNC (video_orc_splat_u16);
+        break;
+      }
+      case 3:
+      {
+        guint8 col[3];
+        col[0] = ((guint8 *) borders)[0];
+        col[1] = ((guint8 *) borders)[1];
+        col[2] = ((guint8 *) borders)[2];
+        MAKE_BORDER_FUNC (memset_u24);
+        break;
+      }
+      case 4:
+      {
+        guint32 col = ((guint32 *) borders)[0];
+        MAKE_BORDER_FUNC (video_orc_splat_u32);
+        break;
+      }
+      case 8:
+      {
+        guint64 col = ((guint64 *) borders)[0];
+        MAKE_BORDER_FUNC (video_orc_splat_u64);
+        break;
+      }
+      case 42:
+      {
+        guint8 col[4];
+        col[0] = ((guint8 *) borders)[0];
+        col[2] = ((guint8 *) borders)[2];
+        col[1] = ((guint8 *) borders)[r_border & 1 ? 3 : 1];
+        col[3] = ((guint8 *) borders)[r_border & 1 ? 1 : 3];
+        MAKE_BORDER_FUNC (memset_u32_16);
+        break;
+      }
+      default:
+        break;
+    }
+  }
+}
+
+static void
+convert_plane_fill (GstVideoConverter * convert,
+    const GstVideoFrame * src, GstVideoFrame * dest, gint plane)
+{
+  guint8 *s, *d;
+  gint splane = convert->fsplane[plane];
+
+  s = FRAME_GET_PLANE_LINE (src, splane, convert->fin_y[splane]);
+  s += convert->fin_x[splane];
+  d = FRAME_GET_PLANE_LINE (dest, plane, convert->fout_y[plane]);
+  d += convert->fout_x[plane];
+
+  video_orc_memset_2d (d, FRAME_GET_PLANE_STRIDE (dest, plane),
+      convert->ffill[plane],
+      convert->fout_width[plane], convert->fout_height[plane]);
+}
+
+static void
+convert_plane_h_double (GstVideoConverter * convert,
+    const GstVideoFrame * src, GstVideoFrame * dest, gint plane)
+{
+  guint8 *s, *d;
+  gint splane = convert->fsplane[plane];
+
+  s = FRAME_GET_PLANE_LINE (src, splane, convert->fin_y[splane]);
+  s += convert->fin_x[splane];
+  d = FRAME_GET_PLANE_LINE (dest, plane, convert->fout_y[plane]);
+  d += convert->fout_x[plane];
+
+  video_orc_planar_chroma_422_444 (d,
+      FRAME_GET_PLANE_STRIDE (dest, plane), s,
+      FRAME_GET_PLANE_STRIDE (src, splane), convert->fout_width[plane] / 2,
+      convert->fout_height[plane]);
+}
+
+static void
+convert_plane_h_halve (GstVideoConverter * convert,
+    const GstVideoFrame * src, GstVideoFrame * dest, gint plane)
+{
+  guint8 *s, *d;
+  gint splane = convert->fsplane[plane];
+
+  s = FRAME_GET_PLANE_LINE (src, splane, convert->fin_y[splane]);
+  s += convert->fin_x[splane];
+  d = FRAME_GET_PLANE_LINE (dest, plane, convert->fout_y[plane]);
+  d += convert->fout_x[plane];
+
+  video_orc_planar_chroma_444_422 (d,
+      FRAME_GET_PLANE_STRIDE (dest, plane), s,
+      FRAME_GET_PLANE_STRIDE (src, splane), convert->fout_width[plane],
+      convert->fout_height[plane]);
+}
+
+static void
+convert_plane_v_double (GstVideoConverter * convert,
+    const GstVideoFrame * src, GstVideoFrame * dest, gint plane)
+{
+  guint8 *s, *d1, *d2;
+  gint ds, splane = convert->fsplane[plane];
+
+  s = FRAME_GET_PLANE_LINE (src, splane, convert->fin_y[splane]);
+  s += convert->fin_x[splane];
+  d1 = FRAME_GET_PLANE_LINE (dest, plane, convert->fout_y[plane]);
+  d1 += convert->fout_x[plane];
+  d2 = FRAME_GET_PLANE_LINE (dest, plane, convert->fout_y[plane] + 1);
+  d2 += convert->fout_x[plane];
+  ds = FRAME_GET_PLANE_STRIDE (dest, plane);
+
+  video_orc_planar_chroma_420_422 (d1, 2 * ds, d2, 2 * ds,
+      s, FRAME_GET_PLANE_STRIDE (src, splane), convert->fout_width[plane],
+      convert->fout_height[plane] / 2);
+}
+
+static void
+convert_plane_v_halve (GstVideoConverter * convert,
+    const GstVideoFrame * src, GstVideoFrame * dest, gint plane)
+{
+  guint8 *s1, *s2, *d;
+  gint ss, ds, splane = convert->fsplane[plane];
+
+  s1 = FRAME_GET_PLANE_LINE (src, splane, convert->fin_y[splane]);
+  s1 += convert->fin_x[splane];
+  s2 = FRAME_GET_PLANE_LINE (src, splane, convert->fin_y[splane] + 1);
+  s2 += convert->fin_x[splane];
+  d = FRAME_GET_PLANE_LINE (dest, plane, convert->fout_y[plane]);
+  d += convert->fout_x[plane];
+
+  ss = FRAME_GET_PLANE_STRIDE (src, splane);
+  ds = FRAME_GET_PLANE_STRIDE (dest, plane);
+
+  video_orc_planar_chroma_422_420 (d, ds, s1, 2 * ss, s2, 2 * ss,
+      convert->fout_width[plane], convert->fout_height[plane]);
+}
+
+static void
+convert_plane_hv_double (GstVideoConverter * convert,
+    const GstVideoFrame * src, GstVideoFrame * dest, gint plane)
+{
+  guint8 *s, *d1, *d2;
+  gint ss, ds, splane = convert->fsplane[plane];
+
+  s = FRAME_GET_PLANE_LINE (src, splane, convert->fin_y[splane]);
+  s += convert->fin_x[splane];
+  d1 = FRAME_GET_PLANE_LINE (dest, plane, convert->fout_y[plane]);
+  d1 += convert->fout_x[plane];
+  d2 = FRAME_GET_PLANE_LINE (dest, plane, convert->fout_y[plane] + 1);
+  d2 += convert->fout_x[plane];
+  ss = FRAME_GET_PLANE_STRIDE (src, splane);
+  ds = FRAME_GET_PLANE_STRIDE (dest, plane);
+
+  video_orc_planar_chroma_420_444 (d1, 2 * ds, d2, 2 * ds, s, ss,
+      (convert->fout_width[plane] + 1) / 2, convert->fout_height[plane] / 2);
+}
+
+static void
+convert_plane_hv_halve (GstVideoConverter * convert,
+    const GstVideoFrame * src, GstVideoFrame * dest, gint plane)
+{
+  guint8 *s1, *s2, *d;
+  gint ss, ds, splane = convert->fsplane[plane];
+
+  s1 = FRAME_GET_PLANE_LINE (src, splane, convert->fin_y[splane]);
+  s1 += convert->fin_x[splane];
+  s2 = FRAME_GET_PLANE_LINE (src, splane, convert->fin_y[splane] + 1);
+  s2 += convert->fin_x[splane];
+  d = FRAME_GET_PLANE_LINE (dest, plane, convert->fout_y[plane]);
+  d += convert->fout_x[plane];
+  ss = FRAME_GET_PLANE_STRIDE (src, splane);
+  ds = FRAME_GET_PLANE_STRIDE (dest, plane);
+
+  video_orc_planar_chroma_444_420 (d, ds, s1, 2 * ss, s2, 2 * ss,
+      convert->fout_width[plane], convert->fout_height[plane]);
+}
+
+static void
+convert_plane_hv (GstVideoConverter * convert,
+    const GstVideoFrame * src, GstVideoFrame * dest, gint plane)
+{
+  gint in_x, in_y, out_x, out_y, out_width, out_height;
+  GstVideoFormat format;
+  GstVideoScaler *h_scaler, *v_scaler;
+  gint splane = convert->fsplane[plane];
+  guint8 *s, *d;
+
+  in_x = convert->fin_x[splane];
+  in_y = convert->fin_y[splane];
+  out_x = convert->fout_x[plane];
+  out_y = convert->fout_y[plane];
+  out_width = convert->fout_width[plane];
+  out_height = convert->fout_height[plane];
+  format = convert->fformat[plane];
+
+  h_scaler = convert->fh_scaler[plane];
+  v_scaler = convert->fv_scaler[plane];
+
+  s = FRAME_GET_PLANE_LINE (src, splane, in_y);
+  s += in_x;
+  d = FRAME_GET_PLANE_LINE (dest, plane, out_y);
+  d += out_x;
+
+  gst_video_scaler_2d (h_scaler, v_scaler, format,
+      s, FRAME_GET_PLANE_STRIDE (src, splane),
+      d, FRAME_GET_PLANE_STRIDE (dest, plane), 0, 0, out_width, out_height);
+}
+
+static void
+convert_scale_planes (GstVideoConverter * convert,
+    const GstVideoFrame * src, GstVideoFrame * dest)
+{
+  int i, n_planes;
+
+  n_planes = GST_VIDEO_FRAME_N_PLANES (dest);
+  for (i = 0; i < n_planes; i++) {
+    if (convert->fconvert[i])
+      convert->fconvert[i] (convert, src, dest, i);
+  }
+  convert_fill_border (convert, dest);
+}
+
+static GstVideoFormat
+get_scale_format (GstVideoFormat format, gint plane)
+{
+  GstVideoFormat res = GST_VIDEO_FORMAT_UNKNOWN;
+
+  switch (format) {
+    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:
+    case GST_VIDEO_FORMAT_GRAY8:
+    case GST_VIDEO_FORMAT_A420:
+    case GST_VIDEO_FORMAT_YUV9:
+    case GST_VIDEO_FORMAT_YVU9:
+    case GST_VIDEO_FORMAT_GBR:
+      res = GST_VIDEO_FORMAT_GRAY8;
+      break;
+    case GST_VIDEO_FORMAT_GRAY16_BE:
+    case GST_VIDEO_FORMAT_GRAY16_LE:
+      res = GST_VIDEO_FORMAT_GRAY16_BE;
+      break;
+    case GST_VIDEO_FORMAT_YUY2:
+    case GST_VIDEO_FORMAT_UYVY:
+    case GST_VIDEO_FORMAT_YVYU:
+    case GST_VIDEO_FORMAT_AYUV:
+    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_RGB:
+    case GST_VIDEO_FORMAT_BGR:
+    case GST_VIDEO_FORMAT_v308:
+    case GST_VIDEO_FORMAT_ARGB64:
+    case GST_VIDEO_FORMAT_AYUV64:
+      res = format;
+      break;
+    case GST_VIDEO_FORMAT_RGB15:
+    case GST_VIDEO_FORMAT_BGR15:
+    case GST_VIDEO_FORMAT_RGB16:
+    case GST_VIDEO_FORMAT_BGR16:
+      res = GST_VIDEO_FORMAT_NV12;
+      break;
+    case GST_VIDEO_FORMAT_NV12:
+    case GST_VIDEO_FORMAT_NV21:
+    case GST_VIDEO_FORMAT_NV16:
+    case GST_VIDEO_FORMAT_NV61:
+    case GST_VIDEO_FORMAT_NV24:
+      res = plane == 0 ? GST_VIDEO_FORMAT_GRAY8 : GST_VIDEO_FORMAT_NV12;
+      break;
+    case GST_VIDEO_FORMAT_UNKNOWN:
+    case GST_VIDEO_FORMAT_ENCODED:
+    case GST_VIDEO_FORMAT_v210:
+    case GST_VIDEO_FORMAT_v216:
+    case GST_VIDEO_FORMAT_UYVP:
+    case GST_VIDEO_FORMAT_RGB8P:
+    case GST_VIDEO_FORMAT_IYU1:
+    case GST_VIDEO_FORMAT_r210:
+    case GST_VIDEO_FORMAT_I420_10BE:
+    case GST_VIDEO_FORMAT_I420_10LE:
+    case GST_VIDEO_FORMAT_I422_10BE:
+    case GST_VIDEO_FORMAT_I422_10LE:
+    case GST_VIDEO_FORMAT_Y444_10BE:
+    case GST_VIDEO_FORMAT_Y444_10LE:
+    case GST_VIDEO_FORMAT_GBR_10BE:
+    case GST_VIDEO_FORMAT_GBR_10LE:
+    case GST_VIDEO_FORMAT_NV12_64Z32:
+    case GST_VIDEO_FORMAT_A420_10BE:
+    case GST_VIDEO_FORMAT_A420_10LE:
+    case GST_VIDEO_FORMAT_A422_10BE:
+    case GST_VIDEO_FORMAT_A422_10LE:
+    case GST_VIDEO_FORMAT_A444_10BE:
+    case GST_VIDEO_FORMAT_A444_10LE:
+      res = format;
+      g_assert_not_reached ();
+      break;
+  }
+  return res;
+}
+
+static gboolean
+is_merge_yuv (GstVideoInfo * info)
+{
+  switch (GST_VIDEO_INFO_FORMAT (info)) {
+    case GST_VIDEO_FORMAT_YUY2:
+    case GST_VIDEO_FORMAT_YVYU:
+    case GST_VIDEO_FORMAT_UYVY:
+      return TRUE;
+    default:
+      return FALSE;
+  }
+}
+
+static gboolean
+setup_scale (GstVideoConverter * convert)
+{
+  int i, n_planes;
+  gint method, cr_method, stride, in_width, in_height, out_width, out_height;
+  guint taps;
+  GstVideoInfo *in_info, *out_info;
+  const GstVideoFormatInfo *in_finfo, *out_finfo;
+  GstVideoFormat in_format, out_format;
+
+  in_info = &convert->in_info;
+  out_info = &convert->out_info;
+
+  in_finfo = in_info->finfo;
+  out_finfo = out_info->finfo;
+
+  n_planes = GST_VIDEO_INFO_N_PLANES (out_info);
+
+  method = GET_OPT_RESAMPLER_METHOD (convert);
+  if (method == GST_VIDEO_RESAMPLER_METHOD_NEAREST)
+    cr_method = method;
+  else
+    cr_method = GET_OPT_CHROMA_RESAMPLER_METHOD (convert);
+  taps = GET_OPT_RESAMPLER_TAPS (convert);
+
+  in_format = GST_VIDEO_INFO_FORMAT (in_info);
+  out_format = GST_VIDEO_INFO_FORMAT (out_info);
+
+  switch (in_format) {
+    case GST_VIDEO_FORMAT_RGB15:
+    case GST_VIDEO_FORMAT_RGB16:
+    case GST_VIDEO_FORMAT_BGR15:
+    case GST_VIDEO_FORMAT_BGR16:
+#if G_BYTE_ORDER == G_LITTLE_ENDIAN
+    case GST_VIDEO_FORMAT_GRAY16_BE:
+#else
+    case GST_VIDEO_FORMAT_GRAY16_LE:
+#endif
+      if (method != GST_VIDEO_RESAMPLER_METHOD_NEAREST) {
+        GST_DEBUG ("%s only with nearest resampling",
+            gst_video_format_to_string (in_format));
+        return FALSE;
+      }
+      break;
+    default:
+      break;
+  }
+
+  in_width = convert->in_width;
+  in_height = convert->in_height;
+  out_width = convert->out_width;
+  out_height = convert->out_height;
+
+  stride = 0;
+
+  if (n_planes == 1 && !GST_VIDEO_FORMAT_INFO_IS_GRAY (out_finfo)) {
+    gint pstride;
+
+    if (is_merge_yuv (in_info)) {
+      GstVideoScaler *y_scaler, *uv_scaler;
+
+      if (in_width != out_width) {
+        y_scaler =
+            gst_video_scaler_new (method, GST_VIDEO_SCALER_FLAG_NONE, taps,
+            GST_VIDEO_FORMAT_INFO_SCALE_WIDTH (in_finfo, GST_VIDEO_COMP_Y,
+                in_width), GST_VIDEO_FORMAT_INFO_SCALE_WIDTH (out_finfo,
+                GST_VIDEO_COMP_Y, out_width), convert->config);
+        uv_scaler =
+            gst_video_scaler_new (method, GST_VIDEO_SCALER_FLAG_NONE,
+            gst_video_scaler_get_max_taps (y_scaler),
+            GST_VIDEO_FORMAT_INFO_SCALE_WIDTH (in_finfo, GST_VIDEO_COMP_U,
+                in_width), GST_VIDEO_FORMAT_INFO_SCALE_WIDTH (out_finfo,
+                GST_VIDEO_COMP_U, out_width), convert->config);
+
+        convert->fh_scaler[0] =
+            gst_video_scaler_combine_packed_YUV (y_scaler, uv_scaler,
+            in_format, out_format);
+
+        gst_video_scaler_free (y_scaler);
+        gst_video_scaler_free (uv_scaler);
+      } else
+        convert->fh_scaler[0] = NULL;
+
+      pstride = GST_VIDEO_FORMAT_INFO_PSTRIDE (out_finfo, GST_VIDEO_COMP_Y);
+      convert->fin_x[0] = GST_ROUND_UP_2 (convert->in_x) * pstride;
+      convert->fout_x[0] = GST_ROUND_UP_2 (convert->out_x) * pstride;
+
+    } else {
+      if (in_width != out_width && in_width != 0 && out_width != 0)
+        convert->fh_scaler[0] =
+            gst_video_scaler_new (method, GST_VIDEO_SCALER_FLAG_NONE, taps,
+            in_width, out_width, convert->config);
+      else
+        convert->fh_scaler[0] = NULL;
+
+      pstride = GST_VIDEO_FORMAT_INFO_PSTRIDE (out_finfo, GST_VIDEO_COMP_R);
+      convert->fin_x[0] = convert->in_x * pstride;
+      convert->fout_x[0] = convert->out_x * pstride;
+    }
+    stride = MAX (stride, GST_VIDEO_INFO_PLANE_STRIDE (in_info, 0));
+    stride = MAX (stride, GST_VIDEO_INFO_PLANE_STRIDE (out_info, 0));
+
+    if (in_height != out_height && in_height != 0 && out_height != 0) {
+      convert->fv_scaler[0] =
+          gst_video_scaler_new (method, GST_VIDEO_SCALER_FLAG_NONE, taps,
+          in_height, out_height, convert->config);
+    } else {
+      convert->fv_scaler[0] = NULL;
+    }
+
+    convert->fin_y[0] = convert->in_y;
+    convert->fout_y[0] = convert->out_y;
+    convert->fout_width[0] = out_width;
+    convert->fout_height[0] = out_height;
+    convert->fconvert[0] = convert_plane_hv;
+    convert->fformat[0] = get_scale_format (in_format, 0);
+    convert->fsplane[0] = 0;
+  } else {
+    for (i = 0; i < n_planes; i++) {
+      gint comp, n_comp, j, iw, ih, ow, oh, pstride;
+      gboolean need_v_scaler, need_h_scaler;
+      GstStructure *config;
+      gint resample_method;
+
+      n_comp = GST_VIDEO_FORMAT_INFO_N_COMPONENTS (in_finfo);
+
+      /* find the component in this plane and map it to the plane of
+       * the source */
+      comp = -1;
+      for (j = 0; j < n_comp; j++) {
+        if (GST_VIDEO_FORMAT_INFO_PLANE (out_finfo, j) == i) {
+          comp = j;
+          break;
+        }
+      }
+
+      stride = MAX (stride, GST_VIDEO_INFO_COMP_STRIDE (in_info, i));
+      stride = MAX (stride, GST_VIDEO_INFO_COMP_STRIDE (out_info, i));
+
+      iw = GST_VIDEO_FORMAT_INFO_SCALE_WIDTH (in_finfo, i, in_width);
+      ih = GST_VIDEO_FORMAT_INFO_SCALE_HEIGHT (in_finfo, i, in_height);
+      ow = GST_VIDEO_FORMAT_INFO_SCALE_WIDTH (out_finfo, i, out_width);
+      oh = GST_VIDEO_FORMAT_INFO_SCALE_HEIGHT (out_finfo, i, out_height);
+
+      GST_DEBUG ("plane %d: %dx%d -> %dx%d", i, iw, ih, ow, oh);
+
+      convert->fout_width[i] = ow;
+      convert->fout_height[i] = oh;
+
+      pstride = GST_VIDEO_FORMAT_INFO_PSTRIDE (out_finfo, i);
+      convert->fin_x[i] =
+          GST_VIDEO_FORMAT_INFO_SCALE_WIDTH (in_finfo, i, convert->in_x);
+      convert->fin_x[i] *= pstride;
+      convert->fin_y[i] =
+          GST_VIDEO_FORMAT_INFO_SCALE_HEIGHT (in_finfo, i, convert->in_y);
+      convert->fout_x[i] =
+          GST_VIDEO_FORMAT_INFO_SCALE_WIDTH (out_finfo, i, convert->out_x);
+      convert->fout_x[i] *= pstride;
+      convert->fout_y[i] =
+          GST_VIDEO_FORMAT_INFO_SCALE_HEIGHT (out_finfo, i, convert->out_y);
+
+      GST_DEBUG ("plane %d: pstride %d", i, pstride);
+      GST_DEBUG ("plane %d: in_x %d, in_y %d", i, convert->fin_x[i],
+          convert->fin_y[i]);
+      GST_DEBUG ("plane %d: out_x %d, out_y %d", i, convert->fout_x[i],
+          convert->fout_y[i]);
+
+      if (comp == -1) {
+        convert->fconvert[i] = convert_plane_fill;
+        if (GST_VIDEO_INFO_IS_YUV (out_info)) {
+          if (i == 3)
+            convert->ffill[i] = convert->alpha_value;
+          if (i == 0)
+            convert->ffill[i] = 0x00;
+          else
+            convert->ffill[i] = 0x80;
+        } else {
+          if (i == 3)
+            convert->ffill[i] = convert->alpha_value;
+          else
+            convert->ffill[i] = 0x00;
+        }
+        GST_DEBUG ("plane %d fill %02x", i, convert->ffill[i]);
+        continue;
+      } else {
+        convert->fsplane[i] = GST_VIDEO_FORMAT_INFO_PLANE (in_finfo, comp);
+        GST_DEBUG ("plane %d -> %d (comp %d)", i, convert->fsplane[i], comp);
+      }
+
+      config = gst_structure_copy (convert->config);
+
+      resample_method = (i == 0 ? method : cr_method);
+
+      need_v_scaler = FALSE;
+      need_h_scaler = FALSE;
+      if (iw == ow) {
+        if (ih == oh) {
+          convert->fconvert[i] = convert_plane_hv;
+          GST_DEBUG ("plane %d: copy", i);
+        } else if (ih == 2 * oh && pstride == 1
+            && resample_method == GST_VIDEO_RESAMPLER_METHOD_LINEAR) {
+          convert->fconvert[i] = convert_plane_v_halve;
+          GST_DEBUG ("plane %d: vertical halve", i);
+        } else if (2 * ih == oh && pstride == 1
+            && resample_method == GST_VIDEO_RESAMPLER_METHOD_NEAREST) {
+          convert->fconvert[i] = convert_plane_v_double;
+          GST_DEBUG ("plane %d: vertical double", i);
+        } else {
+          convert->fconvert[i] = convert_plane_hv;
+          GST_DEBUG ("plane %d: vertical scale", i);
+          need_v_scaler = TRUE;
+        }
+      } else if (ih == oh) {
+        if (iw == 2 * ow && pstride == 1
+            && resample_method == GST_VIDEO_RESAMPLER_METHOD_LINEAR) {
+          convert->fconvert[i] = convert_plane_h_halve;
+          GST_DEBUG ("plane %d: horizontal halve", i);
+        } else if (2 * iw == ow && pstride == 1
+            && resample_method == GST_VIDEO_RESAMPLER_METHOD_NEAREST) {
+          convert->fconvert[i] = convert_plane_h_double;
+          GST_DEBUG ("plane %d: horizontal double", i);
+        } else {
+          convert->fconvert[i] = convert_plane_hv;
+          GST_DEBUG ("plane %d: horizontal scale", i);
+          need_h_scaler = TRUE;
+        }
+      } else {
+        if (iw == 2 * ow && ih == 2 * oh && pstride == 1
+            && resample_method == GST_VIDEO_RESAMPLER_METHOD_LINEAR) {
+          convert->fconvert[i] = convert_plane_hv_halve;
+          GST_DEBUG ("plane %d: horizontal/vertical halve", i);
+        } else if (2 * iw == ow && 2 * ih == oh && pstride == 1
+            && resample_method == GST_VIDEO_RESAMPLER_METHOD_NEAREST) {
+          convert->fconvert[i] = convert_plane_hv_double;
+          GST_DEBUG ("plane %d: horizontal/vertical double", i);
+        } else {
+          convert->fconvert[i] = convert_plane_hv;
+          GST_DEBUG ("plane %d: horizontal/vertical scale", i);
+          need_v_scaler = TRUE;
+          need_h_scaler = TRUE;
+        }
+      }
+
+      if (need_h_scaler && iw != 0 && ow != 0) {
+        convert->fh_scaler[i] = gst_video_scaler_new (resample_method,
+            GST_VIDEO_SCALER_FLAG_NONE, taps, iw, ow, config);
+      } else
+        convert->fh_scaler[i] = NULL;
+
+      if (need_v_scaler && ih != 0 && oh != 0) {
+        convert->fv_scaler[i] = gst_video_scaler_new (resample_method,
+            GST_VIDEO_SCALER_FLAG_NONE, taps, ih, oh, config);
+      } else
+        convert->fv_scaler[i] = NULL;
+
+      gst_structure_free (config);
+      convert->fformat[i] = get_scale_format (in_format, i);
+    }
+  }
+
+  return TRUE;
+}
+
+/* Fast paths */
+
+typedef struct
+{
+  GstVideoFormat in_format;
+  GstVideoFormat out_format;
+  gboolean keeps_interlaced;
+  gboolean needs_color_matrix;
+  gboolean keeps_size;
+  gboolean do_crop;
+  gboolean do_border;
+  gboolean alpha_copy;
+  gboolean alpha_set;
+  gboolean alpha_mult;
+  gint width_align, height_align;
+  void (*convert) (GstVideoConverter * convert, const GstVideoFrame * src,
+      GstVideoFrame * dest);
+} VideoTransform;
+
+static const VideoTransform transforms[] = {
+  /* planar -> packed */
+  {GST_VIDEO_FORMAT_I420, GST_VIDEO_FORMAT_YUY2, TRUE, FALSE, TRUE, FALSE,
+      FALSE, FALSE, FALSE, FALSE, 0, 0, convert_I420_YUY2},
+  {GST_VIDEO_FORMAT_I420, GST_VIDEO_FORMAT_UYVY, TRUE, FALSE, TRUE, FALSE,
+      FALSE, FALSE, FALSE, FALSE, 0, 0, convert_I420_UYVY},
+  {GST_VIDEO_FORMAT_I420, GST_VIDEO_FORMAT_AYUV, TRUE, FALSE, TRUE, FALSE,
+      FALSE, FALSE, TRUE, FALSE, 0, 0, convert_I420_AYUV},
+
+  {GST_VIDEO_FORMAT_YV12, GST_VIDEO_FORMAT_YUY2, TRUE, FALSE, TRUE, FALSE,
+      FALSE, FALSE, FALSE, FALSE, 0, 0, convert_I420_YUY2},
+  {GST_VIDEO_FORMAT_YV12, GST_VIDEO_FORMAT_UYVY, TRUE, FALSE, TRUE, FALSE,
+      FALSE, FALSE, FALSE, FALSE, 0, 0, convert_I420_UYVY},
+  {GST_VIDEO_FORMAT_YV12, GST_VIDEO_FORMAT_AYUV, TRUE, FALSE, TRUE, FALSE,
+      FALSE, FALSE, TRUE, FALSE, 0, 0, convert_I420_AYUV},
+
+  {GST_VIDEO_FORMAT_Y42B, GST_VIDEO_FORMAT_YUY2, TRUE, FALSE, TRUE, TRUE,
+      TRUE, FALSE, FALSE, FALSE, 0, 0, convert_Y42B_YUY2},
+  {GST_VIDEO_FORMAT_Y42B, GST_VIDEO_FORMAT_UYVY, TRUE, FALSE, TRUE, TRUE,
+      TRUE, FALSE, FALSE, FALSE, 0, 0, convert_Y42B_UYVY},
+  {GST_VIDEO_FORMAT_Y42B, GST_VIDEO_FORMAT_AYUV, TRUE, FALSE, TRUE, TRUE,
+      TRUE, FALSE, TRUE, FALSE, 1, 0, convert_Y42B_AYUV},
+
+  {GST_VIDEO_FORMAT_Y444, GST_VIDEO_FORMAT_YUY2, TRUE, FALSE, TRUE, TRUE,
+      TRUE, FALSE, FALSE, FALSE, 1, 0, convert_Y444_YUY2},
+  {GST_VIDEO_FORMAT_Y444, GST_VIDEO_FORMAT_UYVY, TRUE, FALSE, TRUE, TRUE,
+      TRUE, FALSE, FALSE, FALSE, 1, 0, convert_Y444_UYVY},
+  {GST_VIDEO_FORMAT_Y444, GST_VIDEO_FORMAT_AYUV, TRUE, FALSE, TRUE, TRUE,
+      TRUE, FALSE, TRUE, FALSE, 0, 0, convert_Y444_AYUV},
+
+  /* packed -> packed */
+  {GST_VIDEO_FORMAT_YUY2, GST_VIDEO_FORMAT_YUY2, TRUE, FALSE, FALSE, TRUE,
+      TRUE, FALSE, FALSE, FALSE, 0, 0, convert_scale_planes},
+  {GST_VIDEO_FORMAT_YUY2, GST_VIDEO_FORMAT_UYVY, TRUE, FALSE, TRUE, TRUE,
+      TRUE, FALSE, FALSE, FALSE, 0, 0, convert_UYVY_YUY2},      /* alias */
+  {GST_VIDEO_FORMAT_YUY2, GST_VIDEO_FORMAT_AYUV, TRUE, FALSE, TRUE, TRUE,
+      TRUE, FALSE, TRUE, FALSE, 1, 0, convert_YUY2_AYUV},
+
+  {GST_VIDEO_FORMAT_UYVY, GST_VIDEO_FORMAT_UYVY, TRUE, FALSE, FALSE, TRUE,
+      TRUE, FALSE, FALSE, FALSE, 0, 0, convert_scale_planes},
+  {GST_VIDEO_FORMAT_UYVY, GST_VIDEO_FORMAT_YUY2, TRUE, FALSE, TRUE, TRUE,
+      TRUE, FALSE, FALSE, FALSE, 0, 0, convert_UYVY_YUY2},
+  {GST_VIDEO_FORMAT_UYVY, GST_VIDEO_FORMAT_AYUV, TRUE, FALSE, TRUE, TRUE,
+      TRUE, FALSE, TRUE, FALSE, 0, 0, convert_UYVY_AYUV},
+
+  {GST_VIDEO_FORMAT_AYUV, GST_VIDEO_FORMAT_AYUV, TRUE, FALSE, FALSE, TRUE, TRUE,
+      TRUE, FALSE, FALSE, 0, 0, convert_scale_planes},
+  {GST_VIDEO_FORMAT_AYUV, GST_VIDEO_FORMAT_YUY2, TRUE, FALSE, TRUE, TRUE,
+      TRUE, FALSE, FALSE, FALSE, 1, 0, convert_AYUV_YUY2},
+  {GST_VIDEO_FORMAT_AYUV, GST_VIDEO_FORMAT_UYVY, TRUE, FALSE, TRUE, TRUE,
+      TRUE, FALSE, FALSE, FALSE, 1, 0, convert_AYUV_UYVY},
+
+  /* packed -> planar */
+  {GST_VIDEO_FORMAT_YUY2, GST_VIDEO_FORMAT_I420, TRUE, FALSE, TRUE, FALSE,
+      FALSE, FALSE, FALSE, FALSE, 0, 0, convert_YUY2_I420},
+  {GST_VIDEO_FORMAT_YUY2, GST_VIDEO_FORMAT_YV12, TRUE, FALSE, TRUE, FALSE,
+      FALSE, FALSE, FALSE, FALSE, 0, 0, convert_YUY2_I420},
+  {GST_VIDEO_FORMAT_YUY2, GST_VIDEO_FORMAT_Y42B, TRUE, FALSE, TRUE, TRUE,
+      TRUE, FALSE, FALSE, FALSE, 0, 0, convert_YUY2_Y42B},
+  {GST_VIDEO_FORMAT_YUY2, GST_VIDEO_FORMAT_Y444, TRUE, FALSE, TRUE, TRUE,
+      TRUE, FALSE, FALSE, FALSE, 0, 0, convert_YUY2_Y444},
+
+  {GST_VIDEO_FORMAT_UYVY, GST_VIDEO_FORMAT_I420, TRUE, FALSE, TRUE, FALSE,
+      FALSE, FALSE, FALSE, FALSE, 0, 0, convert_UYVY_I420},
+  {GST_VIDEO_FORMAT_UYVY, GST_VIDEO_FORMAT_YV12, TRUE, FALSE, TRUE, FALSE,
+      FALSE, FALSE, FALSE, FALSE, 0, 0, convert_UYVY_I420},
+  {GST_VIDEO_FORMAT_UYVY, GST_VIDEO_FORMAT_Y42B, TRUE, FALSE, TRUE, TRUE,
+      TRUE, FALSE, FALSE, FALSE, 0, 0, convert_UYVY_Y42B},
+  {GST_VIDEO_FORMAT_UYVY, GST_VIDEO_FORMAT_Y444, TRUE, FALSE, TRUE, TRUE,
+      TRUE, FALSE, FALSE, FALSE, 0, 0, convert_UYVY_Y444},
+
+  {GST_VIDEO_FORMAT_AYUV, GST_VIDEO_FORMAT_I420, FALSE, FALSE, TRUE, TRUE,
+      TRUE, FALSE, FALSE, FALSE, 1, 1, convert_AYUV_I420},
+  {GST_VIDEO_FORMAT_AYUV, GST_VIDEO_FORMAT_YV12, FALSE, FALSE, TRUE, TRUE,
+      TRUE, FALSE, FALSE, FALSE, 1, 1, convert_AYUV_I420},
+  {GST_VIDEO_FORMAT_AYUV, GST_VIDEO_FORMAT_Y42B, TRUE, FALSE, TRUE, TRUE,
+      TRUE, FALSE, FALSE, FALSE, 1, 0, convert_AYUV_Y42B},
+  {GST_VIDEO_FORMAT_AYUV, GST_VIDEO_FORMAT_Y444, TRUE, FALSE, TRUE, TRUE,
+      TRUE, FALSE, FALSE, FALSE, 0, 0, convert_AYUV_Y444},
+
+  /* planar -> planar */
+  {GST_VIDEO_FORMAT_I420, GST_VIDEO_FORMAT_I420, FALSE, FALSE, FALSE, TRUE,
+      TRUE, FALSE, FALSE, FALSE, 0, 0, convert_scale_planes},
+  {GST_VIDEO_FORMAT_I420, GST_VIDEO_FORMAT_YV12, FALSE, FALSE, FALSE, TRUE,
+      TRUE, FALSE, FALSE, FALSE, 0, 0, convert_scale_planes},
+  {GST_VIDEO_FORMAT_I420, GST_VIDEO_FORMAT_Y41B, FALSE, FALSE, FALSE, TRUE,
+      TRUE, FALSE, FALSE, FALSE, 0, 0, convert_scale_planes},
+  {GST_VIDEO_FORMAT_I420, GST_VIDEO_FORMAT_Y42B, FALSE, FALSE, FALSE, TRUE,
+      TRUE, FALSE, FALSE, FALSE, 0, 0, convert_scale_planes},
+  {GST_VIDEO_FORMAT_I420, GST_VIDEO_FORMAT_Y444, FALSE, FALSE, FALSE, TRUE,
+      TRUE, FALSE, FALSE, FALSE, 0, 0, convert_scale_planes},
+  {GST_VIDEO_FORMAT_I420, GST_VIDEO_FORMAT_GRAY8, FALSE, FALSE, FALSE, TRUE,
+      TRUE, FALSE, FALSE, FALSE, 0, 0, convert_scale_planes},
+  {GST_VIDEO_FORMAT_I420, GST_VIDEO_FORMAT_A420, FALSE, FALSE, FALSE, TRUE,
+      TRUE, FALSE, TRUE, FALSE, 0, 0, convert_scale_planes},
+  {GST_VIDEO_FORMAT_I420, GST_VIDEO_FORMAT_YUV9, FALSE, FALSE, FALSE, TRUE,
+      TRUE, FALSE, FALSE, FALSE, 0, 0, convert_scale_planes},
+  {GST_VIDEO_FORMAT_I420, GST_VIDEO_FORMAT_YVU9, FALSE, FALSE, FALSE, TRUE,
+      TRUE, FALSE, FALSE, FALSE, 0, 0, convert_scale_planes},
+
+  {GST_VIDEO_FORMAT_YV12, GST_VIDEO_FORMAT_I420, FALSE, FALSE, FALSE, TRUE,
+      TRUE, FALSE, FALSE, FALSE, 0, 0, convert_scale_planes},
+  {GST_VIDEO_FORMAT_YV12, GST_VIDEO_FORMAT_YV12, FALSE, FALSE, FALSE, TRUE,
+      TRUE, FALSE, FALSE, FALSE, 0, 0, convert_scale_planes},
+  {GST_VIDEO_FORMAT_YV12, GST_VIDEO_FORMAT_Y41B, FALSE, FALSE, FALSE, TRUE,
+      TRUE, FALSE, FALSE, FALSE, 0, 0, convert_scale_planes},
+  {GST_VIDEO_FORMAT_YV12, GST_VIDEO_FORMAT_Y42B, FALSE, FALSE, FALSE, TRUE,
+      TRUE, FALSE, FALSE, FALSE, 0, 0, convert_scale_planes},
+  {GST_VIDEO_FORMAT_YV12, GST_VIDEO_FORMAT_Y444, FALSE, FALSE, FALSE, TRUE,
+      TRUE, FALSE, FALSE, FALSE, 0, 0, convert_scale_planes},
+  {GST_VIDEO_FORMAT_YV12, GST_VIDEO_FORMAT_GRAY8, FALSE, FALSE, FALSE, TRUE,
+      TRUE, FALSE, FALSE, FALSE, 0, 0, convert_scale_planes},
+  {GST_VIDEO_FORMAT_YV12, GST_VIDEO_FORMAT_A420, FALSE, FALSE, FALSE, TRUE,
+      TRUE, FALSE, TRUE, FALSE, 0, 0, convert_scale_planes},
+  {GST_VIDEO_FORMAT_YV12, GST_VIDEO_FORMAT_YUV9, FALSE, FALSE, FALSE, TRUE,
+      TRUE, FALSE, FALSE, FALSE, 0, 0, convert_scale_planes},
+  {GST_VIDEO_FORMAT_YV12, GST_VIDEO_FORMAT_YVU9, FALSE, FALSE, FALSE, TRUE,
+      TRUE, FALSE, FALSE, FALSE, 0, 0, convert_scale_planes},
+
+  {GST_VIDEO_FORMAT_Y41B, GST_VIDEO_FORMAT_I420, FALSE, FALSE, FALSE, TRUE,
+      TRUE, FALSE, FALSE, FALSE, 0, 0, convert_scale_planes},
+  {GST_VIDEO_FORMAT_Y41B, GST_VIDEO_FORMAT_YV12, FALSE, FALSE, FALSE, TRUE,
+      TRUE, FALSE, FALSE, FALSE, 0, 0, convert_scale_planes},
+  {GST_VIDEO_FORMAT_Y41B, GST_VIDEO_FORMAT_Y41B, FALSE, FALSE, FALSE, TRUE,
+      TRUE, FALSE, FALSE, FALSE, 0, 0, convert_scale_planes},
+  {GST_VIDEO_FORMAT_Y41B, GST_VIDEO_FORMAT_Y42B, FALSE, FALSE, FALSE, TRUE,
+      TRUE, FALSE, FALSE, FALSE, 0, 0, convert_scale_planes},
+  {GST_VIDEO_FORMAT_Y41B, GST_VIDEO_FORMAT_Y444, FALSE, FALSE, FALSE, TRUE,
+      TRUE, FALSE, FALSE, FALSE, 0, 0, convert_scale_planes},
+  {GST_VIDEO_FORMAT_Y41B, GST_VIDEO_FORMAT_GRAY8, FALSE, FALSE, FALSE, TRUE,
+      TRUE, FALSE, FALSE, FALSE, 0, 0, convert_scale_planes},
+  {GST_VIDEO_FORMAT_Y41B, GST_VIDEO_FORMAT_A420, FALSE, FALSE, FALSE, TRUE,
+      TRUE, FALSE, TRUE, FALSE, 0, 0, convert_scale_planes},
+  {GST_VIDEO_FORMAT_Y41B, GST_VIDEO_FORMAT_YUV9, FALSE, FALSE, FALSE, TRUE,
+      TRUE, FALSE, FALSE, FALSE, 0, 0, convert_scale_planes},
+  {GST_VIDEO_FORMAT_Y41B, GST_VIDEO_FORMAT_YVU9, FALSE, FALSE, FALSE, TRUE,
+      TRUE, FALSE, FALSE, FALSE, 0, 0, convert_scale_planes},
+
+  {GST_VIDEO_FORMAT_Y42B, GST_VIDEO_FORMAT_I420, FALSE, FALSE, FALSE, TRUE,
+      TRUE, FALSE, FALSE, FALSE, 0, 0, convert_scale_planes},
+  {GST_VIDEO_FORMAT_Y42B, GST_VIDEO_FORMAT_YV12, FALSE, FALSE, FALSE, TRUE,
+      TRUE, FALSE, FALSE, FALSE, 0, 0, convert_scale_planes},
+  {GST_VIDEO_FORMAT_Y42B, GST_VIDEO_FORMAT_Y41B, FALSE, FALSE, FALSE, TRUE,
+      TRUE, FALSE, FALSE, FALSE, 0, 0, convert_scale_planes},
+  {GST_VIDEO_FORMAT_Y42B, GST_VIDEO_FORMAT_Y42B, FALSE, FALSE, FALSE, TRUE,
+      TRUE, FALSE, FALSE, FALSE, 0, 0, convert_scale_planes},
+  {GST_VIDEO_FORMAT_Y42B, GST_VIDEO_FORMAT_Y444, FALSE, FALSE, FALSE, TRUE,
+      TRUE, FALSE, FALSE, FALSE, 0, 0, convert_scale_planes},
+  {GST_VIDEO_FORMAT_Y42B, GST_VIDEO_FORMAT_GRAY8, FALSE, FALSE, FALSE, TRUE,
+      TRUE, FALSE, FALSE, FALSE, 0, 0, convert_scale_planes},
+  {GST_VIDEO_FORMAT_Y42B, GST_VIDEO_FORMAT_A420, FALSE, FALSE, FALSE, TRUE,
+      TRUE, FALSE, TRUE, FALSE, 0, 0, convert_scale_planes},
+  {GST_VIDEO_FORMAT_Y42B, GST_VIDEO_FORMAT_YUV9, FALSE, FALSE, FALSE, TRUE,
+      TRUE, FALSE, FALSE, FALSE, 0, 0, convert_scale_planes},
+  {GST_VIDEO_FORMAT_Y42B, GST_VIDEO_FORMAT_YVU9, FALSE, FALSE, FALSE, TRUE,
+      TRUE, FALSE, FALSE, FALSE, 0, 0, convert_scale_planes},
+
+  {GST_VIDEO_FORMAT_Y444, GST_VIDEO_FORMAT_I420, FALSE, FALSE, FALSE, TRUE,
+      TRUE, FALSE, FALSE, FALSE, 0, 0, convert_scale_planes},
+  {GST_VIDEO_FORMAT_Y444, GST_VIDEO_FORMAT_YV12, FALSE, FALSE, FALSE, TRUE,
+      TRUE, FALSE, FALSE, FALSE, 0, 0, convert_scale_planes},
+  {GST_VIDEO_FORMAT_Y444, GST_VIDEO_FORMAT_Y41B, FALSE, FALSE, FALSE, TRUE,
+      TRUE, FALSE, FALSE, FALSE, 0, 0, convert_scale_planes},
+  {GST_VIDEO_FORMAT_Y444, GST_VIDEO_FORMAT_Y42B, FALSE, FALSE, FALSE, TRUE,
+      TRUE, FALSE, FALSE, FALSE, 0, 0, convert_scale_planes},
+  {GST_VIDEO_FORMAT_Y444, GST_VIDEO_FORMAT_Y444, FALSE, FALSE, FALSE, TRUE,
+      TRUE, FALSE, FALSE, FALSE, 0, 0, convert_scale_planes},
+  {GST_VIDEO_FORMAT_Y444, GST_VIDEO_FORMAT_GRAY8, FALSE, FALSE, FALSE, TRUE,
+      TRUE, FALSE, FALSE, FALSE, 0, 0, convert_scale_planes},
+  {GST_VIDEO_FORMAT_Y444, GST_VIDEO_FORMAT_A420, FALSE, FALSE, FALSE, TRUE,
+      TRUE, FALSE, TRUE, FALSE, 0, 0, convert_scale_planes},
+  {GST_VIDEO_FORMAT_Y444, GST_VIDEO_FORMAT_YUV9, FALSE, FALSE, FALSE, TRUE,
+      TRUE, FALSE, FALSE, FALSE, 0, 0, convert_scale_planes},
+  {GST_VIDEO_FORMAT_Y444, GST_VIDEO_FORMAT_YVU9, FALSE, FALSE, FALSE, TRUE,
+      TRUE, FALSE, FALSE, FALSE, 0, 0, convert_scale_planes},
+
+  {GST_VIDEO_FORMAT_GRAY8, GST_VIDEO_FORMAT_I420, FALSE, FALSE, FALSE, TRUE,
+      TRUE, FALSE, FALSE, FALSE, 0, 0, convert_scale_planes},
+  {GST_VIDEO_FORMAT_GRAY8, GST_VIDEO_FORMAT_YV12, FALSE, FALSE, FALSE, TRUE,
+      TRUE, FALSE, FALSE, FALSE, 0, 0, convert_scale_planes},
+  {GST_VIDEO_FORMAT_GRAY8, GST_VIDEO_FORMAT_Y41B, FALSE, FALSE, FALSE, TRUE,
+      TRUE, FALSE, FALSE, FALSE, 0, 0, convert_scale_planes},
+  {GST_VIDEO_FORMAT_GRAY8, GST_VIDEO_FORMAT_Y42B, FALSE, FALSE, FALSE, TRUE,
+      TRUE, FALSE, FALSE, FALSE, 0, 0, convert_scale_planes},
+  {GST_VIDEO_FORMAT_GRAY8, GST_VIDEO_FORMAT_Y444, FALSE, FALSE, FALSE, TRUE,
+      TRUE, FALSE, FALSE, FALSE, 0, 0, convert_scale_planes},
+  {GST_VIDEO_FORMAT_GRAY8, GST_VIDEO_FORMAT_GRAY8, FALSE, FALSE, FALSE, TRUE,
+      TRUE, FALSE, FALSE, FALSE, 0, 0, convert_scale_planes},
+  {GST_VIDEO_FORMAT_GRAY8, GST_VIDEO_FORMAT_A420, FALSE, FALSE, FALSE, TRUE,
+      TRUE, FALSE, TRUE, FALSE, 0, 0, convert_scale_planes},
+  {GST_VIDEO_FORMAT_GRAY8, GST_VIDEO_FORMAT_YUV9, FALSE, FALSE, FALSE, TRUE,
+      TRUE, FALSE, FALSE, FALSE, 0, 0, convert_scale_planes},
+  {GST_VIDEO_FORMAT_GRAY8, GST_VIDEO_FORMAT_YVU9, FALSE, FALSE, FALSE, TRUE,
+      TRUE, FALSE, FALSE, FALSE, 0, 0, convert_scale_planes},
+
+  {GST_VIDEO_FORMAT_A420, GST_VIDEO_FORMAT_I420, FALSE, FALSE, FALSE, TRUE,
+      TRUE, FALSE, FALSE, FALSE, 0, 0, convert_scale_planes},
+  {GST_VIDEO_FORMAT_A420, GST_VIDEO_FORMAT_YV12, FALSE, FALSE, FALSE, TRUE,
+      TRUE, FALSE, FALSE, FALSE, 0, 0, convert_scale_planes},
+  {GST_VIDEO_FORMAT_A420, GST_VIDEO_FORMAT_Y41B, FALSE, FALSE, FALSE, TRUE,
+      TRUE, FALSE, FALSE, FALSE, 0, 0, convert_scale_planes},
+  {GST_VIDEO_FORMAT_A420, GST_VIDEO_FORMAT_Y42B, FALSE, FALSE, FALSE, TRUE,
+      TRUE, FALSE, FALSE, FALSE, 0, 0, convert_scale_planes},
+  {GST_VIDEO_FORMAT_A420, GST_VIDEO_FORMAT_Y444, FALSE, FALSE, FALSE, TRUE,
+      TRUE, FALSE, FALSE, FALSE, 0, 0, convert_scale_planes},
+  {GST_VIDEO_FORMAT_A420, GST_VIDEO_FORMAT_GRAY8, FALSE, FALSE, FALSE, TRUE,
+      TRUE, FALSE, FALSE, FALSE, 0, 0, convert_scale_planes},
+  {GST_VIDEO_FORMAT_A420, GST_VIDEO_FORMAT_A420, FALSE, FALSE, FALSE, TRUE,
+      TRUE, TRUE, FALSE, FALSE, 0, 0, convert_scale_planes},
+  {GST_VIDEO_FORMAT_A420, GST_VIDEO_FORMAT_YUV9, FALSE, FALSE, FALSE, TRUE,
+      TRUE, FALSE, FALSE, FALSE, 0, 0, convert_scale_planes},
+  {GST_VIDEO_FORMAT_A420, GST_VIDEO_FORMAT_YVU9, FALSE, FALSE, FALSE, TRUE,
+      TRUE, FALSE, FALSE, FALSE, 0, 0, convert_scale_planes},
+
+  {GST_VIDEO_FORMAT_YUV9, GST_VIDEO_FORMAT_I420, FALSE, FALSE, FALSE, TRUE,
+      TRUE, FALSE, FALSE, FALSE, 0, 0, convert_scale_planes},
+  {GST_VIDEO_FORMAT_YUV9, GST_VIDEO_FORMAT_YV12, FALSE, FALSE, FALSE, TRUE,
+      TRUE, FALSE, FALSE, FALSE, 0, 0, convert_scale_planes},
+  {GST_VIDEO_FORMAT_YUV9, GST_VIDEO_FORMAT_Y41B, FALSE, FALSE, FALSE, TRUE,
+      TRUE, FALSE, FALSE, FALSE, 0, 0, convert_scale_planes},
+  {GST_VIDEO_FORMAT_YUV9, GST_VIDEO_FORMAT_Y42B, FALSE, FALSE, FALSE, TRUE,
+      TRUE, FALSE, FALSE, FALSE, 0, 0, convert_scale_planes},
+  {GST_VIDEO_FORMAT_YUV9, GST_VIDEO_FORMAT_Y444, FALSE, FALSE, FALSE, TRUE,
+      TRUE, FALSE, FALSE, FALSE, 0, 0, convert_scale_planes},
+  {GST_VIDEO_FORMAT_YUV9, GST_VIDEO_FORMAT_GRAY8, FALSE, FALSE, FALSE, TRUE,
+      TRUE, FALSE, FALSE, FALSE, 0, 0, convert_scale_planes},
+  {GST_VIDEO_FORMAT_YUV9, GST_VIDEO_FORMAT_A420, FALSE, FALSE, FALSE, TRUE,
+      TRUE, FALSE, TRUE, FALSE, 0, 0, convert_scale_planes},
+  {GST_VIDEO_FORMAT_YUV9, GST_VIDEO_FORMAT_YUV9, FALSE, FALSE, FALSE, TRUE,
+      TRUE, FALSE, FALSE, FALSE, 0, 0, convert_scale_planes},
+  {GST_VIDEO_FORMAT_YUV9, GST_VIDEO_FORMAT_YVU9, FALSE, FALSE, FALSE, TRUE,
+      TRUE, FALSE, FALSE, FALSE, 0, 0, convert_scale_planes},
+
+  {GST_VIDEO_FORMAT_YVU9, GST_VIDEO_FORMAT_I420, FALSE, FALSE, FALSE, TRUE,
+      TRUE, FALSE, FALSE, FALSE, 0, 0, convert_scale_planes},
+  {GST_VIDEO_FORMAT_YVU9, GST_VIDEO_FORMAT_YV12, FALSE, FALSE, FALSE, TRUE,
+      TRUE, FALSE, FALSE, FALSE, 0, 0, convert_scale_planes},
+  {GST_VIDEO_FORMAT_YVU9, GST_VIDEO_FORMAT_Y41B, FALSE, FALSE, FALSE, TRUE,
+      TRUE, FALSE, FALSE, FALSE, 0, 0, convert_scale_planes},
+  {GST_VIDEO_FORMAT_YVU9, GST_VIDEO_FORMAT_Y42B, FALSE, FALSE, FALSE, TRUE,
+      TRUE, FALSE, FALSE, FALSE, 0, 0, convert_scale_planes},
+  {GST_VIDEO_FORMAT_YVU9, GST_VIDEO_FORMAT_Y444, FALSE, FALSE, FALSE, TRUE,
+      TRUE, FALSE, FALSE, FALSE, 0, 0, convert_scale_planes},
+  {GST_VIDEO_FORMAT_YVU9, GST_VIDEO_FORMAT_GRAY8, FALSE, FALSE, FALSE, TRUE,
+      TRUE, FALSE, FALSE, FALSE, 0, 0, convert_scale_planes},
+  {GST_VIDEO_FORMAT_YVU9, GST_VIDEO_FORMAT_A420, FALSE, FALSE, FALSE, TRUE,
+      TRUE, FALSE, TRUE, FALSE, 0, 0, convert_scale_planes},
+  {GST_VIDEO_FORMAT_YVU9, GST_VIDEO_FORMAT_YUV9, FALSE, FALSE, FALSE, TRUE,
+      TRUE, FALSE, FALSE, FALSE, 0, 0, convert_scale_planes},
+  {GST_VIDEO_FORMAT_YVU9, GST_VIDEO_FORMAT_YVU9, FALSE, FALSE, FALSE, TRUE,
+      TRUE, FALSE, FALSE, FALSE, 0, 0, convert_scale_planes},
+
+  /* sempiplanar -> semiplanar */
+  {GST_VIDEO_FORMAT_NV12, GST_VIDEO_FORMAT_NV12, TRUE, FALSE, FALSE, TRUE,
+      TRUE, FALSE, FALSE, FALSE, 0, 0, convert_scale_planes},
+  {GST_VIDEO_FORMAT_NV12, GST_VIDEO_FORMAT_NV16, TRUE, FALSE, FALSE, TRUE,
+      TRUE, FALSE, FALSE, FALSE, 0, 0, convert_scale_planes},
+  {GST_VIDEO_FORMAT_NV12, GST_VIDEO_FORMAT_NV24, TRUE, FALSE, FALSE, TRUE,
+      TRUE, FALSE, FALSE, FALSE, 0, 0, convert_scale_planes},
+
+  {GST_VIDEO_FORMAT_NV21, GST_VIDEO_FORMAT_NV21, TRUE, FALSE, FALSE, TRUE,
+      TRUE, FALSE, FALSE, FALSE, 0, 0, convert_scale_planes},
+
+  {GST_VIDEO_FORMAT_NV16, GST_VIDEO_FORMAT_NV12, TRUE, FALSE, FALSE, TRUE,
+      TRUE, FALSE, FALSE, FALSE, 0, 0, convert_scale_planes},
+  {GST_VIDEO_FORMAT_NV16, GST_VIDEO_FORMAT_NV16, TRUE, FALSE, FALSE, TRUE,
+      TRUE, FALSE, FALSE, FALSE, 0, 0, convert_scale_planes},
+  {GST_VIDEO_FORMAT_NV16, GST_VIDEO_FORMAT_NV24, TRUE, FALSE, FALSE, TRUE,
+      TRUE, FALSE, FALSE, FALSE, 0, 0, convert_scale_planes},
+
+  {GST_VIDEO_FORMAT_NV61, GST_VIDEO_FORMAT_NV61, TRUE, FALSE, FALSE, TRUE,
+      TRUE, FALSE, FALSE, FALSE, 0, 0, convert_scale_planes},
+
+  {GST_VIDEO_FORMAT_NV24, GST_VIDEO_FORMAT_NV12, TRUE, FALSE, FALSE, TRUE,
+      TRUE, FALSE, FALSE, FALSE, 0, 0, convert_scale_planes},
+  {GST_VIDEO_FORMAT_NV24, GST_VIDEO_FORMAT_NV16, TRUE, FALSE, FALSE, TRUE,
+      TRUE, FALSE, FALSE, FALSE, 0, 0, convert_scale_planes},
+  {GST_VIDEO_FORMAT_NV24, GST_VIDEO_FORMAT_NV24, TRUE, FALSE, FALSE, TRUE,
+      TRUE, FALSE, FALSE, FALSE, 0, 0, convert_scale_planes},
+
+#if G_BYTE_ORDER == G_LITTLE_ENDIAN
+  {GST_VIDEO_FORMAT_AYUV, GST_VIDEO_FORMAT_ARGB, TRUE, TRUE, TRUE, TRUE, TRUE,
+      TRUE, FALSE, FALSE, 0, 0, convert_AYUV_ARGB},
+  {GST_VIDEO_FORMAT_AYUV, GST_VIDEO_FORMAT_BGRA, TRUE, TRUE, TRUE, TRUE, TRUE,
+      TRUE, FALSE, FALSE, 0, 0, convert_AYUV_BGRA},
+  {GST_VIDEO_FORMAT_AYUV, GST_VIDEO_FORMAT_xRGB, TRUE, TRUE, TRUE, TRUE, TRUE,
+      FALSE, FALSE, FALSE, 0, 0, convert_AYUV_ARGB},    /* alias */
+  {GST_VIDEO_FORMAT_AYUV, GST_VIDEO_FORMAT_BGRx, TRUE, TRUE, TRUE, TRUE, TRUE,
+      FALSE, FALSE, FALSE, 0, 0, convert_AYUV_BGRA},    /* alias */
+  {GST_VIDEO_FORMAT_AYUV, GST_VIDEO_FORMAT_ABGR, TRUE, TRUE, TRUE, TRUE, TRUE,
+      TRUE, FALSE, FALSE, 0, 0, convert_AYUV_ABGR},
+  {GST_VIDEO_FORMAT_AYUV, GST_VIDEO_FORMAT_RGBA, TRUE, TRUE, TRUE, TRUE, TRUE,
+      TRUE, FALSE, FALSE, 0, 0, convert_AYUV_RGBA},
+  {GST_VIDEO_FORMAT_AYUV, GST_VIDEO_FORMAT_xBGR, TRUE, TRUE, TRUE, TRUE, TRUE,
+      FALSE, FALSE, FALSE, 0, 0, convert_AYUV_ABGR},    /* alias */
+  {GST_VIDEO_FORMAT_AYUV, GST_VIDEO_FORMAT_RGBx, TRUE, TRUE, TRUE, TRUE, TRUE,
+      FALSE, FALSE, FALSE, 0, 0, convert_AYUV_RGBA},    /* alias */
+
+  {GST_VIDEO_FORMAT_I420, GST_VIDEO_FORMAT_BGRA, FALSE, TRUE, TRUE, TRUE,
+      TRUE, FALSE, FALSE, FALSE, 0, 0, convert_I420_BGRA},
+  {GST_VIDEO_FORMAT_I420, GST_VIDEO_FORMAT_BGRx, FALSE, TRUE, TRUE, TRUE,
+      TRUE, FALSE, FALSE, FALSE, 0, 0, convert_I420_BGRA},
+  {GST_VIDEO_FORMAT_YV12, GST_VIDEO_FORMAT_BGRA, FALSE, TRUE, TRUE, TRUE,
+      TRUE, FALSE, FALSE, FALSE, 0, 0, convert_I420_BGRA},
+  {GST_VIDEO_FORMAT_YV12, GST_VIDEO_FORMAT_BGRx, FALSE, TRUE, TRUE, TRUE,
+      TRUE, FALSE, FALSE, FALSE, 0, 0, convert_I420_BGRA},
+#endif
+
+  /* scalers */
+  {GST_VIDEO_FORMAT_GBR, GST_VIDEO_FORMAT_GBR, TRUE, FALSE, FALSE, TRUE,
+      TRUE, FALSE, FALSE, FALSE, 0, 0, convert_scale_planes},
+
+  {GST_VIDEO_FORMAT_YVYU, GST_VIDEO_FORMAT_YVYU, TRUE, FALSE, FALSE, TRUE,
+      TRUE, FALSE, FALSE, FALSE, 0, 0, convert_scale_planes},
+
+  {GST_VIDEO_FORMAT_RGB15, GST_VIDEO_FORMAT_RGB15, TRUE, FALSE, FALSE, TRUE,
+      TRUE, FALSE, FALSE, FALSE, 0, 0, convert_scale_planes},
+  {GST_VIDEO_FORMAT_RGB16, GST_VIDEO_FORMAT_RGB16, TRUE, FALSE, FALSE, TRUE,
+      TRUE, FALSE, FALSE, FALSE, 0, 0, convert_scale_planes},
+  {GST_VIDEO_FORMAT_BGR15, GST_VIDEO_FORMAT_BGR15, TRUE, FALSE, FALSE, TRUE,
+      TRUE, FALSE, FALSE, FALSE, 0, 0, convert_scale_planes},
+  {GST_VIDEO_FORMAT_BGR16, GST_VIDEO_FORMAT_BGR16, TRUE, FALSE, FALSE, TRUE,
+      TRUE, FALSE, FALSE, FALSE, 0, 0, convert_scale_planes},
+
+  {GST_VIDEO_FORMAT_RGB, GST_VIDEO_FORMAT_RGB, TRUE, FALSE, FALSE, TRUE, TRUE,
+      FALSE, FALSE, FALSE, 0, 0, convert_scale_planes},
+  {GST_VIDEO_FORMAT_BGR, GST_VIDEO_FORMAT_BGR, TRUE, FALSE, FALSE, TRUE, TRUE,
+      FALSE, FALSE, FALSE, 0, 0, convert_scale_planes},
+  {GST_VIDEO_FORMAT_v308, GST_VIDEO_FORMAT_v308, TRUE, FALSE, FALSE, TRUE, TRUE,
+      FALSE, FALSE, FALSE, 0, 0, convert_scale_planes},
+
+  {GST_VIDEO_FORMAT_ARGB, GST_VIDEO_FORMAT_ARGB, TRUE, FALSE, FALSE, TRUE, TRUE,
+      TRUE, FALSE, FALSE, 0, 0, convert_scale_planes},
+  {GST_VIDEO_FORMAT_xRGB, GST_VIDEO_FORMAT_xRGB, TRUE, FALSE, FALSE, TRUE, TRUE,
+      FALSE, FALSE, FALSE, 0, 0, convert_scale_planes},
+  {GST_VIDEO_FORMAT_ABGR, GST_VIDEO_FORMAT_ABGR, TRUE, FALSE, FALSE, TRUE, TRUE,
+      TRUE, FALSE, FALSE, 0, 0, convert_scale_planes},
+  {GST_VIDEO_FORMAT_xBGR, GST_VIDEO_FORMAT_xBGR, TRUE, FALSE, FALSE, TRUE, TRUE,
+      FALSE, FALSE, FALSE, 0, 0, convert_scale_planes},
+  {GST_VIDEO_FORMAT_RGBA, GST_VIDEO_FORMAT_RGBA, TRUE, FALSE, FALSE, TRUE, TRUE,
+      TRUE, FALSE, FALSE, 0, 0, convert_scale_planes},
+  {GST_VIDEO_FORMAT_RGBx, GST_VIDEO_FORMAT_RGBx, TRUE, FALSE, FALSE, TRUE, TRUE,
+      FALSE, FALSE, FALSE, 0, 0, convert_scale_planes},
+  {GST_VIDEO_FORMAT_BGRA, GST_VIDEO_FORMAT_BGRA, TRUE, FALSE, FALSE, TRUE, TRUE,
+      TRUE, FALSE, FALSE, 0, 0, convert_scale_planes},
+  {GST_VIDEO_FORMAT_BGRx, GST_VIDEO_FORMAT_BGRx, TRUE, FALSE, FALSE, TRUE, TRUE,
+      FALSE, FALSE, FALSE, 0, 0, convert_scale_planes},
+
+  {GST_VIDEO_FORMAT_ARGB64, GST_VIDEO_FORMAT_ARGB64, TRUE, FALSE, FALSE, TRUE,
+      TRUE, TRUE, FALSE, FALSE, 0, 0, convert_scale_planes},
+  {GST_VIDEO_FORMAT_AYUV64, GST_VIDEO_FORMAT_AYUV64, TRUE, FALSE, FALSE, TRUE,
+      TRUE, TRUE, FALSE, FALSE, 0, 0, convert_scale_planes},
+
+  {GST_VIDEO_FORMAT_GRAY16_LE, GST_VIDEO_FORMAT_GRAY16_LE, TRUE, FALSE, FALSE,
+      TRUE, TRUE, FALSE, FALSE, FALSE, 0, 0, convert_scale_planes},
+  {GST_VIDEO_FORMAT_GRAY16_BE, GST_VIDEO_FORMAT_GRAY16_BE, TRUE, FALSE, FALSE,
+      TRUE, TRUE, FALSE, FALSE, FALSE, 0, 0, convert_scale_planes},
+};
+
+static gboolean
+video_converter_lookup_fastpath (GstVideoConverter * convert)
+{
+  int i;
+  GstVideoFormat in_format, out_format;
+  GstVideoTransferFunction in_transf, out_transf;
+  gboolean interlaced, same_matrix, same_primaries, same_size, crop, border;
+  gboolean need_copy, need_set, need_mult;
+  gint width, height;
+
+  width = GST_VIDEO_INFO_WIDTH (&convert->in_info);
+  height = GST_VIDEO_INFO_HEIGHT (&convert->in_info);
+
+  if (GET_OPT_DITHER_QUANTIZATION (convert) != 1)
+    return FALSE;
+
+  /* we don't do gamma conversion in fastpath */
+  in_transf = convert->in_info.colorimetry.transfer;
+  out_transf = convert->out_info.colorimetry.transfer;
+
+  same_size = (width == convert->out_width && height == convert->out_height);
+
+  /* fastpaths don't do gamma */
+  if (CHECK_GAMMA_REMAP (convert) && (!same_size || in_transf != out_transf))
+    return FALSE;
+
+  need_copy = (convert->alpha_mode & ALPHA_MODE_COPY) == ALPHA_MODE_COPY;
+  need_set = (convert->alpha_mode & ALPHA_MODE_SET) == ALPHA_MODE_SET;
+  need_mult = (convert->alpha_mode & ALPHA_MODE_MULT) == ALPHA_MODE_MULT;
+  GST_DEBUG ("alpha copy %d, set %d, mult %d", need_copy, need_set, need_mult);
+
+  in_format = GST_VIDEO_INFO_FORMAT (&convert->in_info);
+  out_format = GST_VIDEO_INFO_FORMAT (&convert->out_info);
+
+  if (CHECK_MATRIX_NONE (convert)) {
+    same_matrix = TRUE;
+  } else {
+    GstVideoColorMatrix in_matrix, out_matrix;
+
+    in_matrix = convert->in_info.colorimetry.matrix;
+    out_matrix = convert->out_info.colorimetry.matrix;
+    same_matrix = in_matrix == out_matrix;
+  }
+
+  if (CHECK_PRIMARIES_NONE (convert)) {
+    same_primaries = TRUE;
+  } else {
+    GstVideoColorPrimaries in_primaries, out_primaries;
+
+    in_primaries = convert->in_info.colorimetry.primaries;
+    out_primaries = convert->out_info.colorimetry.primaries;
+    same_primaries = in_primaries == out_primaries;
+  }
+
+  interlaced = GST_VIDEO_INFO_IS_INTERLACED (&convert->in_info);
+  interlaced |= GST_VIDEO_INFO_IS_INTERLACED (&convert->out_info);
+
+  crop = convert->in_x || convert->in_y
+      || convert->in_width < convert->in_maxwidth
+      || convert->in_height < convert->in_maxheight;
+  border = convert->out_x || convert->out_y
+      || convert->out_width < convert->out_maxwidth
+      || convert->out_height < convert->out_maxheight;
+
+  for (i = 0; i < sizeof (transforms) / sizeof (transforms[0]); i++) {
+    if (transforms[i].in_format == in_format &&
+        transforms[i].out_format == out_format &&
+        (transforms[i].keeps_interlaced || !interlaced) &&
+        (transforms[i].needs_color_matrix || (same_matrix && same_primaries))
+        && (!transforms[i].keeps_size || same_size)
+        && (transforms[i].width_align & width) == 0
+        && (transforms[i].height_align & height) == 0
+        && (transforms[i].do_crop || !crop)
+        && (transforms[i].do_border || !border)
+        && (transforms[i].alpha_copy || !need_copy)
+        && (transforms[i].alpha_set || !need_set)
+        && (transforms[i].alpha_mult || !need_mult)) {
+      GST_DEBUG ("using fastpath");
+      if (transforms[i].needs_color_matrix)
+        video_converter_compute_matrix (convert);
+      convert->convert = transforms[i].convert;
+      convert->tmpline = g_malloc0 (sizeof (guint16) * (width + 8) * 4);
+      if (!transforms[i].keeps_size)
+        if (!setup_scale (convert))
+          return FALSE;
+      if (border)
+        setup_borderline (convert);
+      return TRUE;
+    }
+  }
+  GST_DEBUG ("no fastpath found");
+  return FALSE;
+}
diff --git a/gst-libs/gst/video/video-converter.h b/gst-libs/gst/video/video-converter.h
new file mode 100644
index 0000000..c9477c8
--- /dev/null
+++ b/gst-libs/gst/video/video-converter.h
@@ -0,0 +1,284 @@
+/* Video conversion api function
+ * Copyright (C) 2014 Wim Taymans <wim.taymans@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_VIDEO_CONVERTER_H__
+#define __GST_VIDEO_CONVERTER_H__
+
+#include <gst/video/video.h>
+
+G_BEGIN_DECLS
+
+/**
+ * GST_VIDEO_CONVERTER_OPT_RESAMPLER_METHOD:
+ *
+ * #GST_TYPE_RESAMPLER_METHOD, The resampler method to use for
+ * resampling. Other options for the resampler can be used, see
+ * the #GstResampler. Default is #GST_RESAMPLER_METHOD_CUBIC
+ */
+#define GST_VIDEO_CONVERTER_OPT_RESAMPLER_METHOD   "GstVideoConverter.resampler-method"
+/**
+ * GST_VIDEO_CONVERTER_OPT_CHROMA_RESAMPLER_METHOD:
+ *
+ * #GST_TYPE_RESAMPLER_METHOD, The resampler method to use for
+ * chroma resampling. Other options for the resampler can be used, see
+ * the #GstResampler. Default is #GST_RESAMPLER_METHOD_LINEAR
+ */
+#define GST_VIDEO_CONVERTER_OPT_CHROMA_RESAMPLER_METHOD   "GstVideoConverter.chroma-resampler-method"
+/**
+ * GST_VIDEO_CONVERTER_OPT_RESAMPLER_TAPS:
+ *
+ * #G_TYPE_UINT, The number of taps for the resampler.
+ * Default is 0: let the resampler choose a good value.
+ */
+#define GST_VIDEO_CONVERTER_OPT_RESAMPLER_TAPS   "GstVideoConverter.resampler-taps"
+
+/**
+ * GST_VIDEO_CONVERTER_OPT_DITHER_METHOD:
+ *
+ * #GST_TYPE_VIDEO_DITHER_METHOD, The dither method to use when
+ * changing bit depth.
+ * Default is #GST_VIDEO_DITHER_BAYER.
+ */
+#define GST_VIDEO_CONVERTER_OPT_DITHER_METHOD   "GstVideoConverter.dither-method"
+
+/**
+ * GST_VIDEO_CONVERTER_OPT_DITHER_QUANTIZATION:
+ *
+ * #G_TYPE_UINT, The quantization amount to dither to. Components will be
+ * quantized to multiples of this value.
+ * Default is 1
+ */
+#define GST_VIDEO_CONVERTER_OPT_DITHER_QUANTIZATION   "GstVideoConverter.dither-quantization"
+
+/**
+ * GST_VIDEO_CONVERTER_OPT_SRC_X:
+ *
+ * #G_TYPE_INT, source x position to start conversion, default 0
+ */
+#define GST_VIDEO_CONVERTER_OPT_SRC_X   "GstVideoConverter.src-x"
+/**
+ * GST_VIDEO_CONVERTER_OPT_SRC_Y:
+ *
+ * #G_TYPE_INT, source y position to start conversion, default 0
+ */
+#define GST_VIDEO_CONVERTER_OPT_SRC_Y   "GstVideoConverter.src-y"
+/**
+ * GST_VIDEO_CONVERTER_OPT_SRC_WIDTH:
+ *
+ * #G_TYPE_INT, source width to convert, default source width
+ */
+#define GST_VIDEO_CONVERTER_OPT_SRC_WIDTH   "GstVideoConverter.src-width"
+/**
+ * GST_VIDEO_CONVERTER_OPT_SRC_HEIGHT:
+ *
+ * #G_TYPE_INT, source height to convert, default source height
+ */
+#define GST_VIDEO_CONVERTER_OPT_SRC_HEIGHT   "GstVideoConverter.src-height"
+
+/**
+ * GST_VIDEO_CONVERTER_OPT_DEST_X:
+ *
+ * #G_TYPE_INT, x position in the destination frame, default 0
+ */
+#define GST_VIDEO_CONVERTER_OPT_DEST_X   "GstVideoConverter.dest-x"
+/**
+ * GST_VIDEO_CONVERTER_OPT_DEST_Y:
+ *
+ * #G_TYPE_INT, y position in the destination frame, default 0
+ */
+#define GST_VIDEO_CONVERTER_OPT_DEST_Y   "GstVideoConverter.dest-y"
+/**
+ * GST_VIDEO_CONVERTER_OPT_DEST_WIDTH:
+ *
+ * #G_TYPE_INT, width in the destination frame, default destination width
+ */
+#define GST_VIDEO_CONVERTER_OPT_DEST_WIDTH   "GstVideoConverter.dest-width"
+/**
+ * GST_VIDEO_CONVERTER_OPT_DEST_HEIGHT:
+ *
+ * #G_TYPE_INT, height in the destination frame, default destination height
+ */
+#define GST_VIDEO_CONVERTER_OPT_DEST_HEIGHT   "GstVideoConverter.dest-height"
+
+/**
+ * GST_VIDEO_CONVERTER_OPT_FILL_BORDER:
+ *
+ * #G_TYPE_BOOLEAN, if the destination rectangle does not fill the complete
+ * destination image, render a border with
+ * #GST_VIDEO_CONVERTER_OPT_BORDER_ARGB. Otherwise the unusded pixels in the
+ * destination are untouched. Default %TRUE.
+ */
+#define GST_VIDEO_CONVERTER_OPT_FILL_BORDER   "GstVideoConverter.fill-border"
+/**
+ * GST_VIDEO_CONVERTER_OPT_ALPHA_VALUE:
+ *
+ * #G_TYPE_DOUBLE, the alpha color value to use.
+ * Default to 1.0
+ */
+#define GST_VIDEO_CONVERTER_OPT_ALPHA_VALUE   "GstVideoConverter.alpha-value"
+/**
+ * GstVideoAlphaMode:
+ * @GST_VIDEO_ALPHA_MODE_COPY: When input and output have alpha, it will be copied.
+ *         When the input has no alpha, alpha will be set to
+ *         #GST_VIDEO_CONVERTER_OPT_ALPHA_VALUE
+ * @GST_VIDEO_ALPHA_MODE_SET: set all alpha to
+ *	   #GST_VIDEO_CONVERTER_OPT_ALPHA_VALUE
+ * @GST_VIDEO_ALPHA_MODE_MULT:  multiply all alpha with
+ *         #GST_VIDEO_CONVERTER_OPT_ALPHA_VALUE.
+ *         When the input format has no alpha but the output format has, the
+ *         alpha value will be set to #GST_VIDEO_CONVERTER_OPT_ALPHA_VALUE
+ *
+ * Different alpha modes.
+ *
+ * Since: 1.6
+ */
+typedef enum {
+  GST_VIDEO_ALPHA_MODE_COPY,
+  GST_VIDEO_ALPHA_MODE_SET,
+  GST_VIDEO_ALPHA_MODE_MULT
+} GstVideoAlphaMode;
+/**
+ * GST_VIDEO_CONVERTER_OPT_ALPHA_MODE:
+ *
+ * #GST_TYPE_VIDEO_ALPHA_MODE, the alpha mode to use.
+ * Default is #GST_VIDEO_ALPHA_MODE_COPY.
+ */
+#define GST_VIDEO_CONVERTER_OPT_ALPHA_MODE   "GstVideoConverter.alpha-mode"
+/**
+ * GST_VIDEO_CONVERTER_OPT_BORDER_ARGB:
+ *
+ * #G_TYPE_UINT, the border color to use if #GST_VIDEO_CONVERTER_OPT_FILL_BORDER
+ * is set to %TRUE. The color is in ARGB format.
+ * Default 0xff000000
+ */
+#define GST_VIDEO_CONVERTER_OPT_BORDER_ARGB   "GstVideoConverter.border-argb"
+
+/**
+ * GstVideoChromaMode:
+ * @GST_VIDEO_CHROMA_MODE_FULL: do full chroma up and down sampling
+ * @GST_VIDEO_CHROMA_MODE_UPSAMPLE_ONLY: only perform chroma upsampling
+ * @GST_VIDEO_CHROMA_MODE_DOWNSAMPLE_ONLY: only perform chroma downsampling
+ * @GST_VIDEO_CHROMA_MODE_NONE: disable chroma resampling
+ *
+ * Different chroma downsampling and upsampling modes
+ *
+ * Since: 1.6
+ */
+typedef enum {
+  GST_VIDEO_CHROMA_MODE_FULL,
+  GST_VIDEO_CHROMA_MODE_UPSAMPLE_ONLY,
+  GST_VIDEO_CHROMA_MODE_DOWNSAMPLE_ONLY,
+  GST_VIDEO_CHROMA_MODE_NONE
+} GstVideoChromaMode;
+
+/**
+ * GST_VIDEO_CONVERTER_OPT_CHROMA_MODE:
+ *
+ * #GST_TYPE_VIDEO_CHROMA_MODE, set the chroma resample mode subsampled
+ * formats. Default is #GST_VIDEO_CHROMA_MODE_FULL.
+ */
+#define GST_VIDEO_CONVERTER_OPT_CHROMA_MODE   "GstVideoConverter.chroma-mode"
+
+/**
+ *GstVideoMatrixMode:
+ * @GST_VIDEO_MATRIX_MODE_FULL: do conversion between color matrices
+ * @GST_VIDEO_MATRIX_MODE_INPUT_ONLY:  use the input color matrix to convert
+ *	  to and from R'G'B
+ * @GST_VIDEO_MATRIX_MODE_OUTPUT_ONLY: use the output color matrix to convert
+ *	  to and from R'G'B
+ * @GST_VIDEO_MATRIX_MODE_NONE: disable color matrix conversion.
+ *
+ * Different color matrix conversion modes
+ *
+ * Since: 1.6
+ */
+typedef enum {
+  GST_VIDEO_MATRIX_MODE_FULL,
+  GST_VIDEO_MATRIX_MODE_INPUT_ONLY,
+  GST_VIDEO_MATRIX_MODE_OUTPUT_ONLY,
+  GST_VIDEO_MATRIX_MODE_NONE
+} GstVideoMatrixMode;
+/**
+ * GST_VIDEO_CONVERTER_OPT_MATRIX_MODE:
+ *
+ * #GST_TYPE_VIDEO_MATRIX_MODE, set the color matrix conversion mode for
+ *	converting between Y'PbPr and non-linear RGB (R'G'B').
+ * Default is #GST_VIDEO_MATRIX_MODE_FULL.
+ */
+#define GST_VIDEO_CONVERTER_OPT_MATRIX_MODE   "GstVideoConverter.matrix-mode"
+/**
+ * GstVideoGammaMode:
+ * @GST_VIDEO_GAMMA_MODE_NONE: disable gamma handling
+ * @GST_VIDEO_GAMMA_MODE_REMAP: convert between input and output gamma
+ * Different gamma conversion modes
+ *
+ * Since: 1.6
+ */
+typedef enum {
+  GST_VIDEO_GAMMA_MODE_NONE,
+  GST_VIDEO_GAMMA_MODE_REMAP
+} GstVideoGammaMode;
+/**
+ * GST_VIDEO_CONVERTER_OPT_GAMMA_MODE:
+ *
+ * #GST_TYPE_VIDEO_GAMMA_MODE, set the gamma mode.
+ * Default is #GST_VIDEO_GAMMA_MODE_NONE.
+ */
+#define GST_VIDEO_CONVERTER_OPT_GAMMA_MODE   "GstVideoConverter.gamma-mode"
+/**
+ * GstVideoPrimariesMode:
+ * @GST_VIDEO_PRIMARIES_MODE_NONE: disable conversion between primaries
+ * @GST_VIDEO_PRIMARIES_MODE_MERGE_ONLY: do conversion between primaries only
+ *	  when it can be merged with color matrix conversion.
+ * @GST_VIDEO_PRIMARIES_MODE_FAST: fast conversion between primaries
+ *
+ * Different primaries conversion modes
+ *
+ * Since: 1.6
+ */
+typedef enum {
+  GST_VIDEO_PRIMARIES_MODE_NONE,
+  GST_VIDEO_PRIMARIES_MODE_MERGE_ONLY,
+  GST_VIDEO_PRIMARIES_MODE_FAST
+} GstVideoPrimariesMode;
+/**
+ * GST_VIDEO_CONVERTER_OPT_PRIMARIES_MODE:
+ *
+ * #GST_TYPE_VIDEO_PRIMARIES_MODE, set the primaries conversion mode.
+ * Default is #GST_VIDEO_PRIMARIES_MODE_NONE.
+ */
+#define GST_VIDEO_CONVERTER_OPT_PRIMARIES_MODE   "GstVideoConverter.primaries-mode"
+
+typedef struct _GstVideoConverter GstVideoConverter;
+
+GstVideoConverter *  gst_video_converter_new            (GstVideoInfo *in_info,
+                                                         GstVideoInfo *out_info,
+                                                         GstStructure *config);
+void                 gst_video_converter_free           (GstVideoConverter * convert);
+
+gboolean             gst_video_converter_set_config     (GstVideoConverter * convert, GstStructure *config);
+const GstStructure * gst_video_converter_get_config     (GstVideoConverter * convert);
+
+void                 gst_video_converter_frame          (GstVideoConverter * convert,
+                                                         const GstVideoFrame *src, GstVideoFrame *dest);
+
+
+G_END_DECLS
+
+#endif /* __GST_VIDEO_CONVERTER_H__ */
diff --git a/gst-libs/gst/video/video-dither.c b/gst-libs/gst/video/video-dither.c
new file mode 100644
index 0000000..ea5ab99
--- /dev/null
+++ b/gst-libs/gst/video/video-dither.c
@@ -0,0 +1,493 @@
+/* GStreamer
+ * Copyright (C) <2014> Wim Taymans <wim.taymans@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 <string.h>
+
+#include "video-dither.h"
+#include "video-orc.h"
+
+/**
+ * SECTION:gstvideodither
+ * @short_description: Utility object for dithering and quantizing lines of video
+ *
+ * GstVideoDither provides implementations of several dithering algorithms
+ * that can be applied to lines of video pixels to quantize and dither them.
+ *
+ */
+struct _GstVideoDither
+{
+  GstVideoDitherMethod method;
+  GstVideoDitherFlags flags;
+  GstVideoFormat format;
+  guint width;
+
+  guint depth;
+  guint n_comp;
+
+  void (*func) (GstVideoDither * dither, gpointer pixels, guint x, guint y,
+      guint width);
+  guint8 shift[4];
+  guint16 mask[4];
+  guint64 orc_mask64;
+  guint32 orc_mask32;
+
+  gpointer errors;
+};
+
+static void
+dither_none_u8_mask (GstVideoDither * dither, gpointer pixels, guint x, guint y,
+    guint width)
+{
+  guint8 *p = pixels;
+
+  video_orc_dither_none_4u8_mask (p + (x * 4), dither->orc_mask32, width);
+}
+
+static void
+dither_none_u16_mask (GstVideoDither * dither, gpointer pixels, guint x,
+    guint y, guint width)
+{
+  guint16 *p = pixels;
+
+  video_orc_dither_none_4u16_mask (p + (x * 4), dither->orc_mask64, width);
+}
+
+static void
+dither_verterr_u8 (GstVideoDither * dither, gpointer pixels, guint x, guint y,
+    guint width)
+{
+  guint8 *p = pixels;
+  guint16 *e = dither->errors;
+
+  if (y == 0)
+    memset (e + (x * 4), 0, width * 8);
+
+  video_orc_dither_verterr_4u8_mask (p + (x * 4), e + (x * 4),
+      dither->orc_mask64, width);
+}
+
+static void
+dither_verterr_u16 (GstVideoDither * dither, gpointer pixels, guint x, guint y,
+    guint width)
+{
+  guint16 *p = pixels;
+  guint16 *e = dither->errors;
+
+  if (y == 0)
+    memset (e + (x * 4), 0, width * 8);
+
+  {
+    gint i, end;
+    guint16 *m = dither->mask;
+    guint32 v, mp;
+
+    end = (width + x) * 4;
+    for (i = x * 4; i < end; i++) {
+      mp = m[i & 3];
+      v = p[i] + e[i];
+      /* take new error and store */
+      e[i] = v & mp;
+      /* quantize and store */
+      v &= ~mp;
+      p[i] = MIN (v, 65535);
+    }
+  }
+}
+
+static void
+dither_floyd_steinberg_u8 (GstVideoDither * dither, gpointer pixels, guint x,
+    guint y, guint width)
+{
+  guint8 *p = pixels;
+  guint16 *e = dither->errors;
+
+  if (y == 0)
+    memset (e + (x * 4), 0, (width + 1) * 8);
+
+  /* add and multiply errors from previous line */
+  video_orc_dither_fs_muladd_u8 (e + x * 4, width * 4);
+#if 1
+  {
+    gint i, end;
+    guint16 *m = dither->mask, mp;
+    guint16 v;
+
+    end = (width + x) * 4;
+
+    for (i = x * 4; i < end; i++) {
+      mp = m[i & 3];
+      v = p[i] + ((7 * e[i] + e[i + 4]) >> 4);
+      /* take new error and store */
+      e[i + 4] = v & mp;
+      /* quantize and store */
+      v &= ~mp;
+      p[i] = MIN (v, 255);
+    }
+  }
+#else
+  video_orc_dither_fs_add_4u8 (p, e + x * 4, e + (x + 1) * 4,
+      dither->orc_mask64, width);
+#endif
+}
+
+static void
+dither_floyd_steinberg_u16 (GstVideoDither * dither, gpointer pixels, guint x,
+    guint y, guint width)
+{
+  guint16 *p = pixels;
+  guint16 *e = dither->errors;
+
+  if (y == 0)
+    memset (e + (x * 4), 0, (width + 1) * 8);
+
+  {
+    gint i, end;
+    guint16 *m = dither->mask, mp;
+    guint32 v;
+
+    end = (width + x) * 4;
+    for (i = x * 4; i < end; i++) {
+      mp = m[i & 3];
+      /* apply previous errors to pixel */
+      v = p[i] + ((7 * e[i] + e[i + 4] + 5 * e[i + 8] + 3 * e[i + 12]) >> 4);
+      /* take new error and store */
+      e[i + 4] = v & mp;
+      /* quantize and store */
+      v &= ~mp;
+      p[i] = MIN (v, 65535);
+    }
+  }
+}
+
+static void
+dither_sierra_lite_u8 (GstVideoDither * dither, gpointer pixels, guint x,
+    guint y, guint width)
+{
+  guint8 *p = pixels;
+  guint16 *e = dither->errors;
+  gint i, end;
+  guint16 *m = dither->mask, mp;
+  guint16 v;
+
+  if (y == 0)
+    memset (e + (x * 4), 0, (width + 4) * 8);
+
+  end = (width + x) * 4;
+  for (i = x; i < end; i++) {
+    mp = m[i & 3];
+    /* apply previous errors to pixel */
+    v = p[i] + ((2 * e[i] + e[i + 8] + e[i + 12]) >> 2);
+    /* store new error */
+    e[i + 4] = v & mp;
+    /* quantize and store */
+    v &= ~mp;
+    p[i] = MIN (v, 255);
+  }
+}
+
+static void
+dither_sierra_lite_u16 (GstVideoDither * dither, gpointer pixels, guint x,
+    guint y, guint width)
+{
+  guint16 *p = pixels;
+  guint16 *e = dither->errors;
+  gint i, end;
+  guint16 *m = dither->mask, mp;
+  guint32 v;
+
+  if (y == 0)
+    memset (e + (x * 4), 0, (width + 4) * 8);
+
+  end = (width + x) * 4;
+  for (i = x; i < end; i++) {
+    mp = m[i & 3];
+    /* apply previous errors to pixel */
+    v = p[i] + ((2 * e[i] + e[i + 8] + e[i + 12]) >> 2);
+    /* store new error */
+    e[i + 4] = v & mp;
+    /* quantize and store */
+    v &= ~mp;
+    p[i] = MIN (v & ~mp, 65535);
+  }
+}
+
+static const guint16 bayer_map[16][16] = {
+  {0, 128, 32, 160, 8, 136, 40, 168, 2, 130, 34, 162, 10, 138, 42, 170},
+  {192, 64, 224, 96, 200, 72, 232, 104, 194, 66, 226, 98, 202, 74, 234, 106},
+  {48, 176, 16, 144, 56, 184, 24, 152, 50, 178, 18, 146, 58, 186, 26, 154},
+  {240, 112, 208, 80, 248, 120, 216, 88, 242, 114, 210, 82, 250, 122, 218, 90},
+  {12, 240, 44, 172, 4, 132, 36, 164, 14, 242, 46, 174, 6, 134, 38, 166},
+  {204, 76, 236, 108, 196, 68, 228, 100, 206, 78, 238, 110, 198, 70, 230, 102},
+  {60, 188, 28, 156, 52, 180, 20, 148, 62, 190, 30, 158, 54, 182, 22, 150},
+  {252, 142, 220, 92, 244, 116, 212, 84, 254, 144, 222, 94, 246, 118, 214, 86},
+  {3, 131, 35, 163, 11, 139, 43, 171, 1, 129, 33, 161, 9, 137, 41, 169},
+  {195, 67, 227, 99, 203, 75, 235, 107, 193, 65, 225, 97, 201, 73, 233, 105},
+  {51, 179, 19, 147, 59, 187, 27, 155, 49, 177, 17, 145, 57, 185, 25, 153},
+  {243, 115, 211, 83, 251, 123, 219, 91, 241, 113, 209, 81, 249, 121, 217, 89},
+  {15, 243, 47, 175, 7, 135, 39, 167, 13, 241, 45, 173, 5, 133, 37, 165},
+  {207, 79, 239, 111, 199, 71, 231, 103, 205, 77, 237, 109, 197, 69, 229, 101},
+  {63, 191, 31, 159, 55, 183, 23, 151, 61, 189, 29, 157, 53, 181, 21, 149},
+  {255, 145, 223, 95, 247, 119, 215, 87, 253, 143, 221, 93, 245, 117, 213, 85}
+};
+
+static void
+dither_ordered_u8 (GstVideoDither * dither, gpointer pixels, guint x, guint y,
+    guint width)
+{
+  guint8 *p = pixels;
+  guint8 *c = (guint8 *) dither->errors + ((y & 15) * width + (x & 15)) * 4;
+
+  video_orc_dither_ordered_u8 (p, c, width * 4);
+}
+
+static void
+dither_ordered_u8_mask (GstVideoDither * dither, gpointer pixels, guint x,
+    guint y, guint width)
+{
+  guint8 *p = pixels;
+  guint16 *c = (guint16 *) dither->errors + ((y & 15) * width + (x & 15)) * 4;
+
+  video_orc_dither_ordered_4u8_mask (p, c, dither->orc_mask64, width);
+}
+
+static void
+dither_ordered_u16_mask (GstVideoDither * dither, gpointer pixels, guint x,
+    guint y, guint width)
+{
+  guint16 *p = pixels;
+  guint16 *c = (guint16 *) dither->errors + ((y & 15) * width + (x & 15)) * 4;
+
+  video_orc_dither_ordered_4u16_mask (p, c, dither->orc_mask64, width);
+}
+
+static void
+alloc_errors (GstVideoDither * dither, guint lines)
+{
+  guint width, n_comp;
+
+  width = dither->width;
+  n_comp = dither->n_comp;
+
+  dither->errors = g_malloc0 (sizeof (guint16) * (width + 8) * n_comp * lines);
+}
+
+static void
+setup_bayer (GstVideoDither * dither)
+{
+  guint i, j, k, width, n_comp, errdepth;
+  guint8 *shift;
+
+  width = dither->width;
+  shift = dither->shift;
+  n_comp = dither->n_comp;
+
+  if (dither->depth == 8) {
+    if (dither->flags & GST_VIDEO_DITHER_FLAG_QUANTIZE) {
+      dither->func = dither_ordered_u8_mask;
+      errdepth = 16;
+    } else {
+      dither->func = dither_ordered_u8;
+      errdepth = 8;
+    }
+  } else {
+    dither->func = dither_ordered_u16_mask;
+    errdepth = 16;
+  }
+
+  alloc_errors (dither, 16);
+
+  if (errdepth == 8) {
+    for (i = 0; i < 16; i++) {
+      guint8 *p = (guint8 *) dither->errors + (n_comp * width * i), v;
+      for (j = 0; j < width; j++) {
+        for (k = 0; k < n_comp; k++) {
+          v = bayer_map[i & 15][j & 15];
+          if (shift[k] < 8)
+            v = v >> (8 - shift[k]);
+          p[n_comp * j + k] = v;
+        }
+      }
+    }
+  } else {
+    for (i = 0; i < 16; i++) {
+      guint16 *p = (guint16 *) dither->errors + (n_comp * width * i), v;
+      for (j = 0; j < width; j++) {
+        for (k = 0; k < n_comp; k++) {
+          v = bayer_map[i & 15][j & 15];
+          if (shift[k] < 8)
+            v = v >> (8 - shift[k]);
+          p[n_comp * j + k] = v;
+        }
+      }
+    }
+  }
+}
+
+static gint
+count_power (guint v)
+{
+  gint res = 0;
+  while (v > 1) {
+    res++;
+    v >>= 1;
+  }
+  return res;
+}
+
+/**
+ * gst_video_dither_new: (skip)
+ * @method: a #GstVideoDitherMethod
+ * @flags: a #GstVideoDitherFlags
+ * @format: a #GstVideoFormat
+ * @quantizer: quantizer
+ * @width: the width of the lines
+ *
+ * Make a new dither object for dithering lines of @format using the
+ * algorithm described by @method.
+ *
+ * Each component will be quantized to a multiple of @quantizer. Better
+ * performance is achived when @quantizer is a power of 2.
+ *
+ * @width is the width of the lines that this ditherer will handle.
+ *
+ * Returns: a new #GstVideoDither
+ */
+GstVideoDither *
+gst_video_dither_new (GstVideoDitherMethod method, GstVideoDitherFlags flags,
+    GstVideoFormat format, guint quantizer[GST_VIDEO_MAX_COMPONENTS],
+    guint width)
+{
+  GstVideoDither *dither;
+  gint i;
+
+  dither = g_slice_new0 (GstVideoDither);
+  dither->method = method;
+  dither->flags = flags;
+  dither->format = format;
+  dither->width = width;
+
+  dither->n_comp = 4;
+
+  switch (format) {
+    case GST_VIDEO_FORMAT_AYUV:
+    case GST_VIDEO_FORMAT_ARGB:
+      dither->depth = 8;
+      break;
+    case GST_VIDEO_FORMAT_AYUV64:
+    case GST_VIDEO_FORMAT_ARGB64:
+      dither->depth = 16;
+      break;
+    default:
+      g_slice_free (GstVideoDither, dither);
+      g_return_val_if_reached (NULL);
+      break;
+  }
+
+  for (i = 0; i < 4; i++) {
+    /* FIXME, only power of 2 quantizers */
+    guint q = quantizer[(i + 3) & 3];
+
+    dither->shift[i] = count_power (q);
+    dither->mask[i] = (1 << dither->shift[i]) - 1;
+    GST_DEBUG ("%d: quant %d shift %d mask %08x", i, q, dither->shift[i],
+        dither->mask[i]);
+    dither->orc_mask64 =
+        (dither->orc_mask64 << 16) | GUINT16_FROM_BE (dither->mask[i]);
+    dither->orc_mask32 = (dither->orc_mask32 << 8) | (guint8) dither->mask[i];
+  }
+  dither->orc_mask64 = GUINT64_FROM_BE (dither->orc_mask64);
+  dither->orc_mask32 = GUINT32_FROM_BE (dither->orc_mask32);
+  GST_DEBUG ("mask64 %08" G_GINT64_MODIFIER "x", (guint64) dither->orc_mask64);
+  GST_DEBUG ("mask32 %08x", dither->orc_mask32);
+
+  switch (method) {
+    case GST_VIDEO_DITHER_NONE:
+      if (dither->flags & GST_VIDEO_DITHER_FLAG_QUANTIZE)
+        if (dither->depth == 8)
+          dither->func = dither_none_u8_mask;
+        else
+          dither->func = dither_none_u16_mask;
+      else
+        dither->func = NULL;
+      break;
+    case GST_VIDEO_DITHER_VERTERR:
+      alloc_errors (dither, 1);
+      if (dither->depth == 8) {
+        dither->func = dither_verterr_u8;
+      } else
+        dither->func = dither_verterr_u16;
+      break;
+    case GST_VIDEO_DITHER_FLOYD_STEINBERG:
+      alloc_errors (dither, 1);
+      if (dither->depth == 8) {
+        dither->func = dither_floyd_steinberg_u8;
+      } else
+        dither->func = dither_floyd_steinberg_u16;
+      break;
+    case GST_VIDEO_DITHER_SIERRA_LITE:
+      alloc_errors (dither, 1);
+      if (dither->depth == 8) {
+        dither->func = dither_sierra_lite_u8;
+      } else
+        dither->func = dither_sierra_lite_u16;
+      break;
+    case GST_VIDEO_DITHER_BAYER:
+      setup_bayer (dither);
+      break;
+  }
+  return dither;
+}
+
+/**
+ * gst_video_dither_free:
+ * @dither: a #GstVideoDither
+ *
+ * Free @dither
+ */
+void
+gst_video_dither_free (GstVideoDither * dither)
+{
+  g_return_if_fail (dither != NULL);
+
+  g_free (dither->errors);
+  g_slice_free (GstVideoDither, dither);
+}
+
+/**
+ * gst_video_dither_line:
+ * @dither: a #GstVideoDither
+ * @line: pointer to the pixels of the line
+ * @x: x coordinate
+ * @y: y coordinate
+ * @width: the width
+ *
+ * Dither @width pixels starting from offset @x in @line using @dither.
+ *
+ * @y is the line number of @line in the output image.
+ */
+void
+gst_video_dither_line (GstVideoDither * dither, gpointer line, guint x, guint y,
+    guint width)
+{
+  g_return_if_fail (dither != NULL);
+  g_return_if_fail (x + width <= dither->width);
+
+  if (dither->func)
+    dither->func (dither, line, x, y, width);
+}
diff --git a/gst-libs/gst/video/video-dither.h b/gst-libs/gst/video/video-dither.h
new file mode 100644
index 0000000..06378e9
--- /dev/null
+++ b/gst-libs/gst/video/video-dither.h
@@ -0,0 +1,77 @@
+/* GStreamer
+ * Copyright (C) <2014> Wim Taymans <wim.taymans@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_VIDEO_DITHER_H__
+#define __GST_VIDEO_DITHER_H__
+
+#include <gst/gst.h>
+
+G_BEGIN_DECLS
+
+/**
+ * GstVideoDitherMethod:
+ * @GST_VIDEO_DITHER_NONE: no dithering
+ * @GST_VIDEO_DITHER_VERTERR: propagate rounding errors downwards
+ * @GST_VIDEO_DITHER_FLOYD_STEINBERG: Dither with floyd-steinberg error diffusion
+ * @GST_VIDEO_DITHER_SIERRA_LITE: Dither with Sierra Lite error diffusion
+ * @GST_VIDEO_DITHER_BAYER: ordered dither using a bayer pattern
+ *
+ * Different dithering methods to use.
+ */
+typedef enum {
+  GST_VIDEO_DITHER_NONE,
+  GST_VIDEO_DITHER_VERTERR,
+  GST_VIDEO_DITHER_FLOYD_STEINBERG,
+  GST_VIDEO_DITHER_SIERRA_LITE,
+  GST_VIDEO_DITHER_BAYER,
+} GstVideoDitherMethod;
+
+/**
+ * GstVideoDitherFlags:
+ * @GST_VIDEO_DITHER_FLAG_NONE: no flags
+ * @GST_VIDEO_DITHER_FLAG_INTERLACED: the input is interlaced
+ * @GST_VIDEO_DITHER_FLAG_QUANTIZE: quantize values in addition to adding dither.
+ *
+ * Extra flags that influence the result from gst_video_chroma_resample_new().
+ */
+typedef enum {
+  GST_VIDEO_DITHER_FLAG_NONE       = 0,
+  GST_VIDEO_DITHER_FLAG_INTERLACED = (1 << 0),
+  GST_VIDEO_DITHER_FLAG_QUANTIZE   = (1 << 1),
+} GstVideoDitherFlags;
+
+typedef struct _GstVideoDither GstVideoDither;
+
+/* circular dependency, need to include this after defining the enums */
+#include <gst/video/video-format.h>
+
+GstVideoDither    * gst_video_dither_new      (GstVideoDitherMethod method,
+                                               GstVideoDitherFlags flags,
+                                               GstVideoFormat format,
+                                               guint quantizer[GST_VIDEO_MAX_COMPONENTS],
+                                               guint width);
+
+void                gst_video_dither_free     (GstVideoDither *dither);
+
+void                gst_video_dither_line     (GstVideoDither *dither,
+                                               gpointer line, guint x, guint y, guint width);
+
+G_END_DECLS
+
+#endif /* __GST_VIDEO_DITHER_H__ */
diff --git a/gst-libs/gst/video/video-format.c b/gst-libs/gst/video/video-format.c
index fed5314..cff8189 100644
--- a/gst-libs/gst/video/video-format.c
+++ b/gst-libs/gst/video/video-format.c
@@ -29,6 +29,18 @@
 #include "video-format.h"
 #include "video-orc.h"
 
+#ifndef restrict
+#if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
+/* restrict should be available */
+#elif defined(__GNUC__) && __GNUC__ >= 4
+#define restrict __restrict__
+#elif defined(_MSC_VER) &&  _MSC_VER >= 1500
+#define restrict __restrict
+#else
+#define restrict                /* no op */
+#endif
+#endif
+
 /* Line conversion to AYUV */
 
 #define GET_PLANE_STRIDE(plane) (stride(plane))
@@ -65,6 +77,15 @@
    ((line & ~7) >> 2) + (line & 1) :            \
    line >> 2)
 
+#define IS_CHROMA_LINE_420(line, flags)         \
+  (flags & GST_VIDEO_PACK_FLAG_INTERLACED ?     \
+   !(line & 2) : !(line & 1))
+#define IS_CHROMA_LINE_410(line, flags)         \
+  (flags & GST_VIDEO_PACK_FLAG_INTERLACED ?     \
+   !(line & 6) : !(line & 3))
+
+#define IS_ALIGNED(x,n) ((((guintptr)(x)&((n)-1))) == 0)
+
 #define PACK_420 GST_VIDEO_FORMAT_AYUV, unpack_planar_420, 1, pack_planar_420
 static void
 unpack_planar_420 (const GstVideoFormatInfo * info, GstVideoPackFlags flags,
@@ -72,19 +93,24 @@
     const gint stride[GST_VIDEO_MAX_PLANES], gint x, gint y, gint width)
 {
   gint uv = GET_UV_420 (y, flags);
-  guint8 *y_line = GET_Y_LINE (y);
-  guint8 *u_line = GET_U_LINE (uv);
-  guint8 *v_line = GET_V_LINE (uv);
-  guint8 *ayuv = dest;
+  const guint8 *restrict sy = GET_Y_LINE (y);
+  const guint8 *restrict su = GET_U_LINE (uv);
+  const guint8 *restrict sv = GET_V_LINE (uv);
+  guint8 *restrict d = dest;
 
-  video_orc_unpack_I420 (dest, y_line, u_line, v_line, width);
+  sy += x;
+  su += x >> 1;
+  sv += x >> 1;
 
-  if (width & 1) {
-    gint i = width - 1;
-
-    ayuv[i * 4 + 2] = u_line[i >> 1];
-    ayuv[i * 4 + 3] = v_line[i >> 1];
+  if (x & 1) {
+    d[0] = 0xff;
+    d[1] = *sy++;
+    d[2] = *su++;
+    d[3] = *sv++;
+    width--;
+    d += 4;
   }
+  video_orc_unpack_I420 (d, sy, su, sv, width);
 }
 
 static void
@@ -94,20 +120,33 @@
     gint y, gint width)
 {
   gint uv = GET_UV_420 (y, flags);
-  guint8 *y_line = GET_Y_LINE (y);
-  guint8 *u_line = GET_U_LINE (uv);
-  guint8 *v_line = GET_V_LINE (uv);
-  const guint8 *ayuv = src;
+  guint8 *dy = GET_Y_LINE (y);
+  guint8 *du = GET_U_LINE (uv);
+  guint8 *dv = GET_V_LINE (uv);
+  const guint8 *s = src;
 
-  video_orc_pack_I420 (y_line, u_line, v_line, src, width / 2);
+  if (IS_CHROMA_LINE_420 (y, flags)) {
+    if (IS_ALIGNED (s, 8))
+      video_orc_pack_I420 (dy, du, dv, s, width / 2);
+    else {
+      gint i;
 
-  if (width & 1) {
-    gint i = width - 1;
+      for (i = 0; i < width / 2; i++) {
+        dy[i * 2 + 0] = s[i * 8 + 1];
+        dy[i * 2 + 1] = s[i * 8 + 5];
+        du[i] = s[i * 8 + 2];
+        dv[i] = s[i * 8 + 3];
+      }
+    }
+    if (width & 1) {
+      gint i = width - 1;
 
-    y_line[i] = ayuv[i * 4 + 1];
-    u_line[i >> 1] = ayuv[i * 4 + 2];
-    v_line[i >> 1] = ayuv[i * 4 + 3];
-  }
+      dy[i] = s[i * 4 + 1];
+      du[i >> 1] = s[i * 4 + 2];
+      dv[i >> 1] = s[i * 4 + 3];
+    }
+  } else
+    video_orc_pack_Y (dy, s, width);
 }
 
 #define PACK_YUY2 GST_VIDEO_FORMAT_AYUV, unpack_YUY2, 1, pack_YUY2
@@ -116,18 +155,44 @@
     gpointer dest, const gpointer data[GST_VIDEO_MAX_PLANES],
     const gint stride[GST_VIDEO_MAX_PLANES], gint x, gint y, gint width)
 {
-  guint8 *line = GET_LINE (y);
-  guint8 *d = dest;
+  const guint8 *restrict s = GET_LINE (y);
+  guint8 *restrict d = dest;
 
-  video_orc_unpack_YUY2 (dest, line, width / 2);
+  s += (x & ~1) << 1;
+  if (x & 1) {
+    d[0] = 0xff;
+    d[1] = s[2];
+    d[2] = s[1];
+    d[3] = s[3];
+    s += 4;
+    d += 4;
+    width--;
+  }
+
+  if (IS_ALIGNED (d, 8))
+    video_orc_unpack_YUY2 (d, s, width / 2);
+  else {
+    gint i;
+
+    for (i = 0; i < width / 2; i++) {
+      d[i * 8 + 0] = 0xff;
+      d[i * 8 + 1] = s[i * 4 + 0];
+      d[i * 8 + 2] = s[i * 4 + 1];
+      d[i * 8 + 3] = s[i * 4 + 3];
+      d[i * 8 + 4] = 0xff;
+      d[i * 8 + 5] = s[i * 4 + 2];
+      d[i * 8 + 6] = s[i * 4 + 1];
+      d[i * 8 + 7] = s[i * 4 + 3];
+    }
+  }
 
   if (width & 1) {
     gint i = width - 1;
 
     d[i * 4 + 0] = 0xff;
-    d[i * 4 + 1] = line[i * 2 + 0];
-    d[i * 4 + 2] = line[i * 2 + 1];
-    d[i * 4 + 3] = line[i * 2 + 3];
+    d[i * 4 + 1] = s[i * 2 + 0];
+    d[i * 4 + 2] = s[i * 2 + 1];
+    d[i * 4 + 3] = s[i * 2 + 3];
   }
 }
 
@@ -137,17 +202,27 @@
     const gint stride[GST_VIDEO_MAX_PLANES], GstVideoChromaSite chroma_site,
     gint y, gint width)
 {
-  guint8 *line = GET_LINE (y);
-  const guint8 *ayuv = src;
+  guint8 *restrict d = GET_LINE (y);
+  const guint8 *restrict s = src;
 
-  video_orc_pack_YUY2 (line, src, width / 2);
+  if (IS_ALIGNED (s, 8))
+    video_orc_pack_YUY2 (d, s, width / 2);
+  else {
+    gint i;
+    for (i = 0; i < width / 2; i++) {
+      d[i * 4 + 0] = s[i * 8 + 1];
+      d[i * 4 + 1] = s[i * 8 + 2];
+      d[i * 4 + 2] = s[i * 8 + 5];
+      d[i * 4 + 3] = s[i * 8 + 3];
+    }
+  }
 
   if (width & 1) {
     gint i = width - 1;
 
-    line[i * 2 + 0] = ayuv[i * 4 + 1];
-    line[i * 2 + 1] = ayuv[i * 4 + 2];
-    line[i * 2 + 3] = ayuv[i * 4 + 3];
+    d[i * 2 + 0] = s[i * 4 + 1];
+    d[i * 2 + 1] = s[i * 4 + 2];
+    d[i * 2 + 3] = s[i * 4 + 3];
   }
 }
 
@@ -157,18 +232,44 @@
     gpointer dest, const gpointer data[GST_VIDEO_MAX_PLANES],
     const gint stride[GST_VIDEO_MAX_PLANES], gint x, gint y, gint width)
 {
-  guint8 *line = GET_LINE (y);
+  const guint8 *s = GET_LINE (y);
   guint8 *d = dest;
 
-  video_orc_unpack_UYVY (dest, line, width / 2);
+  s += (x & ~1) << 1;
+  if (x & 1) {
+    d[0] = 0xff;
+    d[1] = s[3];
+    d[2] = s[0];
+    d[3] = s[2];
+    s += 4;
+    d += 4;
+    width--;
+  }
+
+  if (IS_ALIGNED (d, 8))
+    video_orc_unpack_UYVY (d, s, width / 2);
+  else {
+    gint i;
+
+    for (i = 0; i < width / 2; i++) {
+      d[i * 8 + 0] = 0xff;
+      d[i * 8 + 1] = s[i * 4 + 1];
+      d[i * 8 + 2] = s[i * 4 + 0];
+      d[i * 8 + 3] = s[i * 4 + 2];
+      d[i * 8 + 4] = 0xff;
+      d[i * 8 + 5] = s[i * 4 + 3];
+      d[i * 8 + 6] = s[i * 4 + 0];
+      d[i * 8 + 7] = s[i * 4 + 2];
+    }
+  }
 
   if (width & 1) {
     gint i = width - 1;
 
     d[i * 4 + 0] = 0xff;
-    d[i * 4 + 1] = line[i * 2 + 1];
-    d[i * 4 + 2] = line[i * 2 + 0];
-    d[i * 4 + 3] = line[i * 2 + 2];
+    d[i * 4 + 1] = s[i * 2 + 1];
+    d[i * 4 + 2] = s[i * 2 + 0];
+    d[i * 4 + 3] = s[i * 2 + 2];
   }
 }
 
@@ -178,17 +279,26 @@
     const gint stride[GST_VIDEO_MAX_PLANES], GstVideoChromaSite chroma_site,
     gint y, gint width)
 {
-  guint8 *line = GET_LINE (y);
-  const guint8 *ayuv = src;
+  guint8 *restrict d = GET_LINE (y);
+  const guint8 *restrict s = src;
 
-  video_orc_pack_UYVY (line, src, width / 2);
-
+  if (IS_ALIGNED (s, 8))
+    video_orc_pack_UYVY (d, s, width / 2);
+  else {
+    gint i;
+    for (i = 0; i < width / 2; i++) {
+      d[i * 4 + 0] = s[i * 8 + 2];
+      d[i * 4 + 1] = s[i * 8 + 1];
+      d[i * 4 + 2] = s[i * 8 + 3];
+      d[i * 4 + 3] = s[i * 8 + 5];
+    }
+  }
   if (width & 1) {
     gint i = width - 1;
 
-    line[i * 2 + 0] = ayuv[i * 4 + 2];
-    line[i * 2 + 1] = ayuv[i * 4 + 1];
-    line[i * 2 + 2] = ayuv[i * 4 + 3];
+    d[i * 2 + 0] = s[i * 4 + 2];
+    d[i * 2 + 1] = s[i * 4 + 1];
+    d[i * 2 + 2] = s[i * 4 + 3];
   }
 }
 
@@ -198,18 +308,44 @@
     gpointer dest, const gpointer data[GST_VIDEO_MAX_PLANES],
     const gint stride[GST_VIDEO_MAX_PLANES], gint x, gint y, gint width)
 {
-  guint8 *line = GET_LINE (y);
-  guint8 *d = dest;
+  const guint8 *restrict s = GET_LINE (y);
+  guint8 *restrict d = dest;
 
-  video_orc_unpack_YVYU (dest, line, width / 2);
+  s += (x & ~1) << 1;
+  if (x & 1) {
+    d[0] = 0xff;
+    d[1] = s[2];
+    d[2] = s[3];
+    d[3] = s[1];
+    s += 4;
+    d += 4;
+    width--;
+  }
+
+  if (IS_ALIGNED (d, 8))
+    video_orc_unpack_YVYU (d, s, width / 2);
+  else {
+    gint i;
+
+    for (i = 0; i < width / 2; i++) {
+      d[i * 8 + 0] = 0xff;
+      d[i * 8 + 1] = s[i * 4 + 0];
+      d[i * 8 + 2] = s[i * 4 + 3];
+      d[i * 8 + 3] = s[i * 4 + 1];
+      d[i * 8 + 4] = 0xff;
+      d[i * 8 + 5] = s[i * 4 + 2];
+      d[i * 8 + 6] = s[i * 4 + 3];
+      d[i * 8 + 7] = s[i * 4 + 1];
+    }
+  }
 
   if (width & 1) {
     gint i = width - 1;
 
     d[i * 4 + 0] = 0xff;
-    d[i * 4 + 1] = line[i * 2 + 0];
-    d[i * 4 + 2] = line[i * 2 + 3];
-    d[i * 4 + 3] = line[i * 2 + 1];
+    d[i * 4 + 1] = s[i * 2 + 0];
+    d[i * 4 + 2] = s[i * 2 + 3];
+    d[i * 4 + 3] = s[i * 2 + 1];
   }
 }
 
@@ -219,17 +355,27 @@
     const gint stride[GST_VIDEO_MAX_PLANES], GstVideoChromaSite chroma_site,
     gint y, gint width)
 {
-  guint8 *line = GET_LINE (y);
-  const guint8 *ayuv = src;
+  guint8 *restrict d = GET_LINE (y);
+  const guint8 *restrict s = src;
 
-  video_orc_pack_YVYU (line, src, width / 2);
+  if (IS_ALIGNED (s, 8))
+    video_orc_pack_YVYU (d, s, width / 2);
+  else {
+    gint i;
+    for (i = 0; i < width / 2; i++) {
+      d[i * 4 + 0] = s[i * 8 + 1];
+      d[i * 4 + 1] = s[i * 8 + 3];
+      d[i * 4 + 2] = s[i * 8 + 5];
+      d[i * 4 + 3] = s[i * 8 + 2];
+    }
+  }
 
   if (width & 1) {
     gint i = width - 1;
 
-    line[i * 2 + 0] = ayuv[i * 4 + 1];
-    line[i * 2 + 1] = ayuv[i * 4 + 3];
-    line[i * 2 + 3] = ayuv[i * 4 + 2];
+    d[i * 2 + 0] = s[i * 4 + 1];
+    d[i * 2 + 1] = s[i * 4 + 3];
+    d[i * 2 + 3] = s[i * 4 + 2];
   }
 }
 
@@ -240,8 +386,10 @@
     const gint stride[GST_VIDEO_MAX_PLANES], gint x, gint y, gint width)
 {
   int i;
-  const guint8 *s = GET_LINE (y);
-  guint8 *d = dest;
+  const guint8 *restrict s = GET_LINE (y);
+  guint8 *restrict d = dest;
+
+  s += x * 3;
 
   for (i = 0; i < width; i++) {
     d[i * 4 + 0] = 0xff;
@@ -258,8 +406,8 @@
     gint y, gint width)
 {
   int i;
-  guint8 *d = GET_LINE (y);
-  const guint8 *s = src;
+  guint8 *restrict d = GET_LINE (y);
+  const guint8 *restrict s = src;
 
   for (i = 0; i < width; i++) {
     d[i * 3 + 0] = s[i * 4 + 1];
@@ -275,7 +423,11 @@
     gpointer dest, const gpointer data[GST_VIDEO_MAX_PLANES],
     const gint stride[GST_VIDEO_MAX_PLANES], gint x, gint y, gint width)
 {
-  memcpy (dest, GET_LINE (y), width * 4);
+  const guint8 *restrict s = GET_LINE (y);
+
+  s += x * 4;
+
+  memcpy (dest, s, width * 4);
 }
 
 static void
@@ -284,7 +436,9 @@
     const gint stride[GST_VIDEO_MAX_PLANES], GstVideoChromaSite chroma_site,
     gint y, gint width)
 {
-  memcpy (GET_LINE (y), src, width * 4);
+  guint8 *restrict d = GET_LINE (y);
+
+  memcpy (d, src, width * 4);
 }
 
 #define PACK_v210 GST_VIDEO_FORMAT_AYUV64, unpack_v210, 1, pack_v210
@@ -294,13 +448,16 @@
     const gint stride[GST_VIDEO_MAX_PLANES], gint x, gint y, gint width)
 {
   int i;
-  const guint8 *s = GET_LINE (y);
-  guint16 *d = dest;
+  const guint8 *restrict s = GET_LINE (y);
+  guint16 *restrict d = dest;
   guint32 a0, a1, a2, a3;
   guint16 y0, y1, y2, y3, y4, y5;
   guint16 u0, u2, u4;
   guint16 v0, v2, v4;
 
+  /* FIXME */
+  s += x * 2;
+
   for (i = 0; i < width; i += 6) {
     a0 = GST_READ_UINT32_LE (s + (i / 6) * 16 + 0);
     a1 = GST_READ_UINT32_LE (s + (i / 6) * 16 + 4);
@@ -384,8 +541,8 @@
     gint y, gint width)
 {
   int i;
-  guint8 *d = GET_LINE (y);
-  const guint16 *s = src;
+  guint8 *restrict d = GET_LINE (y);
+  const guint16 *restrict s = src;
   guint32 a0, a1, a2, a3;
   guint16 y0, y1, y2, y3, y4, y5;
   guint16 u0, u1, u2;
@@ -468,8 +625,19 @@
     const gint stride[GST_VIDEO_MAX_PLANES], gint x, gint y, gint width)
 {
   int i;
-  const guint8 *s = GET_LINE (y);
-  guint16 *d = dest;
+  const guint8 *restrict s = GET_LINE (y);
+  guint16 *restrict d = dest;
+
+  s += (x & ~1) << 2;
+  if (x & 1) {
+    d[0] = 0xffff;
+    d[1] = GST_READ_UINT16_LE (s + 6);
+    d[2] = GST_READ_UINT16_LE (s + 0);
+    d[3] = GST_READ_UINT16_LE (s + 4);
+    s += 8;
+    d += 4;
+    width--;
+  }
 
   for (i = 0; i < width; i++) {
     d[i * 4 + 0] = 0xffff;
@@ -486,8 +654,8 @@
     gint y, gint width)
 {
   int i;
-  guint8 *d = GET_LINE (y);
-  const guint16 *s = src;
+  guint8 *restrict d = GET_LINE (y);
+  const guint16 *restrict s = src;
 
   for (i = 0; i < width - 1; i += 2) {
     GST_WRITE_UINT16_LE (d + i * 4 + 0, s[(i + 0) * 4 + 2]);
@@ -509,20 +677,51 @@
     gpointer dest, const gpointer data[GST_VIDEO_MAX_PLANES],
     const gint stride[GST_VIDEO_MAX_PLANES], gint x, gint y, gint width)
 {
-  guint8 *y_line = GET_Y_LINE (y);
-  guint8 *u_line = GET_U_LINE (y);
-  guint8 *v_line = GET_V_LINE (y);
-  guint8 *d = dest;
+  const guint8 *restrict sy = GET_Y_LINE (y);
+  const guint8 *restrict su = GET_U_LINE (y);
+  const guint8 *restrict sv = GET_V_LINE (y);
+  guint8 *restrict d = dest;
 
-  video_orc_unpack_YUV9 (dest, y_line, u_line, v_line, width / 2);
+  sy += x;
+  su += x >> 2;
+  sv += x >> 2;
+
+  if (x & 3) {
+    for (; x & 3; x++) {
+      d[0] = 0xff;
+      d[1] = *sy++;
+      d[2] = *su;
+      d[3] = *sv;
+      width--;
+      d += 4;
+    }
+    su++;
+    sy++;
+  }
+
+  if (IS_ALIGNED (d, 8))
+    video_orc_unpack_YUV9 (d, sy, su, sv, width / 2);
+  else {
+    gint i;
+    for (i = 0; i < width / 2; i++) {
+      d[i * 8 + 0] = 0xff;
+      d[i * 8 + 1] = sy[i * 2 + 0];
+      d[i * 8 + 2] = su[i >> 1];
+      d[i * 8 + 3] = sv[i >> 1];
+      d[i * 8 + 4] = 0xff;
+      d[i * 8 + 5] = sy[i * 2 + 1];
+      d[i * 8 + 6] = su[i >> 1];
+      d[i * 8 + 7] = sv[i >> 1];
+    }
+  }
 
   if (width & 1) {
     gint i = width - 1;
 
     d[i * 4 + 0] = 0xff;
-    d[i * 4 + 1] = y_line[i];
-    d[i * 4 + 2] = u_line[i >> 2];
-    d[i * 4 + 3] = v_line[i >> 2];
+    d[i * 4 + 1] = sy[i];
+    d[i * 4 + 2] = su[i >> 2];
+    d[i * 4 + 3] = sv[i >> 2];
   }
 }
 
@@ -533,28 +732,28 @@
     gint y, gint width)
 {
   int i;
-  guint8 *destY = GET_Y_LINE (y);
-  guint8 *destU = GET_U_LINE (y);
-  guint8 *destV = GET_V_LINE (y);
-  const guint8 *s = src;
+  guint8 *restrict dy = GET_Y_LINE (y);
+  guint8 *restrict du = GET_U_LINE (y);
+  guint8 *restrict dv = GET_V_LINE (y);
+  const guint8 *restrict s = src;
 
   for (i = 0; i < width - 3; i += 4) {
-    destY[i] = s[i * 4 + 1];
-    destY[i + 1] = s[i * 4 + 5];
-    destY[i + 2] = s[i * 4 + 9];
-    destY[i + 3] = s[i * 4 + 13];
+    dy[i] = s[i * 4 + 1];
+    dy[i + 1] = s[i * 4 + 5];
+    dy[i + 2] = s[i * 4 + 9];
+    dy[i + 3] = s[i * 4 + 13];
 
-    destU[i >> 2] = s[i * 4 + 2];
-    destV[i >> 2] = s[i * 4 + 3];
+    du[i >> 2] = s[i * 4 + 2];
+    dv[i >> 2] = s[i * 4 + 3];
   }
   if (i < width) {
-    destY[i] = s[i * 4 + 1];
-    destU[i >> 2] = s[i * 4 + 2];
-    destV[i >> 2] = s[i * 4 + 3];
+    dy[i] = s[i * 4 + 1];
+    du[i >> 2] = s[i * 4 + 2];
+    dv[i >> 2] = s[i * 4 + 3];
     if (i < width - 1)
-      destY[i + 1] = s[i * 4 + 5];
+      dy[i + 1] = s[i * 4 + 5];
     if (i < width - 2)
-      destY[i + 2] = s[i * 4 + 9];
+      dy[i + 2] = s[i * 4 + 9];
   }
 }
 
@@ -564,20 +763,47 @@
     gpointer dest, const gpointer data[GST_VIDEO_MAX_PLANES],
     const gint stride[GST_VIDEO_MAX_PLANES], gint x, gint y, gint width)
 {
-  guint8 *y_line = GET_Y_LINE (y);
-  guint8 *u_line = GET_U_LINE (y);
-  guint8 *v_line = GET_V_LINE (y);
-  guint8 *d = dest;
+  const guint8 *restrict sy = GET_Y_LINE (y);
+  const guint8 *restrict su = GET_U_LINE (y);
+  const guint8 *restrict sv = GET_V_LINE (y);
+  guint8 *restrict d = dest;
 
-  video_orc_unpack_Y42B (dest, y_line, u_line, v_line, width / 2);
+  sy += x;
+  su += x >> 1;
+  sv += x >> 1;
+
+  if (x & 1) {
+    d[0] = 0xff;
+    d[1] = *sy++;
+    d[2] = *su++;
+    d[3] = *sv++;
+    width--;
+    d += 4;
+  }
+
+  if (IS_ALIGNED (d, 8))
+    video_orc_unpack_Y42B (d, sy, su, sv, width / 2);
+  else {
+    gint i;
+    for (i = 0; i < width / 2; i++) {
+      d[i * 8 + 0] = 0xff;
+      d[i * 8 + 1] = sy[i * 2 + 0];
+      d[i * 8 + 2] = su[i];
+      d[i * 8 + 3] = sv[i];
+      d[i * 8 + 4] = 0xff;
+      d[i * 8 + 5] = sy[i * 2 + 1];
+      d[i * 8 + 6] = su[i];
+      d[i * 8 + 7] = sv[i];
+    }
+  }
 
   if (width & 1) {
     gint i = width - 1;
 
     d[i * 4 + 0] = 0xff;
-    d[i * 4 + 1] = y_line[i];
-    d[i * 4 + 2] = u_line[i >> 1];
-    d[i * 4 + 3] = v_line[i >> 1];
+    d[i * 4 + 1] = sy[i];
+    d[i * 4 + 2] = su[i >> 1];
+    d[i * 4 + 3] = sv[i >> 1];
   }
 }
 
@@ -587,19 +813,29 @@
     const gint stride[GST_VIDEO_MAX_PLANES], GstVideoChromaSite chroma_site,
     gint y, gint width)
 {
-  guint8 *y_line = GET_Y_LINE (y);
-  guint8 *u_line = GET_U_LINE (y);
-  guint8 *v_line = GET_V_LINE (y);
-  const guint8 *ayuv = src;
+  guint8 *restrict dy = GET_Y_LINE (y);
+  guint8 *restrict du = GET_U_LINE (y);
+  guint8 *restrict dv = GET_V_LINE (y);
+  const guint8 *restrict s = src;
 
-  video_orc_pack_Y42B (y_line, u_line, v_line, src, width / 2);
+  if (IS_ALIGNED (s, 8))
+    video_orc_pack_Y42B (dy, du, dv, s, width / 2);
+  else {
+    gint i;
+    for (i = 0; i < width / 2; i++) {
+      dy[i * 2 + 0] = s[i * 8 + 1];
+      dy[i * 2 + 1] = s[i * 8 + 5];
+      du[i] = s[i * 8 + 2];
+      dv[i] = s[i * 8 + 3];
+    }
+  }
 
   if (width & 1) {
     gint i = width - 1;
 
-    y_line[i] = ayuv[i * 4 + 1];
-    u_line[i >> 1] = ayuv[i * 4 + 2];
-    v_line[i >> 1] = ayuv[i * 4 + 3];
+    dy[i] = s[i * 4 + 1];
+    du[i >> 1] = s[i * 4 + 2];
+    dv[i >> 1] = s[i * 4 + 3];
   }
 }
 
@@ -609,8 +845,15 @@
     gpointer dest, const gpointer data[GST_VIDEO_MAX_PLANES],
     const gint stride[GST_VIDEO_MAX_PLANES], gint x, gint y, gint width)
 {
-  video_orc_unpack_Y444 (dest, GET_Y_LINE (y), GET_U_LINE (y),
-      GET_V_LINE (y), width);
+  const guint8 *restrict sy = GET_Y_LINE (y);
+  const guint8 *restrict su = GET_U_LINE (y);
+  const guint8 *restrict sv = GET_V_LINE (y);
+
+  sy += x;
+  su += x;
+  sv += x;
+
+  video_orc_unpack_Y444 (dest, sy, su, sv, width);
 }
 
 static void
@@ -619,8 +862,11 @@
     const gint stride[GST_VIDEO_MAX_PLANES], GstVideoChromaSite chroma_site,
     gint y, gint width)
 {
-  video_orc_pack_Y444 (GET_Y_LINE (y), GET_U_LINE (y), GET_V_LINE (y), src,
-      width);
+  guint8 *restrict dy = GET_Y_LINE (y);
+  guint8 *restrict du = GET_U_LINE (y);
+  guint8 *restrict dv = GET_V_LINE (y);
+
+  video_orc_pack_Y444 (dy, du, dv, src, width);
 }
 
 #define PACK_GBR GST_VIDEO_FORMAT_ARGB, unpack_GBR, 1, pack_GBR
@@ -629,8 +875,15 @@
     gpointer dest, const gpointer data[GST_VIDEO_MAX_PLANES],
     const gint stride[GST_VIDEO_MAX_PLANES], gint x, gint y, gint width)
 {
-  video_orc_unpack_Y444 (dest, GET_R_LINE (y), GET_G_LINE (y),
-      GET_B_LINE (y), width);
+  const guint8 *restrict sr = GET_R_LINE (y);
+  const guint8 *restrict sg = GET_G_LINE (y);
+  const guint8 *restrict sb = GET_B_LINE (y);
+
+  sr += x;
+  sg += x;
+  sb += x;
+
+  video_orc_unpack_Y444 (dest, sr, sg, sb, width);
 }
 
 static void
@@ -639,8 +892,11 @@
     const gint stride[GST_VIDEO_MAX_PLANES], GstVideoChromaSite chroma_site,
     gint y, gint width)
 {
-  video_orc_pack_Y444 (GET_R_LINE (y), GET_G_LINE (y), GET_B_LINE (y), src,
-      width);
+  guint8 *restrict dr = GET_R_LINE (y);
+  guint8 *restrict dg = GET_G_LINE (y);
+  guint8 *restrict db = GET_B_LINE (y);
+
+  video_orc_pack_Y444 (dr, dg, db, src, width);
 }
 
 #define PACK_GRAY8 GST_VIDEO_FORMAT_AYUV, unpack_GRAY8, 1, pack_GRAY8
@@ -649,7 +905,11 @@
     gpointer dest, const gpointer data[GST_VIDEO_MAX_PLANES],
     const gint stride[GST_VIDEO_MAX_PLANES], gint x, gint y, gint width)
 {
-  video_orc_unpack_GRAY8 (dest, GET_LINE (y), width);
+  const guint8 *restrict s = GET_LINE (y);
+
+  s += x;
+
+  video_orc_unpack_GRAY8 (dest, s, width);
 }
 
 static void
@@ -658,7 +918,9 @@
     const gint stride[GST_VIDEO_MAX_PLANES], GstVideoChromaSite chroma_site,
     gint y, gint width)
 {
-  video_orc_pack_GRAY8 (GET_LINE (y), src, width);
+  guint8 *restrict d = GET_LINE (y);
+
+  video_orc_pack_GRAY8 (d, src, width);
 }
 
 #define PACK_GRAY16_BE GST_VIDEO_FORMAT_AYUV64, unpack_GRAY16_BE, 1, pack_GRAY16_BE
@@ -668,8 +930,10 @@
     const gint stride[GST_VIDEO_MAX_PLANES], gint x, gint y, gint width)
 {
   int i;
-  const guint16 *s = GET_LINE (y);
-  guint16 *d = dest;
+  const guint16 *restrict s = GET_LINE (y);
+  guint16 *restrict d = dest;
+
+  s += x;
 
   for (i = 0; i < width; i++) {
     d[i * 4 + 0] = 0xffff;
@@ -686,8 +950,8 @@
     gint y, gint width)
 {
   int i;
-  guint16 *d = GET_LINE (y);
-  const guint16 *s = src;
+  guint16 *restrict d = GET_LINE (y);
+  const guint16 *restrict s = src;
 
   for (i = 0; i < width; i++) {
     GST_WRITE_UINT16_BE (d + i, s[i * 4 + 1]);
@@ -701,8 +965,10 @@
     const gint stride[GST_VIDEO_MAX_PLANES], gint x, gint y, gint width)
 {
   int i;
-  const guint16 *s = GET_LINE (y);
-  guint16 *d = dest;
+  const guint16 *restrict s = GET_LINE (y);
+  guint16 *restrict d = dest;
+
+  s += x;
 
   for (i = 0; i < width; i++) {
     d[i * 4 + 0] = 0xffff;
@@ -719,8 +985,8 @@
     gint y, gint width)
 {
   int i;
-  guint16 *d = GET_LINE (y);
-  const guint16 *s = src;
+  guint16 *restrict d = GET_LINE (y);
+  const guint16 *restrict s = src;
 
   for (i = 0; i < width; i++) {
     GST_WRITE_UINT16_LE (d + i, s[i * 4 + 1]);
@@ -733,26 +999,12 @@
     gpointer dest, const gpointer data[GST_VIDEO_MAX_PLANES],
     const gint stride[GST_VIDEO_MAX_PLANES], gint x, gint y, gint width)
 {
-  int i;
-  const guint16 *s = GET_LINE (y);
-  guint8 *d = dest, r, g, b;
+  const guint16 *restrict s = GET_LINE (y);
 
-  for (i = 0; i < width; i++) {
-    r = ((s[i] >> 11) & 0x1f) << 3;
-    g = ((s[i] >> 5) & 0x3f) << 2;
-    b = ((s[i]) & 0x1f) << 3;
-
-    if (!(flags & GST_VIDEO_PACK_FLAG_TRUNCATE_RANGE)) {
-      r |= (r >> 5);
-      g |= (g >> 6);
-      b |= (b >> 5);
-    }
-
-    d[i * 4 + 0] = 0xff;
-    d[i * 4 + 1] = r;
-    d[i * 4 + 2] = g;
-    d[i * 4 + 3] = b;
-  }
+  if (flags & GST_VIDEO_PACK_FLAG_TRUNCATE_RANGE)
+    video_orc_unpack_RGB16_trunc (dest, s + x, width);
+  else
+    video_orc_unpack_RGB16 (dest, s + x, width);
 }
 
 static void
@@ -761,14 +1013,13 @@
     const gint stride[GST_VIDEO_MAX_PLANES], GstVideoChromaSite chroma_site,
     gint y, gint width)
 {
-  int i;
-  guint16 *d = GET_LINE (y);
-  const guint8 *s = src;
+  guint16 *restrict d = GET_LINE (y);
 
-  for (i = 0; i < width; i++) {
-    d[i] = ((s[i * 4 + 1] >> 3) << 11) |
-        ((s[i * 4 + 2] >> 2) << 5) | (s[i * 4 + 3] >> 3);
-  }
+#if G_BYTE_ORDER == G_LITTLE_ENDIAN
+  video_orc_pack_RGB16_le (d, src, width);
+#else
+  video_orc_pack_RGB16_be (d, src, width);
+#endif
 }
 
 #define PACK_BGR16 GST_VIDEO_FORMAT_ARGB, unpack_BGR16, 1, pack_BGR16
@@ -777,26 +1028,12 @@
     gpointer dest, const gpointer data[GST_VIDEO_MAX_PLANES],
     const gint stride[GST_VIDEO_MAX_PLANES], gint x, gint y, gint width)
 {
-  int i;
-  const guint16 *s = GET_LINE (y);
-  guint8 *d = dest, r, g, b;
+  const guint16 *restrict s = GET_LINE (y);
 
-  for (i = 0; i < width; i++) {
-    b = ((s[i] >> 11) & 0x1f) << 3;
-    g = ((s[i] >> 5) & 0x3f) << 2;
-    r = ((s[i]) & 0x1f) << 3;
-
-    if (!(flags & GST_VIDEO_PACK_FLAG_TRUNCATE_RANGE)) {
-      r |= (r >> 5);
-      g |= (g >> 6);
-      b |= (b >> 5);
-    }
-
-    d[i * 4 + 0] = 0xff;
-    d[i * 4 + 1] = r;
-    d[i * 4 + 2] = g;
-    d[i * 4 + 3] = b;
-  }
+  if (flags & GST_VIDEO_PACK_FLAG_TRUNCATE_RANGE)
+    video_orc_unpack_BGR16_trunc (dest, s + x, width);
+  else
+    video_orc_unpack_BGR16 (dest, s + x, width);
 }
 
 static void
@@ -805,14 +1042,13 @@
     const gint stride[GST_VIDEO_MAX_PLANES], GstVideoChromaSite chroma_site,
     gint y, gint width)
 {
-  int i;
-  guint16 *d = GET_LINE (y);
-  const guint8 *s = src;
+  guint16 *restrict d = GET_LINE (y);
 
-  for (i = 0; i < width; i++) {
-    d[i] = ((s[i * 4 + 3] >> 3) << 11) |
-        ((s[i * 4 + 2] >> 2) << 5) | (s[i * 4 + 1] >> 3);
-  }
+#if G_BYTE_ORDER == G_LITTLE_ENDIAN
+  video_orc_pack_BGR16_le (d, src, width);
+#else
+  video_orc_pack_BGR16_be (d, src, width);
+#endif
 }
 
 #define PACK_RGB15 GST_VIDEO_FORMAT_ARGB, unpack_RGB15, 1, pack_RGB15
@@ -821,26 +1057,19 @@
     gpointer dest, const gpointer data[GST_VIDEO_MAX_PLANES],
     const gint stride[GST_VIDEO_MAX_PLANES], gint x, gint y, gint width)
 {
-  int i;
-  const guint16 *s = GET_LINE (y);
-  guint8 *d = dest, r, g, b;
+  const guint16 *restrict s = GET_LINE (y);
 
-  for (i = 0; i < width; i++) {
-    r = ((s[i] >> 10) & 0x1f) << 3;
-    g = ((s[i] >> 5) & 0x1f) << 3;
-    b = ((s[i]) & 0x1f) << 3;
-
-    if (!(flags & GST_VIDEO_PACK_FLAG_TRUNCATE_RANGE)) {
-      r |= (r >> 5);
-      g |= (g >> 5);
-      b |= (b >> 5);
-    }
-
-    d[i * 4 + 0] = 0xff;
-    d[i * 4 + 1] = r;
-    d[i * 4 + 2] = g;
-    d[i * 4 + 3] = b;
-  }
+#if G_BYTE_ORDER == G_LITTLE_ENDIAN
+  if (flags & GST_VIDEO_PACK_FLAG_TRUNCATE_RANGE)
+    video_orc_unpack_RGB15_le_trunc (dest, s + x, width);
+  else
+    video_orc_unpack_RGB15_le (dest, s + x, width);
+#else
+  if (flags & GST_VIDEO_PACK_FLAG_TRUNCATE_RANGE)
+    video_orc_unpack_RGB15_be_trunc (dest, s + x, width);
+  else
+    video_orc_unpack_RGB15_be (dest, s + x, width);
+#endif
 }
 
 static void
@@ -849,14 +1078,13 @@
     const gint stride[GST_VIDEO_MAX_PLANES], GstVideoChromaSite chroma_site,
     gint y, gint width)
 {
-  int i;
-  guint16 *d = GET_LINE (y);
-  const guint8 *s = src;
+  guint16 *restrict d = GET_LINE (y);
 
-  for (i = 0; i < width; i++) {
-    d[i] = ((s[i * 4 + 1] >> 3) << 10) |
-        ((s[i * 4 + 2] >> 3) << 5) | (s[i * 4 + 3] >> 3);
-  }
+#if G_BYTE_ORDER == G_LITTLE_ENDIAN
+  video_orc_pack_RGB15_le (d, src, width);
+#else
+  video_orc_pack_RGB15_be (d, src, width);
+#endif
 }
 
 #define PACK_BGR15 GST_VIDEO_FORMAT_ARGB, unpack_BGR15, 1, pack_BGR15
@@ -865,26 +1093,19 @@
     gpointer dest, const gpointer data[GST_VIDEO_MAX_PLANES],
     const gint stride[GST_VIDEO_MAX_PLANES], gint x, gint y, gint width)
 {
-  int i;
-  const guint16 *s = GET_LINE (y);
-  guint8 *d = dest, r, g, b;
+  const guint16 *restrict s = GET_LINE (y);
 
-  for (i = 0; i < width; i++) {
-    b = ((s[i] >> 10) & 0x1f) << 3;
-    g = ((s[i] >> 5) & 0x1f) << 3;
-    r = ((s[i]) & 0x1f) << 3;
-
-    if (!(flags & GST_VIDEO_PACK_FLAG_TRUNCATE_RANGE)) {
-      r |= (r >> 5);
-      g |= (g >> 5);
-      b |= (b >> 5);
-    }
-
-    d[i * 4 + 0] = 0xff;
-    d[i * 4 + 1] = r;
-    d[i * 4 + 2] = g;
-    d[i * 4 + 3] = b;
-  }
+#if G_BYTE_ORDER == G_LITTLE_ENDIAN
+  if (flags & GST_VIDEO_PACK_FLAG_TRUNCATE_RANGE)
+    video_orc_unpack_BGR15_le_trunc (dest, s + x, width);
+  else
+    video_orc_unpack_BGR15_le (dest, s + x, width);
+#else
+  if (flags & GST_VIDEO_PACK_FLAG_TRUNCATE_RANGE)
+    video_orc_unpack_BGR15_be_trunc (dest, s + x, width);
+  else
+    video_orc_unpack_BGR15_be (dest, s + x, width);
+#endif
 }
 
 static void
@@ -893,14 +1114,13 @@
     const gint stride[GST_VIDEO_MAX_PLANES], GstVideoChromaSite chroma_site,
     gint y, gint width)
 {
-  int i;
-  guint16 *d = GET_LINE (y);
-  const guint8 *s = src;
+  guint16 *restrict d = GET_LINE (y);
 
-  for (i = 0; i < width; i++) {
-    d[i] = ((s[i * 4 + 3] >> 3) << 10) |
-        ((s[i * 4 + 2] >> 3) << 5) | (s[i * 4 + 1] >> 3);
-  }
+#if G_BYTE_ORDER == G_LITTLE_ENDIAN
+  video_orc_pack_BGR15_le (d, src, width);
+#else
+  video_orc_pack_BGR15_be (d, src, width);
+#endif
 }
 
 #define PACK_BGRA GST_VIDEO_FORMAT_ARGB, unpack_BGRA, 1, pack_BGRA
@@ -909,7 +1129,11 @@
     gpointer dest, const gpointer data[GST_VIDEO_MAX_PLANES],
     const gint stride[GST_VIDEO_MAX_PLANES], gint x, gint y, gint width)
 {
-  video_orc_unpack_BGRA (dest, GET_LINE (y), width);
+  const guint8 *restrict s = GET_LINE (y);
+
+  s += x * 4;
+
+  video_orc_unpack_BGRA (dest, s, width);
 }
 
 static void
@@ -918,7 +1142,9 @@
     const gint stride[GST_VIDEO_MAX_PLANES], GstVideoChromaSite chroma_site,
     gint y, gint width)
 {
-  video_orc_pack_BGRA (GET_LINE (y), src, width);
+  guint8 *restrict d = GET_LINE (y);
+
+  video_orc_pack_BGRA (d, src, width);
 }
 
 #define PACK_ABGR GST_VIDEO_FORMAT_ARGB, unpack_ABGR, 1, pack_ABGR
@@ -927,7 +1153,11 @@
     gpointer dest, const gpointer data[GST_VIDEO_MAX_PLANES],
     const gint stride[GST_VIDEO_MAX_PLANES], gint x, gint y, gint width)
 {
-  video_orc_unpack_ABGR (dest, GET_LINE (y), width);
+  const guint8 *restrict s = GET_LINE (y);
+
+  s += x * 4;
+
+  video_orc_unpack_ABGR (dest, s, width);
 }
 
 static void
@@ -936,7 +1166,9 @@
     const gint stride[GST_VIDEO_MAX_PLANES], GstVideoChromaSite chroma_site,
     gint y, gint width)
 {
-  video_orc_pack_ABGR (GET_LINE (y), src, width);
+  guint8 *restrict d = GET_LINE (y);
+
+  video_orc_pack_ABGR (d, src, width);
 }
 
 #define PACK_RGBA GST_VIDEO_FORMAT_ARGB, unpack_RGBA, 1, pack_RGBA
@@ -945,7 +1177,11 @@
     gpointer dest, const gpointer data[GST_VIDEO_MAX_PLANES],
     const gint stride[GST_VIDEO_MAX_PLANES], gint x, gint y, gint width)
 {
-  video_orc_unpack_RGBA (dest, GET_LINE (y), width);
+  const guint8 *restrict s = GET_LINE (y);
+
+  s += x * 4;
+
+  video_orc_unpack_RGBA (dest, s, width);
 }
 
 static void
@@ -954,7 +1190,9 @@
     const gint stride[GST_VIDEO_MAX_PLANES], GstVideoChromaSite chroma_site,
     gint y, gint width)
 {
-  video_orc_pack_RGBA (GET_LINE (y), src, width);
+  guint8 *restrict d = GET_LINE (y);
+
+  video_orc_pack_RGBA (d, src, width);
 }
 
 #define PACK_RGB GST_VIDEO_FORMAT_ARGB, unpack_RGB, 1, pack_RGB
@@ -964,8 +1202,10 @@
     const gint stride[GST_VIDEO_MAX_PLANES], gint x, gint y, gint width)
 {
   int i;
-  const guint8 *s = GET_LINE (y);
-  guint8 *d = dest;
+  const guint8 *restrict s = GET_LINE (y);
+  guint8 *restrict d = dest;
+
+  s += x * 3;
 
   for (i = 0; i < width; i++) {
     d[i * 4 + 0] = 0xff;
@@ -982,8 +1222,8 @@
     gint y, gint width)
 {
   int i;
-  guint8 *d = GET_LINE (y);
-  const guint8 *s = src;
+  guint8 *restrict d = GET_LINE (y);
+  const guint8 *restrict s = src;
 
   for (i = 0; i < width; i++) {
     d[i * 3 + 0] = s[i * 4 + 1];
@@ -999,8 +1239,10 @@
     const gint stride[GST_VIDEO_MAX_PLANES], gint x, gint y, gint width)
 {
   int i;
-  const guint8 *s = GET_LINE (y);
-  guint8 *d = dest;
+  const guint8 *restrict s = GET_LINE (y);
+  guint8 *restrict d = dest;
+
+  s += x * 3;
 
   for (i = 0; i < width; i++) {
     d[i * 4 + 0] = 0xff;
@@ -1017,8 +1259,8 @@
     gint y, gint width)
 {
   int i;
-  guint8 *d = GET_LINE (y);
-  const guint8 *s = src;
+  guint8 *restrict d = GET_LINE (y);
+  const guint8 *restrict s = src;
 
   for (i = 0; i < width; i++) {
     d[i * 3 + 0] = s[i * 4 + 3];
@@ -1034,19 +1276,46 @@
     const gint stride[GST_VIDEO_MAX_PLANES], gint x, gint y, gint width)
 {
   gint uv = GET_UV_420 (y, flags);
-  guint8 *y_line = GET_PLANE_LINE (0, y);
-  guint8 *uv_line = GET_PLANE_LINE (1, uv);
-  guint8 *d = dest;
+  const guint8 *restrict sy = GET_PLANE_LINE (0, y);
+  const guint8 *restrict suv = GET_PLANE_LINE (1, uv);
+  guint8 *restrict d = dest;
 
-  video_orc_unpack_NV12 (dest, y_line, uv_line, width / 2);
+  sy += x;
+  suv += (x & ~1);
+
+  if (x & 1) {
+    d[0] = 0xff;
+    d[1] = *sy++;
+    d[2] = suv[0];
+    d[3] = suv[1];
+    width--;
+    d += 4;
+    suv += 2;
+  }
+
+  if (IS_ALIGNED (d, 8))
+    video_orc_unpack_NV12 (d, sy, suv, width / 2);
+  else {
+    gint i;
+    for (i = 0; i < width / 2; i++) {
+      d[i * 8 + 0] = 0xff;
+      d[i * 8 + 1] = sy[i * 2 + 0];
+      d[i * 8 + 2] = suv[i * 2 + 0];
+      d[i * 8 + 3] = suv[i * 2 + 1];
+      d[i * 8 + 4] = 0xff;
+      d[i * 8 + 5] = sy[i * 2 + 1];
+      d[i * 8 + 6] = suv[i * 2 + 0];
+      d[i * 8 + 7] = suv[i * 2 + 1];
+    }
+  }
 
   if (width & 1) {
     gint i = width - 1;
 
     d[i * 4 + 0] = 0xff;
-    d[i * 4 + 1] = y_line[i];
-    d[i * 4 + 2] = uv_line[i + 0];
-    d[i * 4 + 3] = uv_line[i + 1];
+    d[i * 4 + 1] = sy[i];
+    d[i * 4 + 2] = suv[i + 0];
+    d[i * 4 + 3] = suv[i + 1];
   }
 }
 
@@ -1057,19 +1326,31 @@
     gint y, gint width)
 {
   gint uv = GET_UV_420 (y, flags);
-  guint8 *y_line = GET_PLANE_LINE (0, y);
-  guint8 *uv_line = GET_PLANE_LINE (1, uv);
-  const guint8 *ayuv = src;
+  guint8 *restrict dy = GET_PLANE_LINE (0, y);
+  guint8 *restrict duv = GET_PLANE_LINE (1, uv);
+  const guint8 *restrict s = src;
 
-  video_orc_pack_NV12 (y_line, uv_line, src, width / 2);
+  if (IS_CHROMA_LINE_420 (y, flags)) {
+    if (IS_ALIGNED (s, 8))
+      video_orc_pack_NV12 (dy, duv, s, width / 2);
+    else {
+      gint i;
+      for (i = 0; i < width / 2; i++) {
+        dy[i * 2 + 0] = s[i * 8 + 1];
+        dy[i * 2 + 1] = s[i * 8 + 5];
+        duv[i * 2 + 0] = s[i * 8 + 2];
+        duv[i * 2 + 1] = s[i * 8 + 3];
+      }
+    }
+    if (width & 1) {
+      gint i = width - 1;
 
-  if (width & 1) {
-    gint i = width - 1;
-
-    y_line[i] = ayuv[i * 4 + 1];
-    uv_line[i + 0] = ayuv[i * 4 + 2];
-    uv_line[i + 1] = ayuv[i * 4 + 3];
-  }
+      dy[i] = s[i * 4 + 1];
+      duv[i + 0] = s[i * 4 + 2];
+      duv[i + 1] = s[i * 4 + 3];
+    }
+  } else
+    video_orc_pack_Y (dy, s, width);
 }
 
 #define PACK_NV21 GST_VIDEO_FORMAT_AYUV, unpack_NV21, 1, pack_NV21
@@ -1079,19 +1360,46 @@
     const gint stride[GST_VIDEO_MAX_PLANES], gint x, gint y, gint width)
 {
   gint uv = GET_UV_420 (y, flags);
-  guint8 *y_line = GET_PLANE_LINE (0, y);
-  guint8 *uv_line = GET_PLANE_LINE (1, uv);
-  guint8 *d = dest;
+  const guint8 *restrict sy = GET_PLANE_LINE (0, y);
+  const guint8 *restrict suv = GET_PLANE_LINE (1, uv);
+  guint8 *restrict d = dest;
 
-  video_orc_unpack_NV21 (dest, y_line, uv_line, width / 2);
+  sy += x;
+  suv += (x & ~1);
+
+  if (x & 1) {
+    d[0] = 0xff;
+    d[1] = *sy++;
+    d[2] = suv[1];
+    d[3] = suv[0];
+    width--;
+    d += 4;
+    suv += 2;
+  }
+
+  if (IS_ALIGNED (d, 8))
+    video_orc_unpack_NV21 (d, sy, suv, width / 2);
+  else {
+    gint i;
+    for (i = 0; i < width / 2; i++) {
+      d[i * 8 + 0] = 0xff;
+      d[i * 8 + 1] = sy[i * 2 + 0];
+      d[i * 8 + 2] = suv[i * 2 + 1];
+      d[i * 8 + 3] = suv[i * 2 + 0];
+      d[i * 8 + 4] = 0xff;
+      d[i * 8 + 5] = sy[i * 2 + 1];
+      d[i * 8 + 6] = suv[i * 2 + 1];
+      d[i * 8 + 7] = suv[i * 2 + 0];
+    }
+  }
 
   if (width & 1) {
     gint i = width - 1;
 
     d[i * 4 + 0] = 0xff;
-    d[i * 4 + 1] = y_line[i];
-    d[i * 4 + 2] = uv_line[i + 1];
-    d[i * 4 + 3] = uv_line[i + 0];
+    d[i * 4 + 1] = sy[i];
+    d[i * 4 + 2] = suv[i + 1];
+    d[i * 4 + 3] = suv[i + 0];
   }
 }
 
@@ -1102,19 +1410,31 @@
     gint y, gint width)
 {
   gint uv = GET_UV_420 (y, flags);
-  guint8 *y_line = GET_PLANE_LINE (0, y);
-  guint8 *uv_line = GET_PLANE_LINE (1, uv);
-  const guint8 *ayuv = src;
+  guint8 *restrict dy = GET_PLANE_LINE (0, y);
+  guint8 *restrict duv = GET_PLANE_LINE (1, uv);
+  const guint8 *restrict s = src;
 
-  video_orc_pack_NV21 (y_line, uv_line, src, width / 2);
+  if (IS_CHROMA_LINE_420 (y, flags)) {
+    if (IS_ALIGNED (s, 8))
+      video_orc_pack_NV21 (dy, duv, s, width / 2);
+    else {
+      gint i;
+      for (i = 0; i < width / 2; i++) {
+        dy[i * 2 + 0] = s[i * 8 + 1];
+        dy[i * 2 + 1] = s[i * 8 + 5];
+        duv[i * 2 + 0] = s[i * 8 + 3];
+        duv[i * 2 + 1] = s[i * 8 + 2];
+      }
+    }
+    if (width & 1) {
+      gint i = width - 1;
 
-  if (width & 1) {
-    gint i = width - 1;
-
-    y_line[i] = ayuv[i * 4 + 1];
-    uv_line[i + 0] = ayuv[i * 4 + 3];
-    uv_line[i + 1] = ayuv[i * 4 + 2];
-  }
+      dy[i] = s[i * 4 + 1];
+      duv[i + 0] = s[i * 4 + 3];
+      duv[i + 1] = s[i * 4 + 2];
+    }
+  } else
+    video_orc_pack_Y (dy, s, width);
 }
 
 #define PACK_NV16 GST_VIDEO_FORMAT_AYUV, unpack_NV16, 1, pack_NV16
@@ -1123,19 +1443,46 @@
     gpointer dest, const gpointer data[GST_VIDEO_MAX_PLANES],
     const gint stride[GST_VIDEO_MAX_PLANES], gint x, gint y, gint width)
 {
-  guint8 *y_line = GET_PLANE_LINE (0, y);
-  guint8 *uv_line = GET_PLANE_LINE (1, y);
-  guint8 *d = dest;
+  const guint8 *restrict sy = GET_PLANE_LINE (0, y);
+  const guint8 *restrict suv = GET_PLANE_LINE (1, y);
+  guint8 *restrict d = dest;
 
-  video_orc_unpack_NV12 (dest, y_line, uv_line, width / 2);
+  sy += x;
+  suv += (x & ~1);
+
+  if (x & 1) {
+    d[0] = 0xff;
+    d[1] = *sy++;
+    d[2] = suv[0];
+    d[3] = suv[1];
+    width--;
+    d += 4;
+    suv += 2;
+  }
+
+  if (IS_ALIGNED (d, 8))
+    video_orc_unpack_NV12 (d, sy, suv, width / 2);
+  else {
+    gint i;
+    for (i = 0; i < width / 2; i++) {
+      d[i * 8 + 0] = 0xff;
+      d[i * 8 + 1] = sy[i * 2 + 0];
+      d[i * 8 + 2] = suv[i * 2 + 0];
+      d[i * 8 + 3] = suv[i * 2 + 1];
+      d[i * 8 + 4] = 0xff;
+      d[i * 8 + 5] = sy[i * 2 + 1];
+      d[i * 8 + 6] = suv[i * 2 + 0];
+      d[i * 8 + 7] = suv[i * 2 + 1];
+    }
+  }
 
   if (width & 1) {
     gint i = width - 1;
 
     d[i * 4 + 0] = 0xff;
-    d[i * 4 + 1] = y_line[i];
-    d[i * 4 + 2] = uv_line[i + 0];
-    d[i * 4 + 3] = uv_line[i + 1];
+    d[i * 4 + 1] = sy[i];
+    d[i * 4 + 2] = suv[i + 0];
+    d[i * 4 + 3] = suv[i + 1];
   }
 }
 
@@ -1145,18 +1492,110 @@
     const gint stride[GST_VIDEO_MAX_PLANES], GstVideoChromaSite chroma_site,
     gint y, gint width)
 {
-  guint8 *y_line = GET_PLANE_LINE (0, y);
-  guint8 *uv_line = GET_PLANE_LINE (1, y);
-  const guint8 *ayuv = src;
+  guint8 *restrict dy = GET_PLANE_LINE (0, y);
+  guint8 *restrict duv = GET_PLANE_LINE (1, y);
+  const guint8 *restrict s = src;
 
-  video_orc_pack_NV12 (y_line, uv_line, src, width / 2);
+  if (IS_ALIGNED (s, 8))
+    video_orc_pack_NV12 (dy, duv, s, width / 2);
+  else {
+    gint i;
+    for (i = 0; i < width / 2; i++) {
+      dy[i * 2 + 0] = s[i * 8 + 1];
+      dy[i * 2 + 1] = s[i * 8 + 5];
+      duv[i * 2 + 0] = s[i * 8 + 2];
+      duv[i * 2 + 1] = s[i * 8 + 3];
+    }
+  }
 
   if (width & 1) {
     gint i = width - 1;
 
-    y_line[i] = ayuv[i * 4 + 1];
-    uv_line[i + 0] = ayuv[i * 4 + 2];
-    uv_line[i + 1] = ayuv[i * 4 + 3];
+    dy[i] = s[i * 4 + 1];
+    duv[i + 0] = s[i * 4 + 2];
+    duv[i + 1] = s[i * 4 + 3];
+  }
+}
+
+#define PACK_NV61 GST_VIDEO_FORMAT_AYUV, unpack_NV61, 1, pack_NV61
+static void
+unpack_NV61 (const GstVideoFormatInfo * info, GstVideoPackFlags flags,
+    gpointer dest, const gpointer data[GST_VIDEO_MAX_PLANES],
+    const gint stride[GST_VIDEO_MAX_PLANES], gint x, gint y, gint width)
+{
+  const guint8 *restrict sy = GET_PLANE_LINE (0, y);
+  const guint8 *restrict svu = GET_PLANE_LINE (1, y);
+  guint8 *restrict d = dest;
+
+  sy += x;
+  svu += (x & ~1);
+
+  if (x & 1) {
+    d[0] = 0xff;
+    d[1] = *sy++;
+    d[2] = svu[1];
+    d[3] = svu[0];
+    width--;
+    d += 4;
+    svu += 2;
+  }
+
+  if (IS_ALIGNED (d, 8)) {
+    video_orc_unpack_NV21 (d, sy, svu, width / 2);
+  } else {
+    gint i;
+
+    for (i = 0; i < width / 2; i++) {
+      d[i * 8 + 0] = 0xff;
+      d[i * 8 + 1] = sy[i * 2 + 0];
+      d[i * 8 + 2] = svu[i * 2 + 1];
+      d[i * 8 + 3] = svu[i * 2 + 0];
+      d[i * 8 + 4] = 0xff;
+      d[i * 8 + 5] = sy[i * 2 + 1];
+      d[i * 8 + 6] = svu[i * 2 + 1];
+      d[i * 8 + 7] = svu[i * 2 + 0];
+    }
+  }
+
+  if (width & 1) {
+    gint i = width - 1;
+
+    d[i * 4 + 0] = 0xff;
+    d[i * 4 + 1] = sy[i];
+    d[i * 4 + 2] = svu[i + 1];
+    d[i * 4 + 3] = svu[i + 0];
+  }
+}
+
+static void
+pack_NV61 (const GstVideoFormatInfo * info, GstVideoPackFlags flags,
+    const gpointer src, gint sstride, gpointer data[GST_VIDEO_MAX_PLANES],
+    const gint stride[GST_VIDEO_MAX_PLANES], GstVideoChromaSite chroma_site,
+    gint y, gint width)
+{
+  const guint8 *restrict s = src;
+  guint8 *restrict dy = GET_PLANE_LINE (0, y);
+  guint8 *restrict dvu = GET_PLANE_LINE (1, y);
+
+  if (IS_ALIGNED (s, 8)) {
+    video_orc_pack_NV21 (dy, dvu, s, width / 2);
+  } else {
+    gint i;
+
+    for (i = 0; i < width / 2; i++) {
+      dy[i * 2 + 0] = s[i * 8 + 1];
+      dy[i * 2 + 1] = s[i * 8 + 5];
+      dvu[i * 2 + 0] = s[i * 8 + 3];
+      dvu[i * 2 + 1] = s[i * 8 + 2];
+    }
+  }
+
+  if (width & 1) {
+    gint i = width - 1;
+
+    dy[i] = s[i * 4 + 1];
+    dvu[i + 0] = s[i * 4 + 2];
+    dvu[i + 1] = s[i * 4 + 3];
   }
 }
 
@@ -1166,8 +1605,13 @@
     gpointer dest, const gpointer data[GST_VIDEO_MAX_PLANES],
     const gint stride[GST_VIDEO_MAX_PLANES], gint x, gint y, gint width)
 {
-  video_orc_unpack_NV24 (dest,
-      GET_PLANE_LINE (0, y), GET_PLANE_LINE (1, y), width);
+  const guint8 *restrict sy = GET_PLANE_LINE (0, y);
+  const guint8 *restrict suv = GET_PLANE_LINE (1, y);
+
+  sy += x;
+  suv += x << 1;
+
+  video_orc_unpack_NV24 (dest, sy, suv, width);
 }
 
 static void
@@ -1176,8 +1620,10 @@
     const gint stride[GST_VIDEO_MAX_PLANES], GstVideoChromaSite chroma_site,
     gint y, gint width)
 {
-  video_orc_pack_NV24 (GET_PLANE_LINE (0, y),
-      GET_PLANE_LINE (1, y), src, width);
+  guint8 *restrict dy = GET_PLANE_LINE (0, y);
+  guint8 *restrict duv = GET_PLANE_LINE (1, y);
+
+  video_orc_pack_NV24 (dy, duv, src, width);
 }
 
 #define PACK_UYVP GST_VIDEO_FORMAT_AYUV64, unpack_UYVP, 1, pack_UYVP
@@ -1187,8 +1633,11 @@
     const gint stride[GST_VIDEO_MAX_PLANES], gint x, gint y, gint width)
 {
   int i;
-  const guint8 *s = GET_LINE (y);
-  guint16 *d = dest;
+  const guint8 *restrict s = GET_LINE (y);
+  guint16 *restrict d = dest;
+
+  /* FIXME */
+  s += x << 1;
 
   for (i = 0; i < width; i += 2) {
     guint16 y0, y1;
@@ -1201,10 +1650,10 @@
     y1 = (((s[(i / 2) * 5 + 3] & 0x03) << 8) | s[(i / 2) * 5 + 4]) << 6;
 
     if (!(flags & GST_VIDEO_PACK_FLAG_TRUNCATE_RANGE)) {
-      y0 |= (y0 >> 4);
-      y1 |= (y1 >> 4);
-      u0 |= (u0 >> 4);
-      v0 |= (v0 >> 4);
+      y0 |= (y0 >> 10);
+      y1 |= (y1 >> 10);
+      u0 |= (u0 >> 10);
+      v0 |= (v0 >> 10);
     }
 
     d[i * 4 + 0] = 0xffff;
@@ -1228,8 +1677,8 @@
     gint y, gint width)
 {
   int i;
-  guint8 *d = GET_LINE (y);
-  const guint16 *s = src;
+  guint8 *restrict d = GET_LINE (y);
+  const guint16 *restrict s = src;
 
   for (i = 0; i < width; i += 2) {
     guint16 y0, y1;
@@ -1260,9 +1709,26 @@
     const gint stride[GST_VIDEO_MAX_PLANES], gint x, gint y, gint width)
 {
   gint uv = GET_UV_420 (y, flags);
+  const guint8 *restrict sy = GET_Y_LINE (y);
+  const guint8 *restrict su = GET_U_LINE (uv);
+  const guint8 *restrict sv = GET_V_LINE (uv);
+  const guint8 *restrict sa = GET_A_LINE (y);
+  guint8 *restrict d = dest;
 
-  video_orc_unpack_A420 (dest, GET_Y_LINE (y), GET_U_LINE (uv),
-      GET_V_LINE (uv), GET_A_LINE (y), width);
+  sy += x;
+  su += x >> 1;
+  sv += x >> 1;
+  sa += x;
+
+  if (x & 1) {
+    d[0] = *sa++;
+    d[1] = *sy++;
+    d[2] = *su++;
+    d[3] = *sv++;
+    width--;
+    d += 4;
+  }
+  video_orc_unpack_A420 (d, sy, su, sv, sa, width);
 }
 
 static void
@@ -1272,22 +1738,37 @@
     gint y, gint width)
 {
   gint uv = GET_UV_420 (y, flags);
-  guint8 *y_line = GET_Y_LINE (y);
-  guint8 *u_line = GET_U_LINE (uv);
-  guint8 *v_line = GET_V_LINE (uv);
-  guint8 *a_line = GET_A_LINE (y);
-  const guint8 *ayuv = src;
+  guint8 *restrict dy = GET_Y_LINE (y);
+  guint8 *restrict du = GET_U_LINE (uv);
+  guint8 *restrict dv = GET_V_LINE (uv);
+  guint8 *restrict da = GET_A_LINE (y);
+  const guint8 *restrict s = src;
 
-  video_orc_pack_A420 (y_line, u_line, v_line, a_line, src, width / 2);
+  if (IS_CHROMA_LINE_420 (y, flags)) {
+    if (IS_ALIGNED (s, 8))
+      video_orc_pack_A420 (dy, du, dv, da, s, width / 2);
+    else {
+      gint i;
+      for (i = 0; i < width / 2; i++) {
+        da[i * 2 + 0] = s[i * 8 + 0];
+        dy[i * 2 + 0] = s[i * 8 + 1];
+        da[i * 2 + 1] = s[i * 8 + 4];
+        dy[i * 2 + 1] = s[i * 8 + 5];
+        du[i] = s[i * 8 + 2];
+        dv[i] = s[i * 8 + 3];
+      }
+    }
 
-  if (width & 1) {
-    gint i = width - 1;
+    if (width & 1) {
+      gint i = width - 1;
 
-    a_line[i] = ayuv[i * 4 + 0];
-    y_line[i] = ayuv[i * 4 + 1];
-    u_line[i >> 1] = ayuv[i * 4 + 2];
-    v_line[i >> 1] = ayuv[i * 4 + 3];
-  }
+      da[i] = s[i * 4 + 0];
+      dy[i] = s[i * 4 + 1];
+      du[i >> 1] = s[i * 4 + 2];
+      dv[i >> 1] = s[i * 4 + 3];
+    }
+  } else
+    video_orc_pack_AY (dy, da, s, width);
 }
 
 #define PACK_RGB8P GST_VIDEO_FORMAT_ARGB, unpack_RGB8P, 1, pack_RGB8P
@@ -1297,9 +1778,11 @@
     const gint stride[GST_VIDEO_MAX_PLANES], gint x, gint y, gint width)
 {
   int i;
-  const guint8 *s = GET_LINE (y);
-  const guint32 *p = data[1];
-  guint8 *d = dest;
+  const guint8 *restrict s = GET_LINE (y);
+  const guint32 *restrict p = data[1];
+  guint8 *restrict d = dest;
+
+  s += x;
 
   for (i = 0; i < width; i++) {
     guint32 v = p[s[i]];
@@ -1363,8 +1846,8 @@
     gint y, gint width)
 {
   int i;
-  guint8 *d = GET_LINE (y);
-  const guint8 *s = src;
+  guint8 *restrict d = GET_LINE (y);
+  const guint8 *restrict s = src;
 
   /* Use our poor man's palette, taken from ffmpegcolorspace too */
   for (i = 0; i < width; i++) {
@@ -1385,20 +1868,51 @@
     const gint stride[GST_VIDEO_MAX_PLANES], gint x, gint y, gint width)
 {
   gint uv = GET_UV_410 (y, flags);
-  guint8 *y_line = GET_Y_LINE (y);
-  guint8 *u_line = GET_U_LINE (uv);
-  guint8 *v_line = GET_V_LINE (uv);
-  guint8 *d = dest;
+  const guint8 *restrict sy = GET_Y_LINE (y);
+  const guint8 *restrict su = GET_U_LINE (uv);
+  const guint8 *restrict sv = GET_V_LINE (uv);
+  guint8 *restrict d = dest;
 
-  video_orc_unpack_YUV9 (dest, y_line, u_line, v_line, width / 2);
+  sy += x;
+  su += x >> 2;
+  sv += x >> 2;
+
+  if (x & 3) {
+    for (; x & 3; x++) {
+      d[0] = 0xff;
+      d[1] = *sy++;
+      d[2] = *su;
+      d[3] = *sv;
+      width--;
+      d += 4;
+    }
+    su++;
+    sy++;
+  }
+
+  if (IS_ALIGNED (d, 8))
+    video_orc_unpack_YUV9 (d, sy, su, sv, width / 2);
+  else {
+    gint i;
+    for (i = 0; i < width / 2; i++) {
+      d[i * 8 + 0] = 0xff;
+      d[i * 8 + 1] = sy[i * 2 + 0];
+      d[i * 8 + 2] = su[i >> 1];
+      d[i * 8 + 3] = sv[i >> 1];
+      d[i * 8 + 4] = 0xff;
+      d[i * 8 + 5] = sy[i * 2 + 1];
+      d[i * 8 + 6] = su[i >> 1];
+      d[i * 8 + 7] = sv[i >> 1];
+    }
+  }
 
   if (width & 1) {
     gint i = width - 1;
 
     d[i * 4 + 0] = 0xff;
-    d[i * 4 + 1] = y_line[i];
-    d[i * 4 + 2] = u_line[i >> 2];
-    d[i * 4 + 3] = v_line[i >> 2];
+    d[i * 4 + 1] = sy[i];
+    d[i * 4 + 2] = su[i >> 2];
+    d[i * 4 + 3] = sv[i >> 2];
   }
 }
 
@@ -1410,31 +1924,31 @@
 {
   int i;
   gint uv = GET_UV_410 (y, flags);
-  guint8 *destY = GET_Y_LINE (y);
-  guint8 *destU = GET_U_LINE (uv);
-  guint8 *destV = GET_V_LINE (uv);
-  const guint8 *s = src;
+  guint8 *restrict dy = GET_Y_LINE (y);
+  guint8 *restrict du = GET_U_LINE (uv);
+  guint8 *restrict dv = GET_V_LINE (uv);
+  const guint8 *restrict s = src;
 
   for (i = 0; i < width - 3; i += 4) {
-    destY[i] = s[i * 4 + 1];
-    destY[i + 1] = s[i * 4 + 5];
-    destY[i + 2] = s[i * 4 + 9];
-    destY[i + 3] = s[i * 4 + 13];
-    if (y % 4 == 0) {
-      destU[i >> 2] = s[i * 4 + 2];
-      destV[i >> 2] = s[i * 4 + 3];
+    dy[i] = s[i * 4 + 1];
+    dy[i + 1] = s[i * 4 + 5];
+    dy[i + 2] = s[i * 4 + 9];
+    dy[i + 3] = s[i * 4 + 13];
+    if (IS_CHROMA_LINE_410 (y, flags)) {
+      du[i >> 2] = s[i * 4 + 2];
+      dv[i >> 2] = s[i * 4 + 3];
     }
   }
   if (i < width) {
-    destY[i] = s[i * 4 + 1];
-    if (y % 4 == 0) {
-      destU[i >> 2] = s[i * 4 + 2];
-      destV[i >> 2] = s[i * 4 + 3];
+    dy[i] = s[i * 4 + 1];
+    if (IS_CHROMA_LINE_410 (y, flags)) {
+      du[i >> 2] = s[i * 4 + 2];
+      dv[i >> 2] = s[i * 4 + 3];
     }
     if (i < width - 1)
-      destY[i + 1] = s[i * 4 + 5];
+      dy[i + 1] = s[i * 4 + 5];
     if (i < width - 2)
-      destY[i + 2] = s[i * 4 + 9];
+      dy[i + 2] = s[i * 4 + 9];
   }
 }
 
@@ -1445,12 +1959,15 @@
     const gint stride[GST_VIDEO_MAX_PLANES], gint x, gint y, gint width)
 {
   int i;
-  const guint8 *s = GET_LINE (y);
-  guint8 *d = dest;
+  const guint8 *restrict s = GET_LINE (y);
+  guint8 *restrict d = dest;
   guint8 y0, y1, y2, y3;
   guint8 u0;
   guint8 v0;
 
+  /* FIXME */
+  s += x * 4;
+
   for (i = 0; i < width - 3; i += 4) {
     y0 = s[(i >> 2) * 6 + 1];
     y1 = s[(i >> 2) * 6 + 2];
@@ -1511,8 +2028,8 @@
     gint y, gint width)
 {
   int i;
-  guint8 *d = GET_LINE (y);
-  const guint8 *s = src;
+  guint8 *restrict d = GET_LINE (y);
+  const guint8 *restrict s = src;
 
   for (i = 0; i < width - 3; i += 4) {
     d[(i >> 2) * 6 + 0] = s[i * 4 + 2];
@@ -1540,7 +2057,11 @@
     gpointer dest, const gpointer data[GST_VIDEO_MAX_PLANES],
     const gint stride[GST_VIDEO_MAX_PLANES], gint x, gint y, gint width)
 {
-  memcpy (dest, GET_LINE (y), width * 8);
+  const guint8 *s = GET_LINE (y);
+
+  s += x * 8;
+
+  memcpy (dest, s, width * 8);
 }
 
 static void
@@ -1549,7 +2070,9 @@
     const gint stride[GST_VIDEO_MAX_PLANES], GstVideoChromaSite chroma_site,
     gint y, gint width)
 {
-  memcpy (GET_LINE (y), src, width * 8);
+  guint8 *restrict d = GET_LINE (y);
+
+  memcpy (d, src, width * 8);
 }
 
 #define PACK_r210 GST_VIDEO_FORMAT_ARGB64, unpack_r210, 1, pack_r210
@@ -1559,8 +2082,10 @@
     const gint stride[GST_VIDEO_MAX_PLANES], gint x, gint y, gint width)
 {
   int i;
-  const guint8 *s = GET_LINE (y);
-  guint16 *d = dest, R, G, B;
+  const guint8 *restrict s = GET_LINE (y);
+  guint16 *restrict d = dest, R, G, B;
+
+  s += x * 4;
 
   for (i = 0; i < width; i++) {
     guint32 x = GST_READ_UINT32_BE (s + i * 4);
@@ -1589,8 +2114,8 @@
     gint y, gint width)
 {
   int i;
-  guint8 *d = GET_LINE (y);
-  const guint16 *s = src;
+  guint8 *restrict d = GET_LINE (y);
+  const guint16 *restrict s = src;
 
   for (i = 0; i < width; i++) {
     guint32 x = 0;
@@ -1608,15 +2133,25 @@
     const gint stride[GST_VIDEO_MAX_PLANES], gint x, gint y, gint width)
 {
   int i;
-  guint16 *srcG = GET_G_LINE (y);
-  guint16 *srcB = GET_B_LINE (y);
-  guint16 *srcR = GET_R_LINE (y);
+  const guint16 *sg = GET_G_LINE (y);
+  const guint16 *sb = GET_B_LINE (y);
+  const guint16 *sr = GET_R_LINE (y);
   guint16 *d = dest, G, B, R;
 
+  sg += x;
+  sb += x;
+  sr += x;
+
   for (i = 0; i < width; i++) {
-    G = GST_READ_UINT16_LE (srcG + i) << 6;
-    B = GST_READ_UINT16_LE (srcB + i) << 6;
-    R = GST_READ_UINT16_LE (srcR + i) << 6;
+    G = GST_READ_UINT16_LE (sg + i) << 6;
+    B = GST_READ_UINT16_LE (sb + i) << 6;
+    R = GST_READ_UINT16_LE (sr + i) << 6;
+
+    if (!(flags & GST_VIDEO_PACK_FLAG_TRUNCATE_RANGE)) {
+      R |= (R >> 10);
+      G |= (G >> 10);
+      B |= (B >> 10);
+    }
 
     d[i * 4 + 0] = 0xffff;
     d[i * 4 + 1] = R;
@@ -1632,20 +2167,20 @@
     gint y, gint width)
 {
   int i;
-  guint16 *destG = GET_G_LINE (y);
-  guint16 *destB = GET_B_LINE (y);
-  guint16 *destR = GET_R_LINE (y);
+  guint16 *restrict dg = GET_G_LINE (y);
+  guint16 *restrict db = GET_B_LINE (y);
+  guint16 *restrict dr = GET_R_LINE (y);
   guint16 G, B, R;
-  const guint16 *s = src;
+  const guint16 *restrict s = src;
 
   for (i = 0; i < width; i++) {
     G = (s[i * 4 + 2]) >> 6;
     B = (s[i * 4 + 3]) >> 6;
     R = (s[i * 4 + 1]) >> 6;
 
-    GST_WRITE_UINT16_LE (destG + i, G);
-    GST_WRITE_UINT16_LE (destB + i, B);
-    GST_WRITE_UINT16_LE (destR + i, R);
+    GST_WRITE_UINT16_LE (dg + i, G);
+    GST_WRITE_UINT16_LE (db + i, B);
+    GST_WRITE_UINT16_LE (dr + i, R);
   }
 }
 
@@ -1656,15 +2191,25 @@
     const gint stride[GST_VIDEO_MAX_PLANES], gint x, gint y, gint width)
 {
   int i;
-  guint16 *srcG = GET_G_LINE (y);
-  guint16 *srcB = GET_B_LINE (y);
-  guint16 *srcR = GET_R_LINE (y);
-  guint16 *d = dest, G, B, R;
+  const guint16 *restrict sg = GET_G_LINE (y);
+  const guint16 *restrict sb = GET_B_LINE (y);
+  const guint16 *restrict sr = GET_R_LINE (y);
+  guint16 *restrict d = dest, G, B, R;
+
+  sg += x;
+  sb += x;
+  sr += x;
 
   for (i = 0; i < width; i++) {
-    G = GST_READ_UINT16_BE (srcG + i) << 6;
-    B = GST_READ_UINT16_BE (srcB + i) << 6;
-    R = GST_READ_UINT16_BE (srcR + i) << 6;
+    G = GST_READ_UINT16_BE (sg + i) << 6;
+    B = GST_READ_UINT16_BE (sb + i) << 6;
+    R = GST_READ_UINT16_BE (sr + i) << 6;
+
+    if (!(flags & GST_VIDEO_PACK_FLAG_TRUNCATE_RANGE)) {
+      R |= (R >> 10);
+      G |= (G >> 10);
+      B |= (B >> 10);
+    }
 
     d[i * 4 + 0] = 0xffff;
     d[i * 4 + 1] = R;
@@ -1680,20 +2225,20 @@
     gint y, gint width)
 {
   int i;
-  guint16 *destG = GET_G_LINE (y);
-  guint16 *destB = GET_B_LINE (y);
-  guint16 *destR = GET_R_LINE (y);
+  guint16 *restrict dg = GET_G_LINE (y);
+  guint16 *restrict db = GET_B_LINE (y);
+  guint16 *restrict dr = GET_R_LINE (y);
   guint16 G, B, R;
-  const guint16 *s = src;
+  const guint16 *restrict s = src;
 
   for (i = 0; i < width; i++) {
     G = s[i * 4 + 2] >> 6;
     B = s[i * 4 + 3] >> 6;
     R = s[i * 4 + 1] >> 6;
 
-    GST_WRITE_UINT16_BE (destG + i, G);
-    GST_WRITE_UINT16_BE (destB + i, B);
-    GST_WRITE_UINT16_BE (destR + i, R);
+    GST_WRITE_UINT16_BE (dg + i, G);
+    GST_WRITE_UINT16_BE (db + i, B);
+    GST_WRITE_UINT16_BE (dr + i, R);
   }
 }
 
@@ -1704,15 +2249,19 @@
     const gint stride[GST_VIDEO_MAX_PLANES], gint x, gint y, gint width)
 {
   int i;
-  guint16 *srcY = GET_Y_LINE (y);
-  guint16 *srcU = GET_U_LINE (y);
-  guint16 *srcV = GET_V_LINE (y);
-  guint16 *d = dest, Y, U, V;
+  guint16 *restrict sy = GET_Y_LINE (y);
+  guint16 *restrict su = GET_U_LINE (y);
+  guint16 *restrict sv = GET_V_LINE (y);
+  guint16 *restrict d = dest, Y, U, V;
+
+  sy += x;
+  su += x;
+  sv += x;
 
   for (i = 0; i < width; i++) {
-    Y = GST_READ_UINT16_LE (srcY + i) << 6;
-    U = GST_READ_UINT16_LE (srcU + i) << 6;
-    V = GST_READ_UINT16_LE (srcV + i) << 6;
+    Y = GST_READ_UINT16_LE (sy + i) << 6;
+    U = GST_READ_UINT16_LE (su + i) << 6;
+    V = GST_READ_UINT16_LE (sv + i) << 6;
 
     if (!(flags & GST_VIDEO_PACK_FLAG_TRUNCATE_RANGE)) {
       Y |= (Y >> 10);
@@ -1734,20 +2283,20 @@
     gint y, gint width)
 {
   int i;
-  guint16 *destY = GET_Y_LINE (y);
-  guint16 *destU = GET_U_LINE (y);
-  guint16 *destV = GET_V_LINE (y);
+  guint16 *restrict dy = GET_Y_LINE (y);
+  guint16 *restrict du = GET_U_LINE (y);
+  guint16 *restrict dv = GET_V_LINE (y);
   guint16 Y, U, V;
-  const guint16 *s = src;
+  const guint16 *restrict s = src;
 
   for (i = 0; i < width; i++) {
     Y = (s[i * 4 + 1]) >> 6;
     U = (s[i * 4 + 2]) >> 6;
     V = (s[i * 4 + 3]) >> 6;
 
-    GST_WRITE_UINT16_LE (destY + i, Y);
-    GST_WRITE_UINT16_LE (destU + i, U);
-    GST_WRITE_UINT16_LE (destV + i, V);
+    GST_WRITE_UINT16_LE (dy + i, Y);
+    GST_WRITE_UINT16_LE (du + i, U);
+    GST_WRITE_UINT16_LE (dv + i, V);
   }
 }
 
@@ -1758,15 +2307,19 @@
     const gint stride[GST_VIDEO_MAX_PLANES], gint x, gint y, gint width)
 {
   int i;
-  guint16 *srcY = GET_Y_LINE (y);
-  guint16 *srcU = GET_U_LINE (y);
-  guint16 *srcV = GET_V_LINE (y);
-  guint16 *d = dest, Y, U, V;
+  const guint16 *restrict sy = GET_Y_LINE (y);
+  const guint16 *restrict su = GET_U_LINE (y);
+  const guint16 *restrict sv = GET_V_LINE (y);
+  guint16 *restrict d = dest, Y, U, V;
+
+  sy += x;
+  su += x;
+  sv += x;
 
   for (i = 0; i < width; i++) {
-    Y = GST_READ_UINT16_BE (srcY + i) << 6;
-    U = GST_READ_UINT16_BE (srcU + i) << 6;
-    V = GST_READ_UINT16_BE (srcV + i) << 6;
+    Y = GST_READ_UINT16_BE (sy + i) << 6;
+    U = GST_READ_UINT16_BE (su + i) << 6;
+    V = GST_READ_UINT16_BE (sv + i) << 6;
 
     if (!(flags & GST_VIDEO_PACK_FLAG_TRUNCATE_RANGE)) {
       Y |= (Y >> 10);
@@ -1788,20 +2341,20 @@
     gint y, gint width)
 {
   int i;
-  guint16 *destY = GET_Y_LINE (y);
-  guint16 *destU = GET_U_LINE (y);
-  guint16 *destV = GET_V_LINE (y);
+  guint16 *restrict dy = GET_Y_LINE (y);
+  guint16 *restrict du = GET_U_LINE (y);
+  guint16 *restrict dv = GET_V_LINE (y);
   guint16 Y, U, V;
-  const guint16 *s = src;
+  const guint16 *restrict s = src;
 
   for (i = 0; i < width; i++) {
     Y = s[i * 4 + 1] >> 6;
     U = s[i * 4 + 2] >> 6;
     V = s[i * 4 + 3] >> 6;
 
-    GST_WRITE_UINT16_BE (destY + i, Y);
-    GST_WRITE_UINT16_BE (destU + i, U);
-    GST_WRITE_UINT16_BE (destV + i, V);
+    GST_WRITE_UINT16_BE (dy + i, Y);
+    GST_WRITE_UINT16_BE (du + i, U);
+    GST_WRITE_UINT16_BE (dv + i, V);
   }
 }
 
@@ -1813,15 +2366,19 @@
 {
   int i;
   gint uv = GET_UV_420 (y, flags);
-  guint16 *srcY = GET_Y_LINE (y);
-  guint16 *srcU = GET_U_LINE (uv);
-  guint16 *srcV = GET_V_LINE (uv);
-  guint16 *d = dest, Y, U, V;
+  const guint16 *restrict sy = GET_Y_LINE (y);
+  const guint16 *restrict su = GET_U_LINE (uv);
+  const guint16 *restrict sv = GET_V_LINE (uv);
+  guint16 *restrict d = dest, Y, U, V;
+
+  sy += x;
+  su += x >> 1;
+  sv += x >> 1;
 
   for (i = 0; i < width; i++) {
-    Y = GST_READ_UINT16_LE (srcY + i) << 6;
-    U = GST_READ_UINT16_LE (srcU + (i >> 1)) << 6;
-    V = GST_READ_UINT16_LE (srcV + (i >> 1)) << 6;
+    Y = GST_READ_UINT16_LE (sy + i) << 6;
+    U = GST_READ_UINT16_LE (su + (i >> 1)) << 6;
+    V = GST_READ_UINT16_LE (sv + (i >> 1)) << 6;
 
     if (!(flags & GST_VIDEO_PACK_FLAG_TRUNCATE_RANGE)) {
       Y |= (Y >> 10);
@@ -1833,6 +2390,12 @@
     d[i * 4 + 1] = Y;
     d[i * 4 + 2] = U;
     d[i * 4 + 3] = V;
+
+    if (x & 1) {
+      x = 0;
+      su++;
+      sv++;
+    }
   }
 }
 
@@ -1844,31 +2407,38 @@
 {
   int i;
   gint uv = GET_UV_420 (y, flags);
-  guint16 *destY = GET_Y_LINE (y);
-  guint16 *destU = GET_U_LINE (uv);
-  guint16 *destV = GET_V_LINE (uv);
+  guint16 *restrict dy = GET_Y_LINE (y);
+  guint16 *restrict du = GET_U_LINE (uv);
+  guint16 *restrict dv = GET_V_LINE (uv);
   guint16 Y0, Y1, U, V;
-  const guint16 *s = src;
+  const guint16 *restrict s = src;
 
-  for (i = 0; i < width - 1; i += 2) {
-    Y0 = s[i * 4 + 1] >> 6;
-    Y1 = s[i * 4 + 5] >> 6;
-    U = s[i * 4 + 2] >> 6;
-    V = s[i * 4 + 3] >> 6;
+  if (IS_CHROMA_LINE_420 (y, flags)) {
+    for (i = 0; i < width - 1; i += 2) {
+      Y0 = s[i * 4 + 1] >> 6;
+      Y1 = s[i * 4 + 5] >> 6;
+      U = s[i * 4 + 2] >> 6;
+      V = s[i * 4 + 3] >> 6;
 
-    GST_WRITE_UINT16_LE (destY + i + 0, Y0);
-    GST_WRITE_UINT16_LE (destY + i + 1, Y1);
-    GST_WRITE_UINT16_LE (destU + (i >> 1), U);
-    GST_WRITE_UINT16_LE (destV + (i >> 1), V);
-  }
-  if (i == width - 1) {
-    Y0 = s[i * 4 + 1] >> 6;
-    U = s[i * 4 + 2] >> 6;
-    V = s[i * 4 + 3] >> 6;
+      GST_WRITE_UINT16_LE (dy + i + 0, Y0);
+      GST_WRITE_UINT16_LE (dy + i + 1, Y1);
+      GST_WRITE_UINT16_LE (du + (i >> 1), U);
+      GST_WRITE_UINT16_LE (dv + (i >> 1), V);
+    }
+    if (i == width - 1) {
+      Y0 = s[i * 4 + 1] >> 6;
+      U = s[i * 4 + 2] >> 6;
+      V = s[i * 4 + 3] >> 6;
 
-    GST_WRITE_UINT16_LE (destY + i, Y0);
-    GST_WRITE_UINT16_LE (destU + (i >> 1), U);
-    GST_WRITE_UINT16_LE (destV + (i >> 1), V);
+      GST_WRITE_UINT16_LE (dy + i, Y0);
+      GST_WRITE_UINT16_LE (du + (i >> 1), U);
+      GST_WRITE_UINT16_LE (dv + (i >> 1), V);
+    }
+  } else {
+    for (i = 0; i < width; i++) {
+      Y0 = s[i * 4 + 1] >> 6;
+      GST_WRITE_UINT16_LE (dy + i, Y0);
+    }
   }
 }
 
@@ -1880,15 +2450,19 @@
 {
   int i;
   gint uv = GET_UV_420 (y, flags);
-  guint16 *srcY = GET_Y_LINE (y);
-  guint16 *srcU = GET_U_LINE (uv);
-  guint16 *srcV = GET_V_LINE (uv);
-  guint16 *d = dest, Y, U, V;
+  const guint16 *restrict sy = GET_Y_LINE (y);
+  const guint16 *restrict su = GET_U_LINE (uv);
+  const guint16 *restrict sv = GET_V_LINE (uv);
+  guint16 *restrict d = dest, Y, U, V;
+
+  sy += x;
+  su += x >> 1;
+  sv += x >> 1;
 
   for (i = 0; i < width; i++) {
-    Y = GST_READ_UINT16_BE (srcY + i) << 6;
-    U = GST_READ_UINT16_BE (srcU + (i >> 1)) << 6;
-    V = GST_READ_UINT16_BE (srcV + (i >> 1)) << 6;
+    Y = GST_READ_UINT16_BE (sy + i) << 6;
+    U = GST_READ_UINT16_BE (su + (i >> 1)) << 6;
+    V = GST_READ_UINT16_BE (sv + (i >> 1)) << 6;
 
     if (!(flags & GST_VIDEO_PACK_FLAG_TRUNCATE_RANGE)) {
       Y |= (Y >> 10);
@@ -1900,6 +2474,12 @@
     d[i * 4 + 1] = Y;
     d[i * 4 + 2] = U;
     d[i * 4 + 3] = V;
+
+    if (x & 1) {
+      x = 0;
+      su++;
+      sv++;
+    }
   }
 }
 
@@ -1911,31 +2491,38 @@
 {
   int i;
   gint uv = GET_UV_420 (y, flags);
-  guint16 *destY = GET_Y_LINE (y);
-  guint16 *destU = GET_U_LINE (uv);
-  guint16 *destV = GET_V_LINE (uv);
+  guint16 *restrict dy = GET_Y_LINE (y);
+  guint16 *restrict du = GET_U_LINE (uv);
+  guint16 *restrict dv = GET_V_LINE (uv);
   guint16 Y0, Y1, U, V;
-  const guint16 *s = src;
+  const guint16 *restrict s = src;
 
-  for (i = 0; i < width - 1; i += 2) {
-    Y0 = s[i * 4 + 1] >> 6;
-    Y1 = s[i * 4 + 5] >> 6;
-    U = s[i * 4 + 2] >> 6;
-    V = s[i * 4 + 3] >> 6;
+  if (IS_CHROMA_LINE_420 (y, flags)) {
+    for (i = 0; i < width - 1; i += 2) {
+      Y0 = s[i * 4 + 1] >> 6;
+      Y1 = s[i * 4 + 5] >> 6;
+      U = s[i * 4 + 2] >> 6;
+      V = s[i * 4 + 3] >> 6;
 
-    GST_WRITE_UINT16_BE (destY + i + 0, Y0);
-    GST_WRITE_UINT16_BE (destY + i + 1, Y1);
-    GST_WRITE_UINT16_BE (destU + (i >> 1), U);
-    GST_WRITE_UINT16_BE (destV + (i >> 1), V);
-  }
-  if (i == width - 1) {
-    Y0 = s[i * 4 + 1] >> 6;
-    U = s[i * 4 + 2] >> 6;
-    V = s[i * 4 + 3] >> 6;
+      GST_WRITE_UINT16_BE (dy + i + 0, Y0);
+      GST_WRITE_UINT16_BE (dy + i + 1, Y1);
+      GST_WRITE_UINT16_BE (du + (i >> 1), U);
+      GST_WRITE_UINT16_BE (dv + (i >> 1), V);
+    }
+    if (i == width - 1) {
+      Y0 = s[i * 4 + 1] >> 6;
+      U = s[i * 4 + 2] >> 6;
+      V = s[i * 4 + 3] >> 6;
 
-    GST_WRITE_UINT16_BE (destY + i, Y0);
-    GST_WRITE_UINT16_BE (destU + (i >> 1), U);
-    GST_WRITE_UINT16_BE (destV + (i >> 1), V);
+      GST_WRITE_UINT16_BE (dy + i, Y0);
+      GST_WRITE_UINT16_BE (du + (i >> 1), U);
+      GST_WRITE_UINT16_BE (dv + (i >> 1), V);
+    }
+  } else {
+    for (i = 0; i < width; i++) {
+      Y0 = s[i * 4 + 1] >> 6;
+      GST_WRITE_UINT16_BE (dy + i, Y0);
+    }
   }
 }
 
@@ -1946,15 +2533,19 @@
     const gint stride[GST_VIDEO_MAX_PLANES], gint x, gint y, gint width)
 {
   int i;
-  guint16 *srcY = GET_Y_LINE (y);
-  guint16 *srcU = GET_U_LINE (y);
-  guint16 *srcV = GET_V_LINE (y);
-  guint16 *d = dest, Y, U, V;
+  const guint16 *restrict sy = GET_Y_LINE (y);
+  const guint16 *restrict su = GET_U_LINE (y);
+  const guint16 *restrict sv = GET_V_LINE (y);
+  guint16 *restrict d = dest, Y, U, V;
+
+  sy += x;
+  su += x >> 1;
+  sv += x >> 1;
 
   for (i = 0; i < width; i++) {
-    Y = GST_READ_UINT16_LE (srcY + i) << 6;
-    U = GST_READ_UINT16_LE (srcU + (i >> 1)) << 6;
-    V = GST_READ_UINT16_LE (srcV + (i >> 1)) << 6;
+    Y = GST_READ_UINT16_LE (sy + i) << 6;
+    U = GST_READ_UINT16_LE (su + (i >> 1)) << 6;
+    V = GST_READ_UINT16_LE (sv + (i >> 1)) << 6;
 
     if (!(flags & GST_VIDEO_PACK_FLAG_TRUNCATE_RANGE)) {
       Y |= (Y >> 10);
@@ -1966,6 +2557,12 @@
     d[i * 4 + 1] = Y;
     d[i * 4 + 2] = U;
     d[i * 4 + 3] = V;
+
+    if (x & 1) {
+      x = 0;
+      su++;
+      sv++;
+    }
   }
 }
 
@@ -1976,11 +2573,11 @@
     gint y, gint width)
 {
   int i;
-  guint16 *destY = GET_Y_LINE (y);
-  guint16 *destU = GET_U_LINE (y);
-  guint16 *destV = GET_V_LINE (y);
+  guint16 *restrict dy = GET_Y_LINE (y);
+  guint16 *restrict du = GET_U_LINE (y);
+  guint16 *restrict dv = GET_V_LINE (y);
   guint16 Y0, Y1, U, V;
-  const guint16 *s = src;
+  const guint16 *restrict s = src;
 
   for (i = 0; i < width - 1; i += 2) {
     Y0 = s[i * 4 + 1] >> 6;
@@ -1988,19 +2585,19 @@
     U = s[i * 4 + 2] >> 6;
     V = s[i * 4 + 3] >> 6;
 
-    GST_WRITE_UINT16_LE (destY + i + 0, Y0);
-    GST_WRITE_UINT16_LE (destY + i + 1, Y1);
-    GST_WRITE_UINT16_LE (destU + (i >> 1), U);
-    GST_WRITE_UINT16_LE (destV + (i >> 1), V);
+    GST_WRITE_UINT16_LE (dy + i + 0, Y0);
+    GST_WRITE_UINT16_LE (dy + i + 1, Y1);
+    GST_WRITE_UINT16_LE (du + (i >> 1), U);
+    GST_WRITE_UINT16_LE (dv + (i >> 1), V);
   }
   if (i == width - 1) {
     Y0 = s[i * 4 + 1] >> 6;
     U = s[i * 4 + 2] >> 6;
     V = s[i * 4 + 3] >> 6;
 
-    GST_WRITE_UINT16_LE (destY + i, Y0);
-    GST_WRITE_UINT16_LE (destU + (i >> 1), U);
-    GST_WRITE_UINT16_LE (destV + (i >> 1), V);
+    GST_WRITE_UINT16_LE (dy + i, Y0);
+    GST_WRITE_UINT16_LE (du + (i >> 1), U);
+    GST_WRITE_UINT16_LE (dv + (i >> 1), V);
   }
 }
 
@@ -2011,15 +2608,19 @@
     const gint stride[GST_VIDEO_MAX_PLANES], gint x, gint y, gint width)
 {
   int i;
-  guint16 *srcY = GET_Y_LINE (y);
-  guint16 *srcU = GET_U_LINE (y);
-  guint16 *srcV = GET_V_LINE (y);
-  guint16 *d = dest, Y, U, V;
+  const guint16 *restrict sy = GET_Y_LINE (y);
+  const guint16 *restrict su = GET_U_LINE (y);
+  const guint16 *restrict sv = GET_V_LINE (y);
+  guint16 *restrict d = dest, Y, U, V;
+
+  sy += x;
+  su += x >> 1;
+  sv += x >> 1;
 
   for (i = 0; i < width; i++) {
-    Y = GST_READ_UINT16_BE (srcY + i) << 6;
-    U = GST_READ_UINT16_BE (srcU + (i >> 1)) << 6;
-    V = GST_READ_UINT16_BE (srcV + (i >> 1)) << 6;
+    Y = GST_READ_UINT16_BE (sy + i) << 6;
+    U = GST_READ_UINT16_BE (su + (i >> 1)) << 6;
+    V = GST_READ_UINT16_BE (sv + (i >> 1)) << 6;
 
     if (!(flags & GST_VIDEO_PACK_FLAG_TRUNCATE_RANGE)) {
       Y |= (Y >> 10);
@@ -2031,6 +2632,12 @@
     d[i * 4 + 1] = Y;
     d[i * 4 + 2] = U;
     d[i * 4 + 3] = V;
+
+    if (x & 1) {
+      x = 0;
+      su++;
+      sv++;
+    }
   }
 }
 
@@ -2041,11 +2648,11 @@
     gint y, gint width)
 {
   int i;
-  guint16 *destY = GET_Y_LINE (y);
-  guint16 *destU = GET_U_LINE (y);
-  guint16 *destV = GET_V_LINE (y);
+  guint16 *restrict dy = GET_Y_LINE (y);
+  guint16 *restrict du = GET_U_LINE (y);
+  guint16 *restrict dv = GET_V_LINE (y);
   guint16 Y0, Y1, U, V;
-  const guint16 *s = src;
+  const guint16 *restrict s = src;
 
   for (i = 0; i < width - 1; i += 2) {
     Y0 = s[i * 4 + 1] >> 6;
@@ -2053,19 +2660,515 @@
     U = s[i * 4 + 2] >> 6;
     V = s[i * 4 + 3] >> 6;
 
-    GST_WRITE_UINT16_BE (destY + i + 0, Y0);
-    GST_WRITE_UINT16_BE (destY + i + 1, Y1);
-    GST_WRITE_UINT16_BE (destU + (i >> 1), U);
-    GST_WRITE_UINT16_BE (destV + (i >> 1), V);
+    GST_WRITE_UINT16_BE (dy + i + 0, Y0);
+    GST_WRITE_UINT16_BE (dy + i + 1, Y1);
+    GST_WRITE_UINT16_BE (du + (i >> 1), U);
+    GST_WRITE_UINT16_BE (dv + (i >> 1), V);
   }
   if (i == width - 1) {
     Y0 = s[i * 4 + 1] >> 6;
     U = s[i * 4 + 2] >> 6;
     V = s[i * 4 + 3] >> 6;
 
-    GST_WRITE_UINT16_BE (destY + i, Y0);
-    GST_WRITE_UINT16_BE (destU + (i >> 1), U);
-    GST_WRITE_UINT16_BE (destV + (i >> 1), V);
+    GST_WRITE_UINT16_BE (dy + i, Y0);
+    GST_WRITE_UINT16_BE (du + (i >> 1), U);
+    GST_WRITE_UINT16_BE (dv + (i >> 1), V);
+  }
+}
+
+#define PACK_A444_10LE GST_VIDEO_FORMAT_AYUV64, unpack_A444_10LE, 1, pack_A444_10LE
+static void
+unpack_A444_10LE (const GstVideoFormatInfo * info, GstVideoPackFlags flags,
+    gpointer dest, const gpointer data[GST_VIDEO_MAX_PLANES],
+    const gint stride[GST_VIDEO_MAX_PLANES], gint x, gint y, gint width)
+{
+  int i;
+  guint16 *restrict sa = GET_A_LINE (y);
+  guint16 *restrict sy = GET_Y_LINE (y);
+  guint16 *restrict su = GET_U_LINE (y);
+  guint16 *restrict sv = GET_V_LINE (y);
+  guint16 *restrict d = dest, A, Y, U, V;
+
+  sa += x;
+  sy += x;
+  su += x;
+  sv += x;
+
+  for (i = 0; i < width; i++) {
+    A = GST_READ_UINT16_LE (sa + i) << 6;
+    Y = GST_READ_UINT16_LE (sy + i) << 6;
+    U = GST_READ_UINT16_LE (su + i) << 6;
+    V = GST_READ_UINT16_LE (sv + i) << 6;
+
+    if (!(flags & GST_VIDEO_PACK_FLAG_TRUNCATE_RANGE)) {
+      A |= (A >> 10);
+      Y |= (Y >> 10);
+      U |= (U >> 10);
+      V |= (V >> 10);
+    }
+
+    d[i * 4 + 0] = A;
+    d[i * 4 + 1] = Y;
+    d[i * 4 + 2] = U;
+    d[i * 4 + 3] = V;
+  }
+}
+
+static void
+pack_A444_10LE (const GstVideoFormatInfo * info, GstVideoPackFlags flags,
+    const gpointer src, gint sstride, gpointer data[GST_VIDEO_MAX_PLANES],
+    const gint stride[GST_VIDEO_MAX_PLANES], GstVideoChromaSite chroma_site,
+    gint y, gint width)
+{
+  int i;
+  guint16 *restrict da = GET_A_LINE (y);
+  guint16 *restrict dy = GET_Y_LINE (y);
+  guint16 *restrict du = GET_U_LINE (y);
+  guint16 *restrict dv = GET_V_LINE (y);
+  guint16 A, Y, U, V;
+  const guint16 *restrict s = src;
+
+  for (i = 0; i < width; i++) {
+    A = (s[i * 4 + 0]) >> 6;
+    Y = (s[i * 4 + 1]) >> 6;
+    U = (s[i * 4 + 2]) >> 6;
+    V = (s[i * 4 + 3]) >> 6;
+
+    GST_WRITE_UINT16_LE (da + i, A);
+    GST_WRITE_UINT16_LE (dy + i, Y);
+    GST_WRITE_UINT16_LE (du + i, U);
+    GST_WRITE_UINT16_LE (dv + i, V);
+  }
+}
+
+#define PACK_A444_10BE GST_VIDEO_FORMAT_AYUV64, unpack_A444_10BE, 1, pack_A444_10BE
+static void
+unpack_A444_10BE (const GstVideoFormatInfo * info, GstVideoPackFlags flags,
+    gpointer dest, const gpointer data[GST_VIDEO_MAX_PLANES],
+    const gint stride[GST_VIDEO_MAX_PLANES], gint x, gint y, gint width)
+{
+  int i;
+  const guint16 *restrict sa = GET_A_LINE (y);
+  const guint16 *restrict sy = GET_Y_LINE (y);
+  const guint16 *restrict su = GET_U_LINE (y);
+  const guint16 *restrict sv = GET_V_LINE (y);
+  guint16 *restrict d = dest, A, Y, U, V;
+
+  sa += x;
+  sy += x;
+  su += x;
+  sv += x;
+
+  for (i = 0; i < width; i++) {
+    A = GST_READ_UINT16_BE (sa + i) << 6;
+    Y = GST_READ_UINT16_BE (sy + i) << 6;
+    U = GST_READ_UINT16_BE (su + i) << 6;
+    V = GST_READ_UINT16_BE (sv + i) << 6;
+
+    if (!(flags & GST_VIDEO_PACK_FLAG_TRUNCATE_RANGE)) {
+      A |= (A >> 10);
+      Y |= (Y >> 10);
+      U |= (U >> 10);
+      V |= (V >> 10);
+    }
+
+    d[i * 4 + 0] = A;
+    d[i * 4 + 1] = Y;
+    d[i * 4 + 2] = U;
+    d[i * 4 + 3] = V;
+  }
+}
+
+static void
+pack_A444_10BE (const GstVideoFormatInfo * info, GstVideoPackFlags flags,
+    const gpointer src, gint sstride, gpointer data[GST_VIDEO_MAX_PLANES],
+    const gint stride[GST_VIDEO_MAX_PLANES], GstVideoChromaSite chroma_site,
+    gint y, gint width)
+{
+  int i;
+  guint16 *restrict da = GET_A_LINE (y);
+  guint16 *restrict dy = GET_Y_LINE (y);
+  guint16 *restrict du = GET_U_LINE (y);
+  guint16 *restrict dv = GET_V_LINE (y);
+  guint16 A, Y, U, V;
+  const guint16 *restrict s = src;
+
+  for (i = 0; i < width; i++) {
+    A = s[i * 4 + 0] >> 6;
+    Y = s[i * 4 + 1] >> 6;
+    U = s[i * 4 + 2] >> 6;
+    V = s[i * 4 + 3] >> 6;
+
+    GST_WRITE_UINT16_BE (da + i, A);
+    GST_WRITE_UINT16_BE (dy + i, Y);
+    GST_WRITE_UINT16_BE (du + i, U);
+    GST_WRITE_UINT16_BE (dv + i, V);
+  }
+}
+
+#define PACK_A420_10LE GST_VIDEO_FORMAT_AYUV64, unpack_A420_10LE, 1, pack_A420_10LE
+static void
+unpack_A420_10LE (const GstVideoFormatInfo * info, GstVideoPackFlags flags,
+    gpointer dest, const gpointer data[GST_VIDEO_MAX_PLANES],
+    const gint stride[GST_VIDEO_MAX_PLANES], gint x, gint y, gint width)
+{
+  int i;
+  gint uv = GET_UV_420 (y, flags);
+  const guint16 *restrict sa = GET_A_LINE (y);
+  const guint16 *restrict sy = GET_Y_LINE (y);
+  const guint16 *restrict su = GET_U_LINE (uv);
+  const guint16 *restrict sv = GET_V_LINE (uv);
+  guint16 *restrict d = dest, A, Y, U, V;
+
+  sa += x;
+  sy += x;
+  su += x >> 1;
+  sv += x >> 1;
+
+  for (i = 0; i < width; i++) {
+    A = GST_READ_UINT16_LE (sa + i) << 6;
+    Y = GST_READ_UINT16_LE (sy + i) << 6;
+    U = GST_READ_UINT16_LE (su + (i >> 1)) << 6;
+    V = GST_READ_UINT16_LE (sv + (i >> 1)) << 6;
+
+    if (!(flags & GST_VIDEO_PACK_FLAG_TRUNCATE_RANGE)) {
+      A |= (A >> 10);
+      Y |= (Y >> 10);
+      U |= (U >> 10);
+      V |= (V >> 10);
+    }
+
+    d[i * 4 + 0] = A;
+    d[i * 4 + 1] = Y;
+    d[i * 4 + 2] = U;
+    d[i * 4 + 3] = V;
+
+    if (x & 1) {
+      x = 0;
+      su++;
+      sv++;
+    }
+  }
+}
+
+static void
+pack_A420_10LE (const GstVideoFormatInfo * info, GstVideoPackFlags flags,
+    const gpointer src, gint sstride, gpointer data[GST_VIDEO_MAX_PLANES],
+    const gint stride[GST_VIDEO_MAX_PLANES], GstVideoChromaSite chroma_site,
+    gint y, gint width)
+{
+  int i;
+  gint uv = GET_UV_420 (y, flags);
+  guint16 *restrict da = GET_A_LINE (y);
+  guint16 *restrict dy = GET_Y_LINE (y);
+  guint16 *restrict du = GET_U_LINE (uv);
+  guint16 *restrict dv = GET_V_LINE (uv);
+  guint16 A0, Y0, A1, Y1, U, V;
+  const guint16 *restrict s = src;
+
+  if (IS_CHROMA_LINE_420 (y, flags)) {
+    for (i = 0; i < width - 1; i += 2) {
+      A0 = s[i * 4 + 0] >> 6;
+      Y0 = s[i * 4 + 1] >> 6;
+      A1 = s[i * 4 + 4] >> 6;
+      Y1 = s[i * 4 + 5] >> 6;
+      U = s[i * 4 + 2] >> 6;
+      V = s[i * 4 + 3] >> 6;
+
+      GST_WRITE_UINT16_LE (da + i + 0, A0);
+      GST_WRITE_UINT16_LE (dy + i + 0, Y0);
+      GST_WRITE_UINT16_LE (da + i + 1, A1);
+      GST_WRITE_UINT16_LE (dy + i + 1, Y1);
+      GST_WRITE_UINT16_LE (du + (i >> 1), U);
+      GST_WRITE_UINT16_LE (dv + (i >> 1), V);
+    }
+    if (i == width - 1) {
+      A0 = s[i * 4 + 0] >> 6;
+      Y0 = s[i * 4 + 1] >> 6;
+      U = s[i * 4 + 2] >> 6;
+      V = s[i * 4 + 3] >> 6;
+
+      GST_WRITE_UINT16_LE (da + i, A0);
+      GST_WRITE_UINT16_LE (dy + i, Y0);
+      GST_WRITE_UINT16_LE (du + (i >> 1), U);
+      GST_WRITE_UINT16_LE (dv + (i >> 1), V);
+    }
+  } else {
+    for (i = 0; i < width; i++) {
+      A0 = s[i * 4 + 0] >> 6;
+      Y0 = s[i * 4 + 1] >> 6;
+      GST_WRITE_UINT16_LE (da + i, A0);
+      GST_WRITE_UINT16_LE (dy + i, Y0);
+    }
+  }
+}
+
+#define PACK_A420_10BE GST_VIDEO_FORMAT_AYUV64, unpack_A420_10BE, 1, pack_A420_10BE
+static void
+unpack_A420_10BE (const GstVideoFormatInfo * info, GstVideoPackFlags flags,
+    gpointer dest, const gpointer data[GST_VIDEO_MAX_PLANES],
+    const gint stride[GST_VIDEO_MAX_PLANES], gint x, gint y, gint width)
+{
+  int i;
+  gint uv = GET_UV_420 (y, flags);
+  const guint16 *restrict sa = GET_A_LINE (y);
+  const guint16 *restrict sy = GET_Y_LINE (y);
+  const guint16 *restrict su = GET_U_LINE (uv);
+  const guint16 *restrict sv = GET_V_LINE (uv);
+  guint16 *restrict d = dest, A, Y, U, V;
+
+  sa += x;
+  sy += x;
+  su += x >> 1;
+  sv += x >> 1;
+
+  for (i = 0; i < width; i++) {
+    A = GST_READ_UINT16_BE (sa + i) << 6;
+    Y = GST_READ_UINT16_BE (sy + i) << 6;
+    U = GST_READ_UINT16_BE (su + (i >> 1)) << 6;
+    V = GST_READ_UINT16_BE (sv + (i >> 1)) << 6;
+
+    if (!(flags & GST_VIDEO_PACK_FLAG_TRUNCATE_RANGE)) {
+      A |= (A >> 10);
+      Y |= (Y >> 10);
+      U |= (U >> 10);
+      V |= (V >> 10);
+    }
+
+    d[i * 4 + 0] = A;
+    d[i * 4 + 1] = Y;
+    d[i * 4 + 2] = U;
+    d[i * 4 + 3] = V;
+
+    if (x & 1) {
+      x = 0;
+      su++;
+      sv++;
+    }
+  }
+}
+
+static void
+pack_A420_10BE (const GstVideoFormatInfo * info, GstVideoPackFlags flags,
+    const gpointer src, gint sstride, gpointer data[GST_VIDEO_MAX_PLANES],
+    const gint stride[GST_VIDEO_MAX_PLANES], GstVideoChromaSite chroma_site,
+    gint y, gint width)
+{
+  int i;
+  gint uv = GET_UV_420 (y, flags);
+  guint16 *restrict da = GET_A_LINE (y);
+  guint16 *restrict dy = GET_Y_LINE (y);
+  guint16 *restrict du = GET_U_LINE (uv);
+  guint16 *restrict dv = GET_V_LINE (uv);
+  guint16 A0, Y0, A1, Y1, U, V;
+  const guint16 *restrict s = src;
+
+  if (IS_CHROMA_LINE_420 (y, flags)) {
+    for (i = 0; i < width - 1; i += 2) {
+      A0 = s[i * 4 + 0] >> 6;
+      Y0 = s[i * 4 + 1] >> 6;
+      A1 = s[i * 4 + 4] >> 6;
+      Y1 = s[i * 4 + 5] >> 6;
+      U = s[i * 4 + 2] >> 6;
+      V = s[i * 4 + 3] >> 6;
+
+      GST_WRITE_UINT16_BE (da + i + 0, A0);
+      GST_WRITE_UINT16_BE (dy + i + 0, Y0);
+      GST_WRITE_UINT16_BE (da + i + 1, A1);
+      GST_WRITE_UINT16_BE (dy + i + 1, Y1);
+      GST_WRITE_UINT16_BE (du + (i >> 1), U);
+      GST_WRITE_UINT16_BE (dv + (i >> 1), V);
+    }
+    if (i == width - 1) {
+      A0 = s[i * 4 + 0] >> 6;
+      Y0 = s[i * 4 + 1] >> 6;
+      U = s[i * 4 + 2] >> 6;
+      V = s[i * 4 + 3] >> 6;
+
+      GST_WRITE_UINT16_BE (da + i, A0);
+      GST_WRITE_UINT16_BE (dy + i, Y0);
+      GST_WRITE_UINT16_BE (du + (i >> 1), U);
+      GST_WRITE_UINT16_BE (dv + (i >> 1), V);
+    }
+  } else {
+    for (i = 0; i < width; i++) {
+      A0 = s[i * 4 + 0] >> 6;
+      Y0 = s[i * 4 + 1] >> 6;
+      GST_WRITE_UINT16_BE (da + i, A0);
+      GST_WRITE_UINT16_BE (dy + i, Y0);
+    }
+  }
+}
+
+#define PACK_A422_10LE GST_VIDEO_FORMAT_AYUV64, unpack_A422_10LE, 1, pack_A422_10LE
+static void
+unpack_A422_10LE (const GstVideoFormatInfo * info, GstVideoPackFlags flags,
+    gpointer dest, const gpointer data[GST_VIDEO_MAX_PLANES],
+    const gint stride[GST_VIDEO_MAX_PLANES], gint x, gint y, gint width)
+{
+  int i;
+  const guint16 *restrict sa = GET_A_LINE (y);
+  const guint16 *restrict sy = GET_Y_LINE (y);
+  const guint16 *restrict su = GET_U_LINE (y);
+  const guint16 *restrict sv = GET_V_LINE (y);
+  guint16 *restrict d = dest, A, Y, U, V;
+
+  sa += x;
+  sy += x;
+  su += x >> 1;
+  sv += x >> 1;
+
+  for (i = 0; i < width; i++) {
+    A = GST_READ_UINT16_LE (sa + i) << 6;
+    Y = GST_READ_UINT16_LE (sy + i) << 6;
+    U = GST_READ_UINT16_LE (su + (i >> 1)) << 6;
+    V = GST_READ_UINT16_LE (sv + (i >> 1)) << 6;
+
+    if (!(flags & GST_VIDEO_PACK_FLAG_TRUNCATE_RANGE)) {
+      A |= (A >> 10);
+      Y |= (Y >> 10);
+      U |= (U >> 10);
+      V |= (V >> 10);
+    }
+
+    d[i * 4 + 0] = A;
+    d[i * 4 + 1] = Y;
+    d[i * 4 + 2] = U;
+    d[i * 4 + 3] = V;
+
+    if (x & 1) {
+      x = 0;
+      su++;
+      sv++;
+    }
+  }
+}
+
+static void
+pack_A422_10LE (const GstVideoFormatInfo * info, GstVideoPackFlags flags,
+    const gpointer src, gint sstride, gpointer data[GST_VIDEO_MAX_PLANES],
+    const gint stride[GST_VIDEO_MAX_PLANES], GstVideoChromaSite chroma_site,
+    gint y, gint width)
+{
+  int i;
+  guint16 *restrict da = GET_A_LINE (y);
+  guint16 *restrict dy = GET_Y_LINE (y);
+  guint16 *restrict du = GET_U_LINE (y);
+  guint16 *restrict dv = GET_V_LINE (y);
+  guint16 A0, Y0, A1, Y1, U, V;
+  const guint16 *restrict s = src;
+
+  for (i = 0; i < width - 1; i += 2) {
+    A0 = s[i * 4 + 0] >> 6;
+    Y0 = s[i * 4 + 1] >> 6;
+    A1 = s[i * 4 + 4] >> 6;
+    Y1 = s[i * 4 + 5] >> 6;
+    U = s[i * 4 + 2] >> 6;
+    V = s[i * 4 + 3] >> 6;
+
+    GST_WRITE_UINT16_LE (da + i + 0, A0);
+    GST_WRITE_UINT16_LE (dy + i + 0, Y0);
+    GST_WRITE_UINT16_LE (da + i + 1, A1);
+    GST_WRITE_UINT16_LE (dy + i + 1, Y1);
+    GST_WRITE_UINT16_LE (du + (i >> 1), U);
+    GST_WRITE_UINT16_LE (dv + (i >> 1), V);
+  }
+  if (i == width - 1) {
+    A0 = s[i * 4 + 0] >> 6;
+    Y0 = s[i * 4 + 1] >> 6;
+    U = s[i * 4 + 2] >> 6;
+    V = s[i * 4 + 3] >> 6;
+
+    GST_WRITE_UINT16_LE (da + i, A0);
+    GST_WRITE_UINT16_LE (dy + i, Y0);
+    GST_WRITE_UINT16_LE (du + (i >> 1), U);
+    GST_WRITE_UINT16_LE (dv + (i >> 1), V);
+  }
+}
+
+#define PACK_A422_10BE GST_VIDEO_FORMAT_AYUV64, unpack_A422_10BE, 1, pack_A422_10BE
+static void
+unpack_A422_10BE (const GstVideoFormatInfo * info, GstVideoPackFlags flags,
+    gpointer dest, const gpointer data[GST_VIDEO_MAX_PLANES],
+    const gint stride[GST_VIDEO_MAX_PLANES], gint x, gint y, gint width)
+{
+  int i;
+  const guint16 *restrict sa = GET_A_LINE (y);
+  const guint16 *restrict sy = GET_Y_LINE (y);
+  const guint16 *restrict su = GET_U_LINE (y);
+  const guint16 *restrict sv = GET_V_LINE (y);
+  guint16 *restrict d = dest, A, Y, U, V;
+
+  sa += x;
+  sy += x;
+  su += x >> 1;
+  sv += x >> 1;
+
+  for (i = 0; i < width; i++) {
+    A = GST_READ_UINT16_BE (sa + i) << 6;
+    Y = GST_READ_UINT16_BE (sy + i) << 6;
+    U = GST_READ_UINT16_BE (su + (i >> 1)) << 6;
+    V = GST_READ_UINT16_BE (sv + (i >> 1)) << 6;
+
+    if (!(flags & GST_VIDEO_PACK_FLAG_TRUNCATE_RANGE)) {
+      A |= (A >> 10);
+      Y |= (Y >> 10);
+      U |= (U >> 10);
+      V |= (V >> 10);
+    }
+
+    d[i * 4 + 0] = A;
+    d[i * 4 + 1] = Y;
+    d[i * 4 + 2] = U;
+    d[i * 4 + 3] = V;
+
+    if (x & 1) {
+      x = 0;
+      su++;
+      sv++;
+    }
+  }
+}
+
+static void
+pack_A422_10BE (const GstVideoFormatInfo * info, GstVideoPackFlags flags,
+    const gpointer src, gint sstride, gpointer data[GST_VIDEO_MAX_PLANES],
+    const gint stride[GST_VIDEO_MAX_PLANES], GstVideoChromaSite chroma_site,
+    gint y, gint width)
+{
+  int i;
+  guint16 *restrict da = GET_A_LINE (y);
+  guint16 *restrict dy = GET_Y_LINE (y);
+  guint16 *restrict du = GET_U_LINE (y);
+  guint16 *restrict dv = GET_V_LINE (y);
+  guint16 A0, Y0, A1, Y1, U, V;
+  const guint16 *restrict s = src;
+
+  for (i = 0; i < width - 1; i += 2) {
+    A0 = s[i * 4 + 0] >> 6;
+    Y0 = s[i * 4 + 1] >> 6;
+    A1 = s[i * 4 + 4] >> 6;
+    Y1 = s[i * 4 + 5] >> 6;
+    U = s[i * 4 + 2] >> 6;
+    V = s[i * 4 + 3] >> 6;
+
+    GST_WRITE_UINT16_BE (da + i + 0, A0);
+    GST_WRITE_UINT16_BE (dy + i + 0, Y0);
+    GST_WRITE_UINT16_BE (da + i + 1, A1);
+    GST_WRITE_UINT16_BE (dy + i + 1, Y1);
+    GST_WRITE_UINT16_BE (du + (i >> 1), U);
+    GST_WRITE_UINT16_BE (dv + (i >> 1), V);
+  }
+  if (i == width - 1) {
+    A0 = s[i * 4 + 0] >> 6;
+    Y0 = s[i * 4 + 1] >> 6;
+    U = s[i * 4 + 2] >> 6;
+    V = s[i * 4 + 3] >> 6;
+
+    GST_WRITE_UINT16_BE (da + i, A0);
+    GST_WRITE_UINT16_BE (dy + i, Y0);
+    GST_WRITE_UINT16_BE (du + (i >> 1), U);
+    GST_WRITE_UINT16_BE (dv + (i >> 1), V);
   }
 }
 
@@ -2217,6 +3320,7 @@
 #define DPTH8888         8, 4, { 0, 0, 0, 0 }, { 8, 8, 8, 8 }
 #define DPTH8880         8, 4, { 0, 0, 0, 0 }, { 8, 8, 8, 0 }
 #define DPTH10_10_10     10, 3, { 0, 0, 0, 0 }, { 10, 10, 10, 0 }
+#define DPTH10_10_10_10  10, 4, { 0, 0, 0, 0 }, { 10, 10, 10, 10 }
 #define DPTH16           16, 1, { 0, 0, 0, 0 }, { 16, 0, 0, 0 }
 #define DPTH16_16_16     16, 3, { 0, 0, 0, 0 }, { 16, 16, 16, 0 }
 #define DPTH16_16_16_16  16, 4, { 0, 0, 0, 0 }, { 16, 16, 16, 16 }
@@ -2232,6 +3336,7 @@
 #define PSTR122           { 1, 2, 2, 0 }
 #define PSTR2             { 2, 0, 0, 0 }
 #define PSTR222           { 2, 2, 2, 0 }
+#define PSTR2222          { 2, 2, 2, 2 }
 #define PSTR244           { 2, 4, 4, 0 }
 #define PSTR444           { 4, 4, 4, 0 }
 #define PSTR4444          { 4, 4, 4, 4 }
@@ -2278,6 +3383,7 @@
 #define SUB444            { 0, 0, 0, 0 }, { 0, 0, 0, 0 }
 #define SUB4444           { 0, 0, 0, 0 }, { 0, 0, 0, 0 }
 #define SUB4204           { 0, 1, 1, 0 }, { 0, 1, 1, 0 }
+#define SUB4224           { 0, 1, 1, 0 }, { 0, 0, 0, 0 }
 
 /* tile_mode, tile_width, tile_height */
 #define TILE_64x32(mode) GST_VIDEO_TILE_MODE_ ##mode, 6, 5
@@ -2288,6 +3394,8 @@
  { fourcc, {GST_VIDEO_FORMAT_ ##name, G_STRINGIFY(name), desc, GST_VIDEO_FORMAT_FLAG_YUV | GST_VIDEO_FORMAT_FLAG_LE, depth, pstride, plane, offs, sub, pack } }
 #define MAKE_YUVA_FORMAT(name, desc, fourcc, depth, pstride, plane, offs, sub, pack) \
  { fourcc, {GST_VIDEO_FORMAT_ ##name, G_STRINGIFY(name), desc, GST_VIDEO_FORMAT_FLAG_YUV | GST_VIDEO_FORMAT_FLAG_ALPHA, depth, pstride, plane, offs, sub, pack } }
+#define MAKE_YUVA_LE_FORMAT(name, desc, fourcc, depth, pstride, plane, offs, sub, pack ) \
+ { fourcc, {GST_VIDEO_FORMAT_ ##name, G_STRINGIFY(name), desc, GST_VIDEO_FORMAT_FLAG_YUV | GST_VIDEO_FORMAT_FLAG_ALPHA | GST_VIDEO_FORMAT_FLAG_LE, depth, pstride, plane, offs, sub, pack } }
 #define MAKE_YUVA_PACK_FORMAT(name, desc, fourcc, depth, pstride, plane, offs, sub, pack) \
  { fourcc, {GST_VIDEO_FORMAT_ ##name, G_STRINGIFY(name), desc, GST_VIDEO_FORMAT_FLAG_YUV | GST_VIDEO_FORMAT_FLAG_ALPHA | GST_VIDEO_FORMAT_FLAG_UNPACK, depth, pstride, plane, offs, sub, pack } }
 #define MAKE_YUVA_LE_PACK_FORMAT(name, desc, fourcc, depth, pstride, plane, offs, sub, pack) \
@@ -2315,7 +3423,7 @@
 #define MAKE_GRAY_LE_FORMAT(name, desc, depth, pstride, plane, offs, sub, pack) \
  { 0x00000000, {GST_VIDEO_FORMAT_ ##name, G_STRINGIFY(name), desc, GST_VIDEO_FORMAT_FLAG_GRAY | GST_VIDEO_FORMAT_FLAG_LE, depth, pstride, plane, offs, sub, pack } }
 
-static VideoFormat formats[] = {
+static const VideoFormat formats[] = {
   {0x00000000, {GST_VIDEO_FORMAT_UNKNOWN, "UNKNOWN", "unknown video", 0, DPTH0,
           PSTR0, PLANE_NA, OFFS0}},
   {0x00000000, {GST_VIDEO_FORMAT_ENCODED, "ENCODED", "encoded video",
@@ -2446,12 +3554,26 @@
       OFFS0, SUB444,
       PACK_GBR_10LE),
   MAKE_YUV_FORMAT (NV16, "raw video", GST_MAKE_FOURCC ('N', 'V', '1', '6'),
-      DPTH888, PSTR111, PLANE011, OFFS001, SUB422, PACK_NV16),
+      DPTH888, PSTR122, PLANE011, OFFS001, SUB422, PACK_NV16),
   MAKE_YUV_FORMAT (NV24, "raw video", GST_MAKE_FOURCC ('N', 'V', '2', '4'),
-      DPTH888, PSTR111, PLANE011, OFFS001, SUB444, PACK_NV24),
+      DPTH888, PSTR122, PLANE011, OFFS001, SUB444, PACK_NV24),
   MAKE_YUV_T_FORMAT (NV12_64Z32, "raw video",
       GST_MAKE_FOURCC ('T', 'M', '1', '2'), DPTH8880, PSTR122, PLANE011,
       OFFS001, SUB420, PACK_NV12_64Z32, TILE_64x32 (ZFLIPZ_2X2)),
+  MAKE_YUVA_FORMAT (A420_10BE, "raw video", 0x00000000, DPTH10_10_10_10,
+      PSTR2222, PLANE0123, OFFS0, SUB4204, PACK_A420_10BE),
+  MAKE_YUVA_LE_FORMAT (A420_10LE, "raw video", 0x00000000, DPTH10_10_10_10,
+      PSTR2222, PLANE0123, OFFS0, SUB4204, PACK_A420_10LE),
+  MAKE_YUVA_FORMAT (A422_10BE, "raw video", 0x00000000, DPTH10_10_10_10,
+      PSTR2222, PLANE0123, OFFS0, SUB4224, PACK_A422_10BE),
+  MAKE_YUVA_LE_FORMAT (A422_10LE, "raw video", 0x00000000, DPTH10_10_10_10,
+      PSTR2222, PLANE0123, OFFS0, SUB4224, PACK_A422_10LE),
+  MAKE_YUVA_FORMAT (A444_10BE, "raw video", 0x00000000, DPTH10_10_10_10,
+      PSTR2222, PLANE0123, OFFS0, SUB4444, PACK_A444_10BE),
+  MAKE_YUVA_LE_FORMAT (A444_10LE, "raw video", 0x00000000, DPTH10_10_10_10,
+      PSTR2222, PLANE0123, OFFS0, SUB4444, PACK_A444_10LE),
+  MAKE_YUV_FORMAT (NV61, "raw video", GST_MAKE_FOURCC ('N', 'V', '6', '1'),
+      DPTH888, PSTR122, PLANE011, OFFS010, SUB422, PACK_NV61),
 };
 
 static GstVideoFormat
@@ -2656,6 +3778,8 @@
       return GST_VIDEO_FORMAT_NV21;
     case GST_MAKE_FOURCC ('N', 'V', '1', '6'):
       return GST_VIDEO_FORMAT_NV16;
+    case GST_MAKE_FOURCC ('N', 'V', '6', '1'):
+      return GST_VIDEO_FORMAT_NV61;
     case GST_MAKE_FOURCC ('N', 'V', '2', '4'):
       return GST_VIDEO_FORMAT_NV24;
     case GST_MAKE_FOURCC ('v', '3', '0', '8'):
@@ -2728,6 +3852,15 @@
   return formats[format].fourcc;
 }
 
+/**
+ * gst_video_format_to_string:
+ * @format: a #GstVideoFormat video format
+ *
+ * Returns a string containing a descriptive name for
+ * the #GstVideoFormat if there is one, or NULL otherwise.
+ *
+ * Returns: the name corresponding to @format
+ */
 const gchar *
 gst_video_format_to_string (GstVideoFormat format)
 {
diff --git a/gst-libs/gst/video/video-format.h b/gst-libs/gst/video/video-format.h
index e51c70d..e2a7d78 100644
--- a/gst-libs/gst/video/video-format.h
+++ b/gst-libs/gst/video/video-format.h
@@ -84,8 +84,15 @@
  * @GST_VIDEO_FORMAT_GBR_10BE: planar 4:4:4 RGB, 10 bits per channel
  * @GST_VIDEO_FORMAT_GBR_10LE: planar 4:4:4 RGB, 10 bits per channel
  * @GST_VIDEO_FORMAT_NV16: planar 4:2:2 YUV with interleaved UV plane
+ * @GST_VIDEO_FORMAT_NV61: planar 4:2:2 YUV with interleaved VU plane (Since 1.6)
  * @GST_VIDEO_FORMAT_NV24: planar 4:4:4 YUV with interleaved UV plane
  * @GST_VIDEO_FORMAT_NV12_64Z32: NV12 with 64x32 tiling in zigzag pattern
+ * @GST_VIDEO_FORMAT_A420_10BE: planar 4:4:2:0 YUV, 10 bits per channel
+ * @GST_VIDEO_FORMAT_A420_10LE: planar 4:4:2:0 YUV, 10 bits per channel
+ * @GST_VIDEO_FORMAT_A422_10BE: planar 4:4:2:2 YUV, 10 bits per channel
+ * @GST_VIDEO_FORMAT_A422_10LE: planar 4:4:2:2 YUV, 10 bits per channel
+ * @GST_VIDEO_FORMAT_A444_10BE: planar 4:4:4:4 YUV, 10 bits per channel
+ * @GST_VIDEO_FORMAT_A444_10LE: planar 4:4:4:4 YUV, 10 bits per channel
  *
  * Enum value describing the most common video formats.
  */
@@ -144,6 +151,13 @@
   GST_VIDEO_FORMAT_NV16,
   GST_VIDEO_FORMAT_NV24,
   GST_VIDEO_FORMAT_NV12_64Z32,
+  GST_VIDEO_FORMAT_A420_10BE,
+  GST_VIDEO_FORMAT_A420_10LE,
+  GST_VIDEO_FORMAT_A422_10BE,
+  GST_VIDEO_FORMAT_A422_10LE,
+  GST_VIDEO_FORMAT_A444_10BE,
+  GST_VIDEO_FORMAT_A444_10LE,
+  GST_VIDEO_FORMAT_NV61,
 } GstVideoFormat;
 
 #define GST_VIDEO_MAX_PLANES 4
@@ -239,9 +253,14 @@
  * @width: the amount of pixels to unpack.
  *
  * Unpacks @width pixels from the given planes and strides containing data of
- * format @info. The pixels will be unpacked into @dest which each component
- * interleaved. @dest should at least be big enough to hold @width *
- * n_components * size(unpack_format) bytes.
+ * format @info. The pixels will be unpacked into @dest with each component
+ * interleaved as per @info's unpack_format, which will usually be one of
+ * #GST_VIDEO_FORMAT_ARGB, #GST_VIDEO_FORMAT_AYUV, #GST_VIDEO_FORMAT_ARGB64 or
+ * #GST_VIDEO_FORMAT_AYUV64 depending on the format to unpack.
+ * @dest should at least be big enough to hold @width * bytes_per_pixel bytes
+ * where bytes_per_pixel relates to the unpack format and will usually be
+ * either 4 or 8 depending on the unpack format. bytes_per_pixel will be
+ * the same as the pixel stride for plane 0 for the above formats.
  *
  * For subsampled formats, the components will be duplicated in the destination
  * array. Reconstruction of the missing components can be performed in a
@@ -272,14 +291,18 @@
  * contain at least pack_lines lines with a stride of @sstride and @y
  * should be a multiple of pack_lines.
  *
- * Subsampled formats will use the horizontally cosited component in the
- * destination. Subsampling should be performed before packing.
+ * Subsampled formats will use the horizontally and vertically cosited
+ * component from the source. Subsampling should be performed before
+ * packing.
  *
- * Because tis function does not have a x coordinate, it is not possible to
+ * Because this function does not have a x coordinate, it is not possible to
  * pack pixels starting from an unaligned position. For tiled images this
  * means that packing should start from a tile coordinate. For subsampled
- * formats this means that a complete pixel need to be packed.
+ * formats this means that a complete pixel needs to be packed.
  */
+/* FIXME(2.0): remove the chroma_site, it is unused and is not relevant for
+ * packing, chroma subsampling based on chroma-site should be done in a separate
+ * step before packing*/
 typedef void (*GstVideoFormatPack)           (const GstVideoFormatInfo *info,
                                               GstVideoPackFlags flags,
                                               const gpointer src, gint sstride,
@@ -460,10 +483,11 @@
 
 #define GST_VIDEO_FORMATS_ALL "{ I420, YV12, YUY2, UYVY, AYUV, RGBx, "  \
     "BGRx, xRGB, xBGR, RGBA, BGRA, ARGB, ABGR, RGB, BGR, Y41B, Y42B, "  \
-    "YVYU, Y444, v210, v216, NV12, NV21, NV16, NV24, GRAY8, GRAY16_BE, GRAY16_LE, " \
-    "v308, RGB16, BGR16, RGB15, BGR15, UYVP, A420, RGB8P, YUV9, YVU9, " \
+    "YVYU, Y444, v210, v216, NV12, NV21, NV16, NV61, NV24, GRAY8, GRAY16_BE, " \
+    "GRAY16_LE, v308, RGB16, BGR16, RGB15, BGR15, UYVP, A420, RGB8P, YUV9, YVU9, " \
     "IYU1, ARGB64, AYUV64, r210, I420_10LE, I420_10BE, I422_10LE, I422_10BE, " \
-    " Y444_10LE, Y444_10BE, GBR, GBR_10LE, GBR_10BE, NV12_64Z32 }"
+    " Y444_10LE, Y444_10BE, GBR, GBR_10LE, GBR_10BE, NV12_64Z32, A420_10LE, "\
+    " A420_10BE, A422_10LE, A422_10BE, A444_10LE, A444_10BE }"
 
 /**
  * GST_VIDEO_CAPS_MAKE:
diff --git a/gst-libs/gst/video/video-frame.c b/gst-libs/gst/video/video-frame.c
index 537cf70..f05958c 100644
--- a/gst-libs/gst/video/video-frame.c
+++ b/gst-libs/gst/video/video-frame.c
@@ -72,13 +72,19 @@
   frame->info = *info;
 
   if (meta) {
+    /* All these values must be consistent */
+    g_return_val_if_fail (info->finfo->format == meta->format, FALSE);
+    g_return_val_if_fail (info->width <= meta->width, FALSE);
+    g_return_val_if_fail (info->height <= meta->height, FALSE);
+    g_return_val_if_fail (info->finfo->n_planes == meta->n_planes, FALSE);
+
     frame->info.finfo = gst_video_format_get_info (meta->format);
     frame->info.width = meta->width;
     frame->info.height = meta->height;
     frame->id = meta->id;
     frame->flags = meta->flags;
 
-    for (i = 0; i < info->finfo->n_planes; i++) {
+    for (i = 0; i < meta->n_planes; i++) {
       frame->info.offset[i] = meta->offset[i];
       if (!gst_video_meta_map (meta, i, &frame->map[i], &frame->data[i],
               &frame->info.stride[i], flags))
@@ -105,7 +111,10 @@
       frame->data[i] = frame->map[0].data + info->offset[i];
     }
   }
-  frame->buffer = gst_buffer_ref (buffer);
+  frame->buffer = buffer;
+  if ((flags & GST_VIDEO_FRAME_MAP_FLAG_NO_REF) == 0)
+    gst_buffer_ref (frame->buffer);
+
   frame->meta = meta;
 
   /* buffer flags enhance the frame flags */
@@ -189,11 +198,13 @@
   GstBuffer *buffer;
   GstVideoMeta *meta;
   gint i;
+  GstMapFlags flags;
 
   g_return_if_fail (frame != NULL);
 
   buffer = frame->buffer;
   meta = frame->meta;
+  flags = frame->map[0].flags;
 
   if (meta) {
     for (i = 0; i < frame->info.finfo->n_planes; i++) {
@@ -202,7 +213,9 @@
   } else {
     gst_buffer_unmap (buffer, &frame->map[0]);
   }
-  gst_buffer_unref (buffer);
+
+  if ((flags & GST_VIDEO_FRAME_MAP_FLAG_NO_REF) == 0)
+    gst_buffer_unref (frame->buffer);
 }
 
 /**
diff --git a/gst-libs/gst/video/video-frame.h b/gst-libs/gst/video/video-frame.h
index 670806e..020d6e1 100644
--- a/gst-libs/gst/video/video-frame.h
+++ b/gst-libs/gst/video/video-frame.h
@@ -30,11 +30,15 @@
  * GstVideoFrameFlags:
  * @GST_VIDEO_FRAME_FLAG_NONE: no flags
  * @GST_VIDEO_FRAME_FLAG_INTERLACED: The video frame is interlaced. In mixed
- *           interlace-mode, this flags specifies if the frame is interlace or
+ *           interlace-mode, this flag specifies if the frame is interlaced or
  *           progressive.
  * @GST_VIDEO_FRAME_FLAG_TFF: The video frame has the top field first
  * @GST_VIDEO_FRAME_FLAG_RFF: The video frame has the repeat flag
  * @GST_VIDEO_FRAME_FLAG_ONEFIELD: The video frame has one field
+ * @GST_VIDEO_FRAME_FLAG_MULTIPLE_VIEW: The video contains one or
+ *     more non-mono views
+ * @GST_VIDEO_FRAME_FLAG_FIRST_IN_BUNDLE: The video frame is the first
+ *     in a set of corresponding views provided as sequential frames.
  *
  * Extra video frame flags
  */
@@ -43,7 +47,9 @@
   GST_VIDEO_FRAME_FLAG_INTERLACED   = (1 << 0),
   GST_VIDEO_FRAME_FLAG_TFF          = (1 << 1),
   GST_VIDEO_FRAME_FLAG_RFF          = (1 << 2),
-  GST_VIDEO_FRAME_FLAG_ONEFIELD     = (1 << 3)
+  GST_VIDEO_FRAME_FLAG_ONEFIELD     = (1 << 3),
+  GST_VIDEO_FRAME_FLAG_MULTIPLE_VIEW = (1 << 4),
+  GST_VIDEO_FRAME_FLAG_FIRST_IN_BUNDLE = (1 << 5)
 } GstVideoFrameFlags;
 
 /* circular dependency, need to include this after defining the enums */
@@ -53,6 +59,7 @@
 /**
  * GstVideoFrame:
  * @info: the #GstVideoInfo
+ * @flags: #GstVideoFrameFlags for the frame
  * @buffer: the mapped buffer
  * @meta: pointer to metadata if any
  * @id: id of the mapped frame. the id can for example be used to
@@ -135,8 +142,19 @@
  * @GST_VIDEO_BUFFER_FLAG_ONEFIELD:    If the #GstBuffer is interlaced, then only the
  *                                     first field (as defined by the %GST_VIDEO_BUFFER_TFF
  *                                     flag setting) is to be displayed.
+ * @GST_VIDEO_BUFFER_FLAG_MULTIPLE_VIEW: The #GstBuffer contains one or more specific views,
+ *                                     such as left or right eye view. This flags is set on
+ *                                     any buffer that contains non-mono content - even for
+ *                                     streams that contain only a single viewpoint. In mixed
+ *                                     mono / non-mono streams, the absense of the flag marks
+ *                                     mono buffers.
+ * @GST_VIDEO_BUFFER_FLAG_FIRST_IN_BUNDLE: When conveying stereo/multiview content with
+ *                                     frame-by-frame methods, this flag marks the first buffer
+ *                                      in a bundle of frames that belong together.
+ * @GST_VIDEO_BUFFER_FLAG_LAST:        Offset to define more flags
  *
- * Additional video buffer flags.
+ * Additional video buffer flags. These flags can potentially be used on any
+ * buffers carrying video data - even encoded data.
  */
 typedef enum {
   GST_VIDEO_BUFFER_FLAG_INTERLACED  = (GST_BUFFER_FLAG_LAST << 0),
@@ -144,9 +162,30 @@
   GST_VIDEO_BUFFER_FLAG_RFF         = (GST_BUFFER_FLAG_LAST << 2),
   GST_VIDEO_BUFFER_FLAG_ONEFIELD    = (GST_BUFFER_FLAG_LAST << 3),
 
+  GST_VIDEO_BUFFER_FLAG_MULTIPLE_VIEW = (GST_BUFFER_FLAG_LAST << 4),
+  GST_VIDEO_BUFFER_FLAG_FIRST_IN_BUNDLE = (GST_BUFFER_FLAG_LAST << 5),
+
   GST_VIDEO_BUFFER_FLAG_LAST        = (GST_BUFFER_FLAG_LAST << 8)
 } GstVideoBufferFlags;
 
+/**
+ * GstVideoFrameMapFlags:
+ * @GST_VIDEO_FRAME_MAP_FLAG_NO_REF:  Don't take another reference of the buffer and store it in
+ *                                    the GstVideoFrame. This makes sure that the buffer stays
+ *                                    writable while the frame is mapped, but requires that the
+ *                                    buffer reference stays valid until the frame is unmapped again.
+ * @GST_VIDEO_FRAME_MAP_FLAG_LAST:    Offset to define more flags
+ *
+ * Additional mapping flags for gst_video_frame_map().
+ *
+ * Since: 1.6
+ */
+typedef enum {
+  GST_VIDEO_FRAME_MAP_FLAG_NO_REF   = (GST_MAP_FLAG_LAST << 0),
+  GST_VIDEO_FRAME_MAP_FLAG_LAST     = (GST_MAP_FLAG_LAST << 8)
+  /* 8 more flags possible afterwards */
+} GstVideoFrameMapFlags;
+
 G_END_DECLS
 
 #endif /* __GST_VIDEO_FRAME_H__ */
diff --git a/gst-libs/gst/video/video-info.c b/gst-libs/gst/video/video-info.c
index 52c9b12..20090d4 100644
--- a/gst-libs/gst/video/video-info.c
+++ b/gst-libs/gst/video/video-info.c
@@ -29,6 +29,83 @@
 #include "video-info.h"
 #include "video-tile.h"
 
+#ifndef GST_DISABLE_GST_DEBUG
+#define GST_CAT_DEFAULT ensure_debug_category()
+static GstDebugCategory *
+ensure_debug_category (void)
+{
+  static gsize cat_gonce = 0;
+
+  if (g_once_init_enter (&cat_gonce)) {
+    gsize cat_done;
+
+    cat_done = (gsize) _gst_debug_category_new ("video-info", 0,
+        "video-info structure");
+
+    g_once_init_leave (&cat_gonce, cat_done);
+  }
+
+  return (GstDebugCategory *) cat_gonce;
+}
+#else
+#define ensure_debug_category() /* NOOP */
+#endif /* GST_DISABLE_GST_DEBUG */
+
+/**
+ * gst_video_info_copy:
+ * @info: a #GstVideoInfo
+ *
+ * Copy a GstVideoInfo structure.
+ *
+ * Returns: a new #GstVideoInfo. free with gst_video_info_free.
+ *
+ * Since: 1.6
+ */
+GstVideoInfo *
+gst_video_info_copy (const GstVideoInfo * info)
+{
+  return g_slice_dup (GstVideoInfo, info);
+}
+
+/**
+ * gst_video_info_free:
+ * @info: a #GstVideoInfo
+ *
+ * Free a GstVideoInfo structure previously allocated with gst_video_info_new()
+ * or gst_video_info_copy().
+ *
+ * Since: 1.6
+ */
+void
+gst_video_info_free (GstVideoInfo * info)
+{
+  g_slice_free (GstVideoInfo, info);
+}
+
+G_DEFINE_BOXED_TYPE (GstVideoInfo, gst_video_info,
+    (GBoxedCopyFunc) gst_video_info_copy, (GBoxedFreeFunc) gst_video_info_free);
+
+/**
+ * gst_video_info_new:
+ *
+ * Allocate a new #GstVideoInfo that is also initialized with
+ * gst_video_info_init().
+ *
+ * Returns: a new #GstVideoInfo. free with gst_video_info_free().
+ *
+ * Since: 1.6
+ */
+GstVideoInfo *
+gst_video_info_new (void)
+{
+  GstVideoInfo *info;
+
+  info = g_slice_new (GstVideoInfo);
+  gst_video_info_init (info);
+
+  return info;
+}
+
 static int fill_planes (GstVideoInfo * info);
 
 /**
@@ -52,6 +129,7 @@
   info->fps_d = 1;
   info->par_n = 1;
   info->par_d = 1;
+  GST_VIDEO_INFO_MULTIVIEW_MODE (info) = GST_VIDEO_MULTIVIEW_MODE_NONE;
 }
 
 #define MAKE_COLORIMETRY(r,m,t,p) {  \
@@ -63,15 +141,58 @@
 #define DEFAULT_RGB     2
 #define DEFAULT_GRAY    3
 #define DEFAULT_UNKNOWN 4
+#define DEFAULT_YUV_UHD 5
 
 static const GstVideoColorimetry default_color[] = {
-  MAKE_COLORIMETRY (_16_235, BT601, BT709, BT470M),
+  MAKE_COLORIMETRY (_16_235, BT601, BT709, SMPTE170M),
   MAKE_COLORIMETRY (_16_235, BT709, BT709, BT709),
-  MAKE_COLORIMETRY (_0_255, RGB, UNKNOWN, UNKNOWN),
+  MAKE_COLORIMETRY (_0_255, RGB, SRGB, BT709),
   MAKE_COLORIMETRY (_0_255, BT601, UNKNOWN, UNKNOWN),
   MAKE_COLORIMETRY (_UNKNOWN, UNKNOWN, UNKNOWN, UNKNOWN),
+  MAKE_COLORIMETRY (_16_235, BT2020, BT2020_12, BT2020),
 };
 
+static void
+set_default_colorimetry (GstVideoInfo * info)
+{
+  const GstVideoFormatInfo *finfo = info->finfo;
+
+  if (GST_VIDEO_FORMAT_INFO_IS_YUV (finfo)) {
+    if (info->height >= 2160) {
+      info->chroma_site = GST_VIDEO_CHROMA_SITE_H_COSITED;
+      info->colorimetry = default_color[DEFAULT_YUV_UHD];
+    } else if (info->height > 576) {
+      info->chroma_site = GST_VIDEO_CHROMA_SITE_H_COSITED;
+      info->colorimetry = default_color[DEFAULT_YUV_HD];
+    } else {
+      info->chroma_site = GST_VIDEO_CHROMA_SITE_NONE;
+      info->colorimetry = default_color[DEFAULT_YUV_SD];
+    }
+  } else if (GST_VIDEO_FORMAT_INFO_IS_GRAY (finfo)) {
+    info->colorimetry = default_color[DEFAULT_GRAY];
+  } else if (GST_VIDEO_FORMAT_INFO_IS_RGB (finfo)) {
+    info->colorimetry = default_color[DEFAULT_RGB];
+  } else {
+    info->colorimetry = default_color[DEFAULT_UNKNOWN];
+  }
+}
+
+static gboolean
+validate_colorimetry (GstVideoInfo * info)
+{
+  const GstVideoFormatInfo *finfo = info->finfo;
+
+  if (!GST_VIDEO_FORMAT_INFO_IS_RGB (finfo) &&
+      info->colorimetry.matrix == GST_VIDEO_COLOR_MATRIX_RGB)
+    return FALSE;
+
+  if (GST_VIDEO_FORMAT_INFO_IS_YUV (finfo) &&
+      info->colorimetry.matrix == GST_VIDEO_COLOR_MATRIX_UNKNOWN)
+    return FALSE;
+
+  return TRUE;
+}
+
 /**
  * gst_video_info_set_format:
  * @info: a #GstVideoInfo
@@ -81,38 +202,25 @@
  *
  * Set the default info for a video frame of @format and @width and @height.
  *
- * Note: This initializes @info first, no values are preserved.
+ * Note: This initializes @info first, no values are preserved. This function
+ * does not set the offsets correctly for interlaced vertically
+ * subsampled formats.
  */
 void
 gst_video_info_set_format (GstVideoInfo * info, GstVideoFormat format,
     guint width, guint height)
 {
-  const GstVideoFormatInfo *finfo;
-
   g_return_if_fail (info != NULL);
   g_return_if_fail (format != GST_VIDEO_FORMAT_UNKNOWN);
 
   gst_video_info_init (info);
 
-  finfo = gst_video_format_get_info (format);
-
-  info->flags = 0;
-  info->finfo = finfo;
+  info->finfo = gst_video_format_get_info (format);
   info->width = width;
   info->height = height;
+  info->views = 1;
 
-  if (GST_VIDEO_FORMAT_INFO_IS_YUV (finfo)) {
-    if (height > 576)
-      info->colorimetry = default_color[DEFAULT_YUV_HD];
-    else
-      info->colorimetry = default_color[DEFAULT_YUV_SD];
-  } else if (GST_VIDEO_FORMAT_INFO_IS_GRAY (finfo)) {
-    info->colorimetry = default_color[DEFAULT_GRAY];
-  } else if (GST_VIDEO_FORMAT_INFO_IS_RGB (finfo)) {
-    info->colorimetry = default_color[DEFAULT_RGB];
-  } else {
-    info->colorimetry = default_color[DEFAULT_UNKNOWN];
-  }
+  set_default_colorimetry (info);
 
   fill_planes (info);
 }
@@ -124,8 +232,18 @@
   "fields"
 };
 
-static const gchar *
-gst_interlace_mode_to_string (GstVideoInterlaceMode mode)
+/**
+ * gst_video_interlace_mode_to_string:
+ * @mode: a #GstVideoInterlaceMode
+ *
+ * Convert @mode to its string representation.
+ *
+ * Returns: @mode as a string or NULL if @mode in invalid.
+ *
+ * Since: 1.6
+ */
+const gchar *
+gst_video_interlace_mode_to_string (GstVideoInterlaceMode mode)
 {
   if (((guint) mode) >= G_N_ELEMENTS (interlace_mode))
     return NULL;
@@ -133,8 +251,20 @@
   return interlace_mode[mode];
 }
 
-static GstVideoInterlaceMode
-gst_interlace_mode_from_string (const gchar * mode)
+/**
+ * gst_video_interlace_mode_from_string:
+ * @mode: a mode
+ *
+ * Convert @mode to a #GstVideoInterlaceMode
+ *
+ * Returns: the #GstVideoInterlaceMode of @mode or
+ *    #GST_VIDEO_INTERLACE_MODE_PROGRESSIVE when @mode is not a valid
+ *    string representation for a #GstVideoInterlaceMode.
+ *
+ * Since: 1.6
+ */
+GstVideoInterlaceMode
+gst_video_interlace_mode_from_string (const gchar * mode)
 {
   gint i;
   for (i = 0; i < G_N_ELEMENTS (interlace_mode); i++) {
@@ -159,7 +289,7 @@
   GstStructure *structure;
   const gchar *s;
   GstVideoFormat format = GST_VIDEO_FORMAT_UNKNOWN;
-  gint width = 0, height = 0, views;
+  gint width = 0, height = 0;
   gint fps_n, fps_d;
   gint par_n, par_d;
 
@@ -194,7 +324,11 @@
       format != GST_VIDEO_FORMAT_ENCODED)
     goto no_height;
 
-  gst_video_info_set_format (info, format, width, height);
+  gst_video_info_init (info);
+
+  info->finfo = gst_video_format_get_info (format);
+  info->width = width;
+  info->height = height;
 
   if (gst_structure_get_fraction (structure, "framerate", &fps_n, &fps_d)) {
     if (fps_n == 0) {
@@ -211,24 +345,6 @@
     info->fps_d = 1;
   }
 
-  if ((s = gst_structure_get_string (structure, "interlace-mode")))
-    info->interlace_mode = gst_interlace_mode_from_string (s);
-  else
-    info->interlace_mode = GST_VIDEO_INTERLACE_MODE_PROGRESSIVE;
-
-  if (gst_structure_get_int (structure, "views", &views))
-    info->views = views;
-  else
-    info->views = 1;
-
-  if ((s = gst_structure_get_string (structure, "chroma-site")))
-    info->chroma_site = gst_video_chroma_from_string (s);
-  else
-    info->chroma_site = GST_VIDEO_CHROMA_SITE_UNKNOWN;
-
-  if ((s = gst_structure_get_string (structure, "colorimetry")))
-    gst_video_colorimetry_from_string (&info->colorimetry, s);
-
   if (gst_structure_get_fraction (structure, "pixel-aspect-ratio",
           &par_n, &par_d)) {
     info->par_n = par_n;
@@ -237,6 +353,51 @@
     info->par_n = 1;
     info->par_d = 1;
   }
+
+  if ((s = gst_structure_get_string (structure, "interlace-mode")))
+    info->interlace_mode = gst_video_interlace_mode_from_string (s);
+  else
+    info->interlace_mode = GST_VIDEO_INTERLACE_MODE_PROGRESSIVE;
+
+  {
+    if ((s = gst_structure_get_string (structure, "multiview-mode")))
+      GST_VIDEO_INFO_MULTIVIEW_MODE (info) =
+          gst_video_multiview_mode_from_caps_string (s);
+    else
+      GST_VIDEO_INFO_MULTIVIEW_MODE (info) = GST_VIDEO_MULTIVIEW_MODE_NONE;
+
+    gst_structure_get_flagset (structure, "multiview-flags",
+        &GST_VIDEO_INFO_MULTIVIEW_FLAGS (info), NULL);
+
+    if (!gst_structure_get_int (structure, "views", &info->views))
+      info->views = 1;
+
+    /* At one point, I tried normalising the half-aspect flag here,
+     * but it behaves weird for GstVideoInfo operations other than
+     * directly converting to/from caps - sometimes causing the
+     * PAR to be doubled/halved too many times */
+  }
+
+  if ((s = gst_structure_get_string (structure, "chroma-site")))
+    info->chroma_site = gst_video_chroma_from_string (s);
+  else
+    info->chroma_site = GST_VIDEO_CHROMA_SITE_UNKNOWN;
+
+  if ((s = gst_structure_get_string (structure, "colorimetry"))) {
+    if (!gst_video_colorimetry_from_string (&info->colorimetry, s)) {
+      GST_WARNING ("unparsable colorimetry, using default");
+      set_default_colorimetry (info);
+    } else if (!validate_colorimetry (info)) {
+      GST_WARNING ("invalid colorimetry, using default");
+      set_default_colorimetry (info);
+    }
+  } else {
+    GST_DEBUG ("no colorimetry, using default");
+    set_default_colorimetry (info);
+  }
+
+  fill_planes (info);
+
   return TRUE;
 
   /* ERROR */
@@ -303,6 +464,19 @@
     return FALSE;
   if (GST_VIDEO_INFO_FPS_D (info) != GST_VIDEO_INFO_FPS_D (other))
     return FALSE;
+  if (!gst_video_colorimetry_is_equal (&GST_VIDEO_INFO_COLORIMETRY (info),
+          &GST_VIDEO_INFO_COLORIMETRY (other)))
+    return FALSE;
+  if (GST_VIDEO_INFO_CHROMA_SITE (info) != GST_VIDEO_INFO_CHROMA_SITE (other))
+    return FALSE;
+  if (GST_VIDEO_INFO_MULTIVIEW_MODE (info) !=
+      GST_VIDEO_INFO_MULTIVIEW_MODE (other))
+    return FALSE;
+  if (GST_VIDEO_INFO_MULTIVIEW_FLAGS (info) !=
+      GST_VIDEO_INFO_MULTIVIEW_FLAGS (other))
+    return FALSE;
+  if (GST_VIDEO_INFO_VIEWS (info) != GST_VIDEO_INFO_VIEWS (other))
+    return FALSE;
 
   for (i = 0; i < info->finfo->n_planes; i++) {
     if (info->stride[i] != other->stride[i])
@@ -328,6 +502,7 @@
   GstCaps *caps;
   const gchar *format;
   gchar *color;
+  gint par_n, par_d;
 
   g_return_val_if_fail (info != NULL, NULL);
   g_return_val_if_fail (info->finfo != NULL, NULL);
@@ -339,11 +514,52 @@
   caps = gst_caps_new_simple ("video/x-raw",
       "format", G_TYPE_STRING, format,
       "width", G_TYPE_INT, info->width,
-      "height", G_TYPE_INT, info->height,
-      "pixel-aspect-ratio", GST_TYPE_FRACTION, info->par_n, info->par_d, NULL);
+      "height", G_TYPE_INT, info->height, NULL);
+
+  par_n = info->par_n;
+  par_d = info->par_d;
 
   gst_caps_set_simple (caps, "interlace-mode", G_TYPE_STRING,
-      gst_interlace_mode_to_string (info->interlace_mode), NULL);
+      gst_video_interlace_mode_to_string (info->interlace_mode), NULL);
+
+  if (GST_VIDEO_INFO_MULTIVIEW_MODE (info) != GST_VIDEO_MULTIVIEW_MODE_NONE) {
+    const gchar *caps_str = NULL;
+
+    /* If the half-aspect flag is set, applying it into the PAR of the
+     * resulting caps now seems safe, and helps with automatic behaviour
+     * in elements that aren't explicitly multiview aware */
+    if (GST_VIDEO_INFO_MULTIVIEW_FLAGS (info) &
+        GST_VIDEO_MULTIVIEW_FLAGS_HALF_ASPECT) {
+      GST_VIDEO_INFO_MULTIVIEW_FLAGS (info) &=
+          ~GST_VIDEO_MULTIVIEW_FLAGS_HALF_ASPECT;
+      switch (GST_VIDEO_INFO_MULTIVIEW_MODE (info)) {
+        case GST_VIDEO_MULTIVIEW_MODE_SIDE_BY_SIDE:
+        case GST_VIDEO_MULTIVIEW_MODE_SIDE_BY_SIDE_QUINCUNX:
+        case GST_VIDEO_MULTIVIEW_MODE_COLUMN_INTERLEAVED:
+        case GST_VIDEO_MULTIVIEW_MODE_CHECKERBOARD:
+          par_n *= 2;           /* double the width / half the height */
+          break;
+        case GST_VIDEO_MULTIVIEW_MODE_ROW_INTERLEAVED:
+        case GST_VIDEO_MULTIVIEW_MODE_TOP_BOTTOM:
+          par_d *= 2;           /* half the width / double the height */
+          break;
+        default:
+          break;
+      }
+    }
+
+    caps_str =
+        gst_video_multiview_mode_to_caps_string (GST_VIDEO_INFO_MULTIVIEW_MODE
+        (info));
+    if (caps_str != NULL) {
+      gst_caps_set_simple (caps, "multiview-mode", G_TYPE_STRING,
+          caps_str, "multiview-flags", GST_TYPE_VIDEO_MULTIVIEW_FLAGSET,
+          GST_VIDEO_INFO_MULTIVIEW_FLAGS (info), GST_FLAG_SET_MASK_EXACT, NULL);
+    }
+  }
+
+  gst_caps_set_simple (caps, "pixel-aspect-ratio",
+      GST_TYPE_FRACTION, par_n, par_d, NULL);
 
   if (info->chroma_site != GST_VIDEO_CHROMA_SITE_UNKNOWN)
     gst_caps_set_simple (caps, "chroma-site", G_TYPE_STRING,
@@ -373,7 +589,7 @@
 static int
 fill_planes (GstVideoInfo * info)
 {
-  gsize width, height;
+  gsize width, height, cr_h;
 
   width = (gsize) info->width;
   height = (gsize) info->height;
@@ -467,10 +683,11 @@
       info->stride[2] = info->stride[1];
       info->offset[0] = 0;
       info->offset[1] = info->stride[0] * GST_ROUND_UP_2 (height);
-      info->offset[2] = info->offset[1] +
-          info->stride[1] * (GST_ROUND_UP_2 (height) / 2);
-      info->size = info->offset[2] +
-          info->stride[2] * (GST_ROUND_UP_2 (height) / 2);
+      cr_h = GST_ROUND_UP_2 (height) / 2;
+      if (GST_VIDEO_INFO_IS_INTERLACED (info))
+        cr_h = GST_ROUND_UP_2 (cr_h);
+      info->offset[2] = info->offset[1] + info->stride[1] * cr_h;
+      info->size = info->offset[2] + info->stride[2] * cr_h;
       break;
     case GST_VIDEO_FORMAT_Y41B:
       info->stride[0] = GST_ROUND_UP_4 (width);
@@ -508,9 +725,13 @@
       info->stride[1] = info->stride[0];
       info->offset[0] = 0;
       info->offset[1] = info->stride[0] * GST_ROUND_UP_2 (height);
-      info->size = info->stride[0] * GST_ROUND_UP_2 (height) * 3 / 2;
+      cr_h = GST_ROUND_UP_2 (height) / 2;
+      if (GST_VIDEO_INFO_IS_INTERLACED (info))
+        cr_h = GST_ROUND_UP_2 (cr_h);
+      info->size = info->offset[1] + info->stride[0] * cr_h;
       break;
     case GST_VIDEO_FORMAT_NV16:
+    case GST_VIDEO_FORMAT_NV61:
       info->stride[0] = GST_ROUND_UP_4 (width);
       info->stride[1] = info->stride[0];
       info->offset[0] = 0;
@@ -531,10 +752,11 @@
       info->stride[3] = info->stride[0];
       info->offset[0] = 0;
       info->offset[1] = info->stride[0] * GST_ROUND_UP_2 (height);
-      info->offset[2] = info->offset[1] +
-          info->stride[1] * (GST_ROUND_UP_2 (height) / 2);
-      info->offset[3] = info->offset[2] +
-          info->stride[2] * (GST_ROUND_UP_2 (height) / 2);
+      cr_h = GST_ROUND_UP_2 (height) / 2;
+      if (GST_VIDEO_INFO_IS_INTERLACED (info))
+        cr_h = GST_ROUND_UP_2 (cr_h);
+      info->offset[2] = info->offset[1] + info->stride[1] * cr_h;
+      info->offset[3] = info->offset[2] + info->stride[2] * cr_h;
       info->size = info->offset[3] + info->stride[0] * GST_ROUND_UP_2 (height);
       break;
     case GST_VIDEO_FORMAT_YUV9:
@@ -544,10 +766,11 @@
       info->stride[2] = info->stride[1];
       info->offset[0] = 0;
       info->offset[1] = info->stride[0] * height;
-      info->offset[2] = info->offset[1] +
-          info->stride[1] * (GST_ROUND_UP_4 (height) / 4);
-      info->size = info->offset[2] +
-          info->stride[2] * (GST_ROUND_UP_4 (height) / 4);
+      cr_h = GST_ROUND_UP_4 (height) / 4;
+      if (GST_VIDEO_INFO_IS_INTERLACED (info))
+        cr_h = GST_ROUND_UP_2 (cr_h);
+      info->offset[2] = info->offset[1] + info->stride[1] * cr_h;
+      info->size = info->offset[2] + info->stride[2] * cr_h;
       break;
     case GST_VIDEO_FORMAT_I420_10LE:
     case GST_VIDEO_FORMAT_I420_10BE:
@@ -556,10 +779,11 @@
       info->stride[2] = info->stride[1];
       info->offset[0] = 0;
       info->offset[1] = info->stride[0] * GST_ROUND_UP_2 (height);
-      info->offset[2] = info->offset[1] +
-          info->stride[1] * (GST_ROUND_UP_2 (height) / 2);
-      info->size = info->offset[2] +
-          info->stride[2] * (GST_ROUND_UP_2 (height) / 2);
+      cr_h = GST_ROUND_UP_2 (height) / 2;
+      if (GST_VIDEO_INFO_IS_INTERLACED (info))
+        cr_h = GST_ROUND_UP_2 (cr_h);
+      info->offset[2] = info->offset[1] + info->stride[1] * cr_h;
+      info->size = info->offset[2] + info->stride[2] * cr_h;
       break;
     case GST_VIDEO_FORMAT_I422_10LE:
     case GST_VIDEO_FORMAT_I422_10BE:
@@ -596,6 +820,48 @@
       info->size = info->offset[1] +
           GST_ROUND_UP_128 (width) * GST_ROUND_UP_64 (height) / 2;
       break;
+    case GST_VIDEO_FORMAT_A420_10LE:
+    case GST_VIDEO_FORMAT_A420_10BE:
+      info->stride[0] = GST_ROUND_UP_4 (width * 2);
+      info->stride[1] = GST_ROUND_UP_4 (width);
+      info->stride[2] = info->stride[1];
+      info->stride[3] = info->stride[0];
+      info->offset[0] = 0;
+      info->offset[1] = info->stride[0] * GST_ROUND_UP_2 (height);
+      cr_h = GST_ROUND_UP_2 (height) / 2;
+      if (GST_VIDEO_INFO_IS_INTERLACED (info))
+        cr_h = GST_ROUND_UP_2 (cr_h);
+      info->offset[2] = info->offset[1] + info->stride[1] * cr_h;
+      info->offset[3] = info->offset[2] + info->stride[2] * cr_h;
+      info->size = info->offset[3] + info->stride[0] * GST_ROUND_UP_2 (height);
+      break;
+    case GST_VIDEO_FORMAT_A422_10LE:
+    case GST_VIDEO_FORMAT_A422_10BE:
+      info->stride[0] = GST_ROUND_UP_4 (width * 2);
+      info->stride[1] = GST_ROUND_UP_4 (width);
+      info->stride[2] = info->stride[1];
+      info->stride[3] = info->stride[0];
+      info->offset[0] = 0;
+      info->offset[1] = info->stride[0] * GST_ROUND_UP_2 (height);
+      info->offset[2] = info->offset[1] +
+          info->stride[1] * GST_ROUND_UP_2 (height);
+      info->offset[3] =
+          info->offset[2] + info->stride[2] * GST_ROUND_UP_2 (height);
+      info->size = info->offset[3] + info->stride[0] * GST_ROUND_UP_2 (height);
+      break;
+    case GST_VIDEO_FORMAT_A444_10LE:
+    case GST_VIDEO_FORMAT_A444_10BE:
+      info->stride[0] = GST_ROUND_UP_4 (width * 2);
+      info->stride[1] = info->stride[0];
+      info->stride[2] = info->stride[0];
+      info->stride[3] = info->stride[0];
+      info->offset[0] = 0;
+      info->offset[1] = info->stride[0] * height;
+      info->offset[2] = info->offset[1] * 2;
+      info->offset[3] = info->offset[1] * 3;
+      info->size = info->stride[0] * height * 4;
+      break;
+
     case GST_VIDEO_FORMAT_ENCODED:
       break;
     case GST_VIDEO_FORMAT_UNKNOWN:
diff --git a/gst-libs/gst/video/video-info.h b/gst-libs/gst/video/video-info.h
index 2409816..102328f 100644
--- a/gst-libs/gst/video/video-info.h
+++ b/gst-libs/gst/video/video-info.h
@@ -55,6 +55,162 @@
   GST_VIDEO_INTERLACE_MODE_FIELDS
 } GstVideoInterlaceMode;
 
+const gchar *          gst_video_interlace_mode_to_string    (GstVideoInterlaceMode mode);
+GstVideoInterlaceMode  gst_video_interlace_mode_from_string  (const gchar * mode);
+
+/**
+ * GstVideoMultiviewMode:
+ * @GST_VIDEO_MULTIVIEW_MODE_NONE: A special value indicating
+ * no multiview information. Used in GstVideoInfo and other places to
+ * indicate that no specific multiview handling has been requested or
+ * provided. This value is never carried on caps.
+ * @GST_VIDEO_MULTIVIEW_MODE_MONO: All frames are monoscopic.
+ * @GST_VIDEO_MULTIVIEW_MODE_LEFT: All frames represent a left-eye view.
+ * @GST_VIDEO_MULTIVIEW_MODE_RIGHT: All frames represent a right-eye view.
+ * @GST_VIDEO_MULTIVIEW_MODE_SIDE_BY_SIDE: Left and right eye views are
+ * provided in the left and right half of the frame respectively.
+ * @GST_VIDEO_MULTIVIEW_MODE_SIDE_BY_SIDE_QUINCUNX: Left and right eye
+ * views are provided in the left and right half of the frame, but
+ * have been sampled using quincunx method, with half-pixel offset
+ * between the 2 views.
+ * @GST_VIDEO_MULTIVIEW_MODE_COLUMN_INTERLEAVED: Alternating vertical
+ * columns of pixels represent the left and right eye view respectively.
+ * @GST_VIDEO_MULTIVIEW_MODE_ROW_INTERLEAVED: Alternating horizontal
+ * rows of pixels represent the left and right eye view respectively.
+ * @GST_VIDEO_MULTIVIEW_MODE_TOP_BOTTOM: The top half of the frame
+ * contains the left eye, and the bottom half the right eye.
+ * @GST_VIDEO_MULTIVIEW_MODE_CHECKERBOARD: Pixels are arranged with
+ * alternating pixels representing left and right eye views in a
+ * checkerboard fashion.
+ * @GST_VIDEO_MULTIVIEW_MODE_FRAME_BY_FRAME: Left and right eye views
+ * are provided in separate frames alternately.
+ * @GST_VIDEO_MULTIVIEW_MODE_MULTIVIEW_FRAME_BY_FRAME: Multiple
+ * independent views are provided in separate frames in sequence.
+ * This method only applies to raw video buffers at the moment.
+ * Specific view identification is via the #GstVideoMultiviewMeta
+ * and #GstVideoMeta(s) on raw video buffers.
+ * @GST_VIDEO_MULTIVIEW_MODE_SEPARATED: Multiple views are
+ * provided as separate #GstMemory framebuffers attached to each
+ * #GstBuffer, described by the #GstVideoMultiviewMeta
+ * and #GstVideoMeta(s)
+ *
+ * All possible stereoscopic 3D and multiview representations.
+ * In conjunction with #GstVideoMultiviewFlags, describes how
+ * multiview content is being transported in the stream.
+ */
+typedef enum {
+  GST_VIDEO_MULTIVIEW_MODE_NONE = -1,
+  GST_VIDEO_MULTIVIEW_MODE_MONO = 0,
+  /* Single view modes */
+  GST_VIDEO_MULTIVIEW_MODE_LEFT,
+  GST_VIDEO_MULTIVIEW_MODE_RIGHT,
+  /* Stereo view modes */
+  GST_VIDEO_MULTIVIEW_MODE_SIDE_BY_SIDE,
+  GST_VIDEO_MULTIVIEW_MODE_SIDE_BY_SIDE_QUINCUNX,
+  GST_VIDEO_MULTIVIEW_MODE_COLUMN_INTERLEAVED,
+  GST_VIDEO_MULTIVIEW_MODE_ROW_INTERLEAVED,
+  GST_VIDEO_MULTIVIEW_MODE_TOP_BOTTOM,
+  GST_VIDEO_MULTIVIEW_MODE_CHECKERBOARD,
+  /* Padding for new frame packing modes */
+
+  GST_VIDEO_MULTIVIEW_MODE_FRAME_BY_FRAME = 32,
+  /* Multivew mode(s) */
+  GST_VIDEO_MULTIVIEW_MODE_MULTIVIEW_FRAME_BY_FRAME,
+  GST_VIDEO_MULTIVIEW_MODE_SEPARATED
+  /* future expansion for annotated modes */
+} GstVideoMultiviewMode;
+
+/**
+ * GstVideoMultiviewFramePacking:
+ * @GST_VIDEO_MULTIVIEW_FRAME_PACKING_NONE: A special value indicating
+ * no frame packing info.
+ * @GST_VIDEO_MULTIVIEW_FRAME_PACKING_MONO: All frames are monoscopic.
+ * @GST_VIDEO_MULTIVIEW_FRAME_PACKING_LEFT: All frames represent a left-eye view.
+ * @GST_VIDEO_MULTIVIEW_FRAME_PACKING_RIGHT: All frames represent a right-eye view.
+ * @GST_VIDEO_MULTIVIEW_FRAME_PACKING_SIDE_BY_SIDE: Left and right eye views are
+ * provided in the left and right half of the frame respectively.
+ * @GST_VIDEO_MULTIVIEW_FRAME_PACKING_SIDE_BY_SIDE_QUINCUNX: Left and right eye
+ * views are provided in the left and right half of the frame, but
+ * have been sampled using quincunx method, with half-pixel offset
+ * between the 2 views.
+ * @GST_VIDEO_MULTIVIEW_FRAME_PACKING_COLUMN_INTERLEAVED: Alternating vertical
+ * columns of pixels represent the left and right eye view respectively.
+ * @GST_VIDEO_MULTIVIEW_FRAME_PACKING_ROW_INTERLEAVED: Alternating horizontal
+ * rows of pixels represent the left and right eye view respectively.
+ * @GST_VIDEO_MULTIVIEW_FRAME_PACKING_TOP_BOTTOM: The top half of the frame
+ * contains the left eye, and the bottom half the right eye.
+ * @GST_VIDEO_MULTIVIEW_FRAME_PACKING_CHECKERBOARD: Pixels are arranged with
+ * alternating pixels representing left and right eye views in a
+ * checkerboard fashion.
+ *
+ * #GstVideoMultiviewFramePacking represents the subset of #GstVideoMultiviewMode
+ * values that can be applied to any video frame without needing extra metadata.
+ * It can be used by elements that provide a property to override the
+ * multiview interpretation of a video stream when the video doesn't contain
+ * any markers.
+ *
+ * This enum is used (for example) on playbin, to re-interpret a played
+ * video stream as a stereoscopic video. The individual enum values are
+ * equivalent to and have the same value as the matching #GstVideoMultiviewMode.
+ *
+ */
+typedef enum {
+  GST_VIDEO_MULTIVIEW_FRAME_PACKING_NONE = GST_VIDEO_MULTIVIEW_MODE_NONE,
+  GST_VIDEO_MULTIVIEW_FRAME_PACKING_MONO = GST_VIDEO_MULTIVIEW_MODE_MONO,
+  GST_VIDEO_MULTIVIEW_FRAME_PACKING_LEFT = GST_VIDEO_MULTIVIEW_MODE_LEFT,
+  GST_VIDEO_MULTIVIEW_FRAME_PACKING_RIGHT = GST_VIDEO_MULTIVIEW_MODE_RIGHT,
+  GST_VIDEO_MULTIVIEW_FRAME_PACKING_SIDE_BY_SIDE = GST_VIDEO_MULTIVIEW_MODE_SIDE_BY_SIDE,
+  GST_VIDEO_MULTIVIEW_FRAME_PACKING_SIDE_BY_SIDE_QUINCUNX = GST_VIDEO_MULTIVIEW_MODE_SIDE_BY_SIDE_QUINCUNX,
+  GST_VIDEO_MULTIVIEW_FRAME_PACKING_COLUMN_INTERLEAVED = GST_VIDEO_MULTIVIEW_MODE_COLUMN_INTERLEAVED,
+  GST_VIDEO_MULTIVIEW_FRAME_PACKING_ROW_INTERLEAVED = GST_VIDEO_MULTIVIEW_MODE_ROW_INTERLEAVED,
+  GST_VIDEO_MULTIVIEW_FRAME_PACKING_TOP_BOTTOM = GST_VIDEO_MULTIVIEW_MODE_TOP_BOTTOM,
+  GST_VIDEO_MULTIVIEW_FRAME_PACKING_CHECKERBOARD = GST_VIDEO_MULTIVIEW_MODE_CHECKERBOARD
+} GstVideoMultiviewFramePacking;
+
+#define GST_VIDEO_MULTIVIEW_MAX_FRAME_PACKING GST_VIDEO_MULTIVIEW_FRAME_PACKING_CHECKERBOARD
+
+/**
+ * GstVideoMultiviewFlags:
+ * @GST_VIDEO_MULTIVIEW_FLAGS_NONE: No flags
+ * @GST_VIDEO_MULTIVIEW_FLAGS_RIGHT_VIEW_FIRST: For stereo streams, the
+ *     normal arrangement of left and right views is reversed.
+ * @GST_VIDEO_MULTIVIEW_FLAGS_LEFT_FLIPPED: The left view is vertically
+ *     mirrored.
+ * @GST_VIDEO_MULTIVIEW_FLAGS_LEFT_FLOPPED: The left view is horizontally
+ *     mirrored.
+ * @GST_VIDEO_MULTIVIEW_FLAGS_RIGHT_FLIPPED: The right view is
+ *     vertically mirrored.
+ * @GST_VIDEO_MULTIVIEW_FLAGS_RIGHT_FLOPPED: The right view is
+ *     horizontally mirrored.
+ * @GST_VIDEO_MULTIVIEW_FLAGS_HALF_ASPECT: For frame-packed
+ *     multiview modes, indicates that the individual
+ *     views have been encoded with half the true width or height
+ *     and should be scaled back up for display. This flag
+ *     is used for overriding input layout interpretation
+ *     by adjusting pixel-aspect-ratio.
+ *     For side-by-side, column interleaved or checkerboard packings, the
+ *     pixel width will be doubled. For row interleaved and top-bottom
+ *     encodings, pixel height will be doubled.
+ * @GST_VIDEO_MULTIVIEW_FLAGS_MIXED_MONO: The video stream contains both
+ *     mono and multiview portions, signalled on each buffer by the
+ *     absence or presence of the @GST_VIDEO_BUFFER_FLAG_MULTIPLE_VIEW
+ *     buffer flag.
+ *
+ * GstVideoMultiviewFlags are used to indicate extra properties of a
+ * stereo/multiview stream beyond the frame layout and buffer mapping
+ * that is conveyed in the #GstMultiviewMode.
+ */
+typedef enum {
+  GST_VIDEO_MULTIVIEW_FLAGS_NONE             = 0,
+  GST_VIDEO_MULTIVIEW_FLAGS_RIGHT_VIEW_FIRST = (1 << 0),
+  GST_VIDEO_MULTIVIEW_FLAGS_LEFT_FLIPPED     = (1 << 1),
+  GST_VIDEO_MULTIVIEW_FLAGS_LEFT_FLOPPED     = (1 << 2),
+  GST_VIDEO_MULTIVIEW_FLAGS_RIGHT_FLIPPED    = (1 << 3),
+  GST_VIDEO_MULTIVIEW_FLAGS_RIGHT_FLOPPED    = (1 << 4),
+  GST_VIDEO_MULTIVIEW_FLAGS_HALF_ASPECT      = (1 << 14),
+  GST_VIDEO_MULTIVIEW_FLAGS_MIXED_MONO       = (1 << 15)
+} GstVideoMultiviewFlags;
+
 /**
  * GstVideoFlags:
  * @GST_VIDEO_FLAG_NONE: no flags
@@ -88,6 +244,8 @@
  * @fps_d: the framerate demnominator
  * @offset: offsets of the planes
  * @stride: strides of the planes
+ * @multiview_mode: delivery mode for multiple views. (Since 1.6)
+ * @multiview_flags: flags for multiple views configuration (Since 1.6)
  *
  * Information describing image properties. This information can be filled
  * in from GstCaps with gst_video_info_from_caps(). The information is also used
@@ -117,10 +275,21 @@
   gsize                     offset[GST_VIDEO_MAX_PLANES];
   gint                      stride[GST_VIDEO_MAX_PLANES];
 
-  /*< private >*/
-  gpointer _gst_reserved[GST_PADDING];
+  /* Union preserves padded struct size for backwards compat
+   * Consumer code should use the accessor macros for fields */
+  union {
+    struct {
+      GstVideoMultiviewMode     multiview_mode;
+      GstVideoMultiviewFlags    multiview_flags;
+    } abi;
+    /*< private >*/
+    gpointer _gst_reserved[GST_PADDING];
+  } ABI;
 };
 
+#define GST_TYPE_VIDEO_INFO              (gst_video_info_get_type ())
+GType gst_video_info_get_type            (void);
+
 /* general info */
 #define GST_VIDEO_INFO_FORMAT(i)         (GST_VIDEO_FORMAT_INFO_FORMAT((i)->finfo))
 #define GST_VIDEO_INFO_NAME(i)           (GST_VIDEO_FORMAT_INFO_NAME((i)->finfo))
@@ -141,6 +310,12 @@
 #define GST_VIDEO_INFO_FPS_N(i)          ((i)->fps_n)
 #define GST_VIDEO_INFO_FPS_D(i)          ((i)->fps_d)
 
+#define GST_VIDEO_INFO_COLORIMETRY(i) ((i)->colorimetry)
+#define GST_VIDEO_INFO_CHROMA_SITE(i) ((i)->chroma_site)
+
+#define GST_VIDEO_INFO_MULTIVIEW_MODE(i)          ((i)->ABI.abi.multiview_mode)
+#define GST_VIDEO_INFO_MULTIVIEW_FLAGS(i)          ((i)->ABI.abi.multiview_flags)
+
 /* dealing with GstVideoInfo flags */
 #define GST_VIDEO_INFO_FLAG_IS_SET(i,flag) ((GST_VIDEO_INFO_FLAGS(i) & (flag)) == (flag))
 #define GST_VIDEO_INFO_FLAG_SET(i,flag)    (GST_VIDEO_INFO_FLAGS(i) |= (flag))
@@ -163,26 +338,29 @@
 #define GST_VIDEO_INFO_COMP_PSTRIDE(i,c) GST_VIDEO_FORMAT_INFO_PSTRIDE((i)->finfo,(c))
 #define GST_VIDEO_INFO_COMP_POFFSET(i,c) GST_VIDEO_FORMAT_INFO_POFFSET((i)->finfo,(c))
 
-void         gst_video_info_init        (GstVideoInfo *info);
+GstVideoInfo * gst_video_info_new         (void);
+void           gst_video_info_init        (GstVideoInfo *info);
+GstVideoInfo * gst_video_info_copy        (const GstVideoInfo *info);
+void           gst_video_info_free        (GstVideoInfo *info);
 
-void         gst_video_info_set_format  (GstVideoInfo *info, GstVideoFormat format,
-                                         guint width, guint height);
+void           gst_video_info_set_format  (GstVideoInfo *info, GstVideoFormat format,
+                                           guint width, guint height);
 
-gboolean     gst_video_info_from_caps   (GstVideoInfo *info, const GstCaps  * caps);
+gboolean       gst_video_info_from_caps   (GstVideoInfo *info, const GstCaps  * caps);
 
-GstCaps *    gst_video_info_to_caps     (GstVideoInfo *info);
+GstCaps *      gst_video_info_to_caps     (GstVideoInfo *info);
 
-gboolean     gst_video_info_convert     (GstVideoInfo *info,
-                                         GstFormat     src_format,
-                                         gint64        src_value,
-                                         GstFormat     dest_format,
-                                         gint64       *dest_value);
-gboolean     gst_video_info_is_equal    (const GstVideoInfo *info,
-					 const GstVideoInfo *other);
+gboolean       gst_video_info_convert     (GstVideoInfo *info,
+                                           GstFormat     src_format,
+                                           gint64        src_value,
+                                           GstFormat     dest_format,
+                                           gint64       *dest_value);
+gboolean       gst_video_info_is_equal    (const GstVideoInfo *info,
+                                           const GstVideoInfo *other);
 
 #include <gst/video/video.h>
 
-void         gst_video_info_align       (GstVideoInfo * info, GstVideoAlignment * align);
+void           gst_video_info_align       (GstVideoInfo * info, GstVideoAlignment * align);
 
 
 G_END_DECLS
diff --git a/gst-libs/gst/video/video-multiview.c b/gst-libs/gst/video/video-multiview.c
new file mode 100644
index 0000000..2b2a5bc
--- /dev/null
+++ b/gst-libs/gst/video/video-multiview.c
@@ -0,0 +1,493 @@
+/* GStreamer
+ * Copyright (C) <2015> Jan Schmidt <jan@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 "video.h"
+
+GType
+gst_video_multiview_flagset_get_type (void)
+{
+  static volatile GType type = 0;
+
+  if (g_once_init_enter (&type)) {
+    GType _type = gst_flagset_register (GST_TYPE_VIDEO_MULTIVIEW_FLAGS);
+    g_once_init_leave (&type, _type);
+  }
+  return type;
+}
+
+
+/* Caps mnemonics for the various multiview representations */
+
+static const struct mview_map_t
+{
+  const gchar *caps_repr;
+  GstVideoMultiviewMode mode;
+} gst_multiview_modes[] = {
+  {
+  "mono", GST_VIDEO_MULTIVIEW_MODE_MONO}, {
+  "left", GST_VIDEO_MULTIVIEW_MODE_LEFT}, {
+  "right", GST_VIDEO_MULTIVIEW_MODE_RIGHT}, {
+  "side-by-side", GST_VIDEO_MULTIVIEW_MODE_SIDE_BY_SIDE}, {
+  "side-by-side-quincunx", GST_VIDEO_MULTIVIEW_MODE_SIDE_BY_SIDE_QUINCUNX}, {
+  "column-interleaved", GST_VIDEO_MULTIVIEW_MODE_COLUMN_INTERLEAVED}, {
+  "row-interleaved", GST_VIDEO_MULTIVIEW_MODE_ROW_INTERLEAVED}, {
+  "top-bottom", GST_VIDEO_MULTIVIEW_MODE_TOP_BOTTOM}, {
+  "checkerboard", GST_VIDEO_MULTIVIEW_MODE_CHECKERBOARD}, {
+  "frame-by-frame", GST_VIDEO_MULTIVIEW_MODE_FRAME_BY_FRAME}, {
+  "multiview-frame-by-frame",
+        GST_VIDEO_MULTIVIEW_MODE_MULTIVIEW_FRAME_BY_FRAME}, {
+  "separated", GST_VIDEO_MULTIVIEW_MODE_SEPARATED}
+};
+
+/**
+ * gst_video_multiview_mode_to_caps_string:
+ * @mview_mode: A #GstVideoMultiviewMode value
+ *
+ * Returns: The caps string representation of the mode, or NULL if invalid.
+ *
+ * Given a #GstVideoMultiviewMode returns the multiview-mode caps string
+ * for insertion into a caps structure
+ *
+ * Since: 1.6
+ */
+const gchar *
+gst_video_multiview_mode_to_caps_string (GstVideoMultiviewMode mview_mode)
+{
+  gint i;
+
+  for (i = 0; i < G_N_ELEMENTS (gst_multiview_modes); i++) {
+    if (gst_multiview_modes[i].mode == mview_mode) {
+      return gst_multiview_modes[i].caps_repr;
+    }
+  }
+
+  return NULL;
+}
+
+/**
+ * gst_video_multiview_mode_from_caps_string:
+ * @caps_mview_mode: multiview-mode field string from caps
+ *
+ * Returns: The #GstVideoMultiviewMode value
+ *
+ * Given a string from a caps multiview-mode field,
+ * output the corresponding #GstVideoMultiviewMode
+ * or #GST_VIDEO_MULTIVIEW_MODE_NONE
+ *
+ * Since: 1.6
+ */
+GstVideoMultiviewMode
+gst_video_multiview_mode_from_caps_string (const gchar * caps_mview_mode)
+{
+  gint i;
+
+  for (i = 0; i < G_N_ELEMENTS (gst_multiview_modes); i++) {
+    if (g_str_equal (gst_multiview_modes[i].caps_repr, caps_mview_mode)) {
+      return gst_multiview_modes[i].mode;
+    }
+  }
+
+  GST_ERROR ("Invalid multiview info %s", caps_mview_mode);
+  g_warning ("Invalid multiview info %s", caps_mview_mode);
+
+  return GST_VIDEO_MULTIVIEW_MODE_NONE;
+}
+
+/* Array of mono, unpacked, double-height and double-width modes */
+static GValue mode_values[5];
+
+static void
+init_mview_mode_vals (void)
+{
+  static gsize mview_mode_vals_init = 0;
+
+  if (g_once_init_enter (&mview_mode_vals_init)) {
+    GValue item = { 0, };
+    GValue *list;
+
+    g_value_init (&item, G_TYPE_STRING);
+
+    /* Mono modes */
+    list = mode_values;
+    g_value_init (list, GST_TYPE_LIST);
+    g_value_set_static_string (&item, "mono");
+    gst_value_list_append_value (list, &item);
+    g_value_set_static_string (&item, "left");
+    gst_value_list_append_value (list, &item);
+    g_value_set_static_string (&item, "right");
+    gst_value_list_append_value (list, &item);
+
+    /* Unpacked modes - ones split across buffers or memories */
+    list = mode_values + 1;
+    g_value_init (list, GST_TYPE_LIST);
+    g_value_set_static_string (&item, "separated");
+    gst_value_list_append_value (list, &item);
+    g_value_set_static_string (&item, "frame-by-frame");
+    gst_value_list_append_value (list, &item);
+    g_value_set_static_string (&item, "multiview-frame-by-frame");
+    gst_value_list_append_value (list, &item);
+
+    /* Double height modes */
+    list = mode_values + 2;
+    g_value_init (list, GST_TYPE_LIST);
+    g_value_set_static_string (&item, "top-bottom");
+    gst_value_list_append_value (list, &item);
+    g_value_set_static_string (&item, "row-interleaved");
+    gst_value_list_append_value (list, &item);
+
+    /* Double width modes */
+    list = mode_values + 3;
+    g_value_init (list, GST_TYPE_LIST);
+    g_value_set_static_string (&item, "side-by-side");
+    gst_value_list_append_value (list, &item);
+    g_value_set_static_string (&item, "side-by-side-quincunx");
+    gst_value_list_append_value (list, &item);
+    g_value_set_static_string (&item, "column-interleaved");
+    gst_value_list_append_value (list, &item);
+
+    /* Double size (both width & height) modes */
+    list = mode_values + 4;
+    g_value_init (list, GST_TYPE_LIST);
+    g_value_set_static_string (&item, "checkerboard");
+    gst_value_list_append_value (list, &item);
+
+    g_value_unset (&item);
+    g_once_init_leave (&mview_mode_vals_init, 1);
+  }
+}
+
+/**
+ * gst_video_multiview_get_mono_modes:
+ *
+ * Returns: A const #GValue containing a list of mono video modes
+ *
+ * Utility function that returns a #GValue with a GstList of mono video
+ * modes (mono/left/right) for use in caps negotiations.
+ *
+ * Since: 1.6
+ */
+const GValue *
+gst_video_multiview_get_mono_modes (void)
+{
+  init_mview_mode_vals ();
+  return mode_values;
+}
+
+/**
+ * gst_video_multiview_get_unpacked_modes:
+ *
+ * Returns: A const #GValue containing a list of 'unpacked' stereo video modes
+ *
+ * Utility function that returns a #GValue with a GstList of unpacked
+ * stereo video modes (separated/frame-by-frame/frame-by-frame-multiview)
+ * for use in caps negotiations.
+ *
+ * Since: 1.6
+ */
+const GValue *
+gst_video_multiview_get_unpacked_modes (void)
+{
+  init_mview_mode_vals ();
+  return mode_values + 1;
+}
+
+/**
+ * gst_video_multiview_get_doubled_height_modes:
+ *
+ * Returns: A const #GValue containing a list of stereo video modes
+ *
+ * Utility function that returns a #GValue with a GstList of packed stereo
+ * video modes with double the height of a single view for use in
+ * caps negotiations. Currently this is top-bottom and row-interleaved.
+ *
+ * Since: 1.6
+ */
+const GValue *
+gst_video_multiview_get_doubled_height_modes (void)
+{
+  init_mview_mode_vals ();
+  return mode_values + 2;
+}
+
+/**
+ * gst_video_multiview_get_doubled_width_modes:
+ *
+ * Returns: A const #GValue containing a list of stereo video modes
+ *
+ * Utility function that returns a #GValue with a GstList of packed stereo
+ * video modes with double the width of a single view for use in
+ * caps negotiations. Currently this is side-by-side, side-by-side-quincunx
+ * and column-interleaved.
+ *
+ * Since: 1.6
+ */
+const GValue *
+gst_video_multiview_get_doubled_width_modes (void)
+{
+  init_mview_mode_vals ();
+  return mode_values + 3;
+}
+
+/**
+ * gst_video_multiview_get_doubled_size_modes:
+ *
+ * Returns: A const #GValue containing a list of stereo video modes
+ *
+ * Utility function that returns a #GValue with a GstList of packed
+ * stereo video modes that have double the width/height of a single
+ * view for use in caps negotiation. Currently this is just
+ * 'checkerboard' layout.
+ *
+ * Since: 1.6
+ */
+const GValue *
+gst_video_multiview_get_doubled_size_modes (void)
+{
+  init_mview_mode_vals ();
+  return mode_values + 4;
+}
+
+static void
+gst_video_multiview_separated_video_info_from_packed (GstVideoInfo * info)
+{
+  GstVideoMultiviewMode mview_mode;
+
+  mview_mode = GST_VIDEO_INFO_MULTIVIEW_MODE (info);
+
+  /* Normalise the half-aspect flag by adjusting PAR */
+  switch (mview_mode) {
+    case GST_VIDEO_MULTIVIEW_MODE_SIDE_BY_SIDE:
+    case GST_VIDEO_MULTIVIEW_MODE_SIDE_BY_SIDE_QUINCUNX:
+    case GST_VIDEO_MULTIVIEW_MODE_COLUMN_INTERLEAVED:
+    case GST_VIDEO_MULTIVIEW_MODE_CHECKERBOARD:
+      info->width /= 2;
+      info->views *= 2;
+      GST_VIDEO_INFO_MULTIVIEW_MODE (info) = GST_VIDEO_MULTIVIEW_MODE_SEPARATED;
+      if (GST_VIDEO_INFO_MULTIVIEW_FLAGS (info) &
+          GST_VIDEO_MULTIVIEW_FLAGS_HALF_ASPECT)
+        info->par_n *= 2;
+      break;
+    case GST_VIDEO_MULTIVIEW_MODE_ROW_INTERLEAVED:
+    case GST_VIDEO_MULTIVIEW_MODE_TOP_BOTTOM:
+      info->height /= 2;
+      info->views *= 2;
+      GST_VIDEO_INFO_MULTIVIEW_MODE (info) = GST_VIDEO_MULTIVIEW_MODE_SEPARATED;
+      if (GST_VIDEO_INFO_MULTIVIEW_FLAGS (info) &
+          GST_VIDEO_MULTIVIEW_FLAGS_HALF_ASPECT)
+        info->par_d *= 2;
+      break;
+    default:
+      /* Mono/left/right/frame-by-frame/already separated */
+      break;
+  }
+  GST_VIDEO_INFO_MULTIVIEW_FLAGS (info) &=
+      ~GST_VIDEO_MULTIVIEW_FLAGS_HALF_ASPECT;
+}
+
+static void
+gst_video_multiview_separated_video_info_to_packed (GstVideoInfo * info,
+    GstVideoMultiviewMode packed_mview_mode,
+    GstVideoMultiviewFlags packed_mview_flags)
+{
+  /* Convert single-frame info to a packed mode */
+  GST_VIDEO_INFO_MULTIVIEW_MODE (info) = packed_mview_mode;
+  GST_VIDEO_INFO_MULTIVIEW_FLAGS (info) = packed_mview_flags;
+
+  switch (packed_mview_mode) {
+    case GST_VIDEO_MULTIVIEW_MODE_SIDE_BY_SIDE:
+    case GST_VIDEO_MULTIVIEW_MODE_SIDE_BY_SIDE_QUINCUNX:
+    case GST_VIDEO_MULTIVIEW_MODE_COLUMN_INTERLEAVED:
+    case GST_VIDEO_MULTIVIEW_MODE_CHECKERBOARD:
+      info->width *= 2;
+      info->views /= 2;
+      if (packed_mview_flags & GST_VIDEO_MULTIVIEW_FLAGS_HALF_ASPECT)
+        info->par_d *= 2;
+      break;
+    case GST_VIDEO_MULTIVIEW_MODE_ROW_INTERLEAVED:
+    case GST_VIDEO_MULTIVIEW_MODE_TOP_BOTTOM:
+      info->height *= 2;
+      info->views /= 2;
+      if (packed_mview_flags & GST_VIDEO_MULTIVIEW_FLAGS_HALF_ASPECT)
+        info->par_n *= 2;
+      break;
+    default:
+      break;
+  }
+}
+
+/**
+ * gst_video_multiview_video_info_change_mode:
+ * @info: A #GstVideoInfo structure to operate on
+ * @out_mview_mode: A #GstVideoMultiviewMode value
+ * @out_mview_flags: A set of #GstVideoMultiviewFlags
+ *
+ * Utility function that transforms the width/height/PAR
+ * and multiview mode and flags of a #GstVideoInfo into
+ * the requested mode.
+ *
+ * Since: 1.6
+ */
+void
+gst_video_multiview_video_info_change_mode (GstVideoInfo * info,
+    GstVideoMultiviewMode out_mview_mode,
+    GstVideoMultiviewFlags out_mview_flags)
+{
+  gst_video_multiview_separated_video_info_from_packed (info);
+  gst_video_multiview_separated_video_info_to_packed (info, out_mview_mode,
+      out_mview_flags);
+}
+
+/**
+ * gst_video_multiview_guess_half_aspect:
+ * @mv_mode: A #GstVideoMultiviewMode
+ * @width: Video frame width in pixels
+ * @height: Video frame height in pixels
+ * @par_n: Numerator of the video pixel-aspect-ratio
+ * @par_d: Denominator of the video pixel-aspect-ratio
+ *
+ * Returns: A boolean indicating whether the
+ *   #GST_VIDEO_MULTIVIEW_FLAG_HALF_ASPECT flag should be set.
+ *
+ * Utility function that heuristically guess whether a
+ * frame-packed stereoscopic video contains half width/height
+ * encoded views, or full-frame views by looking at the
+ * overall display aspect ratio.
+ *
+ * Since: 1.6
+ */
+gboolean
+gst_video_multiview_guess_half_aspect (GstVideoMultiviewMode mv_mode,
+    guint width, guint height, guint par_n, guint par_d)
+{
+  switch (mv_mode) {
+    case GST_VIDEO_MULTIVIEW_MODE_TOP_BOTTOM:
+    case GST_VIDEO_MULTIVIEW_MODE_ROW_INTERLEAVED:
+      /* If the video is wider than it is tall, assume half aspect */
+      if (height * par_d <= width * par_n)
+        return TRUE;
+      break;
+    case GST_VIDEO_MULTIVIEW_MODE_SIDE_BY_SIDE:
+    case GST_VIDEO_MULTIVIEW_MODE_SIDE_BY_SIDE_QUINCUNX:
+    case GST_VIDEO_MULTIVIEW_MODE_COLUMN_INTERLEAVED:
+      /* If the video DAR is less than 2.39:1, assume half-aspect */
+      if (width * par_n < 2.39 * height * par_d)
+        return TRUE;
+      break;
+    default:
+      break;
+  }
+  return FALSE;
+}
+
+#if 0                           /* Multiview meta disabled for now */
+GType
+gst_video_multiview_meta_api_get_type (void)
+{
+  static volatile GType type = 0;
+  static const gchar *tags[] =
+      { GST_META_TAG_VIDEO_STR, GST_META_TAG_MEMORY_STR,
+    NULL
+  };
+
+  if (g_once_init_enter (&type)) {
+    GType _type = gst_meta_api_type_register ("GstVideoMultiviewMetaAPI", tags);
+    g_once_init_leave (&type, _type);
+  }
+  return type;
+}
+
+static void
+gst_video_multiview_meta_free (GstVideoMultiviewMeta * mview_meta,
+    GstBuffer * buffer)
+{
+  g_free (mview_meta->view_info);
+}
+
+/* video multiview metadata */
+const GstMetaInfo *
+gst_video_multiview_meta_get_info (void)
+{
+  static const GstMetaInfo *video_meta_info = NULL;
+
+  if (g_once_init_enter (&video_meta_info)) {
+    const GstMetaInfo *meta =
+        gst_meta_register (GST_VIDEO_MULTIVIEW_META_API_TYPE,
+        "GstVideoMultiviewMeta",
+        sizeof (GstVideoMultiviewMeta),
+        (GstMetaInitFunction) NULL,
+        (GstMetaFreeFunction) gst_video_multiview_meta_free,
+        NULL);
+    g_once_init_leave (&video_meta_info, meta);
+  }
+
+  return video_meta_info;
+}
+
+
+GstVideoMultiviewMeta *
+gst_buffer_add_video_multiview_meta (GstBuffer * buffer, guint n_views)
+{
+  GstVideoMultiviewMeta *meta;
+
+  meta =
+      (GstVideoMultiviewMeta *) gst_buffer_add_meta (buffer,
+      GST_VIDEO_MULTIVIEW_META_INFO, NULL);
+
+  if (!meta)
+    return NULL;
+
+  meta->view_info = g_new0 (GstVideoMultiviewViewInfo, n_views);
+  meta->n_views = n_views;
+
+  return meta;
+}
+
+void
+gst_video_multiview_meta_set_n_views (GstVideoMultiviewMeta * mview_meta,
+    guint n_views)
+{
+  guint i;
+
+  mview_meta->view_info =
+      g_renew (GstVideoMultiviewViewInfo, mview_meta->view_info, n_views);
+
+  if (mview_meta->view_info == NULL) {
+    if (n_views > 0)
+      g_warning ("Failed to allocate GstVideoMultiview data");
+    mview_meta->n_views = 0;
+    return;
+  }
+
+  /* Make sure new entries are zero */
+  for (i = mview_meta->n_views; i < n_views; i++) {
+    GstVideoMultiviewViewInfo *info = mview_meta->view_info + i;
+
+    info->meta_id = 0;
+    info->view_label = GST_VIDEO_MULTIVIEW_VIEW_UNKNOWN;
+  }
+  mview_meta->n_views = n_views;
+}
+
+#endif
diff --git a/gst-libs/gst/video/video-multiview.h b/gst-libs/gst/video/video-multiview.h
new file mode 100644
index 0000000..2c02272
--- /dev/null
+++ b/gst-libs/gst/video/video-multiview.h
@@ -0,0 +1,86 @@
+/* GStreamer
+ * Copyright (C) <2015> Jan Schmidt <jan@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_VIDEO_MULTIVIEW_H__
+#define __GST_VIDEO_MULTIVIEW_H__
+
+#include <gst/gst.h>
+
+G_BEGIN_DECLS
+
+#define GST_TYPE_VIDEO_MULTIVIEW_FLAGSET (gst_video_multiview_flagset_get_type())
+GType gst_video_multiview_flagset_get_type (void);
+
+const gchar * gst_video_multiview_mode_to_caps_string (GstVideoMultiviewMode mview_mode);
+GstVideoMultiviewMode gst_video_multiview_mode_from_caps_string (const gchar * caps_mview_mode);
+
+const GValue *gst_video_multiview_get_mono_modes(void);
+const GValue *gst_video_multiview_get_unpacked_modes(void);
+const GValue *gst_video_multiview_get_doubled_height_modes(void);
+const GValue *gst_video_multiview_get_doubled_width_modes(void);
+const GValue *gst_video_multiview_get_doubled_size_modes(void);
+
+void gst_video_multiview_video_info_change_mode (GstVideoInfo *info,
+    GstVideoMultiviewMode out_mview_mode, GstVideoMultiviewFlags out_mview_flags);
+gboolean gst_video_multiview_guess_half_aspect (GstVideoMultiviewMode mv_mode,
+    guint width, guint height, guint par_n, guint par_d);
+
+
+#if 0 /* Place-holder for later MVC support */
+#define GST_VIDEO_MULTIVIEW_META_API_TYPE (gst_video_multiview_meta_api_get_type())
+#define GST_VIDEO_MULTIVIEW_META_INFO  (gst_video_multiview_meta_get_info())
+
+typedef struct _GstVideoMultiviewMeta GstVideoMultiviewMeta;
+typedef struct _GstVideoMultiviewViewInfo GstVideoMultiviewViewInfo;
+
+GType gst_video_multiview_meta_api_get_type (void);
+const GstMetaInfo * gst_video_multiview_meta_get_info (void);
+
+GstVideoMultiviewMeta * gst_buffer_add_video_multiview_meta (GstBuffer *buffer, guint n_views);
+#define gst_buffer_get_video_multiview_meta(b) ((GstVideoMultiviewMeta *)gst_buffer_get_meta((b),GST_VIDEO_MULTIVIEW_META_API_TYPE))
+
+void gst_video_multiview_meta_set_n_views (GstVideoMultiviewMeta *mview_meta, guint n_views);
+
+typedef enum {
+  GST_VIDEO_MULTIVIEW_VIEW_UNKNOWN = 0,
+  GST_VIDEO_MULTIVIEW_VIEW_MONO = 1,
+  GST_VIDEO_MULTIVIEW_VIEW_LEFT = 2,
+  GST_VIDEO_MULTIVIEW_VIEW_RIGHT = 3
+} GstVideoMultiviewViewLabel;
+
+struct _GstVideoMultiviewViewInfo {
+  GstVideoMultiviewViewLabel view_label;
+
+  guint meta_id; /* id of the GstVideoMeta for this view */
+
+  /*< private >*/
+  gpointer _gst_reserved[GST_PADDING];
+};
+
+struct _GstVideoMultiviewMeta {
+  GstMeta       meta;
+
+  guint         n_views;
+  GstVideoMultiviewViewInfo *view_info;
+};
+#endif
+
+G_END_DECLS
+
+#endif
diff --git a/gst-libs/gst/video/video-orc-dist.c b/gst-libs/gst/video/video-orc-dist.c
index 98a02c9..215cb05 100644
--- a/gst-libs/gst/video/video-orc-dist.c
+++ b/gst-libs/gst/video/video-orc-dist.c
@@ -104,6 +104,8 @@
     const guint8 * ORC_RESTRICT s3, int n);
 void video_orc_pack_I420 (guint8 * ORC_RESTRICT d1, guint8 * ORC_RESTRICT d2,
     guint8 * ORC_RESTRICT d3, const guint8 * ORC_RESTRICT s1, int n);
+void video_orc_pack_Y (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1,
+    int n);
 void video_orc_unpack_YUY2 (guint8 * ORC_RESTRICT d1,
     const guint8 * ORC_RESTRICT s1, int n);
 void video_orc_pack_YUY2 (guint8 * ORC_RESTRICT d1,
@@ -163,11 +165,297 @@
 void video_orc_pack_A420 (guint8 * ORC_RESTRICT d1, guint8 * ORC_RESTRICT d2,
     guint8 * ORC_RESTRICT d3, guint8 * ORC_RESTRICT d4,
     const guint8 * ORC_RESTRICT s1, int n);
+void video_orc_pack_AY (guint8 * ORC_RESTRICT d1, guint8 * ORC_RESTRICT d2,
+    const guint8 * ORC_RESTRICT s1, int n);
+void video_orc_unpack_RGB15_le (guint32 * ORC_RESTRICT d1,
+    const guint16 * ORC_RESTRICT s1, int n);
+void video_orc_unpack_RGB15_be (guint32 * ORC_RESTRICT d1,
+    const guint16 * ORC_RESTRICT s1, int n);
+void video_orc_unpack_RGB15_le_trunc (guint32 * ORC_RESTRICT d1,
+    const guint16 * ORC_RESTRICT s1, int n);
+void video_orc_unpack_RGB15_be_trunc (guint32 * ORC_RESTRICT d1,
+    const guint16 * ORC_RESTRICT s1, int n);
+void video_orc_pack_RGB15_le (guint16 * ORC_RESTRICT d1,
+    const guint32 * ORC_RESTRICT s1, int n);
+void video_orc_pack_RGB15_be (guint16 * ORC_RESTRICT d1,
+    const guint32 * ORC_RESTRICT s1, int n);
+void video_orc_unpack_BGR15_le (guint32 * ORC_RESTRICT d1,
+    const guint16 * ORC_RESTRICT s1, int n);
+void video_orc_unpack_BGR15_be (guint32 * ORC_RESTRICT d1,
+    const guint16 * ORC_RESTRICT s1, int n);
+void video_orc_unpack_BGR15_le_trunc (guint32 * ORC_RESTRICT d1,
+    const guint16 * ORC_RESTRICT s1, int n);
+void video_orc_unpack_BGR15_be_trunc (guint32 * ORC_RESTRICT d1,
+    const guint16 * ORC_RESTRICT s1, int n);
+void video_orc_pack_BGR15_le (guint16 * ORC_RESTRICT d1,
+    const guint32 * ORC_RESTRICT s1, int n);
+void video_orc_pack_BGR15_be (guint16 * ORC_RESTRICT d1,
+    const guint32 * ORC_RESTRICT s1, int n);
+void video_orc_unpack_RGB16 (guint32 * ORC_RESTRICT d1,
+    const guint16 * ORC_RESTRICT s1, int n);
+void video_orc_unpack_RGB16_trunc (guint32 * ORC_RESTRICT d1,
+    const guint16 * ORC_RESTRICT s1, int n);
+void video_orc_pack_RGB16_le (guint16 * ORC_RESTRICT d1,
+    const guint32 * ORC_RESTRICT s1, int n);
+void video_orc_pack_RGB16_be (guint16 * ORC_RESTRICT d1,
+    const guint32 * ORC_RESTRICT s1, int n);
+void video_orc_unpack_BGR16 (guint32 * ORC_RESTRICT d1,
+    const guint16 * ORC_RESTRICT s1, int n);
+void video_orc_unpack_BGR16_trunc (guint32 * ORC_RESTRICT d1,
+    const guint16 * ORC_RESTRICT s1, int n);
+void video_orc_pack_BGR16_le (guint16 * ORC_RESTRICT d1,
+    const guint32 * ORC_RESTRICT s1, int n);
+void video_orc_pack_BGR16_be (guint16 * ORC_RESTRICT d1,
+    const guint32 * ORC_RESTRICT s1, int n);
 void video_orc_resample_bilinear_u32 (guint8 * ORC_RESTRICT d1,
     const guint8 * ORC_RESTRICT s1, int p1, int p2, int n);
 void video_orc_merge_linear_u8 (orc_uint8 * ORC_RESTRICT d1,
     const orc_uint8 * ORC_RESTRICT s1, const orc_uint8 * ORC_RESTRICT s2,
     int p1, int n);
+void video_orc_memset_2d (guint8 * ORC_RESTRICT d1, int d1_stride, int p1,
+    int n, int m);
+void video_orc_memcpy_2d (guint8 * ORC_RESTRICT d1, int d1_stride,
+    const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m);
+void video_orc_convert_u16_to_u8 (guint8 * ORC_RESTRICT d1,
+    const guint16 * ORC_RESTRICT s1, int n);
+void video_orc_convert_u8_to_u16 (guint16 * ORC_RESTRICT d1,
+    const guint8 * ORC_RESTRICT s1, int n);
+void video_orc_splat_u16 (guint8 * ORC_RESTRICT d1, int p1, int n);
+void video_orc_splat_u32 (guint8 * ORC_RESTRICT d1, int p1, int n);
+void video_orc_splat_u64 (guint8 * ORC_RESTRICT d1, orc_int64 p1, int n);
+void video_orc_splat2_u64 (guint8 * ORC_RESTRICT d1, int p1, int n);
+void video_orc_convert_I420_UYVY (guint8 * ORC_RESTRICT d1,
+    guint8 * ORC_RESTRICT d2, const guint8 * ORC_RESTRICT s1,
+    const guint8 * ORC_RESTRICT s2, const guint8 * ORC_RESTRICT s3,
+    const guint8 * ORC_RESTRICT s4, int n);
+void video_orc_convert_I420_YUY2 (guint8 * ORC_RESTRICT d1,
+    guint8 * ORC_RESTRICT d2, const guint8 * ORC_RESTRICT s1,
+    const guint8 * ORC_RESTRICT s2, const guint8 * ORC_RESTRICT s3,
+    const guint8 * ORC_RESTRICT s4, int n);
+void video_orc_convert_I420_AYUV (guint8 * ORC_RESTRICT d1,
+    guint8 * ORC_RESTRICT d2, const guint8 * ORC_RESTRICT s1,
+    const guint8 * ORC_RESTRICT s2, const guint8 * ORC_RESTRICT s3,
+    const guint8 * ORC_RESTRICT s4, int p1, int n);
+void video_orc_convert_YUY2_I420 (guint8 * ORC_RESTRICT d1,
+    guint8 * ORC_RESTRICT d2, guint8 * ORC_RESTRICT d3,
+    guint8 * ORC_RESTRICT d4, const guint8 * ORC_RESTRICT s1,
+    const guint8 * ORC_RESTRICT s2, int n);
+void video_orc_convert_UYVY_YUY2 (guint8 * ORC_RESTRICT d1, int d1_stride,
+    const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m);
+void video_orc_planar_chroma_420_422 (guint8 * ORC_RESTRICT d1, int d1_stride,
+    guint8 * ORC_RESTRICT d2, int d2_stride, const guint8 * ORC_RESTRICT s1,
+    int s1_stride, int n, int m);
+void video_orc_planar_chroma_420_444 (guint8 * ORC_RESTRICT d1, int d1_stride,
+    guint8 * ORC_RESTRICT d2, int d2_stride, const guint8 * ORC_RESTRICT s1,
+    int s1_stride, int n, int m);
+void video_orc_planar_chroma_422_444 (guint8 * ORC_RESTRICT d1, int d1_stride,
+    const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m);
+void video_orc_planar_chroma_444_422 (guint8 * ORC_RESTRICT d1, int d1_stride,
+    const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m);
+void video_orc_planar_chroma_444_420 (guint8 * ORC_RESTRICT d1, int d1_stride,
+    const guint8 * ORC_RESTRICT s1, int s1_stride,
+    const guint8 * ORC_RESTRICT s2, int s2_stride, int n, int m);
+void video_orc_planar_chroma_422_420 (guint8 * ORC_RESTRICT d1, int d1_stride,
+    const guint8 * ORC_RESTRICT s1, int s1_stride,
+    const guint8 * ORC_RESTRICT s2, int s2_stride, int n, int m);
+void video_orc_convert_YUY2_AYUV (guint8 * ORC_RESTRICT d1, int d1_stride,
+    const guint8 * ORC_RESTRICT s1, int s1_stride, int p1, int n, int m);
+void video_orc_convert_UYVY_AYUV (guint8 * ORC_RESTRICT d1, int d1_stride,
+    const guint8 * ORC_RESTRICT s1, int s1_stride, int p1, int n, int m);
+void video_orc_convert_YUY2_Y42B (guint8 * ORC_RESTRICT d1, int d1_stride,
+    guint8 * ORC_RESTRICT d2, int d2_stride, guint8 * ORC_RESTRICT d3,
+    int d3_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m);
+void video_orc_convert_UYVY_Y42B (guint8 * ORC_RESTRICT d1, int d1_stride,
+    guint8 * ORC_RESTRICT d2, int d2_stride, guint8 * ORC_RESTRICT d3,
+    int d3_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m);
+void video_orc_convert_YUY2_Y444 (guint8 * ORC_RESTRICT d1, int d1_stride,
+    guint8 * ORC_RESTRICT d2, int d2_stride, guint8 * ORC_RESTRICT d3,
+    int d3_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m);
+void video_orc_convert_UYVY_Y444 (guint8 * ORC_RESTRICT d1, int d1_stride,
+    guint8 * ORC_RESTRICT d2, int d2_stride, guint8 * ORC_RESTRICT d3,
+    int d3_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m);
+void video_orc_convert_UYVY_I420 (guint8 * ORC_RESTRICT d1,
+    guint8 * ORC_RESTRICT d2, guint8 * ORC_RESTRICT d3,
+    guint8 * ORC_RESTRICT d4, const guint8 * ORC_RESTRICT s1,
+    const guint8 * ORC_RESTRICT s2, int n);
+void video_orc_convert_AYUV_I420 (guint8 * ORC_RESTRICT d1, int d1_stride,
+    guint8 * ORC_RESTRICT d2, int d2_stride, guint8 * ORC_RESTRICT d3,
+    int d3_stride, guint8 * ORC_RESTRICT d4, int d4_stride,
+    const guint8 * ORC_RESTRICT s1, int s1_stride,
+    const guint8 * ORC_RESTRICT s2, int s2_stride, int n, int m);
+void video_orc_convert_AYUV_YUY2 (guint8 * ORC_RESTRICT d1, int d1_stride,
+    const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m);
+void video_orc_convert_AYUV_UYVY (guint8 * ORC_RESTRICT d1, int d1_stride,
+    const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m);
+void video_orc_convert_AYUV_Y42B (guint8 * ORC_RESTRICT d1, int d1_stride,
+    guint8 * ORC_RESTRICT d2, int d2_stride, guint8 * ORC_RESTRICT d3,
+    int d3_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m);
+void video_orc_convert_AYUV_Y444 (guint8 * ORC_RESTRICT d1, int d1_stride,
+    guint8 * ORC_RESTRICT d2, int d2_stride, guint8 * ORC_RESTRICT d3,
+    int d3_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m);
+void video_orc_convert_Y42B_YUY2 (guint8 * ORC_RESTRICT d1, int d1_stride,
+    const guint8 * ORC_RESTRICT s1, int s1_stride,
+    const guint8 * ORC_RESTRICT s2, int s2_stride,
+    const guint8 * ORC_RESTRICT s3, int s3_stride, int n, int m);
+void video_orc_convert_Y42B_UYVY (guint8 * ORC_RESTRICT d1, int d1_stride,
+    const guint8 * ORC_RESTRICT s1, int s1_stride,
+    const guint8 * ORC_RESTRICT s2, int s2_stride,
+    const guint8 * ORC_RESTRICT s3, int s3_stride, int n, int m);
+void video_orc_convert_Y42B_AYUV (guint8 * ORC_RESTRICT d1, int d1_stride,
+    const guint8 * ORC_RESTRICT s1, int s1_stride,
+    const guint8 * ORC_RESTRICT s2, int s2_stride,
+    const guint8 * ORC_RESTRICT s3, int s3_stride, int p1, int n, int m);
+void video_orc_convert_Y444_YUY2 (guint8 * ORC_RESTRICT d1, int d1_stride,
+    const guint8 * ORC_RESTRICT s1, int s1_stride,
+    const guint8 * ORC_RESTRICT s2, int s2_stride,
+    const guint8 * ORC_RESTRICT s3, int s3_stride, int n, int m);
+void video_orc_convert_Y444_UYVY (guint8 * ORC_RESTRICT d1, int d1_stride,
+    const guint8 * ORC_RESTRICT s1, int s1_stride,
+    const guint8 * ORC_RESTRICT s2, int s2_stride,
+    const guint8 * ORC_RESTRICT s3, int s3_stride, int n, int m);
+void video_orc_convert_Y444_AYUV (guint8 * ORC_RESTRICT d1, int d1_stride,
+    const guint8 * ORC_RESTRICT s1, int s1_stride,
+    const guint8 * ORC_RESTRICT s2, int s2_stride,
+    const guint8 * ORC_RESTRICT s3, int s3_stride, int p1, int n, int m);
+void video_orc_convert_AYUV_ARGB (guint8 * ORC_RESTRICT d1, int d1_stride,
+    const guint8 * ORC_RESTRICT s1, int s1_stride, int p1, int p2, int p3,
+    int p4, int p5, int n, int m);
+void video_orc_convert_AYUV_BGRA (guint8 * ORC_RESTRICT d1, int d1_stride,
+    const guint8 * ORC_RESTRICT s1, int s1_stride, int p1, int p2, int p3,
+    int p4, int p5, int n, int m);
+void video_orc_convert_AYUV_ABGR (guint8 * ORC_RESTRICT d1, int d1_stride,
+    const guint8 * ORC_RESTRICT s1, int s1_stride, int p1, int p2, int p3,
+    int p4, int p5, int n, int m);
+void video_orc_convert_AYUV_RGBA (guint8 * ORC_RESTRICT d1, int d1_stride,
+    const guint8 * ORC_RESTRICT s1, int s1_stride, int p1, int p2, int p3,
+    int p4, int p5, int n, int m);
+void video_orc_convert_I420_BGRA (guint8 * ORC_RESTRICT d1,
+    const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2,
+    const guint8 * ORC_RESTRICT s3, int p1, int p2, int p3, int p4, int p5,
+    int n);
+void video_orc_matrix8 (guint8 * ORC_RESTRICT d1,
+    const guint8 * ORC_RESTRICT s1, orc_int64 p1, orc_int64 p2, orc_int64 p3,
+    orc_int64 p4, int n);
+void _custom_video_orc_matrix8 (guint8 * ORC_RESTRICT d1,
+    const guint8 * ORC_RESTRICT s1, orc_int64 p1, orc_int64 p2, orc_int64 p3,
+    orc_int64 p4, int n);
+void video_orc_resample_h_near_u32_lq (guint32 * ORC_RESTRICT d1,
+    const guint32 * ORC_RESTRICT s1, int p1, int p2, int n);
+void video_orc_resample_h_2tap_1u8_lq (guint8 * ORC_RESTRICT d1,
+    const guint8 * ORC_RESTRICT s1, int p1, int p2, int n);
+void video_orc_resample_h_2tap_4u8_lq (guint32 * ORC_RESTRICT d1,
+    const guint32 * ORC_RESTRICT s1, int p1, int p2, int n);
+void video_orc_resample_h_2tap_u8_lq (guint8 * ORC_RESTRICT d1,
+    const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2,
+    const gint16 * ORC_RESTRICT s3, const gint16 * ORC_RESTRICT s4, int n);
+void video_orc_resample_h_2tap_u16 (guint16 * ORC_RESTRICT d1,
+    const guint16 * ORC_RESTRICT s1, const guint16 * ORC_RESTRICT s2,
+    const gint16 * ORC_RESTRICT s3, const gint16 * ORC_RESTRICT s4, int n);
+void video_orc_resample_v_2tap_u8_lq (guint8 * ORC_RESTRICT d1,
+    const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, int p1,
+    int n);
+void video_orc_resample_v_2tap_u16 (guint16 * ORC_RESTRICT d1,
+    const guint16 * ORC_RESTRICT s1, const guint16 * ORC_RESTRICT s2, int p1,
+    int n);
+void video_orc_resample_v_2tap_u8 (guint8 * ORC_RESTRICT d1,
+    const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, int p1,
+    int n);
+void video_orc_resample_v_4tap_u8_lq (guint8 * ORC_RESTRICT d1,
+    const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2,
+    const guint8 * ORC_RESTRICT s3, const guint8 * ORC_RESTRICT s4, int p1,
+    int p2, int p3, int p4, int n);
+void video_orc_resample_v_4tap_u8 (guint8 * ORC_RESTRICT d1,
+    const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2,
+    const guint8 * ORC_RESTRICT s3, const guint8 * ORC_RESTRICT s4, int p1,
+    int p2, int p3, int p4, int n);
+void video_orc_resample_h_multaps_u8 (gint32 * ORC_RESTRICT d1,
+    const guint8 * ORC_RESTRICT s1, const gint16 * ORC_RESTRICT s2, int n);
+void video_orc_resample_h_muladdtaps_u8 (gint32 * ORC_RESTRICT d1,
+    int d1_stride, const guint8 * ORC_RESTRICT s1, int s1_stride,
+    const gint16 * ORC_RESTRICT s2, int s2_stride, int n, int m);
+void video_orc_resample_scaletaps_u8 (guint8 * ORC_RESTRICT d1,
+    const gint32 * ORC_RESTRICT s1, int n);
+void video_orc_resample_h_multaps_u8_lq (gint16 * ORC_RESTRICT d1,
+    const guint8 * ORC_RESTRICT s1, const gint16 * ORC_RESTRICT s2, int n);
+void video_orc_resample_h_muladdtaps_u8_lq (gint16 * ORC_RESTRICT d1,
+    int d1_stride, const guint8 * ORC_RESTRICT s1, int s1_stride,
+    const gint16 * ORC_RESTRICT s2, int s2_stride, int n, int m);
+void video_orc_resample_h_multaps3_u8_lq (gint16 * ORC_RESTRICT d1,
+    const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2,
+    const guint8 * ORC_RESTRICT s3, const gint16 * ORC_RESTRICT s4,
+    const gint16 * ORC_RESTRICT s5, const gint16 * ORC_RESTRICT s6, int n);
+void video_orc_resample_h_muladdtaps3_u8_lq (gint16 * ORC_RESTRICT d1,
+    const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2,
+    const guint8 * ORC_RESTRICT s3, const gint16 * ORC_RESTRICT s4,
+    const gint16 * ORC_RESTRICT s5, const gint16 * ORC_RESTRICT s6, int n);
+void video_orc_resample_h_muladdscaletaps3_u8_lq (guint8 * ORC_RESTRICT d1,
+    const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2,
+    const guint8 * ORC_RESTRICT s3, const gint16 * ORC_RESTRICT s4,
+    const gint16 * ORC_RESTRICT s5, const gint16 * ORC_RESTRICT s6,
+    const gint16 * ORC_RESTRICT s7, int n);
+void video_orc_resample_scaletaps_u8_lq (guint8 * ORC_RESTRICT d1,
+    const gint16 * ORC_RESTRICT s1, int n);
+void video_orc_resample_h_multaps_u16 (gint32 * ORC_RESTRICT d1,
+    const guint16 * ORC_RESTRICT s1, const gint16 * ORC_RESTRICT s2, int n);
+void video_orc_resample_h_muladdtaps_u16 (gint32 * ORC_RESTRICT d1,
+    int d1_stride, const guint16 * ORC_RESTRICT s1, int s1_stride,
+    const gint16 * ORC_RESTRICT s2, int s2_stride, int n, int m);
+void video_orc_resample_scaletaps_u16 (guint16 * ORC_RESTRICT d1,
+    const gint32 * ORC_RESTRICT s1, int n);
+void video_orc_resample_v_multaps_u8 (gint32 * ORC_RESTRICT d1,
+    const guint8 * ORC_RESTRICT s1, int p1, int n);
+void video_orc_resample_v_muladdtaps_u8 (gint32 * ORC_RESTRICT d1,
+    const guint8 * ORC_RESTRICT s1, int p1, int n);
+void video_orc_resample_v_multaps_u16 (gint32 * ORC_RESTRICT d1,
+    const guint16 * ORC_RESTRICT s1, int p1, int n);
+void video_orc_resample_v_muladdtaps_u16 (gint32 * ORC_RESTRICT d1,
+    const guint16 * ORC_RESTRICT s1, int p1, int n);
+void video_orc_resample_v_multaps_u8_lq (gint16 * ORC_RESTRICT d1,
+    const guint8 * ORC_RESTRICT s1, int p1, int n);
+void video_orc_resample_v_multaps4_u8_lq (gint16 * ORC_RESTRICT d1,
+    const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2,
+    const guint8 * ORC_RESTRICT s3, const guint8 * ORC_RESTRICT s4, int p1,
+    int p2, int p3, int p4, int n);
+void video_orc_resample_v_muladdtaps_u8_lq (gint16 * ORC_RESTRICT d1,
+    const guint8 * ORC_RESTRICT s1, int p1, int n);
+void video_orc_resample_v_muladdtaps4_u8_lq (gint16 * ORC_RESTRICT d1,
+    const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2,
+    const guint8 * ORC_RESTRICT s3, const guint8 * ORC_RESTRICT s4, int p1,
+    int p2, int p3, int p4, int n);
+void video_orc_resample_v_muladdscaletaps4_u8_lq (guint8 * ORC_RESTRICT d1,
+    const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2,
+    const guint8 * ORC_RESTRICT s3, const guint8 * ORC_RESTRICT s4,
+    const gint16 * ORC_RESTRICT s5, int p1, int p2, int p3, int p4, int n);
+void video_orc_chroma_down_h2_u8 (guint8 * ORC_RESTRICT d1,
+    const guint8 * ORC_RESTRICT s1, int n);
+void video_orc_chroma_down_v2_u8 (guint8 * ORC_RESTRICT d1,
+    const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, int n);
+void video_orc_chroma_up_v2_u8 (guint8 * ORC_RESTRICT d1,
+    guint8 * ORC_RESTRICT d2, const guint8 * ORC_RESTRICT s1,
+    const guint8 * ORC_RESTRICT s2, int n);
+void video_orc_chroma_up_v2_u16 (guint16 * ORC_RESTRICT d1,
+    guint16 * ORC_RESTRICT d2, const guint16 * ORC_RESTRICT s1,
+    const guint16 * ORC_RESTRICT s2, int n);
+void video_orc_chroma_down_v2_u16 (guint16 * ORC_RESTRICT d1,
+    const guint16 * ORC_RESTRICT s1, const guint16 * ORC_RESTRICT s2, int n);
+void video_orc_chroma_down_v4_u8 (guint8 * ORC_RESTRICT d1,
+    const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2,
+    const guint8 * ORC_RESTRICT s3, const guint8 * ORC_RESTRICT s4, int n);
+void video_orc_chroma_down_v4_u16 (guint16 * ORC_RESTRICT d1,
+    const guint16 * ORC_RESTRICT s1, const guint16 * ORC_RESTRICT s2,
+    const guint16 * ORC_RESTRICT s3, const guint16 * ORC_RESTRICT s4, int n);
+void video_orc_dither_none_4u8_mask (guint8 * ORC_RESTRICT d1, int p1, int n);
+void video_orc_dither_none_4u16_mask (guint16 * ORC_RESTRICT d1, orc_int64 p1,
+    int n);
+void video_orc_dither_verterr_4u8_mask (guint8 * ORC_RESTRICT d1,
+    guint16 * ORC_RESTRICT d2, orc_int64 p1, int n);
+void video_orc_dither_fs_muladd_u8 (guint16 * ORC_RESTRICT d1, int n);
+void video_orc_dither_ordered_u8 (guint8 * ORC_RESTRICT d1,
+    const guint8 * ORC_RESTRICT s1, int n);
+void video_orc_dither_ordered_4u8_mask (guint8 * ORC_RESTRICT d1,
+    const guint16 * ORC_RESTRICT s1, orc_int64 p1, int n);
+void video_orc_dither_ordered_4u16_mask (guint16 * ORC_RESTRICT d1,
+    const guint16 * ORC_RESTRICT s1, orc_int64 p1, int n);
 
 
 /* begin Orc C target preamble */
@@ -1311,6 +1599,137 @@
 #endif
 
 
+/* video_orc_pack_Y */
+#ifdef DISABLE_ORC
+void
+video_orc_pack_Y (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1,
+    int n)
+{
+  int i;
+  orc_int8 *ORC_RESTRICT ptr0;
+  const orc_union32 *ORC_RESTRICT ptr4;
+  orc_union32 var33;
+  orc_int8 var34;
+  orc_union16 var35;
+
+  ptr0 = (orc_int8 *) d1;
+  ptr4 = (orc_union32 *) s1;
+
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadl */
+    var33 = ptr4[i];
+    /* 1: select0lw */
+    {
+      orc_union32 _src;
+      _src.i = var33.i;
+      var35.i = _src.x2[0];
+    }
+    /* 2: select1wb */
+    {
+      orc_union16 _src;
+      _src.i = var35.i;
+      var34 = _src.x2[1];
+    }
+    /* 3: storeb */
+    ptr0[i] = var34;
+  }
+
+}
+
+#else
+static void
+_backup_video_orc_pack_Y (OrcExecutor * ORC_RESTRICT ex)
+{
+  int i;
+  int n = ex->n;
+  orc_int8 *ORC_RESTRICT ptr0;
+  const orc_union32 *ORC_RESTRICT ptr4;
+  orc_union32 var33;
+  orc_int8 var34;
+  orc_union16 var35;
+
+  ptr0 = (orc_int8 *) ex->arrays[0];
+  ptr4 = (orc_union32 *) ex->arrays[4];
+
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadl */
+    var33 = ptr4[i];
+    /* 1: select0lw */
+    {
+      orc_union32 _src;
+      _src.i = var33.i;
+      var35.i = _src.x2[0];
+    }
+    /* 2: select1wb */
+    {
+      orc_union16 _src;
+      _src.i = var35.i;
+      var34 = _src.x2[1];
+    }
+    /* 3: storeb */
+    ptr0[i] = var34;
+  }
+
+}
+
+void
+video_orc_pack_Y (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1,
+    int n)
+{
+  OrcExecutor _ex, *ex = &_ex;
+  static volatile int p_inited = 0;
+  static OrcCode *c = 0;
+  void (*func) (OrcExecutor *);
+
+  if (!p_inited) {
+    orc_once_mutex_lock ();
+    if (!p_inited) {
+      OrcProgram *p;
+
+#if 1
+      static const orc_uint8 bc[] = {
+        1, 9, 16, 118, 105, 100, 101, 111, 95, 111, 114, 99, 95, 112, 97, 99,
+        107, 95, 89, 11, 1, 1, 12, 4, 4, 20, 2, 190, 32, 4, 189, 0,
+        32, 2, 0,
+      };
+      p = orc_program_new_from_static_bytecode (bc);
+      orc_program_set_backup_function (p, _backup_video_orc_pack_Y);
+#else
+      p = orc_program_new ();
+      orc_program_set_name (p, "video_orc_pack_Y");
+      orc_program_set_backup_function (p, _backup_video_orc_pack_Y);
+      orc_program_add_destination (p, 1, "d1");
+      orc_program_add_source (p, 4, "s1");
+      orc_program_add_temporary (p, 2, "t1");
+
+      orc_program_append_2 (p, "select0lw", 0, ORC_VAR_T1, ORC_VAR_S1,
+          ORC_VAR_D1, ORC_VAR_D1);
+      orc_program_append_2 (p, "select1wb", 0, ORC_VAR_D1, ORC_VAR_T1,
+          ORC_VAR_D1, ORC_VAR_D1);
+#endif
+
+      orc_program_compile (p);
+      c = orc_program_take_code (p);
+      orc_program_free (p);
+    }
+    p_inited = TRUE;
+    orc_once_mutex_unlock ();
+  }
+  ex->arrays[ORC_VAR_A2] = c;
+  ex->program = 0;
+
+  ex->n = n;
+  ex->arrays[ORC_VAR_D1] = d1;
+  ex->arrays[ORC_VAR_S1] = (void *) s1;
+
+  func = c->exec;
+  func (ex);
+}
+#endif
+
+
 /* video_orc_unpack_YUY2 */
 #ifdef DISABLE_ORC
 void
@@ -4234,16 +4653,10 @@
   int i;
   orc_union32 *ORC_RESTRICT ptr0;
   const orc_union32 *ORC_RESTRICT ptr4;
-  orc_union32 var40;
-  orc_union32 var41;
-  orc_union16 var42;
-  orc_union16 var43;
-  orc_int8 var44;
-  orc_int8 var45;
-  orc_int8 var46;
-  orc_int8 var47;
-  orc_union16 var48;
-  orc_union16 var49;
+  orc_union32 var34;
+  orc_union32 var35;
+  orc_union32 var36;
+  orc_union32 var37;
 
   ptr0 = (orc_union32 *) d1;
   ptr4 = (orc_union32 *) s1;
@@ -4251,51 +4664,15 @@
 
   for (i = 0; i < n; i++) {
     /* 0: loadl */
-    var40 = ptr4[i];
-    /* 1: splitlw */
-    {
-      orc_union32 _src;
-      _src.i = var40.i;
-      var42.i = _src.x2[1];
-      var43.i = _src.x2[0];
-    }
-    /* 2: splitwb */
-    {
-      orc_union16 _src;
-      _src.i = var42.i;
-      var44 = _src.x2[1];
-      var45 = _src.x2[0];
-    }
-    /* 3: splitwb */
-    {
-      orc_union16 _src;
-      _src.i = var43.i;
-      var46 = _src.x2[1];
-      var47 = _src.x2[0];
-    }
-    /* 4: mergebw */
-    {
-      orc_union16 _dest;
-      _dest.x2[0] = var44;
-      _dest.x2[1] = var47;
-      var48.i = _dest.i;
-    }
-    /* 5: mergebw */
-    {
-      orc_union16 _dest;
-      _dest.x2[0] = var46;
-      _dest.x2[1] = var45;
-      var49.i = _dest.i;
-    }
-    /* 6: mergewl */
-    {
-      orc_union32 _dest;
-      _dest.x2[0] = var49.i;
-      _dest.x2[1] = var48.i;
-      var41.i = _dest.i;
-    }
-    /* 7: storel */
-    ptr0[i] = var41;
+    var35 = ptr4[i];
+    /* 1: shrul */
+    var36.i = ((orc_uint32) var35.i) >> 8;
+    /* 2: shll */
+    var37.i = ((orc_uint32) var35.i) << 24;
+    /* 3: orl */
+    var34.i = var37.i | var36.i;
+    /* 4: storel */
+    ptr0[i] = var34;
   }
 
 }
@@ -4308,16 +4685,10 @@
   int n = ex->n;
   orc_union32 *ORC_RESTRICT ptr0;
   const orc_union32 *ORC_RESTRICT ptr4;
-  orc_union32 var40;
-  orc_union32 var41;
-  orc_union16 var42;
-  orc_union16 var43;
-  orc_int8 var44;
-  orc_int8 var45;
-  orc_int8 var46;
-  orc_int8 var47;
-  orc_union16 var48;
-  orc_union16 var49;
+  orc_union32 var34;
+  orc_union32 var35;
+  orc_union32 var36;
+  orc_union32 var37;
 
   ptr0 = (orc_union32 *) ex->arrays[0];
   ptr4 = (orc_union32 *) ex->arrays[4];
@@ -4325,51 +4696,15 @@
 
   for (i = 0; i < n; i++) {
     /* 0: loadl */
-    var40 = ptr4[i];
-    /* 1: splitlw */
-    {
-      orc_union32 _src;
-      _src.i = var40.i;
-      var42.i = _src.x2[1];
-      var43.i = _src.x2[0];
-    }
-    /* 2: splitwb */
-    {
-      orc_union16 _src;
-      _src.i = var42.i;
-      var44 = _src.x2[1];
-      var45 = _src.x2[0];
-    }
-    /* 3: splitwb */
-    {
-      orc_union16 _src;
-      _src.i = var43.i;
-      var46 = _src.x2[1];
-      var47 = _src.x2[0];
-    }
-    /* 4: mergebw */
-    {
-      orc_union16 _dest;
-      _dest.x2[0] = var44;
-      _dest.x2[1] = var47;
-      var48.i = _dest.i;
-    }
-    /* 5: mergebw */
-    {
-      orc_union16 _dest;
-      _dest.x2[0] = var46;
-      _dest.x2[1] = var45;
-      var49.i = _dest.i;
-    }
-    /* 6: mergewl */
-    {
-      orc_union32 _dest;
-      _dest.x2[0] = var49.i;
-      _dest.x2[1] = var48.i;
-      var41.i = _dest.i;
-    }
-    /* 7: storel */
-    ptr0[i] = var41;
+    var35 = ptr4[i];
+    /* 1: shrul */
+    var36.i = ((orc_uint32) var35.i) >> 8;
+    /* 2: shll */
+    var37.i = ((orc_uint32) var35.i) << 24;
+    /* 3: orl */
+    var34.i = var37.i | var36.i;
+    /* 4: storel */
+    ptr0[i] = var34;
   }
 
 }
@@ -4391,10 +4726,9 @@
 #if 1
       static const orc_uint8 bc[] = {
         1, 9, 19, 118, 105, 100, 101, 111, 95, 111, 114, 99, 95, 112, 97, 99,
-        107, 95, 82, 71, 66, 65, 11, 4, 4, 12, 4, 4, 20, 1, 20, 1,
-        20, 1, 20, 1, 20, 2, 20, 2, 20, 2, 20, 2, 198, 39, 38, 4,
-        199, 35, 34, 39, 199, 33, 32, 38, 196, 37, 35, 32, 196, 36, 33, 34,
-        195, 0, 36, 37, 2, 0,
+        107, 95, 82, 71, 66, 65, 11, 4, 4, 12, 4, 4, 14, 4, 8, 0,
+        0, 0, 14, 4, 24, 0, 0, 0, 20, 4, 20, 4, 113, 33, 4, 126,
+        32, 33, 16, 124, 33, 33, 17, 123, 0, 33, 32, 2, 0,
       };
       p = orc_program_new_from_static_bytecode (bc);
       orc_program_set_backup_function (p, _backup_video_orc_pack_RGBA);
@@ -4404,26 +4738,18 @@
       orc_program_set_backup_function (p, _backup_video_orc_pack_RGBA);
       orc_program_add_destination (p, 4, "d1");
       orc_program_add_source (p, 4, "s1");
-      orc_program_add_temporary (p, 1, "t1");
-      orc_program_add_temporary (p, 1, "t2");
-      orc_program_add_temporary (p, 1, "t3");
-      orc_program_add_temporary (p, 1, "t4");
-      orc_program_add_temporary (p, 2, "t5");
-      orc_program_add_temporary (p, 2, "t6");
-      orc_program_add_temporary (p, 2, "t7");
-      orc_program_add_temporary (p, 2, "t8");
+      orc_program_add_constant (p, 4, 0x00000008, "c1");
+      orc_program_add_constant (p, 4, 0x00000018, "c2");
+      orc_program_add_temporary (p, 4, "t1");
+      orc_program_add_temporary (p, 4, "t2");
 
-      orc_program_append_2 (p, "splitlw", 0, ORC_VAR_T8, ORC_VAR_T7, ORC_VAR_S1,
+      orc_program_append_2 (p, "loadl", 0, ORC_VAR_T2, ORC_VAR_S1, ORC_VAR_D1,
           ORC_VAR_D1);
-      orc_program_append_2 (p, "splitwb", 0, ORC_VAR_T4, ORC_VAR_T3, ORC_VAR_T8,
+      orc_program_append_2 (p, "shrul", 0, ORC_VAR_T1, ORC_VAR_T2, ORC_VAR_C1,
           ORC_VAR_D1);
-      orc_program_append_2 (p, "splitwb", 0, ORC_VAR_T2, ORC_VAR_T1, ORC_VAR_T7,
+      orc_program_append_2 (p, "shll", 0, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_C2,
           ORC_VAR_D1);
-      orc_program_append_2 (p, "mergebw", 0, ORC_VAR_T6, ORC_VAR_T4, ORC_VAR_T1,
-          ORC_VAR_D1);
-      orc_program_append_2 (p, "mergebw", 0, ORC_VAR_T5, ORC_VAR_T2, ORC_VAR_T3,
-          ORC_VAR_D1);
-      orc_program_append_2 (p, "mergewl", 0, ORC_VAR_D1, ORC_VAR_T5, ORC_VAR_T6,
+      orc_program_append_2 (p, "orl", 0, ORC_VAR_D1, ORC_VAR_T2, ORC_VAR_T1,
           ORC_VAR_D1);
 #endif
 
@@ -4456,16 +4782,10 @@
   int i;
   orc_union32 *ORC_RESTRICT ptr0;
   const orc_union32 *ORC_RESTRICT ptr4;
-  orc_union32 var40;
-  orc_union32 var41;
-  orc_union16 var42;
-  orc_union16 var43;
-  orc_int8 var44;
-  orc_int8 var45;
-  orc_int8 var46;
-  orc_int8 var47;
-  orc_union16 var48;
-  orc_union16 var49;
+  orc_union32 var34;
+  orc_union32 var35;
+  orc_union32 var36;
+  orc_union32 var37;
 
   ptr0 = (orc_union32 *) d1;
   ptr4 = (orc_union32 *) s1;
@@ -4473,51 +4793,15 @@
 
   for (i = 0; i < n; i++) {
     /* 0: loadl */
-    var40 = ptr4[i];
-    /* 1: splitlw */
-    {
-      orc_union32 _src;
-      _src.i = var40.i;
-      var42.i = _src.x2[1];
-      var43.i = _src.x2[0];
-    }
-    /* 2: splitwb */
-    {
-      orc_union16 _src;
-      _src.i = var43.i;
-      var44 = _src.x2[1];
-      var45 = _src.x2[0];
-    }
-    /* 3: splitwb */
-    {
-      orc_union16 _src;
-      _src.i = var42.i;
-      var46 = _src.x2[1];
-      var47 = _src.x2[0];
-    }
-    /* 4: mergebw */
-    {
-      orc_union16 _dest;
-      _dest.x2[0] = var46;
-      _dest.x2[1] = var45;
-      var48.i = _dest.i;
-    }
-    /* 5: mergebw */
-    {
-      orc_union16 _dest;
-      _dest.x2[0] = var44;
-      _dest.x2[1] = var47;
-      var49.i = _dest.i;
-    }
-    /* 6: mergewl */
-    {
-      orc_union32 _dest;
-      _dest.x2[0] = var48.i;
-      _dest.x2[1] = var49.i;
-      var41.i = _dest.i;
-    }
-    /* 7: storel */
-    ptr0[i] = var41;
+    var35 = ptr4[i];
+    /* 1: shll */
+    var36.i = ((orc_uint32) var35.i) << 8;
+    /* 2: shrul */
+    var37.i = ((orc_uint32) var35.i) >> 24;
+    /* 3: orl */
+    var34.i = var37.i | var36.i;
+    /* 4: storel */
+    ptr0[i] = var34;
   }
 
 }
@@ -4530,16 +4814,10 @@
   int n = ex->n;
   orc_union32 *ORC_RESTRICT ptr0;
   const orc_union32 *ORC_RESTRICT ptr4;
-  orc_union32 var40;
-  orc_union32 var41;
-  orc_union16 var42;
-  orc_union16 var43;
-  orc_int8 var44;
-  orc_int8 var45;
-  orc_int8 var46;
-  orc_int8 var47;
-  orc_union16 var48;
-  orc_union16 var49;
+  orc_union32 var34;
+  orc_union32 var35;
+  orc_union32 var36;
+  orc_union32 var37;
 
   ptr0 = (orc_union32 *) ex->arrays[0];
   ptr4 = (orc_union32 *) ex->arrays[4];
@@ -4547,51 +4825,15 @@
 
   for (i = 0; i < n; i++) {
     /* 0: loadl */
-    var40 = ptr4[i];
-    /* 1: splitlw */
-    {
-      orc_union32 _src;
-      _src.i = var40.i;
-      var42.i = _src.x2[1];
-      var43.i = _src.x2[0];
-    }
-    /* 2: splitwb */
-    {
-      orc_union16 _src;
-      _src.i = var43.i;
-      var44 = _src.x2[1];
-      var45 = _src.x2[0];
-    }
-    /* 3: splitwb */
-    {
-      orc_union16 _src;
-      _src.i = var42.i;
-      var46 = _src.x2[1];
-      var47 = _src.x2[0];
-    }
-    /* 4: mergebw */
-    {
-      orc_union16 _dest;
-      _dest.x2[0] = var46;
-      _dest.x2[1] = var45;
-      var48.i = _dest.i;
-    }
-    /* 5: mergebw */
-    {
-      orc_union16 _dest;
-      _dest.x2[0] = var44;
-      _dest.x2[1] = var47;
-      var49.i = _dest.i;
-    }
-    /* 6: mergewl */
-    {
-      orc_union32 _dest;
-      _dest.x2[0] = var48.i;
-      _dest.x2[1] = var49.i;
-      var41.i = _dest.i;
-    }
-    /* 7: storel */
-    ptr0[i] = var41;
+    var35 = ptr4[i];
+    /* 1: shll */
+    var36.i = ((orc_uint32) var35.i) << 8;
+    /* 2: shrul */
+    var37.i = ((orc_uint32) var35.i) >> 24;
+    /* 3: orl */
+    var34.i = var37.i | var36.i;
+    /* 4: storel */
+    ptr0[i] = var34;
   }
 
 }
@@ -4613,10 +4855,9 @@
 #if 1
       static const orc_uint8 bc[] = {
         1, 9, 21, 118, 105, 100, 101, 111, 95, 111, 114, 99, 95, 117, 110, 112,
-        97, 99, 107, 95, 82, 71, 66, 65, 11, 4, 4, 12, 4, 4, 20, 1,
-        20, 1, 20, 1, 20, 1, 20, 2, 20, 2, 20, 2, 20, 2, 198, 37,
-        36, 4, 199, 34, 33, 36, 199, 32, 35, 37, 196, 38, 32, 33, 196, 39,
-        34, 35, 195, 0, 38, 39, 2, 0,
+        97, 99, 107, 95, 82, 71, 66, 65, 11, 4, 4, 12, 4, 4, 14, 4,
+        8, 0, 0, 0, 14, 4, 24, 0, 0, 0, 20, 4, 20, 4, 113, 33,
+        4, 124, 32, 33, 16, 126, 33, 33, 17, 123, 0, 33, 32, 2, 0,
       };
       p = orc_program_new_from_static_bytecode (bc);
       orc_program_set_backup_function (p, _backup_video_orc_unpack_RGBA);
@@ -4626,26 +4867,18 @@
       orc_program_set_backup_function (p, _backup_video_orc_unpack_RGBA);
       orc_program_add_destination (p, 4, "d1");
       orc_program_add_source (p, 4, "s1");
-      orc_program_add_temporary (p, 1, "t1");
-      orc_program_add_temporary (p, 1, "t2");
-      orc_program_add_temporary (p, 1, "t3");
-      orc_program_add_temporary (p, 1, "t4");
-      orc_program_add_temporary (p, 2, "t5");
-      orc_program_add_temporary (p, 2, "t6");
-      orc_program_add_temporary (p, 2, "t7");
-      orc_program_add_temporary (p, 2, "t8");
+      orc_program_add_constant (p, 4, 0x00000008, "c1");
+      orc_program_add_constant (p, 4, 0x00000018, "c2");
+      orc_program_add_temporary (p, 4, "t1");
+      orc_program_add_temporary (p, 4, "t2");
 
-      orc_program_append_2 (p, "splitlw", 0, ORC_VAR_T6, ORC_VAR_T5, ORC_VAR_S1,
+      orc_program_append_2 (p, "loadl", 0, ORC_VAR_T2, ORC_VAR_S1, ORC_VAR_D1,
           ORC_VAR_D1);
-      orc_program_append_2 (p, "splitwb", 0, ORC_VAR_T3, ORC_VAR_T2, ORC_VAR_T5,
+      orc_program_append_2 (p, "shll", 0, ORC_VAR_T1, ORC_VAR_T2, ORC_VAR_C1,
           ORC_VAR_D1);
-      orc_program_append_2 (p, "splitwb", 0, ORC_VAR_T1, ORC_VAR_T4, ORC_VAR_T6,
+      orc_program_append_2 (p, "shrul", 0, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_C2,
           ORC_VAR_D1);
-      orc_program_append_2 (p, "mergebw", 0, ORC_VAR_T7, ORC_VAR_T1, ORC_VAR_T2,
-          ORC_VAR_D1);
-      orc_program_append_2 (p, "mergebw", 0, ORC_VAR_T8, ORC_VAR_T3, ORC_VAR_T4,
-          ORC_VAR_D1);
-      orc_program_append_2 (p, "mergewl", 0, ORC_VAR_D1, ORC_VAR_T7, ORC_VAR_T8,
+      orc_program_append_2 (p, "orl", 0, ORC_VAR_D1, ORC_VAR_T2, ORC_VAR_T1,
           ORC_VAR_D1);
 #endif
 
@@ -4678,16 +4911,11 @@
   int i;
   orc_union32 *ORC_RESTRICT ptr0;
   const orc_union32 *ORC_RESTRICT ptr4;
-  orc_union32 var40;
-  orc_union32 var41;
-  orc_union16 var42;
-  orc_union16 var43;
-  orc_int8 var44;
-  orc_int8 var45;
-  orc_int8 var46;
-  orc_int8 var47;
-  orc_union16 var48;
-  orc_union16 var49;
+  orc_union32 var34;
+  orc_union32 var35;
+  orc_union32 var36;
+  orc_union32 var37;
+  orc_union32 var38;
 
   ptr0 = (orc_union32 *) d1;
   ptr4 = (orc_union32 *) s1;
@@ -4695,51 +4923,17 @@
 
   for (i = 0; i < n; i++) {
     /* 0: loadl */
-    var40 = ptr4[i];
-    /* 1: splitlw */
-    {
-      orc_union32 _src;
-      _src.i = var40.i;
-      var42.i = _src.x2[1];
-      var43.i = _src.x2[0];
-    }
-    /* 2: splitwb */
-    {
-      orc_union16 _src;
-      _src.i = var42.i;
-      var44 = _src.x2[1];
-      var45 = _src.x2[0];
-    }
-    /* 3: splitwb */
-    {
-      orc_union16 _src;
-      _src.i = var43.i;
-      var46 = _src.x2[1];
-      var47 = _src.x2[0];
-    }
-    /* 4: mergebw */
-    {
-      orc_union16 _dest;
-      _dest.x2[0] = var47;
-      _dest.x2[1] = var44;
-      var48.i = _dest.i;
-    }
-    /* 5: mergebw */
-    {
-      orc_union16 _dest;
-      _dest.x2[0] = var45;
-      _dest.x2[1] = var46;
-      var49.i = _dest.i;
-    }
-    /* 6: mergewl */
-    {
-      orc_union32 _dest;
-      _dest.x2[0] = var48.i;
-      _dest.x2[1] = var49.i;
-      var41.i = _dest.i;
-    }
-    /* 7: storel */
-    ptr0[i] = var41;
+    var34 = ptr4[i];
+    /* 1: swapl */
+    var36.i = ORC_SWAP_L (var34.i);
+    /* 2: shll */
+    var37.i = ((orc_uint32) var36.i) << 8;
+    /* 3: shrul */
+    var38.i = ((orc_uint32) var36.i) >> 24;
+    /* 4: orl */
+    var35.i = var38.i | var37.i;
+    /* 5: storel */
+    ptr0[i] = var35;
   }
 
 }
@@ -4752,16 +4946,11 @@
   int n = ex->n;
   orc_union32 *ORC_RESTRICT ptr0;
   const orc_union32 *ORC_RESTRICT ptr4;
-  orc_union32 var40;
-  orc_union32 var41;
-  orc_union16 var42;
-  orc_union16 var43;
-  orc_int8 var44;
-  orc_int8 var45;
-  orc_int8 var46;
-  orc_int8 var47;
-  orc_union16 var48;
-  orc_union16 var49;
+  orc_union32 var34;
+  orc_union32 var35;
+  orc_union32 var36;
+  orc_union32 var37;
+  orc_union32 var38;
 
   ptr0 = (orc_union32 *) ex->arrays[0];
   ptr4 = (orc_union32 *) ex->arrays[4];
@@ -4769,51 +4958,17 @@
 
   for (i = 0; i < n; i++) {
     /* 0: loadl */
-    var40 = ptr4[i];
-    /* 1: splitlw */
-    {
-      orc_union32 _src;
-      _src.i = var40.i;
-      var42.i = _src.x2[1];
-      var43.i = _src.x2[0];
-    }
-    /* 2: splitwb */
-    {
-      orc_union16 _src;
-      _src.i = var42.i;
-      var44 = _src.x2[1];
-      var45 = _src.x2[0];
-    }
-    /* 3: splitwb */
-    {
-      orc_union16 _src;
-      _src.i = var43.i;
-      var46 = _src.x2[1];
-      var47 = _src.x2[0];
-    }
-    /* 4: mergebw */
-    {
-      orc_union16 _dest;
-      _dest.x2[0] = var47;
-      _dest.x2[1] = var44;
-      var48.i = _dest.i;
-    }
-    /* 5: mergebw */
-    {
-      orc_union16 _dest;
-      _dest.x2[0] = var45;
-      _dest.x2[1] = var46;
-      var49.i = _dest.i;
-    }
-    /* 6: mergewl */
-    {
-      orc_union32 _dest;
-      _dest.x2[0] = var48.i;
-      _dest.x2[1] = var49.i;
-      var41.i = _dest.i;
-    }
-    /* 7: storel */
-    ptr0[i] = var41;
+    var34 = ptr4[i];
+    /* 1: swapl */
+    var36.i = ORC_SWAP_L (var34.i);
+    /* 2: shll */
+    var37.i = ((orc_uint32) var36.i) << 8;
+    /* 3: shrul */
+    var38.i = ((orc_uint32) var36.i) >> 24;
+    /* 4: orl */
+    var35.i = var38.i | var37.i;
+    /* 5: storel */
+    ptr0[i] = var35;
   }
 
 }
@@ -4835,10 +4990,9 @@
 #if 1
       static const orc_uint8 bc[] = {
         1, 9, 21, 118, 105, 100, 101, 111, 95, 111, 114, 99, 95, 117, 110, 112,
-        97, 99, 107, 95, 65, 66, 71, 82, 11, 4, 4, 12, 4, 4, 20, 1,
-        20, 1, 20, 1, 20, 1, 20, 2, 20, 2, 20, 2, 20, 2, 198, 36,
-        37, 4, 199, 33, 34, 36, 199, 35, 32, 37, 196, 38, 32, 33, 196, 39,
-        34, 35, 195, 0, 38, 39, 2, 0,
+        97, 99, 107, 95, 65, 66, 71, 82, 11, 4, 4, 12, 4, 4, 14, 4,
+        8, 0, 0, 0, 14, 4, 24, 0, 0, 0, 20, 4, 20, 4, 184, 33,
+        4, 124, 32, 33, 16, 126, 33, 33, 17, 123, 0, 33, 32, 2, 0,
       };
       p = orc_program_new_from_static_bytecode (bc);
       orc_program_set_backup_function (p, _backup_video_orc_unpack_ABGR);
@@ -4848,26 +5002,18 @@
       orc_program_set_backup_function (p, _backup_video_orc_unpack_ABGR);
       orc_program_add_destination (p, 4, "d1");
       orc_program_add_source (p, 4, "s1");
-      orc_program_add_temporary (p, 1, "t1");
-      orc_program_add_temporary (p, 1, "t2");
-      orc_program_add_temporary (p, 1, "t3");
-      orc_program_add_temporary (p, 1, "t4");
-      orc_program_add_temporary (p, 2, "t5");
-      orc_program_add_temporary (p, 2, "t6");
-      orc_program_add_temporary (p, 2, "t7");
-      orc_program_add_temporary (p, 2, "t8");
+      orc_program_add_constant (p, 4, 0x00000008, "c1");
+      orc_program_add_constant (p, 4, 0x00000018, "c2");
+      orc_program_add_temporary (p, 4, "t1");
+      orc_program_add_temporary (p, 4, "t2");
 
-      orc_program_append_2 (p, "splitlw", 0, ORC_VAR_T5, ORC_VAR_T6, ORC_VAR_S1,
+      orc_program_append_2 (p, "swapl", 0, ORC_VAR_T2, ORC_VAR_S1, ORC_VAR_D1,
           ORC_VAR_D1);
-      orc_program_append_2 (p, "splitwb", 0, ORC_VAR_T2, ORC_VAR_T3, ORC_VAR_T5,
+      orc_program_append_2 (p, "shll", 0, ORC_VAR_T1, ORC_VAR_T2, ORC_VAR_C1,
           ORC_VAR_D1);
-      orc_program_append_2 (p, "splitwb", 0, ORC_VAR_T4, ORC_VAR_T1, ORC_VAR_T6,
+      orc_program_append_2 (p, "shrul", 0, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_C2,
           ORC_VAR_D1);
-      orc_program_append_2 (p, "mergebw", 0, ORC_VAR_T7, ORC_VAR_T1, ORC_VAR_T2,
-          ORC_VAR_D1);
-      orc_program_append_2 (p, "mergebw", 0, ORC_VAR_T8, ORC_VAR_T3, ORC_VAR_T4,
-          ORC_VAR_D1);
-      orc_program_append_2 (p, "mergewl", 0, ORC_VAR_D1, ORC_VAR_T7, ORC_VAR_T8,
+      orc_program_append_2 (p, "orl", 0, ORC_VAR_D1, ORC_VAR_T2, ORC_VAR_T1,
           ORC_VAR_D1);
 #endif
 
@@ -4900,16 +5046,11 @@
   int i;
   orc_union32 *ORC_RESTRICT ptr0;
   const orc_union32 *ORC_RESTRICT ptr4;
-  orc_union32 var40;
-  orc_union32 var41;
-  orc_union16 var42;
-  orc_union16 var43;
-  orc_int8 var44;
-  orc_int8 var45;
-  orc_int8 var46;
-  orc_int8 var47;
-  orc_union16 var48;
-  orc_union16 var49;
+  orc_union32 var34;
+  orc_union32 var35;
+  orc_union32 var36;
+  orc_union32 var37;
+  orc_union32 var38;
 
   ptr0 = (orc_union32 *) d1;
   ptr4 = (orc_union32 *) s1;
@@ -4917,51 +5058,17 @@
 
   for (i = 0; i < n; i++) {
     /* 0: loadl */
-    var40 = ptr4[i];
-    /* 1: splitlw */
-    {
-      orc_union32 _src;
-      _src.i = var40.i;
-      var42.i = _src.x2[1];
-      var43.i = _src.x2[0];
-    }
-    /* 2: splitwb */
-    {
-      orc_union16 _src;
-      _src.i = var42.i;
-      var44 = _src.x2[1];
-      var45 = _src.x2[0];
-    }
-    /* 3: splitwb */
-    {
-      orc_union16 _src;
-      _src.i = var43.i;
-      var46 = _src.x2[1];
-      var47 = _src.x2[0];
-    }
-    /* 4: mergebw */
-    {
-      orc_union16 _dest;
-      _dest.x2[0] = var47;
-      _dest.x2[1] = var44;
-      var48.i = _dest.i;
-    }
-    /* 5: mergebw */
-    {
-      orc_union16 _dest;
-      _dest.x2[0] = var45;
-      _dest.x2[1] = var46;
-      var49.i = _dest.i;
-    }
-    /* 6: mergewl */
-    {
-      orc_union32 _dest;
-      _dest.x2[0] = var48.i;
-      _dest.x2[1] = var49.i;
-      var41.i = _dest.i;
-    }
-    /* 7: storel */
-    ptr0[i] = var41;
+    var34 = ptr4[i];
+    /* 1: swapl */
+    var36.i = ORC_SWAP_L (var34.i);
+    /* 2: shll */
+    var37.i = ((orc_uint32) var36.i) << 8;
+    /* 3: shrul */
+    var38.i = ((orc_uint32) var36.i) >> 24;
+    /* 4: orl */
+    var35.i = var38.i | var37.i;
+    /* 5: storel */
+    ptr0[i] = var35;
   }
 
 }
@@ -4974,16 +5081,11 @@
   int n = ex->n;
   orc_union32 *ORC_RESTRICT ptr0;
   const orc_union32 *ORC_RESTRICT ptr4;
-  orc_union32 var40;
-  orc_union32 var41;
-  orc_union16 var42;
-  orc_union16 var43;
-  orc_int8 var44;
-  orc_int8 var45;
-  orc_int8 var46;
-  orc_int8 var47;
-  orc_union16 var48;
-  orc_union16 var49;
+  orc_union32 var34;
+  orc_union32 var35;
+  orc_union32 var36;
+  orc_union32 var37;
+  orc_union32 var38;
 
   ptr0 = (orc_union32 *) ex->arrays[0];
   ptr4 = (orc_union32 *) ex->arrays[4];
@@ -4991,51 +5093,17 @@
 
   for (i = 0; i < n; i++) {
     /* 0: loadl */
-    var40 = ptr4[i];
-    /* 1: splitlw */
-    {
-      orc_union32 _src;
-      _src.i = var40.i;
-      var42.i = _src.x2[1];
-      var43.i = _src.x2[0];
-    }
-    /* 2: splitwb */
-    {
-      orc_union16 _src;
-      _src.i = var42.i;
-      var44 = _src.x2[1];
-      var45 = _src.x2[0];
-    }
-    /* 3: splitwb */
-    {
-      orc_union16 _src;
-      _src.i = var43.i;
-      var46 = _src.x2[1];
-      var47 = _src.x2[0];
-    }
-    /* 4: mergebw */
-    {
-      orc_union16 _dest;
-      _dest.x2[0] = var47;
-      _dest.x2[1] = var44;
-      var48.i = _dest.i;
-    }
-    /* 5: mergebw */
-    {
-      orc_union16 _dest;
-      _dest.x2[0] = var45;
-      _dest.x2[1] = var46;
-      var49.i = _dest.i;
-    }
-    /* 6: mergewl */
-    {
-      orc_union32 _dest;
-      _dest.x2[0] = var48.i;
-      _dest.x2[1] = var49.i;
-      var41.i = _dest.i;
-    }
-    /* 7: storel */
-    ptr0[i] = var41;
+    var34 = ptr4[i];
+    /* 1: swapl */
+    var36.i = ORC_SWAP_L (var34.i);
+    /* 2: shll */
+    var37.i = ((orc_uint32) var36.i) << 8;
+    /* 3: shrul */
+    var38.i = ((orc_uint32) var36.i) >> 24;
+    /* 4: orl */
+    var35.i = var38.i | var37.i;
+    /* 5: storel */
+    ptr0[i] = var35;
   }
 
 }
@@ -5057,10 +5125,9 @@
 #if 1
       static const orc_uint8 bc[] = {
         1, 9, 19, 118, 105, 100, 101, 111, 95, 111, 114, 99, 95, 112, 97, 99,
-        107, 95, 65, 66, 71, 82, 11, 4, 4, 12, 4, 4, 20, 1, 20, 1,
-        20, 1, 20, 1, 20, 2, 20, 2, 20, 2, 20, 2, 198, 39, 38, 4,
-        199, 35, 34, 39, 199, 33, 32, 38, 196, 37, 32, 35, 196, 36, 34, 33,
-        195, 0, 37, 36, 2, 0,
+        107, 95, 65, 66, 71, 82, 11, 4, 4, 12, 4, 4, 14, 4, 8, 0,
+        0, 0, 14, 4, 24, 0, 0, 0, 20, 4, 20, 4, 184, 33, 4, 124,
+        32, 33, 16, 126, 33, 33, 17, 123, 0, 33, 32, 2, 0,
       };
       p = orc_program_new_from_static_bytecode (bc);
       orc_program_set_backup_function (p, _backup_video_orc_pack_ABGR);
@@ -5070,26 +5137,18 @@
       orc_program_set_backup_function (p, _backup_video_orc_pack_ABGR);
       orc_program_add_destination (p, 4, "d1");
       orc_program_add_source (p, 4, "s1");
-      orc_program_add_temporary (p, 1, "t1");
-      orc_program_add_temporary (p, 1, "t2");
-      orc_program_add_temporary (p, 1, "t3");
-      orc_program_add_temporary (p, 1, "t4");
-      orc_program_add_temporary (p, 2, "t5");
-      orc_program_add_temporary (p, 2, "t6");
-      orc_program_add_temporary (p, 2, "t7");
-      orc_program_add_temporary (p, 2, "t8");
+      orc_program_add_constant (p, 4, 0x00000008, "c1");
+      orc_program_add_constant (p, 4, 0x00000018, "c2");
+      orc_program_add_temporary (p, 4, "t1");
+      orc_program_add_temporary (p, 4, "t2");
 
-      orc_program_append_2 (p, "splitlw", 0, ORC_VAR_T8, ORC_VAR_T7, ORC_VAR_S1,
+      orc_program_append_2 (p, "swapl", 0, ORC_VAR_T2, ORC_VAR_S1, ORC_VAR_D1,
           ORC_VAR_D1);
-      orc_program_append_2 (p, "splitwb", 0, ORC_VAR_T4, ORC_VAR_T3, ORC_VAR_T8,
+      orc_program_append_2 (p, "shll", 0, ORC_VAR_T1, ORC_VAR_T2, ORC_VAR_C1,
           ORC_VAR_D1);
-      orc_program_append_2 (p, "splitwb", 0, ORC_VAR_T2, ORC_VAR_T1, ORC_VAR_T7,
+      orc_program_append_2 (p, "shrul", 0, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_C2,
           ORC_VAR_D1);
-      orc_program_append_2 (p, "mergebw", 0, ORC_VAR_T6, ORC_VAR_T1, ORC_VAR_T4,
-          ORC_VAR_D1);
-      orc_program_append_2 (p, "mergebw", 0, ORC_VAR_T5, ORC_VAR_T3, ORC_VAR_T2,
-          ORC_VAR_D1);
-      orc_program_append_2 (p, "mergewl", 0, ORC_VAR_D1, ORC_VAR_T6, ORC_VAR_T5,
+      orc_program_append_2 (p, "orl", 0, ORC_VAR_D1, ORC_VAR_T2, ORC_VAR_T1,
           ORC_VAR_D1);
 #endif
 
@@ -6716,6 +6775,5679 @@
 #endif
 
 
+/* video_orc_pack_AY */
+#ifdef DISABLE_ORC
+void
+video_orc_pack_AY (guint8 * ORC_RESTRICT d1, guint8 * ORC_RESTRICT d2,
+    const guint8 * ORC_RESTRICT s1, int n)
+{
+  int i;
+  orc_int8 *ORC_RESTRICT ptr0;
+  orc_int8 *ORC_RESTRICT ptr1;
+  const orc_union32 *ORC_RESTRICT ptr4;
+  orc_union32 var33;
+  orc_int8 var34;
+  orc_int8 var35;
+  orc_union16 var36;
+
+  ptr0 = (orc_int8 *) d1;
+  ptr1 = (orc_int8 *) d2;
+  ptr4 = (orc_union32 *) s1;
+
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadl */
+    var33 = ptr4[i];
+    /* 1: select0lw */
+    {
+      orc_union32 _src;
+      _src.i = var33.i;
+      var36.i = _src.x2[0];
+    }
+    /* 2: select1wb */
+    {
+      orc_union16 _src;
+      _src.i = var36.i;
+      var34 = _src.x2[1];
+    }
+    /* 3: storeb */
+    ptr0[i] = var34;
+    /* 4: select0wb */
+    {
+      orc_union16 _src;
+      _src.i = var36.i;
+      var35 = _src.x2[0];
+    }
+    /* 5: storeb */
+    ptr1[i] = var35;
+  }
+
+}
+
+#else
+static void
+_backup_video_orc_pack_AY (OrcExecutor * ORC_RESTRICT ex)
+{
+  int i;
+  int n = ex->n;
+  orc_int8 *ORC_RESTRICT ptr0;
+  orc_int8 *ORC_RESTRICT ptr1;
+  const orc_union32 *ORC_RESTRICT ptr4;
+  orc_union32 var33;
+  orc_int8 var34;
+  orc_int8 var35;
+  orc_union16 var36;
+
+  ptr0 = (orc_int8 *) ex->arrays[0];
+  ptr1 = (orc_int8 *) ex->arrays[1];
+  ptr4 = (orc_union32 *) ex->arrays[4];
+
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadl */
+    var33 = ptr4[i];
+    /* 1: select0lw */
+    {
+      orc_union32 _src;
+      _src.i = var33.i;
+      var36.i = _src.x2[0];
+    }
+    /* 2: select1wb */
+    {
+      orc_union16 _src;
+      _src.i = var36.i;
+      var34 = _src.x2[1];
+    }
+    /* 3: storeb */
+    ptr0[i] = var34;
+    /* 4: select0wb */
+    {
+      orc_union16 _src;
+      _src.i = var36.i;
+      var35 = _src.x2[0];
+    }
+    /* 5: storeb */
+    ptr1[i] = var35;
+  }
+
+}
+
+void
+video_orc_pack_AY (guint8 * ORC_RESTRICT d1, guint8 * ORC_RESTRICT d2,
+    const guint8 * ORC_RESTRICT s1, int n)
+{
+  OrcExecutor _ex, *ex = &_ex;
+  static volatile int p_inited = 0;
+  static OrcCode *c = 0;
+  void (*func) (OrcExecutor *);
+
+  if (!p_inited) {
+    orc_once_mutex_lock ();
+    if (!p_inited) {
+      OrcProgram *p;
+
+#if 1
+      static const orc_uint8 bc[] = {
+        1, 9, 17, 118, 105, 100, 101, 111, 95, 111, 114, 99, 95, 112, 97, 99,
+        107, 95, 65, 89, 11, 1, 1, 11, 1, 1, 12, 4, 4, 20, 2, 190,
+        32, 4, 189, 0, 32, 188, 1, 32, 2, 0,
+      };
+      p = orc_program_new_from_static_bytecode (bc);
+      orc_program_set_backup_function (p, _backup_video_orc_pack_AY);
+#else
+      p = orc_program_new ();
+      orc_program_set_name (p, "video_orc_pack_AY");
+      orc_program_set_backup_function (p, _backup_video_orc_pack_AY);
+      orc_program_add_destination (p, 1, "d1");
+      orc_program_add_destination (p, 1, "d2");
+      orc_program_add_source (p, 4, "s1");
+      orc_program_add_temporary (p, 2, "t1");
+
+      orc_program_append_2 (p, "select0lw", 0, ORC_VAR_T1, ORC_VAR_S1,
+          ORC_VAR_D1, ORC_VAR_D1);
+      orc_program_append_2 (p, "select1wb", 0, ORC_VAR_D1, ORC_VAR_T1,
+          ORC_VAR_D1, ORC_VAR_D1);
+      orc_program_append_2 (p, "select0wb", 0, ORC_VAR_D2, ORC_VAR_T1,
+          ORC_VAR_D1, ORC_VAR_D1);
+#endif
+
+      orc_program_compile (p);
+      c = orc_program_take_code (p);
+      orc_program_free (p);
+    }
+    p_inited = TRUE;
+    orc_once_mutex_unlock ();
+  }
+  ex->arrays[ORC_VAR_A2] = c;
+  ex->program = 0;
+
+  ex->n = n;
+  ex->arrays[ORC_VAR_D1] = d1;
+  ex->arrays[ORC_VAR_D2] = d2;
+  ex->arrays[ORC_VAR_S1] = (void *) s1;
+
+  func = c->exec;
+  func (ex);
+}
+#endif
+
+
+/* video_orc_unpack_RGB15_le */
+#ifdef DISABLE_ORC
+void
+video_orc_unpack_RGB15_le (guint32 * ORC_RESTRICT d1,
+    const guint16 * ORC_RESTRICT s1, int n)
+{
+  int i;
+  orc_union32 *ORC_RESTRICT ptr0;
+  const orc_union16 *ORC_RESTRICT ptr4;
+#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
+  volatile orc_union16 var38;
+#else
+  orc_union16 var38;
+#endif
+#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
+  volatile orc_union16 var39;
+#else
+  orc_union16 var39;
+#endif
+#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
+  volatile orc_union16 var40;
+#else
+  orc_union16 var40;
+#endif
+#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
+  volatile orc_union16 var41;
+#else
+  orc_union16 var41;
+#endif
+#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
+  volatile orc_union16 var42;
+#else
+  orc_union16 var42;
+#endif
+#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
+  volatile orc_union16 var43;
+#else
+  orc_union16 var43;
+#endif
+  orc_union32 var44;
+  orc_union16 var45;
+  orc_union16 var46;
+  orc_union16 var47;
+  orc_union16 var48;
+  orc_union16 var49;
+  orc_union16 var50;
+  orc_union16 var51;
+  orc_union16 var52;
+  orc_union32 var53;
+  orc_union32 var54;
+  orc_union32 var55;
+
+  ptr0 = (orc_union32 *) d1;
+  ptr4 = (orc_union16 *) s1;
+
+  /* 1: loadpw */
+  var38.i = (int) 0x00007c00;   /* 31744 or 1.56836e-319f */
+  /* 3: loadpw */
+  var39.i = (int) 0x000003e0;   /* 992 or 4.90113e-321f */
+  /* 5: loadpw */
+  var40.i = (int) 0x0000001f;   /* 31 or 1.5316e-322f */
+  /* 8: loadpw */
+  var41.i = (int) 0x00000210;   /* 528 or 2.60867e-321f */
+  /* 10: loadpw */
+  var42.i = (int) 0x00004200;   /* 16896 or 8.34773e-320f */
+  /* 13: loadpw */
+  var43.i = (int) 0x000000ff;   /* 255 or 1.25987e-321f */
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadw */
+    var45 = ptr4[i];
+    /* 2: andw */
+    var46.i = var45.i & var38.i;
+    /* 4: andw */
+    var47.i = var45.i & var39.i;
+    /* 6: andw */
+    var48.i = var45.i & var40.i;
+    /* 7: shlw */
+    var49.i = ((orc_uint16) var48.i) << 5;
+    /* 9: mulhsw */
+    var50.i = (var46.i * var41.i) >> 16;
+    /* 11: mulhsw */
+    var51.i = (var47.i * var42.i) >> 16;
+    /* 12: mulhsw */
+    var52.i = (var49.i * var42.i) >> 16;
+    /* 14: mergewl */
+    {
+      orc_union32 _dest;
+      _dest.x2[0] = var43.i;
+      _dest.x2[1] = var51.i;
+      var53.i = _dest.i;
+    }
+    /* 15: mergewl */
+    {
+      orc_union32 _dest;
+      _dest.x2[0] = var50.i;
+      _dest.x2[1] = var52.i;
+      var54.i = _dest.i;
+    }
+    /* 16: shll */
+    var55.i = ((orc_uint32) var54.i) << 8;
+    /* 17: orl */
+    var44.i = var53.i | var55.i;
+    /* 18: storel */
+    ptr0[i] = var44;
+  }
+
+}
+
+#else
+static void
+_backup_video_orc_unpack_RGB15_le (OrcExecutor * ORC_RESTRICT ex)
+{
+  int i;
+  int n = ex->n;
+  orc_union32 *ORC_RESTRICT ptr0;
+  const orc_union16 *ORC_RESTRICT ptr4;
+#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
+  volatile orc_union16 var38;
+#else
+  orc_union16 var38;
+#endif
+#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
+  volatile orc_union16 var39;
+#else
+  orc_union16 var39;
+#endif
+#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
+  volatile orc_union16 var40;
+#else
+  orc_union16 var40;
+#endif
+#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
+  volatile orc_union16 var41;
+#else
+  orc_union16 var41;
+#endif
+#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
+  volatile orc_union16 var42;
+#else
+  orc_union16 var42;
+#endif
+#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
+  volatile orc_union16 var43;
+#else
+  orc_union16 var43;
+#endif
+  orc_union32 var44;
+  orc_union16 var45;
+  orc_union16 var46;
+  orc_union16 var47;
+  orc_union16 var48;
+  orc_union16 var49;
+  orc_union16 var50;
+  orc_union16 var51;
+  orc_union16 var52;
+  orc_union32 var53;
+  orc_union32 var54;
+  orc_union32 var55;
+
+  ptr0 = (orc_union32 *) ex->arrays[0];
+  ptr4 = (orc_union16 *) ex->arrays[4];
+
+  /* 1: loadpw */
+  var38.i = (int) 0x00007c00;   /* 31744 or 1.56836e-319f */
+  /* 3: loadpw */
+  var39.i = (int) 0x000003e0;   /* 992 or 4.90113e-321f */
+  /* 5: loadpw */
+  var40.i = (int) 0x0000001f;   /* 31 or 1.5316e-322f */
+  /* 8: loadpw */
+  var41.i = (int) 0x00000210;   /* 528 or 2.60867e-321f */
+  /* 10: loadpw */
+  var42.i = (int) 0x00004200;   /* 16896 or 8.34773e-320f */
+  /* 13: loadpw */
+  var43.i = (int) 0x000000ff;   /* 255 or 1.25987e-321f */
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadw */
+    var45 = ptr4[i];
+    /* 2: andw */
+    var46.i = var45.i & var38.i;
+    /* 4: andw */
+    var47.i = var45.i & var39.i;
+    /* 6: andw */
+    var48.i = var45.i & var40.i;
+    /* 7: shlw */
+    var49.i = ((orc_uint16) var48.i) << 5;
+    /* 9: mulhsw */
+    var50.i = (var46.i * var41.i) >> 16;
+    /* 11: mulhsw */
+    var51.i = (var47.i * var42.i) >> 16;
+    /* 12: mulhsw */
+    var52.i = (var49.i * var42.i) >> 16;
+    /* 14: mergewl */
+    {
+      orc_union32 _dest;
+      _dest.x2[0] = var43.i;
+      _dest.x2[1] = var51.i;
+      var53.i = _dest.i;
+    }
+    /* 15: mergewl */
+    {
+      orc_union32 _dest;
+      _dest.x2[0] = var50.i;
+      _dest.x2[1] = var52.i;
+      var54.i = _dest.i;
+    }
+    /* 16: shll */
+    var55.i = ((orc_uint32) var54.i) << 8;
+    /* 17: orl */
+    var44.i = var53.i | var55.i;
+    /* 18: storel */
+    ptr0[i] = var44;
+  }
+
+}
+
+void
+video_orc_unpack_RGB15_le (guint32 * ORC_RESTRICT d1,
+    const guint16 * ORC_RESTRICT s1, int n)
+{
+  OrcExecutor _ex, *ex = &_ex;
+  static volatile int p_inited = 0;
+  static OrcCode *c = 0;
+  void (*func) (OrcExecutor *);
+
+  if (!p_inited) {
+    orc_once_mutex_lock ();
+    if (!p_inited) {
+      OrcProgram *p;
+
+#if 1
+      static const orc_uint8 bc[] = {
+        1, 9, 25, 118, 105, 100, 101, 111, 95, 111, 114, 99, 95, 117, 110, 112,
+        97, 99, 107, 95, 82, 71, 66, 49, 53, 95, 108, 101, 11, 4, 4, 12,
+        2, 2, 14, 2, 0, 124, 0, 0, 14, 2, 224, 3, 0, 0, 14, 2,
+        31, 0, 0, 0, 14, 2, 5, 0, 0, 0, 14, 2, 16, 2, 0, 0,
+        14, 2, 0, 66, 0, 0, 14, 2, 255, 0, 0, 0, 14, 4, 8, 0,
+        0, 0, 20, 2, 20, 2, 20, 2, 20, 2, 20, 4, 20, 4, 82, 32,
+        4, 73, 33, 32, 16, 73, 34, 32, 17, 73, 35, 32, 18, 93, 35, 35,
+        19, 90, 33, 33, 20, 90, 34, 34, 21, 90, 35, 35, 21, 195, 36, 22,
+        34, 195, 37, 33, 35, 124, 37, 37, 23, 123, 0, 36, 37, 2, 0,
+      };
+      p = orc_program_new_from_static_bytecode (bc);
+      orc_program_set_backup_function (p, _backup_video_orc_unpack_RGB15_le);
+#else
+      p = orc_program_new ();
+      orc_program_set_name (p, "video_orc_unpack_RGB15_le");
+      orc_program_set_backup_function (p, _backup_video_orc_unpack_RGB15_le);
+      orc_program_add_destination (p, 4, "d1");
+      orc_program_add_source (p, 2, "s1");
+      orc_program_add_constant (p, 2, 0x00007c00, "c1");
+      orc_program_add_constant (p, 2, 0x000003e0, "c2");
+      orc_program_add_constant (p, 2, 0x0000001f, "c3");
+      orc_program_add_constant (p, 2, 0x00000005, "c4");
+      orc_program_add_constant (p, 2, 0x00000210, "c5");
+      orc_program_add_constant (p, 2, 0x00004200, "c6");
+      orc_program_add_constant (p, 2, 0x000000ff, "c7");
+      orc_program_add_constant (p, 4, 0x00000008, "c8");
+      orc_program_add_temporary (p, 2, "t1");
+      orc_program_add_temporary (p, 2, "t2");
+      orc_program_add_temporary (p, 2, "t3");
+      orc_program_add_temporary (p, 2, "t4");
+      orc_program_add_temporary (p, 4, "t5");
+      orc_program_add_temporary (p, 4, "t6");
+
+      orc_program_append_2 (p, "loadw", 0, ORC_VAR_T1, ORC_VAR_S1, ORC_VAR_D1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "andw", 0, ORC_VAR_T2, ORC_VAR_T1, ORC_VAR_C1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "andw", 0, ORC_VAR_T3, ORC_VAR_T1, ORC_VAR_C2,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "andw", 0, ORC_VAR_T4, ORC_VAR_T1, ORC_VAR_C3,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "shlw", 0, ORC_VAR_T4, ORC_VAR_T4, ORC_VAR_C4,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "mulhsw", 0, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_C5,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "mulhsw", 0, ORC_VAR_T3, ORC_VAR_T3, ORC_VAR_C6,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "mulhsw", 0, ORC_VAR_T4, ORC_VAR_T4, ORC_VAR_C6,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "mergewl", 0, ORC_VAR_T5, ORC_VAR_C7, ORC_VAR_T3,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "mergewl", 0, ORC_VAR_T6, ORC_VAR_T2, ORC_VAR_T4,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "shll", 0, ORC_VAR_T6, ORC_VAR_T6, ORC_VAR_C8,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "orl", 0, ORC_VAR_D1, ORC_VAR_T5, ORC_VAR_T6,
+          ORC_VAR_D1);
+#endif
+
+      orc_program_compile (p);
+      c = orc_program_take_code (p);
+      orc_program_free (p);
+    }
+    p_inited = TRUE;
+    orc_once_mutex_unlock ();
+  }
+  ex->arrays[ORC_VAR_A2] = c;
+  ex->program = 0;
+
+  ex->n = n;
+  ex->arrays[ORC_VAR_D1] = d1;
+  ex->arrays[ORC_VAR_S1] = (void *) s1;
+
+  func = c->exec;
+  func (ex);
+}
+#endif
+
+
+/* video_orc_unpack_RGB15_be */
+#ifdef DISABLE_ORC
+void
+video_orc_unpack_RGB15_be (guint32 * ORC_RESTRICT d1,
+    const guint16 * ORC_RESTRICT s1, int n)
+{
+  int i;
+  orc_union32 *ORC_RESTRICT ptr0;
+  const orc_union16 *ORC_RESTRICT ptr4;
+#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
+  volatile orc_union16 var38;
+#else
+  orc_union16 var38;
+#endif
+#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
+  volatile orc_union16 var39;
+#else
+  orc_union16 var39;
+#endif
+#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
+  volatile orc_union16 var40;
+#else
+  orc_union16 var40;
+#endif
+#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
+  volatile orc_union16 var41;
+#else
+  orc_union16 var41;
+#endif
+#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
+  volatile orc_union16 var42;
+#else
+  orc_union16 var42;
+#endif
+#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
+  volatile orc_union16 var43;
+#else
+  orc_union16 var43;
+#endif
+  orc_union32 var44;
+  orc_union16 var45;
+  orc_union16 var46;
+  orc_union16 var47;
+  orc_union16 var48;
+  orc_union16 var49;
+  orc_union16 var50;
+  orc_union16 var51;
+  orc_union16 var52;
+  orc_union32 var53;
+  orc_union32 var54;
+  orc_union32 var55;
+
+  ptr0 = (orc_union32 *) d1;
+  ptr4 = (orc_union16 *) s1;
+
+  /* 1: loadpw */
+  var38.i = (int) 0x00007c00;   /* 31744 or 1.56836e-319f */
+  /* 3: loadpw */
+  var39.i = (int) 0x000003e0;   /* 992 or 4.90113e-321f */
+  /* 5: loadpw */
+  var40.i = (int) 0x0000001f;   /* 31 or 1.5316e-322f */
+  /* 8: loadpw */
+  var41.i = (int) 0x00000210;   /* 528 or 2.60867e-321f */
+  /* 10: loadpw */
+  var42.i = (int) 0x00004200;   /* 16896 or 8.34773e-320f */
+  /* 13: loadpw */
+  var43.i = (int) 0x000000ff;   /* 255 or 1.25987e-321f */
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadw */
+    var45 = ptr4[i];
+    /* 2: andw */
+    var46.i = var45.i & var38.i;
+    /* 4: andw */
+    var47.i = var45.i & var39.i;
+    /* 6: andw */
+    var48.i = var45.i & var40.i;
+    /* 7: shlw */
+    var49.i = ((orc_uint16) var48.i) << 5;
+    /* 9: mulhsw */
+    var50.i = (var46.i * var41.i) >> 16;
+    /* 11: mulhsw */
+    var51.i = (var47.i * var42.i) >> 16;
+    /* 12: mulhsw */
+    var52.i = (var49.i * var42.i) >> 16;
+    /* 14: mergewl */
+    {
+      orc_union32 _dest;
+      _dest.x2[0] = var43.i;
+      _dest.x2[1] = var51.i;
+      var53.i = _dest.i;
+    }
+    /* 15: mergewl */
+    {
+      orc_union32 _dest;
+      _dest.x2[0] = var50.i;
+      _dest.x2[1] = var52.i;
+      var54.i = _dest.i;
+    }
+    /* 16: shll */
+    var55.i = ((orc_uint32) var53.i) << 8;
+    /* 17: orl */
+    var44.i = var55.i | var54.i;
+    /* 18: storel */
+    ptr0[i] = var44;
+  }
+
+}
+
+#else
+static void
+_backup_video_orc_unpack_RGB15_be (OrcExecutor * ORC_RESTRICT ex)
+{
+  int i;
+  int n = ex->n;
+  orc_union32 *ORC_RESTRICT ptr0;
+  const orc_union16 *ORC_RESTRICT ptr4;
+#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
+  volatile orc_union16 var38;
+#else
+  orc_union16 var38;
+#endif
+#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
+  volatile orc_union16 var39;
+#else
+  orc_union16 var39;
+#endif
+#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
+  volatile orc_union16 var40;
+#else
+  orc_union16 var40;
+#endif
+#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
+  volatile orc_union16 var41;
+#else
+  orc_union16 var41;
+#endif
+#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
+  volatile orc_union16 var42;
+#else
+  orc_union16 var42;
+#endif
+#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
+  volatile orc_union16 var43;
+#else
+  orc_union16 var43;
+#endif
+  orc_union32 var44;
+  orc_union16 var45;
+  orc_union16 var46;
+  orc_union16 var47;
+  orc_union16 var48;
+  orc_union16 var49;
+  orc_union16 var50;
+  orc_union16 var51;
+  orc_union16 var52;
+  orc_union32 var53;
+  orc_union32 var54;
+  orc_union32 var55;
+
+  ptr0 = (orc_union32 *) ex->arrays[0];
+  ptr4 = (orc_union16 *) ex->arrays[4];
+
+  /* 1: loadpw */
+  var38.i = (int) 0x00007c00;   /* 31744 or 1.56836e-319f */
+  /* 3: loadpw */
+  var39.i = (int) 0x000003e0;   /* 992 or 4.90113e-321f */
+  /* 5: loadpw */
+  var40.i = (int) 0x0000001f;   /* 31 or 1.5316e-322f */
+  /* 8: loadpw */
+  var41.i = (int) 0x00000210;   /* 528 or 2.60867e-321f */
+  /* 10: loadpw */
+  var42.i = (int) 0x00004200;   /* 16896 or 8.34773e-320f */
+  /* 13: loadpw */
+  var43.i = (int) 0x000000ff;   /* 255 or 1.25987e-321f */
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadw */
+    var45 = ptr4[i];
+    /* 2: andw */
+    var46.i = var45.i & var38.i;
+    /* 4: andw */
+    var47.i = var45.i & var39.i;
+    /* 6: andw */
+    var48.i = var45.i & var40.i;
+    /* 7: shlw */
+    var49.i = ((orc_uint16) var48.i) << 5;
+    /* 9: mulhsw */
+    var50.i = (var46.i * var41.i) >> 16;
+    /* 11: mulhsw */
+    var51.i = (var47.i * var42.i) >> 16;
+    /* 12: mulhsw */
+    var52.i = (var49.i * var42.i) >> 16;
+    /* 14: mergewl */
+    {
+      orc_union32 _dest;
+      _dest.x2[0] = var43.i;
+      _dest.x2[1] = var51.i;
+      var53.i = _dest.i;
+    }
+    /* 15: mergewl */
+    {
+      orc_union32 _dest;
+      _dest.x2[0] = var50.i;
+      _dest.x2[1] = var52.i;
+      var54.i = _dest.i;
+    }
+    /* 16: shll */
+    var55.i = ((orc_uint32) var53.i) << 8;
+    /* 17: orl */
+    var44.i = var55.i | var54.i;
+    /* 18: storel */
+    ptr0[i] = var44;
+  }
+
+}
+
+void
+video_orc_unpack_RGB15_be (guint32 * ORC_RESTRICT d1,
+    const guint16 * ORC_RESTRICT s1, int n)
+{
+  OrcExecutor _ex, *ex = &_ex;
+  static volatile int p_inited = 0;
+  static OrcCode *c = 0;
+  void (*func) (OrcExecutor *);
+
+  if (!p_inited) {
+    orc_once_mutex_lock ();
+    if (!p_inited) {
+      OrcProgram *p;
+
+#if 1
+      static const orc_uint8 bc[] = {
+        1, 9, 25, 118, 105, 100, 101, 111, 95, 111, 114, 99, 95, 117, 110, 112,
+        97, 99, 107, 95, 82, 71, 66, 49, 53, 95, 98, 101, 11, 4, 4, 12,
+        2, 2, 14, 2, 0, 124, 0, 0, 14, 2, 224, 3, 0, 0, 14, 2,
+        31, 0, 0, 0, 14, 2, 5, 0, 0, 0, 14, 2, 16, 2, 0, 0,
+        14, 2, 0, 66, 0, 0, 14, 2, 255, 0, 0, 0, 14, 4, 8, 0,
+        0, 0, 20, 2, 20, 2, 20, 2, 20, 2, 20, 4, 20, 4, 82, 32,
+        4, 73, 33, 32, 16, 73, 34, 32, 17, 73, 35, 32, 18, 93, 35, 35,
+        19, 90, 33, 33, 20, 90, 34, 34, 21, 90, 35, 35, 21, 195, 36, 22,
+        34, 195, 37, 33, 35, 124, 36, 36, 23, 123, 0, 36, 37, 2, 0,
+      };
+      p = orc_program_new_from_static_bytecode (bc);
+      orc_program_set_backup_function (p, _backup_video_orc_unpack_RGB15_be);
+#else
+      p = orc_program_new ();
+      orc_program_set_name (p, "video_orc_unpack_RGB15_be");
+      orc_program_set_backup_function (p, _backup_video_orc_unpack_RGB15_be);
+      orc_program_add_destination (p, 4, "d1");
+      orc_program_add_source (p, 2, "s1");
+      orc_program_add_constant (p, 2, 0x00007c00, "c1");
+      orc_program_add_constant (p, 2, 0x000003e0, "c2");
+      orc_program_add_constant (p, 2, 0x0000001f, "c3");
+      orc_program_add_constant (p, 2, 0x00000005, "c4");
+      orc_program_add_constant (p, 2, 0x00000210, "c5");
+      orc_program_add_constant (p, 2, 0x00004200, "c6");
+      orc_program_add_constant (p, 2, 0x000000ff, "c7");
+      orc_program_add_constant (p, 4, 0x00000008, "c8");
+      orc_program_add_temporary (p, 2, "t1");
+      orc_program_add_temporary (p, 2, "t2");
+      orc_program_add_temporary (p, 2, "t3");
+      orc_program_add_temporary (p, 2, "t4");
+      orc_program_add_temporary (p, 4, "t5");
+      orc_program_add_temporary (p, 4, "t6");
+
+      orc_program_append_2 (p, "loadw", 0, ORC_VAR_T1, ORC_VAR_S1, ORC_VAR_D1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "andw", 0, ORC_VAR_T2, ORC_VAR_T1, ORC_VAR_C1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "andw", 0, ORC_VAR_T3, ORC_VAR_T1, ORC_VAR_C2,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "andw", 0, ORC_VAR_T4, ORC_VAR_T1, ORC_VAR_C3,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "shlw", 0, ORC_VAR_T4, ORC_VAR_T4, ORC_VAR_C4,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "mulhsw", 0, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_C5,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "mulhsw", 0, ORC_VAR_T3, ORC_VAR_T3, ORC_VAR_C6,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "mulhsw", 0, ORC_VAR_T4, ORC_VAR_T4, ORC_VAR_C6,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "mergewl", 0, ORC_VAR_T5, ORC_VAR_C7, ORC_VAR_T3,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "mergewl", 0, ORC_VAR_T6, ORC_VAR_T2, ORC_VAR_T4,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "shll", 0, ORC_VAR_T5, ORC_VAR_T5, ORC_VAR_C8,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "orl", 0, ORC_VAR_D1, ORC_VAR_T5, ORC_VAR_T6,
+          ORC_VAR_D1);
+#endif
+
+      orc_program_compile (p);
+      c = orc_program_take_code (p);
+      orc_program_free (p);
+    }
+    p_inited = TRUE;
+    orc_once_mutex_unlock ();
+  }
+  ex->arrays[ORC_VAR_A2] = c;
+  ex->program = 0;
+
+  ex->n = n;
+  ex->arrays[ORC_VAR_D1] = d1;
+  ex->arrays[ORC_VAR_S1] = (void *) s1;
+
+  func = c->exec;
+  func (ex);
+}
+#endif
+
+
+/* video_orc_unpack_RGB15_le_trunc */
+#ifdef DISABLE_ORC
+void
+video_orc_unpack_RGB15_le_trunc (guint32 * ORC_RESTRICT d1,
+    const guint16 * ORC_RESTRICT s1, int n)
+{
+  int i;
+  orc_union32 *ORC_RESTRICT ptr0;
+  const orc_union16 *ORC_RESTRICT ptr4;
+#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
+  volatile orc_union16 var38;
+#else
+  orc_union16 var38;
+#endif
+#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
+  volatile orc_union16 var39;
+#else
+  orc_union16 var39;
+#endif
+#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
+  volatile orc_union16 var40;
+#else
+  orc_union16 var40;
+#endif
+#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
+  volatile orc_union16 var41;
+#else
+  orc_union16 var41;
+#endif
+  orc_union32 var42;
+  orc_union16 var43;
+  orc_union16 var44;
+  orc_union16 var45;
+  orc_union16 var46;
+  orc_union16 var47;
+  orc_union16 var48;
+  orc_union16 var49;
+  orc_union32 var50;
+  orc_union32 var51;
+  orc_union32 var52;
+
+  ptr0 = (orc_union32 *) d1;
+  ptr4 = (orc_union16 *) s1;
+
+  /* 1: loadpw */
+  var38.i = (int) 0x00007c00;   /* 31744 or 1.56836e-319f */
+  /* 3: loadpw */
+  var39.i = (int) 0x000003e0;   /* 992 or 4.90113e-321f */
+  /* 5: loadpw */
+  var40.i = (int) 0x0000001f;   /* 31 or 1.5316e-322f */
+  /* 10: loadpw */
+  var41.i = (int) 0x000000ff;   /* 255 or 1.25987e-321f */
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadw */
+    var43 = ptr4[i];
+    /* 2: andw */
+    var44.i = var43.i & var38.i;
+    /* 4: andw */
+    var45.i = var43.i & var39.i;
+    /* 6: andw */
+    var46.i = var43.i & var40.i;
+    /* 7: shruw */
+    var47.i = ((orc_uint16) var44.i) >> 7;
+    /* 8: shruw */
+    var48.i = ((orc_uint16) var45.i) >> 2;
+    /* 9: shlw */
+    var49.i = ((orc_uint16) var46.i) << 3;
+    /* 11: mergewl */
+    {
+      orc_union32 _dest;
+      _dest.x2[0] = var41.i;
+      _dest.x2[1] = var48.i;
+      var50.i = _dest.i;
+    }
+    /* 12: mergewl */
+    {
+      orc_union32 _dest;
+      _dest.x2[0] = var47.i;
+      _dest.x2[1] = var49.i;
+      var51.i = _dest.i;
+    }
+    /* 13: shll */
+    var52.i = ((orc_uint32) var51.i) << 8;
+    /* 14: orl */
+    var42.i = var50.i | var52.i;
+    /* 15: storel */
+    ptr0[i] = var42;
+  }
+
+}
+
+#else
+static void
+_backup_video_orc_unpack_RGB15_le_trunc (OrcExecutor * ORC_RESTRICT ex)
+{
+  int i;
+  int n = ex->n;
+  orc_union32 *ORC_RESTRICT ptr0;
+  const orc_union16 *ORC_RESTRICT ptr4;
+#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
+  volatile orc_union16 var38;
+#else
+  orc_union16 var38;
+#endif
+#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
+  volatile orc_union16 var39;
+#else
+  orc_union16 var39;
+#endif
+#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
+  volatile orc_union16 var40;
+#else
+  orc_union16 var40;
+#endif
+#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
+  volatile orc_union16 var41;
+#else
+  orc_union16 var41;
+#endif
+  orc_union32 var42;
+  orc_union16 var43;
+  orc_union16 var44;
+  orc_union16 var45;
+  orc_union16 var46;
+  orc_union16 var47;
+  orc_union16 var48;
+  orc_union16 var49;
+  orc_union32 var50;
+  orc_union32 var51;
+  orc_union32 var52;
+
+  ptr0 = (orc_union32 *) ex->arrays[0];
+  ptr4 = (orc_union16 *) ex->arrays[4];
+
+  /* 1: loadpw */
+  var38.i = (int) 0x00007c00;   /* 31744 or 1.56836e-319f */
+  /* 3: loadpw */
+  var39.i = (int) 0x000003e0;   /* 992 or 4.90113e-321f */
+  /* 5: loadpw */
+  var40.i = (int) 0x0000001f;   /* 31 or 1.5316e-322f */
+  /* 10: loadpw */
+  var41.i = (int) 0x000000ff;   /* 255 or 1.25987e-321f */
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadw */
+    var43 = ptr4[i];
+    /* 2: andw */
+    var44.i = var43.i & var38.i;
+    /* 4: andw */
+    var45.i = var43.i & var39.i;
+    /* 6: andw */
+    var46.i = var43.i & var40.i;
+    /* 7: shruw */
+    var47.i = ((orc_uint16) var44.i) >> 7;
+    /* 8: shruw */
+    var48.i = ((orc_uint16) var45.i) >> 2;
+    /* 9: shlw */
+    var49.i = ((orc_uint16) var46.i) << 3;
+    /* 11: mergewl */
+    {
+      orc_union32 _dest;
+      _dest.x2[0] = var41.i;
+      _dest.x2[1] = var48.i;
+      var50.i = _dest.i;
+    }
+    /* 12: mergewl */
+    {
+      orc_union32 _dest;
+      _dest.x2[0] = var47.i;
+      _dest.x2[1] = var49.i;
+      var51.i = _dest.i;
+    }
+    /* 13: shll */
+    var52.i = ((orc_uint32) var51.i) << 8;
+    /* 14: orl */
+    var42.i = var50.i | var52.i;
+    /* 15: storel */
+    ptr0[i] = var42;
+  }
+
+}
+
+void
+video_orc_unpack_RGB15_le_trunc (guint32 * ORC_RESTRICT d1,
+    const guint16 * ORC_RESTRICT s1, int n)
+{
+  OrcExecutor _ex, *ex = &_ex;
+  static volatile int p_inited = 0;
+  static OrcCode *c = 0;
+  void (*func) (OrcExecutor *);
+
+  if (!p_inited) {
+    orc_once_mutex_lock ();
+    if (!p_inited) {
+      OrcProgram *p;
+
+#if 1
+      static const orc_uint8 bc[] = {
+        1, 9, 31, 118, 105, 100, 101, 111, 95, 111, 114, 99, 95, 117, 110, 112,
+        97, 99, 107, 95, 82, 71, 66, 49, 53, 95, 108, 101, 95, 116, 114, 117,
+        110, 99, 11, 4, 4, 12, 2, 2, 14, 2, 0, 124, 0, 0, 14, 2,
+        224, 3, 0, 0, 14, 2, 31, 0, 0, 0, 14, 2, 7, 0, 0, 0,
+        14, 2, 2, 0, 0, 0, 14, 2, 3, 0, 0, 0, 14, 2, 255, 0,
+        0, 0, 14, 4, 8, 0, 0, 0, 20, 2, 20, 2, 20, 2, 20, 2,
+        20, 4, 20, 4, 82, 32, 4, 73, 33, 32, 16, 73, 34, 32, 17, 73,
+        35, 32, 18, 95, 33, 33, 19, 95, 34, 34, 20, 93, 35, 35, 21, 195,
+        36, 22, 34, 195, 37, 33, 35, 124, 37, 37, 23, 123, 0, 36, 37, 2,
+        0,
+      };
+      p = orc_program_new_from_static_bytecode (bc);
+      orc_program_set_backup_function (p,
+          _backup_video_orc_unpack_RGB15_le_trunc);
+#else
+      p = orc_program_new ();
+      orc_program_set_name (p, "video_orc_unpack_RGB15_le_trunc");
+      orc_program_set_backup_function (p,
+          _backup_video_orc_unpack_RGB15_le_trunc);
+      orc_program_add_destination (p, 4, "d1");
+      orc_program_add_source (p, 2, "s1");
+      orc_program_add_constant (p, 2, 0x00007c00, "c1");
+      orc_program_add_constant (p, 2, 0x000003e0, "c2");
+      orc_program_add_constant (p, 2, 0x0000001f, "c3");
+      orc_program_add_constant (p, 2, 0x00000007, "c4");
+      orc_program_add_constant (p, 2, 0x00000002, "c5");
+      orc_program_add_constant (p, 2, 0x00000003, "c6");
+      orc_program_add_constant (p, 2, 0x000000ff, "c7");
+      orc_program_add_constant (p, 4, 0x00000008, "c8");
+      orc_program_add_temporary (p, 2, "t1");
+      orc_program_add_temporary (p, 2, "t2");
+      orc_program_add_temporary (p, 2, "t3");
+      orc_program_add_temporary (p, 2, "t4");
+      orc_program_add_temporary (p, 4, "t5");
+      orc_program_add_temporary (p, 4, "t6");
+
+      orc_program_append_2 (p, "loadw", 0, ORC_VAR_T1, ORC_VAR_S1, ORC_VAR_D1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "andw", 0, ORC_VAR_T2, ORC_VAR_T1, ORC_VAR_C1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "andw", 0, ORC_VAR_T3, ORC_VAR_T1, ORC_VAR_C2,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "andw", 0, ORC_VAR_T4, ORC_VAR_T1, ORC_VAR_C3,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "shruw", 0, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_C4,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "shruw", 0, ORC_VAR_T3, ORC_VAR_T3, ORC_VAR_C5,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "shlw", 0, ORC_VAR_T4, ORC_VAR_T4, ORC_VAR_C6,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "mergewl", 0, ORC_VAR_T5, ORC_VAR_C7, ORC_VAR_T3,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "mergewl", 0, ORC_VAR_T6, ORC_VAR_T2, ORC_VAR_T4,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "shll", 0, ORC_VAR_T6, ORC_VAR_T6, ORC_VAR_C8,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "orl", 0, ORC_VAR_D1, ORC_VAR_T5, ORC_VAR_T6,
+          ORC_VAR_D1);
+#endif
+
+      orc_program_compile (p);
+      c = orc_program_take_code (p);
+      orc_program_free (p);
+    }
+    p_inited = TRUE;
+    orc_once_mutex_unlock ();
+  }
+  ex->arrays[ORC_VAR_A2] = c;
+  ex->program = 0;
+
+  ex->n = n;
+  ex->arrays[ORC_VAR_D1] = d1;
+  ex->arrays[ORC_VAR_S1] = (void *) s1;
+
+  func = c->exec;
+  func (ex);
+}
+#endif
+
+
+/* video_orc_unpack_RGB15_be_trunc */
+#ifdef DISABLE_ORC
+void
+video_orc_unpack_RGB15_be_trunc (guint32 * ORC_RESTRICT d1,
+    const guint16 * ORC_RESTRICT s1, int n)
+{
+  int i;
+  orc_union32 *ORC_RESTRICT ptr0;
+  const orc_union16 *ORC_RESTRICT ptr4;
+#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
+  volatile orc_union16 var38;
+#else
+  orc_union16 var38;
+#endif
+#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
+  volatile orc_union16 var39;
+#else
+  orc_union16 var39;
+#endif
+#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
+  volatile orc_union16 var40;
+#else
+  orc_union16 var40;
+#endif
+#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
+  volatile orc_union16 var41;
+#else
+  orc_union16 var41;
+#endif
+  orc_union32 var42;
+  orc_union16 var43;
+  orc_union16 var44;
+  orc_union16 var45;
+  orc_union16 var46;
+  orc_union16 var47;
+  orc_union16 var48;
+  orc_union16 var49;
+  orc_union32 var50;
+  orc_union32 var51;
+  orc_union32 var52;
+
+  ptr0 = (orc_union32 *) d1;
+  ptr4 = (orc_union16 *) s1;
+
+  /* 1: loadpw */
+  var38.i = (int) 0x00007c00;   /* 31744 or 1.56836e-319f */
+  /* 3: loadpw */
+  var39.i = (int) 0x000003e0;   /* 992 or 4.90113e-321f */
+  /* 5: loadpw */
+  var40.i = (int) 0x0000001f;   /* 31 or 1.5316e-322f */
+  /* 10: loadpw */
+  var41.i = (int) 0x000000ff;   /* 255 or 1.25987e-321f */
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadw */
+    var43 = ptr4[i];
+    /* 2: andw */
+    var44.i = var43.i & var38.i;
+    /* 4: andw */
+    var45.i = var43.i & var39.i;
+    /* 6: andw */
+    var46.i = var43.i & var40.i;
+    /* 7: shruw */
+    var47.i = ((orc_uint16) var44.i) >> 7;
+    /* 8: shruw */
+    var48.i = ((orc_uint16) var45.i) >> 2;
+    /* 9: shlw */
+    var49.i = ((orc_uint16) var46.i) << 3;
+    /* 11: mergewl */
+    {
+      orc_union32 _dest;
+      _dest.x2[0] = var41.i;
+      _dest.x2[1] = var48.i;
+      var50.i = _dest.i;
+    }
+    /* 12: mergewl */
+    {
+      orc_union32 _dest;
+      _dest.x2[0] = var47.i;
+      _dest.x2[1] = var49.i;
+      var51.i = _dest.i;
+    }
+    /* 13: shll */
+    var52.i = ((orc_uint32) var50.i) << 8;
+    /* 14: orl */
+    var42.i = var52.i | var51.i;
+    /* 15: storel */
+    ptr0[i] = var42;
+  }
+
+}
+
+#else
+static void
+_backup_video_orc_unpack_RGB15_be_trunc (OrcExecutor * ORC_RESTRICT ex)
+{
+  int i;
+  int n = ex->n;
+  orc_union32 *ORC_RESTRICT ptr0;
+  const orc_union16 *ORC_RESTRICT ptr4;
+#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
+  volatile orc_union16 var38;
+#else
+  orc_union16 var38;
+#endif
+#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
+  volatile orc_union16 var39;
+#else
+  orc_union16 var39;
+#endif
+#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
+  volatile orc_union16 var40;
+#else
+  orc_union16 var40;
+#endif
+#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
+  volatile orc_union16 var41;
+#else
+  orc_union16 var41;
+#endif
+  orc_union32 var42;
+  orc_union16 var43;
+  orc_union16 var44;
+  orc_union16 var45;
+  orc_union16 var46;
+  orc_union16 var47;
+  orc_union16 var48;
+  orc_union16 var49;
+  orc_union32 var50;
+  orc_union32 var51;
+  orc_union32 var52;
+
+  ptr0 = (orc_union32 *) ex->arrays[0];
+  ptr4 = (orc_union16 *) ex->arrays[4];
+
+  /* 1: loadpw */
+  var38.i = (int) 0x00007c00;   /* 31744 or 1.56836e-319f */
+  /* 3: loadpw */
+  var39.i = (int) 0x000003e0;   /* 992 or 4.90113e-321f */
+  /* 5: loadpw */
+  var40.i = (int) 0x0000001f;   /* 31 or 1.5316e-322f */
+  /* 10: loadpw */
+  var41.i = (int) 0x000000ff;   /* 255 or 1.25987e-321f */
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadw */
+    var43 = ptr4[i];
+    /* 2: andw */
+    var44.i = var43.i & var38.i;
+    /* 4: andw */
+    var45.i = var43.i & var39.i;
+    /* 6: andw */
+    var46.i = var43.i & var40.i;
+    /* 7: shruw */
+    var47.i = ((orc_uint16) var44.i) >> 7;
+    /* 8: shruw */
+    var48.i = ((orc_uint16) var45.i) >> 2;
+    /* 9: shlw */
+    var49.i = ((orc_uint16) var46.i) << 3;
+    /* 11: mergewl */
+    {
+      orc_union32 _dest;
+      _dest.x2[0] = var41.i;
+      _dest.x2[1] = var48.i;
+      var50.i = _dest.i;
+    }
+    /* 12: mergewl */
+    {
+      orc_union32 _dest;
+      _dest.x2[0] = var47.i;
+      _dest.x2[1] = var49.i;
+      var51.i = _dest.i;
+    }
+    /* 13: shll */
+    var52.i = ((orc_uint32) var50.i) << 8;
+    /* 14: orl */
+    var42.i = var52.i | var51.i;
+    /* 15: storel */
+    ptr0[i] = var42;
+  }
+
+}
+
+void
+video_orc_unpack_RGB15_be_trunc (guint32 * ORC_RESTRICT d1,
+    const guint16 * ORC_RESTRICT s1, int n)
+{
+  OrcExecutor _ex, *ex = &_ex;
+  static volatile int p_inited = 0;
+  static OrcCode *c = 0;
+  void (*func) (OrcExecutor *);
+
+  if (!p_inited) {
+    orc_once_mutex_lock ();
+    if (!p_inited) {
+      OrcProgram *p;
+
+#if 1
+      static const orc_uint8 bc[] = {
+        1, 9, 31, 118, 105, 100, 101, 111, 95, 111, 114, 99, 95, 117, 110, 112,
+        97, 99, 107, 95, 82, 71, 66, 49, 53, 95, 98, 101, 95, 116, 114, 117,
+        110, 99, 11, 4, 4, 12, 2, 2, 14, 2, 0, 124, 0, 0, 14, 2,
+        224, 3, 0, 0, 14, 2, 31, 0, 0, 0, 14, 2, 7, 0, 0, 0,
+        14, 2, 2, 0, 0, 0, 14, 2, 3, 0, 0, 0, 14, 2, 255, 0,
+        0, 0, 14, 4, 8, 0, 0, 0, 20, 2, 20, 2, 20, 2, 20, 2,
+        20, 4, 20, 4, 82, 32, 4, 73, 33, 32, 16, 73, 34, 32, 17, 73,
+        35, 32, 18, 95, 33, 33, 19, 95, 34, 34, 20, 93, 35, 35, 21, 195,
+        36, 22, 34, 195, 37, 33, 35, 124, 36, 36, 23, 123, 0, 36, 37, 2,
+        0,
+      };
+      p = orc_program_new_from_static_bytecode (bc);
+      orc_program_set_backup_function (p,
+          _backup_video_orc_unpack_RGB15_be_trunc);
+#else
+      p = orc_program_new ();
+      orc_program_set_name (p, "video_orc_unpack_RGB15_be_trunc");
+      orc_program_set_backup_function (p,
+          _backup_video_orc_unpack_RGB15_be_trunc);
+      orc_program_add_destination (p, 4, "d1");
+      orc_program_add_source (p, 2, "s1");
+      orc_program_add_constant (p, 2, 0x00007c00, "c1");
+      orc_program_add_constant (p, 2, 0x000003e0, "c2");
+      orc_program_add_constant (p, 2, 0x0000001f, "c3");
+      orc_program_add_constant (p, 2, 0x00000007, "c4");
+      orc_program_add_constant (p, 2, 0x00000002, "c5");
+      orc_program_add_constant (p, 2, 0x00000003, "c6");
+      orc_program_add_constant (p, 2, 0x000000ff, "c7");
+      orc_program_add_constant (p, 4, 0x00000008, "c8");
+      orc_program_add_temporary (p, 2, "t1");
+      orc_program_add_temporary (p, 2, "t2");
+      orc_program_add_temporary (p, 2, "t3");
+      orc_program_add_temporary (p, 2, "t4");
+      orc_program_add_temporary (p, 4, "t5");
+      orc_program_add_temporary (p, 4, "t6");
+
+      orc_program_append_2 (p, "loadw", 0, ORC_VAR_T1, ORC_VAR_S1, ORC_VAR_D1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "andw", 0, ORC_VAR_T2, ORC_VAR_T1, ORC_VAR_C1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "andw", 0, ORC_VAR_T3, ORC_VAR_T1, ORC_VAR_C2,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "andw", 0, ORC_VAR_T4, ORC_VAR_T1, ORC_VAR_C3,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "shruw", 0, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_C4,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "shruw", 0, ORC_VAR_T3, ORC_VAR_T3, ORC_VAR_C5,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "shlw", 0, ORC_VAR_T4, ORC_VAR_T4, ORC_VAR_C6,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "mergewl", 0, ORC_VAR_T5, ORC_VAR_C7, ORC_VAR_T3,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "mergewl", 0, ORC_VAR_T6, ORC_VAR_T2, ORC_VAR_T4,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "shll", 0, ORC_VAR_T5, ORC_VAR_T5, ORC_VAR_C8,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "orl", 0, ORC_VAR_D1, ORC_VAR_T5, ORC_VAR_T6,
+          ORC_VAR_D1);
+#endif
+
+      orc_program_compile (p);
+      c = orc_program_take_code (p);
+      orc_program_free (p);
+    }
+    p_inited = TRUE;
+    orc_once_mutex_unlock ();
+  }
+  ex->arrays[ORC_VAR_A2] = c;
+  ex->program = 0;
+
+  ex->n = n;
+  ex->arrays[ORC_VAR_D1] = d1;
+  ex->arrays[ORC_VAR_S1] = (void *) s1;
+
+  func = c->exec;
+  func (ex);
+}
+#endif
+
+
+/* video_orc_pack_RGB15_le */
+#ifdef DISABLE_ORC
+void
+video_orc_pack_RGB15_le (guint16 * ORC_RESTRICT d1,
+    const guint32 * ORC_RESTRICT s1, int n)
+{
+  int i;
+  orc_union16 *ORC_RESTRICT ptr0;
+  const orc_union32 *ORC_RESTRICT ptr4;
+#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
+  volatile orc_union32 var37;
+#else
+  orc_union32 var37;
+#endif
+#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
+  volatile orc_union32 var38;
+#else
+  orc_union32 var38;
+#endif
+#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
+  volatile orc_union32 var39;
+#else
+  orc_union32 var39;
+#endif
+  orc_union16 var40;
+  orc_union32 var41;
+  orc_union32 var42;
+  orc_union32 var43;
+  orc_union32 var44;
+  orc_union32 var45;
+  orc_union32 var46;
+  orc_union32 var47;
+  orc_union32 var48;
+  orc_union32 var49;
+
+  ptr0 = (orc_union16 *) d1;
+  ptr4 = (orc_union32 *) s1;
+
+  /* 1: loadpl */
+  var37.i = (int) 0x0000f800;   /* 63488 or 3.13672e-319f */
+  /* 3: loadpl */
+  var38.i = (int) 0x00f80000;   /* 16252928 or 8.03001e-317f */
+  /* 5: loadpl */
+  var39.i = (int) 0xf8000000;   /* -134217728 or 2.05568e-314f */
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadl */
+    var41 = ptr4[i];
+    /* 2: andl */
+    var42.i = var41.i & var37.i;
+    /* 4: andl */
+    var43.i = var41.i & var38.i;
+    /* 6: andl */
+    var44.i = var41.i & var39.i;
+    /* 7: shrul */
+    var45.i = ((orc_uint32) var42.i) >> 1;
+    /* 8: shrul */
+    var46.i = ((orc_uint32) var43.i) >> 14;
+    /* 9: shrul */
+    var47.i = ((orc_uint32) var44.i) >> 27;
+    /* 10: orl */
+    var48.i = var45.i | var46.i;
+    /* 11: orl */
+    var49.i = var48.i | var47.i;
+    /* 12: select0lw */
+    {
+      orc_union32 _src;
+      _src.i = var49.i;
+      var40.i = _src.x2[0];
+    }
+    /* 13: storew */
+    ptr0[i] = var40;
+  }
+
+}
+
+#else
+static void
+_backup_video_orc_pack_RGB15_le (OrcExecutor * ORC_RESTRICT ex)
+{
+  int i;
+  int n = ex->n;
+  orc_union16 *ORC_RESTRICT ptr0;
+  const orc_union32 *ORC_RESTRICT ptr4;
+#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
+  volatile orc_union32 var37;
+#else
+  orc_union32 var37;
+#endif
+#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
+  volatile orc_union32 var38;
+#else
+  orc_union32 var38;
+#endif
+#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
+  volatile orc_union32 var39;
+#else
+  orc_union32 var39;
+#endif
+  orc_union16 var40;
+  orc_union32 var41;
+  orc_union32 var42;
+  orc_union32 var43;
+  orc_union32 var44;
+  orc_union32 var45;
+  orc_union32 var46;
+  orc_union32 var47;
+  orc_union32 var48;
+  orc_union32 var49;
+
+  ptr0 = (orc_union16 *) ex->arrays[0];
+  ptr4 = (orc_union32 *) ex->arrays[4];
+
+  /* 1: loadpl */
+  var37.i = (int) 0x0000f800;   /* 63488 or 3.13672e-319f */
+  /* 3: loadpl */
+  var38.i = (int) 0x00f80000;   /* 16252928 or 8.03001e-317f */
+  /* 5: loadpl */
+  var39.i = (int) 0xf8000000;   /* -134217728 or 2.05568e-314f */
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadl */
+    var41 = ptr4[i];
+    /* 2: andl */
+    var42.i = var41.i & var37.i;
+    /* 4: andl */
+    var43.i = var41.i & var38.i;
+    /* 6: andl */
+    var44.i = var41.i & var39.i;
+    /* 7: shrul */
+    var45.i = ((orc_uint32) var42.i) >> 1;
+    /* 8: shrul */
+    var46.i = ((orc_uint32) var43.i) >> 14;
+    /* 9: shrul */
+    var47.i = ((orc_uint32) var44.i) >> 27;
+    /* 10: orl */
+    var48.i = var45.i | var46.i;
+    /* 11: orl */
+    var49.i = var48.i | var47.i;
+    /* 12: select0lw */
+    {
+      orc_union32 _src;
+      _src.i = var49.i;
+      var40.i = _src.x2[0];
+    }
+    /* 13: storew */
+    ptr0[i] = var40;
+  }
+
+}
+
+void
+video_orc_pack_RGB15_le (guint16 * ORC_RESTRICT d1,
+    const guint32 * ORC_RESTRICT s1, int n)
+{
+  OrcExecutor _ex, *ex = &_ex;
+  static volatile int p_inited = 0;
+  static OrcCode *c = 0;
+  void (*func) (OrcExecutor *);
+
+  if (!p_inited) {
+    orc_once_mutex_lock ();
+    if (!p_inited) {
+      OrcProgram *p;
+
+#if 1
+      static const orc_uint8 bc[] = {
+        1, 9, 23, 118, 105, 100, 101, 111, 95, 111, 114, 99, 95, 112, 97, 99,
+        107, 95, 82, 71, 66, 49, 53, 95, 108, 101, 11, 2, 2, 12, 4, 4,
+        14, 4, 0, 248, 0, 0, 14, 4, 0, 0, 248, 0, 14, 4, 0, 0,
+        0, 248, 14, 4, 1, 0, 0, 0, 14, 4, 14, 0, 0, 0, 14, 4,
+        27, 0, 0, 0, 20, 4, 20, 4, 20, 4, 20, 4, 20, 4, 113, 32,
+        4, 106, 33, 32, 16, 106, 34, 32, 17, 106, 35, 32, 18, 126, 33, 33,
+        19, 126, 34, 34, 20, 126, 35, 35, 21, 123, 36, 33, 34, 123, 36, 36,
+        35, 190, 0, 36, 2, 0,
+      };
+      p = orc_program_new_from_static_bytecode (bc);
+      orc_program_set_backup_function (p, _backup_video_orc_pack_RGB15_le);
+#else
+      p = orc_program_new ();
+      orc_program_set_name (p, "video_orc_pack_RGB15_le");
+      orc_program_set_backup_function (p, _backup_video_orc_pack_RGB15_le);
+      orc_program_add_destination (p, 2, "d1");
+      orc_program_add_source (p, 4, "s1");
+      orc_program_add_constant (p, 4, 0x0000f800, "c1");
+      orc_program_add_constant (p, 4, 0x00f80000, "c2");
+      orc_program_add_constant (p, 4, 0xf8000000, "c3");
+      orc_program_add_constant (p, 4, 0x00000001, "c4");
+      orc_program_add_constant (p, 4, 0x0000000e, "c5");
+      orc_program_add_constant (p, 4, 0x0000001b, "c6");
+      orc_program_add_temporary (p, 4, "t1");
+      orc_program_add_temporary (p, 4, "t2");
+      orc_program_add_temporary (p, 4, "t3");
+      orc_program_add_temporary (p, 4, "t4");
+      orc_program_add_temporary (p, 4, "t5");
+
+      orc_program_append_2 (p, "loadl", 0, ORC_VAR_T1, ORC_VAR_S1, ORC_VAR_D1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "andl", 0, ORC_VAR_T2, ORC_VAR_T1, ORC_VAR_C1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "andl", 0, ORC_VAR_T3, ORC_VAR_T1, ORC_VAR_C2,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "andl", 0, ORC_VAR_T4, ORC_VAR_T1, ORC_VAR_C3,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "shrul", 0, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_C4,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "shrul", 0, ORC_VAR_T3, ORC_VAR_T3, ORC_VAR_C5,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "shrul", 0, ORC_VAR_T4, ORC_VAR_T4, ORC_VAR_C6,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "orl", 0, ORC_VAR_T5, ORC_VAR_T2, ORC_VAR_T3,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "orl", 0, ORC_VAR_T5, ORC_VAR_T5, ORC_VAR_T4,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "select0lw", 0, ORC_VAR_D1, ORC_VAR_T5,
+          ORC_VAR_D1, ORC_VAR_D1);
+#endif
+
+      orc_program_compile (p);
+      c = orc_program_take_code (p);
+      orc_program_free (p);
+    }
+    p_inited = TRUE;
+    orc_once_mutex_unlock ();
+  }
+  ex->arrays[ORC_VAR_A2] = c;
+  ex->program = 0;
+
+  ex->n = n;
+  ex->arrays[ORC_VAR_D1] = d1;
+  ex->arrays[ORC_VAR_S1] = (void *) s1;
+
+  func = c->exec;
+  func (ex);
+}
+#endif
+
+
+/* video_orc_pack_RGB15_be */
+#ifdef DISABLE_ORC
+void
+video_orc_pack_RGB15_be (guint16 * ORC_RESTRICT d1,
+    const guint32 * ORC_RESTRICT s1, int n)
+{
+  int i;
+  orc_union16 *ORC_RESTRICT ptr0;
+  const orc_union32 *ORC_RESTRICT ptr4;
+#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
+  volatile orc_union32 var37;
+#else
+  orc_union32 var37;
+#endif
+#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
+  volatile orc_union32 var38;
+#else
+  orc_union32 var38;
+#endif
+#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
+  volatile orc_union32 var39;
+#else
+  orc_union32 var39;
+#endif
+  orc_union16 var40;
+  orc_union32 var41;
+  orc_union32 var42;
+  orc_union32 var43;
+  orc_union32 var44;
+  orc_union32 var45;
+  orc_union32 var46;
+  orc_union32 var47;
+  orc_union32 var48;
+  orc_union32 var49;
+
+  ptr0 = (orc_union16 *) d1;
+  ptr4 = (orc_union32 *) s1;
+
+  /* 1: loadpl */
+  var37.i = (int) 0x00f80000;   /* 16252928 or 8.03001e-317f */
+  /* 3: loadpl */
+  var38.i = (int) 0x0000f800;   /* 63488 or 3.13672e-319f */
+  /* 5: loadpl */
+  var39.i = (int) 0x000000f8;   /* 248 or 1.22528e-321f */
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadl */
+    var41 = ptr4[i];
+    /* 2: andl */
+    var42.i = var41.i & var37.i;
+    /* 4: andl */
+    var43.i = var41.i & var38.i;
+    /* 6: andl */
+    var44.i = var41.i & var39.i;
+    /* 7: shrul */
+    var45.i = ((orc_uint32) var42.i) >> 9;
+    /* 8: shrul */
+    var46.i = ((orc_uint32) var43.i) >> 6;
+    /* 9: shrul */
+    var47.i = ((orc_uint32) var44.i) >> 3;
+    /* 10: orl */
+    var48.i = var45.i | var46.i;
+    /* 11: orl */
+    var49.i = var48.i | var47.i;
+    /* 12: select1lw */
+    {
+      orc_union32 _src;
+      _src.i = var49.i;
+      var40.i = _src.x2[1];
+    }
+    /* 13: storew */
+    ptr0[i] = var40;
+  }
+
+}
+
+#else
+static void
+_backup_video_orc_pack_RGB15_be (OrcExecutor * ORC_RESTRICT ex)
+{
+  int i;
+  int n = ex->n;
+  orc_union16 *ORC_RESTRICT ptr0;
+  const orc_union32 *ORC_RESTRICT ptr4;
+#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
+  volatile orc_union32 var37;
+#else
+  orc_union32 var37;
+#endif
+#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
+  volatile orc_union32 var38;
+#else
+  orc_union32 var38;
+#endif
+#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
+  volatile orc_union32 var39;
+#else
+  orc_union32 var39;
+#endif
+  orc_union16 var40;
+  orc_union32 var41;
+  orc_union32 var42;
+  orc_union32 var43;
+  orc_union32 var44;
+  orc_union32 var45;
+  orc_union32 var46;
+  orc_union32 var47;
+  orc_union32 var48;
+  orc_union32 var49;
+
+  ptr0 = (orc_union16 *) ex->arrays[0];
+  ptr4 = (orc_union32 *) ex->arrays[4];
+
+  /* 1: loadpl */
+  var37.i = (int) 0x00f80000;   /* 16252928 or 8.03001e-317f */
+  /* 3: loadpl */
+  var38.i = (int) 0x0000f800;   /* 63488 or 3.13672e-319f */
+  /* 5: loadpl */
+  var39.i = (int) 0x000000f8;   /* 248 or 1.22528e-321f */
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadl */
+    var41 = ptr4[i];
+    /* 2: andl */
+    var42.i = var41.i & var37.i;
+    /* 4: andl */
+    var43.i = var41.i & var38.i;
+    /* 6: andl */
+    var44.i = var41.i & var39.i;
+    /* 7: shrul */
+    var45.i = ((orc_uint32) var42.i) >> 9;
+    /* 8: shrul */
+    var46.i = ((orc_uint32) var43.i) >> 6;
+    /* 9: shrul */
+    var47.i = ((orc_uint32) var44.i) >> 3;
+    /* 10: orl */
+    var48.i = var45.i | var46.i;
+    /* 11: orl */
+    var49.i = var48.i | var47.i;
+    /* 12: select1lw */
+    {
+      orc_union32 _src;
+      _src.i = var49.i;
+      var40.i = _src.x2[1];
+    }
+    /* 13: storew */
+    ptr0[i] = var40;
+  }
+
+}
+
+void
+video_orc_pack_RGB15_be (guint16 * ORC_RESTRICT d1,
+    const guint32 * ORC_RESTRICT s1, int n)
+{
+  OrcExecutor _ex, *ex = &_ex;
+  static volatile int p_inited = 0;
+  static OrcCode *c = 0;
+  void (*func) (OrcExecutor *);
+
+  if (!p_inited) {
+    orc_once_mutex_lock ();
+    if (!p_inited) {
+      OrcProgram *p;
+
+#if 1
+      static const orc_uint8 bc[] = {
+        1, 9, 23, 118, 105, 100, 101, 111, 95, 111, 114, 99, 95, 112, 97, 99,
+        107, 95, 82, 71, 66, 49, 53, 95, 98, 101, 11, 2, 2, 12, 4, 4,
+        14, 4, 0, 0, 248, 0, 14, 4, 0, 248, 0, 0, 14, 4, 248, 0,
+        0, 0, 14, 4, 9, 0, 0, 0, 14, 4, 6, 0, 0, 0, 14, 4,
+        3, 0, 0, 0, 20, 4, 20, 4, 20, 4, 20, 4, 20, 4, 113, 32,
+        4, 106, 33, 32, 16, 106, 34, 32, 17, 106, 35, 32, 18, 126, 33, 33,
+        19, 126, 34, 34, 20, 126, 35, 35, 21, 123, 36, 33, 34, 123, 36, 36,
+        35, 191, 0, 36, 2, 0,
+      };
+      p = orc_program_new_from_static_bytecode (bc);
+      orc_program_set_backup_function (p, _backup_video_orc_pack_RGB15_be);
+#else
+      p = orc_program_new ();
+      orc_program_set_name (p, "video_orc_pack_RGB15_be");
+      orc_program_set_backup_function (p, _backup_video_orc_pack_RGB15_be);
+      orc_program_add_destination (p, 2, "d1");
+      orc_program_add_source (p, 4, "s1");
+      orc_program_add_constant (p, 4, 0x00f80000, "c1");
+      orc_program_add_constant (p, 4, 0x0000f800, "c2");
+      orc_program_add_constant (p, 4, 0x000000f8, "c3");
+      orc_program_add_constant (p, 4, 0x00000009, "c4");
+      orc_program_add_constant (p, 4, 0x00000006, "c5");
+      orc_program_add_constant (p, 4, 0x00000003, "c6");
+      orc_program_add_temporary (p, 4, "t1");
+      orc_program_add_temporary (p, 4, "t2");
+      orc_program_add_temporary (p, 4, "t3");
+      orc_program_add_temporary (p, 4, "t4");
+      orc_program_add_temporary (p, 4, "t5");
+
+      orc_program_append_2 (p, "loadl", 0, ORC_VAR_T1, ORC_VAR_S1, ORC_VAR_D1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "andl", 0, ORC_VAR_T2, ORC_VAR_T1, ORC_VAR_C1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "andl", 0, ORC_VAR_T3, ORC_VAR_T1, ORC_VAR_C2,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "andl", 0, ORC_VAR_T4, ORC_VAR_T1, ORC_VAR_C3,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "shrul", 0, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_C4,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "shrul", 0, ORC_VAR_T3, ORC_VAR_T3, ORC_VAR_C5,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "shrul", 0, ORC_VAR_T4, ORC_VAR_T4, ORC_VAR_C6,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "orl", 0, ORC_VAR_T5, ORC_VAR_T2, ORC_VAR_T3,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "orl", 0, ORC_VAR_T5, ORC_VAR_T5, ORC_VAR_T4,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "select1lw", 0, ORC_VAR_D1, ORC_VAR_T5,
+          ORC_VAR_D1, ORC_VAR_D1);
+#endif
+
+      orc_program_compile (p);
+      c = orc_program_take_code (p);
+      orc_program_free (p);
+    }
+    p_inited = TRUE;
+    orc_once_mutex_unlock ();
+  }
+  ex->arrays[ORC_VAR_A2] = c;
+  ex->program = 0;
+
+  ex->n = n;
+  ex->arrays[ORC_VAR_D1] = d1;
+  ex->arrays[ORC_VAR_S1] = (void *) s1;
+
+  func = c->exec;
+  func (ex);
+}
+#endif
+
+
+/* video_orc_unpack_BGR15_le */
+#ifdef DISABLE_ORC
+void
+video_orc_unpack_BGR15_le (guint32 * ORC_RESTRICT d1,
+    const guint16 * ORC_RESTRICT s1, int n)
+{
+  int i;
+  orc_union32 *ORC_RESTRICT ptr0;
+  const orc_union16 *ORC_RESTRICT ptr4;
+#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
+  volatile orc_union16 var38;
+#else
+  orc_union16 var38;
+#endif
+#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
+  volatile orc_union16 var39;
+#else
+  orc_union16 var39;
+#endif
+#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
+  volatile orc_union16 var40;
+#else
+  orc_union16 var40;
+#endif
+#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
+  volatile orc_union16 var41;
+#else
+  orc_union16 var41;
+#endif
+#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
+  volatile orc_union16 var42;
+#else
+  orc_union16 var42;
+#endif
+#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
+  volatile orc_union16 var43;
+#else
+  orc_union16 var43;
+#endif
+  orc_union32 var44;
+  orc_union16 var45;
+  orc_union16 var46;
+  orc_union16 var47;
+  orc_union16 var48;
+  orc_union16 var49;
+  orc_union16 var50;
+  orc_union16 var51;
+  orc_union16 var52;
+  orc_union32 var53;
+  orc_union32 var54;
+  orc_union32 var55;
+
+  ptr0 = (orc_union32 *) d1;
+  ptr4 = (orc_union16 *) s1;
+
+  /* 1: loadpw */
+  var38.i = (int) 0x00007c00;   /* 31744 or 1.56836e-319f */
+  /* 3: loadpw */
+  var39.i = (int) 0x000003e0;   /* 992 or 4.90113e-321f */
+  /* 5: loadpw */
+  var40.i = (int) 0x0000001f;   /* 31 or 1.5316e-322f */
+  /* 8: loadpw */
+  var41.i = (int) 0x00000210;   /* 528 or 2.60867e-321f */
+  /* 10: loadpw */
+  var42.i = (int) 0x00004200;   /* 16896 or 8.34773e-320f */
+  /* 13: loadpw */
+  var43.i = (int) 0x000000ff;   /* 255 or 1.25987e-321f */
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadw */
+    var45 = ptr4[i];
+    /* 2: andw */
+    var46.i = var45.i & var38.i;
+    /* 4: andw */
+    var47.i = var45.i & var39.i;
+    /* 6: andw */
+    var48.i = var45.i & var40.i;
+    /* 7: shlw */
+    var49.i = ((orc_uint16) var48.i) << 5;
+    /* 9: mulhsw */
+    var50.i = (var46.i * var41.i) >> 16;
+    /* 11: mulhsw */
+    var51.i = (var47.i * var42.i) >> 16;
+    /* 12: mulhsw */
+    var52.i = (var49.i * var42.i) >> 16;
+    /* 14: mergewl */
+    {
+      orc_union32 _dest;
+      _dest.x2[0] = var43.i;
+      _dest.x2[1] = var51.i;
+      var53.i = _dest.i;
+    }
+    /* 15: mergewl */
+    {
+      orc_union32 _dest;
+      _dest.x2[0] = var52.i;
+      _dest.x2[1] = var50.i;
+      var54.i = _dest.i;
+    }
+    /* 16: shll */
+    var55.i = ((orc_uint32) var54.i) << 8;
+    /* 17: orl */
+    var44.i = var53.i | var55.i;
+    /* 18: storel */
+    ptr0[i] = var44;
+  }
+
+}
+
+#else
+static void
+_backup_video_orc_unpack_BGR15_le (OrcExecutor * ORC_RESTRICT ex)
+{
+  int i;
+  int n = ex->n;
+  orc_union32 *ORC_RESTRICT ptr0;
+  const orc_union16 *ORC_RESTRICT ptr4;
+#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
+  volatile orc_union16 var38;
+#else
+  orc_union16 var38;
+#endif
+#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
+  volatile orc_union16 var39;
+#else
+  orc_union16 var39;
+#endif
+#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
+  volatile orc_union16 var40;
+#else
+  orc_union16 var40;
+#endif
+#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
+  volatile orc_union16 var41;
+#else
+  orc_union16 var41;
+#endif
+#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
+  volatile orc_union16 var42;
+#else
+  orc_union16 var42;
+#endif
+#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
+  volatile orc_union16 var43;
+#else
+  orc_union16 var43;
+#endif
+  orc_union32 var44;
+  orc_union16 var45;
+  orc_union16 var46;
+  orc_union16 var47;
+  orc_union16 var48;
+  orc_union16 var49;
+  orc_union16 var50;
+  orc_union16 var51;
+  orc_union16 var52;
+  orc_union32 var53;
+  orc_union32 var54;
+  orc_union32 var55;
+
+  ptr0 = (orc_union32 *) ex->arrays[0];
+  ptr4 = (orc_union16 *) ex->arrays[4];
+
+  /* 1: loadpw */
+  var38.i = (int) 0x00007c00;   /* 31744 or 1.56836e-319f */
+  /* 3: loadpw */
+  var39.i = (int) 0x000003e0;   /* 992 or 4.90113e-321f */
+  /* 5: loadpw */
+  var40.i = (int) 0x0000001f;   /* 31 or 1.5316e-322f */
+  /* 8: loadpw */
+  var41.i = (int) 0x00000210;   /* 528 or 2.60867e-321f */
+  /* 10: loadpw */
+  var42.i = (int) 0x00004200;   /* 16896 or 8.34773e-320f */
+  /* 13: loadpw */
+  var43.i = (int) 0x000000ff;   /* 255 or 1.25987e-321f */
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadw */
+    var45 = ptr4[i];
+    /* 2: andw */
+    var46.i = var45.i & var38.i;
+    /* 4: andw */
+    var47.i = var45.i & var39.i;
+    /* 6: andw */
+    var48.i = var45.i & var40.i;
+    /* 7: shlw */
+    var49.i = ((orc_uint16) var48.i) << 5;
+    /* 9: mulhsw */
+    var50.i = (var46.i * var41.i) >> 16;
+    /* 11: mulhsw */
+    var51.i = (var47.i * var42.i) >> 16;
+    /* 12: mulhsw */
+    var52.i = (var49.i * var42.i) >> 16;
+    /* 14: mergewl */
+    {
+      orc_union32 _dest;
+      _dest.x2[0] = var43.i;
+      _dest.x2[1] = var51.i;
+      var53.i = _dest.i;
+    }
+    /* 15: mergewl */
+    {
+      orc_union32 _dest;
+      _dest.x2[0] = var52.i;
+      _dest.x2[1] = var50.i;
+      var54.i = _dest.i;
+    }
+    /* 16: shll */
+    var55.i = ((orc_uint32) var54.i) << 8;
+    /* 17: orl */
+    var44.i = var53.i | var55.i;
+    /* 18: storel */
+    ptr0[i] = var44;
+  }
+
+}
+
+void
+video_orc_unpack_BGR15_le (guint32 * ORC_RESTRICT d1,
+    const guint16 * ORC_RESTRICT s1, int n)
+{
+  OrcExecutor _ex, *ex = &_ex;
+  static volatile int p_inited = 0;
+  static OrcCode *c = 0;
+  void (*func) (OrcExecutor *);
+
+  if (!p_inited) {
+    orc_once_mutex_lock ();
+    if (!p_inited) {
+      OrcProgram *p;
+
+#if 1
+      static const orc_uint8 bc[] = {
+        1, 9, 25, 118, 105, 100, 101, 111, 95, 111, 114, 99, 95, 117, 110, 112,
+        97, 99, 107, 95, 66, 71, 82, 49, 53, 95, 108, 101, 11, 4, 4, 12,
+        2, 2, 14, 2, 0, 124, 0, 0, 14, 2, 224, 3, 0, 0, 14, 2,
+        31, 0, 0, 0, 14, 2, 5, 0, 0, 0, 14, 2, 16, 2, 0, 0,
+        14, 2, 0, 66, 0, 0, 14, 2, 255, 0, 0, 0, 14, 4, 8, 0,
+        0, 0, 20, 2, 20, 2, 20, 2, 20, 2, 20, 4, 20, 4, 82, 32,
+        4, 73, 35, 32, 16, 73, 34, 32, 17, 73, 33, 32, 18, 93, 33, 33,
+        19, 90, 35, 35, 20, 90, 34, 34, 21, 90, 33, 33, 21, 195, 36, 22,
+        34, 195, 37, 33, 35, 124, 37, 37, 23, 123, 0, 36, 37, 2, 0,
+      };
+      p = orc_program_new_from_static_bytecode (bc);
+      orc_program_set_backup_function (p, _backup_video_orc_unpack_BGR15_le);
+#else
+      p = orc_program_new ();
+      orc_program_set_name (p, "video_orc_unpack_BGR15_le");
+      orc_program_set_backup_function (p, _backup_video_orc_unpack_BGR15_le);
+      orc_program_add_destination (p, 4, "d1");
+      orc_program_add_source (p, 2, "s1");
+      orc_program_add_constant (p, 2, 0x00007c00, "c1");
+      orc_program_add_constant (p, 2, 0x000003e0, "c2");
+      orc_program_add_constant (p, 2, 0x0000001f, "c3");
+      orc_program_add_constant (p, 2, 0x00000005, "c4");
+      orc_program_add_constant (p, 2, 0x00000210, "c5");
+      orc_program_add_constant (p, 2, 0x00004200, "c6");
+      orc_program_add_constant (p, 2, 0x000000ff, "c7");
+      orc_program_add_constant (p, 4, 0x00000008, "c8");
+      orc_program_add_temporary (p, 2, "t1");
+      orc_program_add_temporary (p, 2, "t2");
+      orc_program_add_temporary (p, 2, "t3");
+      orc_program_add_temporary (p, 2, "t4");
+      orc_program_add_temporary (p, 4, "t5");
+      orc_program_add_temporary (p, 4, "t6");
+
+      orc_program_append_2 (p, "loadw", 0, ORC_VAR_T1, ORC_VAR_S1, ORC_VAR_D1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "andw", 0, ORC_VAR_T4, ORC_VAR_T1, ORC_VAR_C1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "andw", 0, ORC_VAR_T3, ORC_VAR_T1, ORC_VAR_C2,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "andw", 0, ORC_VAR_T2, ORC_VAR_T1, ORC_VAR_C3,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "shlw", 0, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_C4,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "mulhsw", 0, ORC_VAR_T4, ORC_VAR_T4, ORC_VAR_C5,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "mulhsw", 0, ORC_VAR_T3, ORC_VAR_T3, ORC_VAR_C6,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "mulhsw", 0, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_C6,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "mergewl", 0, ORC_VAR_T5, ORC_VAR_C7, ORC_VAR_T3,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "mergewl", 0, ORC_VAR_T6, ORC_VAR_T2, ORC_VAR_T4,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "shll", 0, ORC_VAR_T6, ORC_VAR_T6, ORC_VAR_C8,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "orl", 0, ORC_VAR_D1, ORC_VAR_T5, ORC_VAR_T6,
+          ORC_VAR_D1);
+#endif
+
+      orc_program_compile (p);
+      c = orc_program_take_code (p);
+      orc_program_free (p);
+    }
+    p_inited = TRUE;
+    orc_once_mutex_unlock ();
+  }
+  ex->arrays[ORC_VAR_A2] = c;
+  ex->program = 0;
+
+  ex->n = n;
+  ex->arrays[ORC_VAR_D1] = d1;
+  ex->arrays[ORC_VAR_S1] = (void *) s1;
+
+  func = c->exec;
+  func (ex);
+}
+#endif
+
+
+/* video_orc_unpack_BGR15_be */
+#ifdef DISABLE_ORC
+void
+video_orc_unpack_BGR15_be (guint32 * ORC_RESTRICT d1,
+    const guint16 * ORC_RESTRICT s1, int n)
+{
+  int i;
+  orc_union32 *ORC_RESTRICT ptr0;
+  const orc_union16 *ORC_RESTRICT ptr4;
+#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
+  volatile orc_union16 var38;
+#else
+  orc_union16 var38;
+#endif
+#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
+  volatile orc_union16 var39;
+#else
+  orc_union16 var39;
+#endif
+#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
+  volatile orc_union16 var40;
+#else
+  orc_union16 var40;
+#endif
+#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
+  volatile orc_union16 var41;
+#else
+  orc_union16 var41;
+#endif
+#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
+  volatile orc_union16 var42;
+#else
+  orc_union16 var42;
+#endif
+#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
+  volatile orc_union16 var43;
+#else
+  orc_union16 var43;
+#endif
+  orc_union32 var44;
+  orc_union16 var45;
+  orc_union16 var46;
+  orc_union16 var47;
+  orc_union16 var48;
+  orc_union16 var49;
+  orc_union16 var50;
+  orc_union16 var51;
+  orc_union16 var52;
+  orc_union32 var53;
+  orc_union32 var54;
+  orc_union32 var55;
+
+  ptr0 = (orc_union32 *) d1;
+  ptr4 = (orc_union16 *) s1;
+
+  /* 1: loadpw */
+  var38.i = (int) 0x00007c00;   /* 31744 or 1.56836e-319f */
+  /* 3: loadpw */
+  var39.i = (int) 0x000003e0;   /* 992 or 4.90113e-321f */
+  /* 5: loadpw */
+  var40.i = (int) 0x0000001f;   /* 31 or 1.5316e-322f */
+  /* 8: loadpw */
+  var41.i = (int) 0x00000210;   /* 528 or 2.60867e-321f */
+  /* 10: loadpw */
+  var42.i = (int) 0x00004200;   /* 16896 or 8.34773e-320f */
+  /* 13: loadpw */
+  var43.i = (int) 0x000000ff;   /* 255 or 1.25987e-321f */
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadw */
+    var45 = ptr4[i];
+    /* 2: andw */
+    var46.i = var45.i & var38.i;
+    /* 4: andw */
+    var47.i = var45.i & var39.i;
+    /* 6: andw */
+    var48.i = var45.i & var40.i;
+    /* 7: shlw */
+    var49.i = ((orc_uint16) var48.i) << 5;
+    /* 9: mulhsw */
+    var50.i = (var46.i * var41.i) >> 16;
+    /* 11: mulhsw */
+    var51.i = (var47.i * var42.i) >> 16;
+    /* 12: mulhsw */
+    var52.i = (var49.i * var42.i) >> 16;
+    /* 14: mergewl */
+    {
+      orc_union32 _dest;
+      _dest.x2[0] = var43.i;
+      _dest.x2[1] = var51.i;
+      var53.i = _dest.i;
+    }
+    /* 15: mergewl */
+    {
+      orc_union32 _dest;
+      _dest.x2[0] = var52.i;
+      _dest.x2[1] = var50.i;
+      var54.i = _dest.i;
+    }
+    /* 16: shll */
+    var55.i = ((orc_uint32) var53.i) << 8;
+    /* 17: orl */
+    var44.i = var55.i | var54.i;
+    /* 18: storel */
+    ptr0[i] = var44;
+  }
+
+}
+
+#else
+static void
+_backup_video_orc_unpack_BGR15_be (OrcExecutor * ORC_RESTRICT ex)
+{
+  int i;
+  int n = ex->n;
+  orc_union32 *ORC_RESTRICT ptr0;
+  const orc_union16 *ORC_RESTRICT ptr4;
+#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
+  volatile orc_union16 var38;
+#else
+  orc_union16 var38;
+#endif
+#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
+  volatile orc_union16 var39;
+#else
+  orc_union16 var39;
+#endif
+#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
+  volatile orc_union16 var40;
+#else
+  orc_union16 var40;
+#endif
+#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
+  volatile orc_union16 var41;
+#else
+  orc_union16 var41;
+#endif
+#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
+  volatile orc_union16 var42;
+#else
+  orc_union16 var42;
+#endif
+#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
+  volatile orc_union16 var43;
+#else
+  orc_union16 var43;
+#endif
+  orc_union32 var44;
+  orc_union16 var45;
+  orc_union16 var46;
+  orc_union16 var47;
+  orc_union16 var48;
+  orc_union16 var49;
+  orc_union16 var50;
+  orc_union16 var51;
+  orc_union16 var52;
+  orc_union32 var53;
+  orc_union32 var54;
+  orc_union32 var55;
+
+  ptr0 = (orc_union32 *) ex->arrays[0];
+  ptr4 = (orc_union16 *) ex->arrays[4];
+
+  /* 1: loadpw */
+  var38.i = (int) 0x00007c00;   /* 31744 or 1.56836e-319f */
+  /* 3: loadpw */
+  var39.i = (int) 0x000003e0;   /* 992 or 4.90113e-321f */
+  /* 5: loadpw */
+  var40.i = (int) 0x0000001f;   /* 31 or 1.5316e-322f */
+  /* 8: loadpw */
+  var41.i = (int) 0x00000210;   /* 528 or 2.60867e-321f */
+  /* 10: loadpw */
+  var42.i = (int) 0x00004200;   /* 16896 or 8.34773e-320f */
+  /* 13: loadpw */
+  var43.i = (int) 0x000000ff;   /* 255 or 1.25987e-321f */
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadw */
+    var45 = ptr4[i];
+    /* 2: andw */
+    var46.i = var45.i & var38.i;
+    /* 4: andw */
+    var47.i = var45.i & var39.i;
+    /* 6: andw */
+    var48.i = var45.i & var40.i;
+    /* 7: shlw */
+    var49.i = ((orc_uint16) var48.i) << 5;
+    /* 9: mulhsw */
+    var50.i = (var46.i * var41.i) >> 16;
+    /* 11: mulhsw */
+    var51.i = (var47.i * var42.i) >> 16;
+    /* 12: mulhsw */
+    var52.i = (var49.i * var42.i) >> 16;
+    /* 14: mergewl */
+    {
+      orc_union32 _dest;
+      _dest.x2[0] = var43.i;
+      _dest.x2[1] = var51.i;
+      var53.i = _dest.i;
+    }
+    /* 15: mergewl */
+    {
+      orc_union32 _dest;
+      _dest.x2[0] = var52.i;
+      _dest.x2[1] = var50.i;
+      var54.i = _dest.i;
+    }
+    /* 16: shll */
+    var55.i = ((orc_uint32) var53.i) << 8;
+    /* 17: orl */
+    var44.i = var55.i | var54.i;
+    /* 18: storel */
+    ptr0[i] = var44;
+  }
+
+}
+
+void
+video_orc_unpack_BGR15_be (guint32 * ORC_RESTRICT d1,
+    const guint16 * ORC_RESTRICT s1, int n)
+{
+  OrcExecutor _ex, *ex = &_ex;
+  static volatile int p_inited = 0;
+  static OrcCode *c = 0;
+  void (*func) (OrcExecutor *);
+
+  if (!p_inited) {
+    orc_once_mutex_lock ();
+    if (!p_inited) {
+      OrcProgram *p;
+
+#if 1
+      static const orc_uint8 bc[] = {
+        1, 9, 25, 118, 105, 100, 101, 111, 95, 111, 114, 99, 95, 117, 110, 112,
+        97, 99, 107, 95, 66, 71, 82, 49, 53, 95, 98, 101, 11, 4, 4, 12,
+        2, 2, 14, 2, 0, 124, 0, 0, 14, 2, 224, 3, 0, 0, 14, 2,
+        31, 0, 0, 0, 14, 2, 5, 0, 0, 0, 14, 2, 16, 2, 0, 0,
+        14, 2, 0, 66, 0, 0, 14, 2, 255, 0, 0, 0, 14, 4, 8, 0,
+        0, 0, 20, 2, 20, 2, 20, 2, 20, 2, 20, 4, 20, 4, 82, 32,
+        4, 73, 35, 32, 16, 73, 34, 32, 17, 73, 33, 32, 18, 93, 33, 33,
+        19, 90, 35, 35, 20, 90, 34, 34, 21, 90, 33, 33, 21, 195, 36, 22,
+        34, 195, 37, 33, 35, 124, 36, 36, 23, 123, 0, 36, 37, 2, 0,
+      };
+      p = orc_program_new_from_static_bytecode (bc);
+      orc_program_set_backup_function (p, _backup_video_orc_unpack_BGR15_be);
+#else
+      p = orc_program_new ();
+      orc_program_set_name (p, "video_orc_unpack_BGR15_be");
+      orc_program_set_backup_function (p, _backup_video_orc_unpack_BGR15_be);
+      orc_program_add_destination (p, 4, "d1");
+      orc_program_add_source (p, 2, "s1");
+      orc_program_add_constant (p, 2, 0x00007c00, "c1");
+      orc_program_add_constant (p, 2, 0x000003e0, "c2");
+      orc_program_add_constant (p, 2, 0x0000001f, "c3");
+      orc_program_add_constant (p, 2, 0x00000005, "c4");
+      orc_program_add_constant (p, 2, 0x00000210, "c5");
+      orc_program_add_constant (p, 2, 0x00004200, "c6");
+      orc_program_add_constant (p, 2, 0x000000ff, "c7");
+      orc_program_add_constant (p, 4, 0x00000008, "c8");
+      orc_program_add_temporary (p, 2, "t1");
+      orc_program_add_temporary (p, 2, "t2");
+      orc_program_add_temporary (p, 2, "t3");
+      orc_program_add_temporary (p, 2, "t4");
+      orc_program_add_temporary (p, 4, "t5");
+      orc_program_add_temporary (p, 4, "t6");
+
+      orc_program_append_2 (p, "loadw", 0, ORC_VAR_T1, ORC_VAR_S1, ORC_VAR_D1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "andw", 0, ORC_VAR_T4, ORC_VAR_T1, ORC_VAR_C1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "andw", 0, ORC_VAR_T3, ORC_VAR_T1, ORC_VAR_C2,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "andw", 0, ORC_VAR_T2, ORC_VAR_T1, ORC_VAR_C3,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "shlw", 0, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_C4,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "mulhsw", 0, ORC_VAR_T4, ORC_VAR_T4, ORC_VAR_C5,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "mulhsw", 0, ORC_VAR_T3, ORC_VAR_T3, ORC_VAR_C6,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "mulhsw", 0, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_C6,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "mergewl", 0, ORC_VAR_T5, ORC_VAR_C7, ORC_VAR_T3,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "mergewl", 0, ORC_VAR_T6, ORC_VAR_T2, ORC_VAR_T4,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "shll", 0, ORC_VAR_T5, ORC_VAR_T5, ORC_VAR_C8,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "orl", 0, ORC_VAR_D1, ORC_VAR_T5, ORC_VAR_T6,
+          ORC_VAR_D1);
+#endif
+
+      orc_program_compile (p);
+      c = orc_program_take_code (p);
+      orc_program_free (p);
+    }
+    p_inited = TRUE;
+    orc_once_mutex_unlock ();
+  }
+  ex->arrays[ORC_VAR_A2] = c;
+  ex->program = 0;
+
+  ex->n = n;
+  ex->arrays[ORC_VAR_D1] = d1;
+  ex->arrays[ORC_VAR_S1] = (void *) s1;
+
+  func = c->exec;
+  func (ex);
+}
+#endif
+
+
+/* video_orc_unpack_BGR15_le_trunc */
+#ifdef DISABLE_ORC
+void
+video_orc_unpack_BGR15_le_trunc (guint32 * ORC_RESTRICT d1,
+    const guint16 * ORC_RESTRICT s1, int n)
+{
+  int i;
+  orc_union32 *ORC_RESTRICT ptr0;
+  const orc_union16 *ORC_RESTRICT ptr4;
+#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
+  volatile orc_union16 var38;
+#else
+  orc_union16 var38;
+#endif
+#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
+  volatile orc_union16 var39;
+#else
+  orc_union16 var39;
+#endif
+#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
+  volatile orc_union16 var40;
+#else
+  orc_union16 var40;
+#endif
+#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
+  volatile orc_union16 var41;
+#else
+  orc_union16 var41;
+#endif
+  orc_union32 var42;
+  orc_union16 var43;
+  orc_union16 var44;
+  orc_union16 var45;
+  orc_union16 var46;
+  orc_union16 var47;
+  orc_union16 var48;
+  orc_union16 var49;
+  orc_union32 var50;
+  orc_union32 var51;
+  orc_union32 var52;
+
+  ptr0 = (orc_union32 *) d1;
+  ptr4 = (orc_union16 *) s1;
+
+  /* 1: loadpw */
+  var38.i = (int) 0x00007c00;   /* 31744 or 1.56836e-319f */
+  /* 3: loadpw */
+  var39.i = (int) 0x000003e0;   /* 992 or 4.90113e-321f */
+  /* 5: loadpw */
+  var40.i = (int) 0x0000001f;   /* 31 or 1.5316e-322f */
+  /* 10: loadpw */
+  var41.i = (int) 0x000000ff;   /* 255 or 1.25987e-321f */
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadw */
+    var43 = ptr4[i];
+    /* 2: andw */
+    var44.i = var43.i & var38.i;
+    /* 4: andw */
+    var45.i = var43.i & var39.i;
+    /* 6: andw */
+    var46.i = var43.i & var40.i;
+    /* 7: shruw */
+    var47.i = ((orc_uint16) var44.i) >> 7;
+    /* 8: shruw */
+    var48.i = ((orc_uint16) var45.i) >> 2;
+    /* 9: shlw */
+    var49.i = ((orc_uint16) var46.i) << 3;
+    /* 11: mergewl */
+    {
+      orc_union32 _dest;
+      _dest.x2[0] = var41.i;
+      _dest.x2[1] = var48.i;
+      var50.i = _dest.i;
+    }
+    /* 12: mergewl */
+    {
+      orc_union32 _dest;
+      _dest.x2[0] = var49.i;
+      _dest.x2[1] = var47.i;
+      var51.i = _dest.i;
+    }
+    /* 13: shll */
+    var52.i = ((orc_uint32) var51.i) << 8;
+    /* 14: orl */
+    var42.i = var50.i | var52.i;
+    /* 15: storel */
+    ptr0[i] = var42;
+  }
+
+}
+
+#else
+static void
+_backup_video_orc_unpack_BGR15_le_trunc (OrcExecutor * ORC_RESTRICT ex)
+{
+  int i;
+  int n = ex->n;
+  orc_union32 *ORC_RESTRICT ptr0;
+  const orc_union16 *ORC_RESTRICT ptr4;
+#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
+  volatile orc_union16 var38;
+#else
+  orc_union16 var38;
+#endif
+#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
+  volatile orc_union16 var39;
+#else
+  orc_union16 var39;
+#endif
+#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
+  volatile orc_union16 var40;
+#else
+  orc_union16 var40;
+#endif
+#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
+  volatile orc_union16 var41;
+#else
+  orc_union16 var41;
+#endif
+  orc_union32 var42;
+  orc_union16 var43;
+  orc_union16 var44;
+  orc_union16 var45;
+  orc_union16 var46;
+  orc_union16 var47;
+  orc_union16 var48;
+  orc_union16 var49;
+  orc_union32 var50;
+  orc_union32 var51;
+  orc_union32 var52;
+
+  ptr0 = (orc_union32 *) ex->arrays[0];
+  ptr4 = (orc_union16 *) ex->arrays[4];
+
+  /* 1: loadpw */
+  var38.i = (int) 0x00007c00;   /* 31744 or 1.56836e-319f */
+  /* 3: loadpw */
+  var39.i = (int) 0x000003e0;   /* 992 or 4.90113e-321f */
+  /* 5: loadpw */
+  var40.i = (int) 0x0000001f;   /* 31 or 1.5316e-322f */
+  /* 10: loadpw */
+  var41.i = (int) 0x000000ff;   /* 255 or 1.25987e-321f */
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadw */
+    var43 = ptr4[i];
+    /* 2: andw */
+    var44.i = var43.i & var38.i;
+    /* 4: andw */
+    var45.i = var43.i & var39.i;
+    /* 6: andw */
+    var46.i = var43.i & var40.i;
+    /* 7: shruw */
+    var47.i = ((orc_uint16) var44.i) >> 7;
+    /* 8: shruw */
+    var48.i = ((orc_uint16) var45.i) >> 2;
+    /* 9: shlw */
+    var49.i = ((orc_uint16) var46.i) << 3;
+    /* 11: mergewl */
+    {
+      orc_union32 _dest;
+      _dest.x2[0] = var41.i;
+      _dest.x2[1] = var48.i;
+      var50.i = _dest.i;
+    }
+    /* 12: mergewl */
+    {
+      orc_union32 _dest;
+      _dest.x2[0] = var49.i;
+      _dest.x2[1] = var47.i;
+      var51.i = _dest.i;
+    }
+    /* 13: shll */
+    var52.i = ((orc_uint32) var51.i) << 8;
+    /* 14: orl */
+    var42.i = var50.i | var52.i;
+    /* 15: storel */
+    ptr0[i] = var42;
+  }
+
+}
+
+void
+video_orc_unpack_BGR15_le_trunc (guint32 * ORC_RESTRICT d1,
+    const guint16 * ORC_RESTRICT s1, int n)
+{
+  OrcExecutor _ex, *ex = &_ex;
+  static volatile int p_inited = 0;
+  static OrcCode *c = 0;
+  void (*func) (OrcExecutor *);
+
+  if (!p_inited) {
+    orc_once_mutex_lock ();
+    if (!p_inited) {
+      OrcProgram *p;
+
+#if 1
+      static const orc_uint8 bc[] = {
+        1, 9, 31, 118, 105, 100, 101, 111, 95, 111, 114, 99, 95, 117, 110, 112,
+        97, 99, 107, 95, 66, 71, 82, 49, 53, 95, 108, 101, 95, 116, 114, 117,
+        110, 99, 11, 4, 4, 12, 2, 2, 14, 2, 0, 124, 0, 0, 14, 2,
+        224, 3, 0, 0, 14, 2, 31, 0, 0, 0, 14, 2, 7, 0, 0, 0,
+        14, 2, 2, 0, 0, 0, 14, 2, 3, 0, 0, 0, 14, 2, 255, 0,
+        0, 0, 14, 4, 8, 0, 0, 0, 20, 2, 20, 2, 20, 2, 20, 2,
+        20, 4, 20, 4, 82, 32, 4, 73, 35, 32, 16, 73, 34, 32, 17, 73,
+        33, 32, 18, 95, 35, 35, 19, 95, 34, 34, 20, 93, 33, 33, 21, 195,
+        36, 22, 34, 195, 37, 33, 35, 124, 37, 37, 23, 123, 0, 36, 37, 2,
+        0,
+      };
+      p = orc_program_new_from_static_bytecode (bc);
+      orc_program_set_backup_function (p,
+          _backup_video_orc_unpack_BGR15_le_trunc);
+#else
+      p = orc_program_new ();
+      orc_program_set_name (p, "video_orc_unpack_BGR15_le_trunc");
+      orc_program_set_backup_function (p,
+          _backup_video_orc_unpack_BGR15_le_trunc);
+      orc_program_add_destination (p, 4, "d1");
+      orc_program_add_source (p, 2, "s1");
+      orc_program_add_constant (p, 2, 0x00007c00, "c1");
+      orc_program_add_constant (p, 2, 0x000003e0, "c2");
+      orc_program_add_constant (p, 2, 0x0000001f, "c3");
+      orc_program_add_constant (p, 2, 0x00000007, "c4");
+      orc_program_add_constant (p, 2, 0x00000002, "c5");
+      orc_program_add_constant (p, 2, 0x00000003, "c6");
+      orc_program_add_constant (p, 2, 0x000000ff, "c7");
+      orc_program_add_constant (p, 4, 0x00000008, "c8");
+      orc_program_add_temporary (p, 2, "t1");
+      orc_program_add_temporary (p, 2, "t2");
+      orc_program_add_temporary (p, 2, "t3");
+      orc_program_add_temporary (p, 2, "t4");
+      orc_program_add_temporary (p, 4, "t5");
+      orc_program_add_temporary (p, 4, "t6");
+
+      orc_program_append_2 (p, "loadw", 0, ORC_VAR_T1, ORC_VAR_S1, ORC_VAR_D1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "andw", 0, ORC_VAR_T4, ORC_VAR_T1, ORC_VAR_C1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "andw", 0, ORC_VAR_T3, ORC_VAR_T1, ORC_VAR_C2,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "andw", 0, ORC_VAR_T2, ORC_VAR_T1, ORC_VAR_C3,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "shruw", 0, ORC_VAR_T4, ORC_VAR_T4, ORC_VAR_C4,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "shruw", 0, ORC_VAR_T3, ORC_VAR_T3, ORC_VAR_C5,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "shlw", 0, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_C6,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "mergewl", 0, ORC_VAR_T5, ORC_VAR_C7, ORC_VAR_T3,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "mergewl", 0, ORC_VAR_T6, ORC_VAR_T2, ORC_VAR_T4,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "shll", 0, ORC_VAR_T6, ORC_VAR_T6, ORC_VAR_C8,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "orl", 0, ORC_VAR_D1, ORC_VAR_T5, ORC_VAR_T6,
+          ORC_VAR_D1);
+#endif
+
+      orc_program_compile (p);
+      c = orc_program_take_code (p);
+      orc_program_free (p);
+    }
+    p_inited = TRUE;
+    orc_once_mutex_unlock ();
+  }
+  ex->arrays[ORC_VAR_A2] = c;
+  ex->program = 0;
+
+  ex->n = n;
+  ex->arrays[ORC_VAR_D1] = d1;
+  ex->arrays[ORC_VAR_S1] = (void *) s1;
+
+  func = c->exec;
+  func (ex);
+}
+#endif
+
+
+/* video_orc_unpack_BGR15_be_trunc */
+#ifdef DISABLE_ORC
+void
+video_orc_unpack_BGR15_be_trunc (guint32 * ORC_RESTRICT d1,
+    const guint16 * ORC_RESTRICT s1, int n)
+{
+  int i;
+  orc_union32 *ORC_RESTRICT ptr0;
+  const orc_union16 *ORC_RESTRICT ptr4;
+#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
+  volatile orc_union16 var38;
+#else
+  orc_union16 var38;
+#endif
+#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
+  volatile orc_union16 var39;
+#else
+  orc_union16 var39;
+#endif
+#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
+  volatile orc_union16 var40;
+#else
+  orc_union16 var40;
+#endif
+#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
+  volatile orc_union16 var41;
+#else
+  orc_union16 var41;
+#endif
+  orc_union32 var42;
+  orc_union16 var43;
+  orc_union16 var44;
+  orc_union16 var45;
+  orc_union16 var46;
+  orc_union16 var47;
+  orc_union16 var48;
+  orc_union16 var49;
+  orc_union32 var50;
+  orc_union32 var51;
+  orc_union32 var52;
+
+  ptr0 = (orc_union32 *) d1;
+  ptr4 = (orc_union16 *) s1;
+
+  /* 1: loadpw */
+  var38.i = (int) 0x00007c00;   /* 31744 or 1.56836e-319f */
+  /* 3: loadpw */
+  var39.i = (int) 0x000003e0;   /* 992 or 4.90113e-321f */
+  /* 5: loadpw */
+  var40.i = (int) 0x0000001f;   /* 31 or 1.5316e-322f */
+  /* 10: loadpw */
+  var41.i = (int) 0x000000ff;   /* 255 or 1.25987e-321f */
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadw */
+    var43 = ptr4[i];
+    /* 2: andw */
+    var44.i = var43.i & var38.i;
+    /* 4: andw */
+    var45.i = var43.i & var39.i;
+    /* 6: andw */
+    var46.i = var43.i & var40.i;
+    /* 7: shruw */
+    var47.i = ((orc_uint16) var44.i) >> 7;
+    /* 8: shruw */
+    var48.i = ((orc_uint16) var45.i) >> 2;
+    /* 9: shlw */
+    var49.i = ((orc_uint16) var46.i) << 3;
+    /* 11: mergewl */
+    {
+      orc_union32 _dest;
+      _dest.x2[0] = var41.i;
+      _dest.x2[1] = var48.i;
+      var50.i = _dest.i;
+    }
+    /* 12: mergewl */
+    {
+      orc_union32 _dest;
+      _dest.x2[0] = var49.i;
+      _dest.x2[1] = var47.i;
+      var51.i = _dest.i;
+    }
+    /* 13: shll */
+    var52.i = ((orc_uint32) var50.i) << 8;
+    /* 14: orl */
+    var42.i = var52.i | var51.i;
+    /* 15: storel */
+    ptr0[i] = var42;
+  }
+
+}
+
+#else
+static void
+_backup_video_orc_unpack_BGR15_be_trunc (OrcExecutor * ORC_RESTRICT ex)
+{
+  int i;
+  int n = ex->n;
+  orc_union32 *ORC_RESTRICT ptr0;
+  const orc_union16 *ORC_RESTRICT ptr4;
+#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
+  volatile orc_union16 var38;
+#else
+  orc_union16 var38;
+#endif
+#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
+  volatile orc_union16 var39;
+#else
+  orc_union16 var39;
+#endif
+#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
+  volatile orc_union16 var40;
+#else
+  orc_union16 var40;
+#endif
+#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
+  volatile orc_union16 var41;
+#else
+  orc_union16 var41;
+#endif
+  orc_union32 var42;
+  orc_union16 var43;
+  orc_union16 var44;
+  orc_union16 var45;
+  orc_union16 var46;
+  orc_union16 var47;
+  orc_union16 var48;
+  orc_union16 var49;
+  orc_union32 var50;
+  orc_union32 var51;
+  orc_union32 var52;
+
+  ptr0 = (orc_union32 *) ex->arrays[0];
+  ptr4 = (orc_union16 *) ex->arrays[4];
+
+  /* 1: loadpw */
+  var38.i = (int) 0x00007c00;   /* 31744 or 1.56836e-319f */
+  /* 3: loadpw */
+  var39.i = (int) 0x000003e0;   /* 992 or 4.90113e-321f */
+  /* 5: loadpw */
+  var40.i = (int) 0x0000001f;   /* 31 or 1.5316e-322f */
+  /* 10: loadpw */
+  var41.i = (int) 0x000000ff;   /* 255 or 1.25987e-321f */
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadw */
+    var43 = ptr4[i];
+    /* 2: andw */
+    var44.i = var43.i & var38.i;
+    /* 4: andw */
+    var45.i = var43.i & var39.i;
+    /* 6: andw */
+    var46.i = var43.i & var40.i;
+    /* 7: shruw */
+    var47.i = ((orc_uint16) var44.i) >> 7;
+    /* 8: shruw */
+    var48.i = ((orc_uint16) var45.i) >> 2;
+    /* 9: shlw */
+    var49.i = ((orc_uint16) var46.i) << 3;
+    /* 11: mergewl */
+    {
+      orc_union32 _dest;
+      _dest.x2[0] = var41.i;
+      _dest.x2[1] = var48.i;
+      var50.i = _dest.i;
+    }
+    /* 12: mergewl */
+    {
+      orc_union32 _dest;
+      _dest.x2[0] = var49.i;
+      _dest.x2[1] = var47.i;
+      var51.i = _dest.i;
+    }
+    /* 13: shll */
+    var52.i = ((orc_uint32) var50.i) << 8;
+    /* 14: orl */
+    var42.i = var52.i | var51.i;
+    /* 15: storel */
+    ptr0[i] = var42;
+  }
+
+}
+
+void
+video_orc_unpack_BGR15_be_trunc (guint32 * ORC_RESTRICT d1,
+    const guint16 * ORC_RESTRICT s1, int n)
+{
+  OrcExecutor _ex, *ex = &_ex;
+  static volatile int p_inited = 0;
+  static OrcCode *c = 0;
+  void (*func) (OrcExecutor *);
+
+  if (!p_inited) {
+    orc_once_mutex_lock ();
+    if (!p_inited) {
+      OrcProgram *p;
+
+#if 1
+      static const orc_uint8 bc[] = {
+        1, 9, 31, 118, 105, 100, 101, 111, 95, 111, 114, 99, 95, 117, 110, 112,
+        97, 99, 107, 95, 66, 71, 82, 49, 53, 95, 98, 101, 95, 116, 114, 117,
+        110, 99, 11, 4, 4, 12, 2, 2, 14, 2, 0, 124, 0, 0, 14, 2,
+        224, 3, 0, 0, 14, 2, 31, 0, 0, 0, 14, 2, 7, 0, 0, 0,
+        14, 2, 2, 0, 0, 0, 14, 2, 3, 0, 0, 0, 14, 2, 255, 0,
+        0, 0, 14, 4, 8, 0, 0, 0, 20, 2, 20, 2, 20, 2, 20, 2,
+        20, 4, 20, 4, 82, 32, 4, 73, 35, 32, 16, 73, 34, 32, 17, 73,
+        33, 32, 18, 95, 35, 35, 19, 95, 34, 34, 20, 93, 33, 33, 21, 195,
+        36, 22, 34, 195, 37, 33, 35, 124, 36, 36, 23, 123, 0, 36, 37, 2,
+        0,
+      };
+      p = orc_program_new_from_static_bytecode (bc);
+      orc_program_set_backup_function (p,
+          _backup_video_orc_unpack_BGR15_be_trunc);
+#else
+      p = orc_program_new ();
+      orc_program_set_name (p, "video_orc_unpack_BGR15_be_trunc");
+      orc_program_set_backup_function (p,
+          _backup_video_orc_unpack_BGR15_be_trunc);
+      orc_program_add_destination (p, 4, "d1");
+      orc_program_add_source (p, 2, "s1");
+      orc_program_add_constant (p, 2, 0x00007c00, "c1");
+      orc_program_add_constant (p, 2, 0x000003e0, "c2");
+      orc_program_add_constant (p, 2, 0x0000001f, "c3");
+      orc_program_add_constant (p, 2, 0x00000007, "c4");
+      orc_program_add_constant (p, 2, 0x00000002, "c5");
+      orc_program_add_constant (p, 2, 0x00000003, "c6");
+      orc_program_add_constant (p, 2, 0x000000ff, "c7");
+      orc_program_add_constant (p, 4, 0x00000008, "c8");
+      orc_program_add_temporary (p, 2, "t1");
+      orc_program_add_temporary (p, 2, "t2");
+      orc_program_add_temporary (p, 2, "t3");
+      orc_program_add_temporary (p, 2, "t4");
+      orc_program_add_temporary (p, 4, "t5");
+      orc_program_add_temporary (p, 4, "t6");
+
+      orc_program_append_2 (p, "loadw", 0, ORC_VAR_T1, ORC_VAR_S1, ORC_VAR_D1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "andw", 0, ORC_VAR_T4, ORC_VAR_T1, ORC_VAR_C1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "andw", 0, ORC_VAR_T3, ORC_VAR_T1, ORC_VAR_C2,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "andw", 0, ORC_VAR_T2, ORC_VAR_T1, ORC_VAR_C3,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "shruw", 0, ORC_VAR_T4, ORC_VAR_T4, ORC_VAR_C4,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "shruw", 0, ORC_VAR_T3, ORC_VAR_T3, ORC_VAR_C5,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "shlw", 0, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_C6,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "mergewl", 0, ORC_VAR_T5, ORC_VAR_C7, ORC_VAR_T3,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "mergewl", 0, ORC_VAR_T6, ORC_VAR_T2, ORC_VAR_T4,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "shll", 0, ORC_VAR_T5, ORC_VAR_T5, ORC_VAR_C8,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "orl", 0, ORC_VAR_D1, ORC_VAR_T5, ORC_VAR_T6,
+          ORC_VAR_D1);
+#endif
+
+      orc_program_compile (p);
+      c = orc_program_take_code (p);
+      orc_program_free (p);
+    }
+    p_inited = TRUE;
+    orc_once_mutex_unlock ();
+  }
+  ex->arrays[ORC_VAR_A2] = c;
+  ex->program = 0;
+
+  ex->n = n;
+  ex->arrays[ORC_VAR_D1] = d1;
+  ex->arrays[ORC_VAR_S1] = (void *) s1;
+
+  func = c->exec;
+  func (ex);
+}
+#endif
+
+
+/* video_orc_pack_BGR15_le */
+#ifdef DISABLE_ORC
+void
+video_orc_pack_BGR15_le (guint16 * ORC_RESTRICT d1,
+    const guint32 * ORC_RESTRICT s1, int n)
+{
+  int i;
+  orc_union16 *ORC_RESTRICT ptr0;
+  const orc_union32 *ORC_RESTRICT ptr4;
+#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
+  volatile orc_union32 var37;
+#else
+  orc_union32 var37;
+#endif
+#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
+  volatile orc_union32 var38;
+#else
+  orc_union32 var38;
+#endif
+#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
+  volatile orc_union32 var39;
+#else
+  orc_union32 var39;
+#endif
+  orc_union16 var40;
+  orc_union32 var41;
+  orc_union32 var42;
+  orc_union32 var43;
+  orc_union32 var44;
+  orc_union32 var45;
+  orc_union32 var46;
+  orc_union32 var47;
+  orc_union32 var48;
+  orc_union32 var49;
+
+  ptr0 = (orc_union16 *) d1;
+  ptr4 = (orc_union32 *) s1;
+
+  /* 1: loadpl */
+  var37.i = (int) 0x0000f800;   /* 63488 or 3.13672e-319f */
+  /* 3: loadpl */
+  var38.i = (int) 0x00f80000;   /* 16252928 or 8.03001e-317f */
+  /* 5: loadpl */
+  var39.i = (int) 0xf8000000;   /* -134217728 or 2.05568e-314f */
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadl */
+    var41 = ptr4[i];
+    /* 2: andl */
+    var42.i = var41.i & var37.i;
+    /* 4: andl */
+    var43.i = var41.i & var38.i;
+    /* 6: andl */
+    var44.i = var41.i & var39.i;
+    /* 7: shrul */
+    var45.i = ((orc_uint32) var44.i) >> 17;
+    /* 8: shrul */
+    var46.i = ((orc_uint32) var43.i) >> 14;
+    /* 9: shrul */
+    var47.i = ((orc_uint32) var42.i) >> 11;
+    /* 10: orl */
+    var48.i = var47.i | var46.i;
+    /* 11: orl */
+    var49.i = var48.i | var45.i;
+    /* 12: select0lw */
+    {
+      orc_union32 _src;
+      _src.i = var49.i;
+      var40.i = _src.x2[0];
+    }
+    /* 13: storew */
+    ptr0[i] = var40;
+  }
+
+}
+
+#else
+static void
+_backup_video_orc_pack_BGR15_le (OrcExecutor * ORC_RESTRICT ex)
+{
+  int i;
+  int n = ex->n;
+  orc_union16 *ORC_RESTRICT ptr0;
+  const orc_union32 *ORC_RESTRICT ptr4;
+#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
+  volatile orc_union32 var37;
+#else
+  orc_union32 var37;
+#endif
+#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
+  volatile orc_union32 var38;
+#else
+  orc_union32 var38;
+#endif
+#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
+  volatile orc_union32 var39;
+#else
+  orc_union32 var39;
+#endif
+  orc_union16 var40;
+  orc_union32 var41;
+  orc_union32 var42;
+  orc_union32 var43;
+  orc_union32 var44;
+  orc_union32 var45;
+  orc_union32 var46;
+  orc_union32 var47;
+  orc_union32 var48;
+  orc_union32 var49;
+
+  ptr0 = (orc_union16 *) ex->arrays[0];
+  ptr4 = (orc_union32 *) ex->arrays[4];
+
+  /* 1: loadpl */
+  var37.i = (int) 0x0000f800;   /* 63488 or 3.13672e-319f */
+  /* 3: loadpl */
+  var38.i = (int) 0x00f80000;   /* 16252928 or 8.03001e-317f */
+  /* 5: loadpl */
+  var39.i = (int) 0xf8000000;   /* -134217728 or 2.05568e-314f */
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadl */
+    var41 = ptr4[i];
+    /* 2: andl */
+    var42.i = var41.i & var37.i;
+    /* 4: andl */
+    var43.i = var41.i & var38.i;
+    /* 6: andl */
+    var44.i = var41.i & var39.i;
+    /* 7: shrul */
+    var45.i = ((orc_uint32) var44.i) >> 17;
+    /* 8: shrul */
+    var46.i = ((orc_uint32) var43.i) >> 14;
+    /* 9: shrul */
+    var47.i = ((orc_uint32) var42.i) >> 11;
+    /* 10: orl */
+    var48.i = var47.i | var46.i;
+    /* 11: orl */
+    var49.i = var48.i | var45.i;
+    /* 12: select0lw */
+    {
+      orc_union32 _src;
+      _src.i = var49.i;
+      var40.i = _src.x2[0];
+    }
+    /* 13: storew */
+    ptr0[i] = var40;
+  }
+
+}
+
+void
+video_orc_pack_BGR15_le (guint16 * ORC_RESTRICT d1,
+    const guint32 * ORC_RESTRICT s1, int n)
+{
+  OrcExecutor _ex, *ex = &_ex;
+  static volatile int p_inited = 0;
+  static OrcCode *c = 0;
+  void (*func) (OrcExecutor *);
+
+  if (!p_inited) {
+    orc_once_mutex_lock ();
+    if (!p_inited) {
+      OrcProgram *p;
+
+#if 1
+      static const orc_uint8 bc[] = {
+        1, 9, 23, 118, 105, 100, 101, 111, 95, 111, 114, 99, 95, 112, 97, 99,
+        107, 95, 66, 71, 82, 49, 53, 95, 108, 101, 11, 2, 2, 12, 4, 4,
+        14, 4, 0, 248, 0, 0, 14, 4, 0, 0, 248, 0, 14, 4, 0, 0,
+        0, 248, 14, 4, 17, 0, 0, 0, 14, 4, 14, 0, 0, 0, 14, 4,
+        11, 0, 0, 0, 20, 4, 20, 4, 20, 4, 20, 4, 20, 4, 113, 32,
+        4, 106, 33, 32, 16, 106, 34, 32, 17, 106, 35, 32, 18, 126, 35, 35,
+        19, 126, 34, 34, 20, 126, 33, 33, 21, 123, 36, 33, 34, 123, 36, 36,
+        35, 190, 0, 36, 2, 0,
+      };
+      p = orc_program_new_from_static_bytecode (bc);
+      orc_program_set_backup_function (p, _backup_video_orc_pack_BGR15_le);
+#else
+      p = orc_program_new ();
+      orc_program_set_name (p, "video_orc_pack_BGR15_le");
+      orc_program_set_backup_function (p, _backup_video_orc_pack_BGR15_le);
+      orc_program_add_destination (p, 2, "d1");
+      orc_program_add_source (p, 4, "s1");
+      orc_program_add_constant (p, 4, 0x0000f800, "c1");
+      orc_program_add_constant (p, 4, 0x00f80000, "c2");
+      orc_program_add_constant (p, 4, 0xf8000000, "c3");
+      orc_program_add_constant (p, 4, 0x00000011, "c4");
+      orc_program_add_constant (p, 4, 0x0000000e, "c5");
+      orc_program_add_constant (p, 4, 0x0000000b, "c6");
+      orc_program_add_temporary (p, 4, "t1");
+      orc_program_add_temporary (p, 4, "t2");
+      orc_program_add_temporary (p, 4, "t3");
+      orc_program_add_temporary (p, 4, "t4");
+      orc_program_add_temporary (p, 4, "t5");
+
+      orc_program_append_2 (p, "loadl", 0, ORC_VAR_T1, ORC_VAR_S1, ORC_VAR_D1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "andl", 0, ORC_VAR_T2, ORC_VAR_T1, ORC_VAR_C1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "andl", 0, ORC_VAR_T3, ORC_VAR_T1, ORC_VAR_C2,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "andl", 0, ORC_VAR_T4, ORC_VAR_T1, ORC_VAR_C3,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "shrul", 0, ORC_VAR_T4, ORC_VAR_T4, ORC_VAR_C4,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "shrul", 0, ORC_VAR_T3, ORC_VAR_T3, ORC_VAR_C5,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "shrul", 0, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_C6,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "orl", 0, ORC_VAR_T5, ORC_VAR_T2, ORC_VAR_T3,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "orl", 0, ORC_VAR_T5, ORC_VAR_T5, ORC_VAR_T4,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "select0lw", 0, ORC_VAR_D1, ORC_VAR_T5,
+          ORC_VAR_D1, ORC_VAR_D1);
+#endif
+
+      orc_program_compile (p);
+      c = orc_program_take_code (p);
+      orc_program_free (p);
+    }
+    p_inited = TRUE;
+    orc_once_mutex_unlock ();
+  }
+  ex->arrays[ORC_VAR_A2] = c;
+  ex->program = 0;
+
+  ex->n = n;
+  ex->arrays[ORC_VAR_D1] = d1;
+  ex->arrays[ORC_VAR_S1] = (void *) s1;
+
+  func = c->exec;
+  func (ex);
+}
+#endif
+
+
+/* video_orc_pack_BGR15_be */
+#ifdef DISABLE_ORC
+void
+video_orc_pack_BGR15_be (guint16 * ORC_RESTRICT d1,
+    const guint32 * ORC_RESTRICT s1, int n)
+{
+  int i;
+  orc_union16 *ORC_RESTRICT ptr0;
+  const orc_union32 *ORC_RESTRICT ptr4;
+#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
+  volatile orc_union32 var37;
+#else
+  orc_union32 var37;
+#endif
+#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
+  volatile orc_union32 var38;
+#else
+  orc_union32 var38;
+#endif
+#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
+  volatile orc_union32 var39;
+#else
+  orc_union32 var39;
+#endif
+  orc_union16 var40;
+  orc_union32 var41;
+  orc_union32 var42;
+  orc_union32 var43;
+  orc_union32 var44;
+  orc_union32 var45;
+  orc_union32 var46;
+  orc_union32 var47;
+  orc_union32 var48;
+  orc_union32 var49;
+
+  ptr0 = (orc_union16 *) d1;
+  ptr4 = (orc_union32 *) s1;
+
+  /* 1: loadpl */
+  var37.i = (int) 0x00f80000;   /* 16252928 or 8.03001e-317f */
+  /* 3: loadpl */
+  var38.i = (int) 0x0000f800;   /* 63488 or 3.13672e-319f */
+  /* 5: loadpl */
+  var39.i = (int) 0x000000f8;   /* 248 or 1.22528e-321f */
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadl */
+    var41 = ptr4[i];
+    /* 2: andl */
+    var42.i = var41.i & var37.i;
+    /* 4: andl */
+    var43.i = var41.i & var38.i;
+    /* 6: andl */
+    var44.i = var41.i & var39.i;
+    /* 7: shll */
+    var45.i = ((orc_uint32) var44.i) << 7;
+    /* 8: shrul */
+    var46.i = ((orc_uint32) var43.i) >> 6;
+    /* 9: shrul */
+    var47.i = ((orc_uint32) var42.i) >> 19;
+    /* 10: orl */
+    var48.i = var47.i | var46.i;
+    /* 11: orl */
+    var49.i = var48.i | var45.i;
+    /* 12: select1lw */
+    {
+      orc_union32 _src;
+      _src.i = var49.i;
+      var40.i = _src.x2[1];
+    }
+    /* 13: storew */
+    ptr0[i] = var40;
+  }
+
+}
+
+#else
+static void
+_backup_video_orc_pack_BGR15_be (OrcExecutor * ORC_RESTRICT ex)
+{
+  int i;
+  int n = ex->n;
+  orc_union16 *ORC_RESTRICT ptr0;
+  const orc_union32 *ORC_RESTRICT ptr4;
+#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
+  volatile orc_union32 var37;
+#else
+  orc_union32 var37;
+#endif
+#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
+  volatile orc_union32 var38;
+#else
+  orc_union32 var38;
+#endif
+#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
+  volatile orc_union32 var39;
+#else
+  orc_union32 var39;
+#endif
+  orc_union16 var40;
+  orc_union32 var41;
+  orc_union32 var42;
+  orc_union32 var43;
+  orc_union32 var44;
+  orc_union32 var45;
+  orc_union32 var46;
+  orc_union32 var47;
+  orc_union32 var48;
+  orc_union32 var49;
+
+  ptr0 = (orc_union16 *) ex->arrays[0];
+  ptr4 = (orc_union32 *) ex->arrays[4];
+
+  /* 1: loadpl */
+  var37.i = (int) 0x00f80000;   /* 16252928 or 8.03001e-317f */
+  /* 3: loadpl */
+  var38.i = (int) 0x0000f800;   /* 63488 or 3.13672e-319f */
+  /* 5: loadpl */
+  var39.i = (int) 0x000000f8;   /* 248 or 1.22528e-321f */
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadl */
+    var41 = ptr4[i];
+    /* 2: andl */
+    var42.i = var41.i & var37.i;
+    /* 4: andl */
+    var43.i = var41.i & var38.i;
+    /* 6: andl */
+    var44.i = var41.i & var39.i;
+    /* 7: shll */
+    var45.i = ((orc_uint32) var44.i) << 7;
+    /* 8: shrul */
+    var46.i = ((orc_uint32) var43.i) >> 6;
+    /* 9: shrul */
+    var47.i = ((orc_uint32) var42.i) >> 19;
+    /* 10: orl */
+    var48.i = var47.i | var46.i;
+    /* 11: orl */
+    var49.i = var48.i | var45.i;
+    /* 12: select1lw */
+    {
+      orc_union32 _src;
+      _src.i = var49.i;
+      var40.i = _src.x2[1];
+    }
+    /* 13: storew */
+    ptr0[i] = var40;
+  }
+
+}
+
+void
+video_orc_pack_BGR15_be (guint16 * ORC_RESTRICT d1,
+    const guint32 * ORC_RESTRICT s1, int n)
+{
+  OrcExecutor _ex, *ex = &_ex;
+  static volatile int p_inited = 0;
+  static OrcCode *c = 0;
+  void (*func) (OrcExecutor *);
+
+  if (!p_inited) {
+    orc_once_mutex_lock ();
+    if (!p_inited) {
+      OrcProgram *p;
+
+#if 1
+      static const orc_uint8 bc[] = {
+        1, 9, 23, 118, 105, 100, 101, 111, 95, 111, 114, 99, 95, 112, 97, 99,
+        107, 95, 66, 71, 82, 49, 53, 95, 98, 101, 11, 2, 2, 12, 4, 4,
+        14, 4, 0, 0, 248, 0, 14, 4, 0, 248, 0, 0, 14, 4, 248, 0,
+        0, 0, 14, 4, 7, 0, 0, 0, 14, 4, 6, 0, 0, 0, 14, 4,
+        19, 0, 0, 0, 20, 4, 20, 4, 20, 4, 20, 4, 20, 4, 113, 32,
+        4, 106, 33, 32, 16, 106, 34, 32, 17, 106, 35, 32, 18, 124, 35, 35,
+        19, 126, 34, 34, 20, 126, 33, 33, 21, 123, 36, 33, 34, 123, 36, 36,
+        35, 191, 0, 36, 2, 0,
+      };
+      p = orc_program_new_from_static_bytecode (bc);
+      orc_program_set_backup_function (p, _backup_video_orc_pack_BGR15_be);
+#else
+      p = orc_program_new ();
+      orc_program_set_name (p, "video_orc_pack_BGR15_be");
+      orc_program_set_backup_function (p, _backup_video_orc_pack_BGR15_be);
+      orc_program_add_destination (p, 2, "d1");
+      orc_program_add_source (p, 4, "s1");
+      orc_program_add_constant (p, 4, 0x00f80000, "c1");
+      orc_program_add_constant (p, 4, 0x0000f800, "c2");
+      orc_program_add_constant (p, 4, 0x000000f8, "c3");
+      orc_program_add_constant (p, 4, 0x00000007, "c4");
+      orc_program_add_constant (p, 4, 0x00000006, "c5");
+      orc_program_add_constant (p, 4, 0x00000013, "c6");
+      orc_program_add_temporary (p, 4, "t1");
+      orc_program_add_temporary (p, 4, "t2");
+      orc_program_add_temporary (p, 4, "t3");
+      orc_program_add_temporary (p, 4, "t4");
+      orc_program_add_temporary (p, 4, "t5");
+
+      orc_program_append_2 (p, "loadl", 0, ORC_VAR_T1, ORC_VAR_S1, ORC_VAR_D1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "andl", 0, ORC_VAR_T2, ORC_VAR_T1, ORC_VAR_C1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "andl", 0, ORC_VAR_T3, ORC_VAR_T1, ORC_VAR_C2,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "andl", 0, ORC_VAR_T4, ORC_VAR_T1, ORC_VAR_C3,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "shll", 0, ORC_VAR_T4, ORC_VAR_T4, ORC_VAR_C4,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "shrul", 0, ORC_VAR_T3, ORC_VAR_T3, ORC_VAR_C5,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "shrul", 0, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_C6,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "orl", 0, ORC_VAR_T5, ORC_VAR_T2, ORC_VAR_T3,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "orl", 0, ORC_VAR_T5, ORC_VAR_T5, ORC_VAR_T4,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "select1lw", 0, ORC_VAR_D1, ORC_VAR_T5,
+          ORC_VAR_D1, ORC_VAR_D1);
+#endif
+
+      orc_program_compile (p);
+      c = orc_program_take_code (p);
+      orc_program_free (p);
+    }
+    p_inited = TRUE;
+    orc_once_mutex_unlock ();
+  }
+  ex->arrays[ORC_VAR_A2] = c;
+  ex->program = 0;
+
+  ex->n = n;
+  ex->arrays[ORC_VAR_D1] = d1;
+  ex->arrays[ORC_VAR_S1] = (void *) s1;
+
+  func = c->exec;
+  func (ex);
+}
+#endif
+
+
+/* video_orc_unpack_RGB16 */
+#ifdef DISABLE_ORC
+void
+video_orc_unpack_RGB16 (guint32 * ORC_RESTRICT d1,
+    const guint16 * ORC_RESTRICT s1, int n)
+{
+  int i;
+  orc_union32 *ORC_RESTRICT ptr0;
+  const orc_union16 *ORC_RESTRICT ptr4;
+#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
+  volatile orc_union16 var39;
+#else
+  orc_union16 var39;
+#endif
+#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
+  volatile orc_union16 var40;
+#else
+  orc_union16 var40;
+#endif
+#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
+  volatile orc_union16 var41;
+#else
+  orc_union16 var41;
+#endif
+#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
+  volatile orc_union16 var42;
+#else
+  orc_union16 var42;
+#endif
+#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
+  volatile orc_union16 var43;
+#else
+  orc_union16 var43;
+#endif
+#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
+  volatile orc_union16 var44;
+#else
+  orc_union16 var44;
+#endif
+  orc_union32 var45;
+  orc_union16 var46;
+  orc_union16 var47;
+  orc_union16 var48;
+  orc_union16 var49;
+  orc_union16 var50;
+  orc_union16 var51;
+  orc_union16 var52;
+  orc_union16 var53;
+  orc_union16 var54;
+  orc_union32 var55;
+  orc_union32 var56;
+  orc_union64 var57;
+
+  ptr0 = (orc_union32 *) d1;
+  ptr4 = (orc_union16 *) s1;
+
+  /* 1: loadpw */
+  var39.i = (int) 0x0000f800;   /* 63488 or 3.13672e-319f */
+  /* 3: loadpw */
+  var40.i = (int) 0x000007e0;   /* 2016 or 9.96036e-321f */
+  /* 5: loadpw */
+  var41.i = (int) 0x0000001f;   /* 31 or 1.5316e-322f */
+  /* 9: loadpw */
+  var42.i = (int) 0x00004200;   /* 16896 or 8.34773e-320f */
+  /* 11: loadpw */
+  var43.i = (int) 0x00002080;   /* 8320 or 4.11063e-320f */
+  /* 14: loadpw */
+  var44.i = (int) 0x000000ff;   /* 255 or 1.25987e-321f */
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadw */
+    var46 = ptr4[i];
+    /* 2: andw */
+    var47.i = var46.i & var39.i;
+    /* 4: andw */
+    var48.i = var46.i & var40.i;
+    /* 6: andw */
+    var49.i = var46.i & var41.i;
+    /* 7: shruw */
+    var50.i = ((orc_uint16) var47.i) >> 6;
+    /* 8: shlw */
+    var51.i = ((orc_uint16) var49.i) << 5;
+    /* 10: mulhsw */
+    var52.i = (var50.i * var42.i) >> 16;
+    /* 12: mulhsw */
+    var53.i = (var48.i * var43.i) >> 16;
+    /* 13: mulhsw */
+    var54.i = (var51.i * var42.i) >> 16;
+    /* 15: mergewl */
+    {
+      orc_union32 _dest;
+      _dest.x2[0] = var44.i;
+      _dest.x2[1] = var52.i;
+      var55.i = _dest.i;
+    }
+    /* 16: mergewl */
+    {
+      orc_union32 _dest;
+      _dest.x2[0] = var53.i;
+      _dest.x2[1] = var54.i;
+      var56.i = _dest.i;
+    }
+    /* 17: mergelq */
+    {
+      orc_union64 _dest;
+      _dest.x2[0] = var55.i;
+      _dest.x2[1] = var56.i;
+      var57.i = _dest.i;
+    }
+    /* 18: convsuswb */
+    var45.x4[0] = ORC_CLAMP_UB (var57.x4[0]);
+    var45.x4[1] = ORC_CLAMP_UB (var57.x4[1]);
+    var45.x4[2] = ORC_CLAMP_UB (var57.x4[2]);
+    var45.x4[3] = ORC_CLAMP_UB (var57.x4[3]);
+    /* 19: storel */
+    ptr0[i] = var45;
+  }
+
+}
+
+#else
+static void
+_backup_video_orc_unpack_RGB16 (OrcExecutor * ORC_RESTRICT ex)
+{
+  int i;
+  int n = ex->n;
+  orc_union32 *ORC_RESTRICT ptr0;
+  const orc_union16 *ORC_RESTRICT ptr4;
+#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
+  volatile orc_union16 var39;
+#else
+  orc_union16 var39;
+#endif
+#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
+  volatile orc_union16 var40;
+#else
+  orc_union16 var40;
+#endif
+#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
+  volatile orc_union16 var41;
+#else
+  orc_union16 var41;
+#endif
+#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
+  volatile orc_union16 var42;
+#else
+  orc_union16 var42;
+#endif
+#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
+  volatile orc_union16 var43;
+#else
+  orc_union16 var43;
+#endif
+#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
+  volatile orc_union16 var44;
+#else
+  orc_union16 var44;
+#endif
+  orc_union32 var45;
+  orc_union16 var46;
+  orc_union16 var47;
+  orc_union16 var48;
+  orc_union16 var49;
+  orc_union16 var50;
+  orc_union16 var51;
+  orc_union16 var52;
+  orc_union16 var53;
+  orc_union16 var54;
+  orc_union32 var55;
+  orc_union32 var56;
+  orc_union64 var57;
+
+  ptr0 = (orc_union32 *) ex->arrays[0];
+  ptr4 = (orc_union16 *) ex->arrays[4];
+
+  /* 1: loadpw */
+  var39.i = (int) 0x0000f800;   /* 63488 or 3.13672e-319f */
+  /* 3: loadpw */
+  var40.i = (int) 0x000007e0;   /* 2016 or 9.96036e-321f */
+  /* 5: loadpw */
+  var41.i = (int) 0x0000001f;   /* 31 or 1.5316e-322f */
+  /* 9: loadpw */
+  var42.i = (int) 0x00004200;   /* 16896 or 8.34773e-320f */
+  /* 11: loadpw */
+  var43.i = (int) 0x00002080;   /* 8320 or 4.11063e-320f */
+  /* 14: loadpw */
+  var44.i = (int) 0x000000ff;   /* 255 or 1.25987e-321f */
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadw */
+    var46 = ptr4[i];
+    /* 2: andw */
+    var47.i = var46.i & var39.i;
+    /* 4: andw */
+    var48.i = var46.i & var40.i;
+    /* 6: andw */
+    var49.i = var46.i & var41.i;
+    /* 7: shruw */
+    var50.i = ((orc_uint16) var47.i) >> 6;
+    /* 8: shlw */
+    var51.i = ((orc_uint16) var49.i) << 5;
+    /* 10: mulhsw */
+    var52.i = (var50.i * var42.i) >> 16;
+    /* 12: mulhsw */
+    var53.i = (var48.i * var43.i) >> 16;
+    /* 13: mulhsw */
+    var54.i = (var51.i * var42.i) >> 16;
+    /* 15: mergewl */
+    {
+      orc_union32 _dest;
+      _dest.x2[0] = var44.i;
+      _dest.x2[1] = var52.i;
+      var55.i = _dest.i;
+    }
+    /* 16: mergewl */
+    {
+      orc_union32 _dest;
+      _dest.x2[0] = var53.i;
+      _dest.x2[1] = var54.i;
+      var56.i = _dest.i;
+    }
+    /* 17: mergelq */
+    {
+      orc_union64 _dest;
+      _dest.x2[0] = var55.i;
+      _dest.x2[1] = var56.i;
+      var57.i = _dest.i;
+    }
+    /* 18: convsuswb */
+    var45.x4[0] = ORC_CLAMP_UB (var57.x4[0]);
+    var45.x4[1] = ORC_CLAMP_UB (var57.x4[1]);
+    var45.x4[2] = ORC_CLAMP_UB (var57.x4[2]);
+    var45.x4[3] = ORC_CLAMP_UB (var57.x4[3]);
+    /* 19: storel */
+    ptr0[i] = var45;
+  }
+
+}
+
+void
+video_orc_unpack_RGB16 (guint32 * ORC_RESTRICT d1,
+    const guint16 * ORC_RESTRICT s1, int n)
+{
+  OrcExecutor _ex, *ex = &_ex;
+  static volatile int p_inited = 0;
+  static OrcCode *c = 0;
+  void (*func) (OrcExecutor *);
+
+  if (!p_inited) {
+    orc_once_mutex_lock ();
+    if (!p_inited) {
+      OrcProgram *p;
+
+#if 1
+      static const orc_uint8 bc[] = {
+        1, 9, 22, 118, 105, 100, 101, 111, 95, 111, 114, 99, 95, 117, 110, 112,
+        97, 99, 107, 95, 82, 71, 66, 49, 54, 11, 4, 4, 12, 2, 2, 14,
+        2, 0, 248, 0, 0, 14, 2, 224, 7, 0, 0, 14, 2, 31, 0, 0,
+        0, 14, 2, 6, 0, 0, 0, 14, 2, 5, 0, 0, 0, 14, 2, 0,
+        66, 0, 0, 14, 2, 128, 32, 0, 0, 14, 2, 255, 0, 0, 0, 20,
+        2, 20, 2, 20, 2, 20, 2, 20, 4, 20, 4, 20, 8, 82, 32, 4,
+        73, 33, 32, 16, 73, 34, 32, 17, 73, 35, 32, 18, 95, 33, 33, 19,
+        93, 35, 35, 20, 90, 33, 33, 21, 90, 34, 34, 22, 90, 35, 35, 21,
+        195, 36, 23, 33, 195, 37, 34, 35, 194, 38, 36, 37, 21, 2, 160, 0,
+        38, 2, 0,
+      };
+      p = orc_program_new_from_static_bytecode (bc);
+      orc_program_set_backup_function (p, _backup_video_orc_unpack_RGB16);
+#else
+      p = orc_program_new ();
+      orc_program_set_name (p, "video_orc_unpack_RGB16");
+      orc_program_set_backup_function (p, _backup_video_orc_unpack_RGB16);
+      orc_program_add_destination (p, 4, "d1");
+      orc_program_add_source (p, 2, "s1");
+      orc_program_add_constant (p, 2, 0x0000f800, "c1");
+      orc_program_add_constant (p, 2, 0x000007e0, "c2");
+      orc_program_add_constant (p, 2, 0x0000001f, "c3");
+      orc_program_add_constant (p, 2, 0x00000006, "c4");
+      orc_program_add_constant (p, 2, 0x00000005, "c5");
+      orc_program_add_constant (p, 2, 0x00004200, "c6");
+      orc_program_add_constant (p, 2, 0x00002080, "c7");
+      orc_program_add_constant (p, 2, 0x000000ff, "c8");
+      orc_program_add_temporary (p, 2, "t1");
+      orc_program_add_temporary (p, 2, "t2");
+      orc_program_add_temporary (p, 2, "t3");
+      orc_program_add_temporary (p, 2, "t4");
+      orc_program_add_temporary (p, 4, "t5");
+      orc_program_add_temporary (p, 4, "t6");
+      orc_program_add_temporary (p, 8, "t7");
+
+      orc_program_append_2 (p, "loadw", 0, ORC_VAR_T1, ORC_VAR_S1, ORC_VAR_D1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "andw", 0, ORC_VAR_T2, ORC_VAR_T1, ORC_VAR_C1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "andw", 0, ORC_VAR_T3, ORC_VAR_T1, ORC_VAR_C2,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "andw", 0, ORC_VAR_T4, ORC_VAR_T1, ORC_VAR_C3,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "shruw", 0, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_C4,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "shlw", 0, ORC_VAR_T4, ORC_VAR_T4, ORC_VAR_C5,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "mulhsw", 0, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_C6,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "mulhsw", 0, ORC_VAR_T3, ORC_VAR_T3, ORC_VAR_C7,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "mulhsw", 0, ORC_VAR_T4, ORC_VAR_T4, ORC_VAR_C6,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "mergewl", 0, ORC_VAR_T5, ORC_VAR_C8, ORC_VAR_T2,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "mergewl", 0, ORC_VAR_T6, ORC_VAR_T3, ORC_VAR_T4,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "mergelq", 0, ORC_VAR_T7, ORC_VAR_T5, ORC_VAR_T6,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "convsuswb", 2, ORC_VAR_D1, ORC_VAR_T7,
+          ORC_VAR_D1, ORC_VAR_D1);
+#endif
+
+      orc_program_compile (p);
+      c = orc_program_take_code (p);
+      orc_program_free (p);
+    }
+    p_inited = TRUE;
+    orc_once_mutex_unlock ();
+  }
+  ex->arrays[ORC_VAR_A2] = c;
+  ex->program = 0;
+
+  ex->n = n;
+  ex->arrays[ORC_VAR_D1] = d1;
+  ex->arrays[ORC_VAR_S1] = (void *) s1;
+
+  func = c->exec;
+  func (ex);
+}
+#endif
+
+
+/* video_orc_unpack_RGB16_trunc */
+#ifdef DISABLE_ORC
+void
+video_orc_unpack_RGB16_trunc (guint32 * ORC_RESTRICT d1,
+    const guint16 * ORC_RESTRICT s1, int n)
+{
+  int i;
+  orc_union32 *ORC_RESTRICT ptr0;
+  const orc_union16 *ORC_RESTRICT ptr4;
+#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
+  volatile orc_union16 var39;
+#else
+  orc_union16 var39;
+#endif
+#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
+  volatile orc_union16 var40;
+#else
+  orc_union16 var40;
+#endif
+#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
+  volatile orc_union16 var41;
+#else
+  orc_union16 var41;
+#endif
+#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
+  volatile orc_union16 var42;
+#else
+  orc_union16 var42;
+#endif
+  orc_union32 var43;
+  orc_union16 var44;
+  orc_union16 var45;
+  orc_union16 var46;
+  orc_union16 var47;
+  orc_union16 var48;
+  orc_union16 var49;
+  orc_union16 var50;
+  orc_union32 var51;
+  orc_union32 var52;
+  orc_union64 var53;
+
+  ptr0 = (orc_union32 *) d1;
+  ptr4 = (orc_union16 *) s1;
+
+  /* 1: loadpw */
+  var39.i = (int) 0x0000f800;   /* 63488 or 3.13672e-319f */
+  /* 3: loadpw */
+  var40.i = (int) 0x000007e0;   /* 2016 or 9.96036e-321f */
+  /* 5: loadpw */
+  var41.i = (int) 0x0000001f;   /* 31 or 1.5316e-322f */
+  /* 10: loadpw */
+  var42.i = (int) 0x000000ff;   /* 255 or 1.25987e-321f */
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadw */
+    var44 = ptr4[i];
+    /* 2: andw */
+    var45.i = var44.i & var39.i;
+    /* 4: andw */
+    var46.i = var44.i & var40.i;
+    /* 6: andw */
+    var47.i = var44.i & var41.i;
+    /* 7: shruw */
+    var48.i = ((orc_uint16) var45.i) >> 8;
+    /* 8: shruw */
+    var49.i = ((orc_uint16) var46.i) >> 3;
+    /* 9: shlw */
+    var50.i = ((orc_uint16) var47.i) << 3;
+    /* 11: mergewl */
+    {
+      orc_union32 _dest;
+      _dest.x2[0] = var42.i;
+      _dest.x2[1] = var48.i;
+      var51.i = _dest.i;
+    }
+    /* 12: mergewl */
+    {
+      orc_union32 _dest;
+      _dest.x2[0] = var49.i;
+      _dest.x2[1] = var50.i;
+      var52.i = _dest.i;
+    }
+    /* 13: mergelq */
+    {
+      orc_union64 _dest;
+      _dest.x2[0] = var51.i;
+      _dest.x2[1] = var52.i;
+      var53.i = _dest.i;
+    }
+    /* 14: convsuswb */
+    var43.x4[0] = ORC_CLAMP_UB (var53.x4[0]);
+    var43.x4[1] = ORC_CLAMP_UB (var53.x4[1]);
+    var43.x4[2] = ORC_CLAMP_UB (var53.x4[2]);
+    var43.x4[3] = ORC_CLAMP_UB (var53.x4[3]);
+    /* 15: storel */
+    ptr0[i] = var43;
+  }
+
+}
+
+#else
+static void
+_backup_video_orc_unpack_RGB16_trunc (OrcExecutor * ORC_RESTRICT ex)
+{
+  int i;
+  int n = ex->n;
+  orc_union32 *ORC_RESTRICT ptr0;
+  const orc_union16 *ORC_RESTRICT ptr4;
+#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
+  volatile orc_union16 var39;
+#else
+  orc_union16 var39;
+#endif
+#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
+  volatile orc_union16 var40;
+#else
+  orc_union16 var40;
+#endif
+#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
+  volatile orc_union16 var41;
+#else
+  orc_union16 var41;
+#endif
+#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
+  volatile orc_union16 var42;
+#else
+  orc_union16 var42;
+#endif
+  orc_union32 var43;
+  orc_union16 var44;
+  orc_union16 var45;
+  orc_union16 var46;
+  orc_union16 var47;
+  orc_union16 var48;
+  orc_union16 var49;
+  orc_union16 var50;
+  orc_union32 var51;
+  orc_union32 var52;
+  orc_union64 var53;
+
+  ptr0 = (orc_union32 *) ex->arrays[0];
+  ptr4 = (orc_union16 *) ex->arrays[4];
+
+  /* 1: loadpw */
+  var39.i = (int) 0x0000f800;   /* 63488 or 3.13672e-319f */
+  /* 3: loadpw */
+  var40.i = (int) 0x000007e0;   /* 2016 or 9.96036e-321f */
+  /* 5: loadpw */
+  var41.i = (int) 0x0000001f;   /* 31 or 1.5316e-322f */
+  /* 10: loadpw */
+  var42.i = (int) 0x000000ff;   /* 255 or 1.25987e-321f */
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadw */
+    var44 = ptr4[i];
+    /* 2: andw */
+    var45.i = var44.i & var39.i;
+    /* 4: andw */
+    var46.i = var44.i & var40.i;
+    /* 6: andw */
+    var47.i = var44.i & var41.i;
+    /* 7: shruw */
+    var48.i = ((orc_uint16) var45.i) >> 8;
+    /* 8: shruw */
+    var49.i = ((orc_uint16) var46.i) >> 3;
+    /* 9: shlw */
+    var50.i = ((orc_uint16) var47.i) << 3;
+    /* 11: mergewl */
+    {
+      orc_union32 _dest;
+      _dest.x2[0] = var42.i;
+      _dest.x2[1] = var48.i;
+      var51.i = _dest.i;
+    }
+    /* 12: mergewl */
+    {
+      orc_union32 _dest;
+      _dest.x2[0] = var49.i;
+      _dest.x2[1] = var50.i;
+      var52.i = _dest.i;
+    }
+    /* 13: mergelq */
+    {
+      orc_union64 _dest;
+      _dest.x2[0] = var51.i;
+      _dest.x2[1] = var52.i;
+      var53.i = _dest.i;
+    }
+    /* 14: convsuswb */
+    var43.x4[0] = ORC_CLAMP_UB (var53.x4[0]);
+    var43.x4[1] = ORC_CLAMP_UB (var53.x4[1]);
+    var43.x4[2] = ORC_CLAMP_UB (var53.x4[2]);
+    var43.x4[3] = ORC_CLAMP_UB (var53.x4[3]);
+    /* 15: storel */
+    ptr0[i] = var43;
+  }
+
+}
+
+void
+video_orc_unpack_RGB16_trunc (guint32 * ORC_RESTRICT d1,
+    const guint16 * ORC_RESTRICT s1, int n)
+{
+  OrcExecutor _ex, *ex = &_ex;
+  static volatile int p_inited = 0;
+  static OrcCode *c = 0;
+  void (*func) (OrcExecutor *);
+
+  if (!p_inited) {
+    orc_once_mutex_lock ();
+    if (!p_inited) {
+      OrcProgram *p;
+
+#if 1
+      static const orc_uint8 bc[] = {
+        1, 9, 28, 118, 105, 100, 101, 111, 95, 111, 114, 99, 95, 117, 110, 112,
+        97, 99, 107, 95, 82, 71, 66, 49, 54, 95, 116, 114, 117, 110, 99, 11,
+        4, 4, 12, 2, 2, 14, 2, 0, 248, 0, 0, 14, 2, 224, 7, 0,
+        0, 14, 2, 31, 0, 0, 0, 14, 2, 8, 0, 0, 0, 14, 2, 3,
+        0, 0, 0, 14, 2, 255, 0, 0, 0, 20, 2, 20, 2, 20, 2, 20,
+        2, 20, 4, 20, 4, 20, 8, 82, 32, 4, 73, 33, 32, 16, 73, 34,
+        32, 17, 73, 35, 32, 18, 95, 33, 33, 19, 95, 34, 34, 20, 93, 35,
+        35, 20, 195, 36, 21, 33, 195, 37, 34, 35, 194, 38, 36, 37, 21, 2,
+        160, 0, 38, 2, 0,
+      };
+      p = orc_program_new_from_static_bytecode (bc);
+      orc_program_set_backup_function (p, _backup_video_orc_unpack_RGB16_trunc);
+#else
+      p = orc_program_new ();
+      orc_program_set_name (p, "video_orc_unpack_RGB16_trunc");
+      orc_program_set_backup_function (p, _backup_video_orc_unpack_RGB16_trunc);
+      orc_program_add_destination (p, 4, "d1");
+      orc_program_add_source (p, 2, "s1");
+      orc_program_add_constant (p, 2, 0x0000f800, "c1");
+      orc_program_add_constant (p, 2, 0x000007e0, "c2");
+      orc_program_add_constant (p, 2, 0x0000001f, "c3");
+      orc_program_add_constant (p, 2, 0x00000008, "c4");
+      orc_program_add_constant (p, 2, 0x00000003, "c5");
+      orc_program_add_constant (p, 2, 0x000000ff, "c6");
+      orc_program_add_temporary (p, 2, "t1");
+      orc_program_add_temporary (p, 2, "t2");
+      orc_program_add_temporary (p, 2, "t3");
+      orc_program_add_temporary (p, 2, "t4");
+      orc_program_add_temporary (p, 4, "t5");
+      orc_program_add_temporary (p, 4, "t6");
+      orc_program_add_temporary (p, 8, "t7");
+
+      orc_program_append_2 (p, "loadw", 0, ORC_VAR_T1, ORC_VAR_S1, ORC_VAR_D1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "andw", 0, ORC_VAR_T2, ORC_VAR_T1, ORC_VAR_C1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "andw", 0, ORC_VAR_T3, ORC_VAR_T1, ORC_VAR_C2,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "andw", 0, ORC_VAR_T4, ORC_VAR_T1, ORC_VAR_C3,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "shruw", 0, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_C4,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "shruw", 0, ORC_VAR_T3, ORC_VAR_T3, ORC_VAR_C5,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "shlw", 0, ORC_VAR_T4, ORC_VAR_T4, ORC_VAR_C5,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "mergewl", 0, ORC_VAR_T5, ORC_VAR_C6, ORC_VAR_T2,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "mergewl", 0, ORC_VAR_T6, ORC_VAR_T3, ORC_VAR_T4,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "mergelq", 0, ORC_VAR_T7, ORC_VAR_T5, ORC_VAR_T6,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "convsuswb", 2, ORC_VAR_D1, ORC_VAR_T7,
+          ORC_VAR_D1, ORC_VAR_D1);
+#endif
+
+      orc_program_compile (p);
+      c = orc_program_take_code (p);
+      orc_program_free (p);
+    }
+    p_inited = TRUE;
+    orc_once_mutex_unlock ();
+  }
+  ex->arrays[ORC_VAR_A2] = c;
+  ex->program = 0;
+
+  ex->n = n;
+  ex->arrays[ORC_VAR_D1] = d1;
+  ex->arrays[ORC_VAR_S1] = (void *) s1;
+
+  func = c->exec;
+  func (ex);
+}
+#endif
+
+
+/* video_orc_pack_RGB16_le */
+#ifdef DISABLE_ORC
+void
+video_orc_pack_RGB16_le (guint16 * ORC_RESTRICT d1,
+    const guint32 * ORC_RESTRICT s1, int n)
+{
+  int i;
+  orc_union16 *ORC_RESTRICT ptr0;
+  const orc_union32 *ORC_RESTRICT ptr4;
+#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
+  volatile orc_union32 var37;
+#else
+  orc_union32 var37;
+#endif
+#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
+  volatile orc_union32 var38;
+#else
+  orc_union32 var38;
+#endif
+#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
+  volatile orc_union32 var39;
+#else
+  orc_union32 var39;
+#endif
+  orc_union16 var40;
+  orc_union32 var41;
+  orc_union32 var42;
+  orc_union32 var43;
+  orc_union32 var44;
+  orc_union32 var45;
+  orc_union32 var46;
+  orc_union32 var47;
+  orc_union32 var48;
+
+  ptr0 = (orc_union16 *) d1;
+  ptr4 = (orc_union32 *) s1;
+
+  /* 1: loadpl */
+  var37.i = (int) 0x0000f800;   /* 63488 or 3.13672e-319f */
+  /* 3: loadpl */
+  var38.i = (int) 0x00fc0000;   /* 16515072 or 8.15953e-317f */
+  /* 5: loadpl */
+  var39.i = (int) 0xf8000000;   /* -134217728 or 2.05568e-314f */
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadl */
+    var41 = ptr4[i];
+    /* 2: andl */
+    var42.i = var41.i & var37.i;
+    /* 4: andl */
+    var43.i = var41.i & var38.i;
+    /* 6: andl */
+    var44.i = var41.i & var39.i;
+    /* 7: shrul */
+    var45.i = ((orc_uint32) var43.i) >> 13;
+    /* 8: shrul */
+    var46.i = ((orc_uint32) var44.i) >> 27;
+    /* 9: orl */
+    var47.i = var42.i | var45.i;
+    /* 10: orl */
+    var48.i = var47.i | var46.i;
+    /* 11: select0lw */
+    {
+      orc_union32 _src;
+      _src.i = var48.i;
+      var40.i = _src.x2[0];
+    }
+    /* 12: storew */
+    ptr0[i] = var40;
+  }
+
+}
+
+#else
+static void
+_backup_video_orc_pack_RGB16_le (OrcExecutor * ORC_RESTRICT ex)
+{
+  int i;
+  int n = ex->n;
+  orc_union16 *ORC_RESTRICT ptr0;
+  const orc_union32 *ORC_RESTRICT ptr4;
+#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
+  volatile orc_union32 var37;
+#else
+  orc_union32 var37;
+#endif
+#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
+  volatile orc_union32 var38;
+#else
+  orc_union32 var38;
+#endif
+#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
+  volatile orc_union32 var39;
+#else
+  orc_union32 var39;
+#endif
+  orc_union16 var40;
+  orc_union32 var41;
+  orc_union32 var42;
+  orc_union32 var43;
+  orc_union32 var44;
+  orc_union32 var45;
+  orc_union32 var46;
+  orc_union32 var47;
+  orc_union32 var48;
+
+  ptr0 = (orc_union16 *) ex->arrays[0];
+  ptr4 = (orc_union32 *) ex->arrays[4];
+
+  /* 1: loadpl */
+  var37.i = (int) 0x0000f800;   /* 63488 or 3.13672e-319f */
+  /* 3: loadpl */
+  var38.i = (int) 0x00fc0000;   /* 16515072 or 8.15953e-317f */
+  /* 5: loadpl */
+  var39.i = (int) 0xf8000000;   /* -134217728 or 2.05568e-314f */
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadl */
+    var41 = ptr4[i];
+    /* 2: andl */
+    var42.i = var41.i & var37.i;
+    /* 4: andl */
+    var43.i = var41.i & var38.i;
+    /* 6: andl */
+    var44.i = var41.i & var39.i;
+    /* 7: shrul */
+    var45.i = ((orc_uint32) var43.i) >> 13;
+    /* 8: shrul */
+    var46.i = ((orc_uint32) var44.i) >> 27;
+    /* 9: orl */
+    var47.i = var42.i | var45.i;
+    /* 10: orl */
+    var48.i = var47.i | var46.i;
+    /* 11: select0lw */
+    {
+      orc_union32 _src;
+      _src.i = var48.i;
+      var40.i = _src.x2[0];
+    }
+    /* 12: storew */
+    ptr0[i] = var40;
+  }
+
+}
+
+void
+video_orc_pack_RGB16_le (guint16 * ORC_RESTRICT d1,
+    const guint32 * ORC_RESTRICT s1, int n)
+{
+  OrcExecutor _ex, *ex = &_ex;
+  static volatile int p_inited = 0;
+  static OrcCode *c = 0;
+  void (*func) (OrcExecutor *);
+
+  if (!p_inited) {
+    orc_once_mutex_lock ();
+    if (!p_inited) {
+      OrcProgram *p;
+
+#if 1
+      static const orc_uint8 bc[] = {
+        1, 9, 23, 118, 105, 100, 101, 111, 95, 111, 114, 99, 95, 112, 97, 99,
+        107, 95, 82, 71, 66, 49, 54, 95, 108, 101, 11, 2, 2, 12, 4, 4,
+        14, 4, 0, 248, 0, 0, 14, 4, 0, 0, 252, 0, 14, 4, 0, 0,
+        0, 248, 14, 4, 13, 0, 0, 0, 14, 4, 27, 0, 0, 0, 20, 4,
+        20, 4, 20, 4, 20, 4, 20, 4, 113, 32, 4, 106, 33, 32, 16, 106,
+        34, 32, 17, 106, 35, 32, 18, 126, 34, 34, 19, 126, 35, 35, 20, 123,
+        36, 33, 34, 123, 36, 36, 35, 190, 0, 36, 2, 0,
+      };
+      p = orc_program_new_from_static_bytecode (bc);
+      orc_program_set_backup_function (p, _backup_video_orc_pack_RGB16_le);
+#else
+      p = orc_program_new ();
+      orc_program_set_name (p, "video_orc_pack_RGB16_le");
+      orc_program_set_backup_function (p, _backup_video_orc_pack_RGB16_le);
+      orc_program_add_destination (p, 2, "d1");
+      orc_program_add_source (p, 4, "s1");
+      orc_program_add_constant (p, 4, 0x0000f800, "c1");
+      orc_program_add_constant (p, 4, 0x00fc0000, "c2");
+      orc_program_add_constant (p, 4, 0xf8000000, "c3");
+      orc_program_add_constant (p, 4, 0x0000000d, "c4");
+      orc_program_add_constant (p, 4, 0x0000001b, "c5");
+      orc_program_add_temporary (p, 4, "t1");
+      orc_program_add_temporary (p, 4, "t2");
+      orc_program_add_temporary (p, 4, "t3");
+      orc_program_add_temporary (p, 4, "t4");
+      orc_program_add_temporary (p, 4, "t5");
+
+      orc_program_append_2 (p, "loadl", 0, ORC_VAR_T1, ORC_VAR_S1, ORC_VAR_D1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "andl", 0, ORC_VAR_T2, ORC_VAR_T1, ORC_VAR_C1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "andl", 0, ORC_VAR_T3, ORC_VAR_T1, ORC_VAR_C2,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "andl", 0, ORC_VAR_T4, ORC_VAR_T1, ORC_VAR_C3,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "shrul", 0, ORC_VAR_T3, ORC_VAR_T3, ORC_VAR_C4,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "shrul", 0, ORC_VAR_T4, ORC_VAR_T4, ORC_VAR_C5,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "orl", 0, ORC_VAR_T5, ORC_VAR_T2, ORC_VAR_T3,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "orl", 0, ORC_VAR_T5, ORC_VAR_T5, ORC_VAR_T4,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "select0lw", 0, ORC_VAR_D1, ORC_VAR_T5,
+          ORC_VAR_D1, ORC_VAR_D1);
+#endif
+
+      orc_program_compile (p);
+      c = orc_program_take_code (p);
+      orc_program_free (p);
+    }
+    p_inited = TRUE;
+    orc_once_mutex_unlock ();
+  }
+  ex->arrays[ORC_VAR_A2] = c;
+  ex->program = 0;
+
+  ex->n = n;
+  ex->arrays[ORC_VAR_D1] = d1;
+  ex->arrays[ORC_VAR_S1] = (void *) s1;
+
+  func = c->exec;
+  func (ex);
+}
+#endif
+
+
+/* video_orc_pack_RGB16_be */
+#ifdef DISABLE_ORC
+void
+video_orc_pack_RGB16_be (guint16 * ORC_RESTRICT d1,
+    const guint32 * ORC_RESTRICT s1, int n)
+{
+  int i;
+  orc_union16 *ORC_RESTRICT ptr0;
+  const orc_union32 *ORC_RESTRICT ptr4;
+#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
+  volatile orc_union32 var37;
+#else
+  orc_union32 var37;
+#endif
+#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
+  volatile orc_union32 var38;
+#else
+  orc_union32 var38;
+#endif
+#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
+  volatile orc_union32 var39;
+#else
+  orc_union32 var39;
+#endif
+  orc_union16 var40;
+  orc_union32 var41;
+  orc_union32 var42;
+  orc_union32 var43;
+  orc_union32 var44;
+  orc_union32 var45;
+  orc_union32 var46;
+  orc_union32 var47;
+  orc_union32 var48;
+  orc_union32 var49;
+
+  ptr0 = (orc_union16 *) d1;
+  ptr4 = (orc_union32 *) s1;
+
+  /* 1: loadpl */
+  var37.i = (int) 0x00f80000;   /* 16252928 or 8.03001e-317f */
+  /* 3: loadpl */
+  var38.i = (int) 0x0000fc00;   /* 64512 or 3.18732e-319f */
+  /* 5: loadpl */
+  var39.i = (int) 0x000000f8;   /* 248 or 1.22528e-321f */
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadl */
+    var41 = ptr4[i];
+    /* 2: andl */
+    var42.i = var41.i & var37.i;
+    /* 4: andl */
+    var43.i = var41.i & var38.i;
+    /* 6: andl */
+    var44.i = var41.i & var39.i;
+    /* 7: shrul */
+    var45.i = ((orc_uint32) var42.i) >> 8;
+    /* 8: shrul */
+    var46.i = ((orc_uint32) var43.i) >> 5;
+    /* 9: shrul */
+    var47.i = ((orc_uint32) var44.i) >> 3;
+    /* 10: orl */
+    var48.i = var45.i | var46.i;
+    /* 11: orl */
+    var49.i = var48.i | var47.i;
+    /* 12: select1lw */
+    {
+      orc_union32 _src;
+      _src.i = var49.i;
+      var40.i = _src.x2[1];
+    }
+    /* 13: storew */
+    ptr0[i] = var40;
+  }
+
+}
+
+#else
+static void
+_backup_video_orc_pack_RGB16_be (OrcExecutor * ORC_RESTRICT ex)
+{
+  int i;
+  int n = ex->n;
+  orc_union16 *ORC_RESTRICT ptr0;
+  const orc_union32 *ORC_RESTRICT ptr4;
+#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
+  volatile orc_union32 var37;
+#else
+  orc_union32 var37;
+#endif
+#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
+  volatile orc_union32 var38;
+#else
+  orc_union32 var38;
+#endif
+#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
+  volatile orc_union32 var39;
+#else
+  orc_union32 var39;
+#endif
+  orc_union16 var40;
+  orc_union32 var41;
+  orc_union32 var42;
+  orc_union32 var43;
+  orc_union32 var44;
+  orc_union32 var45;
+  orc_union32 var46;
+  orc_union32 var47;
+  orc_union32 var48;
+  orc_union32 var49;
+
+  ptr0 = (orc_union16 *) ex->arrays[0];
+  ptr4 = (orc_union32 *) ex->arrays[4];
+
+  /* 1: loadpl */
+  var37.i = (int) 0x00f80000;   /* 16252928 or 8.03001e-317f */
+  /* 3: loadpl */
+  var38.i = (int) 0x0000fc00;   /* 64512 or 3.18732e-319f */
+  /* 5: loadpl */
+  var39.i = (int) 0x000000f8;   /* 248 or 1.22528e-321f */
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadl */
+    var41 = ptr4[i];
+    /* 2: andl */
+    var42.i = var41.i & var37.i;
+    /* 4: andl */
+    var43.i = var41.i & var38.i;
+    /* 6: andl */
+    var44.i = var41.i & var39.i;
+    /* 7: shrul */
+    var45.i = ((orc_uint32) var42.i) >> 8;
+    /* 8: shrul */
+    var46.i = ((orc_uint32) var43.i) >> 5;
+    /* 9: shrul */
+    var47.i = ((orc_uint32) var44.i) >> 3;
+    /* 10: orl */
+    var48.i = var45.i | var46.i;
+    /* 11: orl */
+    var49.i = var48.i | var47.i;
+    /* 12: select1lw */
+    {
+      orc_union32 _src;
+      _src.i = var49.i;
+      var40.i = _src.x2[1];
+    }
+    /* 13: storew */
+    ptr0[i] = var40;
+  }
+
+}
+
+void
+video_orc_pack_RGB16_be (guint16 * ORC_RESTRICT d1,
+    const guint32 * ORC_RESTRICT s1, int n)
+{
+  OrcExecutor _ex, *ex = &_ex;
+  static volatile int p_inited = 0;
+  static OrcCode *c = 0;
+  void (*func) (OrcExecutor *);
+
+  if (!p_inited) {
+    orc_once_mutex_lock ();
+    if (!p_inited) {
+      OrcProgram *p;
+
+#if 1
+      static const orc_uint8 bc[] = {
+        1, 9, 23, 118, 105, 100, 101, 111, 95, 111, 114, 99, 95, 112, 97, 99,
+        107, 95, 82, 71, 66, 49, 54, 95, 98, 101, 11, 2, 2, 12, 4, 4,
+        14, 4, 0, 0, 248, 0, 14, 4, 0, 252, 0, 0, 14, 4, 248, 0,
+        0, 0, 14, 4, 8, 0, 0, 0, 14, 4, 5, 0, 0, 0, 14, 4,
+        3, 0, 0, 0, 20, 4, 20, 4, 20, 4, 20, 4, 20, 4, 113, 32,
+        4, 106, 33, 32, 16, 106, 34, 32, 17, 106, 35, 32, 18, 126, 33, 33,
+        19, 126, 34, 34, 20, 126, 35, 35, 21, 123, 36, 33, 34, 123, 36, 36,
+        35, 191, 0, 36, 2, 0,
+      };
+      p = orc_program_new_from_static_bytecode (bc);
+      orc_program_set_backup_function (p, _backup_video_orc_pack_RGB16_be);
+#else
+      p = orc_program_new ();
+      orc_program_set_name (p, "video_orc_pack_RGB16_be");
+      orc_program_set_backup_function (p, _backup_video_orc_pack_RGB16_be);
+      orc_program_add_destination (p, 2, "d1");
+      orc_program_add_source (p, 4, "s1");
+      orc_program_add_constant (p, 4, 0x00f80000, "c1");
+      orc_program_add_constant (p, 4, 0x0000fc00, "c2");
+      orc_program_add_constant (p, 4, 0x000000f8, "c3");
+      orc_program_add_constant (p, 4, 0x00000008, "c4");
+      orc_program_add_constant (p, 4, 0x00000005, "c5");
+      orc_program_add_constant (p, 4, 0x00000003, "c6");
+      orc_program_add_temporary (p, 4, "t1");
+      orc_program_add_temporary (p, 4, "t2");
+      orc_program_add_temporary (p, 4, "t3");
+      orc_program_add_temporary (p, 4, "t4");
+      orc_program_add_temporary (p, 4, "t5");
+
+      orc_program_append_2 (p, "loadl", 0, ORC_VAR_T1, ORC_VAR_S1, ORC_VAR_D1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "andl", 0, ORC_VAR_T2, ORC_VAR_T1, ORC_VAR_C1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "andl", 0, ORC_VAR_T3, ORC_VAR_T1, ORC_VAR_C2,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "andl", 0, ORC_VAR_T4, ORC_VAR_T1, ORC_VAR_C3,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "shrul", 0, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_C4,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "shrul", 0, ORC_VAR_T3, ORC_VAR_T3, ORC_VAR_C5,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "shrul", 0, ORC_VAR_T4, ORC_VAR_T4, ORC_VAR_C6,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "orl", 0, ORC_VAR_T5, ORC_VAR_T2, ORC_VAR_T3,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "orl", 0, ORC_VAR_T5, ORC_VAR_T5, ORC_VAR_T4,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "select1lw", 0, ORC_VAR_D1, ORC_VAR_T5,
+          ORC_VAR_D1, ORC_VAR_D1);
+#endif
+
+      orc_program_compile (p);
+      c = orc_program_take_code (p);
+      orc_program_free (p);
+    }
+    p_inited = TRUE;
+    orc_once_mutex_unlock ();
+  }
+  ex->arrays[ORC_VAR_A2] = c;
+  ex->program = 0;
+
+  ex->n = n;
+  ex->arrays[ORC_VAR_D1] = d1;
+  ex->arrays[ORC_VAR_S1] = (void *) s1;
+
+  func = c->exec;
+  func (ex);
+}
+#endif
+
+
+/* video_orc_unpack_BGR16 */
+#ifdef DISABLE_ORC
+void
+video_orc_unpack_BGR16 (guint32 * ORC_RESTRICT d1,
+    const guint16 * ORC_RESTRICT s1, int n)
+{
+  int i;
+  orc_union32 *ORC_RESTRICT ptr0;
+  const orc_union16 *ORC_RESTRICT ptr4;
+#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
+  volatile orc_union16 var39;
+#else
+  orc_union16 var39;
+#endif
+#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
+  volatile orc_union16 var40;
+#else
+  orc_union16 var40;
+#endif
+#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
+  volatile orc_union16 var41;
+#else
+  orc_union16 var41;
+#endif
+#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
+  volatile orc_union16 var42;
+#else
+  orc_union16 var42;
+#endif
+#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
+  volatile orc_union16 var43;
+#else
+  orc_union16 var43;
+#endif
+#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
+  volatile orc_union16 var44;
+#else
+  orc_union16 var44;
+#endif
+  orc_union32 var45;
+  orc_union16 var46;
+  orc_union16 var47;
+  orc_union16 var48;
+  orc_union16 var49;
+  orc_union16 var50;
+  orc_union16 var51;
+  orc_union16 var52;
+  orc_union16 var53;
+  orc_union16 var54;
+  orc_union32 var55;
+  orc_union32 var56;
+  orc_union64 var57;
+
+  ptr0 = (orc_union32 *) d1;
+  ptr4 = (orc_union16 *) s1;
+
+  /* 1: loadpw */
+  var39.i = (int) 0x0000f800;   /* 63488 or 3.13672e-319f */
+  /* 3: loadpw */
+  var40.i = (int) 0x000007e0;   /* 2016 or 9.96036e-321f */
+  /* 5: loadpw */
+  var41.i = (int) 0x0000001f;   /* 31 or 1.5316e-322f */
+  /* 9: loadpw */
+  var42.i = (int) 0x00004200;   /* 16896 or 8.34773e-320f */
+  /* 11: loadpw */
+  var43.i = (int) 0x00002080;   /* 8320 or 4.11063e-320f */
+  /* 14: loadpw */
+  var44.i = (int) 0x000000ff;   /* 255 or 1.25987e-321f */
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadw */
+    var46 = ptr4[i];
+    /* 2: andw */
+    var47.i = var46.i & var39.i;
+    /* 4: andw */
+    var48.i = var46.i & var40.i;
+    /* 6: andw */
+    var49.i = var46.i & var41.i;
+    /* 7: shruw */
+    var50.i = ((orc_uint16) var47.i) >> 6;
+    /* 8: shlw */
+    var51.i = ((orc_uint16) var49.i) << 5;
+    /* 10: mulhsw */
+    var52.i = (var50.i * var42.i) >> 16;
+    /* 12: mulhsw */
+    var53.i = (var48.i * var43.i) >> 16;
+    /* 13: mulhsw */
+    var54.i = (var51.i * var42.i) >> 16;
+    /* 15: mergewl */
+    {
+      orc_union32 _dest;
+      _dest.x2[0] = var44.i;
+      _dest.x2[1] = var54.i;
+      var55.i = _dest.i;
+    }
+    /* 16: mergewl */
+    {
+      orc_union32 _dest;
+      _dest.x2[0] = var53.i;
+      _dest.x2[1] = var52.i;
+      var56.i = _dest.i;
+    }
+    /* 17: mergelq */
+    {
+      orc_union64 _dest;
+      _dest.x2[0] = var55.i;
+      _dest.x2[1] = var56.i;
+      var57.i = _dest.i;
+    }
+    /* 18: convsuswb */
+    var45.x4[0] = ORC_CLAMP_UB (var57.x4[0]);
+    var45.x4[1] = ORC_CLAMP_UB (var57.x4[1]);
+    var45.x4[2] = ORC_CLAMP_UB (var57.x4[2]);
+    var45.x4[3] = ORC_CLAMP_UB (var57.x4[3]);
+    /* 19: storel */
+    ptr0[i] = var45;
+  }
+
+}
+
+#else
+static void
+_backup_video_orc_unpack_BGR16 (OrcExecutor * ORC_RESTRICT ex)
+{
+  int i;
+  int n = ex->n;
+  orc_union32 *ORC_RESTRICT ptr0;
+  const orc_union16 *ORC_RESTRICT ptr4;
+#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
+  volatile orc_union16 var39;
+#else
+  orc_union16 var39;
+#endif
+#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
+  volatile orc_union16 var40;
+#else
+  orc_union16 var40;
+#endif
+#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
+  volatile orc_union16 var41;
+#else
+  orc_union16 var41;
+#endif
+#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
+  volatile orc_union16 var42;
+#else
+  orc_union16 var42;
+#endif
+#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
+  volatile orc_union16 var43;
+#else
+  orc_union16 var43;
+#endif
+#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
+  volatile orc_union16 var44;
+#else
+  orc_union16 var44;
+#endif
+  orc_union32 var45;
+  orc_union16 var46;
+  orc_union16 var47;
+  orc_union16 var48;
+  orc_union16 var49;
+  orc_union16 var50;
+  orc_union16 var51;
+  orc_union16 var52;
+  orc_union16 var53;
+  orc_union16 var54;
+  orc_union32 var55;
+  orc_union32 var56;
+  orc_union64 var57;
+
+  ptr0 = (orc_union32 *) ex->arrays[0];
+  ptr4 = (orc_union16 *) ex->arrays[4];
+
+  /* 1: loadpw */
+  var39.i = (int) 0x0000f800;   /* 63488 or 3.13672e-319f */
+  /* 3: loadpw */
+  var40.i = (int) 0x000007e0;   /* 2016 or 9.96036e-321f */
+  /* 5: loadpw */
+  var41.i = (int) 0x0000001f;   /* 31 or 1.5316e-322f */
+  /* 9: loadpw */
+  var42.i = (int) 0x00004200;   /* 16896 or 8.34773e-320f */
+  /* 11: loadpw */
+  var43.i = (int) 0x00002080;   /* 8320 or 4.11063e-320f */
+  /* 14: loadpw */
+  var44.i = (int) 0x000000ff;   /* 255 or 1.25987e-321f */
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadw */
+    var46 = ptr4[i];
+    /* 2: andw */
+    var47.i = var46.i & var39.i;
+    /* 4: andw */
+    var48.i = var46.i & var40.i;
+    /* 6: andw */
+    var49.i = var46.i & var41.i;
+    /* 7: shruw */
+    var50.i = ((orc_uint16) var47.i) >> 6;
+    /* 8: shlw */
+    var51.i = ((orc_uint16) var49.i) << 5;
+    /* 10: mulhsw */
+    var52.i = (var50.i * var42.i) >> 16;
+    /* 12: mulhsw */
+    var53.i = (var48.i * var43.i) >> 16;
+    /* 13: mulhsw */
+    var54.i = (var51.i * var42.i) >> 16;
+    /* 15: mergewl */
+    {
+      orc_union32 _dest;
+      _dest.x2[0] = var44.i;
+      _dest.x2[1] = var54.i;
+      var55.i = _dest.i;
+    }
+    /* 16: mergewl */
+    {
+      orc_union32 _dest;
+      _dest.x2[0] = var53.i;
+      _dest.x2[1] = var52.i;
+      var56.i = _dest.i;
+    }
+    /* 17: mergelq */
+    {
+      orc_union64 _dest;
+      _dest.x2[0] = var55.i;
+      _dest.x2[1] = var56.i;
+      var57.i = _dest.i;
+    }
+    /* 18: convsuswb */
+    var45.x4[0] = ORC_CLAMP_UB (var57.x4[0]);
+    var45.x4[1] = ORC_CLAMP_UB (var57.x4[1]);
+    var45.x4[2] = ORC_CLAMP_UB (var57.x4[2]);
+    var45.x4[3] = ORC_CLAMP_UB (var57.x4[3]);
+    /* 19: storel */
+    ptr0[i] = var45;
+  }
+
+}
+
+void
+video_orc_unpack_BGR16 (guint32 * ORC_RESTRICT d1,
+    const guint16 * ORC_RESTRICT s1, int n)
+{
+  OrcExecutor _ex, *ex = &_ex;
+  static volatile int p_inited = 0;
+  static OrcCode *c = 0;
+  void (*func) (OrcExecutor *);
+
+  if (!p_inited) {
+    orc_once_mutex_lock ();
+    if (!p_inited) {
+      OrcProgram *p;
+
+#if 1
+      static const orc_uint8 bc[] = {
+        1, 9, 22, 118, 105, 100, 101, 111, 95, 111, 114, 99, 95, 117, 110, 112,
+        97, 99, 107, 95, 66, 71, 82, 49, 54, 11, 4, 4, 12, 2, 2, 14,
+        2, 0, 248, 0, 0, 14, 2, 224, 7, 0, 0, 14, 2, 31, 0, 0,
+        0, 14, 2, 6, 0, 0, 0, 14, 2, 5, 0, 0, 0, 14, 2, 0,
+        66, 0, 0, 14, 2, 128, 32, 0, 0, 14, 2, 255, 0, 0, 0, 20,
+        2, 20, 2, 20, 2, 20, 2, 20, 4, 20, 4, 20, 8, 82, 32, 4,
+        73, 35, 32, 16, 73, 34, 32, 17, 73, 33, 32, 18, 95, 35, 35, 19,
+        93, 33, 33, 20, 90, 35, 35, 21, 90, 34, 34, 22, 90, 33, 33, 21,
+        195, 36, 23, 33, 195, 37, 34, 35, 194, 38, 36, 37, 21, 2, 160, 0,
+        38, 2, 0,
+      };
+      p = orc_program_new_from_static_bytecode (bc);
+      orc_program_set_backup_function (p, _backup_video_orc_unpack_BGR16);
+#else
+      p = orc_program_new ();
+      orc_program_set_name (p, "video_orc_unpack_BGR16");
+      orc_program_set_backup_function (p, _backup_video_orc_unpack_BGR16);
+      orc_program_add_destination (p, 4, "d1");
+      orc_program_add_source (p, 2, "s1");
+      orc_program_add_constant (p, 2, 0x0000f800, "c1");
+      orc_program_add_constant (p, 2, 0x000007e0, "c2");
+      orc_program_add_constant (p, 2, 0x0000001f, "c3");
+      orc_program_add_constant (p, 2, 0x00000006, "c4");
+      orc_program_add_constant (p, 2, 0x00000005, "c5");
+      orc_program_add_constant (p, 2, 0x00004200, "c6");
+      orc_program_add_constant (p, 2, 0x00002080, "c7");
+      orc_program_add_constant (p, 2, 0x000000ff, "c8");
+      orc_program_add_temporary (p, 2, "t1");
+      orc_program_add_temporary (p, 2, "t2");
+      orc_program_add_temporary (p, 2, "t3");
+      orc_program_add_temporary (p, 2, "t4");
+      orc_program_add_temporary (p, 4, "t5");
+      orc_program_add_temporary (p, 4, "t6");
+      orc_program_add_temporary (p, 8, "t7");
+
+      orc_program_append_2 (p, "loadw", 0, ORC_VAR_T1, ORC_VAR_S1, ORC_VAR_D1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "andw", 0, ORC_VAR_T4, ORC_VAR_T1, ORC_VAR_C1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "andw", 0, ORC_VAR_T3, ORC_VAR_T1, ORC_VAR_C2,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "andw", 0, ORC_VAR_T2, ORC_VAR_T1, ORC_VAR_C3,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "shruw", 0, ORC_VAR_T4, ORC_VAR_T4, ORC_VAR_C4,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "shlw", 0, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_C5,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "mulhsw", 0, ORC_VAR_T4, ORC_VAR_T4, ORC_VAR_C6,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "mulhsw", 0, ORC_VAR_T3, ORC_VAR_T3, ORC_VAR_C7,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "mulhsw", 0, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_C6,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "mergewl", 0, ORC_VAR_T5, ORC_VAR_C8, ORC_VAR_T2,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "mergewl", 0, ORC_VAR_T6, ORC_VAR_T3, ORC_VAR_T4,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "mergelq", 0, ORC_VAR_T7, ORC_VAR_T5, ORC_VAR_T6,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "convsuswb", 2, ORC_VAR_D1, ORC_VAR_T7,
+          ORC_VAR_D1, ORC_VAR_D1);
+#endif
+
+      orc_program_compile (p);
+      c = orc_program_take_code (p);
+      orc_program_free (p);
+    }
+    p_inited = TRUE;
+    orc_once_mutex_unlock ();
+  }
+  ex->arrays[ORC_VAR_A2] = c;
+  ex->program = 0;
+
+  ex->n = n;
+  ex->arrays[ORC_VAR_D1] = d1;
+  ex->arrays[ORC_VAR_S1] = (void *) s1;
+
+  func = c->exec;
+  func (ex);
+}
+#endif
+
+
+/* video_orc_unpack_BGR16_trunc */
+#ifdef DISABLE_ORC
+void
+video_orc_unpack_BGR16_trunc (guint32 * ORC_RESTRICT d1,
+    const guint16 * ORC_RESTRICT s1, int n)
+{
+  int i;
+  orc_union32 *ORC_RESTRICT ptr0;
+  const orc_union16 *ORC_RESTRICT ptr4;
+#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
+  volatile orc_union16 var39;
+#else
+  orc_union16 var39;
+#endif
+#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
+  volatile orc_union16 var40;
+#else
+  orc_union16 var40;
+#endif
+#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
+  volatile orc_union16 var41;
+#else
+  orc_union16 var41;
+#endif
+#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
+  volatile orc_union16 var42;
+#else
+  orc_union16 var42;
+#endif
+  orc_union32 var43;
+  orc_union16 var44;
+  orc_union16 var45;
+  orc_union16 var46;
+  orc_union16 var47;
+  orc_union16 var48;
+  orc_union16 var49;
+  orc_union16 var50;
+  orc_union32 var51;
+  orc_union32 var52;
+  orc_union64 var53;
+
+  ptr0 = (orc_union32 *) d1;
+  ptr4 = (orc_union16 *) s1;
+
+  /* 1: loadpw */
+  var39.i = (int) 0x0000f800;   /* 63488 or 3.13672e-319f */
+  /* 3: loadpw */
+  var40.i = (int) 0x000007e0;   /* 2016 or 9.96036e-321f */
+  /* 5: loadpw */
+  var41.i = (int) 0x0000001f;   /* 31 or 1.5316e-322f */
+  /* 10: loadpw */
+  var42.i = (int) 0x000000ff;   /* 255 or 1.25987e-321f */
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadw */
+    var44 = ptr4[i];
+    /* 2: andw */
+    var45.i = var44.i & var39.i;
+    /* 4: andw */
+    var46.i = var44.i & var40.i;
+    /* 6: andw */
+    var47.i = var44.i & var41.i;
+    /* 7: shruw */
+    var48.i = ((orc_uint16) var45.i) >> 8;
+    /* 8: shruw */
+    var49.i = ((orc_uint16) var46.i) >> 3;
+    /* 9: shlw */
+    var50.i = ((orc_uint16) var47.i) << 3;
+    /* 11: mergewl */
+    {
+      orc_union32 _dest;
+      _dest.x2[0] = var42.i;
+      _dest.x2[1] = var50.i;
+      var51.i = _dest.i;
+    }
+    /* 12: mergewl */
+    {
+      orc_union32 _dest;
+      _dest.x2[0] = var49.i;
+      _dest.x2[1] = var48.i;
+      var52.i = _dest.i;
+    }
+    /* 13: mergelq */
+    {
+      orc_union64 _dest;
+      _dest.x2[0] = var51.i;
+      _dest.x2[1] = var52.i;
+      var53.i = _dest.i;
+    }
+    /* 14: convsuswb */
+    var43.x4[0] = ORC_CLAMP_UB (var53.x4[0]);
+    var43.x4[1] = ORC_CLAMP_UB (var53.x4[1]);
+    var43.x4[2] = ORC_CLAMP_UB (var53.x4[2]);
+    var43.x4[3] = ORC_CLAMP_UB (var53.x4[3]);
+    /* 15: storel */
+    ptr0[i] = var43;
+  }
+
+}
+
+#else
+static void
+_backup_video_orc_unpack_BGR16_trunc (OrcExecutor * ORC_RESTRICT ex)
+{
+  int i;
+  int n = ex->n;
+  orc_union32 *ORC_RESTRICT ptr0;
+  const orc_union16 *ORC_RESTRICT ptr4;
+#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
+  volatile orc_union16 var39;
+#else
+  orc_union16 var39;
+#endif
+#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
+  volatile orc_union16 var40;
+#else
+  orc_union16 var40;
+#endif
+#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
+  volatile orc_union16 var41;
+#else
+  orc_union16 var41;
+#endif
+#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
+  volatile orc_union16 var42;
+#else
+  orc_union16 var42;
+#endif
+  orc_union32 var43;
+  orc_union16 var44;
+  orc_union16 var45;
+  orc_union16 var46;
+  orc_union16 var47;
+  orc_union16 var48;
+  orc_union16 var49;
+  orc_union16 var50;
+  orc_union32 var51;
+  orc_union32 var52;
+  orc_union64 var53;
+
+  ptr0 = (orc_union32 *) ex->arrays[0];
+  ptr4 = (orc_union16 *) ex->arrays[4];
+
+  /* 1: loadpw */
+  var39.i = (int) 0x0000f800;   /* 63488 or 3.13672e-319f */
+  /* 3: loadpw */
+  var40.i = (int) 0x000007e0;   /* 2016 or 9.96036e-321f */
+  /* 5: loadpw */
+  var41.i = (int) 0x0000001f;   /* 31 or 1.5316e-322f */
+  /* 10: loadpw */
+  var42.i = (int) 0x000000ff;   /* 255 or 1.25987e-321f */
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadw */
+    var44 = ptr4[i];
+    /* 2: andw */
+    var45.i = var44.i & var39.i;
+    /* 4: andw */
+    var46.i = var44.i & var40.i;
+    /* 6: andw */
+    var47.i = var44.i & var41.i;
+    /* 7: shruw */
+    var48.i = ((orc_uint16) var45.i) >> 8;
+    /* 8: shruw */
+    var49.i = ((orc_uint16) var46.i) >> 3;
+    /* 9: shlw */
+    var50.i = ((orc_uint16) var47.i) << 3;
+    /* 11: mergewl */
+    {
+      orc_union32 _dest;
+      _dest.x2[0] = var42.i;
+      _dest.x2[1] = var50.i;
+      var51.i = _dest.i;
+    }
+    /* 12: mergewl */
+    {
+      orc_union32 _dest;
+      _dest.x2[0] = var49.i;
+      _dest.x2[1] = var48.i;
+      var52.i = _dest.i;
+    }
+    /* 13: mergelq */
+    {
+      orc_union64 _dest;
+      _dest.x2[0] = var51.i;
+      _dest.x2[1] = var52.i;
+      var53.i = _dest.i;
+    }
+    /* 14: convsuswb */
+    var43.x4[0] = ORC_CLAMP_UB (var53.x4[0]);
+    var43.x4[1] = ORC_CLAMP_UB (var53.x4[1]);
+    var43.x4[2] = ORC_CLAMP_UB (var53.x4[2]);
+    var43.x4[3] = ORC_CLAMP_UB (var53.x4[3]);
+    /* 15: storel */
+    ptr0[i] = var43;
+  }
+
+}
+
+void
+video_orc_unpack_BGR16_trunc (guint32 * ORC_RESTRICT d1,
+    const guint16 * ORC_RESTRICT s1, int n)
+{
+  OrcExecutor _ex, *ex = &_ex;
+  static volatile int p_inited = 0;
+  static OrcCode *c = 0;
+  void (*func) (OrcExecutor *);
+
+  if (!p_inited) {
+    orc_once_mutex_lock ();
+    if (!p_inited) {
+      OrcProgram *p;
+
+#if 1
+      static const orc_uint8 bc[] = {
+        1, 9, 28, 118, 105, 100, 101, 111, 95, 111, 114, 99, 95, 117, 110, 112,
+        97, 99, 107, 95, 66, 71, 82, 49, 54, 95, 116, 114, 117, 110, 99, 11,
+        4, 4, 12, 2, 2, 14, 2, 0, 248, 0, 0, 14, 2, 224, 7, 0,
+        0, 14, 2, 31, 0, 0, 0, 14, 2, 8, 0, 0, 0, 14, 2, 3,
+        0, 0, 0, 14, 2, 255, 0, 0, 0, 20, 2, 20, 2, 20, 2, 20,
+        2, 20, 4, 20, 4, 20, 8, 82, 32, 4, 73, 35, 32, 16, 73, 34,
+        32, 17, 73, 33, 32, 18, 95, 35, 35, 19, 95, 34, 34, 20, 93, 33,
+        33, 20, 195, 36, 21, 33, 195, 37, 34, 35, 194, 38, 36, 37, 21, 2,
+        160, 0, 38, 2, 0,
+      };
+      p = orc_program_new_from_static_bytecode (bc);
+      orc_program_set_backup_function (p, _backup_video_orc_unpack_BGR16_trunc);
+#else
+      p = orc_program_new ();
+      orc_program_set_name (p, "video_orc_unpack_BGR16_trunc");
+      orc_program_set_backup_function (p, _backup_video_orc_unpack_BGR16_trunc);
+      orc_program_add_destination (p, 4, "d1");
+      orc_program_add_source (p, 2, "s1");
+      orc_program_add_constant (p, 2, 0x0000f800, "c1");
+      orc_program_add_constant (p, 2, 0x000007e0, "c2");
+      orc_program_add_constant (p, 2, 0x0000001f, "c3");
+      orc_program_add_constant (p, 2, 0x00000008, "c4");
+      orc_program_add_constant (p, 2, 0x00000003, "c5");
+      orc_program_add_constant (p, 2, 0x000000ff, "c6");
+      orc_program_add_temporary (p, 2, "t1");
+      orc_program_add_temporary (p, 2, "t2");
+      orc_program_add_temporary (p, 2, "t3");
+      orc_program_add_temporary (p, 2, "t4");
+      orc_program_add_temporary (p, 4, "t5");
+      orc_program_add_temporary (p, 4, "t6");
+      orc_program_add_temporary (p, 8, "t7");
+
+      orc_program_append_2 (p, "loadw", 0, ORC_VAR_T1, ORC_VAR_S1, ORC_VAR_D1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "andw", 0, ORC_VAR_T4, ORC_VAR_T1, ORC_VAR_C1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "andw", 0, ORC_VAR_T3, ORC_VAR_T1, ORC_VAR_C2,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "andw", 0, ORC_VAR_T2, ORC_VAR_T1, ORC_VAR_C3,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "shruw", 0, ORC_VAR_T4, ORC_VAR_T4, ORC_VAR_C4,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "shruw", 0, ORC_VAR_T3, ORC_VAR_T3, ORC_VAR_C5,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "shlw", 0, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_C5,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "mergewl", 0, ORC_VAR_T5, ORC_VAR_C6, ORC_VAR_T2,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "mergewl", 0, ORC_VAR_T6, ORC_VAR_T3, ORC_VAR_T4,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "mergelq", 0, ORC_VAR_T7, ORC_VAR_T5, ORC_VAR_T6,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "convsuswb", 2, ORC_VAR_D1, ORC_VAR_T7,
+          ORC_VAR_D1, ORC_VAR_D1);
+#endif
+
+      orc_program_compile (p);
+      c = orc_program_take_code (p);
+      orc_program_free (p);
+    }
+    p_inited = TRUE;
+    orc_once_mutex_unlock ();
+  }
+  ex->arrays[ORC_VAR_A2] = c;
+  ex->program = 0;
+
+  ex->n = n;
+  ex->arrays[ORC_VAR_D1] = d1;
+  ex->arrays[ORC_VAR_S1] = (void *) s1;
+
+  func = c->exec;
+  func (ex);
+}
+#endif
+
+
+/* video_orc_pack_BGR16_le */
+#ifdef DISABLE_ORC
+void
+video_orc_pack_BGR16_le (guint16 * ORC_RESTRICT d1,
+    const guint32 * ORC_RESTRICT s1, int n)
+{
+  int i;
+  orc_union16 *ORC_RESTRICT ptr0;
+  const orc_union32 *ORC_RESTRICT ptr4;
+#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
+  volatile orc_union32 var37;
+#else
+  orc_union32 var37;
+#endif
+#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
+  volatile orc_union32 var38;
+#else
+  orc_union32 var38;
+#endif
+#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
+  volatile orc_union32 var39;
+#else
+  orc_union32 var39;
+#endif
+  orc_union16 var40;
+  orc_union32 var41;
+  orc_union32 var42;
+  orc_union32 var43;
+  orc_union32 var44;
+  orc_union32 var45;
+  orc_union32 var46;
+  orc_union32 var47;
+  orc_union32 var48;
+  orc_union32 var49;
+
+  ptr0 = (orc_union16 *) d1;
+  ptr4 = (orc_union32 *) s1;
+
+  /* 1: loadpl */
+  var37.i = (int) 0x0000f800;   /* 63488 or 3.13672e-319f */
+  /* 3: loadpl */
+  var38.i = (int) 0x00fc0000;   /* 16515072 or 8.15953e-317f */
+  /* 5: loadpl */
+  var39.i = (int) 0xf8000000;   /* -134217728 or 2.05568e-314f */
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadl */
+    var41 = ptr4[i];
+    /* 2: andl */
+    var42.i = var41.i & var37.i;
+    /* 4: andl */
+    var43.i = var41.i & var38.i;
+    /* 6: andl */
+    var44.i = var41.i & var39.i;
+    /* 7: shrul */
+    var45.i = ((orc_uint32) var42.i) >> 11;
+    /* 8: shrul */
+    var46.i = ((orc_uint32) var43.i) >> 13;
+    /* 9: shrul */
+    var47.i = ((orc_uint32) var44.i) >> 16;
+    /* 10: orl */
+    var48.i = var45.i | var46.i;
+    /* 11: orl */
+    var49.i = var48.i | var47.i;
+    /* 12: select0lw */
+    {
+      orc_union32 _src;
+      _src.i = var49.i;
+      var40.i = _src.x2[0];
+    }
+    /* 13: storew */
+    ptr0[i] = var40;
+  }
+
+}
+
+#else
+static void
+_backup_video_orc_pack_BGR16_le (OrcExecutor * ORC_RESTRICT ex)
+{
+  int i;
+  int n = ex->n;
+  orc_union16 *ORC_RESTRICT ptr0;
+  const orc_union32 *ORC_RESTRICT ptr4;
+#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
+  volatile orc_union32 var37;
+#else
+  orc_union32 var37;
+#endif
+#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
+  volatile orc_union32 var38;
+#else
+  orc_union32 var38;
+#endif
+#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
+  volatile orc_union32 var39;
+#else
+  orc_union32 var39;
+#endif
+  orc_union16 var40;
+  orc_union32 var41;
+  orc_union32 var42;
+  orc_union32 var43;
+  orc_union32 var44;
+  orc_union32 var45;
+  orc_union32 var46;
+  orc_union32 var47;
+  orc_union32 var48;
+  orc_union32 var49;
+
+  ptr0 = (orc_union16 *) ex->arrays[0];
+  ptr4 = (orc_union32 *) ex->arrays[4];
+
+  /* 1: loadpl */
+  var37.i = (int) 0x0000f800;   /* 63488 or 3.13672e-319f */
+  /* 3: loadpl */
+  var38.i = (int) 0x00fc0000;   /* 16515072 or 8.15953e-317f */
+  /* 5: loadpl */
+  var39.i = (int) 0xf8000000;   /* -134217728 or 2.05568e-314f */
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadl */
+    var41 = ptr4[i];
+    /* 2: andl */
+    var42.i = var41.i & var37.i;
+    /* 4: andl */
+    var43.i = var41.i & var38.i;
+    /* 6: andl */
+    var44.i = var41.i & var39.i;
+    /* 7: shrul */
+    var45.i = ((orc_uint32) var42.i) >> 11;
+    /* 8: shrul */
+    var46.i = ((orc_uint32) var43.i) >> 13;
+    /* 9: shrul */
+    var47.i = ((orc_uint32) var44.i) >> 16;
+    /* 10: orl */
+    var48.i = var45.i | var46.i;
+    /* 11: orl */
+    var49.i = var48.i | var47.i;
+    /* 12: select0lw */
+    {
+      orc_union32 _src;
+      _src.i = var49.i;
+      var40.i = _src.x2[0];
+    }
+    /* 13: storew */
+    ptr0[i] = var40;
+  }
+
+}
+
+void
+video_orc_pack_BGR16_le (guint16 * ORC_RESTRICT d1,
+    const guint32 * ORC_RESTRICT s1, int n)
+{
+  OrcExecutor _ex, *ex = &_ex;
+  static volatile int p_inited = 0;
+  static OrcCode *c = 0;
+  void (*func) (OrcExecutor *);
+
+  if (!p_inited) {
+    orc_once_mutex_lock ();
+    if (!p_inited) {
+      OrcProgram *p;
+
+#if 1
+      static const orc_uint8 bc[] = {
+        1, 9, 23, 118, 105, 100, 101, 111, 95, 111, 114, 99, 95, 112, 97, 99,
+        107, 95, 66, 71, 82, 49, 54, 95, 108, 101, 11, 2, 2, 12, 4, 4,
+        14, 4, 0, 248, 0, 0, 14, 4, 0, 0, 252, 0, 14, 4, 0, 0,
+        0, 248, 14, 4, 11, 0, 0, 0, 14, 4, 13, 0, 0, 0, 14, 4,
+        16, 0, 0, 0, 20, 4, 20, 4, 20, 4, 20, 4, 20, 4, 113, 32,
+        4, 106, 33, 32, 16, 106, 34, 32, 17, 106, 35, 32, 18, 126, 33, 33,
+        19, 126, 34, 34, 20, 126, 35, 35, 21, 123, 36, 33, 34, 123, 36, 36,
+        35, 190, 0, 36, 2, 0,
+      };
+      p = orc_program_new_from_static_bytecode (bc);
+      orc_program_set_backup_function (p, _backup_video_orc_pack_BGR16_le);
+#else
+      p = orc_program_new ();
+      orc_program_set_name (p, "video_orc_pack_BGR16_le");
+      orc_program_set_backup_function (p, _backup_video_orc_pack_BGR16_le);
+      orc_program_add_destination (p, 2, "d1");
+      orc_program_add_source (p, 4, "s1");
+      orc_program_add_constant (p, 4, 0x0000f800, "c1");
+      orc_program_add_constant (p, 4, 0x00fc0000, "c2");
+      orc_program_add_constant (p, 4, 0xf8000000, "c3");
+      orc_program_add_constant (p, 4, 0x0000000b, "c4");
+      orc_program_add_constant (p, 4, 0x0000000d, "c5");
+      orc_program_add_constant (p, 4, 0x00000010, "c6");
+      orc_program_add_temporary (p, 4, "t1");
+      orc_program_add_temporary (p, 4, "t2");
+      orc_program_add_temporary (p, 4, "t3");
+      orc_program_add_temporary (p, 4, "t4");
+      orc_program_add_temporary (p, 4, "t5");
+
+      orc_program_append_2 (p, "loadl", 0, ORC_VAR_T1, ORC_VAR_S1, ORC_VAR_D1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "andl", 0, ORC_VAR_T2, ORC_VAR_T1, ORC_VAR_C1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "andl", 0, ORC_VAR_T3, ORC_VAR_T1, ORC_VAR_C2,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "andl", 0, ORC_VAR_T4, ORC_VAR_T1, ORC_VAR_C3,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "shrul", 0, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_C4,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "shrul", 0, ORC_VAR_T3, ORC_VAR_T3, ORC_VAR_C5,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "shrul", 0, ORC_VAR_T4, ORC_VAR_T4, ORC_VAR_C6,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "orl", 0, ORC_VAR_T5, ORC_VAR_T2, ORC_VAR_T3,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "orl", 0, ORC_VAR_T5, ORC_VAR_T5, ORC_VAR_T4,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "select0lw", 0, ORC_VAR_D1, ORC_VAR_T5,
+          ORC_VAR_D1, ORC_VAR_D1);
+#endif
+
+      orc_program_compile (p);
+      c = orc_program_take_code (p);
+      orc_program_free (p);
+    }
+    p_inited = TRUE;
+    orc_once_mutex_unlock ();
+  }
+  ex->arrays[ORC_VAR_A2] = c;
+  ex->program = 0;
+
+  ex->n = n;
+  ex->arrays[ORC_VAR_D1] = d1;
+  ex->arrays[ORC_VAR_S1] = (void *) s1;
+
+  func = c->exec;
+  func (ex);
+}
+#endif
+
+
+/* video_orc_pack_BGR16_be */
+#ifdef DISABLE_ORC
+void
+video_orc_pack_BGR16_be (guint16 * ORC_RESTRICT d1,
+    const guint32 * ORC_RESTRICT s1, int n)
+{
+  int i;
+  orc_union16 *ORC_RESTRICT ptr0;
+  const orc_union32 *ORC_RESTRICT ptr4;
+#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
+  volatile orc_union32 var37;
+#else
+  orc_union32 var37;
+#endif
+#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
+  volatile orc_union32 var38;
+#else
+  orc_union32 var38;
+#endif
+#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
+  volatile orc_union32 var39;
+#else
+  orc_union32 var39;
+#endif
+  orc_union16 var40;
+  orc_union32 var41;
+  orc_union32 var42;
+  orc_union32 var43;
+  orc_union32 var44;
+  orc_union32 var45;
+  orc_union32 var46;
+  orc_union32 var47;
+  orc_union32 var48;
+  orc_union32 var49;
+
+  ptr0 = (orc_union16 *) d1;
+  ptr4 = (orc_union32 *) s1;
+
+  /* 1: loadpl */
+  var37.i = (int) 0x00f80000;   /* 16252928 or 8.03001e-317f */
+  /* 3: loadpl */
+  var38.i = (int) 0x0000fc00;   /* 64512 or 3.18732e-319f */
+  /* 5: loadpl */
+  var39.i = (int) 0x000000f8;   /* 248 or 1.22528e-321f */
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadl */
+    var41 = ptr4[i];
+    /* 2: andl */
+    var42.i = var41.i & var37.i;
+    /* 4: andl */
+    var43.i = var41.i & var38.i;
+    /* 6: andl */
+    var44.i = var41.i & var39.i;
+    /* 7: shll */
+    var45.i = ((orc_uint32) var44.i) << 8;
+    /* 8: shrul */
+    var46.i = ((orc_uint32) var43.i) >> 5;
+    /* 9: shrul */
+    var47.i = ((orc_uint32) var42.i) >> 19;
+    /* 10: orl */
+    var48.i = var47.i | var46.i;
+    /* 11: orl */
+    var49.i = var48.i | var45.i;
+    /* 12: select1lw */
+    {
+      orc_union32 _src;
+      _src.i = var49.i;
+      var40.i = _src.x2[1];
+    }
+    /* 13: storew */
+    ptr0[i] = var40;
+  }
+
+}
+
+#else
+static void
+_backup_video_orc_pack_BGR16_be (OrcExecutor * ORC_RESTRICT ex)
+{
+  int i;
+  int n = ex->n;
+  orc_union16 *ORC_RESTRICT ptr0;
+  const orc_union32 *ORC_RESTRICT ptr4;
+#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
+  volatile orc_union32 var37;
+#else
+  orc_union32 var37;
+#endif
+#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
+  volatile orc_union32 var38;
+#else
+  orc_union32 var38;
+#endif
+#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
+  volatile orc_union32 var39;
+#else
+  orc_union32 var39;
+#endif
+  orc_union16 var40;
+  orc_union32 var41;
+  orc_union32 var42;
+  orc_union32 var43;
+  orc_union32 var44;
+  orc_union32 var45;
+  orc_union32 var46;
+  orc_union32 var47;
+  orc_union32 var48;
+  orc_union32 var49;
+
+  ptr0 = (orc_union16 *) ex->arrays[0];
+  ptr4 = (orc_union32 *) ex->arrays[4];
+
+  /* 1: loadpl */
+  var37.i = (int) 0x00f80000;   /* 16252928 or 8.03001e-317f */
+  /* 3: loadpl */
+  var38.i = (int) 0x0000fc00;   /* 64512 or 3.18732e-319f */
+  /* 5: loadpl */
+  var39.i = (int) 0x000000f8;   /* 248 or 1.22528e-321f */
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadl */
+    var41 = ptr4[i];
+    /* 2: andl */
+    var42.i = var41.i & var37.i;
+    /* 4: andl */
+    var43.i = var41.i & var38.i;
+    /* 6: andl */
+    var44.i = var41.i & var39.i;
+    /* 7: shll */
+    var45.i = ((orc_uint32) var44.i) << 8;
+    /* 8: shrul */
+    var46.i = ((orc_uint32) var43.i) >> 5;
+    /* 9: shrul */
+    var47.i = ((orc_uint32) var42.i) >> 19;
+    /* 10: orl */
+    var48.i = var47.i | var46.i;
+    /* 11: orl */
+    var49.i = var48.i | var45.i;
+    /* 12: select1lw */
+    {
+      orc_union32 _src;
+      _src.i = var49.i;
+      var40.i = _src.x2[1];
+    }
+    /* 13: storew */
+    ptr0[i] = var40;
+  }
+
+}
+
+void
+video_orc_pack_BGR16_be (guint16 * ORC_RESTRICT d1,
+    const guint32 * ORC_RESTRICT s1, int n)
+{
+  OrcExecutor _ex, *ex = &_ex;
+  static volatile int p_inited = 0;
+  static OrcCode *c = 0;
+  void (*func) (OrcExecutor *);
+
+  if (!p_inited) {
+    orc_once_mutex_lock ();
+    if (!p_inited) {
+      OrcProgram *p;
+
+#if 1
+      static const orc_uint8 bc[] = {
+        1, 9, 23, 118, 105, 100, 101, 111, 95, 111, 114, 99, 95, 112, 97, 99,
+        107, 95, 66, 71, 82, 49, 54, 95, 98, 101, 11, 2, 2, 12, 4, 4,
+        14, 4, 0, 0, 248, 0, 14, 4, 0, 252, 0, 0, 14, 4, 248, 0,
+        0, 0, 14, 4, 8, 0, 0, 0, 14, 4, 5, 0, 0, 0, 14, 4,
+        19, 0, 0, 0, 20, 4, 20, 4, 20, 4, 20, 4, 20, 4, 113, 32,
+        4, 106, 33, 32, 16, 106, 34, 32, 17, 106, 35, 32, 18, 124, 35, 35,
+        19, 126, 34, 34, 20, 126, 33, 33, 21, 123, 36, 33, 34, 123, 36, 36,
+        35, 191, 0, 36, 2, 0,
+      };
+      p = orc_program_new_from_static_bytecode (bc);
+      orc_program_set_backup_function (p, _backup_video_orc_pack_BGR16_be);
+#else
+      p = orc_program_new ();
+      orc_program_set_name (p, "video_orc_pack_BGR16_be");
+      orc_program_set_backup_function (p, _backup_video_orc_pack_BGR16_be);
+      orc_program_add_destination (p, 2, "d1");
+      orc_program_add_source (p, 4, "s1");
+      orc_program_add_constant (p, 4, 0x00f80000, "c1");
+      orc_program_add_constant (p, 4, 0x0000fc00, "c2");
+      orc_program_add_constant (p, 4, 0x000000f8, "c3");
+      orc_program_add_constant (p, 4, 0x00000008, "c4");
+      orc_program_add_constant (p, 4, 0x00000005, "c5");
+      orc_program_add_constant (p, 4, 0x00000013, "c6");
+      orc_program_add_temporary (p, 4, "t1");
+      orc_program_add_temporary (p, 4, "t2");
+      orc_program_add_temporary (p, 4, "t3");
+      orc_program_add_temporary (p, 4, "t4");
+      orc_program_add_temporary (p, 4, "t5");
+
+      orc_program_append_2 (p, "loadl", 0, ORC_VAR_T1, ORC_VAR_S1, ORC_VAR_D1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "andl", 0, ORC_VAR_T2, ORC_VAR_T1, ORC_VAR_C1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "andl", 0, ORC_VAR_T3, ORC_VAR_T1, ORC_VAR_C2,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "andl", 0, ORC_VAR_T4, ORC_VAR_T1, ORC_VAR_C3,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "shll", 0, ORC_VAR_T4, ORC_VAR_T4, ORC_VAR_C4,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "shrul", 0, ORC_VAR_T3, ORC_VAR_T3, ORC_VAR_C5,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "shrul", 0, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_C6,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "orl", 0, ORC_VAR_T5, ORC_VAR_T2, ORC_VAR_T3,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "orl", 0, ORC_VAR_T5, ORC_VAR_T5, ORC_VAR_T4,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "select1lw", 0, ORC_VAR_D1, ORC_VAR_T5,
+          ORC_VAR_D1, ORC_VAR_D1);
+#endif
+
+      orc_program_compile (p);
+      c = orc_program_take_code (p);
+      orc_program_free (p);
+    }
+    p_inited = TRUE;
+    orc_once_mutex_unlock ();
+  }
+  ex->arrays[ORC_VAR_A2] = c;
+  ex->program = 0;
+
+  ex->n = n;
+  ex->arrays[ORC_VAR_D1] = d1;
+  ex->arrays[ORC_VAR_S1] = (void *) s1;
+
+  func = c->exec;
+  func (ex);
+}
+#endif
+
+
 /* video_orc_resample_bilinear_u32 */
 #ifdef DISABLE_ORC
 void
@@ -6813,7 +12545,7 @@
       static const orc_uint8 bc[] = {
         1, 9, 31, 118, 105, 100, 101, 111, 95, 111, 114, 99, 95, 114, 101, 115,
         97, 109, 112, 108, 101, 95, 98, 105, 108, 105, 110, 101, 97, 114, 95,
-            117,
+        117,
         51, 50, 11, 4, 4, 12, 4, 4, 16, 4, 16, 4, 51, 0, 4, 24,
         25, 2, 0,
       };
@@ -7060,3 +12792,18448 @@
   func (ex);
 }
 #endif
+
+
+/* video_orc_memset_2d */
+#ifdef DISABLE_ORC
+void
+video_orc_memset_2d (guint8 * ORC_RESTRICT d1, int d1_stride, int p1, int n,
+    int m)
+{
+  int i;
+  int j;
+  orc_int8 *ORC_RESTRICT ptr0;
+  orc_int8 var32;
+
+  for (j = 0; j < m; j++) {
+    ptr0 = ORC_PTR_OFFSET (d1, d1_stride * j);
+
+    /* 0: loadpb */
+    var32 = p1;
+
+    for (i = 0; i < n; i++) {
+      /* 1: storeb */
+      ptr0[i] = var32;
+    }
+  }
+
+}
+
+#else
+static void
+_backup_video_orc_memset_2d (OrcExecutor * ORC_RESTRICT ex)
+{
+  int i;
+  int j;
+  int n = ex->n;
+  int m = ex->params[ORC_VAR_A1];
+  orc_int8 *ORC_RESTRICT ptr0;
+  orc_int8 var32;
+
+  for (j = 0; j < m; j++) {
+    ptr0 = ORC_PTR_OFFSET (ex->arrays[0], ex->params[0] * j);
+
+    /* 0: loadpb */
+    var32 = ex->params[24];
+
+    for (i = 0; i < n; i++) {
+      /* 1: storeb */
+      ptr0[i] = var32;
+    }
+  }
+
+}
+
+void
+video_orc_memset_2d (guint8 * ORC_RESTRICT d1, int d1_stride, int p1, int n,
+    int m)
+{
+  OrcExecutor _ex, *ex = &_ex;
+  static volatile int p_inited = 0;
+  static OrcCode *c = 0;
+  void (*func) (OrcExecutor *);
+
+  if (!p_inited) {
+    orc_once_mutex_lock ();
+    if (!p_inited) {
+      OrcProgram *p;
+
+#if 1
+      static const orc_uint8 bc[] = {
+        1, 7, 9, 19, 118, 105, 100, 101, 111, 95, 111, 114, 99, 95, 109, 101,
+        109, 115, 101, 116, 95, 50, 100, 11, 1, 1, 16, 1, 64, 0, 24, 2,
+        0,
+      };
+      p = orc_program_new_from_static_bytecode (bc);
+      orc_program_set_backup_function (p, _backup_video_orc_memset_2d);
+#else
+      p = orc_program_new ();
+      orc_program_set_2d (p);
+      orc_program_set_name (p, "video_orc_memset_2d");
+      orc_program_set_backup_function (p, _backup_video_orc_memset_2d);
+      orc_program_add_destination (p, 1, "d1");
+      orc_program_add_parameter (p, 1, "p1");
+
+      orc_program_append_2 (p, "storeb", 0, ORC_VAR_D1, ORC_VAR_P1, ORC_VAR_D1,
+          ORC_VAR_D1);
+#endif
+
+      orc_program_compile (p);
+      c = orc_program_take_code (p);
+      orc_program_free (p);
+    }
+    p_inited = TRUE;
+    orc_once_mutex_unlock ();
+  }
+  ex->arrays[ORC_VAR_A2] = c;
+  ex->program = 0;
+
+  ex->n = n;
+  ORC_EXECUTOR_M (ex) = m;
+  ex->arrays[ORC_VAR_D1] = d1;
+  ex->params[ORC_VAR_D1] = d1_stride;
+  ex->params[ORC_VAR_P1] = p1;
+
+  func = c->exec;
+  func (ex);
+}
+#endif
+
+
+/* video_orc_memcpy_2d */
+#ifdef DISABLE_ORC
+void
+video_orc_memcpy_2d (guint8 * ORC_RESTRICT d1, int d1_stride,
+    const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m)
+{
+  int i;
+  int j;
+  orc_int8 *ORC_RESTRICT ptr0;
+  const orc_int8 *ORC_RESTRICT ptr4;
+  orc_int8 var32;
+  orc_int8 var33;
+
+  for (j = 0; j < m; j++) {
+    ptr0 = ORC_PTR_OFFSET (d1, d1_stride * j);
+    ptr4 = ORC_PTR_OFFSET (s1, s1_stride * j);
+
+
+    for (i = 0; i < n; i++) {
+      /* 0: loadb */
+      var32 = ptr4[i];
+      /* 1: copyb */
+      var33 = var32;
+      /* 2: storeb */
+      ptr0[i] = var33;
+    }
+  }
+
+}
+
+#else
+static void
+_backup_video_orc_memcpy_2d (OrcExecutor * ORC_RESTRICT ex)
+{
+  int i;
+  int j;
+  int n = ex->n;
+  int m = ex->params[ORC_VAR_A1];
+  orc_int8 *ORC_RESTRICT ptr0;
+  const orc_int8 *ORC_RESTRICT ptr4;
+  orc_int8 var32;
+  orc_int8 var33;
+
+  for (j = 0; j < m; j++) {
+    ptr0 = ORC_PTR_OFFSET (ex->arrays[0], ex->params[0] * j);
+    ptr4 = ORC_PTR_OFFSET (ex->arrays[4], ex->params[4] * j);
+
+
+    for (i = 0; i < n; i++) {
+      /* 0: loadb */
+      var32 = ptr4[i];
+      /* 1: copyb */
+      var33 = var32;
+      /* 2: storeb */
+      ptr0[i] = var33;
+    }
+  }
+
+}
+
+void
+video_orc_memcpy_2d (guint8 * ORC_RESTRICT d1, int d1_stride,
+    const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m)
+{
+  OrcExecutor _ex, *ex = &_ex;
+  static volatile int p_inited = 0;
+  static OrcCode *c = 0;
+  void (*func) (OrcExecutor *);
+
+  if (!p_inited) {
+    orc_once_mutex_lock ();
+    if (!p_inited) {
+      OrcProgram *p;
+
+#if 1
+      static const orc_uint8 bc[] = {
+        1, 7, 9, 19, 118, 105, 100, 101, 111, 95, 111, 114, 99, 95, 109, 101,
+        109, 99, 112, 121, 95, 50, 100, 11, 1, 1, 12, 1, 1, 42, 0, 4,
+        2, 0,
+      };
+      p = orc_program_new_from_static_bytecode (bc);
+      orc_program_set_backup_function (p, _backup_video_orc_memcpy_2d);
+#else
+      p = orc_program_new ();
+      orc_program_set_2d (p);
+      orc_program_set_name (p, "video_orc_memcpy_2d");
+      orc_program_set_backup_function (p, _backup_video_orc_memcpy_2d);
+      orc_program_add_destination (p, 1, "d1");
+      orc_program_add_source (p, 1, "s1");
+
+      orc_program_append_2 (p, "copyb", 0, ORC_VAR_D1, ORC_VAR_S1, ORC_VAR_D1,
+          ORC_VAR_D1);
+#endif
+
+      orc_program_compile (p);
+      c = orc_program_take_code (p);
+      orc_program_free (p);
+    }
+    p_inited = TRUE;
+    orc_once_mutex_unlock ();
+  }
+  ex->arrays[ORC_VAR_A2] = c;
+  ex->program = 0;
+
+  ex->n = n;
+  ORC_EXECUTOR_M (ex) = m;
+  ex->arrays[ORC_VAR_D1] = d1;
+  ex->params[ORC_VAR_D1] = d1_stride;
+  ex->arrays[ORC_VAR_S1] = (void *) s1;
+  ex->params[ORC_VAR_S1] = s1_stride;
+
+  func = c->exec;
+  func (ex);
+}
+#endif
+
+
+/* video_orc_convert_u16_to_u8 */
+#ifdef DISABLE_ORC
+void
+video_orc_convert_u16_to_u8 (guint8 * ORC_RESTRICT d1,
+    const guint16 * ORC_RESTRICT s1, int n)
+{
+  int i;
+  orc_int8 *ORC_RESTRICT ptr0;
+  const orc_union16 *ORC_RESTRICT ptr4;
+  orc_union16 var32;
+  orc_int8 var33;
+
+  ptr0 = (orc_int8 *) d1;
+  ptr4 = (orc_union16 *) s1;
+
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadw */
+    var32 = ptr4[i];
+    /* 1: convhwb */
+    var33 = ((orc_uint16) var32.i) >> 8;
+    /* 2: storeb */
+    ptr0[i] = var33;
+  }
+
+}
+
+#else
+static void
+_backup_video_orc_convert_u16_to_u8 (OrcExecutor * ORC_RESTRICT ex)
+{
+  int i;
+  int n = ex->n;
+  orc_int8 *ORC_RESTRICT ptr0;
+  const orc_union16 *ORC_RESTRICT ptr4;
+  orc_union16 var32;
+  orc_int8 var33;
+
+  ptr0 = (orc_int8 *) ex->arrays[0];
+  ptr4 = (orc_union16 *) ex->arrays[4];
+
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadw */
+    var32 = ptr4[i];
+    /* 1: convhwb */
+    var33 = ((orc_uint16) var32.i) >> 8;
+    /* 2: storeb */
+    ptr0[i] = var33;
+  }
+
+}
+
+void
+video_orc_convert_u16_to_u8 (guint8 * ORC_RESTRICT d1,
+    const guint16 * ORC_RESTRICT s1, int n)
+{
+  OrcExecutor _ex, *ex = &_ex;
+  static volatile int p_inited = 0;
+  static OrcCode *c = 0;
+  void (*func) (OrcExecutor *);
+
+  if (!p_inited) {
+    orc_once_mutex_lock ();
+    if (!p_inited) {
+      OrcProgram *p;
+
+#if 1
+      static const orc_uint8 bc[] = {
+        1, 9, 27, 118, 105, 100, 101, 111, 95, 111, 114, 99, 95, 99, 111, 110,
+        118, 101, 114, 116, 95, 117, 49, 54, 95, 116, 111, 95, 117, 56, 11, 1,
+        1, 12, 2, 2, 158, 0, 4, 2, 0,
+      };
+      p = orc_program_new_from_static_bytecode (bc);
+      orc_program_set_backup_function (p, _backup_video_orc_convert_u16_to_u8);
+#else
+      p = orc_program_new ();
+      orc_program_set_name (p, "video_orc_convert_u16_to_u8");
+      orc_program_set_backup_function (p, _backup_video_orc_convert_u16_to_u8);
+      orc_program_add_destination (p, 1, "d1");
+      orc_program_add_source (p, 2, "s1");
+
+      orc_program_append_2 (p, "convhwb", 0, ORC_VAR_D1, ORC_VAR_S1, ORC_VAR_D1,
+          ORC_VAR_D1);
+#endif
+
+      orc_program_compile (p);
+      c = orc_program_take_code (p);
+      orc_program_free (p);
+    }
+    p_inited = TRUE;
+    orc_once_mutex_unlock ();
+  }
+  ex->arrays[ORC_VAR_A2] = c;
+  ex->program = 0;
+
+  ex->n = n;
+  ex->arrays[ORC_VAR_D1] = d1;
+  ex->arrays[ORC_VAR_S1] = (void *) s1;
+
+  func = c->exec;
+  func (ex);
+}
+#endif
+
+
+/* video_orc_convert_u8_to_u16 */
+#ifdef DISABLE_ORC
+void
+video_orc_convert_u8_to_u16 (guint16 * ORC_RESTRICT d1,
+    const guint8 * ORC_RESTRICT s1, int n)
+{
+  int i;
+  orc_union16 *ORC_RESTRICT ptr0;
+  const orc_int8 *ORC_RESTRICT ptr4;
+  orc_int8 var32;
+  orc_int8 var33;
+  orc_union16 var34;
+
+  ptr0 = (orc_union16 *) d1;
+  ptr4 = (orc_int8 *) s1;
+
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadb */
+    var32 = ptr4[i];
+    /* 1: loadb */
+    var33 = ptr4[i];
+    /* 2: mergebw */
+    {
+      orc_union16 _dest;
+      _dest.x2[0] = var32;
+      _dest.x2[1] = var33;
+      var34.i = _dest.i;
+    }
+    /* 3: storew */
+    ptr0[i] = var34;
+  }
+
+}
+
+#else
+static void
+_backup_video_orc_convert_u8_to_u16 (OrcExecutor * ORC_RESTRICT ex)
+{
+  int i;
+  int n = ex->n;
+  orc_union16 *ORC_RESTRICT ptr0;
+  const orc_int8 *ORC_RESTRICT ptr4;
+  orc_int8 var32;
+  orc_int8 var33;
+  orc_union16 var34;
+
+  ptr0 = (orc_union16 *) ex->arrays[0];
+  ptr4 = (orc_int8 *) ex->arrays[4];
+
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadb */
+    var32 = ptr4[i];
+    /* 1: loadb */
+    var33 = ptr4[i];
+    /* 2: mergebw */
+    {
+      orc_union16 _dest;
+      _dest.x2[0] = var32;
+      _dest.x2[1] = var33;
+      var34.i = _dest.i;
+    }
+    /* 3: storew */
+    ptr0[i] = var34;
+  }
+
+}
+
+void
+video_orc_convert_u8_to_u16 (guint16 * ORC_RESTRICT d1,
+    const guint8 * ORC_RESTRICT s1, int n)
+{
+  OrcExecutor _ex, *ex = &_ex;
+  static volatile int p_inited = 0;
+  static OrcCode *c = 0;
+  void (*func) (OrcExecutor *);
+
+  if (!p_inited) {
+    orc_once_mutex_lock ();
+    if (!p_inited) {
+      OrcProgram *p;
+
+#if 1
+      static const orc_uint8 bc[] = {
+        1, 9, 27, 118, 105, 100, 101, 111, 95, 111, 114, 99, 95, 99, 111, 110,
+        118, 101, 114, 116, 95, 117, 56, 95, 116, 111, 95, 117, 49, 54, 11, 2,
+        2, 12, 1, 1, 196, 0, 4, 4, 2, 0,
+      };
+      p = orc_program_new_from_static_bytecode (bc);
+      orc_program_set_backup_function (p, _backup_video_orc_convert_u8_to_u16);
+#else
+      p = orc_program_new ();
+      orc_program_set_name (p, "video_orc_convert_u8_to_u16");
+      orc_program_set_backup_function (p, _backup_video_orc_convert_u8_to_u16);
+      orc_program_add_destination (p, 2, "d1");
+      orc_program_add_source (p, 1, "s1");
+
+      orc_program_append_2 (p, "mergebw", 0, ORC_VAR_D1, ORC_VAR_S1, ORC_VAR_S1,
+          ORC_VAR_D1);
+#endif
+
+      orc_program_compile (p);
+      c = orc_program_take_code (p);
+      orc_program_free (p);
+    }
+    p_inited = TRUE;
+    orc_once_mutex_unlock ();
+  }
+  ex->arrays[ORC_VAR_A2] = c;
+  ex->program = 0;
+
+  ex->n = n;
+  ex->arrays[ORC_VAR_D1] = d1;
+  ex->arrays[ORC_VAR_S1] = (void *) s1;
+
+  func = c->exec;
+  func (ex);
+}
+#endif
+
+
+/* video_orc_splat_u16 */
+#ifdef DISABLE_ORC
+void
+video_orc_splat_u16 (guint8 * ORC_RESTRICT d1, int p1, int n)
+{
+  int i;
+  orc_union16 *ORC_RESTRICT ptr0;
+  orc_union16 var32;
+
+  ptr0 = (orc_union16 *) d1;
+
+  /* 0: loadpw */
+  var32.i = p1;
+
+  for (i = 0; i < n; i++) {
+    /* 1: storew */
+    ptr0[i] = var32;
+  }
+
+}
+
+#else
+static void
+_backup_video_orc_splat_u16 (OrcExecutor * ORC_RESTRICT ex)
+{
+  int i;
+  int n = ex->n;
+  orc_union16 *ORC_RESTRICT ptr0;
+  orc_union16 var32;
+
+  ptr0 = (orc_union16 *) ex->arrays[0];
+
+  /* 0: loadpw */
+  var32.i = ex->params[24];
+
+  for (i = 0; i < n; i++) {
+    /* 1: storew */
+    ptr0[i] = var32;
+  }
+
+}
+
+void
+video_orc_splat_u16 (guint8 * ORC_RESTRICT d1, int p1, int n)
+{
+  OrcExecutor _ex, *ex = &_ex;
+  static volatile int p_inited = 0;
+  static OrcCode *c = 0;
+  void (*func) (OrcExecutor *);
+
+  if (!p_inited) {
+    orc_once_mutex_lock ();
+    if (!p_inited) {
+      OrcProgram *p;
+
+#if 1
+      static const orc_uint8 bc[] = {
+        1, 9, 19, 118, 105, 100, 101, 111, 95, 111, 114, 99, 95, 115, 112, 108,
+        97, 116, 95, 117, 49, 54, 11, 2, 2, 16, 2, 97, 0, 24, 2, 0,
+
+      };
+      p = orc_program_new_from_static_bytecode (bc);
+      orc_program_set_backup_function (p, _backup_video_orc_splat_u16);
+#else
+      p = orc_program_new ();
+      orc_program_set_name (p, "video_orc_splat_u16");
+      orc_program_set_backup_function (p, _backup_video_orc_splat_u16);
+      orc_program_add_destination (p, 2, "d1");
+      orc_program_add_parameter (p, 2, "p1");
+
+      orc_program_append_2 (p, "storew", 0, ORC_VAR_D1, ORC_VAR_P1, ORC_VAR_D1,
+          ORC_VAR_D1);
+#endif
+
+      orc_program_compile (p);
+      c = orc_program_take_code (p);
+      orc_program_free (p);
+    }
+    p_inited = TRUE;
+    orc_once_mutex_unlock ();
+  }
+  ex->arrays[ORC_VAR_A2] = c;
+  ex->program = 0;
+
+  ex->n = n;
+  ex->arrays[ORC_VAR_D1] = d1;
+  ex->params[ORC_VAR_P1] = p1;
+
+  func = c->exec;
+  func (ex);
+}
+#endif
+
+
+/* video_orc_splat_u32 */
+#ifdef DISABLE_ORC
+void
+video_orc_splat_u32 (guint8 * ORC_RESTRICT d1, int p1, int n)
+{
+  int i;
+  orc_union32 *ORC_RESTRICT ptr0;
+  orc_union32 var32;
+
+  ptr0 = (orc_union32 *) d1;
+
+  /* 0: loadpl */
+  var32.i = p1;
+
+  for (i = 0; i < n; i++) {
+    /* 1: storel */
+    ptr0[i] = var32;
+  }
+
+}
+
+#else
+static void
+_backup_video_orc_splat_u32 (OrcExecutor * ORC_RESTRICT ex)
+{
+  int i;
+  int n = ex->n;
+  orc_union32 *ORC_RESTRICT ptr0;
+  orc_union32 var32;
+
+  ptr0 = (orc_union32 *) ex->arrays[0];
+
+  /* 0: loadpl */
+  var32.i = ex->params[24];
+
+  for (i = 0; i < n; i++) {
+    /* 1: storel */
+    ptr0[i] = var32;
+  }
+
+}
+
+void
+video_orc_splat_u32 (guint8 * ORC_RESTRICT d1, int p1, int n)
+{
+  OrcExecutor _ex, *ex = &_ex;
+  static volatile int p_inited = 0;
+  static OrcCode *c = 0;
+  void (*func) (OrcExecutor *);
+
+  if (!p_inited) {
+    orc_once_mutex_lock ();
+    if (!p_inited) {
+      OrcProgram *p;
+
+#if 1
+      static const orc_uint8 bc[] = {
+        1, 9, 19, 118, 105, 100, 101, 111, 95, 111, 114, 99, 95, 115, 112, 108,
+        97, 116, 95, 117, 51, 50, 11, 4, 4, 16, 4, 128, 0, 24, 2, 0,
+
+      };
+      p = orc_program_new_from_static_bytecode (bc);
+      orc_program_set_backup_function (p, _backup_video_orc_splat_u32);
+#else
+      p = orc_program_new ();
+      orc_program_set_name (p, "video_orc_splat_u32");
+      orc_program_set_backup_function (p, _backup_video_orc_splat_u32);
+      orc_program_add_destination (p, 4, "d1");
+      orc_program_add_parameter (p, 4, "p1");
+
+      orc_program_append_2 (p, "storel", 0, ORC_VAR_D1, ORC_VAR_P1, ORC_VAR_D1,
+          ORC_VAR_D1);
+#endif
+
+      orc_program_compile (p);
+      c = orc_program_take_code (p);
+      orc_program_free (p);
+    }
+    p_inited = TRUE;
+    orc_once_mutex_unlock ();
+  }
+  ex->arrays[ORC_VAR_A2] = c;
+  ex->program = 0;
+
+  ex->n = n;
+  ex->arrays[ORC_VAR_D1] = d1;
+  ex->params[ORC_VAR_P1] = p1;
+
+  func = c->exec;
+  func (ex);
+}
+#endif
+
+
+/* video_orc_splat_u64 */
+#ifdef DISABLE_ORC
+void
+video_orc_splat_u64 (guint8 * ORC_RESTRICT d1, orc_int64 p1, int n)
+{
+  int i;
+  orc_union64 *ORC_RESTRICT ptr0;
+  orc_union64 var32;
+
+  ptr0 = (orc_union64 *) d1;
+
+  /* 0: loadpq */
+  var32.i = p1;
+
+  for (i = 0; i < n; i++) {
+    /* 1: storeq */
+    ptr0[i] = var32;
+  }
+
+}
+
+#else
+static void
+_backup_video_orc_splat_u64 (OrcExecutor * ORC_RESTRICT ex)
+{
+  int i;
+  int n = ex->n;
+  orc_union64 *ORC_RESTRICT ptr0;
+  orc_union64 var32;
+
+  ptr0 = (orc_union64 *) ex->arrays[0];
+
+  /* 0: loadpq */
+  var32.i =
+      (ex->params[24] & 0xffffffff) | ((orc_uint64) (ex->params[24 +
+              (ORC_VAR_T1 - ORC_VAR_P1)]) << 32);
+
+  for (i = 0; i < n; i++) {
+    /* 1: storeq */
+    ptr0[i] = var32;
+  }
+
+}
+
+void
+video_orc_splat_u64 (guint8 * ORC_RESTRICT d1, orc_int64 p1, int n)
+{
+  OrcExecutor _ex, *ex = &_ex;
+  static volatile int p_inited = 0;
+  static OrcCode *c = 0;
+  void (*func) (OrcExecutor *);
+
+  if (!p_inited) {
+    orc_once_mutex_lock ();
+    if (!p_inited) {
+      OrcProgram *p;
+
+#if 1
+      static const orc_uint8 bc[] = {
+        1, 9, 19, 118, 105, 100, 101, 111, 95, 111, 114, 99, 95, 115, 112, 108,
+        97, 116, 95, 117, 54, 52, 11, 8, 8, 18, 8, 135, 0, 24, 2, 0,
+
+      };
+      p = orc_program_new_from_static_bytecode (bc);
+      orc_program_set_backup_function (p, _backup_video_orc_splat_u64);
+#else
+      p = orc_program_new ();
+      orc_program_set_name (p, "video_orc_splat_u64");
+      orc_program_set_backup_function (p, _backup_video_orc_splat_u64);
+      orc_program_add_destination (p, 8, "d1");
+      orc_program_add_parameter_int64 (p, 8, "p1");
+
+      orc_program_append_2 (p, "storeq", 0, ORC_VAR_D1, ORC_VAR_P1, ORC_VAR_D1,
+          ORC_VAR_D1);
+#endif
+
+      orc_program_compile (p);
+      c = orc_program_take_code (p);
+      orc_program_free (p);
+    }
+    p_inited = TRUE;
+    orc_once_mutex_unlock ();
+  }
+  ex->arrays[ORC_VAR_A2] = c;
+  ex->program = 0;
+
+  ex->n = n;
+  ex->arrays[ORC_VAR_D1] = d1;
+  {
+    orc_union64 tmp;
+    tmp.i = p1;
+    ex->params[ORC_VAR_P1] = ((orc_uint64) tmp.i) & 0xffffffff;
+    ex->params[ORC_VAR_T1] = ((orc_uint64) tmp.i) >> 32;
+  }
+
+  func = c->exec;
+  func (ex);
+}
+#endif
+
+
+/* video_orc_splat2_u64 */
+#ifdef DISABLE_ORC
+void
+video_orc_splat2_u64 (guint8 * ORC_RESTRICT d1, int p1, int n)
+{
+  int i;
+  orc_union64 *ORC_RESTRICT ptr0;
+  orc_union64 var33;
+  orc_union32 var34;
+
+  ptr0 = (orc_union64 *) d1;
+
+  /* 0: loadpl */
+  var34.i = p1;
+
+  for (i = 0; i < n; i++) {
+    /* 1: mergebw */
+    {
+      orc_union16 _dest;
+      _dest.x2[0] = var34.x4[0];
+      _dest.x2[1] = var34.x4[0];
+      var33.x4[0] = _dest.i;
+    }
+    {
+      orc_union16 _dest;
+      _dest.x2[0] = var34.x4[1];
+      _dest.x2[1] = var34.x4[1];
+      var33.x4[1] = _dest.i;
+    }
+    {
+      orc_union16 _dest;
+      _dest.x2[0] = var34.x4[2];
+      _dest.x2[1] = var34.x4[2];
+      var33.x4[2] = _dest.i;
+    }
+    {
+      orc_union16 _dest;
+      _dest.x2[0] = var34.x4[3];
+      _dest.x2[1] = var34.x4[3];
+      var33.x4[3] = _dest.i;
+    }
+    /* 2: storeq */
+    ptr0[i] = var33;
+  }
+
+}
+
+#else
+static void
+_backup_video_orc_splat2_u64 (OrcExecutor * ORC_RESTRICT ex)
+{
+  int i;
+  int n = ex->n;
+  orc_union64 *ORC_RESTRICT ptr0;
+  orc_union64 var33;
+  orc_union32 var34;
+
+  ptr0 = (orc_union64 *) ex->arrays[0];
+
+  /* 0: loadpl */
+  var34.i = ex->params[24];
+
+  for (i = 0; i < n; i++) {
+    /* 1: mergebw */
+    {
+      orc_union16 _dest;
+      _dest.x2[0] = var34.x4[0];
+      _dest.x2[1] = var34.x4[0];
+      var33.x4[0] = _dest.i;
+    }
+    {
+      orc_union16 _dest;
+      _dest.x2[0] = var34.x4[1];
+      _dest.x2[1] = var34.x4[1];
+      var33.x4[1] = _dest.i;
+    }
+    {
+      orc_union16 _dest;
+      _dest.x2[0] = var34.x4[2];
+      _dest.x2[1] = var34.x4[2];
+      var33.x4[2] = _dest.i;
+    }
+    {
+      orc_union16 _dest;
+      _dest.x2[0] = var34.x4[3];
+      _dest.x2[1] = var34.x4[3];
+      var33.x4[3] = _dest.i;
+    }
+    /* 2: storeq */
+    ptr0[i] = var33;
+  }
+
+}
+
+void
+video_orc_splat2_u64 (guint8 * ORC_RESTRICT d1, int p1, int n)
+{
+  OrcExecutor _ex, *ex = &_ex;
+  static volatile int p_inited = 0;
+  static OrcCode *c = 0;
+  void (*func) (OrcExecutor *);
+
+  if (!p_inited) {
+    orc_once_mutex_lock ();
+    if (!p_inited) {
+      OrcProgram *p;
+
+#if 1
+      static const orc_uint8 bc[] = {
+        1, 9, 20, 118, 105, 100, 101, 111, 95, 111, 114, 99, 95, 115, 112, 108,
+        97, 116, 50, 95, 117, 54, 52, 11, 8, 8, 16, 4, 20, 4, 115, 32,
+        24, 21, 2, 196, 0, 32, 32, 2, 0,
+      };
+      p = orc_program_new_from_static_bytecode (bc);
+      orc_program_set_backup_function (p, _backup_video_orc_splat2_u64);
+#else
+      p = orc_program_new ();
+      orc_program_set_name (p, "video_orc_splat2_u64");
+      orc_program_set_backup_function (p, _backup_video_orc_splat2_u64);
+      orc_program_add_destination (p, 8, "d1");
+      orc_program_add_parameter (p, 4, "p1");
+      orc_program_add_temporary (p, 4, "t1");
+
+      orc_program_append_2 (p, "loadpl", 0, ORC_VAR_T1, ORC_VAR_P1, ORC_VAR_D1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "mergebw", 2, ORC_VAR_D1, ORC_VAR_T1, ORC_VAR_T1,
+          ORC_VAR_D1);
+#endif
+
+      orc_program_compile (p);
+      c = orc_program_take_code (p);
+      orc_program_free (p);
+    }
+    p_inited = TRUE;
+    orc_once_mutex_unlock ();
+  }
+  ex->arrays[ORC_VAR_A2] = c;
+  ex->program = 0;
+
+  ex->n = n;
+  ex->arrays[ORC_VAR_D1] = d1;
+  ex->params[ORC_VAR_P1] = p1;
+
+  func = c->exec;
+  func (ex);
+}
+#endif
+
+
+/* video_orc_convert_I420_UYVY */
+#ifdef DISABLE_ORC
+void
+video_orc_convert_I420_UYVY (guint8 * ORC_RESTRICT d1, guint8 * ORC_RESTRICT d2,
+    const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2,
+    const guint8 * ORC_RESTRICT s3, const guint8 * ORC_RESTRICT s4, int n)
+{
+  int i;
+  orc_union32 *ORC_RESTRICT ptr0;
+  orc_union32 *ORC_RESTRICT ptr1;
+  const orc_union16 *ORC_RESTRICT ptr4;
+  const orc_union16 *ORC_RESTRICT ptr5;
+  const orc_int8 *ORC_RESTRICT ptr6;
+  const orc_int8 *ORC_RESTRICT ptr7;
+  orc_int8 var33;
+  orc_int8 var34;
+  orc_union16 var35;
+  orc_union32 var36;
+  orc_union16 var37;
+  orc_union32 var38;
+  orc_union16 var39;
+
+  ptr0 = (orc_union32 *) d1;
+  ptr1 = (orc_union32 *) d2;
+  ptr4 = (orc_union16 *) s1;
+  ptr5 = (orc_union16 *) s2;
+  ptr6 = (orc_int8 *) s3;
+  ptr7 = (orc_int8 *) s4;
+
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadb */
+    var33 = ptr6[i];
+    /* 1: loadb */
+    var34 = ptr7[i];
+    /* 2: mergebw */
+    {
+      orc_union16 _dest;
+      _dest.x2[0] = var33;
+      _dest.x2[1] = var34;
+      var39.i = _dest.i;
+    }
+    /* 3: loadw */
+    var35 = ptr4[i];
+    /* 4: mergebw */
+    {
+      orc_union16 _dest;
+      _dest.x2[0] = var39.x2[0];
+      _dest.x2[1] = var35.x2[0];
+      var36.x2[0] = _dest.i;
+    }
+    {
+      orc_union16 _dest;
+      _dest.x2[0] = var39.x2[1];
+      _dest.x2[1] = var35.x2[1];
+      var36.x2[1] = _dest.i;
+    }
+    /* 5: storel */
+    ptr0[i] = var36;
+    /* 6: loadw */
+    var37 = ptr5[i];
+    /* 7: mergebw */
+    {
+      orc_union16 _dest;
+      _dest.x2[0] = var39.x2[0];
+      _dest.x2[1] = var37.x2[0];
+      var38.x2[0] = _dest.i;
+    }
+    {
+      orc_union16 _dest;
+      _dest.x2[0] = var39.x2[1];
+      _dest.x2[1] = var37.x2[1];
+      var38.x2[1] = _dest.i;
+    }
+    /* 8: storel */
+    ptr1[i] = var38;
+  }
+
+}
+
+#else
+static void
+_backup_video_orc_convert_I420_UYVY (OrcExecutor * ORC_RESTRICT ex)
+{
+  int i;
+  int n = ex->n;
+  orc_union32 *ORC_RESTRICT ptr0;
+  orc_union32 *ORC_RESTRICT ptr1;
+  const orc_union16 *ORC_RESTRICT ptr4;
+  const orc_union16 *ORC_RESTRICT ptr5;
+  const orc_int8 *ORC_RESTRICT ptr6;
+  const orc_int8 *ORC_RESTRICT ptr7;
+  orc_int8 var33;
+  orc_int8 var34;
+  orc_union16 var35;
+  orc_union32 var36;
+  orc_union16 var37;
+  orc_union32 var38;
+  orc_union16 var39;
+
+  ptr0 = (orc_union32 *) ex->arrays[0];
+  ptr1 = (orc_union32 *) ex->arrays[1];
+  ptr4 = (orc_union16 *) ex->arrays[4];
+  ptr5 = (orc_union16 *) ex->arrays[5];
+  ptr6 = (orc_int8 *) ex->arrays[6];
+  ptr7 = (orc_int8 *) ex->arrays[7];
+
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadb */
+    var33 = ptr6[i];
+    /* 1: loadb */
+    var34 = ptr7[i];
+    /* 2: mergebw */
+    {
+      orc_union16 _dest;
+      _dest.x2[0] = var33;
+      _dest.x2[1] = var34;
+      var39.i = _dest.i;
+    }
+    /* 3: loadw */
+    var35 = ptr4[i];
+    /* 4: mergebw */
+    {
+      orc_union16 _dest;
+      _dest.x2[0] = var39.x2[0];
+      _dest.x2[1] = var35.x2[0];
+      var36.x2[0] = _dest.i;
+    }
+    {
+      orc_union16 _dest;
+      _dest.x2[0] = var39.x2[1];
+      _dest.x2[1] = var35.x2[1];
+      var36.x2[1] = _dest.i;
+    }
+    /* 5: storel */
+    ptr0[i] = var36;
+    /* 6: loadw */
+    var37 = ptr5[i];
+    /* 7: mergebw */
+    {
+      orc_union16 _dest;
+      _dest.x2[0] = var39.x2[0];
+      _dest.x2[1] = var37.x2[0];
+      var38.x2[0] = _dest.i;
+    }
+    {
+      orc_union16 _dest;
+      _dest.x2[0] = var39.x2[1];
+      _dest.x2[1] = var37.x2[1];
+      var38.x2[1] = _dest.i;
+    }
+    /* 8: storel */
+    ptr1[i] = var38;
+  }
+
+}
+
+void
+video_orc_convert_I420_UYVY (guint8 * ORC_RESTRICT d1, guint8 * ORC_RESTRICT d2,
+    const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2,
+    const guint8 * ORC_RESTRICT s3, const guint8 * ORC_RESTRICT s4, int n)
+{
+  OrcExecutor _ex, *ex = &_ex;
+  static volatile int p_inited = 0;
+  static OrcCode *c = 0;
+  void (*func) (OrcExecutor *);
+
+  if (!p_inited) {
+    orc_once_mutex_lock ();
+    if (!p_inited) {
+      OrcProgram *p;
+
+#if 1
+      static const orc_uint8 bc[] = {
+        1, 9, 27, 118, 105, 100, 101, 111, 95, 111, 114, 99, 95, 99, 111, 110,
+        118, 101, 114, 116, 95, 73, 52, 50, 48, 95, 85, 89, 86, 89, 11, 4,
+        4, 11, 4, 4, 12, 2, 2, 12, 2, 2, 12, 1, 1, 12, 1, 1,
+        20, 2, 196, 32, 6, 7, 21, 1, 196, 0, 32, 4, 21, 1, 196, 1,
+        32, 5, 2, 0,
+      };
+      p = orc_program_new_from_static_bytecode (bc);
+      orc_program_set_backup_function (p, _backup_video_orc_convert_I420_UYVY);
+#else
+      p = orc_program_new ();
+      orc_program_set_name (p, "video_orc_convert_I420_UYVY");
+      orc_program_set_backup_function (p, _backup_video_orc_convert_I420_UYVY);
+      orc_program_add_destination (p, 4, "d1");
+      orc_program_add_destination (p, 4, "d2");
+      orc_program_add_source (p, 2, "s1");
+      orc_program_add_source (p, 2, "s2");
+      orc_program_add_source (p, 1, "s3");
+      orc_program_add_source (p, 1, "s4");
+      orc_program_add_temporary (p, 2, "t1");
+
+      orc_program_append_2 (p, "mergebw", 0, ORC_VAR_T1, ORC_VAR_S3, ORC_VAR_S4,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "mergebw", 1, ORC_VAR_D1, ORC_VAR_T1, ORC_VAR_S1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "mergebw", 1, ORC_VAR_D2, ORC_VAR_T1, ORC_VAR_S2,
+          ORC_VAR_D1);
+#endif
+
+      orc_program_compile (p);
+      c = orc_program_take_code (p);
+      orc_program_free (p);
+    }
+    p_inited = TRUE;
+    orc_once_mutex_unlock ();
+  }
+  ex->arrays[ORC_VAR_A2] = c;
+  ex->program = 0;
+
+  ex->n = n;
+  ex->arrays[ORC_VAR_D1] = d1;
+  ex->arrays[ORC_VAR_D2] = d2;
+  ex->arrays[ORC_VAR_S1] = (void *) s1;
+  ex->arrays[ORC_VAR_S2] = (void *) s2;
+  ex->arrays[ORC_VAR_S3] = (void *) s3;
+  ex->arrays[ORC_VAR_S4] = (void *) s4;
+
+  func = c->exec;
+  func (ex);
+}
+#endif
+
+
+/* video_orc_convert_I420_YUY2 */
+#ifdef DISABLE_ORC
+void
+video_orc_convert_I420_YUY2 (guint8 * ORC_RESTRICT d1, guint8 * ORC_RESTRICT d2,
+    const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2,
+    const guint8 * ORC_RESTRICT s3, const guint8 * ORC_RESTRICT s4, int n)
+{
+  int i;
+  orc_union32 *ORC_RESTRICT ptr0;
+  orc_union32 *ORC_RESTRICT ptr1;
+  const orc_union16 *ORC_RESTRICT ptr4;
+  const orc_union16 *ORC_RESTRICT ptr5;
+  const orc_int8 *ORC_RESTRICT ptr6;
+  const orc_int8 *ORC_RESTRICT ptr7;
+  orc_int8 var33;
+  orc_int8 var34;
+  orc_union16 var35;
+  orc_union32 var36;
+  orc_union16 var37;
+  orc_union32 var38;
+  orc_union16 var39;
+
+  ptr0 = (orc_union32 *) d1;
+  ptr1 = (orc_union32 *) d2;
+  ptr4 = (orc_union16 *) s1;
+  ptr5 = (orc_union16 *) s2;
+  ptr6 = (orc_int8 *) s3;
+  ptr7 = (orc_int8 *) s4;
+
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadb */
+    var33 = ptr6[i];
+    /* 1: loadb */
+    var34 = ptr7[i];
+    /* 2: mergebw */
+    {
+      orc_union16 _dest;
+      _dest.x2[0] = var33;
+      _dest.x2[1] = var34;
+      var39.i = _dest.i;
+    }
+    /* 3: loadw */
+    var35 = ptr4[i];
+    /* 4: mergebw */
+    {
+      orc_union16 _dest;
+      _dest.x2[0] = var35.x2[0];
+      _dest.x2[1] = var39.x2[0];
+      var36.x2[0] = _dest.i;
+    }
+    {
+      orc_union16 _dest;
+      _dest.x2[0] = var35.x2[1];
+      _dest.x2[1] = var39.x2[1];
+      var36.x2[1] = _dest.i;
+    }
+    /* 5: storel */
+    ptr0[i] = var36;
+    /* 6: loadw */
+    var37 = ptr5[i];
+    /* 7: mergebw */
+    {
+      orc_union16 _dest;
+      _dest.x2[0] = var37.x2[0];
+      _dest.x2[1] = var39.x2[0];
+      var38.x2[0] = _dest.i;
+    }
+    {
+      orc_union16 _dest;
+      _dest.x2[0] = var37.x2[1];
+      _dest.x2[1] = var39.x2[1];
+      var38.x2[1] = _dest.i;
+    }
+    /* 8: storel */
+    ptr1[i] = var38;
+  }
+
+}
+
+#else
+static void
+_backup_video_orc_convert_I420_YUY2 (OrcExecutor * ORC_RESTRICT ex)
+{
+  int i;
+  int n = ex->n;
+  orc_union32 *ORC_RESTRICT ptr0;
+  orc_union32 *ORC_RESTRICT ptr1;
+  const orc_union16 *ORC_RESTRICT ptr4;
+  const orc_union16 *ORC_RESTRICT ptr5;
+  const orc_int8 *ORC_RESTRICT ptr6;
+  const orc_int8 *ORC_RESTRICT ptr7;
+  orc_int8 var33;
+  orc_int8 var34;
+  orc_union16 var35;
+  orc_union32 var36;
+  orc_union16 var37;
+  orc_union32 var38;
+  orc_union16 var39;
+
+  ptr0 = (orc_union32 *) ex->arrays[0];
+  ptr1 = (orc_union32 *) ex->arrays[1];
+  ptr4 = (orc_union16 *) ex->arrays[4];
+  ptr5 = (orc_union16 *) ex->arrays[5];
+  ptr6 = (orc_int8 *) ex->arrays[6];
+  ptr7 = (orc_int8 *) ex->arrays[7];
+
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadb */
+    var33 = ptr6[i];
+    /* 1: loadb */
+    var34 = ptr7[i];
+    /* 2: mergebw */
+    {
+      orc_union16 _dest;
+      _dest.x2[0] = var33;
+      _dest.x2[1] = var34;
+      var39.i = _dest.i;
+    }
+    /* 3: loadw */
+    var35 = ptr4[i];
+    /* 4: mergebw */
+    {
+      orc_union16 _dest;
+      _dest.x2[0] = var35.x2[0];
+      _dest.x2[1] = var39.x2[0];
+      var36.x2[0] = _dest.i;
+    }
+    {
+      orc_union16 _dest;
+      _dest.x2[0] = var35.x2[1];
+      _dest.x2[1] = var39.x2[1];
+      var36.x2[1] = _dest.i;
+    }
+    /* 5: storel */
+    ptr0[i] = var36;
+    /* 6: loadw */
+    var37 = ptr5[i];
+    /* 7: mergebw */
+    {
+      orc_union16 _dest;
+      _dest.x2[0] = var37.x2[0];
+      _dest.x2[1] = var39.x2[0];
+      var38.x2[0] = _dest.i;
+    }
+    {
+      orc_union16 _dest;
+      _dest.x2[0] = var37.x2[1];
+      _dest.x2[1] = var39.x2[1];
+      var38.x2[1] = _dest.i;
+    }
+    /* 8: storel */
+    ptr1[i] = var38;
+  }
+
+}
+
+void
+video_orc_convert_I420_YUY2 (guint8 * ORC_RESTRICT d1, guint8 * ORC_RESTRICT d2,
+    const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2,
+    const guint8 * ORC_RESTRICT s3, const guint8 * ORC_RESTRICT s4, int n)
+{
+  OrcExecutor _ex, *ex = &_ex;
+  static volatile int p_inited = 0;
+  static OrcCode *c = 0;
+  void (*func) (OrcExecutor *);
+
+  if (!p_inited) {
+    orc_once_mutex_lock ();
+    if (!p_inited) {
+      OrcProgram *p;
+
+#if 1
+      static const orc_uint8 bc[] = {
+        1, 9, 27, 118, 105, 100, 101, 111, 95, 111, 114, 99, 95, 99, 111, 110,
+        118, 101, 114, 116, 95, 73, 52, 50, 48, 95, 89, 85, 89, 50, 11, 4,
+        4, 11, 4, 4, 12, 2, 2, 12, 2, 2, 12, 1, 1, 12, 1, 1,
+        20, 2, 196, 32, 6, 7, 21, 1, 196, 0, 4, 32, 21, 1, 196, 1,
+        5, 32, 2, 0,
+      };
+      p = orc_program_new_from_static_bytecode (bc);
+      orc_program_set_backup_function (p, _backup_video_orc_convert_I420_YUY2);
+#else
+      p = orc_program_new ();
+      orc_program_set_name (p, "video_orc_convert_I420_YUY2");
+      orc_program_set_backup_function (p, _backup_video_orc_convert_I420_YUY2);
+      orc_program_add_destination (p, 4, "d1");
+      orc_program_add_destination (p, 4, "d2");
+      orc_program_add_source (p, 2, "s1");
+      orc_program_add_source (p, 2, "s2");
+      orc_program_add_source (p, 1, "s3");
+      orc_program_add_source (p, 1, "s4");
+      orc_program_add_temporary (p, 2, "t1");
+
+      orc_program_append_2 (p, "mergebw", 0, ORC_VAR_T1, ORC_VAR_S3, ORC_VAR_S4,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "mergebw", 1, ORC_VAR_D1, ORC_VAR_S1, ORC_VAR_T1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "mergebw", 1, ORC_VAR_D2, ORC_VAR_S2, ORC_VAR_T1,
+          ORC_VAR_D1);
+#endif
+
+      orc_program_compile (p);
+      c = orc_program_take_code (p);
+      orc_program_free (p);
+    }
+    p_inited = TRUE;
+    orc_once_mutex_unlock ();
+  }
+  ex->arrays[ORC_VAR_A2] = c;
+  ex->program = 0;
+
+  ex->n = n;
+  ex->arrays[ORC_VAR_D1] = d1;
+  ex->arrays[ORC_VAR_D2] = d2;
+  ex->arrays[ORC_VAR_S1] = (void *) s1;
+  ex->arrays[ORC_VAR_S2] = (void *) s2;
+  ex->arrays[ORC_VAR_S3] = (void *) s3;
+  ex->arrays[ORC_VAR_S4] = (void *) s4;
+
+  func = c->exec;
+  func (ex);
+}
+#endif
+
+
+/* video_orc_convert_I420_AYUV */
+#ifdef DISABLE_ORC
+void
+video_orc_convert_I420_AYUV (guint8 * ORC_RESTRICT d1, guint8 * ORC_RESTRICT d2,
+    const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2,
+    const guint8 * ORC_RESTRICT s3, const guint8 * ORC_RESTRICT s4, int p1,
+    int n)
+{
+  int i;
+  orc_union32 *ORC_RESTRICT ptr0;
+  orc_union32 *ORC_RESTRICT ptr1;
+  const orc_int8 *ORC_RESTRICT ptr4;
+  const orc_int8 *ORC_RESTRICT ptr5;
+  const orc_int8 *ORC_RESTRICT ptr6;
+  const orc_int8 *ORC_RESTRICT ptr7;
+  orc_int8 var36;
+  orc_int8 var37;
+  orc_union32 var38;
+  orc_int8 var39;
+  orc_union32 var40;
+  orc_int8 var41;
+  orc_int8 var42;
+  orc_union16 var43;
+  orc_union16 var44;
+  orc_union16 var45;
+
+  ptr0 = (orc_union32 *) d1;
+  ptr1 = (orc_union32 *) d2;
+  ptr4 = (orc_int8 *) s1;
+  ptr5 = (orc_int8 *) s2;
+  ptr6 = (orc_int8 *) s3;
+  ptr7 = (orc_int8 *) s4;
+
+  /* 3: loadpb */
+  var36 = p1;
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadupdb */
+    var41 = ptr6[i >> 1];
+    /* 1: loadupdb */
+    var42 = ptr7[i >> 1];
+    /* 2: mergebw */
+    {
+      orc_union16 _dest;
+      _dest.x2[0] = var41;
+      _dest.x2[1] = var42;
+      var43.i = _dest.i;
+    }
+    /* 4: loadb */
+    var37 = ptr4[i];
+    /* 5: mergebw */
+    {
+      orc_union16 _dest;
+      _dest.x2[0] = var36;
+      _dest.x2[1] = var37;
+      var44.i = _dest.i;
+    }
+    /* 6: mergewl */
+    {
+      orc_union32 _dest;
+      _dest.x2[0] = var44.i;
+      _dest.x2[1] = var43.i;
+      var38.i = _dest.i;
+    }
+    /* 7: storel */
+    ptr0[i] = var38;
+    /* 8: loadb */
+    var39 = ptr5[i];
+    /* 9: mergebw */
+    {
+      orc_union16 _dest;
+      _dest.x2[0] = var36;
+      _dest.x2[1] = var39;
+      var45.i = _dest.i;
+    }
+    /* 10: mergewl */
+    {
+      orc_union32 _dest;
+      _dest.x2[0] = var45.i;
+      _dest.x2[1] = var43.i;
+      var40.i = _dest.i;
+    }
+    /* 11: storel */
+    ptr1[i] = var40;
+  }
+
+}
+
+#else
+static void
+_backup_video_orc_convert_I420_AYUV (OrcExecutor * ORC_RESTRICT ex)
+{
+  int i;
+  int n = ex->n;
+  orc_union32 *ORC_RESTRICT ptr0;
+  orc_union32 *ORC_RESTRICT ptr1;
+  const orc_int8 *ORC_RESTRICT ptr4;
+  const orc_int8 *ORC_RESTRICT ptr5;
+  const orc_int8 *ORC_RESTRICT ptr6;
+  const orc_int8 *ORC_RESTRICT ptr7;
+  orc_int8 var36;
+  orc_int8 var37;
+  orc_union32 var38;
+  orc_int8 var39;
+  orc_union32 var40;
+  orc_int8 var41;
+  orc_int8 var42;
+  orc_union16 var43;
+  orc_union16 var44;
+  orc_union16 var45;
+
+  ptr0 = (orc_union32 *) ex->arrays[0];
+  ptr1 = (orc_union32 *) ex->arrays[1];
+  ptr4 = (orc_int8 *) ex->arrays[4];
+  ptr5 = (orc_int8 *) ex->arrays[5];
+  ptr6 = (orc_int8 *) ex->arrays[6];
+  ptr7 = (orc_int8 *) ex->arrays[7];
+
+  /* 3: loadpb */
+  var36 = ex->params[24];
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadupdb */
+    var41 = ptr6[i >> 1];
+    /* 1: loadupdb */
+    var42 = ptr7[i >> 1];
+    /* 2: mergebw */
+    {
+      orc_union16 _dest;
+      _dest.x2[0] = var41;
+      _dest.x2[1] = var42;
+      var43.i = _dest.i;
+    }
+    /* 4: loadb */
+    var37 = ptr4[i];
+    /* 5: mergebw */
+    {
+      orc_union16 _dest;
+      _dest.x2[0] = var36;
+      _dest.x2[1] = var37;
+      var44.i = _dest.i;
+    }
+    /* 6: mergewl */
+    {
+      orc_union32 _dest;
+      _dest.x2[0] = var44.i;
+      _dest.x2[1] = var43.i;
+      var38.i = _dest.i;
+    }
+    /* 7: storel */
+    ptr0[i] = var38;
+    /* 8: loadb */
+    var39 = ptr5[i];
+    /* 9: mergebw */
+    {
+      orc_union16 _dest;
+      _dest.x2[0] = var36;
+      _dest.x2[1] = var39;
+      var45.i = _dest.i;
+    }
+    /* 10: mergewl */
+    {
+      orc_union32 _dest;
+      _dest.x2[0] = var45.i;
+      _dest.x2[1] = var43.i;
+      var40.i = _dest.i;
+    }
+    /* 11: storel */
+    ptr1[i] = var40;
+  }
+
+}
+
+void
+video_orc_convert_I420_AYUV (guint8 * ORC_RESTRICT d1, guint8 * ORC_RESTRICT d2,
+    const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2,
+    const guint8 * ORC_RESTRICT s3, const guint8 * ORC_RESTRICT s4, int p1,
+    int n)
+{
+  OrcExecutor _ex, *ex = &_ex;
+  static volatile int p_inited = 0;
+  static OrcCode *c = 0;
+  void (*func) (OrcExecutor *);
+
+  if (!p_inited) {
+    orc_once_mutex_lock ();
+    if (!p_inited) {
+      OrcProgram *p;
+
+#if 1
+      static const orc_uint8 bc[] = {
+        1, 9, 27, 118, 105, 100, 101, 111, 95, 111, 114, 99, 95, 99, 111, 110,
+        118, 101, 114, 116, 95, 73, 52, 50, 48, 95, 65, 89, 85, 86, 11, 4,
+        4, 11, 4, 4, 12, 1, 1, 12, 1, 1, 12, 1, 1, 12, 1, 1,
+        16, 1, 20, 2, 20, 2, 20, 1, 20, 1, 45, 34, 6, 45, 35, 7,
+        196, 32, 34, 35, 196, 33, 24, 4, 195, 0, 33, 32, 196, 33, 24, 5,
+        195, 1, 33, 32, 2, 0,
+      };
+      p = orc_program_new_from_static_bytecode (bc);
+      orc_program_set_backup_function (p, _backup_video_orc_convert_I420_AYUV);
+#else
+      p = orc_program_new ();
+      orc_program_set_name (p, "video_orc_convert_I420_AYUV");
+      orc_program_set_backup_function (p, _backup_video_orc_convert_I420_AYUV);
+      orc_program_add_destination (p, 4, "d1");
+      orc_program_add_destination (p, 4, "d2");
+      orc_program_add_source (p, 1, "s1");
+      orc_program_add_source (p, 1, "s2");
+      orc_program_add_source (p, 1, "s3");
+      orc_program_add_source (p, 1, "s4");
+      orc_program_add_parameter (p, 1, "p1");
+      orc_program_add_temporary (p, 2, "t1");
+      orc_program_add_temporary (p, 2, "t2");
+      orc_program_add_temporary (p, 1, "t3");
+      orc_program_add_temporary (p, 1, "t4");
+
+      orc_program_append_2 (p, "loadupdb", 0, ORC_VAR_T3, ORC_VAR_S3,
+          ORC_VAR_D1, ORC_VAR_D1);
+      orc_program_append_2 (p, "loadupdb", 0, ORC_VAR_T4, ORC_VAR_S4,
+          ORC_VAR_D1, ORC_VAR_D1);
+      orc_program_append_2 (p, "mergebw", 0, ORC_VAR_T1, ORC_VAR_T3, ORC_VAR_T4,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "mergebw", 0, ORC_VAR_T2, ORC_VAR_P1, ORC_VAR_S1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "mergewl", 0, ORC_VAR_D1, ORC_VAR_T2, ORC_VAR_T1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "mergebw", 0, ORC_VAR_T2, ORC_VAR_P1, ORC_VAR_S2,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "mergewl", 0, ORC_VAR_D2, ORC_VAR_T2, ORC_VAR_T1,
+          ORC_VAR_D1);
+#endif
+
+      orc_program_compile (p);
+      c = orc_program_take_code (p);
+      orc_program_free (p);
+    }
+    p_inited = TRUE;
+    orc_once_mutex_unlock ();
+  }
+  ex->arrays[ORC_VAR_A2] = c;
+  ex->program = 0;
+
+  ex->n = n;
+  ex->arrays[ORC_VAR_D1] = d1;
+  ex->arrays[ORC_VAR_D2] = d2;
+  ex->arrays[ORC_VAR_S1] = (void *) s1;
+  ex->arrays[ORC_VAR_S2] = (void *) s2;
+  ex->arrays[ORC_VAR_S3] = (void *) s3;
+  ex->arrays[ORC_VAR_S4] = (void *) s4;
+  ex->params[ORC_VAR_P1] = p1;
+
+  func = c->exec;
+  func (ex);
+}
+#endif
+
+
+/* video_orc_convert_YUY2_I420 */
+#ifdef DISABLE_ORC
+void
+video_orc_convert_YUY2_I420 (guint8 * ORC_RESTRICT d1, guint8 * ORC_RESTRICT d2,
+    guint8 * ORC_RESTRICT d3, guint8 * ORC_RESTRICT d4,
+    const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, int n)
+{
+  int i;
+  orc_union16 *ORC_RESTRICT ptr0;
+  orc_union16 *ORC_RESTRICT ptr1;
+  orc_int8 *ORC_RESTRICT ptr2;
+  orc_int8 *ORC_RESTRICT ptr3;
+  const orc_union32 *ORC_RESTRICT ptr4;
+  const orc_union32 *ORC_RESTRICT ptr5;
+  orc_union32 var35;
+  orc_union32 var36;
+  orc_int8 var37;
+  orc_int8 var38;
+  orc_union16 var39;
+  orc_union16 var40;
+  orc_union16 var41;
+  orc_union16 var42;
+  orc_union16 var43;
+
+  ptr0 = (orc_union16 *) d1;
+  ptr1 = (orc_union16 *) d2;
+  ptr2 = (orc_int8 *) d3;
+  ptr3 = (orc_int8 *) d4;
+  ptr4 = (orc_union32 *) s1;
+  ptr5 = (orc_union32 *) s2;
+
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadl */
+    var35 = ptr4[i];
+    /* 1: splitwb */
+    {
+      orc_union16 _src;
+      _src.i = var35.x2[0];
+      var39.x2[0] = _src.x2[1];
+      var40.x2[0] = _src.x2[0];
+    }
+    {
+      orc_union16 _src;
+      _src.i = var35.x2[1];
+      var39.x2[1] = _src.x2[1];
+      var40.x2[1] = _src.x2[0];
+    }
+    /* 2: storew */
+    ptr0[i] = var40;
+    /* 3: loadl */
+    var36 = ptr5[i];
+    /* 4: splitwb */
+    {
+      orc_union16 _src;
+      _src.i = var36.x2[0];
+      var41.x2[0] = _src.x2[1];
+      var42.x2[0] = _src.x2[0];
+    }
+    {
+      orc_union16 _src;
+      _src.i = var36.x2[1];
+      var41.x2[1] = _src.x2[1];
+      var42.x2[1] = _src.x2[0];
+    }
+    /* 5: storew */
+    ptr1[i] = var42;
+    /* 6: avgub */
+    var43.x2[0] = ((orc_uint8) var39.x2[0] + (orc_uint8) var41.x2[0] + 1) >> 1;
+    var43.x2[1] = ((orc_uint8) var39.x2[1] + (orc_uint8) var41.x2[1] + 1) >> 1;
+    /* 7: splitwb */
+    {
+      orc_union16 _src;
+      _src.i = var43.i;
+      var37 = _src.x2[1];
+      var38 = _src.x2[0];
+    }
+    /* 8: storeb */
+    ptr3[i] = var37;
+    /* 9: storeb */
+    ptr2[i] = var38;
+  }
+
+}
+
+#else
+static void
+_backup_video_orc_convert_YUY2_I420 (OrcExecutor * ORC_RESTRICT ex)
+{
+  int i;
+  int n = ex->n;
+  orc_union16 *ORC_RESTRICT ptr0;
+  orc_union16 *ORC_RESTRICT ptr1;
+  orc_int8 *ORC_RESTRICT ptr2;
+  orc_int8 *ORC_RESTRICT ptr3;
+  const orc_union32 *ORC_RESTRICT ptr4;
+  const orc_union32 *ORC_RESTRICT ptr5;
+  orc_union32 var35;
+  orc_union32 var36;
+  orc_int8 var37;
+  orc_int8 var38;
+  orc_union16 var39;
+  orc_union16 var40;
+  orc_union16 var41;
+  orc_union16 var42;
+  orc_union16 var43;
+
+  ptr0 = (orc_union16 *) ex->arrays[0];
+  ptr1 = (orc_union16 *) ex->arrays[1];
+  ptr2 = (orc_int8 *) ex->arrays[2];
+  ptr3 = (orc_int8 *) ex->arrays[3];
+  ptr4 = (orc_union32 *) ex->arrays[4];
+  ptr5 = (orc_union32 *) ex->arrays[5];
+
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadl */
+    var35 = ptr4[i];
+    /* 1: splitwb */
+    {
+      orc_union16 _src;
+      _src.i = var35.x2[0];
+      var39.x2[0] = _src.x2[1];
+      var40.x2[0] = _src.x2[0];
+    }
+    {
+      orc_union16 _src;
+      _src.i = var35.x2[1];
+      var39.x2[1] = _src.x2[1];
+      var40.x2[1] = _src.x2[0];
+    }
+    /* 2: storew */
+    ptr0[i] = var40;
+    /* 3: loadl */
+    var36 = ptr5[i];
+    /* 4: splitwb */
+    {
+      orc_union16 _src;
+      _src.i = var36.x2[0];
+      var41.x2[0] = _src.x2[1];
+      var42.x2[0] = _src.x2[0];
+    }
+    {
+      orc_union16 _src;
+      _src.i = var36.x2[1];
+      var41.x2[1] = _src.x2[1];
+      var42.x2[1] = _src.x2[0];
+    }
+    /* 5: storew */
+    ptr1[i] = var42;
+    /* 6: avgub */
+    var43.x2[0] = ((orc_uint8) var39.x2[0] + (orc_uint8) var41.x2[0] + 1) >> 1;
+    var43.x2[1] = ((orc_uint8) var39.x2[1] + (orc_uint8) var41.x2[1] + 1) >> 1;
+    /* 7: splitwb */
+    {
+      orc_union16 _src;
+      _src.i = var43.i;
+      var37 = _src.x2[1];
+      var38 = _src.x2[0];
+    }
+    /* 8: storeb */
+    ptr3[i] = var37;
+    /* 9: storeb */
+    ptr2[i] = var38;
+  }
+
+}
+
+void
+video_orc_convert_YUY2_I420 (guint8 * ORC_RESTRICT d1, guint8 * ORC_RESTRICT d2,
+    guint8 * ORC_RESTRICT d3, guint8 * ORC_RESTRICT d4,
+    const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, int n)
+{
+  OrcExecutor _ex, *ex = &_ex;
+  static volatile int p_inited = 0;
+  static OrcCode *c = 0;
+  void (*func) (OrcExecutor *);
+
+  if (!p_inited) {
+    orc_once_mutex_lock ();
+    if (!p_inited) {
+      OrcProgram *p;
+
+#if 1
+      static const orc_uint8 bc[] = {
+        1, 9, 27, 118, 105, 100, 101, 111, 95, 111, 114, 99, 95, 99, 111, 110,
+        118, 101, 114, 116, 95, 89, 85, 89, 50, 95, 73, 52, 50, 48, 11, 2,
+        2, 11, 2, 2, 11, 1, 1, 11, 1, 1, 12, 4, 4, 12, 4, 4,
+        20, 2, 20, 2, 20, 2, 21, 1, 199, 32, 34, 4, 97, 0, 34, 21,
+        1, 199, 33, 34, 5, 97, 1, 34, 21, 1, 39, 32, 32, 33, 199, 3,
+        2, 32, 2, 0,
+      };
+      p = orc_program_new_from_static_bytecode (bc);
+      orc_program_set_backup_function (p, _backup_video_orc_convert_YUY2_I420);
+#else
+      p = orc_program_new ();
+      orc_program_set_name (p, "video_orc_convert_YUY2_I420");
+      orc_program_set_backup_function (p, _backup_video_orc_convert_YUY2_I420);
+      orc_program_add_destination (p, 2, "d1");
+      orc_program_add_destination (p, 2, "d2");
+      orc_program_add_destination (p, 1, "d3");
+      orc_program_add_destination (p, 1, "d4");
+      orc_program_add_source (p, 4, "s1");
+      orc_program_add_source (p, 4, "s2");
+      orc_program_add_temporary (p, 2, "t1");
+      orc_program_add_temporary (p, 2, "t2");
+      orc_program_add_temporary (p, 2, "t3");
+
+      orc_program_append_2 (p, "splitwb", 1, ORC_VAR_T1, ORC_VAR_T3, ORC_VAR_S1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "storew", 0, ORC_VAR_D1, ORC_VAR_T3, ORC_VAR_D1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "splitwb", 1, ORC_VAR_T2, ORC_VAR_T3, ORC_VAR_S2,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "storew", 0, ORC_VAR_D2, ORC_VAR_T3, ORC_VAR_D1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "avgub", 1, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_T2,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "splitwb", 0, ORC_VAR_D4, ORC_VAR_D3, ORC_VAR_T1,
+          ORC_VAR_D1);
+#endif
+
+      orc_program_compile (p);
+      c = orc_program_take_code (p);
+      orc_program_free (p);
+    }
+    p_inited = TRUE;
+    orc_once_mutex_unlock ();
+  }
+  ex->arrays[ORC_VAR_A2] = c;
+  ex->program = 0;
+
+  ex->n = n;
+  ex->arrays[ORC_VAR_D1] = d1;
+  ex->arrays[ORC_VAR_D2] = d2;
+  ex->arrays[ORC_VAR_D3] = d3;
+  ex->arrays[ORC_VAR_D4] = d4;
+  ex->arrays[ORC_VAR_S1] = (void *) s1;
+  ex->arrays[ORC_VAR_S2] = (void *) s2;
+
+  func = c->exec;
+  func (ex);
+}
+#endif
+
+
+/* video_orc_convert_UYVY_YUY2 */
+#ifdef DISABLE_ORC
+void
+video_orc_convert_UYVY_YUY2 (guint8 * ORC_RESTRICT d1, int d1_stride,
+    const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m)
+{
+  int i;
+  int j;
+  orc_union32 *ORC_RESTRICT ptr0;
+  const orc_union32 *ORC_RESTRICT ptr4;
+  orc_union32 var32;
+  orc_union32 var33;
+
+  for (j = 0; j < m; j++) {
+    ptr0 = ORC_PTR_OFFSET (d1, d1_stride * j);
+    ptr4 = ORC_PTR_OFFSET (s1, s1_stride * j);
+
+
+    for (i = 0; i < n; i++) {
+      /* 0: loadl */
+      var32 = ptr4[i];
+      /* 1: swapw */
+      var33.x2[0] = ORC_SWAP_W (var32.x2[0]);
+      var33.x2[1] = ORC_SWAP_W (var32.x2[1]);
+      /* 2: storel */
+      ptr0[i] = var33;
+    }
+  }
+
+}
+
+#else
+static void
+_backup_video_orc_convert_UYVY_YUY2 (OrcExecutor * ORC_RESTRICT ex)
+{
+  int i;
+  int j;
+  int n = ex->n;
+  int m = ex->params[ORC_VAR_A1];
+  orc_union32 *ORC_RESTRICT ptr0;
+  const orc_union32 *ORC_RESTRICT ptr4;
+  orc_union32 var32;
+  orc_union32 var33;
+
+  for (j = 0; j < m; j++) {
+    ptr0 = ORC_PTR_OFFSET (ex->arrays[0], ex->params[0] * j);
+    ptr4 = ORC_PTR_OFFSET (ex->arrays[4], ex->params[4] * j);
+
+
+    for (i = 0; i < n; i++) {
+      /* 0: loadl */
+      var32 = ptr4[i];
+      /* 1: swapw */
+      var33.x2[0] = ORC_SWAP_W (var32.x2[0]);
+      var33.x2[1] = ORC_SWAP_W (var32.x2[1]);
+      /* 2: storel */
+      ptr0[i] = var33;
+    }
+  }
+
+}
+
+void
+video_orc_convert_UYVY_YUY2 (guint8 * ORC_RESTRICT d1, int d1_stride,
+    const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m)
+{
+  OrcExecutor _ex, *ex = &_ex;
+  static volatile int p_inited = 0;
+  static OrcCode *c = 0;
+  void (*func) (OrcExecutor *);
+
+  if (!p_inited) {
+    orc_once_mutex_lock ();
+    if (!p_inited) {
+      OrcProgram *p;
+
+#if 1
+      static const orc_uint8 bc[] = {
+        1, 7, 9, 27, 118, 105, 100, 101, 111, 95, 111, 114, 99, 95, 99, 111,
+        110, 118, 101, 114, 116, 95, 85, 89, 86, 89, 95, 89, 85, 89, 50, 11,
+        4, 4, 12, 4, 4, 21, 1, 183, 0, 4, 2, 0,
+      };
+      p = orc_program_new_from_static_bytecode (bc);
+      orc_program_set_backup_function (p, _backup_video_orc_convert_UYVY_YUY2);
+#else
+      p = orc_program_new ();
+      orc_program_set_2d (p);
+      orc_program_set_name (p, "video_orc_convert_UYVY_YUY2");
+      orc_program_set_backup_function (p, _backup_video_orc_convert_UYVY_YUY2);
+      orc_program_add_destination (p, 4, "d1");
+      orc_program_add_source (p, 4, "s1");
+
+      orc_program_append_2 (p, "swapw", 1, ORC_VAR_D1, ORC_VAR_S1, ORC_VAR_D1,
+          ORC_VAR_D1);
+#endif
+
+      orc_program_compile (p);
+      c = orc_program_take_code (p);
+      orc_program_free (p);
+    }
+    p_inited = TRUE;
+    orc_once_mutex_unlock ();
+  }
+  ex->arrays[ORC_VAR_A2] = c;
+  ex->program = 0;
+
+  ex->n = n;
+  ORC_EXECUTOR_M (ex) = m;
+  ex->arrays[ORC_VAR_D1] = d1;
+  ex->params[ORC_VAR_D1] = d1_stride;
+  ex->arrays[ORC_VAR_S1] = (void *) s1;
+  ex->params[ORC_VAR_S1] = s1_stride;
+
+  func = c->exec;
+  func (ex);
+}
+#endif
+
+
+/* video_orc_planar_chroma_420_422 */
+#ifdef DISABLE_ORC
+void
+video_orc_planar_chroma_420_422 (guint8 * ORC_RESTRICT d1, int d1_stride,
+    guint8 * ORC_RESTRICT d2, int d2_stride, const guint8 * ORC_RESTRICT s1,
+    int s1_stride, int n, int m)
+{
+  int i;
+  int j;
+  orc_int8 *ORC_RESTRICT ptr0;
+  orc_int8 *ORC_RESTRICT ptr1;
+  const orc_int8 *ORC_RESTRICT ptr4;
+  orc_int8 var32;
+  orc_int8 var33;
+  orc_int8 var34;
+  orc_int8 var35;
+
+  for (j = 0; j < m; j++) {
+    ptr0 = ORC_PTR_OFFSET (d1, d1_stride * j);
+    ptr1 = ORC_PTR_OFFSET (d2, d2_stride * j);
+    ptr4 = ORC_PTR_OFFSET (s1, s1_stride * j);
+
+
+    for (i = 0; i < n; i++) {
+      /* 0: loadb */
+      var32 = ptr4[i];
+      /* 1: copyb */
+      var33 = var32;
+      /* 2: storeb */
+      ptr0[i] = var33;
+      /* 3: loadb */
+      var34 = ptr4[i];
+      /* 4: copyb */
+      var35 = var34;
+      /* 5: storeb */
+      ptr1[i] = var35;
+    }
+  }
+
+}
+
+#else
+static void
+_backup_video_orc_planar_chroma_420_422 (OrcExecutor * ORC_RESTRICT ex)
+{
+  int i;
+  int j;
+  int n = ex->n;
+  int m = ex->params[ORC_VAR_A1];
+  orc_int8 *ORC_RESTRICT ptr0;
+  orc_int8 *ORC_RESTRICT ptr1;
+  const orc_int8 *ORC_RESTRICT ptr4;
+  orc_int8 var32;
+  orc_int8 var33;
+  orc_int8 var34;
+  orc_int8 var35;
+
+  for (j = 0; j < m; j++) {
+    ptr0 = ORC_PTR_OFFSET (ex->arrays[0], ex->params[0] * j);
+    ptr1 = ORC_PTR_OFFSET (ex->arrays[1], ex->params[1] * j);
+    ptr4 = ORC_PTR_OFFSET (ex->arrays[4], ex->params[4] * j);
+
+
+    for (i = 0; i < n; i++) {
+      /* 0: loadb */
+      var32 = ptr4[i];
+      /* 1: copyb */
+      var33 = var32;
+      /* 2: storeb */
+      ptr0[i] = var33;
+      /* 3: loadb */
+      var34 = ptr4[i];
+      /* 4: copyb */
+      var35 = var34;
+      /* 5: storeb */
+      ptr1[i] = var35;
+    }
+  }
+
+}
+
+void
+video_orc_planar_chroma_420_422 (guint8 * ORC_RESTRICT d1, int d1_stride,
+    guint8 * ORC_RESTRICT d2, int d2_stride, const guint8 * ORC_RESTRICT s1,
+    int s1_stride, int n, int m)
+{
+  OrcExecutor _ex, *ex = &_ex;
+  static volatile int p_inited = 0;
+  static OrcCode *c = 0;
+  void (*func) (OrcExecutor *);
+
+  if (!p_inited) {
+    orc_once_mutex_lock ();
+    if (!p_inited) {
+      OrcProgram *p;
+
+#if 1
+      static const orc_uint8 bc[] = {
+        1, 7, 9, 31, 118, 105, 100, 101, 111, 95, 111, 114, 99, 95, 112, 108,
+        97, 110, 97, 114, 95, 99, 104, 114, 111, 109, 97, 95, 52, 50, 48, 95,
+        52, 50, 50, 11, 1, 1, 11, 1, 1, 12, 1, 1, 42, 0, 4, 42,
+        1, 4, 2, 0,
+      };
+      p = orc_program_new_from_static_bytecode (bc);
+      orc_program_set_backup_function (p,
+          _backup_video_orc_planar_chroma_420_422);
+#else
+      p = orc_program_new ();
+      orc_program_set_2d (p);
+      orc_program_set_name (p, "video_orc_planar_chroma_420_422");
+      orc_program_set_backup_function (p,
+          _backup_video_orc_planar_chroma_420_422);
+      orc_program_add_destination (p, 1, "d1");
+      orc_program_add_destination (p, 1, "d2");
+      orc_program_add_source (p, 1, "s1");
+
+      orc_program_append_2 (p, "copyb", 0, ORC_VAR_D1, ORC_VAR_S1, ORC_VAR_D1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "copyb", 0, ORC_VAR_D2, ORC_VAR_S1, ORC_VAR_D1,
+          ORC_VAR_D1);
+#endif
+
+      orc_program_compile (p);
+      c = orc_program_take_code (p);
+      orc_program_free (p);
+    }
+    p_inited = TRUE;
+    orc_once_mutex_unlock ();
+  }
+  ex->arrays[ORC_VAR_A2] = c;
+  ex->program = 0;
+
+  ex->n = n;
+  ORC_EXECUTOR_M (ex) = m;
+  ex->arrays[ORC_VAR_D1] = d1;
+  ex->params[ORC_VAR_D1] = d1_stride;
+  ex->arrays[ORC_VAR_D2] = d2;
+  ex->params[ORC_VAR_D2] = d2_stride;
+  ex->arrays[ORC_VAR_S1] = (void *) s1;
+  ex->params[ORC_VAR_S1] = s1_stride;
+
+  func = c->exec;
+  func (ex);
+}
+#endif
+
+
+/* video_orc_planar_chroma_420_444 */
+#ifdef DISABLE_ORC
+void
+video_orc_planar_chroma_420_444 (guint8 * ORC_RESTRICT d1, int d1_stride,
+    guint8 * ORC_RESTRICT d2, int d2_stride, const guint8 * ORC_RESTRICT s1,
+    int s1_stride, int n, int m)
+{
+  int i;
+  int j;
+  orc_union16 *ORC_RESTRICT ptr0;
+  orc_union16 *ORC_RESTRICT ptr1;
+  const orc_int8 *ORC_RESTRICT ptr4;
+  orc_int8 var33;
+  orc_union16 var34;
+
+  for (j = 0; j < m; j++) {
+    ptr0 = ORC_PTR_OFFSET (d1, d1_stride * j);
+    ptr1 = ORC_PTR_OFFSET (d2, d2_stride * j);
+    ptr4 = ORC_PTR_OFFSET (s1, s1_stride * j);
+
+
+    for (i = 0; i < n; i++) {
+      /* 0: loadb */
+      var33 = ptr4[i];
+      /* 1: splatbw */
+      var34.i = ((var33 & 0xff) << 8) | (var33 & 0xff);
+      /* 2: storew */
+      ptr0[i] = var34;
+      /* 3: storew */
+      ptr1[i] = var34;
+    }
+  }
+
+}
+
+#else
+static void
+_backup_video_orc_planar_chroma_420_444 (OrcExecutor * ORC_RESTRICT ex)
+{
+  int i;
+  int j;
+  int n = ex->n;
+  int m = ex->params[ORC_VAR_A1];
+  orc_union16 *ORC_RESTRICT ptr0;
+  orc_union16 *ORC_RESTRICT ptr1;
+  const orc_int8 *ORC_RESTRICT ptr4;
+  orc_int8 var33;
+  orc_union16 var34;
+
+  for (j = 0; j < m; j++) {
+    ptr0 = ORC_PTR_OFFSET (ex->arrays[0], ex->params[0] * j);
+    ptr1 = ORC_PTR_OFFSET (ex->arrays[1], ex->params[1] * j);
+    ptr4 = ORC_PTR_OFFSET (ex->arrays[4], ex->params[4] * j);
+
+
+    for (i = 0; i < n; i++) {
+      /* 0: loadb */
+      var33 = ptr4[i];
+      /* 1: splatbw */
+      var34.i = ((var33 & 0xff) << 8) | (var33 & 0xff);
+      /* 2: storew */
+      ptr0[i] = var34;
+      /* 3: storew */
+      ptr1[i] = var34;
+    }
+  }
+
+}
+
+void
+video_orc_planar_chroma_420_444 (guint8 * ORC_RESTRICT d1, int d1_stride,
+    guint8 * ORC_RESTRICT d2, int d2_stride, const guint8 * ORC_RESTRICT s1,
+    int s1_stride, int n, int m)
+{
+  OrcExecutor _ex, *ex = &_ex;
+  static volatile int p_inited = 0;
+  static OrcCode *c = 0;
+  void (*func) (OrcExecutor *);
+
+  if (!p_inited) {
+    orc_once_mutex_lock ();
+    if (!p_inited) {
+      OrcProgram *p;
+
+#if 1
+      static const orc_uint8 bc[] = {
+        1, 7, 9, 31, 118, 105, 100, 101, 111, 95, 111, 114, 99, 95, 112, 108,
+        97, 110, 97, 114, 95, 99, 104, 114, 111, 109, 97, 95, 52, 50, 48, 95,
+        52, 52, 52, 11, 2, 2, 11, 2, 2, 12, 1, 1, 20, 2, 151, 32,
+        4, 97, 0, 32, 97, 1, 32, 2, 0,
+      };
+      p = orc_program_new_from_static_bytecode (bc);
+      orc_program_set_backup_function (p,
+          _backup_video_orc_planar_chroma_420_444);
+#else
+      p = orc_program_new ();
+      orc_program_set_2d (p);
+      orc_program_set_name (p, "video_orc_planar_chroma_420_444");
+      orc_program_set_backup_function (p,
+          _backup_video_orc_planar_chroma_420_444);
+      orc_program_add_destination (p, 2, "d1");
+      orc_program_add_destination (p, 2, "d2");
+      orc_program_add_source (p, 1, "s1");
+      orc_program_add_temporary (p, 2, "t1");
+
+      orc_program_append_2 (p, "splatbw", 0, ORC_VAR_T1, ORC_VAR_S1, ORC_VAR_D1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "storew", 0, ORC_VAR_D1, ORC_VAR_T1, ORC_VAR_D1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "storew", 0, ORC_VAR_D2, ORC_VAR_T1, ORC_VAR_D1,
+          ORC_VAR_D1);
+#endif
+
+      orc_program_compile (p);
+      c = orc_program_take_code (p);
+      orc_program_free (p);
+    }
+    p_inited = TRUE;
+    orc_once_mutex_unlock ();
+  }
+  ex->arrays[ORC_VAR_A2] = c;
+  ex->program = 0;
+
+  ex->n = n;
+  ORC_EXECUTOR_M (ex) = m;
+  ex->arrays[ORC_VAR_D1] = d1;
+  ex->params[ORC_VAR_D1] = d1_stride;
+  ex->arrays[ORC_VAR_D2] = d2;
+  ex->params[ORC_VAR_D2] = d2_stride;
+  ex->arrays[ORC_VAR_S1] = (void *) s1;
+  ex->params[ORC_VAR_S1] = s1_stride;
+
+  func = c->exec;
+  func (ex);
+}
+#endif
+
+
+/* video_orc_planar_chroma_422_444 */
+#ifdef DISABLE_ORC
+void
+video_orc_planar_chroma_422_444 (guint8 * ORC_RESTRICT d1, int d1_stride,
+    const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m)
+{
+  int i;
+  int j;
+  orc_union16 *ORC_RESTRICT ptr0;
+  const orc_int8 *ORC_RESTRICT ptr4;
+  orc_int8 var33;
+  orc_union16 var34;
+
+  for (j = 0; j < m; j++) {
+    ptr0 = ORC_PTR_OFFSET (d1, d1_stride * j);
+    ptr4 = ORC_PTR_OFFSET (s1, s1_stride * j);
+
+
+    for (i = 0; i < n; i++) {
+      /* 0: loadb */
+      var33 = ptr4[i];
+      /* 1: splatbw */
+      var34.i = ((var33 & 0xff) << 8) | (var33 & 0xff);
+      /* 2: storew */
+      ptr0[i] = var34;
+    }
+  }
+
+}
+
+#else
+static void
+_backup_video_orc_planar_chroma_422_444 (OrcExecutor * ORC_RESTRICT ex)
+{
+  int i;
+  int j;
+  int n = ex->n;
+  int m = ex->params[ORC_VAR_A1];
+  orc_union16 *ORC_RESTRICT ptr0;
+  const orc_int8 *ORC_RESTRICT ptr4;
+  orc_int8 var33;
+  orc_union16 var34;
+
+  for (j = 0; j < m; j++) {
+    ptr0 = ORC_PTR_OFFSET (ex->arrays[0], ex->params[0] * j);
+    ptr4 = ORC_PTR_OFFSET (ex->arrays[4], ex->params[4] * j);
+
+
+    for (i = 0; i < n; i++) {
+      /* 0: loadb */
+      var33 = ptr4[i];
+      /* 1: splatbw */
+      var34.i = ((var33 & 0xff) << 8) | (var33 & 0xff);
+      /* 2: storew */
+      ptr0[i] = var34;
+    }
+  }
+
+}
+
+void
+video_orc_planar_chroma_422_444 (guint8 * ORC_RESTRICT d1, int d1_stride,
+    const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m)
+{
+  OrcExecutor _ex, *ex = &_ex;
+  static volatile int p_inited = 0;
+  static OrcCode *c = 0;
+  void (*func) (OrcExecutor *);
+
+  if (!p_inited) {
+    orc_once_mutex_lock ();
+    if (!p_inited) {
+      OrcProgram *p;
+
+#if 1
+      static const orc_uint8 bc[] = {
+        1, 7, 9, 31, 118, 105, 100, 101, 111, 95, 111, 114, 99, 95, 112, 108,
+        97, 110, 97, 114, 95, 99, 104, 114, 111, 109, 97, 95, 52, 50, 50, 95,
+        52, 52, 52, 11, 2, 2, 12, 1, 1, 20, 2, 151, 32, 4, 97, 0,
+        32, 2, 0,
+      };
+      p = orc_program_new_from_static_bytecode (bc);
+      orc_program_set_backup_function (p,
+          _backup_video_orc_planar_chroma_422_444);
+#else
+      p = orc_program_new ();
+      orc_program_set_2d (p);
+      orc_program_set_name (p, "video_orc_planar_chroma_422_444");
+      orc_program_set_backup_function (p,
+          _backup_video_orc_planar_chroma_422_444);
+      orc_program_add_destination (p, 2, "d1");
+      orc_program_add_source (p, 1, "s1");
+      orc_program_add_temporary (p, 2, "t1");
+
+      orc_program_append_2 (p, "splatbw", 0, ORC_VAR_T1, ORC_VAR_S1, ORC_VAR_D1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "storew", 0, ORC_VAR_D1, ORC_VAR_T1, ORC_VAR_D1,
+          ORC_VAR_D1);
+#endif
+
+      orc_program_compile (p);
+      c = orc_program_take_code (p);
+      orc_program_free (p);
+    }
+    p_inited = TRUE;
+    orc_once_mutex_unlock ();
+  }
+  ex->arrays[ORC_VAR_A2] = c;
+  ex->program = 0;
+
+  ex->n = n;
+  ORC_EXECUTOR_M (ex) = m;
+  ex->arrays[ORC_VAR_D1] = d1;
+  ex->params[ORC_VAR_D1] = d1_stride;
+  ex->arrays[ORC_VAR_S1] = (void *) s1;
+  ex->params[ORC_VAR_S1] = s1_stride;
+
+  func = c->exec;
+  func (ex);
+}
+#endif
+
+
+/* video_orc_planar_chroma_444_422 */
+#ifdef DISABLE_ORC
+void
+video_orc_planar_chroma_444_422 (guint8 * ORC_RESTRICT d1, int d1_stride,
+    const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m)
+{
+  int i;
+  int j;
+  orc_int8 *ORC_RESTRICT ptr0;
+  const orc_union16 *ORC_RESTRICT ptr4;
+  orc_union16 var34;
+  orc_int8 var35;
+  orc_int8 var36;
+  orc_int8 var37;
+
+  for (j = 0; j < m; j++) {
+    ptr0 = ORC_PTR_OFFSET (d1, d1_stride * j);
+    ptr4 = ORC_PTR_OFFSET (s1, s1_stride * j);
+
+
+    for (i = 0; i < n; i++) {
+      /* 0: loadw */
+      var34 = ptr4[i];
+      /* 1: splitwb */
+      {
+        orc_union16 _src;
+        _src.i = var34.i;
+        var36 = _src.x2[1];
+        var37 = _src.x2[0];
+      }
+      /* 2: avgub */
+      var35 = ((orc_uint8) var36 + (orc_uint8) var37 + 1) >> 1;
+      /* 3: storeb */
+      ptr0[i] = var35;
+    }
+  }
+
+}
+
+#else
+static void
+_backup_video_orc_planar_chroma_444_422 (OrcExecutor * ORC_RESTRICT ex)
+{
+  int i;
+  int j;
+  int n = ex->n;
+  int m = ex->params[ORC_VAR_A1];
+  orc_int8 *ORC_RESTRICT ptr0;
+  const orc_union16 *ORC_RESTRICT ptr4;
+  orc_union16 var34;
+  orc_int8 var35;
+  orc_int8 var36;
+  orc_int8 var37;
+
+  for (j = 0; j < m; j++) {
+    ptr0 = ORC_PTR_OFFSET (ex->arrays[0], ex->params[0] * j);
+    ptr4 = ORC_PTR_OFFSET (ex->arrays[4], ex->params[4] * j);
+
+
+    for (i = 0; i < n; i++) {
+      /* 0: loadw */
+      var34 = ptr4[i];
+      /* 1: splitwb */
+      {
+        orc_union16 _src;
+        _src.i = var34.i;
+        var36 = _src.x2[1];
+        var37 = _src.x2[0];
+      }
+      /* 2: avgub */
+      var35 = ((orc_uint8) var36 + (orc_uint8) var37 + 1) >> 1;
+      /* 3: storeb */
+      ptr0[i] = var35;
+    }
+  }
+
+}
+
+void
+video_orc_planar_chroma_444_422 (guint8 * ORC_RESTRICT d1, int d1_stride,
+    const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m)
+{
+  OrcExecutor _ex, *ex = &_ex;
+  static volatile int p_inited = 0;
+  static OrcCode *c = 0;
+  void (*func) (OrcExecutor *);
+
+  if (!p_inited) {
+    orc_once_mutex_lock ();
+    if (!p_inited) {
+      OrcProgram *p;
+
+#if 1
+      static const orc_uint8 bc[] = {
+        1, 7, 9, 31, 118, 105, 100, 101, 111, 95, 111, 114, 99, 95, 112, 108,
+        97, 110, 97, 114, 95, 99, 104, 114, 111, 109, 97, 95, 52, 52, 52, 95,
+        52, 50, 50, 11, 1, 1, 12, 2, 2, 20, 1, 20, 1, 199, 32, 33,
+        4, 39, 0, 32, 33, 2, 0,
+      };
+      p = orc_program_new_from_static_bytecode (bc);
+      orc_program_set_backup_function (p,
+          _backup_video_orc_planar_chroma_444_422);
+#else
+      p = orc_program_new ();
+      orc_program_set_2d (p);
+      orc_program_set_name (p, "video_orc_planar_chroma_444_422");
+      orc_program_set_backup_function (p,
+          _backup_video_orc_planar_chroma_444_422);
+      orc_program_add_destination (p, 1, "d1");
+      orc_program_add_source (p, 2, "s1");
+      orc_program_add_temporary (p, 1, "t1");
+      orc_program_add_temporary (p, 1, "t2");
+
+      orc_program_append_2 (p, "splitwb", 0, ORC_VAR_T1, ORC_VAR_T2, ORC_VAR_S1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "avgub", 0, ORC_VAR_D1, ORC_VAR_T1, ORC_VAR_T2,
+          ORC_VAR_D1);
+#endif
+
+      orc_program_compile (p);
+      c = orc_program_take_code (p);
+      orc_program_free (p);
+    }
+    p_inited = TRUE;
+    orc_once_mutex_unlock ();
+  }
+  ex->arrays[ORC_VAR_A2] = c;
+  ex->program = 0;
+
+  ex->n = n;
+  ORC_EXECUTOR_M (ex) = m;
+  ex->arrays[ORC_VAR_D1] = d1;
+  ex->params[ORC_VAR_D1] = d1_stride;
+  ex->arrays[ORC_VAR_S1] = (void *) s1;
+  ex->params[ORC_VAR_S1] = s1_stride;
+
+  func = c->exec;
+  func (ex);
+}
+#endif
+
+
+/* video_orc_planar_chroma_444_420 */
+#ifdef DISABLE_ORC
+void
+video_orc_planar_chroma_444_420 (guint8 * ORC_RESTRICT d1, int d1_stride,
+    const guint8 * ORC_RESTRICT s1, int s1_stride,
+    const guint8 * ORC_RESTRICT s2, int s2_stride, int n, int m)
+{
+  int i;
+  int j;
+  orc_int8 *ORC_RESTRICT ptr0;
+  const orc_union16 *ORC_RESTRICT ptr4;
+  const orc_union16 *ORC_RESTRICT ptr5;
+  orc_union16 var35;
+  orc_union16 var36;
+  orc_int8 var37;
+  orc_union16 var38;
+  orc_int8 var39;
+  orc_int8 var40;
+
+  for (j = 0; j < m; j++) {
+    ptr0 = ORC_PTR_OFFSET (d1, d1_stride * j);
+    ptr4 = ORC_PTR_OFFSET (s1, s1_stride * j);
+    ptr5 = ORC_PTR_OFFSET (s2, s2_stride * j);
+
+
+    for (i = 0; i < n; i++) {
+      /* 0: loadw */
+      var35 = ptr4[i];
+      /* 1: loadw */
+      var36 = ptr5[i];
+      /* 2: avgub */
+      var38.x2[0] =
+          ((orc_uint8) var35.x2[0] + (orc_uint8) var36.x2[0] + 1) >> 1;
+      var38.x2[1] =
+          ((orc_uint8) var35.x2[1] + (orc_uint8) var36.x2[1] + 1) >> 1;
+      /* 3: splitwb */
+      {
+        orc_union16 _src;
+        _src.i = var38.i;
+        var39 = _src.x2[1];
+        var40 = _src.x2[0];
+      }
+      /* 4: avgub */
+      var37 = ((orc_uint8) var39 + (orc_uint8) var40 + 1) >> 1;
+      /* 5: storeb */
+      ptr0[i] = var37;
+    }
+  }
+
+}
+
+#else
+static void
+_backup_video_orc_planar_chroma_444_420 (OrcExecutor * ORC_RESTRICT ex)
+{
+  int i;
+  int j;
+  int n = ex->n;
+  int m = ex->params[ORC_VAR_A1];
+  orc_int8 *ORC_RESTRICT ptr0;
+  const orc_union16 *ORC_RESTRICT ptr4;
+  const orc_union16 *ORC_RESTRICT ptr5;
+  orc_union16 var35;
+  orc_union16 var36;
+  orc_int8 var37;
+  orc_union16 var38;
+  orc_int8 var39;
+  orc_int8 var40;
+
+  for (j = 0; j < m; j++) {
+    ptr0 = ORC_PTR_OFFSET (ex->arrays[0], ex->params[0] * j);
+    ptr4 = ORC_PTR_OFFSET (ex->arrays[4], ex->params[4] * j);
+    ptr5 = ORC_PTR_OFFSET (ex->arrays[5], ex->params[5] * j);
+
+
+    for (i = 0; i < n; i++) {
+      /* 0: loadw */
+      var35 = ptr4[i];
+      /* 1: loadw */
+      var36 = ptr5[i];
+      /* 2: avgub */
+      var38.x2[0] =
+          ((orc_uint8) var35.x2[0] + (orc_uint8) var36.x2[0] + 1) >> 1;
+      var38.x2[1] =
+          ((orc_uint8) var35.x2[1] + (orc_uint8) var36.x2[1] + 1) >> 1;
+      /* 3: splitwb */
+      {
+        orc_union16 _src;
+        _src.i = var38.i;
+        var39 = _src.x2[1];
+        var40 = _src.x2[0];
+      }
+      /* 4: avgub */
+      var37 = ((orc_uint8) var39 + (orc_uint8) var40 + 1) >> 1;
+      /* 5: storeb */
+      ptr0[i] = var37;
+    }
+  }
+
+}
+
+void
+video_orc_planar_chroma_444_420 (guint8 * ORC_RESTRICT d1, int d1_stride,
+    const guint8 * ORC_RESTRICT s1, int s1_stride,
+    const guint8 * ORC_RESTRICT s2, int s2_stride, int n, int m)
+{
+  OrcExecutor _ex, *ex = &_ex;
+  static volatile int p_inited = 0;
+  static OrcCode *c = 0;
+  void (*func) (OrcExecutor *);
+
+  if (!p_inited) {
+    orc_once_mutex_lock ();
+    if (!p_inited) {
+      OrcProgram *p;
+
+#if 1
+      static const orc_uint8 bc[] = {
+        1, 7, 9, 31, 118, 105, 100, 101, 111, 95, 111, 114, 99, 95, 112, 108,
+        97, 110, 97, 114, 95, 99, 104, 114, 111, 109, 97, 95, 52, 52, 52, 95,
+        52, 50, 48, 11, 1, 1, 12, 2, 2, 12, 2, 2, 20, 2, 20, 1,
+        20, 1, 21, 1, 39, 32, 4, 5, 199, 33, 34, 32, 39, 0, 33, 34,
+        2, 0,
+      };
+      p = orc_program_new_from_static_bytecode (bc);
+      orc_program_set_backup_function (p,
+          _backup_video_orc_planar_chroma_444_420);
+#else
+      p = orc_program_new ();
+      orc_program_set_2d (p);
+      orc_program_set_name (p, "video_orc_planar_chroma_444_420");
+      orc_program_set_backup_function (p,
+          _backup_video_orc_planar_chroma_444_420);
+      orc_program_add_destination (p, 1, "d1");
+      orc_program_add_source (p, 2, "s1");
+      orc_program_add_source (p, 2, "s2");
+      orc_program_add_temporary (p, 2, "t1");
+      orc_program_add_temporary (p, 1, "t2");
+      orc_program_add_temporary (p, 1, "t3");
+
+      orc_program_append_2 (p, "avgub", 1, ORC_VAR_T1, ORC_VAR_S1, ORC_VAR_S2,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "splitwb", 0, ORC_VAR_T2, ORC_VAR_T3, ORC_VAR_T1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "avgub", 0, ORC_VAR_D1, ORC_VAR_T2, ORC_VAR_T3,
+          ORC_VAR_D1);
+#endif
+
+      orc_program_compile (p);
+      c = orc_program_take_code (p);
+      orc_program_free (p);
+    }
+    p_inited = TRUE;
+    orc_once_mutex_unlock ();
+  }
+  ex->arrays[ORC_VAR_A2] = c;
+  ex->program = 0;
+
+  ex->n = n;
+  ORC_EXECUTOR_M (ex) = m;
+  ex->arrays[ORC_VAR_D1] = d1;
+  ex->params[ORC_VAR_D1] = d1_stride;
+  ex->arrays[ORC_VAR_S1] = (void *) s1;
+  ex->params[ORC_VAR_S1] = s1_stride;
+  ex->arrays[ORC_VAR_S2] = (void *) s2;
+  ex->params[ORC_VAR_S2] = s2_stride;
+
+  func = c->exec;
+  func (ex);
+}
+#endif
+
+
+/* video_orc_planar_chroma_422_420 */
+#ifdef DISABLE_ORC
+void
+video_orc_planar_chroma_422_420 (guint8 * ORC_RESTRICT d1, int d1_stride,
+    const guint8 * ORC_RESTRICT s1, int s1_stride,
+    const guint8 * ORC_RESTRICT s2, int s2_stride, int n, int m)
+{
+  int i;
+  int j;
+  orc_int8 *ORC_RESTRICT ptr0;
+  const orc_int8 *ORC_RESTRICT ptr4;
+  const orc_int8 *ORC_RESTRICT ptr5;
+  orc_int8 var32;
+  orc_int8 var33;
+  orc_int8 var34;
+
+  for (j = 0; j < m; j++) {
+    ptr0 = ORC_PTR_OFFSET (d1, d1_stride * j);
+    ptr4 = ORC_PTR_OFFSET (s1, s1_stride * j);
+    ptr5 = ORC_PTR_OFFSET (s2, s2_stride * j);
+
+
+    for (i = 0; i < n; i++) {
+      /* 0: loadb */
+      var32 = ptr4[i];
+      /* 1: loadb */
+      var33 = ptr5[i];
+      /* 2: avgub */
+      var34 = ((orc_uint8) var32 + (orc_uint8) var33 + 1) >> 1;
+      /* 3: storeb */
+      ptr0[i] = var34;
+    }
+  }
+
+}
+
+#else
+static void
+_backup_video_orc_planar_chroma_422_420 (OrcExecutor * ORC_RESTRICT ex)
+{
+  int i;
+  int j;
+  int n = ex->n;
+  int m = ex->params[ORC_VAR_A1];
+  orc_int8 *ORC_RESTRICT ptr0;
+  const orc_int8 *ORC_RESTRICT ptr4;
+  const orc_int8 *ORC_RESTRICT ptr5;
+  orc_int8 var32;
+  orc_int8 var33;
+  orc_int8 var34;
+
+  for (j = 0; j < m; j++) {
+    ptr0 = ORC_PTR_OFFSET (ex->arrays[0], ex->params[0] * j);
+    ptr4 = ORC_PTR_OFFSET (ex->arrays[4], ex->params[4] * j);
+    ptr5 = ORC_PTR_OFFSET (ex->arrays[5], ex->params[5] * j);
+
+
+    for (i = 0; i < n; i++) {
+      /* 0: loadb */
+      var32 = ptr4[i];
+      /* 1: loadb */
+      var33 = ptr5[i];
+      /* 2: avgub */
+      var34 = ((orc_uint8) var32 + (orc_uint8) var33 + 1) >> 1;
+      /* 3: storeb */
+      ptr0[i] = var34;
+    }
+  }
+
+}
+
+void
+video_orc_planar_chroma_422_420 (guint8 * ORC_RESTRICT d1, int d1_stride,
+    const guint8 * ORC_RESTRICT s1, int s1_stride,
+    const guint8 * ORC_RESTRICT s2, int s2_stride, int n, int m)
+{
+  OrcExecutor _ex, *ex = &_ex;
+  static volatile int p_inited = 0;
+  static OrcCode *c = 0;
+  void (*func) (OrcExecutor *);
+
+  if (!p_inited) {
+    orc_once_mutex_lock ();
+    if (!p_inited) {
+      OrcProgram *p;
+
+#if 1
+      static const orc_uint8 bc[] = {
+        1, 7, 9, 31, 118, 105, 100, 101, 111, 95, 111, 114, 99, 95, 112, 108,
+        97, 110, 97, 114, 95, 99, 104, 114, 111, 109, 97, 95, 52, 50, 50, 95,
+        52, 50, 48, 11, 1, 1, 12, 1, 1, 12, 1, 1, 39, 0, 4, 5,
+        2, 0,
+      };
+      p = orc_program_new_from_static_bytecode (bc);
+      orc_program_set_backup_function (p,
+          _backup_video_orc_planar_chroma_422_420);
+#else
+      p = orc_program_new ();
+      orc_program_set_2d (p);
+      orc_program_set_name (p, "video_orc_planar_chroma_422_420");
+      orc_program_set_backup_function (p,
+          _backup_video_orc_planar_chroma_422_420);
+      orc_program_add_destination (p, 1, "d1");
+      orc_program_add_source (p, 1, "s1");
+      orc_program_add_source (p, 1, "s2");
+
+      orc_program_append_2 (p, "avgub", 0, ORC_VAR_D1, ORC_VAR_S1, ORC_VAR_S2,
+          ORC_VAR_D1);
+#endif
+
+      orc_program_compile (p);
+      c = orc_program_take_code (p);
+      orc_program_free (p);
+    }
+    p_inited = TRUE;
+    orc_once_mutex_unlock ();
+  }
+  ex->arrays[ORC_VAR_A2] = c;
+  ex->program = 0;
+
+  ex->n = n;
+  ORC_EXECUTOR_M (ex) = m;
+  ex->arrays[ORC_VAR_D1] = d1;
+  ex->params[ORC_VAR_D1] = d1_stride;
+  ex->arrays[ORC_VAR_S1] = (void *) s1;
+  ex->params[ORC_VAR_S1] = s1_stride;
+  ex->arrays[ORC_VAR_S2] = (void *) s2;
+  ex->params[ORC_VAR_S2] = s2_stride;
+
+  func = c->exec;
+  func (ex);
+}
+#endif
+
+
+/* video_orc_convert_YUY2_AYUV */
+#ifdef DISABLE_ORC
+void
+video_orc_convert_YUY2_AYUV (guint8 * ORC_RESTRICT d1, int d1_stride,
+    const guint8 * ORC_RESTRICT s1, int s1_stride, int p1, int n, int m)
+{
+  int i;
+  int j;
+  orc_union64 *ORC_RESTRICT ptr0;
+  const orc_union32 *ORC_RESTRICT ptr4;
+  orc_union32 var36;
+  orc_union16 var37;
+  orc_union64 var38;
+  orc_union16 var39;
+  orc_union16 var40;
+  orc_union32 var41;
+  orc_union32 var42;
+
+  for (j = 0; j < m; j++) {
+    ptr0 = ORC_PTR_OFFSET (d1, d1_stride * j);
+    ptr4 = ORC_PTR_OFFSET (s1, s1_stride * j);
+
+    /* 2: loadpb */
+    var37.x2[0] = p1;
+    var37.x2[1] = p1;
+
+    for (i = 0; i < n; i++) {
+      /* 0: loadl */
+      var36 = ptr4[i];
+      /* 1: splitwb */
+      {
+        orc_union16 _src;
+        _src.i = var36.x2[0];
+        var39.x2[0] = _src.x2[1];
+        var40.x2[0] = _src.x2[0];
+      }
+      {
+        orc_union16 _src;
+        _src.i = var36.x2[1];
+        var39.x2[1] = _src.x2[1];
+        var40.x2[1] = _src.x2[0];
+      }
+      /* 3: mergebw */
+      {
+        orc_union16 _dest;
+        _dest.x2[0] = var37.x2[0];
+        _dest.x2[1] = var40.x2[0];
+        var41.x2[0] = _dest.i;
+      }
+      {
+        orc_union16 _dest;
+        _dest.x2[0] = var37.x2[1];
+        _dest.x2[1] = var40.x2[1];
+        var41.x2[1] = _dest.i;
+      }
+      /* 4: mergewl */
+      {
+        orc_union32 _dest;
+        _dest.x2[0] = var39.i;
+        _dest.x2[1] = var39.i;
+        var42.i = _dest.i;
+      }
+      /* 5: mergewl */
+      {
+        orc_union32 _dest;
+        _dest.x2[0] = var41.x2[0];
+        _dest.x2[1] = var42.x2[0];
+        var38.x2[0] = _dest.i;
+      }
+      {
+        orc_union32 _dest;
+        _dest.x2[0] = var41.x2[1];
+        _dest.x2[1] = var42.x2[1];
+        var38.x2[1] = _dest.i;
+      }
+      /* 6: storeq */
+      ptr0[i] = var38;
+    }
+  }
+
+}
+
+#else
+static void
+_backup_video_orc_convert_YUY2_AYUV (OrcExecutor * ORC_RESTRICT ex)
+{
+  int i;
+  int j;
+  int n = ex->n;
+  int m = ex->params[ORC_VAR_A1];
+  orc_union64 *ORC_RESTRICT ptr0;
+  const orc_union32 *ORC_RESTRICT ptr4;
+  orc_union32 var36;
+  orc_union16 var37;
+  orc_union64 var38;
+  orc_union16 var39;
+  orc_union16 var40;
+  orc_union32 var41;
+  orc_union32 var42;
+
+  for (j = 0; j < m; j++) {
+    ptr0 = ORC_PTR_OFFSET (ex->arrays[0], ex->params[0] * j);
+    ptr4 = ORC_PTR_OFFSET (ex->arrays[4], ex->params[4] * j);
+
+    /* 2: loadpb */
+    var37.x2[0] = ex->params[24];
+    var37.x2[1] = ex->params[24];
+
+    for (i = 0; i < n; i++) {
+      /* 0: loadl */
+      var36 = ptr4[i];
+      /* 1: splitwb */
+      {
+        orc_union16 _src;
+        _src.i = var36.x2[0];
+        var39.x2[0] = _src.x2[1];
+        var40.x2[0] = _src.x2[0];
+      }
+      {
+        orc_union16 _src;
+        _src.i = var36.x2[1];
+        var39.x2[1] = _src.x2[1];
+        var40.x2[1] = _src.x2[0];
+      }
+      /* 3: mergebw */
+      {
+        orc_union16 _dest;
+        _dest.x2[0] = var37.x2[0];
+        _dest.x2[1] = var40.x2[0];
+        var41.x2[0] = _dest.i;
+      }
+      {
+        orc_union16 _dest;
+        _dest.x2[0] = var37.x2[1];
+        _dest.x2[1] = var40.x2[1];
+        var41.x2[1] = _dest.i;
+      }
+      /* 4: mergewl */
+      {
+        orc_union32 _dest;
+        _dest.x2[0] = var39.i;
+        _dest.x2[1] = var39.i;
+        var42.i = _dest.i;
+      }
+      /* 5: mergewl */
+      {
+        orc_union32 _dest;
+        _dest.x2[0] = var41.x2[0];
+        _dest.x2[1] = var42.x2[0];
+        var38.x2[0] = _dest.i;
+      }
+      {
+        orc_union32 _dest;
+        _dest.x2[0] = var41.x2[1];
+        _dest.x2[1] = var42.x2[1];
+        var38.x2[1] = _dest.i;
+      }
+      /* 6: storeq */
+      ptr0[i] = var38;
+    }
+  }
+
+}
+
+void
+video_orc_convert_YUY2_AYUV (guint8 * ORC_RESTRICT d1, int d1_stride,
+    const guint8 * ORC_RESTRICT s1, int s1_stride, int p1, int n, int m)
+{
+  OrcExecutor _ex, *ex = &_ex;
+  static volatile int p_inited = 0;
+  static OrcCode *c = 0;
+  void (*func) (OrcExecutor *);
+
+  if (!p_inited) {
+    orc_once_mutex_lock ();
+    if (!p_inited) {
+      OrcProgram *p;
+
+#if 1
+      static const orc_uint8 bc[] = {
+        1, 7, 9, 27, 118, 105, 100, 101, 111, 95, 111, 114, 99, 95, 99, 111,
+        110, 118, 101, 114, 116, 95, 89, 85, 89, 50, 95, 65, 89, 85, 86, 11,
+        8, 8, 12, 4, 4, 16, 1, 20, 2, 20, 2, 20, 4, 20, 4, 21,
+        1, 199, 33, 32, 4, 21, 1, 196, 34, 24, 32, 195, 35, 33, 33, 21,
+        1, 195, 0, 34, 35, 2, 0,
+      };
+      p = orc_program_new_from_static_bytecode (bc);
+      orc_program_set_backup_function (p, _backup_video_orc_convert_YUY2_AYUV);
+#else
+      p = orc_program_new ();
+      orc_program_set_2d (p);
+      orc_program_set_name (p, "video_orc_convert_YUY2_AYUV");
+      orc_program_set_backup_function (p, _backup_video_orc_convert_YUY2_AYUV);
+      orc_program_add_destination (p, 8, "d1");
+      orc_program_add_source (p, 4, "s1");
+      orc_program_add_parameter (p, 1, "p1");
+      orc_program_add_temporary (p, 2, "t1");
+      orc_program_add_temporary (p, 2, "t2");
+      orc_program_add_temporary (p, 4, "t3");
+      orc_program_add_temporary (p, 4, "t4");
+
+      orc_program_append_2 (p, "splitwb", 1, ORC_VAR_T2, ORC_VAR_T1, ORC_VAR_S1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "mergebw", 1, ORC_VAR_T3, ORC_VAR_P1, ORC_VAR_T1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "mergewl", 0, ORC_VAR_T4, ORC_VAR_T2, ORC_VAR_T2,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "mergewl", 1, ORC_VAR_D1, ORC_VAR_T3, ORC_VAR_T4,
+          ORC_VAR_D1);
+#endif
+
+      orc_program_compile (p);
+      c = orc_program_take_code (p);
+      orc_program_free (p);
+    }
+    p_inited = TRUE;
+    orc_once_mutex_unlock ();
+  }
+  ex->arrays[ORC_VAR_A2] = c;
+  ex->program = 0;
+
+  ex->n = n;
+  ORC_EXECUTOR_M (ex) = m;
+  ex->arrays[ORC_VAR_D1] = d1;
+  ex->params[ORC_VAR_D1] = d1_stride;
+  ex->arrays[ORC_VAR_S1] = (void *) s1;
+  ex->params[ORC_VAR_S1] = s1_stride;
+  ex->params[ORC_VAR_P1] = p1;
+
+  func = c->exec;
+  func (ex);
+}
+#endif
+
+
+/* video_orc_convert_UYVY_AYUV */
+#ifdef DISABLE_ORC
+void
+video_orc_convert_UYVY_AYUV (guint8 * ORC_RESTRICT d1, int d1_stride,
+    const guint8 * ORC_RESTRICT s1, int s1_stride, int p1, int n, int m)
+{
+  int i;
+  int j;
+  orc_union64 *ORC_RESTRICT ptr0;
+  const orc_union32 *ORC_RESTRICT ptr4;
+  orc_union32 var36;
+  orc_union16 var37;
+  orc_union64 var38;
+  orc_union16 var39;
+  orc_union16 var40;
+  orc_union32 var41;
+  orc_union32 var42;
+
+  for (j = 0; j < m; j++) {
+    ptr0 = ORC_PTR_OFFSET (d1, d1_stride * j);
+    ptr4 = ORC_PTR_OFFSET (s1, s1_stride * j);
+
+    /* 2: loadpb */
+    var37.x2[0] = p1;
+    var37.x2[1] = p1;
+
+    for (i = 0; i < n; i++) {
+      /* 0: loadl */
+      var36 = ptr4[i];
+      /* 1: splitwb */
+      {
+        orc_union16 _src;
+        _src.i = var36.x2[0];
+        var39.x2[0] = _src.x2[1];
+        var40.x2[0] = _src.x2[0];
+      }
+      {
+        orc_union16 _src;
+        _src.i = var36.x2[1];
+        var39.x2[1] = _src.x2[1];
+        var40.x2[1] = _src.x2[0];
+      }
+      /* 3: mergebw */
+      {
+        orc_union16 _dest;
+        _dest.x2[0] = var37.x2[0];
+        _dest.x2[1] = var39.x2[0];
+        var41.x2[0] = _dest.i;
+      }
+      {
+        orc_union16 _dest;
+        _dest.x2[0] = var37.x2[1];
+        _dest.x2[1] = var39.x2[1];
+        var41.x2[1] = _dest.i;
+      }
+      /* 4: mergewl */
+      {
+        orc_union32 _dest;
+        _dest.x2[0] = var40.i;
+        _dest.x2[1] = var40.i;
+        var42.i = _dest.i;
+      }
+      /* 5: mergewl */
+      {
+        orc_union32 _dest;
+        _dest.x2[0] = var41.x2[0];
+        _dest.x2[1] = var42.x2[0];
+        var38.x2[0] = _dest.i;
+      }
+      {
+        orc_union32 _dest;
+        _dest.x2[0] = var41.x2[1];
+        _dest.x2[1] = var42.x2[1];
+        var38.x2[1] = _dest.i;
+      }
+      /* 6: storeq */
+      ptr0[i] = var38;
+    }
+  }
+
+}
+
+#else
+static void
+_backup_video_orc_convert_UYVY_AYUV (OrcExecutor * ORC_RESTRICT ex)
+{
+  int i;
+  int j;
+  int n = ex->n;
+  int m = ex->params[ORC_VAR_A1];
+  orc_union64 *ORC_RESTRICT ptr0;
+  const orc_union32 *ORC_RESTRICT ptr4;
+  orc_union32 var36;
+  orc_union16 var37;
+  orc_union64 var38;
+  orc_union16 var39;
+  orc_union16 var40;
+  orc_union32 var41;
+  orc_union32 var42;
+
+  for (j = 0; j < m; j++) {
+    ptr0 = ORC_PTR_OFFSET (ex->arrays[0], ex->params[0] * j);
+    ptr4 = ORC_PTR_OFFSET (ex->arrays[4], ex->params[4] * j);
+
+    /* 2: loadpb */
+    var37.x2[0] = ex->params[24];
+    var37.x2[1] = ex->params[24];
+
+    for (i = 0; i < n; i++) {
+      /* 0: loadl */
+      var36 = ptr4[i];
+      /* 1: splitwb */
+      {
+        orc_union16 _src;
+        _src.i = var36.x2[0];
+        var39.x2[0] = _src.x2[1];
+        var40.x2[0] = _src.x2[0];
+      }
+      {
+        orc_union16 _src;
+        _src.i = var36.x2[1];
+        var39.x2[1] = _src.x2[1];
+        var40.x2[1] = _src.x2[0];
+      }
+      /* 3: mergebw */
+      {
+        orc_union16 _dest;
+        _dest.x2[0] = var37.x2[0];
+        _dest.x2[1] = var39.x2[0];
+        var41.x2[0] = _dest.i;
+      }
+      {
+        orc_union16 _dest;
+        _dest.x2[0] = var37.x2[1];
+        _dest.x2[1] = var39.x2[1];
+        var41.x2[1] = _dest.i;
+      }
+      /* 4: mergewl */
+      {
+        orc_union32 _dest;
+        _dest.x2[0] = var40.i;
+        _dest.x2[1] = var40.i;
+        var42.i = _dest.i;
+      }
+      /* 5: mergewl */
+      {
+        orc_union32 _dest;
+        _dest.x2[0] = var41.x2[0];
+        _dest.x2[1] = var42.x2[0];
+        var38.x2[0] = _dest.i;
+      }
+      {
+        orc_union32 _dest;
+        _dest.x2[0] = var41.x2[1];
+        _dest.x2[1] = var42.x2[1];
+        var38.x2[1] = _dest.i;
+      }
+      /* 6: storeq */
+      ptr0[i] = var38;
+    }
+  }
+
+}
+
+void
+video_orc_convert_UYVY_AYUV (guint8 * ORC_RESTRICT d1, int d1_stride,
+    const guint8 * ORC_RESTRICT s1, int s1_stride, int p1, int n, int m)
+{
+  OrcExecutor _ex, *ex = &_ex;
+  static volatile int p_inited = 0;
+  static OrcCode *c = 0;
+  void (*func) (OrcExecutor *);
+
+  if (!p_inited) {
+    orc_once_mutex_lock ();
+    if (!p_inited) {
+      OrcProgram *p;
+
+#if 1
+      static const orc_uint8 bc[] = {
+        1, 7, 9, 27, 118, 105, 100, 101, 111, 95, 111, 114, 99, 95, 99, 111,
+        110, 118, 101, 114, 116, 95, 85, 89, 86, 89, 95, 65, 89, 85, 86, 11,
+        8, 8, 12, 4, 4, 16, 1, 20, 2, 20, 2, 20, 4, 20, 4, 21,
+        1, 199, 32, 33, 4, 21, 1, 196, 34, 24, 32, 195, 35, 33, 33, 21,
+        1, 195, 0, 34, 35, 2, 0,
+      };
+      p = orc_program_new_from_static_bytecode (bc);
+      orc_program_set_backup_function (p, _backup_video_orc_convert_UYVY_AYUV);
+#else
+      p = orc_program_new ();
+      orc_program_set_2d (p);
+      orc_program_set_name (p, "video_orc_convert_UYVY_AYUV");
+      orc_program_set_backup_function (p, _backup_video_orc_convert_UYVY_AYUV);
+      orc_program_add_destination (p, 8, "d1");
+      orc_program_add_source (p, 4, "s1");
+      orc_program_add_parameter (p, 1, "p1");
+      orc_program_add_temporary (p, 2, "t1");
+      orc_program_add_temporary (p, 2, "t2");
+      orc_program_add_temporary (p, 4, "t3");
+      orc_program_add_temporary (p, 4, "t4");
+
+      orc_program_append_2 (p, "splitwb", 1, ORC_VAR_T1, ORC_VAR_T2, ORC_VAR_S1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "mergebw", 1, ORC_VAR_T3, ORC_VAR_P1, ORC_VAR_T1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "mergewl", 0, ORC_VAR_T4, ORC_VAR_T2, ORC_VAR_T2,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "mergewl", 1, ORC_VAR_D1, ORC_VAR_T3, ORC_VAR_T4,
+          ORC_VAR_D1);
+#endif
+
+      orc_program_compile (p);
+      c = orc_program_take_code (p);
+      orc_program_free (p);
+    }
+    p_inited = TRUE;
+    orc_once_mutex_unlock ();
+  }
+  ex->arrays[ORC_VAR_A2] = c;
+  ex->program = 0;
+
+  ex->n = n;
+  ORC_EXECUTOR_M (ex) = m;
+  ex->arrays[ORC_VAR_D1] = d1;
+  ex->params[ORC_VAR_D1] = d1_stride;
+  ex->arrays[ORC_VAR_S1] = (void *) s1;
+  ex->params[ORC_VAR_S1] = s1_stride;
+  ex->params[ORC_VAR_P1] = p1;
+
+  func = c->exec;
+  func (ex);
+}
+#endif
+
+
+/* video_orc_convert_YUY2_Y42B */
+#ifdef DISABLE_ORC
+void
+video_orc_convert_YUY2_Y42B (guint8 * ORC_RESTRICT d1, int d1_stride,
+    guint8 * ORC_RESTRICT d2, int d2_stride, guint8 * ORC_RESTRICT d3,
+    int d3_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m)
+{
+  int i;
+  int j;
+  orc_union16 *ORC_RESTRICT ptr0;
+  orc_int8 *ORC_RESTRICT ptr1;
+  orc_int8 *ORC_RESTRICT ptr2;
+  const orc_union32 *ORC_RESTRICT ptr4;
+  orc_union32 var33;
+  orc_union16 var34;
+  orc_int8 var35;
+  orc_int8 var36;
+  orc_union16 var37;
+
+  for (j = 0; j < m; j++) {
+    ptr0 = ORC_PTR_OFFSET (d1, d1_stride * j);
+    ptr1 = ORC_PTR_OFFSET (d2, d2_stride * j);
+    ptr2 = ORC_PTR_OFFSET (d3, d3_stride * j);
+    ptr4 = ORC_PTR_OFFSET (s1, s1_stride * j);
+
+
+    for (i = 0; i < n; i++) {
+      /* 0: loadl */
+      var33 = ptr4[i];
+      /* 1: splitwb */
+      {
+        orc_union16 _src;
+        _src.i = var33.x2[0];
+        var37.x2[0] = _src.x2[1];
+        var34.x2[0] = _src.x2[0];
+      }
+      {
+        orc_union16 _src;
+        _src.i = var33.x2[1];
+        var37.x2[1] = _src.x2[1];
+        var34.x2[1] = _src.x2[0];
+      }
+      /* 2: storew */
+      ptr0[i] = var34;
+      /* 3: splitwb */
+      {
+        orc_union16 _src;
+        _src.i = var37.i;
+        var35 = _src.x2[1];
+        var36 = _src.x2[0];
+      }
+      /* 4: storeb */
+      ptr2[i] = var35;
+      /* 5: storeb */
+      ptr1[i] = var36;
+    }
+  }
+
+}
+
+#else
+static void
+_backup_video_orc_convert_YUY2_Y42B (OrcExecutor * ORC_RESTRICT ex)
+{
+  int i;
+  int j;
+  int n = ex->n;
+  int m = ex->params[ORC_VAR_A1];
+  orc_union16 *ORC_RESTRICT ptr0;
+  orc_int8 *ORC_RESTRICT ptr1;
+  orc_int8 *ORC_RESTRICT ptr2;
+  const orc_union32 *ORC_RESTRICT ptr4;
+  orc_union32 var33;
+  orc_union16 var34;
+  orc_int8 var35;
+  orc_int8 var36;
+  orc_union16 var37;
+
+  for (j = 0; j < m; j++) {
+    ptr0 = ORC_PTR_OFFSET (ex->arrays[0], ex->params[0] * j);
+    ptr1 = ORC_PTR_OFFSET (ex->arrays[1], ex->params[1] * j);
+    ptr2 = ORC_PTR_OFFSET (ex->arrays[2], ex->params[2] * j);
+    ptr4 = ORC_PTR_OFFSET (ex->arrays[4], ex->params[4] * j);
+
+
+    for (i = 0; i < n; i++) {
+      /* 0: loadl */
+      var33 = ptr4[i];
+      /* 1: splitwb */
+      {
+        orc_union16 _src;
+        _src.i = var33.x2[0];
+        var37.x2[0] = _src.x2[1];
+        var34.x2[0] = _src.x2[0];
+      }
+      {
+        orc_union16 _src;
+        _src.i = var33.x2[1];
+        var37.x2[1] = _src.x2[1];
+        var34.x2[1] = _src.x2[0];
+      }
+      /* 2: storew */
+      ptr0[i] = var34;
+      /* 3: splitwb */
+      {
+        orc_union16 _src;
+        _src.i = var37.i;
+        var35 = _src.x2[1];
+        var36 = _src.x2[0];
+      }
+      /* 4: storeb */
+      ptr2[i] = var35;
+      /* 5: storeb */
+      ptr1[i] = var36;
+    }
+  }
+
+}
+
+void
+video_orc_convert_YUY2_Y42B (guint8 * ORC_RESTRICT d1, int d1_stride,
+    guint8 * ORC_RESTRICT d2, int d2_stride, guint8 * ORC_RESTRICT d3,
+    int d3_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m)
+{
+  OrcExecutor _ex, *ex = &_ex;
+  static volatile int p_inited = 0;
+  static OrcCode *c = 0;
+  void (*func) (OrcExecutor *);
+
+  if (!p_inited) {
+    orc_once_mutex_lock ();
+    if (!p_inited) {
+      OrcProgram *p;
+
+#if 1
+      static const orc_uint8 bc[] = {
+        1, 7, 9, 27, 118, 105, 100, 101, 111, 95, 111, 114, 99, 95, 99, 111,
+        110, 118, 101, 114, 116, 95, 89, 85, 89, 50, 95, 89, 52, 50, 66, 11,
+        2, 2, 11, 1, 1, 11, 1, 1, 12, 4, 4, 20, 2, 21, 1, 199,
+        32, 0, 4, 199, 2, 1, 32, 2, 0,
+      };
+      p = orc_program_new_from_static_bytecode (bc);
+      orc_program_set_backup_function (p, _backup_video_orc_convert_YUY2_Y42B);
+#else
+      p = orc_program_new ();
+      orc_program_set_2d (p);
+      orc_program_set_name (p, "video_orc_convert_YUY2_Y42B");
+      orc_program_set_backup_function (p, _backup_video_orc_convert_YUY2_Y42B);
+      orc_program_add_destination (p, 2, "d1");
+      orc_program_add_destination (p, 1, "d2");
+      orc_program_add_destination (p, 1, "d3");
+      orc_program_add_source (p, 4, "s1");
+      orc_program_add_temporary (p, 2, "t1");
+
+      orc_program_append_2 (p, "splitwb", 1, ORC_VAR_T1, ORC_VAR_D1, ORC_VAR_S1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "splitwb", 0, ORC_VAR_D3, ORC_VAR_D2, ORC_VAR_T1,
+          ORC_VAR_D1);
+#endif
+
+      orc_program_compile (p);
+      c = orc_program_take_code (p);
+      orc_program_free (p);
+    }
+    p_inited = TRUE;
+    orc_once_mutex_unlock ();
+  }
+  ex->arrays[ORC_VAR_A2] = c;
+  ex->program = 0;
+
+  ex->n = n;
+  ORC_EXECUTOR_M (ex) = m;
+  ex->arrays[ORC_VAR_D1] = d1;
+  ex->params[ORC_VAR_D1] = d1_stride;
+  ex->arrays[ORC_VAR_D2] = d2;
+  ex->params[ORC_VAR_D2] = d2_stride;
+  ex->arrays[ORC_VAR_D3] = d3;
+  ex->params[ORC_VAR_D3] = d3_stride;
+  ex->arrays[ORC_VAR_S1] = (void *) s1;
+  ex->params[ORC_VAR_S1] = s1_stride;
+
+  func = c->exec;
+  func (ex);
+}
+#endif
+
+
+/* video_orc_convert_UYVY_Y42B */
+#ifdef DISABLE_ORC
+void
+video_orc_convert_UYVY_Y42B (guint8 * ORC_RESTRICT d1, int d1_stride,
+    guint8 * ORC_RESTRICT d2, int d2_stride, guint8 * ORC_RESTRICT d3,
+    int d3_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m)
+{
+  int i;
+  int j;
+  orc_union16 *ORC_RESTRICT ptr0;
+  orc_int8 *ORC_RESTRICT ptr1;
+  orc_int8 *ORC_RESTRICT ptr2;
+  const orc_union32 *ORC_RESTRICT ptr4;
+  orc_union32 var33;
+  orc_union16 var34;
+  orc_int8 var35;
+  orc_int8 var36;
+  orc_union16 var37;
+
+  for (j = 0; j < m; j++) {
+    ptr0 = ORC_PTR_OFFSET (d1, d1_stride * j);
+    ptr1 = ORC_PTR_OFFSET (d2, d2_stride * j);
+    ptr2 = ORC_PTR_OFFSET (d3, d3_stride * j);
+    ptr4 = ORC_PTR_OFFSET (s1, s1_stride * j);
+
+
+    for (i = 0; i < n; i++) {
+      /* 0: loadl */
+      var33 = ptr4[i];
+      /* 1: splitwb */
+      {
+        orc_union16 _src;
+        _src.i = var33.x2[0];
+        var34.x2[0] = _src.x2[1];
+        var37.x2[0] = _src.x2[0];
+      }
+      {
+        orc_union16 _src;
+        _src.i = var33.x2[1];
+        var34.x2[1] = _src.x2[1];
+        var37.x2[1] = _src.x2[0];
+      }
+      /* 2: storew */
+      ptr0[i] = var34;
+      /* 3: splitwb */
+      {
+        orc_union16 _src;
+        _src.i = var37.i;
+        var35 = _src.x2[1];
+        var36 = _src.x2[0];
+      }
+      /* 4: storeb */
+      ptr2[i] = var35;
+      /* 5: storeb */
+      ptr1[i] = var36;
+    }
+  }
+
+}
+
+#else
+static void
+_backup_video_orc_convert_UYVY_Y42B (OrcExecutor * ORC_RESTRICT ex)
+{
+  int i;
+  int j;
+  int n = ex->n;
+  int m = ex->params[ORC_VAR_A1];
+  orc_union16 *ORC_RESTRICT ptr0;
+  orc_int8 *ORC_RESTRICT ptr1;
+  orc_int8 *ORC_RESTRICT ptr2;
+  const orc_union32 *ORC_RESTRICT ptr4;
+  orc_union32 var33;
+  orc_union16 var34;
+  orc_int8 var35;
+  orc_int8 var36;
+  orc_union16 var37;
+
+  for (j = 0; j < m; j++) {
+    ptr0 = ORC_PTR_OFFSET (ex->arrays[0], ex->params[0] * j);
+    ptr1 = ORC_PTR_OFFSET (ex->arrays[1], ex->params[1] * j);
+    ptr2 = ORC_PTR_OFFSET (ex->arrays[2], ex->params[2] * j);
+    ptr4 = ORC_PTR_OFFSET (ex->arrays[4], ex->params[4] * j);
+
+
+    for (i = 0; i < n; i++) {
+      /* 0: loadl */
+      var33 = ptr4[i];
+      /* 1: splitwb */
+      {
+        orc_union16 _src;
+        _src.i = var33.x2[0];
+        var34.x2[0] = _src.x2[1];
+        var37.x2[0] = _src.x2[0];
+      }
+      {
+        orc_union16 _src;
+        _src.i = var33.x2[1];
+        var34.x2[1] = _src.x2[1];
+        var37.x2[1] = _src.x2[0];
+      }
+      /* 2: storew */
+      ptr0[i] = var34;
+      /* 3: splitwb */
+      {
+        orc_union16 _src;
+        _src.i = var37.i;
+        var35 = _src.x2[1];
+        var36 = _src.x2[0];
+      }
+      /* 4: storeb */
+      ptr2[i] = var35;
+      /* 5: storeb */
+      ptr1[i] = var36;
+    }
+  }
+
+}
+
+void
+video_orc_convert_UYVY_Y42B (guint8 * ORC_RESTRICT d1, int d1_stride,
+    guint8 * ORC_RESTRICT d2, int d2_stride, guint8 * ORC_RESTRICT d3,
+    int d3_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m)
+{
+  OrcExecutor _ex, *ex = &_ex;
+  static volatile int p_inited = 0;
+  static OrcCode *c = 0;
+  void (*func) (OrcExecutor *);
+
+  if (!p_inited) {
+    orc_once_mutex_lock ();
+    if (!p_inited) {
+      OrcProgram *p;
+
+#if 1
+      static const orc_uint8 bc[] = {
+        1, 7, 9, 27, 118, 105, 100, 101, 111, 95, 111, 114, 99, 95, 99, 111,
+        110, 118, 101, 114, 116, 95, 85, 89, 86, 89, 95, 89, 52, 50, 66, 11,
+        2, 2, 11, 1, 1, 11, 1, 1, 12, 4, 4, 20, 2, 21, 1, 199,
+        0, 32, 4, 199, 2, 1, 32, 2, 0,
+      };
+      p = orc_program_new_from_static_bytecode (bc);
+      orc_program_set_backup_function (p, _backup_video_orc_convert_UYVY_Y42B);
+#else
+      p = orc_program_new ();
+      orc_program_set_2d (p);
+      orc_program_set_name (p, "video_orc_convert_UYVY_Y42B");
+      orc_program_set_backup_function (p, _backup_video_orc_convert_UYVY_Y42B);
+      orc_program_add_destination (p, 2, "d1");
+      orc_program_add_destination (p, 1, "d2");
+      orc_program_add_destination (p, 1, "d3");
+      orc_program_add_source (p, 4, "s1");
+      orc_program_add_temporary (p, 2, "t1");
+
+      orc_program_append_2 (p, "splitwb", 1, ORC_VAR_D1, ORC_VAR_T1, ORC_VAR_S1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "splitwb", 0, ORC_VAR_D3, ORC_VAR_D2, ORC_VAR_T1,
+          ORC_VAR_D1);
+#endif
+
+      orc_program_compile (p);
+      c = orc_program_take_code (p);
+      orc_program_free (p);
+    }
+    p_inited = TRUE;
+    orc_once_mutex_unlock ();
+  }
+  ex->arrays[ORC_VAR_A2] = c;
+  ex->program = 0;
+
+  ex->n = n;
+  ORC_EXECUTOR_M (ex) = m;
+  ex->arrays[ORC_VAR_D1] = d1;
+  ex->params[ORC_VAR_D1] = d1_stride;
+  ex->arrays[ORC_VAR_D2] = d2;
+  ex->params[ORC_VAR_D2] = d2_stride;
+  ex->arrays[ORC_VAR_D3] = d3;
+  ex->params[ORC_VAR_D3] = d3_stride;
+  ex->arrays[ORC_VAR_S1] = (void *) s1;
+  ex->params[ORC_VAR_S1] = s1_stride;
+
+  func = c->exec;
+  func (ex);
+}
+#endif
+
+
+/* video_orc_convert_YUY2_Y444 */
+#ifdef DISABLE_ORC
+void
+video_orc_convert_YUY2_Y444 (guint8 * ORC_RESTRICT d1, int d1_stride,
+    guint8 * ORC_RESTRICT d2, int d2_stride, guint8 * ORC_RESTRICT d3,
+    int d3_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m)
+{
+  int i;
+  int j;
+  orc_union16 *ORC_RESTRICT ptr0;
+  orc_union16 *ORC_RESTRICT ptr1;
+  orc_union16 *ORC_RESTRICT ptr2;
+  const orc_union32 *ORC_RESTRICT ptr4;
+  orc_union32 var35;
+  orc_union16 var36;
+  orc_union16 var37;
+  orc_union16 var38;
+  orc_union16 var39;
+  orc_int8 var40;
+  orc_int8 var41;
+
+  for (j = 0; j < m; j++) {
+    ptr0 = ORC_PTR_OFFSET (d1, d1_stride * j);
+    ptr1 = ORC_PTR_OFFSET (d2, d2_stride * j);
+    ptr2 = ORC_PTR_OFFSET (d3, d3_stride * j);
+    ptr4 = ORC_PTR_OFFSET (s1, s1_stride * j);
+
+
+    for (i = 0; i < n; i++) {
+      /* 0: loadl */
+      var35 = ptr4[i];
+      /* 1: splitwb */
+      {
+        orc_union16 _src;
+        _src.i = var35.x2[0];
+        var39.x2[0] = _src.x2[1];
+        var36.x2[0] = _src.x2[0];
+      }
+      {
+        orc_union16 _src;
+        _src.i = var35.x2[1];
+        var39.x2[1] = _src.x2[1];
+        var36.x2[1] = _src.x2[0];
+      }
+      /* 2: storew */
+      ptr0[i] = var36;
+      /* 3: splitwb */
+      {
+        orc_union16 _src;
+        _src.i = var39.i;
+        var40 = _src.x2[1];
+        var41 = _src.x2[0];
+      }
+      /* 4: splatbw */
+      var37.i = ((var41 & 0xff) << 8) | (var41 & 0xff);
+      /* 5: storew */
+      ptr1[i] = var37;
+      /* 6: splatbw */
+      var38.i = ((var40 & 0xff) << 8) | (var40 & 0xff);
+      /* 7: storew */
+      ptr2[i] = var38;
+    }
+  }
+
+}
+
+#else
+static void
+_backup_video_orc_convert_YUY2_Y444 (OrcExecutor * ORC_RESTRICT ex)
+{
+  int i;
+  int j;
+  int n = ex->n;
+  int m = ex->params[ORC_VAR_A1];
+  orc_union16 *ORC_RESTRICT ptr0;
+  orc_union16 *ORC_RESTRICT ptr1;
+  orc_union16 *ORC_RESTRICT ptr2;
+  const orc_union32 *ORC_RESTRICT ptr4;
+  orc_union32 var35;
+  orc_union16 var36;
+  orc_union16 var37;
+  orc_union16 var38;
+  orc_union16 var39;
+  orc_int8 var40;
+  orc_int8 var41;
+
+  for (j = 0; j < m; j++) {
+    ptr0 = ORC_PTR_OFFSET (ex->arrays[0], ex->params[0] * j);
+    ptr1 = ORC_PTR_OFFSET (ex->arrays[1], ex->params[1] * j);
+    ptr2 = ORC_PTR_OFFSET (ex->arrays[2], ex->params[2] * j);
+    ptr4 = ORC_PTR_OFFSET (ex->arrays[4], ex->params[4] * j);
+
+
+    for (i = 0; i < n; i++) {
+      /* 0: loadl */
+      var35 = ptr4[i];
+      /* 1: splitwb */
+      {
+        orc_union16 _src;
+        _src.i = var35.x2[0];
+        var39.x2[0] = _src.x2[1];
+        var36.x2[0] = _src.x2[0];
+      }
+      {
+        orc_union16 _src;
+        _src.i = var35.x2[1];
+        var39.x2[1] = _src.x2[1];
+        var36.x2[1] = _src.x2[0];
+      }
+      /* 2: storew */
+      ptr0[i] = var36;
+      /* 3: splitwb */
+      {
+        orc_union16 _src;
+        _src.i = var39.i;
+        var40 = _src.x2[1];
+        var41 = _src.x2[0];
+      }
+      /* 4: splatbw */
+      var37.i = ((var41 & 0xff) << 8) | (var41 & 0xff);
+      /* 5: storew */
+      ptr1[i] = var37;
+      /* 6: splatbw */
+      var38.i = ((var40 & 0xff) << 8) | (var40 & 0xff);
+      /* 7: storew */
+      ptr2[i] = var38;
+    }
+  }
+
+}
+
+void
+video_orc_convert_YUY2_Y444 (guint8 * ORC_RESTRICT d1, int d1_stride,
+    guint8 * ORC_RESTRICT d2, int d2_stride, guint8 * ORC_RESTRICT d3,
+    int d3_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m)
+{
+  OrcExecutor _ex, *ex = &_ex;
+  static volatile int p_inited = 0;
+  static OrcCode *c = 0;
+  void (*func) (OrcExecutor *);
+
+  if (!p_inited) {
+    orc_once_mutex_lock ();
+    if (!p_inited) {
+      OrcProgram *p;
+
+#if 1
+      static const orc_uint8 bc[] = {
+        1, 7, 9, 27, 118, 105, 100, 101, 111, 95, 111, 114, 99, 95, 99, 111,
+        110, 118, 101, 114, 116, 95, 89, 85, 89, 50, 95, 89, 52, 52, 52, 11,
+        2, 2, 11, 2, 2, 11, 2, 2, 12, 4, 4, 20, 2, 20, 1, 20,
+        1, 21, 1, 199, 32, 0, 4, 199, 34, 33, 32, 151, 1, 33, 151, 2,
+        34, 2, 0,
+      };
+      p = orc_program_new_from_static_bytecode (bc);
+      orc_program_set_backup_function (p, _backup_video_orc_convert_YUY2_Y444);
+#else
+      p = orc_program_new ();
+      orc_program_set_2d (p);
+      orc_program_set_name (p, "video_orc_convert_YUY2_Y444");
+      orc_program_set_backup_function (p, _backup_video_orc_convert_YUY2_Y444);
+      orc_program_add_destination (p, 2, "d1");
+      orc_program_add_destination (p, 2, "d2");
+      orc_program_add_destination (p, 2, "d3");
+      orc_program_add_source (p, 4, "s1");
+      orc_program_add_temporary (p, 2, "t1");
+      orc_program_add_temporary (p, 1, "t2");
+      orc_program_add_temporary (p, 1, "t3");
+
+      orc_program_append_2 (p, "splitwb", 1, ORC_VAR_T1, ORC_VAR_D1, ORC_VAR_S1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "splitwb", 0, ORC_VAR_T3, ORC_VAR_T2, ORC_VAR_T1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "splatbw", 0, ORC_VAR_D2, ORC_VAR_T2, ORC_VAR_D1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "splatbw", 0, ORC_VAR_D3, ORC_VAR_T3, ORC_VAR_D1,
+          ORC_VAR_D1);
+#endif
+
+      orc_program_compile (p);
+      c = orc_program_take_code (p);
+      orc_program_free (p);
+    }
+    p_inited = TRUE;
+    orc_once_mutex_unlock ();
+  }
+  ex->arrays[ORC_VAR_A2] = c;
+  ex->program = 0;
+
+  ex->n = n;
+  ORC_EXECUTOR_M (ex) = m;
+  ex->arrays[ORC_VAR_D1] = d1;
+  ex->params[ORC_VAR_D1] = d1_stride;
+  ex->arrays[ORC_VAR_D2] = d2;
+  ex->params[ORC_VAR_D2] = d2_stride;
+  ex->arrays[ORC_VAR_D3] = d3;
+  ex->params[ORC_VAR_D3] = d3_stride;
+  ex->arrays[ORC_VAR_S1] = (void *) s1;
+  ex->params[ORC_VAR_S1] = s1_stride;
+
+  func = c->exec;
+  func (ex);
+}
+#endif
+
+
+/* video_orc_convert_UYVY_Y444 */
+#ifdef DISABLE_ORC
+void
+video_orc_convert_UYVY_Y444 (guint8 * ORC_RESTRICT d1, int d1_stride,
+    guint8 * ORC_RESTRICT d2, int d2_stride, guint8 * ORC_RESTRICT d3,
+    int d3_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m)
+{
+  int i;
+  int j;
+  orc_union16 *ORC_RESTRICT ptr0;
+  orc_union16 *ORC_RESTRICT ptr1;
+  orc_union16 *ORC_RESTRICT ptr2;
+  const orc_union32 *ORC_RESTRICT ptr4;
+  orc_union32 var35;
+  orc_union16 var36;
+  orc_union16 var37;
+  orc_union16 var38;
+  orc_union16 var39;
+  orc_int8 var40;
+  orc_int8 var41;
+
+  for (j = 0; j < m; j++) {
+    ptr0 = ORC_PTR_OFFSET (d1, d1_stride * j);
+    ptr1 = ORC_PTR_OFFSET (d2, d2_stride * j);
+    ptr2 = ORC_PTR_OFFSET (d3, d3_stride * j);
+    ptr4 = ORC_PTR_OFFSET (s1, s1_stride * j);
+
+
+    for (i = 0; i < n; i++) {
+      /* 0: loadl */
+      var35 = ptr4[i];
+      /* 1: splitwb */
+      {
+        orc_union16 _src;
+        _src.i = var35.x2[0];
+        var36.x2[0] = _src.x2[1];
+        var39.x2[0] = _src.x2[0];
+      }
+      {
+        orc_union16 _src;
+        _src.i = var35.x2[1];
+        var36.x2[1] = _src.x2[1];
+        var39.x2[1] = _src.x2[0];
+      }
+      /* 2: storew */
+      ptr0[i] = var36;
+      /* 3: splitwb */
+      {
+        orc_union16 _src;
+        _src.i = var39.i;
+        var40 = _src.x2[1];
+        var41 = _src.x2[0];
+      }
+      /* 4: splatbw */
+      var37.i = ((var41 & 0xff) << 8) | (var41 & 0xff);
+      /* 5: storew */
+      ptr1[i] = var37;
+      /* 6: splatbw */
+      var38.i = ((var40 & 0xff) << 8) | (var40 & 0xff);
+      /* 7: storew */
+      ptr2[i] = var38;
+    }
+  }
+
+}
+
+#else
+static void
+_backup_video_orc_convert_UYVY_Y444 (OrcExecutor * ORC_RESTRICT ex)
+{
+  int i;
+  int j;
+  int n = ex->n;
+  int m = ex->params[ORC_VAR_A1];
+  orc_union16 *ORC_RESTRICT ptr0;
+  orc_union16 *ORC_RESTRICT ptr1;
+  orc_union16 *ORC_RESTRICT ptr2;
+  const orc_union32 *ORC_RESTRICT ptr4;
+  orc_union32 var35;
+  orc_union16 var36;
+  orc_union16 var37;
+  orc_union16 var38;
+  orc_union16 var39;
+  orc_int8 var40;
+  orc_int8 var41;
+
+  for (j = 0; j < m; j++) {
+    ptr0 = ORC_PTR_OFFSET (ex->arrays[0], ex->params[0] * j);
+    ptr1 = ORC_PTR_OFFSET (ex->arrays[1], ex->params[1] * j);
+    ptr2 = ORC_PTR_OFFSET (ex->arrays[2], ex->params[2] * j);
+    ptr4 = ORC_PTR_OFFSET (ex->arrays[4], ex->params[4] * j);
+
+
+    for (i = 0; i < n; i++) {
+      /* 0: loadl */
+      var35 = ptr4[i];
+      /* 1: splitwb */
+      {
+        orc_union16 _src;
+        _src.i = var35.x2[0];
+        var36.x2[0] = _src.x2[1];
+        var39.x2[0] = _src.x2[0];
+      }
+      {
+        orc_union16 _src;
+        _src.i = var35.x2[1];
+        var36.x2[1] = _src.x2[1];
+        var39.x2[1] = _src.x2[0];
+      }
+      /* 2: storew */
+      ptr0[i] = var36;
+      /* 3: splitwb */
+      {
+        orc_union16 _src;
+        _src.i = var39.i;
+        var40 = _src.x2[1];
+        var41 = _src.x2[0];
+      }
+      /* 4: splatbw */
+      var37.i = ((var41 & 0xff) << 8) | (var41 & 0xff);
+      /* 5: storew */
+      ptr1[i] = var37;
+      /* 6: splatbw */
+      var38.i = ((var40 & 0xff) << 8) | (var40 & 0xff);
+      /* 7: storew */
+      ptr2[i] = var38;
+    }
+  }
+
+}
+
+void
+video_orc_convert_UYVY_Y444 (guint8 * ORC_RESTRICT d1, int d1_stride,
+    guint8 * ORC_RESTRICT d2, int d2_stride, guint8 * ORC_RESTRICT d3,
+    int d3_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m)
+{
+  OrcExecutor _ex, *ex = &_ex;
+  static volatile int p_inited = 0;
+  static OrcCode *c = 0;
+  void (*func) (OrcExecutor *);
+
+  if (!p_inited) {
+    orc_once_mutex_lock ();
+    if (!p_inited) {
+      OrcProgram *p;
+
+#if 1
+      static const orc_uint8 bc[] = {
+        1, 7, 9, 27, 118, 105, 100, 101, 111, 95, 111, 114, 99, 95, 99, 111,
+        110, 118, 101, 114, 116, 95, 85, 89, 86, 89, 95, 89, 52, 52, 52, 11,
+        2, 2, 11, 2, 2, 11, 2, 2, 12, 4, 4, 20, 2, 20, 1, 20,
+        1, 21, 1, 199, 0, 32, 4, 199, 34, 33, 32, 151, 1, 33, 151, 2,
+        34, 2, 0,
+      };
+      p = orc_program_new_from_static_bytecode (bc);
+      orc_program_set_backup_function (p, _backup_video_orc_convert_UYVY_Y444);
+#else
+      p = orc_program_new ();
+      orc_program_set_2d (p);
+      orc_program_set_name (p, "video_orc_convert_UYVY_Y444");
+      orc_program_set_backup_function (p, _backup_video_orc_convert_UYVY_Y444);
+      orc_program_add_destination (p, 2, "d1");
+      orc_program_add_destination (p, 2, "d2");
+      orc_program_add_destination (p, 2, "d3");
+      orc_program_add_source (p, 4, "s1");
+      orc_program_add_temporary (p, 2, "t1");
+      orc_program_add_temporary (p, 1, "t2");
+      orc_program_add_temporary (p, 1, "t3");
+
+      orc_program_append_2 (p, "splitwb", 1, ORC_VAR_D1, ORC_VAR_T1, ORC_VAR_S1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "splitwb", 0, ORC_VAR_T3, ORC_VAR_T2, ORC_VAR_T1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "splatbw", 0, ORC_VAR_D2, ORC_VAR_T2, ORC_VAR_D1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "splatbw", 0, ORC_VAR_D3, ORC_VAR_T3, ORC_VAR_D1,
+          ORC_VAR_D1);
+#endif
+
+      orc_program_compile (p);
+      c = orc_program_take_code (p);
+      orc_program_free (p);
+    }
+    p_inited = TRUE;
+    orc_once_mutex_unlock ();
+  }
+  ex->arrays[ORC_VAR_A2] = c;
+  ex->program = 0;
+
+  ex->n = n;
+  ORC_EXECUTOR_M (ex) = m;
+  ex->arrays[ORC_VAR_D1] = d1;
+  ex->params[ORC_VAR_D1] = d1_stride;
+  ex->arrays[ORC_VAR_D2] = d2;
+  ex->params[ORC_VAR_D2] = d2_stride;
+  ex->arrays[ORC_VAR_D3] = d3;
+  ex->params[ORC_VAR_D3] = d3_stride;
+  ex->arrays[ORC_VAR_S1] = (void *) s1;
+  ex->params[ORC_VAR_S1] = s1_stride;
+
+  func = c->exec;
+  func (ex);
+}
+#endif
+
+
+/* video_orc_convert_UYVY_I420 */
+#ifdef DISABLE_ORC
+void
+video_orc_convert_UYVY_I420 (guint8 * ORC_RESTRICT d1, guint8 * ORC_RESTRICT d2,
+    guint8 * ORC_RESTRICT d3, guint8 * ORC_RESTRICT d4,
+    const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, int n)
+{
+  int i;
+  orc_union16 *ORC_RESTRICT ptr0;
+  orc_union16 *ORC_RESTRICT ptr1;
+  orc_int8 *ORC_RESTRICT ptr2;
+  orc_int8 *ORC_RESTRICT ptr3;
+  const orc_union32 *ORC_RESTRICT ptr4;
+  const orc_union32 *ORC_RESTRICT ptr5;
+  orc_union32 var35;
+  orc_union32 var36;
+  orc_int8 var37;
+  orc_int8 var38;
+  orc_union16 var39;
+  orc_union16 var40;
+  orc_union16 var41;
+  orc_union16 var42;
+  orc_union16 var43;
+
+  ptr0 = (orc_union16 *) d1;
+  ptr1 = (orc_union16 *) d2;
+  ptr2 = (orc_int8 *) d3;
+  ptr3 = (orc_int8 *) d4;
+  ptr4 = (orc_union32 *) s1;
+  ptr5 = (orc_union32 *) s2;
+
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadl */
+    var35 = ptr4[i];
+    /* 1: splitwb */
+    {
+      orc_union16 _src;
+      _src.i = var35.x2[0];
+      var39.x2[0] = _src.x2[1];
+      var40.x2[0] = _src.x2[0];
+    }
+    {
+      orc_union16 _src;
+      _src.i = var35.x2[1];
+      var39.x2[1] = _src.x2[1];
+      var40.x2[1] = _src.x2[0];
+    }
+    /* 2: storew */
+    ptr0[i] = var39;
+    /* 3: loadl */
+    var36 = ptr5[i];
+    /* 4: splitwb */
+    {
+      orc_union16 _src;
+      _src.i = var36.x2[0];
+      var41.x2[0] = _src.x2[1];
+      var42.x2[0] = _src.x2[0];
+    }
+    {
+      orc_union16 _src;
+      _src.i = var36.x2[1];
+      var41.x2[1] = _src.x2[1];
+      var42.x2[1] = _src.x2[0];
+    }
+    /* 5: storew */
+    ptr1[i] = var41;
+    /* 6: avgub */
+    var43.x2[0] = ((orc_uint8) var40.x2[0] + (orc_uint8) var42.x2[0] + 1) >> 1;
+    var43.x2[1] = ((orc_uint8) var40.x2[1] + (orc_uint8) var42.x2[1] + 1) >> 1;
+    /* 7: splitwb */
+    {
+      orc_union16 _src;
+      _src.i = var43.i;
+      var37 = _src.x2[1];
+      var38 = _src.x2[0];
+    }
+    /* 8: storeb */
+    ptr3[i] = var37;
+    /* 9: storeb */
+    ptr2[i] = var38;
+  }
+
+}
+
+#else
+static void
+_backup_video_orc_convert_UYVY_I420 (OrcExecutor * ORC_RESTRICT ex)
+{
+  int i;
+  int n = ex->n;
+  orc_union16 *ORC_RESTRICT ptr0;
+  orc_union16 *ORC_RESTRICT ptr1;
+  orc_int8 *ORC_RESTRICT ptr2;
+  orc_int8 *ORC_RESTRICT ptr3;
+  const orc_union32 *ORC_RESTRICT ptr4;
+  const orc_union32 *ORC_RESTRICT ptr5;
+  orc_union32 var35;
+  orc_union32 var36;
+  orc_int8 var37;
+  orc_int8 var38;
+  orc_union16 var39;
+  orc_union16 var40;
+  orc_union16 var41;
+  orc_union16 var42;
+  orc_union16 var43;
+
+  ptr0 = (orc_union16 *) ex->arrays[0];
+  ptr1 = (orc_union16 *) ex->arrays[1];
+  ptr2 = (orc_int8 *) ex->arrays[2];
+  ptr3 = (orc_int8 *) ex->arrays[3];
+  ptr4 = (orc_union32 *) ex->arrays[4];
+  ptr5 = (orc_union32 *) ex->arrays[5];
+
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadl */
+    var35 = ptr4[i];
+    /* 1: splitwb */
+    {
+      orc_union16 _src;
+      _src.i = var35.x2[0];
+      var39.x2[0] = _src.x2[1];
+      var40.x2[0] = _src.x2[0];
+    }
+    {
+      orc_union16 _src;
+      _src.i = var35.x2[1];
+      var39.x2[1] = _src.x2[1];
+      var40.x2[1] = _src.x2[0];
+    }
+    /* 2: storew */
+    ptr0[i] = var39;
+    /* 3: loadl */
+    var36 = ptr5[i];
+    /* 4: splitwb */
+    {
+      orc_union16 _src;
+      _src.i = var36.x2[0];
+      var41.x2[0] = _src.x2[1];
+      var42.x2[0] = _src.x2[0];
+    }
+    {
+      orc_union16 _src;
+      _src.i = var36.x2[1];
+      var41.x2[1] = _src.x2[1];
+      var42.x2[1] = _src.x2[0];
+    }
+    /* 5: storew */
+    ptr1[i] = var41;
+    /* 6: avgub */
+    var43.x2[0] = ((orc_uint8) var40.x2[0] + (orc_uint8) var42.x2[0] + 1) >> 1;
+    var43.x2[1] = ((orc_uint8) var40.x2[1] + (orc_uint8) var42.x2[1] + 1) >> 1;
+    /* 7: splitwb */
+    {
+      orc_union16 _src;
+      _src.i = var43.i;
+      var37 = _src.x2[1];
+      var38 = _src.x2[0];
+    }
+    /* 8: storeb */
+    ptr3[i] = var37;
+    /* 9: storeb */
+    ptr2[i] = var38;
+  }
+
+}
+
+void
+video_orc_convert_UYVY_I420 (guint8 * ORC_RESTRICT d1, guint8 * ORC_RESTRICT d2,
+    guint8 * ORC_RESTRICT d3, guint8 * ORC_RESTRICT d4,
+    const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, int n)
+{
+  OrcExecutor _ex, *ex = &_ex;
+  static volatile int p_inited = 0;
+  static OrcCode *c = 0;
+  void (*func) (OrcExecutor *);
+
+  if (!p_inited) {
+    orc_once_mutex_lock ();
+    if (!p_inited) {
+      OrcProgram *p;
+
+#if 1
+      static const orc_uint8 bc[] = {
+        1, 9, 27, 118, 105, 100, 101, 111, 95, 111, 114, 99, 95, 99, 111, 110,
+        118, 101, 114, 116, 95, 85, 89, 86, 89, 95, 73, 52, 50, 48, 11, 2,
+        2, 11, 2, 2, 11, 1, 1, 11, 1, 1, 12, 4, 4, 12, 4, 4,
+        20, 2, 20, 2, 20, 2, 21, 1, 199, 34, 32, 4, 97, 0, 34, 21,
+        1, 199, 34, 33, 5, 97, 1, 34, 21, 1, 39, 32, 32, 33, 199, 3,
+        2, 32, 2, 0,
+      };
+      p = orc_program_new_from_static_bytecode (bc);
+      orc_program_set_backup_function (p, _backup_video_orc_convert_UYVY_I420);
+#else
+      p = orc_program_new ();
+      orc_program_set_name (p, "video_orc_convert_UYVY_I420");
+      orc_program_set_backup_function (p, _backup_video_orc_convert_UYVY_I420);
+      orc_program_add_destination (p, 2, "d1");
+      orc_program_add_destination (p, 2, "d2");
+      orc_program_add_destination (p, 1, "d3");
+      orc_program_add_destination (p, 1, "d4");
+      orc_program_add_source (p, 4, "s1");
+      orc_program_add_source (p, 4, "s2");
+      orc_program_add_temporary (p, 2, "t1");
+      orc_program_add_temporary (p, 2, "t2");
+      orc_program_add_temporary (p, 2, "t3");
+
+      orc_program_append_2 (p, "splitwb", 1, ORC_VAR_T3, ORC_VAR_T1, ORC_VAR_S1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "storew", 0, ORC_VAR_D1, ORC_VAR_T3, ORC_VAR_D1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "splitwb", 1, ORC_VAR_T3, ORC_VAR_T2, ORC_VAR_S2,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "storew", 0, ORC_VAR_D2, ORC_VAR_T3, ORC_VAR_D1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "avgub", 1, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_T2,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "splitwb", 0, ORC_VAR_D4, ORC_VAR_D3, ORC_VAR_T1,
+          ORC_VAR_D1);
+#endif
+
+      orc_program_compile (p);
+      c = orc_program_take_code (p);
+      orc_program_free (p);
+    }
+    p_inited = TRUE;
+    orc_once_mutex_unlock ();
+  }
+  ex->arrays[ORC_VAR_A2] = c;
+  ex->program = 0;
+
+  ex->n = n;
+  ex->arrays[ORC_VAR_D1] = d1;
+  ex->arrays[ORC_VAR_D2] = d2;
+  ex->arrays[ORC_VAR_D3] = d3;
+  ex->arrays[ORC_VAR_D4] = d4;
+  ex->arrays[ORC_VAR_S1] = (void *) s1;
+  ex->arrays[ORC_VAR_S2] = (void *) s2;
+
+  func = c->exec;
+  func (ex);
+}
+#endif
+
+
+/* video_orc_convert_AYUV_I420 */
+#ifdef DISABLE_ORC
+void
+video_orc_convert_AYUV_I420 (guint8 * ORC_RESTRICT d1, int d1_stride,
+    guint8 * ORC_RESTRICT d2, int d2_stride, guint8 * ORC_RESTRICT d3,
+    int d3_stride, guint8 * ORC_RESTRICT d4, int d4_stride,
+    const guint8 * ORC_RESTRICT s1, int s1_stride,
+    const guint8 * ORC_RESTRICT s2, int s2_stride, int n, int m)
+{
+  int i;
+  int j;
+  orc_union16 *ORC_RESTRICT ptr0;
+  orc_union16 *ORC_RESTRICT ptr1;
+  orc_int8 *ORC_RESTRICT ptr2;
+  orc_int8 *ORC_RESTRICT ptr3;
+  const orc_union64 *ORC_RESTRICT ptr4;
+  const orc_union64 *ORC_RESTRICT ptr5;
+  orc_union64 var40;
+  orc_union16 var41;
+  orc_union64 var42;
+  orc_union16 var43;
+  orc_int8 var44;
+  orc_int8 var45;
+  orc_union32 var46;
+  orc_union32 var47;
+  orc_union32 var48;
+  orc_union32 var49;
+  orc_union32 var50;
+  orc_union16 var51;
+  orc_union16 var52;
+  orc_int8 var53;
+  orc_int8 var54;
+  orc_int8 var55;
+  orc_int8 var56;
+
+  for (j = 0; j < m; j++) {
+    ptr0 = ORC_PTR_OFFSET (d1, d1_stride * j);
+    ptr1 = ORC_PTR_OFFSET (d2, d2_stride * j);
+    ptr2 = ORC_PTR_OFFSET (d3, d3_stride * j);
+    ptr3 = ORC_PTR_OFFSET (d4, d4_stride * j);
+    ptr4 = ORC_PTR_OFFSET (s1, s1_stride * j);
+    ptr5 = ORC_PTR_OFFSET (s2, s2_stride * j);
+
+
+    for (i = 0; i < n; i++) {
+      /* 0: loadq */
+      var40 = ptr4[i];
+      /* 1: splitlw */
+      {
+        orc_union32 _src;
+        _src.i = var40.x2[0];
+        var46.x2[0] = _src.x2[1];
+        var47.x2[0] = _src.x2[0];
+      }
+      {
+        orc_union32 _src;
+        _src.i = var40.x2[1];
+        var46.x2[1] = _src.x2[1];
+        var47.x2[1] = _src.x2[0];
+      }
+      /* 2: select1wb */
+      {
+        orc_union16 _src;
+        _src.i = var47.x2[0];
+        var41.x2[0] = _src.x2[1];
+      }
+      {
+        orc_union16 _src;
+        _src.i = var47.x2[1];
+        var41.x2[1] = _src.x2[1];
+      }
+      /* 3: storew */
+      ptr0[i] = var41;
+      /* 4: loadq */
+      var42 = ptr5[i];
+      /* 5: splitlw */
+      {
+        orc_union32 _src;
+        _src.i = var42.x2[0];
+        var48.x2[0] = _src.x2[1];
+        var49.x2[0] = _src.x2[0];
+      }
+      {
+        orc_union32 _src;
+        _src.i = var42.x2[1];
+        var48.x2[1] = _src.x2[1];
+        var49.x2[1] = _src.x2[0];
+      }
+      /* 6: select1wb */
+      {
+        orc_union16 _src;
+        _src.i = var49.x2[0];
+        var43.x2[0] = _src.x2[1];
+      }
+      {
+        orc_union16 _src;
+        _src.i = var49.x2[1];
+        var43.x2[1] = _src.x2[1];
+      }
+      /* 7: storew */
+      ptr1[i] = var43;
+      /* 8: avgub */
+      var50.x4[0] =
+          ((orc_uint8) var46.x4[0] + (orc_uint8) var48.x4[0] + 1) >> 1;
+      var50.x4[1] =
+          ((orc_uint8) var46.x4[1] + (orc_uint8) var48.x4[1] + 1) >> 1;
+      var50.x4[2] =
+          ((orc_uint8) var46.x4[2] + (orc_uint8) var48.x4[2] + 1) >> 1;
+      var50.x4[3] =
+          ((orc_uint8) var46.x4[3] + (orc_uint8) var48.x4[3] + 1) >> 1;
+      /* 9: splitwb */
+      {
+        orc_union16 _src;
+        _src.i = var50.x2[0];
+        var51.x2[0] = _src.x2[1];
+        var52.x2[0] = _src.x2[0];
+      }
+      {
+        orc_union16 _src;
+        _src.i = var50.x2[1];
+        var51.x2[1] = _src.x2[1];
+        var52.x2[1] = _src.x2[0];
+      }
+      /* 10: splitwb */
+      {
+        orc_union16 _src;
+        _src.i = var52.i;
+        var53 = _src.x2[1];
+        var54 = _src.x2[0];
+      }
+      /* 11: avgub */
+      var44 = ((orc_uint8) var53 + (orc_uint8) var54 + 1) >> 1;
+      /* 12: storeb */
+      ptr2[i] = var44;
+      /* 13: splitwb */
+      {
+        orc_union16 _src;
+        _src.i = var51.i;
+        var55 = _src.x2[1];
+        var56 = _src.x2[0];
+      }
+      /* 14: avgub */
+      var45 = ((orc_uint8) var55 + (orc_uint8) var56 + 1) >> 1;
+      /* 15: storeb */
+      ptr3[i] = var45;
+    }
+  }
+
+}
+
+#else
+static void
+_backup_video_orc_convert_AYUV_I420 (OrcExecutor * ORC_RESTRICT ex)
+{
+  int i;
+  int j;
+  int n = ex->n;
+  int m = ex->params[ORC_VAR_A1];
+  orc_union16 *ORC_RESTRICT ptr0;
+  orc_union16 *ORC_RESTRICT ptr1;
+  orc_int8 *ORC_RESTRICT ptr2;
+  orc_int8 *ORC_RESTRICT ptr3;
+  const orc_union64 *ORC_RESTRICT ptr4;
+  const orc_union64 *ORC_RESTRICT ptr5;
+  orc_union64 var40;
+  orc_union16 var41;
+  orc_union64 var42;
+  orc_union16 var43;
+  orc_int8 var44;
+  orc_int8 var45;
+  orc_union32 var46;
+  orc_union32 var47;
+  orc_union32 var48;
+  orc_union32 var49;
+  orc_union32 var50;
+  orc_union16 var51;
+  orc_union16 var52;
+  orc_int8 var53;
+  orc_int8 var54;
+  orc_int8 var55;
+  orc_int8 var56;
+
+  for (j = 0; j < m; j++) {
+    ptr0 = ORC_PTR_OFFSET (ex->arrays[0], ex->params[0] * j);
+    ptr1 = ORC_PTR_OFFSET (ex->arrays[1], ex->params[1] * j);
+    ptr2 = ORC_PTR_OFFSET (ex->arrays[2], ex->params[2] * j);
+    ptr3 = ORC_PTR_OFFSET (ex->arrays[3], ex->params[3] * j);
+    ptr4 = ORC_PTR_OFFSET (ex->arrays[4], ex->params[4] * j);
+    ptr5 = ORC_PTR_OFFSET (ex->arrays[5], ex->params[5] * j);
+
+
+    for (i = 0; i < n; i++) {
+      /* 0: loadq */
+      var40 = ptr4[i];
+      /* 1: splitlw */
+      {
+        orc_union32 _src;
+        _src.i = var40.x2[0];
+        var46.x2[0] = _src.x2[1];
+        var47.x2[0] = _src.x2[0];
+      }
+      {
+        orc_union32 _src;
+        _src.i = var40.x2[1];
+        var46.x2[1] = _src.x2[1];
+        var47.x2[1] = _src.x2[0];
+      }
+      /* 2: select1wb */
+      {
+        orc_union16 _src;
+        _src.i = var47.x2[0];
+        var41.x2[0] = _src.x2[1];
+      }
+      {
+        orc_union16 _src;
+        _src.i = var47.x2[1];
+        var41.x2[1] = _src.x2[1];
+      }
+      /* 3: storew */
+      ptr0[i] = var41;
+      /* 4: loadq */
+      var42 = ptr5[i];
+      /* 5: splitlw */
+      {
+        orc_union32 _src;
+        _src.i = var42.x2[0];
+        var48.x2[0] = _src.x2[1];
+        var49.x2[0] = _src.x2[0];
+      }
+      {
+        orc_union32 _src;
+        _src.i = var42.x2[1];
+        var48.x2[1] = _src.x2[1];
+        var49.x2[1] = _src.x2[0];
+      }
+      /* 6: select1wb */
+      {
+        orc_union16 _src;
+        _src.i = var49.x2[0];
+        var43.x2[0] = _src.x2[1];
+      }
+      {
+        orc_union16 _src;
+        _src.i = var49.x2[1];
+        var43.x2[1] = _src.x2[1];
+      }
+      /* 7: storew */
+      ptr1[i] = var43;
+      /* 8: avgub */
+      var50.x4[0] =
+          ((orc_uint8) var46.x4[0] + (orc_uint8) var48.x4[0] + 1) >> 1;
+      var50.x4[1] =
+          ((orc_uint8) var46.x4[1] + (orc_uint8) var48.x4[1] + 1) >> 1;
+      var50.x4[2] =
+          ((orc_uint8) var46.x4[2] + (orc_uint8) var48.x4[2] + 1) >> 1;
+      var50.x4[3] =
+          ((orc_uint8) var46.x4[3] + (orc_uint8) var48.x4[3] + 1) >> 1;
+      /* 9: splitwb */
+      {
+        orc_union16 _src;
+        _src.i = var50.x2[0];
+        var51.x2[0] = _src.x2[1];
+        var52.x2[0] = _src.x2[0];
+      }
+      {
+        orc_union16 _src;
+        _src.i = var50.x2[1];
+        var51.x2[1] = _src.x2[1];
+        var52.x2[1] = _src.x2[0];
+      }
+      /* 10: splitwb */
+      {
+        orc_union16 _src;
+        _src.i = var52.i;
+        var53 = _src.x2[1];
+        var54 = _src.x2[0];
+      }
+      /* 11: avgub */
+      var44 = ((orc_uint8) var53 + (orc_uint8) var54 + 1) >> 1;
+      /* 12: storeb */
+      ptr2[i] = var44;
+      /* 13: splitwb */
+      {
+        orc_union16 _src;
+        _src.i = var51.i;
+        var55 = _src.x2[1];
+        var56 = _src.x2[0];
+      }
+      /* 14: avgub */
+      var45 = ((orc_uint8) var55 + (orc_uint8) var56 + 1) >> 1;
+      /* 15: storeb */
+      ptr3[i] = var45;
+    }
+  }
+
+}
+
+void
+video_orc_convert_AYUV_I420 (guint8 * ORC_RESTRICT d1, int d1_stride,
+    guint8 * ORC_RESTRICT d2, int d2_stride, guint8 * ORC_RESTRICT d3,
+    int d3_stride, guint8 * ORC_RESTRICT d4, int d4_stride,
+    const guint8 * ORC_RESTRICT s1, int s1_stride,
+    const guint8 * ORC_RESTRICT s2, int s2_stride, int n, int m)
+{
+  OrcExecutor _ex, *ex = &_ex;
+  static volatile int p_inited = 0;
+  static OrcCode *c = 0;
+  void (*func) (OrcExecutor *);
+
+  if (!p_inited) {
+    orc_once_mutex_lock ();
+    if (!p_inited) {
+      OrcProgram *p;
+
+#if 1
+      static const orc_uint8 bc[] = {
+        1, 7, 9, 27, 118, 105, 100, 101, 111, 95, 111, 114, 99, 95, 99, 111,
+        110, 118, 101, 114, 116, 95, 65, 89, 85, 86, 95, 73, 52, 50, 48, 11,
+        2, 2, 11, 2, 2, 11, 1, 1, 11, 1, 1, 12, 8, 8, 12, 8,
+        8, 20, 4, 20, 4, 20, 4, 20, 4, 20, 2, 20, 2, 20, 1, 20,
+        1, 21, 1, 198, 33, 32, 4, 21, 1, 189, 0, 32, 21, 1, 198, 34,
+        32, 5, 21, 1, 189, 1, 32, 21, 2, 39, 35, 33, 34, 21, 1, 199,
+        37, 36, 35, 199, 38, 39, 36, 39, 2, 38, 39, 199, 38, 39, 37, 39,
+        3, 38, 39, 2, 0,
+      };
+      p = orc_program_new_from_static_bytecode (bc);
+      orc_program_set_backup_function (p, _backup_video_orc_convert_AYUV_I420);
+#else
+      p = orc_program_new ();
+      orc_program_set_2d (p);
+      orc_program_set_name (p, "video_orc_convert_AYUV_I420");
+      orc_program_set_backup_function (p, _backup_video_orc_convert_AYUV_I420);
+      orc_program_add_destination (p, 2, "d1");
+      orc_program_add_destination (p, 2, "d2");
+      orc_program_add_destination (p, 1, "d3");
+      orc_program_add_destination (p, 1, "d4");
+      orc_program_add_source (p, 8, "s1");
+      orc_program_add_source (p, 8, "s2");
+      orc_program_add_temporary (p, 4, "t1");
+      orc_program_add_temporary (p, 4, "t2");
+      orc_program_add_temporary (p, 4, "t3");
+      orc_program_add_temporary (p, 4, "t4");
+      orc_program_add_temporary (p, 2, "t5");
+      orc_program_add_temporary (p, 2, "t6");
+      orc_program_add_temporary (p, 1, "t7");
+      orc_program_add_temporary (p, 1, "t8");
+
+      orc_program_append_2 (p, "splitlw", 1, ORC_VAR_T2, ORC_VAR_T1, ORC_VAR_S1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "select1wb", 1, ORC_VAR_D1, ORC_VAR_T1,
+          ORC_VAR_D1, ORC_VAR_D1);
+      orc_program_append_2 (p, "splitlw", 1, ORC_VAR_T3, ORC_VAR_T1, ORC_VAR_S2,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "select1wb", 1, ORC_VAR_D2, ORC_VAR_T1,
+          ORC_VAR_D1, ORC_VAR_D1);
+      orc_program_append_2 (p, "avgub", 2, ORC_VAR_T4, ORC_VAR_T2, ORC_VAR_T3,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "splitwb", 1, ORC_VAR_T6, ORC_VAR_T5, ORC_VAR_T4,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "splitwb", 0, ORC_VAR_T7, ORC_VAR_T8, ORC_VAR_T5,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "avgub", 0, ORC_VAR_D3, ORC_VAR_T7, ORC_VAR_T8,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "splitwb", 0, ORC_VAR_T7, ORC_VAR_T8, ORC_VAR_T6,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "avgub", 0, ORC_VAR_D4, ORC_VAR_T7, ORC_VAR_T8,
+          ORC_VAR_D1);
+#endif
+
+      orc_program_compile (p);
+      c = orc_program_take_code (p);
+      orc_program_free (p);
+    }
+    p_inited = TRUE;
+    orc_once_mutex_unlock ();
+  }
+  ex->arrays[ORC_VAR_A2] = c;
+  ex->program = 0;
+
+  ex->n = n;
+  ORC_EXECUTOR_M (ex) = m;
+  ex->arrays[ORC_VAR_D1] = d1;
+  ex->params[ORC_VAR_D1] = d1_stride;
+  ex->arrays[ORC_VAR_D2] = d2;
+  ex->params[ORC_VAR_D2] = d2_stride;
+  ex->arrays[ORC_VAR_D3] = d3;
+  ex->params[ORC_VAR_D3] = d3_stride;
+  ex->arrays[ORC_VAR_D4] = d4;
+  ex->params[ORC_VAR_D4] = d4_stride;
+  ex->arrays[ORC_VAR_S1] = (void *) s1;
+  ex->params[ORC_VAR_S1] = s1_stride;
+  ex->arrays[ORC_VAR_S2] = (void *) s2;
+  ex->params[ORC_VAR_S2] = s2_stride;
+
+  func = c->exec;
+  func (ex);
+}
+#endif
+
+
+/* video_orc_convert_AYUV_YUY2 */
+#ifdef DISABLE_ORC
+void
+video_orc_convert_AYUV_YUY2 (guint8 * ORC_RESTRICT d1, int d1_stride,
+    const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m)
+{
+  int i;
+  int j;
+  orc_union32 *ORC_RESTRICT ptr0;
+  const orc_union64 *ORC_RESTRICT ptr4;
+  orc_union64 var37;
+  orc_union32 var38;
+  orc_union32 var39;
+  orc_union32 var40;
+  orc_union16 var41;
+  orc_union16 var42;
+  orc_union16 var43;
+  orc_union16 var44;
+
+  for (j = 0; j < m; j++) {
+    ptr0 = ORC_PTR_OFFSET (d1, d1_stride * j);
+    ptr4 = ORC_PTR_OFFSET (s1, s1_stride * j);
+
+
+    for (i = 0; i < n; i++) {
+      /* 0: loadq */
+      var37 = ptr4[i];
+      /* 1: splitlw */
+      {
+        orc_union32 _src;
+        _src.i = var37.x2[0];
+        var39.x2[0] = _src.x2[1];
+        var40.x2[0] = _src.x2[0];
+      }
+      {
+        orc_union32 _src;
+        _src.i = var37.x2[1];
+        var39.x2[1] = _src.x2[1];
+        var40.x2[1] = _src.x2[0];
+      }
+      /* 2: splitlw */
+      {
+        orc_union32 _src;
+        _src.i = var39.i;
+        var41.i = _src.x2[1];
+        var42.i = _src.x2[0];
+      }
+      /* 3: avgub */
+      var43.x2[0] =
+          ((orc_uint8) var41.x2[0] + (orc_uint8) var42.x2[0] + 1) >> 1;
+      var43.x2[1] =
+          ((orc_uint8) var41.x2[1] + (orc_uint8) var42.x2[1] + 1) >> 1;
+      /* 4: select1wb */
+      {
+        orc_union16 _src;
+        _src.i = var40.x2[0];
+        var44.x2[0] = _src.x2[1];
+      }
+      {
+        orc_union16 _src;
+        _src.i = var40.x2[1];
+        var44.x2[1] = _src.x2[1];
+      }
+      /* 5: mergebw */
+      {
+        orc_union16 _dest;
+        _dest.x2[0] = var44.x2[0];
+        _dest.x2[1] = var43.x2[0];
+        var38.x2[0] = _dest.i;
+      }
+      {
+        orc_union16 _dest;
+        _dest.x2[0] = var44.x2[1];
+        _dest.x2[1] = var43.x2[1];
+        var38.x2[1] = _dest.i;
+      }
+      /* 6: storel */
+      ptr0[i] = var38;
+    }
+  }
+
+}
+
+#else
+static void
+_backup_video_orc_convert_AYUV_YUY2 (OrcExecutor * ORC_RESTRICT ex)
+{
+  int i;
+  int j;
+  int n = ex->n;
+  int m = ex->params[ORC_VAR_A1];
+  orc_union32 *ORC_RESTRICT ptr0;
+  const orc_union64 *ORC_RESTRICT ptr4;
+  orc_union64 var37;
+  orc_union32 var38;
+  orc_union32 var39;
+  orc_union32 var40;
+  orc_union16 var41;
+  orc_union16 var42;
+  orc_union16 var43;
+  orc_union16 var44;
+
+  for (j = 0; j < m; j++) {
+    ptr0 = ORC_PTR_OFFSET (ex->arrays[0], ex->params[0] * j);
+    ptr4 = ORC_PTR_OFFSET (ex->arrays[4], ex->params[4] * j);
+
+
+    for (i = 0; i < n; i++) {
+      /* 0: loadq */
+      var37 = ptr4[i];
+      /* 1: splitlw */
+      {
+        orc_union32 _src;
+        _src.i = var37.x2[0];
+        var39.x2[0] = _src.x2[1];
+        var40.x2[0] = _src.x2[0];
+      }
+      {
+        orc_union32 _src;
+        _src.i = var37.x2[1];
+        var39.x2[1] = _src.x2[1];
+        var40.x2[1] = _src.x2[0];
+      }
+      /* 2: splitlw */
+      {
+        orc_union32 _src;
+        _src.i = var39.i;
+        var41.i = _src.x2[1];
+        var42.i = _src.x2[0];
+      }
+      /* 3: avgub */
+      var43.x2[0] =
+          ((orc_uint8) var41.x2[0] + (orc_uint8) var42.x2[0] + 1) >> 1;
+      var43.x2[1] =
+          ((orc_uint8) var41.x2[1] + (orc_uint8) var42.x2[1] + 1) >> 1;
+      /* 4: select1wb */
+      {
+        orc_union16 _src;
+        _src.i = var40.x2[0];
+        var44.x2[0] = _src.x2[1];
+      }
+      {
+        orc_union16 _src;
+        _src.i = var40.x2[1];
+        var44.x2[1] = _src.x2[1];
+      }
+      /* 5: mergebw */
+      {
+        orc_union16 _dest;
+        _dest.x2[0] = var44.x2[0];
+        _dest.x2[1] = var43.x2[0];
+        var38.x2[0] = _dest.i;
+      }
+      {
+        orc_union16 _dest;
+        _dest.x2[0] = var44.x2[1];
+        _dest.x2[1] = var43.x2[1];
+        var38.x2[1] = _dest.i;
+      }
+      /* 6: storel */
+      ptr0[i] = var38;
+    }
+  }
+
+}
+
+void
+video_orc_convert_AYUV_YUY2 (guint8 * ORC_RESTRICT d1, int d1_stride,
+    const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m)
+{
+  OrcExecutor _ex, *ex = &_ex;
+  static volatile int p_inited = 0;
+  static OrcCode *c = 0;
+  void (*func) (OrcExecutor *);
+
+  if (!p_inited) {
+    orc_once_mutex_lock ();
+    if (!p_inited) {
+      OrcProgram *p;
+
+#if 1
+      static const orc_uint8 bc[] = {
+        1, 7, 9, 27, 118, 105, 100, 101, 111, 95, 111, 114, 99, 95, 99, 111,
+        110, 118, 101, 114, 116, 95, 65, 89, 85, 86, 95, 89, 85, 89, 50, 11,
+        4, 4, 12, 8, 8, 20, 2, 20, 2, 20, 2, 20, 4, 20, 4, 21,
+        1, 198, 36, 35, 4, 198, 33, 34, 36, 21, 1, 39, 33, 33, 34, 21,
+        1, 189, 32, 35, 21, 1, 196, 0, 32, 33, 2, 0,
+      };
+      p = orc_program_new_from_static_bytecode (bc);
+      orc_program_set_backup_function (p, _backup_video_orc_convert_AYUV_YUY2);
+#else
+      p = orc_program_new ();
+      orc_program_set_2d (p);
+      orc_program_set_name (p, "video_orc_convert_AYUV_YUY2");
+      orc_program_set_backup_function (p, _backup_video_orc_convert_AYUV_YUY2);
+      orc_program_add_destination (p, 4, "d1");
+      orc_program_add_source (p, 8, "s1");
+      orc_program_add_temporary (p, 2, "t1");
+      orc_program_add_temporary (p, 2, "t2");
+      orc_program_add_temporary (p, 2, "t3");
+      orc_program_add_temporary (p, 4, "t4");
+      orc_program_add_temporary (p, 4, "t5");
+
+      orc_program_append_2 (p, "splitlw", 1, ORC_VAR_T5, ORC_VAR_T4, ORC_VAR_S1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "splitlw", 0, ORC_VAR_T2, ORC_VAR_T3, ORC_VAR_T5,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "avgub", 1, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_T3,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "select1wb", 1, ORC_VAR_T1, ORC_VAR_T4,
+          ORC_VAR_D1, ORC_VAR_D1);
+      orc_program_append_2 (p, "mergebw", 1, ORC_VAR_D1, ORC_VAR_T1, ORC_VAR_T2,
+          ORC_VAR_D1);
+#endif
+
+      orc_program_compile (p);
+      c = orc_program_take_code (p);
+      orc_program_free (p);
+    }
+    p_inited = TRUE;
+    orc_once_mutex_unlock ();
+  }
+  ex->arrays[ORC_VAR_A2] = c;
+  ex->program = 0;
+
+  ex->n = n;
+  ORC_EXECUTOR_M (ex) = m;
+  ex->arrays[ORC_VAR_D1] = d1;
+  ex->params[ORC_VAR_D1] = d1_stride;
+  ex->arrays[ORC_VAR_S1] = (void *) s1;
+  ex->params[ORC_VAR_S1] = s1_stride;
+
+  func = c->exec;
+  func (ex);
+}
+#endif
+
+
+/* video_orc_convert_AYUV_UYVY */
+#ifdef DISABLE_ORC
+void
+video_orc_convert_AYUV_UYVY (guint8 * ORC_RESTRICT d1, int d1_stride,
+    const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m)
+{
+  int i;
+  int j;
+  orc_union32 *ORC_RESTRICT ptr0;
+  const orc_union64 *ORC_RESTRICT ptr4;
+  orc_union64 var37;
+  orc_union32 var38;
+  orc_union32 var39;
+  orc_union32 var40;
+  orc_union16 var41;
+  orc_union16 var42;
+  orc_union16 var43;
+  orc_union16 var44;
+
+  for (j = 0; j < m; j++) {
+    ptr0 = ORC_PTR_OFFSET (d1, d1_stride * j);
+    ptr4 = ORC_PTR_OFFSET (s1, s1_stride * j);
+
+
+    for (i = 0; i < n; i++) {
+      /* 0: loadq */
+      var37 = ptr4[i];
+      /* 1: splitlw */
+      {
+        orc_union32 _src;
+        _src.i = var37.x2[0];
+        var39.x2[0] = _src.x2[1];
+        var40.x2[0] = _src.x2[0];
+      }
+      {
+        orc_union32 _src;
+        _src.i = var37.x2[1];
+        var39.x2[1] = _src.x2[1];
+        var40.x2[1] = _src.x2[0];
+      }
+      /* 2: splitlw */
+      {
+        orc_union32 _src;
+        _src.i = var39.i;
+        var41.i = _src.x2[1];
+        var42.i = _src.x2[0];
+      }
+      /* 3: avgub */
+      var43.x2[0] =
+          ((orc_uint8) var41.x2[0] + (orc_uint8) var42.x2[0] + 1) >> 1;
+      var43.x2[1] =
+          ((orc_uint8) var41.x2[1] + (orc_uint8) var42.x2[1] + 1) >> 1;
+      /* 4: select1wb */
+      {
+        orc_union16 _src;
+        _src.i = var40.x2[0];
+        var44.x2[0] = _src.x2[1];
+      }
+      {
+        orc_union16 _src;
+        _src.i = var40.x2[1];
+        var44.x2[1] = _src.x2[1];
+      }
+      /* 5: mergebw */
+      {
+        orc_union16 _dest;
+        _dest.x2[0] = var43.x2[0];
+        _dest.x2[1] = var44.x2[0];
+        var38.x2[0] = _dest.i;
+      }
+      {
+        orc_union16 _dest;
+        _dest.x2[0] = var43.x2[1];
+        _dest.x2[1] = var44.x2[1];
+        var38.x2[1] = _dest.i;
+      }
+      /* 6: storel */
+      ptr0[i] = var38;
+    }
+  }
+
+}
+
+#else
+static void
+_backup_video_orc_convert_AYUV_UYVY (OrcExecutor * ORC_RESTRICT ex)
+{
+  int i;
+  int j;
+  int n = ex->n;
+  int m = ex->params[ORC_VAR_A1];
+  orc_union32 *ORC_RESTRICT ptr0;
+  const orc_union64 *ORC_RESTRICT ptr4;
+  orc_union64 var37;
+  orc_union32 var38;
+  orc_union32 var39;
+  orc_union32 var40;
+  orc_union16 var41;
+  orc_union16 var42;
+  orc_union16 var43;
+  orc_union16 var44;
+
+  for (j = 0; j < m; j++) {
+    ptr0 = ORC_PTR_OFFSET (ex->arrays[0], ex->params[0] * j);
+    ptr4 = ORC_PTR_OFFSET (ex->arrays[4], ex->params[4] * j);
+
+
+    for (i = 0; i < n; i++) {
+      /* 0: loadq */
+      var37 = ptr4[i];
+      /* 1: splitlw */
+      {
+        orc_union32 _src;
+        _src.i = var37.x2[0];
+        var39.x2[0] = _src.x2[1];
+        var40.x2[0] = _src.x2[0];
+      }
+      {
+        orc_union32 _src;
+        _src.i = var37.x2[1];
+        var39.x2[1] = _src.x2[1];
+        var40.x2[1] = _src.x2[0];
+      }
+      /* 2: splitlw */
+      {
+        orc_union32 _src;
+        _src.i = var39.i;
+        var41.i = _src.x2[1];
+        var42.i = _src.x2[0];
+      }
+      /* 3: avgub */
+      var43.x2[0] =
+          ((orc_uint8) var41.x2[0] + (orc_uint8) var42.x2[0] + 1) >> 1;
+      var43.x2[1] =
+          ((orc_uint8) var41.x2[1] + (orc_uint8) var42.x2[1] + 1) >> 1;
+      /* 4: select1wb */
+      {
+        orc_union16 _src;
+        _src.i = var40.x2[0];
+        var44.x2[0] = _src.x2[1];
+      }
+      {
+        orc_union16 _src;
+        _src.i = var40.x2[1];
+        var44.x2[1] = _src.x2[1];
+      }
+      /* 5: mergebw */
+      {
+        orc_union16 _dest;
+        _dest.x2[0] = var43.x2[0];
+        _dest.x2[1] = var44.x2[0];
+        var38.x2[0] = _dest.i;
+      }
+      {
+        orc_union16 _dest;
+        _dest.x2[0] = var43.x2[1];
+        _dest.x2[1] = var44.x2[1];
+        var38.x2[1] = _dest.i;
+      }
+      /* 6: storel */
+      ptr0[i] = var38;
+    }
+  }
+
+}
+
+void
+video_orc_convert_AYUV_UYVY (guint8 * ORC_RESTRICT d1, int d1_stride,
+    const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m)
+{
+  OrcExecutor _ex, *ex = &_ex;
+  static volatile int p_inited = 0;
+  static OrcCode *c = 0;
+  void (*func) (OrcExecutor *);
+
+  if (!p_inited) {
+    orc_once_mutex_lock ();
+    if (!p_inited) {
+      OrcProgram *p;
+
+#if 1
+      static const orc_uint8 bc[] = {
+        1, 7, 9, 27, 118, 105, 100, 101, 111, 95, 111, 114, 99, 95, 99, 111,
+        110, 118, 101, 114, 116, 95, 65, 89, 85, 86, 95, 85, 89, 86, 89, 11,
+        4, 4, 12, 8, 8, 20, 2, 20, 2, 20, 2, 20, 4, 20, 4, 21,
+        1, 198, 36, 35, 4, 198, 33, 34, 36, 21, 1, 39, 33, 33, 34, 21,
+        1, 189, 32, 35, 21, 1, 196, 0, 33, 32, 2, 0,
+      };
+      p = orc_program_new_from_static_bytecode (bc);
+      orc_program_set_backup_function (p, _backup_video_orc_convert_AYUV_UYVY);
+#else
+      p = orc_program_new ();
+      orc_program_set_2d (p);
+      orc_program_set_name (p, "video_orc_convert_AYUV_UYVY");
+      orc_program_set_backup_function (p, _backup_video_orc_convert_AYUV_UYVY);
+      orc_program_add_destination (p, 4, "d1");
+      orc_program_add_source (p, 8, "s1");
+      orc_program_add_temporary (p, 2, "t1");
+      orc_program_add_temporary (p, 2, "t2");
+      orc_program_add_temporary (p, 2, "t3");
+      orc_program_add_temporary (p, 4, "t4");
+      orc_program_add_temporary (p, 4, "t5");
+
+      orc_program_append_2 (p, "splitlw", 1, ORC_VAR_T5, ORC_VAR_T4, ORC_VAR_S1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "splitlw", 0, ORC_VAR_T2, ORC_VAR_T3, ORC_VAR_T5,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "avgub", 1, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_T3,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "select1wb", 1, ORC_VAR_T1, ORC_VAR_T4,
+          ORC_VAR_D1, ORC_VAR_D1);
+      orc_program_append_2 (p, "mergebw", 1, ORC_VAR_D1, ORC_VAR_T2, ORC_VAR_T1,
+          ORC_VAR_D1);
+#endif
+
+      orc_program_compile (p);
+      c = orc_program_take_code (p);
+      orc_program_free (p);
+    }
+    p_inited = TRUE;
+    orc_once_mutex_unlock ();
+  }
+  ex->arrays[ORC_VAR_A2] = c;
+  ex->program = 0;
+
+  ex->n = n;
+  ORC_EXECUTOR_M (ex) = m;
+  ex->arrays[ORC_VAR_D1] = d1;
+  ex->params[ORC_VAR_D1] = d1_stride;
+  ex->arrays[ORC_VAR_S1] = (void *) s1;
+  ex->params[ORC_VAR_S1] = s1_stride;
+
+  func = c->exec;
+  func (ex);
+}
+#endif
+
+
+/* video_orc_convert_AYUV_Y42B */
+#ifdef DISABLE_ORC
+void
+video_orc_convert_AYUV_Y42B (guint8 * ORC_RESTRICT d1, int d1_stride,
+    guint8 * ORC_RESTRICT d2, int d2_stride, guint8 * ORC_RESTRICT d3,
+    int d3_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m)
+{
+  int i;
+  int j;
+  orc_union16 *ORC_RESTRICT ptr0;
+  orc_int8 *ORC_RESTRICT ptr1;
+  orc_int8 *ORC_RESTRICT ptr2;
+  const orc_union64 *ORC_RESTRICT ptr4;
+  orc_union64 var36;
+  orc_int8 var37;
+  orc_int8 var38;
+  orc_union16 var39;
+  orc_union32 var40;
+  orc_union32 var41;
+  orc_union16 var42;
+  orc_union16 var43;
+  orc_union16 var44;
+
+  for (j = 0; j < m; j++) {
+    ptr0 = ORC_PTR_OFFSET (d1, d1_stride * j);
+    ptr1 = ORC_PTR_OFFSET (d2, d2_stride * j);
+    ptr2 = ORC_PTR_OFFSET (d3, d3_stride * j);
+    ptr4 = ORC_PTR_OFFSET (s1, s1_stride * j);
+
+
+    for (i = 0; i < n; i++) {
+      /* 0: loadq */
+      var36 = ptr4[i];
+      /* 1: splitlw */
+      {
+        orc_union32 _src;
+        _src.i = var36.x2[0];
+        var40.x2[0] = _src.x2[1];
+        var41.x2[0] = _src.x2[0];
+      }
+      {
+        orc_union32 _src;
+        _src.i = var36.x2[1];
+        var40.x2[1] = _src.x2[1];
+        var41.x2[1] = _src.x2[0];
+      }
+      /* 2: splitlw */
+      {
+        orc_union32 _src;
+        _src.i = var40.i;
+        var42.i = _src.x2[1];
+        var43.i = _src.x2[0];
+      }
+      /* 3: avgub */
+      var44.x2[0] =
+          ((orc_uint8) var42.x2[0] + (orc_uint8) var43.x2[0] + 1) >> 1;
+      var44.x2[1] =
+          ((orc_uint8) var42.x2[1] + (orc_uint8) var43.x2[1] + 1) >> 1;
+      /* 4: splitwb */
+      {
+        orc_union16 _src;
+        _src.i = var44.i;
+        var37 = _src.x2[1];
+        var38 = _src.x2[0];
+      }
+      /* 5: storeb */
+      ptr2[i] = var37;
+      /* 6: storeb */
+      ptr1[i] = var38;
+      /* 7: select1wb */
+      {
+        orc_union16 _src;
+        _src.i = var41.x2[0];
+        var39.x2[0] = _src.x2[1];
+      }
+      {
+        orc_union16 _src;
+        _src.i = var41.x2[1];
+        var39.x2[1] = _src.x2[1];
+      }
+      /* 8: storew */
+      ptr0[i] = var39;
+    }
+  }
+
+}
+
+#else
+static void
+_backup_video_orc_convert_AYUV_Y42B (OrcExecutor * ORC_RESTRICT ex)
+{
+  int i;
+  int j;
+  int n = ex->n;
+  int m = ex->params[ORC_VAR_A1];
+  orc_union16 *ORC_RESTRICT ptr0;
+  orc_int8 *ORC_RESTRICT ptr1;
+  orc_int8 *ORC_RESTRICT ptr2;
+  const orc_union64 *ORC_RESTRICT ptr4;
+  orc_union64 var36;
+  orc_int8 var37;
+  orc_int8 var38;
+  orc_union16 var39;
+  orc_union32 var40;
+  orc_union32 var41;
+  orc_union16 var42;
+  orc_union16 var43;
+  orc_union16 var44;
+
+  for (j = 0; j < m; j++) {
+    ptr0 = ORC_PTR_OFFSET (ex->arrays[0], ex->params[0] * j);
+    ptr1 = ORC_PTR_OFFSET (ex->arrays[1], ex->params[1] * j);
+    ptr2 = ORC_PTR_OFFSET (ex->arrays[2], ex->params[2] * j);
+    ptr4 = ORC_PTR_OFFSET (ex->arrays[4], ex->params[4] * j);
+
+
+    for (i = 0; i < n; i++) {
+      /* 0: loadq */
+      var36 = ptr4[i];
+      /* 1: splitlw */
+      {
+        orc_union32 _src;
+        _src.i = var36.x2[0];
+        var40.x2[0] = _src.x2[1];
+        var41.x2[0] = _src.x2[0];
+      }
+      {
+        orc_union32 _src;
+        _src.i = var36.x2[1];
+        var40.x2[1] = _src.x2[1];
+        var41.x2[1] = _src.x2[0];
+      }
+      /* 2: splitlw */
+      {
+        orc_union32 _src;
+        _src.i = var40.i;
+        var42.i = _src.x2[1];
+        var43.i = _src.x2[0];
+      }
+      /* 3: avgub */
+      var44.x2[0] =
+          ((orc_uint8) var42.x2[0] + (orc_uint8) var43.x2[0] + 1) >> 1;
+      var44.x2[1] =
+          ((orc_uint8) var42.x2[1] + (orc_uint8) var43.x2[1] + 1) >> 1;
+      /* 4: splitwb */
+      {
+        orc_union16 _src;
+        _src.i = var44.i;
+        var37 = _src.x2[1];
+        var38 = _src.x2[0];
+      }
+      /* 5: storeb */
+      ptr2[i] = var37;
+      /* 6: storeb */
+      ptr1[i] = var38;
+      /* 7: select1wb */
+      {
+        orc_union16 _src;
+        _src.i = var41.x2[0];
+        var39.x2[0] = _src.x2[1];
+      }
+      {
+        orc_union16 _src;
+        _src.i = var41.x2[1];
+        var39.x2[1] = _src.x2[1];
+      }
+      /* 8: storew */
+      ptr0[i] = var39;
+    }
+  }
+
+}
+
+void
+video_orc_convert_AYUV_Y42B (guint8 * ORC_RESTRICT d1, int d1_stride,
+    guint8 * ORC_RESTRICT d2, int d2_stride, guint8 * ORC_RESTRICT d3,
+    int d3_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m)
+{
+  OrcExecutor _ex, *ex = &_ex;
+  static volatile int p_inited = 0;
+  static OrcCode *c = 0;
+  void (*func) (OrcExecutor *);
+
+  if (!p_inited) {
+    orc_once_mutex_lock ();
+    if (!p_inited) {
+      OrcProgram *p;
+
+#if 1
+      static const orc_uint8 bc[] = {
+        1, 7, 9, 27, 118, 105, 100, 101, 111, 95, 111, 114, 99, 95, 99, 111,
+        110, 118, 101, 114, 116, 95, 65, 89, 85, 86, 95, 89, 52, 50, 66, 11,
+        2, 2, 11, 1, 1, 11, 1, 1, 12, 8, 8, 20, 4, 20, 4, 20,
+        2, 20, 2, 21, 1, 198, 33, 32, 4, 198, 34, 35, 33, 21, 1, 39,
+        34, 34, 35, 199, 2, 1, 34, 21, 1, 189, 0, 32, 2, 0,
+      };
+      p = orc_program_new_from_static_bytecode (bc);
+      orc_program_set_backup_function (p, _backup_video_orc_convert_AYUV_Y42B);
+#else
+      p = orc_program_new ();
+      orc_program_set_2d (p);
+      orc_program_set_name (p, "video_orc_convert_AYUV_Y42B");
+      orc_program_set_backup_function (p, _backup_video_orc_convert_AYUV_Y42B);
+      orc_program_add_destination (p, 2, "d1");
+      orc_program_add_destination (p, 1, "d2");
+      orc_program_add_destination (p, 1, "d3");
+      orc_program_add_source (p, 8, "s1");
+      orc_program_add_temporary (p, 4, "t1");
+      orc_program_add_temporary (p, 4, "t2");
+      orc_program_add_temporary (p, 2, "t3");
+      orc_program_add_temporary (p, 2, "t4");
+
+      orc_program_append_2 (p, "splitlw", 1, ORC_VAR_T2, ORC_VAR_T1, ORC_VAR_S1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "splitlw", 0, ORC_VAR_T3, ORC_VAR_T4, ORC_VAR_T2,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "avgub", 1, ORC_VAR_T3, ORC_VAR_T3, ORC_VAR_T4,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "splitwb", 0, ORC_VAR_D3, ORC_VAR_D2, ORC_VAR_T3,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "select1wb", 1, ORC_VAR_D1, ORC_VAR_T1,
+          ORC_VAR_D1, ORC_VAR_D1);
+#endif
+
+      orc_program_compile (p);
+      c = orc_program_take_code (p);
+      orc_program_free (p);
+    }
+    p_inited = TRUE;
+    orc_once_mutex_unlock ();
+  }
+  ex->arrays[ORC_VAR_A2] = c;
+  ex->program = 0;
+
+  ex->n = n;
+  ORC_EXECUTOR_M (ex) = m;
+  ex->arrays[ORC_VAR_D1] = d1;
+  ex->params[ORC_VAR_D1] = d1_stride;
+  ex->arrays[ORC_VAR_D2] = d2;
+  ex->params[ORC_VAR_D2] = d2_stride;
+  ex->arrays[ORC_VAR_D3] = d3;
+  ex->params[ORC_VAR_D3] = d3_stride;
+  ex->arrays[ORC_VAR_S1] = (void *) s1;
+  ex->params[ORC_VAR_S1] = s1_stride;
+
+  func = c->exec;
+  func (ex);
+}
+#endif
+
+
+/* video_orc_convert_AYUV_Y444 */
+#ifdef DISABLE_ORC
+void
+video_orc_convert_AYUV_Y444 (guint8 * ORC_RESTRICT d1, int d1_stride,
+    guint8 * ORC_RESTRICT d2, int d2_stride, guint8 * ORC_RESTRICT d3,
+    int d3_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m)
+{
+  int i;
+  int j;
+  orc_int8 *ORC_RESTRICT ptr0;
+  orc_int8 *ORC_RESTRICT ptr1;
+  orc_int8 *ORC_RESTRICT ptr2;
+  const orc_union32 *ORC_RESTRICT ptr4;
+  orc_union32 var34;
+  orc_int8 var35;
+  orc_int8 var36;
+  orc_int8 var37;
+  orc_union16 var38;
+  orc_union16 var39;
+
+  for (j = 0; j < m; j++) {
+    ptr0 = ORC_PTR_OFFSET (d1, d1_stride * j);
+    ptr1 = ORC_PTR_OFFSET (d2, d2_stride * j);
+    ptr2 = ORC_PTR_OFFSET (d3, d3_stride * j);
+    ptr4 = ORC_PTR_OFFSET (s1, s1_stride * j);
+
+
+    for (i = 0; i < n; i++) {
+      /* 0: loadl */
+      var34 = ptr4[i];
+      /* 1: splitlw */
+      {
+        orc_union32 _src;
+        _src.i = var34.i;
+        var38.i = _src.x2[1];
+        var39.i = _src.x2[0];
+      }
+      /* 2: splitwb */
+      {
+        orc_union16 _src;
+        _src.i = var38.i;
+        var35 = _src.x2[1];
+        var36 = _src.x2[0];
+      }
+      /* 3: storeb */
+      ptr2[i] = var35;
+      /* 4: storeb */
+      ptr1[i] = var36;
+      /* 5: select1wb */
+      {
+        orc_union16 _src;
+        _src.i = var39.i;
+        var37 = _src.x2[1];
+      }
+      /* 6: storeb */
+      ptr0[i] = var37;
+    }
+  }
+
+}
+
+#else
+static void
+_backup_video_orc_convert_AYUV_Y444 (OrcExecutor * ORC_RESTRICT ex)
+{
+  int i;
+  int j;
+  int n = ex->n;
+  int m = ex->params[ORC_VAR_A1];
+  orc_int8 *ORC_RESTRICT ptr0;
+  orc_int8 *ORC_RESTRICT ptr1;
+  orc_int8 *ORC_RESTRICT ptr2;
+  const orc_union32 *ORC_RESTRICT ptr4;
+  orc_union32 var34;
+  orc_int8 var35;
+  orc_int8 var36;
+  orc_int8 var37;
+  orc_union16 var38;
+  orc_union16 var39;
+
+  for (j = 0; j < m; j++) {
+    ptr0 = ORC_PTR_OFFSET (ex->arrays[0], ex->params[0] * j);
+    ptr1 = ORC_PTR_OFFSET (ex->arrays[1], ex->params[1] * j);
+    ptr2 = ORC_PTR_OFFSET (ex->arrays[2], ex->params[2] * j);
+    ptr4 = ORC_PTR_OFFSET (ex->arrays[4], ex->params[4] * j);
+
+
+    for (i = 0; i < n; i++) {
+      /* 0: loadl */
+      var34 = ptr4[i];
+      /* 1: splitlw */
+      {
+        orc_union32 _src;
+        _src.i = var34.i;
+        var38.i = _src.x2[1];
+        var39.i = _src.x2[0];
+      }
+      /* 2: splitwb */
+      {
+        orc_union16 _src;
+        _src.i = var38.i;
+        var35 = _src.x2[1];
+        var36 = _src.x2[0];
+      }
+      /* 3: storeb */
+      ptr2[i] = var35;
+      /* 4: storeb */
+      ptr1[i] = var36;
+      /* 5: select1wb */
+      {
+        orc_union16 _src;
+        _src.i = var39.i;
+        var37 = _src.x2[1];
+      }
+      /* 6: storeb */
+      ptr0[i] = var37;
+    }
+  }
+
+}
+
+void
+video_orc_convert_AYUV_Y444 (guint8 * ORC_RESTRICT d1, int d1_stride,
+    guint8 * ORC_RESTRICT d2, int d2_stride, guint8 * ORC_RESTRICT d3,
+    int d3_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m)
+{
+  OrcExecutor _ex, *ex = &_ex;
+  static volatile int p_inited = 0;
+  static OrcCode *c = 0;
+  void (*func) (OrcExecutor *);
+
+  if (!p_inited) {
+    orc_once_mutex_lock ();
+    if (!p_inited) {
+      OrcProgram *p;
+
+#if 1
+      static const orc_uint8 bc[] = {
+        1, 7, 9, 27, 118, 105, 100, 101, 111, 95, 111, 114, 99, 95, 99, 111,
+        110, 118, 101, 114, 116, 95, 65, 89, 85, 86, 95, 89, 52, 52, 52, 11,
+        1, 1, 11, 1, 1, 11, 1, 1, 12, 4, 4, 20, 2, 20, 2, 198,
+        33, 32, 4, 199, 2, 1, 33, 189, 0, 32, 2, 0,
+      };
+      p = orc_program_new_from_static_bytecode (bc);
+      orc_program_set_backup_function (p, _backup_video_orc_convert_AYUV_Y444);
+#else
+      p = orc_program_new ();
+      orc_program_set_2d (p);
+      orc_program_set_name (p, "video_orc_convert_AYUV_Y444");
+      orc_program_set_backup_function (p, _backup_video_orc_convert_AYUV_Y444);
+      orc_program_add_destination (p, 1, "d1");
+      orc_program_add_destination (p, 1, "d2");
+      orc_program_add_destination (p, 1, "d3");
+      orc_program_add_source (p, 4, "s1");
+      orc_program_add_temporary (p, 2, "t1");
+      orc_program_add_temporary (p, 2, "t2");
+
+      orc_program_append_2 (p, "splitlw", 0, ORC_VAR_T2, ORC_VAR_T1, ORC_VAR_S1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "splitwb", 0, ORC_VAR_D3, ORC_VAR_D2, ORC_VAR_T2,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "select1wb", 0, ORC_VAR_D1, ORC_VAR_T1,
+          ORC_VAR_D1, ORC_VAR_D1);
+#endif
+
+      orc_program_compile (p);
+      c = orc_program_take_code (p);
+      orc_program_free (p);
+    }
+    p_inited = TRUE;
+    orc_once_mutex_unlock ();
+  }
+  ex->arrays[ORC_VAR_A2] = c;
+  ex->program = 0;
+
+  ex->n = n;
+  ORC_EXECUTOR_M (ex) = m;
+  ex->arrays[ORC_VAR_D1] = d1;
+  ex->params[ORC_VAR_D1] = d1_stride;
+  ex->arrays[ORC_VAR_D2] = d2;
+  ex->params[ORC_VAR_D2] = d2_stride;
+  ex->arrays[ORC_VAR_D3] = d3;
+  ex->params[ORC_VAR_D3] = d3_stride;
+  ex->arrays[ORC_VAR_S1] = (void *) s1;
+  ex->params[ORC_VAR_S1] = s1_stride;
+
+  func = c->exec;
+  func (ex);
+}
+#endif
+
+
+/* video_orc_convert_Y42B_YUY2 */
+#ifdef DISABLE_ORC
+void
+video_orc_convert_Y42B_YUY2 (guint8 * ORC_RESTRICT d1, int d1_stride,
+    const guint8 * ORC_RESTRICT s1, int s1_stride,
+    const guint8 * ORC_RESTRICT s2, int s2_stride,
+    const guint8 * ORC_RESTRICT s3, int s3_stride, int n, int m)
+{
+  int i;
+  int j;
+  orc_union32 *ORC_RESTRICT ptr0;
+  const orc_union16 *ORC_RESTRICT ptr4;
+  const orc_int8 *ORC_RESTRICT ptr5;
+  const orc_int8 *ORC_RESTRICT ptr6;
+  orc_int8 var33;
+  orc_int8 var34;
+  orc_union16 var35;
+  orc_union32 var36;
+  orc_union16 var37;
+
+  for (j = 0; j < m; j++) {
+    ptr0 = ORC_PTR_OFFSET (d1, d1_stride * j);
+    ptr4 = ORC_PTR_OFFSET (s1, s1_stride * j);
+    ptr5 = ORC_PTR_OFFSET (s2, s2_stride * j);
+    ptr6 = ORC_PTR_OFFSET (s3, s3_stride * j);
+
+
+    for (i = 0; i < n; i++) {
+      /* 0: loadb */
+      var33 = ptr5[i];
+      /* 1: loadb */
+      var34 = ptr6[i];
+      /* 2: mergebw */
+      {
+        orc_union16 _dest;
+        _dest.x2[0] = var33;
+        _dest.x2[1] = var34;
+        var37.i = _dest.i;
+      }
+      /* 3: loadw */
+      var35 = ptr4[i];
+      /* 4: mergebw */
+      {
+        orc_union16 _dest;
+        _dest.x2[0] = var35.x2[0];
+        _dest.x2[1] = var37.x2[0];
+        var36.x2[0] = _dest.i;
+      }
+      {
+        orc_union16 _dest;
+        _dest.x2[0] = var35.x2[1];
+        _dest.x2[1] = var37.x2[1];
+        var36.x2[1] = _dest.i;
+      }
+      /* 5: storel */
+      ptr0[i] = var36;
+    }
+  }
+
+}
+
+#else
+static void
+_backup_video_orc_convert_Y42B_YUY2 (OrcExecutor * ORC_RESTRICT ex)
+{
+  int i;
+  int j;
+  int n = ex->n;
+  int m = ex->params[ORC_VAR_A1];
+  orc_union32 *ORC_RESTRICT ptr0;
+  const orc_union16 *ORC_RESTRICT ptr4;
+  const orc_int8 *ORC_RESTRICT ptr5;
+  const orc_int8 *ORC_RESTRICT ptr6;
+  orc_int8 var33;
+  orc_int8 var34;
+  orc_union16 var35;
+  orc_union32 var36;
+  orc_union16 var37;
+
+  for (j = 0; j < m; j++) {
+    ptr0 = ORC_PTR_OFFSET (ex->arrays[0], ex->params[0] * j);
+    ptr4 = ORC_PTR_OFFSET (ex->arrays[4], ex->params[4] * j);
+    ptr5 = ORC_PTR_OFFSET (ex->arrays[5], ex->params[5] * j);
+    ptr6 = ORC_PTR_OFFSET (ex->arrays[6], ex->params[6] * j);
+
+
+    for (i = 0; i < n; i++) {
+      /* 0: loadb */
+      var33 = ptr5[i];
+      /* 1: loadb */
+      var34 = ptr6[i];
+      /* 2: mergebw */
+      {
+        orc_union16 _dest;
+        _dest.x2[0] = var33;
+        _dest.x2[1] = var34;
+        var37.i = _dest.i;
+      }
+      /* 3: loadw */
+      var35 = ptr4[i];
+      /* 4: mergebw */
+      {
+        orc_union16 _dest;
+        _dest.x2[0] = var35.x2[0];
+        _dest.x2[1] = var37.x2[0];
+        var36.x2[0] = _dest.i;
+      }
+      {
+        orc_union16 _dest;
+        _dest.x2[0] = var35.x2[1];
+        _dest.x2[1] = var37.x2[1];
+        var36.x2[1] = _dest.i;
+      }
+      /* 5: storel */
+      ptr0[i] = var36;
+    }
+  }
+
+}
+
+void
+video_orc_convert_Y42B_YUY2 (guint8 * ORC_RESTRICT d1, int d1_stride,
+    const guint8 * ORC_RESTRICT s1, int s1_stride,
+    const guint8 * ORC_RESTRICT s2, int s2_stride,
+    const guint8 * ORC_RESTRICT s3, int s3_stride, int n, int m)
+{
+  OrcExecutor _ex, *ex = &_ex;
+  static volatile int p_inited = 0;
+  static OrcCode *c = 0;
+  void (*func) (OrcExecutor *);
+
+  if (!p_inited) {
+    orc_once_mutex_lock ();
+    if (!p_inited) {
+      OrcProgram *p;
+
+#if 1
+      static const orc_uint8 bc[] = {
+        1, 7, 9, 27, 118, 105, 100, 101, 111, 95, 111, 114, 99, 95, 99, 111,
+        110, 118, 101, 114, 116, 95, 89, 52, 50, 66, 95, 89, 85, 89, 50, 11,
+        4, 4, 12, 2, 2, 12, 1, 1, 12, 1, 1, 20, 2, 196, 32, 5,
+        6, 21, 1, 196, 0, 4, 32, 2, 0,
+      };
+      p = orc_program_new_from_static_bytecode (bc);
+      orc_program_set_backup_function (p, _backup_video_orc_convert_Y42B_YUY2);
+#else
+      p = orc_program_new ();
+      orc_program_set_2d (p);
+      orc_program_set_name (p, "video_orc_convert_Y42B_YUY2");
+      orc_program_set_backup_function (p, _backup_video_orc_convert_Y42B_YUY2);
+      orc_program_add_destination (p, 4, "d1");
+      orc_program_add_source (p, 2, "s1");
+      orc_program_add_source (p, 1, "s2");
+      orc_program_add_source (p, 1, "s3");
+      orc_program_add_temporary (p, 2, "t1");
+
+      orc_program_append_2 (p, "mergebw", 0, ORC_VAR_T1, ORC_VAR_S2, ORC_VAR_S3,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "mergebw", 1, ORC_VAR_D1, ORC_VAR_S1, ORC_VAR_T1,
+          ORC_VAR_D1);
+#endif
+
+      orc_program_compile (p);
+      c = orc_program_take_code (p);
+      orc_program_free (p);
+    }
+    p_inited = TRUE;
+    orc_once_mutex_unlock ();
+  }
+  ex->arrays[ORC_VAR_A2] = c;
+  ex->program = 0;
+
+  ex->n = n;
+  ORC_EXECUTOR_M (ex) = m;
+  ex->arrays[ORC_VAR_D1] = d1;
+  ex->params[ORC_VAR_D1] = d1_stride;
+  ex->arrays[ORC_VAR_S1] = (void *) s1;
+  ex->params[ORC_VAR_S1] = s1_stride;
+  ex->arrays[ORC_VAR_S2] = (void *) s2;
+  ex->params[ORC_VAR_S2] = s2_stride;
+  ex->arrays[ORC_VAR_S3] = (void *) s3;
+  ex->params[ORC_VAR_S3] = s3_stride;
+
+  func = c->exec;
+  func (ex);
+}
+#endif
+
+
+/* video_orc_convert_Y42B_UYVY */
+#ifdef DISABLE_ORC
+void
+video_orc_convert_Y42B_UYVY (guint8 * ORC_RESTRICT d1, int d1_stride,
+    const guint8 * ORC_RESTRICT s1, int s1_stride,
+    const guint8 * ORC_RESTRICT s2, int s2_stride,
+    const guint8 * ORC_RESTRICT s3, int s3_stride, int n, int m)
+{
+  int i;
+  int j;
+  orc_union32 *ORC_RESTRICT ptr0;
+  const orc_union16 *ORC_RESTRICT ptr4;
+  const orc_int8 *ORC_RESTRICT ptr5;
+  const orc_int8 *ORC_RESTRICT ptr6;
+  orc_int8 var33;
+  orc_int8 var34;
+  orc_union16 var35;
+  orc_union32 var36;
+  orc_union16 var37;
+
+  for (j = 0; j < m; j++) {
+    ptr0 = ORC_PTR_OFFSET (d1, d1_stride * j);
+    ptr4 = ORC_PTR_OFFSET (s1, s1_stride * j);
+    ptr5 = ORC_PTR_OFFSET (s2, s2_stride * j);
+    ptr6 = ORC_PTR_OFFSET (s3, s3_stride * j);
+
+
+    for (i = 0; i < n; i++) {
+      /* 0: loadb */
+      var33 = ptr5[i];
+      /* 1: loadb */
+      var34 = ptr6[i];
+      /* 2: mergebw */
+      {
+        orc_union16 _dest;
+        _dest.x2[0] = var33;
+        _dest.x2[1] = var34;
+        var37.i = _dest.i;
+      }
+      /* 3: loadw */
+      var35 = ptr4[i];
+      /* 4: mergebw */
+      {
+        orc_union16 _dest;
+        _dest.x2[0] = var37.x2[0];
+        _dest.x2[1] = var35.x2[0];
+        var36.x2[0] = _dest.i;
+      }
+      {
+        orc_union16 _dest;
+        _dest.x2[0] = var37.x2[1];
+        _dest.x2[1] = var35.x2[1];
+        var36.x2[1] = _dest.i;
+      }
+      /* 5: storel */
+      ptr0[i] = var36;
+    }
+  }
+
+}
+
+#else
+static void
+_backup_video_orc_convert_Y42B_UYVY (OrcExecutor * ORC_RESTRICT ex)
+{
+  int i;
+  int j;
+  int n = ex->n;
+  int m = ex->params[ORC_VAR_A1];
+  orc_union32 *ORC_RESTRICT ptr0;
+  const orc_union16 *ORC_RESTRICT ptr4;
+  const orc_int8 *ORC_RESTRICT ptr5;
+  const orc_int8 *ORC_RESTRICT ptr6;
+  orc_int8 var33;
+  orc_int8 var34;
+  orc_union16 var35;
+  orc_union32 var36;
+  orc_union16 var37;
+
+  for (j = 0; j < m; j++) {
+    ptr0 = ORC_PTR_OFFSET (ex->arrays[0], ex->params[0] * j);
+    ptr4 = ORC_PTR_OFFSET (ex->arrays[4], ex->params[4] * j);
+    ptr5 = ORC_PTR_OFFSET (ex->arrays[5], ex->params[5] * j);
+    ptr6 = ORC_PTR_OFFSET (ex->arrays[6], ex->params[6] * j);
+
+
+    for (i = 0; i < n; i++) {
+      /* 0: loadb */
+      var33 = ptr5[i];
+      /* 1: loadb */
+      var34 = ptr6[i];
+      /* 2: mergebw */
+      {
+        orc_union16 _dest;
+        _dest.x2[0] = var33;
+        _dest.x2[1] = var34;
+        var37.i = _dest.i;
+      }
+      /* 3: loadw */
+      var35 = ptr4[i];
+      /* 4: mergebw */
+      {
+        orc_union16 _dest;
+        _dest.x2[0] = var37.x2[0];
+        _dest.x2[1] = var35.x2[0];
+        var36.x2[0] = _dest.i;
+      }
+      {
+        orc_union16 _dest;
+        _dest.x2[0] = var37.x2[1];
+        _dest.x2[1] = var35.x2[1];
+        var36.x2[1] = _dest.i;
+      }
+      /* 5: storel */
+      ptr0[i] = var36;
+    }
+  }
+
+}
+
+void
+video_orc_convert_Y42B_UYVY (guint8 * ORC_RESTRICT d1, int d1_stride,
+    const guint8 * ORC_RESTRICT s1, int s1_stride,
+    const guint8 * ORC_RESTRICT s2, int s2_stride,
+    const guint8 * ORC_RESTRICT s3, int s3_stride, int n, int m)
+{
+  OrcExecutor _ex, *ex = &_ex;
+  static volatile int p_inited = 0;
+  static OrcCode *c = 0;
+  void (*func) (OrcExecutor *);
+
+  if (!p_inited) {
+    orc_once_mutex_lock ();
+    if (!p_inited) {
+      OrcProgram *p;
+
+#if 1
+      static const orc_uint8 bc[] = {
+        1, 7, 9, 27, 118, 105, 100, 101, 111, 95, 111, 114, 99, 95, 99, 111,
+        110, 118, 101, 114, 116, 95, 89, 52, 50, 66, 95, 85, 89, 86, 89, 11,
+        4, 4, 12, 2, 2, 12, 1, 1, 12, 1, 1, 20, 2, 196, 32, 5,
+        6, 21, 1, 196, 0, 32, 4, 2, 0,
+      };
+      p = orc_program_new_from_static_bytecode (bc);
+      orc_program_set_backup_function (p, _backup_video_orc_convert_Y42B_UYVY);
+#else
+      p = orc_program_new ();
+      orc_program_set_2d (p);
+      orc_program_set_name (p, "video_orc_convert_Y42B_UYVY");
+      orc_program_set_backup_function (p, _backup_video_orc_convert_Y42B_UYVY);
+      orc_program_add_destination (p, 4, "d1");
+      orc_program_add_source (p, 2, "s1");
+      orc_program_add_source (p, 1, "s2");
+      orc_program_add_source (p, 1, "s3");
+      orc_program_add_temporary (p, 2, "t1");
+
+      orc_program_append_2 (p, "mergebw", 0, ORC_VAR_T1, ORC_VAR_S2, ORC_VAR_S3,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "mergebw", 1, ORC_VAR_D1, ORC_VAR_T1, ORC_VAR_S1,
+          ORC_VAR_D1);
+#endif
+
+      orc_program_compile (p);
+      c = orc_program_take_code (p);
+      orc_program_free (p);
+    }
+    p_inited = TRUE;
+    orc_once_mutex_unlock ();
+  }
+  ex->arrays[ORC_VAR_A2] = c;
+  ex->program = 0;
+
+  ex->n = n;
+  ORC_EXECUTOR_M (ex) = m;
+  ex->arrays[ORC_VAR_D1] = d1;
+  ex->params[ORC_VAR_D1] = d1_stride;
+  ex->arrays[ORC_VAR_S1] = (void *) s1;
+  ex->params[ORC_VAR_S1] = s1_stride;
+  ex->arrays[ORC_VAR_S2] = (void *) s2;
+  ex->params[ORC_VAR_S2] = s2_stride;
+  ex->arrays[ORC_VAR_S3] = (void *) s3;
+  ex->params[ORC_VAR_S3] = s3_stride;
+
+  func = c->exec;
+  func (ex);
+}
+#endif
+
+
+/* video_orc_convert_Y42B_AYUV */
+#ifdef DISABLE_ORC
+void
+video_orc_convert_Y42B_AYUV (guint8 * ORC_RESTRICT d1, int d1_stride,
+    const guint8 * ORC_RESTRICT s1, int s1_stride,
+    const guint8 * ORC_RESTRICT s2, int s2_stride,
+    const guint8 * ORC_RESTRICT s3, int s3_stride, int p1, int n, int m)
+{
+  int i;
+  int j;
+  orc_union64 *ORC_RESTRICT ptr0;
+  const orc_union16 *ORC_RESTRICT ptr4;
+  const orc_int8 *ORC_RESTRICT ptr5;
+  const orc_int8 *ORC_RESTRICT ptr6;
+  orc_int8 var36;
+  orc_int8 var37;
+  orc_union16 var38;
+  orc_union16 var39;
+  orc_union64 var40;
+  orc_union16 var41;
+  orc_union32 var42;
+  orc_union32 var43;
+
+  for (j = 0; j < m; j++) {
+    ptr0 = ORC_PTR_OFFSET (d1, d1_stride * j);
+    ptr4 = ORC_PTR_OFFSET (s1, s1_stride * j);
+    ptr5 = ORC_PTR_OFFSET (s2, s2_stride * j);
+    ptr6 = ORC_PTR_OFFSET (s3, s3_stride * j);
+
+    /* 3: loadpb */
+    var38.x2[0] = p1;
+    var38.x2[1] = p1;
+
+    for (i = 0; i < n; i++) {
+      /* 0: loadb */
+      var36 = ptr5[i];
+      /* 1: loadb */
+      var37 = ptr6[i];
+      /* 2: mergebw */
+      {
+        orc_union16 _dest;
+        _dest.x2[0] = var36;
+        _dest.x2[1] = var37;
+        var41.i = _dest.i;
+      }
+      /* 4: loadw */
+      var39 = ptr4[i];
+      /* 5: mergebw */
+      {
+        orc_union16 _dest;
+        _dest.x2[0] = var38.x2[0];
+        _dest.x2[1] = var39.x2[0];
+        var42.x2[0] = _dest.i;
+      }
+      {
+        orc_union16 _dest;
+        _dest.x2[0] = var38.x2[1];
+        _dest.x2[1] = var39.x2[1];
+        var42.x2[1] = _dest.i;
+      }
+      /* 6: mergewl */
+      {
+        orc_union32 _dest;
+        _dest.x2[0] = var41.i;
+        _dest.x2[1] = var41.i;
+        var43.i = _dest.i;
+      }
+      /* 7: mergewl */
+      {
+        orc_union32 _dest;
+        _dest.x2[0] = var42.x2[0];
+        _dest.x2[1] = var43.x2[0];
+        var40.x2[0] = _dest.i;
+      }
+      {
+        orc_union32 _dest;
+        _dest.x2[0] = var42.x2[1];
+        _dest.x2[1] = var43.x2[1];
+        var40.x2[1] = _dest.i;
+      }
+      /* 8: storeq */
+      ptr0[i] = var40;
+    }
+  }
+
+}
+
+#else
+static void
+_backup_video_orc_convert_Y42B_AYUV (OrcExecutor * ORC_RESTRICT ex)
+{
+  int i;
+  int j;
+  int n = ex->n;
+  int m = ex->params[ORC_VAR_A1];
+  orc_union64 *ORC_RESTRICT ptr0;
+  const orc_union16 *ORC_RESTRICT ptr4;
+  const orc_int8 *ORC_RESTRICT ptr5;
+  const orc_int8 *ORC_RESTRICT ptr6;
+  orc_int8 var36;
+  orc_int8 var37;
+  orc_union16 var38;
+  orc_union16 var39;
+  orc_union64 var40;
+  orc_union16 var41;
+  orc_union32 var42;
+  orc_union32 var43;
+
+  for (j = 0; j < m; j++) {
+    ptr0 = ORC_PTR_OFFSET (ex->arrays[0], ex->params[0] * j);
+    ptr4 = ORC_PTR_OFFSET (ex->arrays[4], ex->params[4] * j);
+    ptr5 = ORC_PTR_OFFSET (ex->arrays[5], ex->params[5] * j);
+    ptr6 = ORC_PTR_OFFSET (ex->arrays[6], ex->params[6] * j);
+
+    /* 3: loadpb */
+    var38.x2[0] = ex->params[24];
+    var38.x2[1] = ex->params[24];
+
+    for (i = 0; i < n; i++) {
+      /* 0: loadb */
+      var36 = ptr5[i];
+      /* 1: loadb */
+      var37 = ptr6[i];
+      /* 2: mergebw */
+      {
+        orc_union16 _dest;
+        _dest.x2[0] = var36;
+        _dest.x2[1] = var37;
+        var41.i = _dest.i;
+      }
+      /* 4: loadw */
+      var39 = ptr4[i];
+      /* 5: mergebw */
+      {
+        orc_union16 _dest;
+        _dest.x2[0] = var38.x2[0];
+        _dest.x2[1] = var39.x2[0];
+        var42.x2[0] = _dest.i;
+      }
+      {
+        orc_union16 _dest;
+        _dest.x2[0] = var38.x2[1];
+        _dest.x2[1] = var39.x2[1];
+        var42.x2[1] = _dest.i;
+      }
+      /* 6: mergewl */
+      {
+        orc_union32 _dest;
+        _dest.x2[0] = var41.i;
+        _dest.x2[1] = var41.i;
+        var43.i = _dest.i;
+      }
+      /* 7: mergewl */
+      {
+        orc_union32 _dest;
+        _dest.x2[0] = var42.x2[0];
+        _dest.x2[1] = var43.x2[0];
+        var40.x2[0] = _dest.i;
+      }
+      {
+        orc_union32 _dest;
+        _dest.x2[0] = var42.x2[1];
+        _dest.x2[1] = var43.x2[1];
+        var40.x2[1] = _dest.i;
+      }
+      /* 8: storeq */
+      ptr0[i] = var40;
+    }
+  }
+
+}
+
+void
+video_orc_convert_Y42B_AYUV (guint8 * ORC_RESTRICT d1, int d1_stride,
+    const guint8 * ORC_RESTRICT s1, int s1_stride,
+    const guint8 * ORC_RESTRICT s2, int s2_stride,
+    const guint8 * ORC_RESTRICT s3, int s3_stride, int p1, int n, int m)
+{
+  OrcExecutor _ex, *ex = &_ex;
+  static volatile int p_inited = 0;
+  static OrcCode *c = 0;
+  void (*func) (OrcExecutor *);
+
+  if (!p_inited) {
+    orc_once_mutex_lock ();
+    if (!p_inited) {
+      OrcProgram *p;
+
+#if 1
+      static const orc_uint8 bc[] = {
+        1, 7, 9, 27, 118, 105, 100, 101, 111, 95, 111, 114, 99, 95, 99, 111,
+        110, 118, 101, 114, 116, 95, 89, 52, 50, 66, 95, 65, 89, 85, 86, 11,
+        8, 8, 12, 2, 2, 12, 1, 1, 12, 1, 1, 16, 1, 20, 2, 20,
+        2, 20, 4, 20, 4, 196, 32, 5, 6, 21, 1, 196, 35, 24, 4, 195,
+        34, 32, 32, 21, 1, 195, 0, 35, 34, 2, 0,
+      };
+      p = orc_program_new_from_static_bytecode (bc);
+      orc_program_set_backup_function (p, _backup_video_orc_convert_Y42B_AYUV);
+#else
+      p = orc_program_new ();
+      orc_program_set_2d (p);
+      orc_program_set_name (p, "video_orc_convert_Y42B_AYUV");
+      orc_program_set_backup_function (p, _backup_video_orc_convert_Y42B_AYUV);
+      orc_program_add_destination (p, 8, "d1");
+      orc_program_add_source (p, 2, "s1");
+      orc_program_add_source (p, 1, "s2");
+      orc_program_add_source (p, 1, "s3");
+      orc_program_add_parameter (p, 1, "p1");
+      orc_program_add_temporary (p, 2, "t1");
+      orc_program_add_temporary (p, 2, "t2");
+      orc_program_add_temporary (p, 4, "t3");
+      orc_program_add_temporary (p, 4, "t4");
+
+      orc_program_append_2 (p, "mergebw", 0, ORC_VAR_T1, ORC_VAR_S2, ORC_VAR_S3,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "mergebw", 1, ORC_VAR_T4, ORC_VAR_P1, ORC_VAR_S1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "mergewl", 0, ORC_VAR_T3, ORC_VAR_T1, ORC_VAR_T1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "mergewl", 1, ORC_VAR_D1, ORC_VAR_T4, ORC_VAR_T3,
+          ORC_VAR_D1);
+#endif
+
+      orc_program_compile (p);
+      c = orc_program_take_code (p);
+      orc_program_free (p);
+    }
+    p_inited = TRUE;
+    orc_once_mutex_unlock ();
+  }
+  ex->arrays[ORC_VAR_A2] = c;
+  ex->program = 0;
+
+  ex->n = n;
+  ORC_EXECUTOR_M (ex) = m;
+  ex->arrays[ORC_VAR_D1] = d1;
+  ex->params[ORC_VAR_D1] = d1_stride;
+  ex->arrays[ORC_VAR_S1] = (void *) s1;
+  ex->params[ORC_VAR_S1] = s1_stride;
+  ex->arrays[ORC_VAR_S2] = (void *) s2;
+  ex->params[ORC_VAR_S2] = s2_stride;
+  ex->arrays[ORC_VAR_S3] = (void *) s3;
+  ex->params[ORC_VAR_S3] = s3_stride;
+  ex->params[ORC_VAR_P1] = p1;
+
+  func = c->exec;
+  func (ex);
+}
+#endif
+
+
+/* video_orc_convert_Y444_YUY2 */
+#ifdef DISABLE_ORC
+void
+video_orc_convert_Y444_YUY2 (guint8 * ORC_RESTRICT d1, int d1_stride,
+    const guint8 * ORC_RESTRICT s1, int s1_stride,
+    const guint8 * ORC_RESTRICT s2, int s2_stride,
+    const guint8 * ORC_RESTRICT s3, int s3_stride, int n, int m)
+{
+  int i;
+  int j;
+  orc_union32 *ORC_RESTRICT ptr0;
+  const orc_union16 *ORC_RESTRICT ptr4;
+  const orc_union16 *ORC_RESTRICT ptr5;
+  const orc_union16 *ORC_RESTRICT ptr6;
+  orc_union16 var36;
+  orc_union16 var37;
+  orc_union16 var38;
+  orc_union32 var39;
+  orc_union32 var40;
+  orc_union16 var41;
+  orc_union16 var42;
+  orc_union16 var43;
+
+  for (j = 0; j < m; j++) {
+    ptr0 = ORC_PTR_OFFSET (d1, d1_stride * j);
+    ptr4 = ORC_PTR_OFFSET (s1, s1_stride * j);
+    ptr5 = ORC_PTR_OFFSET (s2, s2_stride * j);
+    ptr6 = ORC_PTR_OFFSET (s3, s3_stride * j);
+
+
+    for (i = 0; i < n; i++) {
+      /* 0: loadw */
+      var36 = ptr5[i];
+      /* 1: loadw */
+      var37 = ptr6[i];
+      /* 2: mergebw */
+      {
+        orc_union16 _dest;
+        _dest.x2[0] = var36.x2[0];
+        _dest.x2[1] = var37.x2[0];
+        var40.x2[0] = _dest.i;
+      }
+      {
+        orc_union16 _dest;
+        _dest.x2[0] = var36.x2[1];
+        _dest.x2[1] = var37.x2[1];
+        var40.x2[1] = _dest.i;
+      }
+      /* 3: splitlw */
+      {
+        orc_union32 _src;
+        _src.i = var40.i;
+        var41.i = _src.x2[1];
+        var42.i = _src.x2[0];
+      }
+      /* 4: avgub */
+      var43.x2[0] =
+          ((orc_uint8) var41.x2[0] + (orc_uint8) var42.x2[0] + 1) >> 1;
+      var43.x2[1] =
+          ((orc_uint8) var41.x2[1] + (orc_uint8) var42.x2[1] + 1) >> 1;
+      /* 5: loadw */
+      var38 = ptr4[i];
+      /* 6: mergebw */
+      {
+        orc_union16 _dest;
+        _dest.x2[0] = var38.x2[0];
+        _dest.x2[1] = var43.x2[0];
+        var39.x2[0] = _dest.i;
+      }
+      {
+        orc_union16 _dest;
+        _dest.x2[0] = var38.x2[1];
+        _dest.x2[1] = var43.x2[1];
+        var39.x2[1] = _dest.i;
+      }
+      /* 7: storel */
+      ptr0[i] = var39;
+    }
+  }
+
+}
+
+#else
+static void
+_backup_video_orc_convert_Y444_YUY2 (OrcExecutor * ORC_RESTRICT ex)
+{
+  int i;
+  int j;
+  int n = ex->n;
+  int m = ex->params[ORC_VAR_A1];
+  orc_union32 *ORC_RESTRICT ptr0;
+  const orc_union16 *ORC_RESTRICT ptr4;
+  const orc_union16 *ORC_RESTRICT ptr5;
+  const orc_union16 *ORC_RESTRICT ptr6;
+  orc_union16 var36;
+  orc_union16 var37;
+  orc_union16 var38;
+  orc_union32 var39;
+  orc_union32 var40;
+  orc_union16 var41;
+  orc_union16 var42;
+  orc_union16 var43;
+
+  for (j = 0; j < m; j++) {
+    ptr0 = ORC_PTR_OFFSET (ex->arrays[0], ex->params[0] * j);
+    ptr4 = ORC_PTR_OFFSET (ex->arrays[4], ex->params[4] * j);
+    ptr5 = ORC_PTR_OFFSET (ex->arrays[5], ex->params[5] * j);
+    ptr6 = ORC_PTR_OFFSET (ex->arrays[6], ex->params[6] * j);
+
+
+    for (i = 0; i < n; i++) {
+      /* 0: loadw */
+      var36 = ptr5[i];
+      /* 1: loadw */
+      var37 = ptr6[i];
+      /* 2: mergebw */
+      {
+        orc_union16 _dest;
+        _dest.x2[0] = var36.x2[0];
+        _dest.x2[1] = var37.x2[0];
+        var40.x2[0] = _dest.i;
+      }
+      {
+        orc_union16 _dest;
+        _dest.x2[0] = var36.x2[1];
+        _dest.x2[1] = var37.x2[1];
+        var40.x2[1] = _dest.i;
+      }
+      /* 3: splitlw */
+      {
+        orc_union32 _src;
+        _src.i = var40.i;
+        var41.i = _src.x2[1];
+        var42.i = _src.x2[0];
+      }
+      /* 4: avgub */
+      var43.x2[0] =
+          ((orc_uint8) var41.x2[0] + (orc_uint8) var42.x2[0] + 1) >> 1;
+      var43.x2[1] =
+          ((orc_uint8) var41.x2[1] + (orc_uint8) var42.x2[1] + 1) >> 1;
+      /* 5: loadw */
+      var38 = ptr4[i];
+      /* 6: mergebw */
+      {
+        orc_union16 _dest;
+        _dest.x2[0] = var38.x2[0];
+        _dest.x2[1] = var43.x2[0];
+        var39.x2[0] = _dest.i;
+      }
+      {
+        orc_union16 _dest;
+        _dest.x2[0] = var38.x2[1];
+        _dest.x2[1] = var43.x2[1];
+        var39.x2[1] = _dest.i;
+      }
+      /* 7: storel */
+      ptr0[i] = var39;
+    }
+  }
+
+}
+
+void
+video_orc_convert_Y444_YUY2 (guint8 * ORC_RESTRICT d1, int d1_stride,
+    const guint8 * ORC_RESTRICT s1, int s1_stride,
+    const guint8 * ORC_RESTRICT s2, int s2_stride,
+    const guint8 * ORC_RESTRICT s3, int s3_stride, int n, int m)
+{
+  OrcExecutor _ex, *ex = &_ex;
+  static volatile int p_inited = 0;
+  static OrcCode *c = 0;
+  void (*func) (OrcExecutor *);
+
+  if (!p_inited) {
+    orc_once_mutex_lock ();
+    if (!p_inited) {
+      OrcProgram *p;
+
+#if 1
+      static const orc_uint8 bc[] = {
+        1, 7, 9, 27, 118, 105, 100, 101, 111, 95, 111, 114, 99, 95, 99, 111,
+        110, 118, 101, 114, 116, 95, 89, 52, 52, 52, 95, 89, 85, 89, 50, 11,
+        4, 4, 12, 2, 2, 12, 2, 2, 12, 2, 2, 20, 2, 20, 4, 20,
+        2, 20, 2, 21, 1, 196, 33, 5, 6, 198, 34, 35, 33, 21, 1, 39,
+        32, 34, 35, 21, 1, 196, 0, 4, 32, 2, 0,
+      };
+      p = orc_program_new_from_static_bytecode (bc);
+      orc_program_set_backup_function (p, _backup_video_orc_convert_Y444_YUY2);
+#else
+      p = orc_program_new ();
+      orc_program_set_2d (p);
+      orc_program_set_name (p, "video_orc_convert_Y444_YUY2");
+      orc_program_set_backup_function (p, _backup_video_orc_convert_Y444_YUY2);
+      orc_program_add_destination (p, 4, "d1");
+      orc_program_add_source (p, 2, "s1");
+      orc_program_add_source (p, 2, "s2");
+      orc_program_add_source (p, 2, "s3");
+      orc_program_add_temporary (p, 2, "t1");
+      orc_program_add_temporary (p, 4, "t2");
+      orc_program_add_temporary (p, 2, "t3");
+      orc_program_add_temporary (p, 2, "t4");
+
+      orc_program_append_2 (p, "mergebw", 1, ORC_VAR_T2, ORC_VAR_S2, ORC_VAR_S3,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "splitlw", 0, ORC_VAR_T3, ORC_VAR_T4, ORC_VAR_T2,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "avgub", 1, ORC_VAR_T1, ORC_VAR_T3, ORC_VAR_T4,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "mergebw", 1, ORC_VAR_D1, ORC_VAR_S1, ORC_VAR_T1,
+          ORC_VAR_D1);
+#endif
+
+      orc_program_compile (p);
+      c = orc_program_take_code (p);
+      orc_program_free (p);
+    }
+    p_inited = TRUE;
+    orc_once_mutex_unlock ();
+  }
+  ex->arrays[ORC_VAR_A2] = c;
+  ex->program = 0;
+
+  ex->n = n;
+  ORC_EXECUTOR_M (ex) = m;
+  ex->arrays[ORC_VAR_D1] = d1;
+  ex->params[ORC_VAR_D1] = d1_stride;
+  ex->arrays[ORC_VAR_S1] = (void *) s1;
+  ex->params[ORC_VAR_S1] = s1_stride;
+  ex->arrays[ORC_VAR_S2] = (void *) s2;
+  ex->params[ORC_VAR_S2] = s2_stride;
+  ex->arrays[ORC_VAR_S3] = (void *) s3;
+  ex->params[ORC_VAR_S3] = s3_stride;
+
+  func = c->exec;
+  func (ex);
+}
+#endif
+
+
+/* video_orc_convert_Y444_UYVY */
+#ifdef DISABLE_ORC
+void
+video_orc_convert_Y444_UYVY (guint8 * ORC_RESTRICT d1, int d1_stride,
+    const guint8 * ORC_RESTRICT s1, int s1_stride,
+    const guint8 * ORC_RESTRICT s2, int s2_stride,
+    const guint8 * ORC_RESTRICT s3, int s3_stride, int n, int m)
+{
+  int i;
+  int j;
+  orc_union32 *ORC_RESTRICT ptr0;
+  const orc_union16 *ORC_RESTRICT ptr4;
+  const orc_union16 *ORC_RESTRICT ptr5;
+  const orc_union16 *ORC_RESTRICT ptr6;
+  orc_union16 var36;
+  orc_union16 var37;
+  orc_union16 var38;
+  orc_union32 var39;
+  orc_union32 var40;
+  orc_union16 var41;
+  orc_union16 var42;
+  orc_union16 var43;
+
+  for (j = 0; j < m; j++) {
+    ptr0 = ORC_PTR_OFFSET (d1, d1_stride * j);
+    ptr4 = ORC_PTR_OFFSET (s1, s1_stride * j);
+    ptr5 = ORC_PTR_OFFSET (s2, s2_stride * j);
+    ptr6 = ORC_PTR_OFFSET (s3, s3_stride * j);
+
+
+    for (i = 0; i < n; i++) {
+      /* 0: loadw */
+      var36 = ptr5[i];
+      /* 1: loadw */
+      var37 = ptr6[i];
+      /* 2: mergebw */
+      {
+        orc_union16 _dest;
+        _dest.x2[0] = var36.x2[0];
+        _dest.x2[1] = var37.x2[0];
+        var40.x2[0] = _dest.i;
+      }
+      {
+        orc_union16 _dest;
+        _dest.x2[0] = var36.x2[1];
+        _dest.x2[1] = var37.x2[1];
+        var40.x2[1] = _dest.i;
+      }
+      /* 3: splitlw */
+      {
+        orc_union32 _src;
+        _src.i = var40.i;
+        var41.i = _src.x2[1];
+        var42.i = _src.x2[0];
+      }
+      /* 4: avgub */
+      var43.x2[0] =
+          ((orc_uint8) var41.x2[0] + (orc_uint8) var42.x2[0] + 1) >> 1;
+      var43.x2[1] =
+          ((orc_uint8) var41.x2[1] + (orc_uint8) var42.x2[1] + 1) >> 1;
+      /* 5: loadw */
+      var38 = ptr4[i];
+      /* 6: mergebw */
+      {
+        orc_union16 _dest;
+        _dest.x2[0] = var43.x2[0];
+        _dest.x2[1] = var38.x2[0];
+        var39.x2[0] = _dest.i;
+      }
+      {
+        orc_union16 _dest;
+        _dest.x2[0] = var43.x2[1];
+        _dest.x2[1] = var38.x2[1];
+        var39.x2[1] = _dest.i;
+      }
+      /* 7: storel */
+      ptr0[i] = var39;
+    }
+  }
+
+}
+
+#else
+static void
+_backup_video_orc_convert_Y444_UYVY (OrcExecutor * ORC_RESTRICT ex)
+{
+  int i;
+  int j;
+  int n = ex->n;
+  int m = ex->params[ORC_VAR_A1];
+  orc_union32 *ORC_RESTRICT ptr0;
+  const orc_union16 *ORC_RESTRICT ptr4;
+  const orc_union16 *ORC_RESTRICT ptr5;
+  const orc_union16 *ORC_RESTRICT ptr6;
+  orc_union16 var36;
+  orc_union16 var37;
+  orc_union16 var38;
+  orc_union32 var39;
+  orc_union32 var40;
+  orc_union16 var41;
+  orc_union16 var42;
+  orc_union16 var43;
+
+  for (j = 0; j < m; j++) {
+    ptr0 = ORC_PTR_OFFSET (ex->arrays[0], ex->params[0] * j);
+    ptr4 = ORC_PTR_OFFSET (ex->arrays[4], ex->params[4] * j);
+    ptr5 = ORC_PTR_OFFSET (ex->arrays[5], ex->params[5] * j);
+    ptr6 = ORC_PTR_OFFSET (ex->arrays[6], ex->params[6] * j);
+
+
+    for (i = 0; i < n; i++) {
+      /* 0: loadw */
+      var36 = ptr5[i];
+      /* 1: loadw */
+      var37 = ptr6[i];
+      /* 2: mergebw */
+      {
+        orc_union16 _dest;
+        _dest.x2[0] = var36.x2[0];
+        _dest.x2[1] = var37.x2[0];
+        var40.x2[0] = _dest.i;
+      }
+      {
+        orc_union16 _dest;
+        _dest.x2[0] = var36.x2[1];
+        _dest.x2[1] = var37.x2[1];
+        var40.x2[1] = _dest.i;
+      }
+      /* 3: splitlw */
+      {
+        orc_union32 _src;
+        _src.i = var40.i;
+        var41.i = _src.x2[1];
+        var42.i = _src.x2[0];
+      }
+      /* 4: avgub */
+      var43.x2[0] =
+          ((orc_uint8) var41.x2[0] + (orc_uint8) var42.x2[0] + 1) >> 1;
+      var43.x2[1] =
+          ((orc_uint8) var41.x2[1] + (orc_uint8) var42.x2[1] + 1) >> 1;
+      /* 5: loadw */
+      var38 = ptr4[i];
+      /* 6: mergebw */
+      {
+        orc_union16 _dest;
+        _dest.x2[0] = var43.x2[0];
+        _dest.x2[1] = var38.x2[0];
+        var39.x2[0] = _dest.i;
+      }
+      {
+        orc_union16 _dest;
+        _dest.x2[0] = var43.x2[1];
+        _dest.x2[1] = var38.x2[1];
+        var39.x2[1] = _dest.i;
+      }
+      /* 7: storel */
+      ptr0[i] = var39;
+    }
+  }
+
+}
+
+void
+video_orc_convert_Y444_UYVY (guint8 * ORC_RESTRICT d1, int d1_stride,
+    const guint8 * ORC_RESTRICT s1, int s1_stride,
+    const guint8 * ORC_RESTRICT s2, int s2_stride,
+    const guint8 * ORC_RESTRICT s3, int s3_stride, int n, int m)
+{
+  OrcExecutor _ex, *ex = &_ex;
+  static volatile int p_inited = 0;
+  static OrcCode *c = 0;
+  void (*func) (OrcExecutor *);
+
+  if (!p_inited) {
+    orc_once_mutex_lock ();
+    if (!p_inited) {
+      OrcProgram *p;
+
+#if 1
+      static const orc_uint8 bc[] = {
+        1, 7, 9, 27, 118, 105, 100, 101, 111, 95, 111, 114, 99, 95, 99, 111,
+        110, 118, 101, 114, 116, 95, 89, 52, 52, 52, 95, 85, 89, 86, 89, 11,
+        4, 4, 12, 2, 2, 12, 2, 2, 12, 2, 2, 20, 2, 20, 4, 20,
+        2, 20, 2, 21, 1, 196, 33, 5, 6, 198, 34, 35, 33, 21, 1, 39,
+        32, 34, 35, 21, 1, 196, 0, 32, 4, 2, 0,
+      };
+      p = orc_program_new_from_static_bytecode (bc);
+      orc_program_set_backup_function (p, _backup_video_orc_convert_Y444_UYVY);
+#else
+      p = orc_program_new ();
+      orc_program_set_2d (p);
+      orc_program_set_name (p, "video_orc_convert_Y444_UYVY");
+      orc_program_set_backup_function (p, _backup_video_orc_convert_Y444_UYVY);
+      orc_program_add_destination (p, 4, "d1");
+      orc_program_add_source (p, 2, "s1");
+      orc_program_add_source (p, 2, "s2");
+      orc_program_add_source (p, 2, "s3");
+      orc_program_add_temporary (p, 2, "t1");
+      orc_program_add_temporary (p, 4, "t2");
+      orc_program_add_temporary (p, 2, "t3");
+      orc_program_add_temporary (p, 2, "t4");
+
+      orc_program_append_2 (p, "mergebw", 1, ORC_VAR_T2, ORC_VAR_S2, ORC_VAR_S3,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "splitlw", 0, ORC_VAR_T3, ORC_VAR_T4, ORC_VAR_T2,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "avgub", 1, ORC_VAR_T1, ORC_VAR_T3, ORC_VAR_T4,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "mergebw", 1, ORC_VAR_D1, ORC_VAR_T1, ORC_VAR_S1,
+          ORC_VAR_D1);
+#endif
+
+      orc_program_compile (p);
+      c = orc_program_take_code (p);
+      orc_program_free (p);
+    }
+    p_inited = TRUE;
+    orc_once_mutex_unlock ();
+  }
+  ex->arrays[ORC_VAR_A2] = c;
+  ex->program = 0;
+
+  ex->n = n;
+  ORC_EXECUTOR_M (ex) = m;
+  ex->arrays[ORC_VAR_D1] = d1;
+  ex->params[ORC_VAR_D1] = d1_stride;
+  ex->arrays[ORC_VAR_S1] = (void *) s1;
+  ex->params[ORC_VAR_S1] = s1_stride;
+  ex->arrays[ORC_VAR_S2] = (void *) s2;
+  ex->params[ORC_VAR_S2] = s2_stride;
+  ex->arrays[ORC_VAR_S3] = (void *) s3;
+  ex->params[ORC_VAR_S3] = s3_stride;
+
+  func = c->exec;
+  func (ex);
+}
+#endif
+
+
+/* video_orc_convert_Y444_AYUV */
+#ifdef DISABLE_ORC
+void
+video_orc_convert_Y444_AYUV (guint8 * ORC_RESTRICT d1, int d1_stride,
+    const guint8 * ORC_RESTRICT s1, int s1_stride,
+    const guint8 * ORC_RESTRICT s2, int s2_stride,
+    const guint8 * ORC_RESTRICT s3, int s3_stride, int p1, int n, int m)
+{
+  int i;
+  int j;
+  orc_union32 *ORC_RESTRICT ptr0;
+  const orc_int8 *ORC_RESTRICT ptr4;
+  const orc_int8 *ORC_RESTRICT ptr5;
+  const orc_int8 *ORC_RESTRICT ptr6;
+  orc_int8 var34;
+  orc_int8 var35;
+  orc_int8 var36;
+  orc_int8 var37;
+  orc_union32 var38;
+  orc_union16 var39;
+  orc_union16 var40;
+
+  for (j = 0; j < m; j++) {
+    ptr0 = ORC_PTR_OFFSET (d1, d1_stride * j);
+    ptr4 = ORC_PTR_OFFSET (s1, s1_stride * j);
+    ptr5 = ORC_PTR_OFFSET (s2, s2_stride * j);
+    ptr6 = ORC_PTR_OFFSET (s3, s3_stride * j);
+
+    /* 3: loadpb */
+    var36 = p1;
+
+    for (i = 0; i < n; i++) {
+      /* 0: loadb */
+      var34 = ptr5[i];
+      /* 1: loadb */
+      var35 = ptr6[i];
+      /* 2: mergebw */
+      {
+        orc_union16 _dest;
+        _dest.x2[0] = var34;
+        _dest.x2[1] = var35;
+        var39.i = _dest.i;
+      }
+      /* 4: loadb */
+      var37 = ptr4[i];
+      /* 5: mergebw */
+      {
+        orc_union16 _dest;
+        _dest.x2[0] = var36;
+        _dest.x2[1] = var37;
+        var40.i = _dest.i;
+      }
+      /* 6: mergewl */
+      {
+        orc_union32 _dest;
+        _dest.x2[0] = var40.i;
+        _dest.x2[1] = var39.i;
+        var38.i = _dest.i;
+      }
+      /* 7: storel */
+      ptr0[i] = var38;
+    }
+  }
+
+}
+
+#else
+static void
+_backup_video_orc_convert_Y444_AYUV (OrcExecutor * ORC_RESTRICT ex)
+{
+  int i;
+  int j;
+  int n = ex->n;
+  int m = ex->params[ORC_VAR_A1];
+  orc_union32 *ORC_RESTRICT ptr0;
+  const orc_int8 *ORC_RESTRICT ptr4;
+  const orc_int8 *ORC_RESTRICT ptr5;
+  const orc_int8 *ORC_RESTRICT ptr6;
+  orc_int8 var34;
+  orc_int8 var35;
+  orc_int8 var36;
+  orc_int8 var37;
+  orc_union32 var38;
+  orc_union16 var39;
+  orc_union16 var40;
+
+  for (j = 0; j < m; j++) {
+    ptr0 = ORC_PTR_OFFSET (ex->arrays[0], ex->params[0] * j);
+    ptr4 = ORC_PTR_OFFSET (ex->arrays[4], ex->params[4] * j);
+    ptr5 = ORC_PTR_OFFSET (ex->arrays[5], ex->params[5] * j);
+    ptr6 = ORC_PTR_OFFSET (ex->arrays[6], ex->params[6] * j);
+
+    /* 3: loadpb */
+    var36 = ex->params[24];
+
+    for (i = 0; i < n; i++) {
+      /* 0: loadb */
+      var34 = ptr5[i];
+      /* 1: loadb */
+      var35 = ptr6[i];
+      /* 2: mergebw */
+      {
+        orc_union16 _dest;
+        _dest.x2[0] = var34;
+        _dest.x2[1] = var35;
+        var39.i = _dest.i;
+      }
+      /* 4: loadb */
+      var37 = ptr4[i];
+      /* 5: mergebw */
+      {
+        orc_union16 _dest;
+        _dest.x2[0] = var36;
+        _dest.x2[1] = var37;
+        var40.i = _dest.i;
+      }
+      /* 6: mergewl */
+      {
+        orc_union32 _dest;
+        _dest.x2[0] = var40.i;
+        _dest.x2[1] = var39.i;
+        var38.i = _dest.i;
+      }
+      /* 7: storel */
+      ptr0[i] = var38;
+    }
+  }
+
+}
+
+void
+video_orc_convert_Y444_AYUV (guint8 * ORC_RESTRICT d1, int d1_stride,
+    const guint8 * ORC_RESTRICT s1, int s1_stride,
+    const guint8 * ORC_RESTRICT s2, int s2_stride,
+    const guint8 * ORC_RESTRICT s3, int s3_stride, int p1, int n, int m)
+{
+  OrcExecutor _ex, *ex = &_ex;
+  static volatile int p_inited = 0;
+  static OrcCode *c = 0;
+  void (*func) (OrcExecutor *);
+
+  if (!p_inited) {
+    orc_once_mutex_lock ();
+    if (!p_inited) {
+      OrcProgram *p;
+
+#if 1
+      static const orc_uint8 bc[] = {
+        1, 7, 9, 27, 118, 105, 100, 101, 111, 95, 111, 114, 99, 95, 99, 111,
+        110, 118, 101, 114, 116, 95, 89, 52, 52, 52, 95, 65, 89, 85, 86, 11,
+        4, 4, 12, 1, 1, 12, 1, 1, 12, 1, 1, 16, 1, 20, 2, 20,
+        2, 196, 32, 5, 6, 196, 33, 24, 4, 195, 0, 33, 32, 2, 0,
+      };
+      p = orc_program_new_from_static_bytecode (bc);
+      orc_program_set_backup_function (p, _backup_video_orc_convert_Y444_AYUV);
+#else
+      p = orc_program_new ();
+      orc_program_set_2d (p);
+      orc_program_set_name (p, "video_orc_convert_Y444_AYUV");
+      orc_program_set_backup_function (p, _backup_video_orc_convert_Y444_AYUV);
+      orc_program_add_destination (p, 4, "d1");
+      orc_program_add_source (p, 1, "s1");
+      orc_program_add_source (p, 1, "s2");
+      orc_program_add_source (p, 1, "s3");
+      orc_program_add_parameter (p, 1, "p1");
+      orc_program_add_temporary (p, 2, "t1");
+      orc_program_add_temporary (p, 2, "t2");
+
+      orc_program_append_2 (p, "mergebw", 0, ORC_VAR_T1, ORC_VAR_S2, ORC_VAR_S3,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "mergebw", 0, ORC_VAR_T2, ORC_VAR_P1, ORC_VAR_S1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "mergewl", 0, ORC_VAR_D1, ORC_VAR_T2, ORC_VAR_T1,
+          ORC_VAR_D1);
+#endif
+
+      orc_program_compile (p);
+      c = orc_program_take_code (p);
+      orc_program_free (p);
+    }
+    p_inited = TRUE;
+    orc_once_mutex_unlock ();
+  }
+  ex->arrays[ORC_VAR_A2] = c;
+  ex->program = 0;
+
+  ex->n = n;
+  ORC_EXECUTOR_M (ex) = m;
+  ex->arrays[ORC_VAR_D1] = d1;
+  ex->params[ORC_VAR_D1] = d1_stride;
+  ex->arrays[ORC_VAR_S1] = (void *) s1;
+  ex->params[ORC_VAR_S1] = s1_stride;
+  ex->arrays[ORC_VAR_S2] = (void *) s2;
+  ex->params[ORC_VAR_S2] = s2_stride;
+  ex->arrays[ORC_VAR_S3] = (void *) s3;
+  ex->params[ORC_VAR_S3] = s3_stride;
+  ex->params[ORC_VAR_P1] = p1;
+
+  func = c->exec;
+  func (ex);
+}
+#endif
+
+
+/* video_orc_convert_AYUV_ARGB */
+#ifdef DISABLE_ORC
+void
+video_orc_convert_AYUV_ARGB (guint8 * ORC_RESTRICT d1, int d1_stride,
+    const guint8 * ORC_RESTRICT s1, int s1_stride, int p1, int p2, int p3,
+    int p4, int p5, int n, int m)
+{
+  int i;
+  int j;
+  orc_union32 *ORC_RESTRICT ptr0;
+  const orc_union32 *ORC_RESTRICT ptr4;
+  orc_union32 var46;
+#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
+  volatile orc_union32 var47;
+#else
+  orc_union32 var47;
+#endif
+  orc_union16 var48;
+  orc_union16 var49;
+  orc_union16 var50;
+  orc_union16 var51;
+  orc_union16 var52;
+  orc_union32 var53;
+  orc_union32 var54;
+  orc_union16 var55;
+  orc_union16 var56;
+  orc_int8 var57;
+  orc_int8 var58;
+  orc_int8 var59;
+  orc_int8 var60;
+  orc_union16 var61;
+  orc_union16 var62;
+  orc_union16 var63;
+  orc_union16 var64;
+  orc_union16 var65;
+  orc_union16 var66;
+  orc_int8 var67;
+  orc_union16 var68;
+  orc_union16 var69;
+  orc_union16 var70;
+  orc_int8 var71;
+  orc_union16 var72;
+  orc_union16 var73;
+  orc_union16 var74;
+  orc_union16 var75;
+  orc_int8 var76;
+  orc_union16 var77;
+  orc_union32 var78;
+
+  for (j = 0; j < m; j++) {
+    ptr0 = ORC_PTR_OFFSET (d1, d1_stride * j);
+    ptr4 = ORC_PTR_OFFSET (s1, s1_stride * j);
+
+    /* 1: loadpb */
+    var47.x4[0] = (int) 0x00000080;     /* 128 or 6.32404e-322f */
+    var47.x4[1] = (int) 0x00000080;     /* 128 or 6.32404e-322f */
+    var47.x4[2] = (int) 0x00000080;     /* 128 or 6.32404e-322f */
+    var47.x4[3] = (int) 0x00000080;     /* 128 or 6.32404e-322f */
+    /* 9: loadpw */
+    var48.i = p1;
+    /* 11: loadpw */
+    var49.i = p2;
+    /* 16: loadpw */
+    var50.i = p3;
+    /* 20: loadpw */
+    var51.i = p4;
+    /* 23: loadpw */
+    var52.i = p5;
+
+    for (i = 0; i < n; i++) {
+      /* 0: loadl */
+      var46 = ptr4[i];
+      /* 2: subb */
+      var54.x4[0] = var46.x4[0] - var47.x4[0];
+      var54.x4[1] = var46.x4[1] - var47.x4[1];
+      var54.x4[2] = var46.x4[2] - var47.x4[2];
+      var54.x4[3] = var46.x4[3] - var47.x4[3];
+      /* 3: splitlw */
+      {
+        orc_union32 _src;
+        _src.i = var54.i;
+        var55.i = _src.x2[1];
+        var56.i = _src.x2[0];
+      }
+      /* 4: splitwb */
+      {
+        orc_union16 _src;
+        _src.i = var56.i;
+        var57 = _src.x2[1];
+        var58 = _src.x2[0];
+      }
+      /* 5: splitwb */
+      {
+        orc_union16 _src;
+        _src.i = var55.i;
+        var59 = _src.x2[1];
+        var60 = _src.x2[0];
+      }
+      /* 6: splatbw */
+      var61.i = ((var57 & 0xff) << 8) | (var57 & 0xff);
+      /* 7: splatbw */
+      var62.i = ((var60 & 0xff) << 8) | (var60 & 0xff);
+      /* 8: splatbw */
+      var63.i = ((var59 & 0xff) << 8) | (var59 & 0xff);
+      /* 10: mulhsw */
+      var64.i = (var61.i * var48.i) >> 16;
+      /* 12: mulhsw */
+      var65.i = (var63.i * var49.i) >> 16;
+      /* 13: addw */
+      var66.i = var64.i + var65.i;
+      /* 14: convssswb */
+      var67 = ORC_CLAMP_SB (var66.i);
+      /* 15: mergebw */
+      {
+        orc_union16 _dest;
+        _dest.x2[0] = var58;
+        _dest.x2[1] = var67;
+        var68.i = _dest.i;
+      }
+      /* 17: mulhsw */
+      var69.i = (var62.i * var50.i) >> 16;
+      /* 18: addw */
+      var70.i = var64.i + var69.i;
+      /* 19: convssswb */
+      var71 = ORC_CLAMP_SB (var70.i);
+      /* 21: mulhsw */
+      var72.i = (var62.i * var51.i) >> 16;
+      /* 22: addw */
+      var73.i = var64.i + var72.i;
+      /* 24: mulhsw */
+      var74.i = (var63.i * var52.i) >> 16;
+      /* 25: addw */
+      var75.i = var73.i + var74.i;
+      /* 26: convssswb */
+      var76 = ORC_CLAMP_SB (var75.i);
+      /* 27: mergebw */
+      {
+        orc_union16 _dest;
+        _dest.x2[0] = var76;
+        _dest.x2[1] = var71;
+        var77.i = _dest.i;
+      }
+      /* 28: mergewl */
+      {
+        orc_union32 _dest;
+        _dest.x2[0] = var68.i;
+        _dest.x2[1] = var77.i;
+        var78.i = _dest.i;
+      }
+      /* 29: addb */
+      var53.x4[0] = var78.x4[0] + var47.x4[0];
+      var53.x4[1] = var78.x4[1] + var47.x4[1];
+      var53.x4[2] = var78.x4[2] + var47.x4[2];
+      var53.x4[3] = var78.x4[3] + var47.x4[3];
+      /* 30: storel */
+      ptr0[i] = var53;
+    }
+  }
+
+}
+
+#else
+static void
+_backup_video_orc_convert_AYUV_ARGB (OrcExecutor * ORC_RESTRICT ex)
+{
+  int i;
+  int j;
+  int n = ex->n;
+  int m = ex->params[ORC_VAR_A1];
+  orc_union32 *ORC_RESTRICT ptr0;
+  const orc_union32 *ORC_RESTRICT ptr4;
+  orc_union32 var46;
+#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
+  volatile orc_union32 var47;
+#else
+  orc_union32 var47;
+#endif
+  orc_union16 var48;
+  orc_union16 var49;
+  orc_union16 var50;
+  orc_union16 var51;
+  orc_union16 var52;
+  orc_union32 var53;
+  orc_union32 var54;
+  orc_union16 var55;
+  orc_union16 var56;
+  orc_int8 var57;
+  orc_int8 var58;
+  orc_int8 var59;
+  orc_int8 var60;
+  orc_union16 var61;
+  orc_union16 var62;
+  orc_union16 var63;
+  orc_union16 var64;
+  orc_union16 var65;
+  orc_union16 var66;
+  orc_int8 var67;
+  orc_union16 var68;
+  orc_union16 var69;
+  orc_union16 var70;
+  orc_int8 var71;
+  orc_union16 var72;
+  orc_union16 var73;
+  orc_union16 var74;
+  orc_union16 var75;
+  orc_int8 var76;
+  orc_union16 var77;
+  orc_union32 var78;
+
+  for (j = 0; j < m; j++) {
+    ptr0 = ORC_PTR_OFFSET (ex->arrays[0], ex->params[0] * j);
+    ptr4 = ORC_PTR_OFFSET (ex->arrays[4], ex->params[4] * j);
+
+    /* 1: loadpb */
+    var47.x4[0] = (int) 0x00000080;     /* 128 or 6.32404e-322f */
+    var47.x4[1] = (int) 0x00000080;     /* 128 or 6.32404e-322f */
+    var47.x4[2] = (int) 0x00000080;     /* 128 or 6.32404e-322f */
+    var47.x4[3] = (int) 0x00000080;     /* 128 or 6.32404e-322f */
+    /* 9: loadpw */
+    var48.i = ex->params[24];
+    /* 11: loadpw */
+    var49.i = ex->params[25];
+    /* 16: loadpw */
+    var50.i = ex->params[26];
+    /* 20: loadpw */
+    var51.i = ex->params[27];
+    /* 23: loadpw */
+    var52.i = ex->params[28];
+
+    for (i = 0; i < n; i++) {
+      /* 0: loadl */
+      var46 = ptr4[i];
+      /* 2: subb */
+      var54.x4[0] = var46.x4[0] - var47.x4[0];
+      var54.x4[1] = var46.x4[1] - var47.x4[1];
+      var54.x4[2] = var46.x4[2] - var47.x4[2];
+      var54.x4[3] = var46.x4[3] - var47.x4[3];
+      /* 3: splitlw */
+      {
+        orc_union32 _src;
+        _src.i = var54.i;
+        var55.i = _src.x2[1];
+        var56.i = _src.x2[0];
+      }
+      /* 4: splitwb */
+      {
+        orc_union16 _src;
+        _src.i = var56.i;
+        var57 = _src.x2[1];
+        var58 = _src.x2[0];
+      }
+      /* 5: splitwb */
+      {
+        orc_union16 _src;
+        _src.i = var55.i;
+        var59 = _src.x2[1];
+        var60 = _src.x2[0];
+      }
+      /* 6: splatbw */
+      var61.i = ((var57 & 0xff) << 8) | (var57 & 0xff);
+      /* 7: splatbw */
+      var62.i = ((var60 & 0xff) << 8) | (var60 & 0xff);
+      /* 8: splatbw */
+      var63.i = ((var59 & 0xff) << 8) | (var59 & 0xff);
+      /* 10: mulhsw */
+      var64.i = (var61.i * var48.i) >> 16;
+      /* 12: mulhsw */
+      var65.i = (var63.i * var49.i) >> 16;
+      /* 13: addw */
+      var66.i = var64.i + var65.i;
+      /* 14: convssswb */
+      var67 = ORC_CLAMP_SB (var66.i);
+      /* 15: mergebw */
+      {
+        orc_union16 _dest;
+        _dest.x2[0] = var58;
+        _dest.x2[1] = var67;
+        var68.i = _dest.i;
+      }
+      /* 17: mulhsw */
+      var69.i = (var62.i * var50.i) >> 16;
+      /* 18: addw */
+      var70.i = var64.i + var69.i;
+      /* 19: convssswb */
+      var71 = ORC_CLAMP_SB (var70.i);
+      /* 21: mulhsw */
+      var72.i = (var62.i * var51.i) >> 16;
+      /* 22: addw */
+      var73.i = var64.i + var72.i;
+      /* 24: mulhsw */
+      var74.i = (var63.i * var52.i) >> 16;
+      /* 25: addw */
+      var75.i = var73.i + var74.i;
+      /* 26: convssswb */
+      var76 = ORC_CLAMP_SB (var75.i);
+      /* 27: mergebw */
+      {
+        orc_union16 _dest;
+        _dest.x2[0] = var76;
+        _dest.x2[1] = var71;
+        var77.i = _dest.i;
+      }
+      /* 28: mergewl */
+      {
+        orc_union32 _dest;
+        _dest.x2[0] = var68.i;
+        _dest.x2[1] = var77.i;
+        var78.i = _dest.i;
+      }
+      /* 29: addb */
+      var53.x4[0] = var78.x4[0] + var47.x4[0];
+      var53.x4[1] = var78.x4[1] + var47.x4[1];
+      var53.x4[2] = var78.x4[2] + var47.x4[2];
+      var53.x4[3] = var78.x4[3] + var47.x4[3];
+      /* 30: storel */
+      ptr0[i] = var53;
+    }
+  }
+
+}
+
+void
+video_orc_convert_AYUV_ARGB (guint8 * ORC_RESTRICT d1, int d1_stride,
+    const guint8 * ORC_RESTRICT s1, int s1_stride, int p1, int p2, int p3,
+    int p4, int p5, int n, int m)
+{
+  OrcExecutor _ex, *ex = &_ex;
+  static volatile int p_inited = 0;
+  static OrcCode *c = 0;
+  void (*func) (OrcExecutor *);
+
+  if (!p_inited) {
+    orc_once_mutex_lock ();
+    if (!p_inited) {
+      OrcProgram *p;
+
+#if 1
+      static const orc_uint8 bc[] = {
+        1, 7, 9, 27, 118, 105, 100, 101, 111, 95, 111, 114, 99, 95, 99, 111,
+        110, 118, 101, 114, 116, 95, 65, 89, 85, 86, 95, 65, 82, 71, 66, 11,
+        4, 4, 12, 4, 4, 14, 1, 128, 0, 0, 0, 16, 2, 16, 2, 16,
+        2, 16, 2, 16, 2, 20, 1, 20, 1, 20, 1, 20, 1, 20, 2, 20,
+        2, 20, 2, 20, 2, 20, 2, 20, 2, 20, 1, 20, 1, 20, 1, 20,
+        4, 21, 2, 65, 45, 4, 16, 198, 38, 36, 45, 199, 33, 32, 36, 199,
+        35, 34, 38, 151, 36, 33, 151, 37, 34, 151, 38, 35, 90, 36, 36, 24,
+        90, 39, 38, 25, 70, 39, 36, 39, 159, 42, 39, 196, 39, 32, 42, 90,
+        41, 37, 26, 70, 41, 36, 41, 159, 44, 41, 90, 40, 37, 27, 70, 40,
+        36, 40, 90, 36, 38, 28, 70, 40, 40, 36, 159, 43, 40, 196, 41, 43,
+        44, 195, 45, 39, 41, 21, 2, 33, 0, 45, 16, 2, 0,
+      };
+      p = orc_program_new_from_static_bytecode (bc);
+      orc_program_set_backup_function (p, _backup_video_orc_convert_AYUV_ARGB);
+#else
+      p = orc_program_new ();
+      orc_program_set_2d (p);
+      orc_program_set_name (p, "video_orc_convert_AYUV_ARGB");
+      orc_program_set_backup_function (p, _backup_video_orc_convert_AYUV_ARGB);
+      orc_program_add_destination (p, 4, "d1");
+      orc_program_add_source (p, 4, "s1");
+      orc_program_add_constant (p, 1, 0x00000080, "c1");
+      orc_program_add_parameter (p, 2, "p1");
+      orc_program_add_parameter (p, 2, "p2");
+      orc_program_add_parameter (p, 2, "p3");
+      orc_program_add_parameter (p, 2, "p4");
+      orc_program_add_parameter (p, 2, "p5");
+      orc_program_add_temporary (p, 1, "t1");
+      orc_program_add_temporary (p, 1, "t2");
+      orc_program_add_temporary (p, 1, "t3");
+      orc_program_add_temporary (p, 1, "t4");
+      orc_program_add_temporary (p, 2, "t5");
+      orc_program_add_temporary (p, 2, "t6");
+      orc_program_add_temporary (p, 2, "t7");
+      orc_program_add_temporary (p, 2, "t8");
+      orc_program_add_temporary (p, 2, "t9");
+      orc_program_add_temporary (p, 2, "t10");
+      orc_program_add_temporary (p, 1, "t11");
+      orc_program_add_temporary (p, 1, "t12");
+      orc_program_add_temporary (p, 1, "t13");
+      orc_program_add_temporary (p, 4, "t14");
+
+      orc_program_append_2 (p, "subb", 2, ORC_VAR_T14, ORC_VAR_S1, ORC_VAR_C1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "splitlw", 0, ORC_VAR_T7, ORC_VAR_T5,
+          ORC_VAR_T14, ORC_VAR_D1);
+      orc_program_append_2 (p, "splitwb", 0, ORC_VAR_T2, ORC_VAR_T1, ORC_VAR_T5,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "splitwb", 0, ORC_VAR_T4, ORC_VAR_T3, ORC_VAR_T7,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "splatbw", 0, ORC_VAR_T5, ORC_VAR_T2, ORC_VAR_D1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "splatbw", 0, ORC_VAR_T6, ORC_VAR_T3, ORC_VAR_D1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "splatbw", 0, ORC_VAR_T7, ORC_VAR_T4, ORC_VAR_D1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "mulhsw", 0, ORC_VAR_T5, ORC_VAR_T5, ORC_VAR_P1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "mulhsw", 0, ORC_VAR_T8, ORC_VAR_T7, ORC_VAR_P2,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "addw", 0, ORC_VAR_T8, ORC_VAR_T5, ORC_VAR_T8,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "convssswb", 0, ORC_VAR_T11, ORC_VAR_T8,
+          ORC_VAR_D1, ORC_VAR_D1);
+      orc_program_append_2 (p, "mergebw", 0, ORC_VAR_T8, ORC_VAR_T1,
+          ORC_VAR_T11, ORC_VAR_D1);
+      orc_program_append_2 (p, "mulhsw", 0, ORC_VAR_T10, ORC_VAR_T6, ORC_VAR_P3,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "addw", 0, ORC_VAR_T10, ORC_VAR_T5, ORC_VAR_T10,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "convssswb", 0, ORC_VAR_T13, ORC_VAR_T10,
+          ORC_VAR_D1, ORC_VAR_D1);
+      orc_program_append_2 (p, "mulhsw", 0, ORC_VAR_T9, ORC_VAR_T6, ORC_VAR_P4,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "addw", 0, ORC_VAR_T9, ORC_VAR_T5, ORC_VAR_T9,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "mulhsw", 0, ORC_VAR_T5, ORC_VAR_T7, ORC_VAR_P5,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "addw", 0, ORC_VAR_T9, ORC_VAR_T9, ORC_VAR_T5,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "convssswb", 0, ORC_VAR_T12, ORC_VAR_T9,
+          ORC_VAR_D1, ORC_VAR_D1);
+      orc_program_append_2 (p, "mergebw", 0, ORC_VAR_T10, ORC_VAR_T12,
+          ORC_VAR_T13, ORC_VAR_D1);
+      orc_program_append_2 (p, "mergewl", 0, ORC_VAR_T14, ORC_VAR_T8,
+          ORC_VAR_T10, ORC_VAR_D1);
+      orc_program_append_2 (p, "addb", 2, ORC_VAR_D1, ORC_VAR_T14, ORC_VAR_C1,
+          ORC_VAR_D1);
+#endif
+
+      orc_program_compile (p);
+      c = orc_program_take_code (p);
+      orc_program_free (p);
+    }
+    p_inited = TRUE;
+    orc_once_mutex_unlock ();
+  }
+  ex->arrays[ORC_VAR_A2] = c;
+  ex->program = 0;
+
+  ex->n = n;
+  ORC_EXECUTOR_M (ex) = m;
+  ex->arrays[ORC_VAR_D1] = d1;
+  ex->params[ORC_VAR_D1] = d1_stride;
+  ex->arrays[ORC_VAR_S1] = (void *) s1;
+  ex->params[ORC_VAR_S1] = s1_stride;
+  ex->params[ORC_VAR_P1] = p1;
+  ex->params[ORC_VAR_P2] = p2;
+  ex->params[ORC_VAR_P3] = p3;
+  ex->params[ORC_VAR_P4] = p4;
+  ex->params[ORC_VAR_P5] = p5;
+
+  func = c->exec;
+  func (ex);
+}
+#endif
+
+
+/* video_orc_convert_AYUV_BGRA */
+#ifdef DISABLE_ORC
+void
+video_orc_convert_AYUV_BGRA (guint8 * ORC_RESTRICT d1, int d1_stride,
+    const guint8 * ORC_RESTRICT s1, int s1_stride, int p1, int p2, int p3,
+    int p4, int p5, int n, int m)
+{
+  int i;
+  int j;
+  orc_union32 *ORC_RESTRICT ptr0;
+  const orc_union32 *ORC_RESTRICT ptr4;
+  orc_union32 var46;
+#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
+  volatile orc_union32 var47;
+#else
+  orc_union32 var47;
+#endif
+  orc_union16 var48;
+  orc_union16 var49;
+  orc_union16 var50;
+  orc_union16 var51;
+  orc_union16 var52;
+  orc_union32 var53;
+  orc_union32 var54;
+  orc_union16 var55;
+  orc_union16 var56;
+  orc_int8 var57;
+  orc_int8 var58;
+  orc_int8 var59;
+  orc_int8 var60;
+  orc_union16 var61;
+  orc_union16 var62;
+  orc_union16 var63;
+  orc_union16 var64;
+  orc_union16 var65;
+  orc_union16 var66;
+  orc_int8 var67;
+  orc_union16 var68;
+  orc_union16 var69;
+  orc_union16 var70;
+  orc_int8 var71;
+  orc_union16 var72;
+  orc_union16 var73;
+  orc_union16 var74;
+  orc_union16 var75;
+  orc_int8 var76;
+  orc_union16 var77;
+  orc_union32 var78;
+
+  for (j = 0; j < m; j++) {
+    ptr0 = ORC_PTR_OFFSET (d1, d1_stride * j);
+    ptr4 = ORC_PTR_OFFSET (s1, s1_stride * j);
+
+    /* 1: loadpb */
+    var47.x4[0] = (int) 0x00000080;     /* 128 or 6.32404e-322f */
+    var47.x4[1] = (int) 0x00000080;     /* 128 or 6.32404e-322f */
+    var47.x4[2] = (int) 0x00000080;     /* 128 or 6.32404e-322f */
+    var47.x4[3] = (int) 0x00000080;     /* 128 or 6.32404e-322f */
+    /* 9: loadpw */
+    var48.i = p1;
+    /* 11: loadpw */
+    var49.i = p2;
+    /* 16: loadpw */
+    var50.i = p3;
+    /* 20: loadpw */
+    var51.i = p4;
+    /* 23: loadpw */
+    var52.i = p5;
+
+    for (i = 0; i < n; i++) {
+      /* 0: loadl */
+      var46 = ptr4[i];
+      /* 2: subb */
+      var54.x4[0] = var46.x4[0] - var47.x4[0];
+      var54.x4[1] = var46.x4[1] - var47.x4[1];
+      var54.x4[2] = var46.x4[2] - var47.x4[2];
+      var54.x4[3] = var46.x4[3] - var47.x4[3];
+      /* 3: splitlw */
+      {
+        orc_union32 _src;
+        _src.i = var54.i;
+        var55.i = _src.x2[1];
+        var56.i = _src.x2[0];
+      }
+      /* 4: splitwb */
+      {
+        orc_union16 _src;
+        _src.i = var56.i;
+        var57 = _src.x2[1];
+        var58 = _src.x2[0];
+      }
+      /* 5: splitwb */
+      {
+        orc_union16 _src;
+        _src.i = var55.i;
+        var59 = _src.x2[1];
+        var60 = _src.x2[0];
+      }
+      /* 6: splatbw */
+      var61.i = ((var57 & 0xff) << 8) | (var57 & 0xff);
+      /* 7: splatbw */
+      var62.i = ((var60 & 0xff) << 8) | (var60 & 0xff);
+      /* 8: splatbw */
+      var63.i = ((var59 & 0xff) << 8) | (var59 & 0xff);
+      /* 10: mulhsw */
+      var64.i = (var61.i * var48.i) >> 16;
+      /* 12: mulhsw */
+      var65.i = (var63.i * var49.i) >> 16;
+      /* 13: addw */
+      var66.i = var64.i + var65.i;
+      /* 14: convssswb */
+      var67 = ORC_CLAMP_SB (var66.i);
+      /* 15: mergebw */
+      {
+        orc_union16 _dest;
+        _dest.x2[0] = var67;
+        _dest.x2[1] = var58;
+        var68.i = _dest.i;
+      }
+      /* 17: mulhsw */
+      var69.i = (var62.i * var50.i) >> 16;
+      /* 18: addw */
+      var70.i = var64.i + var69.i;
+      /* 19: convssswb */
+      var71 = ORC_CLAMP_SB (var70.i);
+      /* 21: mulhsw */
+      var72.i = (var62.i * var51.i) >> 16;
+      /* 22: addw */
+      var73.i = var64.i + var72.i;
+      /* 24: mulhsw */
+      var74.i = (var63.i * var52.i) >> 16;
+      /* 25: addw */
+      var75.i = var73.i + var74.i;
+      /* 26: convssswb */
+      var76 = ORC_CLAMP_SB (var75.i);
+      /* 27: mergebw */
+      {
+        orc_union16 _dest;
+        _dest.x2[0] = var71;
+        _dest.x2[1] = var76;
+        var77.i = _dest.i;
+      }
+      /* 28: mergewl */
+      {
+        orc_union32 _dest;
+        _dest.x2[0] = var77.i;
+        _dest.x2[1] = var68.i;
+        var78.i = _dest.i;
+      }
+      /* 29: addb */
+      var53.x4[0] = var78.x4[0] + var47.x4[0];
+      var53.x4[1] = var78.x4[1] + var47.x4[1];
+      var53.x4[2] = var78.x4[2] + var47.x4[2];
+      var53.x4[3] = var78.x4[3] + var47.x4[3];
+      /* 30: storel */
+      ptr0[i] = var53;
+    }
+  }
+
+}
+
+#else
+static void
+_backup_video_orc_convert_AYUV_BGRA (OrcExecutor * ORC_RESTRICT ex)
+{
+  int i;
+  int j;
+  int n = ex->n;
+  int m = ex->params[ORC_VAR_A1];
+  orc_union32 *ORC_RESTRICT ptr0;
+  const orc_union32 *ORC_RESTRICT ptr4;
+  orc_union32 var46;
+#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
+  volatile orc_union32 var47;
+#else
+  orc_union32 var47;
+#endif
+  orc_union16 var48;
+  orc_union16 var49;
+  orc_union16 var50;
+  orc_union16 var51;
+  orc_union16 var52;
+  orc_union32 var53;
+  orc_union32 var54;
+  orc_union16 var55;
+  orc_union16 var56;
+  orc_int8 var57;
+  orc_int8 var58;
+  orc_int8 var59;
+  orc_int8 var60;
+  orc_union16 var61;
+  orc_union16 var62;
+  orc_union16 var63;
+  orc_union16 var64;
+  orc_union16 var65;
+  orc_union16 var66;
+  orc_int8 var67;
+  orc_union16 var68;
+  orc_union16 var69;
+  orc_union16 var70;
+  orc_int8 var71;
+  orc_union16 var72;
+  orc_union16 var73;
+  orc_union16 var74;
+  orc_union16 var75;
+  orc_int8 var76;
+  orc_union16 var77;
+  orc_union32 var78;
+
+  for (j = 0; j < m; j++) {
+    ptr0 = ORC_PTR_OFFSET (ex->arrays[0], ex->params[0] * j);
+    ptr4 = ORC_PTR_OFFSET (ex->arrays[4], ex->params[4] * j);
+
+    /* 1: loadpb */
+    var47.x4[0] = (int) 0x00000080;     /* 128 or 6.32404e-322f */
+    var47.x4[1] = (int) 0x00000080;     /* 128 or 6.32404e-322f */
+    var47.x4[2] = (int) 0x00000080;     /* 128 or 6.32404e-322f */
+    var47.x4[3] = (int) 0x00000080;     /* 128 or 6.32404e-322f */
+    /* 9: loadpw */
+    var48.i = ex->params[24];
+    /* 11: loadpw */
+    var49.i = ex->params[25];
+    /* 16: loadpw */
+    var50.i = ex->params[26];
+    /* 20: loadpw */
+    var51.i = ex->params[27];
+    /* 23: loadpw */
+    var52.i = ex->params[28];
+
+    for (i = 0; i < n; i++) {
+      /* 0: loadl */
+      var46 = ptr4[i];
+      /* 2: subb */
+      var54.x4[0] = var46.x4[0] - var47.x4[0];
+      var54.x4[1] = var46.x4[1] - var47.x4[1];
+      var54.x4[2] = var46.x4[2] - var47.x4[2];
+      var54.x4[3] = var46.x4[3] - var47.x4[3];
+      /* 3: splitlw */
+      {
+        orc_union32 _src;
+        _src.i = var54.i;
+        var55.i = _src.x2[1];
+        var56.i = _src.x2[0];
+      }
+      /* 4: splitwb */
+      {
+        orc_union16 _src;
+        _src.i = var56.i;
+        var57 = _src.x2[1];
+        var58 = _src.x2[0];
+      }
+      /* 5: splitwb */
+      {
+        orc_union16 _src;
+        _src.i = var55.i;
+        var59 = _src.x2[1];
+        var60 = _src.x2[0];
+      }
+      /* 6: splatbw */
+      var61.i = ((var57 & 0xff) << 8) | (var57 & 0xff);
+      /* 7: splatbw */
+      var62.i = ((var60 & 0xff) << 8) | (var60 & 0xff);
+      /* 8: splatbw */
+      var63.i = ((var59 & 0xff) << 8) | (var59 & 0xff);
+      /* 10: mulhsw */
+      var64.i = (var61.i * var48.i) >> 16;
+      /* 12: mulhsw */
+      var65.i = (var63.i * var49.i) >> 16;
+      /* 13: addw */
+      var66.i = var64.i + var65.i;
+      /* 14: convssswb */
+      var67 = ORC_CLAMP_SB (var66.i);
+      /* 15: mergebw */
+      {
+        orc_union16 _dest;
+        _dest.x2[0] = var67;
+        _dest.x2[1] = var58;
+        var68.i = _dest.i;
+      }
+      /* 17: mulhsw */
+      var69.i = (var62.i * var50.i) >> 16;
+      /* 18: addw */
+      var70.i = var64.i + var69.i;
+      /* 19: convssswb */
+      var71 = ORC_CLAMP_SB (var70.i);
+      /* 21: mulhsw */
+      var72.i = (var62.i * var51.i) >> 16;
+      /* 22: addw */
+      var73.i = var64.i + var72.i;
+      /* 24: mulhsw */
+      var74.i = (var63.i * var52.i) >> 16;
+      /* 25: addw */
+      var75.i = var73.i + var74.i;
+      /* 26: convssswb */
+      var76 = ORC_CLAMP_SB (var75.i);
+      /* 27: mergebw */
+      {
+        orc_union16 _dest;
+        _dest.x2[0] = var71;
+        _dest.x2[1] = var76;
+        var77.i = _dest.i;
+      }
+      /* 28: mergewl */
+      {
+        orc_union32 _dest;
+        _dest.x2[0] = var77.i;
+        _dest.x2[1] = var68.i;
+        var78.i = _dest.i;
+      }
+      /* 29: addb */
+      var53.x4[0] = var78.x4[0] + var47.x4[0];
+      var53.x4[1] = var78.x4[1] + var47.x4[1];
+      var53.x4[2] = var78.x4[2] + var47.x4[2];
+      var53.x4[3] = var78.x4[3] + var47.x4[3];
+      /* 30: storel */
+      ptr0[i] = var53;
+    }
+  }
+
+}
+
+void
+video_orc_convert_AYUV_BGRA (guint8 * ORC_RESTRICT d1, int d1_stride,
+    const guint8 * ORC_RESTRICT s1, int s1_stride, int p1, int p2, int p3,
+    int p4, int p5, int n, int m)
+{
+  OrcExecutor _ex, *ex = &_ex;
+  static volatile int p_inited = 0;
+  static OrcCode *c = 0;
+  void (*func) (OrcExecutor *);
+
+  if (!p_inited) {
+    orc_once_mutex_lock ();
+    if (!p_inited) {
+      OrcProgram *p;
+
+#if 1
+      static const orc_uint8 bc[] = {
+        1, 7, 9, 27, 118, 105, 100, 101, 111, 95, 111, 114, 99, 95, 99, 111,
+        110, 118, 101, 114, 116, 95, 65, 89, 85, 86, 95, 66, 71, 82, 65, 11,
+        4, 4, 12, 4, 4, 14, 1, 128, 0, 0, 0, 16, 2, 16, 2, 16,
+        2, 16, 2, 16, 2, 20, 1, 20, 1, 20, 1, 20, 1, 20, 2, 20,
+        2, 20, 2, 20, 2, 20, 2, 20, 2, 20, 1, 20, 1, 20, 1, 20,
+        4, 21, 2, 65, 45, 4, 16, 198, 38, 36, 45, 199, 33, 32, 36, 199,
+        35, 34, 38, 151, 36, 33, 151, 37, 34, 151, 38, 35, 90, 36, 36, 24,
+        90, 39, 38, 25, 70, 39, 36, 39, 159, 42, 39, 196, 39, 42, 32, 90,
+        41, 37, 26, 70, 41, 36, 41, 159, 44, 41, 90, 40, 37, 27, 70, 40,
+        36, 40, 90, 36, 38, 28, 70, 40, 40, 36, 159, 43, 40, 196, 41, 44,
+        43, 195, 45, 41, 39, 21, 2, 33, 0, 45, 16, 2, 0,
+      };
+      p = orc_program_new_from_static_bytecode (bc);
+      orc_program_set_backup_function (p, _backup_video_orc_convert_AYUV_BGRA);
+#else
+      p = orc_program_new ();
+      orc_program_set_2d (p);
+      orc_program_set_name (p, "video_orc_convert_AYUV_BGRA");
+      orc_program_set_backup_function (p, _backup_video_orc_convert_AYUV_BGRA);
+      orc_program_add_destination (p, 4, "d1");
+      orc_program_add_source (p, 4, "s1");
+      orc_program_add_constant (p, 1, 0x00000080, "c1");
+      orc_program_add_parameter (p, 2, "p1");
+      orc_program_add_parameter (p, 2, "p2");
+      orc_program_add_parameter (p, 2, "p3");
+      orc_program_add_parameter (p, 2, "p4");
+      orc_program_add_parameter (p, 2, "p5");
+      orc_program_add_temporary (p, 1, "t1");
+      orc_program_add_temporary (p, 1, "t2");
+      orc_program_add_temporary (p, 1, "t3");
+      orc_program_add_temporary (p, 1, "t4");
+      orc_program_add_temporary (p, 2, "t5");
+      orc_program_add_temporary (p, 2, "t6");
+      orc_program_add_temporary (p, 2, "t7");
+      orc_program_add_temporary (p, 2, "t8");
+      orc_program_add_temporary (p, 2, "t9");
+      orc_program_add_temporary (p, 2, "t10");
+      orc_program_add_temporary (p, 1, "t11");
+      orc_program_add_temporary (p, 1, "t12");
+      orc_program_add_temporary (p, 1, "t13");
+      orc_program_add_temporary (p, 4, "t14");
+
+      orc_program_append_2 (p, "subb", 2, ORC_VAR_T14, ORC_VAR_S1, ORC_VAR_C1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "splitlw", 0, ORC_VAR_T7, ORC_VAR_T5,
+          ORC_VAR_T14, ORC_VAR_D1);
+      orc_program_append_2 (p, "splitwb", 0, ORC_VAR_T2, ORC_VAR_T1, ORC_VAR_T5,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "splitwb", 0, ORC_VAR_T4, ORC_VAR_T3, ORC_VAR_T7,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "splatbw", 0, ORC_VAR_T5, ORC_VAR_T2, ORC_VAR_D1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "splatbw", 0, ORC_VAR_T6, ORC_VAR_T3, ORC_VAR_D1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "splatbw", 0, ORC_VAR_T7, ORC_VAR_T4, ORC_VAR_D1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "mulhsw", 0, ORC_VAR_T5, ORC_VAR_T5, ORC_VAR_P1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "mulhsw", 0, ORC_VAR_T8, ORC_VAR_T7, ORC_VAR_P2,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "addw", 0, ORC_VAR_T8, ORC_VAR_T5, ORC_VAR_T8,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "convssswb", 0, ORC_VAR_T11, ORC_VAR_T8,
+          ORC_VAR_D1, ORC_VAR_D1);
+      orc_program_append_2 (p, "mergebw", 0, ORC_VAR_T8, ORC_VAR_T11,
+          ORC_VAR_T1, ORC_VAR_D1);
+      orc_program_append_2 (p, "mulhsw", 0, ORC_VAR_T10, ORC_VAR_T6, ORC_VAR_P3,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "addw", 0, ORC_VAR_T10, ORC_VAR_T5, ORC_VAR_T10,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "convssswb", 0, ORC_VAR_T13, ORC_VAR_T10,
+          ORC_VAR_D1, ORC_VAR_D1);
+      orc_program_append_2 (p, "mulhsw", 0, ORC_VAR_T9, ORC_VAR_T6, ORC_VAR_P4,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "addw", 0, ORC_VAR_T9, ORC_VAR_T5, ORC_VAR_T9,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "mulhsw", 0, ORC_VAR_T5, ORC_VAR_T7, ORC_VAR_P5,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "addw", 0, ORC_VAR_T9, ORC_VAR_T9, ORC_VAR_T5,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "convssswb", 0, ORC_VAR_T12, ORC_VAR_T9,
+          ORC_VAR_D1, ORC_VAR_D1);
+      orc_program_append_2 (p, "mergebw", 0, ORC_VAR_T10, ORC_VAR_T13,
+          ORC_VAR_T12, ORC_VAR_D1);
+      orc_program_append_2 (p, "mergewl", 0, ORC_VAR_T14, ORC_VAR_T10,
+          ORC_VAR_T8, ORC_VAR_D1);
+      orc_program_append_2 (p, "addb", 2, ORC_VAR_D1, ORC_VAR_T14, ORC_VAR_C1,
+          ORC_VAR_D1);
+#endif
+
+      orc_program_compile (p);
+      c = orc_program_take_code (p);
+      orc_program_free (p);
+    }
+    p_inited = TRUE;
+    orc_once_mutex_unlock ();
+  }
+  ex->arrays[ORC_VAR_A2] = c;
+  ex->program = 0;
+
+  ex->n = n;
+  ORC_EXECUTOR_M (ex) = m;
+  ex->arrays[ORC_VAR_D1] = d1;
+  ex->params[ORC_VAR_D1] = d1_stride;
+  ex->arrays[ORC_VAR_S1] = (void *) s1;
+  ex->params[ORC_VAR_S1] = s1_stride;
+  ex->params[ORC_VAR_P1] = p1;
+  ex->params[ORC_VAR_P2] = p2;
+  ex->params[ORC_VAR_P3] = p3;
+  ex->params[ORC_VAR_P4] = p4;
+  ex->params[ORC_VAR_P5] = p5;
+
+  func = c->exec;
+  func (ex);
+}
+#endif
+
+
+/* video_orc_convert_AYUV_ABGR */
+#ifdef DISABLE_ORC
+void
+video_orc_convert_AYUV_ABGR (guint8 * ORC_RESTRICT d1, int d1_stride,
+    const guint8 * ORC_RESTRICT s1, int s1_stride, int p1, int p2, int p3,
+    int p4, int p5, int n, int m)
+{
+  int i;
+  int j;
+  orc_union32 *ORC_RESTRICT ptr0;
+  const orc_union32 *ORC_RESTRICT ptr4;
+  orc_union32 var46;
+#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
+  volatile orc_union32 var47;
+#else
+  orc_union32 var47;
+#endif
+  orc_union16 var48;
+  orc_union16 var49;
+  orc_union16 var50;
+  orc_union16 var51;
+  orc_union16 var52;
+  orc_union32 var53;
+  orc_union32 var54;
+  orc_union16 var55;
+  orc_union16 var56;
+  orc_int8 var57;
+  orc_int8 var58;
+  orc_int8 var59;
+  orc_int8 var60;
+  orc_union16 var61;
+  orc_union16 var62;
+  orc_union16 var63;
+  orc_union16 var64;
+  orc_union16 var65;
+  orc_union16 var66;
+  orc_int8 var67;
+  orc_union16 var68;
+  orc_union16 var69;
+  orc_int8 var70;
+  orc_union16 var71;
+  orc_union16 var72;
+  orc_union16 var73;
+  orc_union16 var74;
+  orc_union16 var75;
+  orc_int8 var76;
+  orc_union16 var77;
+  orc_union32 var78;
+
+  for (j = 0; j < m; j++) {
+    ptr0 = ORC_PTR_OFFSET (d1, d1_stride * j);
+    ptr4 = ORC_PTR_OFFSET (s1, s1_stride * j);
+
+    /* 1: loadpb */
+    var47.x4[0] = (int) 0x00000080;     /* 128 or 6.32404e-322f */
+    var47.x4[1] = (int) 0x00000080;     /* 128 or 6.32404e-322f */
+    var47.x4[2] = (int) 0x00000080;     /* 128 or 6.32404e-322f */
+    var47.x4[3] = (int) 0x00000080;     /* 128 or 6.32404e-322f */
+    /* 9: loadpw */
+    var48.i = p1;
+    /* 11: loadpw */
+    var49.i = p2;
+    /* 15: loadpw */
+    var50.i = p3;
+    /* 20: loadpw */
+    var51.i = p4;
+    /* 23: loadpw */
+    var52.i = p5;
+
+    for (i = 0; i < n; i++) {
+      /* 0: loadl */
+      var46 = ptr4[i];
+      /* 2: subb */
+      var54.x4[0] = var46.x4[0] - var47.x4[0];
+      var54.x4[1] = var46.x4[1] - var47.x4[1];
+      var54.x4[2] = var46.x4[2] - var47.x4[2];
+      var54.x4[3] = var46.x4[3] - var47.x4[3];
+      /* 3: splitlw */
+      {
+        orc_union32 _src;
+        _src.i = var54.i;
+        var55.i = _src.x2[1];
+        var56.i = _src.x2[0];
+      }
+      /* 4: splitwb */
+      {
+        orc_union16 _src;
+        _src.i = var56.i;
+        var57 = _src.x2[1];
+        var58 = _src.x2[0];
+      }
+      /* 5: splitwb */
+      {
+        orc_union16 _src;
+        _src.i = var55.i;
+        var59 = _src.x2[1];
+        var60 = _src.x2[0];
+      }
+      /* 6: splatbw */
+      var61.i = ((var57 & 0xff) << 8) | (var57 & 0xff);
+      /* 7: splatbw */
+      var62.i = ((var60 & 0xff) << 8) | (var60 & 0xff);
+      /* 8: splatbw */
+      var63.i = ((var59 & 0xff) << 8) | (var59 & 0xff);
+      /* 10: mulhsw */
+      var64.i = (var61.i * var48.i) >> 16;
+      /* 12: mulhsw */
+      var65.i = (var63.i * var49.i) >> 16;
+      /* 13: addw */
+      var66.i = var64.i + var65.i;
+      /* 14: convssswb */
+      var67 = ORC_CLAMP_SB (var66.i);
+      /* 16: mulhsw */
+      var68.i = (var62.i * var50.i) >> 16;
+      /* 17: addw */
+      var69.i = var64.i + var68.i;
+      /* 18: convssswb */
+      var70 = ORC_CLAMP_SB (var69.i);
+      /* 19: mergebw */
+      {
+        orc_union16 _dest;
+        _dest.x2[0] = var58;
+        _dest.x2[1] = var70;
+        var71.i = _dest.i;
+      }
+      /* 21: mulhsw */
+      var72.i = (var62.i * var51.i) >> 16;
+      /* 22: addw */
+      var73.i = var64.i + var72.i;
+      /* 24: mulhsw */
+      var74.i = (var63.i * var52.i) >> 16;
+      /* 25: addw */
+      var75.i = var73.i + var74.i;
+      /* 26: convssswb */
+      var76 = ORC_CLAMP_SB (var75.i);
+      /* 27: mergebw */
+      {
+        orc_union16 _dest;
+        _dest.x2[0] = var76;
+        _dest.x2[1] = var67;
+        var77.i = _dest.i;
+      }
+      /* 28: mergewl */
+      {
+        orc_union32 _dest;
+        _dest.x2[0] = var71.i;
+        _dest.x2[1] = var77.i;
+        var78.i = _dest.i;
+      }
+      /* 29: addb */
+      var53.x4[0] = var78.x4[0] + var47.x4[0];
+      var53.x4[1] = var78.x4[1] + var47.x4[1];
+      var53.x4[2] = var78.x4[2] + var47.x4[2];
+      var53.x4[3] = var78.x4[3] + var47.x4[3];
+      /* 30: storel */
+      ptr0[i] = var53;
+    }
+  }
+
+}
+
+#else
+static void
+_backup_video_orc_convert_AYUV_ABGR (OrcExecutor * ORC_RESTRICT ex)
+{
+  int i;
+  int j;
+  int n = ex->n;
+  int m = ex->params[ORC_VAR_A1];
+  orc_union32 *ORC_RESTRICT ptr0;
+  const orc_union32 *ORC_RESTRICT ptr4;
+  orc_union32 var46;
+#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
+  volatile orc_union32 var47;
+#else
+  orc_union32 var47;
+#endif
+  orc_union16 var48;
+  orc_union16 var49;
+  orc_union16 var50;
+  orc_union16 var51;
+  orc_union16 var52;
+  orc_union32 var53;
+  orc_union32 var54;
+  orc_union16 var55;
+  orc_union16 var56;
+  orc_int8 var57;
+  orc_int8 var58;
+  orc_int8 var59;
+  orc_int8 var60;
+  orc_union16 var61;
+  orc_union16 var62;
+  orc_union16 var63;
+  orc_union16 var64;
+  orc_union16 var65;
+  orc_union16 var66;
+  orc_int8 var67;
+  orc_union16 var68;
+  orc_union16 var69;
+  orc_int8 var70;
+  orc_union16 var71;
+  orc_union16 var72;
+  orc_union16 var73;
+  orc_union16 var74;
+  orc_union16 var75;
+  orc_int8 var76;
+  orc_union16 var77;
+  orc_union32 var78;
+
+  for (j = 0; j < m; j++) {
+    ptr0 = ORC_PTR_OFFSET (ex->arrays[0], ex->params[0] * j);
+    ptr4 = ORC_PTR_OFFSET (ex->arrays[4], ex->params[4] * j);
+
+    /* 1: loadpb */
+    var47.x4[0] = (int) 0x00000080;     /* 128 or 6.32404e-322f */
+    var47.x4[1] = (int) 0x00000080;     /* 128 or 6.32404e-322f */
+    var47.x4[2] = (int) 0x00000080;     /* 128 or 6.32404e-322f */
+    var47.x4[3] = (int) 0x00000080;     /* 128 or 6.32404e-322f */
+    /* 9: loadpw */
+    var48.i = ex->params[24];
+    /* 11: loadpw */
+    var49.i = ex->params[25];
+    /* 15: loadpw */
+    var50.i = ex->params[26];
+    /* 20: loadpw */
+    var51.i = ex->params[27];
+    /* 23: loadpw */
+    var52.i = ex->params[28];
+
+    for (i = 0; i < n; i++) {
+      /* 0: loadl */
+      var46 = ptr4[i];
+      /* 2: subb */
+      var54.x4[0] = var46.x4[0] - var47.x4[0];
+      var54.x4[1] = var46.x4[1] - var47.x4[1];
+      var54.x4[2] = var46.x4[2] - var47.x4[2];
+      var54.x4[3] = var46.x4[3] - var47.x4[3];
+      /* 3: splitlw */
+      {
+        orc_union32 _src;
+        _src.i = var54.i;
+        var55.i = _src.x2[1];
+        var56.i = _src.x2[0];
+      }
+      /* 4: splitwb */
+      {
+        orc_union16 _src;
+        _src.i = var56.i;
+        var57 = _src.x2[1];
+        var58 = _src.x2[0];
+      }
+      /* 5: splitwb */
+      {
+        orc_union16 _src;
+        _src.i = var55.i;
+        var59 = _src.x2[1];
+        var60 = _src.x2[0];
+      }
+      /* 6: splatbw */
+      var61.i = ((var57 & 0xff) << 8) | (var57 & 0xff);
+      /* 7: splatbw */
+      var62.i = ((var60 & 0xff) << 8) | (var60 & 0xff);
+      /* 8: splatbw */
+      var63.i = ((var59 & 0xff) << 8) | (var59 & 0xff);
+      /* 10: mulhsw */
+      var64.i = (var61.i * var48.i) >> 16;
+      /* 12: mulhsw */
+      var65.i = (var63.i * var49.i) >> 16;
+      /* 13: addw */
+      var66.i = var64.i + var65.i;
+      /* 14: convssswb */
+      var67 = ORC_CLAMP_SB (var66.i);
+      /* 16: mulhsw */
+      var68.i = (var62.i * var50.i) >> 16;
+      /* 17: addw */
+      var69.i = var64.i + var68.i;
+      /* 18: convssswb */
+      var70 = ORC_CLAMP_SB (var69.i);
+      /* 19: mergebw */
+      {
+        orc_union16 _dest;
+        _dest.x2[0] = var58;
+        _dest.x2[1] = var70;
+        var71.i = _dest.i;
+      }
+      /* 21: mulhsw */
+      var72.i = (var62.i * var51.i) >> 16;
+      /* 22: addw */
+      var73.i = var64.i + var72.i;
+      /* 24: mulhsw */
+      var74.i = (var63.i * var52.i) >> 16;
+      /* 25: addw */
+      var75.i = var73.i + var74.i;
+      /* 26: convssswb */
+      var76 = ORC_CLAMP_SB (var75.i);
+      /* 27: mergebw */
+      {
+        orc_union16 _dest;
+        _dest.x2[0] = var76;
+        _dest.x2[1] = var67;
+        var77.i = _dest.i;
+      }
+      /* 28: mergewl */
+      {
+        orc_union32 _dest;
+        _dest.x2[0] = var71.i;
+        _dest.x2[1] = var77.i;
+        var78.i = _dest.i;
+      }
+      /* 29: addb */
+      var53.x4[0] = var78.x4[0] + var47.x4[0];
+      var53.x4[1] = var78.x4[1] + var47.x4[1];
+      var53.x4[2] = var78.x4[2] + var47.x4[2];
+      var53.x4[3] = var78.x4[3] + var47.x4[3];
+      /* 30: storel */
+      ptr0[i] = var53;
+    }
+  }
+
+}
+
+void
+video_orc_convert_AYUV_ABGR (guint8 * ORC_RESTRICT d1, int d1_stride,
+    const guint8 * ORC_RESTRICT s1, int s1_stride, int p1, int p2, int p3,
+    int p4, int p5, int n, int m)
+{
+  OrcExecutor _ex, *ex = &_ex;
+  static volatile int p_inited = 0;
+  static OrcCode *c = 0;
+  void (*func) (OrcExecutor *);
+
+  if (!p_inited) {
+    orc_once_mutex_lock ();
+    if (!p_inited) {
+      OrcProgram *p;
+
+#if 1
+      static const orc_uint8 bc[] = {
+        1, 7, 9, 27, 118, 105, 100, 101, 111, 95, 111, 114, 99, 95, 99, 111,
+        110, 118, 101, 114, 116, 95, 65, 89, 85, 86, 95, 65, 66, 71, 82, 11,
+        4, 4, 12, 4, 4, 14, 1, 128, 0, 0, 0, 16, 2, 16, 2, 16,
+        2, 16, 2, 16, 2, 20, 1, 20, 1, 20, 1, 20, 1, 20, 2, 20,
+        2, 20, 2, 20, 2, 20, 2, 20, 2, 20, 1, 20, 1, 20, 1, 20,
+        4, 21, 2, 65, 45, 4, 16, 198, 38, 36, 45, 199, 33, 32, 36, 199,
+        35, 34, 38, 151, 36, 33, 151, 37, 34, 151, 38, 35, 90, 36, 36, 24,
+        90, 39, 38, 25, 70, 39, 36, 39, 159, 42, 39, 90, 41, 37, 26, 70,
+        41, 36, 41, 159, 44, 41, 196, 41, 32, 44, 90, 40, 37, 27, 70, 40,
+        36, 40, 90, 36, 38, 28, 70, 40, 40, 36, 159, 43, 40, 196, 39, 43,
+        42, 195, 45, 41, 39, 21, 2, 33, 0, 45, 16, 2, 0,
+      };
+      p = orc_program_new_from_static_bytecode (bc);
+      orc_program_set_backup_function (p, _backup_video_orc_convert_AYUV_ABGR);
+#else
+      p = orc_program_new ();
+      orc_program_set_2d (p);
+      orc_program_set_name (p, "video_orc_convert_AYUV_ABGR");
+      orc_program_set_backup_function (p, _backup_video_orc_convert_AYUV_ABGR);
+      orc_program_add_destination (p, 4, "d1");
+      orc_program_add_source (p, 4, "s1");
+      orc_program_add_constant (p, 1, 0x00000080, "c1");
+      orc_program_add_parameter (p, 2, "p1");
+      orc_program_add_parameter (p, 2, "p2");
+      orc_program_add_parameter (p, 2, "p3");
+      orc_program_add_parameter (p, 2, "p4");
+      orc_program_add_parameter (p, 2, "p5");
+      orc_program_add_temporary (p, 1, "t1");
+      orc_program_add_temporary (p, 1, "t2");
+      orc_program_add_temporary (p, 1, "t3");
+      orc_program_add_temporary (p, 1, "t4");
+      orc_program_add_temporary (p, 2, "t5");
+      orc_program_add_temporary (p, 2, "t6");
+      orc_program_add_temporary (p, 2, "t7");
+      orc_program_add_temporary (p, 2, "t8");
+      orc_program_add_temporary (p, 2, "t9");
+      orc_program_add_temporary (p, 2, "t10");
+      orc_program_add_temporary (p, 1, "t11");
+      orc_program_add_temporary (p, 1, "t12");
+      orc_program_add_temporary (p, 1, "t13");
+      orc_program_add_temporary (p, 4, "t14");
+
+      orc_program_append_2 (p, "subb", 2, ORC_VAR_T14, ORC_VAR_S1, ORC_VAR_C1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "splitlw", 0, ORC_VAR_T7, ORC_VAR_T5,
+          ORC_VAR_T14, ORC_VAR_D1);
+      orc_program_append_2 (p, "splitwb", 0, ORC_VAR_T2, ORC_VAR_T1, ORC_VAR_T5,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "splitwb", 0, ORC_VAR_T4, ORC_VAR_T3, ORC_VAR_T7,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "splatbw", 0, ORC_VAR_T5, ORC_VAR_T2, ORC_VAR_D1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "splatbw", 0, ORC_VAR_T6, ORC_VAR_T3, ORC_VAR_D1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "splatbw", 0, ORC_VAR_T7, ORC_VAR_T4, ORC_VAR_D1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "mulhsw", 0, ORC_VAR_T5, ORC_VAR_T5, ORC_VAR_P1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "mulhsw", 0, ORC_VAR_T8, ORC_VAR_T7, ORC_VAR_P2,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "addw", 0, ORC_VAR_T8, ORC_VAR_T5, ORC_VAR_T8,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "convssswb", 0, ORC_VAR_T11, ORC_VAR_T8,
+          ORC_VAR_D1, ORC_VAR_D1);
+      orc_program_append_2 (p, "mulhsw", 0, ORC_VAR_T10, ORC_VAR_T6, ORC_VAR_P3,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "addw", 0, ORC_VAR_T10, ORC_VAR_T5, ORC_VAR_T10,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "convssswb", 0, ORC_VAR_T13, ORC_VAR_T10,
+          ORC_VAR_D1, ORC_VAR_D1);
+      orc_program_append_2 (p, "mergebw", 0, ORC_VAR_T10, ORC_VAR_T1,
+          ORC_VAR_T13, ORC_VAR_D1);
+      orc_program_append_2 (p, "mulhsw", 0, ORC_VAR_T9, ORC_VAR_T6, ORC_VAR_P4,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "addw", 0, ORC_VAR_T9, ORC_VAR_T5, ORC_VAR_T9,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "mulhsw", 0, ORC_VAR_T5, ORC_VAR_T7, ORC_VAR_P5,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "addw", 0, ORC_VAR_T9, ORC_VAR_T9, ORC_VAR_T5,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "convssswb", 0, ORC_VAR_T12, ORC_VAR_T9,
+          ORC_VAR_D1, ORC_VAR_D1);
+      orc_program_append_2 (p, "mergebw", 0, ORC_VAR_T8, ORC_VAR_T12,
+          ORC_VAR_T11, ORC_VAR_D1);
+      orc_program_append_2 (p, "mergewl", 0, ORC_VAR_T14, ORC_VAR_T10,
+          ORC_VAR_T8, ORC_VAR_D1);
+      orc_program_append_2 (p, "addb", 2, ORC_VAR_D1, ORC_VAR_T14, ORC_VAR_C1,
+          ORC_VAR_D1);
+#endif
+
+      orc_program_compile (p);
+      c = orc_program_take_code (p);
+      orc_program_free (p);
+    }
+    p_inited = TRUE;
+    orc_once_mutex_unlock ();
+  }
+  ex->arrays[ORC_VAR_A2] = c;
+  ex->program = 0;
+
+  ex->n = n;
+  ORC_EXECUTOR_M (ex) = m;
+  ex->arrays[ORC_VAR_D1] = d1;
+  ex->params[ORC_VAR_D1] = d1_stride;
+  ex->arrays[ORC_VAR_S1] = (void *) s1;
+  ex->params[ORC_VAR_S1] = s1_stride;
+  ex->params[ORC_VAR_P1] = p1;
+  ex->params[ORC_VAR_P2] = p2;
+  ex->params[ORC_VAR_P3] = p3;
+  ex->params[ORC_VAR_P4] = p4;
+  ex->params[ORC_VAR_P5] = p5;
+
+  func = c->exec;
+  func (ex);
+}
+#endif
+
+
+/* video_orc_convert_AYUV_RGBA */
+#ifdef DISABLE_ORC
+void
+video_orc_convert_AYUV_RGBA (guint8 * ORC_RESTRICT d1, int d1_stride,
+    const guint8 * ORC_RESTRICT s1, int s1_stride, int p1, int p2, int p3,
+    int p4, int p5, int n, int m)
+{
+  int i;
+  int j;
+  orc_union32 *ORC_RESTRICT ptr0;
+  const orc_union32 *ORC_RESTRICT ptr4;
+  orc_union32 var46;
+#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
+  volatile orc_union32 var47;
+#else
+  orc_union32 var47;
+#endif
+  orc_union16 var48;
+  orc_union16 var49;
+  orc_union16 var50;
+  orc_union16 var51;
+  orc_union16 var52;
+  orc_union32 var53;
+  orc_union32 var54;
+  orc_union16 var55;
+  orc_union16 var56;
+  orc_int8 var57;
+  orc_int8 var58;
+  orc_int8 var59;
+  orc_int8 var60;
+  orc_union16 var61;
+  orc_union16 var62;
+  orc_union16 var63;
+  orc_union16 var64;
+  orc_union16 var65;
+  orc_union16 var66;
+  orc_int8 var67;
+  orc_union16 var68;
+  orc_union16 var69;
+  orc_int8 var70;
+  orc_union16 var71;
+  orc_union16 var72;
+  orc_union16 var73;
+  orc_union16 var74;
+  orc_union16 var75;
+  orc_int8 var76;
+  orc_union16 var77;
+  orc_union32 var78;
+
+  for (j = 0; j < m; j++) {
+    ptr0 = ORC_PTR_OFFSET (d1, d1_stride * j);
+    ptr4 = ORC_PTR_OFFSET (s1, s1_stride * j);
+
+    /* 1: loadpb */
+    var47.x4[0] = (int) 0x00000080;     /* 128 or 6.32404e-322f */
+    var47.x4[1] = (int) 0x00000080;     /* 128 or 6.32404e-322f */
+    var47.x4[2] = (int) 0x00000080;     /* 128 or 6.32404e-322f */
+    var47.x4[3] = (int) 0x00000080;     /* 128 or 6.32404e-322f */
+    /* 9: loadpw */
+    var48.i = p1;
+    /* 11: loadpw */
+    var49.i = p2;
+    /* 15: loadpw */
+    var50.i = p3;
+    /* 20: loadpw */
+    var51.i = p4;
+    /* 23: loadpw */
+    var52.i = p5;
+
+    for (i = 0; i < n; i++) {
+      /* 0: loadl */
+      var46 = ptr4[i];
+      /* 2: subb */
+      var54.x4[0] = var46.x4[0] - var47.x4[0];
+      var54.x4[1] = var46.x4[1] - var47.x4[1];
+      var54.x4[2] = var46.x4[2] - var47.x4[2];
+      var54.x4[3] = var46.x4[3] - var47.x4[3];
+      /* 3: splitlw */
+      {
+        orc_union32 _src;
+        _src.i = var54.i;
+        var55.i = _src.x2[1];
+        var56.i = _src.x2[0];
+      }
+      /* 4: splitwb */
+      {
+        orc_union16 _src;
+        _src.i = var56.i;
+        var57 = _src.x2[1];
+        var58 = _src.x2[0];
+      }
+      /* 5: splitwb */
+      {
+        orc_union16 _src;
+        _src.i = var55.i;
+        var59 = _src.x2[1];
+        var60 = _src.x2[0];
+      }
+      /* 6: splatbw */
+      var61.i = ((var57 & 0xff) << 8) | (var57 & 0xff);
+      /* 7: splatbw */
+      var62.i = ((var60 & 0xff) << 8) | (var60 & 0xff);
+      /* 8: splatbw */
+      var63.i = ((var59 & 0xff) << 8) | (var59 & 0xff);
+      /* 10: mulhsw */
+      var64.i = (var61.i * var48.i) >> 16;
+      /* 12: mulhsw */
+      var65.i = (var63.i * var49.i) >> 16;
+      /* 13: addw */
+      var66.i = var64.i + var65.i;
+      /* 14: convssswb */
+      var67 = ORC_CLAMP_SB (var66.i);
+      /* 16: mulhsw */
+      var68.i = (var62.i * var50.i) >> 16;
+      /* 17: addw */
+      var69.i = var64.i + var68.i;
+      /* 18: convssswb */
+      var70 = ORC_CLAMP_SB (var69.i);
+      /* 19: mergebw */
+      {
+        orc_union16 _dest;
+        _dest.x2[0] = var70;
+        _dest.x2[1] = var58;
+        var71.i = _dest.i;
+      }
+      /* 21: mulhsw */
+      var72.i = (var62.i * var51.i) >> 16;
+      /* 22: addw */
+      var73.i = var64.i + var72.i;
+      /* 24: mulhsw */
+      var74.i = (var63.i * var52.i) >> 16;
+      /* 25: addw */
+      var75.i = var73.i + var74.i;
+      /* 26: convssswb */
+      var76 = ORC_CLAMP_SB (var75.i);
+      /* 27: mergebw */
+      {
+        orc_union16 _dest;
+        _dest.x2[0] = var67;
+        _dest.x2[1] = var76;
+        var77.i = _dest.i;
+      }
+      /* 28: mergewl */
+      {
+        orc_union32 _dest;
+        _dest.x2[0] = var77.i;
+        _dest.x2[1] = var71.i;
+        var78.i = _dest.i;
+      }
+      /* 29: addb */
+      var53.x4[0] = var78.x4[0] + var47.x4[0];
+      var53.x4[1] = var78.x4[1] + var47.x4[1];
+      var53.x4[2] = var78.x4[2] + var47.x4[2];
+      var53.x4[3] = var78.x4[3] + var47.x4[3];
+      /* 30: storel */
+      ptr0[i] = var53;
+    }
+  }
+
+}
+
+#else
+static void
+_backup_video_orc_convert_AYUV_RGBA (OrcExecutor * ORC_RESTRICT ex)
+{
+  int i;
+  int j;
+  int n = ex->n;
+  int m = ex->params[ORC_VAR_A1];
+  orc_union32 *ORC_RESTRICT ptr0;
+  const orc_union32 *ORC_RESTRICT ptr4;
+  orc_union32 var46;
+#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
+  volatile orc_union32 var47;
+#else
+  orc_union32 var47;
+#endif
+  orc_union16 var48;
+  orc_union16 var49;
+  orc_union16 var50;
+  orc_union16 var51;
+  orc_union16 var52;
+  orc_union32 var53;
+  orc_union32 var54;
+  orc_union16 var55;
+  orc_union16 var56;
+  orc_int8 var57;
+  orc_int8 var58;
+  orc_int8 var59;
+  orc_int8 var60;
+  orc_union16 var61;
+  orc_union16 var62;
+  orc_union16 var63;
+  orc_union16 var64;
+  orc_union16 var65;
+  orc_union16 var66;
+  orc_int8 var67;
+  orc_union16 var68;
+  orc_union16 var69;
+  orc_int8 var70;
+  orc_union16 var71;
+  orc_union16 var72;
+  orc_union16 var73;
+  orc_union16 var74;
+  orc_union16 var75;
+  orc_int8 var76;
+  orc_union16 var77;
+  orc_union32 var78;
+
+  for (j = 0; j < m; j++) {
+    ptr0 = ORC_PTR_OFFSET (ex->arrays[0], ex->params[0] * j);
+    ptr4 = ORC_PTR_OFFSET (ex->arrays[4], ex->params[4] * j);
+
+    /* 1: loadpb */
+    var47.x4[0] = (int) 0x00000080;     /* 128 or 6.32404e-322f */
+    var47.x4[1] = (int) 0x00000080;     /* 128 or 6.32404e-322f */
+    var47.x4[2] = (int) 0x00000080;     /* 128 or 6.32404e-322f */
+    var47.x4[3] = (int) 0x00000080;     /* 128 or 6.32404e-322f */
+    /* 9: loadpw */
+    var48.i = ex->params[24];
+    /* 11: loadpw */
+    var49.i = ex->params[25];
+    /* 15: loadpw */
+    var50.i = ex->params[26];
+    /* 20: loadpw */
+    var51.i = ex->params[27];
+    /* 23: loadpw */
+    var52.i = ex->params[28];
+
+    for (i = 0; i < n; i++) {
+      /* 0: loadl */
+      var46 = ptr4[i];
+      /* 2: subb */
+      var54.x4[0] = var46.x4[0] - var47.x4[0];
+      var54.x4[1] = var46.x4[1] - var47.x4[1];
+      var54.x4[2] = var46.x4[2] - var47.x4[2];
+      var54.x4[3] = var46.x4[3] - var47.x4[3];
+      /* 3: splitlw */
+      {
+        orc_union32 _src;
+        _src.i = var54.i;
+        var55.i = _src.x2[1];
+        var56.i = _src.x2[0];
+      }
+      /* 4: splitwb */
+      {
+        orc_union16 _src;
+        _src.i = var56.i;
+        var57 = _src.x2[1];
+        var58 = _src.x2[0];
+      }
+      /* 5: splitwb */
+      {
+        orc_union16 _src;
+        _src.i = var55.i;
+        var59 = _src.x2[1];
+        var60 = _src.x2[0];
+      }
+      /* 6: splatbw */
+      var61.i = ((var57 & 0xff) << 8) | (var57 & 0xff);
+      /* 7: splatbw */
+      var62.i = ((var60 & 0xff) << 8) | (var60 & 0xff);
+      /* 8: splatbw */
+      var63.i = ((var59 & 0xff) << 8) | (var59 & 0xff);
+      /* 10: mulhsw */
+      var64.i = (var61.i * var48.i) >> 16;
+      /* 12: mulhsw */
+      var65.i = (var63.i * var49.i) >> 16;
+      /* 13: addw */
+      var66.i = var64.i + var65.i;
+      /* 14: convssswb */
+      var67 = ORC_CLAMP_SB (var66.i);
+      /* 16: mulhsw */
+      var68.i = (var62.i * var50.i) >> 16;
+      /* 17: addw */
+      var69.i = var64.i + var68.i;
+      /* 18: convssswb */
+      var70 = ORC_CLAMP_SB (var69.i);
+      /* 19: mergebw */
+      {
+        orc_union16 _dest;
+        _dest.x2[0] = var70;
+        _dest.x2[1] = var58;
+        var71.i = _dest.i;
+      }
+      /* 21: mulhsw */
+      var72.i = (var62.i * var51.i) >> 16;
+      /* 22: addw */
+      var73.i = var64.i + var72.i;
+      /* 24: mulhsw */
+      var74.i = (var63.i * var52.i) >> 16;
+      /* 25: addw */
+      var75.i = var73.i + var74.i;
+      /* 26: convssswb */
+      var76 = ORC_CLAMP_SB (var75.i);
+      /* 27: mergebw */
+      {
+        orc_union16 _dest;
+        _dest.x2[0] = var67;
+        _dest.x2[1] = var76;
+        var77.i = _dest.i;
+      }
+      /* 28: mergewl */
+      {
+        orc_union32 _dest;
+        _dest.x2[0] = var77.i;
+        _dest.x2[1] = var71.i;
+        var78.i = _dest.i;
+      }
+      /* 29: addb */
+      var53.x4[0] = var78.x4[0] + var47.x4[0];
+      var53.x4[1] = var78.x4[1] + var47.x4[1];
+      var53.x4[2] = var78.x4[2] + var47.x4[2];
+      var53.x4[3] = var78.x4[3] + var47.x4[3];
+      /* 30: storel */
+      ptr0[i] = var53;
+    }
+  }
+
+}
+
+void
+video_orc_convert_AYUV_RGBA (guint8 * ORC_RESTRICT d1, int d1_stride,
+    const guint8 * ORC_RESTRICT s1, int s1_stride, int p1, int p2, int p3,
+    int p4, int p5, int n, int m)
+{
+  OrcExecutor _ex, *ex = &_ex;
+  static volatile int p_inited = 0;
+  static OrcCode *c = 0;
+  void (*func) (OrcExecutor *);
+
+  if (!p_inited) {
+    orc_once_mutex_lock ();
+    if (!p_inited) {
+      OrcProgram *p;
+
+#if 1
+      static const orc_uint8 bc[] = {
+        1, 7, 9, 27, 118, 105, 100, 101, 111, 95, 111, 114, 99, 95, 99, 111,
+        110, 118, 101, 114, 116, 95, 65, 89, 85, 86, 95, 82, 71, 66, 65, 11,
+        4, 4, 12, 4, 4, 14, 1, 128, 0, 0, 0, 16, 2, 16, 2, 16,
+        2, 16, 2, 16, 2, 20, 1, 20, 1, 20, 1, 20, 1, 20, 2, 20,
+        2, 20, 2, 20, 2, 20, 2, 20, 2, 20, 1, 20, 1, 20, 1, 20,
+        4, 21, 2, 65, 45, 4, 16, 198, 38, 36, 45, 199, 33, 32, 36, 199,
+        35, 34, 38, 151, 36, 33, 151, 37, 34, 151, 38, 35, 90, 36, 36, 24,
+        90, 39, 38, 25, 70, 39, 36, 39, 159, 42, 39, 90, 41, 37, 26, 70,
+        41, 36, 41, 159, 44, 41, 196, 41, 44, 32, 90, 40, 37, 27, 70, 40,
+        36, 40, 90, 36, 38, 28, 70, 40, 40, 36, 159, 43, 40, 196, 39, 42,
+        43, 195, 45, 39, 41, 21, 2, 33, 0, 45, 16, 2, 0,
+      };
+      p = orc_program_new_from_static_bytecode (bc);
+      orc_program_set_backup_function (p, _backup_video_orc_convert_AYUV_RGBA);
+#else
+      p = orc_program_new ();
+      orc_program_set_2d (p);
+      orc_program_set_name (p, "video_orc_convert_AYUV_RGBA");
+      orc_program_set_backup_function (p, _backup_video_orc_convert_AYUV_RGBA);
+      orc_program_add_destination (p, 4, "d1");
+      orc_program_add_source (p, 4, "s1");
+      orc_program_add_constant (p, 1, 0x00000080, "c1");
+      orc_program_add_parameter (p, 2, "p1");
+      orc_program_add_parameter (p, 2, "p2");
+      orc_program_add_parameter (p, 2, "p3");
+      orc_program_add_parameter (p, 2, "p4");
+      orc_program_add_parameter (p, 2, "p5");
+      orc_program_add_temporary (p, 1, "t1");
+      orc_program_add_temporary (p, 1, "t2");
+      orc_program_add_temporary (p, 1, "t3");
+      orc_program_add_temporary (p, 1, "t4");
+      orc_program_add_temporary (p, 2, "t5");
+      orc_program_add_temporary (p, 2, "t6");
+      orc_program_add_temporary (p, 2, "t7");
+      orc_program_add_temporary (p, 2, "t8");
+      orc_program_add_temporary (p, 2, "t9");
+      orc_program_add_temporary (p, 2, "t10");
+      orc_program_add_temporary (p, 1, "t11");
+      orc_program_add_temporary (p, 1, "t12");
+      orc_program_add_temporary (p, 1, "t13");
+      orc_program_add_temporary (p, 4, "t14");
+
+      orc_program_append_2 (p, "subb", 2, ORC_VAR_T14, ORC_VAR_S1, ORC_VAR_C1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "splitlw", 0, ORC_VAR_T7, ORC_VAR_T5,
+          ORC_VAR_T14, ORC_VAR_D1);
+      orc_program_append_2 (p, "splitwb", 0, ORC_VAR_T2, ORC_VAR_T1, ORC_VAR_T5,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "splitwb", 0, ORC_VAR_T4, ORC_VAR_T3, ORC_VAR_T7,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "splatbw", 0, ORC_VAR_T5, ORC_VAR_T2, ORC_VAR_D1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "splatbw", 0, ORC_VAR_T6, ORC_VAR_T3, ORC_VAR_D1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "splatbw", 0, ORC_VAR_T7, ORC_VAR_T4, ORC_VAR_D1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "mulhsw", 0, ORC_VAR_T5, ORC_VAR_T5, ORC_VAR_P1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "mulhsw", 0, ORC_VAR_T8, ORC_VAR_T7, ORC_VAR_P2,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "addw", 0, ORC_VAR_T8, ORC_VAR_T5, ORC_VAR_T8,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "convssswb", 0, ORC_VAR_T11, ORC_VAR_T8,
+          ORC_VAR_D1, ORC_VAR_D1);
+      orc_program_append_2 (p, "mulhsw", 0, ORC_VAR_T10, ORC_VAR_T6, ORC_VAR_P3,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "addw", 0, ORC_VAR_T10, ORC_VAR_T5, ORC_VAR_T10,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "convssswb", 0, ORC_VAR_T13, ORC_VAR_T10,
+          ORC_VAR_D1, ORC_VAR_D1);
+      orc_program_append_2 (p, "mergebw", 0, ORC_VAR_T10, ORC_VAR_T13,
+          ORC_VAR_T1, ORC_VAR_D1);
+      orc_program_append_2 (p, "mulhsw", 0, ORC_VAR_T9, ORC_VAR_T6, ORC_VAR_P4,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "addw", 0, ORC_VAR_T9, ORC_VAR_T5, ORC_VAR_T9,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "mulhsw", 0, ORC_VAR_T5, ORC_VAR_T7, ORC_VAR_P5,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "addw", 0, ORC_VAR_T9, ORC_VAR_T9, ORC_VAR_T5,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "convssswb", 0, ORC_VAR_T12, ORC_VAR_T9,
+          ORC_VAR_D1, ORC_VAR_D1);
+      orc_program_append_2 (p, "mergebw", 0, ORC_VAR_T8, ORC_VAR_T11,
+          ORC_VAR_T12, ORC_VAR_D1);
+      orc_program_append_2 (p, "mergewl", 0, ORC_VAR_T14, ORC_VAR_T8,
+          ORC_VAR_T10, ORC_VAR_D1);
+      orc_program_append_2 (p, "addb", 2, ORC_VAR_D1, ORC_VAR_T14, ORC_VAR_C1,
+          ORC_VAR_D1);
+#endif
+
+      orc_program_compile (p);
+      c = orc_program_take_code (p);
+      orc_program_free (p);
+    }
+    p_inited = TRUE;
+    orc_once_mutex_unlock ();
+  }
+  ex->arrays[ORC_VAR_A2] = c;
+  ex->program = 0;
+
+  ex->n = n;
+  ORC_EXECUTOR_M (ex) = m;
+  ex->arrays[ORC_VAR_D1] = d1;
+  ex->params[ORC_VAR_D1] = d1_stride;
+  ex->arrays[ORC_VAR_S1] = (void *) s1;
+  ex->params[ORC_VAR_S1] = s1_stride;
+  ex->params[ORC_VAR_P1] = p1;
+  ex->params[ORC_VAR_P2] = p2;
+  ex->params[ORC_VAR_P3] = p3;
+  ex->params[ORC_VAR_P4] = p4;
+  ex->params[ORC_VAR_P5] = p5;
+
+  func = c->exec;
+  func (ex);
+}
+#endif
+
+
+/* video_orc_convert_I420_BGRA */
+#ifdef DISABLE_ORC
+void
+video_orc_convert_I420_BGRA (guint8 * ORC_RESTRICT d1,
+    const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2,
+    const guint8 * ORC_RESTRICT s3, int p1, int p2, int p3, int p4, int p5,
+    int n)
+{
+  int i;
+  orc_union32 *ORC_RESTRICT ptr0;
+  const orc_int8 *ORC_RESTRICT ptr4;
+  const orc_int8 *ORC_RESTRICT ptr5;
+  const orc_int8 *ORC_RESTRICT ptr6;
+  orc_int8 var42;
+#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
+  volatile orc_int8 var43;
+#else
+  orc_int8 var43;
+#endif
+  orc_union16 var44;
+  orc_union16 var45;
+#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
+  volatile orc_int8 var46;
+#else
+  orc_int8 var46;
+#endif
+  orc_union16 var47;
+  orc_union16 var48;
+  orc_union16 var49;
+#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
+  volatile orc_union32 var50;
+#else
+  orc_union32 var50;
+#endif
+  orc_union32 var51;
+  orc_int8 var52;
+  orc_union16 var53;
+  orc_int8 var54;
+  orc_int8 var55;
+  orc_union16 var56;
+  orc_int8 var57;
+  orc_int8 var58;
+  orc_union16 var59;
+  orc_union16 var60;
+  orc_union16 var61;
+  orc_union16 var62;
+  orc_int8 var63;
+  orc_union16 var64;
+  orc_union16 var65;
+  orc_union16 var66;
+  orc_int8 var67;
+  orc_union16 var68;
+  orc_union16 var69;
+  orc_union16 var70;
+  orc_union16 var71;
+  orc_int8 var72;
+  orc_union16 var73;
+  orc_union32 var74;
+
+  ptr0 = (orc_union32 *) d1;
+  ptr4 = (orc_int8 *) s1;
+  ptr5 = (orc_int8 *) s2;
+  ptr6 = (orc_int8 *) s3;
+
+  /* 1: loadpb */
+  var43 = (int) 0x00000080;     /* 128 or 6.32404e-322f */
+  /* 10: loadpw */
+  var44.i = p1;
+  /* 12: loadpw */
+  var45.i = p2;
+  /* 16: loadpb */
+  var46 = (int) 0x0000007f;     /* 127 or 6.27463e-322f */
+  /* 18: loadpw */
+  var47.i = p3;
+  /* 22: loadpw */
+  var48.i = p4;
+  /* 25: loadpw */
+  var49.i = p5;
+  /* 31: loadpb */
+  var50.x4[0] = (int) 0x00000080;       /* 128 or 6.32404e-322f */
+  var50.x4[1] = (int) 0x00000080;       /* 128 or 6.32404e-322f */
+  var50.x4[2] = (int) 0x00000080;       /* 128 or 6.32404e-322f */
+  var50.x4[3] = (int) 0x00000080;       /* 128 or 6.32404e-322f */
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadb */
+    var42 = ptr4[i];
+    /* 2: subb */
+    var52 = var42 - var43;
+    /* 3: splatbw */
+    var53.i = ((var52 & 0xff) << 8) | (var52 & 0xff);
+    /* 4: loadupdb */
+    var54 = ptr5[i >> 1];
+    /* 5: subb */
+    var55 = var54 - var43;
+    /* 6: splatbw */
+    var56.i = ((var55 & 0xff) << 8) | (var55 & 0xff);
+    /* 7: loadupdb */
+    var57 = ptr6[i >> 1];
+    /* 8: subb */
+    var58 = var57 - var43;
+    /* 9: splatbw */
+    var59.i = ((var58 & 0xff) << 8) | (var58 & 0xff);
+    /* 11: mulhsw */
+    var60.i = (var53.i * var44.i) >> 16;
+    /* 13: mulhsw */
+    var61.i = (var59.i * var45.i) >> 16;
+    /* 14: addw */
+    var62.i = var60.i + var61.i;
+    /* 15: convssswb */
+    var63 = ORC_CLAMP_SB (var62.i);
+    /* 17: mergebw */
+    {
+      orc_union16 _dest;
+      _dest.x2[0] = var63;
+      _dest.x2[1] = var46;
+      var64.i = _dest.i;
+    }
+    /* 19: mulhsw */
+    var65.i = (var56.i * var47.i) >> 16;
+    /* 20: addw */
+    var66.i = var60.i + var65.i;
+    /* 21: convssswb */
+    var67 = ORC_CLAMP_SB (var66.i);
+    /* 23: mulhsw */
+    var68.i = (var56.i * var48.i) >> 16;
+    /* 24: addw */
+    var69.i = var60.i + var68.i;
+    /* 26: mulhsw */
+    var70.i = (var59.i * var49.i) >> 16;
+    /* 27: addw */
+    var71.i = var69.i + var70.i;
+    /* 28: convssswb */
+    var72 = ORC_CLAMP_SB (var71.i);
+    /* 29: mergebw */
+    {
+      orc_union16 _dest;
+      _dest.x2[0] = var67;
+      _dest.x2[1] = var72;
+      var73.i = _dest.i;
+    }
+    /* 30: mergewl */
+    {
+      orc_union32 _dest;
+      _dest.x2[0] = var73.i;
+      _dest.x2[1] = var64.i;
+      var74.i = _dest.i;
+    }
+    /* 32: addb */
+    var51.x4[0] = var74.x4[0] + var50.x4[0];
+    var51.x4[1] = var74.x4[1] + var50.x4[1];
+    var51.x4[2] = var74.x4[2] + var50.x4[2];
+    var51.x4[3] = var74.x4[3] + var50.x4[3];
+    /* 33: storel */
+    ptr0[i] = var51;
+  }
+
+}
+
+#else
+static void
+_backup_video_orc_convert_I420_BGRA (OrcExecutor * ORC_RESTRICT ex)
+{
+  int i;
+  int n = ex->n;
+  orc_union32 *ORC_RESTRICT ptr0;
+  const orc_int8 *ORC_RESTRICT ptr4;
+  const orc_int8 *ORC_RESTRICT ptr5;
+  const orc_int8 *ORC_RESTRICT ptr6;
+  orc_int8 var42;
+#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
+  volatile orc_int8 var43;
+#else
+  orc_int8 var43;
+#endif
+  orc_union16 var44;
+  orc_union16 var45;
+#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
+  volatile orc_int8 var46;
+#else
+  orc_int8 var46;
+#endif
+  orc_union16 var47;
+  orc_union16 var48;
+  orc_union16 var49;
+#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
+  volatile orc_union32 var50;
+#else
+  orc_union32 var50;
+#endif
+  orc_union32 var51;
+  orc_int8 var52;
+  orc_union16 var53;
+  orc_int8 var54;
+  orc_int8 var55;
+  orc_union16 var56;
+  orc_int8 var57;
+  orc_int8 var58;
+  orc_union16 var59;
+  orc_union16 var60;
+  orc_union16 var61;
+  orc_union16 var62;
+  orc_int8 var63;
+  orc_union16 var64;
+  orc_union16 var65;
+  orc_union16 var66;
+  orc_int8 var67;
+  orc_union16 var68;
+  orc_union16 var69;
+  orc_union16 var70;
+  orc_union16 var71;
+  orc_int8 var72;
+  orc_union16 var73;
+  orc_union32 var74;
+
+  ptr0 = (orc_union32 *) ex->arrays[0];
+  ptr4 = (orc_int8 *) ex->arrays[4];
+  ptr5 = (orc_int8 *) ex->arrays[5];
+  ptr6 = (orc_int8 *) ex->arrays[6];
+
+  /* 1: loadpb */
+  var43 = (int) 0x00000080;     /* 128 or 6.32404e-322f */
+  /* 10: loadpw */
+  var44.i = ex->params[24];
+  /* 12: loadpw */
+  var45.i = ex->params[25];
+  /* 16: loadpb */
+  var46 = (int) 0x0000007f;     /* 127 or 6.27463e-322f */
+  /* 18: loadpw */
+  var47.i = ex->params[26];
+  /* 22: loadpw */
+  var48.i = ex->params[27];
+  /* 25: loadpw */
+  var49.i = ex->params[28];
+  /* 31: loadpb */
+  var50.x4[0] = (int) 0x00000080;       /* 128 or 6.32404e-322f */
+  var50.x4[1] = (int) 0x00000080;       /* 128 or 6.32404e-322f */
+  var50.x4[2] = (int) 0x00000080;       /* 128 or 6.32404e-322f */
+  var50.x4[3] = (int) 0x00000080;       /* 128 or 6.32404e-322f */
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadb */
+    var42 = ptr4[i];
+    /* 2: subb */
+    var52 = var42 - var43;
+    /* 3: splatbw */
+    var53.i = ((var52 & 0xff) << 8) | (var52 & 0xff);
+    /* 4: loadupdb */
+    var54 = ptr5[i >> 1];
+    /* 5: subb */
+    var55 = var54 - var43;
+    /* 6: splatbw */
+    var56.i = ((var55 & 0xff) << 8) | (var55 & 0xff);
+    /* 7: loadupdb */
+    var57 = ptr6[i >> 1];
+    /* 8: subb */
+    var58 = var57 - var43;
+    /* 9: splatbw */
+    var59.i = ((var58 & 0xff) << 8) | (var58 & 0xff);
+    /* 11: mulhsw */
+    var60.i = (var53.i * var44.i) >> 16;
+    /* 13: mulhsw */
+    var61.i = (var59.i * var45.i) >> 16;
+    /* 14: addw */
+    var62.i = var60.i + var61.i;
+    /* 15: convssswb */
+    var63 = ORC_CLAMP_SB (var62.i);
+    /* 17: mergebw */
+    {
+      orc_union16 _dest;
+      _dest.x2[0] = var63;
+      _dest.x2[1] = var46;
+      var64.i = _dest.i;
+    }
+    /* 19: mulhsw */
+    var65.i = (var56.i * var47.i) >> 16;
+    /* 20: addw */
+    var66.i = var60.i + var65.i;
+    /* 21: convssswb */
+    var67 = ORC_CLAMP_SB (var66.i);
+    /* 23: mulhsw */
+    var68.i = (var56.i * var48.i) >> 16;
+    /* 24: addw */
+    var69.i = var60.i + var68.i;
+    /* 26: mulhsw */
+    var70.i = (var59.i * var49.i) >> 16;
+    /* 27: addw */
+    var71.i = var69.i + var70.i;
+    /* 28: convssswb */
+    var72 = ORC_CLAMP_SB (var71.i);
+    /* 29: mergebw */
+    {
+      orc_union16 _dest;
+      _dest.x2[0] = var67;
+      _dest.x2[1] = var72;
+      var73.i = _dest.i;
+    }
+    /* 30: mergewl */
+    {
+      orc_union32 _dest;
+      _dest.x2[0] = var73.i;
+      _dest.x2[1] = var64.i;
+      var74.i = _dest.i;
+    }
+    /* 32: addb */
+    var51.x4[0] = var74.x4[0] + var50.x4[0];
+    var51.x4[1] = var74.x4[1] + var50.x4[1];
+    var51.x4[2] = var74.x4[2] + var50.x4[2];
+    var51.x4[3] = var74.x4[3] + var50.x4[3];
+    /* 33: storel */
+    ptr0[i] = var51;
+  }
+
+}
+
+void
+video_orc_convert_I420_BGRA (guint8 * ORC_RESTRICT d1,
+    const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2,
+    const guint8 * ORC_RESTRICT s3, int p1, int p2, int p3, int p4, int p5,
+    int n)
+{
+  OrcExecutor _ex, *ex = &_ex;
+  static volatile int p_inited = 0;
+  static OrcCode *c = 0;
+  void (*func) (OrcExecutor *);
+
+  if (!p_inited) {
+    orc_once_mutex_lock ();
+    if (!p_inited) {
+      OrcProgram *p;
+
+#if 1
+      static const orc_uint8 bc[] = {
+        1, 9, 27, 118, 105, 100, 101, 111, 95, 111, 114, 99, 95, 99, 111, 110,
+        118, 101, 114, 116, 95, 73, 52, 50, 48, 95, 66, 71, 82, 65, 11, 4,
+        4, 12, 1, 1, 12, 1, 1, 12, 1, 1, 14, 1, 128, 0, 0, 0,
+        14, 1, 127, 0, 0, 0, 16, 2, 16, 2, 16, 2, 16, 2, 16, 2,
+        20, 2, 20, 2, 20, 2, 20, 2, 20, 2, 20, 2, 20, 1, 20, 1,
+        20, 1, 20, 4, 65, 38, 4, 16, 151, 32, 38, 45, 38, 5, 65, 38,
+        38, 16, 151, 33, 38, 45, 38, 6, 65, 38, 38, 16, 151, 34, 38, 90,
+        32, 32, 24, 90, 35, 34, 25, 70, 35, 32, 35, 159, 38, 35, 196, 35,
+        38, 17, 90, 37, 33, 26, 70, 37, 32, 37, 159, 40, 37, 90, 36, 33,
+        27, 70, 36, 32, 36, 90, 32, 34, 28, 70, 36, 36, 32, 159, 39, 36,
+        196, 37, 40, 39, 195, 41, 37, 35, 21, 2, 33, 0, 41, 16, 2, 0,
+
+      };
+      p = orc_program_new_from_static_bytecode (bc);
+      orc_program_set_backup_function (p, _backup_video_orc_convert_I420_BGRA);
+#else
+      p = orc_program_new ();
+      orc_program_set_name (p, "video_orc_convert_I420_BGRA");
+      orc_program_set_backup_function (p, _backup_video_orc_convert_I420_BGRA);
+      orc_program_add_destination (p, 4, "d1");
+      orc_program_add_source (p, 1, "s1");
+      orc_program_add_source (p, 1, "s2");
+      orc_program_add_source (p, 1, "s3");
+      orc_program_add_constant (p, 1, 0x00000080, "c1");
+      orc_program_add_constant (p, 1, 0x0000007f, "c2");
+      orc_program_add_parameter (p, 2, "p1");
+      orc_program_add_parameter (p, 2, "p2");
+      orc_program_add_parameter (p, 2, "p3");
+      orc_program_add_parameter (p, 2, "p4");
+      orc_program_add_parameter (p, 2, "p5");
+      orc_program_add_temporary (p, 2, "t1");
+      orc_program_add_temporary (p, 2, "t2");
+      orc_program_add_temporary (p, 2, "t3");
+      orc_program_add_temporary (p, 2, "t4");
+      orc_program_add_temporary (p, 2, "t5");
+      orc_program_add_temporary (p, 2, "t6");
+      orc_program_add_temporary (p, 1, "t7");
+      orc_program_add_temporary (p, 1, "t8");
+      orc_program_add_temporary (p, 1, "t9");
+      orc_program_add_temporary (p, 4, "t10");
+
+      orc_program_append_2 (p, "subb", 0, ORC_VAR_T7, ORC_VAR_S1, ORC_VAR_C1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "splatbw", 0, ORC_VAR_T1, ORC_VAR_T7, ORC_VAR_D1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "loadupdb", 0, ORC_VAR_T7, ORC_VAR_S2,
+          ORC_VAR_D1, ORC_VAR_D1);
+      orc_program_append_2 (p, "subb", 0, ORC_VAR_T7, ORC_VAR_T7, ORC_VAR_C1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "splatbw", 0, ORC_VAR_T2, ORC_VAR_T7, ORC_VAR_D1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "loadupdb", 0, ORC_VAR_T7, ORC_VAR_S3,
+          ORC_VAR_D1, ORC_VAR_D1);
+      orc_program_append_2 (p, "subb", 0, ORC_VAR_T7, ORC_VAR_T7, ORC_VAR_C1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "splatbw", 0, ORC_VAR_T3, ORC_VAR_T7, ORC_VAR_D1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "mulhsw", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_P1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "mulhsw", 0, ORC_VAR_T4, ORC_VAR_T3, ORC_VAR_P2,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "addw", 0, ORC_VAR_T4, ORC_VAR_T1, ORC_VAR_T4,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "convssswb", 0, ORC_VAR_T7, ORC_VAR_T4,
+          ORC_VAR_D1, ORC_VAR_D1);
+      orc_program_append_2 (p, "mergebw", 0, ORC_VAR_T4, ORC_VAR_T7, ORC_VAR_C2,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "mulhsw", 0, ORC_VAR_T6, ORC_VAR_T2, ORC_VAR_P3,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "addw", 0, ORC_VAR_T6, ORC_VAR_T1, ORC_VAR_T6,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "convssswb", 0, ORC_VAR_T9, ORC_VAR_T6,
+          ORC_VAR_D1, ORC_VAR_D1);
+      orc_program_append_2 (p, "mulhsw", 0, ORC_VAR_T5, ORC_VAR_T2, ORC_VAR_P4,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "addw", 0, ORC_VAR_T5, ORC_VAR_T1, ORC_VAR_T5,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "mulhsw", 0, ORC_VAR_T1, ORC_VAR_T3, ORC_VAR_P5,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "addw", 0, ORC_VAR_T5, ORC_VAR_T5, ORC_VAR_T1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "convssswb", 0, ORC_VAR_T8, ORC_VAR_T5,
+          ORC_VAR_D1, ORC_VAR_D1);
+      orc_program_append_2 (p, "mergebw", 0, ORC_VAR_T6, ORC_VAR_T9, ORC_VAR_T8,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "mergewl", 0, ORC_VAR_T10, ORC_VAR_T6,
+          ORC_VAR_T4, ORC_VAR_D1);
+      orc_program_append_2 (p, "addb", 2, ORC_VAR_D1, ORC_VAR_T10, ORC_VAR_C1,
+          ORC_VAR_D1);
+#endif
+
+      orc_program_compile (p);
+      c = orc_program_take_code (p);
+      orc_program_free (p);
+    }
+    p_inited = TRUE;
+    orc_once_mutex_unlock ();
+  }
+  ex->arrays[ORC_VAR_A2] = c;
+  ex->program = 0;
+
+  ex->n = n;
+  ex->arrays[ORC_VAR_D1] = d1;
+  ex->arrays[ORC_VAR_S1] = (void *) s1;
+  ex->arrays[ORC_VAR_S2] = (void *) s2;
+  ex->arrays[ORC_VAR_S3] = (void *) s3;
+  ex->params[ORC_VAR_P1] = p1;
+  ex->params[ORC_VAR_P2] = p2;
+  ex->params[ORC_VAR_P3] = p3;
+  ex->params[ORC_VAR_P4] = p4;
+  ex->params[ORC_VAR_P5] = p5;
+
+  func = c->exec;
+  func (ex);
+}
+#endif
+
+
+/* video_orc_matrix8 */
+#ifdef DISABLE_ORC
+void
+video_orc_matrix8 (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1,
+    orc_int64 p1, orc_int64 p2, orc_int64 p3, orc_int64 p4, int n)
+{
+  _custom_video_orc_matrix8 (d1, s1, p1, p2, p3, p4, n);
+}
+
+#else
+static void
+_backup_video_orc_matrix8 (OrcExecutor * ORC_RESTRICT ex)
+{
+  _custom_video_orc_matrix8 (ex->arrays[ORC_VAR_D1], ex->arrays[ORC_VAR_S1],
+      (ex->
+          params[ORC_VAR_P1] & 0xffffffff) |
+      ((orc_uint64) (ex->params[ORC_VAR_T1]) << 32),
+      (ex->
+          params[ORC_VAR_P2] & 0xffffffff) |
+      ((orc_uint64) (ex->params[ORC_VAR_T2]) << 32),
+      (ex->
+          params[ORC_VAR_P3] & 0xffffffff) |
+      ((orc_uint64) (ex->params[ORC_VAR_T3]) << 32),
+      (ex->
+          params[ORC_VAR_P4] & 0xffffffff) |
+      ((orc_uint64) (ex->params[ORC_VAR_T4]) << 32), ex->n);
+}
+
+void
+video_orc_matrix8 (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1,
+    orc_int64 p1, orc_int64 p2, orc_int64 p3, orc_int64 p4, int n)
+{
+  OrcExecutor _ex, *ex = &_ex;
+  static volatile int p_inited = 0;
+  static OrcCode *c = 0;
+  void (*func) (OrcExecutor *);
+
+  if (!p_inited) {
+    orc_once_mutex_lock ();
+    if (!p_inited) {
+      OrcProgram *p;
+
+#if 1
+      static const orc_uint8 bc[] = {
+        1, 9, 17, 118, 105, 100, 101, 111, 95, 111, 114, 99, 95, 109, 97, 116,
+        114, 105, 120, 56, 11, 4, 4, 12, 4, 4, 14, 1, 128, 0, 0, 0,
+        18, 8, 18, 8, 18, 8, 18, 8, 20, 2, 20, 2, 20, 1, 20, 1,
+        20, 4, 20, 4, 20, 8, 20, 8, 20, 8, 20, 8, 20, 8, 134, 40,
+        24, 134, 41, 25, 134, 42, 26, 21, 2, 65, 36, 4, 16, 190, 32, 36,
+        191, 33, 36, 188, 34, 32, 189, 35, 32, 150, 32, 34, 154, 36, 32, 21,
+        2, 196, 38, 36, 36, 152, 36, 35, 194, 39, 36, 36, 21, 2, 90, 39,
+        39, 40, 21, 2, 70, 38, 38, 39, 188, 34, 33, 152, 36, 34, 194, 39,
+        36, 36, 21, 2, 90, 39, 39, 41, 21, 2, 70, 38, 38, 39, 189, 35,
+        33, 152, 36, 35, 194, 39, 36, 36, 21, 2, 90, 39, 39, 42, 21, 2,
+        70, 38, 38, 39, 21, 2, 159, 37, 38, 21, 2, 33, 0, 37, 16, 2,
+        0,
+      };
+      p = orc_program_new_from_static_bytecode (bc);
+      orc_program_set_backup_function (p, _backup_video_orc_matrix8);
+#else
+      p = orc_program_new ();
+      orc_program_set_name (p, "video_orc_matrix8");
+      orc_program_set_backup_function (p, _backup_video_orc_matrix8);
+      orc_program_add_destination (p, 4, "d1");
+      orc_program_add_source (p, 4, "s1");
+      orc_program_add_constant (p, 1, 0x00000080, "c1");
+      orc_program_add_parameter_int64 (p, 8, "p1");
+      orc_program_add_parameter_int64 (p, 8, "p2");
+      orc_program_add_parameter_int64 (p, 8, "p3");
+      orc_program_add_parameter_int64 (p, 8, "p4");
+      orc_program_add_temporary (p, 2, "t1");
+      orc_program_add_temporary (p, 2, "t2");
+      orc_program_add_temporary (p, 1, "t3");
+      orc_program_add_temporary (p, 1, "t4");
+      orc_program_add_temporary (p, 4, "t5");
+      orc_program_add_temporary (p, 4, "t6");
+      orc_program_add_temporary (p, 8, "t7");
+      orc_program_add_temporary (p, 8, "t8");
+      orc_program_add_temporary (p, 8, "t9");
+      orc_program_add_temporary (p, 8, "t10");
+      orc_program_add_temporary (p, 8, "t11");
+
+      orc_program_append_2 (p, "loadpq", 0, ORC_VAR_T9, ORC_VAR_P1, ORC_VAR_D1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "loadpq", 0, ORC_VAR_T10, ORC_VAR_P2, ORC_VAR_D1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "loadpq", 0, ORC_VAR_T11, ORC_VAR_P3, ORC_VAR_D1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "subb", 2, ORC_VAR_T5, ORC_VAR_S1, ORC_VAR_C1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "select0lw", 0, ORC_VAR_T1, ORC_VAR_T5,
+          ORC_VAR_D1, ORC_VAR_D1);
+      orc_program_append_2 (p, "select1lw", 0, ORC_VAR_T2, ORC_VAR_T5,
+          ORC_VAR_D1, ORC_VAR_D1);
+      orc_program_append_2 (p, "select0wb", 0, ORC_VAR_T3, ORC_VAR_T1,
+          ORC_VAR_D1, ORC_VAR_D1);
+      orc_program_append_2 (p, "select1wb", 0, ORC_VAR_T4, ORC_VAR_T1,
+          ORC_VAR_D1, ORC_VAR_D1);
+      orc_program_append_2 (p, "convubw", 0, ORC_VAR_T1, ORC_VAR_T3, ORC_VAR_D1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "convuwl", 0, ORC_VAR_T5, ORC_VAR_T1, ORC_VAR_D1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "mergebw", 2, ORC_VAR_T7, ORC_VAR_T5, ORC_VAR_T5,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "splatbl", 0, ORC_VAR_T5, ORC_VAR_T4, ORC_VAR_D1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "mergelq", 0, ORC_VAR_T8, ORC_VAR_T5, ORC_VAR_T5,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "mulhsw", 2, ORC_VAR_T8, ORC_VAR_T8, ORC_VAR_T9,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "addw", 2, ORC_VAR_T7, ORC_VAR_T7, ORC_VAR_T8,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "select0wb", 0, ORC_VAR_T3, ORC_VAR_T2,
+          ORC_VAR_D1, ORC_VAR_D1);
+      orc_program_append_2 (p, "splatbl", 0, ORC_VAR_T5, ORC_VAR_T3, ORC_VAR_D1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "mergelq", 0, ORC_VAR_T8, ORC_VAR_T5, ORC_VAR_T5,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "mulhsw", 2, ORC_VAR_T8, ORC_VAR_T8, ORC_VAR_T10,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "addw", 2, ORC_VAR_T7, ORC_VAR_T7, ORC_VAR_T8,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "select1wb", 0, ORC_VAR_T4, ORC_VAR_T2,
+          ORC_VAR_D1, ORC_VAR_D1);
+      orc_program_append_2 (p, "splatbl", 0, ORC_VAR_T5, ORC_VAR_T4, ORC_VAR_D1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "mergelq", 0, ORC_VAR_T8, ORC_VAR_T5, ORC_VAR_T5,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "mulhsw", 2, ORC_VAR_T8, ORC_VAR_T8, ORC_VAR_T11,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "addw", 2, ORC_VAR_T7, ORC_VAR_T7, ORC_VAR_T8,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "convssswb", 2, ORC_VAR_T6, ORC_VAR_T7,
+          ORC_VAR_D1, ORC_VAR_D1);
+      orc_program_append_2 (p, "addb", 2, ORC_VAR_D1, ORC_VAR_T6, ORC_VAR_C1,
+          ORC_VAR_D1);
+#endif
+
+      orc_program_compile (p);
+      c = orc_program_take_code (p);
+      orc_program_free (p);
+    }
+    p_inited = TRUE;
+    orc_once_mutex_unlock ();
+  }
+  ex->arrays[ORC_VAR_A2] = c;
+  ex->program = 0;
+
+  ex->n = n;
+  ex->arrays[ORC_VAR_D1] = d1;
+  ex->arrays[ORC_VAR_S1] = (void *) s1;
+  {
+    orc_union64 tmp;
+    tmp.i = p1;
+    ex->params[ORC_VAR_P1] = ((orc_uint64) tmp.i) & 0xffffffff;
+    ex->params[ORC_VAR_T1] = ((orc_uint64) tmp.i) >> 32;
+  }
+  {
+    orc_union64 tmp;
+    tmp.i = p2;
+    ex->params[ORC_VAR_P2] = ((orc_uint64) tmp.i) & 0xffffffff;
+    ex->params[ORC_VAR_T2] = ((orc_uint64) tmp.i) >> 32;
+  }
+  {
+    orc_union64 tmp;
+    tmp.i = p3;
+    ex->params[ORC_VAR_P3] = ((orc_uint64) tmp.i) & 0xffffffff;
+    ex->params[ORC_VAR_T3] = ((orc_uint64) tmp.i) >> 32;
+  }
+  {
+    orc_union64 tmp;
+    tmp.i = p4;
+    ex->params[ORC_VAR_P4] = ((orc_uint64) tmp.i) & 0xffffffff;
+    ex->params[ORC_VAR_T4] = ((orc_uint64) tmp.i) >> 32;
+  }
+
+  func = c->exec;
+  func (ex);
+}
+#endif
+
+
+/* video_orc_resample_h_near_u32_lq */
+#ifdef DISABLE_ORC
+void
+video_orc_resample_h_near_u32_lq (guint32 * ORC_RESTRICT d1,
+    const guint32 * ORC_RESTRICT s1, int p1, int p2, int n)
+{
+  int i;
+  orc_union32 *ORC_RESTRICT ptr0;
+  const orc_union32 *ORC_RESTRICT ptr4;
+  orc_union32 var32;
+
+  ptr0 = (orc_union32 *) d1;
+  ptr4 = (orc_union32 *) s1;
+
+
+  for (i = 0; i < n; i++) {
+    /* 0: ldresnearl */
+    var32 = ptr4[(p1 + i * p2) >> 16];
+    /* 1: storel */
+    ptr0[i] = var32;
+  }
+
+}
+
+#else
+static void
+_backup_video_orc_resample_h_near_u32_lq (OrcExecutor * ORC_RESTRICT ex)
+{
+  int i;
+  int n = ex->n;
+  orc_union32 *ORC_RESTRICT ptr0;
+  const orc_union32 *ORC_RESTRICT ptr4;
+  orc_union32 var32;
+
+  ptr0 = (orc_union32 *) ex->arrays[0];
+  ptr4 = (orc_union32 *) ex->arrays[4];
+
+
+  for (i = 0; i < n; i++) {
+    /* 0: ldresnearl */
+    var32 = ptr4[(ex->params[24] + i * ex->params[25]) >> 16];
+    /* 1: storel */
+    ptr0[i] = var32;
+  }
+
+}
+
+void
+video_orc_resample_h_near_u32_lq (guint32 * ORC_RESTRICT d1,
+    const guint32 * ORC_RESTRICT s1, int p1, int p2, int n)
+{
+  OrcExecutor _ex, *ex = &_ex;
+  static volatile int p_inited = 0;
+  static OrcCode *c = 0;
+  void (*func) (OrcExecutor *);
+
+  if (!p_inited) {
+    orc_once_mutex_lock ();
+    if (!p_inited) {
+      OrcProgram *p;
+
+#if 1
+      static const orc_uint8 bc[] = {
+        1, 9, 32, 118, 105, 100, 101, 111, 95, 111, 114, 99, 95, 114, 101, 115,
+        97, 109, 112, 108, 101, 95, 104, 95, 110, 101, 97, 114, 95, 117, 51, 50,
+        95, 108, 113, 11, 4, 4, 12, 4, 4, 16, 4, 16, 4, 49, 0, 4,
+        24, 25, 2, 0,
+      };
+      p = orc_program_new_from_static_bytecode (bc);
+      orc_program_set_backup_function (p,
+          _backup_video_orc_resample_h_near_u32_lq);
+#else
+      p = orc_program_new ();
+      orc_program_set_name (p, "video_orc_resample_h_near_u32_lq");
+      orc_program_set_backup_function (p,
+          _backup_video_orc_resample_h_near_u32_lq);
+      orc_program_add_destination (p, 4, "d1");
+      orc_program_add_source (p, 4, "s1");
+      orc_program_add_parameter (p, 4, "p1");
+      orc_program_add_parameter (p, 4, "p2");
+
+      orc_program_append_2 (p, "ldresnearl", 0, ORC_VAR_D1, ORC_VAR_S1,
+          ORC_VAR_P1, ORC_VAR_P2);
+#endif
+
+      orc_program_compile (p);
+      c = orc_program_take_code (p);
+      orc_program_free (p);
+    }
+    p_inited = TRUE;
+    orc_once_mutex_unlock ();
+  }
+  ex->arrays[ORC_VAR_A2] = c;
+  ex->program = 0;
+
+  ex->n = n;
+  ex->arrays[ORC_VAR_D1] = d1;
+  ex->arrays[ORC_VAR_S1] = (void *) s1;
+  ex->params[ORC_VAR_P1] = p1;
+  ex->params[ORC_VAR_P2] = p2;
+
+  func = c->exec;
+  func (ex);
+}
+#endif
+
+
+/* video_orc_resample_h_2tap_1u8_lq */
+#ifdef DISABLE_ORC
+void
+video_orc_resample_h_2tap_1u8_lq (guint8 * ORC_RESTRICT d1,
+    const guint8 * ORC_RESTRICT s1, int p1, int p2, int n)
+{
+  int i;
+  orc_int8 *ORC_RESTRICT ptr0;
+  const orc_int8 *ORC_RESTRICT ptr4;
+  orc_int8 var32;
+
+  ptr0 = (orc_int8 *) d1;
+  ptr4 = (orc_int8 *) s1;
+
+
+  for (i = 0; i < n; i++) {
+    /* 0: ldreslinb */
+    {
+      int tmp = p1 + i * p2;
+      var32 =
+          ((orc_uint8) ptr4[tmp >> 16] * (256 - ((tmp >> 8) & 0xff)) +
+          (orc_uint8) ptr4[(tmp >> 16) + 1] * ((tmp >> 8) & 0xff)) >> 8;
+    }
+    /* 1: storeb */
+    ptr0[i] = var32;
+  }
+
+}
+
+#else
+static void
+_backup_video_orc_resample_h_2tap_1u8_lq (OrcExecutor * ORC_RESTRICT ex)
+{
+  int i;
+  int n = ex->n;
+  orc_int8 *ORC_RESTRICT ptr0;
+  const orc_int8 *ORC_RESTRICT ptr4;
+  orc_int8 var32;
+
+  ptr0 = (orc_int8 *) ex->arrays[0];
+  ptr4 = (orc_int8 *) ex->arrays[4];
+
+
+  for (i = 0; i < n; i++) {
+    /* 0: ldreslinb */
+    {
+      int tmp = ex->params[24] + i * ex->params[25];
+      var32 =
+          ((orc_uint8) ptr4[tmp >> 16] * (256 - ((tmp >> 8) & 0xff)) +
+          (orc_uint8) ptr4[(tmp >> 16) + 1] * ((tmp >> 8) & 0xff)) >> 8;
+    }
+    /* 1: storeb */
+    ptr0[i] = var32;
+  }
+
+}
+
+void
+video_orc_resample_h_2tap_1u8_lq (guint8 * ORC_RESTRICT d1,
+    const guint8 * ORC_RESTRICT s1, int p1, int p2, int n)
+{
+  OrcExecutor _ex, *ex = &_ex;
+  static volatile int p_inited = 0;
+  static OrcCode *c = 0;
+  void (*func) (OrcExecutor *);
+
+  if (!p_inited) {
+    orc_once_mutex_lock ();
+    if (!p_inited) {
+      OrcProgram *p;
+
+#if 1
+      static const orc_uint8 bc[] = {
+        1, 9, 32, 118, 105, 100, 101, 111, 95, 111, 114, 99, 95, 114, 101, 115,
+        97, 109, 112, 108, 101, 95, 104, 95, 50, 116, 97, 112, 95, 49, 117, 56,
+        95, 108, 113, 11, 1, 1, 12, 1, 1, 16, 4, 16, 4, 50, 0, 4,
+        24, 25, 2, 0,
+      };
+      p = orc_program_new_from_static_bytecode (bc);
+      orc_program_set_backup_function (p,
+          _backup_video_orc_resample_h_2tap_1u8_lq);
+#else
+      p = orc_program_new ();
+      orc_program_set_name (p, "video_orc_resample_h_2tap_1u8_lq");
+      orc_program_set_backup_function (p,
+          _backup_video_orc_resample_h_2tap_1u8_lq);
+      orc_program_add_destination (p, 1, "d1");
+      orc_program_add_source (p, 1, "s1");
+      orc_program_add_parameter (p, 4, "p1");
+      orc_program_add_parameter (p, 4, "p2");
+
+      orc_program_append_2 (p, "ldreslinb", 0, ORC_VAR_D1, ORC_VAR_S1,
+          ORC_VAR_P1, ORC_VAR_P2);
+#endif
+
+      orc_program_compile (p);
+      c = orc_program_take_code (p);
+      orc_program_free (p);
+    }
+    p_inited = TRUE;
+    orc_once_mutex_unlock ();
+  }
+  ex->arrays[ORC_VAR_A2] = c;
+  ex->program = 0;
+
+  ex->n = n;
+  ex->arrays[ORC_VAR_D1] = d1;
+  ex->arrays[ORC_VAR_S1] = (void *) s1;
+  ex->params[ORC_VAR_P1] = p1;
+  ex->params[ORC_VAR_P2] = p2;
+
+  func = c->exec;
+  func (ex);
+}
+#endif
+
+
+/* video_orc_resample_h_2tap_4u8_lq */
+#ifdef DISABLE_ORC
+void
+video_orc_resample_h_2tap_4u8_lq (guint32 * ORC_RESTRICT d1,
+    const guint32 * ORC_RESTRICT s1, int p1, int p2, int n)
+{
+  int i;
+  orc_union32 *ORC_RESTRICT ptr0;
+  const orc_union32 *ORC_RESTRICT ptr4;
+  orc_union32 var32;
+
+  ptr0 = (orc_union32 *) d1;
+  ptr4 = (orc_union32 *) s1;
+
+
+  for (i = 0; i < n; i++) {
+    /* 0: ldreslinl */
+    {
+      int tmp = p1 + i * p2;
+      orc_union32 a = ptr4[tmp >> 16];
+      orc_union32 b = ptr4[(tmp >> 16) + 1];
+      var32.x4[0] =
+          ((orc_uint8) a.x4[0] * (256 - ((tmp >> 8) & 0xff)) +
+          (orc_uint8) b.x4[0] * ((tmp >> 8) & 0xff)) >> 8;
+      var32.x4[1] =
+          ((orc_uint8) a.x4[1] * (256 - ((tmp >> 8) & 0xff)) +
+          (orc_uint8) b.x4[1] * ((tmp >> 8) & 0xff)) >> 8;
+      var32.x4[2] =
+          ((orc_uint8) a.x4[2] * (256 - ((tmp >> 8) & 0xff)) +
+          (orc_uint8) b.x4[2] * ((tmp >> 8) & 0xff)) >> 8;
+      var32.x4[3] =
+          ((orc_uint8) a.x4[3] * (256 - ((tmp >> 8) & 0xff)) +
+          (orc_uint8) b.x4[3] * ((tmp >> 8) & 0xff)) >> 8;
+    }
+    /* 1: storel */
+    ptr0[i] = var32;
+  }
+
+}
+
+#else
+static void
+_backup_video_orc_resample_h_2tap_4u8_lq (OrcExecutor * ORC_RESTRICT ex)
+{
+  int i;
+  int n = ex->n;
+  orc_union32 *ORC_RESTRICT ptr0;
+  const orc_union32 *ORC_RESTRICT ptr4;
+  orc_union32 var32;
+
+  ptr0 = (orc_union32 *) ex->arrays[0];
+  ptr4 = (orc_union32 *) ex->arrays[4];
+
+
+  for (i = 0; i < n; i++) {
+    /* 0: ldreslinl */
+    {
+      int tmp = ex->params[24] + i * ex->params[25];
+      orc_union32 a = ptr4[tmp >> 16];
+      orc_union32 b = ptr4[(tmp >> 16) + 1];
+      var32.x4[0] =
+          ((orc_uint8) a.x4[0] * (256 - ((tmp >> 8) & 0xff)) +
+          (orc_uint8) b.x4[0] * ((tmp >> 8) & 0xff)) >> 8;
+      var32.x4[1] =
+          ((orc_uint8) a.x4[1] * (256 - ((tmp >> 8) & 0xff)) +
+          (orc_uint8) b.x4[1] * ((tmp >> 8) & 0xff)) >> 8;
+      var32.x4[2] =
+          ((orc_uint8) a.x4[2] * (256 - ((tmp >> 8) & 0xff)) +
+          (orc_uint8) b.x4[2] * ((tmp >> 8) & 0xff)) >> 8;
+      var32.x4[3] =
+          ((orc_uint8) a.x4[3] * (256 - ((tmp >> 8) & 0xff)) +
+          (orc_uint8) b.x4[3] * ((tmp >> 8) & 0xff)) >> 8;
+    }
+    /* 1: storel */
+    ptr0[i] = var32;
+  }
+
+}
+
+void
+video_orc_resample_h_2tap_4u8_lq (guint32 * ORC_RESTRICT d1,
+    const guint32 * ORC_RESTRICT s1, int p1, int p2, int n)
+{
+  OrcExecutor _ex, *ex = &_ex;
+  static volatile int p_inited = 0;
+  static OrcCode *c = 0;
+  void (*func) (OrcExecutor *);
+
+  if (!p_inited) {
+    orc_once_mutex_lock ();
+    if (!p_inited) {
+      OrcProgram *p;
+
+#if 1
+      static const orc_uint8 bc[] = {
+        1, 9, 32, 118, 105, 100, 101, 111, 95, 111, 114, 99, 95, 114, 101, 115,
+        97, 109, 112, 108, 101, 95, 104, 95, 50, 116, 97, 112, 95, 52, 117, 56,
+        95, 108, 113, 11, 4, 4, 12, 4, 4, 16, 4, 16, 4, 51, 0, 4,
+        24, 25, 2, 0,
+      };
+      p = orc_program_new_from_static_bytecode (bc);
+      orc_program_set_backup_function (p,
+          _backup_video_orc_resample_h_2tap_4u8_lq);
+#else
+      p = orc_program_new ();
+      orc_program_set_name (p, "video_orc_resample_h_2tap_4u8_lq");
+      orc_program_set_backup_function (p,
+          _backup_video_orc_resample_h_2tap_4u8_lq);
+      orc_program_add_destination (p, 4, "d1");
+      orc_program_add_source (p, 4, "s1");
+      orc_program_add_parameter (p, 4, "p1");
+      orc_program_add_parameter (p, 4, "p2");
+
+      orc_program_append_2 (p, "ldreslinl", 0, ORC_VAR_D1, ORC_VAR_S1,
+          ORC_VAR_P1, ORC_VAR_P2);
+#endif
+
+      orc_program_compile (p);
+      c = orc_program_take_code (p);
+      orc_program_free (p);
+    }
+    p_inited = TRUE;
+    orc_once_mutex_unlock ();
+  }
+  ex->arrays[ORC_VAR_A2] = c;
+  ex->program = 0;
+
+  ex->n = n;
+  ex->arrays[ORC_VAR_D1] = d1;
+  ex->arrays[ORC_VAR_S1] = (void *) s1;
+  ex->params[ORC_VAR_P1] = p1;
+  ex->params[ORC_VAR_P2] = p2;
+
+  func = c->exec;
+  func (ex);
+}
+#endif
+
+
+/* video_orc_resample_h_2tap_u8_lq */
+#ifdef DISABLE_ORC
+void
+video_orc_resample_h_2tap_u8_lq (guint8 * ORC_RESTRICT d1,
+    const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2,
+    const gint16 * ORC_RESTRICT s3, const gint16 * ORC_RESTRICT s4, int n)
+{
+  int i;
+  orc_int8 *ORC_RESTRICT ptr0;
+  const orc_int8 *ORC_RESTRICT ptr4;
+  const orc_int8 *ORC_RESTRICT ptr5;
+  const orc_union16 *ORC_RESTRICT ptr6;
+  const orc_union16 *ORC_RESTRICT ptr7;
+  orc_int8 var34;
+  orc_union16 var35;
+  orc_int8 var36;
+  orc_union16 var37;
+#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
+  volatile orc_union16 var38;
+#else
+  orc_union16 var38;
+#endif
+  orc_int8 var39;
+  orc_union16 var40;
+  orc_union16 var41;
+  orc_union16 var42;
+  orc_union16 var43;
+  orc_union16 var44;
+  orc_union16 var45;
+  orc_union16 var46;
+
+  ptr0 = (orc_int8 *) d1;
+  ptr4 = (orc_int8 *) s1;
+  ptr5 = (orc_int8 *) s2;
+  ptr6 = (orc_union16 *) s3;
+  ptr7 = (orc_union16 *) s4;
+
+  /* 9: loadpw */
+  var38.i = (int) 0x00000020;   /* 32 or 1.58101e-322f */
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadb */
+    var34 = ptr4[i];
+    /* 1: convubw */
+    var40.i = (orc_uint8) var34;
+    /* 2: loadw */
+    var35 = ptr6[i];
+    /* 3: mullw */
+    var41.i = (var40.i * var35.i) & 0xffff;
+    /* 4: loadb */
+    var36 = ptr5[i];
+    /* 5: convubw */
+    var42.i = (orc_uint8) var36;
+    /* 6: loadw */
+    var37 = ptr7[i];
+    /* 7: mullw */
+    var43.i = (var42.i * var37.i) & 0xffff;
+    /* 8: addw */
+    var44.i = var41.i + var43.i;
+    /* 10: addw */
+    var45.i = var44.i + var38.i;
+    /* 11: shrsw */
+    var46.i = var45.i >> 6;
+    /* 12: convsuswb */
+    var39 = ORC_CLAMP_UB (var46.i);
+    /* 13: storeb */
+    ptr0[i] = var39;
+  }
+
+}
+
+#else
+static void
+_backup_video_orc_resample_h_2tap_u8_lq (OrcExecutor * ORC_RESTRICT ex)
+{
+  int i;
+  int n = ex->n;
+  orc_int8 *ORC_RESTRICT ptr0;
+  const orc_int8 *ORC_RESTRICT ptr4;
+  const orc_int8 *ORC_RESTRICT ptr5;
+  const orc_union16 *ORC_RESTRICT ptr6;
+  const orc_union16 *ORC_RESTRICT ptr7;
+  orc_int8 var34;
+  orc_union16 var35;
+  orc_int8 var36;
+  orc_union16 var37;
+#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
+  volatile orc_union16 var38;
+#else
+  orc_union16 var38;
+#endif
+  orc_int8 var39;
+  orc_union16 var40;
+  orc_union16 var41;
+  orc_union16 var42;
+  orc_union16 var43;
+  orc_union16 var44;
+  orc_union16 var45;
+  orc_union16 var46;
+
+  ptr0 = (orc_int8 *) ex->arrays[0];
+  ptr4 = (orc_int8 *) ex->arrays[4];
+  ptr5 = (orc_int8 *) ex->arrays[5];
+  ptr6 = (orc_union16 *) ex->arrays[6];
+  ptr7 = (orc_union16 *) ex->arrays[7];
+
+  /* 9: loadpw */
+  var38.i = (int) 0x00000020;   /* 32 or 1.58101e-322f */
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadb */
+    var34 = ptr4[i];
+    /* 1: convubw */
+    var40.i = (orc_uint8) var34;
+    /* 2: loadw */
+    var35 = ptr6[i];
+    /* 3: mullw */
+    var41.i = (var40.i * var35.i) & 0xffff;
+    /* 4: loadb */
+    var36 = ptr5[i];
+    /* 5: convubw */
+    var42.i = (orc_uint8) var36;
+    /* 6: loadw */
+    var37 = ptr7[i];
+    /* 7: mullw */
+    var43.i = (var42.i * var37.i) & 0xffff;
+    /* 8: addw */
+    var44.i = var41.i + var43.i;
+    /* 10: addw */
+    var45.i = var44.i + var38.i;
+    /* 11: shrsw */
+    var46.i = var45.i >> 6;
+    /* 12: convsuswb */
+    var39 = ORC_CLAMP_UB (var46.i);
+    /* 13: storeb */
+    ptr0[i] = var39;
+  }
+
+}
+
+void
+video_orc_resample_h_2tap_u8_lq (guint8 * ORC_RESTRICT d1,
+    const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2,
+    const gint16 * ORC_RESTRICT s3, const gint16 * ORC_RESTRICT s4, int n)
+{
+  OrcExecutor _ex, *ex = &_ex;
+  static volatile int p_inited = 0;
+  static OrcCode *c = 0;
+  void (*func) (OrcExecutor *);
+
+  if (!p_inited) {
+    orc_once_mutex_lock ();
+    if (!p_inited) {
+      OrcProgram *p;
+
+#if 1
+      static const orc_uint8 bc[] = {
+        1, 9, 31, 118, 105, 100, 101, 111, 95, 111, 114, 99, 95, 114, 101, 115,
+        97, 109, 112, 108, 101, 95, 104, 95, 50, 116, 97, 112, 95, 117, 56, 95,
+        108, 113, 11, 1, 1, 12, 1, 1, 12, 1, 1, 12, 2, 2, 12, 2,
+        2, 14, 2, 32, 0, 0, 0, 14, 2, 6, 0, 0, 0, 20, 2, 20,
+        2, 150, 32, 4, 89, 32, 32, 6, 150, 33, 5, 89, 33, 33, 7, 70,
+        32, 32, 33, 70, 32, 32, 16, 94, 32, 32, 17, 160, 0, 32, 2, 0,
+
+      };
+      p = orc_program_new_from_static_bytecode (bc);
+      orc_program_set_backup_function (p,
+          _backup_video_orc_resample_h_2tap_u8_lq);
+#else
+      p = orc_program_new ();
+      orc_program_set_name (p, "video_orc_resample_h_2tap_u8_lq");
+      orc_program_set_backup_function (p,
+          _backup_video_orc_resample_h_2tap_u8_lq);
+      orc_program_add_destination (p, 1, "d1");
+      orc_program_add_source (p, 1, "s1");
+      orc_program_add_source (p, 1, "s2");
+      orc_program_add_source (p, 2, "s3");
+      orc_program_add_source (p, 2, "s4");
+      orc_program_add_constant (p, 2, 0x00000020, "c1");
+      orc_program_add_constant (p, 2, 0x00000006, "c2");
+      orc_program_add_temporary (p, 2, "t1");
+      orc_program_add_temporary (p, 2, "t2");
+
+      orc_program_append_2 (p, "convubw", 0, ORC_VAR_T1, ORC_VAR_S1, ORC_VAR_D1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "mullw", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_S3,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "convubw", 0, ORC_VAR_T2, ORC_VAR_S2, ORC_VAR_D1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "mullw", 0, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_S4,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "addw", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_T2,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "addw", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_C1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "shrsw", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_C2,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "convsuswb", 0, ORC_VAR_D1, ORC_VAR_T1,
+          ORC_VAR_D1, ORC_VAR_D1);
+#endif
+
+      orc_program_compile (p);
+      c = orc_program_take_code (p);
+      orc_program_free (p);
+    }
+    p_inited = TRUE;
+    orc_once_mutex_unlock ();
+  }
+  ex->arrays[ORC_VAR_A2] = c;
+  ex->program = 0;
+
+  ex->n = n;
+  ex->arrays[ORC_VAR_D1] = d1;
+  ex->arrays[ORC_VAR_S1] = (void *) s1;
+  ex->arrays[ORC_VAR_S2] = (void *) s2;
+  ex->arrays[ORC_VAR_S3] = (void *) s3;
+  ex->arrays[ORC_VAR_S4] = (void *) s4;
+
+  func = c->exec;
+  func (ex);
+}
+#endif
+
+
+/* video_orc_resample_h_2tap_u16 */
+#ifdef DISABLE_ORC
+void
+video_orc_resample_h_2tap_u16 (guint16 * ORC_RESTRICT d1,
+    const guint16 * ORC_RESTRICT s1, const guint16 * ORC_RESTRICT s2,
+    const gint16 * ORC_RESTRICT s3, const gint16 * ORC_RESTRICT s4, int n)
+{
+  int i;
+  orc_union16 *ORC_RESTRICT ptr0;
+  const orc_union16 *ORC_RESTRICT ptr4;
+  const orc_union16 *ORC_RESTRICT ptr5;
+  const orc_union16 *ORC_RESTRICT ptr6;
+  const orc_union16 *ORC_RESTRICT ptr7;
+  orc_union16 var36;
+  orc_union16 var37;
+  orc_union16 var38;
+  orc_union16 var39;
+#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
+  volatile orc_union32 var40;
+#else
+  orc_union32 var40;
+#endif
+  orc_union16 var41;
+  orc_union32 var42;
+  orc_union32 var43;
+  orc_union32 var44;
+  orc_union32 var45;
+  orc_union32 var46;
+  orc_union32 var47;
+  orc_union32 var48;
+  orc_union32 var49;
+  orc_union32 var50;
+
+  ptr0 = (orc_union16 *) d1;
+  ptr4 = (orc_union16 *) s1;
+  ptr5 = (orc_union16 *) s2;
+  ptr6 = (orc_union16 *) s3;
+  ptr7 = (orc_union16 *) s4;
+
+  /* 11: loadpl */
+  var40.i = (int) 0x00001000;   /* 4096 or 2.02369e-320f */
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadw */
+    var36 = ptr4[i];
+    /* 1: convuwl */
+    var42.i = (orc_uint16) var36.i;
+    /* 2: loadw */
+    var37 = ptr6[i];
+    /* 3: convswl */
+    var43.i = var37.i;
+    /* 4: mulll */
+    var44.i = (((orc_uint32) var42.i) * ((orc_uint32) var43.i)) & 0xffffffff;
+    /* 5: loadw */
+    var38 = ptr5[i];
+    /* 6: convuwl */
+    var45.i = (orc_uint16) var38.i;
+    /* 7: loadw */
+    var39 = ptr7[i];
+    /* 8: convswl */
+    var46.i = var39.i;
+    /* 9: mulll */
+    var47.i = (((orc_uint32) var45.i) * ((orc_uint32) var46.i)) & 0xffffffff;
+    /* 10: addl */
+    var48.i = ((orc_uint32) var44.i) + ((orc_uint32) var47.i);
+    /* 12: addl */
+    var49.i = ((orc_uint32) var48.i) + ((orc_uint32) var40.i);
+    /* 13: shrsl */
+    var50.i = var49.i >> 12;
+    /* 14: convsuslw */
+    var41.i = ORC_CLAMP_UW (var50.i);
+    /* 15: storew */
+    ptr0[i] = var41;
+  }
+
+}
+
+#else
+static void
+_backup_video_orc_resample_h_2tap_u16 (OrcExecutor * ORC_RESTRICT ex)
+{
+  int i;
+  int n = ex->n;
+  orc_union16 *ORC_RESTRICT ptr0;
+  const orc_union16 *ORC_RESTRICT ptr4;
+  const orc_union16 *ORC_RESTRICT ptr5;
+  const orc_union16 *ORC_RESTRICT ptr6;
+  const orc_union16 *ORC_RESTRICT ptr7;
+  orc_union16 var36;
+  orc_union16 var37;
+  orc_union16 var38;
+  orc_union16 var39;
+#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
+  volatile orc_union32 var40;
+#else
+  orc_union32 var40;
+#endif
+  orc_union16 var41;
+  orc_union32 var42;
+  orc_union32 var43;
+  orc_union32 var44;
+  orc_union32 var45;
+  orc_union32 var46;
+  orc_union32 var47;
+  orc_union32 var48;
+  orc_union32 var49;
+  orc_union32 var50;
+
+  ptr0 = (orc_union16 *) ex->arrays[0];
+  ptr4 = (orc_union16 *) ex->arrays[4];
+  ptr5 = (orc_union16 *) ex->arrays[5];
+  ptr6 = (orc_union16 *) ex->arrays[6];
+  ptr7 = (orc_union16 *) ex->arrays[7];
+
+  /* 11: loadpl */
+  var40.i = (int) 0x00001000;   /* 4096 or 2.02369e-320f */
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadw */
+    var36 = ptr4[i];
+    /* 1: convuwl */
+    var42.i = (orc_uint16) var36.i;
+    /* 2: loadw */
+    var37 = ptr6[i];
+    /* 3: convswl */
+    var43.i = var37.i;
+    /* 4: mulll */
+    var44.i = (((orc_uint32) var42.i) * ((orc_uint32) var43.i)) & 0xffffffff;
+    /* 5: loadw */
+    var38 = ptr5[i];
+    /* 6: convuwl */
+    var45.i = (orc_uint16) var38.i;
+    /* 7: loadw */
+    var39 = ptr7[i];
+    /* 8: convswl */
+    var46.i = var39.i;
+    /* 9: mulll */
+    var47.i = (((orc_uint32) var45.i) * ((orc_uint32) var46.i)) & 0xffffffff;
+    /* 10: addl */
+    var48.i = ((orc_uint32) var44.i) + ((orc_uint32) var47.i);
+    /* 12: addl */
+    var49.i = ((orc_uint32) var48.i) + ((orc_uint32) var40.i);
+    /* 13: shrsl */
+    var50.i = var49.i >> 12;
+    /* 14: convsuslw */
+    var41.i = ORC_CLAMP_UW (var50.i);
+    /* 15: storew */
+    ptr0[i] = var41;
+  }
+
+}
+
+void
+video_orc_resample_h_2tap_u16 (guint16 * ORC_RESTRICT d1,
+    const guint16 * ORC_RESTRICT s1, const guint16 * ORC_RESTRICT s2,
+    const gint16 * ORC_RESTRICT s3, const gint16 * ORC_RESTRICT s4, int n)
+{
+  OrcExecutor _ex, *ex = &_ex;
+  static volatile int p_inited = 0;
+  static OrcCode *c = 0;
+  void (*func) (OrcExecutor *);
+
+  if (!p_inited) {
+    orc_once_mutex_lock ();
+    if (!p_inited) {
+      OrcProgram *p;
+
+#if 1
+      static const orc_uint8 bc[] = {
+        1, 9, 29, 118, 105, 100, 101, 111, 95, 111, 114, 99, 95, 114, 101, 115,
+        97, 109, 112, 108, 101, 95, 104, 95, 50, 116, 97, 112, 95, 117, 49, 54,
+        11, 2, 2, 12, 2, 2, 12, 2, 2, 12, 2, 2, 12, 2, 2, 14,
+        4, 0, 16, 0, 0, 14, 4, 12, 0, 0, 0, 20, 4, 20, 4, 20,
+        4, 20, 4, 154, 32, 4, 153, 34, 6, 120, 32, 32, 34, 154, 33, 5,
+        153, 35, 7, 120, 33, 33, 35, 103, 32, 32, 33, 103, 32, 32, 16, 125,
+        32, 32, 17, 166, 0, 32, 2, 0,
+      };
+      p = orc_program_new_from_static_bytecode (bc);
+      orc_program_set_backup_function (p,
+          _backup_video_orc_resample_h_2tap_u16);
+#else
+      p = orc_program_new ();
+      orc_program_set_name (p, "video_orc_resample_h_2tap_u16");
+      orc_program_set_backup_function (p,
+          _backup_video_orc_resample_h_2tap_u16);
+      orc_program_add_destination (p, 2, "d1");
+      orc_program_add_source (p, 2, "s1");
+      orc_program_add_source (p, 2, "s2");
+      orc_program_add_source (p, 2, "s3");
+      orc_program_add_source (p, 2, "s4");
+      orc_program_add_constant (p, 4, 0x00001000, "c1");
+      orc_program_add_constant (p, 4, 0x0000000c, "c2");
+      orc_program_add_temporary (p, 4, "t1");
+      orc_program_add_temporary (p, 4, "t2");
+      orc_program_add_temporary (p, 4, "t3");
+      orc_program_add_temporary (p, 4, "t4");
+
+      orc_program_append_2 (p, "convuwl", 0, ORC_VAR_T1, ORC_VAR_S1, ORC_VAR_D1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "convswl", 0, ORC_VAR_T3, ORC_VAR_S3, ORC_VAR_D1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "mulll", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_T3,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "convuwl", 0, ORC_VAR_T2, ORC_VAR_S2, ORC_VAR_D1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "convswl", 0, ORC_VAR_T4, ORC_VAR_S4, ORC_VAR_D1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "mulll", 0, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_T4,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "addl", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_T2,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "addl", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_C1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "shrsl", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_C2,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "convsuslw", 0, ORC_VAR_D1, ORC_VAR_T1,
+          ORC_VAR_D1, ORC_VAR_D1);
+#endif
+
+      orc_program_compile (p);
+      c = orc_program_take_code (p);
+      orc_program_free (p);
+    }
+    p_inited = TRUE;
+    orc_once_mutex_unlock ();
+  }
+  ex->arrays[ORC_VAR_A2] = c;
+  ex->program = 0;
+
+  ex->n = n;
+  ex->arrays[ORC_VAR_D1] = d1;
+  ex->arrays[ORC_VAR_S1] = (void *) s1;
+  ex->arrays[ORC_VAR_S2] = (void *) s2;
+  ex->arrays[ORC_VAR_S3] = (void *) s3;
+  ex->arrays[ORC_VAR_S4] = (void *) s4;
+
+  func = c->exec;
+  func (ex);
+}
+#endif
+
+
+/* video_orc_resample_v_2tap_u8_lq */
+#ifdef DISABLE_ORC
+void
+video_orc_resample_v_2tap_u8_lq (guint8 * ORC_RESTRICT d1,
+    const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, int p1,
+    int n)
+{
+  int i;
+  orc_int8 *ORC_RESTRICT ptr0;
+  const orc_int8 *ORC_RESTRICT ptr4;
+  const orc_int8 *ORC_RESTRICT ptr5;
+  orc_int8 var35;
+  orc_int8 var36;
+  orc_union16 var37;
+#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
+  volatile orc_union16 var38;
+#else
+  orc_union16 var38;
+#endif
+  orc_int8 var39;
+  orc_int8 var40;
+  orc_union16 var41;
+  orc_union16 var42;
+  orc_union16 var43;
+  orc_union16 var44;
+  orc_union16 var45;
+  orc_int8 var46;
+
+  ptr0 = (orc_int8 *) d1;
+  ptr4 = (orc_int8 *) s1;
+  ptr5 = (orc_int8 *) s2;
+
+  /* 5: loadpw */
+  var37.i = p1;
+  /* 7: loadpw */
+  var38.i = (int) 0x00000080;   /* 128 or 6.32404e-322f */
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadb */
+    var35 = ptr4[i];
+    /* 1: convubw */
+    var41.i = (orc_uint8) var35;
+    /* 2: loadb */
+    var36 = ptr5[i];
+    /* 3: convubw */
+    var42.i = (orc_uint8) var36;
+    /* 4: subw */
+    var43.i = var42.i - var41.i;
+    /* 6: mullw */
+    var44.i = (var43.i * var37.i) & 0xffff;
+    /* 8: addw */
+    var45.i = var44.i + var38.i;
+    /* 9: convhwb */
+    var46 = ((orc_uint16) var45.i) >> 8;
+    /* 10: loadb */
+    var39 = ptr4[i];
+    /* 11: addb */
+    var40 = var46 + var39;
+    /* 12: storeb */
+    ptr0[i] = var40;
+  }
+
+}
+
+#else
+static void
+_backup_video_orc_resample_v_2tap_u8_lq (OrcExecutor * ORC_RESTRICT ex)
+{
+  int i;
+  int n = ex->n;
+  orc_int8 *ORC_RESTRICT ptr0;
+  const orc_int8 *ORC_RESTRICT ptr4;
+  const orc_int8 *ORC_RESTRICT ptr5;
+  orc_int8 var35;
+  orc_int8 var36;
+  orc_union16 var37;
+#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
+  volatile orc_union16 var38;
+#else
+  orc_union16 var38;
+#endif
+  orc_int8 var39;
+  orc_int8 var40;
+  orc_union16 var41;
+  orc_union16 var42;
+  orc_union16 var43;
+  orc_union16 var44;
+  orc_union16 var45;
+  orc_int8 var46;
+
+  ptr0 = (orc_int8 *) ex->arrays[0];
+  ptr4 = (orc_int8 *) ex->arrays[4];
+  ptr5 = (orc_int8 *) ex->arrays[5];
+
+  /* 5: loadpw */
+  var37.i = ex->params[24];
+  /* 7: loadpw */
+  var38.i = (int) 0x00000080;   /* 128 or 6.32404e-322f */
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadb */
+    var35 = ptr4[i];
+    /* 1: convubw */
+    var41.i = (orc_uint8) var35;
+    /* 2: loadb */
+    var36 = ptr5[i];
+    /* 3: convubw */
+    var42.i = (orc_uint8) var36;
+    /* 4: subw */
+    var43.i = var42.i - var41.i;
+    /* 6: mullw */
+    var44.i = (var43.i * var37.i) & 0xffff;
+    /* 8: addw */
+    var45.i = var44.i + var38.i;
+    /* 9: convhwb */
+    var46 = ((orc_uint16) var45.i) >> 8;
+    /* 10: loadb */
+    var39 = ptr4[i];
+    /* 11: addb */
+    var40 = var46 + var39;
+    /* 12: storeb */
+    ptr0[i] = var40;
+  }
+
+}
+
+void
+video_orc_resample_v_2tap_u8_lq (guint8 * ORC_RESTRICT d1,
+    const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, int p1,
+    int n)
+{
+  OrcExecutor _ex, *ex = &_ex;
+  static volatile int p_inited = 0;
+  static OrcCode *c = 0;
+  void (*func) (OrcExecutor *);
+
+  if (!p_inited) {
+    orc_once_mutex_lock ();
+    if (!p_inited) {
+      OrcProgram *p;
+
+#if 1
+      static const orc_uint8 bc[] = {
+        1, 9, 31, 118, 105, 100, 101, 111, 95, 111, 114, 99, 95, 114, 101, 115,
+        97, 109, 112, 108, 101, 95, 118, 95, 50, 116, 97, 112, 95, 117, 56, 95,
+        108, 113, 11, 1, 1, 12, 1, 1, 12, 1, 1, 14, 2, 128, 0, 0,
+        0, 16, 2, 20, 1, 20, 2, 20, 2, 150, 33, 4, 150, 34, 5, 98,
+        34, 34, 33, 89, 34, 34, 24, 70, 34, 34, 16, 158, 32, 34, 33, 0,
+        32, 4, 2, 0,
+      };
+      p = orc_program_new_from_static_bytecode (bc);
+      orc_program_set_backup_function (p,
+          _backup_video_orc_resample_v_2tap_u8_lq);
+#else
+      p = orc_program_new ();
+      orc_program_set_name (p, "video_orc_resample_v_2tap_u8_lq");
+      orc_program_set_backup_function (p,
+          _backup_video_orc_resample_v_2tap_u8_lq);
+      orc_program_add_destination (p, 1, "d1");
+      orc_program_add_source (p, 1, "s1");
+      orc_program_add_source (p, 1, "s2");
+      orc_program_add_constant (p, 2, 0x00000080, "c1");
+      orc_program_add_parameter (p, 2, "p1");
+      orc_program_add_temporary (p, 1, "t1");
+      orc_program_add_temporary (p, 2, "t2");
+      orc_program_add_temporary (p, 2, "t3");
+
+      orc_program_append_2 (p, "convubw", 0, ORC_VAR_T2, ORC_VAR_S1, ORC_VAR_D1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "convubw", 0, ORC_VAR_T3, ORC_VAR_S2, ORC_VAR_D1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "subw", 0, ORC_VAR_T3, ORC_VAR_T3, ORC_VAR_T2,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "mullw", 0, ORC_VAR_T3, ORC_VAR_T3, ORC_VAR_P1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "addw", 0, ORC_VAR_T3, ORC_VAR_T3, ORC_VAR_C1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "convhwb", 0, ORC_VAR_T1, ORC_VAR_T3, ORC_VAR_D1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "addb", 0, ORC_VAR_D1, ORC_VAR_T1, ORC_VAR_S1,
+          ORC_VAR_D1);
+#endif
+
+      orc_program_compile (p);
+      c = orc_program_take_code (p);
+      orc_program_free (p);
+    }
+    p_inited = TRUE;
+    orc_once_mutex_unlock ();
+  }
+  ex->arrays[ORC_VAR_A2] = c;
+  ex->program = 0;
+
+  ex->n = n;
+  ex->arrays[ORC_VAR_D1] = d1;
+  ex->arrays[ORC_VAR_S1] = (void *) s1;
+  ex->arrays[ORC_VAR_S2] = (void *) s2;
+  ex->params[ORC_VAR_P1] = p1;
+
+  func = c->exec;
+  func (ex);
+}
+#endif
+
+
+/* video_orc_resample_v_2tap_u16 */
+#ifdef DISABLE_ORC
+void
+video_orc_resample_v_2tap_u16 (guint16 * ORC_RESTRICT d1,
+    const guint16 * ORC_RESTRICT s1, const guint16 * ORC_RESTRICT s2, int p1,
+    int n)
+{
+  int i;
+  orc_union16 *ORC_RESTRICT ptr0;
+  const orc_union16 *ORC_RESTRICT ptr4;
+  const orc_union16 *ORC_RESTRICT ptr5;
+  orc_union16 var35;
+  orc_union16 var36;
+  orc_union16 var37;
+#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
+  volatile orc_union32 var38;
+#else
+  orc_union32 var38;
+#endif
+  orc_union16 var39;
+  orc_union32 var40;
+  orc_union32 var41;
+  orc_union32 var42;
+  orc_union32 var43;
+  orc_union32 var44;
+  orc_union32 var45;
+  orc_union32 var46;
+  orc_union32 var47;
+
+  ptr0 = (orc_union16 *) d1;
+  ptr4 = (orc_union16 *) s1;
+  ptr5 = (orc_union16 *) s2;
+
+  /* 5: loadpw */
+  var37.i = p1;
+  /* 8: loadpl */
+  var38.i = (int) 0x00001000;   /* 4096 or 2.02369e-320f */
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadw */
+    var35 = ptr4[i];
+    /* 1: convuwl */
+    var40.i = (orc_uint16) var35.i;
+    /* 2: loadw */
+    var36 = ptr5[i];
+    /* 3: convuwl */
+    var41.i = (orc_uint16) var36.i;
+    /* 4: subl */
+    var42.i = ((orc_uint32) var41.i) - ((orc_uint32) var40.i);
+    /* 6: convuwl */
+    var43.i = (orc_uint16) var37.i;
+    /* 7: mulll */
+    var44.i = (((orc_uint32) var42.i) * ((orc_uint32) var43.i)) & 0xffffffff;
+    /* 9: addl */
+    var45.i = ((orc_uint32) var44.i) + ((orc_uint32) var38.i);
+    /* 10: shrsl */
+    var46.i = var45.i >> 12;
+    /* 11: addl */
+    var47.i = ((orc_uint32) var40.i) + ((orc_uint32) var46.i);
+    /* 12: convsuslw */
+    var39.i = ORC_CLAMP_UW (var47.i);
+    /* 13: storew */
+    ptr0[i] = var39;
+  }
+
+}
+
+#else
+static void
+_backup_video_orc_resample_v_2tap_u16 (OrcExecutor * ORC_RESTRICT ex)
+{
+  int i;
+  int n = ex->n;
+  orc_union16 *ORC_RESTRICT ptr0;
+  const orc_union16 *ORC_RESTRICT ptr4;
+  const orc_union16 *ORC_RESTRICT ptr5;
+  orc_union16 var35;
+  orc_union16 var36;
+  orc_union16 var37;
+#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
+  volatile orc_union32 var38;
+#else
+  orc_union32 var38;
+#endif
+  orc_union16 var39;
+  orc_union32 var40;
+  orc_union32 var41;
+  orc_union32 var42;
+  orc_union32 var43;
+  orc_union32 var44;
+  orc_union32 var45;
+  orc_union32 var46;
+  orc_union32 var47;
+
+  ptr0 = (orc_union16 *) ex->arrays[0];
+  ptr4 = (orc_union16 *) ex->arrays[4];
+  ptr5 = (orc_union16 *) ex->arrays[5];
+
+  /* 5: loadpw */
+  var37.i = ex->params[24];
+  /* 8: loadpl */
+  var38.i = (int) 0x00001000;   /* 4096 or 2.02369e-320f */
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadw */
+    var35 = ptr4[i];
+    /* 1: convuwl */
+    var40.i = (orc_uint16) var35.i;
+    /* 2: loadw */
+    var36 = ptr5[i];
+    /* 3: convuwl */
+    var41.i = (orc_uint16) var36.i;
+    /* 4: subl */
+    var42.i = ((orc_uint32) var41.i) - ((orc_uint32) var40.i);
+    /* 6: convuwl */
+    var43.i = (orc_uint16) var37.i;
+    /* 7: mulll */
+    var44.i = (((orc_uint32) var42.i) * ((orc_uint32) var43.i)) & 0xffffffff;
+    /* 9: addl */
+    var45.i = ((orc_uint32) var44.i) + ((orc_uint32) var38.i);
+    /* 10: shrsl */
+    var46.i = var45.i >> 12;
+    /* 11: addl */
+    var47.i = ((orc_uint32) var40.i) + ((orc_uint32) var46.i);
+    /* 12: convsuslw */
+    var39.i = ORC_CLAMP_UW (var47.i);
+    /* 13: storew */
+    ptr0[i] = var39;
+  }
+
+}
+
+void
+video_orc_resample_v_2tap_u16 (guint16 * ORC_RESTRICT d1,
+    const guint16 * ORC_RESTRICT s1, const guint16 * ORC_RESTRICT s2, int p1,
+    int n)
+{
+  OrcExecutor _ex, *ex = &_ex;
+  static volatile int p_inited = 0;
+  static OrcCode *c = 0;
+  void (*func) (OrcExecutor *);
+
+  if (!p_inited) {
+    orc_once_mutex_lock ();
+    if (!p_inited) {
+      OrcProgram *p;
+
+#if 1
+      static const orc_uint8 bc[] = {
+        1, 9, 29, 118, 105, 100, 101, 111, 95, 111, 114, 99, 95, 114, 101, 115,
+        97, 109, 112, 108, 101, 95, 118, 95, 50, 116, 97, 112, 95, 117, 49, 54,
+        11, 2, 2, 12, 2, 2, 12, 2, 2, 14, 4, 0, 16, 0, 0, 14,
+        4, 12, 0, 0, 0, 16, 2, 20, 4, 20, 4, 20, 4, 154, 32, 4,
+        154, 33, 5, 129, 33, 33, 32, 154, 34, 24, 120, 33, 33, 34, 103, 33,
+        33, 16, 125, 33, 33, 17, 103, 32, 32, 33, 166, 0, 32, 2, 0,
+      };
+      p = orc_program_new_from_static_bytecode (bc);
+      orc_program_set_backup_function (p,
+          _backup_video_orc_resample_v_2tap_u16);
+#else
+      p = orc_program_new ();
+      orc_program_set_name (p, "video_orc_resample_v_2tap_u16");
+      orc_program_set_backup_function (p,
+          _backup_video_orc_resample_v_2tap_u16);
+      orc_program_add_destination (p, 2, "d1");
+      orc_program_add_source (p, 2, "s1");
+      orc_program_add_source (p, 2, "s2");
+      orc_program_add_constant (p, 4, 0x00001000, "c1");
+      orc_program_add_constant (p, 4, 0x0000000c, "c2");
+      orc_program_add_parameter (p, 2, "p1");
+      orc_program_add_temporary (p, 4, "t1");
+      orc_program_add_temporary (p, 4, "t2");
+      orc_program_add_temporary (p, 4, "t3");
+
+      orc_program_append_2 (p, "convuwl", 0, ORC_VAR_T1, ORC_VAR_S1, ORC_VAR_D1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "convuwl", 0, ORC_VAR_T2, ORC_VAR_S2, ORC_VAR_D1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "subl", 0, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_T1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "convuwl", 0, ORC_VAR_T3, ORC_VAR_P1, ORC_VAR_D1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "mulll", 0, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_T3,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "addl", 0, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_C1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "shrsl", 0, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_C2,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "addl", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_T2,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "convsuslw", 0, ORC_VAR_D1, ORC_VAR_T1,
+          ORC_VAR_D1, ORC_VAR_D1);
+#endif
+
+      orc_program_compile (p);
+      c = orc_program_take_code (p);
+      orc_program_free (p);
+    }
+    p_inited = TRUE;
+    orc_once_mutex_unlock ();
+  }
+  ex->arrays[ORC_VAR_A2] = c;
+  ex->program = 0;
+
+  ex->n = n;
+  ex->arrays[ORC_VAR_D1] = d1;
+  ex->arrays[ORC_VAR_S1] = (void *) s1;
+  ex->arrays[ORC_VAR_S2] = (void *) s2;
+  ex->params[ORC_VAR_P1] = p1;
+
+  func = c->exec;
+  func (ex);
+}
+#endif
+
+
+/* video_orc_resample_v_2tap_u8 */
+#ifdef DISABLE_ORC
+void
+video_orc_resample_v_2tap_u8 (guint8 * ORC_RESTRICT d1,
+    const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, int p1,
+    int n)
+{
+  int i;
+  orc_int8 *ORC_RESTRICT ptr0;
+  const orc_int8 *ORC_RESTRICT ptr4;
+  const orc_int8 *ORC_RESTRICT ptr5;
+  orc_int8 var37;
+  orc_int8 var38;
+  orc_union16 var39;
+#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
+  volatile orc_union32 var40;
+#else
+  orc_union32 var40;
+#endif
+  orc_int8 var41;
+  orc_union16 var42;
+  orc_union16 var43;
+  orc_union16 var44;
+  orc_union32 var45;
+  orc_union32 var46;
+  orc_union32 var47;
+  orc_union16 var48;
+  orc_union16 var49;
+
+  ptr0 = (orc_int8 *) d1;
+  ptr4 = (orc_int8 *) s1;
+  ptr5 = (orc_int8 *) s2;
+
+  /* 5: loadpw */
+  var39.i = p1;
+  /* 7: loadpl */
+  var40.i = (int) 0x00000fff;   /* 4095 or 2.0232e-320f */
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadb */
+    var37 = ptr4[i];
+    /* 1: convubw */
+    var42.i = (orc_uint8) var37;
+    /* 2: loadb */
+    var38 = ptr5[i];
+    /* 3: convubw */
+    var43.i = (orc_uint8) var38;
+    /* 4: subw */
+    var44.i = var43.i - var42.i;
+    /* 6: mulswl */
+    var45.i = var44.i * var39.i;
+    /* 8: addl */
+    var46.i = ((orc_uint32) var45.i) + ((orc_uint32) var40.i);
+    /* 9: shrsl */
+    var47.i = var46.i >> 12;
+    /* 10: convlw */
+    var48.i = var47.i;
+    /* 11: addw */
+    var49.i = var48.i + var42.i;
+    /* 12: convsuswb */
+    var41 = ORC_CLAMP_UB (var49.i);
+    /* 13: storeb */
+    ptr0[i] = var41;
+  }
+
+}
+
+#else
+static void
+_backup_video_orc_resample_v_2tap_u8 (OrcExecutor * ORC_RESTRICT ex)
+{
+  int i;
+  int n = ex->n;
+  orc_int8 *ORC_RESTRICT ptr0;
+  const orc_int8 *ORC_RESTRICT ptr4;
+  const orc_int8 *ORC_RESTRICT ptr5;
+  orc_int8 var37;
+  orc_int8 var38;
+  orc_union16 var39;
+#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
+  volatile orc_union32 var40;
+#else
+  orc_union32 var40;
+#endif
+  orc_int8 var41;
+  orc_union16 var42;
+  orc_union16 var43;
+  orc_union16 var44;
+  orc_union32 var45;
+  orc_union32 var46;
+  orc_union32 var47;
+  orc_union16 var48;
+  orc_union16 var49;
+
+  ptr0 = (orc_int8 *) ex->arrays[0];
+  ptr4 = (orc_int8 *) ex->arrays[4];
+  ptr5 = (orc_int8 *) ex->arrays[5];
+
+  /* 5: loadpw */
+  var39.i = ex->params[24];
+  /* 7: loadpl */
+  var40.i = (int) 0x00000fff;   /* 4095 or 2.0232e-320f */
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadb */
+    var37 = ptr4[i];
+    /* 1: convubw */
+    var42.i = (orc_uint8) var37;
+    /* 2: loadb */
+    var38 = ptr5[i];
+    /* 3: convubw */
+    var43.i = (orc_uint8) var38;
+    /* 4: subw */
+    var44.i = var43.i - var42.i;
+    /* 6: mulswl */
+    var45.i = var44.i * var39.i;
+    /* 8: addl */
+    var46.i = ((orc_uint32) var45.i) + ((orc_uint32) var40.i);
+    /* 9: shrsl */
+    var47.i = var46.i >> 12;
+    /* 10: convlw */
+    var48.i = var47.i;
+    /* 11: addw */
+    var49.i = var48.i + var42.i;
+    /* 12: convsuswb */
+    var41 = ORC_CLAMP_UB (var49.i);
+    /* 13: storeb */
+    ptr0[i] = var41;
+  }
+
+}
+
+void
+video_orc_resample_v_2tap_u8 (guint8 * ORC_RESTRICT d1,
+    const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, int p1,
+    int n)
+{
+  OrcExecutor _ex, *ex = &_ex;
+  static volatile int p_inited = 0;
+  static OrcCode *c = 0;
+  void (*func) (OrcExecutor *);
+
+  if (!p_inited) {
+    orc_once_mutex_lock ();
+    if (!p_inited) {
+      OrcProgram *p;
+
+#if 1
+      static const orc_uint8 bc[] = {
+        1, 9, 28, 118, 105, 100, 101, 111, 95, 111, 114, 99, 95, 114, 101, 115,
+        97, 109, 112, 108, 101, 95, 118, 95, 50, 116, 97, 112, 95, 117, 56, 11,
+        1, 1, 12, 1, 1, 12, 1, 1, 14, 4, 255, 15, 0, 0, 14, 4,
+        12, 0, 0, 0, 16, 2, 20, 1, 20, 2, 20, 2, 20, 4, 20, 4,
+        150, 33, 4, 150, 34, 5, 98, 34, 34, 33, 176, 36, 34, 24, 103, 36,
+        36, 16, 125, 36, 36, 17, 163, 34, 36, 70, 34, 34, 33, 160, 0, 34,
+        2, 0,
+      };
+      p = orc_program_new_from_static_bytecode (bc);
+      orc_program_set_backup_function (p, _backup_video_orc_resample_v_2tap_u8);
+#else
+      p = orc_program_new ();
+      orc_program_set_name (p, "video_orc_resample_v_2tap_u8");
+      orc_program_set_backup_function (p, _backup_video_orc_resample_v_2tap_u8);
+      orc_program_add_destination (p, 1, "d1");
+      orc_program_add_source (p, 1, "s1");
+      orc_program_add_source (p, 1, "s2");
+      orc_program_add_constant (p, 4, 0x00000fff, "c1");
+      orc_program_add_constant (p, 4, 0x0000000c, "c2");
+      orc_program_add_parameter (p, 2, "p1");
+      orc_program_add_temporary (p, 1, "t1");
+      orc_program_add_temporary (p, 2, "t2");
+      orc_program_add_temporary (p, 2, "t3");
+      orc_program_add_temporary (p, 4, "t4");
+      orc_program_add_temporary (p, 4, "t5");
+
+      orc_program_append_2 (p, "convubw", 0, ORC_VAR_T2, ORC_VAR_S1, ORC_VAR_D1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "convubw", 0, ORC_VAR_T3, ORC_VAR_S2, ORC_VAR_D1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "subw", 0, ORC_VAR_T3, ORC_VAR_T3, ORC_VAR_T2,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "mulswl", 0, ORC_VAR_T5, ORC_VAR_T3, ORC_VAR_P1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "addl", 0, ORC_VAR_T5, ORC_VAR_T5, ORC_VAR_C1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "shrsl", 0, ORC_VAR_T5, ORC_VAR_T5, ORC_VAR_C2,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "convlw", 0, ORC_VAR_T3, ORC_VAR_T5, ORC_VAR_D1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "addw", 0, ORC_VAR_T3, ORC_VAR_T3, ORC_VAR_T2,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "convsuswb", 0, ORC_VAR_D1, ORC_VAR_T3,
+          ORC_VAR_D1, ORC_VAR_D1);
+#endif
+
+      orc_program_compile (p);
+      c = orc_program_take_code (p);
+      orc_program_free (p);
+    }
+    p_inited = TRUE;
+    orc_once_mutex_unlock ();
+  }
+  ex->arrays[ORC_VAR_A2] = c;
+  ex->program = 0;
+
+  ex->n = n;
+  ex->arrays[ORC_VAR_D1] = d1;
+  ex->arrays[ORC_VAR_S1] = (void *) s1;
+  ex->arrays[ORC_VAR_S2] = (void *) s2;
+  ex->params[ORC_VAR_P1] = p1;
+
+  func = c->exec;
+  func (ex);
+}
+#endif
+
+
+/* video_orc_resample_v_4tap_u8_lq */
+#ifdef DISABLE_ORC
+void
+video_orc_resample_v_4tap_u8_lq (guint8 * ORC_RESTRICT d1,
+    const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2,
+    const guint8 * ORC_RESTRICT s3, const guint8 * ORC_RESTRICT s4, int p1,
+    int p2, int p3, int p4, int n)
+{
+  int i;
+  orc_int8 *ORC_RESTRICT ptr0;
+  const orc_int8 *ORC_RESTRICT ptr4;
+  const orc_int8 *ORC_RESTRICT ptr5;
+  const orc_int8 *ORC_RESTRICT ptr6;
+  const orc_int8 *ORC_RESTRICT ptr7;
+  orc_int8 var34;
+  orc_union16 var35;
+  orc_int8 var36;
+  orc_union16 var37;
+  orc_int8 var38;
+  orc_union16 var39;
+  orc_int8 var40;
+  orc_union16 var41;
+#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
+  volatile orc_union16 var42;
+#else
+  orc_union16 var42;
+#endif
+  orc_int8 var43;
+  orc_union16 var44;
+  orc_union16 var45;
+  orc_union16 var46;
+  orc_union16 var47;
+  orc_union16 var48;
+  orc_union16 var49;
+  orc_union16 var50;
+  orc_union16 var51;
+  orc_union16 var52;
+  orc_union16 var53;
+  orc_union16 var54;
+  orc_union16 var55;
+  orc_union16 var56;
+
+  ptr0 = (orc_int8 *) d1;
+  ptr4 = (orc_int8 *) s1;
+  ptr5 = (orc_int8 *) s2;
+  ptr6 = (orc_int8 *) s3;
+  ptr7 = (orc_int8 *) s4;
+
+  /* 2: loadpw */
+  var35.i = p1;
+  /* 6: loadpw */
+  var37.i = p2;
+  /* 11: loadpw */
+  var39.i = p3;
+  /* 16: loadpw */
+  var41.i = p4;
+  /* 19: loadpw */
+  var42.i = (int) 0x00000020;   /* 32 or 1.58101e-322f */
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadb */
+    var34 = ptr4[i];
+    /* 1: convubw */
+    var44.i = (orc_uint8) var34;
+    /* 3: mullw */
+    var45.i = (var44.i * var35.i) & 0xffff;
+    /* 4: loadb */
+    var36 = ptr5[i];
+    /* 5: convubw */
+    var46.i = (orc_uint8) var36;
+    /* 7: mullw */
+    var47.i = (var46.i * var37.i) & 0xffff;
+    /* 8: addw */
+    var48.i = var45.i + var47.i;
+    /* 9: loadb */
+    var38 = ptr6[i];
+    /* 10: convubw */
+    var49.i = (orc_uint8) var38;
+    /* 12: mullw */
+    var50.i = (var49.i * var39.i) & 0xffff;
+    /* 13: addw */
+    var51.i = var48.i + var50.i;
+    /* 14: loadb */
+    var40 = ptr7[i];
+    /* 15: convubw */
+    var52.i = (orc_uint8) var40;
+    /* 17: mullw */
+    var53.i = (var52.i * var41.i) & 0xffff;
+    /* 18: addw */
+    var54.i = var51.i + var53.i;
+    /* 20: addw */
+    var55.i = var54.i + var42.i;
+    /* 21: shrsw */
+    var56.i = var55.i >> 6;
+    /* 22: convsuswb */
+    var43 = ORC_CLAMP_UB (var56.i);
+    /* 23: storeb */
+    ptr0[i] = var43;
+  }
+
+}
+
+#else
+static void
+_backup_video_orc_resample_v_4tap_u8_lq (OrcExecutor * ORC_RESTRICT ex)
+{
+  int i;
+  int n = ex->n;
+  orc_int8 *ORC_RESTRICT ptr0;
+  const orc_int8 *ORC_RESTRICT ptr4;
+  const orc_int8 *ORC_RESTRICT ptr5;
+  const orc_int8 *ORC_RESTRICT ptr6;
+  const orc_int8 *ORC_RESTRICT ptr7;
+  orc_int8 var34;
+  orc_union16 var35;
+  orc_int8 var36;
+  orc_union16 var37;
+  orc_int8 var38;
+  orc_union16 var39;
+  orc_int8 var40;
+  orc_union16 var41;
+#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
+  volatile orc_union16 var42;
+#else
+  orc_union16 var42;
+#endif
+  orc_int8 var43;
+  orc_union16 var44;
+  orc_union16 var45;
+  orc_union16 var46;
+  orc_union16 var47;
+  orc_union16 var48;
+  orc_union16 var49;
+  orc_union16 var50;
+  orc_union16 var51;
+  orc_union16 var52;
+  orc_union16 var53;
+  orc_union16 var54;
+  orc_union16 var55;
+  orc_union16 var56;
+
+  ptr0 = (orc_int8 *) ex->arrays[0];
+  ptr4 = (orc_int8 *) ex->arrays[4];
+  ptr5 = (orc_int8 *) ex->arrays[5];
+  ptr6 = (orc_int8 *) ex->arrays[6];
+  ptr7 = (orc_int8 *) ex->arrays[7];
+
+  /* 2: loadpw */
+  var35.i = ex->params[24];
+  /* 6: loadpw */
+  var37.i = ex->params[25];
+  /* 11: loadpw */
+  var39.i = ex->params[26];
+  /* 16: loadpw */
+  var41.i = ex->params[27];
+  /* 19: loadpw */
+  var42.i = (int) 0x00000020;   /* 32 or 1.58101e-322f */
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadb */
+    var34 = ptr4[i];
+    /* 1: convubw */
+    var44.i = (orc_uint8) var34;
+    /* 3: mullw */
+    var45.i = (var44.i * var35.i) & 0xffff;
+    /* 4: loadb */
+    var36 = ptr5[i];
+    /* 5: convubw */
+    var46.i = (orc_uint8) var36;
+    /* 7: mullw */
+    var47.i = (var46.i * var37.i) & 0xffff;
+    /* 8: addw */
+    var48.i = var45.i + var47.i;
+    /* 9: loadb */
+    var38 = ptr6[i];
+    /* 10: convubw */
+    var49.i = (orc_uint8) var38;
+    /* 12: mullw */
+    var50.i = (var49.i * var39.i) & 0xffff;
+    /* 13: addw */
+    var51.i = var48.i + var50.i;
+    /* 14: loadb */
+    var40 = ptr7[i];
+    /* 15: convubw */
+    var52.i = (orc_uint8) var40;
+    /* 17: mullw */
+    var53.i = (var52.i * var41.i) & 0xffff;
+    /* 18: addw */
+    var54.i = var51.i + var53.i;
+    /* 20: addw */
+    var55.i = var54.i + var42.i;
+    /* 21: shrsw */
+    var56.i = var55.i >> 6;
+    /* 22: convsuswb */
+    var43 = ORC_CLAMP_UB (var56.i);
+    /* 23: storeb */
+    ptr0[i] = var43;
+  }
+
+}
+
+void
+video_orc_resample_v_4tap_u8_lq (guint8 * ORC_RESTRICT d1,
+    const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2,
+    const guint8 * ORC_RESTRICT s3, const guint8 * ORC_RESTRICT s4, int p1,
+    int p2, int p3, int p4, int n)
+{
+  OrcExecutor _ex, *ex = &_ex;
+  static volatile int p_inited = 0;
+  static OrcCode *c = 0;
+  void (*func) (OrcExecutor *);
+
+  if (!p_inited) {
+    orc_once_mutex_lock ();
+    if (!p_inited) {
+      OrcProgram *p;
+
+#if 1
+      static const orc_uint8 bc[] = {
+        1, 9, 31, 118, 105, 100, 101, 111, 95, 111, 114, 99, 95, 114, 101, 115,
+        97, 109, 112, 108, 101, 95, 118, 95, 52, 116, 97, 112, 95, 117, 56, 95,
+        108, 113, 11, 1, 1, 12, 1, 1, 12, 1, 1, 12, 1, 1, 12, 1,
+        1, 14, 2, 32, 0, 0, 0, 14, 2, 6, 0, 0, 0, 16, 2, 16,
+        2, 16, 2, 16, 2, 20, 2, 20, 2, 150, 32, 4, 89, 32, 32, 24,
+        150, 33, 5, 89, 33, 33, 25, 70, 32, 32, 33, 150, 33, 6, 89, 33,
+        33, 26, 70, 32, 32, 33, 150, 33, 7, 89, 33, 33, 27, 70, 32, 32,
+        33, 70, 32, 32, 16, 94, 32, 32, 17, 160, 0, 32, 2, 0,
+      };
+      p = orc_program_new_from_static_bytecode (bc);
+      orc_program_set_backup_function (p,
+          _backup_video_orc_resample_v_4tap_u8_lq);
+#else
+      p = orc_program_new ();
+      orc_program_set_name (p, "video_orc_resample_v_4tap_u8_lq");
+      orc_program_set_backup_function (p,
+          _backup_video_orc_resample_v_4tap_u8_lq);
+      orc_program_add_destination (p, 1, "d1");
+      orc_program_add_source (p, 1, "s1");
+      orc_program_add_source (p, 1, "s2");
+      orc_program_add_source (p, 1, "s3");
+      orc_program_add_source (p, 1, "s4");
+      orc_program_add_constant (p, 2, 0x00000020, "c1");
+      orc_program_add_constant (p, 2, 0x00000006, "c2");
+      orc_program_add_parameter (p, 2, "p1");
+      orc_program_add_parameter (p, 2, "p2");
+      orc_program_add_parameter (p, 2, "p3");
+      orc_program_add_parameter (p, 2, "p4");
+      orc_program_add_temporary (p, 2, "t1");
+      orc_program_add_temporary (p, 2, "t2");
+
+      orc_program_append_2 (p, "convubw", 0, ORC_VAR_T1, ORC_VAR_S1, ORC_VAR_D1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "mullw", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_P1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "convubw", 0, ORC_VAR_T2, ORC_VAR_S2, ORC_VAR_D1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "mullw", 0, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_P2,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "addw", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_T2,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "convubw", 0, ORC_VAR_T2, ORC_VAR_S3, ORC_VAR_D1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "mullw", 0, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_P3,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "addw", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_T2,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "convubw", 0, ORC_VAR_T2, ORC_VAR_S4, ORC_VAR_D1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "mullw", 0, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_P4,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "addw", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_T2,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "addw", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_C1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "shrsw", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_C2,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "convsuswb", 0, ORC_VAR_D1, ORC_VAR_T1,
+          ORC_VAR_D1, ORC_VAR_D1);
+#endif
+
+      orc_program_compile (p);
+      c = orc_program_take_code (p);
+      orc_program_free (p);
+    }
+    p_inited = TRUE;
+    orc_once_mutex_unlock ();
+  }
+  ex->arrays[ORC_VAR_A2] = c;
+  ex->program = 0;
+
+  ex->n = n;
+  ex->arrays[ORC_VAR_D1] = d1;
+  ex->arrays[ORC_VAR_S1] = (void *) s1;
+  ex->arrays[ORC_VAR_S2] = (void *) s2;
+  ex->arrays[ORC_VAR_S3] = (void *) s3;
+  ex->arrays[ORC_VAR_S4] = (void *) s4;
+  ex->params[ORC_VAR_P1] = p1;
+  ex->params[ORC_VAR_P2] = p2;
+  ex->params[ORC_VAR_P3] = p3;
+  ex->params[ORC_VAR_P4] = p4;
+
+  func = c->exec;
+  func (ex);
+}
+#endif
+
+
+/* video_orc_resample_v_4tap_u8 */
+#ifdef DISABLE_ORC
+void
+video_orc_resample_v_4tap_u8 (guint8 * ORC_RESTRICT d1,
+    const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2,
+    const guint8 * ORC_RESTRICT s3, const guint8 * ORC_RESTRICT s4, int p1,
+    int p2, int p3, int p4, int n)
+{
+  int i;
+  orc_int8 *ORC_RESTRICT ptr0;
+  const orc_int8 *ORC_RESTRICT ptr4;
+  const orc_int8 *ORC_RESTRICT ptr5;
+  const orc_int8 *ORC_RESTRICT ptr6;
+  const orc_int8 *ORC_RESTRICT ptr7;
+  orc_int8 var36;
+  orc_union16 var37;
+  orc_int8 var38;
+  orc_union16 var39;
+  orc_int8 var40;
+  orc_union16 var41;
+  orc_int8 var42;
+  orc_union16 var43;
+#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
+  volatile orc_union32 var44;
+#else
+  orc_union32 var44;
+#endif
+  orc_int8 var45;
+  orc_union16 var46;
+  orc_union32 var47;
+  orc_union16 var48;
+  orc_union32 var49;
+  orc_union32 var50;
+  orc_union16 var51;
+  orc_union32 var52;
+  orc_union32 var53;
+  orc_union16 var54;
+  orc_union32 var55;
+  orc_union32 var56;
+  orc_union32 var57;
+  orc_union32 var58;
+  orc_union16 var59;
+
+  ptr0 = (orc_int8 *) d1;
+  ptr4 = (orc_int8 *) s1;
+  ptr5 = (orc_int8 *) s2;
+  ptr6 = (orc_int8 *) s3;
+  ptr7 = (orc_int8 *) s4;
+
+  /* 2: loadpw */
+  var37.i = p1;
+  /* 6: loadpw */
+  var39.i = p2;
+  /* 11: loadpw */
+  var41.i = p3;
+  /* 16: loadpw */
+  var43.i = p4;
+  /* 19: loadpl */
+  var44.i = (int) 0x00000fff;   /* 4095 or 2.0232e-320f */
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadb */
+    var36 = ptr4[i];
+    /* 1: convubw */
+    var46.i = (orc_uint8) var36;
+    /* 3: mulswl */
+    var47.i = var46.i * var37.i;
+    /* 4: loadb */
+    var38 = ptr5[i];
+    /* 5: convubw */
+    var48.i = (orc_uint8) var38;
+    /* 7: mulswl */
+    var49.i = var48.i * var39.i;
+    /* 8: addl */
+    var50.i = ((orc_uint32) var47.i) + ((orc_uint32) var49.i);
+    /* 9: loadb */
+    var40 = ptr6[i];
+    /* 10: convubw */
+    var51.i = (orc_uint8) var40;
+    /* 12: mulswl */
+    var52.i = var51.i * var41.i;
+    /* 13: addl */
+    var53.i = ((orc_uint32) var50.i) + ((orc_uint32) var52.i);
+    /* 14: loadb */
+    var42 = ptr7[i];
+    /* 15: convubw */
+    var54.i = (orc_uint8) var42;
+    /* 17: mulswl */
+    var55.i = var54.i * var43.i;
+    /* 18: addl */
+    var56.i = ((orc_uint32) var53.i) + ((orc_uint32) var55.i);
+    /* 20: addl */
+    var57.i = ((orc_uint32) var56.i) + ((orc_uint32) var44.i);
+    /* 21: shrsl */
+    var58.i = var57.i >> 12;
+    /* 22: convsuslw */
+    var59.i = ORC_CLAMP_UW (var58.i);
+    /* 23: convsuswb */
+    var45 = ORC_CLAMP_UB (var59.i);
+    /* 24: storeb */
+    ptr0[i] = var45;
+  }
+
+}
+
+#else
+static void
+_backup_video_orc_resample_v_4tap_u8 (OrcExecutor * ORC_RESTRICT ex)
+{
+  int i;
+  int n = ex->n;
+  orc_int8 *ORC_RESTRICT ptr0;
+  const orc_int8 *ORC_RESTRICT ptr4;
+  const orc_int8 *ORC_RESTRICT ptr5;
+  const orc_int8 *ORC_RESTRICT ptr6;
+  const orc_int8 *ORC_RESTRICT ptr7;
+  orc_int8 var36;
+  orc_union16 var37;
+  orc_int8 var38;
+  orc_union16 var39;
+  orc_int8 var40;
+  orc_union16 var41;
+  orc_int8 var42;
+  orc_union16 var43;
+#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
+  volatile orc_union32 var44;
+#else
+  orc_union32 var44;
+#endif
+  orc_int8 var45;
+  orc_union16 var46;
+  orc_union32 var47;
+  orc_union16 var48;
+  orc_union32 var49;
+  orc_union32 var50;
+  orc_union16 var51;
+  orc_union32 var52;
+  orc_union32 var53;
+  orc_union16 var54;
+  orc_union32 var55;
+  orc_union32 var56;
+  orc_union32 var57;
+  orc_union32 var58;
+  orc_union16 var59;
+
+  ptr0 = (orc_int8 *) ex->arrays[0];
+  ptr4 = (orc_int8 *) ex->arrays[4];
+  ptr5 = (orc_int8 *) ex->arrays[5];
+  ptr6 = (orc_int8 *) ex->arrays[6];
+  ptr7 = (orc_int8 *) ex->arrays[7];
+
+  /* 2: loadpw */
+  var37.i = ex->params[24];
+  /* 6: loadpw */
+  var39.i = ex->params[25];
+  /* 11: loadpw */
+  var41.i = ex->params[26];
+  /* 16: loadpw */
+  var43.i = ex->params[27];
+  /* 19: loadpl */
+  var44.i = (int) 0x00000fff;   /* 4095 or 2.0232e-320f */
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadb */
+    var36 = ptr4[i];
+    /* 1: convubw */
+    var46.i = (orc_uint8) var36;
+    /* 3: mulswl */
+    var47.i = var46.i * var37.i;
+    /* 4: loadb */
+    var38 = ptr5[i];
+    /* 5: convubw */
+    var48.i = (orc_uint8) var38;
+    /* 7: mulswl */
+    var49.i = var48.i * var39.i;
+    /* 8: addl */
+    var50.i = ((orc_uint32) var47.i) + ((orc_uint32) var49.i);
+    /* 9: loadb */
+    var40 = ptr6[i];
+    /* 10: convubw */
+    var51.i = (orc_uint8) var40;
+    /* 12: mulswl */
+    var52.i = var51.i * var41.i;
+    /* 13: addl */
+    var53.i = ((orc_uint32) var50.i) + ((orc_uint32) var52.i);
+    /* 14: loadb */
+    var42 = ptr7[i];
+    /* 15: convubw */
+    var54.i = (orc_uint8) var42;
+    /* 17: mulswl */
+    var55.i = var54.i * var43.i;
+    /* 18: addl */
+    var56.i = ((orc_uint32) var53.i) + ((orc_uint32) var55.i);
+    /* 20: addl */
+    var57.i = ((orc_uint32) var56.i) + ((orc_uint32) var44.i);
+    /* 21: shrsl */
+    var58.i = var57.i >> 12;
+    /* 22: convsuslw */
+    var59.i = ORC_CLAMP_UW (var58.i);
+    /* 23: convsuswb */
+    var45 = ORC_CLAMP_UB (var59.i);
+    /* 24: storeb */
+    ptr0[i] = var45;
+  }
+
+}
+
+void
+video_orc_resample_v_4tap_u8 (guint8 * ORC_RESTRICT d1,
+    const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2,
+    const guint8 * ORC_RESTRICT s3, const guint8 * ORC_RESTRICT s4, int p1,
+    int p2, int p3, int p4, int n)
+{
+  OrcExecutor _ex, *ex = &_ex;
+  static volatile int p_inited = 0;
+  static OrcCode *c = 0;
+  void (*func) (OrcExecutor *);
+
+  if (!p_inited) {
+    orc_once_mutex_lock ();
+    if (!p_inited) {
+      OrcProgram *p;
+
+#if 1
+      static const orc_uint8 bc[] = {
+        1, 9, 28, 118, 105, 100, 101, 111, 95, 111, 114, 99, 95, 114, 101, 115,
+        97, 109, 112, 108, 101, 95, 118, 95, 52, 116, 97, 112, 95, 117, 56, 11,
+        1, 1, 12, 1, 1, 12, 1, 1, 12, 1, 1, 12, 1, 1, 14, 4,
+        255, 15, 0, 0, 14, 4, 12, 0, 0, 0, 16, 2, 16, 2, 16, 2,
+        16, 2, 20, 2, 20, 2, 20, 4, 20, 4, 150, 32, 4, 176, 34, 32,
+        24, 150, 33, 5, 176, 35, 33, 25, 103, 34, 34, 35, 150, 33, 6, 176,
+        35, 33, 26, 103, 34, 34, 35, 150, 33, 7, 176, 35, 33, 27, 103, 34,
+        34, 35, 103, 34, 34, 16, 125, 34, 34, 17, 166, 32, 34, 160, 0, 32,
+        2, 0,
+      };
+      p = orc_program_new_from_static_bytecode (bc);
+      orc_program_set_backup_function (p, _backup_video_orc_resample_v_4tap_u8);
+#else
+      p = orc_program_new ();
+      orc_program_set_name (p, "video_orc_resample_v_4tap_u8");
+      orc_program_set_backup_function (p, _backup_video_orc_resample_v_4tap_u8);
+      orc_program_add_destination (p, 1, "d1");
+      orc_program_add_source (p, 1, "s1");
+      orc_program_add_source (p, 1, "s2");
+      orc_program_add_source (p, 1, "s3");
+      orc_program_add_source (p, 1, "s4");
+      orc_program_add_constant (p, 4, 0x00000fff, "c1");
+      orc_program_add_constant (p, 4, 0x0000000c, "c2");
+      orc_program_add_parameter (p, 2, "p1");
+      orc_program_add_parameter (p, 2, "p2");
+      orc_program_add_parameter (p, 2, "p3");
+      orc_program_add_parameter (p, 2, "p4");
+      orc_program_add_temporary (p, 2, "t1");
+      orc_program_add_temporary (p, 2, "t2");
+      orc_program_add_temporary (p, 4, "t3");
+      orc_program_add_temporary (p, 4, "t4");
+
+      orc_program_append_2 (p, "convubw", 0, ORC_VAR_T1, ORC_VAR_S1, ORC_VAR_D1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "mulswl", 0, ORC_VAR_T3, ORC_VAR_T1, ORC_VAR_P1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "convubw", 0, ORC_VAR_T2, ORC_VAR_S2, ORC_VAR_D1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "mulswl", 0, ORC_VAR_T4, ORC_VAR_T2, ORC_VAR_P2,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "addl", 0, ORC_VAR_T3, ORC_VAR_T3, ORC_VAR_T4,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "convubw", 0, ORC_VAR_T2, ORC_VAR_S3, ORC_VAR_D1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "mulswl", 0, ORC_VAR_T4, ORC_VAR_T2, ORC_VAR_P3,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "addl", 0, ORC_VAR_T3, ORC_VAR_T3, ORC_VAR_T4,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "convubw", 0, ORC_VAR_T2, ORC_VAR_S4, ORC_VAR_D1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "mulswl", 0, ORC_VAR_T4, ORC_VAR_T2, ORC_VAR_P4,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "addl", 0, ORC_VAR_T3, ORC_VAR_T3, ORC_VAR_T4,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "addl", 0, ORC_VAR_T3, ORC_VAR_T3, ORC_VAR_C1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "shrsl", 0, ORC_VAR_T3, ORC_VAR_T3, ORC_VAR_C2,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "convsuslw", 0, ORC_VAR_T1, ORC_VAR_T3,
+          ORC_VAR_D1, ORC_VAR_D1);
+      orc_program_append_2 (p, "convsuswb", 0, ORC_VAR_D1, ORC_VAR_T1,
+          ORC_VAR_D1, ORC_VAR_D1);
+#endif
+
+      orc_program_compile (p);
+      c = orc_program_take_code (p);
+      orc_program_free (p);
+    }
+    p_inited = TRUE;
+    orc_once_mutex_unlock ();
+  }
+  ex->arrays[ORC_VAR_A2] = c;
+  ex->program = 0;
+
+  ex->n = n;
+  ex->arrays[ORC_VAR_D1] = d1;
+  ex->arrays[ORC_VAR_S1] = (void *) s1;
+  ex->arrays[ORC_VAR_S2] = (void *) s2;
+  ex->arrays[ORC_VAR_S3] = (void *) s3;
+  ex->arrays[ORC_VAR_S4] = (void *) s4;
+  ex->params[ORC_VAR_P1] = p1;
+  ex->params[ORC_VAR_P2] = p2;
+  ex->params[ORC_VAR_P3] = p3;
+  ex->params[ORC_VAR_P4] = p4;
+
+  func = c->exec;
+  func (ex);
+}
+#endif
+
+
+/* video_orc_resample_h_multaps_u8 */
+#ifdef DISABLE_ORC
+void
+video_orc_resample_h_multaps_u8 (gint32 * ORC_RESTRICT d1,
+    const guint8 * ORC_RESTRICT s1, const gint16 * ORC_RESTRICT s2, int n)
+{
+  int i;
+  orc_union32 *ORC_RESTRICT ptr0;
+  const orc_int8 *ORC_RESTRICT ptr4;
+  const orc_union16 *ORC_RESTRICT ptr5;
+  orc_int8 var33;
+  orc_union16 var34;
+  orc_union32 var35;
+  orc_union16 var36;
+
+  ptr0 = (orc_union32 *) d1;
+  ptr4 = (orc_int8 *) s1;
+  ptr5 = (orc_union16 *) s2;
+
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadb */
+    var33 = ptr4[i];
+    /* 1: convubw */
+    var36.i = (orc_uint8) var33;
+    /* 2: loadw */
+    var34 = ptr5[i];
+    /* 3: mulswl */
+    var35.i = var36.i * var34.i;
+    /* 4: storel */
+    ptr0[i] = var35;
+  }
+
+}
+
+#else
+static void
+_backup_video_orc_resample_h_multaps_u8 (OrcExecutor * ORC_RESTRICT ex)
+{
+  int i;
+  int n = ex->n;
+  orc_union32 *ORC_RESTRICT ptr0;
+  const orc_int8 *ORC_RESTRICT ptr4;
+  const orc_union16 *ORC_RESTRICT ptr5;
+  orc_int8 var33;
+  orc_union16 var34;
+  orc_union32 var35;
+  orc_union16 var36;
+
+  ptr0 = (orc_union32 *) ex->arrays[0];
+  ptr4 = (orc_int8 *) ex->arrays[4];
+  ptr5 = (orc_union16 *) ex->arrays[5];
+
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadb */
+    var33 = ptr4[i];
+    /* 1: convubw */
+    var36.i = (orc_uint8) var33;
+    /* 2: loadw */
+    var34 = ptr5[i];
+    /* 3: mulswl */
+    var35.i = var36.i * var34.i;
+    /* 4: storel */
+    ptr0[i] = var35;
+  }
+
+}
+
+void
+video_orc_resample_h_multaps_u8 (gint32 * ORC_RESTRICT d1,
+    const guint8 * ORC_RESTRICT s1, const gint16 * ORC_RESTRICT s2, int n)
+{
+  OrcExecutor _ex, *ex = &_ex;
+  static volatile int p_inited = 0;
+  static OrcCode *c = 0;
+  void (*func) (OrcExecutor *);
+
+  if (!p_inited) {
+    orc_once_mutex_lock ();
+    if (!p_inited) {
+      OrcProgram *p;
+
+#if 1
+      static const orc_uint8 bc[] = {
+        1, 9, 31, 118, 105, 100, 101, 111, 95, 111, 114, 99, 95, 114, 101, 115,
+        97, 109, 112, 108, 101, 95, 104, 95, 109, 117, 108, 116, 97, 112, 115,
+        95,
+        117, 56, 11, 4, 4, 12, 1, 1, 12, 2, 2, 20, 2, 150, 32, 4,
+        176, 0, 32, 5, 2, 0,
+      };
+      p = orc_program_new_from_static_bytecode (bc);
+      orc_program_set_backup_function (p,
+          _backup_video_orc_resample_h_multaps_u8);
+#else
+      p = orc_program_new ();
+      orc_program_set_name (p, "video_orc_resample_h_multaps_u8");
+      orc_program_set_backup_function (p,
+          _backup_video_orc_resample_h_multaps_u8);
+      orc_program_add_destination (p, 4, "d1");
+      orc_program_add_source (p, 1, "s1");
+      orc_program_add_source (p, 2, "s2");
+      orc_program_add_temporary (p, 2, "t1");
+
+      orc_program_append_2 (p, "convubw", 0, ORC_VAR_T1, ORC_VAR_S1, ORC_VAR_D1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "mulswl", 0, ORC_VAR_D1, ORC_VAR_T1, ORC_VAR_S2,
+          ORC_VAR_D1);
+#endif
+
+      orc_program_compile (p);
+      c = orc_program_take_code (p);
+      orc_program_free (p);
+    }
+    p_inited = TRUE;
+    orc_once_mutex_unlock ();
+  }
+  ex->arrays[ORC_VAR_A2] = c;
+  ex->program = 0;
+
+  ex->n = n;
+  ex->arrays[ORC_VAR_D1] = d1;
+  ex->arrays[ORC_VAR_S1] = (void *) s1;
+  ex->arrays[ORC_VAR_S2] = (void *) s2;
+
+  func = c->exec;
+  func (ex);
+}
+#endif
+
+
+/* video_orc_resample_h_muladdtaps_u8 */
+#ifdef DISABLE_ORC
+void
+video_orc_resample_h_muladdtaps_u8 (gint32 * ORC_RESTRICT d1, int d1_stride,
+    const guint8 * ORC_RESTRICT s1, int s1_stride,
+    const gint16 * ORC_RESTRICT s2, int s2_stride, int n, int m)
+{
+  int i;
+  int j;
+  orc_union32 *ORC_RESTRICT ptr0;
+  const orc_int8 *ORC_RESTRICT ptr4;
+  const orc_union16 *ORC_RESTRICT ptr5;
+  orc_int8 var34;
+  orc_union16 var35;
+  orc_union32 var36;
+  orc_union32 var37;
+  orc_union16 var38;
+  orc_union32 var39;
+
+  for (j = 0; j < m; j++) {
+    ptr0 = ORC_PTR_OFFSET (d1, d1_stride * j);
+    ptr4 = ORC_PTR_OFFSET (s1, s1_stride * j);
+    ptr5 = ORC_PTR_OFFSET (s2, s2_stride * j);
+
+
+    for (i = 0; i < n; i++) {
+      /* 0: loadb */
+      var34 = ptr4[i];
+      /* 1: convubw */
+      var38.i = (orc_uint8) var34;
+      /* 2: loadw */
+      var35 = ptr5[i];
+      /* 3: mulswl */
+      var39.i = var38.i * var35.i;
+      /* 4: loadl */
+      var36 = ptr0[i];
+      /* 5: addl */
+      var37.i = ((orc_uint32) var36.i) + ((orc_uint32) var39.i);
+      /* 6: storel */
+      ptr0[i] = var37;
+    }
+  }
+
+}
+
+#else
+static void
+_backup_video_orc_resample_h_muladdtaps_u8 (OrcExecutor * ORC_RESTRICT ex)
+{
+  int i;
+  int j;
+  int n = ex->n;
+  int m = ex->params[ORC_VAR_A1];
+  orc_union32 *ORC_RESTRICT ptr0;
+  const orc_int8 *ORC_RESTRICT ptr4;
+  const orc_union16 *ORC_RESTRICT ptr5;
+  orc_int8 var34;
+  orc_union16 var35;
+  orc_union32 var36;
+  orc_union32 var37;
+  orc_union16 var38;
+  orc_union32 var39;
+
+  for (j = 0; j < m; j++) {
+    ptr0 = ORC_PTR_OFFSET (ex->arrays[0], ex->params[0] * j);
+    ptr4 = ORC_PTR_OFFSET (ex->arrays[4], ex->params[4] * j);
+    ptr5 = ORC_PTR_OFFSET (ex->arrays[5], ex->params[5] * j);
+
+
+    for (i = 0; i < n; i++) {
+      /* 0: loadb */
+      var34 = ptr4[i];
+      /* 1: convubw */
+      var38.i = (orc_uint8) var34;
+      /* 2: loadw */
+      var35 = ptr5[i];
+      /* 3: mulswl */
+      var39.i = var38.i * var35.i;
+      /* 4: loadl */
+      var36 = ptr0[i];
+      /* 5: addl */
+      var37.i = ((orc_uint32) var36.i) + ((orc_uint32) var39.i);
+      /* 6: storel */
+      ptr0[i] = var37;
+    }
+  }
+
+}
+
+void
+video_orc_resample_h_muladdtaps_u8 (gint32 * ORC_RESTRICT d1, int d1_stride,
+    const guint8 * ORC_RESTRICT s1, int s1_stride,
+    const gint16 * ORC_RESTRICT s2, int s2_stride, int n, int m)
+{
+  OrcExecutor _ex, *ex = &_ex;
+  static volatile int p_inited = 0;
+  static OrcCode *c = 0;
+  void (*func) (OrcExecutor *);
+
+  if (!p_inited) {
+    orc_once_mutex_lock ();
+    if (!p_inited) {
+      OrcProgram *p;
+
+#if 1
+      static const orc_uint8 bc[] = {
+        1, 7, 9, 34, 118, 105, 100, 101, 111, 95, 111, 114, 99, 95, 114, 101,
+        115, 97, 109, 112, 108, 101, 95, 104, 95, 109, 117, 108, 97, 100, 100,
+        116,
+        97, 112, 115, 95, 117, 56, 11, 4, 4, 12, 1, 1, 12, 2, 2, 20,
+        2, 20, 4, 150, 32, 4, 176, 33, 32, 5, 103, 0, 0, 33, 2, 0,
+
+      };
+      p = orc_program_new_from_static_bytecode (bc);
+      orc_program_set_backup_function (p,
+          _backup_video_orc_resample_h_muladdtaps_u8);
+#else
+      p = orc_program_new ();
+      orc_program_set_2d (p);
+      orc_program_set_name (p, "video_orc_resample_h_muladdtaps_u8");
+      orc_program_set_backup_function (p,
+          _backup_video_orc_resample_h_muladdtaps_u8);
+      orc_program_add_destination (p, 4, "d1");
+      orc_program_add_source (p, 1, "s1");
+      orc_program_add_source (p, 2, "s2");
+      orc_program_add_temporary (p, 2, "t1");
+      orc_program_add_temporary (p, 4, "t2");
+
+      orc_program_append_2 (p, "convubw", 0, ORC_VAR_T1, ORC_VAR_S1, ORC_VAR_D1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "mulswl", 0, ORC_VAR_T2, ORC_VAR_T1, ORC_VAR_S2,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "addl", 0, ORC_VAR_D1, ORC_VAR_D1, ORC_VAR_T2,
+          ORC_VAR_D1);
+#endif
+
+      orc_program_compile (p);
+      c = orc_program_take_code (p);
+      orc_program_free (p);
+    }
+    p_inited = TRUE;
+    orc_once_mutex_unlock ();
+  }
+  ex->arrays[ORC_VAR_A2] = c;
+  ex->program = 0;
+
+  ex->n = n;
+  ORC_EXECUTOR_M (ex) = m;
+  ex->arrays[ORC_VAR_D1] = d1;
+  ex->params[ORC_VAR_D1] = d1_stride;
+  ex->arrays[ORC_VAR_S1] = (void *) s1;
+  ex->params[ORC_VAR_S1] = s1_stride;
+  ex->arrays[ORC_VAR_S2] = (void *) s2;
+  ex->params[ORC_VAR_S2] = s2_stride;
+
+  func = c->exec;
+  func (ex);
+}
+#endif
+
+
+/* video_orc_resample_scaletaps_u8 */
+#ifdef DISABLE_ORC
+void
+video_orc_resample_scaletaps_u8 (guint8 * ORC_RESTRICT d1,
+    const gint32 * ORC_RESTRICT s1, int n)
+{
+  int i;
+  orc_int8 *ORC_RESTRICT ptr0;
+  const orc_union32 *ORC_RESTRICT ptr4;
+  orc_union32 var34;
+#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
+  volatile orc_union32 var35;
+#else
+  orc_union32 var35;
+#endif
+  orc_int8 var36;
+  orc_union32 var37;
+  orc_union32 var38;
+  orc_union16 var39;
+
+  ptr0 = (orc_int8 *) d1;
+  ptr4 = (orc_union32 *) s1;
+
+  /* 1: loadpl */
+  var35.i = (int) 0x00000fff;   /* 4095 or 2.0232e-320f */
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadl */
+    var34 = ptr4[i];
+    /* 2: addl */
+    var37.i = ((orc_uint32) var34.i) + ((orc_uint32) var35.i);
+    /* 3: shrsl */
+    var38.i = var37.i >> 12;
+    /* 4: convsuslw */
+    var39.i = ORC_CLAMP_UW (var38.i);
+    /* 5: convsuswb */
+    var36 = ORC_CLAMP_UB (var39.i);
+    /* 6: storeb */
+    ptr0[i] = var36;
+  }
+
+}
+
+#else
+static void
+_backup_video_orc_resample_scaletaps_u8 (OrcExecutor * ORC_RESTRICT ex)
+{
+  int i;
+  int n = ex->n;
+  orc_int8 *ORC_RESTRICT ptr0;
+  const orc_union32 *ORC_RESTRICT ptr4;
+  orc_union32 var34;
+#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
+  volatile orc_union32 var35;
+#else
+  orc_union32 var35;
+#endif
+  orc_int8 var36;
+  orc_union32 var37;
+  orc_union32 var38;
+  orc_union16 var39;
+
+  ptr0 = (orc_int8 *) ex->arrays[0];
+  ptr4 = (orc_union32 *) ex->arrays[4];
+
+  /* 1: loadpl */
+  var35.i = (int) 0x00000fff;   /* 4095 or 2.0232e-320f */
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadl */
+    var34 = ptr4[i];
+    /* 2: addl */
+    var37.i = ((orc_uint32) var34.i) + ((orc_uint32) var35.i);
+    /* 3: shrsl */
+    var38.i = var37.i >> 12;
+    /* 4: convsuslw */
+    var39.i = ORC_CLAMP_UW (var38.i);
+    /* 5: convsuswb */
+    var36 = ORC_CLAMP_UB (var39.i);
+    /* 6: storeb */
+    ptr0[i] = var36;
+  }
+
+}
+
+void
+video_orc_resample_scaletaps_u8 (guint8 * ORC_RESTRICT d1,
+    const gint32 * ORC_RESTRICT s1, int n)
+{
+  OrcExecutor _ex, *ex = &_ex;
+  static volatile int p_inited = 0;
+  static OrcCode *c = 0;
+  void (*func) (OrcExecutor *);
+
+  if (!p_inited) {
+    orc_once_mutex_lock ();
+    if (!p_inited) {
+      OrcProgram *p;
+
+#if 1
+      static const orc_uint8 bc[] = {
+        1, 9, 31, 118, 105, 100, 101, 111, 95, 111, 114, 99, 95, 114, 101, 115,
+        97, 109, 112, 108, 101, 95, 115, 99, 97, 108, 101, 116, 97, 112, 115,
+        95,
+        117, 56, 11, 1, 1, 12, 4, 4, 14, 4, 255, 15, 0, 0, 14, 4,
+        12, 0, 0, 0, 20, 2, 20, 4, 103, 33, 4, 16, 125, 33, 33, 17,
+        166, 32, 33, 160, 0, 32, 2, 0,
+      };
+      p = orc_program_new_from_static_bytecode (bc);
+      orc_program_set_backup_function (p,
+          _backup_video_orc_resample_scaletaps_u8);
+#else
+      p = orc_program_new ();
+      orc_program_set_name (p, "video_orc_resample_scaletaps_u8");
+      orc_program_set_backup_function (p,
+          _backup_video_orc_resample_scaletaps_u8);
+      orc_program_add_destination (p, 1, "d1");
+      orc_program_add_source (p, 4, "s1");
+      orc_program_add_constant (p, 4, 0x00000fff, "c1");
+      orc_program_add_constant (p, 4, 0x0000000c, "c2");
+      orc_program_add_temporary (p, 2, "t1");
+      orc_program_add_temporary (p, 4, "t2");
+
+      orc_program_append_2 (p, "addl", 0, ORC_VAR_T2, ORC_VAR_S1, ORC_VAR_C1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "shrsl", 0, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_C2,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "convsuslw", 0, ORC_VAR_T1, ORC_VAR_T2,
+          ORC_VAR_D1, ORC_VAR_D1);
+      orc_program_append_2 (p, "convsuswb", 0, ORC_VAR_D1, ORC_VAR_T1,
+          ORC_VAR_D1, ORC_VAR_D1);
+#endif
+
+      orc_program_compile (p);
+      c = orc_program_take_code (p);
+      orc_program_free (p);
+    }
+    p_inited = TRUE;
+    orc_once_mutex_unlock ();
+  }
+  ex->arrays[ORC_VAR_A2] = c;
+  ex->program = 0;
+
+  ex->n = n;
+  ex->arrays[ORC_VAR_D1] = d1;
+  ex->arrays[ORC_VAR_S1] = (void *) s1;
+
+  func = c->exec;
+  func (ex);
+}
+#endif
+
+
+/* video_orc_resample_h_multaps_u8_lq */
+#ifdef DISABLE_ORC
+void
+video_orc_resample_h_multaps_u8_lq (gint16 * ORC_RESTRICT d1,
+    const guint8 * ORC_RESTRICT s1, const gint16 * ORC_RESTRICT s2, int n)
+{
+  int i;
+  orc_union16 *ORC_RESTRICT ptr0;
+  const orc_int8 *ORC_RESTRICT ptr4;
+  const orc_union16 *ORC_RESTRICT ptr5;
+  orc_int8 var33;
+  orc_union16 var34;
+  orc_union16 var35;
+  orc_union16 var36;
+
+  ptr0 = (orc_union16 *) d1;
+  ptr4 = (orc_int8 *) s1;
+  ptr5 = (orc_union16 *) s2;
+
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadb */
+    var33 = ptr4[i];
+    /* 1: convubw */
+    var36.i = (orc_uint8) var33;
+    /* 2: loadw */
+    var34 = ptr5[i];
+    /* 3: mullw */
+    var35.i = (var36.i * var34.i) & 0xffff;
+    /* 4: storew */
+    ptr0[i] = var35;
+  }
+
+}
+
+#else
+static void
+_backup_video_orc_resample_h_multaps_u8_lq (OrcExecutor * ORC_RESTRICT ex)
+{
+  int i;
+  int n = ex->n;
+  orc_union16 *ORC_RESTRICT ptr0;
+  const orc_int8 *ORC_RESTRICT ptr4;
+  const orc_union16 *ORC_RESTRICT ptr5;
+  orc_int8 var33;
+  orc_union16 var34;
+  orc_union16 var35;
+  orc_union16 var36;
+
+  ptr0 = (orc_union16 *) ex->arrays[0];
+  ptr4 = (orc_int8 *) ex->arrays[4];
+  ptr5 = (orc_union16 *) ex->arrays[5];
+
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadb */
+    var33 = ptr4[i];
+    /* 1: convubw */
+    var36.i = (orc_uint8) var33;
+    /* 2: loadw */
+    var34 = ptr5[i];
+    /* 3: mullw */
+    var35.i = (var36.i * var34.i) & 0xffff;
+    /* 4: storew */
+    ptr0[i] = var35;
+  }
+
+}
+
+void
+video_orc_resample_h_multaps_u8_lq (gint16 * ORC_RESTRICT d1,
+    const guint8 * ORC_RESTRICT s1, const gint16 * ORC_RESTRICT s2, int n)
+{
+  OrcExecutor _ex, *ex = &_ex;
+  static volatile int p_inited = 0;
+  static OrcCode *c = 0;
+  void (*func) (OrcExecutor *);
+
+  if (!p_inited) {
+    orc_once_mutex_lock ();
+    if (!p_inited) {
+      OrcProgram *p;
+
+#if 1
+      static const orc_uint8 bc[] = {
+        1, 9, 34, 118, 105, 100, 101, 111, 95, 111, 114, 99, 95, 114, 101, 115,
+        97, 109, 112, 108, 101, 95, 104, 95, 109, 117, 108, 116, 97, 112, 115,
+        95,
+        117, 56, 95, 108, 113, 11, 2, 2, 12, 1, 1, 12, 2, 2, 20, 2,
+        150, 32, 4, 89, 0, 32, 5, 2, 0,
+      };
+      p = orc_program_new_from_static_bytecode (bc);
+      orc_program_set_backup_function (p,
+          _backup_video_orc_resample_h_multaps_u8_lq);
+#else
+      p = orc_program_new ();
+      orc_program_set_name (p, "video_orc_resample_h_multaps_u8_lq");
+      orc_program_set_backup_function (p,
+          _backup_video_orc_resample_h_multaps_u8_lq);
+      orc_program_add_destination (p, 2, "d1");
+      orc_program_add_source (p, 1, "s1");
+      orc_program_add_source (p, 2, "s2");
+      orc_program_add_temporary (p, 2, "t1");
+
+      orc_program_append_2 (p, "convubw", 0, ORC_VAR_T1, ORC_VAR_S1, ORC_VAR_D1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "mullw", 0, ORC_VAR_D1, ORC_VAR_T1, ORC_VAR_S2,
+          ORC_VAR_D1);
+#endif
+
+      orc_program_compile (p);
+      c = orc_program_take_code (p);
+      orc_program_free (p);
+    }
+    p_inited = TRUE;
+    orc_once_mutex_unlock ();
+  }
+  ex->arrays[ORC_VAR_A2] = c;
+  ex->program = 0;
+
+  ex->n = n;
+  ex->arrays[ORC_VAR_D1] = d1;
+  ex->arrays[ORC_VAR_S1] = (void *) s1;
+  ex->arrays[ORC_VAR_S2] = (void *) s2;
+
+  func = c->exec;
+  func (ex);
+}
+#endif
+
+
+/* video_orc_resample_h_muladdtaps_u8_lq */
+#ifdef DISABLE_ORC
+void
+video_orc_resample_h_muladdtaps_u8_lq (gint16 * ORC_RESTRICT d1, int d1_stride,
+    const guint8 * ORC_RESTRICT s1, int s1_stride,
+    const gint16 * ORC_RESTRICT s2, int s2_stride, int n, int m)
+{
+  int i;
+  int j;
+  orc_union16 *ORC_RESTRICT ptr0;
+  const orc_int8 *ORC_RESTRICT ptr4;
+  const orc_union16 *ORC_RESTRICT ptr5;
+  orc_int8 var33;
+  orc_union16 var34;
+  orc_union16 var35;
+  orc_union16 var36;
+  orc_union16 var37;
+  orc_union16 var38;
+
+  for (j = 0; j < m; j++) {
+    ptr0 = ORC_PTR_OFFSET (d1, d1_stride * j);
+    ptr4 = ORC_PTR_OFFSET (s1, s1_stride * j);
+    ptr5 = ORC_PTR_OFFSET (s2, s2_stride * j);
+
+
+    for (i = 0; i < n; i++) {
+      /* 0: loadb */
+      var33 = ptr4[i];
+      /* 1: convubw */
+      var37.i = (orc_uint8) var33;
+      /* 2: loadw */
+      var34 = ptr5[i];
+      /* 3: mullw */
+      var38.i = (var37.i * var34.i) & 0xffff;
+      /* 4: loadw */
+      var35 = ptr0[i];
+      /* 5: addw */
+      var36.i = var35.i + var38.i;
+      /* 6: storew */
+      ptr0[i] = var36;
+    }
+  }
+
+}
+
+#else
+static void
+_backup_video_orc_resample_h_muladdtaps_u8_lq (OrcExecutor * ORC_RESTRICT ex)
+{
+  int i;
+  int j;
+  int n = ex->n;
+  int m = ex->params[ORC_VAR_A1];
+  orc_union16 *ORC_RESTRICT ptr0;
+  const orc_int8 *ORC_RESTRICT ptr4;
+  const orc_union16 *ORC_RESTRICT ptr5;
+  orc_int8 var33;
+  orc_union16 var34;
+  orc_union16 var35;
+  orc_union16 var36;
+  orc_union16 var37;
+  orc_union16 var38;
+
+  for (j = 0; j < m; j++) {
+    ptr0 = ORC_PTR_OFFSET (ex->arrays[0], ex->params[0] * j);
+    ptr4 = ORC_PTR_OFFSET (ex->arrays[4], ex->params[4] * j);
+    ptr5 = ORC_PTR_OFFSET (ex->arrays[5], ex->params[5] * j);
+
+
+    for (i = 0; i < n; i++) {
+      /* 0: loadb */
+      var33 = ptr4[i];
+      /* 1: convubw */
+      var37.i = (orc_uint8) var33;
+      /* 2: loadw */
+      var34 = ptr5[i];
+      /* 3: mullw */
+      var38.i = (var37.i * var34.i) & 0xffff;
+      /* 4: loadw */
+      var35 = ptr0[i];
+      /* 5: addw */
+      var36.i = var35.i + var38.i;
+      /* 6: storew */
+      ptr0[i] = var36;
+    }
+  }
+
+}
+
+void
+video_orc_resample_h_muladdtaps_u8_lq (gint16 * ORC_RESTRICT d1, int d1_stride,
+    const guint8 * ORC_RESTRICT s1, int s1_stride,
+    const gint16 * ORC_RESTRICT s2, int s2_stride, int n, int m)
+{
+  OrcExecutor _ex, *ex = &_ex;
+  static volatile int p_inited = 0;
+  static OrcCode *c = 0;
+  void (*func) (OrcExecutor *);
+
+  if (!p_inited) {
+    orc_once_mutex_lock ();
+    if (!p_inited) {
+      OrcProgram *p;
+
+#if 1
+      static const orc_uint8 bc[] = {
+        1, 7, 9, 37, 118, 105, 100, 101, 111, 95, 111, 114, 99, 95, 114, 101,
+        115, 97, 109, 112, 108, 101, 95, 104, 95, 109, 117, 108, 97, 100, 100,
+        116,
+        97, 112, 115, 95, 117, 56, 95, 108, 113, 11, 2, 2, 12, 1, 1, 12,
+        2, 2, 20, 2, 150, 32, 4, 89, 32, 32, 5, 70, 0, 0, 32, 2,
+        0,
+      };
+      p = orc_program_new_from_static_bytecode (bc);
+      orc_program_set_backup_function (p,
+          _backup_video_orc_resample_h_muladdtaps_u8_lq);
+#else
+      p = orc_program_new ();
+      orc_program_set_2d (p);
+      orc_program_set_name (p, "video_orc_resample_h_muladdtaps_u8_lq");
+      orc_program_set_backup_function (p,
+          _backup_video_orc_resample_h_muladdtaps_u8_lq);
+      orc_program_add_destination (p, 2, "d1");
+      orc_program_add_source (p, 1, "s1");
+      orc_program_add_source (p, 2, "s2");
+      orc_program_add_temporary (p, 2, "t1");
+
+      orc_program_append_2 (p, "convubw", 0, ORC_VAR_T1, ORC_VAR_S1, ORC_VAR_D1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "mullw", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_S2,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "addw", 0, ORC_VAR_D1, ORC_VAR_D1, ORC_VAR_T1,
+          ORC_VAR_D1);
+#endif
+
+      orc_program_compile (p);
+      c = orc_program_take_code (p);
+      orc_program_free (p);
+    }
+    p_inited = TRUE;
+    orc_once_mutex_unlock ();
+  }
+  ex->arrays[ORC_VAR_A2] = c;
+  ex->program = 0;
+
+  ex->n = n;
+  ORC_EXECUTOR_M (ex) = m;
+  ex->arrays[ORC_VAR_D1] = d1;
+  ex->params[ORC_VAR_D1] = d1_stride;
+  ex->arrays[ORC_VAR_S1] = (void *) s1;
+  ex->params[ORC_VAR_S1] = s1_stride;
+  ex->arrays[ORC_VAR_S2] = (void *) s2;
+  ex->params[ORC_VAR_S2] = s2_stride;
+
+  func = c->exec;
+  func (ex);
+}
+#endif
+
+
+/* video_orc_resample_h_multaps3_u8_lq */
+#ifdef DISABLE_ORC
+void
+video_orc_resample_h_multaps3_u8_lq (gint16 * ORC_RESTRICT d1,
+    const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2,
+    const guint8 * ORC_RESTRICT s3, const gint16 * ORC_RESTRICT s4,
+    const gint16 * ORC_RESTRICT s5, const gint16 * ORC_RESTRICT s6, int n)
+{
+  int i;
+  orc_union16 *ORC_RESTRICT ptr0;
+  const orc_int8 *ORC_RESTRICT ptr4;
+  const orc_int8 *ORC_RESTRICT ptr5;
+  const orc_int8 *ORC_RESTRICT ptr6;
+  const orc_union16 *ORC_RESTRICT ptr7;
+  const orc_union16 *ORC_RESTRICT ptr8;
+  const orc_union16 *ORC_RESTRICT ptr9;
+  orc_int8 var34;
+  orc_union16 var35;
+  orc_int8 var36;
+  orc_union16 var37;
+  orc_int8 var38;
+  orc_union16 var39;
+  orc_union16 var40;
+  orc_union16 var41;
+  orc_union16 var42;
+  orc_union16 var43;
+  orc_union16 var44;
+  orc_union16 var45;
+  orc_union16 var46;
+  orc_union16 var47;
+
+  ptr0 = (orc_union16 *) d1;
+  ptr4 = (orc_int8 *) s1;
+  ptr5 = (orc_int8 *) s2;
+  ptr6 = (orc_int8 *) s3;
+  ptr7 = (orc_union16 *) s4;
+  ptr8 = (orc_union16 *) s5;
+  ptr9 = (orc_union16 *) s6;
+
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadb */
+    var34 = ptr4[i];
+    /* 1: convubw */
+    var41.i = (orc_uint8) var34;
+    /* 2: loadw */
+    var35 = ptr7[i];
+    /* 3: mullw */
+    var42.i = (var41.i * var35.i) & 0xffff;
+    /* 4: loadb */
+    var36 = ptr5[i];
+    /* 5: convubw */
+    var43.i = (orc_uint8) var36;
+    /* 6: loadw */
+    var37 = ptr8[i];
+    /* 7: mullw */
+    var44.i = (var43.i * var37.i) & 0xffff;
+    /* 8: addw */
+    var45.i = var42.i + var44.i;
+    /* 9: loadb */
+    var38 = ptr6[i];
+    /* 10: convubw */
+    var46.i = (orc_uint8) var38;
+    /* 11: loadw */
+    var39 = ptr9[i];
+    /* 12: mullw */
+    var47.i = (var46.i * var39.i) & 0xffff;
+    /* 13: addw */
+    var40.i = var45.i + var47.i;
+    /* 14: storew */
+    ptr0[i] = var40;
+  }
+
+}
+
+#else
+static void
+_backup_video_orc_resample_h_multaps3_u8_lq (OrcExecutor * ORC_RESTRICT ex)
+{
+  int i;
+  int n = ex->n;
+  orc_union16 *ORC_RESTRICT ptr0;
+  const orc_int8 *ORC_RESTRICT ptr4;
+  const orc_int8 *ORC_RESTRICT ptr5;
+  const orc_int8 *ORC_RESTRICT ptr6;
+  const orc_union16 *ORC_RESTRICT ptr7;
+  const orc_union16 *ORC_RESTRICT ptr8;
+  const orc_union16 *ORC_RESTRICT ptr9;
+  orc_int8 var34;
+  orc_union16 var35;
+  orc_int8 var36;
+  orc_union16 var37;
+  orc_int8 var38;
+  orc_union16 var39;
+  orc_union16 var40;
+  orc_union16 var41;
+  orc_union16 var42;
+  orc_union16 var43;
+  orc_union16 var44;
+  orc_union16 var45;
+  orc_union16 var46;
+  orc_union16 var47;
+
+  ptr0 = (orc_union16 *) ex->arrays[0];
+  ptr4 = (orc_int8 *) ex->arrays[4];
+  ptr5 = (orc_int8 *) ex->arrays[5];
+  ptr6 = (orc_int8 *) ex->arrays[6];
+  ptr7 = (orc_union16 *) ex->arrays[7];
+  ptr8 = (orc_union16 *) ex->arrays[8];
+  ptr9 = (orc_union16 *) ex->arrays[9];
+
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadb */
+    var34 = ptr4[i];
+    /* 1: convubw */
+    var41.i = (orc_uint8) var34;
+    /* 2: loadw */
+    var35 = ptr7[i];
+    /* 3: mullw */
+    var42.i = (var41.i * var35.i) & 0xffff;
+    /* 4: loadb */
+    var36 = ptr5[i];
+    /* 5: convubw */
+    var43.i = (orc_uint8) var36;
+    /* 6: loadw */
+    var37 = ptr8[i];
+    /* 7: mullw */
+    var44.i = (var43.i * var37.i) & 0xffff;
+    /* 8: addw */
+    var45.i = var42.i + var44.i;
+    /* 9: loadb */
+    var38 = ptr6[i];
+    /* 10: convubw */
+    var46.i = (orc_uint8) var38;
+    /* 11: loadw */
+    var39 = ptr9[i];
+    /* 12: mullw */
+    var47.i = (var46.i * var39.i) & 0xffff;
+    /* 13: addw */
+    var40.i = var45.i + var47.i;
+    /* 14: storew */
+    ptr0[i] = var40;
+  }
+
+}
+
+void
+video_orc_resample_h_multaps3_u8_lq (gint16 * ORC_RESTRICT d1,
+    const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2,
+    const guint8 * ORC_RESTRICT s3, const gint16 * ORC_RESTRICT s4,
+    const gint16 * ORC_RESTRICT s5, const gint16 * ORC_RESTRICT s6, int n)
+{
+  OrcExecutor _ex, *ex = &_ex;
+  static volatile int p_inited = 0;
+  static OrcCode *c = 0;
+  void (*func) (OrcExecutor *);
+
+  if (!p_inited) {
+    orc_once_mutex_lock ();
+    if (!p_inited) {
+      OrcProgram *p;
+
+#if 1
+      static const orc_uint8 bc[] = {
+        1, 9, 35, 118, 105, 100, 101, 111, 95, 111, 114, 99, 95, 114, 101, 115,
+        97, 109, 112, 108, 101, 95, 104, 95, 109, 117, 108, 116, 97, 112, 115,
+        51,
+        95, 117, 56, 95, 108, 113, 11, 2, 2, 12, 1, 1, 12, 1, 1, 12,
+        1, 1, 12, 2, 2, 12, 2, 2, 12, 2, 2, 20, 2, 20, 2, 150,
+        32, 4, 89, 32, 32, 7, 150, 33, 5, 89, 33, 33, 8, 70, 32, 32,
+        33, 150, 33, 6, 89, 33, 33, 9, 70, 0, 32, 33, 2, 0,
+      };
+      p = orc_program_new_from_static_bytecode (bc);
+      orc_program_set_backup_function (p,
+          _backup_video_orc_resample_h_multaps3_u8_lq);
+#else
+      p = orc_program_new ();
+      orc_program_set_name (p, "video_orc_resample_h_multaps3_u8_lq");
+      orc_program_set_backup_function (p,
+          _backup_video_orc_resample_h_multaps3_u8_lq);
+      orc_program_add_destination (p, 2, "d1");
+      orc_program_add_source (p, 1, "s1");
+      orc_program_add_source (p, 1, "s2");
+      orc_program_add_source (p, 1, "s3");
+      orc_program_add_source (p, 2, "s4");
+      orc_program_add_source (p, 2, "s5");
+      orc_program_add_source (p, 2, "s6");
+      orc_program_add_temporary (p, 2, "t1");
+      orc_program_add_temporary (p, 2, "t2");
+
+      orc_program_append_2 (p, "convubw", 0, ORC_VAR_T1, ORC_VAR_S1, ORC_VAR_D1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "mullw", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_S4,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "convubw", 0, ORC_VAR_T2, ORC_VAR_S2, ORC_VAR_D1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "mullw", 0, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_S5,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "addw", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_T2,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "convubw", 0, ORC_VAR_T2, ORC_VAR_S3, ORC_VAR_D1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "mullw", 0, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_S6,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "addw", 0, ORC_VAR_D1, ORC_VAR_T1, ORC_VAR_T2,
+          ORC_VAR_D1);
+#endif
+
+      orc_program_compile (p);
+      c = orc_program_take_code (p);
+      orc_program_free (p);
+    }
+    p_inited = TRUE;
+    orc_once_mutex_unlock ();
+  }
+  ex->arrays[ORC_VAR_A2] = c;
+  ex->program = 0;
+
+  ex->n = n;
+  ex->arrays[ORC_VAR_D1] = d1;
+  ex->arrays[ORC_VAR_S1] = (void *) s1;
+  ex->arrays[ORC_VAR_S2] = (void *) s2;
+  ex->arrays[ORC_VAR_S3] = (void *) s3;
+  ex->arrays[ORC_VAR_S4] = (void *) s4;
+  ex->arrays[ORC_VAR_S5] = (void *) s5;
+  ex->arrays[ORC_VAR_S6] = (void *) s6;
+
+  func = c->exec;
+  func (ex);
+}
+#endif
+
+
+/* video_orc_resample_h_muladdtaps3_u8_lq */
+#ifdef DISABLE_ORC
+void
+video_orc_resample_h_muladdtaps3_u8_lq (gint16 * ORC_RESTRICT d1,
+    const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2,
+    const guint8 * ORC_RESTRICT s3, const gint16 * ORC_RESTRICT s4,
+    const gint16 * ORC_RESTRICT s5, const gint16 * ORC_RESTRICT s6, int n)
+{
+  int i;
+  orc_union16 *ORC_RESTRICT ptr0;
+  const orc_int8 *ORC_RESTRICT ptr4;
+  const orc_int8 *ORC_RESTRICT ptr5;
+  const orc_int8 *ORC_RESTRICT ptr6;
+  const orc_union16 *ORC_RESTRICT ptr7;
+  const orc_union16 *ORC_RESTRICT ptr8;
+  const orc_union16 *ORC_RESTRICT ptr9;
+  orc_int8 var34;
+  orc_union16 var35;
+  orc_int8 var36;
+  orc_union16 var37;
+  orc_int8 var38;
+  orc_union16 var39;
+  orc_union16 var40;
+  orc_union16 var41;
+  orc_union16 var42;
+  orc_union16 var43;
+  orc_union16 var44;
+  orc_union16 var45;
+  orc_union16 var46;
+  orc_union16 var47;
+  orc_union16 var48;
+  orc_union16 var49;
+
+  ptr0 = (orc_union16 *) d1;
+  ptr4 = (orc_int8 *) s1;
+  ptr5 = (orc_int8 *) s2;
+  ptr6 = (orc_int8 *) s3;
+  ptr7 = (orc_union16 *) s4;
+  ptr8 = (orc_union16 *) s5;
+  ptr9 = (orc_union16 *) s6;
+
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadb */
+    var34 = ptr4[i];
+    /* 1: convubw */
+    var42.i = (orc_uint8) var34;
+    /* 2: loadw */
+    var35 = ptr7[i];
+    /* 3: mullw */
+    var43.i = (var42.i * var35.i) & 0xffff;
+    /* 4: loadb */
+    var36 = ptr5[i];
+    /* 5: convubw */
+    var44.i = (orc_uint8) var36;
+    /* 6: loadw */
+    var37 = ptr8[i];
+    /* 7: mullw */
+    var45.i = (var44.i * var37.i) & 0xffff;
+    /* 8: addw */
+    var46.i = var43.i + var45.i;
+    /* 9: loadb */
+    var38 = ptr6[i];
+    /* 10: convubw */
+    var47.i = (orc_uint8) var38;
+    /* 11: loadw */
+    var39 = ptr9[i];
+    /* 12: mullw */
+    var48.i = (var47.i * var39.i) & 0xffff;
+    /* 13: addw */
+    var49.i = var46.i + var48.i;
+    /* 14: loadw */
+    var40 = ptr0[i];
+    /* 15: addw */
+    var41.i = var40.i + var49.i;
+    /* 16: storew */
+    ptr0[i] = var41;
+  }
+
+}
+
+#else
+static void
+_backup_video_orc_resample_h_muladdtaps3_u8_lq (OrcExecutor * ORC_RESTRICT ex)
+{
+  int i;
+  int n = ex->n;
+  orc_union16 *ORC_RESTRICT ptr0;
+  const orc_int8 *ORC_RESTRICT ptr4;
+  const orc_int8 *ORC_RESTRICT ptr5;
+  const orc_int8 *ORC_RESTRICT ptr6;
+  const orc_union16 *ORC_RESTRICT ptr7;
+  const orc_union16 *ORC_RESTRICT ptr8;
+  const orc_union16 *ORC_RESTRICT ptr9;
+  orc_int8 var34;
+  orc_union16 var35;
+  orc_int8 var36;
+  orc_union16 var37;
+  orc_int8 var38;
+  orc_union16 var39;
+  orc_union16 var40;
+  orc_union16 var41;
+  orc_union16 var42;
+  orc_union16 var43;
+  orc_union16 var44;
+  orc_union16 var45;
+  orc_union16 var46;
+  orc_union16 var47;
+  orc_union16 var48;
+  orc_union16 var49;
+
+  ptr0 = (orc_union16 *) ex->arrays[0];
+  ptr4 = (orc_int8 *) ex->arrays[4];
+  ptr5 = (orc_int8 *) ex->arrays[5];
+  ptr6 = (orc_int8 *) ex->arrays[6];
+  ptr7 = (orc_union16 *) ex->arrays[7];
+  ptr8 = (orc_union16 *) ex->arrays[8];
+  ptr9 = (orc_union16 *) ex->arrays[9];
+
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadb */
+    var34 = ptr4[i];
+    /* 1: convubw */
+    var42.i = (orc_uint8) var34;
+    /* 2: loadw */
+    var35 = ptr7[i];
+    /* 3: mullw */
+    var43.i = (var42.i * var35.i) & 0xffff;
+    /* 4: loadb */
+    var36 = ptr5[i];
+    /* 5: convubw */
+    var44.i = (orc_uint8) var36;
+    /* 6: loadw */
+    var37 = ptr8[i];
+    /* 7: mullw */
+    var45.i = (var44.i * var37.i) & 0xffff;
+    /* 8: addw */
+    var46.i = var43.i + var45.i;
+    /* 9: loadb */
+    var38 = ptr6[i];
+    /* 10: convubw */
+    var47.i = (orc_uint8) var38;
+    /* 11: loadw */
+    var39 = ptr9[i];
+    /* 12: mullw */
+    var48.i = (var47.i * var39.i) & 0xffff;
+    /* 13: addw */
+    var49.i = var46.i + var48.i;
+    /* 14: loadw */
+    var40 = ptr0[i];
+    /* 15: addw */
+    var41.i = var40.i + var49.i;
+    /* 16: storew */
+    ptr0[i] = var41;
+  }
+
+}
+
+void
+video_orc_resample_h_muladdtaps3_u8_lq (gint16 * ORC_RESTRICT d1,
+    const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2,
+    const guint8 * ORC_RESTRICT s3, const gint16 * ORC_RESTRICT s4,
+    const gint16 * ORC_RESTRICT s5, const gint16 * ORC_RESTRICT s6, int n)
+{
+  OrcExecutor _ex, *ex = &_ex;
+  static volatile int p_inited = 0;
+  static OrcCode *c = 0;
+  void (*func) (OrcExecutor *);
+
+  if (!p_inited) {
+    orc_once_mutex_lock ();
+    if (!p_inited) {
+      OrcProgram *p;
+
+#if 1
+      static const orc_uint8 bc[] = {
+        1, 9, 38, 118, 105, 100, 101, 111, 95, 111, 114, 99, 95, 114, 101, 115,
+        97, 109, 112, 108, 101, 95, 104, 95, 109, 117, 108, 97, 100, 100, 116,
+        97,
+        112, 115, 51, 95, 117, 56, 95, 108, 113, 11, 2, 2, 12, 1, 1, 12,
+        1, 1, 12, 1, 1, 12, 2, 2, 12, 2, 2, 12, 2, 2, 20, 2,
+        20, 2, 150, 32, 4, 89, 32, 32, 7, 150, 33, 5, 89, 33, 33, 8,
+        70, 32, 32, 33, 150, 33, 6, 89, 33, 33, 9, 70, 32, 32, 33, 70,
+        0, 0, 32, 2, 0,
+      };
+      p = orc_program_new_from_static_bytecode (bc);
+      orc_program_set_backup_function (p,
+          _backup_video_orc_resample_h_muladdtaps3_u8_lq);
+#else
+      p = orc_program_new ();
+      orc_program_set_name (p, "video_orc_resample_h_muladdtaps3_u8_lq");
+      orc_program_set_backup_function (p,
+          _backup_video_orc_resample_h_muladdtaps3_u8_lq);
+      orc_program_add_destination (p, 2, "d1");
+      orc_program_add_source (p, 1, "s1");
+      orc_program_add_source (p, 1, "s2");
+      orc_program_add_source (p, 1, "s3");
+      orc_program_add_source (p, 2, "s4");
+      orc_program_add_source (p, 2, "s5");
+      orc_program_add_source (p, 2, "s6");
+      orc_program_add_temporary (p, 2, "t1");
+      orc_program_add_temporary (p, 2, "t2");
+
+      orc_program_append_2 (p, "convubw", 0, ORC_VAR_T1, ORC_VAR_S1, ORC_VAR_D1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "mullw", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_S4,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "convubw", 0, ORC_VAR_T2, ORC_VAR_S2, ORC_VAR_D1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "mullw", 0, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_S5,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "addw", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_T2,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "convubw", 0, ORC_VAR_T2, ORC_VAR_S3, ORC_VAR_D1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "mullw", 0, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_S6,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "addw", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_T2,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "addw", 0, ORC_VAR_D1, ORC_VAR_D1, ORC_VAR_T1,
+          ORC_VAR_D1);
+#endif
+
+      orc_program_compile (p);
+      c = orc_program_take_code (p);
+      orc_program_free (p);
+    }
+    p_inited = TRUE;
+    orc_once_mutex_unlock ();
+  }
+  ex->arrays[ORC_VAR_A2] = c;
+  ex->program = 0;
+
+  ex->n = n;
+  ex->arrays[ORC_VAR_D1] = d1;
+  ex->arrays[ORC_VAR_S1] = (void *) s1;
+  ex->arrays[ORC_VAR_S2] = (void *) s2;
+  ex->arrays[ORC_VAR_S3] = (void *) s3;
+  ex->arrays[ORC_VAR_S4] = (void *) s4;
+  ex->arrays[ORC_VAR_S5] = (void *) s5;
+  ex->arrays[ORC_VAR_S6] = (void *) s6;
+
+  func = c->exec;
+  func (ex);
+}
+#endif
+
+
+/* video_orc_resample_h_muladdscaletaps3_u8_lq */
+#ifdef DISABLE_ORC
+void
+video_orc_resample_h_muladdscaletaps3_u8_lq (guint8 * ORC_RESTRICT d1,
+    const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2,
+    const guint8 * ORC_RESTRICT s3, const gint16 * ORC_RESTRICT s4,
+    const gint16 * ORC_RESTRICT s5, const gint16 * ORC_RESTRICT s6,
+    const gint16 * ORC_RESTRICT s7, int n)
+{
+  int i;
+  orc_int8 *ORC_RESTRICT ptr0;
+  const orc_int8 *ORC_RESTRICT ptr4;
+  const orc_int8 *ORC_RESTRICT ptr5;
+  const orc_int8 *ORC_RESTRICT ptr6;
+  const orc_union16 *ORC_RESTRICT ptr7;
+  const orc_union16 *ORC_RESTRICT ptr8;
+  const orc_union16 *ORC_RESTRICT ptr9;
+  const orc_union16 *ORC_RESTRICT ptr10;
+  orc_int8 var34;
+  orc_union16 var35;
+  orc_int8 var36;
+  orc_union16 var37;
+  orc_int8 var38;
+  orc_union16 var39;
+  orc_union16 var40;
+#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
+  volatile orc_union16 var41;
+#else
+  orc_union16 var41;
+#endif
+  orc_int8 var42;
+  orc_union16 var43;
+  orc_union16 var44;
+  orc_union16 var45;
+  orc_union16 var46;
+  orc_union16 var47;
+  orc_union16 var48;
+  orc_union16 var49;
+  orc_union16 var50;
+  orc_union16 var51;
+  orc_union16 var52;
+  orc_union16 var53;
+
+  ptr0 = (orc_int8 *) d1;
+  ptr4 = (orc_int8 *) s1;
+  ptr5 = (orc_int8 *) s2;
+  ptr6 = (orc_int8 *) s3;
+  ptr7 = (orc_union16 *) s4;
+  ptr8 = (orc_union16 *) s5;
+  ptr9 = (orc_union16 *) s6;
+  ptr10 = (orc_union16 *) s7;
+
+  /* 16: loadpw */
+  var41.i = (int) 0x00000020;   /* 32 or 1.58101e-322f */
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadb */
+    var34 = ptr4[i];
+    /* 1: convubw */
+    var43.i = (orc_uint8) var34;
+    /* 2: loadw */
+    var35 = ptr7[i];
+    /* 3: mullw */
+    var44.i = (var43.i * var35.i) & 0xffff;
+    /* 4: loadb */
+    var36 = ptr5[i];
+    /* 5: convubw */
+    var45.i = (orc_uint8) var36;
+    /* 6: loadw */
+    var37 = ptr8[i];
+    /* 7: mullw */
+    var46.i = (var45.i * var37.i) & 0xffff;
+    /* 8: addw */
+    var47.i = var44.i + var46.i;
+    /* 9: loadb */
+    var38 = ptr6[i];
+    /* 10: convubw */
+    var48.i = (orc_uint8) var38;
+    /* 11: loadw */
+    var39 = ptr9[i];
+    /* 12: mullw */
+    var49.i = (var48.i * var39.i) & 0xffff;
+    /* 13: addw */
+    var50.i = var47.i + var49.i;
+    /* 14: loadw */
+    var40 = ptr10[i];
+    /* 15: addw */
+    var51.i = var50.i + var40.i;
+    /* 17: addw */
+    var52.i = var51.i + var41.i;
+    /* 18: shrsw */
+    var53.i = var52.i >> 6;
+    /* 19: convsuswb */
+    var42 = ORC_CLAMP_UB (var53.i);
+    /* 20: storeb */
+    ptr0[i] = var42;
+  }
+
+}
+
+#else
+static void
+_backup_video_orc_resample_h_muladdscaletaps3_u8_lq (OrcExecutor *
+    ORC_RESTRICT ex)
+{
+  int i;
+  int n = ex->n;
+  orc_int8 *ORC_RESTRICT ptr0;
+  const orc_int8 *ORC_RESTRICT ptr4;
+  const orc_int8 *ORC_RESTRICT ptr5;
+  const orc_int8 *ORC_RESTRICT ptr6;
+  const orc_union16 *ORC_RESTRICT ptr7;
+  const orc_union16 *ORC_RESTRICT ptr8;
+  const orc_union16 *ORC_RESTRICT ptr9;
+  const orc_union16 *ORC_RESTRICT ptr10;
+  orc_int8 var34;
+  orc_union16 var35;
+  orc_int8 var36;
+  orc_union16 var37;
+  orc_int8 var38;
+  orc_union16 var39;
+  orc_union16 var40;
+#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
+  volatile orc_union16 var41;
+#else
+  orc_union16 var41;
+#endif
+  orc_int8 var42;
+  orc_union16 var43;
+  orc_union16 var44;
+  orc_union16 var45;
+  orc_union16 var46;
+  orc_union16 var47;
+  orc_union16 var48;
+  orc_union16 var49;
+  orc_union16 var50;
+  orc_union16 var51;
+  orc_union16 var52;
+  orc_union16 var53;
+
+  ptr0 = (orc_int8 *) ex->arrays[0];
+  ptr4 = (orc_int8 *) ex->arrays[4];
+  ptr5 = (orc_int8 *) ex->arrays[5];
+  ptr6 = (orc_int8 *) ex->arrays[6];
+  ptr7 = (orc_union16 *) ex->arrays[7];
+  ptr8 = (orc_union16 *) ex->arrays[8];
+  ptr9 = (orc_union16 *) ex->arrays[9];
+  ptr10 = (orc_union16 *) ex->arrays[10];
+
+  /* 16: loadpw */
+  var41.i = (int) 0x00000020;   /* 32 or 1.58101e-322f */
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadb */
+    var34 = ptr4[i];
+    /* 1: convubw */
+    var43.i = (orc_uint8) var34;
+    /* 2: loadw */
+    var35 = ptr7[i];
+    /* 3: mullw */
+    var44.i = (var43.i * var35.i) & 0xffff;
+    /* 4: loadb */
+    var36 = ptr5[i];
+    /* 5: convubw */
+    var45.i = (orc_uint8) var36;
+    /* 6: loadw */
+    var37 = ptr8[i];
+    /* 7: mullw */
+    var46.i = (var45.i * var37.i) & 0xffff;
+    /* 8: addw */
+    var47.i = var44.i + var46.i;
+    /* 9: loadb */
+    var38 = ptr6[i];
+    /* 10: convubw */
+    var48.i = (orc_uint8) var38;
+    /* 11: loadw */
+    var39 = ptr9[i];
+    /* 12: mullw */
+    var49.i = (var48.i * var39.i) & 0xffff;
+    /* 13: addw */
+    var50.i = var47.i + var49.i;
+    /* 14: loadw */
+    var40 = ptr10[i];
+    /* 15: addw */
+    var51.i = var50.i + var40.i;
+    /* 17: addw */
+    var52.i = var51.i + var41.i;
+    /* 18: shrsw */
+    var53.i = var52.i >> 6;
+    /* 19: convsuswb */
+    var42 = ORC_CLAMP_UB (var53.i);
+    /* 20: storeb */
+    ptr0[i] = var42;
+  }
+
+}
+
+void
+video_orc_resample_h_muladdscaletaps3_u8_lq (guint8 * ORC_RESTRICT d1,
+    const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2,
+    const guint8 * ORC_RESTRICT s3, const gint16 * ORC_RESTRICT s4,
+    const gint16 * ORC_RESTRICT s5, const gint16 * ORC_RESTRICT s6,
+    const gint16 * ORC_RESTRICT s7, int n)
+{
+  OrcExecutor _ex, *ex = &_ex;
+  static volatile int p_inited = 0;
+  static OrcCode *c = 0;
+  void (*func) (OrcExecutor *);
+
+  if (!p_inited) {
+    orc_once_mutex_lock ();
+    if (!p_inited) {
+      OrcProgram *p;
+
+#if 1
+      static const orc_uint8 bc[] = {
+        1, 9, 43, 118, 105, 100, 101, 111, 95, 111, 114, 99, 95, 114, 101, 115,
+        97, 109, 112, 108, 101, 95, 104, 95, 109, 117, 108, 97, 100, 100, 115,
+        99,
+        97, 108, 101, 116, 97, 112, 115, 51, 95, 117, 56, 95, 108, 113, 11, 1,
+        1, 12, 1, 1, 12, 1, 1, 12, 1, 1, 12, 2, 2, 12, 2, 2,
+        12, 2, 2, 12, 2, 2, 14, 2, 32, 0, 0, 0, 14, 2, 6, 0,
+        0, 0, 20, 2, 20, 2, 150, 32, 4, 89, 32, 32, 7, 150, 33, 5,
+        89, 33, 33, 8, 70, 32, 32, 33, 150, 33, 6, 89, 33, 33, 9, 70,
+        32, 32, 33, 70, 32, 32, 10, 70, 32, 32, 16, 94, 32, 32, 17, 160,
+        0, 32, 2, 0,
+      };
+      p = orc_program_new_from_static_bytecode (bc);
+      orc_program_set_backup_function (p,
+          _backup_video_orc_resample_h_muladdscaletaps3_u8_lq);
+#else
+      p = orc_program_new ();
+      orc_program_set_name (p, "video_orc_resample_h_muladdscaletaps3_u8_lq");
+      orc_program_set_backup_function (p,
+          _backup_video_orc_resample_h_muladdscaletaps3_u8_lq);
+      orc_program_add_destination (p, 1, "d1");
+      orc_program_add_source (p, 1, "s1");
+      orc_program_add_source (p, 1, "s2");
+      orc_program_add_source (p, 1, "s3");
+      orc_program_add_source (p, 2, "s4");
+      orc_program_add_source (p, 2, "s5");
+      orc_program_add_source (p, 2, "s6");
+      orc_program_add_source (p, 2, "s7");
+      orc_program_add_constant (p, 2, 0x00000020, "c1");
+      orc_program_add_constant (p, 2, 0x00000006, "c2");
+      orc_program_add_temporary (p, 2, "t1");
+      orc_program_add_temporary (p, 2, "t2");
+
+      orc_program_append_2 (p, "convubw", 0, ORC_VAR_T1, ORC_VAR_S1, ORC_VAR_D1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "mullw", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_S4,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "convubw", 0, ORC_VAR_T2, ORC_VAR_S2, ORC_VAR_D1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "mullw", 0, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_S5,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "addw", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_T2,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "convubw", 0, ORC_VAR_T2, ORC_VAR_S3, ORC_VAR_D1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "mullw", 0, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_S6,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "addw", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_T2,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "addw", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_S7,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "addw", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_C1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "shrsw", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_C2,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "convsuswb", 0, ORC_VAR_D1, ORC_VAR_T1,
+          ORC_VAR_D1, ORC_VAR_D1);
+#endif
+
+      orc_program_compile (p);
+      c = orc_program_take_code (p);
+      orc_program_free (p);
+    }
+    p_inited = TRUE;
+    orc_once_mutex_unlock ();
+  }
+  ex->arrays[ORC_VAR_A2] = c;
+  ex->program = 0;
+
+  ex->n = n;
+  ex->arrays[ORC_VAR_D1] = d1;
+  ex->arrays[ORC_VAR_S1] = (void *) s1;
+  ex->arrays[ORC_VAR_S2] = (void *) s2;
+  ex->arrays[ORC_VAR_S3] = (void *) s3;
+  ex->arrays[ORC_VAR_S4] = (void *) s4;
+  ex->arrays[ORC_VAR_S5] = (void *) s5;
+  ex->arrays[ORC_VAR_S6] = (void *) s6;
+  ex->arrays[ORC_VAR_S7] = (void *) s7;
+
+  func = c->exec;
+  func (ex);
+}
+#endif
+
+
+/* video_orc_resample_scaletaps_u8_lq */
+#ifdef DISABLE_ORC
+void
+video_orc_resample_scaletaps_u8_lq (guint8 * ORC_RESTRICT d1,
+    const gint16 * ORC_RESTRICT s1, int n)
+{
+  int i;
+  orc_int8 *ORC_RESTRICT ptr0;
+  const orc_union16 *ORC_RESTRICT ptr4;
+  orc_union16 var33;
+#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
+  volatile orc_union16 var34;
+#else
+  orc_union16 var34;
+#endif
+  orc_int8 var35;
+  orc_union16 var36;
+  orc_union16 var37;
+
+  ptr0 = (orc_int8 *) d1;
+  ptr4 = (orc_union16 *) s1;
+
+  /* 1: loadpw */
+  var34.i = (int) 0x00000020;   /* 32 or 1.58101e-322f */
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadw */
+    var33 = ptr4[i];
+    /* 2: addw */
+    var36.i = var33.i + var34.i;
+    /* 3: shrsw */
+    var37.i = var36.i >> 6;
+    /* 4: convsuswb */
+    var35 = ORC_CLAMP_UB (var37.i);
+    /* 5: storeb */
+    ptr0[i] = var35;
+  }
+
+}
+
+#else
+static void
+_backup_video_orc_resample_scaletaps_u8_lq (OrcExecutor * ORC_RESTRICT ex)
+{
+  int i;
+  int n = ex->n;
+  orc_int8 *ORC_RESTRICT ptr0;
+  const orc_union16 *ORC_RESTRICT ptr4;
+  orc_union16 var33;
+#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
+  volatile orc_union16 var34;
+#else
+  orc_union16 var34;
+#endif
+  orc_int8 var35;
+  orc_union16 var36;
+  orc_union16 var37;
+
+  ptr0 = (orc_int8 *) ex->arrays[0];
+  ptr4 = (orc_union16 *) ex->arrays[4];
+
+  /* 1: loadpw */
+  var34.i = (int) 0x00000020;   /* 32 or 1.58101e-322f */
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadw */
+    var33 = ptr4[i];
+    /* 2: addw */
+    var36.i = var33.i + var34.i;
+    /* 3: shrsw */
+    var37.i = var36.i >> 6;
+    /* 4: convsuswb */
+    var35 = ORC_CLAMP_UB (var37.i);
+    /* 5: storeb */
+    ptr0[i] = var35;
+  }
+
+}
+
+void
+video_orc_resample_scaletaps_u8_lq (guint8 * ORC_RESTRICT d1,
+    const gint16 * ORC_RESTRICT s1, int n)
+{
+  OrcExecutor _ex, *ex = &_ex;
+  static volatile int p_inited = 0;
+  static OrcCode *c = 0;
+  void (*func) (OrcExecutor *);
+
+  if (!p_inited) {
+    orc_once_mutex_lock ();
+    if (!p_inited) {
+      OrcProgram *p;
+
+#if 1
+      static const orc_uint8 bc[] = {
+        1, 9, 34, 118, 105, 100, 101, 111, 95, 111, 114, 99, 95, 114, 101, 115,
+        97, 109, 112, 108, 101, 95, 115, 99, 97, 108, 101, 116, 97, 112, 115,
+        95,
+        117, 56, 95, 108, 113, 11, 1, 1, 12, 2, 2, 14, 2, 32, 0, 0,
+        0, 14, 2, 6, 0, 0, 0, 20, 2, 70, 32, 4, 16, 94, 32, 32,
+        17, 160, 0, 32, 2, 0,
+      };
+      p = orc_program_new_from_static_bytecode (bc);
+      orc_program_set_backup_function (p,
+          _backup_video_orc_resample_scaletaps_u8_lq);
+#else
+      p = orc_program_new ();
+      orc_program_set_name (p, "video_orc_resample_scaletaps_u8_lq");
+      orc_program_set_backup_function (p,
+          _backup_video_orc_resample_scaletaps_u8_lq);
+      orc_program_add_destination (p, 1, "d1");
+      orc_program_add_source (p, 2, "s1");
+      orc_program_add_constant (p, 2, 0x00000020, "c1");
+      orc_program_add_constant (p, 2, 0x00000006, "c2");
+      orc_program_add_temporary (p, 2, "t1");
+
+      orc_program_append_2 (p, "addw", 0, ORC_VAR_T1, ORC_VAR_S1, ORC_VAR_C1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "shrsw", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_C2,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "convsuswb", 0, ORC_VAR_D1, ORC_VAR_T1,
+          ORC_VAR_D1, ORC_VAR_D1);
+#endif
+
+      orc_program_compile (p);
+      c = orc_program_take_code (p);
+      orc_program_free (p);
+    }
+    p_inited = TRUE;
+    orc_once_mutex_unlock ();
+  }
+  ex->arrays[ORC_VAR_A2] = c;
+  ex->program = 0;
+
+  ex->n = n;
+  ex->arrays[ORC_VAR_D1] = d1;
+  ex->arrays[ORC_VAR_S1] = (void *) s1;
+
+  func = c->exec;
+  func (ex);
+}
+#endif
+
+
+/* video_orc_resample_h_multaps_u16 */
+#ifdef DISABLE_ORC
+void
+video_orc_resample_h_multaps_u16 (gint32 * ORC_RESTRICT d1,
+    const guint16 * ORC_RESTRICT s1, const gint16 * ORC_RESTRICT s2, int n)
+{
+  int i;
+  orc_union32 *ORC_RESTRICT ptr0;
+  const orc_union16 *ORC_RESTRICT ptr4;
+  const orc_union16 *ORC_RESTRICT ptr5;
+  orc_union16 var34;
+  orc_union16 var35;
+  orc_union32 var36;
+  orc_union32 var37;
+  orc_union32 var38;
+
+  ptr0 = (orc_union32 *) d1;
+  ptr4 = (orc_union16 *) s1;
+  ptr5 = (orc_union16 *) s2;
+
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadw */
+    var34 = ptr4[i];
+    /* 1: convuwl */
+    var37.i = (orc_uint16) var34.i;
+    /* 2: loadw */
+    var35 = ptr5[i];
+    /* 3: convswl */
+    var38.i = var35.i;
+    /* 4: mulll */
+    var36.i = (((orc_uint32) var37.i) * ((orc_uint32) var38.i)) & 0xffffffff;
+    /* 5: storel */
+    ptr0[i] = var36;
+  }
+
+}
+
+#else
+static void
+_backup_video_orc_resample_h_multaps_u16 (OrcExecutor * ORC_RESTRICT ex)
+{
+  int i;
+  int n = ex->n;
+  orc_union32 *ORC_RESTRICT ptr0;
+  const orc_union16 *ORC_RESTRICT ptr4;
+  const orc_union16 *ORC_RESTRICT ptr5;
+  orc_union16 var34;
+  orc_union16 var35;
+  orc_union32 var36;
+  orc_union32 var37;
+  orc_union32 var38;
+
+  ptr0 = (orc_union32 *) ex->arrays[0];
+  ptr4 = (orc_union16 *) ex->arrays[4];
+  ptr5 = (orc_union16 *) ex->arrays[5];
+
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadw */
+    var34 = ptr4[i];
+    /* 1: convuwl */
+    var37.i = (orc_uint16) var34.i;
+    /* 2: loadw */
+    var35 = ptr5[i];
+    /* 3: convswl */
+    var38.i = var35.i;
+    /* 4: mulll */
+    var36.i = (((orc_uint32) var37.i) * ((orc_uint32) var38.i)) & 0xffffffff;
+    /* 5: storel */
+    ptr0[i] = var36;
+  }
+
+}
+
+void
+video_orc_resample_h_multaps_u16 (gint32 * ORC_RESTRICT d1,
+    const guint16 * ORC_RESTRICT s1, const gint16 * ORC_RESTRICT s2, int n)
+{
+  OrcExecutor _ex, *ex = &_ex;
+  static volatile int p_inited = 0;
+  static OrcCode *c = 0;
+  void (*func) (OrcExecutor *);
+
+  if (!p_inited) {
+    orc_once_mutex_lock ();
+    if (!p_inited) {
+      OrcProgram *p;
+
+#if 1
+      static const orc_uint8 bc[] = {
+        1, 9, 32, 118, 105, 100, 101, 111, 95, 111, 114, 99, 95, 114, 101, 115,
+        97, 109, 112, 108, 101, 95, 104, 95, 109, 117, 108, 116, 97, 112, 115,
+        95,
+        117, 49, 54, 11, 4, 4, 12, 2, 2, 12, 2, 2, 20, 4, 20, 4,
+        154, 32, 4, 153, 33, 5, 120, 0, 32, 33, 2, 0,
+      };
+      p = orc_program_new_from_static_bytecode (bc);
+      orc_program_set_backup_function (p,
+          _backup_video_orc_resample_h_multaps_u16);
+#else
+      p = orc_program_new ();
+      orc_program_set_name (p, "video_orc_resample_h_multaps_u16");
+      orc_program_set_backup_function (p,
+          _backup_video_orc_resample_h_multaps_u16);
+      orc_program_add_destination (p, 4, "d1");
+      orc_program_add_source (p, 2, "s1");
+      orc_program_add_source (p, 2, "s2");
+      orc_program_add_temporary (p, 4, "t1");
+      orc_program_add_temporary (p, 4, "t2");
+
+      orc_program_append_2 (p, "convuwl", 0, ORC_VAR_T1, ORC_VAR_S1, ORC_VAR_D1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "convswl", 0, ORC_VAR_T2, ORC_VAR_S2, ORC_VAR_D1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "mulll", 0, ORC_VAR_D1, ORC_VAR_T1, ORC_VAR_T2,
+          ORC_VAR_D1);
+#endif
+
+      orc_program_compile (p);
+      c = orc_program_take_code (p);
+      orc_program_free (p);
+    }
+    p_inited = TRUE;
+    orc_once_mutex_unlock ();
+  }
+  ex->arrays[ORC_VAR_A2] = c;
+  ex->program = 0;
+
+  ex->n = n;
+  ex->arrays[ORC_VAR_D1] = d1;
+  ex->arrays[ORC_VAR_S1] = (void *) s1;
+  ex->arrays[ORC_VAR_S2] = (void *) s2;
+
+  func = c->exec;
+  func (ex);
+}
+#endif
+
+
+/* video_orc_resample_h_muladdtaps_u16 */
+#ifdef DISABLE_ORC
+void
+video_orc_resample_h_muladdtaps_u16 (gint32 * ORC_RESTRICT d1, int d1_stride,
+    const guint16 * ORC_RESTRICT s1, int s1_stride,
+    const gint16 * ORC_RESTRICT s2, int s2_stride, int n, int m)
+{
+  int i;
+  int j;
+  orc_union32 *ORC_RESTRICT ptr0;
+  const orc_union16 *ORC_RESTRICT ptr4;
+  const orc_union16 *ORC_RESTRICT ptr5;
+  orc_union16 var34;
+  orc_union16 var35;
+  orc_union32 var36;
+  orc_union32 var37;
+  orc_union32 var38;
+  orc_union32 var39;
+  orc_union32 var40;
+
+  for (j = 0; j < m; j++) {
+    ptr0 = ORC_PTR_OFFSET (d1, d1_stride * j);
+    ptr4 = ORC_PTR_OFFSET (s1, s1_stride * j);
+    ptr5 = ORC_PTR_OFFSET (s2, s2_stride * j);
+
+
+    for (i = 0; i < n; i++) {
+      /* 0: loadw */
+      var34 = ptr4[i];
+      /* 1: convuwl */
+      var38.i = (orc_uint16) var34.i;
+      /* 2: loadw */
+      var35 = ptr5[i];
+      /* 3: convswl */
+      var39.i = var35.i;
+      /* 4: mulll */
+      var40.i = (((orc_uint32) var38.i) * ((orc_uint32) var39.i)) & 0xffffffff;
+      /* 5: loadl */
+      var36 = ptr0[i];
+      /* 6: addl */
+      var37.i = ((orc_uint32) var36.i) + ((orc_uint32) var40.i);
+      /* 7: storel */
+      ptr0[i] = var37;
+    }
+  }
+
+}
+
+#else
+static void
+_backup_video_orc_resample_h_muladdtaps_u16 (OrcExecutor * ORC_RESTRICT ex)
+{
+  int i;
+  int j;
+  int n = ex->n;
+  int m = ex->params[ORC_VAR_A1];
+  orc_union32 *ORC_RESTRICT ptr0;
+  const orc_union16 *ORC_RESTRICT ptr4;
+  const orc_union16 *ORC_RESTRICT ptr5;
+  orc_union16 var34;
+  orc_union16 var35;
+  orc_union32 var36;
+  orc_union32 var37;
+  orc_union32 var38;
+  orc_union32 var39;
+  orc_union32 var40;
+
+  for (j = 0; j < m; j++) {
+    ptr0 = ORC_PTR_OFFSET (ex->arrays[0], ex->params[0] * j);
+    ptr4 = ORC_PTR_OFFSET (ex->arrays[4], ex->params[4] * j);
+    ptr5 = ORC_PTR_OFFSET (ex->arrays[5], ex->params[5] * j);
+
+
+    for (i = 0; i < n; i++) {
+      /* 0: loadw */
+      var34 = ptr4[i];
+      /* 1: convuwl */
+      var38.i = (orc_uint16) var34.i;
+      /* 2: loadw */
+      var35 = ptr5[i];
+      /* 3: convswl */
+      var39.i = var35.i;
+      /* 4: mulll */
+      var40.i = (((orc_uint32) var38.i) * ((orc_uint32) var39.i)) & 0xffffffff;
+      /* 5: loadl */
+      var36 = ptr0[i];
+      /* 6: addl */
+      var37.i = ((orc_uint32) var36.i) + ((orc_uint32) var40.i);
+      /* 7: storel */
+      ptr0[i] = var37;
+    }
+  }
+
+}
+
+void
+video_orc_resample_h_muladdtaps_u16 (gint32 * ORC_RESTRICT d1, int d1_stride,
+    const guint16 * ORC_RESTRICT s1, int s1_stride,
+    const gint16 * ORC_RESTRICT s2, int s2_stride, int n, int m)
+{
+  OrcExecutor _ex, *ex = &_ex;
+  static volatile int p_inited = 0;
+  static OrcCode *c = 0;
+  void (*func) (OrcExecutor *);
+
+  if (!p_inited) {
+    orc_once_mutex_lock ();
+    if (!p_inited) {
+      OrcProgram *p;
+
+#if 1
+      static const orc_uint8 bc[] = {
+        1, 7, 9, 35, 118, 105, 100, 101, 111, 95, 111, 114, 99, 95, 114, 101,
+        115, 97, 109, 112, 108, 101, 95, 104, 95, 109, 117, 108, 97, 100, 100,
+        116,
+        97, 112, 115, 95, 117, 49, 54, 11, 4, 4, 12, 2, 2, 12, 2, 2,
+        20, 4, 20, 4, 154, 32, 4, 153, 33, 5, 120, 32, 32, 33, 103, 0,
+        0, 32, 2, 0,
+      };
+      p = orc_program_new_from_static_bytecode (bc);
+      orc_program_set_backup_function (p,
+          _backup_video_orc_resample_h_muladdtaps_u16);
+#else
+      p = orc_program_new ();
+      orc_program_set_2d (p);
+      orc_program_set_name (p, "video_orc_resample_h_muladdtaps_u16");
+      orc_program_set_backup_function (p,
+          _backup_video_orc_resample_h_muladdtaps_u16);
+      orc_program_add_destination (p, 4, "d1");
+      orc_program_add_source (p, 2, "s1");
+      orc_program_add_source (p, 2, "s2");
+      orc_program_add_temporary (p, 4, "t1");
+      orc_program_add_temporary (p, 4, "t2");
+
+      orc_program_append_2 (p, "convuwl", 0, ORC_VAR_T1, ORC_VAR_S1, ORC_VAR_D1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "convswl", 0, ORC_VAR_T2, ORC_VAR_S2, ORC_VAR_D1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "mulll", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_T2,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "addl", 0, ORC_VAR_D1, ORC_VAR_D1, ORC_VAR_T1,
+          ORC_VAR_D1);
+#endif
+
+      orc_program_compile (p);
+      c = orc_program_take_code (p);
+      orc_program_free (p);
+    }
+    p_inited = TRUE;
+    orc_once_mutex_unlock ();
+  }
+  ex->arrays[ORC_VAR_A2] = c;
+  ex->program = 0;
+
+  ex->n = n;
+  ORC_EXECUTOR_M (ex) = m;
+  ex->arrays[ORC_VAR_D1] = d1;
+  ex->params[ORC_VAR_D1] = d1_stride;
+  ex->arrays[ORC_VAR_S1] = (void *) s1;
+  ex->params[ORC_VAR_S1] = s1_stride;
+  ex->arrays[ORC_VAR_S2] = (void *) s2;
+  ex->params[ORC_VAR_S2] = s2_stride;
+
+  func = c->exec;
+  func (ex);
+}
+#endif
+
+
+/* video_orc_resample_scaletaps_u16 */
+#ifdef DISABLE_ORC
+void
+video_orc_resample_scaletaps_u16 (guint16 * ORC_RESTRICT d1,
+    const gint32 * ORC_RESTRICT s1, int n)
+{
+  int i;
+  orc_union16 *ORC_RESTRICT ptr0;
+  const orc_union32 *ORC_RESTRICT ptr4;
+  orc_union32 var33;
+#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
+  volatile orc_union32 var34;
+#else
+  orc_union32 var34;
+#endif
+  orc_union16 var35;
+  orc_union32 var36;
+  orc_union32 var37;
+
+  ptr0 = (orc_union16 *) d1;
+  ptr4 = (orc_union32 *) s1;
+
+  /* 1: loadpl */
+  var34.i = (int) 0x00000fff;   /* 4095 or 2.0232e-320f */
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadl */
+    var33 = ptr4[i];
+    /* 2: addl */
+    var36.i = ((orc_uint32) var33.i) + ((orc_uint32) var34.i);
+    /* 3: shrsl */
+    var37.i = var36.i >> 12;
+    /* 4: convsuslw */
+    var35.i = ORC_CLAMP_UW (var37.i);
+    /* 5: storew */
+    ptr0[i] = var35;
+  }
+
+}
+
+#else
+static void
+_backup_video_orc_resample_scaletaps_u16 (OrcExecutor * ORC_RESTRICT ex)
+{
+  int i;
+  int n = ex->n;
+  orc_union16 *ORC_RESTRICT ptr0;
+  const orc_union32 *ORC_RESTRICT ptr4;
+  orc_union32 var33;
+#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
+  volatile orc_union32 var34;
+#else
+  orc_union32 var34;
+#endif
+  orc_union16 var35;
+  orc_union32 var36;
+  orc_union32 var37;
+
+  ptr0 = (orc_union16 *) ex->arrays[0];
+  ptr4 = (orc_union32 *) ex->arrays[4];
+
+  /* 1: loadpl */
+  var34.i = (int) 0x00000fff;   /* 4095 or 2.0232e-320f */
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadl */
+    var33 = ptr4[i];
+    /* 2: addl */
+    var36.i = ((orc_uint32) var33.i) + ((orc_uint32) var34.i);
+    /* 3: shrsl */
+    var37.i = var36.i >> 12;
+    /* 4: convsuslw */
+    var35.i = ORC_CLAMP_UW (var37.i);
+    /* 5: storew */
+    ptr0[i] = var35;
+  }
+
+}
+
+void
+video_orc_resample_scaletaps_u16 (guint16 * ORC_RESTRICT d1,
+    const gint32 * ORC_RESTRICT s1, int n)
+{
+  OrcExecutor _ex, *ex = &_ex;
+  static volatile int p_inited = 0;
+  static OrcCode *c = 0;
+  void (*func) (OrcExecutor *);
+
+  if (!p_inited) {
+    orc_once_mutex_lock ();
+    if (!p_inited) {
+      OrcProgram *p;
+
+#if 1
+      static const orc_uint8 bc[] = {
+        1, 9, 32, 118, 105, 100, 101, 111, 95, 111, 114, 99, 95, 114, 101, 115,
+        97, 109, 112, 108, 101, 95, 115, 99, 97, 108, 101, 116, 97, 112, 115,
+        95,
+        117, 49, 54, 11, 2, 2, 12, 4, 4, 14, 4, 255, 15, 0, 0, 14,
+        4, 12, 0, 0, 0, 20, 4, 103, 32, 4, 16, 125, 32, 32, 17, 166,
+        0, 32, 2, 0,
+      };
+      p = orc_program_new_from_static_bytecode (bc);
+      orc_program_set_backup_function (p,
+          _backup_video_orc_resample_scaletaps_u16);
+#else
+      p = orc_program_new ();
+      orc_program_set_name (p, "video_orc_resample_scaletaps_u16");
+      orc_program_set_backup_function (p,
+          _backup_video_orc_resample_scaletaps_u16);
+      orc_program_add_destination (p, 2, "d1");
+      orc_program_add_source (p, 4, "s1");
+      orc_program_add_constant (p, 4, 0x00000fff, "c1");
+      orc_program_add_constant (p, 4, 0x0000000c, "c2");
+      orc_program_add_temporary (p, 4, "t1");
+
+      orc_program_append_2 (p, "addl", 0, ORC_VAR_T1, ORC_VAR_S1, ORC_VAR_C1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "shrsl", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_C2,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "convsuslw", 0, ORC_VAR_D1, ORC_VAR_T1,
+          ORC_VAR_D1, ORC_VAR_D1);
+#endif
+
+      orc_program_compile (p);
+      c = orc_program_take_code (p);
+      orc_program_free (p);
+    }
+    p_inited = TRUE;
+    orc_once_mutex_unlock ();
+  }
+  ex->arrays[ORC_VAR_A2] = c;
+  ex->program = 0;
+
+  ex->n = n;
+  ex->arrays[ORC_VAR_D1] = d1;
+  ex->arrays[ORC_VAR_S1] = (void *) s1;
+
+  func = c->exec;
+  func (ex);
+}
+#endif
+
+
+/* video_orc_resample_v_multaps_u8 */
+#ifdef DISABLE_ORC
+void
+video_orc_resample_v_multaps_u8 (gint32 * ORC_RESTRICT d1,
+    const guint8 * ORC_RESTRICT s1, int p1, int n)
+{
+  int i;
+  orc_union32 *ORC_RESTRICT ptr0;
+  const orc_int8 *ORC_RESTRICT ptr4;
+  orc_int8 var33;
+  orc_union16 var34;
+  orc_union32 var35;
+  orc_union16 var36;
+
+  ptr0 = (orc_union32 *) d1;
+  ptr4 = (orc_int8 *) s1;
+
+  /* 2: loadpw */
+  var34.i = p1;
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadb */
+    var33 = ptr4[i];
+    /* 1: convubw */
+    var36.i = (orc_uint8) var33;
+    /* 3: mulswl */
+    var35.i = var36.i * var34.i;
+    /* 4: storel */
+    ptr0[i] = var35;
+  }
+
+}
+
+#else
+static void
+_backup_video_orc_resample_v_multaps_u8 (OrcExecutor * ORC_RESTRICT ex)
+{
+  int i;
+  int n = ex->n;
+  orc_union32 *ORC_RESTRICT ptr0;
+  const orc_int8 *ORC_RESTRICT ptr4;
+  orc_int8 var33;
+  orc_union16 var34;
+  orc_union32 var35;
+  orc_union16 var36;
+
+  ptr0 = (orc_union32 *) ex->arrays[0];
+  ptr4 = (orc_int8 *) ex->arrays[4];
+
+  /* 2: loadpw */
+  var34.i = ex->params[24];
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadb */
+    var33 = ptr4[i];
+    /* 1: convubw */
+    var36.i = (orc_uint8) var33;
+    /* 3: mulswl */
+    var35.i = var36.i * var34.i;
+    /* 4: storel */
+    ptr0[i] = var35;
+  }
+
+}
+
+void
+video_orc_resample_v_multaps_u8 (gint32 * ORC_RESTRICT d1,
+    const guint8 * ORC_RESTRICT s1, int p1, int n)
+{
+  OrcExecutor _ex, *ex = &_ex;
+  static volatile int p_inited = 0;
+  static OrcCode *c = 0;
+  void (*func) (OrcExecutor *);
+
+  if (!p_inited) {
+    orc_once_mutex_lock ();
+    if (!p_inited) {
+      OrcProgram *p;
+
+#if 1
+      static const orc_uint8 bc[] = {
+        1, 9, 31, 118, 105, 100, 101, 111, 95, 111, 114, 99, 95, 114, 101, 115,
+        97, 109, 112, 108, 101, 95, 118, 95, 109, 117, 108, 116, 97, 112, 115,
+        95,
+        117, 56, 11, 4, 4, 12, 1, 1, 16, 2, 20, 2, 150, 32, 4, 176,
+        0, 32, 24, 2, 0,
+      };
+      p = orc_program_new_from_static_bytecode (bc);
+      orc_program_set_backup_function (p,
+          _backup_video_orc_resample_v_multaps_u8);
+#else
+      p = orc_program_new ();
+      orc_program_set_name (p, "video_orc_resample_v_multaps_u8");
+      orc_program_set_backup_function (p,
+          _backup_video_orc_resample_v_multaps_u8);
+      orc_program_add_destination (p, 4, "d1");
+      orc_program_add_source (p, 1, "s1");
+      orc_program_add_parameter (p, 2, "p1");
+      orc_program_add_temporary (p, 2, "t1");
+
+      orc_program_append_2 (p, "convubw", 0, ORC_VAR_T1, ORC_VAR_S1, ORC_VAR_D1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "mulswl", 0, ORC_VAR_D1, ORC_VAR_T1, ORC_VAR_P1,
+          ORC_VAR_D1);
+#endif
+
+      orc_program_compile (p);
+      c = orc_program_take_code (p);
+      orc_program_free (p);
+    }
+    p_inited = TRUE;
+    orc_once_mutex_unlock ();
+  }
+  ex->arrays[ORC_VAR_A2] = c;
+  ex->program = 0;
+
+  ex->n = n;
+  ex->arrays[ORC_VAR_D1] = d1;
+  ex->arrays[ORC_VAR_S1] = (void *) s1;
+  ex->params[ORC_VAR_P1] = p1;
+
+  func = c->exec;
+  func (ex);
+}
+#endif
+
+
+/* video_orc_resample_v_muladdtaps_u8 */
+#ifdef DISABLE_ORC
+void
+video_orc_resample_v_muladdtaps_u8 (gint32 * ORC_RESTRICT d1,
+    const guint8 * ORC_RESTRICT s1, int p1, int n)
+{
+  int i;
+  orc_union32 *ORC_RESTRICT ptr0;
+  const orc_int8 *ORC_RESTRICT ptr4;
+  orc_int8 var34;
+  orc_union16 var35;
+  orc_union32 var36;
+  orc_union32 var37;
+  orc_union16 var38;
+  orc_union32 var39;
+
+  ptr0 = (orc_union32 *) d1;
+  ptr4 = (orc_int8 *) s1;
+
+  /* 2: loadpw */
+  var35.i = p1;
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadb */
+    var34 = ptr4[i];
+    /* 1: convubw */
+    var38.i = (orc_uint8) var34;
+    /* 3: mulswl */
+    var39.i = var38.i * var35.i;
+    /* 4: loadl */
+    var36 = ptr0[i];
+    /* 5: addl */
+    var37.i = ((orc_uint32) var36.i) + ((orc_uint32) var39.i);
+    /* 6: storel */
+    ptr0[i] = var37;
+  }
+
+}
+
+#else
+static void
+_backup_video_orc_resample_v_muladdtaps_u8 (OrcExecutor * ORC_RESTRICT ex)
+{
+  int i;
+  int n = ex->n;
+  orc_union32 *ORC_RESTRICT ptr0;
+  const orc_int8 *ORC_RESTRICT ptr4;
+  orc_int8 var34;
+  orc_union16 var35;
+  orc_union32 var36;
+  orc_union32 var37;
+  orc_union16 var38;
+  orc_union32 var39;
+
+  ptr0 = (orc_union32 *) ex->arrays[0];
+  ptr4 = (orc_int8 *) ex->arrays[4];
+
+  /* 2: loadpw */
+  var35.i = ex->params[24];
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadb */
+    var34 = ptr4[i];
+    /* 1: convubw */
+    var38.i = (orc_uint8) var34;
+    /* 3: mulswl */
+    var39.i = var38.i * var35.i;
+    /* 4: loadl */
+    var36 = ptr0[i];
+    /* 5: addl */
+    var37.i = ((orc_uint32) var36.i) + ((orc_uint32) var39.i);
+    /* 6: storel */
+    ptr0[i] = var37;
+  }
+
+}
+
+void
+video_orc_resample_v_muladdtaps_u8 (gint32 * ORC_RESTRICT d1,
+    const guint8 * ORC_RESTRICT s1, int p1, int n)
+{
+  OrcExecutor _ex, *ex = &_ex;
+  static volatile int p_inited = 0;
+  static OrcCode *c = 0;
+  void (*func) (OrcExecutor *);
+
+  if (!p_inited) {
+    orc_once_mutex_lock ();
+    if (!p_inited) {
+      OrcProgram *p;
+
+#if 1
+      static const orc_uint8 bc[] = {
+        1, 9, 34, 118, 105, 100, 101, 111, 95, 111, 114, 99, 95, 114, 101, 115,
+        97, 109, 112, 108, 101, 95, 118, 95, 109, 117, 108, 97, 100, 100, 116,
+        97,
+        112, 115, 95, 117, 56, 11, 4, 4, 12, 1, 1, 16, 2, 20, 2, 20,
+        4, 150, 32, 4, 176, 33, 32, 24, 103, 0, 0, 33, 2, 0,
+      };
+      p = orc_program_new_from_static_bytecode (bc);
+      orc_program_set_backup_function (p,
+          _backup_video_orc_resample_v_muladdtaps_u8);
+#else
+      p = orc_program_new ();
+      orc_program_set_name (p, "video_orc_resample_v_muladdtaps_u8");
+      orc_program_set_backup_function (p,
+          _backup_video_orc_resample_v_muladdtaps_u8);
+      orc_program_add_destination (p, 4, "d1");
+      orc_program_add_source (p, 1, "s1");
+      orc_program_add_parameter (p, 2, "p1");
+      orc_program_add_temporary (p, 2, "t1");
+      orc_program_add_temporary (p, 4, "t2");
+
+      orc_program_append_2 (p, "convubw", 0, ORC_VAR_T1, ORC_VAR_S1, ORC_VAR_D1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "mulswl", 0, ORC_VAR_T2, ORC_VAR_T1, ORC_VAR_P1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "addl", 0, ORC_VAR_D1, ORC_VAR_D1, ORC_VAR_T2,
+          ORC_VAR_D1);
+#endif
+
+      orc_program_compile (p);
+      c = orc_program_take_code (p);
+      orc_program_free (p);
+    }
+    p_inited = TRUE;
+    orc_once_mutex_unlock ();
+  }
+  ex->arrays[ORC_VAR_A2] = c;
+  ex->program = 0;
+
+  ex->n = n;
+  ex->arrays[ORC_VAR_D1] = d1;
+  ex->arrays[ORC_VAR_S1] = (void *) s1;
+  ex->params[ORC_VAR_P1] = p1;
+
+  func = c->exec;
+  func (ex);
+}
+#endif
+
+
+/* video_orc_resample_v_multaps_u16 */
+#ifdef DISABLE_ORC
+void
+video_orc_resample_v_multaps_u16 (gint32 * ORC_RESTRICT d1,
+    const guint16 * ORC_RESTRICT s1, int p1, int n)
+{
+  int i;
+  orc_union32 *ORC_RESTRICT ptr0;
+  const orc_union16 *ORC_RESTRICT ptr4;
+  orc_union16 var33;
+  orc_union32 var34;
+  orc_union32 var35;
+  orc_union32 var36;
+
+  ptr0 = (orc_union32 *) d1;
+  ptr4 = (orc_union16 *) s1;
+
+  /* 2: loadpl */
+  var34.i = p1;
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadw */
+    var33 = ptr4[i];
+    /* 1: convuwl */
+    var36.i = (orc_uint16) var33.i;
+    /* 3: mulll */
+    var35.i = (((orc_uint32) var36.i) * ((orc_uint32) var34.i)) & 0xffffffff;
+    /* 4: storel */
+    ptr0[i] = var35;
+  }
+
+}
+
+#else
+static void
+_backup_video_orc_resample_v_multaps_u16 (OrcExecutor * ORC_RESTRICT ex)
+{
+  int i;
+  int n = ex->n;
+  orc_union32 *ORC_RESTRICT ptr0;
+  const orc_union16 *ORC_RESTRICT ptr4;
+  orc_union16 var33;
+  orc_union32 var34;
+  orc_union32 var35;
+  orc_union32 var36;
+
+  ptr0 = (orc_union32 *) ex->arrays[0];
+  ptr4 = (orc_union16 *) ex->arrays[4];
+
+  /* 2: loadpl */
+  var34.i = ex->params[24];
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadw */
+    var33 = ptr4[i];
+    /* 1: convuwl */
+    var36.i = (orc_uint16) var33.i;
+    /* 3: mulll */
+    var35.i = (((orc_uint32) var36.i) * ((orc_uint32) var34.i)) & 0xffffffff;
+    /* 4: storel */
+    ptr0[i] = var35;
+  }
+
+}
+
+void
+video_orc_resample_v_multaps_u16 (gint32 * ORC_RESTRICT d1,
+    const guint16 * ORC_RESTRICT s1, int p1, int n)
+{
+  OrcExecutor _ex, *ex = &_ex;
+  static volatile int p_inited = 0;
+  static OrcCode *c = 0;
+  void (*func) (OrcExecutor *);
+
+  if (!p_inited) {
+    orc_once_mutex_lock ();
+    if (!p_inited) {
+      OrcProgram *p;
+
+#if 1
+      static const orc_uint8 bc[] = {
+        1, 9, 32, 118, 105, 100, 101, 111, 95, 111, 114, 99, 95, 114, 101, 115,
+        97, 109, 112, 108, 101, 95, 118, 95, 109, 117, 108, 116, 97, 112, 115,
+        95,
+        117, 49, 54, 11, 4, 4, 12, 2, 2, 16, 2, 20, 4, 154, 32, 4,
+        120, 0, 32, 24, 2, 0,
+      };
+      p = orc_program_new_from_static_bytecode (bc);
+      orc_program_set_backup_function (p,
+          _backup_video_orc_resample_v_multaps_u16);
+#else
+      p = orc_program_new ();
+      orc_program_set_name (p, "video_orc_resample_v_multaps_u16");
+      orc_program_set_backup_function (p,
+          _backup_video_orc_resample_v_multaps_u16);
+      orc_program_add_destination (p, 4, "d1");
+      orc_program_add_source (p, 2, "s1");
+      orc_program_add_parameter (p, 2, "p1");
+      orc_program_add_temporary (p, 4, "t1");
+
+      orc_program_append_2 (p, "convuwl", 0, ORC_VAR_T1, ORC_VAR_S1, ORC_VAR_D1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "mulll", 0, ORC_VAR_D1, ORC_VAR_T1, ORC_VAR_P1,
+          ORC_VAR_D1);
+#endif
+
+      orc_program_compile (p);
+      c = orc_program_take_code (p);
+      orc_program_free (p);
+    }
+    p_inited = TRUE;
+    orc_once_mutex_unlock ();
+  }
+  ex->arrays[ORC_VAR_A2] = c;
+  ex->program = 0;
+
+  ex->n = n;
+  ex->arrays[ORC_VAR_D1] = d1;
+  ex->arrays[ORC_VAR_S1] = (void *) s1;
+  ex->params[ORC_VAR_P1] = p1;
+
+  func = c->exec;
+  func (ex);
+}
+#endif
+
+
+/* video_orc_resample_v_muladdtaps_u16 */
+#ifdef DISABLE_ORC
+void
+video_orc_resample_v_muladdtaps_u16 (gint32 * ORC_RESTRICT d1,
+    const guint16 * ORC_RESTRICT s1, int p1, int n)
+{
+  int i;
+  orc_union32 *ORC_RESTRICT ptr0;
+  const orc_union16 *ORC_RESTRICT ptr4;
+  orc_union16 var34;
+  orc_union16 var35;
+  orc_union32 var36;
+  orc_union32 var37;
+  orc_union32 var38;
+  orc_union32 var39;
+  orc_union32 var40;
+
+  ptr0 = (orc_union32 *) d1;
+  ptr4 = (orc_union16 *) s1;
+
+  /* 2: loadpw */
+  var35.i = p1;
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadw */
+    var34 = ptr4[i];
+    /* 1: convuwl */
+    var38.i = (orc_uint16) var34.i;
+    /* 3: convswl */
+    var39.i = var35.i;
+    /* 4: mulll */
+    var40.i = (((orc_uint32) var38.i) * ((orc_uint32) var39.i)) & 0xffffffff;
+    /* 5: loadl */
+    var36 = ptr0[i];
+    /* 6: addl */
+    var37.i = ((orc_uint32) var36.i) + ((orc_uint32) var40.i);
+    /* 7: storel */
+    ptr0[i] = var37;
+  }
+
+}
+
+#else
+static void
+_backup_video_orc_resample_v_muladdtaps_u16 (OrcExecutor * ORC_RESTRICT ex)
+{
+  int i;
+  int n = ex->n;
+  orc_union32 *ORC_RESTRICT ptr0;
+  const orc_union16 *ORC_RESTRICT ptr4;
+  orc_union16 var34;
+  orc_union16 var35;
+  orc_union32 var36;
+  orc_union32 var37;
+  orc_union32 var38;
+  orc_union32 var39;
+  orc_union32 var40;
+
+  ptr0 = (orc_union32 *) ex->arrays[0];
+  ptr4 = (orc_union16 *) ex->arrays[4];
+
+  /* 2: loadpw */
+  var35.i = ex->params[24];
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadw */
+    var34 = ptr4[i];
+    /* 1: convuwl */
+    var38.i = (orc_uint16) var34.i;
+    /* 3: convswl */
+    var39.i = var35.i;
+    /* 4: mulll */
+    var40.i = (((orc_uint32) var38.i) * ((orc_uint32) var39.i)) & 0xffffffff;
+    /* 5: loadl */
+    var36 = ptr0[i];
+    /* 6: addl */
+    var37.i = ((orc_uint32) var36.i) + ((orc_uint32) var40.i);
+    /* 7: storel */
+    ptr0[i] = var37;
+  }
+
+}
+
+void
+video_orc_resample_v_muladdtaps_u16 (gint32 * ORC_RESTRICT d1,
+    const guint16 * ORC_RESTRICT s1, int p1, int n)
+{
+  OrcExecutor _ex, *ex = &_ex;
+  static volatile int p_inited = 0;
+  static OrcCode *c = 0;
+  void (*func) (OrcExecutor *);
+
+  if (!p_inited) {
+    orc_once_mutex_lock ();
+    if (!p_inited) {
+      OrcProgram *p;
+
+#if 1
+      static const orc_uint8 bc[] = {
+        1, 9, 35, 118, 105, 100, 101, 111, 95, 111, 114, 99, 95, 114, 101, 115,
+        97, 109, 112, 108, 101, 95, 118, 95, 109, 117, 108, 97, 100, 100, 116,
+        97,
+        112, 115, 95, 117, 49, 54, 11, 4, 4, 12, 2, 2, 16, 2, 20, 4,
+        20, 4, 154, 32, 4, 153, 33, 24, 120, 32, 32, 33, 103, 0, 0, 32,
+        2, 0,
+      };
+      p = orc_program_new_from_static_bytecode (bc);
+      orc_program_set_backup_function (p,
+          _backup_video_orc_resample_v_muladdtaps_u16);
+#else
+      p = orc_program_new ();
+      orc_program_set_name (p, "video_orc_resample_v_muladdtaps_u16");
+      orc_program_set_backup_function (p,
+          _backup_video_orc_resample_v_muladdtaps_u16);
+      orc_program_add_destination (p, 4, "d1");
+      orc_program_add_source (p, 2, "s1");
+      orc_program_add_parameter (p, 2, "p1");
+      orc_program_add_temporary (p, 4, "t1");
+      orc_program_add_temporary (p, 4, "t2");
+
+      orc_program_append_2 (p, "convuwl", 0, ORC_VAR_T1, ORC_VAR_S1, ORC_VAR_D1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "convswl", 0, ORC_VAR_T2, ORC_VAR_P1, ORC_VAR_D1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "mulll", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_T2,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "addl", 0, ORC_VAR_D1, ORC_VAR_D1, ORC_VAR_T1,
+          ORC_VAR_D1);
+#endif
+
+      orc_program_compile (p);
+      c = orc_program_take_code (p);
+      orc_program_free (p);
+    }
+    p_inited = TRUE;
+    orc_once_mutex_unlock ();
+  }
+  ex->arrays[ORC_VAR_A2] = c;
+  ex->program = 0;
+
+  ex->n = n;
+  ex->arrays[ORC_VAR_D1] = d1;
+  ex->arrays[ORC_VAR_S1] = (void *) s1;
+  ex->params[ORC_VAR_P1] = p1;
+
+  func = c->exec;
+  func (ex);
+}
+#endif
+
+
+/* video_orc_resample_v_multaps_u8_lq */
+#ifdef DISABLE_ORC
+void
+video_orc_resample_v_multaps_u8_lq (gint16 * ORC_RESTRICT d1,
+    const guint8 * ORC_RESTRICT s1, int p1, int n)
+{
+  int i;
+  orc_union16 *ORC_RESTRICT ptr0;
+  const orc_int8 *ORC_RESTRICT ptr4;
+  orc_int8 var33;
+  orc_union16 var34;
+  orc_union16 var35;
+  orc_union16 var36;
+
+  ptr0 = (orc_union16 *) d1;
+  ptr4 = (orc_int8 *) s1;
+
+  /* 2: loadpw */
+  var34.i = p1;
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadb */
+    var33 = ptr4[i];
+    /* 1: convubw */
+    var36.i = (orc_uint8) var33;
+    /* 3: mullw */
+    var35.i = (var36.i * var34.i) & 0xffff;
+    /* 4: storew */
+    ptr0[i] = var35;
+  }
+
+}
+
+#else
+static void
+_backup_video_orc_resample_v_multaps_u8_lq (OrcExecutor * ORC_RESTRICT ex)
+{
+  int i;
+  int n = ex->n;
+  orc_union16 *ORC_RESTRICT ptr0;
+  const orc_int8 *ORC_RESTRICT ptr4;
+  orc_int8 var33;
+  orc_union16 var34;
+  orc_union16 var35;
+  orc_union16 var36;
+
+  ptr0 = (orc_union16 *) ex->arrays[0];
+  ptr4 = (orc_int8 *) ex->arrays[4];
+
+  /* 2: loadpw */
+  var34.i = ex->params[24];
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadb */
+    var33 = ptr4[i];
+    /* 1: convubw */
+    var36.i = (orc_uint8) var33;
+    /* 3: mullw */
+    var35.i = (var36.i * var34.i) & 0xffff;
+    /* 4: storew */
+    ptr0[i] = var35;
+  }
+
+}
+
+void
+video_orc_resample_v_multaps_u8_lq (gint16 * ORC_RESTRICT d1,
+    const guint8 * ORC_RESTRICT s1, int p1, int n)
+{
+  OrcExecutor _ex, *ex = &_ex;
+  static volatile int p_inited = 0;
+  static OrcCode *c = 0;
+  void (*func) (OrcExecutor *);
+
+  if (!p_inited) {
+    orc_once_mutex_lock ();
+    if (!p_inited) {
+      OrcProgram *p;
+
+#if 1
+      static const orc_uint8 bc[] = {
+        1, 9, 34, 118, 105, 100, 101, 111, 95, 111, 114, 99, 95, 114, 101, 115,
+        97, 109, 112, 108, 101, 95, 118, 95, 109, 117, 108, 116, 97, 112, 115,
+        95,
+        117, 56, 95, 108, 113, 11, 2, 2, 12, 1, 1, 16, 2, 20, 2, 150,
+        32, 4, 89, 0, 32, 24, 2, 0,
+      };
+      p = orc_program_new_from_static_bytecode (bc);
+      orc_program_set_backup_function (p,
+          _backup_video_orc_resample_v_multaps_u8_lq);
+#else
+      p = orc_program_new ();
+      orc_program_set_name (p, "video_orc_resample_v_multaps_u8_lq");
+      orc_program_set_backup_function (p,
+          _backup_video_orc_resample_v_multaps_u8_lq);
+      orc_program_add_destination (p, 2, "d1");
+      orc_program_add_source (p, 1, "s1");
+      orc_program_add_parameter (p, 2, "p1");
+      orc_program_add_temporary (p, 2, "t1");
+
+      orc_program_append_2 (p, "convubw", 0, ORC_VAR_T1, ORC_VAR_S1, ORC_VAR_D1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "mullw", 0, ORC_VAR_D1, ORC_VAR_T1, ORC_VAR_P1,
+          ORC_VAR_D1);
+#endif
+
+      orc_program_compile (p);
+      c = orc_program_take_code (p);
+      orc_program_free (p);
+    }
+    p_inited = TRUE;
+    orc_once_mutex_unlock ();
+  }
+  ex->arrays[ORC_VAR_A2] = c;
+  ex->program = 0;
+
+  ex->n = n;
+  ex->arrays[ORC_VAR_D1] = d1;
+  ex->arrays[ORC_VAR_S1] = (void *) s1;
+  ex->params[ORC_VAR_P1] = p1;
+
+  func = c->exec;
+  func (ex);
+}
+#endif
+
+
+/* video_orc_resample_v_multaps4_u8_lq */
+#ifdef DISABLE_ORC
+void
+video_orc_resample_v_multaps4_u8_lq (gint16 * ORC_RESTRICT d1,
+    const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2,
+    const guint8 * ORC_RESTRICT s3, const guint8 * ORC_RESTRICT s4, int p1,
+    int p2, int p3, int p4, int n)
+{
+  int i;
+  orc_union16 *ORC_RESTRICT ptr0;
+  const orc_int8 *ORC_RESTRICT ptr4;
+  const orc_int8 *ORC_RESTRICT ptr5;
+  const orc_int8 *ORC_RESTRICT ptr6;
+  const orc_int8 *ORC_RESTRICT ptr7;
+  orc_int8 var34;
+  orc_union16 var35;
+  orc_int8 var36;
+  orc_union16 var37;
+  orc_int8 var38;
+  orc_union16 var39;
+  orc_int8 var40;
+  orc_union16 var41;
+  orc_union16 var42;
+  orc_union16 var43;
+  orc_union16 var44;
+  orc_union16 var45;
+  orc_union16 var46;
+  orc_union16 var47;
+  orc_union16 var48;
+  orc_union16 var49;
+  orc_union16 var50;
+  orc_union16 var51;
+  orc_union16 var52;
+
+  ptr0 = (orc_union16 *) d1;
+  ptr4 = (orc_int8 *) s1;
+  ptr5 = (orc_int8 *) s2;
+  ptr6 = (orc_int8 *) s3;
+  ptr7 = (orc_int8 *) s4;
+
+  /* 2: loadpw */
+  var35.i = p1;
+  /* 6: loadpw */
+  var37.i = p2;
+  /* 11: loadpw */
+  var39.i = p3;
+  /* 16: loadpw */
+  var41.i = p4;
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadb */
+    var34 = ptr4[i];
+    /* 1: convubw */
+    var43.i = (orc_uint8) var34;
+    /* 3: mullw */
+    var44.i = (var43.i * var35.i) & 0xffff;
+    /* 4: loadb */
+    var36 = ptr5[i];
+    /* 5: convubw */
+    var45.i = (orc_uint8) var36;
+    /* 7: mullw */
+    var46.i = (var45.i * var37.i) & 0xffff;
+    /* 8: addw */
+    var47.i = var44.i + var46.i;
+    /* 9: loadb */
+    var38 = ptr6[i];
+    /* 10: convubw */
+    var48.i = (orc_uint8) var38;
+    /* 12: mullw */
+    var49.i = (var48.i * var39.i) & 0xffff;
+    /* 13: addw */
+    var50.i = var47.i + var49.i;
+    /* 14: loadb */
+    var40 = ptr7[i];
+    /* 15: convubw */
+    var51.i = (orc_uint8) var40;
+    /* 17: mullw */
+    var52.i = (var51.i * var41.i) & 0xffff;
+    /* 18: addw */
+    var42.i = var50.i + var52.i;
+    /* 19: storew */
+    ptr0[i] = var42;
+  }
+
+}
+
+#else
+static void
+_backup_video_orc_resample_v_multaps4_u8_lq (OrcExecutor * ORC_RESTRICT ex)
+{
+  int i;
+  int n = ex->n;
+  orc_union16 *ORC_RESTRICT ptr0;
+  const orc_int8 *ORC_RESTRICT ptr4;
+  const orc_int8 *ORC_RESTRICT ptr5;
+  const orc_int8 *ORC_RESTRICT ptr6;
+  const orc_int8 *ORC_RESTRICT ptr7;
+  orc_int8 var34;
+  orc_union16 var35;
+  orc_int8 var36;
+  orc_union16 var37;
+  orc_int8 var38;
+  orc_union16 var39;
+  orc_int8 var40;
+  orc_union16 var41;
+  orc_union16 var42;
+  orc_union16 var43;
+  orc_union16 var44;
+  orc_union16 var45;
+  orc_union16 var46;
+  orc_union16 var47;
+  orc_union16 var48;
+  orc_union16 var49;
+  orc_union16 var50;
+  orc_union16 var51;
+  orc_union16 var52;
+
+  ptr0 = (orc_union16 *) ex->arrays[0];
+  ptr4 = (orc_int8 *) ex->arrays[4];
+  ptr5 = (orc_int8 *) ex->arrays[5];
+  ptr6 = (orc_int8 *) ex->arrays[6];
+  ptr7 = (orc_int8 *) ex->arrays[7];
+
+  /* 2: loadpw */
+  var35.i = ex->params[24];
+  /* 6: loadpw */
+  var37.i = ex->params[25];
+  /* 11: loadpw */
+  var39.i = ex->params[26];
+  /* 16: loadpw */
+  var41.i = ex->params[27];
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadb */
+    var34 = ptr4[i];
+    /* 1: convubw */
+    var43.i = (orc_uint8) var34;
+    /* 3: mullw */
+    var44.i = (var43.i * var35.i) & 0xffff;
+    /* 4: loadb */
+    var36 = ptr5[i];
+    /* 5: convubw */
+    var45.i = (orc_uint8) var36;
+    /* 7: mullw */
+    var46.i = (var45.i * var37.i) & 0xffff;
+    /* 8: addw */
+    var47.i = var44.i + var46.i;
+    /* 9: loadb */
+    var38 = ptr6[i];
+    /* 10: convubw */
+    var48.i = (orc_uint8) var38;
+    /* 12: mullw */
+    var49.i = (var48.i * var39.i) & 0xffff;
+    /* 13: addw */
+    var50.i = var47.i + var49.i;
+    /* 14: loadb */
+    var40 = ptr7[i];
+    /* 15: convubw */
+    var51.i = (orc_uint8) var40;
+    /* 17: mullw */
+    var52.i = (var51.i * var41.i) & 0xffff;
+    /* 18: addw */
+    var42.i = var50.i + var52.i;
+    /* 19: storew */
+    ptr0[i] = var42;
+  }
+
+}
+
+void
+video_orc_resample_v_multaps4_u8_lq (gint16 * ORC_RESTRICT d1,
+    const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2,
+    const guint8 * ORC_RESTRICT s3, const guint8 * ORC_RESTRICT s4, int p1,
+    int p2, int p3, int p4, int n)
+{
+  OrcExecutor _ex, *ex = &_ex;
+  static volatile int p_inited = 0;
+  static OrcCode *c = 0;
+  void (*func) (OrcExecutor *);
+
+  if (!p_inited) {
+    orc_once_mutex_lock ();
+    if (!p_inited) {
+      OrcProgram *p;
+
+#if 1
+      static const orc_uint8 bc[] = {
+        1, 9, 35, 118, 105, 100, 101, 111, 95, 111, 114, 99, 95, 114, 101, 115,
+        97, 109, 112, 108, 101, 95, 118, 95, 109, 117, 108, 116, 97, 112, 115,
+        52,
+        95, 117, 56, 95, 108, 113, 11, 2, 2, 12, 1, 1, 12, 1, 1, 12,
+        1, 1, 12, 1, 1, 16, 2, 16, 2, 16, 2, 16, 2, 20, 2, 20,
+        2, 150, 32, 4, 89, 32, 32, 24, 150, 33, 5, 89, 33, 33, 25, 70,
+        32, 32, 33, 150, 33, 6, 89, 33, 33, 26, 70, 32, 32, 33, 150, 33,
+        7, 89, 33, 33, 27, 70, 0, 32, 33, 2, 0,
+      };
+      p = orc_program_new_from_static_bytecode (bc);
+      orc_program_set_backup_function (p,
+          _backup_video_orc_resample_v_multaps4_u8_lq);
+#else
+      p = orc_program_new ();
+      orc_program_set_name (p, "video_orc_resample_v_multaps4_u8_lq");
+      orc_program_set_backup_function (p,
+          _backup_video_orc_resample_v_multaps4_u8_lq);
+      orc_program_add_destination (p, 2, "d1");
+      orc_program_add_source (p, 1, "s1");
+      orc_program_add_source (p, 1, "s2");
+      orc_program_add_source (p, 1, "s3");
+      orc_program_add_source (p, 1, "s4");
+      orc_program_add_parameter (p, 2, "p1");
+      orc_program_add_parameter (p, 2, "p2");
+      orc_program_add_parameter (p, 2, "p3");
+      orc_program_add_parameter (p, 2, "p4");
+      orc_program_add_temporary (p, 2, "t1");
+      orc_program_add_temporary (p, 2, "t2");
+
+      orc_program_append_2 (p, "convubw", 0, ORC_VAR_T1, ORC_VAR_S1, ORC_VAR_D1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "mullw", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_P1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "convubw", 0, ORC_VAR_T2, ORC_VAR_S2, ORC_VAR_D1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "mullw", 0, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_P2,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "addw", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_T2,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "convubw", 0, ORC_VAR_T2, ORC_VAR_S3, ORC_VAR_D1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "mullw", 0, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_P3,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "addw", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_T2,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "convubw", 0, ORC_VAR_T2, ORC_VAR_S4, ORC_VAR_D1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "mullw", 0, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_P4,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "addw", 0, ORC_VAR_D1, ORC_VAR_T1, ORC_VAR_T2,
+          ORC_VAR_D1);
+#endif
+
+      orc_program_compile (p);
+      c = orc_program_take_code (p);
+      orc_program_free (p);
+    }
+    p_inited = TRUE;
+    orc_once_mutex_unlock ();
+  }
+  ex->arrays[ORC_VAR_A2] = c;
+  ex->program = 0;
+
+  ex->n = n;
+  ex->arrays[ORC_VAR_D1] = d1;
+  ex->arrays[ORC_VAR_S1] = (void *) s1;
+  ex->arrays[ORC_VAR_S2] = (void *) s2;
+  ex->arrays[ORC_VAR_S3] = (void *) s3;
+  ex->arrays[ORC_VAR_S4] = (void *) s4;
+  ex->params[ORC_VAR_P1] = p1;
+  ex->params[ORC_VAR_P2] = p2;
+  ex->params[ORC_VAR_P3] = p3;
+  ex->params[ORC_VAR_P4] = p4;
+
+  func = c->exec;
+  func (ex);
+}
+#endif
+
+
+/* video_orc_resample_v_muladdtaps_u8_lq */
+#ifdef DISABLE_ORC
+void
+video_orc_resample_v_muladdtaps_u8_lq (gint16 * ORC_RESTRICT d1,
+    const guint8 * ORC_RESTRICT s1, int p1, int n)
+{
+  int i;
+  orc_union16 *ORC_RESTRICT ptr0;
+  const orc_int8 *ORC_RESTRICT ptr4;
+  orc_int8 var33;
+  orc_union16 var34;
+  orc_union16 var35;
+  orc_union16 var36;
+  orc_union16 var37;
+  orc_union16 var38;
+
+  ptr0 = (orc_union16 *) d1;
+  ptr4 = (orc_int8 *) s1;
+
+  /* 2: loadpw */
+  var34.i = p1;
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadb */
+    var33 = ptr4[i];
+    /* 1: convubw */
+    var37.i = (orc_uint8) var33;
+    /* 3: mullw */
+    var38.i = (var37.i * var34.i) & 0xffff;
+    /* 4: loadw */
+    var35 = ptr0[i];
+    /* 5: addw */
+    var36.i = var35.i + var38.i;
+    /* 6: storew */
+    ptr0[i] = var36;
+  }
+
+}
+
+#else
+static void
+_backup_video_orc_resample_v_muladdtaps_u8_lq (OrcExecutor * ORC_RESTRICT ex)
+{
+  int i;
+  int n = ex->n;
+  orc_union16 *ORC_RESTRICT ptr0;
+  const orc_int8 *ORC_RESTRICT ptr4;
+  orc_int8 var33;
+  orc_union16 var34;
+  orc_union16 var35;
+  orc_union16 var36;
+  orc_union16 var37;
+  orc_union16 var38;
+
+  ptr0 = (orc_union16 *) ex->arrays[0];
+  ptr4 = (orc_int8 *) ex->arrays[4];
+
+  /* 2: loadpw */
+  var34.i = ex->params[24];
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadb */
+    var33 = ptr4[i];
+    /* 1: convubw */
+    var37.i = (orc_uint8) var33;
+    /* 3: mullw */
+    var38.i = (var37.i * var34.i) & 0xffff;
+    /* 4: loadw */
+    var35 = ptr0[i];
+    /* 5: addw */
+    var36.i = var35.i + var38.i;
+    /* 6: storew */
+    ptr0[i] = var36;
+  }
+
+}
+
+void
+video_orc_resample_v_muladdtaps_u8_lq (gint16 * ORC_RESTRICT d1,
+    const guint8 * ORC_RESTRICT s1, int p1, int n)
+{
+  OrcExecutor _ex, *ex = &_ex;
+  static volatile int p_inited = 0;
+  static OrcCode *c = 0;
+  void (*func) (OrcExecutor *);
+
+  if (!p_inited) {
+    orc_once_mutex_lock ();
+    if (!p_inited) {
+      OrcProgram *p;
+
+#if 1
+      static const orc_uint8 bc[] = {
+        1, 9, 37, 118, 105, 100, 101, 111, 95, 111, 114, 99, 95, 114, 101, 115,
+        97, 109, 112, 108, 101, 95, 118, 95, 109, 117, 108, 97, 100, 100, 116,
+        97,
+        112, 115, 95, 117, 56, 95, 108, 113, 11, 2, 2, 12, 1, 1, 16, 2,
+        20, 2, 150, 32, 4, 89, 32, 32, 24, 70, 0, 0, 32, 2, 0,
+      };
+      p = orc_program_new_from_static_bytecode (bc);
+      orc_program_set_backup_function (p,
+          _backup_video_orc_resample_v_muladdtaps_u8_lq);
+#else
+      p = orc_program_new ();
+      orc_program_set_name (p, "video_orc_resample_v_muladdtaps_u8_lq");
+      orc_program_set_backup_function (p,
+          _backup_video_orc_resample_v_muladdtaps_u8_lq);
+      orc_program_add_destination (p, 2, "d1");
+      orc_program_add_source (p, 1, "s1");
+      orc_program_add_parameter (p, 2, "p1");
+      orc_program_add_temporary (p, 2, "t1");
+
+      orc_program_append_2 (p, "convubw", 0, ORC_VAR_T1, ORC_VAR_S1, ORC_VAR_D1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "mullw", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_P1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "addw", 0, ORC_VAR_D1, ORC_VAR_D1, ORC_VAR_T1,
+          ORC_VAR_D1);
+#endif
+
+      orc_program_compile (p);
+      c = orc_program_take_code (p);
+      orc_program_free (p);
+    }
+    p_inited = TRUE;
+    orc_once_mutex_unlock ();
+  }
+  ex->arrays[ORC_VAR_A2] = c;
+  ex->program = 0;
+
+  ex->n = n;
+  ex->arrays[ORC_VAR_D1] = d1;
+  ex->arrays[ORC_VAR_S1] = (void *) s1;
+  ex->params[ORC_VAR_P1] = p1;
+
+  func = c->exec;
+  func (ex);
+}
+#endif
+
+
+/* video_orc_resample_v_muladdtaps4_u8_lq */
+#ifdef DISABLE_ORC
+void
+video_orc_resample_v_muladdtaps4_u8_lq (gint16 * ORC_RESTRICT d1,
+    const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2,
+    const guint8 * ORC_RESTRICT s3, const guint8 * ORC_RESTRICT s4, int p1,
+    int p2, int p3, int p4, int n)
+{
+  int i;
+  orc_union16 *ORC_RESTRICT ptr0;
+  const orc_int8 *ORC_RESTRICT ptr4;
+  const orc_int8 *ORC_RESTRICT ptr5;
+  const orc_int8 *ORC_RESTRICT ptr6;
+  const orc_int8 *ORC_RESTRICT ptr7;
+  orc_int8 var34;
+  orc_union16 var35;
+  orc_int8 var36;
+  orc_union16 var37;
+  orc_int8 var38;
+  orc_union16 var39;
+  orc_int8 var40;
+  orc_union16 var41;
+  orc_union16 var42;
+  orc_union16 var43;
+  orc_union16 var44;
+  orc_union16 var45;
+  orc_union16 var46;
+  orc_union16 var47;
+  orc_union16 var48;
+  orc_union16 var49;
+  orc_union16 var50;
+  orc_union16 var51;
+  orc_union16 var52;
+  orc_union16 var53;
+  orc_union16 var54;
+
+  ptr0 = (orc_union16 *) d1;
+  ptr4 = (orc_int8 *) s1;
+  ptr5 = (orc_int8 *) s2;
+  ptr6 = (orc_int8 *) s3;
+  ptr7 = (orc_int8 *) s4;
+
+  /* 2: loadpw */
+  var35.i = p1;
+  /* 6: loadpw */
+  var37.i = p2;
+  /* 11: loadpw */
+  var39.i = p3;
+  /* 16: loadpw */
+  var41.i = p4;
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadb */
+    var34 = ptr4[i];
+    /* 1: convubw */
+    var44.i = (orc_uint8) var34;
+    /* 3: mullw */
+    var45.i = (var44.i * var35.i) & 0xffff;
+    /* 4: loadb */
+    var36 = ptr5[i];
+    /* 5: convubw */
+    var46.i = (orc_uint8) var36;
+    /* 7: mullw */
+    var47.i = (var46.i * var37.i) & 0xffff;
+    /* 8: addw */
+    var48.i = var45.i + var47.i;
+    /* 9: loadb */
+    var38 = ptr6[i];
+    /* 10: convubw */
+    var49.i = (orc_uint8) var38;
+    /* 12: mullw */
+    var50.i = (var49.i * var39.i) & 0xffff;
+    /* 13: addw */
+    var51.i = var48.i + var50.i;
+    /* 14: loadb */
+    var40 = ptr7[i];
+    /* 15: convubw */
+    var52.i = (orc_uint8) var40;
+    /* 17: mullw */
+    var53.i = (var52.i * var41.i) & 0xffff;
+    /* 18: addw */
+    var54.i = var51.i + var53.i;
+    /* 19: loadw */
+    var42 = ptr0[i];
+    /* 20: addw */
+    var43.i = var42.i + var54.i;
+    /* 21: storew */
+    ptr0[i] = var43;
+  }
+
+}
+
+#else
+static void
+_backup_video_orc_resample_v_muladdtaps4_u8_lq (OrcExecutor * ORC_RESTRICT ex)
+{
+  int i;
+  int n = ex->n;
+  orc_union16 *ORC_RESTRICT ptr0;
+  const orc_int8 *ORC_RESTRICT ptr4;
+  const orc_int8 *ORC_RESTRICT ptr5;
+  const orc_int8 *ORC_RESTRICT ptr6;
+  const orc_int8 *ORC_RESTRICT ptr7;
+  orc_int8 var34;
+  orc_union16 var35;
+  orc_int8 var36;
+  orc_union16 var37;
+  orc_int8 var38;
+  orc_union16 var39;
+  orc_int8 var40;
+  orc_union16 var41;
+  orc_union16 var42;
+  orc_union16 var43;
+  orc_union16 var44;
+  orc_union16 var45;
+  orc_union16 var46;
+  orc_union16 var47;
+  orc_union16 var48;
+  orc_union16 var49;
+  orc_union16 var50;
+  orc_union16 var51;
+  orc_union16 var52;
+  orc_union16 var53;
+  orc_union16 var54;
+
+  ptr0 = (orc_union16 *) ex->arrays[0];
+  ptr4 = (orc_int8 *) ex->arrays[4];
+  ptr5 = (orc_int8 *) ex->arrays[5];
+  ptr6 = (orc_int8 *) ex->arrays[6];
+  ptr7 = (orc_int8 *) ex->arrays[7];
+
+  /* 2: loadpw */
+  var35.i = ex->params[24];
+  /* 6: loadpw */
+  var37.i = ex->params[25];
+  /* 11: loadpw */
+  var39.i = ex->params[26];
+  /* 16: loadpw */
+  var41.i = ex->params[27];
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadb */
+    var34 = ptr4[i];
+    /* 1: convubw */
+    var44.i = (orc_uint8) var34;
+    /* 3: mullw */
+    var45.i = (var44.i * var35.i) & 0xffff;
+    /* 4: loadb */
+    var36 = ptr5[i];
+    /* 5: convubw */
+    var46.i = (orc_uint8) var36;
+    /* 7: mullw */
+    var47.i = (var46.i * var37.i) & 0xffff;
+    /* 8: addw */
+    var48.i = var45.i + var47.i;
+    /* 9: loadb */
+    var38 = ptr6[i];
+    /* 10: convubw */
+    var49.i = (orc_uint8) var38;
+    /* 12: mullw */
+    var50.i = (var49.i * var39.i) & 0xffff;
+    /* 13: addw */
+    var51.i = var48.i + var50.i;
+    /* 14: loadb */
+    var40 = ptr7[i];
+    /* 15: convubw */
+    var52.i = (orc_uint8) var40;
+    /* 17: mullw */
+    var53.i = (var52.i * var41.i) & 0xffff;
+    /* 18: addw */
+    var54.i = var51.i + var53.i;
+    /* 19: loadw */
+    var42 = ptr0[i];
+    /* 20: addw */
+    var43.i = var42.i + var54.i;
+    /* 21: storew */
+    ptr0[i] = var43;
+  }
+
+}
+
+void
+video_orc_resample_v_muladdtaps4_u8_lq (gint16 * ORC_RESTRICT d1,
+    const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2,
+    const guint8 * ORC_RESTRICT s3, const guint8 * ORC_RESTRICT s4, int p1,
+    int p2, int p3, int p4, int n)
+{
+  OrcExecutor _ex, *ex = &_ex;
+  static volatile int p_inited = 0;
+  static OrcCode *c = 0;
+  void (*func) (OrcExecutor *);
+
+  if (!p_inited) {
+    orc_once_mutex_lock ();
+    if (!p_inited) {
+      OrcProgram *p;
+
+#if 1
+      static const orc_uint8 bc[] = {
+        1, 9, 38, 118, 105, 100, 101, 111, 95, 111, 114, 99, 95, 114, 101, 115,
+        97, 109, 112, 108, 101, 95, 118, 95, 109, 117, 108, 97, 100, 100, 116,
+        97,
+        112, 115, 52, 95, 117, 56, 95, 108, 113, 11, 2, 2, 12, 1, 1, 12,
+        1, 1, 12, 1, 1, 12, 1, 1, 16, 2, 16, 2, 16, 2, 16, 2,
+        20, 2, 20, 2, 150, 32, 4, 89, 32, 32, 24, 150, 33, 5, 89, 33,
+        33, 25, 70, 32, 32, 33, 150, 33, 6, 89, 33, 33, 26, 70, 32, 32,
+        33, 150, 33, 7, 89, 33, 33, 27, 70, 32, 32, 33, 70, 0, 0, 32,
+        2, 0,
+      };
+      p = orc_program_new_from_static_bytecode (bc);
+      orc_program_set_backup_function (p,
+          _backup_video_orc_resample_v_muladdtaps4_u8_lq);
+#else
+      p = orc_program_new ();
+      orc_program_set_name (p, "video_orc_resample_v_muladdtaps4_u8_lq");
+      orc_program_set_backup_function (p,
+          _backup_video_orc_resample_v_muladdtaps4_u8_lq);
+      orc_program_add_destination (p, 2, "d1");
+      orc_program_add_source (p, 1, "s1");
+      orc_program_add_source (p, 1, "s2");
+      orc_program_add_source (p, 1, "s3");
+      orc_program_add_source (p, 1, "s4");
+      orc_program_add_parameter (p, 2, "p1");
+      orc_program_add_parameter (p, 2, "p2");
+      orc_program_add_parameter (p, 2, "p3");
+      orc_program_add_parameter (p, 2, "p4");
+      orc_program_add_temporary (p, 2, "t1");
+      orc_program_add_temporary (p, 2, "t2");
+
+      orc_program_append_2 (p, "convubw", 0, ORC_VAR_T1, ORC_VAR_S1, ORC_VAR_D1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "mullw", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_P1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "convubw", 0, ORC_VAR_T2, ORC_VAR_S2, ORC_VAR_D1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "mullw", 0, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_P2,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "addw", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_T2,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "convubw", 0, ORC_VAR_T2, ORC_VAR_S3, ORC_VAR_D1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "mullw", 0, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_P3,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "addw", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_T2,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "convubw", 0, ORC_VAR_T2, ORC_VAR_S4, ORC_VAR_D1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "mullw", 0, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_P4,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "addw", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_T2,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "addw", 0, ORC_VAR_D1, ORC_VAR_D1, ORC_VAR_T1,
+          ORC_VAR_D1);
+#endif
+
+      orc_program_compile (p);
+      c = orc_program_take_code (p);
+      orc_program_free (p);
+    }
+    p_inited = TRUE;
+    orc_once_mutex_unlock ();
+  }
+  ex->arrays[ORC_VAR_A2] = c;
+  ex->program = 0;
+
+  ex->n = n;
+  ex->arrays[ORC_VAR_D1] = d1;
+  ex->arrays[ORC_VAR_S1] = (void *) s1;
+  ex->arrays[ORC_VAR_S2] = (void *) s2;
+  ex->arrays[ORC_VAR_S3] = (void *) s3;
+  ex->arrays[ORC_VAR_S4] = (void *) s4;
+  ex->params[ORC_VAR_P1] = p1;
+  ex->params[ORC_VAR_P2] = p2;
+  ex->params[ORC_VAR_P3] = p3;
+  ex->params[ORC_VAR_P4] = p4;
+
+  func = c->exec;
+  func (ex);
+}
+#endif
+
+
+/* video_orc_resample_v_muladdscaletaps4_u8_lq */
+#ifdef DISABLE_ORC
+void
+video_orc_resample_v_muladdscaletaps4_u8_lq (guint8 * ORC_RESTRICT d1,
+    const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2,
+    const guint8 * ORC_RESTRICT s3, const guint8 * ORC_RESTRICT s4,
+    const gint16 * ORC_RESTRICT s5, int p1, int p2, int p3, int p4, int n)
+{
+  int i;
+  orc_int8 *ORC_RESTRICT ptr0;
+  const orc_int8 *ORC_RESTRICT ptr4;
+  const orc_int8 *ORC_RESTRICT ptr5;
+  const orc_int8 *ORC_RESTRICT ptr6;
+  const orc_int8 *ORC_RESTRICT ptr7;
+  const orc_union16 *ORC_RESTRICT ptr8;
+  orc_int8 var34;
+  orc_union16 var35;
+  orc_int8 var36;
+  orc_union16 var37;
+  orc_int8 var38;
+  orc_union16 var39;
+  orc_int8 var40;
+  orc_union16 var41;
+  orc_union16 var42;
+#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
+  volatile orc_union16 var43;
+#else
+  orc_union16 var43;
+#endif
+  orc_int8 var44;
+  orc_union16 var45;
+  orc_union16 var46;
+  orc_union16 var47;
+  orc_union16 var48;
+  orc_union16 var49;
+  orc_union16 var50;
+  orc_union16 var51;
+  orc_union16 var52;
+  orc_union16 var53;
+  orc_union16 var54;
+  orc_union16 var55;
+  orc_union16 var56;
+  orc_union16 var57;
+  orc_union16 var58;
+
+  ptr0 = (orc_int8 *) d1;
+  ptr4 = (orc_int8 *) s1;
+  ptr5 = (orc_int8 *) s2;
+  ptr6 = (orc_int8 *) s3;
+  ptr7 = (orc_int8 *) s4;
+  ptr8 = (orc_union16 *) s5;
+
+  /* 2: loadpw */
+  var35.i = p1;
+  /* 6: loadpw */
+  var37.i = p2;
+  /* 11: loadpw */
+  var39.i = p3;
+  /* 16: loadpw */
+  var41.i = p4;
+  /* 21: loadpw */
+  var43.i = (int) 0x00000020;   /* 32 or 1.58101e-322f */
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadb */
+    var34 = ptr4[i];
+    /* 1: convubw */
+    var45.i = (orc_uint8) var34;
+    /* 3: mullw */
+    var46.i = (var45.i * var35.i) & 0xffff;
+    /* 4: loadb */
+    var36 = ptr5[i];
+    /* 5: convubw */
+    var47.i = (orc_uint8) var36;
+    /* 7: mullw */
+    var48.i = (var47.i * var37.i) & 0xffff;
+    /* 8: addw */
+    var49.i = var46.i + var48.i;
+    /* 9: loadb */
+    var38 = ptr6[i];
+    /* 10: convubw */
+    var50.i = (orc_uint8) var38;
+    /* 12: mullw */
+    var51.i = (var50.i * var39.i) & 0xffff;
+    /* 13: addw */
+    var52.i = var49.i + var51.i;
+    /* 14: loadb */
+    var40 = ptr7[i];
+    /* 15: convubw */
+    var53.i = (orc_uint8) var40;
+    /* 17: mullw */
+    var54.i = (var53.i * var41.i) & 0xffff;
+    /* 18: addw */
+    var55.i = var52.i + var54.i;
+    /* 19: loadw */
+    var42 = ptr8[i];
+    /* 20: addw */
+    var56.i = var55.i + var42.i;
+    /* 22: addw */
+    var57.i = var56.i + var43.i;
+    /* 23: shrsw */
+    var58.i = var57.i >> 6;
+    /* 24: convsuswb */
+    var44 = ORC_CLAMP_UB (var58.i);
+    /* 25: storeb */
+    ptr0[i] = var44;
+  }
+
+}
+
+#else
+static void
+_backup_video_orc_resample_v_muladdscaletaps4_u8_lq (OrcExecutor *
+    ORC_RESTRICT ex)
+{
+  int i;
+  int n = ex->n;
+  orc_int8 *ORC_RESTRICT ptr0;
+  const orc_int8 *ORC_RESTRICT ptr4;
+  const orc_int8 *ORC_RESTRICT ptr5;
+  const orc_int8 *ORC_RESTRICT ptr6;
+  const orc_int8 *ORC_RESTRICT ptr7;
+  const orc_union16 *ORC_RESTRICT ptr8;
+  orc_int8 var34;
+  orc_union16 var35;
+  orc_int8 var36;
+  orc_union16 var37;
+  orc_int8 var38;
+  orc_union16 var39;
+  orc_int8 var40;
+  orc_union16 var41;
+  orc_union16 var42;
+#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
+  volatile orc_union16 var43;
+#else
+  orc_union16 var43;
+#endif
+  orc_int8 var44;
+  orc_union16 var45;
+  orc_union16 var46;
+  orc_union16 var47;
+  orc_union16 var48;
+  orc_union16 var49;
+  orc_union16 var50;
+  orc_union16 var51;
+  orc_union16 var52;
+  orc_union16 var53;
+  orc_union16 var54;
+  orc_union16 var55;
+  orc_union16 var56;
+  orc_union16 var57;
+  orc_union16 var58;
+
+  ptr0 = (orc_int8 *) ex->arrays[0];
+  ptr4 = (orc_int8 *) ex->arrays[4];
+  ptr5 = (orc_int8 *) ex->arrays[5];
+  ptr6 = (orc_int8 *) ex->arrays[6];
+  ptr7 = (orc_int8 *) ex->arrays[7];
+  ptr8 = (orc_union16 *) ex->arrays[8];
+
+  /* 2: loadpw */
+  var35.i = ex->params[24];
+  /* 6: loadpw */
+  var37.i = ex->params[25];
+  /* 11: loadpw */
+  var39.i = ex->params[26];
+  /* 16: loadpw */
+  var41.i = ex->params[27];
+  /* 21: loadpw */
+  var43.i = (int) 0x00000020;   /* 32 or 1.58101e-322f */
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadb */
+    var34 = ptr4[i];
+    /* 1: convubw */
+    var45.i = (orc_uint8) var34;
+    /* 3: mullw */
+    var46.i = (var45.i * var35.i) & 0xffff;
+    /* 4: loadb */
+    var36 = ptr5[i];
+    /* 5: convubw */
+    var47.i = (orc_uint8) var36;
+    /* 7: mullw */
+    var48.i = (var47.i * var37.i) & 0xffff;
+    /* 8: addw */
+    var49.i = var46.i + var48.i;
+    /* 9: loadb */
+    var38 = ptr6[i];
+    /* 10: convubw */
+    var50.i = (orc_uint8) var38;
+    /* 12: mullw */
+    var51.i = (var50.i * var39.i) & 0xffff;
+    /* 13: addw */
+    var52.i = var49.i + var51.i;
+    /* 14: loadb */
+    var40 = ptr7[i];
+    /* 15: convubw */
+    var53.i = (orc_uint8) var40;
+    /* 17: mullw */
+    var54.i = (var53.i * var41.i) & 0xffff;
+    /* 18: addw */
+    var55.i = var52.i + var54.i;
+    /* 19: loadw */
+    var42 = ptr8[i];
+    /* 20: addw */
+    var56.i = var55.i + var42.i;
+    /* 22: addw */
+    var57.i = var56.i + var43.i;
+    /* 23: shrsw */
+    var58.i = var57.i >> 6;
+    /* 24: convsuswb */
+    var44 = ORC_CLAMP_UB (var58.i);
+    /* 25: storeb */
+    ptr0[i] = var44;
+  }
+
+}
+
+void
+video_orc_resample_v_muladdscaletaps4_u8_lq (guint8 * ORC_RESTRICT d1,
+    const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2,
+    const guint8 * ORC_RESTRICT s3, const guint8 * ORC_RESTRICT s4,
+    const gint16 * ORC_RESTRICT s5, int p1, int p2, int p3, int p4, int n)
+{
+  OrcExecutor _ex, *ex = &_ex;
+  static volatile int p_inited = 0;
+  static OrcCode *c = 0;
+  void (*func) (OrcExecutor *);
+
+  if (!p_inited) {
+    orc_once_mutex_lock ();
+    if (!p_inited) {
+      OrcProgram *p;
+
+#if 1
+      static const orc_uint8 bc[] = {
+        1, 9, 43, 118, 105, 100, 101, 111, 95, 111, 114, 99, 95, 114, 101, 115,
+        97, 109, 112, 108, 101, 95, 118, 95, 109, 117, 108, 97, 100, 100, 115,
+        99,
+        97, 108, 101, 116, 97, 112, 115, 52, 95, 117, 56, 95, 108, 113, 11, 1,
+        1, 12, 1, 1, 12, 1, 1, 12, 1, 1, 12, 1, 1, 12, 2, 2,
+        14, 2, 32, 0, 0, 0, 14, 2, 6, 0, 0, 0, 16, 2, 16, 2,
+        16, 2, 16, 2, 20, 2, 20, 2, 150, 32, 4, 89, 32, 32, 24, 150,
+        33, 5, 89, 33, 33, 25, 70, 32, 32, 33, 150, 33, 6, 89, 33, 33,
+        26, 70, 32, 32, 33, 150, 33, 7, 89, 33, 33, 27, 70, 32, 32, 33,
+        70, 32, 32, 8, 70, 32, 32, 16, 94, 32, 32, 17, 160, 0, 32, 2,
+        0,
+      };
+      p = orc_program_new_from_static_bytecode (bc);
+      orc_program_set_backup_function (p,
+          _backup_video_orc_resample_v_muladdscaletaps4_u8_lq);
+#else
+      p = orc_program_new ();
+      orc_program_set_name (p, "video_orc_resample_v_muladdscaletaps4_u8_lq");
+      orc_program_set_backup_function (p,
+          _backup_video_orc_resample_v_muladdscaletaps4_u8_lq);
+      orc_program_add_destination (p, 1, "d1");
+      orc_program_add_source (p, 1, "s1");
+      orc_program_add_source (p, 1, "s2");
+      orc_program_add_source (p, 1, "s3");
+      orc_program_add_source (p, 1, "s4");
+      orc_program_add_source (p, 2, "s5");
+      orc_program_add_constant (p, 2, 0x00000020, "c1");
+      orc_program_add_constant (p, 2, 0x00000006, "c2");
+      orc_program_add_parameter (p, 2, "p1");
+      orc_program_add_parameter (p, 2, "p2");
+      orc_program_add_parameter (p, 2, "p3");
+      orc_program_add_parameter (p, 2, "p4");
+      orc_program_add_temporary (p, 2, "t1");
+      orc_program_add_temporary (p, 2, "t2");
+
+      orc_program_append_2 (p, "convubw", 0, ORC_VAR_T1, ORC_VAR_S1, ORC_VAR_D1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "mullw", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_P1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "convubw", 0, ORC_VAR_T2, ORC_VAR_S2, ORC_VAR_D1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "mullw", 0, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_P2,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "addw", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_T2,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "convubw", 0, ORC_VAR_T2, ORC_VAR_S3, ORC_VAR_D1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "mullw", 0, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_P3,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "addw", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_T2,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "convubw", 0, ORC_VAR_T2, ORC_VAR_S4, ORC_VAR_D1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "mullw", 0, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_P4,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "addw", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_T2,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "addw", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_S5,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "addw", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_C1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "shrsw", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_C2,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "convsuswb", 0, ORC_VAR_D1, ORC_VAR_T1,
+          ORC_VAR_D1, ORC_VAR_D1);
+#endif
+
+      orc_program_compile (p);
+      c = orc_program_take_code (p);
+      orc_program_free (p);
+    }
+    p_inited = TRUE;
+    orc_once_mutex_unlock ();
+  }
+  ex->arrays[ORC_VAR_A2] = c;
+  ex->program = 0;
+
+  ex->n = n;
+  ex->arrays[ORC_VAR_D1] = d1;
+  ex->arrays[ORC_VAR_S1] = (void *) s1;
+  ex->arrays[ORC_VAR_S2] = (void *) s2;
+  ex->arrays[ORC_VAR_S3] = (void *) s3;
+  ex->arrays[ORC_VAR_S4] = (void *) s4;
+  ex->arrays[ORC_VAR_S5] = (void *) s5;
+  ex->params[ORC_VAR_P1] = p1;
+  ex->params[ORC_VAR_P2] = p2;
+  ex->params[ORC_VAR_P3] = p3;
+  ex->params[ORC_VAR_P4] = p4;
+
+  func = c->exec;
+  func (ex);
+}
+#endif
+
+
+/* video_orc_chroma_down_h2_u8 */
+#ifdef DISABLE_ORC
+void
+video_orc_chroma_down_h2_u8 (guint8 * ORC_RESTRICT d1,
+    const guint8 * ORC_RESTRICT s1, int n)
+{
+  int i;
+  orc_union64 *ORC_RESTRICT ptr0;
+  const orc_union64 *ORC_RESTRICT ptr4;
+  orc_union64 var37;
+  orc_union64 var38;
+  orc_union32 var39;
+  orc_union32 var40;
+  orc_union16 var41;
+  orc_union16 var42;
+  orc_union16 var43;
+  orc_union16 var44;
+  orc_union32 var45;
+
+  ptr0 = (orc_union64 *) d1;
+  ptr4 = (orc_union64 *) s1;
+
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadq */
+    var37 = ptr4[i];
+    /* 1: splitql */
+    {
+      orc_union64 _src;
+      _src.i = var37.i;
+      var39.i = _src.x2[1];
+      var40.i = _src.x2[0];
+    }
+    /* 2: splitlw */
+    {
+      orc_union32 _src;
+      _src.i = var40.i;
+      var41.i = _src.x2[1];
+      var42.i = _src.x2[0];
+    }
+    /* 3: select1lw */
+    {
+      orc_union32 _src;
+      _src.i = var39.i;
+      var43.i = _src.x2[1];
+    }
+    /* 4: avgub */
+    var44.x2[0] = ((orc_uint8) var41.x2[0] + (orc_uint8) var43.x2[0] + 1) >> 1;
+    var44.x2[1] = ((orc_uint8) var41.x2[1] + (orc_uint8) var43.x2[1] + 1) >> 1;
+    /* 5: mergewl */
+    {
+      orc_union32 _dest;
+      _dest.x2[0] = var42.i;
+      _dest.x2[1] = var44.i;
+      var45.i = _dest.i;
+    }
+    /* 6: mergelq */
+    {
+      orc_union64 _dest;
+      _dest.x2[0] = var45.i;
+      _dest.x2[1] = var39.i;
+      var38.i = _dest.i;
+    }
+    /* 7: storeq */
+    ptr0[i] = var38;
+  }
+
+}
+
+#else
+static void
+_backup_video_orc_chroma_down_h2_u8 (OrcExecutor * ORC_RESTRICT ex)
+{
+  int i;
+  int n = ex->n;
+  orc_union64 *ORC_RESTRICT ptr0;
+  const orc_union64 *ORC_RESTRICT ptr4;
+  orc_union64 var37;
+  orc_union64 var38;
+  orc_union32 var39;
+  orc_union32 var40;
+  orc_union16 var41;
+  orc_union16 var42;
+  orc_union16 var43;
+  orc_union16 var44;
+  orc_union32 var45;
+
+  ptr0 = (orc_union64 *) ex->arrays[0];
+  ptr4 = (orc_union64 *) ex->arrays[4];
+
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadq */
+    var37 = ptr4[i];
+    /* 1: splitql */
+    {
+      orc_union64 _src;
+      _src.i = var37.i;
+      var39.i = _src.x2[1];
+      var40.i = _src.x2[0];
+    }
+    /* 2: splitlw */
+    {
+      orc_union32 _src;
+      _src.i = var40.i;
+      var41.i = _src.x2[1];
+      var42.i = _src.x2[0];
+    }
+    /* 3: select1lw */
+    {
+      orc_union32 _src;
+      _src.i = var39.i;
+      var43.i = _src.x2[1];
+    }
+    /* 4: avgub */
+    var44.x2[0] = ((orc_uint8) var41.x2[0] + (orc_uint8) var43.x2[0] + 1) >> 1;
+    var44.x2[1] = ((orc_uint8) var41.x2[1] + (orc_uint8) var43.x2[1] + 1) >> 1;
+    /* 5: mergewl */
+    {
+      orc_union32 _dest;
+      _dest.x2[0] = var42.i;
+      _dest.x2[1] = var44.i;
+      var45.i = _dest.i;
+    }
+    /* 6: mergelq */
+    {
+      orc_union64 _dest;
+      _dest.x2[0] = var45.i;
+      _dest.x2[1] = var39.i;
+      var38.i = _dest.i;
+    }
+    /* 7: storeq */
+    ptr0[i] = var38;
+  }
+
+}
+
+void
+video_orc_chroma_down_h2_u8 (guint8 * ORC_RESTRICT d1,
+    const guint8 * ORC_RESTRICT s1, int n)
+{
+  OrcExecutor _ex, *ex = &_ex;
+  static volatile int p_inited = 0;
+  static OrcCode *c = 0;
+  void (*func) (OrcExecutor *);
+
+  if (!p_inited) {
+    orc_once_mutex_lock ();
+    if (!p_inited) {
+      OrcProgram *p;
+
+#if 1
+      static const orc_uint8 bc[] = {
+        1, 9, 27, 118, 105, 100, 101, 111, 95, 111, 114, 99, 95, 99, 104, 114,
+        111, 109, 97, 95, 100, 111, 119, 110, 95, 104, 50, 95, 117, 56, 11, 8,
+        8, 12, 8, 8, 20, 4, 20, 4, 20, 2, 20, 2, 20, 2, 197, 33,
+        32, 4, 198, 35, 34, 32, 191, 36, 33, 21, 1, 39, 35, 35, 36, 195,
+        32, 34, 35, 194, 0, 32, 33, 2, 0,
+      };
+      p = orc_program_new_from_static_bytecode (bc);
+      orc_program_set_backup_function (p, _backup_video_orc_chroma_down_h2_u8);
+#else
+      p = orc_program_new ();
+      orc_program_set_name (p, "video_orc_chroma_down_h2_u8");
+      orc_program_set_backup_function (p, _backup_video_orc_chroma_down_h2_u8);
+      orc_program_add_destination (p, 8, "d1");
+      orc_program_add_source (p, 8, "s1");
+      orc_program_add_temporary (p, 4, "t1");
+      orc_program_add_temporary (p, 4, "t2");
+      orc_program_add_temporary (p, 2, "t3");
+      orc_program_add_temporary (p, 2, "t4");
+      orc_program_add_temporary (p, 2, "t5");
+
+      orc_program_append_2 (p, "splitql", 0, ORC_VAR_T2, ORC_VAR_T1, ORC_VAR_S1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "splitlw", 0, ORC_VAR_T4, ORC_VAR_T3, ORC_VAR_T1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "select1lw", 0, ORC_VAR_T5, ORC_VAR_T2,
+          ORC_VAR_D1, ORC_VAR_D1);
+      orc_program_append_2 (p, "avgub", 1, ORC_VAR_T4, ORC_VAR_T4, ORC_VAR_T5,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "mergewl", 0, ORC_VAR_T1, ORC_VAR_T3, ORC_VAR_T4,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "mergelq", 0, ORC_VAR_D1, ORC_VAR_T1, ORC_VAR_T2,
+          ORC_VAR_D1);
+#endif
+
+      orc_program_compile (p);
+      c = orc_program_take_code (p);
+      orc_program_free (p);
+    }
+    p_inited = TRUE;
+    orc_once_mutex_unlock ();
+  }
+  ex->arrays[ORC_VAR_A2] = c;
+  ex->program = 0;
+
+  ex->n = n;
+  ex->arrays[ORC_VAR_D1] = d1;
+  ex->arrays[ORC_VAR_S1] = (void *) s1;
+
+  func = c->exec;
+  func (ex);
+}
+#endif
+
+
+/* video_orc_chroma_down_v2_u8 */
+#ifdef DISABLE_ORC
+void
+video_orc_chroma_down_v2_u8 (guint8 * ORC_RESTRICT d1,
+    const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, int n)
+{
+  int i;
+  orc_union32 *ORC_RESTRICT ptr0;
+  const orc_union32 *ORC_RESTRICT ptr4;
+  const orc_union32 *ORC_RESTRICT ptr5;
+  orc_union32 var35;
+  orc_union32 var36;
+  orc_union32 var37;
+  orc_union16 var38;
+  orc_union16 var39;
+  orc_union16 var40;
+  orc_union16 var41;
+
+  ptr0 = (orc_union32 *) d1;
+  ptr4 = (orc_union32 *) s1;
+  ptr5 = (orc_union32 *) s2;
+
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadl */
+    var35 = ptr4[i];
+    /* 1: splitlw */
+    {
+      orc_union32 _src;
+      _src.i = var35.i;
+      var38.i = _src.x2[1];
+      var39.i = _src.x2[0];
+    }
+    /* 2: loadl */
+    var36 = ptr5[i];
+    /* 3: select1lw */
+    {
+      orc_union32 _src;
+      _src.i = var36.i;
+      var40.i = _src.x2[1];
+    }
+    /* 4: avgub */
+    var41.x2[0] = ((orc_uint8) var38.x2[0] + (orc_uint8) var40.x2[0] + 1) >> 1;
+    var41.x2[1] = ((orc_uint8) var38.x2[1] + (orc_uint8) var40.x2[1] + 1) >> 1;
+    /* 5: mergewl */
+    {
+      orc_union32 _dest;
+      _dest.x2[0] = var39.i;
+      _dest.x2[1] = var41.i;
+      var37.i = _dest.i;
+    }
+    /* 6: storel */
+    ptr0[i] = var37;
+  }
+
+}
+
+#else
+static void
+_backup_video_orc_chroma_down_v2_u8 (OrcExecutor * ORC_RESTRICT ex)
+{
+  int i;
+  int n = ex->n;
+  orc_union32 *ORC_RESTRICT ptr0;
+  const orc_union32 *ORC_RESTRICT ptr4;
+  const orc_union32 *ORC_RESTRICT ptr5;
+  orc_union32 var35;
+  orc_union32 var36;
+  orc_union32 var37;
+  orc_union16 var38;
+  orc_union16 var39;
+  orc_union16 var40;
+  orc_union16 var41;
+
+  ptr0 = (orc_union32 *) ex->arrays[0];
+  ptr4 = (orc_union32 *) ex->arrays[4];
+  ptr5 = (orc_union32 *) ex->arrays[5];
+
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadl */
+    var35 = ptr4[i];
+    /* 1: splitlw */
+    {
+      orc_union32 _src;
+      _src.i = var35.i;
+      var38.i = _src.x2[1];
+      var39.i = _src.x2[0];
+    }
+    /* 2: loadl */
+    var36 = ptr5[i];
+    /* 3: select1lw */
+    {
+      orc_union32 _src;
+      _src.i = var36.i;
+      var40.i = _src.x2[1];
+    }
+    /* 4: avgub */
+    var41.x2[0] = ((orc_uint8) var38.x2[0] + (orc_uint8) var40.x2[0] + 1) >> 1;
+    var41.x2[1] = ((orc_uint8) var38.x2[1] + (orc_uint8) var40.x2[1] + 1) >> 1;
+    /* 5: mergewl */
+    {
+      orc_union32 _dest;
+      _dest.x2[0] = var39.i;
+      _dest.x2[1] = var41.i;
+      var37.i = _dest.i;
+    }
+    /* 6: storel */
+    ptr0[i] = var37;
+  }
+
+}
+
+void
+video_orc_chroma_down_v2_u8 (guint8 * ORC_RESTRICT d1,
+    const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, int n)
+{
+  OrcExecutor _ex, *ex = &_ex;
+  static volatile int p_inited = 0;
+  static OrcCode *c = 0;
+  void (*func) (OrcExecutor *);
+
+  if (!p_inited) {
+    orc_once_mutex_lock ();
+    if (!p_inited) {
+      OrcProgram *p;
+
+#if 1
+      static const orc_uint8 bc[] = {
+        1, 9, 27, 118, 105, 100, 101, 111, 95, 111, 114, 99, 95, 99, 104, 114,
+        111, 109, 97, 95, 100, 111, 119, 110, 95, 118, 50, 95, 117, 56, 11, 4,
+        4, 12, 4, 4, 12, 4, 4, 20, 2, 20, 2, 20, 2, 198, 33, 32,
+        4, 191, 34, 5, 21, 1, 39, 33, 33, 34, 195, 0, 32, 33, 2, 0,
+
+      };
+      p = orc_program_new_from_static_bytecode (bc);
+      orc_program_set_backup_function (p, _backup_video_orc_chroma_down_v2_u8);
+#else
+      p = orc_program_new ();
+      orc_program_set_name (p, "video_orc_chroma_down_v2_u8");
+      orc_program_set_backup_function (p, _backup_video_orc_chroma_down_v2_u8);
+      orc_program_add_destination (p, 4, "d1");
+      orc_program_add_source (p, 4, "s1");
+      orc_program_add_source (p, 4, "s2");
+      orc_program_add_temporary (p, 2, "t1");
+      orc_program_add_temporary (p, 2, "t2");
+      orc_program_add_temporary (p, 2, "t3");
+
+      orc_program_append_2 (p, "splitlw", 0, ORC_VAR_T2, ORC_VAR_T1, ORC_VAR_S1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "select1lw", 0, ORC_VAR_T3, ORC_VAR_S2,
+          ORC_VAR_D1, ORC_VAR_D1);
+      orc_program_append_2 (p, "avgub", 1, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_T3,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "mergewl", 0, ORC_VAR_D1, ORC_VAR_T1, ORC_VAR_T2,
+          ORC_VAR_D1);
+#endif
+
+      orc_program_compile (p);
+      c = orc_program_take_code (p);
+      orc_program_free (p);
+    }
+    p_inited = TRUE;
+    orc_once_mutex_unlock ();
+  }
+  ex->arrays[ORC_VAR_A2] = c;
+  ex->program = 0;
+
+  ex->n = n;
+  ex->arrays[ORC_VAR_D1] = d1;
+  ex->arrays[ORC_VAR_S1] = (void *) s1;
+  ex->arrays[ORC_VAR_S2] = (void *) s2;
+
+  func = c->exec;
+  func (ex);
+}
+#endif
+
+
+/* video_orc_chroma_up_v2_u8 */
+#ifdef DISABLE_ORC
+void
+video_orc_chroma_up_v2_u8 (guint8 * ORC_RESTRICT d1, guint8 * ORC_RESTRICT d2,
+    const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, int n)
+{
+  int i;
+  orc_union32 *ORC_RESTRICT ptr0;
+  orc_union32 *ORC_RESTRICT ptr1;
+  const orc_union32 *ORC_RESTRICT ptr4;
+  const orc_union32 *ORC_RESTRICT ptr5;
+  orc_union32 var39;
+  orc_union32 var40;
+#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
+  volatile orc_union32 var41;
+#else
+  orc_union32 var41;
+#endif
+#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
+  volatile orc_union32 var42;
+#else
+  orc_union32 var42;
+#endif
+  orc_union32 var43;
+  orc_union32 var44;
+  orc_union16 var45;
+  orc_union16 var46;
+  orc_union16 var47;
+  orc_union16 var48;
+  orc_union32 var49;
+  orc_union32 var50;
+  orc_union32 var51;
+  orc_union32 var52;
+  orc_union32 var53;
+  orc_union32 var54;
+  orc_union16 var55;
+  orc_union32 var56;
+  orc_union32 var57;
+  orc_union32 var58;
+  orc_union32 var59;
+  orc_union16 var60;
+
+  ptr0 = (orc_union32 *) d1;
+  ptr1 = (orc_union32 *) d2;
+  ptr4 = (orc_union32 *) s1;
+  ptr5 = (orc_union32 *) s2;
+
+  /* 6: loadpw */
+  var41.x2[0] = (int) 0x00000003;       /* 3 or 1.4822e-323f */
+  var41.x2[1] = (int) 0x00000003;       /* 3 or 1.4822e-323f */
+  /* 9: loadpw */
+  var42.x2[0] = (int) 0x00000002;       /* 2 or 9.88131e-324f */
+  var42.x2[1] = (int) 0x00000002;       /* 2 or 9.88131e-324f */
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadl */
+    var39 = ptr4[i];
+    /* 1: splitlw */
+    {
+      orc_union32 _src;
+      _src.i = var39.i;
+      var45.i = _src.x2[1];
+      var46.i = _src.x2[0];
+    }
+    /* 2: loadl */
+    var40 = ptr5[i];
+    /* 3: splitlw */
+    {
+      orc_union32 _src;
+      _src.i = var40.i;
+      var47.i = _src.x2[1];
+      var48.i = _src.x2[0];
+    }
+    /* 4: convubw */
+    var49.x2[0] = (orc_uint8) var45.x2[0];
+    var49.x2[1] = (orc_uint8) var45.x2[1];
+    /* 5: convubw */
+    var50.x2[0] = (orc_uint8) var47.x2[0];
+    var50.x2[1] = (orc_uint8) var47.x2[1];
+    /* 7: mullw */
+    var51.x2[0] = (var49.x2[0] * var41.x2[0]) & 0xffff;
+    var51.x2[1] = (var49.x2[1] * var41.x2[1]) & 0xffff;
+    /* 8: addw */
+    var52.x2[0] = var51.x2[0] + var50.x2[0];
+    var52.x2[1] = var51.x2[1] + var50.x2[1];
+    /* 10: addw */
+    var53.x2[0] = var52.x2[0] + var42.x2[0];
+    var53.x2[1] = var52.x2[1] + var42.x2[1];
+    /* 11: shruw */
+    var54.x2[0] = ((orc_uint16) var53.x2[0]) >> 2;
+    var54.x2[1] = ((orc_uint16) var53.x2[1]) >> 2;
+    /* 12: convsuswb */
+    var55.x2[0] = ORC_CLAMP_UB (var54.x2[0]);
+    var55.x2[1] = ORC_CLAMP_UB (var54.x2[1]);
+    /* 13: mergewl */
+    {
+      orc_union32 _dest;
+      _dest.x2[0] = var46.i;
+      _dest.x2[1] = var55.i;
+      var43.i = _dest.i;
+    }
+    /* 14: storel */
+    ptr0[i] = var43;
+    /* 15: mullw */
+    var56.x2[0] = (var50.x2[0] * var41.x2[0]) & 0xffff;
+    var56.x2[1] = (var50.x2[1] * var41.x2[1]) & 0xffff;
+    /* 16: addw */
+    var57.x2[0] = var56.x2[0] + var49.x2[0];
+    var57.x2[1] = var56.x2[1] + var49.x2[1];
+    /* 17: addw */
+    var58.x2[0] = var57.x2[0] + var42.x2[0];
+    var58.x2[1] = var57.x2[1] + var42.x2[1];
+    /* 18: shruw */
+    var59.x2[0] = ((orc_uint16) var58.x2[0]) >> 2;
+    var59.x2[1] = ((orc_uint16) var58.x2[1]) >> 2;
+    /* 19: convsuswb */
+    var60.x2[0] = ORC_CLAMP_UB (var59.x2[0]);
+    var60.x2[1] = ORC_CLAMP_UB (var59.x2[1]);
+    /* 20: mergewl */
+    {
+      orc_union32 _dest;
+      _dest.x2[0] = var48.i;
+      _dest.x2[1] = var60.i;
+      var44.i = _dest.i;
+    }
+    /* 21: storel */
+    ptr1[i] = var44;
+  }
+
+}
+
+#else
+static void
+_backup_video_orc_chroma_up_v2_u8 (OrcExecutor * ORC_RESTRICT ex)
+{
+  int i;
+  int n = ex->n;
+  orc_union32 *ORC_RESTRICT ptr0;
+  orc_union32 *ORC_RESTRICT ptr1;
+  const orc_union32 *ORC_RESTRICT ptr4;
+  const orc_union32 *ORC_RESTRICT ptr5;
+  orc_union32 var39;
+  orc_union32 var40;
+#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
+  volatile orc_union32 var41;
+#else
+  orc_union32 var41;
+#endif
+#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
+  volatile orc_union32 var42;
+#else
+  orc_union32 var42;
+#endif
+  orc_union32 var43;
+  orc_union32 var44;
+  orc_union16 var45;
+  orc_union16 var46;
+  orc_union16 var47;
+  orc_union16 var48;
+  orc_union32 var49;
+  orc_union32 var50;
+  orc_union32 var51;
+  orc_union32 var52;
+  orc_union32 var53;
+  orc_union32 var54;
+  orc_union16 var55;
+  orc_union32 var56;
+  orc_union32 var57;
+  orc_union32 var58;
+  orc_union32 var59;
+  orc_union16 var60;
+
+  ptr0 = (orc_union32 *) ex->arrays[0];
+  ptr1 = (orc_union32 *) ex->arrays[1];
+  ptr4 = (orc_union32 *) ex->arrays[4];
+  ptr5 = (orc_union32 *) ex->arrays[5];
+
+  /* 6: loadpw */
+  var41.x2[0] = (int) 0x00000003;       /* 3 or 1.4822e-323f */
+  var41.x2[1] = (int) 0x00000003;       /* 3 or 1.4822e-323f */
+  /* 9: loadpw */
+  var42.x2[0] = (int) 0x00000002;       /* 2 or 9.88131e-324f */
+  var42.x2[1] = (int) 0x00000002;       /* 2 or 9.88131e-324f */
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadl */
+    var39 = ptr4[i];
+    /* 1: splitlw */
+    {
+      orc_union32 _src;
+      _src.i = var39.i;
+      var45.i = _src.x2[1];
+      var46.i = _src.x2[0];
+    }
+    /* 2: loadl */
+    var40 = ptr5[i];
+    /* 3: splitlw */
+    {
+      orc_union32 _src;
+      _src.i = var40.i;
+      var47.i = _src.x2[1];
+      var48.i = _src.x2[0];
+    }
+    /* 4: convubw */
+    var49.x2[0] = (orc_uint8) var45.x2[0];
+    var49.x2[1] = (orc_uint8) var45.x2[1];
+    /* 5: convubw */
+    var50.x2[0] = (orc_uint8) var47.x2[0];
+    var50.x2[1] = (orc_uint8) var47.x2[1];
+    /* 7: mullw */
+    var51.x2[0] = (var49.x2[0] * var41.x2[0]) & 0xffff;
+    var51.x2[1] = (var49.x2[1] * var41.x2[1]) & 0xffff;
+    /* 8: addw */
+    var52.x2[0] = var51.x2[0] + var50.x2[0];
+    var52.x2[1] = var51.x2[1] + var50.x2[1];
+    /* 10: addw */
+    var53.x2[0] = var52.x2[0] + var42.x2[0];
+    var53.x2[1] = var52.x2[1] + var42.x2[1];
+    /* 11: shruw */
+    var54.x2[0] = ((orc_uint16) var53.x2[0]) >> 2;
+    var54.x2[1] = ((orc_uint16) var53.x2[1]) >> 2;
+    /* 12: convsuswb */
+    var55.x2[0] = ORC_CLAMP_UB (var54.x2[0]);
+    var55.x2[1] = ORC_CLAMP_UB (var54.x2[1]);
+    /* 13: mergewl */
+    {
+      orc_union32 _dest;
+      _dest.x2[0] = var46.i;
+      _dest.x2[1] = var55.i;
+      var43.i = _dest.i;
+    }
+    /* 14: storel */
+    ptr0[i] = var43;
+    /* 15: mullw */
+    var56.x2[0] = (var50.x2[0] * var41.x2[0]) & 0xffff;
+    var56.x2[1] = (var50.x2[1] * var41.x2[1]) & 0xffff;
+    /* 16: addw */
+    var57.x2[0] = var56.x2[0] + var49.x2[0];
+    var57.x2[1] = var56.x2[1] + var49.x2[1];
+    /* 17: addw */
+    var58.x2[0] = var57.x2[0] + var42.x2[0];
+    var58.x2[1] = var57.x2[1] + var42.x2[1];
+    /* 18: shruw */
+    var59.x2[0] = ((orc_uint16) var58.x2[0]) >> 2;
+    var59.x2[1] = ((orc_uint16) var58.x2[1]) >> 2;
+    /* 19: convsuswb */
+    var60.x2[0] = ORC_CLAMP_UB (var59.x2[0]);
+    var60.x2[1] = ORC_CLAMP_UB (var59.x2[1]);
+    /* 20: mergewl */
+    {
+      orc_union32 _dest;
+      _dest.x2[0] = var48.i;
+      _dest.x2[1] = var60.i;
+      var44.i = _dest.i;
+    }
+    /* 21: storel */
+    ptr1[i] = var44;
+  }
+
+}
+
+void
+video_orc_chroma_up_v2_u8 (guint8 * ORC_RESTRICT d1, guint8 * ORC_RESTRICT d2,
+    const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, int n)
+{
+  OrcExecutor _ex, *ex = &_ex;
+  static volatile int p_inited = 0;
+  static OrcCode *c = 0;
+  void (*func) (OrcExecutor *);
+
+  if (!p_inited) {
+    orc_once_mutex_lock ();
+    if (!p_inited) {
+      OrcProgram *p;
+
+#if 1
+      static const orc_uint8 bc[] = {
+        1, 9, 25, 118, 105, 100, 101, 111, 95, 111, 114, 99, 95, 99, 104, 114,
+        111, 109, 97, 95, 117, 112, 95, 118, 50, 95, 117, 56, 11, 4, 4, 11,
+        4, 4, 12, 4, 4, 12, 4, 4, 14, 2, 3, 0, 0, 0, 14, 2,
+        2, 0, 0, 0, 20, 2, 20, 2, 20, 2, 20, 2, 20, 4, 20, 4,
+        20, 4, 198, 34, 32, 4, 198, 35, 33, 5, 21, 1, 150, 36, 34, 21,
+        1, 150, 37, 35, 21, 1, 89, 38, 36, 16, 21, 1, 70, 38, 38, 37,
+        21, 1, 70, 38, 38, 17, 21, 1, 95, 38, 38, 17, 21, 1, 160, 34,
+        38, 195, 0, 32, 34, 21, 1, 89, 38, 37, 16, 21, 1, 70, 38, 38,
+        36, 21, 1, 70, 38, 38, 17, 21, 1, 95, 38, 38, 17, 21, 1, 160,
+        35, 38, 195, 1, 33, 35, 2, 0,
+      };
+      p = orc_program_new_from_static_bytecode (bc);
+      orc_program_set_backup_function (p, _backup_video_orc_chroma_up_v2_u8);
+#else
+      p = orc_program_new ();
+      orc_program_set_name (p, "video_orc_chroma_up_v2_u8");
+      orc_program_set_backup_function (p, _backup_video_orc_chroma_up_v2_u8);
+      orc_program_add_destination (p, 4, "d1");
+      orc_program_add_destination (p, 4, "d2");
+      orc_program_add_source (p, 4, "s1");
+      orc_program_add_source (p, 4, "s2");
+      orc_program_add_constant (p, 2, 0x00000003, "c1");
+      orc_program_add_constant (p, 2, 0x00000002, "c2");
+      orc_program_add_temporary (p, 2, "t1");
+      orc_program_add_temporary (p, 2, "t2");
+      orc_program_add_temporary (p, 2, "t3");
+      orc_program_add_temporary (p, 2, "t4");
+      orc_program_add_temporary (p, 4, "t5");
+      orc_program_add_temporary (p, 4, "t6");
+      orc_program_add_temporary (p, 4, "t7");
+
+      orc_program_append_2 (p, "splitlw", 0, ORC_VAR_T3, ORC_VAR_T1, ORC_VAR_S1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "splitlw", 0, ORC_VAR_T4, ORC_VAR_T2, ORC_VAR_S2,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "convubw", 1, ORC_VAR_T5, ORC_VAR_T3, ORC_VAR_D1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "convubw", 1, ORC_VAR_T6, ORC_VAR_T4, ORC_VAR_D1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "mullw", 1, ORC_VAR_T7, ORC_VAR_T5, ORC_VAR_C1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "addw", 1, ORC_VAR_T7, ORC_VAR_T7, ORC_VAR_T6,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "addw", 1, ORC_VAR_T7, ORC_VAR_T7, ORC_VAR_C2,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "shruw", 1, ORC_VAR_T7, ORC_VAR_T7, ORC_VAR_C2,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "convsuswb", 1, ORC_VAR_T3, ORC_VAR_T7,
+          ORC_VAR_D1, ORC_VAR_D1);
+      orc_program_append_2 (p, "mergewl", 0, ORC_VAR_D1, ORC_VAR_T1, ORC_VAR_T3,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "mullw", 1, ORC_VAR_T7, ORC_VAR_T6, ORC_VAR_C1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "addw", 1, ORC_VAR_T7, ORC_VAR_T7, ORC_VAR_T5,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "addw", 1, ORC_VAR_T7, ORC_VAR_T7, ORC_VAR_C2,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "shruw", 1, ORC_VAR_T7, ORC_VAR_T7, ORC_VAR_C2,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "convsuswb", 1, ORC_VAR_T4, ORC_VAR_T7,
+          ORC_VAR_D1, ORC_VAR_D1);
+      orc_program_append_2 (p, "mergewl", 0, ORC_VAR_D2, ORC_VAR_T2, ORC_VAR_T4,
+          ORC_VAR_D1);
+#endif
+
+      orc_program_compile (p);
+      c = orc_program_take_code (p);
+      orc_program_free (p);
+    }
+    p_inited = TRUE;
+    orc_once_mutex_unlock ();
+  }
+  ex->arrays[ORC_VAR_A2] = c;
+  ex->program = 0;
+
+  ex->n = n;
+  ex->arrays[ORC_VAR_D1] = d1;
+  ex->arrays[ORC_VAR_D2] = d2;
+  ex->arrays[ORC_VAR_S1] = (void *) s1;
+  ex->arrays[ORC_VAR_S2] = (void *) s2;
+
+  func = c->exec;
+  func (ex);
+}
+#endif
+
+
+/* video_orc_chroma_up_v2_u16 */
+#ifdef DISABLE_ORC
+void
+video_orc_chroma_up_v2_u16 (guint16 * ORC_RESTRICT d1,
+    guint16 * ORC_RESTRICT d2, const guint16 * ORC_RESTRICT s1,
+    const guint16 * ORC_RESTRICT s2, int n)
+{
+  int i;
+  orc_union64 *ORC_RESTRICT ptr0;
+  orc_union64 *ORC_RESTRICT ptr1;
+  const orc_union64 *ORC_RESTRICT ptr4;
+  const orc_union64 *ORC_RESTRICT ptr5;
+  orc_union64 var39;
+  orc_union64 var40;
+#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
+  volatile orc_union64 var41;
+#else
+  orc_union64 var41;
+#endif
+#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
+  volatile orc_union64 var42;
+#else
+  orc_union64 var42;
+#endif
+  orc_union64 var43;
+  orc_union64 var44;
+  orc_union32 var45;
+  orc_union32 var46;
+  orc_union32 var47;
+  orc_union32 var48;
+  orc_union64 var49;
+  orc_union64 var50;
+  orc_union64 var51;
+  orc_union64 var52;
+  orc_union64 var53;
+  orc_union64 var54;
+  orc_union32 var55;
+  orc_union64 var56;
+  orc_union64 var57;
+  orc_union64 var58;
+  orc_union64 var59;
+  orc_union32 var60;
+
+  ptr0 = (orc_union64 *) d1;
+  ptr1 = (orc_union64 *) d2;
+  ptr4 = (orc_union64 *) s1;
+  ptr5 = (orc_union64 *) s2;
+
+  /* 6: loadpl */
+  var41.x2[0] = (int) 0x00000003;       /* 3 or 1.4822e-323f */
+  var41.x2[1] = (int) 0x00000003;       /* 3 or 1.4822e-323f */
+  /* 9: loadpl */
+  var42.x2[0] = (int) 0x00000002;       /* 2 or 9.88131e-324f */
+  var42.x2[1] = (int) 0x00000002;       /* 2 or 9.88131e-324f */
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadq */
+    var39 = ptr4[i];
+    /* 1: splitql */
+    {
+      orc_union64 _src;
+      _src.i = var39.i;
+      var45.i = _src.x2[1];
+      var46.i = _src.x2[0];
+    }
+    /* 2: loadq */
+    var40 = ptr5[i];
+    /* 3: splitql */
+    {
+      orc_union64 _src;
+      _src.i = var40.i;
+      var47.i = _src.x2[1];
+      var48.i = _src.x2[0];
+    }
+    /* 4: convuwl */
+    var49.x2[0] = (orc_uint16) var45.x2[0];
+    var49.x2[1] = (orc_uint16) var45.x2[1];
+    /* 5: convuwl */
+    var50.x2[0] = (orc_uint16) var47.x2[0];
+    var50.x2[1] = (orc_uint16) var47.x2[1];
+    /* 7: mulll */
+    var51.x2[0] =
+        (((orc_uint32) var49.x2[0]) * ((orc_uint32) var41.x2[0])) & 0xffffffff;
+    var51.x2[1] =
+        (((orc_uint32) var49.x2[1]) * ((orc_uint32) var41.x2[1])) & 0xffffffff;
+    /* 8: addl */
+    var52.x2[0] = ((orc_uint32) var51.x2[0]) + ((orc_uint32) var50.x2[0]);
+    var52.x2[1] = ((orc_uint32) var51.x2[1]) + ((orc_uint32) var50.x2[1]);
+    /* 10: addl */
+    var53.x2[0] = ((orc_uint32) var52.x2[0]) + ((orc_uint32) var42.x2[0]);
+    var53.x2[1] = ((orc_uint32) var52.x2[1]) + ((orc_uint32) var42.x2[1]);
+    /* 11: shrul */
+    var54.x2[0] = ((orc_uint32) var53.x2[0]) >> 2;
+    var54.x2[1] = ((orc_uint32) var53.x2[1]) >> 2;
+    /* 12: convsuslw */
+    var55.x2[0] = ORC_CLAMP_UW (var54.x2[0]);
+    var55.x2[1] = ORC_CLAMP_UW (var54.x2[1]);
+    /* 13: mergelq */
+    {
+      orc_union64 _dest;
+      _dest.x2[0] = var46.i;
+      _dest.x2[1] = var55.i;
+      var43.i = _dest.i;
+    }
+    /* 14: storeq */
+    ptr0[i] = var43;
+    /* 15: mulll */
+    var56.x2[0] =
+        (((orc_uint32) var50.x2[0]) * ((orc_uint32) var41.x2[0])) & 0xffffffff;
+    var56.x2[1] =
+        (((orc_uint32) var50.x2[1]) * ((orc_uint32) var41.x2[1])) & 0xffffffff;
+    /* 16: addl */
+    var57.x2[0] = ((orc_uint32) var56.x2[0]) + ((orc_uint32) var49.x2[0]);
+    var57.x2[1] = ((orc_uint32) var56.x2[1]) + ((orc_uint32) var49.x2[1]);
+    /* 17: addl */
+    var58.x2[0] = ((orc_uint32) var57.x2[0]) + ((orc_uint32) var42.x2[0]);
+    var58.x2[1] = ((orc_uint32) var57.x2[1]) + ((orc_uint32) var42.x2[1]);
+    /* 18: shrul */
+    var59.x2[0] = ((orc_uint32) var58.x2[0]) >> 2;
+    var59.x2[1] = ((orc_uint32) var58.x2[1]) >> 2;
+    /* 19: convsuslw */
+    var60.x2[0] = ORC_CLAMP_UW (var59.x2[0]);
+    var60.x2[1] = ORC_CLAMP_UW (var59.x2[1]);
+    /* 20: mergelq */
+    {
+      orc_union64 _dest;
+      _dest.x2[0] = var48.i;
+      _dest.x2[1] = var60.i;
+      var44.i = _dest.i;
+    }
+    /* 21: storeq */
+    ptr1[i] = var44;
+  }
+
+}
+
+#else
+static void
+_backup_video_orc_chroma_up_v2_u16 (OrcExecutor * ORC_RESTRICT ex)
+{
+  int i;
+  int n = ex->n;
+  orc_union64 *ORC_RESTRICT ptr0;
+  orc_union64 *ORC_RESTRICT ptr1;
+  const orc_union64 *ORC_RESTRICT ptr4;
+  const orc_union64 *ORC_RESTRICT ptr5;
+  orc_union64 var39;
+  orc_union64 var40;
+#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
+  volatile orc_union64 var41;
+#else
+  orc_union64 var41;
+#endif
+#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
+  volatile orc_union64 var42;
+#else
+  orc_union64 var42;
+#endif
+  orc_union64 var43;
+  orc_union64 var44;
+  orc_union32 var45;
+  orc_union32 var46;
+  orc_union32 var47;
+  orc_union32 var48;
+  orc_union64 var49;
+  orc_union64 var50;
+  orc_union64 var51;
+  orc_union64 var52;
+  orc_union64 var53;
+  orc_union64 var54;
+  orc_union32 var55;
+  orc_union64 var56;
+  orc_union64 var57;
+  orc_union64 var58;
+  orc_union64 var59;
+  orc_union32 var60;
+
+  ptr0 = (orc_union64 *) ex->arrays[0];
+  ptr1 = (orc_union64 *) ex->arrays[1];
+  ptr4 = (orc_union64 *) ex->arrays[4];
+  ptr5 = (orc_union64 *) ex->arrays[5];
+
+  /* 6: loadpl */
+  var41.x2[0] = (int) 0x00000003;       /* 3 or 1.4822e-323f */
+  var41.x2[1] = (int) 0x00000003;       /* 3 or 1.4822e-323f */
+  /* 9: loadpl */
+  var42.x2[0] = (int) 0x00000002;       /* 2 or 9.88131e-324f */
+  var42.x2[1] = (int) 0x00000002;       /* 2 or 9.88131e-324f */
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadq */
+    var39 = ptr4[i];
+    /* 1: splitql */
+    {
+      orc_union64 _src;
+      _src.i = var39.i;
+      var45.i = _src.x2[1];
+      var46.i = _src.x2[0];
+    }
+    /* 2: loadq */
+    var40 = ptr5[i];
+    /* 3: splitql */
+    {
+      orc_union64 _src;
+      _src.i = var40.i;
+      var47.i = _src.x2[1];
+      var48.i = _src.x2[0];
+    }
+    /* 4: convuwl */
+    var49.x2[0] = (orc_uint16) var45.x2[0];
+    var49.x2[1] = (orc_uint16) var45.x2[1];
+    /* 5: convuwl */
+    var50.x2[0] = (orc_uint16) var47.x2[0];
+    var50.x2[1] = (orc_uint16) var47.x2[1];
+    /* 7: mulll */
+    var51.x2[0] =
+        (((orc_uint32) var49.x2[0]) * ((orc_uint32) var41.x2[0])) & 0xffffffff;
+    var51.x2[1] =
+        (((orc_uint32) var49.x2[1]) * ((orc_uint32) var41.x2[1])) & 0xffffffff;
+    /* 8: addl */
+    var52.x2[0] = ((orc_uint32) var51.x2[0]) + ((orc_uint32) var50.x2[0]);
+    var52.x2[1] = ((orc_uint32) var51.x2[1]) + ((orc_uint32) var50.x2[1]);
+    /* 10: addl */
+    var53.x2[0] = ((orc_uint32) var52.x2[0]) + ((orc_uint32) var42.x2[0]);
+    var53.x2[1] = ((orc_uint32) var52.x2[1]) + ((orc_uint32) var42.x2[1]);
+    /* 11: shrul */
+    var54.x2[0] = ((orc_uint32) var53.x2[0]) >> 2;
+    var54.x2[1] = ((orc_uint32) var53.x2[1]) >> 2;
+    /* 12: convsuslw */
+    var55.x2[0] = ORC_CLAMP_UW (var54.x2[0]);
+    var55.x2[1] = ORC_CLAMP_UW (var54.x2[1]);
+    /* 13: mergelq */
+    {
+      orc_union64 _dest;
+      _dest.x2[0] = var46.i;
+      _dest.x2[1] = var55.i;
+      var43.i = _dest.i;
+    }
+    /* 14: storeq */
+    ptr0[i] = var43;
+    /* 15: mulll */
+    var56.x2[0] =
+        (((orc_uint32) var50.x2[0]) * ((orc_uint32) var41.x2[0])) & 0xffffffff;
+    var56.x2[1] =
+        (((orc_uint32) var50.x2[1]) * ((orc_uint32) var41.x2[1])) & 0xffffffff;
+    /* 16: addl */
+    var57.x2[0] = ((orc_uint32) var56.x2[0]) + ((orc_uint32) var49.x2[0]);
+    var57.x2[1] = ((orc_uint32) var56.x2[1]) + ((orc_uint32) var49.x2[1]);
+    /* 17: addl */
+    var58.x2[0] = ((orc_uint32) var57.x2[0]) + ((orc_uint32) var42.x2[0]);
+    var58.x2[1] = ((orc_uint32) var57.x2[1]) + ((orc_uint32) var42.x2[1]);
+    /* 18: shrul */
+    var59.x2[0] = ((orc_uint32) var58.x2[0]) >> 2;
+    var59.x2[1] = ((orc_uint32) var58.x2[1]) >> 2;
+    /* 19: convsuslw */
+    var60.x2[0] = ORC_CLAMP_UW (var59.x2[0]);
+    var60.x2[1] = ORC_CLAMP_UW (var59.x2[1]);
+    /* 20: mergelq */
+    {
+      orc_union64 _dest;
+      _dest.x2[0] = var48.i;
+      _dest.x2[1] = var60.i;
+      var44.i = _dest.i;
+    }
+    /* 21: storeq */
+    ptr1[i] = var44;
+  }
+
+}
+
+void
+video_orc_chroma_up_v2_u16 (guint16 * ORC_RESTRICT d1,
+    guint16 * ORC_RESTRICT d2, const guint16 * ORC_RESTRICT s1,
+    const guint16 * ORC_RESTRICT s2, int n)
+{
+  OrcExecutor _ex, *ex = &_ex;
+  static volatile int p_inited = 0;
+  static OrcCode *c = 0;
+  void (*func) (OrcExecutor *);
+
+  if (!p_inited) {
+    orc_once_mutex_lock ();
+    if (!p_inited) {
+      OrcProgram *p;
+
+#if 1
+      static const orc_uint8 bc[] = {
+        1, 9, 26, 118, 105, 100, 101, 111, 95, 111, 114, 99, 95, 99, 104, 114,
+        111, 109, 97, 95, 117, 112, 95, 118, 50, 95, 117, 49, 54, 11, 8, 8,
+        11, 8, 8, 12, 8, 8, 12, 8, 8, 14, 4, 3, 0, 0, 0, 14,
+        4, 2, 0, 0, 0, 20, 4, 20, 4, 20, 4, 20, 4, 20, 8, 20,
+        8, 20, 8, 197, 34, 32, 4, 197, 35, 33, 5, 21, 1, 154, 36, 34,
+        21, 1, 154, 37, 35, 21, 1, 120, 38, 36, 16, 21, 1, 103, 38, 38,
+        37, 21, 1, 103, 38, 38, 17, 21, 1, 126, 38, 38, 17, 21, 1, 166,
+        34, 38, 194, 0, 32, 34, 21, 1, 120, 38, 37, 16, 21, 1, 103, 38,
+        38, 36, 21, 1, 103, 38, 38, 17, 21, 1, 126, 38, 38, 17, 21, 1,
+        166, 35, 38, 194, 1, 33, 35, 2, 0,
+      };
+      p = orc_program_new_from_static_bytecode (bc);
+      orc_program_set_backup_function (p, _backup_video_orc_chroma_up_v2_u16);
+#else
+      p = orc_program_new ();
+      orc_program_set_name (p, "video_orc_chroma_up_v2_u16");
+      orc_program_set_backup_function (p, _backup_video_orc_chroma_up_v2_u16);
+      orc_program_add_destination (p, 8, "d1");
+      orc_program_add_destination (p, 8, "d2");
+      orc_program_add_source (p, 8, "s1");
+      orc_program_add_source (p, 8, "s2");
+      orc_program_add_constant (p, 4, 0x00000003, "c1");
+      orc_program_add_constant (p, 4, 0x00000002, "c2");
+      orc_program_add_temporary (p, 4, "t1");
+      orc_program_add_temporary (p, 4, "t2");
+      orc_program_add_temporary (p, 4, "t3");
+      orc_program_add_temporary (p, 4, "t4");
+      orc_program_add_temporary (p, 8, "t5");
+      orc_program_add_temporary (p, 8, "t6");
+      orc_program_add_temporary (p, 8, "t7");
+
+      orc_program_append_2 (p, "splitql", 0, ORC_VAR_T3, ORC_VAR_T1, ORC_VAR_S1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "splitql", 0, ORC_VAR_T4, ORC_VAR_T2, ORC_VAR_S2,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "convuwl", 1, ORC_VAR_T5, ORC_VAR_T3, ORC_VAR_D1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "convuwl", 1, ORC_VAR_T6, ORC_VAR_T4, ORC_VAR_D1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "mulll", 1, ORC_VAR_T7, ORC_VAR_T5, ORC_VAR_C1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "addl", 1, ORC_VAR_T7, ORC_VAR_T7, ORC_VAR_T6,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "addl", 1, ORC_VAR_T7, ORC_VAR_T7, ORC_VAR_C2,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "shrul", 1, ORC_VAR_T7, ORC_VAR_T7, ORC_VAR_C2,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "convsuslw", 1, ORC_VAR_T3, ORC_VAR_T7,
+          ORC_VAR_D1, ORC_VAR_D1);
+      orc_program_append_2 (p, "mergelq", 0, ORC_VAR_D1, ORC_VAR_T1, ORC_VAR_T3,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "mulll", 1, ORC_VAR_T7, ORC_VAR_T6, ORC_VAR_C1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "addl", 1, ORC_VAR_T7, ORC_VAR_T7, ORC_VAR_T5,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "addl", 1, ORC_VAR_T7, ORC_VAR_T7, ORC_VAR_C2,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "shrul", 1, ORC_VAR_T7, ORC_VAR_T7, ORC_VAR_C2,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "convsuslw", 1, ORC_VAR_T4, ORC_VAR_T7,
+          ORC_VAR_D1, ORC_VAR_D1);
+      orc_program_append_2 (p, "mergelq", 0, ORC_VAR_D2, ORC_VAR_T2, ORC_VAR_T4,
+          ORC_VAR_D1);
+#endif
+
+      orc_program_compile (p);
+      c = orc_program_take_code (p);
+      orc_program_free (p);
+    }
+    p_inited = TRUE;
+    orc_once_mutex_unlock ();
+  }
+  ex->arrays[ORC_VAR_A2] = c;
+  ex->program = 0;
+
+  ex->n = n;
+  ex->arrays[ORC_VAR_D1] = d1;
+  ex->arrays[ORC_VAR_D2] = d2;
+  ex->arrays[ORC_VAR_S1] = (void *) s1;
+  ex->arrays[ORC_VAR_S2] = (void *) s2;
+
+  func = c->exec;
+  func (ex);
+}
+#endif
+
+
+/* video_orc_chroma_down_v2_u16 */
+#ifdef DISABLE_ORC
+void
+video_orc_chroma_down_v2_u16 (guint16 * ORC_RESTRICT d1,
+    const guint16 * ORC_RESTRICT s1, const guint16 * ORC_RESTRICT s2, int n)
+{
+  int i;
+  orc_union64 *ORC_RESTRICT ptr0;
+  const orc_union64 *ORC_RESTRICT ptr4;
+  const orc_union64 *ORC_RESTRICT ptr5;
+  orc_union64 var35;
+  orc_union64 var36;
+  orc_union64 var37;
+  orc_union32 var38;
+  orc_union32 var39;
+  orc_union32 var40;
+  orc_union32 var41;
+
+  ptr0 = (orc_union64 *) d1;
+  ptr4 = (orc_union64 *) s1;
+  ptr5 = (orc_union64 *) s2;
+
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadq */
+    var35 = ptr4[i];
+    /* 1: splitql */
+    {
+      orc_union64 _src;
+      _src.i = var35.i;
+      var38.i = _src.x2[1];
+      var39.i = _src.x2[0];
+    }
+    /* 2: loadq */
+    var36 = ptr5[i];
+    /* 3: select1ql */
+    {
+      orc_union64 _src;
+      _src.i = var36.i;
+      var40.i = _src.x2[1];
+    }
+    /* 4: avguw */
+    var41.x2[0] =
+        ((orc_uint16) var38.x2[0] + (orc_uint16) var40.x2[0] + 1) >> 1;
+    var41.x2[1] =
+        ((orc_uint16) var38.x2[1] + (orc_uint16) var40.x2[1] + 1) >> 1;
+    /* 5: mergelq */
+    {
+      orc_union64 _dest;
+      _dest.x2[0] = var39.i;
+      _dest.x2[1] = var41.i;
+      var37.i = _dest.i;
+    }
+    /* 6: storeq */
+    ptr0[i] = var37;
+  }
+
+}
+
+#else
+static void
+_backup_video_orc_chroma_down_v2_u16 (OrcExecutor * ORC_RESTRICT ex)
+{
+  int i;
+  int n = ex->n;
+  orc_union64 *ORC_RESTRICT ptr0;
+  const orc_union64 *ORC_RESTRICT ptr4;
+  const orc_union64 *ORC_RESTRICT ptr5;
+  orc_union64 var35;
+  orc_union64 var36;
+  orc_union64 var37;
+  orc_union32 var38;
+  orc_union32 var39;
+  orc_union32 var40;
+  orc_union32 var41;
+
+  ptr0 = (orc_union64 *) ex->arrays[0];
+  ptr4 = (orc_union64 *) ex->arrays[4];
+  ptr5 = (orc_union64 *) ex->arrays[5];
+
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadq */
+    var35 = ptr4[i];
+    /* 1: splitql */
+    {
+      orc_union64 _src;
+      _src.i = var35.i;
+      var38.i = _src.x2[1];
+      var39.i = _src.x2[0];
+    }
+    /* 2: loadq */
+    var36 = ptr5[i];
+    /* 3: select1ql */
+    {
+      orc_union64 _src;
+      _src.i = var36.i;
+      var40.i = _src.x2[1];
+    }
+    /* 4: avguw */
+    var41.x2[0] =
+        ((orc_uint16) var38.x2[0] + (orc_uint16) var40.x2[0] + 1) >> 1;
+    var41.x2[1] =
+        ((orc_uint16) var38.x2[1] + (orc_uint16) var40.x2[1] + 1) >> 1;
+    /* 5: mergelq */
+    {
+      orc_union64 _dest;
+      _dest.x2[0] = var39.i;
+      _dest.x2[1] = var41.i;
+      var37.i = _dest.i;
+    }
+    /* 6: storeq */
+    ptr0[i] = var37;
+  }
+
+}
+
+void
+video_orc_chroma_down_v2_u16 (guint16 * ORC_RESTRICT d1,
+    const guint16 * ORC_RESTRICT s1, const guint16 * ORC_RESTRICT s2, int n)
+{
+  OrcExecutor _ex, *ex = &_ex;
+  static volatile int p_inited = 0;
+  static OrcCode *c = 0;
+  void (*func) (OrcExecutor *);
+
+  if (!p_inited) {
+    orc_once_mutex_lock ();
+    if (!p_inited) {
+      OrcProgram *p;
+
+#if 1
+      static const orc_uint8 bc[] = {
+        1, 9, 28, 118, 105, 100, 101, 111, 95, 111, 114, 99, 95, 99, 104, 114,
+        111, 109, 97, 95, 100, 111, 119, 110, 95, 118, 50, 95, 117, 49, 54, 11,
+        8, 8, 12, 8, 8, 12, 8, 8, 20, 4, 20, 4, 20, 4, 197, 33,
+        32, 4, 193, 34, 5, 21, 1, 76, 33, 33, 34, 194, 0, 32, 33, 2,
+        0,
+      };
+      p = orc_program_new_from_static_bytecode (bc);
+      orc_program_set_backup_function (p, _backup_video_orc_chroma_down_v2_u16);
+#else
+      p = orc_program_new ();
+      orc_program_set_name (p, "video_orc_chroma_down_v2_u16");
+      orc_program_set_backup_function (p, _backup_video_orc_chroma_down_v2_u16);
+      orc_program_add_destination (p, 8, "d1");
+      orc_program_add_source (p, 8, "s1");
+      orc_program_add_source (p, 8, "s2");
+      orc_program_add_temporary (p, 4, "t1");
+      orc_program_add_temporary (p, 4, "t2");
+      orc_program_add_temporary (p, 4, "t3");
+
+      orc_program_append_2 (p, "splitql", 0, ORC_VAR_T2, ORC_VAR_T1, ORC_VAR_S1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "select1ql", 0, ORC_VAR_T3, ORC_VAR_S2,
+          ORC_VAR_D1, ORC_VAR_D1);
+      orc_program_append_2 (p, "avguw", 1, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_T3,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "mergelq", 0, ORC_VAR_D1, ORC_VAR_T1, ORC_VAR_T2,
+          ORC_VAR_D1);
+#endif
+
+      orc_program_compile (p);
+      c = orc_program_take_code (p);
+      orc_program_free (p);
+    }
+    p_inited = TRUE;
+    orc_once_mutex_unlock ();
+  }
+  ex->arrays[ORC_VAR_A2] = c;
+  ex->program = 0;
+
+  ex->n = n;
+  ex->arrays[ORC_VAR_D1] = d1;
+  ex->arrays[ORC_VAR_S1] = (void *) s1;
+  ex->arrays[ORC_VAR_S2] = (void *) s2;
+
+  func = c->exec;
+  func (ex);
+}
+#endif
+
+
+/* video_orc_chroma_down_v4_u8 */
+#ifdef DISABLE_ORC
+void
+video_orc_chroma_down_v4_u8 (guint8 * ORC_RESTRICT d1,
+    const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2,
+    const guint8 * ORC_RESTRICT s3, const guint8 * ORC_RESTRICT s4, int n)
+{
+  int i;
+  orc_union32 *ORC_RESTRICT ptr0;
+  const orc_union32 *ORC_RESTRICT ptr4;
+  const orc_union32 *ORC_RESTRICT ptr5;
+  const orc_union32 *ORC_RESTRICT ptr6;
+  const orc_union32 *ORC_RESTRICT ptr7;
+  orc_union32 var37;
+  orc_union32 var38;
+  orc_union32 var39;
+  orc_union32 var40;
+#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
+  volatile orc_union32 var41;
+#else
+  orc_union32 var41;
+#endif
+  orc_union32 var42;
+  orc_union16 var43;
+  orc_union16 var44;
+  orc_union32 var45;
+  orc_union16 var46;
+  orc_union32 var47;
+  orc_union32 var48;
+  orc_union16 var49;
+  orc_union32 var50;
+  orc_union16 var51;
+  orc_union32 var52;
+  orc_union32 var53;
+  orc_union32 var54;
+  orc_union32 var55;
+  orc_union32 var56;
+  orc_union32 var57;
+  orc_union32 var58;
+  orc_union16 var59;
+
+  ptr0 = (orc_union32 *) d1;
+  ptr4 = (orc_union32 *) s1;
+  ptr5 = (orc_union32 *) s2;
+  ptr6 = (orc_union32 *) s3;
+  ptr7 = (orc_union32 *) s4;
+
+  /* 17: loadpw */
+  var41.x2[0] = (int) 0x00000004;       /* 4 or 1.97626e-323f */
+  var41.x2[1] = (int) 0x00000004;       /* 4 or 1.97626e-323f */
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadl */
+    var37 = ptr4[i];
+    /* 1: splitlw */
+    {
+      orc_union32 _src;
+      _src.i = var37.i;
+      var43.i = _src.x2[1];
+      var44.i = _src.x2[0];
+    }
+    /* 2: convubw */
+    var45.x2[0] = (orc_uint8) var43.x2[0];
+    var45.x2[1] = (orc_uint8) var43.x2[1];
+    /* 3: loadl */
+    var38 = ptr7[i];
+    /* 4: select1lw */
+    {
+      orc_union32 _src;
+      _src.i = var38.i;
+      var46.i = _src.x2[1];
+    }
+    /* 5: convubw */
+    var47.x2[0] = (orc_uint8) var46.x2[0];
+    var47.x2[1] = (orc_uint8) var46.x2[1];
+    /* 6: addw */
+    var48.x2[0] = var45.x2[0] + var47.x2[0];
+    var48.x2[1] = var45.x2[1] + var47.x2[1];
+    /* 7: loadl */
+    var39 = ptr5[i];
+    /* 8: select1lw */
+    {
+      orc_union32 _src;
+      _src.i = var39.i;
+      var49.i = _src.x2[1];
+    }
+    /* 9: convubw */
+    var50.x2[0] = (orc_uint8) var49.x2[0];
+    var50.x2[1] = (orc_uint8) var49.x2[1];
+    /* 10: loadl */
+    var40 = ptr6[i];
+    /* 11: select1lw */
+    {
+      orc_union32 _src;
+      _src.i = var40.i;
+      var51.i = _src.x2[1];
+    }
+    /* 12: convubw */
+    var52.x2[0] = (orc_uint8) var51.x2[0];
+    var52.x2[1] = (orc_uint8) var51.x2[1];
+    /* 13: addw */
+    var53.x2[0] = var50.x2[0] + var52.x2[0];
+    var53.x2[1] = var50.x2[1] + var52.x2[1];
+    /* 14: shlw */
+    var54.x2[0] = ((orc_uint16) var53.x2[0]) << 1;
+    var54.x2[1] = ((orc_uint16) var53.x2[1]) << 1;
+    /* 15: addw */
+    var55.x2[0] = var53.x2[0] + var54.x2[0];
+    var55.x2[1] = var53.x2[1] + var54.x2[1];
+    /* 16: addw */
+    var56.x2[0] = var48.x2[0] + var55.x2[0];
+    var56.x2[1] = var48.x2[1] + var55.x2[1];
+    /* 18: addw */
+    var57.x2[0] = var56.x2[0] + var41.x2[0];
+    var57.x2[1] = var56.x2[1] + var41.x2[1];
+    /* 19: shruw */
+    var58.x2[0] = ((orc_uint16) var57.x2[0]) >> 3;
+    var58.x2[1] = ((orc_uint16) var57.x2[1]) >> 3;
+    /* 20: convsuswb */
+    var59.x2[0] = ORC_CLAMP_UB (var58.x2[0]);
+    var59.x2[1] = ORC_CLAMP_UB (var58.x2[1]);
+    /* 21: mergewl */
+    {
+      orc_union32 _dest;
+      _dest.x2[0] = var44.i;
+      _dest.x2[1] = var59.i;
+      var42.i = _dest.i;
+    }
+    /* 22: storel */
+    ptr0[i] = var42;
+  }
+
+}
+
+#else
+static void
+_backup_video_orc_chroma_down_v4_u8 (OrcExecutor * ORC_RESTRICT ex)
+{
+  int i;
+  int n = ex->n;
+  orc_union32 *ORC_RESTRICT ptr0;
+  const orc_union32 *ORC_RESTRICT ptr4;
+  const orc_union32 *ORC_RESTRICT ptr5;
+  const orc_union32 *ORC_RESTRICT ptr6;
+  const orc_union32 *ORC_RESTRICT ptr7;
+  orc_union32 var37;
+  orc_union32 var38;
+  orc_union32 var39;
+  orc_union32 var40;
+#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
+  volatile orc_union32 var41;
+#else
+  orc_union32 var41;
+#endif
+  orc_union32 var42;
+  orc_union16 var43;
+  orc_union16 var44;
+  orc_union32 var45;
+  orc_union16 var46;
+  orc_union32 var47;
+  orc_union32 var48;
+  orc_union16 var49;
+  orc_union32 var50;
+  orc_union16 var51;
+  orc_union32 var52;
+  orc_union32 var53;
+  orc_union32 var54;
+  orc_union32 var55;
+  orc_union32 var56;
+  orc_union32 var57;
+  orc_union32 var58;
+  orc_union16 var59;
+
+  ptr0 = (orc_union32 *) ex->arrays[0];
+  ptr4 = (orc_union32 *) ex->arrays[4];
+  ptr5 = (orc_union32 *) ex->arrays[5];
+  ptr6 = (orc_union32 *) ex->arrays[6];
+  ptr7 = (orc_union32 *) ex->arrays[7];
+
+  /* 17: loadpw */
+  var41.x2[0] = (int) 0x00000004;       /* 4 or 1.97626e-323f */
+  var41.x2[1] = (int) 0x00000004;       /* 4 or 1.97626e-323f */
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadl */
+    var37 = ptr4[i];
+    /* 1: splitlw */
+    {
+      orc_union32 _src;
+      _src.i = var37.i;
+      var43.i = _src.x2[1];
+      var44.i = _src.x2[0];
+    }
+    /* 2: convubw */
+    var45.x2[0] = (orc_uint8) var43.x2[0];
+    var45.x2[1] = (orc_uint8) var43.x2[1];
+    /* 3: loadl */
+    var38 = ptr7[i];
+    /* 4: select1lw */
+    {
+      orc_union32 _src;
+      _src.i = var38.i;
+      var46.i = _src.x2[1];
+    }
+    /* 5: convubw */
+    var47.x2[0] = (orc_uint8) var46.x2[0];
+    var47.x2[1] = (orc_uint8) var46.x2[1];
+    /* 6: addw */
+    var48.x2[0] = var45.x2[0] + var47.x2[0];
+    var48.x2[1] = var45.x2[1] + var47.x2[1];
+    /* 7: loadl */
+    var39 = ptr5[i];
+    /* 8: select1lw */
+    {
+      orc_union32 _src;
+      _src.i = var39.i;
+      var49.i = _src.x2[1];
+    }
+    /* 9: convubw */
+    var50.x2[0] = (orc_uint8) var49.x2[0];
+    var50.x2[1] = (orc_uint8) var49.x2[1];
+    /* 10: loadl */
+    var40 = ptr6[i];
+    /* 11: select1lw */
+    {
+      orc_union32 _src;
+      _src.i = var40.i;
+      var51.i = _src.x2[1];
+    }
+    /* 12: convubw */
+    var52.x2[0] = (orc_uint8) var51.x2[0];
+    var52.x2[1] = (orc_uint8) var51.x2[1];
+    /* 13: addw */
+    var53.x2[0] = var50.x2[0] + var52.x2[0];
+    var53.x2[1] = var50.x2[1] + var52.x2[1];
+    /* 14: shlw */
+    var54.x2[0] = ((orc_uint16) var53.x2[0]) << 1;
+    var54.x2[1] = ((orc_uint16) var53.x2[1]) << 1;
+    /* 15: addw */
+    var55.x2[0] = var53.x2[0] + var54.x2[0];
+    var55.x2[1] = var53.x2[1] + var54.x2[1];
+    /* 16: addw */
+    var56.x2[0] = var48.x2[0] + var55.x2[0];
+    var56.x2[1] = var48.x2[1] + var55.x2[1];
+    /* 18: addw */
+    var57.x2[0] = var56.x2[0] + var41.x2[0];
+    var57.x2[1] = var56.x2[1] + var41.x2[1];
+    /* 19: shruw */
+    var58.x2[0] = ((orc_uint16) var57.x2[0]) >> 3;
+    var58.x2[1] = ((orc_uint16) var57.x2[1]) >> 3;
+    /* 20: convsuswb */
+    var59.x2[0] = ORC_CLAMP_UB (var58.x2[0]);
+    var59.x2[1] = ORC_CLAMP_UB (var58.x2[1]);
+    /* 21: mergewl */
+    {
+      orc_union32 _dest;
+      _dest.x2[0] = var44.i;
+      _dest.x2[1] = var59.i;
+      var42.i = _dest.i;
+    }
+    /* 22: storel */
+    ptr0[i] = var42;
+  }
+
+}
+
+void
+video_orc_chroma_down_v4_u8 (guint8 * ORC_RESTRICT d1,
+    const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2,
+    const guint8 * ORC_RESTRICT s3, const guint8 * ORC_RESTRICT s4, int n)
+{
+  OrcExecutor _ex, *ex = &_ex;
+  static volatile int p_inited = 0;
+  static OrcCode *c = 0;
+  void (*func) (OrcExecutor *);
+
+  if (!p_inited) {
+    orc_once_mutex_lock ();
+    if (!p_inited) {
+      OrcProgram *p;
+
+#if 1
+      static const orc_uint8 bc[] = {
+        1, 9, 27, 118, 105, 100, 101, 111, 95, 111, 114, 99, 95, 99, 104, 114,
+        111, 109, 97, 95, 100, 111, 119, 110, 95, 118, 52, 95, 117, 56, 11, 4,
+        4, 12, 4, 4, 12, 4, 4, 12, 4, 4, 12, 4, 4, 14, 2, 1,
+        0, 0, 0, 14, 2, 4, 0, 0, 0, 14, 2, 3, 0, 0, 0, 20,
+        2, 20, 2, 20, 4, 20, 4, 20, 4, 198, 33, 32, 4, 21, 1, 150,
+        34, 33, 191, 33, 7, 21, 1, 150, 35, 33, 21, 1, 70, 36, 34, 35,
+        191, 33, 5, 21, 1, 150, 34, 33, 191, 33, 6, 21, 1, 150, 35, 33,
+        21, 1, 70, 34, 34, 35, 21, 1, 93, 35, 34, 16, 21, 1, 70, 34,
+        34, 35, 21, 1, 70, 36, 36, 34, 21, 1, 70, 36, 36, 17, 21, 1,
+        95, 36, 36, 18, 21, 1, 160, 33, 36, 195, 0, 32, 33, 2, 0,
+      };
+      p = orc_program_new_from_static_bytecode (bc);
+      orc_program_set_backup_function (p, _backup_video_orc_chroma_down_v4_u8);
+#else
+      p = orc_program_new ();
+      orc_program_set_name (p, "video_orc_chroma_down_v4_u8");
+      orc_program_set_backup_function (p, _backup_video_orc_chroma_down_v4_u8);
+      orc_program_add_destination (p, 4, "d1");
+      orc_program_add_source (p, 4, "s1");
+      orc_program_add_source (p, 4, "s2");
+      orc_program_add_source (p, 4, "s3");
+      orc_program_add_source (p, 4, "s4");
+      orc_program_add_constant (p, 2, 0x00000001, "c1");
+      orc_program_add_constant (p, 2, 0x00000004, "c2");
+      orc_program_add_constant (p, 2, 0x00000003, "c3");
+      orc_program_add_temporary (p, 2, "t1");
+      orc_program_add_temporary (p, 2, "t2");
+      orc_program_add_temporary (p, 4, "t3");
+      orc_program_add_temporary (p, 4, "t4");
+      orc_program_add_temporary (p, 4, "t5");
+
+      orc_program_append_2 (p, "splitlw", 0, ORC_VAR_T2, ORC_VAR_T1, ORC_VAR_S1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "convubw", 1, ORC_VAR_T3, ORC_VAR_T2, ORC_VAR_D1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "select1lw", 0, ORC_VAR_T2, ORC_VAR_S4,
+          ORC_VAR_D1, ORC_VAR_D1);
+      orc_program_append_2 (p, "convubw", 1, ORC_VAR_T4, ORC_VAR_T2, ORC_VAR_D1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "addw", 1, ORC_VAR_T5, ORC_VAR_T3, ORC_VAR_T4,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "select1lw", 0, ORC_VAR_T2, ORC_VAR_S2,
+          ORC_VAR_D1, ORC_VAR_D1);
+      orc_program_append_2 (p, "convubw", 1, ORC_VAR_T3, ORC_VAR_T2, ORC_VAR_D1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "select1lw", 0, ORC_VAR_T2, ORC_VAR_S3,
+          ORC_VAR_D1, ORC_VAR_D1);
+      orc_program_append_2 (p, "convubw", 1, ORC_VAR_T4, ORC_VAR_T2, ORC_VAR_D1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "addw", 1, ORC_VAR_T3, ORC_VAR_T3, ORC_VAR_T4,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "shlw", 1, ORC_VAR_T4, ORC_VAR_T3, ORC_VAR_C1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "addw", 1, ORC_VAR_T3, ORC_VAR_T3, ORC_VAR_T4,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "addw", 1, ORC_VAR_T5, ORC_VAR_T5, ORC_VAR_T3,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "addw", 1, ORC_VAR_T5, ORC_VAR_T5, ORC_VAR_C2,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "shruw", 1, ORC_VAR_T5, ORC_VAR_T5, ORC_VAR_C3,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "convsuswb", 1, ORC_VAR_T2, ORC_VAR_T5,
+          ORC_VAR_D1, ORC_VAR_D1);
+      orc_program_append_2 (p, "mergewl", 0, ORC_VAR_D1, ORC_VAR_T1, ORC_VAR_T2,
+          ORC_VAR_D1);
+#endif
+
+      orc_program_compile (p);
+      c = orc_program_take_code (p);
+      orc_program_free (p);
+    }
+    p_inited = TRUE;
+    orc_once_mutex_unlock ();
+  }
+  ex->arrays[ORC_VAR_A2] = c;
+  ex->program = 0;
+
+  ex->n = n;
+  ex->arrays[ORC_VAR_D1] = d1;
+  ex->arrays[ORC_VAR_S1] = (void *) s1;
+  ex->arrays[ORC_VAR_S2] = (void *) s2;
+  ex->arrays[ORC_VAR_S3] = (void *) s3;
+  ex->arrays[ORC_VAR_S4] = (void *) s4;
+
+  func = c->exec;
+  func (ex);
+}
+#endif
+
+
+/* video_orc_chroma_down_v4_u16 */
+#ifdef DISABLE_ORC
+void
+video_orc_chroma_down_v4_u16 (guint16 * ORC_RESTRICT d1,
+    const guint16 * ORC_RESTRICT s1, const guint16 * ORC_RESTRICT s2,
+    const guint16 * ORC_RESTRICT s3, const guint16 * ORC_RESTRICT s4, int n)
+{
+  int i;
+  orc_union64 *ORC_RESTRICT ptr0;
+  const orc_union64 *ORC_RESTRICT ptr4;
+  const orc_union64 *ORC_RESTRICT ptr5;
+  const orc_union64 *ORC_RESTRICT ptr6;
+  const orc_union64 *ORC_RESTRICT ptr7;
+  orc_union64 var37;
+  orc_union64 var38;
+  orc_union64 var39;
+  orc_union64 var40;
+#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
+  volatile orc_union64 var41;
+#else
+  orc_union64 var41;
+#endif
+  orc_union64 var42;
+  orc_union32 var43;
+  orc_union32 var44;
+  orc_union64 var45;
+  orc_union32 var46;
+  orc_union64 var47;
+  orc_union64 var48;
+  orc_union32 var49;
+  orc_union64 var50;
+  orc_union32 var51;
+  orc_union64 var52;
+  orc_union64 var53;
+  orc_union64 var54;
+  orc_union64 var55;
+  orc_union64 var56;
+  orc_union64 var57;
+  orc_union64 var58;
+  orc_union32 var59;
+
+  ptr0 = (orc_union64 *) d1;
+  ptr4 = (orc_union64 *) s1;
+  ptr5 = (orc_union64 *) s2;
+  ptr6 = (orc_union64 *) s3;
+  ptr7 = (orc_union64 *) s4;
+
+  /* 17: loadpl */
+  var41.x2[0] = (int) 0x00000004;       /* 4 or 1.97626e-323f */
+  var41.x2[1] = (int) 0x00000004;       /* 4 or 1.97626e-323f */
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadq */
+    var37 = ptr4[i];
+    /* 1: splitql */
+    {
+      orc_union64 _src;
+      _src.i = var37.i;
+      var43.i = _src.x2[1];
+      var44.i = _src.x2[0];
+    }
+    /* 2: convuwl */
+    var45.x2[0] = (orc_uint16) var43.x2[0];
+    var45.x2[1] = (orc_uint16) var43.x2[1];
+    /* 3: loadq */
+    var38 = ptr7[i];
+    /* 4: select1ql */
+    {
+      orc_union64 _src;
+      _src.i = var38.i;
+      var46.i = _src.x2[1];
+    }
+    /* 5: convuwl */
+    var47.x2[0] = (orc_uint16) var46.x2[0];
+    var47.x2[1] = (orc_uint16) var46.x2[1];
+    /* 6: addl */
+    var48.x2[0] = ((orc_uint32) var45.x2[0]) + ((orc_uint32) var47.x2[0]);
+    var48.x2[1] = ((orc_uint32) var45.x2[1]) + ((orc_uint32) var47.x2[1]);
+    /* 7: loadq */
+    var39 = ptr5[i];
+    /* 8: select1ql */
+    {
+      orc_union64 _src;
+      _src.i = var39.i;
+      var49.i = _src.x2[1];
+    }
+    /* 9: convuwl */
+    var50.x2[0] = (orc_uint16) var49.x2[0];
+    var50.x2[1] = (orc_uint16) var49.x2[1];
+    /* 10: loadq */
+    var40 = ptr6[i];
+    /* 11: select1ql */
+    {
+      orc_union64 _src;
+      _src.i = var40.i;
+      var51.i = _src.x2[1];
+    }
+    /* 12: convuwl */
+    var52.x2[0] = (orc_uint16) var51.x2[0];
+    var52.x2[1] = (orc_uint16) var51.x2[1];
+    /* 13: addl */
+    var53.x2[0] = ((orc_uint32) var50.x2[0]) + ((orc_uint32) var52.x2[0]);
+    var53.x2[1] = ((orc_uint32) var50.x2[1]) + ((orc_uint32) var52.x2[1]);
+    /* 14: shll */
+    var54.x2[0] = ((orc_uint32) var53.x2[0]) << 1;
+    var54.x2[1] = ((orc_uint32) var53.x2[1]) << 1;
+    /* 15: addl */
+    var55.x2[0] = ((orc_uint32) var53.x2[0]) + ((orc_uint32) var54.x2[0]);
+    var55.x2[1] = ((orc_uint32) var53.x2[1]) + ((orc_uint32) var54.x2[1]);
+    /* 16: addl */
+    var56.x2[0] = ((orc_uint32) var48.x2[0]) + ((orc_uint32) var55.x2[0]);
+    var56.x2[1] = ((orc_uint32) var48.x2[1]) + ((orc_uint32) var55.x2[1]);
+    /* 18: addl */
+    var57.x2[0] = ((orc_uint32) var56.x2[0]) + ((orc_uint32) var41.x2[0]);
+    var57.x2[1] = ((orc_uint32) var56.x2[1]) + ((orc_uint32) var41.x2[1]);
+    /* 19: shrul */
+    var58.x2[0] = ((orc_uint32) var57.x2[0]) >> 3;
+    var58.x2[1] = ((orc_uint32) var57.x2[1]) >> 3;
+    /* 20: convsuslw */
+    var59.x2[0] = ORC_CLAMP_UW (var58.x2[0]);
+    var59.x2[1] = ORC_CLAMP_UW (var58.x2[1]);
+    /* 21: mergelq */
+    {
+      orc_union64 _dest;
+      _dest.x2[0] = var44.i;
+      _dest.x2[1] = var59.i;
+      var42.i = _dest.i;
+    }
+    /* 22: storeq */
+    ptr0[i] = var42;
+  }
+
+}
+
+#else
+static void
+_backup_video_orc_chroma_down_v4_u16 (OrcExecutor * ORC_RESTRICT ex)
+{
+  int i;
+  int n = ex->n;
+  orc_union64 *ORC_RESTRICT ptr0;
+  const orc_union64 *ORC_RESTRICT ptr4;
+  const orc_union64 *ORC_RESTRICT ptr5;
+  const orc_union64 *ORC_RESTRICT ptr6;
+  const orc_union64 *ORC_RESTRICT ptr7;
+  orc_union64 var37;
+  orc_union64 var38;
+  orc_union64 var39;
+  orc_union64 var40;
+#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
+  volatile orc_union64 var41;
+#else
+  orc_union64 var41;
+#endif
+  orc_union64 var42;
+  orc_union32 var43;
+  orc_union32 var44;
+  orc_union64 var45;
+  orc_union32 var46;
+  orc_union64 var47;
+  orc_union64 var48;
+  orc_union32 var49;
+  orc_union64 var50;
+  orc_union32 var51;
+  orc_union64 var52;
+  orc_union64 var53;
+  orc_union64 var54;
+  orc_union64 var55;
+  orc_union64 var56;
+  orc_union64 var57;
+  orc_union64 var58;
+  orc_union32 var59;
+
+  ptr0 = (orc_union64 *) ex->arrays[0];
+  ptr4 = (orc_union64 *) ex->arrays[4];
+  ptr5 = (orc_union64 *) ex->arrays[5];
+  ptr6 = (orc_union64 *) ex->arrays[6];
+  ptr7 = (orc_union64 *) ex->arrays[7];
+
+  /* 17: loadpl */
+  var41.x2[0] = (int) 0x00000004;       /* 4 or 1.97626e-323f */
+  var41.x2[1] = (int) 0x00000004;       /* 4 or 1.97626e-323f */
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadq */
+    var37 = ptr4[i];
+    /* 1: splitql */
+    {
+      orc_union64 _src;
+      _src.i = var37.i;
+      var43.i = _src.x2[1];
+      var44.i = _src.x2[0];
+    }
+    /* 2: convuwl */
+    var45.x2[0] = (orc_uint16) var43.x2[0];
+    var45.x2[1] = (orc_uint16) var43.x2[1];
+    /* 3: loadq */
+    var38 = ptr7[i];
+    /* 4: select1ql */
+    {
+      orc_union64 _src;
+      _src.i = var38.i;
+      var46.i = _src.x2[1];
+    }
+    /* 5: convuwl */
+    var47.x2[0] = (orc_uint16) var46.x2[0];
+    var47.x2[1] = (orc_uint16) var46.x2[1];
+    /* 6: addl */
+    var48.x2[0] = ((orc_uint32) var45.x2[0]) + ((orc_uint32) var47.x2[0]);
+    var48.x2[1] = ((orc_uint32) var45.x2[1]) + ((orc_uint32) var47.x2[1]);
+    /* 7: loadq */
+    var39 = ptr5[i];
+    /* 8: select1ql */
+    {
+      orc_union64 _src;
+      _src.i = var39.i;
+      var49.i = _src.x2[1];
+    }
+    /* 9: convuwl */
+    var50.x2[0] = (orc_uint16) var49.x2[0];
+    var50.x2[1] = (orc_uint16) var49.x2[1];
+    /* 10: loadq */
+    var40 = ptr6[i];
+    /* 11: select1ql */
+    {
+      orc_union64 _src;
+      _src.i = var40.i;
+      var51.i = _src.x2[1];
+    }
+    /* 12: convuwl */
+    var52.x2[0] = (orc_uint16) var51.x2[0];
+    var52.x2[1] = (orc_uint16) var51.x2[1];
+    /* 13: addl */
+    var53.x2[0] = ((orc_uint32) var50.x2[0]) + ((orc_uint32) var52.x2[0]);
+    var53.x2[1] = ((orc_uint32) var50.x2[1]) + ((orc_uint32) var52.x2[1]);
+    /* 14: shll */
+    var54.x2[0] = ((orc_uint32) var53.x2[0]) << 1;
+    var54.x2[1] = ((orc_uint32) var53.x2[1]) << 1;
+    /* 15: addl */
+    var55.x2[0] = ((orc_uint32) var53.x2[0]) + ((orc_uint32) var54.x2[0]);
+    var55.x2[1] = ((orc_uint32) var53.x2[1]) + ((orc_uint32) var54.x2[1]);
+    /* 16: addl */
+    var56.x2[0] = ((orc_uint32) var48.x2[0]) + ((orc_uint32) var55.x2[0]);
+    var56.x2[1] = ((orc_uint32) var48.x2[1]) + ((orc_uint32) var55.x2[1]);
+    /* 18: addl */
+    var57.x2[0] = ((orc_uint32) var56.x2[0]) + ((orc_uint32) var41.x2[0]);
+    var57.x2[1] = ((orc_uint32) var56.x2[1]) + ((orc_uint32) var41.x2[1]);
+    /* 19: shrul */
+    var58.x2[0] = ((orc_uint32) var57.x2[0]) >> 3;
+    var58.x2[1] = ((orc_uint32) var57.x2[1]) >> 3;
+    /* 20: convsuslw */
+    var59.x2[0] = ORC_CLAMP_UW (var58.x2[0]);
+    var59.x2[1] = ORC_CLAMP_UW (var58.x2[1]);
+    /* 21: mergelq */
+    {
+      orc_union64 _dest;
+      _dest.x2[0] = var44.i;
+      _dest.x2[1] = var59.i;
+      var42.i = _dest.i;
+    }
+    /* 22: storeq */
+    ptr0[i] = var42;
+  }
+
+}
+
+void
+video_orc_chroma_down_v4_u16 (guint16 * ORC_RESTRICT d1,
+    const guint16 * ORC_RESTRICT s1, const guint16 * ORC_RESTRICT s2,
+    const guint16 * ORC_RESTRICT s3, const guint16 * ORC_RESTRICT s4, int n)
+{
+  OrcExecutor _ex, *ex = &_ex;
+  static volatile int p_inited = 0;
+  static OrcCode *c = 0;
+  void (*func) (OrcExecutor *);
+
+  if (!p_inited) {
+    orc_once_mutex_lock ();
+    if (!p_inited) {
+      OrcProgram *p;
+
+#if 1
+      static const orc_uint8 bc[] = {
+        1, 9, 28, 118, 105, 100, 101, 111, 95, 111, 114, 99, 95, 99, 104, 114,
+        111, 109, 97, 95, 100, 111, 119, 110, 95, 118, 52, 95, 117, 49, 54, 11,
+        8, 8, 12, 8, 8, 12, 8, 8, 12, 8, 8, 12, 8, 8, 14, 4,
+        1, 0, 0, 0, 14, 4, 4, 0, 0, 0, 14, 4, 3, 0, 0, 0,
+        20, 4, 20, 4, 20, 8, 20, 8, 20, 8, 197, 33, 32, 4, 21, 1,
+        154, 34, 33, 193, 33, 7, 21, 1, 154, 35, 33, 21, 1, 103, 36, 34,
+        35, 193, 33, 5, 21, 1, 154, 34, 33, 193, 33, 6, 21, 1, 154, 35,
+        33, 21, 1, 103, 34, 34, 35, 21, 1, 124, 35, 34, 16, 21, 1, 103,
+        34, 34, 35, 21, 1, 103, 36, 36, 34, 21, 1, 103, 36, 36, 17, 21,
+        1, 126, 36, 36, 18, 21, 1, 166, 33, 36, 194, 0, 32, 33, 2, 0,
+
+      };
+      p = orc_program_new_from_static_bytecode (bc);
+      orc_program_set_backup_function (p, _backup_video_orc_chroma_down_v4_u16);
+#else
+      p = orc_program_new ();
+      orc_program_set_name (p, "video_orc_chroma_down_v4_u16");
+      orc_program_set_backup_function (p, _backup_video_orc_chroma_down_v4_u16);
+      orc_program_add_destination (p, 8, "d1");
+      orc_program_add_source (p, 8, "s1");
+      orc_program_add_source (p, 8, "s2");
+      orc_program_add_source (p, 8, "s3");
+      orc_program_add_source (p, 8, "s4");
+      orc_program_add_constant (p, 4, 0x00000001, "c1");
+      orc_program_add_constant (p, 4, 0x00000004, "c2");
+      orc_program_add_constant (p, 4, 0x00000003, "c3");
+      orc_program_add_temporary (p, 4, "t1");
+      orc_program_add_temporary (p, 4, "t2");
+      orc_program_add_temporary (p, 8, "t3");
+      orc_program_add_temporary (p, 8, "t4");
+      orc_program_add_temporary (p, 8, "t5");
+
+      orc_program_append_2 (p, "splitql", 0, ORC_VAR_T2, ORC_VAR_T1, ORC_VAR_S1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "convuwl", 1, ORC_VAR_T3, ORC_VAR_T2, ORC_VAR_D1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "select1ql", 0, ORC_VAR_T2, ORC_VAR_S4,
+          ORC_VAR_D1, ORC_VAR_D1);
+      orc_program_append_2 (p, "convuwl", 1, ORC_VAR_T4, ORC_VAR_T2, ORC_VAR_D1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "addl", 1, ORC_VAR_T5, ORC_VAR_T3, ORC_VAR_T4,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "select1ql", 0, ORC_VAR_T2, ORC_VAR_S2,
+          ORC_VAR_D1, ORC_VAR_D1);
+      orc_program_append_2 (p, "convuwl", 1, ORC_VAR_T3, ORC_VAR_T2, ORC_VAR_D1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "select1ql", 0, ORC_VAR_T2, ORC_VAR_S3,
+          ORC_VAR_D1, ORC_VAR_D1);
+      orc_program_append_2 (p, "convuwl", 1, ORC_VAR_T4, ORC_VAR_T2, ORC_VAR_D1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "addl", 1, ORC_VAR_T3, ORC_VAR_T3, ORC_VAR_T4,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "shll", 1, ORC_VAR_T4, ORC_VAR_T3, ORC_VAR_C1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "addl", 1, ORC_VAR_T3, ORC_VAR_T3, ORC_VAR_T4,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "addl", 1, ORC_VAR_T5, ORC_VAR_T5, ORC_VAR_T3,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "addl", 1, ORC_VAR_T5, ORC_VAR_T5, ORC_VAR_C2,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "shrul", 1, ORC_VAR_T5, ORC_VAR_T5, ORC_VAR_C3,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "convsuslw", 1, ORC_VAR_T2, ORC_VAR_T5,
+          ORC_VAR_D1, ORC_VAR_D1);
+      orc_program_append_2 (p, "mergelq", 0, ORC_VAR_D1, ORC_VAR_T1, ORC_VAR_T2,
+          ORC_VAR_D1);
+#endif
+
+      orc_program_compile (p);
+      c = orc_program_take_code (p);
+      orc_program_free (p);
+    }
+    p_inited = TRUE;
+    orc_once_mutex_unlock ();
+  }
+  ex->arrays[ORC_VAR_A2] = c;
+  ex->program = 0;
+
+  ex->n = n;
+  ex->arrays[ORC_VAR_D1] = d1;
+  ex->arrays[ORC_VAR_S1] = (void *) s1;
+  ex->arrays[ORC_VAR_S2] = (void *) s2;
+  ex->arrays[ORC_VAR_S3] = (void *) s3;
+  ex->arrays[ORC_VAR_S4] = (void *) s4;
+
+  func = c->exec;
+  func (ex);
+}
+#endif
+
+
+/* video_orc_dither_none_4u8_mask */
+#ifdef DISABLE_ORC
+void
+video_orc_dither_none_4u8_mask (guint8 * ORC_RESTRICT d1, int p1, int n)
+{
+  int i;
+  orc_union32 *ORC_RESTRICT ptr0;
+  orc_union32 var33;
+  orc_union32 var34;
+  orc_union32 var35;
+
+  ptr0 = (orc_union32 *) d1;
+
+  /* 0: loadpl */
+  var35.i = p1;
+
+  for (i = 0; i < n; i++) {
+    /* 1: loadl */
+    var33 = ptr0[i];
+    /* 2: andnb */
+    var34.x4[0] = (~var35.x4[0]) & var33.x4[0];
+    var34.x4[1] = (~var35.x4[1]) & var33.x4[1];
+    var34.x4[2] = (~var35.x4[2]) & var33.x4[2];
+    var34.x4[3] = (~var35.x4[3]) & var33.x4[3];
+    /* 3: storel */
+    ptr0[i] = var34;
+  }
+
+}
+
+#else
+static void
+_backup_video_orc_dither_none_4u8_mask (OrcExecutor * ORC_RESTRICT ex)
+{
+  int i;
+  int n = ex->n;
+  orc_union32 *ORC_RESTRICT ptr0;
+  orc_union32 var33;
+  orc_union32 var34;
+  orc_union32 var35;
+
+  ptr0 = (orc_union32 *) ex->arrays[0];
+
+  /* 0: loadpl */
+  var35.i = ex->params[24];
+
+  for (i = 0; i < n; i++) {
+    /* 1: loadl */
+    var33 = ptr0[i];
+    /* 2: andnb */
+    var34.x4[0] = (~var35.x4[0]) & var33.x4[0];
+    var34.x4[1] = (~var35.x4[1]) & var33.x4[1];
+    var34.x4[2] = (~var35.x4[2]) & var33.x4[2];
+    var34.x4[3] = (~var35.x4[3]) & var33.x4[3];
+    /* 3: storel */
+    ptr0[i] = var34;
+  }
+
+}
+
+void
+video_orc_dither_none_4u8_mask (guint8 * ORC_RESTRICT d1, int p1, int n)
+{
+  OrcExecutor _ex, *ex = &_ex;
+  static volatile int p_inited = 0;
+  static OrcCode *c = 0;
+  void (*func) (OrcExecutor *);
+
+  if (!p_inited) {
+    orc_once_mutex_lock ();
+    if (!p_inited) {
+      OrcProgram *p;
+
+#if 1
+      static const orc_uint8 bc[] = {
+        1, 9, 30, 118, 105, 100, 101, 111, 95, 111, 114, 99, 95, 100, 105, 116,
+        104, 101, 114, 95, 110, 111, 110, 101, 95, 52, 117, 56, 95, 109, 97,
+        115,
+        107, 11, 4, 4, 16, 4, 20, 4, 115, 32, 24, 21, 2, 37, 0, 32,
+        0, 2, 0,
+      };
+      p = orc_program_new_from_static_bytecode (bc);
+      orc_program_set_backup_function (p,
+          _backup_video_orc_dither_none_4u8_mask);
+#else
+      p = orc_program_new ();
+      orc_program_set_name (p, "video_orc_dither_none_4u8_mask");
+      orc_program_set_backup_function (p,
+          _backup_video_orc_dither_none_4u8_mask);
+      orc_program_add_destination (p, 4, "d1");
+      orc_program_add_parameter (p, 4, "p1");
+      orc_program_add_temporary (p, 4, "t1");
+
+      orc_program_append_2 (p, "loadpl", 0, ORC_VAR_T1, ORC_VAR_P1, ORC_VAR_D1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "andnb", 2, ORC_VAR_D1, ORC_VAR_T1, ORC_VAR_D1,
+          ORC_VAR_D1);
+#endif
+
+      orc_program_compile (p);
+      c = orc_program_take_code (p);
+      orc_program_free (p);
+    }
+    p_inited = TRUE;
+    orc_once_mutex_unlock ();
+  }
+  ex->arrays[ORC_VAR_A2] = c;
+  ex->program = 0;
+
+  ex->n = n;
+  ex->arrays[ORC_VAR_D1] = d1;
+  ex->params[ORC_VAR_P1] = p1;
+
+  func = c->exec;
+  func (ex);
+}
+#endif
+
+
+/* video_orc_dither_none_4u16_mask */
+#ifdef DISABLE_ORC
+void
+video_orc_dither_none_4u16_mask (guint16 * ORC_RESTRICT d1, orc_int64 p1, int n)
+{
+  int i;
+  orc_union64 *ORC_RESTRICT ptr0;
+  orc_union64 var33;
+  orc_union64 var34;
+  orc_union64 var35;
+
+  ptr0 = (orc_union64 *) d1;
+
+  /* 0: loadpq */
+  var35.i = p1;
+
+  for (i = 0; i < n; i++) {
+    /* 1: loadq */
+    var33 = ptr0[i];
+    /* 2: andnw */
+    var34.x4[0] = (~var35.x4[0]) & var33.x4[0];
+    var34.x4[1] = (~var35.x4[1]) & var33.x4[1];
+    var34.x4[2] = (~var35.x4[2]) & var33.x4[2];
+    var34.x4[3] = (~var35.x4[3]) & var33.x4[3];
+    /* 3: storeq */
+    ptr0[i] = var34;
+  }
+
+}
+
+#else
+static void
+_backup_video_orc_dither_none_4u16_mask (OrcExecutor * ORC_RESTRICT ex)
+{
+  int i;
+  int n = ex->n;
+  orc_union64 *ORC_RESTRICT ptr0;
+  orc_union64 var33;
+  orc_union64 var34;
+  orc_union64 var35;
+
+  ptr0 = (orc_union64 *) ex->arrays[0];
+
+  /* 0: loadpq */
+  var35.i =
+      (ex->params[24] & 0xffffffff) | ((orc_uint64) (ex->params[24 +
+              (ORC_VAR_T1 - ORC_VAR_P1)]) << 32);
+
+  for (i = 0; i < n; i++) {
+    /* 1: loadq */
+    var33 = ptr0[i];
+    /* 2: andnw */
+    var34.x4[0] = (~var35.x4[0]) & var33.x4[0];
+    var34.x4[1] = (~var35.x4[1]) & var33.x4[1];
+    var34.x4[2] = (~var35.x4[2]) & var33.x4[2];
+    var34.x4[3] = (~var35.x4[3]) & var33.x4[3];
+    /* 3: storeq */
+    ptr0[i] = var34;
+  }
+
+}
+
+void
+video_orc_dither_none_4u16_mask (guint16 * ORC_RESTRICT d1, orc_int64 p1, int n)
+{
+  OrcExecutor _ex, *ex = &_ex;
+  static volatile int p_inited = 0;
+  static OrcCode *c = 0;
+  void (*func) (OrcExecutor *);
+
+  if (!p_inited) {
+    orc_once_mutex_lock ();
+    if (!p_inited) {
+      OrcProgram *p;
+
+#if 1
+      static const orc_uint8 bc[] = {
+        1, 9, 31, 118, 105, 100, 101, 111, 95, 111, 114, 99, 95, 100, 105, 116,
+        104, 101, 114, 95, 110, 111, 110, 101, 95, 52, 117, 49, 54, 95, 109, 97,
+        115, 107, 11, 8, 8, 18, 8, 20, 8, 134, 32, 24, 21, 2, 74, 0,
+        32, 0, 2, 0,
+      };
+      p = orc_program_new_from_static_bytecode (bc);
+      orc_program_set_backup_function (p,
+          _backup_video_orc_dither_none_4u16_mask);
+#else
+      p = orc_program_new ();
+      orc_program_set_name (p, "video_orc_dither_none_4u16_mask");
+      orc_program_set_backup_function (p,
+          _backup_video_orc_dither_none_4u16_mask);
+      orc_program_add_destination (p, 8, "d1");
+      orc_program_add_parameter_int64 (p, 8, "p1");
+      orc_program_add_temporary (p, 8, "t1");
+
+      orc_program_append_2 (p, "loadpq", 0, ORC_VAR_T1, ORC_VAR_P1, ORC_VAR_D1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "andnw", 2, ORC_VAR_D1, ORC_VAR_T1, ORC_VAR_D1,
+          ORC_VAR_D1);
+#endif
+
+      orc_program_compile (p);
+      c = orc_program_take_code (p);
+      orc_program_free (p);
+    }
+    p_inited = TRUE;
+    orc_once_mutex_unlock ();
+  }
+  ex->arrays[ORC_VAR_A2] = c;
+  ex->program = 0;
+
+  ex->n = n;
+  ex->arrays[ORC_VAR_D1] = d1;
+  {
+    orc_union64 tmp;
+    tmp.i = p1;
+    ex->params[ORC_VAR_P1] = ((orc_uint64) tmp.i) & 0xffffffff;
+    ex->params[ORC_VAR_T1] = ((orc_uint64) tmp.i) >> 32;
+  }
+
+  func = c->exec;
+  func (ex);
+}
+#endif
+
+
+/* video_orc_dither_verterr_4u8_mask */
+#ifdef DISABLE_ORC
+void
+video_orc_dither_verterr_4u8_mask (guint8 * ORC_RESTRICT d1,
+    guint16 * ORC_RESTRICT d2, orc_int64 p1, int n)
+{
+  int i;
+  orc_union32 *ORC_RESTRICT ptr0;
+  orc_union64 *ORC_RESTRICT ptr1;
+  orc_union32 var34;
+  orc_union64 var35;
+  orc_union64 var36;
+  orc_union32 var37;
+  orc_union64 var38;
+  orc_union64 var39;
+  orc_union64 var40;
+  orc_union64 var41;
+
+  ptr0 = (orc_union32 *) d1;
+  ptr1 = (orc_union64 *) d2;
+
+  /* 0: loadpq */
+  var38.i = p1;
+
+  for (i = 0; i < n; i++) {
+    /* 1: loadl */
+    var34 = ptr0[i];
+    /* 2: convubw */
+    var39.x4[0] = (orc_uint8) var34.x4[0];
+    var39.x4[1] = (orc_uint8) var34.x4[1];
+    var39.x4[2] = (orc_uint8) var34.x4[2];
+    var39.x4[3] = (orc_uint8) var34.x4[3];
+    /* 3: loadq */
+    var35 = ptr1[i];
+    /* 4: addw */
+    var40.x4[0] = var35.x4[0] + var39.x4[0];
+    var40.x4[1] = var35.x4[1] + var39.x4[1];
+    var40.x4[2] = var35.x4[2] + var39.x4[2];
+    var40.x4[3] = var35.x4[3] + var39.x4[3];
+    /* 5: andw */
+    var36.x4[0] = var38.x4[0] & var40.x4[0];
+    var36.x4[1] = var38.x4[1] & var40.x4[1];
+    var36.x4[2] = var38.x4[2] & var40.x4[2];
+    var36.x4[3] = var38.x4[3] & var40.x4[3];
+    /* 6: storeq */
+    ptr1[i] = var36;
+    /* 7: andnw */
+    var41.x4[0] = (~var38.x4[0]) & var40.x4[0];
+    var41.x4[1] = (~var38.x4[1]) & var40.x4[1];
+    var41.x4[2] = (~var38.x4[2]) & var40.x4[2];
+    var41.x4[3] = (~var38.x4[3]) & var40.x4[3];
+    /* 8: convsuswb */
+    var37.x4[0] = ORC_CLAMP_UB (var41.x4[0]);
+    var37.x4[1] = ORC_CLAMP_UB (var41.x4[1]);
+    var37.x4[2] = ORC_CLAMP_UB (var41.x4[2]);
+    var37.x4[3] = ORC_CLAMP_UB (var41.x4[3]);
+    /* 9: storel */
+    ptr0[i] = var37;
+  }
+
+}
+
+#else
+static void
+_backup_video_orc_dither_verterr_4u8_mask (OrcExecutor * ORC_RESTRICT ex)
+{
+  int i;
+  int n = ex->n;
+  orc_union32 *ORC_RESTRICT ptr0;
+  orc_union64 *ORC_RESTRICT ptr1;
+  orc_union32 var34;
+  orc_union64 var35;
+  orc_union64 var36;
+  orc_union32 var37;
+  orc_union64 var38;
+  orc_union64 var39;
+  orc_union64 var40;
+  orc_union64 var41;
+
+  ptr0 = (orc_union32 *) ex->arrays[0];
+  ptr1 = (orc_union64 *) ex->arrays[1];
+
+  /* 0: loadpq */
+  var38.i =
+      (ex->params[24] & 0xffffffff) | ((orc_uint64) (ex->params[24 +
+              (ORC_VAR_T1 - ORC_VAR_P1)]) << 32);
+
+  for (i = 0; i < n; i++) {
+    /* 1: loadl */
+    var34 = ptr0[i];
+    /* 2: convubw */
+    var39.x4[0] = (orc_uint8) var34.x4[0];
+    var39.x4[1] = (orc_uint8) var34.x4[1];
+    var39.x4[2] = (orc_uint8) var34.x4[2];
+    var39.x4[3] = (orc_uint8) var34.x4[3];
+    /* 3: loadq */
+    var35 = ptr1[i];
+    /* 4: addw */
+    var40.x4[0] = var35.x4[0] + var39.x4[0];
+    var40.x4[1] = var35.x4[1] + var39.x4[1];
+    var40.x4[2] = var35.x4[2] + var39.x4[2];
+    var40.x4[3] = var35.x4[3] + var39.x4[3];
+    /* 5: andw */
+    var36.x4[0] = var38.x4[0] & var40.x4[0];
+    var36.x4[1] = var38.x4[1] & var40.x4[1];
+    var36.x4[2] = var38.x4[2] & var40.x4[2];
+    var36.x4[3] = var38.x4[3] & var40.x4[3];
+    /* 6: storeq */
+    ptr1[i] = var36;
+    /* 7: andnw */
+    var41.x4[0] = (~var38.x4[0]) & var40.x4[0];
+    var41.x4[1] = (~var38.x4[1]) & var40.x4[1];
+    var41.x4[2] = (~var38.x4[2]) & var40.x4[2];
+    var41.x4[3] = (~var38.x4[3]) & var40.x4[3];
+    /* 8: convsuswb */
+    var37.x4[0] = ORC_CLAMP_UB (var41.x4[0]);
+    var37.x4[1] = ORC_CLAMP_UB (var41.x4[1]);
+    var37.x4[2] = ORC_CLAMP_UB (var41.x4[2]);
+    var37.x4[3] = ORC_CLAMP_UB (var41.x4[3]);
+    /* 9: storel */
+    ptr0[i] = var37;
+  }
+
+}
+
+void
+video_orc_dither_verterr_4u8_mask (guint8 * ORC_RESTRICT d1,
+    guint16 * ORC_RESTRICT d2, orc_int64 p1, int n)
+{
+  OrcExecutor _ex, *ex = &_ex;
+  static volatile int p_inited = 0;
+  static OrcCode *c = 0;
+  void (*func) (OrcExecutor *);
+
+  if (!p_inited) {
+    orc_once_mutex_lock ();
+    if (!p_inited) {
+      OrcProgram *p;
+
+#if 1
+      static const orc_uint8 bc[] = {
+        1, 9, 33, 118, 105, 100, 101, 111, 95, 111, 114, 99, 95, 100, 105, 116,
+        104, 101, 114, 95, 118, 101, 114, 116, 101, 114, 114, 95, 52, 117, 56,
+        95,
+        109, 97, 115, 107, 11, 4, 4, 11, 8, 8, 18, 8, 20, 8, 20, 8,
+        134, 32, 24, 21, 2, 150, 33, 0, 21, 2, 70, 33, 1, 33, 21, 2,
+        73, 1, 32, 33, 21, 2, 74, 33, 32, 33, 21, 2, 160, 0, 33, 2,
+        0,
+      };
+      p = orc_program_new_from_static_bytecode (bc);
+      orc_program_set_backup_function (p,
+          _backup_video_orc_dither_verterr_4u8_mask);
+#else
+      p = orc_program_new ();
+      orc_program_set_name (p, "video_orc_dither_verterr_4u8_mask");
+      orc_program_set_backup_function (p,
+          _backup_video_orc_dither_verterr_4u8_mask);
+      orc_program_add_destination (p, 4, "d1");
+      orc_program_add_destination (p, 8, "d2");
+      orc_program_add_parameter_int64 (p, 8, "p1");
+      orc_program_add_temporary (p, 8, "t1");
+      orc_program_add_temporary (p, 8, "t2");
+
+      orc_program_append_2 (p, "loadpq", 0, ORC_VAR_T1, ORC_VAR_P1, ORC_VAR_D1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "convubw", 2, ORC_VAR_T2, ORC_VAR_D1, ORC_VAR_D1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "addw", 2, ORC_VAR_T2, ORC_VAR_D2, ORC_VAR_T2,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "andw", 2, ORC_VAR_D2, ORC_VAR_T1, ORC_VAR_T2,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "andnw", 2, ORC_VAR_T2, ORC_VAR_T1, ORC_VAR_T2,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "convsuswb", 2, ORC_VAR_D1, ORC_VAR_T2,
+          ORC_VAR_D1, ORC_VAR_D1);
+#endif
+
+      orc_program_compile (p);
+      c = orc_program_take_code (p);
+      orc_program_free (p);
+    }
+    p_inited = TRUE;
+    orc_once_mutex_unlock ();
+  }
+  ex->arrays[ORC_VAR_A2] = c;
+  ex->program = 0;
+
+  ex->n = n;
+  ex->arrays[ORC_VAR_D1] = d1;
+  ex->arrays[ORC_VAR_D2] = d2;
+  {
+    orc_union64 tmp;
+    tmp.i = p1;
+    ex->params[ORC_VAR_P1] = ((orc_uint64) tmp.i) & 0xffffffff;
+    ex->params[ORC_VAR_T1] = ((orc_uint64) tmp.i) >> 32;
+  }
+
+  func = c->exec;
+  func (ex);
+}
+#endif
+
+
+/* video_orc_dither_fs_muladd_u8 */
+#ifdef DISABLE_ORC
+void
+video_orc_dither_fs_muladd_u8 (guint16 * ORC_RESTRICT d1, int n)
+{
+  int i;
+  orc_union16 *ORC_RESTRICT ptr0;
+#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
+  volatile orc_union16 var34;
+#else
+  orc_union16 var34;
+#endif
+  orc_union16 var35;
+#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
+  volatile orc_union16 var36;
+#else
+  orc_union16 var36;
+#endif
+  orc_union16 var37;
+  orc_union16 var38;
+  orc_union16 var39;
+  orc_union16 var40;
+  orc_union16 var41;
+  orc_union16 var42;
+
+  ptr0 = (orc_union16 *) d1;
+
+  /* 1: loadpw */
+  var34.i = (int) 0x00000005;   /* 5 or 2.47033e-323f */
+  /* 6: loadpw */
+  var36.i = (int) 0x00000003;   /* 3 or 1.4822e-323f */
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadoffw */
+    var38 = ptr0[i + 4];
+    /* 2: mullw */
+    var39.i = (var38.i * var34.i) & 0xffff;
+    /* 3: loadw */
+    var35 = ptr0[i];
+    /* 4: addw */
+    var40.i = var39.i + var35.i;
+    /* 5: loadoffw */
+    var41 = ptr0[i + 8];
+    /* 7: mullw */
+    var42.i = (var41.i * var36.i) & 0xffff;
+    /* 8: addw */
+    var37.i = var40.i + var42.i;
+    /* 9: storew */
+    ptr0[i] = var37;
+  }
+
+}
+
+#else
+static void
+_backup_video_orc_dither_fs_muladd_u8 (OrcExecutor * ORC_RESTRICT ex)
+{
+  int i;
+  int n = ex->n;
+  orc_union16 *ORC_RESTRICT ptr0;
+#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
+  volatile orc_union16 var34;
+#else
+  orc_union16 var34;
+#endif
+  orc_union16 var35;
+#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
+  volatile orc_union16 var36;
+#else
+  orc_union16 var36;
+#endif
+  orc_union16 var37;
+  orc_union16 var38;
+  orc_union16 var39;
+  orc_union16 var40;
+  orc_union16 var41;
+  orc_union16 var42;
+
+  ptr0 = (orc_union16 *) ex->arrays[0];
+
+  /* 1: loadpw */
+  var34.i = (int) 0x00000005;   /* 5 or 2.47033e-323f */
+  /* 6: loadpw */
+  var36.i = (int) 0x00000003;   /* 3 or 1.4822e-323f */
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadoffw */
+    var38 = ptr0[i + 4];
+    /* 2: mullw */
+    var39.i = (var38.i * var34.i) & 0xffff;
+    /* 3: loadw */
+    var35 = ptr0[i];
+    /* 4: addw */
+    var40.i = var39.i + var35.i;
+    /* 5: loadoffw */
+    var41 = ptr0[i + 8];
+    /* 7: mullw */
+    var42.i = (var41.i * var36.i) & 0xffff;
+    /* 8: addw */
+    var37.i = var40.i + var42.i;
+    /* 9: storew */
+    ptr0[i] = var37;
+  }
+
+}
+
+void
+video_orc_dither_fs_muladd_u8 (guint16 * ORC_RESTRICT d1, int n)
+{
+  OrcExecutor _ex, *ex = &_ex;
+  static volatile int p_inited = 0;
+  static OrcCode *c = 0;
+  void (*func) (OrcExecutor *);
+
+  if (!p_inited) {
+    orc_once_mutex_lock ();
+    if (!p_inited) {
+      OrcProgram *p;
+
+#if 1
+      static const orc_uint8 bc[] = {
+        1, 9, 29, 118, 105, 100, 101, 111, 95, 111, 114, 99, 95, 100, 105, 116,
+        104, 101, 114, 95, 102, 115, 95, 109, 117, 108, 97, 100, 100, 95, 117,
+        56,
+        11, 2, 2, 14, 4, 4, 0, 0, 0, 14, 2, 5, 0, 0, 0, 14,
+        4, 8, 0, 0, 0, 14, 2, 3, 0, 0, 0, 20, 2, 20, 2, 83,
+        33, 0, 16, 89, 33, 33, 17, 70, 32, 33, 0, 83, 33, 0, 18, 89,
+        33, 33, 19, 70, 0, 32, 33, 2, 0,
+      };
+      p = orc_program_new_from_static_bytecode (bc);
+      orc_program_set_backup_function (p,
+          _backup_video_orc_dither_fs_muladd_u8);
+#else
+      p = orc_program_new ();
+      orc_program_set_name (p, "video_orc_dither_fs_muladd_u8");
+      orc_program_set_backup_function (p,
+          _backup_video_orc_dither_fs_muladd_u8);
+      orc_program_add_destination (p, 2, "d1");
+      orc_program_add_constant (p, 4, 0x00000004, "c1");
+      orc_program_add_constant (p, 2, 0x00000005, "c2");
+      orc_program_add_constant (p, 4, 0x00000008, "c3");
+      orc_program_add_constant (p, 2, 0x00000003, "c4");
+      orc_program_add_temporary (p, 2, "t1");
+      orc_program_add_temporary (p, 2, "t2");
+
+      orc_program_append_2 (p, "loadoffw", 0, ORC_VAR_T2, ORC_VAR_D1,
+          ORC_VAR_C1, ORC_VAR_D1);
+      orc_program_append_2 (p, "mullw", 0, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_C2,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "addw", 0, ORC_VAR_T1, ORC_VAR_T2, ORC_VAR_D1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "loadoffw", 0, ORC_VAR_T2, ORC_VAR_D1,
+          ORC_VAR_C3, ORC_VAR_D1);
+      orc_program_append_2 (p, "mullw", 0, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_C4,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "addw", 0, ORC_VAR_D1, ORC_VAR_T1, ORC_VAR_T2,
+          ORC_VAR_D1);
+#endif
+
+      orc_program_compile (p);
+      c = orc_program_take_code (p);
+      orc_program_free (p);
+    }
+    p_inited = TRUE;
+    orc_once_mutex_unlock ();
+  }
+  ex->arrays[ORC_VAR_A2] = c;
+  ex->program = 0;
+
+  ex->n = n;
+  ex->arrays[ORC_VAR_D1] = d1;
+
+  func = c->exec;
+  func (ex);
+}
+#endif
+
+
+/* video_orc_dither_ordered_u8 */
+#ifdef DISABLE_ORC
+void
+video_orc_dither_ordered_u8 (guint8 * ORC_RESTRICT d1,
+    const guint8 * ORC_RESTRICT s1, int n)
+{
+  int i;
+  orc_int8 *ORC_RESTRICT ptr0;
+  const orc_int8 *ORC_RESTRICT ptr4;
+  orc_int8 var32;
+  orc_int8 var33;
+  orc_int8 var34;
+
+  ptr0 = (orc_int8 *) d1;
+  ptr4 = (orc_int8 *) s1;
+
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadb */
+    var32 = ptr0[i];
+    /* 1: loadb */
+    var33 = ptr4[i];
+    /* 2: addusb */
+    var34 = ORC_CLAMP_UB ((orc_uint8) var32 + (orc_uint8) var33);
+    /* 3: storeb */
+    ptr0[i] = var34;
+  }
+
+}
+
+#else
+static void
+_backup_video_orc_dither_ordered_u8 (OrcExecutor * ORC_RESTRICT ex)
+{
+  int i;
+  int n = ex->n;
+  orc_int8 *ORC_RESTRICT ptr0;
+  const orc_int8 *ORC_RESTRICT ptr4;
+  orc_int8 var32;
+  orc_int8 var33;
+  orc_int8 var34;
+
+  ptr0 = (orc_int8 *) ex->arrays[0];
+  ptr4 = (orc_int8 *) ex->arrays[4];
+
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadb */
+    var32 = ptr0[i];
+    /* 1: loadb */
+    var33 = ptr4[i];
+    /* 2: addusb */
+    var34 = ORC_CLAMP_UB ((orc_uint8) var32 + (orc_uint8) var33);
+    /* 3: storeb */
+    ptr0[i] = var34;
+  }
+
+}
+
+void
+video_orc_dither_ordered_u8 (guint8 * ORC_RESTRICT d1,
+    const guint8 * ORC_RESTRICT s1, int n)
+{
+  OrcExecutor _ex, *ex = &_ex;
+  static volatile int p_inited = 0;
+  static OrcCode *c = 0;
+  void (*func) (OrcExecutor *);
+
+  if (!p_inited) {
+    orc_once_mutex_lock ();
+    if (!p_inited) {
+      OrcProgram *p;
+
+#if 1
+      static const orc_uint8 bc[] = {
+        1, 9, 27, 118, 105, 100, 101, 111, 95, 111, 114, 99, 95, 100, 105, 116,
+        104, 101, 114, 95, 111, 114, 100, 101, 114, 101, 100, 95, 117, 56, 11,
+        1,
+        1, 12, 1, 1, 35, 0, 0, 4, 2, 0,
+      };
+      p = orc_program_new_from_static_bytecode (bc);
+      orc_program_set_backup_function (p, _backup_video_orc_dither_ordered_u8);
+#else
+      p = orc_program_new ();
+      orc_program_set_name (p, "video_orc_dither_ordered_u8");
+      orc_program_set_backup_function (p, _backup_video_orc_dither_ordered_u8);
+      orc_program_add_destination (p, 1, "d1");
+      orc_program_add_source (p, 1, "s1");
+
+      orc_program_append_2 (p, "addusb", 0, ORC_VAR_D1, ORC_VAR_D1, ORC_VAR_S1,
+          ORC_VAR_D1);
+#endif
+
+      orc_program_compile (p);
+      c = orc_program_take_code (p);
+      orc_program_free (p);
+    }
+    p_inited = TRUE;
+    orc_once_mutex_unlock ();
+  }
+  ex->arrays[ORC_VAR_A2] = c;
+  ex->program = 0;
+
+  ex->n = n;
+  ex->arrays[ORC_VAR_D1] = d1;
+  ex->arrays[ORC_VAR_S1] = (void *) s1;
+
+  func = c->exec;
+  func (ex);
+}
+#endif
+
+
+/* video_orc_dither_ordered_4u8_mask */
+#ifdef DISABLE_ORC
+void
+video_orc_dither_ordered_4u8_mask (guint8 * ORC_RESTRICT d1,
+    const guint16 * ORC_RESTRICT s1, orc_int64 p1, int n)
+{
+  int i;
+  orc_union32 *ORC_RESTRICT ptr0;
+  const orc_union64 *ORC_RESTRICT ptr4;
+  orc_union32 var34;
+  orc_union64 var35;
+  orc_union32 var36;
+  orc_union64 var37;
+  orc_union64 var38;
+  orc_union64 var39;
+  orc_union64 var40;
+
+  ptr0 = (orc_union32 *) d1;
+  ptr4 = (orc_union64 *) s1;
+
+  /* 0: loadpq */
+  var37.i = p1;
+
+  for (i = 0; i < n; i++) {
+    /* 1: loadl */
+    var34 = ptr0[i];
+    /* 2: convubw */
+    var38.x4[0] = (orc_uint8) var34.x4[0];
+    var38.x4[1] = (orc_uint8) var34.x4[1];
+    var38.x4[2] = (orc_uint8) var34.x4[2];
+    var38.x4[3] = (orc_uint8) var34.x4[3];
+    /* 3: loadq */
+    var35 = ptr4[i];
+    /* 4: addw */
+    var39.x4[0] = var38.x4[0] + var35.x4[0];
+    var39.x4[1] = var38.x4[1] + var35.x4[1];
+    var39.x4[2] = var38.x4[2] + var35.x4[2];
+    var39.x4[3] = var38.x4[3] + var35.x4[3];
+    /* 5: andnw */
+    var40.x4[0] = (~var37.x4[0]) & var39.x4[0];
+    var40.x4[1] = (~var37.x4[1]) & var39.x4[1];
+    var40.x4[2] = (~var37.x4[2]) & var39.x4[2];
+    var40.x4[3] = (~var37.x4[3]) & var39.x4[3];
+    /* 6: convsuswb */
+    var36.x4[0] = ORC_CLAMP_UB (var40.x4[0]);
+    var36.x4[1] = ORC_CLAMP_UB (var40.x4[1]);
+    var36.x4[2] = ORC_CLAMP_UB (var40.x4[2]);
+    var36.x4[3] = ORC_CLAMP_UB (var40.x4[3]);
+    /* 7: storel */
+    ptr0[i] = var36;
+  }
+
+}
+
+#else
+static void
+_backup_video_orc_dither_ordered_4u8_mask (OrcExecutor * ORC_RESTRICT ex)
+{
+  int i;
+  int n = ex->n;
+  orc_union32 *ORC_RESTRICT ptr0;
+  const orc_union64 *ORC_RESTRICT ptr4;
+  orc_union32 var34;
+  orc_union64 var35;
+  orc_union32 var36;
+  orc_union64 var37;
+  orc_union64 var38;
+  orc_union64 var39;
+  orc_union64 var40;
+
+  ptr0 = (orc_union32 *) ex->arrays[0];
+  ptr4 = (orc_union64 *) ex->arrays[4];
+
+  /* 0: loadpq */
+  var37.i =
+      (ex->params[24] & 0xffffffff) | ((orc_uint64) (ex->params[24 +
+              (ORC_VAR_T1 - ORC_VAR_P1)]) << 32);
+
+  for (i = 0; i < n; i++) {
+    /* 1: loadl */
+    var34 = ptr0[i];
+    /* 2: convubw */
+    var38.x4[0] = (orc_uint8) var34.x4[0];
+    var38.x4[1] = (orc_uint8) var34.x4[1];
+    var38.x4[2] = (orc_uint8) var34.x4[2];
+    var38.x4[3] = (orc_uint8) var34.x4[3];
+    /* 3: loadq */
+    var35 = ptr4[i];
+    /* 4: addw */
+    var39.x4[0] = var38.x4[0] + var35.x4[0];
+    var39.x4[1] = var38.x4[1] + var35.x4[1];
+    var39.x4[2] = var38.x4[2] + var35.x4[2];
+    var39.x4[3] = var38.x4[3] + var35.x4[3];
+    /* 5: andnw */
+    var40.x4[0] = (~var37.x4[0]) & var39.x4[0];
+    var40.x4[1] = (~var37.x4[1]) & var39.x4[1];
+    var40.x4[2] = (~var37.x4[2]) & var39.x4[2];
+    var40.x4[3] = (~var37.x4[3]) & var39.x4[3];
+    /* 6: convsuswb */
+    var36.x4[0] = ORC_CLAMP_UB (var40.x4[0]);
+    var36.x4[1] = ORC_CLAMP_UB (var40.x4[1]);
+    var36.x4[2] = ORC_CLAMP_UB (var40.x4[2]);
+    var36.x4[3] = ORC_CLAMP_UB (var40.x4[3]);
+    /* 7: storel */
+    ptr0[i] = var36;
+  }
+
+}
+
+void
+video_orc_dither_ordered_4u8_mask (guint8 * ORC_RESTRICT d1,
+    const guint16 * ORC_RESTRICT s1, orc_int64 p1, int n)
+{
+  OrcExecutor _ex, *ex = &_ex;
+  static volatile int p_inited = 0;
+  static OrcCode *c = 0;
+  void (*func) (OrcExecutor *);
+
+  if (!p_inited) {
+    orc_once_mutex_lock ();
+    if (!p_inited) {
+      OrcProgram *p;
+
+#if 1
+      static const orc_uint8 bc[] = {
+        1, 9, 33, 118, 105, 100, 101, 111, 95, 111, 114, 99, 95, 100, 105, 116,
+        104, 101, 114, 95, 111, 114, 100, 101, 114, 101, 100, 95, 52, 117, 56,
+        95,
+        109, 97, 115, 107, 11, 4, 4, 12, 8, 8, 18, 8, 20, 8, 20, 8,
+        134, 33, 24, 21, 2, 150, 32, 0, 21, 2, 70, 32, 32, 4, 21, 2,
+        74, 32, 33, 32, 21, 2, 160, 0, 32, 2, 0,
+      };
+      p = orc_program_new_from_static_bytecode (bc);
+      orc_program_set_backup_function (p,
+          _backup_video_orc_dither_ordered_4u8_mask);
+#else
+      p = orc_program_new ();
+      orc_program_set_name (p, "video_orc_dither_ordered_4u8_mask");
+      orc_program_set_backup_function (p,
+          _backup_video_orc_dither_ordered_4u8_mask);
+      orc_program_add_destination (p, 4, "d1");
+      orc_program_add_source (p, 8, "s1");
+      orc_program_add_parameter_int64 (p, 8, "p1");
+      orc_program_add_temporary (p, 8, "t1");
+      orc_program_add_temporary (p, 8, "t2");
+
+      orc_program_append_2 (p, "loadpq", 0, ORC_VAR_T2, ORC_VAR_P1, ORC_VAR_D1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "convubw", 2, ORC_VAR_T1, ORC_VAR_D1, ORC_VAR_D1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "addw", 2, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_S1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "andnw", 2, ORC_VAR_T1, ORC_VAR_T2, ORC_VAR_T1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "convsuswb", 2, ORC_VAR_D1, ORC_VAR_T1,
+          ORC_VAR_D1, ORC_VAR_D1);
+#endif
+
+      orc_program_compile (p);
+      c = orc_program_take_code (p);
+      orc_program_free (p);
+    }
+    p_inited = TRUE;
+    orc_once_mutex_unlock ();
+  }
+  ex->arrays[ORC_VAR_A2] = c;
+  ex->program = 0;
+
+  ex->n = n;
+  ex->arrays[ORC_VAR_D1] = d1;
+  ex->arrays[ORC_VAR_S1] = (void *) s1;
+  {
+    orc_union64 tmp;
+    tmp.i = p1;
+    ex->params[ORC_VAR_P1] = ((orc_uint64) tmp.i) & 0xffffffff;
+    ex->params[ORC_VAR_T1] = ((orc_uint64) tmp.i) >> 32;
+  }
+
+  func = c->exec;
+  func (ex);
+}
+#endif
+
+
+/* video_orc_dither_ordered_4u16_mask */
+#ifdef DISABLE_ORC
+void
+video_orc_dither_ordered_4u16_mask (guint16 * ORC_RESTRICT d1,
+    const guint16 * ORC_RESTRICT s1, orc_int64 p1, int n)
+{
+  int i;
+  orc_union64 *ORC_RESTRICT ptr0;
+  const orc_union64 *ORC_RESTRICT ptr4;
+  orc_union64 var34;
+  orc_union64 var35;
+  orc_union64 var36;
+  orc_union64 var37;
+  orc_union64 var38;
+
+  ptr0 = (orc_union64 *) d1;
+  ptr4 = (orc_union64 *) s1;
+
+  /* 0: loadpq */
+  var37.i = p1;
+
+  for (i = 0; i < n; i++) {
+    /* 1: loadq */
+    var34 = ptr0[i];
+    /* 2: loadq */
+    var35 = ptr4[i];
+    /* 3: addw */
+    var38.x4[0] = var34.x4[0] + var35.x4[0];
+    var38.x4[1] = var34.x4[1] + var35.x4[1];
+    var38.x4[2] = var34.x4[2] + var35.x4[2];
+    var38.x4[3] = var34.x4[3] + var35.x4[3];
+    /* 4: andnw */
+    var36.x4[0] = (~var37.x4[0]) & var38.x4[0];
+    var36.x4[1] = (~var37.x4[1]) & var38.x4[1];
+    var36.x4[2] = (~var37.x4[2]) & var38.x4[2];
+    var36.x4[3] = (~var37.x4[3]) & var38.x4[3];
+    /* 5: storeq */
+    ptr0[i] = var36;
+  }
+
+}
+
+#else
+static void
+_backup_video_orc_dither_ordered_4u16_mask (OrcExecutor * ORC_RESTRICT ex)
+{
+  int i;
+  int n = ex->n;
+  orc_union64 *ORC_RESTRICT ptr0;
+  const orc_union64 *ORC_RESTRICT ptr4;
+  orc_union64 var34;
+  orc_union64 var35;
+  orc_union64 var36;
+  orc_union64 var37;
+  orc_union64 var38;
+
+  ptr0 = (orc_union64 *) ex->arrays[0];
+  ptr4 = (orc_union64 *) ex->arrays[4];
+
+  /* 0: loadpq */
+  var37.i =
+      (ex->params[24] & 0xffffffff) | ((orc_uint64) (ex->params[24 +
+              (ORC_VAR_T1 - ORC_VAR_P1)]) << 32);
+
+  for (i = 0; i < n; i++) {
+    /* 1: loadq */
+    var34 = ptr0[i];
+    /* 2: loadq */
+    var35 = ptr4[i];
+    /* 3: addw */
+    var38.x4[0] = var34.x4[0] + var35.x4[0];
+    var38.x4[1] = var34.x4[1] + var35.x4[1];
+    var38.x4[2] = var34.x4[2] + var35.x4[2];
+    var38.x4[3] = var34.x4[3] + var35.x4[3];
+    /* 4: andnw */
+    var36.x4[0] = (~var37.x4[0]) & var38.x4[0];
+    var36.x4[1] = (~var37.x4[1]) & var38.x4[1];
+    var36.x4[2] = (~var37.x4[2]) & var38.x4[2];
+    var36.x4[3] = (~var37.x4[3]) & var38.x4[3];
+    /* 5: storeq */
+    ptr0[i] = var36;
+  }
+
+}
+
+void
+video_orc_dither_ordered_4u16_mask (guint16 * ORC_RESTRICT d1,
+    const guint16 * ORC_RESTRICT s1, orc_int64 p1, int n)
+{
+  OrcExecutor _ex, *ex = &_ex;
+  static volatile int p_inited = 0;
+  static OrcCode *c = 0;
+  void (*func) (OrcExecutor *);
+
+  if (!p_inited) {
+    orc_once_mutex_lock ();
+    if (!p_inited) {
+      OrcProgram *p;
+
+#if 1
+      static const orc_uint8 bc[] = {
+        1, 9, 34, 118, 105, 100, 101, 111, 95, 111, 114, 99, 95, 100, 105, 116,
+        104, 101, 114, 95, 111, 114, 100, 101, 114, 101, 100, 95, 52, 117, 49,
+        54,
+        95, 109, 97, 115, 107, 11, 8, 8, 12, 8, 8, 18, 8, 20, 8, 20,
+        8, 134, 33, 24, 21, 2, 70, 32, 0, 4, 21, 2, 74, 0, 33, 32,
+        2, 0,
+      };
+      p = orc_program_new_from_static_bytecode (bc);
+      orc_program_set_backup_function (p,
+          _backup_video_orc_dither_ordered_4u16_mask);
+#else
+      p = orc_program_new ();
+      orc_program_set_name (p, "video_orc_dither_ordered_4u16_mask");
+      orc_program_set_backup_function (p,
+          _backup_video_orc_dither_ordered_4u16_mask);
+      orc_program_add_destination (p, 8, "d1");
+      orc_program_add_source (p, 8, "s1");
+      orc_program_add_parameter_int64 (p, 8, "p1");
+      orc_program_add_temporary (p, 8, "t1");
+      orc_program_add_temporary (p, 8, "t2");
+
+      orc_program_append_2 (p, "loadpq", 0, ORC_VAR_T2, ORC_VAR_P1, ORC_VAR_D1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "addw", 2, ORC_VAR_T1, ORC_VAR_D1, ORC_VAR_S1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "andnw", 2, ORC_VAR_D1, ORC_VAR_T2, ORC_VAR_T1,
+          ORC_VAR_D1);
+#endif
+
+      orc_program_compile (p);
+      c = orc_program_take_code (p);
+      orc_program_free (p);
+    }
+    p_inited = TRUE;
+    orc_once_mutex_unlock ();
+  }
+  ex->arrays[ORC_VAR_A2] = c;
+  ex->program = 0;
+
+  ex->n = n;
+  ex->arrays[ORC_VAR_D1] = d1;
+  ex->arrays[ORC_VAR_S1] = (void *) s1;
+  {
+    orc_union64 tmp;
+    tmp.i = p1;
+    ex->params[ORC_VAR_P1] = ((orc_uint64) tmp.i) & 0xffffffff;
+    ex->params[ORC_VAR_T1] = ((orc_uint64) tmp.i) >> 32;
+  }
+
+  func = c->exec;
+  func (ex);
+}
+#endif
diff --git a/gst-libs/gst/video/video-orc-dist.h b/gst-libs/gst/video/video-orc-dist.h
index cf0b982..827406d 100644
--- a/gst-libs/gst/video/video-orc-dist.h
+++ b/gst-libs/gst/video/video-orc-dist.h
@@ -84,6 +84,7 @@
 void video_orc_blend_big (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1, int n);
 void video_orc_unpack_I420 (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, const guint8 * ORC_RESTRICT s3, int n);
 void video_orc_pack_I420 (guint8 * ORC_RESTRICT d1, guint8 * ORC_RESTRICT d2, guint8 * ORC_RESTRICT d3, const guint8 * ORC_RESTRICT s1, int n);
+void video_orc_pack_Y (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1, int n);
 void video_orc_unpack_YUY2 (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1, int n);
 void video_orc_pack_YUY2 (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1, int n);
 void video_orc_pack_UYVY (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1, int n);
@@ -111,8 +112,118 @@
 void video_orc_pack_NV24 (guint8 * ORC_RESTRICT d1, guint8 * ORC_RESTRICT d2, const guint8 * ORC_RESTRICT s1, int n);
 void video_orc_unpack_A420 (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, const guint8 * ORC_RESTRICT s3, const guint8 * ORC_RESTRICT s4, int n);
 void video_orc_pack_A420 (guint8 * ORC_RESTRICT d1, guint8 * ORC_RESTRICT d2, guint8 * ORC_RESTRICT d3, guint8 * ORC_RESTRICT d4, const guint8 * ORC_RESTRICT s1, int n);
+void video_orc_pack_AY (guint8 * ORC_RESTRICT d1, guint8 * ORC_RESTRICT d2, const guint8 * ORC_RESTRICT s1, int n);
+void video_orc_unpack_RGB15_le (guint32 * ORC_RESTRICT d1, const guint16 * ORC_RESTRICT s1, int n);
+void video_orc_unpack_RGB15_be (guint32 * ORC_RESTRICT d1, const guint16 * ORC_RESTRICT s1, int n);
+void video_orc_unpack_RGB15_le_trunc (guint32 * ORC_RESTRICT d1, const guint16 * ORC_RESTRICT s1, int n);
+void video_orc_unpack_RGB15_be_trunc (guint32 * ORC_RESTRICT d1, const guint16 * ORC_RESTRICT s1, int n);
+void video_orc_pack_RGB15_le (guint16 * ORC_RESTRICT d1, const guint32 * ORC_RESTRICT s1, int n);
+void video_orc_pack_RGB15_be (guint16 * ORC_RESTRICT d1, const guint32 * ORC_RESTRICT s1, int n);
+void video_orc_unpack_BGR15_le (guint32 * ORC_RESTRICT d1, const guint16 * ORC_RESTRICT s1, int n);
+void video_orc_unpack_BGR15_be (guint32 * ORC_RESTRICT d1, const guint16 * ORC_RESTRICT s1, int n);
+void video_orc_unpack_BGR15_le_trunc (guint32 * ORC_RESTRICT d1, const guint16 * ORC_RESTRICT s1, int n);
+void video_orc_unpack_BGR15_be_trunc (guint32 * ORC_RESTRICT d1, const guint16 * ORC_RESTRICT s1, int n);
+void video_orc_pack_BGR15_le (guint16 * ORC_RESTRICT d1, const guint32 * ORC_RESTRICT s1, int n);
+void video_orc_pack_BGR15_be (guint16 * ORC_RESTRICT d1, const guint32 * ORC_RESTRICT s1, int n);
+void video_orc_unpack_RGB16 (guint32 * ORC_RESTRICT d1, const guint16 * ORC_RESTRICT s1, int n);
+void video_orc_unpack_RGB16_trunc (guint32 * ORC_RESTRICT d1, const guint16 * ORC_RESTRICT s1, int n);
+void video_orc_pack_RGB16_le (guint16 * ORC_RESTRICT d1, const guint32 * ORC_RESTRICT s1, int n);
+void video_orc_pack_RGB16_be (guint16 * ORC_RESTRICT d1, const guint32 * ORC_RESTRICT s1, int n);
+void video_orc_unpack_BGR16 (guint32 * ORC_RESTRICT d1, const guint16 * ORC_RESTRICT s1, int n);
+void video_orc_unpack_BGR16_trunc (guint32 * ORC_RESTRICT d1, const guint16 * ORC_RESTRICT s1, int n);
+void video_orc_pack_BGR16_le (guint16 * ORC_RESTRICT d1, const guint32 * ORC_RESTRICT s1, int n);
+void video_orc_pack_BGR16_be (guint16 * ORC_RESTRICT d1, const guint32 * ORC_RESTRICT s1, int n);
 void video_orc_resample_bilinear_u32 (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1, int p1, int p2, int n);
 void video_orc_merge_linear_u8 (orc_uint8 * ORC_RESTRICT d1, const orc_uint8 * ORC_RESTRICT s1, const orc_uint8 * ORC_RESTRICT s2, int p1, int n);
+void video_orc_memset_2d (guint8 * ORC_RESTRICT d1, int d1_stride, int p1, int n, int m);
+void video_orc_memcpy_2d (guint8 * ORC_RESTRICT d1, int d1_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m);
+void video_orc_convert_u16_to_u8 (guint8 * ORC_RESTRICT d1, const guint16 * ORC_RESTRICT s1, int n);
+void video_orc_convert_u8_to_u16 (guint16 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1, int n);
+void video_orc_splat_u16 (guint8 * ORC_RESTRICT d1, int p1, int n);
+void video_orc_splat_u32 (guint8 * ORC_RESTRICT d1, int p1, int n);
+void video_orc_splat_u64 (guint8 * ORC_RESTRICT d1, orc_int64 p1, int n);
+void video_orc_splat2_u64 (guint8 * ORC_RESTRICT d1, int p1, int n);
+void video_orc_convert_I420_UYVY (guint8 * ORC_RESTRICT d1, guint8 * ORC_RESTRICT d2, const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, const guint8 * ORC_RESTRICT s3, const guint8 * ORC_RESTRICT s4, int n);
+void video_orc_convert_I420_YUY2 (guint8 * ORC_RESTRICT d1, guint8 * ORC_RESTRICT d2, const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, const guint8 * ORC_RESTRICT s3, const guint8 * ORC_RESTRICT s4, int n);
+void video_orc_convert_I420_AYUV (guint8 * ORC_RESTRICT d1, guint8 * ORC_RESTRICT d2, const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, const guint8 * ORC_RESTRICT s3, const guint8 * ORC_RESTRICT s4, int p1, int n);
+void video_orc_convert_YUY2_I420 (guint8 * ORC_RESTRICT d1, guint8 * ORC_RESTRICT d2, guint8 * ORC_RESTRICT d3, guint8 * ORC_RESTRICT d4, const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, int n);
+void video_orc_convert_UYVY_YUY2 (guint8 * ORC_RESTRICT d1, int d1_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m);
+void video_orc_planar_chroma_420_422 (guint8 * ORC_RESTRICT d1, int d1_stride, guint8 * ORC_RESTRICT d2, int d2_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m);
+void video_orc_planar_chroma_420_444 (guint8 * ORC_RESTRICT d1, int d1_stride, guint8 * ORC_RESTRICT d2, int d2_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m);
+void video_orc_planar_chroma_422_444 (guint8 * ORC_RESTRICT d1, int d1_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m);
+void video_orc_planar_chroma_444_422 (guint8 * ORC_RESTRICT d1, int d1_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m);
+void video_orc_planar_chroma_444_420 (guint8 * ORC_RESTRICT d1, int d1_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, const guint8 * ORC_RESTRICT s2, int s2_stride, int n, int m);
+void video_orc_planar_chroma_422_420 (guint8 * ORC_RESTRICT d1, int d1_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, const guint8 * ORC_RESTRICT s2, int s2_stride, int n, int m);
+void video_orc_convert_YUY2_AYUV (guint8 * ORC_RESTRICT d1, int d1_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, int p1, int n, int m);
+void video_orc_convert_UYVY_AYUV (guint8 * ORC_RESTRICT d1, int d1_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, int p1, int n, int m);
+void video_orc_convert_YUY2_Y42B (guint8 * ORC_RESTRICT d1, int d1_stride, guint8 * ORC_RESTRICT d2, int d2_stride, guint8 * ORC_RESTRICT d3, int d3_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m);
+void video_orc_convert_UYVY_Y42B (guint8 * ORC_RESTRICT d1, int d1_stride, guint8 * ORC_RESTRICT d2, int d2_stride, guint8 * ORC_RESTRICT d3, int d3_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m);
+void video_orc_convert_YUY2_Y444 (guint8 * ORC_RESTRICT d1, int d1_stride, guint8 * ORC_RESTRICT d2, int d2_stride, guint8 * ORC_RESTRICT d3, int d3_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m);
+void video_orc_convert_UYVY_Y444 (guint8 * ORC_RESTRICT d1, int d1_stride, guint8 * ORC_RESTRICT d2, int d2_stride, guint8 * ORC_RESTRICT d3, int d3_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m);
+void video_orc_convert_UYVY_I420 (guint8 * ORC_RESTRICT d1, guint8 * ORC_RESTRICT d2, guint8 * ORC_RESTRICT d3, guint8 * ORC_RESTRICT d4, const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, int n);
+void video_orc_convert_AYUV_I420 (guint8 * ORC_RESTRICT d1, int d1_stride, guint8 * ORC_RESTRICT d2, int d2_stride, guint8 * ORC_RESTRICT d3, int d3_stride, guint8 * ORC_RESTRICT d4, int d4_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, const guint8 * ORC_RESTRICT s2, int s2_stride, int n, int m);
+void video_orc_convert_AYUV_YUY2 (guint8 * ORC_RESTRICT d1, int d1_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m);
+void video_orc_convert_AYUV_UYVY (guint8 * ORC_RESTRICT d1, int d1_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m);
+void video_orc_convert_AYUV_Y42B (guint8 * ORC_RESTRICT d1, int d1_stride, guint8 * ORC_RESTRICT d2, int d2_stride, guint8 * ORC_RESTRICT d3, int d3_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m);
+void video_orc_convert_AYUV_Y444 (guint8 * ORC_RESTRICT d1, int d1_stride, guint8 * ORC_RESTRICT d2, int d2_stride, guint8 * ORC_RESTRICT d3, int d3_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m);
+void video_orc_convert_Y42B_YUY2 (guint8 * ORC_RESTRICT d1, int d1_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, const guint8 * ORC_RESTRICT s2, int s2_stride, const guint8 * ORC_RESTRICT s3, int s3_stride, int n, int m);
+void video_orc_convert_Y42B_UYVY (guint8 * ORC_RESTRICT d1, int d1_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, const guint8 * ORC_RESTRICT s2, int s2_stride, const guint8 * ORC_RESTRICT s3, int s3_stride, int n, int m);
+void video_orc_convert_Y42B_AYUV (guint8 * ORC_RESTRICT d1, int d1_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, const guint8 * ORC_RESTRICT s2, int s2_stride, const guint8 * ORC_RESTRICT s3, int s3_stride, int p1, int n, int m);
+void video_orc_convert_Y444_YUY2 (guint8 * ORC_RESTRICT d1, int d1_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, const guint8 * ORC_RESTRICT s2, int s2_stride, const guint8 * ORC_RESTRICT s3, int s3_stride, int n, int m);
+void video_orc_convert_Y444_UYVY (guint8 * ORC_RESTRICT d1, int d1_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, const guint8 * ORC_RESTRICT s2, int s2_stride, const guint8 * ORC_RESTRICT s3, int s3_stride, int n, int m);
+void video_orc_convert_Y444_AYUV (guint8 * ORC_RESTRICT d1, int d1_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, const guint8 * ORC_RESTRICT s2, int s2_stride, const guint8 * ORC_RESTRICT s3, int s3_stride, int p1, int n, int m);
+void video_orc_convert_AYUV_ARGB (guint8 * ORC_RESTRICT d1, int d1_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, int p1, int p2, int p3, int p4, int p5, int n, int m);
+void video_orc_convert_AYUV_BGRA (guint8 * ORC_RESTRICT d1, int d1_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, int p1, int p2, int p3, int p4, int p5, int n, int m);
+void video_orc_convert_AYUV_ABGR (guint8 * ORC_RESTRICT d1, int d1_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, int p1, int p2, int p3, int p4, int p5, int n, int m);
+void video_orc_convert_AYUV_RGBA (guint8 * ORC_RESTRICT d1, int d1_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, int p1, int p2, int p3, int p4, int p5, int n, int m);
+void video_orc_convert_I420_BGRA (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, const guint8 * ORC_RESTRICT s3, int p1, int p2, int p3, int p4, int p5, int n);
+void video_orc_matrix8 (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1, orc_int64 p1, orc_int64 p2, orc_int64 p3, orc_int64 p4, int n);
+void _custom_video_orc_matrix8 (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1, orc_int64 p1, orc_int64 p2, orc_int64 p3, orc_int64 p4, int n);
+void video_orc_resample_h_near_u32_lq (guint32 * ORC_RESTRICT d1, const guint32 * ORC_RESTRICT s1, int p1, int p2, int n);
+void video_orc_resample_h_2tap_1u8_lq (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1, int p1, int p2, int n);
+void video_orc_resample_h_2tap_4u8_lq (guint32 * ORC_RESTRICT d1, const guint32 * ORC_RESTRICT s1, int p1, int p2, int n);
+void video_orc_resample_h_2tap_u8_lq (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, const gint16 * ORC_RESTRICT s3, const gint16 * ORC_RESTRICT s4, int n);
+void video_orc_resample_h_2tap_u16 (guint16 * ORC_RESTRICT d1, const guint16 * ORC_RESTRICT s1, const guint16 * ORC_RESTRICT s2, const gint16 * ORC_RESTRICT s3, const gint16 * ORC_RESTRICT s4, int n);
+void video_orc_resample_v_2tap_u8_lq (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, int p1, int n);
+void video_orc_resample_v_2tap_u16 (guint16 * ORC_RESTRICT d1, const guint16 * ORC_RESTRICT s1, const guint16 * ORC_RESTRICT s2, int p1, int n);
+void video_orc_resample_v_2tap_u8 (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, int p1, int n);
+void video_orc_resample_v_4tap_u8_lq (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, const guint8 * ORC_RESTRICT s3, const guint8 * ORC_RESTRICT s4, int p1, int p2, int p3, int p4, int n);
+void video_orc_resample_v_4tap_u8 (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, const guint8 * ORC_RESTRICT s3, const guint8 * ORC_RESTRICT s4, int p1, int p2, int p3, int p4, int n);
+void video_orc_resample_h_multaps_u8 (gint32 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1, const gint16 * ORC_RESTRICT s2, int n);
+void video_orc_resample_h_muladdtaps_u8 (gint32 * ORC_RESTRICT d1, int d1_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, const gint16 * ORC_RESTRICT s2, int s2_stride, int n, int m);
+void video_orc_resample_scaletaps_u8 (guint8 * ORC_RESTRICT d1, const gint32 * ORC_RESTRICT s1, int n);
+void video_orc_resample_h_multaps_u8_lq (gint16 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1, const gint16 * ORC_RESTRICT s2, int n);
+void video_orc_resample_h_muladdtaps_u8_lq (gint16 * ORC_RESTRICT d1, int d1_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, const gint16 * ORC_RESTRICT s2, int s2_stride, int n, int m);
+void video_orc_resample_h_multaps3_u8_lq (gint16 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, const guint8 * ORC_RESTRICT s3, const gint16 * ORC_RESTRICT s4, const gint16 * ORC_RESTRICT s5, const gint16 * ORC_RESTRICT s6, int n);
+void video_orc_resample_h_muladdtaps3_u8_lq (gint16 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, const guint8 * ORC_RESTRICT s3, const gint16 * ORC_RESTRICT s4, const gint16 * ORC_RESTRICT s5, const gint16 * ORC_RESTRICT s6, int n);
+void video_orc_resample_h_muladdscaletaps3_u8_lq (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, const guint8 * ORC_RESTRICT s3, const gint16 * ORC_RESTRICT s4, const gint16 * ORC_RESTRICT s5, const gint16 * ORC_RESTRICT s6, const gint16 * ORC_RESTRICT s7, int n);
+void video_orc_resample_scaletaps_u8_lq (guint8 * ORC_RESTRICT d1, const gint16 * ORC_RESTRICT s1, int n);
+void video_orc_resample_h_multaps_u16 (gint32 * ORC_RESTRICT d1, const guint16 * ORC_RESTRICT s1, const gint16 * ORC_RESTRICT s2, int n);
+void video_orc_resample_h_muladdtaps_u16 (gint32 * ORC_RESTRICT d1, int d1_stride, const guint16 * ORC_RESTRICT s1, int s1_stride, const gint16 * ORC_RESTRICT s2, int s2_stride, int n, int m);
+void video_orc_resample_scaletaps_u16 (guint16 * ORC_RESTRICT d1, const gint32 * ORC_RESTRICT s1, int n);
+void video_orc_resample_v_multaps_u8 (gint32 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1, int p1, int n);
+void video_orc_resample_v_muladdtaps_u8 (gint32 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1, int p1, int n);
+void video_orc_resample_v_multaps_u16 (gint32 * ORC_RESTRICT d1, const guint16 * ORC_RESTRICT s1, int p1, int n);
+void video_orc_resample_v_muladdtaps_u16 (gint32 * ORC_RESTRICT d1, const guint16 * ORC_RESTRICT s1, int p1, int n);
+void video_orc_resample_v_multaps_u8_lq (gint16 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1, int p1, int n);
+void video_orc_resample_v_multaps4_u8_lq (gint16 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, const guint8 * ORC_RESTRICT s3, const guint8 * ORC_RESTRICT s4, int p1, int p2, int p3, int p4, int n);
+void video_orc_resample_v_muladdtaps_u8_lq (gint16 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1, int p1, int n);
+void video_orc_resample_v_muladdtaps4_u8_lq (gint16 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, const guint8 * ORC_RESTRICT s3, const guint8 * ORC_RESTRICT s4, int p1, int p2, int p3, int p4, int n);
+void video_orc_resample_v_muladdscaletaps4_u8_lq (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, const guint8 * ORC_RESTRICT s3, const guint8 * ORC_RESTRICT s4, const gint16 * ORC_RESTRICT s5, int p1, int p2, int p3, int p4, int n);
+void video_orc_chroma_down_h2_u8 (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1, int n);
+void video_orc_chroma_down_v2_u8 (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, int n);
+void video_orc_chroma_up_v2_u8 (guint8 * ORC_RESTRICT d1, guint8 * ORC_RESTRICT d2, const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, int n);
+void video_orc_chroma_up_v2_u16 (guint16 * ORC_RESTRICT d1, guint16 * ORC_RESTRICT d2, const guint16 * ORC_RESTRICT s1, const guint16 * ORC_RESTRICT s2, int n);
+void video_orc_chroma_down_v2_u16 (guint16 * ORC_RESTRICT d1, const guint16 * ORC_RESTRICT s1, const guint16 * ORC_RESTRICT s2, int n);
+void video_orc_chroma_down_v4_u8 (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, const guint8 * ORC_RESTRICT s3, const guint8 * ORC_RESTRICT s4, int n);
+void video_orc_chroma_down_v4_u16 (guint16 * ORC_RESTRICT d1, const guint16 * ORC_RESTRICT s1, const guint16 * ORC_RESTRICT s2, const guint16 * ORC_RESTRICT s3, const guint16 * ORC_RESTRICT s4, int n);
+void video_orc_dither_none_4u8_mask (guint8 * ORC_RESTRICT d1, int p1, int n);
+void video_orc_dither_none_4u16_mask (guint16 * ORC_RESTRICT d1, orc_int64 p1, int n);
+void video_orc_dither_verterr_4u8_mask (guint8 * ORC_RESTRICT d1, guint16 * ORC_RESTRICT d2, orc_int64 p1, int n);
+void video_orc_dither_fs_muladd_u8 (guint16 * ORC_RESTRICT d1, int n);
+void video_orc_dither_ordered_u8 (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1, int n);
+void video_orc_dither_ordered_4u8_mask (guint8 * ORC_RESTRICT d1, const guint16 * ORC_RESTRICT s1, orc_int64 p1, int n);
+void video_orc_dither_ordered_4u16_mask (guint16 * ORC_RESTRICT d1, const guint16 * ORC_RESTRICT s1, orc_int64 p1, int n);
 
 #ifdef __cplusplus
 }
diff --git a/gst-libs/gst/video/video-orc.orc b/gst-libs/gst/video/video-orc.orc
index 1f67327..be4393e 100644
--- a/gst-libs/gst/video/video-orc.orc
+++ b/gst-libs/gst/video/video-orc.orc
@@ -96,6 +96,14 @@
 select0wb u, uu
 select0wb v, vv
 
+.function video_orc_pack_Y
+.dest 1 y guint8
+.source 4 ayuv guint8
+.temp 2 ay
+
+select0lw ay, ayuv
+select1wb y, ay
+
 .function video_orc_unpack_YUY2
 .dest 8 ayuv guint8
 .source 4 yuy2 guint8
@@ -297,80 +305,46 @@
 .function video_orc_pack_RGBA
 .dest 4 rgba guint8
 .source 4 argb guint8
-.temp 1 a
-.temp 1 r
-.temp 1 g
-.temp 1 b
-.temp 2 rg
-.temp 2 ba
-.temp 2 ar
-.temp 2 gb
+.temp 4 a
+.temp 4 r
 
-splitlw gb, ar, argb
-splitwb b, g, gb
-splitwb r, a, ar
-mergebw ba, b, a
-mergebw rg, r, g
-mergewl rgba, rg, ba
+loadl r, argb
+shrul a, r, 8
+shll r, r, 24
+orl rgba, r, a
 
 .function video_orc_unpack_RGBA
 .dest 4 argb guint8
 .source 4 rgba guint8
-.temp 1 a
-.temp 1 r
-.temp 1 g
-.temp 1 b
-.temp 2 rg
-.temp 2 ba
-.temp 2 ar
-.temp 2 gb
+.temp 4 a
+.temp 4 r
 
-splitlw ba, rg, rgba
-splitwb g, r, rg
-splitwb a, b, ba
-mergebw ar, a, r
-mergebw gb, g, b
-mergewl argb, ar, gb
-
+loadl r, rgba
+shll a, r, 8
+shrul r, r, 24
+orl argb, r, a
 
 .function video_orc_unpack_ABGR
 .dest 4 argb guint8
 .source 4 abgr guint8
-.temp 1 a
-.temp 1 r
-.temp 1 g
-.temp 1 b
-.temp 2 gr
-.temp 2 ab
-.temp 2 ar
-.temp 2 gb
+.temp 4 a
+.temp 4 r
 
-splitlw gr, ab, abgr
-splitwb r, g, gr
-splitwb b, a, ab
-mergebw ar, a, r
-mergebw gb, g, b
-mergewl argb, ar, gb
-
+swapl r, abgr
+shll a, r, 8
+shrul r, r, 24
+orl argb, r, a
 
 .function video_orc_pack_ABGR
 .dest 4 abgr guint8
 .source 4 argb guint8
-.temp 1 a
-.temp 1 r
-.temp 1 g
-.temp 1 b
-.temp 2 gr
-.temp 2 ab
-.temp 2 ar
-.temp 2 gb
+.temp 4 a
+.temp 4 r
 
-splitlw gb, ar, argb
-splitwb b, g, gb
-splitwb r, a, ar
-mergebw ab, a, b
-mergebw gr, g, r
-mergewl abgr, ab, gr
+swapl r, argb
+shll a, r, 8
+shrul r, r, 24
+orl abgr, r, a
 
 .function video_orc_unpack_NV12
 .dest 8 d guint8
@@ -477,6 +451,451 @@
 select0wb u, uu
 select0wb v, vv
 
+.function video_orc_pack_AY
+.dest 1 y guint8
+.dest 1 a guint8
+.source 4 ayuv guint8
+.temp 2 ay
+
+select0lw ay, ayuv
+select1wb y, ay
+select0wb a, ay
+
+.function video_orc_unpack_RGB15_le
+.dest 4 argb guint32
+.source 2 rgb15 guint16
+.temp 2 t
+.temp 2 r
+.temp 2 g
+.temp 2 b
+.temp 4 ag
+.temp 4 rb
+
+loadw t, rgb15
+andw r, t, 0x7c00
+andw g, t, 0x03e0
+andw b, t, 0x001f
+shlw b, b, 5
+mulhsw r, r, 0x0210
+mulhsw g, g, 0x4200
+mulhsw b, b, 0x4200
+mergewl ag, 0xff, g
+mergewl rb, r, b
+shll rb, rb, 8
+orl argb, ag, rb
+
+.function video_orc_unpack_RGB15_be
+.dest 4 argb guint32
+.source 2 rgb15 guint16
+.temp 2 t
+.temp 2 r
+.temp 2 g
+.temp 2 b
+.temp 4 ag
+.temp 4 rb
+
+loadw t, rgb15
+andw r, t, 0x7c00
+andw g, t, 0x03e0
+andw b, t, 0x001f
+shlw b, b, 5
+mulhsw r, r, 0x0210
+mulhsw g, g, 0x4200
+mulhsw b, b, 0x4200
+mergewl ag, 0xff, g
+mergewl rb, r, b
+shll ag, ag, 8
+orl argb, ag, rb
+
+.function video_orc_unpack_RGB15_le_trunc
+.dest 4 argb guint32
+.source 2 rgb15 guint16
+.temp 2 t
+.temp 2 r
+.temp 2 g
+.temp 2 b
+.temp 4 ag
+.temp 4 rb
+
+loadw t, rgb15
+andw r, t, 0x7c00
+andw g, t, 0x03e0
+andw b, t, 0x001f
+shruw r, r, 7
+shruw g, g, 2
+shlw b, b, 3
+mergewl ag, 0xff, g
+mergewl rb, r, b
+shll rb, rb, 8
+orl argb, ag, rb
+
+.function video_orc_unpack_RGB15_be_trunc
+.dest 4 argb guint32
+.source 2 rgb15 guint16
+.temp 2 t
+.temp 2 r
+.temp 2 g
+.temp 2 b
+.temp 4 ag
+.temp 4 rb
+
+loadw t, rgb15
+andw r, t, 0x7c00
+andw g, t, 0x03e0
+andw b, t, 0x001f
+shruw r, r, 7
+shruw g, g, 2
+shlw b, b, 3
+mergewl ag, 0xff, g
+mergewl rb, r, b
+shll ag, ag, 8
+orl argb, ag, rb
+
+.function video_orc_pack_RGB15_le
+.dest 2 rgb15 guint16
+.source 4 argb guint32
+.temp 4 t
+.temp 4 r
+.temp 4 g
+.temp 4 b
+.temp 4 t2
+
+loadl t, argb
+andl r, t, 0xf800
+andl g, t, 0xf80000
+andl b, t, 0xf8000000
+shrul r, r, 1
+shrul g, g, 14
+shrul b, b, 27
+orl t2, r, g
+orl t2, t2, b
+select0lw rgb15, t2
+
+.function video_orc_pack_RGB15_be
+.dest 2 rgb15 guint16
+.source 4 argb guint32
+.temp 4 t
+.temp 4 r
+.temp 4 g
+.temp 4 b
+.temp 4 t2
+
+loadl t, argb
+andl r, t, 0xf80000
+andl g, t, 0xf800
+andl b, t, 0xf8
+shrul r, r, 9
+shrul g, g, 6
+shrul b, b, 3
+orl t2, r, g
+orl t2, t2, b
+select1lw rgb15, t2
+
+.function video_orc_unpack_BGR15_le
+.dest 4 argb guint32
+.source 2 bgr15 guint16
+.temp 2 t
+.temp 2 r
+.temp 2 g
+.temp 2 b
+.temp 4 ag
+.temp 4 rb
+
+loadw t, bgr15
+andw b, t, 0x7c00
+andw g, t, 0x03e0
+andw r, t, 0x001f
+shlw r, r, 5
+mulhsw b, b, 0x0210
+mulhsw g, g, 0x4200
+mulhsw r, r, 0x4200
+mergewl ag, 0xff, g
+mergewl rb, r, b
+shll rb, rb, 8
+orl argb, ag, rb
+
+.function video_orc_unpack_BGR15_be
+.dest 4 argb guint32
+.source 2 bgr15 guint16
+.temp 2 t
+.temp 2 r
+.temp 2 g
+.temp 2 b
+.temp 4 ag
+.temp 4 rb
+
+loadw t, bgr15
+andw b, t, 0x7c00
+andw g, t, 0x03e0
+andw r, t, 0x001f
+shlw r, r, 5
+mulhsw b, b, 0x0210
+mulhsw g, g, 0x4200
+mulhsw r, r, 0x4200
+mergewl ag, 0xff, g
+mergewl rb, r, b
+shll ag, ag, 8
+orl argb, ag, rb
+
+.function video_orc_unpack_BGR15_le_trunc
+.dest 4 argb guint32
+.source 2 bgr15 guint16
+.temp 2 t
+.temp 2 r
+.temp 2 g
+.temp 2 b
+.temp 4 ag
+.temp 4 rb
+
+loadw t, bgr15
+andw b, t, 0x7c00
+andw g, t, 0x03e0
+andw r, t, 0x001f
+shruw b, b, 7
+shruw g, g, 2
+shlw r, r, 3
+mergewl ag, 0xff, g
+mergewl rb, r, b
+shll rb, rb, 8
+orl argb, ag, rb
+
+.function video_orc_unpack_BGR15_be_trunc
+.dest 4 argb guint32
+.source 2 bgr15 guint16
+.temp 2 t
+.temp 2 r
+.temp 2 g
+.temp 2 b
+.temp 4 ag
+.temp 4 rb
+
+loadw t, bgr15
+andw b, t, 0x7c00
+andw g, t, 0x03e0
+andw r, t, 0x001f
+shruw b, b, 7
+shruw g, g, 2
+shlw r, r, 3
+mergewl ag, 0xff, g
+mergewl rb, r, b
+shll ag, ag, 8
+orl argb, ag, rb
+
+.function video_orc_pack_BGR15_le
+.dest 2 rgb15 guint16
+.source 4 argb guint32
+.temp 4 t
+.temp 4 r
+.temp 4 g
+.temp 4 b
+.temp 4 t2
+
+loadl t, argb
+andl r, t, 0xf800
+andl g, t, 0xf80000
+andl b, t, 0xf8000000
+shrul b, b, 17
+shrul g, g, 14
+shrul r, r, 11
+orl t2, r, g
+orl t2, t2, b
+select0lw rgb15, t2
+
+.function video_orc_pack_BGR15_be
+.dest 2 rgb15 guint16
+.source 4 argb guint32
+.temp 4 t
+.temp 4 r
+.temp 4 g
+.temp 4 b
+.temp 4 t2
+
+loadl t, argb
+andl r, t, 0xf80000
+andl g, t, 0xf800
+andl b, t, 0xf8
+shll b, b, 7
+shrul g, g, 6
+shrul r, r, 19
+orl t2, r, g
+orl t2, t2, b
+select1lw rgb15, t2
+
+.function video_orc_unpack_RGB16
+.dest 4 argb guint32
+.source 2 rgb16 guint16
+.temp 2 t
+.temp 2 r
+.temp 2 g
+.temp 2 b
+.temp 4 ar
+.temp 4 gb
+.temp 8 t2
+
+loadw t, rgb16
+andw r, t, 0xf800
+andw g, t, 0x07e0
+andw b, t, 0x001f
+shruw r, r, 6
+shlw b, b, 5
+mulhsw r, r, 0x4200
+mulhsw g, g, 0x2080
+mulhsw b, b, 0x4200
+mergewl ar, 0xff, r
+mergewl gb, g, b
+mergelq t2, ar, gb
+x4 convsuswb argb, t2
+
+.function video_orc_unpack_RGB16_trunc
+.dest 4 argb guint32
+.source 2 rgb16 guint16
+.temp 2 t
+.temp 2 r
+.temp 2 g
+.temp 2 b
+.temp 4 ar
+.temp 4 gb
+.temp 8 t2
+
+loadw t, rgb16
+andw r, t, 0xf800
+andw g, t, 0x07e0
+andw b, t, 0x001f
+shruw r, r, 8
+shruw g, g, 3
+shlw b, b, 3
+mergewl ar, 0xff, r
+mergewl gb, g, b
+mergelq t2, ar, gb
+x4 convsuswb argb, t2
+
+.function video_orc_pack_RGB16_le
+.dest 2 rgb15 guint16
+.source 4 argb guint32
+.temp 4 t
+.temp 4 r
+.temp 4 g
+.temp 4 b
+.temp 4 t2
+
+loadl t, argb
+andl r, t, 0xf800
+andl g, t, 0xfc0000
+andl b, t, 0xf8000000
+shrul g, g, 13
+shrul b, b, 27
+orl t2, r, g
+orl t2, t2, b
+select0lw rgb15, t2
+
+.function video_orc_pack_RGB16_be
+.dest 2 rgb16 guint16
+.source 4 argb guint32
+.temp 4 t
+.temp 4 r
+.temp 4 g
+.temp 4 b
+.temp 4 t2
+
+loadl t, argb
+andl r, t, 0xf80000
+andl g, t, 0xfc00
+andl b, t, 0xf8
+shrul r, r, 8
+shrul g, g, 5
+shrul b, b, 3
+orl t2, r, g
+orl t2, t2, b
+select1lw rgb16, t2
+
+.function video_orc_unpack_BGR16
+.dest 4 argb guint32
+.source 2 bgr16 guint16
+.temp 2 t
+.temp 2 r
+.temp 2 g
+.temp 2 b
+.temp 4 ar
+.temp 4 gb
+.temp 8 t2
+
+loadw t, bgr16
+andw b, t, 0xf800
+andw g, t, 0x07e0
+andw r, t, 0x001f
+shruw b, b, 6
+shlw r, r, 5
+mulhsw b, b, 0x4200
+mulhsw g, g, 0x2080
+mulhsw r, r, 0x4200
+mergewl ar, 0xff, r
+mergewl gb, g, b
+mergelq t2, ar, gb
+x4 convsuswb argb, t2
+
+.function video_orc_unpack_BGR16_trunc
+.dest 4 argb guint32
+.source 2 bgr16 guint16
+.temp 2 t
+.temp 2 r
+.temp 2 g
+.temp 2 b
+.temp 4 ar
+.temp 4 gb
+.temp 8 t2
+
+loadw t, bgr16
+andw b, t, 0xf800
+andw g, t, 0x07e0
+andw r, t, 0x001f
+shruw b, b, 8
+shruw g, g, 3
+shlw r, r, 3
+mergewl ar, 0xff, r
+mergewl gb, g, b
+mergelq t2, ar, gb
+x4 convsuswb argb, t2
+
+.function video_orc_pack_BGR16_le
+.dest 2 rgb15 guint16
+.source 4 argb guint32
+.temp 4 t
+.temp 4 r
+.temp 4 g
+.temp 4 b
+.temp 4 t2
+
+loadl t, argb
+andl r, t, 0xf800
+andl g, t, 0xfc0000
+andl b, t, 0xf8000000
+shrul r, r, 11
+shrul g, g, 13
+shrul b, b, 16
+orl t2, r, g
+orl t2, t2, b
+select0lw rgb15, t2
+
+.function video_orc_pack_BGR16_be
+.dest 2 rgb15 guint16
+.source 4 argb guint32
+.temp 4 t
+.temp 4 r
+.temp 4 g
+.temp 4 b
+.temp 4 t2
+
+loadl t, argb
+andl r, t, 0xf80000
+andl g, t, 0xfc00
+andl b, t, 0xf8
+shll b, b, 8
+shrul g, g, 5
+shrul r, r, 19
+orl t2, r, g
+orl t2, t2, b
+select1lw rgb15, t2
+
 .function video_orc_resample_bilinear_u32
 .dest 4 d1 guint8
 .source 4 s1 guint8
@@ -503,3 +922,1633 @@
 addw t2, t2, 128
 convhwb t, t2
 addb d1, t, a
+
+
+.function video_orc_memset_2d
+.flags 2d
+.dest 1 d1 guint8
+.param 1 p1
+
+storeb d1, p1
+
+.function video_orc_memcpy_2d
+.flags 2d
+.dest 1 d1 guint8
+.source 1 s1 guint8
+
+copyb d1, s1
+
+.function video_orc_convert_u16_to_u8
+.source 2 s guint16
+.dest 1 d guint8
+
+convhwb d, s
+
+.function video_orc_convert_u8_to_u16
+.source 1 s guint8
+.dest 2 d guint16
+
+mergebw d, s, s
+
+.function video_orc_splat_u16
+.dest 2 d1 guint8
+.param 2 p1
+
+storew d1, p1
+
+.function video_orc_splat_u32
+.dest 4 d1 guint8
+.param 4 p1
+
+storel d1, p1
+
+.function video_orc_splat_u64
+.dest 8 d1 guint8
+.longparam 8 p1
+
+storeq d1, p1
+
+.function video_orc_splat2_u64
+.dest 8 d1 guint8
+.param 4 p1
+.temp 4 p
+
+loadpl p, p1
+x4 mergebw d1, p, p
+
+.function video_orc_convert_I420_UYVY
+.dest 4 d1 guint8
+.dest 4 d2 guint8
+.source 2 y1 guint8
+.source 2 y2 guint8
+.source 1 u guint8
+.source 1 v guint8
+.temp 2 uv
+
+mergebw uv, u, v
+x2 mergebw d1, uv, y1
+x2 mergebw d2, uv, y2
+
+
+.function video_orc_convert_I420_YUY2
+.dest 4 d1 guint8
+.dest 4 d2 guint8
+.source 2 y1 guint8
+.source 2 y2 guint8
+.source 1 u guint8
+.source 1 v guint8
+.temp 2 uv
+
+mergebw uv, u, v
+x2 mergebw d1, y1, uv
+x2 mergebw d2, y2, uv
+
+
+
+.function video_orc_convert_I420_AYUV
+.dest 4 d1 guint8
+.dest 4 d2 guint8
+.source 1 y1 guint8
+.source 1 y2 guint8
+.source 1 u guint8
+.source 1 v guint8
+.param 1 alpha
+.temp 2 uv
+.temp 2 ay
+.temp 1 tu
+.temp 1 tv
+
+loadupdb tu, u
+loadupdb tv, v
+mergebw uv, tu, tv
+mergebw ay, alpha, y1
+mergewl d1, ay, uv
+mergebw ay, alpha, y2
+mergewl d2, ay, uv
+
+
+.function video_orc_convert_YUY2_I420
+.dest 2 y1 guint8
+.dest 2 y2 guint8
+.dest 1 u guint8
+.dest 1 v guint8
+.source 4 yuv1 guint8
+.source 4 yuv2 guint8
+.temp 2 t1
+.temp 2 t2
+.temp 2 ty
+
+x2 splitwb t1, ty, yuv1
+storew y1, ty
+x2 splitwb t2, ty, yuv2
+storew y2, ty
+x2 avgub t1, t1, t2
+splitwb v, u, t1
+
+
+.function video_orc_convert_UYVY_YUY2
+.flags 2d
+.dest 4 yuy2 guint8
+.source 4 uyvy guint8
+
+x2 swapw yuy2, uyvy
+
+
+.function video_orc_planar_chroma_420_422
+.flags 2d
+.dest 1 d1 guint8
+.dest 1 d2 guint8
+.source 1 s guint8
+
+copyb d1, s
+copyb d2, s
+
+
+.function video_orc_planar_chroma_420_444
+.flags 2d
+.dest 2 d1 guint8
+.dest 2 d2 guint8
+.source 1 s guint8
+.temp 2 t
+
+splatbw t, s
+storew d1, t
+storew d2, t
+
+
+.function video_orc_planar_chroma_422_444
+.flags 2d
+.dest 2 d1 guint8
+.source 1 s guint8
+.temp 2 t
+
+splatbw t, s
+storew d1, t
+
+
+.function video_orc_planar_chroma_444_422
+.flags 2d
+.dest 1 d guint8
+.source 2 s guint8
+.temp 1 t1
+.temp 1 t2
+
+splitwb t1, t2, s
+avgub d, t1, t2
+
+
+.function video_orc_planar_chroma_444_420
+.flags 2d
+.dest 1 d guint8
+.source 2 s1 guint8
+.source 2 s2 guint8
+.temp 2 t
+.temp 1 t1
+.temp 1 t2
+
+x2 avgub t, s1, s2
+splitwb t1, t2, t
+avgub d, t1, t2
+
+
+.function video_orc_planar_chroma_422_420
+.flags 2d
+.dest 1 d guint8
+.source 1 s1 guint8
+.source 1 s2 guint8
+
+avgub d, s1, s2
+
+
+.function video_orc_convert_YUY2_AYUV
+.flags 2d
+.dest 8 ayuv guint8
+.source 4 yuy2 guint8
+.param 1 alpha
+.temp 2 yy
+.temp 2 uv
+.temp 4 ayay
+.temp 4 uvuv
+
+x2 splitwb uv, yy, yuy2
+x2 mergebw ayay, alpha, yy
+mergewl uvuv, uv, uv
+x2 mergewl ayuv, ayay, uvuv
+
+
+.function video_orc_convert_UYVY_AYUV
+.flags 2d
+.dest 8 ayuv guint8
+.source 4 uyvy guint8
+.param 1 alpha
+.temp 2 yy
+.temp 2 uv
+.temp 4 ayay
+.temp 4 uvuv
+
+x2 splitwb yy, uv, uyvy
+x2 mergebw ayay, alpha, yy
+mergewl uvuv, uv, uv
+x2 mergewl ayuv, ayay, uvuv
+
+
+.function video_orc_convert_YUY2_Y42B
+.flags 2d
+.dest 2 y guint8
+.dest 1 u guint8
+.dest 1 v guint8
+.source 4 yuy2 guint8
+.temp 2 uv
+
+x2 splitwb uv, y, yuy2
+splitwb v, u, uv
+
+
+.function video_orc_convert_UYVY_Y42B
+.flags 2d
+.dest 2 y guint8
+.dest 1 u guint8
+.dest 1 v guint8
+.source 4 uyvy guint8
+.temp 2 uv
+
+x2 splitwb y, uv, uyvy
+splitwb v, u, uv
+
+
+.function video_orc_convert_YUY2_Y444
+.flags 2d
+.dest 2 y guint8
+.dest 2 uu guint8
+.dest 2 vv guint8
+.source 4 yuy2 guint8
+.temp 2 uv
+.temp 1 u
+.temp 1 v
+
+x2 splitwb uv, y, yuy2
+splitwb v, u, uv
+splatbw uu, u
+splatbw vv, v
+
+
+.function video_orc_convert_UYVY_Y444
+.flags 2d
+.dest 2 y guint8
+.dest 2 uu guint8
+.dest 2 vv guint8
+.source 4 uyvy guint8
+.temp 2 uv
+.temp 1 u
+.temp 1 v
+
+x2 splitwb y, uv, uyvy
+splitwb v, u, uv
+splatbw uu, u
+splatbw vv, v
+
+
+.function video_orc_convert_UYVY_I420
+.dest 2 y1 guint8
+.dest 2 y2 guint8
+.dest 1 u guint8
+.dest 1 v guint8
+.source 4 yuv1 guint8
+.source 4 yuv2 guint8
+.temp 2 t1
+.temp 2 t2
+.temp 2 ty
+
+x2 splitwb ty, t1, yuv1
+storew y1, ty
+x2 splitwb ty, t2, yuv2
+storew y2, ty
+x2 avgub t1, t1, t2
+splitwb v, u, t1
+
+
+
+.function video_orc_convert_AYUV_I420
+.flags 2d
+.dest 2 y1 guint8
+.dest 2 y2 guint8
+.dest 1 u guint8
+.dest 1 v guint8
+.source 8 ayuv1 guint8
+.source 8 ayuv2 guint8
+.temp 4 ay
+.temp 4 uv1
+.temp 4 uv2
+.temp 4 uv
+.temp 2 uu
+.temp 2 vv
+.temp 1 t1
+.temp 1 t2
+
+x2 splitlw uv1, ay, ayuv1
+x2 select1wb y1, ay
+x2 splitlw uv2, ay, ayuv2
+x2 select1wb y2, ay
+x4 avgub uv, uv1, uv2
+x2 splitwb vv, uu, uv
+splitwb t1, t2, uu
+avgub u, t1, t2
+splitwb t1, t2, vv
+avgub v, t1, t2
+
+
+
+.function video_orc_convert_AYUV_YUY2
+.flags 2d
+.dest 4 yuy2 guint8
+.source 8 ayuv guint8
+.temp 2 yy
+.temp 2 uv1
+.temp 2 uv2
+.temp 4 ayay
+.temp 4 uvuv
+
+x2 splitlw uvuv, ayay, ayuv
+splitlw uv1, uv2, uvuv
+x2 avgub uv1, uv1, uv2
+x2 select1wb yy, ayay
+x2 mergebw yuy2, yy, uv1
+
+
+.function video_orc_convert_AYUV_UYVY
+.flags 2d
+.dest 4 yuy2 guint8
+.source 8 ayuv guint8
+.temp 2 yy
+.temp 2 uv1
+.temp 2 uv2
+.temp 4 ayay
+.temp 4 uvuv
+
+x2 splitlw uvuv, ayay, ayuv
+splitlw uv1, uv2, uvuv
+x2 avgub uv1, uv1, uv2
+x2 select1wb yy, ayay
+x2 mergebw yuy2, uv1, yy
+
+
+
+.function video_orc_convert_AYUV_Y42B
+.flags 2d
+.dest 2 y guint8
+.dest 1 u guint8
+.dest 1 v guint8
+.source 8 ayuv guint8
+.temp 4 ayay
+.temp 4 uvuv
+.temp 2 uv1
+.temp 2 uv2
+
+x2 splitlw uvuv, ayay, ayuv
+splitlw uv1, uv2, uvuv
+x2 avgub uv1, uv1, uv2
+splitwb v, u, uv1
+x2 select1wb y, ayay
+
+
+.function video_orc_convert_AYUV_Y444
+.flags 2d
+.dest 1 y guint8
+.dest 1 u guint8
+.dest 1 v guint8
+.source 4 ayuv guint8
+.temp 2 ay
+.temp 2 uv
+
+splitlw uv, ay, ayuv
+splitwb v, u, uv
+select1wb y, ay
+
+
+.function video_orc_convert_Y42B_YUY2
+.flags 2d
+.dest 4 yuy2 guint8
+.source 2 y guint8
+.source 1 u guint8
+.source 1 v guint8
+.temp 2 uv
+
+mergebw uv, u, v
+x2 mergebw yuy2, y, uv
+
+
+.function video_orc_convert_Y42B_UYVY
+.flags 2d
+.dest 4 uyvy guint8
+.source 2 y guint8
+.source 1 u guint8
+.source 1 v guint8
+.temp 2 uv
+
+mergebw uv, u, v
+x2 mergebw uyvy, uv, y
+
+
+.function video_orc_convert_Y42B_AYUV
+.flags 2d
+.dest 8 ayuv guint8
+.source 2 yy guint8
+.source 1 u guint8
+.source 1 v guint8
+.param 1 alpha
+.temp 2 uv
+.temp 2 ay
+.temp 4 uvuv
+.temp 4 ayay
+
+mergebw uv, u, v
+x2 mergebw ayay, alpha, yy
+mergewl uvuv, uv, uv
+x2 mergewl ayuv, ayay, uvuv
+
+
+.function video_orc_convert_Y444_YUY2
+.flags 2d
+.dest 4 yuy2 guint8
+.source 2 y guint8
+.source 2 u guint8
+.source 2 v guint8
+.temp 2 uv
+.temp 4 uvuv
+.temp 2 uv1
+.temp 2 uv2
+
+x2 mergebw uvuv, u, v
+splitlw uv1, uv2, uvuv
+x2 avgub uv, uv1, uv2
+x2 mergebw yuy2, y, uv
+
+
+.function video_orc_convert_Y444_UYVY
+.flags 2d
+.dest 4 uyvy guint8
+.source 2 y guint8
+.source 2 u guint8
+.source 2 v guint8
+.temp 2 uv
+.temp 4 uvuv
+.temp 2 uv1
+.temp 2 uv2
+
+x2 mergebw uvuv, u, v
+splitlw uv1, uv2, uvuv
+x2 avgub uv, uv1, uv2
+x2 mergebw uyvy, uv, y
+
+
+.function video_orc_convert_Y444_AYUV
+.flags 2d
+.dest 4 ayuv guint8
+.source 1 yy guint8
+.source 1 u guint8
+.source 1 v guint8
+.param 1 alpha
+.temp 2 uv
+.temp 2 ay
+
+mergebw uv, u, v
+mergebw ay, alpha, yy
+mergewl ayuv, ay, uv
+
+
+
+.function video_orc_convert_AYUV_ARGB
+.flags 2d
+.dest 4 argb guint8
+.source 4 ayuv guint8
+.param 2 p1
+.param 2 p2
+.param 2 p3
+.param 2 p4
+.param 2 p5
+.temp 1 a
+.temp 1 y
+.temp 1 u
+.temp 1 v
+.temp 2 wy
+.temp 2 wu
+.temp 2 wv
+.temp 2 wr
+.temp 2 wg
+.temp 2 wb
+.temp 1 r
+.temp 1 g
+.temp 1 b
+.temp 4 x
+.const 1 c128 128
+
+x4 subb x, ayuv, c128 
+splitlw wv, wy, x
+splitwb y, a, wy
+splitwb v, u, wv
+
+splatbw wy, y
+splatbw wu, u
+splatbw wv, v
+
+mulhsw wy, wy, p1
+
+mulhsw wr, wv, p2
+addw wr, wy, wr
+convssswb r, wr
+mergebw wr, a, r
+
+mulhsw wb, wu, p3
+addw wb, wy, wb
+convssswb b, wb
+
+mulhsw wg, wu, p4
+addw wg, wy, wg
+mulhsw wy, wv, p5
+addw wg, wg, wy
+
+convssswb g, wg
+
+mergebw wb, g, b
+mergewl x, wr, wb
+x4 addb argb, x, c128
+
+.function video_orc_convert_AYUV_BGRA
+.flags 2d
+.dest 4 bgra guint8
+.source 4 ayuv guint8
+.param 2 p1
+.param 2 p2
+.param 2 p3
+.param 2 p4
+.param 2 p5
+.temp 1 a
+.temp 1 y
+.temp 1 u
+.temp 1 v
+.temp 2 wy
+.temp 2 wu
+.temp 2 wv
+.temp 2 wr
+.temp 2 wg
+.temp 2 wb
+.temp 1 r
+.temp 1 g
+.temp 1 b
+.temp 4 x
+.const 1 c128 128
+
+x4 subb x, ayuv, c128 
+splitlw wv, wy, x
+splitwb y, a, wy
+splitwb v, u, wv
+
+splatbw wy, y
+splatbw wu, u
+splatbw wv, v
+
+mulhsw wy, wy, p1
+
+mulhsw wr, wv, p2
+addw wr, wy, wr
+convssswb r, wr
+mergebw wr, r, a
+
+mulhsw wb, wu, p3
+addw wb, wy, wb
+convssswb b, wb
+
+mulhsw wg, wu, p4
+addw wg, wy, wg
+mulhsw wy, wv, p5
+addw wg, wg, wy
+
+convssswb g, wg
+
+mergebw wb, b, g
+mergewl x, wb, wr
+x4 addb bgra, x, c128
+
+
+.function video_orc_convert_AYUV_ABGR
+.flags 2d
+.dest 4 argb guint8
+.source 4 ayuv guint8
+.param 2 p1
+.param 2 p2
+.param 2 p3
+.param 2 p4
+.param 2 p5
+.temp 1 a
+.temp 1 y
+.temp 1 u
+.temp 1 v
+.temp 2 wy
+.temp 2 wu
+.temp 2 wv
+.temp 2 wr
+.temp 2 wg
+.temp 2 wb
+.temp 1 r
+.temp 1 g
+.temp 1 b
+.temp 4 x
+.const 1 c128 128
+
+x4 subb x, ayuv, c128 
+splitlw wv, wy, x
+splitwb y, a, wy
+splitwb v, u, wv
+
+splatbw wy, y
+splatbw wu, u
+splatbw wv, v
+
+mulhsw wy, wy, p1
+
+mulhsw wr, wv, p2
+addw wr, wy, wr
+convssswb r, wr
+
+mulhsw wb, wu, p3
+addw wb, wy, wb
+convssswb b, wb
+mergebw wb, a, b
+
+mulhsw wg, wu, p4
+addw wg, wy, wg
+mulhsw wy, wv, p5
+addw wg, wg, wy
+
+convssswb g, wg
+
+mergebw wr, g, r
+mergewl x, wb, wr
+x4 addb argb, x, c128
+
+.function video_orc_convert_AYUV_RGBA
+.flags 2d
+.dest 4 argb guint8
+.source 4 ayuv guint8
+.param 2 p1
+.param 2 p2
+.param 2 p3
+.param 2 p4
+.param 2 p5
+.temp 1 a
+.temp 1 y
+.temp 1 u
+.temp 1 v
+.temp 2 wy
+.temp 2 wu
+.temp 2 wv
+.temp 2 wr
+.temp 2 wg
+.temp 2 wb
+.temp 1 r
+.temp 1 g
+.temp 1 b
+.temp 4 x
+.const 1 c128 128
+
+x4 subb x, ayuv, c128 
+splitlw wv, wy, x
+splitwb y, a, wy
+splitwb v, u, wv
+
+splatbw wy, y
+splatbw wu, u
+splatbw wv, v
+
+mulhsw wy, wy, p1
+
+mulhsw wr, wv, p2
+addw wr, wy, wr
+convssswb r, wr
+
+mulhsw wb, wu, p3
+addw wb, wy, wb
+convssswb b, wb
+mergebw wb, b, a
+
+mulhsw wg, wu, p4
+addw wg, wy, wg
+mulhsw wy, wv, p5
+addw wg, wg, wy
+
+convssswb g, wg
+
+mergebw wr, r, g
+mergewl x, wr, wb
+x4 addb argb, x, c128
+
+.function video_orc_convert_I420_BGRA
+.dest 4 argb guint8
+.source 1 y guint8
+.source 1 u guint8
+.source 1 v guint8
+.param 2 p1
+.param 2 p2
+.param 2 p3
+.param 2 p4
+.param 2 p5
+.temp 2 wy
+.temp 2 wu
+.temp 2 wv
+.temp 2 wr
+.temp 2 wg
+.temp 2 wb
+.temp 1 r
+.temp 1 g
+.temp 1 b
+.temp 4 x
+.const 1 c128 128
+
+subb r, y, c128
+splatbw wy, r
+loadupdb r, u
+subb r, r, c128
+splatbw wu, r
+loadupdb r, v
+subb r, r, c128
+splatbw wv, r
+
+mulhsw wy, wy, p1
+
+mulhsw wr, wv, p2
+addw wr, wy, wr
+convssswb r, wr
+mergebw wr, r, 127
+
+mulhsw wb, wu, p3
+addw wb, wy, wb
+convssswb b, wb
+
+mulhsw wg, wu, p4
+addw wg, wy, wg
+mulhsw wy, wv, p5
+addw wg, wg, wy
+
+convssswb g, wg
+
+mergebw wb, b, g
+mergewl x, wb, wr
+x4 addb argb, x, c128
+
+.function video_orc_matrix8
+.backup _custom_video_orc_matrix8
+.source 4 argb guint8
+.dest 4 ayuv guint8
+.longparam 8 p1
+.longparam 8 p2
+.longparam 8 p3
+.longparam 8 p4
+.const 1 c128 128
+.temp 2 w1
+.temp 2 w2
+.temp 1 b1
+.temp 1 b2
+.temp 4 l1
+.temp 4 ayuv2
+.temp 8 aq
+.temp 8 q1
+.temp 8 pr1
+.temp 8 pr2
+.temp 8 pr3
+
+loadpq pr1, p1
+loadpq pr2, p2
+loadpq pr3, p3
+
+x4 subb l1, argb, c128
+
+select0lw w1, l1
+select1lw w2, l1
+select0wb b1, w1
+select1wb b2, w1
+
+convubw w1, b1
+convuwl l1, w1
+x4 mergebw aq, l1, l1
+
+splatbl l1, b2
+mergelq q1, l1, l1
+x4 mulhsw q1, q1, pr1
+x4 addw aq, aq, q1
+
+select0wb b1, w2
+splatbl l1,b1
+mergelq q1, l1, l1
+x4 mulhsw q1, q1, pr2
+x4 addw aq, aq, q1
+
+select1wb b2, w2
+splatbl l1, b2
+mergelq q1, l1, l1
+x4 mulhsw q1, q1, pr3
+x4 addw aq, aq, q1
+
+x4 convssswb ayuv2, aq
+x4 addb ayuv, ayuv2, c128
+
+#.function video_orc_resample_h_near_u32
+#.source 4 src guint32
+#.source 4 idx
+#.dest 4 dest guint32
+#.temp 4 t
+#
+#loadidxl t, src, idx
+#storel dest, t
+
+.function video_orc_resample_h_near_u32_lq
+.dest 4 d1 guint32
+.source 4 s1 guint32
+.param 4 p1
+.param 4 p2
+
+ldresnearl d1, s1, p1, p2
+
+.function video_orc_resample_h_2tap_1u8_lq
+.dest 1 d1 guint8
+.source 1 s1 guint8
+.param 4 p1
+.param 4 p2
+
+ldreslinb d1, s1, p1, p2
+
+.function video_orc_resample_h_2tap_4u8_lq
+.dest 4 d1 guint32
+.source 4 s1 guint32
+.param 4 p1
+.param 4 p2
+
+ldreslinl d1, s1, p1, p2
+
+.function video_orc_resample_h_2tap_u8_lq
+.source 1 s1 guint8
+.source 1 s2 guint8
+.source 2 t1 gint16
+.source 2 t2 gint16
+.dest 1 d guint8
+.temp 2 w1
+.temp 2 w2
+
+convubw w1, s1
+mullw w1, w1, t1
+convubw w2, s2
+mullw w2, w2, t2
+addw w1, w1, w2
+addw w1, w1, 32
+shrsw w1, w1, 6
+convsuswb d, w1
+
+.function video_orc_resample_h_2tap_u16
+.source 2 s1 guint16
+.source 2 s2 guint16
+.source 2 t1 gint16
+.source 2 t2 gint16
+.dest 2 d guint16
+.temp 4 w1
+.temp 4 w2
+.temp 4 tl1
+.temp 4 tl2
+
+convuwl w1, s1
+convswl tl1, t1
+mulll w1, w1, tl1
+convuwl w2, s2
+convswl tl2, t2
+mulll w2, w2, tl2
+addl w1, w1, w2
+addl w1, w1, 4096
+shrsl w1, w1, 12
+convsuslw d, w1
+
+.function video_orc_resample_v_2tap_u8_lq
+.source 1 src1 guint8
+.source 1 src2 guint8
+.dest 1 dest guint8
+.param 2 p1 gint16
+.temp 1 t
+.temp 2 w1
+.temp 2 w2
+
+convubw w1, src1
+convubw w2, src2
+subw w2, w2, w1
+mullw w2, w2, p1
+addw w2, w2, 128
+convhwb t, w2
+addb dest, t, src1
+
+.function video_orc_resample_v_2tap_u16
+.source 2 src1 guint16
+.source 2 src2 guint16
+.dest 2 dest guint16
+.param 2 p1 gint16
+.temp 4 l1
+.temp 4 l2
+.temp 4 l3
+
+convuwl l1, src1
+convuwl l2, src2
+subl l2, l2, l1
+convuwl l3, p1
+mulll l2, l2, l3
+addl l2, l2, 4096
+shrsl l2, l2, 12
+addl l1, l1, l2
+convsuslw dest, l1
+
+.function video_orc_resample_v_2tap_u8
+.source 1 s1 guint8
+.source 1 s2 guint8
+.dest 1 d1 guint8
+.param 2 p1 gint16
+.temp 1 t
+.temp 2 w1
+.temp 2 w2
+.temp 4 t1
+.temp 4 t2
+
+convubw w1, s1
+convubw w2, s2
+subw w2, w2, w1
+mulswl t2, w2, p1
+addl t2, t2, 4095
+shrsl t2, t2, 12
+convlw w2, t2
+addw w2, w2, w1
+convsuswb d1, w2
+
+.function video_orc_resample_v_4tap_u8_lq
+.source 1 s1 guint8
+.source 1 s2 guint8
+.source 1 s3 guint8
+.source 1 s4 guint8
+.dest 1 d1 guint8
+.param 2 p1 gint16
+.param 2 p2 gint16
+.param 2 p3 gint16
+.param 2 p4 gint16
+.temp 2 w1
+.temp 2 w2
+
+convubw w1, s1
+mullw w1, w1, p1
+convubw w2, s2
+mullw w2, w2, p2
+addw w1, w1, w2
+convubw w2, s3
+mullw w2, w2, p3
+addw w1, w1, w2
+convubw w2, s4
+mullw w2, w2, p4
+addw w1, w1, w2
+addw w1, w1, 32
+shrsw w1, w1, 6
+convsuswb d1, w1
+
+.function video_orc_resample_v_4tap_u8
+.source 1 s1 guint8
+.source 1 s2 guint8
+.source 1 s3 guint8
+.source 1 s4 guint8
+.dest 1 d1 guint8
+.param 2 p1 gint16
+.param 2 p2 gint16
+.param 2 p3 gint16
+.param 2 p4 gint16
+.temp 2 w1
+.temp 2 w2
+.temp 4 t1
+.temp 4 t2
+
+convubw w1, s1
+mulswl t1, w1, p1
+convubw w2, s2
+mulswl t2, w2, p2
+addl t1, t1, t2
+convubw w2, s3
+mulswl t2, w2, p3
+addl t1, t1, t2
+convubw w2, s4
+mulswl t2, w2, p4
+addl t1, t1, t2
+addl t1, t1, 4095
+shrsl t1, t1, 12
+convsuslw w1, t1
+convsuswb d1, w1
+
+# crashes ORC for now but is potentially faster
+#.function video_orc_resample_h_4tap_u8
+#.source 1 s1 guint8
+#.source 1 s2 guint8
+#.source 1 s3 guint8
+#.source 1 s4 guint8
+#.source 2 t1 gint16
+#.source 2 t2 gint16
+#.source 2 t3 gint16
+#.source 2 t4 gint16
+#.dest 1 d1 guint8
+#.temp 2 w1
+#.temp 2 w2
+#.temp 4 l1
+#.temp 4 l2
+#
+#convubw w1, s1
+#mulswl l1, w1, t1
+#convubw w2, s2
+#mulswl l2, w2, t2
+#addl l1, l1, l2
+#convubw w2, s3
+#mulswl l2, w2, t3
+#addl l1, l1, l2
+#convubw w2, s4
+#mulswl l2, w2, t4
+#addl l1, l1, l2
+#addl l1, l1, 4095
+#shrsl l1, l1, 12
+#convsuslw w1, l1
+#convsuswb d1, w1
+
+.function video_orc_resample_h_multaps_u8
+.source 1 s guint8
+.source 2 t gint16
+.dest 4 d gint32
+.temp 2 w1
+
+convubw w1, s
+mulswl d, w1, t
+
+.function video_orc_resample_h_muladdtaps_u8
+.flags 2d
+.source 1 s guint8
+.source 2 t gint16
+.dest 4 d gint32
+.temp 2 w1
+.temp 4 t1
+
+convubw w1, s
+mulswl t1, w1, t
+addl d, d, t1
+
+.function video_orc_resample_scaletaps_u8
+.source 4 s gint32
+.dest 1 d guint8
+.temp 2 w1
+.temp 4 t1
+
+addl t1, s, 4095
+shrsl t1, t1, 12
+convsuslw w1, t1
+convsuswb d, w1
+
+.function video_orc_resample_h_multaps_u8_lq
+.source 1 s guint8
+.source 2 t gint16
+.dest 2 d gint16
+.temp 2 w1
+
+convubw w1, s
+mullw d, w1, t
+
+.function video_orc_resample_h_muladdtaps_u8_lq
+.flags 2d
+.source 1 s guint8
+.source 2 t gint16
+.dest 2 d gint16
+.temp 2 w1
+
+convubw w1, s
+mullw w1, w1, t
+addw d, d, w1
+
+.function video_orc_resample_h_multaps3_u8_lq
+.source 1 s1 guint8
+.source 1 s2 guint8
+.source 1 s3 guint8
+.source 2 t1 gint16
+.source 2 t2 gint16
+.source 2 t3 gint16
+.dest 2 d gint16
+.temp 2 w1
+.temp 2 w2
+
+convubw w1, s1
+mullw w1, w1, t1
+convubw w2, s2
+mullw w2, w2, t2
+addw w1, w1, w2
+convubw w2, s3
+mullw w2, w2, t3
+addw d, w1, w2
+
+.function video_orc_resample_h_muladdtaps3_u8_lq
+.source 1 s1 guint8
+.source 1 s2 guint8
+.source 1 s3 guint8
+.source 2 t1 gint16
+.source 2 t2 gint16
+.source 2 t3 gint16
+.dest 2 d gint16
+.temp 2 w1
+.temp 2 w2
+
+convubw w1, s1
+mullw w1, w1, t1
+convubw w2, s2
+mullw w2, w2, t2
+addw w1, w1, w2
+convubw w2, s3
+mullw w2, w2, t3
+addw w1, w1, w2
+addw d, d, w1
+
+.function video_orc_resample_h_muladdscaletaps3_u8_lq
+.source 1 s1 guint8
+.source 1 s2 guint8
+.source 1 s3 guint8
+.source 2 t1 gint16
+.source 2 t2 gint16
+.source 2 t3 gint16
+.source 2 temp gint16
+.dest 1 d guint8
+.temp 2 w1
+.temp 2 w2
+
+convubw w1, s1
+mullw w1, w1, t1
+convubw w2, s2
+mullw w2, w2, t2
+addw w1, w1, w2
+convubw w2, s3
+mullw w2, w2, t3
+addw w1, w1, w2
+addw w1, w1, temp
+addw w1, w1, 32
+shrsw w1, w1, 6
+convsuswb d, w1
+
+.function video_orc_resample_scaletaps_u8_lq
+.source 2 s gint16
+.dest 1 d guint8
+.temp 2 w1
+
+addw w1, s, 32
+shrsw w1, w1, 6
+convsuswb d, w1
+
+.function video_orc_resample_h_multaps_u16
+.source 2 s guint16
+.source 2 t gint16
+.dest 4 d gint32
+.temp 4 l1
+.temp 4 l2
+
+convuwl l1, s
+convswl l2, t
+mulll d, l1, l2
+
+.function video_orc_resample_h_muladdtaps_u16
+.flags 2d
+.source 2 s guint16
+.source 2 t gint16
+.dest 4 d gint32
+.temp 4 l1
+.temp 4 l2
+
+convuwl l1, s
+convswl l2, t
+mulll l1, l1, l2
+addl d, d, l1
+
+.function video_orc_resample_scaletaps_u16
+.source 4 s gint32
+.dest 2 d guint16
+.temp 4 t1
+
+addl t1, s, 4095
+shrsl t1, t1, 12
+convsuslw d, t1
+
+.function video_orc_resample_v_multaps_u8
+.source 1 s guint8
+.param 2 t gint16
+.dest 4 d gint32
+.temp 2 w1
+
+convubw w1, s
+mulswl d, w1, t
+
+.function video_orc_resample_v_muladdtaps_u8
+.source 1 s guint8
+.param 2 t gint16
+.dest 4 d gint32
+.temp 2 w1
+.temp 4 t1
+
+convubw w1, s
+mulswl t1, w1, t
+addl d, d, t1
+
+.function video_orc_resample_v_multaps_u16
+.source 2 s guint16
+.param 2 t gint16
+.dest 4 d gint32
+.temp 4 l1
+
+convuwl l1, s
+mulll d, l1, t
+
+.function video_orc_resample_v_muladdtaps_u16
+.source 2 s guint16
+.param 2 t gint16
+.dest 4 d gint32
+.temp 4 t1
+.temp 4 t2
+
+convuwl t1, s
+convswl t2, t
+mulll t1, t1, t2
+addl d, d, t1
+
+.function video_orc_resample_v_multaps_u8_lq
+.source 1 s guint8
+.param 2 t gint16
+.dest 2 d gint16
+.temp 2 w1
+
+convubw w1, s
+mullw d, w1, t
+
+.function video_orc_resample_v_multaps4_u8_lq
+.source 1 s1 guint8
+.source 1 s2 guint8
+.source 1 s3 guint8
+.source 1 s4 guint8
+.param 2 t1 gint16
+.param 2 t2 gint16
+.param 2 t3 gint16
+.param 2 t4 gint16
+.dest 2 d gint16
+.temp 2 w1
+.temp 2 w2
+
+convubw w1, s1
+mullw w1, w1, t1
+convubw w2, s2
+mullw w2, w2, t2
+addw w1, w1, w2
+convubw w2, s3
+mullw w2, w2, t3
+addw w1, w1, w2
+convubw w2, s4
+mullw w2, w2, t4
+addw d, w1, w2
+
+.function video_orc_resample_v_muladdtaps_u8_lq
+.source 1 s guint8
+.param 2 t gint16
+.dest 2 d gint16
+.temp 2 w1
+
+convubw w1, s
+mullw w1, w1, t
+addw d, d, w1
+
+.function video_orc_resample_v_muladdtaps4_u8_lq
+.source 1 s1 guint8
+.source 1 s2 guint8
+.source 1 s3 guint8
+.source 1 s4 guint8
+.param 2 t1 gint16
+.param 2 t2 gint16
+.param 2 t3 gint16
+.param 2 t4 gint16
+.dest 2 d gint16
+.temp 2 w1
+.temp 2 w2
+
+convubw w1, s1
+mullw w1, w1, t1
+convubw w2, s2
+mullw w2, w2, t2
+addw w1, w1, w2
+convubw w2, s3
+mullw w2, w2, t3
+addw w1, w1, w2
+convubw w2, s4
+mullw w2, w2, t4
+addw w1, w1, w2
+addw d, d, w1
+
+.function video_orc_resample_v_muladdscaletaps4_u8_lq
+.source 1 s1 guint8
+.source 1 s2 guint8
+.source 1 s3 guint8
+.source 1 s4 guint8
+.source 2 temp gint16
+.param 2 t1 gint16
+.param 2 t2 gint16
+.param 2 t3 gint16
+.param 2 t4 gint16
+.dest 1 d guint8
+.temp 2 w1
+.temp 2 w2
+
+convubw w1, s1
+mullw w1, w1, t1
+convubw w2, s2
+mullw w2, w2, t2
+addw w1, w1, w2
+convubw w2, s3
+mullw w2, w2, t3
+addw w1, w1, w2
+convubw w2, s4
+mullw w2, w2, t4
+addw w1, w1, w2
+addw w1, w1, temp
+addw w1, w1, 32
+shrsw w1, w1, 6
+convsuswb d, w1
+
+.function video_orc_chroma_down_h2_u8
+.source 8 s guint8
+.dest 8 d guint8
+.temp 4 ayuv1
+.temp 4 ayuv2
+.temp 2 ay1
+.temp 2 uv1
+.temp 2 uv2
+
+splitql ayuv2, ayuv1, s
+splitlw uv1, ay1, ayuv1
+select1lw uv2, ayuv2
+x2 avgub uv1, uv1, uv2
+mergewl ayuv1, ay1, uv1
+mergelq d, ayuv1, ayuv2
+
+#.function video_orc_chroma_up_h2_cs_u8
+#.source 8 s guint8
+#.source 4 s1 guint8
+#.dest 8 d guint8
+#.temp 4 ayuv1
+#.temp 4 ayuv2
+#.temp 4 ayuv3
+#.temp 2 ay2
+#.temp 2 uv2
+#.temp 2 uv3
+#
+#splitql ayuv2, ayuv1, s
+#ldresnearl ayuv3, s1, 0x20000, 0x20000
+#splitlw uv2, ay2, ayuv2
+#select1lw uv3, ayuv3
+#x2 avgub uv2, uv2, uv3
+#mergewl ayuv2, ay2, uv2
+#mergelq d, ayuv1, ayuv2
+
+.function video_orc_chroma_down_v2_u8
+.source 4 s1 guint8
+.source 4 s2 guint8
+.dest 4 d guint8
+.temp 2 ay1
+.temp 2 uv1
+.temp 2 uv2
+
+splitlw uv1, ay1, s1
+select1lw uv2, s2
+x2 avgub uv1, uv1, uv2
+mergewl d, ay1, uv1
+
+.function video_orc_chroma_up_v2_u8
+.source 4 s1 guint8
+.source 4 s2 guint8
+.dest 4 d1 guint8
+.dest 4 d2 guint8
+.temp 2 ay1
+.temp 2 ay2
+.temp 2 uv1
+.temp 2 uv2
+.temp 4 uuvv1
+.temp 4 uuvv2
+.temp 4 uuvv3
+
+splitlw uv1, ay1, s1
+splitlw uv2, ay2, s2
+x2 convubw uuvv1, uv1
+x2 convubw uuvv2, uv2
+
+x2 mullw uuvv3, uuvv1, 3
+x2 addw uuvv3, uuvv3, uuvv2
+x2 addw uuvv3, uuvv3, 2
+x2 shruw uuvv3, uuvv3, 2
+x2 convsuswb uv1, uuvv3
+mergewl d1, ay1, uv1
+
+x2 mullw uuvv3, uuvv2, 3
+x2 addw uuvv3, uuvv3, uuvv1
+x2 addw uuvv3, uuvv3, 2
+x2 shruw uuvv3, uuvv3, 2
+x2 convsuswb uv2, uuvv3
+mergewl d2, ay2, uv2
+
+.function video_orc_chroma_up_v2_u16
+.source 8 s1 guint16
+.source 8 s2 guint16
+.dest 8 d1 guint16
+.dest 8 d2 guint16
+.temp 4 ay1
+.temp 4 ay2
+.temp 4 uv1
+.temp 4 uv2
+.temp 8 uuvv1
+.temp 8 uuvv2
+.temp 8 uuvv3
+
+splitql uv1, ay1, s1
+splitql uv2, ay2, s2
+x2 convuwl uuvv1, uv1
+x2 convuwl uuvv2, uv2
+
+x2 mulll uuvv3, uuvv1, 3
+x2 addl uuvv3, uuvv3, uuvv2
+x2 addl uuvv3, uuvv3, 2
+x2 shrul uuvv3, uuvv3, 2
+x2 convsuslw uv1, uuvv3
+mergelq d1, ay1, uv1
+
+x2 mulll uuvv3, uuvv2, 3
+x2 addl uuvv3, uuvv3, uuvv1
+x2 addl uuvv3, uuvv3, 2
+x2 shrul uuvv3, uuvv3, 2
+x2 convsuslw uv2, uuvv3
+mergelq d2, ay2, uv2
+
+.function video_orc_chroma_down_v2_u16
+.source 8 s1 guint16
+.source 8 s2 guint16
+.dest 8 d guint16
+.temp 4 ay1
+.temp 4 uv1
+.temp 4 uv2
+
+splitql uv1, ay1, s1
+select1ql uv2, s2
+x2 avguw uv1, uv1, uv2
+mergelq d, ay1, uv1
+
+
+.function video_orc_chroma_down_v4_u8
+.source 4 s1 guint8
+.source 4 s2 guint8
+.source 4 s3 guint8
+.source 4 s4 guint8
+.dest 4 d guint8
+.temp 2 ay1
+.temp 2 uv1
+.temp 4 uuvv1
+.temp 4 uuvv2
+.temp 4 uuvv3
+
+splitlw uv1, ay1, s1
+x2 convubw uuvv1, uv1
+select1lw uv1, s4
+x2 convubw uuvv2, uv1
+x2 addw uuvv3, uuvv1, uuvv2
+select1lw uv1, s2
+x2 convubw uuvv1, uv1
+select1lw uv1, s3
+x2 convubw uuvv2, uv1
+x2 addw uuvv1, uuvv1, uuvv2
+x2 shlw uuvv2, uuvv1, 1
+x2 addw uuvv1, uuvv1, uuvv2
+x2 addw uuvv3, uuvv3, uuvv1
+x2 addw uuvv3, uuvv3, 4
+x2 shruw uuvv3, uuvv3, 3
+x2 convsuswb uv1, uuvv3
+mergewl d, ay1, uv1
+
+.function video_orc_chroma_down_v4_u16
+.source 8 s1 guint16
+.source 8 s2 guint16
+.source 8 s3 guint16
+.source 8 s4 guint16
+.dest 8 d guint16
+.temp 4 ay1
+.temp 4 uv1
+.temp 8 uuvv1
+.temp 8 uuvv2
+.temp 8 uuvv3
+
+splitql uv1, ay1, s1
+x2 convuwl uuvv1, uv1
+select1ql uv1, s4
+x2 convuwl uuvv2, uv1
+x2 addl uuvv3, uuvv1, uuvv2
+select1ql uv1, s2
+x2 convuwl uuvv1, uv1
+select1ql uv1, s3
+x2 convuwl uuvv2, uv1
+x2 addl uuvv1, uuvv1, uuvv2
+x2 shll uuvv2, uuvv1, 1
+x2 addl uuvv1, uuvv1, uuvv2
+x2 addl uuvv3, uuvv3, uuvv1
+x2 addl uuvv3, uuvv3, 4
+x2 shrul uuvv3, uuvv3, 3
+x2 convsuslw uv1, uuvv3
+mergelq d, ay1, uv1
+
+.function video_orc_dither_none_4u8_mask
+.dest 4 p guint8
+.param 4 masks
+.temp 4 m
+
+loadpl m, masks
+x4 andnb p, m, p
+
+.function video_orc_dither_none_4u16_mask
+.dest 8 p guint16
+.longparam 8 masks
+.temp 8 m
+
+loadpq m, masks
+x4 andnw p, m, p
+
+.function video_orc_dither_verterr_4u8_mask
+.dest 4 p guint8
+.dest 8 e guint16
+.longparam 8 masks
+.temp 8 m
+.temp 8 t1
+
+loadpq m, masks
+x4 convubw t1, p
+x4 addw t1, e, t1
+x4 andw e, m, t1
+x4 andnw t1, m, t1
+x4 convsuswb p, t1
+
+.function video_orc_dither_fs_muladd_u8
+.dest 2 e guint16
+.temp 2 t1
+.temp 2 t2
+
+loadoffw t2, e, 4
+mullw t2, t2, 5
+addw t1, t2, e
+loadoffw t2, e, 8
+mullw t2, t2, 3
+addw e, t1, t2
+
+# due to error propagation we should disable
+# loop_shift for this function and only work on
+# 4 pixels at a time.
+#.function video_orc_dither_fs_add_4u8_mask
+#.flags no-unroll
+#.dest 4 d guint8
+#.dest 8 e1 guint16
+#.dest 8 e2 guint16
+#.longparam 8 masks
+#.temp 8 p
+#.temp 8 t1
+#.temp 8 t2
+#
+#x4 mullw t1, e1, 7
+#x4 addw t1, t1, e2
+#x4 shruw t1, t1, 4
+#x4 convubw p, d
+#x4 addw t1, t1, p
+#x4 andnw p, masks, t1
+#x4 convsuswb d, p
+#x4 andw e2, t1, masks
+
+.function video_orc_dither_ordered_u8
+.source 1 e guint8
+.dest 1 d guint8
+
+addusb d, d, e
+
+.function video_orc_dither_ordered_4u8_mask
+.source 8 e1 guint16
+.dest 4 d guint8
+.longparam 8 masks
+.temp 8 p
+.temp 8 m
+
+loadpq m, masks
+x4 convubw p, d
+x4 addw p, p, e1
+x4 andnw p, m, p
+x4 convsuswb d, p
+
+.function video_orc_dither_ordered_4u16_mask
+.source 8 e1 guint16
+.dest 8 d guint16
+.longparam 8 masks
+.temp 8 p
+.temp 8 m
+
+loadpq m, masks
+x4 addw p, d, e1
+x4 andnw d, m, p
diff --git a/gst-libs/gst/video/video-overlay-composition.c b/gst-libs/gst/video/video-overlay-composition.c
index 2f8815c..b256b99 100644
--- a/gst-libs/gst/video/video-overlay-composition.c
+++ b/gst-libs/gst/video/video-overlay-composition.c
@@ -215,8 +215,14 @@
       dmeta =
           (GstVideoOverlayCompositionMeta *) gst_buffer_add_meta (dest,
           GST_VIDEO_OVERLAY_COMPOSITION_META_INFO, NULL);
+      if (!dmeta)
+        return FALSE;
+
       dmeta->overlay = gst_video_overlay_composition_ref (smeta->overlay);
     }
+  } else {
+    /* return FALSE, if transform type is not supported */
+    return FALSE;
   }
   return TRUE;
 }
@@ -262,6 +268,8 @@
  * Sets an overlay composition on a buffer. The buffer will obtain its own
  * reference to the composition, meaning this function does not take ownership
  * of @comp.
+ *
+ * Returns: (transfer none): a #GstVideoOverlayCompositionMeta
  */
 GstVideoOverlayCompositionMeta *
 gst_buffer_add_video_overlay_composition_meta (GstBuffer * buf,
@@ -1485,12 +1493,13 @@
 /**
  * gst_video_overlay_rectangle_set_global_alpha:
  * @rectangle: a #GstVideoOverlayRectangle
+ * @global_alpha: Global alpha value (0 to 1.0)
  *
  * Sets the global alpha value associated with a #GstVideoOverlayRectangle. Per-
  * pixel alpha values are multiplied with this value. Valid
  * values: 0 <= global_alpha <= 1; 1 to deactivate.
  *
- # @rectangle must be writable, meaning its refcount must be 1. You can
+ * @rectangle must be writable, meaning its refcount must be 1. You can
  * make the rectangles inside a #GstVideoOverlayComposition writable using
  * gst_video_overlay_composition_make_writable() or
  * gst_video_overlay_composition_copy().
diff --git a/gst-libs/gst/video/video-resampler.c b/gst-libs/gst/video/video-resampler.c
new file mode 100644
index 0000000..07dddc9
--- /dev/null
+++ b/gst-libs/gst/video/video-resampler.c
@@ -0,0 +1,445 @@
+/* GStreamer
+ * Copyright (C) <2014> Wim Taymans <wim.taymans@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 <stdio.h>
+#include <math.h>
+
+#include "video-resampler.h"
+
+#ifndef GST_DISABLE_GST_DEBUG
+#define GST_CAT_DEFAULT ensure_debug_category()
+static GstDebugCategory *
+ensure_debug_category (void)
+{
+  static gsize cat_gonce = 0;
+
+  if (g_once_init_enter (&cat_gonce)) {
+    gsize cat_done;
+
+    cat_done = (gsize) _gst_debug_category_new ("video-resampler", 0,
+        "video-resampler object");
+
+    g_once_init_leave (&cat_gonce, cat_done);
+  }
+
+  return (GstDebugCategory *) cat_gonce;
+}
+#else
+#define ensure_debug_category() /* NOOP */
+#endif /* GST_DISABLE_GST_DEBUG */
+
+/**
+ * SECTION:gstvideoresampler
+ * @short_description: Utility structure for resampler information
+ *
+ * #GstVideoResampler is a structure which holds the information
+ * required to perform various kinds of resampling filtering.
+ *
+ */
+
+
+#define DEFAULT_OPT_CUBIC_B (1.0 / 3.0)
+#define DEFAULT_OPT_CUBIC_C (1.0 / 3.0)
+
+#define DEFAULT_OPT_ENVELOPE 2.0
+#define DEFAULT_OPT_SHARPNESS 1.0
+#define DEFAULT_OPT_SHARPEN 0.0
+
+#define DEFAULT_OPT_MAX_TAPS 128
+
+typedef struct _ResamplerParams ResamplerParams;
+
+struct _ResamplerParams
+{
+  GstVideoResamplerMethod method;
+  GstVideoResamplerFlags flags;
+
+  gdouble shift;
+
+    gdouble (*get_tap) (ResamplerParams * params, gint l, gint xi, gdouble x);
+
+  /* for cubic */
+  gdouble b, c;
+  /* used by lanczos */
+  gdouble ex, fx, dx;
+  /* extra params */
+  gdouble envelope;
+  gdouble sharpness;
+  gdouble sharpen;
+
+  GstVideoResampler *resampler;
+};
+
+static gdouble
+get_opt_double (GstStructure * options, const gchar * name, gdouble def)
+{
+  gdouble res;
+  if (!options || !gst_structure_get_double (options, name, &res))
+    res = def;
+  return res;
+}
+
+static gint
+get_opt_int (GstStructure * options, const gchar * name, gint def)
+{
+  gint res;
+  if (!options || !gst_structure_get_int (options, name, &res))
+    res = def;
+  return res;
+}
+
+#define GET_OPT_CUBIC_B(options) get_opt_double(options, \
+    GST_VIDEO_RESAMPLER_OPT_CUBIC_B, DEFAULT_OPT_CUBIC_B)
+#define GET_OPT_CUBIC_C(options) get_opt_double(options, \
+    GST_VIDEO_RESAMPLER_OPT_CUBIC_C, DEFAULT_OPT_CUBIC_C)
+#define GET_OPT_ENVELOPE(options) get_opt_double(options, \
+    GST_VIDEO_RESAMPLER_OPT_ENVELOPE, DEFAULT_OPT_ENVELOPE)
+#define GET_OPT_SHARPNESS(options) get_opt_double(options, \
+    GST_VIDEO_RESAMPLER_OPT_SHARPNESS, DEFAULT_OPT_SHARPNESS)
+#define GET_OPT_SHARPEN(options) get_opt_double(options, \
+    GST_VIDEO_RESAMPLER_OPT_SHARPEN, DEFAULT_OPT_SHARPEN)
+#define GET_OPT_MAX_TAPS(options) get_opt_int(options, \
+    GST_VIDEO_RESAMPLER_OPT_MAX_TAPS, DEFAULT_OPT_MAX_TAPS)
+
+static double
+sinc (double x)
+{
+  if (x == 0)
+    return 1;
+
+  return sin (G_PI * x) / (G_PI * x);
+}
+
+static double
+envelope (double x)
+{
+  if (x <= -1 || x >= 1)
+    return 0;
+  return sinc (x);
+}
+
+static gdouble
+get_nearest_tap (ResamplerParams * params, gint l, gint xi, gdouble x)
+{
+  return 1.0;
+}
+
+static gdouble
+get_linear_tap (ResamplerParams * params, gint l, gint xi, gdouble x)
+{
+  gdouble res, a;
+  gint xl = xi + l;
+
+  a = fabs (x - xl) * params->fx;
+
+  if (a < 1.0)
+    res = 1.0 - a;
+  else
+    res = 0.0;
+
+  return res;
+}
+
+static gdouble
+get_cubic_tap (ResamplerParams * params, gint l, gint xi, gdouble x)
+{
+  gdouble a, a2, a3, b, c;
+  gint xl = xi + l;
+
+  a = fabs (x - xl) * params->fx;
+  a2 = a * a;
+  a3 = a2 * a;
+
+  b = params->b;
+  c = params->c;
+
+  if (a <= 1.0)
+    return ((12.0 - 9.0 * b - 6.0 * c) * a3 +
+        (-18.0 + 12.0 * b + 6.0 * c) * a2 + (6.0 - 2.0 * b)) / 6.0;
+  else if (a <= 2.0)
+    return ((-b - 6.0 * c) * a3 +
+        (6.0 * b + 30.0 * c) * a2 +
+        (-12.0 * b - 48.0 * c) * a + (8.0 * b + 24.0 * c)) / 6.0;
+  else
+    return 0.0;
+}
+
+static gdouble
+get_sinc_tap (ResamplerParams * params, gint l, gint xi, gdouble x)
+{
+  gint xl = xi + l;
+  return sinc ((x - xl) * params->fx);
+}
+
+static gdouble
+get_lanczos_tap (ResamplerParams * params, gint l, gint xi, gdouble x)
+{
+  gint xl = xi + l;
+  gdouble env = envelope ((x - xl) * params->ex);
+  return (sinc ((x - xl) * params->fx) - params->sharpen) * env;
+}
+
+static void
+resampler_calculate_taps (ResamplerParams * params)
+{
+  GstVideoResampler *resampler = params->resampler;
+  gint j;
+  guint32 *offset, *n_taps, *phase;
+  gint tap_offs;
+  gint max_taps;
+  gint in_size, out_size;
+  gdouble shift;
+  gdouble corr;
+
+  in_size = resampler->in_size;
+  out_size = resampler->out_size;
+
+  max_taps = resampler->max_taps;
+  tap_offs = (max_taps - 1) / 2;
+  corr = (max_taps == 1 ? 0.0 : 0.5);
+
+  shift = params->shift;
+
+  resampler->taps = g_malloc (sizeof (gdouble) * max_taps * out_size);
+  n_taps = resampler->n_taps = g_malloc (sizeof (guint32) * out_size);
+  offset = resampler->offset = g_malloc (sizeof (guint32) * out_size);
+  phase = resampler->phase = g_malloc (sizeof (guint32) * out_size);
+
+  for (j = 0; j < out_size; j++) {
+    gdouble ox, x;
+    gint xi;
+    gint l;
+    gdouble weight;
+    gdouble *taps;
+
+    /* center of the output pixel */
+    ox = (0.5 + (gdouble) j - shift) / out_size;
+    /* x is the source pixel to use, can be fractional */
+    x = ox * (gdouble) in_size - corr;
+    x = CLAMP (x, 0, in_size - 1);
+    /* this is the first source pixel to use */
+    xi = floor (x - tap_offs);
+
+    offset[j] = xi;
+    phase[j] = j;
+    n_taps[j] = max_taps;
+    weight = 0;
+    taps = resampler->taps + j * max_taps;
+
+    for (l = 0; l < max_taps; l++) {
+      taps[l] = params->get_tap (params, l, xi, x);
+      weight += taps[l];
+    }
+
+    for (l = 0; l < max_taps; l++)
+      taps[l] /= weight;
+
+    if (xi < 0) {
+      gint sh = -xi;
+
+      for (l = 0; l < sh; l++) {
+        taps[sh] += taps[l];
+      }
+      for (l = 0; l < max_taps - sh; l++) {
+        taps[l] = taps[sh + l];
+      }
+      for (; l < max_taps; l++) {
+        taps[l] = 0;
+      }
+      offset[j] += sh;
+    }
+    if (xi > in_size - max_taps) {
+      gint sh = xi - (in_size - max_taps);
+
+      for (l = 0; l < sh; l++) {
+        taps[max_taps - sh - 1] += taps[max_taps - sh + l];
+      }
+      for (l = 0; l < max_taps - sh; l++) {
+        taps[max_taps - 1 - l] = taps[max_taps - 1 - sh - l];
+      }
+      for (l = 0; l < sh; l++) {
+        taps[l] = 0;
+      }
+      offset[j] -= sh;
+    }
+  }
+}
+
+static void
+resampler_dump (GstVideoResampler * resampler)
+{
+#if 0
+  gint i, max_taps, out_size;
+
+  out_size = resampler->out_size;
+  max_taps = resampler->max_taps;
+
+  for (i = 0; i < out_size; i++) {
+    gint j, o, phase, n_taps;
+    gdouble sum;
+
+    o = resampler->offset[i];
+    n_taps = resampler->n_taps[i];
+    phase = resampler->phase[i];
+
+    printf ("%u: \t%d  ", i, o);
+    sum = 0;
+    for (j = 0; j < n_taps; j++) {
+      gdouble tap;
+      tap = resampler->taps[phase * max_taps + j];
+      printf ("\t%f ", tap);
+      sum += tap;
+    }
+    printf ("\t: sum %f\n", sum);
+  }
+#endif
+}
+
+
+/**
+ * gst_video_resampler_new:
+ * @resampler: a #GstVideoResampler
+ * @method: a #GstVideoResamplerMethod
+ * @flags: #GstVideoResamplerFlags
+ * @n_phases: number of phases to use
+ * @n_taps: number of taps to use
+ * @in_size: number of source elements
+ * @out_size: number of destination elements
+ * @options: extra options
+ *
+ * Make a new resampler. @in_size source elements will
+ * be resampled to @out_size destination elements.
+ *
+ * @n_taps specifies the amount of elements to use from the source for one output
+ * element. If n_taps is 0, this function chooses a good value automatically based
+ * on the @method and @in_size/@out_size.
+ *
+ * Returns: %TRUE on success
+ *
+ * Since: 1.6
+ */
+gboolean
+gst_video_resampler_init (GstVideoResampler * resampler,
+    GstVideoResamplerMethod method, GstVideoResamplerFlags flags,
+    guint n_phases, guint n_taps, gdouble shift, guint in_size, guint out_size,
+    GstStructure * options)
+{
+  ResamplerParams params;
+  gint max_taps;
+  gdouble scale_factor;
+
+  g_return_val_if_fail (in_size != 0, FALSE);
+  g_return_val_if_fail (out_size != 0, FALSE);
+  g_return_val_if_fail (n_phases == out_size, FALSE);
+
+  resampler->in_size = in_size;
+  resampler->out_size = out_size;
+  resampler->n_phases = n_phases;
+
+  params.method = method;
+  params.flags = flags;
+  params.shift = shift;
+  params.resampler = resampler;
+
+  GST_DEBUG ("%d %u  %u->%u", method, n_taps, in_size, out_size);
+
+  params.sharpness = GET_OPT_SHARPNESS (options);
+  params.sharpen = GET_OPT_SHARPEN (options);
+
+  scale_factor = in_size / (gdouble) out_size;
+  if (scale_factor > 1.0) {
+    params.fx = (1.0 / scale_factor) * params.sharpness;
+  } else {
+    params.fx = (1.0) * params.sharpness;
+  }
+
+  max_taps = GET_OPT_MAX_TAPS (options);
+  n_taps = MIN (n_taps, max_taps);
+
+  switch (method) {
+    case GST_VIDEO_RESAMPLER_METHOD_NEAREST:
+      params.envelope = GET_OPT_ENVELOPE (options);
+      params.get_tap = get_nearest_tap;
+      if (n_taps == 0)
+        n_taps = 1;
+      break;
+    case GST_VIDEO_RESAMPLER_METHOD_LINEAR:
+      params.get_tap = get_linear_tap;
+      params.envelope = 1.0;
+      break;
+    case GST_VIDEO_RESAMPLER_METHOD_CUBIC:
+      params.b = GET_OPT_CUBIC_B (options);
+      params.c = GET_OPT_CUBIC_C (options);
+      params.envelope = 2.0;
+      params.get_tap = get_cubic_tap;
+      break;
+    case GST_VIDEO_RESAMPLER_METHOD_SINC:
+      params.envelope = GET_OPT_ENVELOPE (options);
+      params.get_tap = get_sinc_tap;
+      break;
+    case GST_VIDEO_RESAMPLER_METHOD_LANCZOS:
+      params.envelope = GET_OPT_ENVELOPE (options);
+      params.get_tap = get_lanczos_tap;
+      break;
+    default:
+      break;
+  }
+
+  if (n_taps == 0) {
+    params.dx = ceil (2.0 * params.envelope / params.fx);
+    n_taps = CLAMP (params.dx, 0, max_taps);
+  }
+  params.fx = 2.0 * params.envelope / n_taps;
+  params.ex = 2.0 / n_taps;
+
+  if (n_taps > in_size)
+    n_taps = in_size;
+
+  resampler->max_taps = n_taps;
+
+  resampler_calculate_taps (&params);
+
+  resampler_dump (resampler);
+
+  return TRUE;
+}
+
+/**
+ * gst_video_resampler_clear:
+ * @resampler: a #GstVideoResampler
+ *
+ * Clear a previously initialized #GstVideoResampler @resampler.
+ *
+ * Since: 1.6
+ */
+void
+gst_video_resampler_clear (GstVideoResampler * resampler)
+{
+  g_return_if_fail (resampler != NULL);
+
+  g_free (resampler->phase);
+  g_free (resampler->offset);
+  g_free (resampler->n_taps);
+  g_free (resampler->taps);
+}
diff --git a/gst-libs/gst/video/video-resampler.h b/gst-libs/gst/video/video-resampler.h
new file mode 100644
index 0000000..699f382
--- /dev/null
+++ b/gst-libs/gst/video/video-resampler.h
@@ -0,0 +1,171 @@
+/* GStreamer
+ * Copyright (C) <2014> Wim Taymans <wim.taymans@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_VIDEO_RESAMPLER_H__
+#define __GST_VIDEO_RESAMPLER_H__
+
+#include <gst/gst.h>
+
+G_BEGIN_DECLS
+
+typedef struct _GstVideoResampler GstVideoResampler;
+
+/**
+ * GstVideoResamplerMethod:
+ * @GST_VIDEO_RESAMPLER_METHOD_NEAREST: Duplicates the samples when
+ *    upsampling and drops when downsampling
+ * @GST_VIDEO_RESAMPLER_METHOD_LINEAR: Uses linear interpolation to reconstruct
+ *    missing samples and averaging to downsample
+ * @GST_VIDEO_RESAMPLER_METHOD_CUBIC: Uses cubic interpolation
+ * @GST_VIDEO_RESAMPLER_METHOD_SINC: Uses sinc interpolation
+ * @GST_VIDEO_RESAMPLER_METHOD_LANCZOS: Uses lanczos interpolation
+ *
+ * Different subsampling and upsampling methods
+ *
+ * Since: 1.6
+ */
+typedef enum {
+  GST_VIDEO_RESAMPLER_METHOD_NEAREST,
+  GST_VIDEO_RESAMPLER_METHOD_LINEAR,
+  GST_VIDEO_RESAMPLER_METHOD_CUBIC,
+  GST_VIDEO_RESAMPLER_METHOD_SINC,
+  GST_VIDEO_RESAMPLER_METHOD_LANCZOS
+} GstVideoResamplerMethod;
+
+/**
+ * GST_VIDEO_RESAMPLER_OPT_CUBIC_B:
+ *
+ * G_TYPE_DOUBLE, B parameter of the cubic filter. The B
+ * parameter controls the bluriness. Values between 0.0 and
+ * 2.0 are accepted. 1/3 is the default.
+ *
+ * Below are some values of popular filters:
+ *                    B       C
+ * Hermite           0.0     0.0
+ * Spline            1.0     0.0
+ * Catmull-Rom       0.0     1/2
+ * Mitchell          1/3     1/3
+ * Robidoux          0.3782  0.3109
+ * Robidoux
+ *  Sharp            0.2620  0.3690
+ * Robidoux
+ *  Soft             0.6796  0.1602
+ */
+#define GST_VIDEO_RESAMPLER_OPT_CUBIC_B      "GstVideoResampler.cubic-b"
+/**
+ * GST_VIDEO_RESAMPLER_OPT_CUBIC_C:
+ *
+ * G_TYPE_DOUBLE, C parameter of the cubic filter. The C
+ * parameter controls the Keys alpha value. Values between 0.0 and
+ * 2.0 are accepted. 1/3 is the default.
+ *
+ * See #GST_VIDEO_RESAMPLER_OPT_CUBIC_B for some more common values
+ */
+#define GST_VIDEO_RESAMPLER_OPT_CUBIC_C      "GstVideoResampler.cubic-c"
+
+/**
+ * GST_VIDEO_RESAMPLER_OPT_ENVELOPE:
+ *
+ * G_TYPE_DOUBLE, specifies the size of filter envelope for
+ * @GST_VIDEO_RESAMPLER_METHOD_LANCZOS. values are clamped between
+ * 1.0 and 5.0. 2.0 is the default.
+ */
+#define GST_VIDEO_RESAMPLER_OPT_ENVELOPE      "GstVideoResampler.envelope"
+
+/**
+ * GST_VIDEO_RESAMPLER_OPT_SHARPNESS:
+ *
+ * G_TYPE_DOUBLE, specifies sharpness of the filter for
+ * @GST_VIDEO_RESAMPLER_METHOD_LANCZOS. values are clamped between
+ * 0.5 and 1.5. 1.0 is the default.
+ */
+#define GST_VIDEO_RESAMPLER_OPT_SHARPNESS     "GstVideoResampler.sharpness"
+
+/**
+ * GST_VIDEO_RESAMPLER_OPT_SHARPEN:
+ *
+ * G_TYPE_DOUBLE, specifies sharpening of the filter for
+ * @GST_VIDEO_RESAMPLER_METHOD_LANCZOS. values are clamped between
+ * 0.0 and 1.0. 0.0 is the default.
+ */
+#define GST_VIDEO_RESAMPLER_OPT_SHARPEN      "GstVideoResampler.sharpen"
+/**
+ * GST_VIDEO_RESAMPLER_OPT_MAX_TAPS:
+ *
+ * G_TYPE_INT, limits the maximum number of taps to use.
+ * 16 is the default.
+ */
+#define GST_VIDEO_RESAMPLER_OPT_MAX_TAPS     "GstVideoResampler.max-taps"
+
+/**
+ * GstVideoResamplerFlags:
+ * @GST_VIDEO_RESAMPLER_FLAG_NONE: no flags
+ *
+ * Different resampler flags.
+ *
+ * Since: 1.6
+ */
+typedef enum {
+  GST_VIDEO_RESAMPLER_FLAG_NONE                 = (0),
+} GstVideoResamplerFlags;
+
+/**
+ * GstVideoResampler:
+ * @in_size: the input size
+ * @out_size: the output size
+ * @max_taps: the maximum number of taps
+ * @n_phases: the number of phases
+ * @offset: array with the source offset for each output element
+ * @phase: array with the phase to use for each output element
+ * @n_taps: array with new number of taps for each phase
+ * @taps: the taps for all phases
+ *
+ * A structure holding resampler information.
+ *
+ * Since: 1.6
+ */
+struct _GstVideoResampler
+{
+  gint in_size;
+  gint out_size;
+  guint max_taps;
+  guint n_phases;
+  guint32 *offset;
+  guint32 *phase;
+  guint32 *n_taps;
+  gdouble *taps;
+
+  /*< private >*/
+  gpointer _gst_reserved[GST_PADDING];
+};
+
+
+gboolean    gst_video_resampler_init      (GstVideoResampler *resampler,
+                                           GstVideoResamplerMethod method,
+                                           GstVideoResamplerFlags flags,
+                                           guint n_phases, guint n_taps,
+                                           gdouble shift,
+                                           guint in_size, guint out_size,
+                                           GstStructure *options);
+
+void        gst_video_resampler_clear     (GstVideoResampler *resampler);
+
+G_END_DECLS
+
+#endif /* __GST_VIDEO_RESAMPLER_H__ */
diff --git a/gst-libs/gst/video/video-scaler.c b/gst-libs/gst/video/video-scaler.c
new file mode 100644
index 0000000..18bd09c
--- /dev/null
+++ b/gst-libs/gst/video/video-scaler.c
@@ -0,0 +1,1578 @@
+/* GStreamer
+ * Copyright (C) <2014> Wim Taymans <wim.taymans@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 <stdio.h>
+#include <math.h>
+
+/**
+ * SECTION:gstvideoscaler
+ * @short_description: Utility object for rescaling video frames
+ *
+ * #GstVideoScaler is a utility object for rescaling and resampling
+ * video frames using various interpolation / sampling methods.
+ *
+ */
+
+#ifndef DISABLE_ORC
+#include <orc/orcfunctions.h>
+#else
+#define orc_memcpy memcpy
+#endif
+
+#include "video-orc.h"
+#include "video-scaler.h"
+
+#ifndef GST_DISABLE_GST_DEBUG
+#define GST_CAT_DEFAULT ensure_debug_category()
+static GstDebugCategory *
+ensure_debug_category (void)
+{
+  static gsize cat_gonce = 0;
+
+  if (g_once_init_enter (&cat_gonce)) {
+    gsize cat_done;
+
+    cat_done = (gsize) _gst_debug_category_new ("video-scaler", 0,
+        "video-scaler object");
+
+    g_once_init_leave (&cat_gonce, cat_done);
+  }
+
+  return (GstDebugCategory *) cat_gonce;
+}
+
+#else
+#define ensure_debug_category() /* NOOP */
+#endif /* GST_DISABLE_GST_DEBUG */
+
+#define SCALE_U8          12
+#define SCALE_U8_ROUND    (1 << (SCALE_U8 -1))
+#define SCALE_U8_LQ       6
+#define SCALE_U8_LQ_ROUND (1 << (SCALE_U8_LQ -1))
+#define SCALE_U16         12
+#define SCALE_U16_ROUND   (1 << (SCALE_U16 -1))
+
+#define LQ
+
+typedef void (*GstVideoScalerHFunc) (GstVideoScaler * scale,
+    gpointer src, gpointer dest, guint dest_offset, guint width, guint n_elems);
+typedef void (*GstVideoScalerVFunc) (GstVideoScaler * scale,
+    gpointer srcs[], gpointer dest, guint dest_offset, guint width,
+    guint n_elems);
+
+struct _GstVideoScaler
+{
+  GstVideoResamplerMethod method;
+  GstVideoScalerFlags flags;
+
+  GstVideoResampler resampler;
+
+  gboolean merged;
+  gint in_y_offset;
+  gint out_y_offset;
+
+  /* cached integer coefficients */
+  gint16 *taps_s16;
+  gint16 *taps_s16_4;
+  guint32 *offset_n;
+  /* for ORC */
+  gint inc;
+
+  gint tmpwidth;
+  gpointer tmpline1;
+  gpointer tmpline2;
+};
+
+static void
+resampler_zip (GstVideoResampler * resampler, const GstVideoResampler * r1,
+    const GstVideoResampler * r2)
+{
+  guint i, out_size, max_taps, n_phases;
+  gdouble *taps;
+  guint32 *offset, *phase;
+
+  g_return_if_fail (r1->max_taps == r2->max_taps);
+
+  out_size = r1->out_size + r2->out_size;
+  max_taps = r1->max_taps;
+  n_phases = out_size;
+  offset = g_malloc (sizeof (guint32) * out_size);
+  phase = g_malloc (sizeof (guint32) * n_phases);
+  taps = g_malloc (sizeof (gdouble) * max_taps * n_phases);
+
+  resampler->in_size = r1->in_size + r2->in_size;
+  resampler->out_size = out_size;
+  resampler->max_taps = max_taps;
+  resampler->n_phases = n_phases;
+  resampler->offset = offset;
+  resampler->phase = phase;
+  resampler->n_taps = g_malloc (sizeof (guint32) * out_size);
+  resampler->taps = taps;
+
+  for (i = 0; i < out_size; i++) {
+    guint idx = i / 2;
+    const GstVideoResampler *r;
+
+    r = (i & 1) ? r2 : r1;
+
+    offset[i] = r->offset[idx] * 2 + (i & 1);
+    phase[i] = i;
+
+    memcpy (taps + i * max_taps, r->taps + r->phase[idx] * max_taps,
+        max_taps * sizeof (gdouble));
+  }
+}
+
+static void
+realloc_tmplines (GstVideoScaler * scale, gint n_elems, gint width)
+{
+  scale->tmpline1 =
+      g_realloc (scale->tmpline1,
+      sizeof (gint32) * width * n_elems * scale->resampler.max_taps);
+  scale->tmpline2 =
+      g_realloc (scale->tmpline2, sizeof (gint32) * width * n_elems);
+  scale->tmpwidth = width;
+}
+
+static void
+scaler_dump (GstVideoScaler * scale)
+{
+#if 0
+  gint i, j, in_size, out_size, max_taps;
+  guint32 *offset, *phase;
+  gdouble *taps;
+  GstVideoResampler *r = &scale->resampler;
+
+  in_size = r->in_size;
+  out_size = r->out_size;
+  offset = r->offset;
+  phase = r->phase;
+  max_taps = r->max_taps;
+  taps = r->taps;
+
+  g_print ("in %d, out %d, max_taps %d, n_phases %d\n", in_size, out_size,
+      max_taps, r->n_phases);
+
+  for (i = 0; i < out_size; i++) {
+    g_print ("%d: \t%d \t%d:", i, offset[i], phase[i]);
+
+    for (j = 0; j < max_taps; j++) {
+      g_print ("\t%f", taps[i * max_taps + j]);
+    }
+    g_print ("\n");
+  }
+#endif
+}
+
+/**
+ * gst_video_scaler_new: (skip)
+ * @method: a #GstVideoResamplerMethod
+ * @flags: #GstVideoScalerFlags
+ * @n_taps: number of taps to use
+ * @in_size: number of source elements
+ * @out_size: number of destination elements
+ * @options: (allow-none): extra options
+ *
+ * Make a new @method video scaler. @in_size source lines/pixels will
+ * be scaled to @out_size destination lines/pixels.
+ *
+ * @n_taps specifies the amount of pixels to use from the source for one output
+ * pixel. If n_taps is 0, this function chooses a good value automatically based
+ * on the @method and @in_size/@out_size.
+ *
+ * Returns: a #GstVideoResample
+ */
+GstVideoScaler *
+gst_video_scaler_new (GstVideoResamplerMethod method, GstVideoScalerFlags flags,
+    guint n_taps, guint in_size, guint out_size, GstStructure * options)
+{
+  GstVideoScaler *scale;
+
+  g_return_val_if_fail (in_size != 0, NULL);
+  g_return_val_if_fail (out_size != 0, NULL);
+
+  scale = g_slice_new0 (GstVideoScaler);
+
+  GST_DEBUG ("%d %u  %u->%u", method, n_taps, in_size, out_size);
+
+  scale->method = method;
+  scale->flags = flags;
+
+  if (flags & GST_VIDEO_SCALER_FLAG_INTERLACED) {
+    GstVideoResampler tresamp, bresamp;
+
+    gst_video_resampler_init (&tresamp, method, 0, (out_size + 1) / 2, n_taps,
+        -0.5, (in_size + 1) / 2, (out_size + 1) / 2, options);
+
+    n_taps = tresamp.max_taps;
+
+    gst_video_resampler_init (&bresamp, method, 0, out_size - tresamp.out_size,
+        n_taps, 0.5, in_size - tresamp.in_size,
+        out_size - tresamp.out_size, options);
+
+    resampler_zip (&scale->resampler, &tresamp, &bresamp);
+    gst_video_resampler_clear (&tresamp);
+    gst_video_resampler_clear (&bresamp);
+  } else {
+    gst_video_resampler_init (&scale->resampler, method,
+        GST_VIDEO_RESAMPLER_FLAG_NONE, out_size, n_taps, 0.0, in_size, out_size,
+        options);
+  }
+
+  if (out_size == 1)
+    scale->inc = 0;
+  else
+    scale->inc = ((in_size - 1) << 16) / (out_size - 1) - 1;
+
+  scaler_dump (scale);
+  GST_DEBUG ("max_taps %d", scale->resampler.max_taps);
+
+  return scale;
+}
+
+/**
+ * gst_video_scaler_free:
+ * @scale: a #GstVideoScaler
+ *
+ * Free a previously allocated #GstVideoScaler @scale.
+ */
+void
+gst_video_scaler_free (GstVideoScaler * scale)
+{
+  g_return_if_fail (scale != NULL);
+
+  gst_video_resampler_clear (&scale->resampler);
+  g_free (scale->taps_s16);
+  g_free (scale->taps_s16_4);
+  g_free (scale->offset_n);
+  g_free (scale->tmpline1);
+  g_free (scale->tmpline2);
+  g_slice_free (GstVideoScaler, scale);
+}
+
+/**
+ * gst_video_scaler_get_max_taps:
+ * @scale: a #GstVideoScaler
+ *
+ * Get the maximum number of taps for @scale.
+ *
+ * Returns: the maximum number of taps
+ */
+guint
+gst_video_scaler_get_max_taps (GstVideoScaler * scale)
+{
+  g_return_val_if_fail (scale != NULL, 0);
+
+  return scale->resampler.max_taps;
+}
+
+/**
+ * gst_video_scaler_get_coeff:
+ * @scale: a #GstVideoScaler
+ * @out_offset: an output offset
+ * @in_offset: result input offset
+ * @n_taps: result n_taps
+ *
+ * For a given pixel at @out_offset, get the first required input pixel at
+ * @in_offset and the @n_taps filter coefficients.
+ *
+ * Note that for interlaced content, @in_offset needs to be incremented with
+ * 2 to get the next input line.
+ *
+ * Returns: an array of @n_tap gdouble values with filter coefficients.
+ */
+const gdouble *
+gst_video_scaler_get_coeff (GstVideoScaler * scale,
+    guint out_offset, guint * in_offset, guint * n_taps)
+{
+  guint offset, phase;
+
+  g_return_val_if_fail (scale != NULL, NULL);
+  g_return_val_if_fail (out_offset < scale->resampler.out_size, NULL);
+
+  offset = scale->resampler.offset[out_offset];
+  phase = scale->resampler.phase[out_offset];
+
+  if (in_offset)
+    *in_offset = offset;
+  if (n_taps) {
+    *n_taps = scale->resampler.max_taps;
+    if (scale->flags & GST_VIDEO_SCALER_FLAG_INTERLACED)
+      *n_taps *= 2;
+  }
+  return scale->resampler.taps + phase * scale->resampler.max_taps;
+}
+
+static gboolean
+resampler_convert_coeff (const gdouble * src,
+    gpointer dest, guint n, guint bits, guint precision)
+{
+  gdouble multiplier;
+  gint i, j;
+  gdouble offset, l_offset, h_offset;
+  gboolean exact = FALSE;
+
+  multiplier = (1 << precision);
+
+  /* Round to integer, but with an adjustable bias that we use to
+   * eliminate the DC error. */
+  l_offset = 0.0;
+  h_offset = 1.0;
+  offset = 0.5;
+
+  for (i = 0; i < 64; i++) {
+    gint sum = 0;
+
+    for (j = 0; j < n; j++) {
+      gint16 tap = floor (offset + src[j] * multiplier);
+
+      ((gint16 *) dest)[j] = tap;
+
+      sum += tap;
+    }
+    if (sum == (1 << precision)) {
+      exact = TRUE;
+      break;
+    }
+
+    if (l_offset == h_offset)
+      break;
+
+    if (sum < (1 << precision)) {
+      if (offset > l_offset)
+        l_offset = offset;
+      offset += (h_offset - l_offset) / 2;
+    } else {
+      if (offset < h_offset)
+        h_offset = offset;
+      offset -= (h_offset - l_offset) / 2;
+    }
+  }
+
+  if (!exact)
+    GST_WARNING ("can't find exact taps");
+
+  return exact;
+}
+
+static void
+make_s16_taps (GstVideoScaler * scale, gint n_elems, gint precision)
+{
+  gint i, j, max_taps, n_phases, out_size, src_inc;
+  gint16 *taps_s16, *taps_s16_4;
+  gdouble *taps;
+  guint32 *phase, *offset, *offset_n;
+
+  n_phases = scale->resampler.n_phases;
+  max_taps = scale->resampler.max_taps;
+
+  taps = scale->resampler.taps;
+  taps_s16 = scale->taps_s16 = g_malloc (sizeof (gint16) * n_phases * max_taps);
+
+  for (i = 0; i < n_phases; i++) {
+    resampler_convert_coeff (taps, taps_s16, max_taps, 16, precision);
+
+    taps += max_taps;
+    taps_s16 += max_taps;
+  }
+
+  out_size = scale->resampler.out_size;
+
+  taps_s16 = scale->taps_s16;
+  phase = scale->resampler.phase;
+  offset = scale->resampler.offset;
+
+  taps_s16_4 = scale->taps_s16_4 =
+      g_malloc (sizeof (gint16) * out_size * max_taps * 4);
+  offset_n = scale->offset_n =
+      g_malloc (sizeof (guint32) * out_size * max_taps);
+
+  if (scale->flags & GST_VIDEO_SCALER_FLAG_INTERLACED)
+    src_inc = 2;
+  else
+    src_inc = 1;
+
+  for (j = 0; j < max_taps; j++) {
+    for (i = 0; i < out_size; i++) {
+      gint16 tap;
+
+      if (scale->merged) {
+        if ((i & 1) == scale->out_y_offset)
+          offset_n[j * out_size + i] = offset[i] + (2 * j);
+        else
+          offset_n[j * out_size + i] = offset[i] + (4 * j);
+      } else {
+        offset_n[j * out_size + i] = offset[i] + j * src_inc;
+      }
+      tap = taps_s16[phase[i] * max_taps + j];
+      taps_s16_4[(j * out_size + i) * n_elems + 0] = tap;
+      if (n_elems > 1)
+        taps_s16_4[(j * out_size + i) * n_elems + 1] = tap;
+      if (n_elems > 2)
+        taps_s16_4[(j * out_size + i) * n_elems + 2] = tap;
+      if (n_elems > 3)
+        taps_s16_4[(j * out_size + i) * n_elems + 3] = tap;
+    }
+  }
+}
+
+#undef ACC_SCALE
+
+static void
+video_scale_h_near_u8 (GstVideoScaler * scale,
+    gpointer src, gpointer dest, guint dest_offset, guint width, guint n_elems)
+{
+  guint8 *s, *d;
+  gint i;
+
+  d = (guint8 *) dest + dest_offset;
+  s = (guint8 *) src;
+
+  {
+#ifndef ACC_SCALE
+    guint32 *offset = scale->resampler.offset + dest_offset;
+
+    for (i = 0; i < width; i++)
+      d[i] = s[offset[i]];
+#else
+    gint acc = 0;
+
+    for (i = 0; i < width; i++) {
+      gint j = (acc + 0x8000) >> 16;
+      d[i] = s[j];
+      acc += scale->inc;
+    }
+#endif
+  }
+}
+
+static void
+video_scale_h_near_3u8 (GstVideoScaler * scale,
+    gpointer src, gpointer dest, guint dest_offset, guint width, guint n_elems)
+{
+  guint8 *s, *d;
+  gint i;
+
+  d = (guint8 *) dest + dest_offset;
+  s = (guint8 *) src;
+
+  {
+#ifndef ACC_SCALE
+    guint32 *offset = scale->resampler.offset + dest_offset;
+
+    for (i = 0; i < width; i++) {
+      gint j = offset[i] * 3;
+
+      d[i * 3 + 0] = s[j + 0];
+      d[i * 3 + 1] = s[j + 1];
+      d[i * 3 + 2] = s[j + 2];
+    }
+#else
+    gint acc = 0;
+
+    for (i = 0; i < width; i++) {
+      gint j = ((acc + 0x8000) >> 16) * 3;
+
+      d[i * 3 + 0] = s[j + 0];
+      d[i * 3 + 1] = s[j + 1];
+      d[i * 3 + 2] = s[j + 2];
+      acc += scale->inc;
+    }
+#endif
+  }
+}
+
+static void
+video_scale_h_near_u16 (GstVideoScaler * scale,
+    gpointer src, gpointer dest, guint dest_offset, guint width, guint n_elems)
+{
+  guint16 *s, *d;
+  gint i;
+
+  d = (guint16 *) dest + dest_offset;
+  s = (guint16 *) src;
+
+  {
+#ifndef ACC_SCALE
+    guint32 *offset = scale->resampler.offset + dest_offset;
+
+    for (i = 0; i < width; i++)
+      d[i] = s[offset[i]];
+#else
+    gint acc = 0;
+
+    for (i = 0; i < width; i++) {
+      gint j = (acc + 0x8000) >> 16;
+      d[i] = s[j];
+      acc += scale->inc;
+    }
+#endif
+  }
+}
+
+static void
+video_scale_h_near_u32 (GstVideoScaler * scale,
+    gpointer src, gpointer dest, guint dest_offset, guint width, guint n_elems)
+{
+  guint32 *s, *d;
+
+  d = (guint32 *) dest + dest_offset;
+  s = (guint32 *) src;
+
+#if 0
+  /* ORC is slower on this */
+  video_orc_resample_h_near_u32_lq (d, s, 0, scale->inc, width);
+#elif 0
+  video_orc_resample_h_near_u32 (d, s, offset, width);
+#else
+  {
+    gint i;
+#ifndef ACC_SCALE
+    guint32 *offset = scale->resampler.offset + dest_offset;
+
+    for (i = 0; i < width; i++)
+      d[i] = s[offset[i]];
+#else
+    gint acc = 0;
+
+    for (i = 0; i < width; i++) {
+      gint j = (acc + 0x8000) >> 16;
+      d[i] = s[j];
+      acc += scale->inc;
+    }
+#endif
+  }
+#endif
+}
+
+static void
+video_scale_h_near_u64 (GstVideoScaler * scale,
+    gpointer src, gpointer dest, guint dest_offset, guint width, guint n_elems)
+{
+  guint64 *s, *d;
+  gint i;
+  guint32 *offset;
+
+  d = (guint64 *) dest + dest_offset;
+  s = (guint64 *) src;
+
+  offset = scale->resampler.offset + dest_offset;
+  for (i = 0; i < width; i++)
+    d[i] = s[offset[i]];
+}
+
+static void
+video_scale_h_2tap_1u8 (GstVideoScaler * scale,
+    gpointer src, gpointer dest, guint dest_offset, guint width, guint n_elems)
+{
+  guint8 *s, *d;
+
+  d = (guint8 *) dest + dest_offset;
+  s = (guint8 *) src;
+
+  video_orc_resample_h_2tap_1u8_lq (d, s, 0, scale->inc, width);
+}
+
+static void
+video_scale_h_2tap_4u8 (GstVideoScaler * scale,
+    gpointer src, gpointer dest, guint dest_offset, guint width, guint n_elems)
+{
+  guint32 *s, *d;
+
+  d = (guint32 *) dest + dest_offset;
+  s = (guint32 *) src;
+
+  video_orc_resample_h_2tap_4u8_lq (d, s, 0, scale->inc, width);
+}
+
+static void
+video_scale_h_ntap_u8 (GstVideoScaler * scale,
+    gpointer src, gpointer dest, guint dest_offset, guint width, guint n_elems)
+{
+  gint16 *taps;
+  gint i, max_taps, count;
+  gpointer d;
+  guint32 *offset_n;
+  guint8 *pixels;
+  gint16 *temp;
+
+  if (scale->taps_s16 == NULL)
+#ifdef LQ
+    make_s16_taps (scale, n_elems, SCALE_U8_LQ);
+#else
+    make_s16_taps (scale, n_elems, SCALE_U8);
+#endif
+
+  max_taps = scale->resampler.max_taps;
+  offset_n = scale->offset_n;
+
+  pixels = (guint8 *) scale->tmpline1;
+
+  /* prepare the arrays */
+  count = width * max_taps;
+  switch (n_elems) {
+    case 1:
+    {
+      guint8 *s = (guint8 *) src;
+
+      for (i = 0; i < count; i++)
+        pixels[i] = s[offset_n[i]];
+
+      d = (guint8 *) dest + dest_offset;
+      break;
+    }
+    case 2:
+    {
+      guint16 *p16 = (guint16 *) pixels;
+      guint16 *s = (guint16 *) src;
+
+      for (i = 0; i < count; i++)
+        p16[i] = s[offset_n[i]];
+
+      d = (guint16 *) dest + dest_offset;
+      break;
+    }
+    case 3:
+    {
+      guint8 *s = (guint8 *) src;
+
+      for (i = 0; i < count; i++) {
+        gint j = offset_n[i] * 3;
+        pixels[i * 3 + 0] = s[j + 0];
+        pixels[i * 3 + 1] = s[j + 1];
+        pixels[i * 3 + 2] = s[j + 2];
+      }
+      d = (guint8 *) dest + dest_offset * 3;
+      break;
+    }
+    case 4:
+    {
+      guint32 *p32 = (guint32 *) pixels;
+      guint32 *s = (guint32 *) src;
+#if 0
+      video_orc_resample_h_near_u32 (p32, s, offset_n, count);
+#else
+      for (i = 0; i < count; i++)
+        p32[i] = s[offset_n[i]];
+#endif
+      d = (guint32 *) dest + dest_offset;
+      break;
+    }
+    default:
+      return;
+  }
+  temp = (gint16 *) scale->tmpline2;
+  taps = scale->taps_s16_4;
+  count = width * n_elems;
+
+#ifdef LQ
+  if (max_taps == 2) {
+    video_orc_resample_h_2tap_u8_lq (d, pixels, pixels + count, taps,
+        taps + count, count);
+  } else {
+    /* first pixels with first tap to temp */
+    if (max_taps >= 3) {
+      video_orc_resample_h_multaps3_u8_lq (temp, pixels, pixels + count,
+          pixels + count * 2, taps, taps + count, taps + count * 2, count);
+      max_taps -= 3;
+      pixels += count * 3;
+      taps += count * 3;
+    } else {
+      gint first = max_taps % 3;
+
+      video_orc_resample_h_multaps_u8_lq (temp, pixels, taps, count);
+      video_orc_resample_h_muladdtaps_u8_lq (temp, 0, pixels + count, count,
+          taps + count, count * 2, count, first - 1);
+      max_taps -= first;
+      pixels += count * first;
+      taps += count * first;
+    }
+    while (max_taps > 3) {
+      if (max_taps >= 6) {
+        video_orc_resample_h_muladdtaps3_u8_lq (temp, pixels, pixels + count,
+            pixels + count * 2, taps, taps + count, taps + count * 2, count);
+        max_taps -= 3;
+        pixels += count * 3;
+        taps += count * 3;
+      } else {
+        video_orc_resample_h_muladdtaps_u8_lq (temp, 0, pixels, count,
+            taps, count * 2, count, max_taps - 3);
+        pixels += count * (max_taps - 3);
+        taps += count * (max_taps - 3);
+        max_taps = 3;
+      }
+    }
+    if (max_taps == 3) {
+      video_orc_resample_h_muladdscaletaps3_u8_lq (d, pixels, pixels + count,
+          pixels + count * 2, taps, taps + count, taps + count * 2, temp,
+          count);
+    } else {
+      if (max_taps) {
+        /* add other pixels with other taps to t4 */
+        video_orc_resample_h_muladdtaps_u8_lq (temp, 0, pixels, count,
+            taps, count * 2, count, max_taps);
+      }
+      /* scale and write final result */
+      video_orc_resample_scaletaps_u8_lq (d, temp, count);
+    }
+  }
+#else
+  /* first pixels with first tap to t4 */
+  video_orc_resample_h_multaps_u8 (temp, pixels, taps, count);
+  /* add other pixels with other taps to t4 */
+  video_orc_resample_h_muladdtaps_u8 (temp, 0, pixels + count, count,
+      taps + count, count * 2, count, max_taps - 1);
+  /* scale and write final result */
+  video_orc_resample_scaletaps_u8 (d, temp, count);
+#endif
+}
+
+static void
+video_scale_h_ntap_u16 (GstVideoScaler * scale,
+    gpointer src, gpointer dest, guint dest_offset, guint width, guint n_elems)
+{
+  gint16 *taps;
+  gint i, max_taps, count;
+  gpointer d;
+  guint32 *offset_n;
+  guint16 *pixels;
+  gint32 *temp;
+
+  if (scale->taps_s16 == NULL)
+    make_s16_taps (scale, n_elems, SCALE_U16);
+
+  max_taps = scale->resampler.max_taps;
+  offset_n = scale->offset_n;
+
+  pixels = (guint16 *) scale->tmpline1;
+  /* prepare the arrays FIXME, we can add this into ORC */
+  count = width * max_taps;
+  switch (n_elems) {
+    case 1:
+    {
+      guint16 *s = (guint16 *) src;
+
+      for (i = 0; i < count; i++)
+        pixels[i] = s[offset_n[i]];
+
+      d = (guint16 *) dest + dest_offset;
+      break;
+    }
+    case 4:
+    {
+      guint64 *p64 = (guint64 *) pixels;
+      guint64 *s = (guint64 *) src;
+#if 0
+      video_orc_resample_h_near_u32 (p32, s, offset_n, count);
+#else
+      for (i = 0; i < count; i++)
+        p64[i] = s[offset_n[i]];
+#endif
+      d = (guint64 *) dest + dest_offset;
+      break;
+    }
+    default:
+      return;
+  }
+
+  temp = (gint32 *) scale->tmpline2;
+  taps = scale->taps_s16_4;
+  count = width * n_elems;
+
+  if (max_taps == 2) {
+    video_orc_resample_h_2tap_u16 (d, pixels, pixels + count, taps,
+        taps + count, count);
+  } else {
+    /* first pixels with first tap to t4 */
+    video_orc_resample_h_multaps_u16 (temp, pixels, taps, count);
+    /* add other pixels with other taps to t4 */
+    video_orc_resample_h_muladdtaps_u16 (temp, 0, pixels + count, count * 2,
+        taps + count, count * 2, count, max_taps - 1);
+    /* scale and write final result */
+    video_orc_resample_scaletaps_u16 (d, temp, count);
+  }
+}
+
+static void
+video_scale_v_near_u8 (GstVideoScaler * scale,
+    gpointer srcs[], gpointer dest, guint dest_offset, guint width,
+    guint n_elems)
+{
+  if (dest != srcs[0])
+    memcpy (dest, srcs[0], n_elems * width);
+}
+
+static void
+video_scale_v_near_u16 (GstVideoScaler * scale,
+    gpointer srcs[], gpointer dest, guint dest_offset, guint width,
+    guint n_elems)
+{
+  if (dest != srcs[0])
+    memcpy (dest, srcs[0], n_elems * 2 * width);
+}
+
+static void
+video_scale_v_2tap_u8 (GstVideoScaler * scale,
+    gpointer srcs[], gpointer dest, guint dest_offset, guint width,
+    guint n_elems)
+{
+  gint max_taps, src_inc;
+  guint8 *s1, *s2, *d;
+  gint16 p1;
+
+  if (scale->taps_s16 == NULL)
+#ifdef LQ
+    make_s16_taps (scale, n_elems, SCALE_U8_LQ + 2);
+#else
+    make_s16_taps (scale, n_elems, SCALE_U8);
+#endif
+
+  max_taps = scale->resampler.max_taps;
+
+  if (scale->flags & GST_VIDEO_SCALER_FLAG_INTERLACED)
+    src_inc = 2;
+  else
+    src_inc = 1;
+
+  d = (guint8 *) dest;
+  s1 = (guint8 *) srcs[0 * src_inc];
+  s2 = (guint8 *) srcs[1 * src_inc];
+  p1 = scale->taps_s16[dest_offset * max_taps + 1];
+
+#ifdef LQ
+  video_orc_resample_v_2tap_u8_lq (d, s1, s2, p1, width * n_elems);
+#else
+  video_orc_resample_v_2tap_u8 (d, s1, s2, p1, width * n_elems);
+#endif
+}
+
+static void
+video_scale_v_2tap_u16 (GstVideoScaler * scale,
+    gpointer srcs[], gpointer dest, guint dest_offset, guint width,
+    guint n_elems)
+{
+  gint max_taps, src_inc;
+  guint16 *s1, *s2, *d;
+  gint16 p1;
+
+  if (scale->taps_s16 == NULL)
+    make_s16_taps (scale, n_elems, SCALE_U16);
+
+  max_taps = scale->resampler.max_taps;
+
+  if (scale->flags & GST_VIDEO_SCALER_FLAG_INTERLACED)
+    src_inc = 2;
+  else
+    src_inc = 1;
+
+  d = (guint16 *) dest;
+  s1 = (guint16 *) srcs[0 * src_inc];
+  s2 = (guint16 *) srcs[1 * src_inc];
+  p1 = scale->taps_s16[dest_offset * max_taps + 1];
+
+  video_orc_resample_v_2tap_u16 (d, s1, s2, p1, width * n_elems);
+}
+
+#if 0
+static void
+video_scale_h_4tap_8888 (GstVideoScaler * scale,
+    gpointer src, gpointer dest, guint dest_offset, guint width)
+{
+  gint16 *taps;
+  gint i, max_taps, count;
+  guint8 *d;
+  guint32 *offset_n;
+  guint32 *pixels;
+
+  if (scale->taps_s16 == NULL)
+    make_s16_taps (scale, n_elems, S16_SCALE);
+
+  max_taps = scale->resampler.max_taps;
+  offset_n = scale->offset_n;
+
+  d = (guint8 *) dest + 4 * dest_offset;
+
+  /* prepare the arrays FIXME, we can add this into ORC */
+  count = width * max_taps;
+  pixels = (guint32 *) scale->tmpline1;
+  for (i = 0; i < count; i++)
+    pixels[i] = ((guint32 *) src)[offset_n[i]];
+
+  taps = scale->taps_s16_4;
+  count = width * 4;
+
+  video_orc_resample_h_4tap_8 (d, pixels, pixels + width, pixels + 2 * width,
+      pixels + 3 * width, taps, taps + count, taps + 2 * count,
+      taps + 3 * count, count);
+}
+#endif
+
+static void
+video_scale_v_4tap_u8 (GstVideoScaler * scale,
+    gpointer srcs[], gpointer dest, guint dest_offset, guint width,
+    guint n_elems)
+{
+  gint max_taps;
+  guint8 *s1, *s2, *s3, *s4, *d;
+  gint p1, p2, p3, p4, src_inc;
+  gint16 *taps;
+
+  if (scale->taps_s16 == NULL)
+#ifdef LQ
+    make_s16_taps (scale, n_elems, SCALE_U8_LQ);
+#else
+    make_s16_taps (scale, n_elems, SCALE_U8);
+#endif
+
+  max_taps = scale->resampler.max_taps;
+  taps = scale->taps_s16 + dest_offset * max_taps;
+
+  if (scale->flags & GST_VIDEO_SCALER_FLAG_INTERLACED)
+    src_inc = 2;
+  else
+    src_inc = 1;
+
+  d = (guint8 *) dest;
+  s1 = (guint8 *) srcs[0 * src_inc];
+  s2 = (guint8 *) srcs[1 * src_inc];
+  s3 = (guint8 *) srcs[2 * src_inc];
+  s4 = (guint8 *) srcs[3 * src_inc];
+  p1 = taps[0];
+  p2 = taps[1];
+  p3 = taps[2];
+  p4 = taps[3];
+
+#ifdef LQ
+  video_orc_resample_v_4tap_u8_lq (d, s1, s2, s3, s4, p1, p2, p3, p4,
+      width * n_elems);
+#else
+  video_orc_resample_v_4tap_u8 (d, s1, s2, s3, s4, p1, p2, p3, p4,
+      width * n_elems);
+#endif
+}
+
+static void
+video_scale_v_ntap_u8 (GstVideoScaler * scale,
+    gpointer srcs[], gpointer dest, guint dest_offset, guint width,
+    guint n_elems)
+{
+  gint16 *taps;
+  gint i, max_taps, count, src_inc;
+  gpointer d;
+  gint16 *temp;
+
+  if (scale->taps_s16 == NULL)
+#ifdef LQ
+    make_s16_taps (scale, n_elems, SCALE_U8_LQ);
+#else
+    make_s16_taps (scale, n_elems, SCALE_U8);
+#endif
+
+  max_taps = scale->resampler.max_taps;
+  taps = scale->taps_s16 + (scale->resampler.phase[dest_offset] * max_taps);
+
+  d = (guint32 *) dest;
+
+  if (scale->flags & GST_VIDEO_SCALER_FLAG_INTERLACED)
+    src_inc = 2;
+  else
+    src_inc = 1;
+
+  temp = (gint16 *) scale->tmpline2;
+  count = width * n_elems;
+
+#ifdef LQ
+  if (max_taps >= 4) {
+    video_orc_resample_v_multaps4_u8_lq (temp, srcs[0], srcs[1 * src_inc],
+        srcs[2 * src_inc], srcs[3 * src_inc], taps[0], taps[1], taps[2],
+        taps[3], count);
+    max_taps -= 4;
+    srcs += 4 * src_inc;
+    taps += 4;
+  } else {
+    gint first = (max_taps % 4);
+
+    video_orc_resample_v_multaps_u8_lq (temp, srcs[0], taps[0], count);
+    for (i = 1; i < first; i++) {
+      video_orc_resample_v_muladdtaps_u8_lq (temp, srcs[i * src_inc], taps[i],
+          count);
+    }
+    max_taps -= first;
+    srcs += first * src_inc;
+    taps += first;
+  }
+  while (max_taps > 4) {
+    if (max_taps >= 8) {
+      video_orc_resample_v_muladdtaps4_u8_lq (temp, srcs[0], srcs[1 * src_inc],
+          srcs[2 * src_inc], srcs[3 * src_inc], taps[0], taps[1], taps[2],
+          taps[3], count);
+      max_taps -= 4;
+      srcs += 4 * src_inc;
+      taps += 4;
+    } else {
+      for (i = 0; i < max_taps - 4; i++)
+        video_orc_resample_v_muladdtaps_u8_lq (temp, srcs[i * src_inc], taps[i],
+            count);
+      srcs += (max_taps - 4) * src_inc;
+      taps += (max_taps - 4);
+      max_taps = 4;
+    }
+  }
+  if (max_taps == 4) {
+    video_orc_resample_v_muladdscaletaps4_u8_lq (d, srcs[0], srcs[1 * src_inc],
+        srcs[2 * src_inc], srcs[3 * src_inc], temp, taps[0], taps[1], taps[2],
+        taps[3], count);
+  } else {
+    for (i = 0; i < max_taps; i++)
+      video_orc_resample_v_muladdtaps_u8_lq (temp, srcs[i * src_inc], taps[i],
+          count);
+    video_orc_resample_scaletaps_u8_lq (d, temp, count);
+  }
+
+#else
+  video_orc_resample_v_multaps_u8 (temp, srcs[0], taps[0], count);
+  for (i = 1; i < max_taps; i++) {
+    video_orc_resample_v_muladdtaps_u8 (temp, srcs[i * src_inc], taps[i],
+        count);
+  }
+  video_orc_resample_scaletaps_u8 (d, temp, count);
+#endif
+}
+
+static void
+video_scale_v_ntap_u16 (GstVideoScaler * scale,
+    gpointer srcs[], gpointer dest, guint dest_offset, guint width,
+    guint n_elems)
+{
+  gint16 *taps;
+  gint i, max_taps, count, src_inc;
+  gpointer d;
+  gint32 *temp;
+
+  if (scale->taps_s16 == NULL)
+    make_s16_taps (scale, n_elems, SCALE_U16);
+
+  max_taps = scale->resampler.max_taps;
+  taps = scale->taps_s16 + (scale->resampler.phase[dest_offset] * max_taps);
+
+  d = (guint16 *) dest;
+
+  if (scale->flags & GST_VIDEO_SCALER_FLAG_INTERLACED)
+    src_inc = 2;
+  else
+    src_inc = 1;
+
+  temp = (gint32 *) scale->tmpline2;
+  count = width * n_elems;
+
+  video_orc_resample_v_multaps_u16 (temp, srcs[0], taps[0], count);
+  for (i = 1; i < max_taps; i++) {
+    video_orc_resample_v_muladdtaps_u16 (temp, srcs[i * src_inc], taps[i],
+        count);
+  }
+  video_orc_resample_scaletaps_u16 (d, temp, count);
+}
+
+static gint
+get_y_offset (GstVideoFormat format)
+{
+  switch (format) {
+    case GST_VIDEO_FORMAT_YUY2:
+    case GST_VIDEO_FORMAT_YVYU:
+      return 0;
+    default:
+    case GST_VIDEO_FORMAT_UYVY:
+      return 1;
+  }
+}
+
+/**
+ * gst_video_scaler_combine_packed_YUV: (skip)
+ * @y_scale: a scaler for the Y component
+ * @uv_scale: a scaler for the U and V components
+ * @in_format: the input video format
+ * @out_format: the output video format
+ *
+ * Combine a scaler for Y and UV into one scaler for the packed @format.
+ *
+ * Returns: a new horizontal videoscaler for @format.
+ *
+ * Since: 1.6
+ */
+GstVideoScaler *
+gst_video_scaler_combine_packed_YUV (GstVideoScaler * y_scale,
+    GstVideoScaler * uv_scale, GstVideoFormat in_format,
+    GstVideoFormat out_format)
+{
+  GstVideoScaler *scale;
+  GstVideoResampler *resampler;
+  guint i, out_size, max_taps, n_phases;
+  gdouble *taps;
+  guint32 *offset, *phase;
+
+  g_return_val_if_fail (y_scale != NULL, NULL);
+  g_return_val_if_fail (uv_scale != NULL, NULL);
+  g_return_val_if_fail (uv_scale->resampler.max_taps ==
+      y_scale->resampler.max_taps, NULL);
+
+  scale = g_slice_new0 (GstVideoScaler);
+
+  scale->method = y_scale->method;
+  scale->flags = y_scale->flags;
+  scale->merged = TRUE;
+
+  resampler = &scale->resampler;
+
+  out_size = GST_ROUND_UP_4 (y_scale->resampler.out_size * 2);
+  max_taps = y_scale->resampler.max_taps;
+  n_phases = out_size;
+  offset = g_malloc (sizeof (guint32) * out_size);
+  phase = g_malloc (sizeof (guint32) * n_phases);
+  taps = g_malloc (sizeof (gdouble) * max_taps * n_phases);
+
+  resampler->in_size = y_scale->resampler.in_size * 2;
+  resampler->out_size = out_size;
+  resampler->max_taps = max_taps;
+  resampler->n_phases = n_phases;
+  resampler->offset = offset;
+  resampler->phase = phase;
+  resampler->n_taps = g_malloc (sizeof (guint32) * out_size);
+  resampler->taps = taps;
+
+  scale->in_y_offset = get_y_offset (in_format);
+  scale->out_y_offset = get_y_offset (out_format);
+  scale->inc = y_scale->inc;
+
+  for (i = 0; i < out_size; i++) {
+    gint ic;
+
+    if ((i & 1) == scale->out_y_offset) {
+      ic = MIN (i / 2, y_scale->resampler.out_size - 1);
+      offset[i] = y_scale->resampler.offset[ic] * 2 + scale->in_y_offset;
+      memcpy (taps + i * max_taps, y_scale->resampler.taps +
+          y_scale->resampler.phase[ic] * max_taps, max_taps * sizeof (gdouble));
+    } else {
+      ic = MIN (i / 4, uv_scale->resampler.out_size - 1);
+      offset[i] = uv_scale->resampler.offset[ic] * 4 + (i & 3);
+      memcpy (taps + i * max_taps, uv_scale->resampler.taps +
+          uv_scale->resampler.phase[ic] * max_taps,
+          max_taps * sizeof (gdouble));
+    }
+    phase[i] = i;
+  }
+
+  scaler_dump (scale);
+
+  return scale;
+}
+
+static gboolean
+get_functions (GstVideoScaler * hscale, GstVideoScaler * vscale,
+    GstVideoFormat format,
+    GstVideoScalerHFunc * hfunc, GstVideoScalerVFunc * vfunc,
+    gint * n_elems, guint * width)
+{
+  gint bits;
+  gboolean mono = FALSE;
+
+  switch (format) {
+    case GST_VIDEO_FORMAT_GRAY8:
+      bits = 8;
+      *n_elems = 1;
+      mono = TRUE;
+      break;
+    case GST_VIDEO_FORMAT_YUY2:
+    case GST_VIDEO_FORMAT_YVYU:
+    case GST_VIDEO_FORMAT_UYVY:
+      bits = 8;
+      *n_elems = 1;
+      *width = GST_ROUND_UP_4 (*width * 2);
+      break;
+    case GST_VIDEO_FORMAT_RGB:
+    case GST_VIDEO_FORMAT_BGR:
+    case GST_VIDEO_FORMAT_v308:
+      bits = 8;
+      *n_elems = 3;
+      break;
+    case GST_VIDEO_FORMAT_AYUV:
+    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:
+      bits = 8;
+      *n_elems = 4;
+      break;
+    case GST_VIDEO_FORMAT_ARGB64:
+    case GST_VIDEO_FORMAT_AYUV64:
+      bits = 16;
+      *n_elems = 4;
+      break;
+    case GST_VIDEO_FORMAT_GRAY16_LE:
+    case GST_VIDEO_FORMAT_GRAY16_BE:
+      bits = 16;
+      *n_elems = 1;
+      mono = TRUE;
+      break;
+    case GST_VIDEO_FORMAT_NV12:
+    case GST_VIDEO_FORMAT_NV16:
+    case GST_VIDEO_FORMAT_NV21:
+    case GST_VIDEO_FORMAT_NV24:
+    case GST_VIDEO_FORMAT_NV61:
+      bits = 8;
+      *n_elems = 2;
+      break;
+    default:
+      return FALSE;
+  }
+  if (bits == 8) {
+    switch (hscale ? hscale->resampler.max_taps : 0) {
+      case 0:
+        break;
+      case 1:
+        if (*n_elems == 1)
+          *hfunc = video_scale_h_near_u8;
+        else if (*n_elems == 2)
+          *hfunc = video_scale_h_near_u16;
+        else if (*n_elems == 3)
+          *hfunc = video_scale_h_near_3u8;
+        else if (*n_elems == 4)
+          *hfunc = video_scale_h_near_u32;
+        break;
+      case 2:
+        if (*n_elems == 1 && mono)
+          *hfunc = video_scale_h_2tap_1u8;
+        else if (*n_elems == 4)
+          *hfunc = video_scale_h_2tap_4u8;
+        else
+          *hfunc = video_scale_h_ntap_u8;
+        break;
+      default:
+        *hfunc = video_scale_h_ntap_u8;
+        break;
+    }
+    switch (vscale ? vscale->resampler.max_taps : 0) {
+      case 0:
+        break;
+      case 1:
+        *vfunc = video_scale_v_near_u8;
+        break;
+      case 2:
+        *vfunc = video_scale_v_2tap_u8;
+        break;
+      case 4:
+        *vfunc = video_scale_v_4tap_u8;
+        break;
+      default:
+        *vfunc = video_scale_v_ntap_u8;
+        break;
+    }
+  } else if (bits == 16) {
+    switch (hscale ? hscale->resampler.max_taps : 0) {
+      case 0:
+        break;
+      case 1:
+        if (*n_elems == 1)
+          *hfunc = video_scale_h_near_u16;
+        else
+          *hfunc = video_scale_h_near_u64;
+        break;
+      default:
+        *hfunc = video_scale_h_ntap_u16;
+        break;
+    }
+    switch (vscale ? vscale->resampler.max_taps : 0) {
+      case 0:
+        break;
+      case 1:
+        *vfunc = video_scale_v_near_u16;
+        break;
+      case 2:
+        *vfunc = video_scale_v_2tap_u16;
+        break;
+      default:
+        *vfunc = video_scale_v_ntap_u16;
+        break;
+    }
+  }
+  return TRUE;
+}
+
+/**
+ * gst_video_scaler_horizontal:
+ * @scale: a #GstVideoScaler
+ * @format: a #GstVideoFormat for @src and @dest
+ * @src: source pixels
+ * @dest: destination pixels
+ * @dest_offset: the horizontal destination offset
+ * @width: the number of pixels to scale
+ *
+ * Horizontally scale the pixels in @src to @dest, starting from @dest_offset
+ * for @width samples.
+ */
+void
+gst_video_scaler_horizontal (GstVideoScaler * scale, GstVideoFormat format,
+    gpointer src, gpointer dest, guint dest_offset, guint width)
+{
+  gint n_elems;
+  GstVideoScalerHFunc func = NULL;
+
+  g_return_if_fail (scale != NULL);
+  g_return_if_fail (src != NULL);
+  g_return_if_fail (dest != NULL);
+  g_return_if_fail (dest_offset + width <= scale->resampler.out_size);
+
+  if (!get_functions (scale, NULL, format, &func, NULL, &n_elems, &width)
+      || func == NULL)
+    goto no_func;
+
+  if (scale->tmpwidth < width)
+    realloc_tmplines (scale, n_elems, width);
+
+  func (scale, src, dest, dest_offset, width, n_elems);
+  return;
+
+no_func:
+  {
+    GST_WARNING ("no scaler function for format");
+  }
+}
+
+/**
+ * gst_video_scaler_vertical:
+ * @scale: a #GstVideoScaler
+ * @format: a #GstVideoFormat for @srcs and @dest
+ * @src_lines: source pixels lines
+ * @dest: destination pixels
+ * @dest_offset: the vertical destination offset
+ * @width: the number of pixels to scale
+ *
+ * Vertically combine @width pixels in the lines in @src_lines to @dest.
+ * @dest is the location of the target line at @dest_offset and
+ * @srcs are the input lines for @dest_offset, as obtained with
+ * gst_video_scaler_get_info().
+ */
+void
+gst_video_scaler_vertical (GstVideoScaler * scale, GstVideoFormat format,
+    gpointer src_lines[], gpointer dest, guint dest_offset, guint width)
+{
+  gint n_elems;
+  GstVideoScalerVFunc func = NULL;
+
+  g_return_if_fail (scale != NULL);
+  g_return_if_fail (src_lines != NULL);
+  g_return_if_fail (dest != NULL);
+  g_return_if_fail (dest_offset < scale->resampler.out_size);
+
+  if (!get_functions (NULL, scale, format, NULL, &func, &n_elems, &width)
+      || func == NULL)
+    goto no_func;
+
+  if (scale->tmpwidth < width)
+    realloc_tmplines (scale, n_elems, width);
+
+  func (scale, src_lines, dest, dest_offset, width, n_elems);
+
+  return;
+
+no_func:
+  {
+    GST_WARNING ("no scaler function for format");
+  }
+}
+
+
+/**
+ * gst_video_scaler_2d:
+ * @hscale: a horzontal #GstVideoScaler
+ * @vscale: a vertical #GstVideoScaler
+ * @format: a #GstVideoFormat for @srcs and @dest
+ * @src: source pixels
+ * @src_stride: source pixels stride
+ * @dest: destination pixels
+ * @dest_stride: destination pixels stride
+ * @x: the horizontal destination offset
+ * @y: the vertical destination offset
+ * @width: the number of output pixels to scale
+ * @height: the number of output lines to scale
+ *
+ * Scale a rectangle of pixels in @src with @src_stride to @dest with
+ * @dest_stride using the horizontal scaler @hscaler and the vertical
+ * scaler @vscale.
+ *
+ * One or both of @hscale and @vscale can be NULL to only perform scaling in
+ * one dimension or do a copy without scaling.
+ *
+ * @x and @y are the coordinates in the destination image to process.
+ */
+void
+gst_video_scaler_2d (GstVideoScaler * hscale, GstVideoScaler * vscale,
+    GstVideoFormat format, gpointer src, gint src_stride,
+    gpointer dest, gint dest_stride, guint x, guint y,
+    guint width, guint height)
+{
+  gint n_elems;
+  GstVideoScalerHFunc hfunc = NULL;
+  GstVideoScalerVFunc vfunc = NULL;
+  gint i;
+
+  g_return_if_fail (src != NULL);
+  g_return_if_fail (dest != NULL);
+
+  if (!get_functions (hscale, vscale, format, &hfunc, &vfunc, &n_elems, &width))
+    goto no_func;
+
+#define LINE(s,ss,i)  ((guint8 *)(s) + ((i) * (ss)))
+#define TMP_LINE(s,i,v) ((guint8 *)(s->tmpline1) + (((i) % (v)) * (sizeof (gint32) * width * n_elems)))
+
+  if (vscale == NULL) {
+    if (hscale == NULL) {
+      guint xo, xw;
+      guint8 *s, *d;
+
+      xo = x * n_elems;
+      xw = width * n_elems;
+
+      s = LINE (src, src_stride, y) + xo;
+      d = LINE (dest, dest_stride, y) + xo;
+
+      /* no scaling, do memcpy */
+      for (i = y; i < height; i++) {
+        memcpy (d, s, xw);
+        d += dest_stride;
+        s += src_stride;
+      }
+    } else {
+      if (hscale->tmpwidth < width)
+        realloc_tmplines (hscale, n_elems, width);
+
+      /* only horizontal scaling */
+      for (i = y; i < height; i++) {
+        hfunc (hscale, LINE (src, src_stride, i), LINE (dest, dest_stride, i),
+            x, width, n_elems);
+      }
+    }
+  } else {
+    guint v_taps;
+    gpointer *lines;
+
+    if (vscale->tmpwidth < width)
+      realloc_tmplines (vscale, n_elems, width);
+
+    v_taps = vscale->resampler.max_taps;
+    lines = g_alloca (v_taps * sizeof (gpointer));
+
+    if (hscale == NULL) {
+      /* only vertical scaling */
+      for (i = y; i < height; i++) {
+        guint in, j;
+
+        in = vscale->resampler.offset[i];
+        for (j = 0; j < v_taps; j++)
+          lines[j] = LINE (src, src_stride, in + j);
+
+        vfunc (vscale, lines, LINE (dest, dest_stride, i), i, width, n_elems);
+      }
+    } else {
+      gint tmp_in = y;
+      gint s1, s2;
+
+      if (hscale->tmpwidth < width)
+        realloc_tmplines (hscale, n_elems, width);
+
+      s1 = width * vscale->resampler.offset[height - 1];
+      s2 = width * height;
+
+      if (s1 <= s2) {
+        for (i = y; i < height; i++) {
+          guint in, j;
+
+          in = vscale->resampler.offset[i];
+          while (tmp_in < in)
+            tmp_in++;
+          while (tmp_in < in + v_taps) {
+            hfunc (hscale, LINE (src, src_stride, tmp_in), TMP_LINE (vscale,
+                    tmp_in, v_taps), x, width, n_elems);
+            tmp_in++;
+          }
+          for (j = 0; j < v_taps; j++)
+            lines[j] = TMP_LINE (vscale, in + j, v_taps);
+
+          vfunc (vscale, lines, LINE (dest, dest_stride, i), i, width, n_elems);
+        }
+      } else {
+        guint vx, vw, w1, ws;
+        guint h_taps;
+
+        h_taps = hscale->resampler.max_taps;
+        w1 = x + width - 1;
+        ws = hscale->resampler.offset[w1];
+
+        /* we need to estimate the area that we first need to scale in the
+         * vertical direction. Scale x and width to find the lower bound and
+         * overshoot the width to find the upper bound */
+        vx = (hscale->inc * x) >> 16;
+        vx = MIN (vx, hscale->resampler.offset[x]);
+        vw = (hscale->inc * (x + width)) >> 16;
+        if (hscale->merged) {
+          if ((w1 & 1) == hscale->out_y_offset)
+            vw = MAX (vw, ws + (2 * h_taps));
+          else
+            vw = MAX (vw, ws + (4 * h_taps));
+        } else {
+          vw = MAX (vw, ws + h_taps);
+        }
+        vw += 1;
+        /* but clamp to max size */
+        vw = MIN (vw, hscale->resampler.in_size);
+
+        if (vscale->tmpwidth < vw)
+          realloc_tmplines (vscale, n_elems, vw);
+
+        for (i = y; i < height; i++) {
+          guint in, j;
+
+          in = vscale->resampler.offset[i];
+          for (j = 0; j < v_taps; j++)
+            lines[j] = LINE (src, src_stride, in + j) + vx * n_elems;
+
+          vfunc (vscale, lines, TMP_LINE (vscale, 0, v_taps) + vx * n_elems, i,
+              vw - vx, n_elems);
+
+          hfunc (hscale, TMP_LINE (vscale, 0, v_taps), LINE (dest, dest_stride,
+                  i), x, width, n_elems);
+        }
+      }
+    }
+  }
+  return;
+
+no_func:
+  {
+    GST_WARNING ("no scaler function for format");
+  }
+}
diff --git a/gst-libs/gst/video/video-scaler.h b/gst-libs/gst/video/video-scaler.h
new file mode 100644
index 0000000..e4b752f
--- /dev/null
+++ b/gst-libs/gst/video/video-scaler.h
@@ -0,0 +1,90 @@
+/* GStreamer
+ * Copyright (C) <2014> Wim Taymans <wim.taymans@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_VIDEO_SCALER_H__
+#define __GST_VIDEO_SCALER_H__
+
+#include <gst/gst.h>
+
+#include <gst/video/video-format.h>
+#include <gst/video/video-color.h>
+#include <gst/video/video-resampler.h>
+
+G_BEGIN_DECLS
+
+/**
+ * GST_VIDEO_SCALER_OPT_DITHER_METHOD:
+ *
+ * #GST_TYPE_VIDEO_DITHER_METHOD, The dither method to use for propagating
+ * quatization errors.
+ */
+#define GST_VIDEO_SCALER_OPT_DITHER_METHOD   "GstVideoScaler.dither-method"
+
+/**
+ * GstVideoScalerFlags:
+ * @GST_VIDEO_SCALER_FLAG_NONE: no flags
+ * @GST_VIDEO_SCALER_FLAG_INTERLACED: Set up a scaler for interlaced content
+ *
+ * Different scale flags.
+ */
+typedef enum {
+  GST_VIDEO_SCALER_FLAG_NONE                 = (0),
+  GST_VIDEO_SCALER_FLAG_INTERLACED           = (1 << 0),
+} GstVideoScalerFlags;
+
+typedef struct _GstVideoScaler GstVideoScaler;
+
+GstVideoScaler *      gst_video_scaler_new            (GstVideoResamplerMethod method,
+                                                       GstVideoScalerFlags flags,
+                                                       guint n_taps,
+                                                       guint in_size, guint out_size,
+                                                       GstStructure * options);
+void                  gst_video_scaler_free           (GstVideoScaler *scale);
+
+guint                 gst_video_scaler_get_max_taps   (GstVideoScaler *scale);
+const gdouble *       gst_video_scaler_get_coeff      (GstVideoScaler *scale,
+                                                       guint out_offset,
+                                                       guint *in_offset,
+                                                       guint *n_taps);
+
+void                  gst_video_scaler_horizontal     (GstVideoScaler *scale,
+                                                       GstVideoFormat format,
+                                                       gpointer src, gpointer dest,
+                                                       guint dest_offset, guint width);
+void                  gst_video_scaler_vertical       (GstVideoScaler *scale,
+                                                       GstVideoFormat format,
+                                                       gpointer src_lines[], gpointer dest,
+                                                       guint dest_offset, guint width);
+
+GstVideoScaler *      gst_video_scaler_combine_packed_YUV (GstVideoScaler * y_scale,
+                                                           GstVideoScaler *uv_scale,
+                                                           GstVideoFormat in_format,
+                                                           GstVideoFormat out_format);
+
+void                  gst_video_scaler_2d             (GstVideoScaler *hscale,
+                                                       GstVideoScaler *vscale,
+                                                       GstVideoFormat format,
+                                                       gpointer src, gint src_stride,
+                                                       gpointer dest, gint dest_stride,
+                                                       guint x, guint y,
+                                                       guint width, guint height);
+
+G_END_DECLS
+
+#endif /* __GST_VIDEO_SCALER_H__ */
diff --git a/gst-libs/gst/video/video.c b/gst-libs/gst/video/video.c
index 2812a11..745dac3 100644
--- a/gst-libs/gst/video/video.c
+++ b/gst-libs/gst/video/video.c
@@ -99,6 +99,95 @@
 }
 
 /**
+ * gst_video_guess_framerate:
+ * @duration: Nominal duration of one frame
+ * @dest_n: (out) (allow-none): Numerator of the calculated framerate
+ * @dest_d: (out) (allow-none): Denominator of the calculated framerate
+ *
+ * Given the nominal duration of one video frame,
+ * this function will check some standard framerates for
+ * a close match (within 0.1%) and return one if possible,
+ *
+ * It will calculate an arbitrary framerate if no close
+ * match was found, and return %FALSE.
+ *
+ * It returns %FALSE if a duration of 0 is passed.
+ *
+ * Returns: %TRUE if a close "standard" framerate was
+ * recognised, and %FALSE otherwise.
+ *
+ * Since: 1.6
+ */
+gboolean
+gst_video_guess_framerate (GstClockTime duration, gint * dest_n, gint * dest_d)
+{
+  const int common_den[] = { 1, 2, 3, 4, 1001 };
+  int best_n, best_d, gcd;
+  guint64 best_error = G_MAXUINT64;
+  guint64 a;
+  int i;
+
+  if (G_UNLIKELY (duration == 0))
+    return FALSE;
+
+  /* Use a limited precision conversion by default for more sensible results,
+   * unless the frame duration is absurdly small (high speed cameras?) */
+  if (duration > 100000) {
+    best_n = 10000;
+    best_d = duration / 100000;
+  } else {
+    best_n = GST_SECOND;
+    best_d = duration;
+  }
+
+  for (i = 0; i < G_N_ELEMENTS (common_den); i++) {
+    gint d = common_den[i];
+    gint n = gst_util_uint64_scale_round (d, GST_SECOND, duration);
+
+    /* For NTSC framerates, round to the nearest 1000 fps */
+    if (d == 1001) {
+      n += 500;
+      n -= (n % 1000);
+    }
+
+    if (n > 0) {
+      /* See what duration the given framerate should be */
+      a = gst_util_uint64_scale_int (GST_SECOND, d, n);
+      /* Compute absolute error */
+      a = (a < duration) ? (duration - a) : (a - duration);
+      if (a < 2) {
+        /* Really precise - take this option */
+        if (dest_n)
+          *dest_n = n;
+        if (dest_d)
+          *dest_d = d;
+        return TRUE;
+      }
+      /* If within 0.1%, remember this denominator */
+      if (a * 1000 < duration && a < best_error) {
+        best_error = a;
+        best_n = n;
+        best_d = d;
+      }
+    }
+  }
+
+  /* set results */
+  gcd = gst_util_greatest_common_divisor (best_n, best_d);
+  if (gcd) {
+    best_n /= gcd;
+    best_d /= gcd;
+  }
+  if (dest_n)
+    *dest_n = best_n;
+  if (dest_d)
+    *dest_d = best_d;
+
+  return (best_error != G_MAXUINT64);
+}
+
+
+/**
  * gst_video_alignment_reset:
  * @align: a #GstVideoAlignment
  *
diff --git a/gst-libs/gst/video/video.h b/gst-libs/gst/video/video.h
index 4f8f8c7..5399182 100644
--- a/gst-libs/gst/video/video.h
+++ b/gst-libs/gst/video/video.h
@@ -26,9 +26,13 @@
 
 #include <gst/video/video-format.h>
 #include <gst/video/video-color.h>
+#include <gst/video/video-dither.h>
 #include <gst/video/video-info.h>
 #include <gst/video/video-frame.h>
 #include <gst/video/video-enumtypes.h>
+#include <gst/video/video-converter.h>
+#include <gst/video/video-scaler.h>
+#include <gst/video/video-multiview.h>
 
 G_BEGIN_DECLS
 
@@ -100,6 +104,9 @@
                                                   guint   display_par_n,
                                                   guint   display_par_d);
 
+gboolean       gst_video_guess_framerate (GstClockTime duration,
+                                          gint * dest_n, gint * dest_d);
+
 /* convert/encode video sample from one format to another */
 
 typedef void (*GstVideoConvertSampleCallback) (GstSample * sample, GError *error, gpointer user_data);
diff --git a/gst-libs/gst/video/videooverlay.c b/gst-libs/gst/video/videooverlay.c
index ad7da93..cd232ba 100644
--- a/gst-libs/gst/video/videooverlay.c
+++ b/gst-libs/gst/video/videooverlay.c
@@ -312,6 +312,9 @@
 
 #include "videooverlay.h"
 
+GST_DEBUG_CATEGORY_STATIC (gst_video_overlay_debug);
+#define GST_CAT_DEFAULT gst_video_overlay_debug
+
 GType
 gst_video_overlay_get_type (void)
 {
@@ -332,6 +335,9 @@
 
     gst_video_overlay_type = g_type_register_static (G_TYPE_INTERFACE,
         "GstVideoOverlay", &gst_video_overlay_info, 0);
+
+    GST_DEBUG_CATEGORY_INIT (gst_video_overlay_debug, "videooverlay", 0,
+        "videooverlay interface");
   }
 
   return gst_video_overlay_type;
diff --git a/gst-plugins-base.doap b/gst-plugins-base.doap
index a7b81f9..7b19a59 100644
--- a/gst-plugins-base.doap
+++ b/gst-plugins-base.doap
@@ -36,51 +36,41 @@
 
  <release>
   <Version>
-   <revision>1.4.5</revision>
-   <branch>1.4</branch>
+   <revision>1.5.91</revision>
+   <branch>1.5</branch>
    <name></name>
-   <created>2014-12-18</created>
-   <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-base/gst-plugins-base-1.4.5.tar.xz" />
+   <created>2015-09-18</created>
+   <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-base/gst-plugins-base-1.5.91.tar.xz" />
   </Version>
  </release>
 
  <release>
   <Version>
-   <revision>1.4.4</revision>
-   <branch>1.4</branch>
+   <revision>1.5.90</revision>
+   <branch>1.5</branch>
    <name></name>
-   <created>2014-11-06</created>
-   <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-base/gst-plugins-base-1.4.4.tar.xz" />
+   <created>2015-08-19</created>
+   <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-base/gst-plugins-base-1.5.90.tar.xz" />
   </Version>
  </release>
 
  <release>
   <Version>
-   <revision>1.4.3</revision>
-   <branch>1.4</branch>
+   <revision>1.5.2</revision>
+   <branch>1.5</branch>
    <name></name>
-   <created>2014-09-24</created>
-   <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-base/gst-plugins-base-1.4.3.tar.xz" />
+   <created>2015-06-24</created>
+   <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-base/gst-plugins-base-1.5.2.tar.xz" />
   </Version>
  </release>
 
  <release>
   <Version>
-   <revision>1.4.2</revision>
-   <branch>1.4</branch>
+   <revision>1.5.1</revision>
+   <branch>1.5</branch>
    <name></name>
-   <created>2014-09-19</created>
-   <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-base/gst-plugins-base-1.4.2.tar.xz" />
-  </Version>
- </release>
-
- <release>
-  <Version>
-   <revision>1.4.1</revision>
-   <branch>1.4</branch>
-   <name></name>
-   <created>2014-08-27</created>
-   <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-base/gst-plugins-base-1.4.1.tar.xz" />
+   <created>2015-06-07</created>
+   <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-base/gst-plugins-base-1.5.1.tar.xz" />
   </Version>
  </release>
 
diff --git a/gst-plugins-base.spec b/gst-plugins-base.spec
index 3c64e16..9965102 100644
--- a/gst-plugins-base.spec
+++ b/gst-plugins-base.spec
@@ -4,7 +4,7 @@
 %define gst_minver  0.11.0
 
 Name: 		%{gstreamer}-plugins-base
-Version: 	1.4.5
+Version: 	1.5.91
 Release: 	1.gst
 Summary: 	GStreamer streaming media framework plug-ins
 
@@ -81,8 +81,10 @@
 # helper programs
 %{_bindir}/gst-discoverer-%{majorminor}
 %{_bindir}/gst-play-%{majorminor}
+%{_bindir}/gst-device-monitor-%{majorminor}
 %{_mandir}/man1/gst-discoverer-%{majorminor}*
 %{_mandir}/man1/gst-play-%{majorminor}*
+%{_mandir}/man1/gst-device-monitor-%{majorminor}*
 
 # libraries
 %{_libdir}/libgstaudio-%{majorminor}.so.*
diff --git a/gst-plugins-base.spec.in b/gst-plugins-base.spec.in
index 45990c9..c9613f0 100644
--- a/gst-plugins-base.spec.in
+++ b/gst-plugins-base.spec.in
@@ -81,8 +81,10 @@
 # helper programs
 %{_bindir}/gst-discoverer-%{majorminor}
 %{_bindir}/gst-play-%{majorminor}
+%{_bindir}/gst-device-monitor-%{majorminor}
 %{_mandir}/man1/gst-discoverer-%{majorminor}*
 %{_mandir}/man1/gst-play-%{majorminor}*
+%{_mandir}/man1/gst-device-monitor-%{majorminor}*
 
 # libraries
 %{_libdir}/libgstaudio-%{majorminor}.so.*
diff --git a/gst/Makefile.in b/gst/Makefile.in
index d3a8b68..682b9a3 100644
--- a/gst/Makefile.in
+++ b/gst/Makefile.in
@@ -1,7 +1,7 @@
-# Makefile.in generated by automake 1.14.1 from Makefile.am.
+# Makefile.in generated by automake 1.15 from Makefile.am.
 # @configure_input@
 
-# Copyright (C) 1994-2013 Free Software Foundation, Inc.
+# 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,
@@ -19,7 +19,17 @@
 # descending into all subdirectories a second time, but only after the first
 # (parallel) run has finished, so it should go right through the second time.
 VPATH = @srcdir@
-am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)'
+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 \
       ?) ;; \
@@ -83,8 +93,6 @@
 build_triplet = @build@
 host_triplet = @host@
 target_triplet = @target@
-DIST_COMMON = $(top_srcdir)/common/parallel-subdirs.mak \
-	$(srcdir)/Makefile.in $(srcdir)/Makefile.am
 subdir = gst
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
 am__aclocal_m4_deps = $(top_srcdir)/common/m4/as-ac-expand.m4 \
@@ -106,7 +114,6 @@
 	$(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-x11.m4 \
 	$(top_srcdir)/common/m4/gst.m4 \
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
@@ -123,6 +130,7 @@
 	$(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
 mkinstalldirs = $(install_sh) -d
 CONFIG_HEADER = $(top_builddir)/config.h
 CONFIG_CLEAN_FILES =
@@ -181,6 +189,8 @@
   done | $(am__uniquify_input)`
 ETAGS = etags
 CTAGS = ctags
+am__DIST_COMMON = $(srcdir)/Makefile.in \
+	$(top_srcdir)/common/parallel-subdirs.mak
 DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
 am__relativize = \
   dir0=`pwd`; \
@@ -266,6 +276,8 @@
 GIO_CFLAGS = @GIO_CFLAGS@
 GIO_LDFLAGS = @GIO_LDFLAGS@
 GIO_LIBS = @GIO_LIBS@
+GIO_UNIX_2_0_CFLAGS = @GIO_UNIX_2_0_CFLAGS@
+GIO_UNIX_2_0_LIBS = @GIO_UNIX_2_0_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
@@ -295,6 +307,8 @@
 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_OPTION_CFLAGS = @GST_OPTION_CFLAGS@
 GST_OPTION_CXXFLAGS = @GST_OPTION_CXXFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
@@ -322,7 +336,6 @@
 GTK_X11_CFLAGS = @GTK_X11_CFLAGS@
 GTK_X11_LIBS = @GTK_X11_LIBS@
 HAVE_CDPARANOIA = @HAVE_CDPARANOIA@
-HAVE_X = @HAVE_X@
 HAVE_XSHM = @HAVE_XSHM@
 HAVE_ZLIB = @HAVE_ZLIB@
 HTML_DIR = @HTML_DIR@
@@ -337,6 +350,7 @@
 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@
@@ -426,13 +440,12 @@
 XGETTEXT = @XGETTEXT@
 XGETTEXT_015 = @XGETTEXT_015@
 XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
-XMKMF = @XMKMF@
+XSHM_CFLAGS = @XSHM_CFLAGS@
 XSHM_LIBS = @XSHM_LIBS@
+XVIDEO_CFLAGS = @XVIDEO_CFLAGS@
 XVIDEO_LIBS = @XVIDEO_LIBS@
 X_CFLAGS = @X_CFLAGS@
-X_EXTRA_LIBS = @X_EXTRA_LIBS@
 X_LIBS = @X_LIBS@
-X_PRE_LIBS = @X_PRE_LIBS@
 ZLIB_CFLAGS = @ZLIB_CFLAGS@
 ZLIB_LIBS = @ZLIB_LIBS@
 abs_builddir = @abs_builddir@
@@ -485,6 +498,7 @@
 psdir = @psdir@
 pyexecdir = @pyexecdir@
 pythondir = @pythondir@
+runstatedir = @runstatedir@
 sbindir = @sbindir@
 sharedstatedir = @sharedstatedir@
 srcdir = @srcdir@
@@ -514,7 +528,6 @@
 	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu gst/Makefile'; \
 	$(am__cd) $(top_srcdir) && \
 	  $(AUTOMAKE) --gnu gst/Makefile
-.PRECIOUS: Makefile
 Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
 	@case '$?' in \
 	  *config.status*) \
@@ -523,7 +536,7 @@
 	    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/parallel-subdirs.mak:
+$(top_srcdir)/common/parallel-subdirs.mak $(am__empty):
 
 $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
 	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
@@ -810,6 +823,8 @@
 	mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \
 	ps ps-am tags tags-am uninstall uninstall-am
 
+.PRECIOUS: Makefile
+
 
 .PHONY: independent-subdirs $(SUBDIRS)
 
diff --git a/gst/adder/Makefile.am b/gst/adder/Makefile.am
index c899cfc..3ba6523 100644
--- a/gst/adder/Makefile.am
+++ b/gst/adder/Makefile.am
@@ -14,18 +14,3 @@
 libgstadder_la_LIBTOOLFLAGS = $(GST_PLUGIN_LIBTOOLFLAGS)
 
 noinst_HEADERS = gstadder.h
-
-Android.mk: Makefile.am $(BUILT_SOURCES)
-	androgenizer \
-	-:PROJECT libgstadder -:SHARED libgstadder \
-	 -:TAGS eng debug \
-         -:REL_TOP $(top_srcdir) -:ABS_TOP $(abs_top_srcdir) \
-	 -:SOURCES $(libgstadder_la_SOURCES) \
-	    $(nodist_libgstadder_la_SOURCES) \
-	 -:CFLAGS $(DEFS) $(DEFAULT_INCLUDES) $(libgstadder_la_CFLAGS) \
-	 -:LDFLAGS $(libgstadder_la_LDFLAGS) \
-	           $(libgstadder_la_LIBADD) \
-	           -ldl \
-	 -:PASSTHROUGH LOCAL_ARM_MODE:=arm \
-		       LOCAL_MODULE_PATH:='$$(TARGET_OUT)/lib/gstreamer-0.10' \
-	> $@
diff --git a/gst/adder/Makefile.in b/gst/adder/Makefile.in
index fb204e6..c91bb28 100644
--- a/gst/adder/Makefile.in
+++ b/gst/adder/Makefile.in
@@ -1,7 +1,7 @@
-# Makefile.in generated by automake 1.14.1 from Makefile.am.
+# Makefile.in generated by automake 1.15 from Makefile.am.
 # @configure_input@
 
-# Copyright (C) 1994-2013 Free Software Foundation, Inc.
+# 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,
@@ -38,7 +38,17 @@
 
 
 VPATH = @srcdir@
-am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)'
+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 \
       ?) ;; \
@@ -102,8 +112,6 @@
 build_triplet = @build@
 host_triplet = @host@
 target_triplet = @target@
-DIST_COMMON = $(top_srcdir)/common/orc.mak $(srcdir)/Makefile.in \
-	$(srcdir)/Makefile.am $(top_srcdir)/depcomp $(noinst_HEADERS)
 subdir = gst/adder
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
 am__aclocal_m4_deps = $(top_srcdir)/common/m4/as-ac-expand.m4 \
@@ -125,7 +133,6 @@
 	$(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-x11.m4 \
 	$(top_srcdir)/common/m4/gst.m4 \
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
@@ -142,6 +149,8 @@
 	$(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 =
@@ -253,6 +262,8 @@
   done | $(am__uniquify_input)`
 ETAGS = etags
 CTAGS = ctags
+am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/common/orc.mak \
+	$(top_srcdir)/depcomp
 DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
 ACLOCAL = @ACLOCAL@
 ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@
@@ -313,6 +324,8 @@
 GIO_CFLAGS = @GIO_CFLAGS@
 GIO_LDFLAGS = @GIO_LDFLAGS@
 GIO_LIBS = @GIO_LIBS@
+GIO_UNIX_2_0_CFLAGS = @GIO_UNIX_2_0_CFLAGS@
+GIO_UNIX_2_0_LIBS = @GIO_UNIX_2_0_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
@@ -342,6 +355,8 @@
 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_OPTION_CFLAGS = @GST_OPTION_CFLAGS@
 GST_OPTION_CXXFLAGS = @GST_OPTION_CXXFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
@@ -369,7 +384,6 @@
 GTK_X11_CFLAGS = @GTK_X11_CFLAGS@
 GTK_X11_LIBS = @GTK_X11_LIBS@
 HAVE_CDPARANOIA = @HAVE_CDPARANOIA@
-HAVE_X = @HAVE_X@
 HAVE_XSHM = @HAVE_XSHM@
 HAVE_ZLIB = @HAVE_ZLIB@
 HTML_DIR = @HTML_DIR@
@@ -384,6 +398,7 @@
 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@
@@ -473,13 +488,12 @@
 XGETTEXT = @XGETTEXT@
 XGETTEXT_015 = @XGETTEXT_015@
 XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
-XMKMF = @XMKMF@
+XSHM_CFLAGS = @XSHM_CFLAGS@
 XSHM_LIBS = @XSHM_LIBS@
+XVIDEO_CFLAGS = @XVIDEO_CFLAGS@
 XVIDEO_LIBS = @XVIDEO_LIBS@
 X_CFLAGS = @X_CFLAGS@
-X_EXTRA_LIBS = @X_EXTRA_LIBS@
 X_LIBS = @X_LIBS@
-X_PRE_LIBS = @X_PRE_LIBS@
 ZLIB_CFLAGS = @ZLIB_CFLAGS@
 ZLIB_LIBS = @ZLIB_LIBS@
 abs_builddir = @abs_builddir@
@@ -532,6 +546,7 @@
 psdir = @psdir@
 pyexecdir = @pyexecdir@
 pythondir = @pythondir@
+runstatedir = @runstatedir@
 sbindir = @sbindir@
 sharedstatedir = @sharedstatedir@
 srcdir = @srcdir@
@@ -582,7 +597,6 @@
 	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu gst/adder/Makefile'; \
 	$(am__cd) $(top_srcdir) && \
 	  $(AUTOMAKE) --gnu gst/adder/Makefile
-.PRECIOUS: Makefile
 Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
 	@case '$?' in \
 	  *config.status*) \
@@ -591,7 +605,7 @@
 	    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/orc.mak:
+$(top_srcdir)/common/orc.mak $(am__empty):
 
 $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
 	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
@@ -907,6 +921,8 @@
 	tags tags-am uninstall uninstall-am \
 	uninstall-pluginLTLIBRARIES
 
+.PRECIOUS: Makefile
+
 
 orc-update: tmp-orc.c $(ORC_SOURCE).h
 	$(top_srcdir)/common/gst-indent tmp-orc.c
@@ -944,21 +960,6 @@
 	cp -p tmp-orc.c $(distdir)/$(ORC_SOURCE)-dist.c
 	cp -p $(ORC_SOURCE).h $(distdir)/$(ORC_SOURCE)-dist.h
 
-Android.mk: Makefile.am $(BUILT_SOURCES)
-	androgenizer \
-	-:PROJECT libgstadder -:SHARED libgstadder \
-	 -:TAGS eng debug \
-         -:REL_TOP $(top_srcdir) -:ABS_TOP $(abs_top_srcdir) \
-	 -:SOURCES $(libgstadder_la_SOURCES) \
-	    $(nodist_libgstadder_la_SOURCES) \
-	 -:CFLAGS $(DEFS) $(DEFAULT_INCLUDES) $(libgstadder_la_CFLAGS) \
-	 -:LDFLAGS $(libgstadder_la_LDFLAGS) \
-	           $(libgstadder_la_LIBADD) \
-	           -ldl \
-	 -:PASSTHROUGH LOCAL_ARM_MODE:=arm \
-		       LOCAL_MODULE_PATH:='$$(TARGET_OUT)/lib/gstreamer-0.10' \
-	> $@
-
 # 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/adder/gstadder.c b/gst/adder/gstadder.c
index 6e9298e..0f297d0 100644
--- a/gst/adder/gstadder.c
+++ b/gst/adder/gstadder.c
@@ -29,10 +29,14 @@
  * The adder currently mixes all data received on the sinkpads as soon as
  * possible without trying to synchronize the streams.
  *
+ * Check out the audiomixer element in gst-plugins-bad for a better-behaving
+ * audio mixing element: It will sync input streams correctly and also handle
+ * live inputs properly.
+ *
  * <refsect2>
  * <title>Example launch line</title>
  * |[
- * gst-launch audiotestsrc freq=100 ! adder name=mix ! audioconvert ! alsasink audiotestsrc freq=500 ! mix.
+ * gst-launch-1.0 audiotestsrc freq=100 ! adder name=mix ! audioconvert ! autoaudiosink audiotestsrc freq=500 ! mix.
  * ]| This pipeline produces two sine waves mixed together.
  * </refsect2>
  */
@@ -485,91 +489,6 @@
 }
 
 static gboolean
-gst_adder_query_latency (GstAdder * adder, GstQuery * query)
-{
-  GstClockTime min, max;
-  gboolean live;
-  gboolean res;
-  GstIterator *it;
-  gboolean done;
-  GValue item = { 0, };
-
-  res = TRUE;
-  done = FALSE;
-
-  live = FALSE;
-  min = 0;
-  max = GST_CLOCK_TIME_NONE;
-
-  /* Take maximum of all latency values */
-  it = gst_element_iterate_sink_pads (GST_ELEMENT_CAST (adder));
-  while (!done) {
-    GstIteratorResult ires;
-
-    ires = gst_iterator_next (it, &item);
-    switch (ires) {
-      case GST_ITERATOR_DONE:
-        done = TRUE;
-        break;
-      case GST_ITERATOR_OK:
-      {
-        GstPad *pad = g_value_get_object (&item);
-        GstQuery *peerquery;
-        GstClockTime min_cur, max_cur;
-        gboolean live_cur;
-
-        peerquery = gst_query_new_latency ();
-
-        /* Ask peer for latency */
-        res &= gst_pad_peer_query (pad, peerquery);
-
-        /* take max from all valid return values */
-        if (res) {
-          gst_query_parse_latency (peerquery, &live_cur, &min_cur, &max_cur);
-
-          if (min_cur > min)
-            min = min_cur;
-
-          if (max_cur != GST_CLOCK_TIME_NONE &&
-              ((max != GST_CLOCK_TIME_NONE && max_cur > max) ||
-                  (max == GST_CLOCK_TIME_NONE)))
-            max = max_cur;
-
-          live = live || live_cur;
-        }
-
-        gst_query_unref (peerquery);
-        g_value_reset (&item);
-        break;
-      }
-      case GST_ITERATOR_RESYNC:
-        live = FALSE;
-        min = 0;
-        max = GST_CLOCK_TIME_NONE;
-        res = TRUE;
-        gst_iterator_resync (it);
-        break;
-      default:
-        res = FALSE;
-        done = TRUE;
-        break;
-    }
-  }
-  g_value_unset (&item);
-  gst_iterator_free (it);
-
-  if (res) {
-    /* store the results */
-    GST_DEBUG_OBJECT (adder, "Calculated total latency: live %s, min %"
-        GST_TIME_FORMAT ", max %" GST_TIME_FORMAT,
-        (live ? "yes" : "no"), GST_TIME_ARGS (min), GST_TIME_ARGS (max));
-    gst_query_set_latency (query, live, min, max);
-  }
-
-  return res;
-}
-
-static gboolean
 gst_adder_src_query (GstPad * pad, GstObject * parent, GstQuery * query)
 {
   GstAdder *adder = GST_ADDER (parent);
@@ -600,9 +519,6 @@
     case GST_QUERY_DURATION:
       res = gst_adder_query_duration (adder, query);
       break;
-    case GST_QUERY_LATENCY:
-      res = gst_adder_query_latency (adder, query);
-      break;
     default:
       /* FIXME, needs a custom query handler because we have multiple
        * sinkpads */
@@ -1182,7 +1098,7 @@
   if (G_UNLIKELY (adder->info.finfo->format == GST_AUDIO_FORMAT_UNKNOWN))
     goto not_negotiated;
 
-  if (adder->flush_stop_pending == TRUE) {
+  if (adder->flush_stop_pending) {
     GST_INFO_OBJECT (adder->srcpad, "send pending flush stop event");
     if (!gst_pad_push_event (adder->srcpad, gst_event_new_flush_stop (TRUE))) {
       GST_WARNING_OBJECT (adder->srcpad, "Sending flush stop event failed");
@@ -1282,7 +1198,7 @@
     inbuf = gst_collect_pads_take_buffer (pads, collect_data, outsize);
 
     if (!GST_COLLECT_PADS_STATE_IS_SET (collect_data,
-                    GST_COLLECT_PADS_STATE_EOS))
+            GST_COLLECT_PADS_STATE_EOS))
       is_eos = FALSE;
 
     /* NULL means EOS or an empty buffer so we still need to flush in
diff --git a/gst/adder/gstadder.h b/gst/adder/gstadder.h
index c21a5e3..a6a0c5e 100644
--- a/gst/adder/gstadder.h
+++ b/gst/adder/gstadder.h
@@ -34,7 +34,6 @@
 #define GST_IS_ADDER(obj)         (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_ADDER))
 #define GST_ADDER_CLASS(klass)    (G_TYPE_CHECK_CLASS_CAST((klass) ,GST_TYPE_ADDER,GstAdderClass))
 #define GST_IS_ADDER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass) ,GST_TYPE_ADDER))
-#define GST_ADDER_GET_CLASS(obj)  (G_TYPE_INSTANCE_GET_CLASS((obj) ,GST_TYPE_ADDER,GstAdderClass))
 
 typedef struct _GstAdder             GstAdder;
 typedef struct _GstAdderClass        GstAdderClass;
diff --git a/gst/app/Makefile.am b/gst/app/Makefile.am
index f2bb6f0..bdd761a 100644
--- a/gst/app/Makefile.am
+++ b/gst/app/Makefile.am
@@ -1,21 +1,7 @@
 plugin_LTLIBRARIES = libgstapp.la
 
 libgstapp_la_SOURCES = gstapp.c
-libgstapp_la_CFLAGS = $(GST_CFLAGS) $(GST_BASE_CFLAGS) $(GST_PLUGINS_BASE_CFLAGS)
-libgstapp_la_LIBADD = $(GST_BASE_LIBS) $(top_builddir)/gst-libs/gst/app/libgstapp-@GST_API_VERSION@.la
+libgstapp_la_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_BASE_CFLAGS) $(GST_CFLAGS)
+libgstapp_la_LIBADD = $(top_builddir)/gst-libs/gst/app/libgstapp-@GST_API_VERSION@.la $(GST_BASE_LIBS)
 libgstapp_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS)
 libgstapp_la_LIBTOOLFLAGS = $(GST_PLUGIN_LIBTOOLFLAGS)
-
-Android.mk: Makefile.am $(BUILT_SOURCES)
-	androgenizer \
-	-:PROJECT libgstapp -:SHARED libgstapp \
-	 -:TAGS eng debug \
-         -:REL_TOP $(top_srcdir) -:ABS_TOP $(abs_top_srcdir) \
-	 -:SOURCES $(libgstapp_la_SOURCES) \
-	 -:CFLAGS $(DEFS) $(DEFAULT_INCLUDES) $(libgstapp_la_CFLAGS) \
-	 -:LDFLAGS $(libgstapp_la_LDFLAGS) \
-	           $(libgstapp_la_LIBADD) \
-	           -ldl \
-	 -:PASSTHROUGH LOCAL_ARM_MODE:=arm \
-		       LOCAL_MODULE_PATH:='$$(TARGET_OUT)/lib/gstreamer-0.10' \
-	> $@
diff --git a/gst/app/Makefile.in b/gst/app/Makefile.in
index cbb2062..1559ce3 100644
--- a/gst/app/Makefile.in
+++ b/gst/app/Makefile.in
@@ -1,7 +1,7 @@
-# Makefile.in generated by automake 1.14.1 from Makefile.am.
+# Makefile.in generated by automake 1.15 from Makefile.am.
 # @configure_input@
 
-# Copyright (C) 1994-2013 Free Software Foundation, Inc.
+# 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,
@@ -15,7 +15,17 @@
 @SET_MAKE@
 
 VPATH = @srcdir@
-am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)'
+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 \
       ?) ;; \
@@ -80,8 +90,6 @@
 host_triplet = @host@
 target_triplet = @target@
 subdir = gst/app
-DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \
-	$(top_srcdir)/depcomp
 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 \
@@ -102,7 +110,6 @@
 	$(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-x11.m4 \
 	$(top_srcdir)/common/m4/gst.m4 \
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
@@ -119,6 +126,7 @@
 	$(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
 mkinstalldirs = $(install_sh) -d
 CONFIG_HEADER = $(top_builddir)/config.h
 CONFIG_CLEAN_FILES =
@@ -153,8 +161,8 @@
 am__installdirs = "$(DESTDIR)$(plugindir)"
 LTLIBRARIES = $(plugin_LTLIBRARIES)
 am__DEPENDENCIES_1 =
-libgstapp_la_DEPENDENCIES = $(am__DEPENDENCIES_1) \
-	$(top_builddir)/gst-libs/gst/app/libgstapp-@GST_API_VERSION@.la
+libgstapp_la_DEPENDENCIES = $(top_builddir)/gst-libs/gst/app/libgstapp-@GST_API_VERSION@.la \
+	$(am__DEPENDENCIES_1)
 am_libgstapp_la_OBJECTS = libgstapp_la-gstapp.lo
 libgstapp_la_OBJECTS = $(am_libgstapp_la_OBJECTS)
 AM_V_lt = $(am__v_lt_@AM_V@)
@@ -225,6 +233,7 @@
   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@
@@ -285,6 +294,8 @@
 GIO_CFLAGS = @GIO_CFLAGS@
 GIO_LDFLAGS = @GIO_LDFLAGS@
 GIO_LIBS = @GIO_LIBS@
+GIO_UNIX_2_0_CFLAGS = @GIO_UNIX_2_0_CFLAGS@
+GIO_UNIX_2_0_LIBS = @GIO_UNIX_2_0_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
@@ -314,6 +325,8 @@
 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_OPTION_CFLAGS = @GST_OPTION_CFLAGS@
 GST_OPTION_CXXFLAGS = @GST_OPTION_CXXFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
@@ -341,7 +354,6 @@
 GTK_X11_CFLAGS = @GTK_X11_CFLAGS@
 GTK_X11_LIBS = @GTK_X11_LIBS@
 HAVE_CDPARANOIA = @HAVE_CDPARANOIA@
-HAVE_X = @HAVE_X@
 HAVE_XSHM = @HAVE_XSHM@
 HAVE_ZLIB = @HAVE_ZLIB@
 HTML_DIR = @HTML_DIR@
@@ -356,6 +368,7 @@
 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@
@@ -445,13 +458,12 @@
 XGETTEXT = @XGETTEXT@
 XGETTEXT_015 = @XGETTEXT_015@
 XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
-XMKMF = @XMKMF@
+XSHM_CFLAGS = @XSHM_CFLAGS@
 XSHM_LIBS = @XSHM_LIBS@
+XVIDEO_CFLAGS = @XVIDEO_CFLAGS@
 XVIDEO_LIBS = @XVIDEO_LIBS@
 X_CFLAGS = @X_CFLAGS@
-X_EXTRA_LIBS = @X_EXTRA_LIBS@
 X_LIBS = @X_LIBS@
-X_PRE_LIBS = @X_PRE_LIBS@
 ZLIB_CFLAGS = @ZLIB_CFLAGS@
 ZLIB_LIBS = @ZLIB_LIBS@
 abs_builddir = @abs_builddir@
@@ -504,6 +516,7 @@
 psdir = @psdir@
 pyexecdir = @pyexecdir@
 pythondir = @pythondir@
+runstatedir = @runstatedir@
 sbindir = @sbindir@
 sharedstatedir = @sharedstatedir@
 srcdir = @srcdir@
@@ -518,8 +531,8 @@
 top_srcdir = @top_srcdir@
 plugin_LTLIBRARIES = libgstapp.la
 libgstapp_la_SOURCES = gstapp.c
-libgstapp_la_CFLAGS = $(GST_CFLAGS) $(GST_BASE_CFLAGS) $(GST_PLUGINS_BASE_CFLAGS)
-libgstapp_la_LIBADD = $(GST_BASE_LIBS) $(top_builddir)/gst-libs/gst/app/libgstapp-@GST_API_VERSION@.la
+libgstapp_la_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_BASE_CFLAGS) $(GST_CFLAGS)
+libgstapp_la_LIBADD = $(top_builddir)/gst-libs/gst/app/libgstapp-@GST_API_VERSION@.la $(GST_BASE_LIBS)
 libgstapp_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS)
 libgstapp_la_LIBTOOLFLAGS = $(GST_PLUGIN_LIBTOOLFLAGS)
 all: all-am
@@ -538,7 +551,6 @@
 	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu gst/app/Makefile'; \
 	$(am__cd) $(top_srcdir) && \
 	  $(AUTOMAKE) --gnu gst/app/Makefile
-.PRECIOUS: Makefile
 Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
 	@case '$?' in \
 	  *config.status*) \
@@ -847,20 +859,8 @@
 	pdf pdf-am ps ps-am tags tags-am uninstall uninstall-am \
 	uninstall-pluginLTLIBRARIES
 
+.PRECIOUS: Makefile
 
-Android.mk: Makefile.am $(BUILT_SOURCES)
-	androgenizer \
-	-:PROJECT libgstapp -:SHARED libgstapp \
-	 -:TAGS eng debug \
-         -:REL_TOP $(top_srcdir) -:ABS_TOP $(abs_top_srcdir) \
-	 -:SOURCES $(libgstapp_la_SOURCES) \
-	 -:CFLAGS $(DEFS) $(DEFAULT_INCLUDES) $(libgstapp_la_CFLAGS) \
-	 -:LDFLAGS $(libgstapp_la_LDFLAGS) \
-	           $(libgstapp_la_LIBADD) \
-	           -ldl \
-	 -:PASSTHROUGH LOCAL_ARM_MODE:=arm \
-		       LOCAL_MODULE_PATH:='$$(TARGET_OUT)/lib/gstreamer-0.10' \
-	> $@
 
 # 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/audioconvert/Makefile.am b/gst/audioconvert/Makefile.am
index 66846fc..1e2672b 100644
--- a/gst/audioconvert/Makefile.am
+++ b/gst/audioconvert/Makefile.am
@@ -25,18 +25,3 @@
 	gstaudioquantize.h \
 	gstfastrandom.h \
 	plugin.h
-
-Android.mk: Makefile.am $(BUILT_SOURCES)
-	androgenizer \
-	-:PROJECT libgstaudioconvert -:SHARED libgstaudioconvert \
-	 -:TAGS eng debug \
-         -:REL_TOP $(top_srcdir) -:ABS_TOP $(abs_top_srcdir) \
-	 -:SOURCES $(libgstaudioconvert_la_SOURCES) \
-	 	   $(nodist_libgstaudioconvert_la_SOURCES) \
-	 -:CFLAGS $(DEFS) $(DEFAULT_INCLUDES) $(libgstaudioconvert_la_CFLAGS) \
-	 -:LDFLAGS $(libgstaudioconvert_la_LDFLAGS) \
-	           $(libgstaudioconvert_la_LIBADD) \
-	           -ldl \
-	 -:PASSTHROUGH LOCAL_ARM_MODE:=arm \
-		       LOCAL_MODULE_PATH:='$$(TARGET_OUT)/lib/gstreamer-0.10' \
-	> $@
diff --git a/gst/audioconvert/Makefile.in b/gst/audioconvert/Makefile.in
index 1f23811..518d4e8 100644
--- a/gst/audioconvert/Makefile.in
+++ b/gst/audioconvert/Makefile.in
@@ -1,7 +1,7 @@
-# Makefile.in generated by automake 1.14.1 from Makefile.am.
+# Makefile.in generated by automake 1.15 from Makefile.am.
 # @configure_input@
 
-# Copyright (C) 1994-2013 Free Software Foundation, Inc.
+# 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,
@@ -38,7 +38,17 @@
 
 
 VPATH = @srcdir@
-am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)'
+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 \
       ?) ;; \
@@ -102,8 +112,6 @@
 build_triplet = @build@
 host_triplet = @host@
 target_triplet = @target@
-DIST_COMMON = $(top_srcdir)/common/orc.mak $(srcdir)/Makefile.in \
-	$(srcdir)/Makefile.am $(top_srcdir)/depcomp $(noinst_HEADERS)
 subdir = gst/audioconvert
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
 am__aclocal_m4_deps = $(top_srcdir)/common/m4/as-ac-expand.m4 \
@@ -125,7 +133,6 @@
 	$(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-x11.m4 \
 	$(top_srcdir)/common/m4/gst.m4 \
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
@@ -142,6 +149,8 @@
 	$(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 =
@@ -259,6 +268,8 @@
   done | $(am__uniquify_input)`
 ETAGS = etags
 CTAGS = ctags
+am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/common/orc.mak \
+	$(top_srcdir)/depcomp
 DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
 ACLOCAL = @ACLOCAL@
 ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@
@@ -319,6 +330,8 @@
 GIO_CFLAGS = @GIO_CFLAGS@
 GIO_LDFLAGS = @GIO_LDFLAGS@
 GIO_LIBS = @GIO_LIBS@
+GIO_UNIX_2_0_CFLAGS = @GIO_UNIX_2_0_CFLAGS@
+GIO_UNIX_2_0_LIBS = @GIO_UNIX_2_0_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
@@ -348,6 +361,8 @@
 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_OPTION_CFLAGS = @GST_OPTION_CFLAGS@
 GST_OPTION_CXXFLAGS = @GST_OPTION_CXXFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
@@ -375,7 +390,6 @@
 GTK_X11_CFLAGS = @GTK_X11_CFLAGS@
 GTK_X11_LIBS = @GTK_X11_LIBS@
 HAVE_CDPARANOIA = @HAVE_CDPARANOIA@
-HAVE_X = @HAVE_X@
 HAVE_XSHM = @HAVE_XSHM@
 HAVE_ZLIB = @HAVE_ZLIB@
 HTML_DIR = @HTML_DIR@
@@ -390,6 +404,7 @@
 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@
@@ -479,13 +494,12 @@
 XGETTEXT = @XGETTEXT@
 XGETTEXT_015 = @XGETTEXT_015@
 XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
-XMKMF = @XMKMF@
+XSHM_CFLAGS = @XSHM_CFLAGS@
 XSHM_LIBS = @XSHM_LIBS@
+XVIDEO_CFLAGS = @XVIDEO_CFLAGS@
 XVIDEO_LIBS = @XVIDEO_LIBS@
 X_CFLAGS = @X_CFLAGS@
-X_EXTRA_LIBS = @X_EXTRA_LIBS@
 X_LIBS = @X_LIBS@
-X_PRE_LIBS = @X_PRE_LIBS@
 ZLIB_CFLAGS = @ZLIB_CFLAGS@
 ZLIB_LIBS = @ZLIB_LIBS@
 abs_builddir = @abs_builddir@
@@ -538,6 +552,7 @@
 psdir = @psdir@
 pyexecdir = @pyexecdir@
 pythondir = @pythondir@
+runstatedir = @runstatedir@
 sbindir = @sbindir@
 sharedstatedir = @sharedstatedir@
 srcdir = @srcdir@
@@ -601,7 +616,6 @@
 	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu gst/audioconvert/Makefile'; \
 	$(am__cd) $(top_srcdir) && \
 	  $(AUTOMAKE) --gnu gst/audioconvert/Makefile
-.PRECIOUS: Makefile
 Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
 	@case '$?' in \
 	  *config.status*) \
@@ -610,7 +624,7 @@
 	    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/orc.mak:
+$(top_srcdir)/common/orc.mak $(am__empty):
 
 $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
 	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
@@ -958,6 +972,8 @@
 	tags tags-am uninstall uninstall-am \
 	uninstall-pluginLTLIBRARIES
 
+.PRECIOUS: Makefile
+
 
 orc-update: tmp-orc.c $(ORC_SOURCE).h
 	$(top_srcdir)/common/gst-indent tmp-orc.c
@@ -995,21 +1011,6 @@
 	cp -p tmp-orc.c $(distdir)/$(ORC_SOURCE)-dist.c
 	cp -p $(ORC_SOURCE).h $(distdir)/$(ORC_SOURCE)-dist.h
 
-Android.mk: Makefile.am $(BUILT_SOURCES)
-	androgenizer \
-	-:PROJECT libgstaudioconvert -:SHARED libgstaudioconvert \
-	 -:TAGS eng debug \
-         -:REL_TOP $(top_srcdir) -:ABS_TOP $(abs_top_srcdir) \
-	 -:SOURCES $(libgstaudioconvert_la_SOURCES) \
-	 	   $(nodist_libgstaudioconvert_la_SOURCES) \
-	 -:CFLAGS $(DEFS) $(DEFAULT_INCLUDES) $(libgstaudioconvert_la_CFLAGS) \
-	 -:LDFLAGS $(libgstaudioconvert_la_LDFLAGS) \
-	           $(libgstaudioconvert_la_LIBADD) \
-	           -ldl \
-	 -:PASSTHROUGH LOCAL_ARM_MODE:=arm \
-		       LOCAL_MODULE_PATH:='$$(TARGET_OUT)/lib/gstreamer-0.10' \
-	> $@
-
 # 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/audioconvert/audioconvert.c b/gst/audioconvert/audioconvert.c
index a5a06b9..f1a30fd 100644
--- a/gst/audioconvert/audioconvert.c
+++ b/gst/audioconvert/audioconvert.c
@@ -469,7 +469,7 @@
 #define audio_convert_pack_double_hq_le MAKE_UNPACK_FUNC_NAME (double_hq_le)
 #define audio_convert_pack_double_hq_be MAKE_UNPACK_FUNC_NAME (double_hq_be)
 
-static AudioConvertUnpack unpack_funcs[] = {
+static const AudioConvertUnpack unpack_funcs[] = {
   (AudioConvertUnpack) MAKE_UNPACK_FUNC_NAME (u8),
   (AudioConvertUnpack) MAKE_UNPACK_FUNC_NAME (s8),
   (AudioConvertUnpack) MAKE_UNPACK_FUNC_NAME (u8),
@@ -512,7 +512,7 @@
   (AudioConvertUnpack) MAKE_UNPACK_FUNC_NAME (s32_be_float),
 };
 
-static AudioConvertPack pack_funcs[] = {
+static const AudioConvertPack pack_funcs[] = {
   (AudioConvertPack) MAKE_PACK_FUNC_NAME (u8),
   (AudioConvertPack) MAKE_PACK_FUNC_NAME (s8),
   (AudioConvertPack) MAKE_PACK_FUNC_NAME (u8),
diff --git a/gst/audioconvert/audioconvert.h b/gst/audioconvert/audioconvert.h
index a086cbc..56080cc 100644
--- a/gst/audioconvert/audioconvert.h
+++ b/gst/audioconvert/audioconvert.h
@@ -107,6 +107,11 @@
   /* channel conversion matrix, m[in_channels][out_channels].
    * If identity matrix, passthrough applies. */
   gfloat **matrix;
+
+  /* channel conversion matrix with int values, m[in_channels][out_channels].
+   * this is matrix * (2^10) as integers */
+  gint **matrix_int;
+
   /* temp storage for channelmix */
   gpointer tmp;
 
diff --git a/gst/audioconvert/gstaudioconvert.c b/gst/audioconvert/gstaudioconvert.c
index 21510fa..634fd46 100644
--- a/gst/audioconvert/gstaudioconvert.c
+++ b/gst/audioconvert/gstaudioconvert.c
@@ -26,18 +26,21 @@
  *
  * Audioconvert converts raw audio buffers between various possible formats.
  * It supports integer to float conversion, width/depth conversion,
- * signedness and endianness conversion and channel transformations.
+ * signedness and endianness conversion and channel transformations
+ * (ie. upmixing and downmixing), as well as dithering and noise-shaping.
  *
  * <refsect2>
  * <title>Example launch line</title>
  * |[
- * gst-launch -v -m audiotestsrc ! audioconvert ! audio/x-raw,format=S8,channels=2 ! level ! fakesink silent=TRUE
+ * gst-launch-1.0 -v -m audiotestsrc ! audioconvert ! audio/x-raw,format=S8,channels=2 ! level ! fakesink silent=TRUE
  * ]| This pipeline converts audio to 8-bit.  The level element shows that
  * the output levels still match the one for a sine wave.
  * |[
- * gst-launch -v -m audiotestsrc ! audioconvert ! vorbisenc ! fakesink silent=TRUE
+ * gst-launch-1.0 -v -m uridecodebin uri=file:///path/to/audio.flac ! audioconvert ! vorbisenc ! oggmux ! filesink location=audio.ogg
  * ]| The vorbis encoder takes float audio data instead of the integer data
- * generated by audiotestsrc.
+ * output by most other audio elements. This pipeline decodes a FLAC audio file
+ * (or any other audio file for which decoders are installed) and re-encodes
+ * it into an Ogg/Vorbis audio file.
  * </refsect2>
  */
 
@@ -83,6 +86,8 @@
     GstCaps * incaps, GstCaps * outcaps);
 static GstFlowReturn gst_audio_convert_transform (GstBaseTransform * base,
     GstBuffer * inbuf, GstBuffer * outbuf);
+static gboolean gst_audio_convert_transform_meta (GstBaseTransform * trans,
+    GstBuffer * outbuf, GstMeta * meta, GstBuffer * inbuf);
 static void gst_audio_convert_set_property (GObject * object, guint prop_id,
     const GValue * value, GParamSpec * pspec);
 static void gst_audio_convert_get_property (GObject * object, guint prop_id,
@@ -97,9 +102,9 @@
 
 enum
 {
-  ARG_0,
-  ARG_DITHERING,
-  ARG_NOISE_SHAPING,
+  PROP_0,
+  PROP_DITHERING,
+  PROP_NOISE_SHAPING,
 };
 
 #define DEBUG_INIT \
@@ -183,13 +188,13 @@
   gobject_class->set_property = gst_audio_convert_set_property;
   gobject_class->get_property = gst_audio_convert_get_property;
 
-  g_object_class_install_property (gobject_class, ARG_DITHERING,
+  g_object_class_install_property (gobject_class, PROP_DITHERING,
       g_param_spec_enum ("dithering", "Dithering",
           "Selects between different dithering methods.",
           GST_TYPE_AUDIO_CONVERT_DITHERING, DITHER_TPDF,
           G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
 
-  g_object_class_install_property (gobject_class, ARG_NOISE_SHAPING,
+  g_object_class_install_property (gobject_class, PROP_NOISE_SHAPING,
       g_param_spec_enum ("noise-shaping", "Noise shaping",
           "Selects between different noise shaping methods.",
           GST_TYPE_AUDIO_CONVERT_NOISE_SHAPING, NOISE_SHAPING_NONE,
@@ -213,6 +218,8 @@
       GST_DEBUG_FUNCPTR (gst_audio_convert_set_caps);
   basetransform_class->transform =
       GST_DEBUG_FUNCPTR (gst_audio_convert_transform);
+  basetransform_class->transform_meta =
+      GST_DEBUG_FUNCPTR (gst_audio_convert_transform_meta);
 
   basetransform_class->passthrough_on_same_caps = TRUE;
 }
@@ -860,6 +867,23 @@
   }
 }
 
+static gboolean
+gst_audio_convert_transform_meta (GstBaseTransform * trans, GstBuffer * outbuf,
+    GstMeta * meta, GstBuffer * inbuf)
+{
+  const GstMetaInfo *info = meta->info;
+  const gchar *const *tags;
+
+  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))))
+    return TRUE;
+
+  return FALSE;
+}
+
 static void
 gst_audio_convert_set_property (GObject * object, guint prop_id,
     const GValue * value, GParamSpec * pspec)
@@ -867,10 +891,10 @@
   GstAudioConvert *this = GST_AUDIO_CONVERT (object);
 
   switch (prop_id) {
-    case ARG_DITHERING:
+    case PROP_DITHERING:
       this->dither = g_value_get_enum (value);
       break;
-    case ARG_NOISE_SHAPING:
+    case PROP_NOISE_SHAPING:
       this->ns = g_value_get_enum (value);
       break;
     default:
@@ -886,10 +910,10 @@
   GstAudioConvert *this = GST_AUDIO_CONVERT (object);
 
   switch (prop_id) {
-    case ARG_DITHERING:
+    case PROP_DITHERING:
       g_value_set_enum (value, this->dither);
       break;
-    case ARG_NOISE_SHAPING:
+    case PROP_NOISE_SHAPING:
       g_value_set_enum (value, this->ns);
       break;
     default:
diff --git a/gst/audioconvert/gstaudioquantize.c b/gst/audioconvert/gstaudioquantize.c
index 51973eb..91a8c12 100644
--- a/gst/audioconvert/gstaudioquantize.c
+++ b/gst/audioconvert/gstaudioquantize.c
@@ -136,7 +136,7 @@
 
 /* Dithering definitions
  * See http://en.wikipedia.org/wiki/Dithering or
- * http://www.cadenzarecording.com/Dither.html for explainations.
+ * http://www.users.qwest.net/~volt42/cadenzarecording/DitherExplained.pdf for explainations.
  *
  * We already add the rounding offset to the dither noise here
  * to have only one overflow check instead of two. */
@@ -145,9 +145,14 @@
   gint32 rand;                                                          \
   gint32 dither = (1<<(scale));
 
+/* Assuming dither == 2^n,
+ * returns one of 2^(n+1) possible random values:
+ * -dither <= retval < dither */
+#define RANDOM_INT_DITHER(dither)                                       \
+  (- dither + (gst_fast_random_int32 () & ((dither << 1) - 1)))
+
 #define ADD_DITHER_RPDF_I()                                             \
-        rand = gst_fast_random_int32_range (bias - dither,              \
-	    bias + dither);                                             \
+        rand = bias + RANDOM_INT_DITHER(dither);                        \
         if (rand > 0 && tmp > 0 && G_MAXINT32 - tmp <= rand)            \
                 tmp = G_MAXINT32;                                       \
         else if (rand < 0 && tmp < 0 && G_MININT32 - tmp >= rand)       \
@@ -163,14 +168,11 @@
 
 #define INIT_DITHER_TPDF_I()                                            \
   gint32 rand;                                                          \
-  gint32 dither = (1<<(scale - 1));                                     \
-  bias = bias >> 1;
+  gint32 dither = (1<<(scale - 1));
 
 #define ADD_DITHER_TPDF_I()                                             \
-        rand = gst_fast_random_int32_range (bias - dither,              \
-                   bias + dither - 1)                                   \
-               + gst_fast_random_int32_range (bias - dither,            \
-                   bias + dither - 1);                                  \
+        rand = bias + RANDOM_INT_DITHER(dither)                         \
+                    + RANDOM_INT_DITHER(dither);                        \
         if (rand > 0 && tmp > 0 && G_MAXINT32 - tmp <= rand)            \
                 tmp = G_MAXINT32;                                       \
         else if (rand < 0 && tmp < 0 && G_MININT32 - tmp >= rand)       \
@@ -188,13 +190,11 @@
 #define INIT_DITHER_TPDF_HF_I()                                         \
   gint32 rand;                                                          \
   gint32 dither = (1<<(scale-1));                                       \
-  gint32 *last_random = (gint32 *) ctx->last_random, tmp_rand;          \
-  bias = bias >> 1;
+  gint32 *last_random = (gint32 *) ctx->last_random, tmp_rand;
 
 #define ADD_DITHER_TPDF_HF_I()                                          \
-        tmp_rand = gst_fast_random_int32_range (bias - dither,          \
-                       bias + dither);                                  \
-        rand = tmp_rand - last_random[chan_pos];                        \
+        tmp_rand = RANDOM_INT_DITHER(dither);                           \
+        rand = bias + tmp_rand - last_random[chan_pos];                 \
         last_random[chan_pos] = tmp_rand;                               \
         if (rand > 0 && tmp > 0 && G_MAXINT32 - tmp <= rand)            \
                 tmp = G_MAXINT32;                                       \
@@ -306,20 +306,12 @@
         errors[chan_pos] = (*dst)/factor - orig;
 
 
-MAKE_QUANTIZE_FUNC_I (signed_none_none, NONE_FUNC, NONE_FUNC, ROUND);
-MAKE_QUANTIZE_FUNC_I (signed_rpdf_none, INIT_DITHER_RPDF_I, ADD_DITHER_RPDF_I,
+MAKE_QUANTIZE_FUNC_I (int_none_none, NONE_FUNC, NONE_FUNC, ROUND);
+MAKE_QUANTIZE_FUNC_I (int_rpdf_none, INIT_DITHER_RPDF_I, ADD_DITHER_RPDF_I,
     NONE_FUNC);
-MAKE_QUANTIZE_FUNC_I (signed_tpdf_none, INIT_DITHER_TPDF_I, ADD_DITHER_TPDF_I,
+MAKE_QUANTIZE_FUNC_I (int_tpdf_none, INIT_DITHER_TPDF_I, ADD_DITHER_TPDF_I,
     NONE_FUNC);
-MAKE_QUANTIZE_FUNC_I (signed_tpdf_hf_none, INIT_DITHER_TPDF_HF_I,
-    ADD_DITHER_TPDF_HF_I, NONE_FUNC);
-
-MAKE_QUANTIZE_FUNC_I (unsigned_none_none, NONE_FUNC, NONE_FUNC, ROUND);
-MAKE_QUANTIZE_FUNC_I (unsigned_rpdf_none, INIT_DITHER_RPDF_I, ADD_DITHER_RPDF_I,
-    NONE_FUNC);
-MAKE_QUANTIZE_FUNC_I (unsigned_tpdf_none, INIT_DITHER_TPDF_I, ADD_DITHER_TPDF_I,
-    NONE_FUNC);
-MAKE_QUANTIZE_FUNC_I (unsigned_tpdf_hf_none, INIT_DITHER_TPDF_HF_I,
+MAKE_QUANTIZE_FUNC_I (int_tpdf_hf_none, INIT_DITHER_TPDF_HF_I,
     ADD_DITHER_TPDF_HF_I, NONE_FUNC);
 
 MAKE_QUANTIZE_FUNC_F (float_none_error_feedback, NONE_FUNC,
@@ -362,15 +354,11 @@
 MAKE_QUANTIZE_FUNC_F (float_tpdf_hf_high, INIT_DITHER_TPDF_HF_F, INIT_NS_HIGH,
     ADD_NS_HIGH, ADD_DITHER_TPDF_HF_F, UPDATE_ERROR_HIGH);
 
-static AudioConvertQuantize quantize_funcs[] = {
-  (AudioConvertQuantize) MAKE_QUANTIZE_FUNC_NAME (signed_none_none),
-  (AudioConvertQuantize) MAKE_QUANTIZE_FUNC_NAME (signed_rpdf_none),
-  (AudioConvertQuantize) MAKE_QUANTIZE_FUNC_NAME (signed_tpdf_none),
-  (AudioConvertQuantize) MAKE_QUANTIZE_FUNC_NAME (signed_tpdf_hf_none),
-  (AudioConvertQuantize) MAKE_QUANTIZE_FUNC_NAME (unsigned_none_none),
-  (AudioConvertQuantize) MAKE_QUANTIZE_FUNC_NAME (unsigned_rpdf_none),
-  (AudioConvertQuantize) MAKE_QUANTIZE_FUNC_NAME (unsigned_tpdf_none),
-  (AudioConvertQuantize) MAKE_QUANTIZE_FUNC_NAME (unsigned_tpdf_hf_none),
+static const AudioConvertQuantize quantize_funcs[] = {
+  (AudioConvertQuantize) MAKE_QUANTIZE_FUNC_NAME (int_none_none),
+  (AudioConvertQuantize) MAKE_QUANTIZE_FUNC_NAME (int_rpdf_none),
+  (AudioConvertQuantize) MAKE_QUANTIZE_FUNC_NAME (int_tpdf_none),
+  (AudioConvertQuantize) MAKE_QUANTIZE_FUNC_NAME (int_tpdf_hf_none),
   (AudioConvertQuantize) MAKE_QUANTIZE_FUNC_NAME (float_none_error_feedback),
   (AudioConvertQuantize) MAKE_QUANTIZE_FUNC_NAME (float_none_simple),
   (AudioConvertQuantize) MAKE_QUANTIZE_FUNC_NAME (float_none_medium),
@@ -476,9 +464,8 @@
 
   if (ctx->ns == NOISE_SHAPING_NONE) {
     index += ctx->dither;
-    index += GST_AUDIO_FORMAT_INFO_IS_SIGNED (ctx->out.finfo) ? 0 : 4;
   } else {
-    index += 8 + (4 * ctx->dither);
+    index += 4 + (4 * ctx->dither);
     index += ctx->ns - 1;
   }
 
diff --git a/gst/audioconvert/gstchannelmix.c b/gst/audioconvert/gstchannelmix.c
index f5f5e0d..f144c20 100644
--- a/gst/audioconvert/gstchannelmix.c
+++ b/gst/audioconvert/gstchannelmix.c
@@ -29,6 +29,8 @@
 
 #include "gstchannelmix.h"
 
+#define INT_MATRIX_FACTOR_EXPONENT 10
+
 /*
  * Channel matrix functions.
  */
@@ -48,6 +50,13 @@
   g_free (this->matrix);
 
   this->matrix = NULL;
+
+  for (i = 0; i < this->in.channels; i++)
+    g_free (this->matrix_int[i]);
+  g_free (this->matrix_int);
+
+  this->matrix_int = NULL;
+
   g_free (this->tmp);
   this->tmp = NULL;
 }
@@ -590,6 +599,26 @@
   }
 }
 
+/* only call this after this->matrix is fully set up and normalized */
+static void
+gst_channel_mix_setup_matrix_int (AudioConvertCtx * this)
+{
+  gint i, j;
+  gfloat tmp;
+  gfloat factor = (1 << INT_MATRIX_FACTOR_EXPONENT);
+
+  this->matrix_int = g_new0 (gint *, this->in.channels);
+
+  for (i = 0; i < this->in.channels; i++) {
+    this->matrix_int[i] = g_new (gint, this->out.channels);
+
+    for (j = 0; j < this->out.channels; j++) {
+      tmp = this->matrix[i][j] * factor;
+      this->matrix_int[i][j] = (gint)tmp;
+    }
+  }
+}
+
 /* only call after this->out and this->in are filled in */
 void
 gst_channel_mix_setup_matrix (AudioConvertCtx * this)
@@ -618,6 +647,8 @@
   /* setup the matrix' internal values */
   gst_channel_mix_fill_matrix (this);
 
+  gst_channel_mix_setup_matrix_int(this);
+
 #ifndef GST_DISABLE_GST_DEBUG
   /* debug */
   {
@@ -694,9 +725,12 @@
       /* convert */
       res = 0;
       for (in = 0; in < inchannels; in++) {
-        res += in_data[n * inchannels + in] * this->matrix[in][out];
+        res += in_data[n * inchannels + in] * (gint64)this->matrix_int[in][out];
       }
 
+      /* remove factor from int matrix */
+      res = res >> INT_MATRIX_FACTOR_EXPONENT;
+
       /* clip (shouldn't we use doubles instead as intermediate format?) */
       if (res < G_MININT32)
         res = G_MININT32;
diff --git a/gst/audioconvert/gstfastrandom.h b/gst/audioconvert/gstfastrandom.h
index 07f56f1..deaa129 100644
--- a/gst/audioconvert/gstfastrandom.h
+++ b/gst/audioconvert/gstfastrandom.h
@@ -38,32 +38,12 @@
   return (state = state * 1103515245 + 12345);
 }
 
-static inline guint32
-gst_fast_random_uint32_range (gint32 start, gint32 end)
-{
-  guint64 tmp = gst_fast_random_uint32 ();
-
-  tmp = (tmp * (end - start)) / G_MAXUINT32 + start;
-
-  return (guint32) tmp;
-}
-
 static inline gint32
 gst_fast_random_int32 (void)
 {
   return (gint32) gst_fast_random_uint32 ();
 }
 
-static inline gint32
-gst_fast_random_int32_range (gint32 start, gint32 end)
-{
-  gint64 tmp = gst_fast_random_uint32 ();
-
-  tmp = (tmp * (end - start)) / G_MAXUINT32 + start;
-
-  return (gint32) tmp;
-}
-
 static inline gdouble
 gst_fast_random_double (void)
 {
diff --git a/gst/audiorate/Makefile.am b/gst/audiorate/Makefile.am
index 9c21d07..2b0697c 100644
--- a/gst/audiorate/Makefile.am
+++ b/gst/audiorate/Makefile.am
@@ -9,17 +9,3 @@
         $(top_builddir)/gst-libs/gst/audio/libgstaudio-@GST_API_VERSION@.la
 
 libgstaudiorate_la_LIBTOOLFLAGS = $(GST_PLUGIN_LIBTOOLFLAGS)
-
-Android.mk: Makefile.am $(BUILT_SOURCES)
-	androgenizer \
-	-:PROJECT libgstaudiorate -:SHARED libgstaudiorate \
-	 -:TAGS eng debug \
-         -:REL_TOP $(top_srcdir) -:ABS_TOP $(abs_top_srcdir) \
-	 -:SOURCES $(libgstaudiorate_la_SOURCES) \
-	 -:CFLAGS $(DEFS) $(DEFAULT_INCLUDES) $(libgstaudiorate_la_CFLAGS) \
-	 -:LDFLAGS $(libgstaudiorate_la_LDFLAGS) \
-	           $(libgstaudiorate_la_LIBADD) \
-	           -ldl \
-	 -:PASSTHROUGH LOCAL_ARM_MODE:=arm \
-		       LOCAL_MODULE_PATH:='$$(TARGET_OUT)/lib/gstreamer-0.10' \
-	> $@
diff --git a/gst/audiorate/Makefile.in b/gst/audiorate/Makefile.in
index 2c24c61..8911132 100644
--- a/gst/audiorate/Makefile.in
+++ b/gst/audiorate/Makefile.in
@@ -1,7 +1,7 @@
-# Makefile.in generated by automake 1.14.1 from Makefile.am.
+# Makefile.in generated by automake 1.15 from Makefile.am.
 # @configure_input@
 
-# Copyright (C) 1994-2013 Free Software Foundation, Inc.
+# 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,
@@ -16,7 +16,17 @@
 
 
 VPATH = @srcdir@
-am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)'
+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 \
       ?) ;; \
@@ -81,8 +91,6 @@
 host_triplet = @host@
 target_triplet = @target@
 subdir = gst/audiorate
-DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \
-	$(top_srcdir)/depcomp $(noinst_HEADERS)
 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 \
@@ -103,7 +111,6 @@
 	$(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-x11.m4 \
 	$(top_srcdir)/common/m4/gst.m4 \
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
@@ -120,6 +127,8 @@
 	$(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 =
@@ -227,6 +236,7 @@
   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@
@@ -287,6 +297,8 @@
 GIO_CFLAGS = @GIO_CFLAGS@
 GIO_LDFLAGS = @GIO_LDFLAGS@
 GIO_LIBS = @GIO_LIBS@
+GIO_UNIX_2_0_CFLAGS = @GIO_UNIX_2_0_CFLAGS@
+GIO_UNIX_2_0_LIBS = @GIO_UNIX_2_0_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
@@ -316,6 +328,8 @@
 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_OPTION_CFLAGS = @GST_OPTION_CFLAGS@
 GST_OPTION_CXXFLAGS = @GST_OPTION_CXXFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
@@ -343,7 +357,6 @@
 GTK_X11_CFLAGS = @GTK_X11_CFLAGS@
 GTK_X11_LIBS = @GTK_X11_LIBS@
 HAVE_CDPARANOIA = @HAVE_CDPARANOIA@
-HAVE_X = @HAVE_X@
 HAVE_XSHM = @HAVE_XSHM@
 HAVE_ZLIB = @HAVE_ZLIB@
 HTML_DIR = @HTML_DIR@
@@ -358,6 +371,7 @@
 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@
@@ -447,13 +461,12 @@
 XGETTEXT = @XGETTEXT@
 XGETTEXT_015 = @XGETTEXT_015@
 XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
-XMKMF = @XMKMF@
+XSHM_CFLAGS = @XSHM_CFLAGS@
 XSHM_LIBS = @XSHM_LIBS@
+XVIDEO_CFLAGS = @XVIDEO_CFLAGS@
 XVIDEO_LIBS = @XVIDEO_LIBS@
 X_CFLAGS = @X_CFLAGS@
-X_EXTRA_LIBS = @X_EXTRA_LIBS@
 X_LIBS = @X_LIBS@
-X_PRE_LIBS = @X_PRE_LIBS@
 ZLIB_CFLAGS = @ZLIB_CFLAGS@
 ZLIB_LIBS = @ZLIB_LIBS@
 abs_builddir = @abs_builddir@
@@ -506,6 +519,7 @@
 psdir = @psdir@
 pyexecdir = @pyexecdir@
 pythondir = @pythondir@
+runstatedir = @runstatedir@
 sbindir = @sbindir@
 sharedstatedir = @sharedstatedir@
 srcdir = @srcdir@
@@ -543,7 +557,6 @@
 	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu gst/audiorate/Makefile'; \
 	$(am__cd) $(top_srcdir) && \
 	  $(AUTOMAKE) --gnu gst/audiorate/Makefile
-.PRECIOUS: Makefile
 Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
 	@case '$?' in \
 	  *config.status*) \
@@ -852,20 +865,8 @@
 	pdf pdf-am ps ps-am tags tags-am uninstall uninstall-am \
 	uninstall-pluginLTLIBRARIES
 
+.PRECIOUS: Makefile
 
-Android.mk: Makefile.am $(BUILT_SOURCES)
-	androgenizer \
-	-:PROJECT libgstaudiorate -:SHARED libgstaudiorate \
-	 -:TAGS eng debug \
-         -:REL_TOP $(top_srcdir) -:ABS_TOP $(abs_top_srcdir) \
-	 -:SOURCES $(libgstaudiorate_la_SOURCES) \
-	 -:CFLAGS $(DEFS) $(DEFAULT_INCLUDES) $(libgstaudiorate_la_CFLAGS) \
-	 -:LDFLAGS $(libgstaudiorate_la_LDFLAGS) \
-	           $(libgstaudiorate_la_LIBADD) \
-	           -ldl \
-	 -:PASSTHROUGH LOCAL_ARM_MODE:=arm \
-		       LOCAL_MODULE_PATH:='$$(TARGET_OUT)/lib/gstreamer-0.10' \
-	> $@
 
 # 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/audiorate/gstaudiorate.c b/gst/audiorate/gstaudiorate.c
index 9ac5beb..19661d8 100644
--- a/gst/audiorate/gstaudiorate.c
+++ b/gst/audiorate/gstaudiorate.c
@@ -51,9 +51,15 @@
  * <refsect2>
  * <title>Example pipelines</title>
  * |[
- * gst-launch -v alsasrc ! audiorate ! wavenc ! filesink location=alsa.wav
- * ]| Capture audio from an ALSA device, and turn it into a perfect stream
+ * gst-launch-1.0 -v autoaudiosrc ! audiorate ! audioconvert ! wavenc ! filesink location=alsa.wav
+ * ]| Capture audio from the sound card and turn it into a perfect stream
  * for saving in a raw audio file.
+ * |[
+ * gst-launch-1.0 -v uridecodebin uri=file:///path/to/audio.file ! audiorate ! audioconvert ! wavenc ! filesink location=alsa.wav
+ * ]| Decodes an audio file and transforms it into a perfect stream for saving
+ * in a raw audio WAV file. Without the audio rate, the timing might not be
+ * preserved correctly in the WAV file in case the decoded stream is jittery
+ * or there are samples missing.
  * </refsect2>
  */
 
@@ -82,14 +88,14 @@
 
 enum
 {
-  ARG_0,
-  ARG_IN,
-  ARG_OUT,
-  ARG_ADD,
-  ARG_DROP,
-  ARG_SILENT,
-  ARG_TOLERANCE,
-  ARG_SKIP_TO_FIRST
+  PROP_0,
+  PROP_IN,
+  PROP_OUT,
+  PROP_ADD,
+  PROP_DROP,
+  PROP_SILENT,
+  PROP_TOLERANCE,
+  PROP_SKIP_TO_FIRST
 };
 
 static GstStaticPadTemplate gst_audio_rate_src_template =
@@ -140,20 +146,20 @@
   object_class->set_property = gst_audio_rate_set_property;
   object_class->get_property = gst_audio_rate_get_property;
 
-  g_object_class_install_property (object_class, ARG_IN,
+  g_object_class_install_property (object_class, PROP_IN,
       g_param_spec_uint64 ("in", "In",
           "Number of input samples", 0, G_MAXUINT64, 0,
           G_PARAM_READABLE | G_PARAM_STATIC_STRINGS));
-  g_object_class_install_property (object_class, ARG_OUT,
+  g_object_class_install_property (object_class, PROP_OUT,
       g_param_spec_uint64 ("out", "Out", "Number of output samples", 0,
           G_MAXUINT64, 0, G_PARAM_READABLE | G_PARAM_STATIC_STRINGS));
   pspec_add = g_param_spec_uint64 ("add", "Add", "Number of added samples",
       0, G_MAXUINT64, 0, G_PARAM_READABLE | G_PARAM_STATIC_STRINGS);
-  g_object_class_install_property (object_class, ARG_ADD, pspec_add);
+  g_object_class_install_property (object_class, PROP_ADD, pspec_add);
   pspec_drop = g_param_spec_uint64 ("drop", "Drop", "Number of dropped samples",
       0, G_MAXUINT64, 0, G_PARAM_READABLE | G_PARAM_STATIC_STRINGS);
-  g_object_class_install_property (object_class, ARG_DROP, pspec_drop);
-  g_object_class_install_property (object_class, ARG_SILENT,
+  g_object_class_install_property (object_class, PROP_DROP, pspec_drop);
+  g_object_class_install_property (object_class, PROP_SILENT,
       g_param_spec_boolean ("silent", "silent",
           "Don't emit notify for dropped and duplicated frames", DEFAULT_SILENT,
           G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
@@ -163,7 +169,7 @@
    * The difference between incoming timestamp and next timestamp must exceed
    * the given value for audiorate to add or drop samples.
    */
-  g_object_class_install_property (object_class, ARG_TOLERANCE,
+  g_object_class_install_property (object_class, PROP_TOLERANCE,
       g_param_spec_uint64 ("tolerance", "tolerance",
           "Only act if timestamp jitter/imperfection exceeds indicated tolerance (ns)",
           0, G_MAXUINT64, DEFAULT_TOLERANCE,
@@ -174,7 +180,7 @@
    *
    * Don't produce buffers before the first one we receive.
    */
-  g_object_class_install_property (object_class, ARG_SKIP_TO_FIRST,
+  g_object_class_install_property (object_class, PROP_SKIP_TO_FIRST,
       g_param_spec_boolean ("skip-to-first", "Skip to first buffer",
           "Don't produce buffers before the first one we receive",
           DEFAULT_SKIP_TO_FIRST, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
@@ -337,10 +343,19 @@
       res = gst_pad_push_event (audiorate->srcpad, event);
       break;
     case GST_EVENT_GAP:
-      /* no gaps after audiorate, ignore the event */
+    {
+      /* Fill until end of gap */
+      GstClockTime timestamp, duration;
+      gst_event_parse_gap (event, &timestamp, &duration);
       gst_event_unref (event);
+      if (GST_CLOCK_TIME_IS_VALID (timestamp)) {
+        if (GST_CLOCK_TIME_IS_VALID (duration))
+          timestamp += duration;
+        gst_audio_rate_fill_to_time (audiorate, timestamp);
+      }
       res = TRUE;
       break;
+    }
     default:
       res = gst_pad_event_default (pad, parent, event);
       break;
@@ -677,13 +692,13 @@
   GstAudioRate *audiorate = GST_AUDIO_RATE (object);
 
   switch (prop_id) {
-    case ARG_SILENT:
+    case PROP_SILENT:
       audiorate->silent = g_value_get_boolean (value);
       break;
-    case ARG_TOLERANCE:
+    case PROP_TOLERANCE:
       audiorate->tolerance = g_value_get_uint64 (value);
       break;
-    case ARG_SKIP_TO_FIRST:
+    case PROP_SKIP_TO_FIRST:
       audiorate->skip_to_first = g_value_get_boolean (value);
       break;
     default:
@@ -699,25 +714,25 @@
   GstAudioRate *audiorate = GST_AUDIO_RATE (object);
 
   switch (prop_id) {
-    case ARG_IN:
+    case PROP_IN:
       g_value_set_uint64 (value, audiorate->in);
       break;
-    case ARG_OUT:
+    case PROP_OUT:
       g_value_set_uint64 (value, audiorate->out);
       break;
-    case ARG_ADD:
+    case PROP_ADD:
       g_value_set_uint64 (value, audiorate->add);
       break;
-    case ARG_DROP:
+    case PROP_DROP:
       g_value_set_uint64 (value, audiorate->drop);
       break;
-    case ARG_SILENT:
+    case PROP_SILENT:
       g_value_set_boolean (value, audiorate->silent);
       break;
-    case ARG_TOLERANCE:
+    case PROP_TOLERANCE:
       g_value_set_uint64 (value, audiorate->tolerance);
       break;
-    case ARG_SKIP_TO_FIRST:
+    case PROP_SKIP_TO_FIRST:
       g_value_set_boolean (value, audiorate->skip_to_first);
       break;
     default:
diff --git a/gst/audioresample/Makefile.am b/gst/audioresample/Makefile.am
index 607115d..728700d 100644
--- a/gst/audioresample/Makefile.am
+++ b/gst/audioresample/Makefile.am
@@ -42,17 +42,3 @@
 	resample_neon.h \
 	speex_resampler.h \
 	speex_resampler_wrapper.h
-
-Android.mk: Makefile.am $(BUILT_SOURCES)
-	androgenizer \
-	-:PROJECT libgstaudioresample -:SHARED libgstaudioresample \
-	 -:TAGS eng debug \
-         -:REL_TOP $(top_srcdir) -:ABS_TOP $(abs_top_srcdir) \
-	 -:SOURCES $(libgstaudioresample_la_SOURCES) \
-	 -:CFLAGS $(DEFS) $(DEFAULT_INCLUDES) $(libgstaudioresample_la_CFLAGS) \
-	 -:LDFLAGS $(libgstaudioresample_la_LDFLAGS) \
-	           $(libgstaudioresample_la_LIBADD) \
-	           -ldl \
-	 -:PASSTHROUGH LOCAL_ARM_MODE:=arm \
-		       LOCAL_MODULE_PATH:='$$(TARGET_OUT)/lib/gstreamer-0.10' \
-	> $@
diff --git a/gst/audioresample/Makefile.in b/gst/audioresample/Makefile.in
index d427a81..926981d 100644
--- a/gst/audioresample/Makefile.in
+++ b/gst/audioresample/Makefile.in
@@ -1,7 +1,7 @@
-# Makefile.in generated by automake 1.14.1 from Makefile.am.
+# Makefile.in generated by automake 1.15 from Makefile.am.
 # @configure_input@
 
-# Copyright (C) 1994-2013 Free Software Foundation, Inc.
+# 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,
@@ -16,7 +16,17 @@
 
 
 VPATH = @srcdir@
-am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)'
+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 \
       ?) ;; \
@@ -81,8 +91,6 @@
 host_triplet = @host@
 target_triplet = @target@
 subdir = gst/audioresample
-DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \
-	$(top_srcdir)/depcomp $(noinst_HEADERS) README
 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 \
@@ -103,7 +111,6 @@
 	$(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-x11.m4 \
 	$(top_srcdir)/common/m4/gst.m4 \
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
@@ -120,6 +127,8 @@
 	$(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 =
@@ -233,6 +242,7 @@
   done | $(am__uniquify_input)`
 ETAGS = etags
 CTAGS = ctags
+am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp README
 DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
 ACLOCAL = @ACLOCAL@
 ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@
@@ -293,6 +303,8 @@
 GIO_CFLAGS = @GIO_CFLAGS@
 GIO_LDFLAGS = @GIO_LDFLAGS@
 GIO_LIBS = @GIO_LIBS@
+GIO_UNIX_2_0_CFLAGS = @GIO_UNIX_2_0_CFLAGS@
+GIO_UNIX_2_0_LIBS = @GIO_UNIX_2_0_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
@@ -322,6 +334,8 @@
 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_OPTION_CFLAGS = @GST_OPTION_CFLAGS@
 GST_OPTION_CXXFLAGS = @GST_OPTION_CXXFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
@@ -349,7 +363,6 @@
 GTK_X11_CFLAGS = @GTK_X11_CFLAGS@
 GTK_X11_LIBS = @GTK_X11_LIBS@
 HAVE_CDPARANOIA = @HAVE_CDPARANOIA@
-HAVE_X = @HAVE_X@
 HAVE_XSHM = @HAVE_XSHM@
 HAVE_ZLIB = @HAVE_ZLIB@
 HTML_DIR = @HTML_DIR@
@@ -364,6 +377,7 @@
 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@
@@ -453,13 +467,12 @@
 XGETTEXT = @XGETTEXT@
 XGETTEXT_015 = @XGETTEXT_015@
 XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
-XMKMF = @XMKMF@
+XSHM_CFLAGS = @XSHM_CFLAGS@
 XSHM_LIBS = @XSHM_LIBS@
+XVIDEO_CFLAGS = @XVIDEO_CFLAGS@
 XVIDEO_LIBS = @XVIDEO_LIBS@
 X_CFLAGS = @X_CFLAGS@
-X_EXTRA_LIBS = @X_EXTRA_LIBS@
 X_LIBS = @X_LIBS@
-X_PRE_LIBS = @X_PRE_LIBS@
 ZLIB_CFLAGS = @ZLIB_CFLAGS@
 ZLIB_LIBS = @ZLIB_LIBS@
 abs_builddir = @abs_builddir@
@@ -512,6 +525,7 @@
 psdir = @psdir@
 pyexecdir = @pyexecdir@
 pythondir = @pythondir@
+runstatedir = @runstatedir@
 sbindir = @sbindir@
 sharedstatedir = @sharedstatedir@
 srcdir = @srcdir@
@@ -580,7 +594,6 @@
 	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu gst/audioresample/Makefile'; \
 	$(am__cd) $(top_srcdir) && \
 	  $(AUTOMAKE) --gnu gst/audioresample/Makefile
-.PRECIOUS: Makefile
 Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
 	@case '$?' in \
 	  *config.status*) \
@@ -913,20 +926,8 @@
 	pdf pdf-am ps ps-am tags tags-am uninstall uninstall-am \
 	uninstall-pluginLTLIBRARIES
 
+.PRECIOUS: Makefile
 
-Android.mk: Makefile.am $(BUILT_SOURCES)
-	androgenizer \
-	-:PROJECT libgstaudioresample -:SHARED libgstaudioresample \
-	 -:TAGS eng debug \
-         -:REL_TOP $(top_srcdir) -:ABS_TOP $(abs_top_srcdir) \
-	 -:SOURCES $(libgstaudioresample_la_SOURCES) \
-	 -:CFLAGS $(DEFS) $(DEFAULT_INCLUDES) $(libgstaudioresample_la_CFLAGS) \
-	 -:LDFLAGS $(libgstaudioresample_la_LDFLAGS) \
-	           $(libgstaudioresample_la_LIBADD) \
-	           -ldl \
-	 -:PASSTHROUGH LOCAL_ARM_MODE:=arm \
-		       LOCAL_MODULE_PATH:='$$(TARGET_OUT)/lib/gstreamer-0.10' \
-	> $@
 
 # 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/audioresample/gstaudioresample.c b/gst/audioresample/gstaudioresample.c
index 94981bc..30825a6 100644
--- a/gst/audioresample/gstaudioresample.c
+++ b/gst/audioresample/gstaudioresample.c
@@ -36,9 +36,10 @@
  * <refsect2>
  * <title>Example launch line</title>
  * |[
- * gst-launch -v filesrc location=sine.ogg ! oggdemux ! vorbisdec ! audioconvert ! audioresample ! audio/x-raw, rate=8000 ! alsasink
- * ]| Decode an Ogg/Vorbis downsample to 8Khz and play sound through alsa.
+ * gst-launch-1.0 -v uridecodebin uri=file:///path/to/audio.ogg ! audioconvert ! audioresample ! audio/x-raw, rate=8000 ! autoaudiosink
+ * ]| Decode an audio file and downsample it to 8Khz and play sound.
  * To create the Ogg/Vorbis file refer to the documentation of vorbisenc.
+ * This assumes there is an audio sink that will accept/handle 8kHz audio.
  * </refsect2>
  */
 
@@ -132,6 +133,8 @@
     GstCaps * incaps, GstCaps * outcaps);
 static GstFlowReturn gst_audio_resample_transform (GstBaseTransform * base,
     GstBuffer * inbuf, GstBuffer * outbuf);
+static gboolean gst_audio_resample_transform_meta (GstBaseTransform * trans,
+    GstBuffer * outbuf, GstMeta * meta, GstBuffer * inbuf);
 static gboolean gst_audio_resample_sink_event (GstBaseTransform * base,
     GstEvent * event);
 static gboolean gst_audio_resample_start (GstBaseTransform * base);
@@ -200,6 +203,8 @@
       GST_DEBUG_FUNCPTR (gst_audio_resample_transform);
   GST_BASE_TRANSFORM_CLASS (klass)->sink_event =
       GST_DEBUG_FUNCPTR (gst_audio_resample_sink_event);
+  GST_BASE_TRANSFORM_CLASS (klass)->transform_meta =
+      GST_DEBUG_FUNCPTR (gst_audio_resample_transform_meta);
 
   GST_BASE_TRANSFORM_CLASS (klass)->passthrough_on_same_caps = TRUE;
 }
@@ -1246,6 +1251,23 @@
 }
 
 static gboolean
+gst_audio_resample_transform_meta (GstBaseTransform * trans, GstBuffer * outbuf,
+    GstMeta * meta, GstBuffer * inbuf)
+{
+  const GstMetaInfo *info = meta->info;
+  const gchar *const *tags;
+
+  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))))
+    return TRUE;
+
+  return FALSE;
+}
+
+static gboolean
 gst_audio_resample_query (GstPad * pad, GstObject * parent, GstQuery * query)
 {
   GstAudioResample *resample = GST_AUDIO_RESAMPLE (parent);
@@ -1388,7 +1410,7 @@
   static GType speex_resampler_sinc_filter_mode_type = 0;
 
   if (!speex_resampler_sinc_filter_mode_type) {
-    static GEnumValue sinc_filter_modes[] = {
+    static const GEnumValue sinc_filter_modes[] = {
       {SPEEX_RESAMPLER_SINC_FILTER_INTERPOLATED, "Use interpolated sinc table",
           "interpolated"},
       {SPEEX_RESAMPLER_SINC_FILTER_FULL, "Use full sinc table", "full"},
diff --git a/gst/audioresample/gstaudioresample.h b/gst/audioresample/gstaudioresample.h
index 0d25072..726236a 100644
--- a/gst/audioresample/gstaudioresample.h
+++ b/gst/audioresample/gstaudioresample.h
@@ -64,9 +64,6 @@
   guint64 num_gap_samples;
   guint64 num_nongap_samples;
 
-  GstAudioInfo in;
-  GstAudioInfo out;
-
   /* properties */
   gint quality;
 
diff --git a/gst/audioresample/resample.c b/gst/audioresample/resample.c
index d067192..c9b1825 100644
--- a/gst/audioresample/resample.c
+++ b/gst/audioresample/resample.c
@@ -224,7 +224,7 @@
   int use_neon:1;
 };
 
-static double kaiser12_table[68] = {
+static const double kaiser12_table[68] = {
   0.99859849, 1.00000000, 0.99859849, 0.99440475, 0.98745105, 0.97779076,
   0.96549770, 0.95066529, 0.93340547, 0.91384741, 0.89213598, 0.86843014,
   0.84290116, 0.81573067, 0.78710866, 0.75723148, 0.72629970, 0.69451601,
@@ -240,7 +240,7 @@
 };
 
 /*
-static double kaiser12_table[36] = {
+static const double kaiser12_table[36] = {
    0.99440475, 1.00000000, 0.99440475, 0.97779076, 0.95066529, 0.91384741,
    0.86843014, 0.81573067, 0.75723148, 0.69451601, 0.62920216, 0.56287762,
    0.49704014, 0.43304576, 0.37206735, 0.31506490, 0.26276832, 0.21567274,
@@ -248,7 +248,7 @@
    0.03111947, 0.02127838, 0.01402878, 0.00886058, 0.00531256, 0.00298291,
    0.00153438, 0.00069463, 0.00025272, 0.0000527734, 0.00000500, 0.00000000};
 */
-static double kaiser10_table[36] = {
+static const double kaiser10_table[36] = {
   0.99537781, 1.00000000, 0.99537781, 0.98162644, 0.95908712, 0.92831446,
   0.89005583, 0.84522401, 0.79486424, 0.74011713, 0.68217934, 0.62226347,
   0.56155915, 0.50119680, 0.44221549, 0.38553619, 0.33194107, 0.28205962,
@@ -257,7 +257,7 @@
   0.00488951, 0.00257636, 0.00115101, 0.00035515, 0.00000000, 0.00000000
 };
 
-static double kaiser8_table[36] = {
+static const double kaiser8_table[36] = {
   0.99635258, 1.00000000, 0.99635258, 0.98548012, 0.96759014, 0.94302200,
   0.91223751, 0.87580811, 0.83439927, 0.78875245, 0.73966538, 0.68797126,
   0.63451750, 0.58014482, 0.52566725, 0.47185369, 0.41941150, 0.36897272,
@@ -266,7 +266,7 @@
   0.01563093, 0.00959968, 0.00527363, 0.00233883, 0.00050000, 0.00000000
 };
 
-static double kaiser6_table[36] = {
+static const double kaiser6_table[36] = {
   0.99733006, 1.00000000, 0.99733006, 0.98935595, 0.97618418, 0.95799003,
   0.93501423, 0.90755855, 0.87598009, 0.84068475, 0.80211977, 0.76076565,
   0.71712752, 0.67172623, 0.62508937, 0.57774224, 0.53019925, 0.48295561,
@@ -277,7 +277,7 @@
 
 struct FuncDef
 {
-  double *table;
+  const double *table;
   int oversample;
 };
 
@@ -1200,6 +1200,8 @@
       out += ochunk * st->out_stride;
       if (in)
         in += ichunk * istride;
+      if (olen == 0 && ichunk == 0)
+        break;
     }
   }
   *in_len -= ilen;
@@ -1280,6 +1282,8 @@
     out += (ochunk + omagic) * ostride_save;
     if (in)
       in += ichunk * istride_save;
+    if (olen == 0 && ichunk == 0)
+      break;
   }
   st->out_stride = ostride_save;
   *in_len -= ilen;
diff --git a/gst/audiotestsrc/Makefile.am b/gst/audiotestsrc/Makefile.am
index 3680d20..027d2b7 100644
--- a/gst/audiotestsrc/Makefile.am
+++ b/gst/audiotestsrc/Makefile.am
@@ -9,17 +9,3 @@
 libgstaudiotestsrc_la_LIBTOOLFLAGS = $(GST_PLUGIN_LIBTOOLFLAGS)
 
 noinst_HEADERS = gstaudiotestsrc.h
-
-Android.mk: Makefile.am $(BUILT_SOURCES)
-	androgenizer \
-	-:PROJECT libgstaudiotestsrc -:SHARED libgstaudiotestsrc \
-	 -:TAGS eng debug \
-         -:REL_TOP $(top_srcdir) -:ABS_TOP $(abs_top_srcdir) \
-	 -:SOURCES $(libgstaudiotestsrc_la_SOURCES) \
-	 -:CFLAGS $(DEFS) $(DEFAULT_INCLUDES) $(libgstaudiotestsrc_la_CFLAGS) \
-	 -:LDFLAGS $(libgstaudiotestsrc_la_LDFLAGS) \
-	           $(libgstaudiotestsrc_la_LIBADD) \
-	           -ldl \
-	 -:PASSTHROUGH LOCAL_ARM_MODE:=arm \
-		       LOCAL_MODULE_PATH:='$$(TARGET_OUT)/lib/gstreamer-0.10' \
-	> $@
diff --git a/gst/audiotestsrc/Makefile.in b/gst/audiotestsrc/Makefile.in
index 5ad5d9b..1e5fd74 100644
--- a/gst/audiotestsrc/Makefile.in
+++ b/gst/audiotestsrc/Makefile.in
@@ -1,7 +1,7 @@
-# Makefile.in generated by automake 1.14.1 from Makefile.am.
+# Makefile.in generated by automake 1.15 from Makefile.am.
 # @configure_input@
 
-# Copyright (C) 1994-2013 Free Software Foundation, Inc.
+# 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,
@@ -16,7 +16,17 @@
 
 
 VPATH = @srcdir@
-am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)'
+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 \
       ?) ;; \
@@ -81,8 +91,6 @@
 host_triplet = @host@
 target_triplet = @target@
 subdir = gst/audiotestsrc
-DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \
-	$(top_srcdir)/depcomp $(noinst_HEADERS)
 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 \
@@ -103,7 +111,6 @@
 	$(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-x11.m4 \
 	$(top_srcdir)/common/m4/gst.m4 \
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
@@ -120,6 +127,8 @@
 	$(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 =
@@ -229,6 +238,7 @@
   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@
@@ -289,6 +299,8 @@
 GIO_CFLAGS = @GIO_CFLAGS@
 GIO_LDFLAGS = @GIO_LDFLAGS@
 GIO_LIBS = @GIO_LIBS@
+GIO_UNIX_2_0_CFLAGS = @GIO_UNIX_2_0_CFLAGS@
+GIO_UNIX_2_0_LIBS = @GIO_UNIX_2_0_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
@@ -318,6 +330,8 @@
 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_OPTION_CFLAGS = @GST_OPTION_CFLAGS@
 GST_OPTION_CXXFLAGS = @GST_OPTION_CXXFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
@@ -345,7 +359,6 @@
 GTK_X11_CFLAGS = @GTK_X11_CFLAGS@
 GTK_X11_LIBS = @GTK_X11_LIBS@
 HAVE_CDPARANOIA = @HAVE_CDPARANOIA@
-HAVE_X = @HAVE_X@
 HAVE_XSHM = @HAVE_XSHM@
 HAVE_ZLIB = @HAVE_ZLIB@
 HTML_DIR = @HTML_DIR@
@@ -360,6 +373,7 @@
 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@
@@ -449,13 +463,12 @@
 XGETTEXT = @XGETTEXT@
 XGETTEXT_015 = @XGETTEXT_015@
 XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
-XMKMF = @XMKMF@
+XSHM_CFLAGS = @XSHM_CFLAGS@
 XSHM_LIBS = @XSHM_LIBS@
+XVIDEO_CFLAGS = @XVIDEO_CFLAGS@
 XVIDEO_LIBS = @XVIDEO_LIBS@
 X_CFLAGS = @X_CFLAGS@
-X_EXTRA_LIBS = @X_EXTRA_LIBS@
 X_LIBS = @X_LIBS@
-X_PRE_LIBS = @X_PRE_LIBS@
 ZLIB_CFLAGS = @ZLIB_CFLAGS@
 ZLIB_LIBS = @ZLIB_LIBS@
 abs_builddir = @abs_builddir@
@@ -508,6 +521,7 @@
 psdir = @psdir@
 pyexecdir = @pyexecdir@
 pythondir = @pythondir@
+runstatedir = @runstatedir@
 sbindir = @sbindir@
 sharedstatedir = @sharedstatedir@
 srcdir = @srcdir@
@@ -546,7 +560,6 @@
 	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu gst/audiotestsrc/Makefile'; \
 	$(am__cd) $(top_srcdir) && \
 	  $(AUTOMAKE) --gnu gst/audiotestsrc/Makefile
-.PRECIOUS: Makefile
 Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
 	@case '$?' in \
 	  *config.status*) \
@@ -855,20 +868,8 @@
 	pdf pdf-am ps ps-am tags tags-am uninstall uninstall-am \
 	uninstall-pluginLTLIBRARIES
 
+.PRECIOUS: Makefile
 
-Android.mk: Makefile.am $(BUILT_SOURCES)
-	androgenizer \
-	-:PROJECT libgstaudiotestsrc -:SHARED libgstaudiotestsrc \
-	 -:TAGS eng debug \
-         -:REL_TOP $(top_srcdir) -:ABS_TOP $(abs_top_srcdir) \
-	 -:SOURCES $(libgstaudiotestsrc_la_SOURCES) \
-	 -:CFLAGS $(DEFS) $(DEFAULT_INCLUDES) $(libgstaudiotestsrc_la_CFLAGS) \
-	 -:LDFLAGS $(libgstaudiotestsrc_la_LDFLAGS) \
-	           $(libgstaudiotestsrc_la_LIBADD) \
-	           -ldl \
-	 -:PASSTHROUGH LOCAL_ARM_MODE:=arm \
-		       LOCAL_MODULE_PATH:='$$(TARGET_OUT)/lib/gstreamer-0.10' \
-	> $@
 
 # 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/audiotestsrc/gstaudiotestsrc.c b/gst/audiotestsrc/gstaudiotestsrc.c
index 9ed89da..894fa16 100644
--- a/gst/audiotestsrc/gstaudiotestsrc.c
+++ b/gst/audiotestsrc/gstaudiotestsrc.c
@@ -25,11 +25,11 @@
  * <refsect2>
  * <title>Example launch line</title>
  * |[
- * gst-launch audiotestsrc ! audioconvert ! alsasink
+ * gst-launch-1.0 audiotestsrc ! audioconvert ! autoaudiosink
  * ]| This pipeline produces a sine with default frequency, 440 Hz, and the
  * default volume, 0.8 (relative to a maximum 1.0).
  * |[
- * gst-launch audiotestsrc wave=2 freq=200 ! audioconvert ! tee name=t ! queue ! alsasink t. ! queue ! libvisual_lv_scope ! videoconvert ! xvimagesink
+ * gst-launch-1.0 audiotestsrc wave=2 freq=200 ! tee name=t ! queue ! audioconvert ! autoaudiosink t. ! queue ! audioconvert ! libvisual_lv_scope ! videoconvert ! autovideosink
  * ]| In this example a saw wave is generated. The wave is shown using a
  * scope visualizer from libvisual, allowing you to visually verify that
  * the saw wave is correct.
@@ -71,8 +71,7 @@
   PROP_IS_LIVE,
   PROP_TIMESTAMP_OFFSET,
   PROP_CAN_ACTIVATE_PUSH,
-  PROP_CAN_ACTIVATE_PULL,
-  PROP_LAST
+  PROP_CAN_ACTIVATE_PULL
 };
 
 #if G_BYTE_ORDER == G_LITTLE_ENDIAN
@@ -341,6 +340,23 @@
       res = TRUE;
       break;
     }
+    case GST_QUERY_LATENCY:
+    {
+      if (src->info.rate > 0) {
+        GstClockTime latency;
+
+        latency =
+            gst_util_uint64_scale (src->generate_samples_per_buffer, GST_SECOND,
+            src->info.rate);
+        gst_query_set_latency (query,
+            gst_base_src_is_live (GST_BASE_SRC_CAST (src)), latency,
+            GST_CLOCK_TIME_NONE);
+        GST_DEBUG_OBJECT (src, "Reporting latency of %" GST_TIME_FORMAT,
+            GST_TIME_ARGS (latency));
+        res = TRUE;
+      }
+      break;
+    }
     default:
       res = GST_BASE_SRC_CLASS (parent_class)->query (basesrc, query);
       break;
diff --git a/gst/encoding/Makefile.am b/gst/encoding/Makefile.am
index 8ce1978..f9e7379 100644
--- a/gst/encoding/Makefile.am
+++ b/gst/encoding/Makefile.am
@@ -21,18 +21,3 @@
 	gststreamcombinerpad.h
 
 include $(top_srcdir)/common/gst-glib-gen.mak
-
-Android.mk: Makefile.am
-	androgenizer \
-	-:PROJECT libgstencodebin -:SHARED libgstencodebin \
-	 -:TAGS eng debug \
-         -:REL_TOP $(top_srcdir) -:ABS_TOP $(abs_top_srcdir) \
-	 -:SOURCES $(libgstencodebin_la_SOURCES) \
-	 	   $(nodist_libgstencodebin_la_SOURCES) \
-	 -:CFLAGS $(DEFS) $(DEFAULT_INCLUDES) $(libgstencodebin_la_CFLAGS) \
-	 -:LDFLAGS $(libgstencodebin_la_LDFLAGS) \
-	           $(libgstencodebin_la_LIBADD) \
-	           -ldl \
-	 -:PASSTHROUGH LOCAL_ARM_MODE:=arm \
-		       LOCAL_MODULE_PATH:='$$(TARGET_OUT)/lib/gstreamer-0.10' \
-	> $@
diff --git a/gst/encoding/Makefile.in b/gst/encoding/Makefile.in
index 3b73f21..7f8f3dd 100644
--- a/gst/encoding/Makefile.in
+++ b/gst/encoding/Makefile.in
@@ -1,7 +1,7 @@
-# Makefile.in generated by automake 1.14.1 from Makefile.am.
+# Makefile.in generated by automake 1.15 from Makefile.am.
 # @configure_input@
 
-# Copyright (C) 1994-2013 Free Software Foundation, Inc.
+# 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,
@@ -24,7 +24,17 @@
 
 
 VPATH = @srcdir@
-am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)'
+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 \
       ?) ;; \
@@ -88,9 +98,6 @@
 build_triplet = @build@
 host_triplet = @host@
 target_triplet = @target@
-DIST_COMMON = $(top_srcdir)/common/gst-glib-gen.mak \
-	$(srcdir)/Makefile.in $(srcdir)/Makefile.am \
-	$(top_srcdir)/depcomp $(noinst_HEADERS)
 subdir = gst/encoding
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
 am__aclocal_m4_deps = $(top_srcdir)/common/m4/as-ac-expand.m4 \
@@ -112,7 +119,6 @@
 	$(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-x11.m4 \
 	$(top_srcdir)/common/m4/gst.m4 \
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
@@ -129,6 +135,8 @@
 	$(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 =
@@ -239,6 +247,8 @@
   done | $(am__uniquify_input)`
 ETAGS = etags
 CTAGS = ctags
+am__DIST_COMMON = $(srcdir)/Makefile.in \
+	$(top_srcdir)/common/gst-glib-gen.mak $(top_srcdir)/depcomp
 DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
 ACLOCAL = @ACLOCAL@
 ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@
@@ -299,6 +309,8 @@
 GIO_CFLAGS = @GIO_CFLAGS@
 GIO_LDFLAGS = @GIO_LDFLAGS@
 GIO_LIBS = @GIO_LIBS@
+GIO_UNIX_2_0_CFLAGS = @GIO_UNIX_2_0_CFLAGS@
+GIO_UNIX_2_0_LIBS = @GIO_UNIX_2_0_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
@@ -328,6 +340,8 @@
 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_OPTION_CFLAGS = @GST_OPTION_CFLAGS@
 GST_OPTION_CXXFLAGS = @GST_OPTION_CXXFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
@@ -355,7 +369,6 @@
 GTK_X11_CFLAGS = @GTK_X11_CFLAGS@
 GTK_X11_LIBS = @GTK_X11_LIBS@
 HAVE_CDPARANOIA = @HAVE_CDPARANOIA@
-HAVE_X = @HAVE_X@
 HAVE_XSHM = @HAVE_XSHM@
 HAVE_ZLIB = @HAVE_ZLIB@
 HTML_DIR = @HTML_DIR@
@@ -370,6 +383,7 @@
 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@
@@ -459,13 +473,12 @@
 XGETTEXT = @XGETTEXT@
 XGETTEXT_015 = @XGETTEXT_015@
 XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
-XMKMF = @XMKMF@
+XSHM_CFLAGS = @XSHM_CFLAGS@
 XSHM_LIBS = @XSHM_LIBS@
+XVIDEO_CFLAGS = @XVIDEO_CFLAGS@
 XVIDEO_LIBS = @XVIDEO_LIBS@
 X_CFLAGS = @X_CFLAGS@
-X_EXTRA_LIBS = @X_EXTRA_LIBS@
 X_LIBS = @X_LIBS@
-X_PRE_LIBS = @X_PRE_LIBS@
 ZLIB_CFLAGS = @ZLIB_CFLAGS@
 ZLIB_LIBS = @ZLIB_LIBS@
 abs_builddir = @abs_builddir@
@@ -518,6 +531,7 @@
 psdir = @psdir@
 pyexecdir = @pyexecdir@
 pythondir = @pythondir@
+runstatedir = @runstatedir@
 sbindir = @sbindir@
 sharedstatedir = @sharedstatedir@
 srcdir = @srcdir@
@@ -568,7 +582,6 @@
 	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu gst/encoding/Makefile'; \
 	$(am__cd) $(top_srcdir) && \
 	  $(AUTOMAKE) --gnu gst/encoding/Makefile
-.PRECIOUS: Makefile
 Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
 	@case '$?' in \
 	  *config.status*) \
@@ -577,7 +590,7 @@
 	    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:
+$(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
@@ -902,6 +915,8 @@
 	pdf pdf-am ps ps-am tags tags-am uninstall uninstall-am \
 	uninstall-pluginLTLIBRARIES
 
+.PRECIOUS: Makefile
+
 
 # these are all the rules generating the relevant files
 $(glib_gen_basename)-marshal.h: $(glib_gen_basename)-marshal.list
@@ -939,21 +954,6 @@
 .deps/%-enumtypes.Plo:
 	@touch $@
 
-Android.mk: Makefile.am
-	androgenizer \
-	-:PROJECT libgstencodebin -:SHARED libgstencodebin \
-	 -:TAGS eng debug \
-         -:REL_TOP $(top_srcdir) -:ABS_TOP $(abs_top_srcdir) \
-	 -:SOURCES $(libgstencodebin_la_SOURCES) \
-	 	   $(nodist_libgstencodebin_la_SOURCES) \
-	 -:CFLAGS $(DEFS) $(DEFAULT_INCLUDES) $(libgstencodebin_la_CFLAGS) \
-	 -:LDFLAGS $(libgstencodebin_la_LDFLAGS) \
-	           $(libgstencodebin_la_LIBADD) \
-	           -ldl \
-	 -:PASSTHROUGH LOCAL_ARM_MODE:=arm \
-		       LOCAL_MODULE_PATH:='$$(TARGET_OUT)/lib/gstreamer-0.10' \
-	> $@
-
 # 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/encoding/gstencodebin.c b/gst/encoding/gstencodebin.c
index 6728e58..8895208 100644
--- a/gst/encoding/gstencodebin.c
+++ b/gst/encoding/gstencodebin.c
@@ -215,10 +215,12 @@
   GList *converters;            /* List of conversion GstElement */
   GstElement *capsfilter;       /* profile->restriction (if non-NULL/ANY) */
   GstElement *encoder;          /* Encoder (can be NULL) */
+  GstElement *fakesink;         /* Fakesink (can be NULL) */
   GstElement *combiner;
   GstElement *parser;
   GstElement *smartencoder;
   GstElement *outfilter;        /* Output capsfilter (streamprofile.format) */
+  gulong outputfilter_caps_sid;
   GstElement *formatter;
   GstElement *outqueue;         /* Queue just before the muxer */
   gulong restriction_sid;
@@ -249,8 +251,7 @@
   PROP_QUEUE_TIME_MAX,
   PROP_AUDIO_JITTER_TOLERANCE,
   PROP_AVOID_REENCODING,
-  PROP_FLAGS,
-  PROP_LAST
+  PROP_FLAGS
 };
 
 /* Signals */
@@ -316,6 +317,7 @@
 static StreamGroup *_create_stream_group (GstEncodeBin * ebin,
     GstEncodingProfile * sprof, const gchar * sinkpadname, GstCaps * sinkcaps);
 static void stream_group_remove (GstEncodeBin * ebin, StreamGroup * sgroup);
+static void stream_group_free (GstEncodeBin * ebin, StreamGroup * sgroup);
 static GstPad *gst_encode_bin_request_pad_signal (GstEncodeBin * encodebin,
     GstCaps * caps);
 static GstPad *gst_encode_bin_request_profile_pad_signal (GstEncodeBin *
@@ -657,8 +659,15 @@
 
         if (profilename && !strcmp (name, profilename)) {
           guint presence = gst_encoding_profile_get_presence (sprof);
+
           GST_DEBUG ("Found profile matching the requested name");
 
+          if (!gst_encoding_profile_is_enabled (sprof)) {
+            GST_INFO_OBJECT (ebin, "%p is disabled, not using it", sprof);
+
+            return NULL;
+          }
+
           if (presence == 0
               || presence > stream_profile_used_count (ebin, sprof))
             return sprof;
@@ -684,7 +693,9 @@
       if (G_TYPE_FROM_INSTANCE (sprof) == ptype) {
         guint presence = gst_encoding_profile_get_presence (sprof);
         GST_DEBUG ("Found a stream profile with the same type");
-        if (presence == 0
+        if (!gst_encoding_profile_is_enabled (sprof)) {
+          GST_INFO_OBJECT (ebin, "%p is disabled, not using it", sprof);
+        } else if (presence == 0
             || (presence > stream_profile_used_count (ebin, sprof)))
           return sprof;
       } else if (caps && ptype == G_TYPE_NONE) {
@@ -1076,7 +1087,73 @@
   g_object_set (group->capsfilter, "caps", restriction, NULL);
 }
 
-/* FIXME : Add handling of streams that don't need encoding  */
+static void
+_outfilter_caps_set_cb (GstPad * outfilter_sinkpad,
+    GParamSpec * arg G_GNUC_UNUSED, StreamGroup * group)
+{
+  GstCaps *caps;
+
+  g_object_get (outfilter_sinkpad, "caps", &caps, NULL);
+  GST_INFO_OBJECT (group->ebin, "Forcing caps to %" GST_PTR_FORMAT, caps);
+  g_object_set (group->outfilter, "caps", caps, NULL);
+  g_signal_handler_disconnect (outfilter_sinkpad, group->outputfilter_caps_sid);
+  group->outputfilter_caps_sid = 0;
+}
+
+static void
+_set_group_caps_format (StreamGroup * sgroup, GstEncodingProfile * prof,
+    GstCaps * format)
+{
+  g_object_set (sgroup->outfilter, "caps", format, NULL);
+
+  if (!gst_encoding_profile_get_allow_dynamic_output (prof)) {
+    if (!sgroup->outputfilter_caps_sid) {
+      sgroup->outputfilter_caps_sid =
+          g_signal_connect (sgroup->outfilter->sinkpads->data,
+          "notify::caps", G_CALLBACK (_outfilter_caps_set_cb), sgroup);
+    }
+  }
+}
+
+static void
+_post_missing_plugin_message (GstEncodeBin * ebin, GstEncodingProfile * prof)
+{
+  GstCaps *format;
+  format = gst_encoding_profile_get_format (prof);
+
+  GST_ERROR_OBJECT (ebin, "Couldn't create encoder for format %" GST_PTR_FORMAT,
+      format);
+  /* missing plugin support */
+  gst_element_post_message (GST_ELEMENT_CAST (ebin),
+      gst_missing_encoder_message_new (GST_ELEMENT_CAST (ebin), format));
+  GST_ELEMENT_ERROR (ebin, CORE, MISSING_PLUGIN, (NULL),
+      ("Couldn't create encoder for format %" GST_PTR_FORMAT, format));
+
+  gst_caps_unref (format);
+}
+
+static GstPadProbeReturn
+_missing_plugin_probe (GstPad * pad, GstPadProbeInfo * info, gpointer udata)
+{
+  StreamGroup *sgroup = udata;
+  GstEncodeBin *ebin = sgroup->ebin;
+
+  _post_missing_plugin_message (ebin, sgroup->profile);
+
+  return GST_PAD_PROBE_OK;
+}
+
+static void
+_set_up_fake_encoder_pad_probe (GstEncodeBin * ebin, StreamGroup * sgroup)
+{
+  GstPad *pad = gst_element_get_static_pad (sgroup->fakesink, "sink");
+
+  gst_pad_add_probe (pad, GST_PAD_PROBE_TYPE_BUFFER, _missing_plugin_probe,
+      sgroup, NULL);
+
+  gst_object_unref (pad);
+}
+
 /* FIXME : Add handling of streams that don't require conversion elements */
 /*
  * Create the elements, StreamGroup, add the sink pad, link it to the muxer
@@ -1091,6 +1168,7 @@
   GstPad *sinkpad, *srcpad, *muxerpad = NULL;
   /* Element we will link to the encoder */
   GstElement *last = NULL;
+  GstElement *encoder = NULL;
   GList *tmp, *tosync = NULL;
   GstCaps *format, *restriction;
   const gchar *missing_element_name;
@@ -1116,14 +1194,6 @@
    * * One for already encoded data
    */
 
-  /* Exception to the rule above:
-   * We check if we have an available encoder so we can abort early */
-  /* FIXME : What if we only want to do passthrough ??? */
-  GST_LOG ("Checking for encoder availability");
-  sgroup->encoder = _get_encoder (ebin, sprof);
-  if (G_UNLIKELY (sgroup->encoder == NULL))
-    goto no_encoder;
-
   /* Muxer.
    * If we are handling a container profile, figure out if the muxer has a
    * sinkpad compatible with the selected profile */
@@ -1178,7 +1248,7 @@
    * This will receive the format caps from the streamprofile */
   GST_DEBUG ("Adding output capsfilter for %" GST_PTR_FORMAT, format);
   sgroup->outfilter = gst_element_factory_make ("capsfilter", NULL);
-  g_object_set (sgroup->outfilter, "caps", format, NULL);
+  _set_group_caps_format (sgroup, sprof, format);
 
   gst_bin_add (GST_BIN (ebin), sgroup->outfilter);
   tosync = g_list_append (tosync, sgroup->outfilter);
@@ -1287,19 +1357,29 @@
 
   /* 1. Create the encoder */
   GST_LOG ("Adding encoder");
-  last = sgroup->encoder;
-  gst_bin_add ((GstBin *) ebin, sgroup->encoder);
-  tosync = g_list_append (tosync, sgroup->encoder);
+  sgroup->encoder = _get_encoder (ebin, sprof);
+  if (sgroup->encoder != NULL) {
+    gst_bin_add ((GstBin *) ebin, sgroup->encoder);
+    tosync = g_list_append (tosync, sgroup->encoder);
 
-  sinkpad =
-      local_element_request_pad (sgroup->combiner, NULL, "encodingsink", NULL);
-  if (G_UNLIKELY (sinkpad == NULL))
-    goto no_combiner_sinkpad;
-  srcpad = gst_element_get_static_pad (sgroup->encoder, "src");
-  if (G_UNLIKELY (fast_pad_link (srcpad, sinkpad) != GST_PAD_LINK_OK))
-    goto encoder_link_failure;
-  g_object_unref (sinkpad);
-  g_object_unref (srcpad);
+    sinkpad =
+        local_element_request_pad (sgroup->combiner, NULL, "encodingsink",
+        NULL);
+    if (G_UNLIKELY (sinkpad == NULL))
+      goto no_combiner_sinkpad;
+    srcpad = gst_element_get_static_pad (sgroup->encoder, "src");
+    if (G_UNLIKELY (fast_pad_link (srcpad, sinkpad) != GST_PAD_LINK_OK))
+      goto encoder_link_failure;
+    g_object_unref (sinkpad);
+    g_object_unref (srcpad);
+  } else if (gst_encoding_profile_get_preset (sgroup->profile)
+      || gst_encoding_profile_get_preset_name (sgroup->profile)) {
+    _post_missing_plugin_message (ebin, sprof);
+    goto cleanup;
+  } else {
+    /* passthrough can still work, if we discover that *
+     * encoding is required we post a missing plugin message */
+  }
 
 
   /* 3. Create the conversion/restriction elements */
@@ -1312,7 +1392,21 @@
     g_object_set (sgroup->capsfilter, "caps", restriction, NULL);
   gst_bin_add ((GstBin *) ebin, sgroup->capsfilter);
   tosync = g_list_append (tosync, sgroup->capsfilter);
-  fast_element_link (sgroup->capsfilter, sgroup->encoder);
+  if (sgroup->encoder == NULL) {
+    /* no encoder available but it might be possible to just do passthrough, so
+     * let's just set up a fake pad to detect that encoding was attempted and
+     * if so it posts the missing plugin message */
+    sgroup->fakesink = gst_element_factory_make ("fakesink", NULL);
+    g_object_set (sgroup->fakesink, "async", FALSE, NULL);
+    gst_bin_add (GST_BIN_CAST (ebin), sgroup->fakesink);
+    tosync = g_list_append (tosync, sgroup->fakesink);
+    encoder = sgroup->fakesink;
+
+    _set_up_fake_encoder_pad_probe (ebin, sgroup);
+  } else {
+    encoder = sgroup->encoder;
+  }
+  fast_element_link (sgroup->capsfilter, encoder);
   sgroup->restriction_sid = g_signal_connect (sprof, "notify::restriction-caps",
       G_CALLBACK (_profile_restriction_caps_cb), sgroup);
 
@@ -1464,16 +1558,6 @@
   GST_ERROR_OBJECT (ebin, "Error linking splitter to encoding stream");
   goto cleanup;
 
-no_encoder:
-  GST_ERROR_OBJECT (ebin, "Couldn't create encoder for format %" GST_PTR_FORMAT,
-      format);
-  /* missing plugin support */
-  gst_element_post_message (GST_ELEMENT_CAST (ebin),
-      gst_missing_encoder_message_new (GST_ELEMENT_CAST (ebin), format));
-  GST_ELEMENT_ERROR (ebin, CORE, MISSING_PLUGIN, (NULL),
-      ("Couldn't create encoder for format %" GST_PTR_FORMAT, format));
-  goto cleanup;
-
 no_muxer_pad:
   GST_ERROR_OBJECT (ebin,
       "Couldn't find a compatible muxer pad to link encoder to");
@@ -1539,7 +1623,8 @@
     gst_caps_unref (format);
   if (restriction)
     gst_caps_unref (restriction);
-  g_slice_free (StreamGroup, sgroup);
+  stream_group_free (ebin, sgroup);
+  g_list_free (tosync);
   return NULL;
 }
 
@@ -1797,7 +1882,8 @@
       GST_DEBUG ("Trying stream profile with presence %d",
           gst_encoding_profile_get_presence (sprof));
 
-      if (gst_encoding_profile_get_presence (sprof) != 0) {
+      if (gst_encoding_profile_get_presence (sprof) != 0 &&
+          gst_encoding_profile_is_enabled (sprof)) {
         if (G_UNLIKELY (_create_stream_group (ebin, sprof, NULL, NULL) == NULL))
           goto stream_error;
       }
@@ -1874,7 +1960,7 @@
   gst_element_release_request_pad (elt, pad);
 }
 
-static void inline
+static void
 stream_group_free (GstEncodeBin * ebin, StreamGroup * sgroup)
 {
   GList *tmp;
@@ -1883,7 +1969,8 @@
 
   GST_DEBUG_OBJECT (ebin, "Freeing StreamGroup %p", sgroup);
 
-  g_signal_handler_disconnect (sgroup->profile, sgroup->restriction_sid);
+  if (sgroup->restriction_sid != 0)
+    g_signal_handler_disconnect (sgroup->profile, sgroup->restriction_sid);
 
   if (ebin->muxer) {
     /* outqueue - Muxer */
@@ -1926,22 +2013,38 @@
   }
 
   /* Sink Ghostpad */
-  if (sgroup->ghostpad)
-    gst_element_remove_pad (GST_ELEMENT_CAST (ebin), sgroup->ghostpad);
+  if (sgroup->ghostpad) {
+    if (GST_PAD_PARENT (sgroup->ghostpad) != NULL)
+      gst_element_remove_pad (GST_ELEMENT_CAST (ebin), sgroup->ghostpad);
+    else
+      gst_object_unref (sgroup->ghostpad);
+  }
 
   if (sgroup->inqueue)
     gst_element_set_state (sgroup->inqueue, GST_STATE_NULL);
 
   if (sgroup->encoder)
     gst_element_set_state (sgroup->encoder, GST_STATE_NULL);
-  if (sgroup->outfilter)
+  if (sgroup->fakesink)
+    gst_element_set_state (sgroup->fakesink, GST_STATE_NULL);
+  if (sgroup->outfilter) {
     gst_element_set_state (sgroup->outfilter, GST_STATE_NULL);
+
+    if (sgroup->outputfilter_caps_sid) {
+      g_signal_handler_disconnect (sgroup->outfilter->sinkpads->data,
+          sgroup->outputfilter_caps_sid);
+      sgroup->outputfilter_caps_sid = 0;
+    }
+  }
   if (sgroup->smartencoder)
     gst_element_set_state (sgroup->smartencoder, GST_STATE_NULL);
 
   if (sgroup->capsfilter) {
     gst_element_set_state (sgroup->capsfilter, GST_STATE_NULL);
-    gst_element_unlink (sgroup->capsfilter, sgroup->encoder);
+    if (sgroup->encoder)
+      gst_element_unlink (sgroup->capsfilter, sgroup->encoder);
+    else
+      gst_element_unlink (sgroup->capsfilter, sgroup->fakesink);
     gst_bin_remove ((GstBin *) ebin, sgroup->capsfilter);
   }
 
@@ -1990,6 +2093,9 @@
   if (sgroup->encoder)
     gst_bin_remove ((GstBin *) ebin, sgroup->encoder);
 
+  if (sgroup->fakesink)
+    gst_bin_remove ((GstBin *) ebin, sgroup->fakesink);
+
   if (sgroup->smartencoder)
     gst_bin_remove ((GstBin *) ebin, sgroup->smartencoder);
 
@@ -2050,7 +2156,7 @@
 
   /* Create elements */
   res = create_elements_and_pads (ebin);
-  if (res == FALSE)
+  if (!res)
     gst_encode_bin_tear_down_profile (ebin);
 
   return res;
@@ -2087,6 +2193,18 @@
 static void
 gst_encode_bin_deactivate (GstEncodeBin * ebin)
 {
+  GList *tmp;
+
+  for (tmp = ebin->streams; tmp; tmp = tmp->next) {
+    StreamGroup *sgroup = tmp->data;
+    GstCaps *format = gst_encoding_profile_get_format (sgroup->profile);
+
+    _set_group_caps_format (sgroup, sgroup->profile, format);
+
+    if (format)
+      gst_caps_unref (format);
+  }
+
   ebin->active = FALSE;
 }
 
diff --git a/gst/encoding/gstsmartencoder.c b/gst/encoding/gstsmartencoder.c
index 9960204..5c46da8 100644
--- a/gst/encoding/gstsmartencoder.c
+++ b/gst/encoding/gstsmartencoder.c
@@ -61,7 +61,7 @@
 
 enum
 {
-  ARG_0
+  PROP_0
       /* FILL ME */
 };
 
diff --git a/gst/gio/Makefile.in b/gst/gio/Makefile.in
index d983a17..8d83411 100644
--- a/gst/gio/Makefile.in
+++ b/gst/gio/Makefile.in
@@ -1,7 +1,7 @@
-# Makefile.in generated by automake 1.14.1 from Makefile.am.
+# Makefile.in generated by automake 1.15 from Makefile.am.
 # @configure_input@
 
-# Copyright (C) 1994-2013 Free Software Foundation, Inc.
+# 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,
@@ -18,7 +18,17 @@
 
 
 VPATH = @srcdir@
-am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)'
+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 \
       ?) ;; \
@@ -83,8 +93,6 @@
 host_triplet = @host@
 target_triplet = @target@
 subdir = gst/gio
-DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \
-	$(top_srcdir)/depcomp $(noinst_HEADERS)
 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 \
@@ -105,7 +113,6 @@
 	$(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-x11.m4 \
 	$(top_srcdir)/common/m4/gst.m4 \
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
@@ -122,6 +129,8 @@
 	$(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 =
@@ -233,6 +242,7 @@
   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@
@@ -293,6 +303,8 @@
 GIO_CFLAGS = @GIO_CFLAGS@
 GIO_LDFLAGS = @GIO_LDFLAGS@
 GIO_LIBS = @GIO_LIBS@
+GIO_UNIX_2_0_CFLAGS = @GIO_UNIX_2_0_CFLAGS@
+GIO_UNIX_2_0_LIBS = @GIO_UNIX_2_0_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
@@ -322,6 +334,8 @@
 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_OPTION_CFLAGS = @GST_OPTION_CFLAGS@
 GST_OPTION_CXXFLAGS = @GST_OPTION_CXXFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
@@ -349,7 +363,6 @@
 GTK_X11_CFLAGS = @GTK_X11_CFLAGS@
 GTK_X11_LIBS = @GTK_X11_LIBS@
 HAVE_CDPARANOIA = @HAVE_CDPARANOIA@
-HAVE_X = @HAVE_X@
 HAVE_XSHM = @HAVE_XSHM@
 HAVE_ZLIB = @HAVE_ZLIB@
 HTML_DIR = @HTML_DIR@
@@ -364,6 +377,7 @@
 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@
@@ -453,13 +467,12 @@
 XGETTEXT = @XGETTEXT@
 XGETTEXT_015 = @XGETTEXT_015@
 XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
-XMKMF = @XMKMF@
+XSHM_CFLAGS = @XSHM_CFLAGS@
 XSHM_LIBS = @XSHM_LIBS@
+XVIDEO_CFLAGS = @XVIDEO_CFLAGS@
 XVIDEO_LIBS = @XVIDEO_LIBS@
 X_CFLAGS = @X_CFLAGS@
-X_EXTRA_LIBS = @X_EXTRA_LIBS@
 X_LIBS = @X_LIBS@
-X_PRE_LIBS = @X_PRE_LIBS@
 ZLIB_CFLAGS = @ZLIB_CFLAGS@
 ZLIB_LIBS = @ZLIB_LIBS@
 abs_builddir = @abs_builddir@
@@ -512,6 +525,7 @@
 psdir = @psdir@
 pyexecdir = @pyexecdir@
 pythondir = @pythondir@
+runstatedir = @runstatedir@
 sbindir = @sbindir@
 sharedstatedir = @sharedstatedir@
 srcdir = @srcdir@
@@ -567,7 +581,6 @@
 	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu gst/gio/Makefile'; \
 	$(am__cd) $(top_srcdir) && \
 	  $(AUTOMAKE) --gnu gst/gio/Makefile
-.PRECIOUS: Makefile
 Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
 	@case '$?' in \
 	  *config.status*) \
@@ -924,6 +937,8 @@
 	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.
diff --git a/gst/gio/gstgio.c b/gst/gio/gstgio.c
index 9f2f2ba..6e45e80 100644
--- a/gst/gio/gstgio.c
+++ b/gst/gio/gstgio.c
@@ -231,6 +231,11 @@
   g_type_add_interface_static (type, GST_TYPE_URI_HANDLER, &uri_handler_info);
 }
 
+#define GIO_GVFS_MOUNTS_DIR GIO_PREFIX \
+    G_DIR_SEPARATOR_S "share" \
+    G_DIR_SEPARATOR_S "gvfs" \
+    G_DIR_SEPARATOR_S "mounts"
+
 static gboolean
 plugin_init (GstPlugin * plugin)
 {
@@ -240,8 +245,8 @@
 
   gst_plugin_add_dependency_simple (plugin, NULL, GIO_MODULE_DIR, NULL,
       GST_PLUGIN_DEPENDENCY_FLAG_NONE);
-  gst_plugin_add_dependency_simple (plugin, "LD_LIBRARY_PATH", GIO_LIBDIR,
-      "gvfsd", GST_PLUGIN_DEPENDENCY_FLAG_NONE);
+  gst_plugin_add_dependency_simple (plugin, NULL, GIO_GVFS_MOUNTS_DIR, NULL,
+      GST_PLUGIN_DEPENDENCY_FLAG_NONE);
 
   /* FIXME: Rank is MARGINAL for now, should be at least SECONDARY+1 in the future
    * to replace gnomevfssink/src. For testing purposes PRIMARY+1 one makes sense
diff --git a/gst/gio/gstgiobasesink.c b/gst/gio/gstgiobasesink.c
index d50e8aa..3dbec56 100644
--- a/gst/gio/gstgiobasesink.c
+++ b/gst/gio/gstgiobasesink.c
@@ -191,7 +191,8 @@
 
   GST_LOG_OBJECT (sink, "resetting cancellable");
 
-  g_cancellable_reset (sink->cancel);
+  g_object_unref (sink->cancel);
+  sink->cancel = g_cancellable_new ();
 
   return TRUE;
 }
diff --git a/gst/gio/gstgiobasesrc.c b/gst/gio/gstgiobasesrc.c
index 0ffe01a..213ede6 100644
--- a/gst/gio/gstgiobasesrc.c
+++ b/gst/gio/gstgiobasesrc.c
@@ -286,7 +286,8 @@
 
   GST_LOG_OBJECT (src, "resetting cancellable");
 
-  g_cancellable_reset (src->cancel);
+  g_object_unref (src->cancel);
+  src->cancel = g_cancellable_new ();
 
   return TRUE;
 }
diff --git a/gst/gio/gstgiosink.c b/gst/gio/gstgiosink.c
index 3f985b8..cf02090 100644
--- a/gst/gio/gstgiosink.c
+++ b/gst/gio/gstgiosink.c
@@ -48,15 +48,15 @@
  * <refsect2>
  * <title>Example pipelines</title>
  * |[
- * gst-launch -v filesrc location=input.xyz ! giosink location=file:///home/joe/out.xyz
+ * gst-launch-1.0 -v filesrc location=input.xyz ! giosink location=file:///home/joe/out.xyz
  * ]| The above pipeline will simply copy a local file. Instead of giosink,
  * we could just as well have used the filesink element here.
  * |[
- * gst-launch -v filesrc location=foo.mp3 ! mad ! flacenc ! giosink location=smb://othercomputer/foo.flac
- * ]| The above pipeline will re-encode an mp3 file into FLAC format and store
+ * gst-launch-1.0 -v uridecodebin uri=file:///path/to/audio.file ! audioconvert ! flacenc ! giosink location=smb://othercomputer/foo.flac
+ * ]| The above pipeline will re-encode an audio file into FLAC format and store
  * it on a remote host using the Samba protocol.
  * |[
- * gst-launch -v audiotestsrc num-buffers=100 ! vorbisenc ! oggmux ! giosink location=file:///home/foo/bar.ogg
+ * gst-launch-1.0 -v audiotestsrc num-buffers=100 ! vorbisenc ! oggmux ! giosink location=file:///home/foo/bar.ogg
  * ]| The above pipeline will encode a 440Hz sine wave to Ogg Vorbis and stores
  * it in the home directory of user foo.
  * </refsect2>
@@ -65,7 +65,7 @@
 /* FIXME: We would like to mount the enclosing volume of an URL
  *        if it isn't mounted yet but this is possible async-only.
  *        Unfortunately this requires a running main loop from the
- *        default context and we can't guarantuee this!
+ *        default context and we can't guarantee this!
  *
  *        We would also like to do authentication while mounting.
  */
diff --git a/gst/gio/gstgiosrc.c b/gst/gio/gstgiosrc.c
index d214905..9f9bae5 100644
--- a/gst/gio/gstgiosrc.c
+++ b/gst/gio/gstgiosrc.c
@@ -43,18 +43,18 @@
  * <refsect2>
  * <title>Example launch lines</title>
  * |[
- * gst-launch -v giosrc location=file:///home/joe/foo.xyz ! fakesink
+ * gst-launch-1.0 -v giosrc location=file:///home/joe/foo.xyz ! fakesink
  * ]| The above pipeline will simply read a local file and do nothing with the
  * data read. Instead of giosrc, we could just as well have used the
  * filesrc element here.
  * |[
- * gst-launch -v giosrc location=smb://othercomputer/foo.xyz ! filesink location=/home/joe/foo.xyz
+ * gst-launch-1.0 -v giosrc location=smb://othercomputer/foo.xyz ! filesink location=/home/joe/foo.xyz
  * ]| The above pipeline will copy a file from a remote host to the local file
  * system using the Samba protocol.
  * |[
- * gst-launch -v giosrc location=http://music.foobar.com/demo.mp3 ! mad ! audioconvert ! audioresample ! alsasink
+ * gst-launch-1.0 -v giosrc location=smb://othercomputer/demo.mp3 ! decodebin ! audioconvert ! audioresample ! autoaudiosink
  * ]| The above pipeline will read and decode and play an mp3 file from a
- * web server using the http protocol.
+ * SAMBA server.
  * </refsect2>
  */
 
diff --git a/gst/gio/gstgiostreamsink.c b/gst/gio/gstgiostreamsink.c
index 5e5f620..96ff9fc 100644
--- a/gst/gio/gstgiostreamsink.c
+++ b/gst/gio/gstgiostreamsink.c
@@ -33,8 +33,8 @@
  * The following example writes the received data to a #GMemoryOutputStream.
  * |[
 
-#include &lt;gst/gst.h&gt;
-#include &lt;gio/gio.h&gt;
+#include <gst/gst.h>
+#include <gio/gio.h>
 
 ...
 
diff --git a/gst/gio/gstgiostreamsrc.c b/gst/gio/gstgiostreamsrc.c
index 957bd06..0d91e0a 100644
--- a/gst/gio/gstgiostreamsrc.c
+++ b/gst/gio/gstgiostreamsrc.c
@@ -34,8 +34,8 @@
  * The following example reads data from a #GMemoryInputStream.
  * |[
 
-#include &lt;gst/gst.h&gt;
-#include &lt;gio/gio.h&gt;
+#include <gst/gst.h>
+#include <gio/gio.h>
 
 ...
 
diff --git a/gst/playback/Makefile.am b/gst/playback/Makefile.am
index 24e6b16..081b224 100644
--- a/gst/playback/Makefile.am
+++ b/gst/playback/Makefile.am
@@ -13,7 +13,8 @@
 	gstplaysinkvideoconvert.c \
 	gstplaysinkaudioconvert.c \
 	gstplaysinkconvertbin.c \
-	gststreamsynchronizer.c
+	gststreamsynchronizer.c \
+	gstplaybackutils.c
 
 nodist_libgstplayback_la_SOURCES = $(built_sources)
 libgstplayback_la_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_CFLAGS) $(csp_cflags)
@@ -34,23 +35,9 @@
 	gstplaysinkvideoconvert.h \
 	gstplaysinkaudioconvert.h \
 	gstplaysinkconvertbin.h \
-	gststreamsynchronizer.h
+	gststreamsynchronizer.h \
+	gstplaybackutils.h
 
 BUILT_SOURCES = $(built_headers) $(built_sources)
 
 CLEANFILES = $(BUILT_SOURCES)
-
-Android.mk: Makefile.am $(BUILT_SOURCES)
-	androgenizer \
-	-:PROJECT libgstplayback -:SHARED libgstplayback \
-	 -:TAGS eng debug \
-         -:REL_TOP $(top_srcdir) -:ABS_TOP $(abs_top_srcdir) \
-	 -:SOURCES $(libgstplayback_la_SOURCES) \
-	           $(nodist_libgstplayback_la_SOURCES) \
-	 -:CFLAGS $(DEFS) $(DEFAULT_INCLUDES) $(libgstplayback_la_CFLAGS) $(csp_cflags) \
-	 -:LDFLAGS $(libgstplayback_la_LDFLAGS) \
-	           $(libgstplayback_la_LIBADD) \
-	           -ldl \
-	 -:PASSTHROUGH LOCAL_ARM_MODE:=arm \
-		       LOCAL_MODULE_PATH:='$$(TARGET_OUT)/lib/gstreamer-0.10' \
-	> $@
diff --git a/gst/playback/Makefile.in b/gst/playback/Makefile.in
index 081a475..e36ff05 100644
--- a/gst/playback/Makefile.in
+++ b/gst/playback/Makefile.in
@@ -1,7 +1,7 @@
-# Makefile.in generated by automake 1.14.1 from Makefile.am.
+# Makefile.in generated by automake 1.15 from Makefile.am.
 # @configure_input@
 
-# Copyright (C) 1994-2013 Free Software Foundation, Inc.
+# 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,
@@ -16,7 +16,17 @@
 
 
 VPATH = @srcdir@
-am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)'
+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 \
       ?) ;; \
@@ -81,8 +91,6 @@
 host_triplet = @host@
 target_triplet = @target@
 subdir = gst/playback
-DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \
-	$(top_srcdir)/depcomp $(noinst_HEADERS)
 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 \
@@ -103,7 +111,6 @@
 	$(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-x11.m4 \
 	$(top_srcdir)/common/m4/gst.m4 \
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
@@ -120,6 +127,8 @@
 	$(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 =
@@ -168,7 +177,8 @@
 	libgstplayback_la-gstplaysinkvideoconvert.lo \
 	libgstplayback_la-gstplaysinkaudioconvert.lo \
 	libgstplayback_la-gstplaysinkconvertbin.lo \
-	libgstplayback_la-gststreamsynchronizer.lo
+	libgstplayback_la-gststreamsynchronizer.lo \
+	libgstplayback_la-gstplaybackutils.lo
 nodist_libgstplayback_la_OBJECTS =
 libgstplayback_la_OBJECTS = $(am_libgstplayback_la_OBJECTS) \
 	$(nodist_libgstplayback_la_OBJECTS)
@@ -242,6 +252,7 @@
   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@
@@ -302,6 +313,8 @@
 GIO_CFLAGS = @GIO_CFLAGS@
 GIO_LDFLAGS = @GIO_LDFLAGS@
 GIO_LIBS = @GIO_LIBS@
+GIO_UNIX_2_0_CFLAGS = @GIO_UNIX_2_0_CFLAGS@
+GIO_UNIX_2_0_LIBS = @GIO_UNIX_2_0_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
@@ -331,6 +344,8 @@
 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_OPTION_CFLAGS = @GST_OPTION_CFLAGS@
 GST_OPTION_CXXFLAGS = @GST_OPTION_CXXFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
@@ -358,7 +373,6 @@
 GTK_X11_CFLAGS = @GTK_X11_CFLAGS@
 GTK_X11_LIBS = @GTK_X11_LIBS@
 HAVE_CDPARANOIA = @HAVE_CDPARANOIA@
-HAVE_X = @HAVE_X@
 HAVE_XSHM = @HAVE_XSHM@
 HAVE_ZLIB = @HAVE_ZLIB@
 HTML_DIR = @HTML_DIR@
@@ -373,6 +387,7 @@
 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@
@@ -462,13 +477,12 @@
 XGETTEXT = @XGETTEXT@
 XGETTEXT_015 = @XGETTEXT_015@
 XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
-XMKMF = @XMKMF@
+XSHM_CFLAGS = @XSHM_CFLAGS@
 XSHM_LIBS = @XSHM_LIBS@
+XVIDEO_CFLAGS = @XVIDEO_CFLAGS@
 XVIDEO_LIBS = @XVIDEO_LIBS@
 X_CFLAGS = @X_CFLAGS@
-X_EXTRA_LIBS = @X_EXTRA_LIBS@
 X_LIBS = @X_LIBS@
-X_PRE_LIBS = @X_PRE_LIBS@
 ZLIB_CFLAGS = @ZLIB_CFLAGS@
 ZLIB_LIBS = @ZLIB_LIBS@
 abs_builddir = @abs_builddir@
@@ -521,6 +535,7 @@
 psdir = @psdir@
 pyexecdir = @pyexecdir@
 pythondir = @pythondir@
+runstatedir = @runstatedir@
 sbindir = @sbindir@
 sharedstatedir = @sharedstatedir@
 srcdir = @srcdir@
@@ -546,7 +561,8 @@
 	gstplaysinkvideoconvert.c \
 	gstplaysinkaudioconvert.c \
 	gstplaysinkconvertbin.c \
-	gststreamsynchronizer.c
+	gststreamsynchronizer.c \
+	gstplaybackutils.c
 
 nodist_libgstplayback_la_SOURCES = $(built_sources)
 libgstplayback_la_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_CFLAGS) $(csp_cflags)
@@ -567,7 +583,8 @@
 	gstplaysinkvideoconvert.h \
 	gstplaysinkaudioconvert.h \
 	gstplaysinkconvertbin.h \
-	gststreamsynchronizer.h
+	gststreamsynchronizer.h \
+	gstplaybackutils.h
 
 BUILT_SOURCES = $(built_headers) $(built_sources)
 CLEANFILES = $(BUILT_SOURCES)
@@ -588,7 +605,6 @@
 	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu gst/playback/Makefile'; \
 	$(am__cd) $(top_srcdir) && \
 	  $(AUTOMAKE) --gnu gst/playback/Makefile
-.PRECIOUS: Makefile
 Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
 	@case '$?' in \
 	  *config.status*) \
@@ -654,6 +670,7 @@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstplayback_la-gstdecodebin2.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstplayback_la-gstplay-enum.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstplayback_la-gstplayback.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstplayback_la-gstplaybackutils.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstplayback_la-gstplaybin2.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstplayback_la-gstplaysink.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstplayback_la-gstplaysinkaudioconvert.Plo@am__quote@
@@ -764,6 +781,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 $(libgstplayback_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstplayback_la_CFLAGS) $(CFLAGS) -c -o libgstplayback_la-gststreamsynchronizer.lo `test -f 'gststreamsynchronizer.c' || echo '$(srcdir)/'`gststreamsynchronizer.c
 
+libgstplayback_la-gstplaybackutils.lo: gstplaybackutils.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstplayback_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstplayback_la_CFLAGS) $(CFLAGS) -MT libgstplayback_la-gstplaybackutils.lo -MD -MP -MF $(DEPDIR)/libgstplayback_la-gstplaybackutils.Tpo -c -o libgstplayback_la-gstplaybackutils.lo `test -f 'gstplaybackutils.c' || echo '$(srcdir)/'`gstplaybackutils.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstplayback_la-gstplaybackutils.Tpo $(DEPDIR)/libgstplayback_la-gstplaybackutils.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='gstplaybackutils.c' object='libgstplayback_la-gstplaybackutils.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 $(libgstplayback_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstplayback_la_CFLAGS) $(CFLAGS) -c -o libgstplayback_la-gstplaybackutils.lo `test -f 'gstplaybackutils.c' || echo '$(srcdir)/'`gstplaybackutils.c
+
 mostlyclean-libtool:
 	-rm -f *.lo
 
@@ -981,21 +1005,8 @@
 	pdf pdf-am ps ps-am tags tags-am uninstall uninstall-am \
 	uninstall-pluginLTLIBRARIES
 
+.PRECIOUS: Makefile
 
-Android.mk: Makefile.am $(BUILT_SOURCES)
-	androgenizer \
-	-:PROJECT libgstplayback -:SHARED libgstplayback \
-	 -:TAGS eng debug \
-         -:REL_TOP $(top_srcdir) -:ABS_TOP $(abs_top_srcdir) \
-	 -:SOURCES $(libgstplayback_la_SOURCES) \
-	           $(nodist_libgstplayback_la_SOURCES) \
-	 -:CFLAGS $(DEFS) $(DEFAULT_INCLUDES) $(libgstplayback_la_CFLAGS) $(csp_cflags) \
-	 -:LDFLAGS $(libgstplayback_la_LDFLAGS) \
-	           $(libgstplayback_la_LIBADD) \
-	           -ldl \
-	 -:PASSTHROUGH LOCAL_ARM_MODE:=arm \
-		       LOCAL_MODULE_PATH:='$$(TARGET_OUT)/lib/gstreamer-0.10' \
-	> $@
 
 # 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/playback/gstdecodebin2.c b/gst/playback/gstdecodebin2.c
index db77dbc..85a2ed1 100644
--- a/gst/playback/gstdecodebin2.c
+++ b/gst/playback/gstdecodebin2.c
@@ -183,6 +183,7 @@
   gboolean expose_allstreams;   /* Whether to expose unknow type streams or not */
 
   GList *filtered;              /* elements for which error messages are filtered */
+  GList *filtered_errors;       /* filtered error messages */
 
   GList *buffering_status;      /* element currently buffering messages */
 };
@@ -239,7 +240,6 @@
  * as low as possible (try to aim for 5 buffers) */
 #define AUTO_PLAY_SIZE_BYTES        2 * 1024 * 1024
 #define AUTO_PLAY_SIZE_BUFFERS      5
-#define AUTO_PLAY_ADAPTIVE_SIZE_BUFFERS 2
 #define AUTO_PLAY_SIZE_TIME         0
 
 #define DEFAULT_SUBTITLE_ENCODING NULL
@@ -269,8 +269,7 @@
   PROP_MAX_SIZE_TIME,
   PROP_POST_STREAM_TOPOLOGY,
   PROP_EXPOSE_ALL_STREAMS,
-  PROP_CONNECTION_SPEED,
-  PROP_LAST
+  PROP_CONNECTION_SPEED
 };
 
 static GstBinClass *parent_class;
@@ -285,8 +284,10 @@
     GstCaps * caps, GstDecodeBin * decode_bin);
 
 static void decodebin_set_queue_size (GstDecodeBin * dbin,
-    GstElement * multiqueue, gboolean preroll, gboolean seekable,
-    gboolean adaptive_streaming);
+    GstElement * multiqueue, gboolean preroll, gboolean seekable);
+static void decodebin_set_queue_size_full (GstDecodeBin * dbin,
+    GstElement * multiqueue, gboolean use_buffering, gboolean preroll,
+    gboolean seekable);
 
 static gboolean gst_decode_bin_autoplug_continue (GstElement * element,
     GstPad * pad, GstCaps * caps);
@@ -308,6 +309,8 @@
 static void caps_notify_cb (GstPad * pad, GParamSpec * unused,
     GstDecodeChain * chain);
 
+static void flush_chain (GstDecodeChain * chain, gboolean flushing);
+static void flush_group (GstDecodeGroup * group, gboolean flushing);
 static GstPad *find_sink_pad (GstElement * element);
 static GstStateChangeReturn gst_decode_bin_change_state (GstElement * element,
     GstStateChange transition);
@@ -315,6 +318,8 @@
 
 static gboolean check_upstream_seekable (GstDecodeBin * dbin, GstPad * pad);
 
+static GstCaps *get_pad_caps (GstPad * pad);
+
 #define EXPOSE_LOCK(dbin) G_STMT_START {				\
     GST_LOG_OBJECT (dbin,						\
 		    "expose locking from thread %p",			\
@@ -445,6 +450,7 @@
                                    e.g. no suitable decoder could be found
                                    e.g. stream got EOS without buffers
                                  */
+  gchar *deadend_details;
   GstCaps *endcaps;             /* Caps that were used when linking to the endpad
                                    or that resulted in the deadend
                                  */
@@ -462,7 +468,8 @@
     GstDecodeChain * chain);
 static gboolean gst_decode_chain_is_complete (GstDecodeChain * chain);
 static gboolean gst_decode_chain_expose (GstDecodeChain * chain,
-    GList ** endpads, gboolean * missing_plugin);
+    GList ** endpads, gboolean * missing_plugin,
+    GString * missing_plugin_details, gboolean * last_group);
 static gboolean gst_decode_chain_is_drained (GstDecodeChain * chain);
 static gboolean gst_decode_chain_reset_buffering (GstDecodeChain * chain);
 static gboolean gst_decode_group_is_complete (GstDecodeGroup * group);
@@ -1419,8 +1426,8 @@
 
 static gboolean connect_pad (GstDecodeBin * dbin, GstElement * src,
     GstDecodePad * dpad, GstPad * pad, GstCaps * caps, GValueArray * factories,
-    GstDecodeChain * chain);
-static gboolean connect_element (GstDecodeBin * dbin, GstDecodeElement * delem,
+    GstDecodeChain * chain, gchar ** deadend_details);
+static GList *connect_element (GstDecodeBin * dbin, GstDecodeElement * delem,
     GstDecodeChain * chain);
 static void expose_pad (GstDecodeBin * dbin, GstElement * src,
     GstDecodePad * dpad, GstPad * pad, GstCaps * caps, GstDecodeChain * chain);
@@ -1488,6 +1495,7 @@
   const gchar *classification;
   gboolean is_parser_converter = FALSE;
   gboolean res;
+  gchar *deadend_details = NULL;
 
   GST_DEBUG_OBJECT (dbin, "Pad %s:%s caps:%" GST_PTR_FORMAT,
       GST_DEBUG_PAD_NAME (pad), caps);
@@ -1534,6 +1542,12 @@
       group->no_more_pads = TRUE;
   }
 
+  /* From here on we own a reference to the caps as
+   * we might create new caps below and would need
+   * to unref them later */
+  if (caps)
+    gst_caps_ref (caps);
+
   if ((caps == NULL) || gst_caps_is_empty (caps))
     goto unknown_type;
 
@@ -1550,7 +1564,7 @@
   /* 1. Emit 'autoplug-continue' the result will tell us if this pads needs
    * further autoplugging. Only do this for fixed caps, for unfixed caps
    * we will later come here again from the notify::caps handler. The
-   * problem with unfixed caps is that we can reliably tell if the output
+   * problem with unfixed caps is that, we can't reliably tell if the output
    * is e.g. accepted by a sink because only parts of the possible final
    * caps might be accepted by the sink. */
   if (gst_caps_is_fixed (caps))
@@ -1575,8 +1589,17 @@
 
   /* 1.c when the caps are not fixed yet, we can't be sure what element to
    * connect. We delay autoplugging until the caps are fixed */
-  if (!is_parser_converter && !gst_caps_is_fixed (caps))
+  if (!is_parser_converter && !gst_caps_is_fixed (caps)) {
     goto non_fixed;
+  } else if (!is_parser_converter) {
+    gst_caps_unref (caps);
+    caps = gst_pad_get_current_caps (pad);
+    if (!caps) {
+      GST_DEBUG_OBJECT (dbin, "No final caps set yet, delaying autoplugging");
+      gst_object_unref (dpad);
+      goto setup_caps_delay;
+    }
+  }
 
   /* 1.d else get the factories and if there's no compatible factory goto
    * unknown_type */
@@ -1696,7 +1719,9 @@
       GST_DEBUG ("Trying factory %s",
           gst_plugin_feature_get_name (GST_PLUGIN_FEATURE (factory)));
 
-      if (gst_element_get_factory (src) == factory) {
+      if (gst_element_get_factory (src) == factory ||
+          gst_element_factory_list_is_type (factory,
+              GST_ELEMENT_FACTORY_TYPE_PARSER)) {
         GST_DEBUG ("Skipping factory");
         continue;
       }
@@ -1731,15 +1756,22 @@
     decode_pad_set_target (dpad, p);
     pad = p;
 
-    if (!gst_caps_is_fixed (caps)) {
+    gst_caps_unref (caps);
+
+    caps = gst_pad_get_current_caps (pad);
+    if (!caps) {
+      GST_DEBUG_OBJECT (dbin, "No final caps set yet, delaying autoplugging");
+      gst_object_unref (dpad);
       g_value_array_free (factories);
-      goto non_fixed;
+      goto setup_caps_delay;
     }
   }
 
   /* 1.h else continue autoplugging something from the list. */
   GST_LOG_OBJECT (pad, "Let's continue discovery on this pad");
-  res = connect_pad (dbin, src, dpad, pad, caps, factories, chain);
+  res =
+      connect_pad (dbin, src, dpad, pad, caps, factories, chain,
+      &deadend_details);
 
   /* Need to unref the capsfilter srcpad here if
    * we inserted a capsfilter */
@@ -1752,6 +1784,8 @@
   if (!res)
     goto unknown_type;
 
+  gst_caps_unref (caps);
+
   return;
 
 expose_pad:
@@ -1759,6 +1793,7 @@
     GST_LOG_OBJECT (dbin, "Pad is final. autoplug-continue:%d", apcontinue);
     expose_pad (dbin, src, dpad, pad, caps, chain);
     gst_object_unref (dpad);
+    gst_caps_unref (caps);
     return;
   }
 
@@ -1766,13 +1801,15 @@
   {
     GST_LOG_OBJECT (pad, "Known type, but discarded because not final caps");
     chain->deadend = TRUE;
-    chain->endcaps = gst_caps_ref (caps);
+    chain->endcaps = caps;
     gst_object_replace ((GstObject **) & chain->current_pad, NULL);
 
     /* Try to expose anything */
     EXPOSE_LOCK (dbin);
-    if (gst_decode_chain_is_complete (dbin->decode_chain)) {
-      gst_decode_bin_expose (dbin);
+    if (dbin->decode_chain) {
+      if (gst_decode_chain_is_complete (dbin->decode_chain)) {
+        gst_decode_bin_expose (dbin);
+      }
     }
     EXPOSE_UNLOCK (dbin);
     do_async_done (dbin);
@@ -1784,8 +1821,9 @@
   {
     GST_LOG_OBJECT (pad, "Unknown type, posting message and firing signal");
 
+    chain->deadend_details = deadend_details;
     chain->deadend = TRUE;
-    chain->endcaps = gst_caps_ref (caps);
+    chain->endcaps = caps;
     gst_object_replace ((GstObject **) & chain->current_pad, NULL);
 
     gst_element_post_message (GST_ELEMENT_CAST (dbin),
@@ -1796,26 +1834,17 @@
 
     /* Try to expose anything */
     EXPOSE_LOCK (dbin);
-    if (gst_decode_chain_is_complete (dbin->decode_chain)) {
-      gst_decode_bin_expose (dbin);
+    if (dbin->decode_chain) {
+      if (gst_decode_chain_is_complete (dbin->decode_chain)) {
+        gst_decode_bin_expose (dbin);
+      }
     }
     EXPOSE_UNLOCK (dbin);
 
     if (src == dbin->typefind) {
-      gchar *desc;
-
-      if (caps && !gst_caps_is_empty (caps)) {
-        desc = gst_pb_utils_get_decoder_description (caps);
-        GST_ELEMENT_ERROR (dbin, STREAM, CODEC_NOT_FOUND,
-            (_("A %s plugin is required to play this stream, "
-                    "but not installed."), desc),
-            ("No decoder to handle media type '%s'",
-                gst_structure_get_name (gst_caps_get_structure (caps, 0))));
-        g_free (desc);
-      } else {
+      if (!caps || gst_caps_is_empty (caps)) {
         GST_ELEMENT_ERROR (dbin, STREAM, TYPE_NOT_FOUND,
-            (_("Could not determine type of stream")),
-            ("Stream caps %" GST_PTR_FORMAT, caps));
+            (_("Could not determine type of stream")), (NULL));
       }
       do_async_done (dbin);
     }
@@ -1855,6 +1884,8 @@
      * we have to unref the pad */
     if (is_parser_converter)
       gst_object_unref (pad);
+    if (caps)
+      gst_caps_unref (caps);
 
     return;
   }
@@ -1869,13 +1900,171 @@
 }
 
 static void
-remove_error_filter (GstDecodeBin * dbin, GstElement * element)
+remove_error_filter (GstDecodeBin * dbin, GstElement * element,
+    GstMessage ** error)
 {
+  GList *l;
+
   GST_OBJECT_LOCK (dbin);
   dbin->filtered = g_list_remove (dbin->filtered, element);
+
+  if (error)
+    *error = NULL;
+
+  l = dbin->filtered_errors;
+  while (l) {
+    GstMessage *msg = l->data;
+
+    if (GST_MESSAGE_SRC (msg) == GST_OBJECT_CAST (element)) {
+      /* Get the last error of this element, i.e. the earliest */
+      if (error)
+        gst_message_replace (error, msg);
+      gst_message_unref (msg);
+      l = dbin->filtered_errors = g_list_delete_link (dbin->filtered_errors, l);
+    } else {
+      l = l->next;
+    }
+  }
   GST_OBJECT_UNLOCK (dbin);
 }
 
+typedef struct
+{
+  gboolean ret;
+  GstPad *peer;
+} SendStickyEventsData;
+
+static gboolean
+send_sticky_event (GstPad * pad, GstEvent ** event, gpointer user_data)
+{
+  SendStickyEventsData *data = user_data;
+  gboolean ret;
+
+  ret = gst_pad_send_event (data->peer, gst_event_ref (*event));
+  if (!ret)
+    data->ret = FALSE;
+
+  return data->ret;
+}
+
+static gboolean
+send_sticky_events (GstDecodeBin * dbin, GstPad * pad)
+{
+  SendStickyEventsData data;
+
+  data.ret = TRUE;
+  data.peer = gst_pad_get_peer (pad);
+
+  gst_pad_sticky_events_foreach (pad, send_sticky_event, &data);
+
+  gst_object_unref (data.peer);
+
+  return data.ret;
+}
+
+static gchar *
+error_message_to_string (GstMessage * msg)
+{
+  GError *err;
+  gchar *debug, *message, *full_message;
+
+  gst_message_parse_error (msg, &err, &debug);
+
+  message = gst_error_get_message (err->domain, err->code);
+
+  if (debug)
+    full_message = g_strdup_printf ("%s\n%s\n%s", message, err->message, debug);
+  else
+    full_message = g_strdup_printf ("%s\n%s", message, err->message);
+
+  g_free (message);
+  g_free (debug);
+  g_clear_error (&err);
+
+  return full_message;
+}
+
+/* We consider elements as "simple demuxer" when they are a demuxer
+ * with one and only one ALWAYS source pad.
+ */
+static gboolean
+is_simple_demuxer_factory (GstElementFactory * factory)
+{
+  if (strstr (gst_element_factory_get_metadata (factory,
+              GST_ELEMENT_METADATA_KLASS), "Demuxer")) {
+    const GList *tmp;
+    gint num_alway_srcpads = 0;
+
+    for (tmp = gst_element_factory_get_static_pad_templates (factory);
+        tmp; tmp = tmp->next) {
+      GstStaticPadTemplate *template = tmp->data;
+
+      if (template->direction == GST_PAD_SRC) {
+        if (template->presence == GST_PAD_ALWAYS) {
+          if (num_alway_srcpads >= 0)
+            num_alway_srcpads++;
+        } else {
+          num_alway_srcpads = -1;
+        }
+      }
+
+    }
+
+    if (num_alway_srcpads == 1)
+      return TRUE;
+  }
+
+  return FALSE;
+}
+
+static GstPadProbeReturn
+demuxer_source_pad_probe (GstPad * pad, GstPadProbeInfo * info,
+    gpointer user_data)
+{
+  GstEvent *event = GST_PAD_PROBE_INFO_EVENT (info);
+  GstDecodeGroup *group = (GstDecodeGroup *) user_data;
+  GstDecodeChain *parent_chain = group->parent;
+
+  GST_DEBUG_OBJECT (pad, "Saw event %s", GST_EVENT_TYPE_NAME (event));
+  /* Check if we are the active group, if not we need to proxy the flush
+   * events to the other groups (of which at least one is exposed, ensuring
+   * flushing properly propagates downstream of decodebin */
+  if (parent_chain->active_group == group)
+    return GST_PAD_PROBE_OK;
+
+  switch (GST_EVENT_TYPE (event)) {
+    case GST_EVENT_FLUSH_START:
+    case GST_EVENT_FLUSH_STOP:
+    {
+      GList *tmp;
+      GST_DEBUG_OBJECT (pad, "Proxying flush events to inactive groups");
+      /* Proxy to active group */
+      for (tmp = parent_chain->active_group->reqpads; tmp; tmp = tmp->next) {
+        GstPad *reqpad = (GstPad *) tmp->data;
+        gst_pad_send_event (reqpad, gst_event_ref (event));
+      }
+      /* Proxy to other non-active groups (except ourself) */
+      for (tmp = parent_chain->next_groups; tmp; tmp = tmp->next) {
+        GList *tmp2;
+        GstDecodeGroup *tmpgroup = (GstDecodeGroup *) tmp->data;
+        if (tmpgroup != group) {
+          for (tmp2 = tmpgroup->reqpads; tmp2; tmp2 = tmp2->next) {
+            GstPad *reqpad = (GstPad *) tmp2->data;
+            gst_pad_send_event (reqpad, gst_event_ref (event));
+          }
+        }
+      }
+      flush_chain (parent_chain,
+          GST_EVENT_TYPE (event) == GST_EVENT_FLUSH_START);
+    }
+      break;
+    default:
+      break;
+  }
+
+  return GST_PAD_PROBE_OK;
+}
+
 /* connect_pad:
  *
  * Try to connect the given pad to an element created from one of the factories,
@@ -1889,11 +2078,12 @@
 static gboolean
 connect_pad (GstDecodeBin * dbin, GstElement * src, GstDecodePad * dpad,
     GstPad * pad, GstCaps * caps, GValueArray * factories,
-    GstDecodeChain * chain)
+    GstDecodeChain * chain, gchar ** deadend_details)
 {
   gboolean res = FALSE;
   GstPad *mqpad = NULL;
   gboolean is_demuxer = chain->parent && !chain->elements;      /* First pad after the demuxer */
+  GString *error_details = NULL;
 
   g_return_val_if_fail (factories != NULL, FALSE);
   g_return_val_if_fail (factories->n_values > 0, FALSE);
@@ -1908,6 +2098,10 @@
         "is a demuxer, connecting the pad through multiqueue '%s'",
         GST_OBJECT_NAME (chain->parent->multiqueue));
 
+    /* Set a flush-start/-stop probe on the downstream events */
+    gst_pad_add_probe (pad, GST_PAD_PROBE_TYPE_EVENT_FLUSH,
+        demuxer_source_pad_probe, chain->parent, NULL);
+
     decode_pad_set_target (dpad, NULL);
     if (!(mqpad = gst_decode_group_control_demuxer_pad (chain->parent, pad)))
       goto beach;
@@ -1916,6 +2110,8 @@
     decode_pad_set_target (dpad, pad);
   }
 
+  error_details = g_string_new ("");
+
   /* 2. Try to create an element and link to it */
   while (factories->n_values > 0) {
     GstAutoplugSelectResult ret;
@@ -1925,6 +2121,8 @@
     GstPad *sinkpad;
     GParamSpec *pspec;
     gboolean subtitle;
+    GList *to_connect = NULL;
+    gboolean is_parser_converter = FALSE, is_simple_demuxer = FALSE;
 
     /* Set dpad target to pad again, it might've been unset
      * below but we came back here because something failed
@@ -1990,8 +2188,11 @@
      * parser is the only one that does not change the data. A
      * valid example for this would be multiple id3demux in a row.
      */
-    if (strstr (gst_element_factory_get_metadata (factory,
-                GST_ELEMENT_METADATA_KLASS), "Parser")) {
+    is_parser_converter = strstr (gst_element_factory_get_metadata (factory,
+            GST_ELEMENT_METADATA_KLASS), "Parser") != NULL;
+    is_simple_demuxer = is_simple_demuxer_factory (factory);
+
+    if (is_parser_converter) {
       gboolean skip = FALSE;
       GList *l;
 
@@ -2021,6 +2222,7 @@
             gst_plugin_feature_get_name (GST_PLUGIN_FEATURE_CAST (factory)));
         continue;
       }
+
     }
 
     /* emit autoplug-select to see what we should do with it. */
@@ -2053,6 +2255,9 @@
     if ((element = gst_element_factory_create (factory, NULL)) == NULL) {
       GST_WARNING_OBJECT (dbin, "Could not create an element from %s",
           gst_plugin_feature_get_name (GST_PLUGIN_FEATURE (factory)));
+      g_string_append_printf (error_details,
+          "Could not create an element from %s\n",
+          gst_plugin_feature_get_name (GST_PLUGIN_FEATURE (factory)));
       continue;
     }
 
@@ -2067,7 +2272,9 @@
     if (!(gst_bin_add (GST_BIN_CAST (dbin), element))) {
       GST_WARNING_OBJECT (dbin, "Couldn't add %s to the bin",
           GST_ELEMENT_NAME (element));
-      remove_error_filter (dbin, element);
+      remove_error_filter (dbin, element, NULL);
+      g_string_append_printf (error_details, "Couldn't add %s to the bin\n",
+          GST_ELEMENT_NAME (element));
       gst_object_unref (element);
       continue;
     }
@@ -2076,16 +2283,21 @@
     if (!(sinkpad = find_sink_pad (element))) {
       GST_WARNING_OBJECT (dbin, "Element %s doesn't have a sink pad",
           GST_ELEMENT_NAME (element));
-      remove_error_filter (dbin, element);
+      remove_error_filter (dbin, element, NULL);
+      g_string_append_printf (error_details,
+          "Element %s doesn't have a sink pad", GST_ELEMENT_NAME (element));
       gst_bin_remove (GST_BIN (dbin), element);
       continue;
     }
 
     /* ... and try to link */
-    if ((gst_pad_link (pad, sinkpad)) != GST_PAD_LINK_OK) {
+    if ((gst_pad_link_full (pad, sinkpad,
+                GST_PAD_LINK_CHECK_NOTHING)) != GST_PAD_LINK_OK) {
       GST_WARNING_OBJECT (dbin, "Link failed on pad %s:%s",
           GST_DEBUG_PAD_NAME (sinkpad));
-      remove_error_filter (dbin, element);
+      remove_error_filter (dbin, element, NULL);
+      g_string_append_printf (error_details, "Link failed on pad %s:%s",
+          GST_DEBUG_PAD_NAME (sinkpad));
       gst_object_unref (sinkpad);
       gst_bin_remove (GST_BIN (dbin), element);
       continue;
@@ -2094,22 +2306,49 @@
     /* ... activate it ... */
     if ((gst_element_set_state (element,
                 GST_STATE_READY)) == GST_STATE_CHANGE_FAILURE) {
+      GstMessage *error_msg;
+
       GST_WARNING_OBJECT (dbin, "Couldn't set %s to READY",
           GST_ELEMENT_NAME (element));
-      remove_error_filter (dbin, element);
+      remove_error_filter (dbin, element, &error_msg);
+
+      if (error_msg) {
+        gchar *error_string = error_message_to_string (error_msg);
+        g_string_append_printf (error_details, "Couldn't set %s to READY:\n%s",
+            GST_ELEMENT_NAME (element), error_string);
+        gst_message_unref (error_msg);
+        g_free (error_string);
+      } else {
+        g_string_append_printf (error_details, "Couldn't set %s to READY",
+            GST_ELEMENT_NAME (element));
+      }
       gst_object_unref (sinkpad);
       gst_bin_remove (GST_BIN (dbin), element);
       continue;
     }
 
-    /* Stop filtering errors. */
-    remove_error_filter (dbin, element);
-
     /* check if we still accept the caps on the pad after setting
      * the element to READY */
     if (!gst_pad_query_accept_caps (sinkpad, caps)) {
+      GstMessage *error_msg;
+
       GST_WARNING_OBJECT (dbin, "Element %s does not accept caps",
           GST_ELEMENT_NAME (element));
+
+      remove_error_filter (dbin, element, &error_msg);
+
+      if (error_msg) {
+        gchar *error_string = error_message_to_string (error_msg);
+        g_string_append_printf (error_details,
+            "Element %s does not accept caps:\n%s", GST_ELEMENT_NAME (element),
+            error_string);
+        gst_message_unref (error_msg);
+        g_free (error_string);
+      } else {
+        g_string_append_printf (error_details,
+            "Element %s does not accept caps", GST_ELEMENT_NAME (element));
+      }
+
       gst_element_set_state (element, GST_STATE_NULL);
       gst_object_unref (sinkpad);
       gst_bin_remove (GST_BIN (dbin), element);
@@ -2128,7 +2367,7 @@
     chain->adaptive_demuxer = is_adaptive_demuxer_element (element);
 
     /* For adaptive streaming demuxer we insert a multiqueue after
-     * this demuxer. This multiqueue will get one fragment per buffer.
+     * this demuxer.
      * Now for the case where we have a container stream inside these
      * buffers, another demuxer will be plugged and after this second
      * demuxer there will be a second multiqueue. This second multiqueue
@@ -2149,7 +2388,7 @@
     CHAIN_MUTEX_UNLOCK (chain);
 
     /* Set connection-speed property if needed */
-    if (chain->demuxer == TRUE) {
+    if (chain->demuxer) {
       GParamSpec *pspec;
 
       if ((pspec = g_object_class_find_property (G_OBJECT_GET_CLASS (element),
@@ -2181,7 +2420,7 @@
           wrong_type = TRUE;
         }
 
-        if (wrong_type == FALSE) {
+        if (!wrong_type) {
           GST_DEBUG_OBJECT (dbin, "setting connection-speed=%" G_GUINT64_FORMAT
               " to demuxer element", speed);
 
@@ -2190,9 +2429,6 @@
       }
     }
 
-    /* link this element further */
-    connect_element (dbin, delem, chain);
-
     /* try to configure the subtitle encoding property when we can */
     pspec = g_object_class_find_property (G_OBJECT_GET_CLASS (element),
         "subtitle-encoding");
@@ -2208,15 +2444,62 @@
       subtitle = FALSE;
     }
 
+    /* link this element further */
+    to_connect = connect_element (dbin, delem, chain);
+
+    if ((is_simple_demuxer || is_parser_converter) && to_connect) {
+      GList *l;
+      for (l = to_connect; l; l = g_list_next (l)) {
+        GstPad *opad = GST_PAD_CAST (l->data);
+        GstCaps *ocaps;
+
+        ocaps = get_pad_caps (opad);
+        analyze_new_pad (dbin, delem->element, opad, ocaps, chain);
+        if (ocaps)
+          gst_caps_unref (ocaps);
+
+        gst_object_unref (opad);
+      }
+      g_list_free (to_connect);
+      to_connect = NULL;
+    }
+
     /* Bring the element to the state of the parent */
+
+    /* First lock element's sinkpad stream lock so no data reaches
+     * the possible new element added when caps are sent by element
+     * while we're still sending sticky events */
+    GST_PAD_STREAM_LOCK (sinkpad);
+
     if ((gst_element_set_state (element,
-                GST_STATE_PAUSED)) == GST_STATE_CHANGE_FAILURE) {
+                GST_STATE_PAUSED)) == GST_STATE_CHANGE_FAILURE ||
+        !send_sticky_events (dbin, pad)) {
       GstDecodeElement *dtmp = NULL;
       GstElement *tmp = NULL;
+      GstMessage *error_msg;
+
+      GST_PAD_STREAM_UNLOCK (sinkpad);
 
       GST_WARNING_OBJECT (dbin, "Couldn't set %s to PAUSED",
           GST_ELEMENT_NAME (element));
 
+      g_list_foreach (to_connect, (GFunc) gst_object_unref, NULL);
+      g_list_free (to_connect);
+      to_connect = NULL;
+
+      remove_error_filter (dbin, element, &error_msg);
+
+      if (error_msg) {
+        gchar *error_string = error_message_to_string (error_msg);
+        g_string_append_printf (error_details, "Couldn't set %s to PAUSED:\n%s",
+            GST_ELEMENT_NAME (element), error_string);
+        gst_message_unref (error_msg);
+        g_free (error_string);
+      } else {
+        g_string_append_printf (error_details, "Couldn't set %s to PAUSED",
+            GST_ELEMENT_NAME (element));
+      }
+
       /* Remove all elements in this chain that were just added. No
        * other thread could've added elements in the meantime */
       CHAIN_MUTEX_LOCK (chain);
@@ -2270,8 +2553,15 @@
       CHAIN_MUTEX_UNLOCK (chain);
 
       continue;
+    } else {
+      /* Everything went well, the spice must flow now */
+      GST_PAD_STREAM_UNLOCK (sinkpad);
     }
 
+    /* Remove error filter now, from now on we can't gracefully
+     * handle errors of the element anymore */
+    remove_error_filter (dbin, element, NULL);
+
     /* Now let the bin handle the state */
     gst_element_set_locked_state (element, FALSE);
 
@@ -2283,6 +2573,23 @@
       SUBTITLE_UNLOCK (dbin);
     }
 
+    if (to_connect) {
+      GList *l;
+      for (l = to_connect; l; l = g_list_next (l)) {
+        GstPad *opad = GST_PAD_CAST (l->data);
+        GstCaps *ocaps;
+
+        ocaps = get_pad_caps (opad);
+        analyze_new_pad (dbin, delem->element, opad, ocaps, chain);
+        if (ocaps)
+          gst_caps_unref (ocaps);
+
+        gst_object_unref (opad);
+      }
+      g_list_free (to_connect);
+      to_connect = NULL;
+    }
+
     res = TRUE;
     break;
   }
@@ -2291,6 +2598,12 @@
   if (mqpad)
     gst_object_unref (mqpad);
 
+  if (error_details)
+    *deadend_details = g_string_free (error_details, (error_details->len == 0
+            || res));
+  else
+    *deadend_details = NULL;
+
   return res;
 }
 
@@ -2312,13 +2625,14 @@
   return caps;
 }
 
-static gboolean
+/* Returns a list of pads that can be connected to already and
+ * connects to pad-added and related signals */
+static GList *
 connect_element (GstDecodeBin * dbin, GstDecodeElement * delem,
     GstDecodeChain * chain)
 {
   GstElement *element = delem->element;
   GList *pads;
-  gboolean res = TRUE;
   gboolean dynamic = FALSE;
   GList *to_connect = NULL;
 
@@ -2396,21 +2710,9 @@
         G_CALLBACK (no_more_pads_cb), chain);
   }
 
-  /* 3. for every available pad, connect it */
-  for (pads = to_connect; pads; pads = g_list_next (pads)) {
-    GstPad *pad = GST_PAD_CAST (pads->data);
-    GstCaps *caps;
+  /* 3. return all pads that can be connected to already */
 
-    caps = get_pad_caps (pad);
-    analyze_new_pad (dbin, element, pad, caps, chain);
-    if (caps)
-      gst_caps_unref (caps);
-
-    gst_object_unref (pad);
-  }
-  g_list_free (to_connect);
-
-  return res;
+  return to_connect;
 }
 
 /* expose_pad:
@@ -2447,8 +2749,10 @@
   chain->endcaps = gst_caps_ref (caps);
 
   EXPOSE_LOCK (dbin);
-  if (gst_decode_chain_is_complete (dbin->decode_chain)) {
-    gst_decode_bin_expose (dbin);
+  if (dbin->decode_chain) {
+    if (gst_decode_chain_is_complete (dbin->decode_chain)) {
+      gst_decode_bin_expose (dbin);
+    }
   }
   EXPOSE_UNLOCK (dbin);
 
@@ -2555,14 +2859,17 @@
   g_assert (dbin);
   switch (GST_EVENT_TYPE (event)) {
     case GST_EVENT_EOS:
-      GST_DEBUG_OBJECT (dbin, "Received EOS on a non final pad, this stream "
+      GST_DEBUG_OBJECT (pad, "Received EOS on a non final pad, this stream "
           "ended too early");
       chain->deadend = TRUE;
+      chain->drained = TRUE;
       gst_object_replace ((GstObject **) & chain->current_pad, NULL);
       /* we don't set the endcaps because NULL endcaps means early EOS */
+
       EXPOSE_LOCK (dbin);
-      if (gst_decode_chain_is_complete (dbin->decode_chain))
-        gst_decode_bin_expose (dbin);
+      if (dbin->decode_chain)
+        if (gst_decode_chain_is_complete (dbin->decode_chain))
+          gst_decode_bin_expose (dbin);
       EXPOSE_UNLOCK (dbin);
       break;
     default:
@@ -2587,15 +2894,94 @@
     gst_caps_unref (caps);
 
   EXPOSE_LOCK (dbin);
-  if (gst_decode_chain_is_complete (dbin->decode_chain)) {
-    GST_LOG_OBJECT (dbin,
-        "That was the last dynamic object, now attempting to expose the group");
-    if (!gst_decode_bin_expose (dbin))
-      GST_WARNING_OBJECT (dbin, "Couldn't expose group");
+  if (dbin->decode_chain) {
+    if (gst_decode_chain_is_complete (dbin->decode_chain)) {
+      GST_LOG_OBJECT (dbin,
+          "That was the last dynamic object, now attempting to expose the group");
+      if (!gst_decode_bin_expose (dbin))
+        GST_WARNING_OBJECT (dbin, "Couldn't expose group");
+    }
+  } else {
+    GST_DEBUG_OBJECT (dbin, "No decode chain, new pad ignored");
   }
   EXPOSE_UNLOCK (dbin);
 }
 
+static GstPadProbeReturn
+sink_pad_event_probe (GstPad * pad, GstPadProbeInfo * info, gpointer user_data)
+{
+  GstDecodeGroup *group = (GstDecodeGroup *) user_data;
+  GstEvent *event = GST_PAD_PROBE_INFO_EVENT (info);
+  GstPad *peer = gst_pad_get_peer (pad);
+  GstPadProbeReturn proberet = GST_PAD_PROBE_OK;
+
+  GST_DEBUG_OBJECT (pad, "Got upstream event %s", GST_EVENT_TYPE_NAME (event));
+
+  if (peer == NULL) {
+    GST_DEBUG_OBJECT (pad, "We are unlinked !");
+    if (group->parent && group->parent->next_groups) {
+      GstDecodeGroup *last_group =
+          g_list_last (group->parent->next_groups)->data;
+      GST_DEBUG_OBJECT (pad, "We could send the event to another group (%p)",
+          last_group);
+      /* Grab another sinkpad for that last group through which we will forward this event */
+      if (last_group->reqpads) {
+        GstPad *sinkpad = (GstPad *) last_group->reqpads->data;
+        GstPad *otherpeer = gst_pad_get_peer (sinkpad);
+        if (otherpeer) {
+          GST_DEBUG_OBJECT (otherpeer, "Attempting to forward event");
+          if (gst_pad_send_event (otherpeer, gst_event_ref (event))) {
+            proberet = GST_PAD_PROBE_HANDLED;
+          }
+          gst_object_unref (otherpeer);
+        }
+      } else
+        GST_DEBUG_OBJECT (pad, "No request pads, can't forward event");
+    }
+  } else
+    gst_object_unref (peer);
+
+  return proberet;
+}
+
+static GstPadProbeReturn
+sink_pad_query_probe (GstPad * pad, GstPadProbeInfo * info, gpointer user_data)
+{
+  GstDecodeGroup *group = (GstDecodeGroup *) user_data;
+  GstPad *peer = gst_pad_get_peer (pad);
+  GstQuery *query = GST_PAD_PROBE_INFO_QUERY (info);
+  GstPadProbeReturn proberet = GST_PAD_PROBE_OK;
+
+  GST_DEBUG_OBJECT (pad, "Got upstream query %s", GST_QUERY_TYPE_NAME (query));
+
+  if (peer == NULL) {
+    GST_DEBUG_OBJECT (pad, "We are unlinked !");
+    if (group->parent && group->parent->next_groups) {
+      GstDecodeGroup *last_group =
+          g_list_last (group->parent->next_groups)->data;
+      GST_DEBUG_OBJECT (pad, "We could send the query to another group");
+      /* Grab another sinkpad for that last group through which we will forward this event */
+      if (last_group->reqpads) {
+        GstPad *sinkpad = (GstPad *) last_group->reqpads->data;
+        GstPad *otherpeer = gst_pad_get_peer (sinkpad);
+        if (otherpeer) {
+          GST_DEBUG_OBJECT (otherpeer, "Attempting to forward query");
+          if (gst_pad_query (otherpeer, query)) {
+            proberet = GST_PAD_PROBE_HANDLED;
+          } else
+            GST_DEBUG ("FAILURE");
+          gst_object_unref (otherpeer);
+        } else
+          GST_DEBUG_OBJECT (sinkpad, "request pad not connected ??");
+      } else
+        GST_DEBUG_OBJECT (pad, "No request pads ???");
+    }
+  } else
+    gst_object_unref (peer);
+
+  return proberet;
+}
+
 static void
 pad_removed_cb (GstElement * element, GstPad * pad, GstDecodeChain * chain)
 {
@@ -2660,11 +3046,19 @@
   GST_DEBUG_OBJECT (element, "Setting group %p to complete", group);
 
   group->no_more_pads = TRUE;
+  /* this group has prerolled enough to not need more pads,
+   * we can probably set its buffering state to playing now */
+  GST_DEBUG_OBJECT (group->dbin, "Setting group %p multiqueue to "
+      "'playing' buffering mode", group);
+  decodebin_set_queue_size (group->dbin, group->multiqueue, FALSE,
+      (group->parent ? group->parent->seekable : TRUE));
   CHAIN_MUTEX_UNLOCK (chain);
 
   EXPOSE_LOCK (chain->dbin);
-  if (gst_decode_chain_is_complete (chain->dbin->decode_chain)) {
-    gst_decode_bin_expose (chain->dbin);
+  if (chain->dbin->decode_chain) {
+    if (gst_decode_chain_is_complete (chain->dbin->decode_chain)) {
+      gst_decode_bin_expose (chain->dbin);
+    }
   }
   EXPOSE_UNLOCK (chain->dbin);
 }
@@ -2800,9 +3194,11 @@
     return;
 
   GST_DEBUG_OBJECT (dbin, "Reseting multiqueues buffering");
-  CHAIN_MUTEX_LOCK (dbin->decode_chain);
-  gst_decode_chain_reset_buffering (dbin->decode_chain);
-  CHAIN_MUTEX_UNLOCK (dbin->decode_chain);
+  if (dbin->decode_chain) {
+    CHAIN_MUTEX_LOCK (dbin->decode_chain);
+    gst_decode_chain_reset_buffering (dbin->decode_chain);
+    CHAIN_MUTEX_UNLOCK (dbin->decode_chain);
+  }
 }
 
 /****
@@ -2885,7 +3281,7 @@
 static void
 gst_decode_chain_free_internal (GstDecodeChain * chain, gboolean hide)
 {
-  GList *l;
+  GList *l, *set_to_null = NULL;
 
   CHAIN_MUTEX_LOCK (chain);
 
@@ -2945,14 +3341,15 @@
           GST_OBJECT_CAST (chain->dbin))
         gst_bin_remove (GST_BIN_CAST (chain->dbin), delem->capsfilter);
       if (!hide) {
-        gst_element_set_state (delem->capsfilter, GST_STATE_NULL);
+        set_to_null =
+            g_list_append (set_to_null, gst_object_ref (delem->capsfilter));
       }
     }
 
     if (GST_OBJECT_PARENT (element) == GST_OBJECT_CAST (chain->dbin))
       gst_bin_remove (GST_BIN_CAST (chain->dbin), element);
     if (!hide) {
-      gst_element_set_state (element, GST_STATE_NULL);
+      set_to_null = g_list_append (set_to_null, gst_object_ref (element));
     }
 
     SUBTITLE_LOCK (chain->dbin);
@@ -2979,8 +3376,10 @@
 
   if (chain->endpad) {
     if (chain->endpad->exposed) {
-      gst_element_remove_pad (GST_ELEMENT_CAST (chain->dbin),
-          GST_PAD_CAST (chain->endpad));
+      GstPad *endpad = GST_PAD_CAST (chain->endpad);
+      gst_pad_push_event (endpad, gst_event_new_flush_start ());
+      gst_pad_push_event (endpad, gst_event_new_flush_stop (FALSE));
+      gst_element_remove_pad (GST_ELEMENT_CAST (chain->dbin), endpad);
     }
 
     decode_pad_set_target (chain->endpad, NULL);
@@ -3005,10 +3404,20 @@
     gst_caps_unref (chain->endcaps);
     chain->endcaps = NULL;
   }
+  g_free (chain->deadend_details);
+  chain->deadend_details = NULL;
 
   GST_DEBUG_OBJECT (chain->dbin, "%s chain %p", (hide ? "Hidden" : "Freed"),
       chain);
   CHAIN_MUTEX_UNLOCK (chain);
+
+  while (set_to_null) {
+    GstElement *element = set_to_null->data;
+    set_to_null = g_list_delete_link (set_to_null, set_to_null);
+    gst_element_set_state (element, GST_STATE_NULL);
+    gst_object_unref (element);
+  }
+
   if (!hide) {
     g_mutex_clear (&chain->lock);
     g_slice_free (GstDecodeChain, chain);
@@ -3073,6 +3482,12 @@
       queue);
 
   group->overrun = TRUE;
+  /* this group has prerolled enough to not need more pads,
+   * we can probably set its buffering state to playing now */
+  GST_DEBUG_OBJECT (group->dbin, "Setting group %p multiqueue to "
+      "'playing' buffering mode", group);
+  decodebin_set_queue_size (group->dbin, group->multiqueue, FALSE,
+      (group->parent ? group->parent->seekable : TRUE));
 
   /* FIXME: We should make sure that everything gets exposed now
    * even if child chains are not complete because the will never
@@ -3081,11 +3496,13 @@
    */
 
   EXPOSE_LOCK (dbin);
-  if (gst_decode_chain_is_complete (dbin->decode_chain)) {
-    if (!gst_decode_bin_expose (dbin))
-      GST_WARNING_OBJECT (dbin, "Couldn't expose group");
+  if (dbin->decode_chain) {
+    if (gst_decode_chain_is_complete (dbin->decode_chain)) {
+      if (!gst_decode_bin_expose (dbin))
+        GST_WARNING_OBJECT (dbin, "Couldn't expose group");
+    }
   }
-  EXPOSE_UNLOCK (group->dbin);
+  EXPOSE_UNLOCK (dbin);
 }
 
 static void
@@ -3134,7 +3551,7 @@
     }
   }
 
-  GST_DEBUG_OBJECT (group->dbin, "%s group %p", (hide ? "Hided" : "Freed"),
+  GST_DEBUG_OBJECT (group->dbin, "%s group %p", (hide ? "Hid" : "Freed"),
       group);
   if (!hide)
     g_slice_free (GstDecodeGroup, group);
@@ -3174,19 +3591,79 @@
   gst_decode_group_free_internal (group, TRUE);
 }
 
-/* configure queue sizes, this depends on the buffering method and if we are
- * playing or prerolling. */
+/* gst_decode_chain_free_hidden_groups:
+ *
+ * Frees any decode groups that were hidden previously.
+ * This allows keeping memory use from ballooning when
+ * switching chains repeatedly.
+ *
+ * A new throwaway thread will be created to free the
+ * groups, so any delay does not block the setup of a
+ * new group.
+ *
+ * Not MT-safe, call with parent's chain lock!
+ */
+static void
+gst_decode_chain_free_hidden_groups (GList * old_groups)
+{
+  GList *l;
+
+  for (l = old_groups; l; l = l->next) {
+    GstDecodeGroup *group = l->data;
+
+    gst_decode_group_free (group);
+  }
+  g_list_free (old_groups);
+}
+
+static void
+gst_decode_chain_start_free_hidden_groups_thread (GstDecodeChain * chain)
+{
+  GThread *thread;
+  GError *error = NULL;
+  GList *old_groups;
+
+  old_groups = chain->old_groups;
+  if (!old_groups)
+    return;
+
+  chain->old_groups = NULL;
+  thread = g_thread_try_new ("free-hidden-groups",
+      (GThreadFunc) gst_decode_chain_free_hidden_groups, old_groups, &error);
+  if (!thread || error) {
+    GST_ERROR ("Failed to start free-hidden-groups thread: %s",
+        error ? error->message : "unknown reason");
+    g_clear_error (&error);
+    chain->old_groups = old_groups;
+    return;
+  }
+  GST_DEBUG_OBJECT (chain->dbin, "Started free-hidden-groups thread");
+  /* We do not need to wait for it or get any results from it */
+  g_thread_unref (thread);
+}
+
 static void
 decodebin_set_queue_size (GstDecodeBin * dbin, GstElement * multiqueue,
-    gboolean preroll, gboolean seekable, gboolean adaptive_streaming)
+    gboolean preroll, gboolean seekable)
 {
-  guint max_bytes, max_buffers;
-  guint64 max_time;
   gboolean use_buffering;
 
   /* get the current config from the multiqueue */
   g_object_get (multiqueue, "use-buffering", &use_buffering, NULL);
 
+  decodebin_set_queue_size_full (dbin, multiqueue, use_buffering, preroll,
+      seekable);
+}
+
+/* configure queue sizes, this depends on the buffering method and if we are
+ * playing or prerolling. */
+static void
+decodebin_set_queue_size_full (GstDecodeBin * dbin, GstElement * multiqueue,
+    gboolean use_buffering, gboolean preroll, gboolean seekable)
+{
+  guint max_bytes, max_buffers;
+  guint64 max_time;
+
   GST_DEBUG_OBJECT (multiqueue, "use buffering %d", use_buffering);
 
   if (preroll || use_buffering) {
@@ -3203,14 +3680,6 @@
         max_time = seekable ? AUTO_PREROLL_SEEKABLE_SIZE_TIME :
             AUTO_PREROLL_NOT_SEEKABLE_SIZE_TIME;
     }
-  } else if (adaptive_streaming && dbin->use_buffering) {
-    /* If we're doing adaptive streaming and this is *not*
-     * the multiqueue doing the buffering messages, we only
-     * want a buffers limit here
-     */
-    max_buffers = AUTO_PLAY_ADAPTIVE_SIZE_BUFFERS;
-    max_time = 0;
-    max_bytes = 0;
   } else {
     /* update runtime limits. At runtime, we try to keep the amount of buffers
      * in the queues as low as possible (but at least 5 buffers). */
@@ -3218,9 +3687,6 @@
       max_bytes = 0;
     else if ((max_bytes = dbin->max_size_bytes) == 0)
       max_bytes = AUTO_PLAY_SIZE_BYTES;
-    /* if we're after an adaptive streaming demuxer keep
-     * a lower number of buffers as they are usually very
-     * large */
     if ((max_buffers = dbin->max_size_buffers) == 0)
       max_buffers = AUTO_PLAY_SIZE_BUFFERS;
     /* this is a multiqueue with disabled buffering, don't limit max_time */
@@ -3231,7 +3697,7 @@
   }
 
   GST_DEBUG_OBJECT (multiqueue, "setting limits %u bytes, %u buffers, "
-      "%" G_GUINT64_FORMAT, max_bytes, max_buffers, max_time);
+      "%" G_GUINT64_FORMAT " time", max_bytes, max_buffers, max_time);
   g_object_set (multiqueue,
       "max-size-bytes", max_bytes, "max-size-time", max_time,
       "max-size-buffers", max_buffers, NULL);
@@ -3272,8 +3738,7 @@
       gst_object_unref (pad);
     }
   }
-  decodebin_set_queue_size (dbin, mq, TRUE, seekable,
-      (parent ? parent->adaptive_demuxer : FALSE));
+  decodebin_set_queue_size_full (dbin, mq, FALSE, TRUE, seekable);
 
   group->overrunsig = g_signal_connect (mq, "overrun",
       G_CALLBACK (multi_queue_overrun_cb), group);
@@ -3324,7 +3789,8 @@
     return NULL;
   }
 
-  if ((gst_pad_link (pad, sinkpad) != GST_PAD_LINK_OK)) {
+  if ((gst_pad_link_full (pad, sinkpad,
+              GST_PAD_LINK_CHECK_NOTHING) != GST_PAD_LINK_OK)) {
     GST_ERROR_OBJECT (dbin, "Couldn't link demuxer and multiqueue");
     goto error;
   }
@@ -3338,6 +3804,11 @@
         sinkpad);
     goto error;
   }
+  gst_pad_add_probe (sinkpad, GST_PAD_PROBE_TYPE_EVENT_UPSTREAM,
+      sink_pad_event_probe, group, NULL);
+  gst_pad_add_probe (sinkpad, GST_PAD_PROBE_TYPE_QUERY_UPSTREAM,
+      sink_pad_query_probe, group, NULL);
+
   CHAIN_MUTEX_LOCK (group->parent);
   group->reqpads = g_list_prepend (group->reqpads, gst_object_ref (sinkpad));
   CHAIN_MUTEX_UNLOCK (group->parent);
@@ -3429,6 +3900,68 @@
   return complete;
 }
 
+/* Flushing group/chains */
+static void
+flush_group (GstDecodeGroup * group, gboolean flushing)
+{
+  GList *tmp;
+
+  GST_DEBUG ("group %p flushing:%d", group, flushing);
+
+  if (group->drained == flushing)
+    return;
+  for (tmp = group->children; tmp; tmp = tmp->next) {
+    GstDecodeChain *chain = (GstDecodeChain *) tmp->data;
+    flush_chain (chain, flushing);
+  }
+  GST_DEBUG ("Setting group %p to drained:%d", group, flushing);
+  group->drained = flushing;
+}
+
+static void
+flush_chain (GstDecodeChain * chain, gboolean flushing)
+{
+  GList *tmp;
+  GstDecodeBin *dbin = chain->dbin;
+
+  GST_DEBUG_OBJECT (dbin, "chain %p (pad %s:%s) flushing:%d", chain,
+      GST_DEBUG_PAD_NAME (chain->pad), flushing);
+  if (chain->drained == flushing)
+    return;
+  /* if unflushing, check if we should switch to last group */
+  if (flushing == FALSE && chain->next_groups) {
+    GstDecodeGroup *target_group =
+        (GstDecodeGroup *) g_list_last (chain->next_groups)->data;
+    gst_decode_chain_start_free_hidden_groups_thread (chain);
+    /* Hide active group (we're sure it's not that one we'll be using) */
+    GST_DEBUG_OBJECT (dbin, "Switching from active group %p to group %p",
+        chain->active_group, target_group);
+    gst_decode_group_hide (chain->active_group);
+    chain->old_groups = g_list_prepend (chain->old_groups, chain->active_group);
+    chain->active_group = target_group;
+    /* Hide all groups but the target_group */
+    for (tmp = chain->next_groups; tmp; tmp = tmp->next) {
+      GstDecodeGroup *group = (GstDecodeGroup *) tmp->data;
+      if (group != target_group) {
+        gst_decode_group_hide (group);
+        chain->old_groups = g_list_prepend (chain->old_groups, group);
+      }
+    }
+    /* Clear next groups */
+    g_list_free (chain->next_groups);
+    chain->next_groups = NULL;
+  }
+  /* Mark all groups as flushing */
+  if (chain->active_group)
+    flush_group (chain->active_group, flushing);
+  for (tmp = chain->next_groups; tmp; tmp = tmp->next) {
+    GstDecodeGroup *group = (GstDecodeGroup *) tmp->data;
+    flush_group (group, flushing);
+  }
+  GST_DEBUG ("Setting chain %p to drained:%d", chain, flushing);
+  chain->drained = flushing;
+}
+
 static gboolean
 drain_and_switch_chains (GstDecodeChain * chain, GstDecodePad * drainpad,
     gboolean * last_group, gboolean * drained, gboolean * switched);
@@ -3491,8 +4024,8 @@
   gboolean handled = FALSE;
   GstDecodeBin *dbin = chain->dbin;
 
-  GST_DEBUG ("Checking chain %p (target pad %s:%s)",
-      chain, GST_DEBUG_PAD_NAME (drainpad));
+  GST_DEBUG ("Checking chain %p %s:%s (target pad %s:%s)",
+      chain, GST_DEBUG_PAD_NAME (chain->pad), GST_DEBUG_PAD_NAME (drainpad));
 
   CHAIN_MUTEX_LOCK (chain);
 
@@ -3503,7 +4036,7 @@
 
   if (chain->endpad) {
     /* Check if we're reached the target endchain */
-    if (chain == drainpad->chain) {
+    if (drainpad != NULL && chain == drainpad->chain) {
       GST_DEBUG ("Found the target chain");
       drainpad->drained = TRUE;
       handled = TRUE;
@@ -3524,10 +4057,11 @@
         last_group, &subdrained, switched);
 
     /* The group is drained, see if we can switch to another */
-    if (handled && subdrained && !*switched) {
+    if ((handled || drainpad == NULL) && subdrained && !*switched) {
       if (chain->next_groups) {
         /* Switch to next group */
         GST_DEBUG_OBJECT (dbin, "Hiding current group %p", chain->active_group);
+        gst_decode_chain_start_free_hidden_groups_thread (chain);
         gst_decode_group_hide (chain->active_group);
         chain->old_groups =
             g_list_prepend (chain->old_groups, chain->active_group);
@@ -3576,16 +4110,18 @@
   GstDecodeBin *dbin = chain->dbin;
 
   GST_LOG_OBJECT (dbin, "pad %p", pad);
-  drain_and_switch_chains (dbin->decode_chain, pad, &last_group, &drained,
-      &switched);
+  EXPOSE_LOCK (dbin);
+  if (dbin->decode_chain) {
+    drain_and_switch_chains (dbin->decode_chain, pad, &last_group, &drained,
+        &switched);
 
-  if (switched) {
-    /* If we resulted in a group switch, expose what's needed */
-    EXPOSE_LOCK (dbin);
-    if (gst_decode_chain_is_complete (dbin->decode_chain))
-      gst_decode_bin_expose (dbin);
-    EXPOSE_UNLOCK (dbin);
+    if (switched) {
+      /* If we resulted in a group switch, expose what's needed */
+      if (gst_decode_chain_is_complete (dbin->decode_chain))
+        gst_decode_bin_expose (dbin);
+    }
   }
+  EXPOSE_UNLOCK (dbin);
 
   return last_group;
 }
@@ -3679,6 +4215,9 @@
     CHAIN_MUTEX_UNLOCK (chain);
   }
 
+  decodebin_set_queue_size_full (group->dbin, group->multiqueue, !ret,
+      FALSE, (group->parent ? group->parent->seekable : TRUE));
+
   if (ret) {
     /* all chains are buffering already, no need to do it here */
     g_object_set (group->multiqueue, "use-buffering", FALSE, NULL);
@@ -3687,9 +4226,6 @@
         "low-percent", group->dbin->low_percent,
         "high-percent", group->dbin->high_percent, NULL);
   }
-  decodebin_set_queue_size (group->dbin, group->multiqueue, FALSE,
-      (group->parent ? group->parent->seekable : TRUE),
-      (group->parent ? group->parent->adaptive_demuxer : FALSE));
 
   GST_DEBUG_OBJECT (group->dbin, "Setting %s buffering to %d",
       GST_ELEMENT_NAME (group->multiqueue), !ret);
@@ -3937,7 +4473,8 @@
 static gboolean
 debug_sticky_event (GstPad * pad, GstEvent ** event, gpointer user_data)
 {
-  GST_DEBUG_OBJECT (pad, "sticky event %s", GST_EVENT_TYPE_NAME (*event));
+  GST_DEBUG_OBJECT (pad, "sticky event %s (%p)", GST_EVENT_TYPE_NAME (*event),
+      *event);
   return TRUE;
 }
 
@@ -3947,15 +4484,25 @@
 static gboolean
 gst_decode_bin_expose (GstDecodeBin * dbin)
 {
-  GList *tmp, *endpads = NULL;
-  gboolean missing_plugin = FALSE;
-  gboolean already_exposed = TRUE;
+  GList *tmp, *endpads;
+  gboolean missing_plugin;
+  GString *missing_plugin_details;
+  gboolean already_exposed;
+  gboolean last_group;
+
+retry:
+  endpads = NULL;
+  missing_plugin = FALSE;
+  already_exposed = TRUE;
+  last_group = TRUE;
+
+  missing_plugin_details = g_string_new ("");
 
   GST_DEBUG_OBJECT (dbin, "Exposing currently active chains/groups");
 
   /* Don't expose if we're currently shutting down */
   DYN_LOCK (dbin);
-  if (G_UNLIKELY (dbin->shutdown == TRUE)) {
+  if (G_UNLIKELY (dbin->shutdown)) {
     GST_WARNING_OBJECT (dbin, "Currently, shutting down, aborting exposing");
     DYN_UNLOCK (dbin);
     return FALSE;
@@ -3963,30 +4510,60 @@
   DYN_UNLOCK (dbin);
 
   /* Get the pads that we're going to expose and mark things as exposed */
-  if (!gst_decode_chain_expose (dbin->decode_chain, &endpads, &missing_plugin)) {
+  if (!gst_decode_chain_expose (dbin->decode_chain, &endpads, &missing_plugin,
+          missing_plugin_details, &last_group)) {
     g_list_foreach (endpads, (GFunc) gst_object_unref, NULL);
     g_list_free (endpads);
+    g_string_free (missing_plugin_details, TRUE);
     GST_ERROR_OBJECT (dbin, "Broken chain/group tree");
     g_return_val_if_reached (FALSE);
     return FALSE;
   }
   if (endpads == NULL) {
     if (missing_plugin) {
-      GST_WARNING_OBJECT (dbin, "No suitable plugins found");
-      GST_ELEMENT_ERROR (dbin, CORE, MISSING_PLUGIN, (NULL),
-          ("no suitable plugins found"));
+      if (missing_plugin_details->len > 0) {
+        gchar *details = g_string_free (missing_plugin_details, FALSE);
+        GST_ELEMENT_ERROR (dbin, CORE, MISSING_PLUGIN, (NULL),
+            ("no suitable plugins found:\n%s", details));
+        g_free (details);
+      } else {
+        g_string_free (missing_plugin_details, TRUE);
+        GST_ELEMENT_ERROR (dbin, CORE, MISSING_PLUGIN, (NULL),
+            ("no suitable plugins found"));
+      }
     } else {
       /* in this case, the stream ended without buffers,
        * just post a warning */
-      GST_WARNING_OBJECT (dbin, "All streams finished without buffers");
-      GST_ELEMENT_ERROR (dbin, STREAM, FAILED, (NULL),
-          ("all streams without buffers"));
+      g_string_free (missing_plugin_details, TRUE);
+
+      GST_WARNING_OBJECT (dbin, "All streams finished without buffers. "
+          "Last group: %d", last_group);
+      if (last_group) {
+        GST_ELEMENT_ERROR (dbin, STREAM, FAILED, (NULL),
+            ("all streams without buffers"));
+      } else {
+        gboolean switched = FALSE;
+        gboolean drained = FALSE;
+
+        drain_and_switch_chains (dbin->decode_chain, NULL, &last_group,
+            &drained, &switched);
+        GST_ELEMENT_WARNING (dbin, STREAM, FAILED, (NULL),
+            ("all streams without buffers"));
+        if (switched) {
+          if (gst_decode_chain_is_complete (dbin->decode_chain))
+            goto retry;
+          else
+            return FALSE;
+        }
+      }
     }
 
     do_async_done (dbin);
     return FALSE;
   }
 
+  g_string_free (missing_plugin_details, TRUE);
+
   /* Check if this was called when everything was exposed already */
   for (tmp = endpads; tmp && already_exposed; tmp = tmp->next) {
     GstDecodePad *dpad = tmp->data;
@@ -4087,15 +4664,28 @@
  */
 static gboolean
 gst_decode_chain_expose (GstDecodeChain * chain, GList ** endpads,
-    gboolean * missing_plugin)
+    gboolean * missing_plugin, GString * missing_plugin_details,
+    gboolean * last_group)
 {
   GstDecodeGroup *group;
   GList *l;
   GstDecodeBin *dbin;
 
   if (chain->deadend) {
-    if (chain->endcaps)
+    if (chain->endcaps) {
+      if (chain->deadend_details) {
+        g_string_append (missing_plugin_details, chain->deadend_details);
+        g_string_append_c (missing_plugin_details, '\n');
+      } else {
+        gchar *desc = gst_pb_utils_get_codec_description (chain->endcaps);
+        gchar *caps_str = gst_caps_to_string (chain->endcaps);
+        g_string_append_printf (missing_plugin_details,
+            "Missing decoder: %s (%s)\n", desc, caps_str);
+        g_free (caps_str);
+        g_free (desc);
+      }
       *missing_plugin = TRUE;
+    }
     return TRUE;
   }
 
@@ -4106,6 +4696,9 @@
     return TRUE;
   }
 
+  if (chain->next_groups)
+    *last_group = FALSE;
+
   group = chain->active_group;
   if (!group)
     return FALSE;
@@ -4125,7 +4718,8 @@
   for (l = group->children; l; l = l->next) {
     GstDecodeChain *childchain = l->data;
 
-    if (!gst_decode_chain_expose (childchain, endpads, missing_plugin))
+    if (!gst_decode_chain_expose (childchain, endpads, missing_plugin,
+            missing_plugin_details, last_group))
       return FALSE;
   }
 
@@ -4214,9 +4808,11 @@
   dpad->blocked = TRUE;
 
   EXPOSE_LOCK (dbin);
-  if (gst_decode_chain_is_complete (dbin->decode_chain)) {
-    if (!gst_decode_bin_expose (dbin))
-      GST_WARNING_OBJECT (dbin, "Couldn't expose group");
+  if (dbin->decode_chain) {
+    if (gst_decode_chain_is_complete (dbin->decode_chain)) {
+      if (!gst_decode_bin_expose (dbin))
+        GST_WARNING_OBJECT (dbin, "Couldn't expose group");
+    }
   }
   EXPOSE_UNLOCK (dbin);
 
@@ -4505,6 +5101,7 @@
 {
   GstStateChangeReturn ret = GST_STATE_CHANGE_SUCCESS;
   GstDecodeBin *dbin = GST_DECODE_BIN (element);
+  GstDecodeChain *chain_to_free = NULL;
 
   switch (transition) {
     case GST_STATE_CHANGE_NULL_TO_READY:
@@ -4563,10 +5160,13 @@
       do_async_done (dbin);
       EXPOSE_LOCK (dbin);
       if (dbin->decode_chain) {
-        gst_decode_chain_free (dbin->decode_chain);
+        chain_to_free = dbin->decode_chain;
+        gst_decode_chain_free_internal (dbin->decode_chain, TRUE);
         dbin->decode_chain = NULL;
       }
       EXPOSE_UNLOCK (dbin);
+      if (chain_to_free)
+        gst_decode_chain_free (chain_to_free);
       g_list_free_full (dbin->buffering_status,
           (GDestroyNotify) gst_message_unref);
       dbin->buffering_status = NULL;
@@ -4603,6 +5203,9 @@
   if (GST_MESSAGE_TYPE (msg) == GST_MESSAGE_ERROR) {
     GST_OBJECT_LOCK (dbin);
     drop = (g_list_find (dbin->filtered, GST_MESSAGE_SRC (msg)) != NULL);
+    if (drop)
+      dbin->filtered_errors =
+          g_list_prepend (dbin->filtered_errors, gst_message_ref (msg));
     GST_OBJECT_UNLOCK (dbin);
   } else if (GST_MESSAGE_TYPE (msg) == GST_MESSAGE_BUFFERING) {
     gint perc, msg_perc;
diff --git a/gst/playback/gstplay-enum.h b/gst/playback/gstplay-enum.h
index 0c75b53..1e0ed37 100644
--- a/gst/playback/gstplay-enum.h
+++ b/gst/playback/gstplay-enum.h
@@ -57,6 +57,7 @@
  *   formats.
  * @GST_PLAY_FLAG_BUFFERING: enable buffering of the demuxed or parsed data.
  * @GST_PLAY_FLAG_DEINTERLACE: deinterlace raw video (if native not forced).
+ * @GST_PLAY_FLAG_SOFT_COLORBALANCE: Use a software filter for colour balance
  * @GST_PLAY_FLAG_FORCE_FILTERS: force audio/video filters to be applied if
  *   set.
  *
diff --git a/gst/playback/gstplaybackutils.c b/gst/playback/gstplaybackutils.c
new file mode 100644
index 0000000..d003c91
--- /dev/null
+++ b/gst/playback/gstplaybackutils.c
@@ -0,0 +1,133 @@
+/* Copyright (C) <2014> Intel Corporation
+ * Copyright (C) <2014> Sreerenj Balachandran <sreerenj.balachandran@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.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <gst/gst.h>
+#include "gstplaybackutils.h"
+
+static GstStaticCaps raw_audio_caps = GST_STATIC_CAPS ("audio/x-raw(ANY)");
+static GstStaticCaps raw_video_caps = GST_STATIC_CAPS ("video/x-raw(ANY)");
+
+/* unref the caps after usage */
+static GstCaps *
+get_template_caps (GstElementFactory * factory, GstPadDirection direction)
+{
+  const GList *templates;
+  GstStaticPadTemplate *templ = NULL;
+  GList *walk;
+
+  templates = gst_element_factory_get_static_pad_templates (factory);
+  for (walk = (GList *) templates; walk; walk = g_list_next (walk)) {
+    templ = walk->data;
+    if (templ->direction == direction)
+      break;
+  }
+  if (templ)
+    return gst_static_caps_get (&templ->static_caps);
+  else
+    return NULL;
+}
+
+static gboolean
+is_included (GList * list, GstCapsFeatures * cf)
+{
+  for (; list; list = list->next) {
+    if (gst_caps_features_is_equal ((GstCapsFeatures *) list->data, cf))
+      return TRUE;
+  }
+  return FALSE;
+}
+
+/* compute the number of common caps features */
+guint
+gst_playback_utils_get_n_common_capsfeatures (GstElementFactory * fact1,
+    GstElementFactory * fact2, GstPlayFlags flags, gboolean isaudioelement)
+{
+  GstCaps *fact1_tmpl_caps, *fact2_tmpl_caps;
+  GstCapsFeatures *fact1_features, *fact2_features;
+  GstStructure *fact1_struct, *fact2_struct;
+  GList *cf_list = NULL;
+  guint fact1_caps_size, fact2_caps_size;
+  guint i, j, n_common_cf = 0;
+  GstCaps *raw_caps =
+      (isaudioelement) ? gst_static_caps_get (&raw_audio_caps) :
+      gst_static_caps_get (&raw_video_caps);
+  GstStructure *raw_struct = gst_caps_get_structure (raw_caps, 0);
+  gboolean native_raw =
+      (isaudioelement ? ! !(flags & GST_PLAY_FLAG_NATIVE_AUDIO) : ! !(flags &
+          GST_PLAY_FLAG_NATIVE_VIDEO));
+
+  fact1_tmpl_caps = get_template_caps (fact1, GST_PAD_SRC);
+  fact2_tmpl_caps = get_template_caps (fact2, GST_PAD_SINK);
+  if (!fact1_tmpl_caps || !fact2_tmpl_caps) {
+    GST_ERROR ("Failed to get template caps from decoder or sink");
+    return 0;
+  }
+
+  fact1_caps_size = gst_caps_get_size (fact1_tmpl_caps);
+  fact2_caps_size = gst_caps_get_size (fact2_tmpl_caps);
+
+  for (i = 0; i < fact1_caps_size; i++) {
+    fact1_features =
+        gst_caps_get_features ((const GstCaps *) fact1_tmpl_caps, i);
+    if (gst_caps_features_is_any (fact1_features))
+      continue;
+    fact1_struct =
+        gst_caps_get_structure ((const GstCaps *) fact1_tmpl_caps, i);
+    for (j = 0; j < fact2_caps_size; j++) {
+
+      fact2_features =
+          gst_caps_get_features ((const GstCaps *) fact2_tmpl_caps, j);
+      if (gst_caps_features_is_any (fact2_features))
+        continue;
+      fact2_struct =
+          gst_caps_get_structure ((const GstCaps *) fact2_tmpl_caps, j);
+
+      /* A common caps feature is given if the caps features are equal
+       * and the structures can intersect. If the NATIVE_AUDIO/NATIVE_VIDEO
+       * flags are not set we also allow if both structures are raw caps with
+       * system memory caps features, because in that case we have converters in
+       * place.
+       */
+      if (gst_caps_features_is_equal (fact1_features, fact2_features) &&
+          (gst_structure_can_intersect (fact1_struct, fact2_struct) ||
+              (!native_raw
+                  && gst_caps_features_is_equal (fact1_features,
+                      GST_CAPS_FEATURES_MEMORY_SYSTEM_MEMORY)
+                  && gst_structure_can_intersect (raw_struct, fact1_struct)
+                  && gst_structure_can_intersect (raw_struct, fact2_struct)))
+          && !is_included (cf_list, fact2_features)) {
+        cf_list = g_list_prepend (cf_list, fact2_features);
+        n_common_cf++;
+      }
+    }
+  }
+  if (cf_list)
+    g_list_free (cf_list);
+
+  gst_caps_unref (fact1_tmpl_caps);
+  gst_caps_unref (fact2_tmpl_caps);
+
+  return n_common_cf;
+}
diff --git a/gst/playback/gstplaybackutils.h b/gst/playback/gstplaybackutils.h
new file mode 100644
index 0000000..c9f895e
--- /dev/null
+++ b/gst/playback/gstplaybackutils.h
@@ -0,0 +1,37 @@
+/* Copyright (C) <2014> Intel Corporation
+ * Copyright (C) <2014> Sreerenj Balachandran <sreerenj.balachandran@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_PLAYBACK_UTILS_H__
+#define __GST_PLAYBACK_UTILS_H__
+
+G_BEGIN_DECLS
+
+#include <gst/gst.h>
+#include "gstplay-enum.h"
+
+guint
+gst_playback_utils_get_n_common_capsfeatures (GstElementFactory * fact1,
+                                        GstElementFactory * fact2,
+                                        GstPlayFlags flags,
+                                        gboolean isaudioelement);
+G_END_DECLS
+
+#endif /* __GST_PLAYBACK_UTILS_H__ */
diff --git a/gst/playback/gstplaybin2.c b/gst/playback/gstplaybin2.c
index 2b7416e..b4e90fc 100644
--- a/gst/playback/gstplaybin2.c
+++ b/gst/playback/gstplaybin2.c
@@ -154,8 +154,8 @@
  * switch (GST_MESSAGE_TYPE (msg)) {
  *   case GST_MESSAGE_BUFFERING: {
  *     gint percent = 0;
- *     gst_message_parse_buffering (msg, &amp;percent);
- *     g_print ("Buffering (%%u percent done)", percent);
+ *     gst_message_parse_buffering (msg, &percent);
+ *     g_print ("Buffering (%u percent done)", percent);
  *     break;
  *   }
  *   ...
@@ -199,18 +199,18 @@
  * <refsect2>
  * <title>Examples</title>
  * |[
- * gst-launch -v playbin uri=file:///path/to/somefile.avi
+ * gst-launch-1.0 -v playbin uri=file:///path/to/somefile.mp4
  * ]| This will play back the given AVI video file, given that the video and
  * audio decoders required to decode the content are installed. Since no
- * special audio sink or video sink is supplied (not possible via gst-launch),
- * playbin will try to find a suitable audio and video sink automatically
- * using the autoaudiosink and autovideosink elements.
+ * special audio sink or video sink is supplied (via playbin's audio-sink or
+ * video-sink properties) playbin will try to find a suitable audio and
+ * video sink automatically using the autoaudiosink and autovideosink elements.
  * |[
- * gst-launch -v playbin uri=cdda://4
+ * gst-launch-1.0 -v playbin uri=cdda://4
  * ]| This will play back track 4 on an audio CD in your disc drive (assuming
  * the drive is detected automatically by the plugin).
  * |[
- * gst-launch -v playbin uri=dvd://
+ * gst-launch-1.0 -v playbin uri=dvd://
  * ]| This will play back the DVD in your disc drive (assuming
  * the drive is detected automatically by the plugin).
  * </refsect2>
@@ -230,6 +230,8 @@
 #include <gst/gst-i18n-plugin.h>
 #include <gst/pbutils/pbutils.h>
 #include <gst/audio/streamvolume.h>
+#include <gst/video/video-info.h>
+#include <gst/video/video-multiview.h>
 #include <gst/video/videooverlay.h>
 #include <gst/video/navigation.h>
 #include <gst/video/colorbalance.h>
@@ -237,6 +239,7 @@
 #include "gstplayback.h"
 #include "gstplaysink.h"
 #include "gstsubtitleoverlay.h"
+#include "gstplaybackutils.h"
 
 GST_DEBUG_CATEGORY_STATIC (gst_play_bin_debug);
 #define GST_CAT_DEFAULT gst_play_bin_debug
@@ -247,6 +250,9 @@
 #define GST_IS_PLAY_BIN(obj)            (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_PLAY_BIN))
 #define GST_IS_PLAY_BIN_CLASS(klass)    (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_PLAY_BIN))
 
+#define ULONG_TO_POINTER(number)        ((gpointer) (guintptr) (number))
+#define POINTER_TO_ULONG(number)        ((guintptr) (number))
+
 #define VOLUME_MAX_DOUBLE 10.0
 
 typedef struct _GstPlayBin GstPlayBin;
@@ -424,6 +430,10 @@
   guint buffer_size;            /* When buffering, the max buffer size (bytes) */
   gboolean force_aspect_ratio;
 
+  /* Multiview/stereoscopic overrides */
+  GstVideoMultiviewFramePacking multiview_mode;
+  GstVideoMultiviewFlags multiview_flags;
+
   /* our play sink */
   GstPlaySink *playsink;
 
@@ -434,6 +444,7 @@
   GMutex dyn_lock;
   /* if we are shutting down or not */
   gint shutdown;
+  gboolean async_pending;       /* async-start has been emitted */
 
   GMutex elements_lock;
   guint32 elements_cookie;
@@ -570,7 +581,8 @@
   PROP_FORCE_ASPECT_RATIO,
   PROP_AUDIO_FILTER,
   PROP_VIDEO_FILTER,
-  PROP_LAST
+  PROP_MULTIVIEW_MODE,
+  PROP_MULTIVIEW_FLAGS
 };
 
 /* signals */
@@ -628,7 +640,8 @@
 static GstPad *gst_play_bin_get_audio_pad (GstPlayBin * playbin, gint stream);
 static GstPad *gst_play_bin_get_text_pad (GstPlayBin * playbin, gint stream);
 
-static gboolean setup_next_source (GstPlayBin * playbin, GstState target);
+static GstStateChangeReturn setup_next_source (GstPlayBin * playbin,
+    GstState target);
 
 static void no_more_pads_cb (GstElement * decodebin, GstSourceGroup * group);
 static void pad_removed_cb (GstElement * decodebin, GstPad * pad,
@@ -985,6 +998,41 @@
           G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
 
   /**
+   * GstPlayBin::video-multiview-mode:
+   *
+   * Set the stereoscopic mode for video streams that don't contain
+   * any information in the stream, so they can be correctly played
+   * as 3D streams. If a video already has multiview information
+   * encoded, this property can override other modes in the set,
+   * but cannot be used to re-interpret MVC or mixed-mono streams.
+   *
+   * See Also: The #GstPlayBin::video-multiview-flags property
+   *
+   */
+  g_object_class_install_property (gobject_klass, PROP_MULTIVIEW_MODE,
+      g_param_spec_enum ("video-multiview-mode",
+          "Multiview Mode Override",
+          "Re-interpret a video stream as one of several frame-packed stereoscopic modes.",
+          GST_TYPE_VIDEO_MULTIVIEW_FRAME_PACKING,
+          GST_VIDEO_MULTIVIEW_FRAME_PACKING_NONE,
+          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+
+  /**
+   * GstPlayBin::video-multiview-flags:
+   *
+   * When overriding the multiview mode of an input stream,
+   * these flags modify details of the view layout.
+   *
+   * See Also: The #GstPlayBin::video-multiview-mode property
+   */
+  g_object_class_install_property (gobject_klass, PROP_MULTIVIEW_FLAGS,
+      g_param_spec_flags ("video-multiview-flags",
+          "Multiview Flags Override",
+          "Override details of the multiview frame layout",
+          GST_TYPE_VIDEO_MULTIVIEW_FLAGS, GST_VIDEO_MULTIVIEW_FLAGS_NONE,
+          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+
+  /**
    * GstPlayBin::about-to-finish
    * @playbin: a #GstPlayBin
    *
@@ -1273,6 +1321,35 @@
 }
 
 static void
+do_async_start (GstPlayBin * playbin)
+{
+  GstMessage *message;
+
+  playbin->async_pending = TRUE;
+
+  message = gst_message_new_async_start (GST_OBJECT_CAST (playbin));
+  GST_BIN_CLASS (parent_class)->handle_message (GST_BIN_CAST (playbin),
+      message);
+}
+
+static void
+do_async_done (GstPlayBin * playbin)
+{
+  GstMessage *message;
+
+  if (playbin->async_pending) {
+    GST_DEBUG_OBJECT (playbin, "posting ASYNC_DONE");
+    message =
+        gst_message_new_async_done (GST_OBJECT_CAST (playbin),
+        GST_CLOCK_TIME_NONE);
+    GST_BIN_CLASS (parent_class)->handle_message (GST_BIN_CAST (playbin),
+        message);
+
+    playbin->async_pending = FALSE;
+  }
+}
+
+static void
 init_group (GstPlayBin * playbin, GstSourceGroup * group)
 {
   /* store the array for the different channels */
@@ -1480,6 +1557,9 @@
   playbin->ring_buffer_max_size = DEFAULT_RING_BUFFER_MAX_SIZE;
 
   playbin->force_aspect_ratio = TRUE;
+
+  playbin->multiview_mode = GST_VIDEO_MULTIVIEW_FRAME_PACKING_NONE;
+  playbin->multiview_flags = GST_VIDEO_MULTIVIEW_FLAGS_NONE;
 }
 
 static void
@@ -1627,8 +1707,13 @@
 static void
 gst_play_bin_set_flags (GstPlayBin * playbin, GstPlayFlags flags)
 {
-  gst_play_sink_set_flags (playbin->playsink, flags);
-  gst_play_sink_reconfigure (playbin->playsink);
+  GstPlayFlags old_flags;
+  old_flags = gst_play_sink_get_flags (playbin->playsink);
+
+  if (flags != old_flags) {
+    gst_play_sink_set_flags (playbin->playsink, flags);
+    gst_play_sink_reconfigure (playbin->playsink);
+  }
 }
 
 static GstPlayFlags
@@ -2293,6 +2378,14 @@
       break;
     case PROP_FLAGS:
       gst_play_bin_set_flags (playbin, g_value_get_flags (value));
+      if (playbin->curr_group) {
+        GST_SOURCE_GROUP_LOCK (playbin->curr_group);
+        if (playbin->curr_group->uridecodebin) {
+          g_object_set (playbin->curr_group->uridecodebin, "download",
+              (g_value_get_flags (value) & GST_PLAY_FLAG_DOWNLOAD) != 0, NULL);
+        }
+        GST_SOURCE_GROUP_UNLOCK (playbin->curr_group);
+      }
       break;
     case PROP_CURRENT_VIDEO:
       gst_play_bin_set_current_video_stream (playbin, g_value_get_int (value));
@@ -2369,11 +2462,29 @@
       break;
     case PROP_RING_BUFFER_MAX_SIZE:
       playbin->ring_buffer_max_size = g_value_get_uint64 (value);
+      if (playbin->curr_group) {
+        GST_SOURCE_GROUP_LOCK (playbin->curr_group);
+        if (playbin->curr_group->uridecodebin) {
+          g_object_set (playbin->curr_group->uridecodebin,
+              "ring-buffer-max-size", playbin->ring_buffer_max_size, NULL);
+        }
+        GST_SOURCE_GROUP_UNLOCK (playbin->curr_group);
+      }
       break;
     case PROP_FORCE_ASPECT_RATIO:
       g_object_set (playbin->playsink, "force-aspect-ratio",
           g_value_get_boolean (value), NULL);
       break;
+    case PROP_MULTIVIEW_MODE:
+      GST_PLAY_BIN_LOCK (playbin);
+      playbin->multiview_mode = g_value_get_enum (value);
+      GST_PLAY_BIN_UNLOCK (playbin);
+      break;
+    case PROP_MULTIVIEW_FLAGS:
+      GST_PLAY_BIN_LOCK (playbin);
+      playbin->multiview_flags = g_value_get_flags (value);
+      GST_PLAY_BIN_UNLOCK (playbin);
+      break;
     default:
       G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
       break;
@@ -2432,7 +2543,6 @@
       g_value_set_string (value, group->uri);
       GST_PLAY_BIN_UNLOCK (playbin);
       break;
-      break;
     }
     case PROP_CURRENT_URI:
     {
@@ -2618,6 +2728,16 @@
       g_value_set_boolean (value, v);
       break;
     }
+    case PROP_MULTIVIEW_MODE:
+      GST_OBJECT_LOCK (playbin);
+      g_value_set_enum (value, playbin->multiview_mode);
+      GST_OBJECT_UNLOCK (playbin);
+      break;
+    case PROP_MULTIVIEW_FLAGS:
+      GST_OBJECT_LOCK (playbin);
+      g_value_set_flags (value, playbin->multiview_flags);
+      GST_OBJECT_UNLOCK (playbin);
+      break;
     default:
       G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
       break;
@@ -2813,7 +2933,7 @@
      * them into warnings and disable the subtitles */
     group = playbin->curr_group;
     if (group && group->suburidecodebin) {
-      if (G_UNLIKELY (gst_object_has_ancestor (msg->src, GST_OBJECT_CAST
+      if (G_UNLIKELY (gst_object_has_as_ancestor (msg->src, GST_OBJECT_CAST
                   (group->suburidecodebin)))) {
         GError *err;
         gchar *debug = NULL;
@@ -2869,6 +2989,11 @@
         gst_bin_remove (bin, group->suburidecodebin);
         gst_element_set_locked_state (group->suburidecodebin, FALSE);
 
+        GST_SOURCE_GROUP_LOCK (group);
+        g_free (group->suburi);
+        group->suburi = NULL;
+        GST_SOURCE_GROUP_UNLOCK (group);
+
         if (group->sub_pending) {
           group->sub_pending = FALSE;
           no_more_pads_cb (NULL, group);
@@ -2957,6 +3082,52 @@
     g_object_notify (G_OBJECT (playbin), property);
 }
 
+static GstCaps *
+update_video_multiview_caps (GstPlayBin * playbin, GstCaps * caps)
+{
+  GstVideoMultiviewMode mv_mode;
+  GstVideoMultiviewMode cur_mv_mode;
+  GstVideoMultiviewFlags mv_flags, cur_mv_flags;
+  GstStructure *s;
+  const gchar *mview_mode_str;
+  GstCaps *out_caps;
+
+  GST_OBJECT_LOCK (playbin);
+  mv_mode = (GstVideoMultiviewMode) playbin->multiview_mode;
+  mv_flags = playbin->multiview_flags;
+  GST_OBJECT_UNLOCK (playbin);
+
+  if (mv_mode == GST_VIDEO_MULTIVIEW_MODE_NONE)
+    return NULL;
+
+  cur_mv_mode = GST_VIDEO_MULTIVIEW_MODE_NONE;
+  cur_mv_flags = GST_VIDEO_MULTIVIEW_FLAGS_NONE;
+
+  s = gst_caps_get_structure (caps, 0);
+
+  gst_structure_get_flagset (s, "multiview-flags", &cur_mv_flags, NULL);
+  if ((mview_mode_str = gst_structure_get_string (s, "multiview-mode")))
+    cur_mv_mode = gst_video_multiview_mode_from_caps_string (mview_mode_str);
+
+  /* We can't override an existing annotated multiview mode, except
+   * maybe (in the future) we could change some flags. */
+  if ((gint) cur_mv_mode > GST_VIDEO_MULTIVIEW_MAX_FRAME_PACKING) {
+    GST_INFO_OBJECT (playbin, "Cannot override existing multiview mode");
+    return NULL;
+  }
+
+  mview_mode_str = gst_video_multiview_mode_to_caps_string (mv_mode);
+  g_assert (mview_mode_str != NULL);
+  out_caps = gst_caps_copy (caps);
+  s = gst_caps_get_structure (out_caps, 0);
+
+  gst_structure_set (s, "multiview-mode", G_TYPE_STRING, mview_mode_str,
+      "multiview-flags", GST_TYPE_VIDEO_MULTIVIEW_FLAGSET, mv_flags,
+      GST_FLAG_SET_MASK_EXACT, NULL);
+
+  return out_caps;
+}
+
 static GstPadProbeReturn
 _uridecodebin_event_probe (GstPad * pad, GstPadProbeInfo * info, gpointer udata)
 {
@@ -3020,6 +3191,26 @@
       GST_SOURCE_GROUP_UNLOCK (group);
       break;
     }
+    case GST_EVENT_CAPS:{
+      GstCaps *caps = NULL;
+      const GstStructure *s;
+      const gchar *name;
+
+      gst_event_parse_caps (event, &caps);
+      /* If video caps, check if we should override multiview flags */
+      s = gst_caps_get_structure (caps, 0);
+      name = gst_structure_get_name (s);
+      if (g_str_has_prefix (name, "video/")) {
+        caps = update_video_multiview_caps (group->playbin, caps);
+        if (caps) {
+          gst_event_unref (event);
+          event = gst_event_new_caps (caps);
+          GST_PAD_PROBE_INFO_DATA (info) = event;
+          gst_caps_unref (caps);
+        }
+      }
+      break;
+    }
     default:
       break;
   }
@@ -3101,6 +3292,8 @@
 
   playbin = group->playbin;
 
+  GST_PLAY_BIN_SHUTDOWN_LOCK (playbin, shutdown);
+
   caps = gst_pad_get_current_caps (pad);
   if (!caps)
     caps = gst_pad_query_caps (pad, NULL);
@@ -3142,8 +3335,10 @@
   }
   /* no combiner found for the media type, don't bother linking it to a
    * combiner. This will leave the pad unlinked and thus ignored. */
-  if (combine == NULL)
+  if (combine == NULL) {
+    GST_PLAY_BIN_SHUTDOWN_UNLOCK (playbin);
     goto unknown_type;
+  }
 
   GST_SOURCE_GROUP_LOCK (group);
   if (combine->combiner == NULL && playbin->have_selector) {
@@ -3189,6 +3384,8 @@
     }
   }
 
+  GST_PLAY_BIN_SHUTDOWN_UNLOCK (playbin);
+
   if (combine->srcpad == NULL) {
     if (combine->combiner) {
       /* save source pad of the combiner */
@@ -3243,7 +3440,7 @@
             G_CALLBACK (notify_tags_cb), ntdata, (GClosureNotify) g_free,
             (GConnectFlags) 0);
         g_object_set_data (G_OBJECT (sinkpad), "playbin.notify_tags_handler",
-            (gpointer) (guintptr) notify_tags_handler);
+            ULONG_TO_POINTER (notify_tags_handler));
       }
 
       /* store the pad in the array */
@@ -3278,7 +3475,7 @@
       gst_pad_add_probe (pad, GST_PAD_PROBE_TYPE_EVENT_DOWNSTREAM,
       _uridecodebin_event_probe, group, NULL);
   g_object_set_data (G_OBJECT (pad), "playbin.event_probe_id",
-      (gpointer) group_id_probe_handler);
+      ULONG_TO_POINTER (group_id_probe_handler));
 
   if (changed) {
     int signal;
@@ -3327,8 +3524,8 @@
 link_failed:
   {
     GST_ERROR_OBJECT (playbin,
-        "failed to link pad %s:%s to combiner, reason %d",
-        GST_DEBUG_PAD_NAME (pad), res);
+        "failed to link pad %s:%s to combiner, reason %s (%d)",
+        GST_DEBUG_PAD_NAME (pad), gst_pad_link_get_name (res), res);
     GST_SOURCE_GROUP_UNLOCK (group);
     goto done;
   }
@@ -3338,6 +3535,12 @@
       ("Failed to get request pad from combiner %p.", combine->combiner));
   GST_SOURCE_GROUP_UNLOCK (group);
   goto done;
+shutdown:
+  {
+    GST_DEBUG ("ignoring, we are shutting down. Pad will be left unlinked");
+    /* not going to done as we didn't request the caps */
+    return;
+  }
 }
 
 /* called when a pad is removed from the uridecodebin. We unlink the pad from
@@ -3360,10 +3563,10 @@
   GST_SOURCE_GROUP_LOCK (group);
 
   if ((group_id_probe_handler =
-          (guintptr) g_object_get_data (G_OBJECT (pad),
-              "playbin.event_probe_id"))) {
+          POINTER_TO_ULONG (g_object_get_data (G_OBJECT (pad),
+                  "playbin.event_probe_id")))) {
     gst_pad_remove_probe (pad, group_id_probe_handler);
-    g_object_set_data (G_OBJECT (pad), "playbin.event_probe_id", 0);
+    g_object_set_data (G_OBJECT (pad), "playbin.event_probe_id", NULL);
   }
 
   if ((combine = g_object_get_data (G_OBJECT (pad), "playbin.combine"))) {
@@ -3389,8 +3592,8 @@
       gulong notify_tags_handler;
 
       notify_tags_handler =
-          (guintptr) g_object_get_data (G_OBJECT (peer),
-          "playbin.notify_tags_handler");
+          POINTER_TO_ULONG (g_object_get_data (G_OBJECT (peer),
+              "playbin.notify_tags_handler"));
       if (notify_tags_handler != 0)
         g_signal_handler_disconnect (G_OBJECT (peer), notify_tags_handler);
       g_object_set_data (G_OBJECT (peer), "playbin.notify_tags_handler", NULL);
@@ -3575,6 +3778,10 @@
 
   GST_PLAY_BIN_SHUTDOWN_UNLOCK (playbin);
 
+  if (configure) {
+    do_async_done (playbin);
+  }
+
   return;
 
 shutdown:
@@ -3744,103 +3951,6 @@
   return strcmp (GST_OBJECT_NAME (fd1), GST_OBJECT_NAME (fd2));
 }
 
-/* unref the caps after usage */
-static GstCaps *
-get_template_caps (GstElementFactory * factory, GstPadDirection direction)
-{
-  const GList *templates;
-  GstStaticPadTemplate *templ = NULL;
-  GList *walk;
-
-  templates = gst_element_factory_get_static_pad_templates (factory);
-  for (walk = (GList *) templates; walk; walk = g_list_next (walk)) {
-    templ = walk->data;
-    if (templ->direction == direction)
-      break;
-  }
-  if (templ)
-    return gst_static_caps_get (&templ->static_caps);
-  else
-    return NULL;
-}
-
-static gboolean
-is_included (GList * list, GstCapsFeatures * cf)
-{
-  for (; list; list = list->next) {
-    if (gst_caps_features_is_equal ((GstCapsFeatures *) list->data, cf))
-      return TRUE;
-  }
-  return FALSE;
-}
-
-/* compute the number of common caps features */
-static guint
-get_n_common_capsfeatures (GstPlayBin * playbin, GstElementFactory * dec,
-    GstElementFactory * sink, gboolean isaudioelement)
-{
-  GstCaps *d_tmpl_caps, *s_tmpl_caps;
-  GstCapsFeatures *d_features, *s_features;
-  GstStructure *d_struct, *s_struct;
-  GList *cf_list = NULL;
-  guint d_caps_size, s_caps_size;
-  guint i, j, n_common_cf = 0;
-  GstCaps *raw_caps =
-      (isaudioelement) ? gst_static_caps_get (&raw_audio_caps) :
-      gst_static_caps_get (&raw_video_caps);
-  GstStructure *raw_struct = gst_caps_get_structure (raw_caps, 0);
-  GstPlayFlags flags = gst_play_bin_get_flags (playbin);
-  gboolean native_raw =
-      (isaudioelement ? ! !(flags & GST_PLAY_FLAG_NATIVE_AUDIO) : ! !(flags &
-          GST_PLAY_FLAG_NATIVE_VIDEO));
-
-  d_tmpl_caps = get_template_caps (dec, GST_PAD_SRC);
-  s_tmpl_caps = get_template_caps (sink, GST_PAD_SINK);
-
-  if (!d_tmpl_caps || !s_tmpl_caps) {
-    GST_ERROR ("Failed to get template caps from decoder or sink");
-    return 0;
-  }
-
-  d_caps_size = gst_caps_get_size (d_tmpl_caps);
-  s_caps_size = gst_caps_get_size (s_tmpl_caps);
-
-  for (i = 0; i < d_caps_size; i++) {
-    d_features = gst_caps_get_features ((const GstCaps *) d_tmpl_caps, i);
-    d_struct = gst_caps_get_structure ((const GstCaps *) d_tmpl_caps, i);
-    for (j = 0; j < s_caps_size; j++) {
-
-      s_features = gst_caps_get_features ((const GstCaps *) s_tmpl_caps, j);
-      s_struct = gst_caps_get_structure ((const GstCaps *) s_tmpl_caps, j);
-
-      /* A common caps feature is given if the caps features are equal
-       * and the structures can intersect. If the NATIVE_AUDIO/NATIVE_VIDEO
-       * flags are not set we also allow if both structures are raw caps with
-       * system memory caps features, because in that case we have converters in
-       * place.
-       */
-      if (gst_caps_features_is_equal (d_features, s_features) &&
-          (gst_structure_can_intersect (d_struct, s_struct) ||
-              (!native_raw
-                  && gst_caps_features_is_equal (d_features,
-                      GST_CAPS_FEATURES_MEMORY_SYSTEM_MEMORY)
-                  && gst_structure_can_intersect (raw_struct, d_struct)
-                  && gst_structure_can_intersect (raw_struct, s_struct)))
-          && !is_included (cf_list, s_features)) {
-        cf_list = g_list_prepend (cf_list, s_features);
-        n_common_cf++;
-      }
-    }
-  }
-  if (cf_list)
-    g_list_free (cf_list);
-
-  gst_caps_unref (d_tmpl_caps);
-  gst_caps_unref (s_tmpl_caps);
-
-  return n_common_cf;
-}
-
 static GSequence *
 avelements_create (GstPlayBin * playbin, gboolean isaudioelement)
 {
@@ -3884,8 +3994,8 @@
       s_factory = (GstElementFactory *) sl->data;
 
       n_common_cf =
-          get_n_common_capsfeatures (playbin, d_factory, s_factory,
-          isaudioelement);
+          gst_playback_utils_get_n_common_capsfeatures (d_factory, s_factory,
+          gst_play_bin_get_flags (playbin), isaudioelement);
       if (n_common_cf < 1)
         continue;
 
@@ -4197,15 +4307,15 @@
     /* Only proxy errors from a fixed sink. If that fails we can just error out
      * early as stuff will fail later anyway */
     if (playbin->audio_sink
-        && gst_object_has_ancestor (GST_MESSAGE_SRC (msg),
+        && gst_object_has_as_ancestor (GST_MESSAGE_SRC (msg),
             GST_OBJECT_CAST (playbin->audio_sink)))
       gst_element_post_message (GST_ELEMENT_CAST (playbin), msg);
     else if (playbin->video_sink
-        && gst_object_has_ancestor (GST_MESSAGE_SRC (msg),
+        && gst_object_has_as_ancestor (GST_MESSAGE_SRC (msg),
             GST_OBJECT_CAST (playbin->video_sink)))
       gst_element_post_message (GST_ELEMENT_CAST (playbin), msg);
     else if (playbin->text_sink
-        && gst_object_has_ancestor (GST_MESSAGE_SRC (msg),
+        && gst_object_has_as_ancestor (GST_MESSAGE_SRC (msg),
             GST_OBJECT_CAST (playbin->text_sink)))
       gst_element_post_message (GST_ELEMENT_CAST (playbin), msg);
     else
@@ -4304,21 +4414,25 @@
     GstSourceGroup * group)
 {
   gboolean ret = TRUE;
-  GstElement *sink;
   GstPad *sinkpad = NULL;
+  gboolean activated_sink;
 
   GST_SOURCE_GROUP_LOCK (group);
 
-  if ((sink = group->text_sink))
-    sinkpad = gst_element_get_static_pad (sink, "sink");
-  if (sinkpad) {
-    GstCaps *sinkcaps;
+  if (group->text_sink &&
+      activate_sink (group->playbin, group->text_sink, &activated_sink)) {
+    sinkpad = gst_element_get_static_pad (group->text_sink, "sink");
+    if (sinkpad) {
+      GstCaps *sinkcaps;
 
-    sinkcaps = gst_pad_query_caps (sinkpad, NULL);
-    if (!gst_caps_is_any (sinkcaps))
-      ret = !gst_pad_query_accept_caps (sinkpad, caps);
-    gst_caps_unref (sinkcaps);
-    gst_object_unref (sinkpad);
+      sinkcaps = gst_pad_query_caps (sinkpad, NULL);
+      if (!gst_caps_is_any (sinkcaps))
+        ret = !gst_pad_query_accept_caps (sinkpad, caps);
+      gst_caps_unref (sinkcaps);
+      gst_object_unref (sinkpad);
+    }
+    if (activated_sink)
+      gst_element_set_state (group->text_sink, GST_STATE_NULL);
   } else {
     GstCaps *subcaps = gst_subtitle_overlay_create_factory_caps ();
     ret = !gst_caps_is_subset (caps, subcaps);
@@ -4331,12 +4445,14 @@
   /* If this is from the subtitle uridecodebin we don't need to
    * check the audio and video sink */
   if (group->suburidecodebin
-      && gst_object_has_ancestor (GST_OBJECT_CAST (element),
+      && gst_object_has_as_ancestor (GST_OBJECT_CAST (element),
           GST_OBJECT_CAST (group->suburidecodebin)))
     goto done;
 
-  if ((sink = group->audio_sink)) {
-    sinkpad = gst_element_get_static_pad (sink, "sink");
+  if (group->audio_sink &&
+      activate_sink (group->playbin, group->audio_sink, &activated_sink)) {
+
+    sinkpad = gst_element_get_static_pad (group->audio_sink, "sink");
     if (sinkpad) {
       GstCaps *sinkcaps;
 
@@ -4346,12 +4462,15 @@
       gst_caps_unref (sinkcaps);
       gst_object_unref (sinkpad);
     }
+    if (activated_sink)
+      gst_element_set_state (group->audio_sink, GST_STATE_NULL);
   }
   if (!ret)
     goto done;
 
-  if ((sink = group->video_sink)) {
-    sinkpad = gst_element_get_static_pad (sink, "sink");
+  if (group->video_sink
+      && activate_sink (group->playbin, group->video_sink, &activated_sink)) {
+    sinkpad = gst_element_get_static_pad (group->video_sink, "sink");
     if (sinkpad) {
       GstCaps *sinkcaps;
 
@@ -4361,6 +4480,8 @@
       gst_caps_unref (sinkcaps);
       gst_object_unref (sinkpad);
     }
+    if (activated_sink)
+      gst_element_set_state (group->video_sink, GST_STATE_NULL);
   }
 
 done:
@@ -4607,7 +4728,7 @@
 
   /* now see if we already have a sink element */
   GST_SOURCE_GROUP_LOCK (group);
-  if (*sinkp) {
+  if (*sinkp && GST_STATE (*sinkp) >= GST_STATE_READY) {
     GstElement *sink = gst_object_ref (*sinkp);
 
     if (sink_accepts_caps (playbin, sink, caps)) {
@@ -4710,7 +4831,7 @@
     /* If this is from the subtitle uridecodebin we don't need to
      * check the audio and video sink */
     if (group->suburidecodebin
-        && gst_object_has_ancestor (GST_OBJECT_CAST (pad),
+        && gst_object_has_as_ancestor (GST_OBJECT_CAST (pad),
             GST_OBJECT_CAST (group->suburidecodebin))) {
       goto done;
     }
@@ -4740,7 +4861,7 @@
     /* If this is from the subtitle uridecodebin we don't need to
      * check the audio and video sink */
     if (group->suburidecodebin
-        && gst_object_has_ancestor (GST_OBJECT_CAST (pad),
+        && gst_object_has_as_ancestor (GST_OBJECT_CAST (pad),
             GST_OBJECT_CAST (group->suburidecodebin))) {
       goto done;
     }
@@ -4881,7 +5002,7 @@
     /* If this is from the subtitle uridecodebin we don't need to
      * check the audio and video sink */
     if (group->suburidecodebin
-        && gst_object_has_ancestor (GST_OBJECT_CAST (pad),
+        && gst_object_has_as_ancestor (GST_OBJECT_CAST (pad),
             GST_OBJECT_CAST (group->suburidecodebin))) {
       goto done;
     }
@@ -4898,7 +5019,7 @@
     /* If this is from the subtitle uridecodebin we don't need to
      * check the audio and video sink */
     if (group->suburidecodebin
-        && gst_object_has_ancestor (GST_OBJECT_CAST (pad),
+        && gst_object_has_as_ancestor (GST_OBJECT_CAST (pad),
             GST_OBJECT_CAST (group->suburidecodebin))) {
       goto done;
     }
@@ -4983,7 +5104,7 @@
 }
 
 /* must be called with PLAY_BIN_LOCK */
-static gboolean
+static GstStateChangeReturn
 activate_group (GstPlayBin * playbin, GstSourceGroup * group, GstState target)
 {
   GstElement *uridecodebin = NULL;
@@ -4992,9 +5113,10 @@
   gboolean audio_sink_activated = FALSE;
   gboolean video_sink_activated = FALSE;
   gboolean text_sink_activated = FALSE;
+  GstStateChangeReturn state_ret;
 
-  g_return_val_if_fail (group->valid, FALSE);
-  g_return_val_if_fail (!group->active, FALSE);
+  g_return_val_if_fail (group->valid, GST_STATE_CHANGE_FAILURE);
+  g_return_val_if_fail (!group->active, GST_STATE_CHANGE_FAILURE);
 
   GST_DEBUG_OBJECT (playbin, "activating group %p", group);
 
@@ -5198,19 +5320,23 @@
         group->sub_pending = FALSE;
       }
       gst_element_set_state (suburidecodebin, GST_STATE_READY);
+      g_free (group->suburi);
+      group->suburi = NULL;
       GST_SOURCE_GROUP_UNLOCK (group);
     }
   }
-  if (gst_element_set_state (uridecodebin, target) == GST_STATE_CHANGE_FAILURE)
+  if ((state_ret =
+          gst_element_set_state (uridecodebin,
+              target)) == GST_STATE_CHANGE_FAILURE)
     goto uridecodebin_failure;
 
   GST_SOURCE_GROUP_LOCK (group);
-  /* alow state changes of the playbin affect the group elements now */
+  /* allow state changes of the playbin affect the group elements now */
   group_set_locked_state_unlocked (playbin, group, FALSE);
   group->active = TRUE;
   GST_SOURCE_GROUP_UNLOCK (group);
 
-  return TRUE;
+  return state_ret;
 
   /* ERRORS */
 no_decodebin:
@@ -5270,13 +5396,23 @@
     group->text_sink = NULL;
 
     if (uridecodebin) {
+      REMOVE_SIGNAL (group->uridecodebin, group->pad_added_id);
+      REMOVE_SIGNAL (group->uridecodebin, group->pad_removed_id);
+      REMOVE_SIGNAL (group->uridecodebin, group->no_more_pads_id);
+      REMOVE_SIGNAL (group->uridecodebin, group->notify_source_id);
+      REMOVE_SIGNAL (group->uridecodebin, group->drained_id);
+      REMOVE_SIGNAL (group->uridecodebin, group->autoplug_factories_id);
+      REMOVE_SIGNAL (group->uridecodebin, group->autoplug_select_id);
+      REMOVE_SIGNAL (group->uridecodebin, group->autoplug_continue_id);
+      REMOVE_SIGNAL (group->uridecodebin, group->autoplug_query_id);
+
       gst_element_set_state (uridecodebin, GST_STATE_NULL);
       gst_bin_remove (GST_BIN_CAST (playbin), uridecodebin);
     }
 
     GST_SOURCE_GROUP_UNLOCK (group);
 
-    return FALSE;
+    return GST_STATE_CHANGE_FAILURE;
   }
 }
 
@@ -5287,8 +5423,8 @@
 {
   gint i;
 
-  g_return_val_if_fail (group->valid, FALSE);
   g_return_val_if_fail (group->active, FALSE);
+  g_return_val_if_fail (group->valid, FALSE);
 
   GST_DEBUG_OBJECT (playbin, "unlinking group %p", group);
 
@@ -5323,7 +5459,7 @@
   /* delete any custom sinks we might have.
    * conditionally set them to null if they aren't inside playsink yet */
   if (group->audio_sink) {
-    if (!gst_object_has_ancestor (GST_OBJECT_CAST (group->audio_sink),
+    if (!gst_object_has_as_ancestor (GST_OBJECT_CAST (group->audio_sink),
             GST_OBJECT_CAST (playbin->playsink))) {
       gst_element_set_state (group->audio_sink, GST_STATE_NULL);
     }
@@ -5331,7 +5467,7 @@
   }
   group->audio_sink = NULL;
   if (group->video_sink) {
-    if (!gst_object_has_ancestor (GST_OBJECT_CAST (group->video_sink),
+    if (!gst_object_has_as_ancestor (GST_OBJECT_CAST (group->video_sink),
             GST_OBJECT_CAST (playbin->playsink))) {
       gst_element_set_state (group->video_sink, GST_STATE_NULL);
     }
@@ -5339,7 +5475,7 @@
   }
   group->video_sink = NULL;
   if (group->text_sink) {
-    if (!gst_object_has_ancestor (GST_OBJECT_CAST (group->text_sink),
+    if (!gst_object_has_as_ancestor (GST_OBJECT_CAST (group->text_sink),
             GST_OBJECT_CAST (playbin->playsink))) {
       gst_element_set_state (group->text_sink, GST_STATE_NULL);
     }
@@ -5382,10 +5518,11 @@
 /* setup the next group to play, this assumes the next_group is valid and
  * configured. It swaps out the current_group and activates the valid
  * next_group. */
-static gboolean
+static GstStateChangeReturn
 setup_next_source (GstPlayBin * playbin, GstState target)
 {
   GstSourceGroup *new_group, *old_group;
+  GstStateChangeReturn state_ret;
 
   GST_DEBUG_OBJECT (playbin, "setup sources");
 
@@ -5411,12 +5548,14 @@
   playbin->next_group = old_group;
 
   /* activate the new group */
-  if (!activate_group (playbin, new_group, target))
+  if ((state_ret =
+          activate_group (playbin, new_group,
+              target)) == GST_STATE_CHANGE_FAILURE)
     goto activate_failed;
 
   GST_PLAY_BIN_UNLOCK (playbin);
 
-  return TRUE;
+  return state_ret;
 
   /* ERRORS */
 no_next_group:
@@ -5425,14 +5564,15 @@
     if (target == GST_STATE_READY && new_group && new_group->uri == NULL)
       GST_ELEMENT_ERROR (playbin, RESOURCE, NOT_FOUND, ("No URI set"), (NULL));
     GST_PLAY_BIN_UNLOCK (playbin);
-    return FALSE;
+    return GST_STATE_CHANGE_FAILURE;
   }
 activate_failed:
   {
     new_group->stream_changed_pending = FALSE;
     GST_DEBUG_OBJECT (playbin, "activate failed");
+    new_group->valid = FALSE;
     GST_PLAY_BIN_UNLOCK (playbin);
-    return FALSE;
+    return GST_STATE_CHANGE_FAILURE;
   }
 }
 
@@ -5498,11 +5638,7 @@
       GST_LOG_OBJECT (playbin, "clearing shutdown flag");
       memset (&playbin->duration, 0, sizeof (playbin->duration));
       g_atomic_int_set (&playbin->shutdown, 0);
-
-      if (!setup_next_source (playbin, GST_STATE_READY)) {
-        ret = GST_STATE_CHANGE_FAILURE;
-        goto failure;
-      }
+      do_async_start (playbin);
       break;
     case GST_STATE_CHANGE_PAUSED_TO_READY:
     async_down:
@@ -5521,7 +5657,7 @@
         break;
     case GST_STATE_CHANGE_READY_TO_NULL:
       /* we go async to PAUSED, so if that fails, we never make it to PAUSED
-       * an no state change PAUSED to READY passes here,
+       * and no state change PAUSED to READY passes here,
        * though it is a nice-to-have ... */
       if (!g_atomic_int_get (&playbin->shutdown)) {
         do_save = TRUE;
@@ -5542,8 +5678,16 @@
 
   switch (transition) {
     case GST_STATE_CHANGE_READY_TO_PAUSED:
+      if ((ret =
+              setup_next_source (playbin,
+                  GST_STATE_PAUSED)) == GST_STATE_CHANGE_FAILURE)
+        goto failure;
+      if (ret == GST_STATE_CHANGE_SUCCESS)
+        ret = GST_STATE_CHANGE_ASYNC;
+
       break;
     case GST_STATE_CHANGE_PLAYING_TO_PAUSED:
+      do_async_done (playbin);
       /* FIXME Release audio device when we implement that */
       break;
     case GST_STATE_CHANGE_PAUSED_TO_READY:
@@ -5639,9 +5783,11 @@
       GstSourceGroup *curr_group;
 
       curr_group = playbin->curr_group;
-      if (curr_group && curr_group->active && curr_group->valid) {
-        /* unlink our pads with the sink */
-        deactivate_group (playbin, curr_group);
+      if (curr_group) {
+        if (curr_group->active && curr_group->valid) {
+          /* unlink our pads with the sink */
+          deactivate_group (playbin, curr_group);
+        }
         curr_group->valid = FALSE;
       }
 
diff --git a/gst/playback/gstplaysink.c b/gst/playback/gstplaysink.c
index 8239c85..aa43111 100644
--- a/gst/playback/gstplaysink.c
+++ b/gst/playback/gstplaysink.c
@@ -105,7 +105,6 @@
   GstElement *volume;           /* element with the volume property */
   gboolean sink_volume;         /* if the volume was provided by the sink */
   gulong notify_volume_id;
-  GstElement *mute;             /* element with the mute property */
   gulong notify_mute_id;
   GstElement *sink;
   GstElement *ts_offset;
@@ -212,6 +211,8 @@
   gboolean audio_pad_blocked;
   GstPad *audio_srcpad_stream_synchronizer;
   GstPad *audio_sinkpad_stream_synchronizer;
+  GstElement *audio_ssync_queue;
+  GstPad *audio_ssync_queue_sinkpad;
   gulong audio_block_id;
   gulong audio_notify_caps_id;
   /* audio tee */
@@ -345,8 +346,7 @@
   PROP_SEND_EVENT_MODE,
   PROP_FORCE_ASPECT_RATIO,
   PROP_VIDEO_FILTER,
-  PROP_AUDIO_FILTER,
-  PROP_LAST
+  PROP_AUDIO_FILTER
 };
 
 /* signals */
@@ -729,7 +729,7 @@
     if (chain->notify_volume_id)
       g_signal_handler_disconnect (chain->volume, chain->notify_volume_id);
     if (chain->notify_mute_id)
-      g_signal_handler_disconnect (chain->mute, chain->notify_mute_id);
+      g_signal_handler_disconnect (chain->volume, chain->notify_mute_id);
     chain->notify_volume_id = chain->notify_mute_id = 0;
   }
 }
@@ -745,6 +745,18 @@
 }
 
 static void
+gst_play_sink_remove_audio_ssync_queue (GstPlaySink * playsink)
+{
+  if (playsink->audio_ssync_queue) {
+    gst_element_set_state (playsink->audio_ssync_queue, GST_STATE_NULL);
+    gst_object_unref (playsink->audio_ssync_queue_sinkpad);
+    gst_bin_remove (GST_BIN_CAST (playsink), playsink->audio_ssync_queue);
+    playsink->audio_ssync_queue = NULL;
+    playsink->audio_ssync_queue_sinkpad = NULL;
+  }
+}
+
+static void
 gst_play_sink_dispose (GObject * object)
 {
   GstPlaySink *playsink;
@@ -1135,12 +1147,10 @@
   playsink->volume = volume;
   chain = (GstPlayAudioChain *) playsink->audiochain;
   if (chain && chain->volume) {
-    GST_LOG_OBJECT (playsink, "elements: volume=%" GST_PTR_FORMAT ", mute=%"
-        GST_PTR_FORMAT "; new volume=%.03f, mute=%d", chain->volume,
-        chain->mute, volume, playsink->mute);
-    /* if there is a mute element or we are not muted, set the volume */
-    if (chain->mute || !playsink->mute)
-      g_object_set (chain->volume, "volume", volume, NULL);
+    GST_LOG_OBJECT (playsink,
+        "elements: volume=%" GST_PTR_FORMAT "; new volume=%.03f, mute=%d",
+        chain->volume, volume, playsink->mute);
+    g_object_set (chain->volume, "volume", volume, NULL);
   } else {
     GST_LOG_OBJECT (playsink, "no volume element");
     playsink->volume_changed = TRUE;
@@ -1158,10 +1168,8 @@
   chain = (GstPlayAudioChain *) playsink->audiochain;
   result = playsink->volume;
   if (chain && chain->volume) {
-    if (chain->mute || !playsink->mute) {
-      g_object_get (chain->volume, "volume", &result, NULL);
-      playsink->volume = result;
-    }
+    g_object_get (chain->volume, "volume", &result, NULL);
+    playsink->volume = result;
   }
   GST_PLAY_SINK_UNLOCK (playsink);
 
@@ -1176,16 +1184,8 @@
   GST_PLAY_SINK_LOCK (playsink);
   playsink->mute = mute;
   chain = (GstPlayAudioChain *) playsink->audiochain;
-  if (chain) {
-    if (chain->mute) {
-      g_object_set (chain->mute, "mute", mute, NULL);
-    } else if (chain->volume) {
-      if (mute)
-        g_object_set (chain->volume, "volume", (gdouble) 0.0, NULL);
-      else
-        g_object_set (chain->volume, "volume", (gdouble) playsink->volume,
-            NULL);
-    }
+  if (chain && chain->volume) {
+    g_object_set (chain->volume, "mute", mute, NULL);
   } else {
     playsink->mute_changed = TRUE;
   }
@@ -1200,8 +1200,8 @@
 
   GST_PLAY_SINK_LOCK (playsink);
   chain = (GstPlayAudioChain *) playsink->audiochain;
-  if (chain && chain->mute) {
-    g_object_get (chain->mute, "mute", &result, NULL);
+  if (chain && chain->volume) {
+    g_object_get (chain->volume, "mute", &result, NULL);
     playsink->mute = result;
   } else {
     result = playsink->mute;
@@ -2020,7 +2020,7 @@
   chain->chain.raw = raw;
 
   /* if the chain was active we don't do anything */
-  if (GST_PLAY_CHAIN (chain)->activated == TRUE)
+  if (GST_PLAY_CHAIN (chain)->activated)
     return TRUE;
 
   /* try to set the sink element to READY again */
@@ -2754,11 +2754,16 @@
       gst_play_sink_find_property_sinks (playsink, chain->sink, "ts-offset",
           G_TYPE_INT64));
 
-  /* check if the sink, or something within the sink, has the volume property.
-   * If it does we don't need to add a volume element.  */
-  elem =
-      gst_play_sink_find_property_sinks (playsink, chain->sink, "volume",
-      G_TYPE_DOUBLE);
+  /* check if the sink, or something within the sink, implements the
+   * streamvolume interface. If it does we don't need to add a volume element.  */
+  if (GST_IS_BIN (chain->sink))
+    elem =
+        gst_bin_get_by_interface (GST_BIN_CAST (chain->sink),
+        GST_TYPE_STREAM_VOLUME);
+  else if (GST_IS_STREAM_VOLUME (chain->sink))
+    elem = gst_object_ref (chain->sink);
+  else
+    elem = NULL;
   chain->notify_volume_id = chain->notify_mute_id = 0;
   if (elem) {
     chain->volume = elem;
@@ -2769,29 +2774,15 @@
     GST_DEBUG_OBJECT (playsink, "the sink has a volume property");
     have_volume = TRUE;
     chain->sink_volume = TRUE;
-    /* if the sink also has a mute property we can use this as well. We'll only
-     * use the mute property if there is a volume property. We can simulate the
-     * mute with the volume otherwise. */
-    chain->mute =
-        gst_play_sink_find_property_sinks (playsink, chain->sink, "mute",
-        G_TYPE_BOOLEAN);
-    if (chain->mute) {
-      GST_DEBUG_OBJECT (playsink, "the sink has a mute property");
-      chain->notify_mute_id = g_signal_connect (chain->mute, "notify::mute",
-          G_CALLBACK (notify_mute_cb), playsink);
-    }
+    chain->notify_mute_id = g_signal_connect (chain->volume, "notify::mute",
+        G_CALLBACK (notify_mute_cb), playsink);
     /* use the sink to control the volume and mute */
     if (playsink->volume_changed) {
       g_object_set (G_OBJECT (chain->volume), "volume", playsink->volume, NULL);
       playsink->volume_changed = FALSE;
     }
     if (playsink->mute_changed) {
-      if (chain->mute) {
-        g_object_set (chain->mute, "mute", playsink->mute, NULL);
-      } else {
-        if (playsink->mute)
-          g_object_set (chain->volume, "volume", (gdouble) 0.0, NULL);
-      }
+      g_object_set (chain->volume, "mute", playsink->mute, NULL);
       playsink->mute_changed = FALSE;
     }
   } else {
@@ -2835,14 +2826,13 @@
             G_CALLBACK (notify_volume_cb), playsink);
 
         /* volume also has the mute property */
-        chain->mute = chain->volume;
-        chain->notify_mute_id = g_signal_connect (chain->mute, "notify::mute",
+        chain->notify_mute_id = g_signal_connect (chain->volume, "notify::mute",
             G_CALLBACK (notify_mute_cb), playsink);
 
         /* configure with the latest volume and mute */
         g_object_set (G_OBJECT (chain->volume), "volume", playsink->volume,
             NULL);
-        g_object_set (G_OBJECT (chain->mute), "mute", playsink->mute, NULL);
+        g_object_set (G_OBJECT (chain->volume), "mute", playsink->mute, NULL);
       }
     }
   }
@@ -2951,7 +2941,7 @@
   chain->chain.raw = raw;
 
   /* if the chain was active we don't do anything */
-  if (GST_PLAY_CHAIN (chain)->activated == TRUE)
+  if (GST_PLAY_CHAIN (chain)->activated)
     return TRUE;
 
   /* try to set the sink element to READY again */
@@ -2967,11 +2957,16 @@
   /* Disconnect signals */
   disconnect_audio_chain (chain, playsink);
 
-  /* check if the sink, or something within the sink, has the volume property.
-   * If it does we don't need to add a volume element.  */
-  elem =
-      gst_play_sink_find_property_sinks (playsink, chain->sink, "volume",
-      G_TYPE_DOUBLE);
+  /* check if the sink, or something within the sink, implements the
+   * streamvolume interface. If it does we don't need to add a volume element.  */
+  if (GST_IS_BIN (chain->sink))
+    elem =
+        gst_bin_get_by_interface (GST_BIN_CAST (chain->sink),
+        GST_TYPE_STREAM_VOLUME);
+  else if (GST_IS_STREAM_VOLUME (chain->sink))
+    elem = gst_object_ref (chain->sink);
+  else
+    elem = NULL;
   if (elem) {
     chain->volume = elem;
 
@@ -2985,19 +2980,10 @@
 
     chain->notify_volume_id = g_signal_connect (chain->volume, "notify::volume",
         G_CALLBACK (notify_volume_cb), playsink);
-    /* if the sink also has a mute property we can use this as well. We'll only
-     * use the mute property if there is a volume property. We can simulate the
-     * mute with the volume otherwise. */
-    chain->mute =
-        gst_play_sink_find_property_sinks (playsink, chain->sink, "mute",
-        G_TYPE_BOOLEAN);
-    if (chain->mute) {
-      GST_DEBUG_OBJECT (playsink, "the sink has a mute property");
-      chain->notify_mute_id = g_signal_connect (chain->mute, "notify::mute",
-          G_CALLBACK (notify_mute_cb), playsink);
-      g_object_set (chain->mute, "mute", playsink->mute, NULL);
-      playsink->mute_changed = FALSE;
-    }
+    chain->notify_mute_id = g_signal_connect (chain->volume, "notify::mute",
+        G_CALLBACK (notify_mute_cb), playsink);
+    g_object_set (chain->volume, "mute", playsink->mute, NULL);
+    playsink->mute_changed = FALSE;
 
     g_object_set (chain->conv, "use-volume", FALSE, NULL);
   } else if (conv) {
@@ -3008,18 +2994,17 @@
 
     if (conv->volume && (playsink->flags & GST_PLAY_FLAG_SOFT_VOLUME)) {
       chain->volume = conv->volume;
-      chain->mute = chain->volume;
 
       chain->notify_volume_id =
           g_signal_connect (chain->volume, "notify::volume",
           G_CALLBACK (notify_volume_cb), playsink);
 
-      chain->notify_mute_id = g_signal_connect (chain->mute, "notify::mute",
+      chain->notify_mute_id = g_signal_connect (chain->volume, "notify::mute",
           G_CALLBACK (notify_mute_cb), playsink);
 
       /* configure with the latest volume and mute */
       g_object_set (G_OBJECT (chain->volume), "volume", playsink->volume, NULL);
-      g_object_set (G_OBJECT (chain->mute), "mute", playsink->mute, NULL);
+      g_object_set (G_OBJECT (chain->volume), "mute", playsink->mute, NULL);
     }
 
     GST_DEBUG_OBJECT (playsink, "reusing existing volume element");
@@ -3470,6 +3455,8 @@
           playsink->audio_sinkpad_stream_synchronizer = NULL;
           gst_object_unref (playsink->audio_srcpad_stream_synchronizer);
           playsink->audio_srcpad_stream_synchronizer = NULL;
+
+          gst_play_sink_remove_audio_ssync_queue (playsink);
         }
 
         add_chain (GST_PLAY_CHAIN (playsink->audiochain), FALSE);
@@ -3486,7 +3473,6 @@
         activate_chain (GST_PLAY_CHAIN (playsink->audiochain), FALSE);
         disconnect_audio_chain (playsink->audiochain, playsink);
         playsink->audiochain->volume = NULL;
-        playsink->audiochain->mute = NULL;
         if (playsink->audiochain->ts_offset)
           gst_object_unref (playsink->audiochain->ts_offset);
         playsink->audiochain->ts_offset = NULL;
@@ -3505,6 +3491,7 @@
       goto no_chain;
 
     if (!playsink->audio_sinkpad_stream_synchronizer) {
+      GstPad *audio_queue_srcpad;
       GValue item = { 0, };
       GstIterator *it;
 
@@ -3519,18 +3506,49 @@
       g_value_unset (&item);
       g_assert (playsink->audio_srcpad_stream_synchronizer);
       gst_iterator_free (it);
+
+      if (need_vis) {
+        GST_DEBUG_OBJECT (playsink, "adding audio stream synchronizer queue");
+        playsink->audio_ssync_queue =
+            gst_element_factory_make ("queue", "audiossyncqueue");
+        if (playsink->audio_ssync_queue == NULL) {
+          post_missing_element_message (playsink, "queue");
+          GST_ELEMENT_WARNING (playsink, CORE, MISSING_PLUGIN,
+              (_("Missing element '%s' - check your GStreamer installation."),
+                  "queue"),
+              ("audio playback and visualizations might not work"));
+        }
+        g_object_set (playsink->audio_ssync_queue, "max-size-buffers",
+            (guint) 1, NULL);
+        gst_bin_add (GST_BIN_CAST (playsink), playsink->audio_ssync_queue);
+        playsink->audio_ssync_queue_sinkpad =
+            gst_element_get_static_pad (playsink->audio_ssync_queue, "sink");
+        audio_queue_srcpad =
+            gst_element_get_static_pad (playsink->audio_ssync_queue, "src");
+        gst_element_sync_state_with_parent (playsink->audio_ssync_queue);
+        gst_pad_link_full (audio_queue_srcpad,
+            playsink->audio_sinkpad_stream_synchronizer,
+            GST_PAD_LINK_CHECK_NOTHING);
+        gst_object_unref (audio_queue_srcpad);
+      }
     }
 
     if (playsink->audiochain) {
+      GstPad *sinkpad;
+
       GST_DEBUG_OBJECT (playsink, "adding audio chain");
       if (playsink->audio_tee_asrc == NULL) {
         playsink->audio_tee_asrc =
             gst_element_get_request_pad (playsink->audio_tee, "src_%u");
       }
+
+      sinkpad = playsink->audio_ssync_queue_sinkpad;
+      if (!sinkpad)
+        sinkpad = playsink->audio_sinkpad_stream_synchronizer;
+
       add_chain (GST_PLAY_CHAIN (playsink->audiochain), TRUE);
       activate_chain (GST_PLAY_CHAIN (playsink->audiochain), TRUE);
-      gst_pad_link_full (playsink->audio_tee_asrc,
-          playsink->audio_sinkpad_stream_synchronizer,
+      gst_pad_link_full (playsink->audio_tee_asrc, sinkpad,
           GST_PAD_LINK_CHECK_NOTHING);
       gst_pad_link_full (playsink->audio_srcpad_stream_synchronizer,
           playsink->audiochain->sinkpad, GST_PAD_LINK_CHECK_NOTHING);
@@ -3556,12 +3574,13 @@
         playsink->audio_sinkpad_stream_synchronizer = NULL;
         gst_object_unref (playsink->audio_srcpad_stream_synchronizer);
         playsink->audio_srcpad_stream_synchronizer = NULL;
+
+        gst_play_sink_remove_audio_ssync_queue (playsink);
       }
 
       if (playsink->audiochain->sink_volume) {
         disconnect_audio_chain (playsink->audiochain, playsink);
         playsink->audiochain->volume = NULL;
-        playsink->audiochain->mute = NULL;
         if (playsink->audiochain->ts_offset)
           gst_object_unref (playsink->audiochain->ts_offset);
         playsink->audiochain->ts_offset = NULL;
@@ -3695,12 +3714,17 @@
               GST_PAD_LINK_CHECK_NOTHING);
           gst_object_unref (srcpad);
         } else {
-          if (need_deinterlace)
+          if (need_deinterlace) {
+            gst_pad_unlink (playsink->videodeinterlacechain->srcpad,
+                playsink->videochain->sinkpad);
             gst_pad_link_full (playsink->videodeinterlacechain->srcpad,
                 playsink->textchain->videosinkpad, GST_PAD_LINK_CHECK_NOTHING);
-          else
+          } else {
+            gst_pad_unlink (playsink->video_srcpad_stream_synchronizer,
+                playsink->videochain->sinkpad);
             gst_pad_link_full (playsink->video_srcpad_stream_synchronizer,
                 playsink->textchain->videosinkpad, GST_PAD_LINK_CHECK_NOTHING);
+          }
         }
         gst_pad_link_full (playsink->textchain->srcpad,
             playsink->videochain->sinkpad, GST_PAD_LINK_CHECK_NOTHING);
@@ -4364,15 +4388,12 @@
                   "tee"), (NULL));
           res = NULL;
           break;
-        } else {
-          playsink->audio_tee_sink =
-              gst_element_get_static_pad (playsink->audio_tee, "sink");
-          gst_bin_add (GST_BIN_CAST (playsink), playsink->audio_tee);
-          gst_element_set_state (playsink->audio_tee, GST_STATE_PAUSED);
         }
-      } else {
-        gst_element_set_state (playsink->audio_tee, GST_STATE_PAUSED);
+        playsink->audio_tee_sink =
+            gst_element_get_static_pad (playsink->audio_tee, "sink");
+        gst_bin_add (GST_BIN_CAST (playsink), playsink->audio_tee);
       }
+      gst_element_set_state (playsink->audio_tee, GST_STATE_PAUSED);
       if (!playsink->audio_pad) {
         GST_LOG_OBJECT (playsink, "ghosting tee sinkpad");
         playsink->audio_pad =
@@ -4762,11 +4783,10 @@
       /* fall through */
     case GST_STATE_CHANGE_READY_TO_NULL:
       if (playsink->audiochain && playsink->audiochain->sink_volume) {
-        /* remove our links to the mute and volume elements when they were
+        /* remove our links to the volume elements when they were
          * provided by a sink */
         disconnect_audio_chain (playsink->audiochain, playsink);
         playsink->audiochain->volume = NULL;
-        playsink->audiochain->mute = NULL;
       }
 
       if (playsink->audiochain && playsink->audiochain->ts_offset) {
@@ -4851,6 +4871,8 @@
         playsink->audio_sinkpad_stream_synchronizer = NULL;
         gst_object_unref (playsink->audio_srcpad_stream_synchronizer);
         playsink->audio_srcpad_stream_synchronizer = NULL;
+
+        gst_play_sink_remove_audio_ssync_queue (playsink);
       }
       if (playsink->text_sinkpad_stream_synchronizer) {
         gst_element_release_request_pad (GST_ELEMENT_CAST
@@ -5262,7 +5284,7 @@
 
       channels = gst_color_balance_list_channels (balance_element);
       for (k = channels; k; k = k->next) {
-        GstColorBalanceChannel *tmp = l->data;
+        GstColorBalanceChannel *tmp = k->data;
 
         if (g_strrstr (tmp->label, proxy->label)) {
           channel = tmp;
diff --git a/gst/playback/gstplaysinkconvertbin.c b/gst/playback/gstplaysinkconvertbin.c
index cb0b174..0930810 100644
--- a/gst/playback/gstplaysinkconvertbin.c
+++ b/gst/playback/gstplaysinkconvertbin.c
@@ -32,7 +32,7 @@
 
 #define parent_class gst_play_sink_convert_bin_parent_class
 
-static gboolean gst_play_sink_convert_bin_sink_setcaps (GstPlaySinkConvertBin *
+static void gst_play_sink_convert_bin_sink_setcaps (GstPlaySinkConvertBin *
     self, GstCaps * caps);
 
 G_DEFINE_TYPE (GstPlaySinkConvertBin, gst_play_sink_convert_bin, GST_TYPE_BIN);
@@ -250,7 +250,7 @@
       GstCaps *caps;
 
       gst_event_parse_caps (event, &caps);
-      ret = gst_play_sink_convert_bin_sink_setcaps (self, caps);
+      gst_play_sink_convert_bin_sink_setcaps (self, caps);
       break;
     }
     default:
@@ -283,7 +283,7 @@
   }
 }
 
-static gboolean
+static void
 gst_play_sink_convert_bin_sink_setcaps (GstPlaySinkConvertBin * self,
     GstCaps * caps)
 {
@@ -292,7 +292,8 @@
   gboolean reconfigure = FALSE;
   gboolean raw;
 
-  GST_DEBUG_OBJECT (self, "setcaps");
+  GST_DEBUG_OBJECT (self, "Setting sink caps %" GST_PTR_FORMAT, caps);
+
   GST_PLAY_SINK_CONVERT_BIN_LOCK (self);
   s = gst_caps_get_structure (caps, 0);
   name = gst_structure_get_name (s);
@@ -338,10 +339,6 @@
   }
 
   GST_PLAY_SINK_CONVERT_BIN_UNLOCK (self);
-
-  GST_DEBUG_OBJECT (self, "Setting sink caps %" GST_PTR_FORMAT, caps);
-
-  return TRUE;
 }
 
 #define GST_PLAY_SINK_CONVERT_BIN_FILTER_CAPS(filter,caps) G_STMT_START {     \
@@ -353,6 +350,42 @@
   }                                                                           \
 } G_STMT_END
 
+static gboolean
+gst_play_sink_convert_bin_acceptcaps (GstPad * pad, GstCaps * caps)
+{
+  GstPlaySinkConvertBin *self =
+      GST_PLAY_SINK_CONVERT_BIN (gst_pad_get_parent (pad));
+  gboolean ret;
+  GstPad *otherpad;
+
+  GST_PLAY_SINK_CONVERT_BIN_LOCK (self);
+  if (pad == self->srcpad) {
+    otherpad = self->sinkpad;
+  } else if (pad == self->sinkpad) {
+    otherpad = self->srcpad;
+  } else {
+    GST_ERROR_OBJECT (pad, "Not one of our pads");
+    otherpad = NULL;
+  }
+
+  if (otherpad) {
+    ret = gst_pad_peer_query_accept_caps (otherpad, caps);
+    if (!ret && self->converter_caps) {
+      /* maybe we can convert */
+      ret = gst_caps_can_intersect (caps, self->converter_caps);
+    }
+  } else {
+    ret = TRUE;
+  }
+  GST_PLAY_SINK_CONVERT_BIN_UNLOCK (self);
+
+  gst_object_unref (self);
+
+  GST_DEBUG_OBJECT (pad, "Accept caps: '%" GST_PTR_FORMAT "' %d", caps, ret);
+
+  return ret;
+}
+
 static GstCaps *
 gst_play_sink_convert_bin_getcaps (GstPad * pad, GstCaps * filter)
 {
@@ -460,35 +493,12 @@
 }
 
 static gboolean
-gst_play_sink_convert_bin_acceptcaps (GstPad * pad, GstCaps * caps)
-{
-  GstCaps *allowed_caps;
-  gboolean ret;
-
-  allowed_caps = gst_pad_query_caps (pad, NULL);
-  ret = gst_caps_is_subset (caps, allowed_caps);
-  gst_caps_unref (allowed_caps);
-
-  return ret;
-}
-
-static gboolean
 gst_play_sink_convert_bin_query (GstPad * pad, GstObject * parent,
     GstQuery * query)
 {
   gboolean res = FALSE;
 
   switch (GST_QUERY_TYPE (query)) {
-    case GST_QUERY_ACCEPT_CAPS:
-    {
-      GstCaps *caps;
-
-      gst_query_parse_accept_caps (query, &caps);
-      gst_query_set_accept_caps_result (query,
-          gst_play_sink_convert_bin_acceptcaps (pad, caps));
-      res = TRUE;
-      break;
-    }
     case GST_QUERY_CAPS:
     {
       GstCaps *filter, *caps;
@@ -500,6 +510,17 @@
       res = TRUE;
       break;
     }
+    case GST_QUERY_ACCEPT_CAPS:
+    {
+      gboolean ret;
+      GstCaps *caps;
+
+      gst_query_parse_accept_caps (query, &caps);
+      ret = gst_play_sink_convert_bin_acceptcaps (pad, caps);
+      gst_query_set_accept_caps_result (query, ret);
+      res = TRUE;
+      break;
+    }
     default:
       res = gst_pad_query_default (pad, parent, query);
       break;
diff --git a/gst/playback/gststreamsynchronizer.c b/gst/playback/gststreamsynchronizer.c
index 3997d1b..b55e328 100644
--- a/gst/playback/gststreamsynchronizer.c
+++ b/gst/playback/gststreamsynchronizer.c
@@ -65,10 +65,13 @@
   GstSegment segment;
 
   gboolean wait;                /* TRUE if waiting/blocking */
-  gboolean new_stream;
-  gboolean drop_discont;
   gboolean is_eos;              /* TRUE if EOS was received */
+  gboolean eos_sent;            /* when EOS was sent downstream */
+  gboolean flushing;            /* set after flush-start and before flush-stop */
   gboolean seen_data;
+  GstClockTime gap_duration;
+
+  GstStreamFlags flags;
 
   GCond stream_finish_cond;
 
@@ -203,6 +206,64 @@
   return ret;
 }
 
+/* must be called with the STREAM_SYNCHRONIZER_LOCK */
+static gboolean
+gst_stream_synchronizer_wait (GstStreamSynchronizer * self, GstPad * pad)
+{
+  gboolean ret = FALSE;
+  GstStream *stream;
+
+  while (!self->eos && !self->flushing) {
+    stream = gst_pad_get_element_private (pad);
+    if (!stream) {
+      GST_WARNING_OBJECT (pad, "unknown stream");
+      return ret;
+    }
+    if (stream->flushing) {
+      GST_DEBUG_OBJECT (pad, "Flushing");
+      break;
+    }
+    if (!stream->wait) {
+      GST_DEBUG_OBJECT (pad, "Stream not waiting anymore");
+      break;
+    }
+
+    if (self->send_gap_event) {
+      GstEvent *event;
+
+      if (!GST_CLOCK_TIME_IS_VALID (stream->segment.position)) {
+        GST_WARNING_OBJECT (pad, "Have no position and can't send GAP event");
+        self->send_gap_event = FALSE;
+        continue;
+      }
+
+      event =
+          gst_event_new_gap (stream->segment.position, stream->gap_duration);
+      GST_DEBUG_OBJECT (pad,
+          "Send GAP event, position: %" GST_TIME_FORMAT " duration: %"
+          GST_TIME_FORMAT, GST_TIME_ARGS (stream->segment.position),
+          GST_TIME_ARGS (stream->gap_duration));
+
+      /* drop lock when sending GAP event, which may block in e.g. preroll */
+      GST_STREAM_SYNCHRONIZER_UNLOCK (self);
+      ret = gst_pad_push_event (pad, event);
+      GST_STREAM_SYNCHRONIZER_LOCK (self);
+      if (!ret) {
+        return ret;
+      }
+      self->send_gap_event = FALSE;
+
+      /* force a check on the loop conditions as we unlocked a
+       * few lines above and those variables could have changed */
+      continue;
+    }
+
+    g_cond_wait (&stream->stream_finish_cond, &self->lock);
+  }
+
+  return TRUE;
+}
+
 /* sinkpad functions */
 static gboolean
 gst_stream_synchronizer_sink_event (GstPad * pad, GstObject * parent,
@@ -239,12 +300,15 @@
         break;
       }
 
+      gst_event_parse_stream_flags (event, &stream->flags);
+
       if ((have_group_id && stream->group_id != group_id) || (!have_group_id
               && stream->stream_start_seqnum != seqnum)) {
         stream->is_eos = FALSE;
+        stream->eos_sent = FALSE;
+        stream->flushing = FALSE;
         stream->stream_start_seqnum = seqnum;
         stream->group_id = group_id;
-        stream->drop_discont = TRUE;
 
         if (!have_group_id) {
           /* Check if this belongs to a stream that is already there,
@@ -264,7 +328,6 @@
                 "Stream %d belongs to running stream %d, no waiting",
                 stream->stream_number, ostream->stream_number);
             stream->wait = FALSE;
-            stream->new_stream = FALSE;
 
             GST_STREAM_SYNCHRONIZER_UNLOCK (self);
             break;
@@ -279,13 +342,13 @@
         GST_DEBUG_OBJECT (pad, "Stream %d changed", stream->stream_number);
 
         stream->wait = TRUE;
-        stream->new_stream = TRUE;
 
         for (l = self->streams; l; l = l->next) {
           GstStream *ostream = l->data;
 
-          all_wait = all_wait && ostream->wait && (!have_group_id
-              || ostream->group_id == group_id);
+          all_wait = all_wait && ((ostream->flags & GST_STREAM_FLAG_SPARSE)
+              || (ostream->wait && (!have_group_id
+                      || ostream->group_id == group_id)));
           if (!all_wait)
             break;
         }
@@ -316,19 +379,26 @@
               position_running_time =
                   gst_segment_to_running_time (&ostream->segment,
                   GST_FORMAT_TIME, ostream->segment.position);
-              position =
-                  MAX (position, MAX (stop_running_time,
-                      position_running_time));
+
+              position_running_time =
+                  MAX (position_running_time, stop_running_time);
+              position_running_time -=
+                  gst_segment_to_running_time (&ostream->segment,
+                  GST_FORMAT_TIME, ostream->segment.start);
+              position_running_time = MAX (0, position_running_time);
+
+              position = MAX (position, position_running_time);
             }
           }
-          position = MAX (0, position);
-          self->group_start_time = MAX (self->group_start_time, position);
+
+          self->group_start_time += position;
 
           GST_DEBUG_OBJECT (self, "New group start time: %" GST_TIME_FORMAT,
               GST_TIME_ARGS (self->group_start_time));
 
           for (l = self->streams; l; l = l->next) {
             GstStream *ostream = l->data;
+            ostream->wait = FALSE;
             g_cond_broadcast (&ostream->stream_finish_cond);
           }
         }
@@ -344,16 +414,8 @@
       gst_event_copy_segment (event, &segment);
 
       GST_STREAM_SYNCHRONIZER_LOCK (self);
-      stream = gst_pad_get_element_private (pad);
-      if (stream) {
-        if (stream->wait) {
-          GST_DEBUG_OBJECT (pad, "Stream %d is waiting", stream->stream_number);
-          g_cond_wait (&stream->stream_finish_cond, &self->lock);
-          stream = gst_pad_get_element_private (pad);
-          if (stream)
-            stream->wait = FALSE;
-        }
-      }
+
+      gst_stream_synchronizer_wait (self, pad);
 
       if (self->shutdown) {
         GST_STREAM_SYNCHRONIZER_UNLOCK (self);
@@ -361,11 +423,13 @@
         goto done;
       }
 
+      stream = gst_pad_get_element_private (pad);
       if (stream && segment.format == GST_FORMAT_TIME) {
-        if (stream->new_stream) {
-          stream->new_stream = FALSE;
-          segment.base = self->group_start_time;
-        }
+        GST_DEBUG_OBJECT (pad,
+            "New stream, updating base from %" GST_TIME_FORMAT " to %"
+            GST_TIME_FORMAT, GST_TIME_ARGS (segment.base),
+            GST_TIME_ARGS (segment.base + self->group_start_time));
+        segment.base += self->group_start_time;
 
         GST_DEBUG_OBJECT (pad, "Segment was: %" GST_SEGMENT_FORMAT,
             &stream->segment);
@@ -397,8 +461,10 @@
 
       GST_STREAM_SYNCHRONIZER_LOCK (self);
       stream = gst_pad_get_element_private (pad);
+      self->eos = FALSE;
       if (stream) {
         GST_DEBUG_OBJECT (pad, "Flushing streams");
+        stream->flushing = TRUE;
         g_cond_broadcast (&stream->stream_finish_cond);
       }
       GST_STREAM_SYNCHRONIZER_UNLOCK (self);
@@ -406,6 +472,8 @@
     }
     case GST_EVENT_FLUSH_STOP:{
       GstStream *stream;
+      GList *l;
+      GstClockTime new_group_start_time = 0;
 
       GST_STREAM_SYNCHRONIZER_LOCK (self);
       stream = gst_pad_get_element_private (pad);
@@ -415,15 +483,55 @@
         gst_segment_init (&stream->segment, GST_FORMAT_UNDEFINED);
 
         stream->is_eos = FALSE;
+        stream->eos_sent = FALSE;
+        stream->flushing = FALSE;
         stream->wait = FALSE;
-        stream->new_stream = FALSE;
-        stream->drop_discont = FALSE;
-        stream->seen_data = FALSE;
         g_cond_broadcast (&stream->stream_finish_cond);
       }
+
+      for (l = self->streams; l; l = l->next) {
+        GstStream *ostream = l->data;
+        GstClockTime start_running_time;
+
+        if (ostream == stream)
+          continue;
+
+        if (ostream->segment.format == GST_FORMAT_TIME) {
+          start_running_time =
+              gst_segment_to_running_time (&ostream->segment,
+              GST_FORMAT_TIME, ostream->segment.start);
+
+          new_group_start_time = MAX (new_group_start_time, start_running_time);
+        }
+      }
+
+      GST_DEBUG_OBJECT (pad,
+          "Updating group start time from %" GST_TIME_FORMAT " to %"
+          GST_TIME_FORMAT, GST_TIME_ARGS (self->group_start_time),
+          GST_TIME_ARGS (new_group_start_time));
+      self->group_start_time = new_group_start_time;
       GST_STREAM_SYNCHRONIZER_UNLOCK (self);
       break;
     }
+      /* unblocking EOS wait when track switch. */
+    case GST_EVENT_CUSTOM_DOWNSTREAM_OOB:{
+      if (gst_event_has_name (event, "playsink-custom-video-flush")
+          || gst_event_has_name (event, "playsink-custom-audio-flush")
+          || gst_event_has_name (event, "playsink-custom-subtitle-flush")) {
+        GstStream *stream;
+
+        GST_STREAM_SYNCHRONIZER_LOCK (self);
+        stream = gst_pad_get_element_private (pad);
+        if (stream) {
+          stream->is_eos = FALSE;
+          stream->eos_sent = FALSE;
+          stream->wait = FALSE;
+          g_cond_broadcast (&stream->stream_finish_cond);
+        }
+        GST_STREAM_SYNCHRONIZER_UNLOCK (self);
+      }
+      break;
+    }
     case GST_EVENT_EOS:{
       GstStream *stream;
       GList *l;
@@ -454,6 +562,8 @@
       else
         timestamp = stream->segment.stop;
 
+      stream->segment.position = timestamp;
+
       for (l = self->streams; l; l = l->next) {
         GstStream *ostream = l->data;
 
@@ -464,6 +574,7 @@
 
       if (all_eos) {
         GST_DEBUG_OBJECT (self, "All streams are EOS -- forwarding");
+        self->eos = TRUE;
         for (l = self->streams; l; l = l->next) {
           GstStream *ostream = l->data;
           /* local snapshot of current pads */
@@ -471,41 +582,54 @@
           pads = g_slist_prepend (pads, ostream->srcpad);
         }
       }
-      GST_STREAM_SYNCHRONIZER_UNLOCK (self);
-      /* drop lock when sending eos, which may block in e.g. preroll */
       if (pads) {
         GstPad *pad;
         GSList *epad;
+        GstStream *ostream;
 
         ret = TRUE;
         epad = pads;
         while (epad) {
           pad = epad->data;
-          GST_DEBUG_OBJECT (pad, "Pushing EOS");
-          ret = ret && gst_pad_push_event (pad, gst_event_new_eos ());
+          ostream = gst_pad_get_element_private (pad);
+          if (ostream) {
+            g_cond_broadcast (&ostream->stream_finish_cond);
+          }
+
           gst_object_unref (pad);
           epad = g_slist_next (epad);
         }
         g_slist_free (pads);
       } else {
-        /* if EOS, but no data has passed, then send something to replace EOS
-         * for preroll purposes */
-        if (!seen_data) {
-          GstEvent *gap_event;
-
-          gap_event = gst_event_new_gap (timestamp, GST_CLOCK_TIME_NONE);
-          ret = gst_pad_push_event (srcpad, gap_event);
-        } else {
-          GstEvent *gap_event;
-
-          /* FIXME: Also send a GAP event to let audio sinks start their
-           * clock in case they did not have enough data yet */
-          gap_event = gst_event_new_gap (timestamp, GST_CLOCK_TIME_NONE);
-          ret = gst_pad_push_event (srcpad, gap_event);
+        if (seen_data) {
+          self->send_gap_event = TRUE;
+          stream->gap_duration = GST_CLOCK_TIME_NONE;
+          stream->wait = TRUE;
+          ret = gst_stream_synchronizer_wait (self, srcpad);
         }
       }
+
+      /* send eos if haven't seen data. seen_data will be true if data buffer
+       * of the track have received in anytime. sink is ready if seen_data is
+       * true, so can send GAP event. Will send EOS if sink isn't ready. The
+       * scenario for the case is one track haven't any media data and then
+       * send EOS. Or no any valid media data in one track, so decoder can't
+       * get valid CAPS for the track. sink can't ready without received CAPS.*/
+      if (!seen_data || self->eos) {
+        GST_DEBUG_OBJECT (pad, "send EOS event");
+        /* drop lock when sending eos, which may block in e.g. preroll */
+        GST_STREAM_SYNCHRONIZER_UNLOCK (self);
+        ret = gst_pad_push_event (srcpad, gst_event_new_eos ());
+        GST_STREAM_SYNCHRONIZER_LOCK (self);
+        stream = gst_pad_get_element_private (pad);
+        if (stream) {
+          stream->eos_sent = TRUE;
+        }
+      }
+
       gst_object_unref (srcpad);
       gst_event_unref (event);
+      GST_STREAM_SYNCHRONIZER_UNLOCK (self);
       goto done;
     }
     default:
@@ -550,15 +674,6 @@
 
   if (stream) {
     stream->seen_data = TRUE;
-    if (stream->drop_discont) {
-      if (GST_BUFFER_IS_DISCONT (buffer)) {
-        GST_DEBUG_OBJECT (pad, "removing DISCONT from buffer %p", buffer);
-        buffer = gst_buffer_make_writable (buffer);
-        GST_BUFFER_FLAG_UNSET (buffer, GST_BUFFER_FLAG_DISCONT);
-      }
-      stream->drop_discont = FALSE;
-    }
-
     if (stream->segment.format == GST_FORMAT_TIME
         && GST_CLOCK_TIME_IS_VALID (timestamp)) {
       GST_LOG_OBJECT (pad,
@@ -611,7 +726,8 @@
       GstStream *ostream = l->data;
       gint64 position;
 
-      if (!ostream->is_eos || ostream->segment.format != GST_FORMAT_TIME)
+      if (!ostream->is_eos || ostream->eos_sent ||
+          ostream->segment.format != GST_FORMAT_TIME)
         continue;
 
       if (ostream->segment.position != -1)
@@ -633,8 +749,9 @@
 
         ostream->segment.position = new_start;
 
-        gst_pad_push_event (ostream->srcpad,
-            gst_event_new_gap (position, new_start - position));
+        self->send_gap_event = TRUE;
+        ostream->gap_duration = new_start - position;
+        g_cond_broadcast (&ostream->stream_finish_cond);
       }
     }
     GST_STREAM_SYNCHRONIZER_UNLOCK (self);
@@ -663,6 +780,7 @@
   stream->stream_start_seqnum = G_MAXUINT32;
   stream->segment_seqnum = G_MAXUINT32;
   stream->group_id = G_MAXUINT;
+  stream->seen_data = FALSE;
 
   tmp = g_strdup_printf ("sink_%u", self->current_stream_number);
   stream->sinkpad = gst_pad_new_from_static_template (&sinktemplate, tmp);
@@ -742,28 +860,6 @@
   gst_pad_set_active (stream->sinkpad, FALSE);
   gst_element_remove_pad (GST_ELEMENT_CAST (self), stream->sinkpad);
 
-  if (stream->segment.format == GST_FORMAT_TIME) {
-    gint64 stop_running_time;
-    gint64 position_running_time;
-
-    stop_running_time =
-        gst_segment_to_running_time (&stream->segment, GST_FORMAT_TIME,
-        stream->segment.stop);
-    position_running_time =
-        gst_segment_to_running_time (&stream->segment, GST_FORMAT_TIME,
-        stream->segment.position);
-    stop_running_time = MAX (stop_running_time, position_running_time);
-
-    if (stop_running_time > self->group_start_time) {
-      GST_DEBUG_OBJECT (stream->sinkpad,
-          "Updating global start running time from %" GST_TIME_FORMAT " to %"
-          GST_TIME_FORMAT, GST_TIME_ARGS (self->group_start_time),
-          GST_TIME_ARGS (stop_running_time));
-
-      self->group_start_time = stop_running_time;
-    }
-  }
-
   g_cond_clear (&stream->stream_finish_cond);
   g_slice_free (GstStream, stream);
 
@@ -807,6 +903,7 @@
     case GST_STATE_CHANGE_NULL_TO_READY:
       GST_DEBUG_OBJECT (self, "State change NULL->READY");
       self->shutdown = FALSE;
+      self->send_gap_event = FALSE;
       break;
     case GST_STATE_CHANGE_READY_TO_PAUSED:
       GST_DEBUG_OBJECT (self, "State change READY->PAUSED");
@@ -814,18 +911,21 @@
       self->have_group_id = TRUE;
       self->group_id = G_MAXUINT;
       self->shutdown = FALSE;
+      self->flushing = FALSE;
+      self->eos = FALSE;
       break;
     case GST_STATE_CHANGE_PAUSED_TO_READY:{
       GList *l;
 
-      GST_DEBUG_OBJECT (self, "State change READY->NULL");
+      GST_DEBUG_OBJECT (self, "State change PAUSED->READY");
 
       GST_STREAM_SYNCHRONIZER_LOCK (self);
+      self->flushing = TRUE;
+      self->shutdown = TRUE;
       for (l = self->streams; l; l = l->next) {
         GstStream *ostream = l->data;
         g_cond_broadcast (&ostream->stream_finish_cond);
       }
-      self->shutdown = TRUE;
       GST_STREAM_SYNCHRONIZER_UNLOCK (self);
     }
     default:
@@ -838,6 +938,26 @@
     return ret;
 
   switch (transition) {
+    case GST_STATE_CHANGE_PLAYING_TO_PAUSED:{
+      GList *l;
+
+      GST_DEBUG_OBJECT (self, "State change PLAYING->PAUSED");
+
+      GST_STREAM_SYNCHRONIZER_LOCK (self);
+      for (l = self->streams; l; l = l->next) {
+        GstStream *stream = l->data;
+        /* send GAP event to sink to finished pre-roll. The reason is function
+         * chain () will be blocked on pad_push (), so can't trigger the track
+         * which reach EOS to send GAP event. */
+        if (stream->is_eos && !stream->eos_sent) {
+          self->send_gap_event = TRUE;
+          stream->gap_duration = GST_CLOCK_TIME_NONE;
+          g_cond_broadcast (&stream->stream_finish_cond);
+        }
+      }
+      GST_STREAM_SYNCHRONIZER_UNLOCK (self);
+      break;
+    }
     case GST_STATE_CHANGE_PAUSED_TO_READY:{
       GList *l;
 
@@ -845,14 +965,16 @@
       self->group_start_time = 0;
 
       GST_STREAM_SYNCHRONIZER_LOCK (self);
+      self->send_gap_event = FALSE;
       for (l = self->streams; l; l = l->next) {
         GstStream *stream = l->data;
 
         gst_segment_init (&stream->segment, GST_FORMAT_UNDEFINED);
+        stream->gap_duration = GST_CLOCK_TIME_NONE;
         stream->wait = FALSE;
-        stream->new_stream = FALSE;
-        stream->drop_discont = FALSE;
         stream->is_eos = FALSE;
+        stream->eos_sent = FALSE;
+        stream->flushing = FALSE;
       }
       GST_STREAM_SYNCHRONIZER_UNLOCK (self);
       break;
diff --git a/gst/playback/gststreamsynchronizer.h b/gst/playback/gststreamsynchronizer.h
index 2f5a3ec..4e40b1a 100644
--- a/gst/playback/gststreamsynchronizer.h
+++ b/gst/playback/gststreamsynchronizer.h
@@ -47,6 +47,9 @@
   /* < private > */
   GMutex lock;
   gboolean shutdown;
+  gboolean send_gap_event;
+  gboolean eos;
+  gboolean flushing;
 
   GList *streams;
   guint current_stream_number;
diff --git a/gst/playback/gstsubtitleoverlay.c b/gst/playback/gstsubtitleoverlay.c
index e5b2fea..3f24fd5 100644
--- a/gst/playback/gstsubtitleoverlay.c
+++ b/gst/playback/gstsubtitleoverlay.c
@@ -29,8 +29,8 @@
  * <refsect2>
  * <title>Examples</title>
  * |[
- * gst-launch -v filesrc location=test.mkv ! matroskademux name=demux ! "video/x-h264" ! queue2 ! decodebin ! subtitleoverlay name=overlay ! videoconvert ! autovideosink  demux. ! "subpicture/x-dvd" ! queue2 ! overlay.
- * ]| This will play back the given Matroska file with h264 video and subpicture subtitles.
+ * gst-launch-1.0 -v filesrc location=test.mkv ! matroskademux name=demux ! video/x-h264 ! queue ! decodebin ! subtitleoverlay name=overlay ! videoconvert ! autovideosink  demux. ! subpicture/x-dvd ! queue ! overlay.
+ * ]| This will play back the given Matroska file with h264 video and dvd subpicture style subtitles.
  * </refsect2>
  */
 
@@ -239,7 +239,7 @@
     caps = gst_pad_query_caps (pad, NULL);
   }
 
-  for (i = 0; i < gst_caps_get_size (caps) && ret == FALSE; i++) {
+  for (i = 0; i < gst_caps_get_size (caps) && !ret; i++) {
     name = gst_structure_get_name (gst_caps_get_structure (caps, i));
     if (g_str_equal (name, "video/x-raw")) {
       ret = TRUE;
@@ -1405,11 +1405,11 @@
      * warnings and switch to passthrough mode */
     if (src && (
             (self->overlay
-                && gst_object_has_ancestor (src,
+                && gst_object_has_as_ancestor (src,
                     GST_OBJECT_CAST (self->overlay))) || (self->parser
-                && gst_object_has_ancestor (src,
+                && gst_object_has_as_ancestor (src,
                     GST_OBJECT_CAST (self->parser))) || (self->renderer
-                && gst_object_has_ancestor (src,
+                && gst_object_has_as_ancestor (src,
                     GST_OBJECT_CAST (self->renderer))))) {
       GError *err = NULL;
       gchar *debug = NULL;
@@ -1778,12 +1778,15 @@
 static GstCaps *
 gst_subtitle_overlay_subtitle_sink_getcaps (GstPad * pad, GstCaps * filter)
 {
-  GstCaps *ret;
+  GstCaps *ret, *subcaps;
 
-  if (filter)
-    ret = gst_caps_ref (filter);
-  else
-    ret = gst_caps_new_any ();
+  subcaps = gst_subtitle_overlay_create_factory_caps ();
+  if (filter) {
+    ret = gst_caps_intersect_full (filter, subcaps, GST_CAPS_INTERSECT_FIRST);
+    gst_caps_unref (subcaps);
+  } else {
+    ret = subcaps;
+  }
 
   return ret;
 }
@@ -1793,7 +1796,7 @@
     GstCaps * caps)
 {
   gboolean ret = TRUE;
-  GstPad *target = NULL;;
+  GstPad *target = NULL;
 
   GST_DEBUG_OBJECT (self, "Setting caps: %" GST_PTR_FORMAT, caps);
 
diff --git a/gst/playback/gsturidecodebin.c b/gst/playback/gsturidecodebin.c
index 709483e..24e4427 100644
--- a/gst/playback/gsturidecodebin.c
+++ b/gst/playback/gsturidecodebin.c
@@ -110,6 +110,7 @@
   guint src_np_sig_id;          /* new-pad signal id */
   guint src_nmp_sig_id;         /* no-more-pads signal id */
   gint pending;
+  GList *missing_plugin_errors;
 
   gboolean async_pending;       /* async-start has been emitted */
 
@@ -196,8 +197,7 @@
   PROP_DOWNLOAD,
   PROP_USE_BUFFERING,
   PROP_EXPOSE_ALL_STREAMS,
-  PROP_RING_BUFFER_MAX_SIZE,
-  PROP_LAST
+  PROP_RING_BUFFER_MAX_SIZE
 };
 
 static guint gst_uri_decode_bin_signals[LAST_SIGNAL] = { 0 };
@@ -986,11 +986,33 @@
      * decodebins had missing plugins for all of their streams!
      */
     if (!decoder->streams || g_hash_table_size (decoder->streams) == 0) {
-      GST_ELEMENT_ERROR (decoder, CORE, MISSING_PLUGIN, (NULL),
-          ("no suitable plugins found"));
+      if (decoder->missing_plugin_errors) {
+        GString *str = g_string_new ("");
+        GList *l;
+
+        for (l = decoder->missing_plugin_errors; l; l = l->next) {
+          GstMessage *msg = l->data;
+          gchar *debug;
+
+          gst_message_parse_error (msg, NULL, &debug);
+          g_string_append (str, debug);
+          g_free (debug);
+          gst_message_unref (msg);
+        }
+        g_list_free (decoder->missing_plugin_errors);
+        decoder->missing_plugin_errors = NULL;
+
+        GST_ELEMENT_ERROR (decoder, CORE, MISSING_PLUGIN, (NULL),
+            ("no suitable plugins found:\n%s", str->str));
+        g_string_free (str, TRUE);
+      } else {
+        GST_ELEMENT_ERROR (decoder, CORE, MISSING_PLUGIN, (NULL),
+            ("no suitable plugins found"));
+      }
     } else {
       gst_element_no_more_pads (GST_ELEMENT_CAST (decoder));
     }
+    do_async_done (decoder);
   }
 
   return;
@@ -1266,7 +1288,7 @@
 
 /* media types that use adaptive streaming */
 static const gchar *adaptive_media[] = {
-  "application/x-hls", "application/x-smoothstreaming-manifest",
+  "application/x-hls", "application/vnd.ms-sstr+xml",
   "application/dash+xml", NULL
 };
 
@@ -1321,17 +1343,6 @@
 
   source_class = G_OBJECT_GET_CLASS (source);
 
-  /* make HTTP sources send extra headers so we get icecast
-   * metadata in case the stream is an icecast stream */
-  if (!strncmp (decoder->uri, "http://", 7)) {
-    pspec = g_object_class_find_property (source_class, "iradio-mode");
-
-    if (pspec && G_PARAM_SPEC_VALUE_TYPE (pspec) == G_TYPE_STRING) {
-      GST_LOG_OBJECT (decoder, "configuring iradio-mode");
-      g_object_set (source, "iradio-mode", TRUE, NULL);
-    }
-  }
-
   pspec = g_object_class_find_property (source_class, "connection-speed");
   if (pspec != NULL) {
     guint64 speed = decoder->connection_speed / 1000;
@@ -1361,7 +1372,7 @@
       wrong_type = TRUE;
     }
 
-    if (wrong_type == FALSE) {
+    if (!wrong_type) {
       g_object_set (source, "connection-speed", speed, NULL);
 
       GST_DEBUG_OBJECT (decoder,
@@ -1478,6 +1489,7 @@
   GST_ELEMENT_ERROR (dec, CORE, MISSING_PLUGIN,
       (_("Missing element '%s' - check your GStreamer installation."),
           element_name), (NULL));
+  do_async_done (GST_URI_DECODE_BIN (dec));
 }
 
 /**
@@ -1870,6 +1882,7 @@
     post_missing_plugin_error (GST_ELEMENT_CAST (decoder), "decodebin");
     GST_ELEMENT_ERROR (decoder, CORE, MISSING_PLUGIN, (NULL),
         ("No decodebin element, check your installation"));
+    do_async_done (decoder);
     return NULL;
   }
 no_typefind:
@@ -1877,6 +1890,7 @@
     gst_object_unref (decodebin);
     GST_ELEMENT_ERROR (decoder, CORE, MISSING_PLUGIN, (NULL),
         ("No typefind element, decodebin is unusable, check your installation"));
+    do_async_done (decoder);
     return NULL;
   }
 }
@@ -1981,11 +1995,9 @@
 
   /* PLAYING in one go might fail (see bug #632782) */
   gst_element_set_state (dec_elem, GST_STATE_PAUSED);
-  gst_element_set_state (dec_elem, GST_STATE_PLAYING);
+  gst_element_sync_state_with_parent (dec_elem);
   if (queue)
-    gst_element_set_state (queue, GST_STATE_PLAYING);
-
-  do_async_done (decoder);
+    gst_element_sync_state_with_parent (queue);
 
   return;
 
@@ -1999,6 +2011,7 @@
   {
     GST_ELEMENT_ERROR (decoder, CORE, NEGOTIATION,
         (NULL), ("Can't link typefind to decodebin element"));
+    do_async_done (decoder);
     return;
   }
 no_buffer_element:
@@ -2034,8 +2047,6 @@
       g_signal_connect (decoder->typefind, "have-type",
       G_CALLBACK (type_found), decoder);
 
-  do_async_start (decoder);
-
   return TRUE;
 
   /* ERRORS */
@@ -2044,6 +2055,7 @@
     post_missing_plugin_error (GST_ELEMENT_CAST (decoder), "typefind");
     GST_ELEMENT_ERROR (decoder, CORE, MISSING_PLUGIN, (NULL),
         ("No typefind element, check your installation"));
+    do_async_done (decoder);
     return FALSE;
   }
 could_not_link:
@@ -2053,6 +2065,7 @@
     gst_bin_remove (GST_BIN_CAST (decoder), typefind);
     /* Don't loose the SOURCE flag */
     GST_OBJECT_FLAG_SET (decoder, GST_ELEMENT_FLAG_SOURCE);
+    do_async_done (decoder);
     return FALSE;
   }
 }
@@ -2141,7 +2154,7 @@
 
   GST_DEBUG_OBJECT (bin, "linked decoder to new pad");
 
-  gst_element_set_state (decoder, GST_STATE_PLAYING);
+  gst_element_sync_state_with_parent (decoder);
   GST_URI_DECODE_BIN_UNLOCK (bin);
 
   return;
@@ -2158,6 +2171,7 @@
     GST_ELEMENT_ERROR (bin, CORE, NEGOTIATION,
         (NULL), ("Can't link source to decoder element"));
     GST_URI_DECODE_BIN_UNLOCK (bin);
+    do_async_done (bin);
     return;
   }
 }
@@ -2230,6 +2244,7 @@
     /* source provides raw data, we added the pads and we can now signal a
      * no_more pads because we are done. */
     gst_element_no_more_pads (GST_ELEMENT_CAST (decoder));
+    do_async_done (decoder);
     return TRUE;
   }
   if (!have_out && !is_dynamic) {
@@ -2395,6 +2410,8 @@
 static void
 handle_message (GstBin * bin, GstMessage * msg)
 {
+  GstURIDecodeBin *dec = GST_URI_DECODE_BIN (bin);
+
   switch (GST_MESSAGE_TYPE (msg)) {
     case GST_MESSAGE_ELEMENT:{
       if (gst_message_has_name (msg, "redirect")) {
@@ -2402,7 +2419,7 @@
          * the user of this element as it can in most cases just pick the first item
          * of the sorted list as a good redirection candidate. It can of course
          * choose something else from the list if it has a better way. */
-        msg = handle_redirect_message (GST_URI_DECODE_BIN (bin), msg);
+        msg = handle_redirect_message (dec, msg);
       }
       break;
     }
@@ -2417,6 +2434,9 @@
       if (g_error_matches (err, GST_CORE_ERROR, GST_CORE_ERROR_MISSING_PLUGIN)
           || g_error_matches (err, GST_STREAM_ERROR,
               GST_STREAM_ERROR_CODEC_NOT_FOUND)) {
+        dec->missing_plugin_errors =
+            g_list_prepend (dec->missing_plugin_errors, gst_message_ref (msg));
+
         no_more_pads_full (GST_ELEMENT (GST_MESSAGE_SRC (msg)), FALSE,
             GST_URI_DECODE_BIN (bin));
         gst_message_unref (msg);
@@ -2535,24 +2555,27 @@
     GstClockTime min, max;
     gboolean live;
 
-    g_value_set_boolean (ret, TRUE);
-
     gst_query_parse_latency (fold->query, &live, &min, &max);
 
-    GST_DEBUG_OBJECT (item,
+    GST_DEBUG_OBJECT (pad,
         "got latency min %" GST_TIME_FORMAT ", max %" GST_TIME_FORMAT
         ", live %d", GST_TIME_ARGS (min), GST_TIME_ARGS (max), live);
 
-    /* for the combined latency we collect the MAX of all min latencies and
-     * the MIN of all max latencies */
-    if (min > fold->min)
-      fold->min = min;
-    if (fold->max == -1)
-      fold->max = max;
-    else if (max < fold->max)
-      fold->max = max;
-    if (fold->live == FALSE)
-      fold->live = live;
+    if (live) {
+      /* for the combined latency we collect the MAX of all min latencies and
+       * the MIN of all max latencies */
+      if (min > fold->min)
+        fold->min = min;
+      if (fold->max == -1)
+        fold->max = max;
+      else if (max < fold->max)
+        fold->max = max;
+
+      fold->live = TRUE;
+    }
+  } else {
+    GST_LOG_OBJECT (pad, "latency query failed");
+    g_value_set_boolean (ret, FALSE);
   }
 
   return TRUE;
@@ -2584,7 +2607,7 @@
 
     GST_DEBUG_OBJECT (item, "got seekable %d", seekable);
 
-    if (fold->seekable == TRUE)
+    if (fold->seekable)
       fold->seekable = seekable;
   }
 
@@ -2633,6 +2656,7 @@
   QueryDoneFunction fold_done = NULL;
   QueryFold fold_data;
   GValue ret = { 0 };
+  gboolean default_ret = FALSE;
 
   decoder = GST_URI_DECODE_BIN (element);
 
@@ -2654,6 +2678,7 @@
       fold_func = (GstIteratorFoldFunction) decoder_query_latency_fold;
       fold_init = decoder_query_init;
       fold_done = decoder_query_latency_done;
+      default_ret = TRUE;
       break;
     case GST_QUERY_SEEKING:
       /* iterate and collect durations */
@@ -2669,7 +2694,7 @@
   fold_data.query = query;
 
   g_value_init (&ret, G_TYPE_BOOLEAN);
-  g_value_set_boolean (&ret, FALSE);
+  g_value_set_boolean (&ret, default_ret);
 
   iter = gst_element_iterate_src_pads (element);
   GST_DEBUG_OBJECT (element, "Sending query %p (type %d) to src pads",
@@ -2688,7 +2713,7 @@
         gst_iterator_resync (iter);
         if (fold_init)
           fold_init (decoder, &fold_data);
-        g_value_set_boolean (&ret, FALSE);
+        g_value_set_boolean (&ret, default_ret);
         break;
       case GST_ITERATOR_OK:
       case GST_ITERATOR_DONE:
@@ -2718,26 +2743,53 @@
 
   switch (transition) {
     case GST_STATE_CHANGE_READY_TO_PAUSED:
-      if (!setup_source (decoder))
-        goto source_failed;
+      do_async_start (decoder);
       break;
     default:
       break;
   }
 
   ret = GST_ELEMENT_CLASS (parent_class)->change_state (element, transition);
+  if (ret == GST_STATE_CHANGE_FAILURE)
+    goto setup_failed;
+  else if (ret == GST_STATE_CHANGE_NO_PREROLL)
+    do_async_done (decoder);
 
   switch (transition) {
     case GST_STATE_CHANGE_READY_TO_PAUSED:
       GST_DEBUG ("ready to paused");
+      if (!setup_source (decoder))
+        goto source_failed;
+
+      ret = GST_STATE_CHANGE_ASYNC;
+
+      /* And now sync the states of everything we added */
+      g_slist_foreach (decoder->decodebins,
+          (GFunc) gst_element_sync_state_with_parent, NULL);
+      if (decoder->typefind)
+        ret = gst_element_set_state (decoder->typefind, GST_STATE_PAUSED);
       if (ret == GST_STATE_CHANGE_FAILURE)
         goto setup_failed;
+      if (decoder->queue)
+        ret = gst_element_set_state (decoder->queue, GST_STATE_PAUSED);
+      if (ret == GST_STATE_CHANGE_FAILURE)
+        goto setup_failed;
+      if (decoder->source)
+        ret = gst_element_set_state (decoder->source, GST_STATE_PAUSED);
+      if (ret == GST_STATE_CHANGE_FAILURE)
+        goto setup_failed;
+      if (ret == GST_STATE_CHANGE_SUCCESS)
+        ret = GST_STATE_CHANGE_ASYNC;
+
       break;
     case GST_STATE_CHANGE_PAUSED_TO_READY:
       GST_DEBUG ("paused to ready");
       remove_decoders (decoder, FALSE);
       remove_source (decoder);
       do_async_done (decoder);
+      g_list_free_full (decoder->missing_plugin_errors,
+          (GDestroyNotify) gst_message_unref);
+      decoder->missing_plugin_errors = NULL;
       break;
     case GST_STATE_CHANGE_READY_TO_NULL:
       GST_DEBUG ("ready to null");
@@ -2752,11 +2804,13 @@
   /* ERRORS */
 source_failed:
   {
+    do_async_done (decoder);
     return GST_STATE_CHANGE_FAILURE;
   }
 setup_failed:
   {
     /* clean up leftover groups */
+    do_async_done (decoder);
     return GST_STATE_CHANGE_FAILURE;
   }
 }
diff --git a/gst/subparse/Makefile.in b/gst/subparse/Makefile.in
index 2edb0a9..be32cdb 100644
--- a/gst/subparse/Makefile.in
+++ b/gst/subparse/Makefile.in
@@ -1,7 +1,7 @@
-# Makefile.in generated by automake 1.14.1 from Makefile.am.
+# Makefile.in generated by automake 1.15 from Makefile.am.
 # @configure_input@
 
-# Copyright (C) 1994-2013 Free Software Foundation, Inc.
+# 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,
@@ -16,7 +16,17 @@
 
 
 VPATH = @srcdir@
-am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)'
+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 \
       ?) ;; \
@@ -81,8 +91,6 @@
 host_triplet = @host@
 target_triplet = @target@
 subdir = gst/subparse
-DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \
-	$(top_srcdir)/depcomp $(noinst_HEADERS)
 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 \
@@ -103,7 +111,6 @@
 	$(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-x11.m4 \
 	$(top_srcdir)/common/m4/gst.m4 \
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
@@ -120,6 +127,8 @@
 	$(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 =
@@ -232,6 +241,7 @@
   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@
@@ -292,6 +302,8 @@
 GIO_CFLAGS = @GIO_CFLAGS@
 GIO_LDFLAGS = @GIO_LDFLAGS@
 GIO_LIBS = @GIO_LIBS@
+GIO_UNIX_2_0_CFLAGS = @GIO_UNIX_2_0_CFLAGS@
+GIO_UNIX_2_0_LIBS = @GIO_UNIX_2_0_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
@@ -321,6 +333,8 @@
 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_OPTION_CFLAGS = @GST_OPTION_CFLAGS@
 GST_OPTION_CXXFLAGS = @GST_OPTION_CXXFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
@@ -348,7 +362,6 @@
 GTK_X11_CFLAGS = @GTK_X11_CFLAGS@
 GTK_X11_LIBS = @GTK_X11_LIBS@
 HAVE_CDPARANOIA = @HAVE_CDPARANOIA@
-HAVE_X = @HAVE_X@
 HAVE_XSHM = @HAVE_XSHM@
 HAVE_ZLIB = @HAVE_ZLIB@
 HTML_DIR = @HTML_DIR@
@@ -363,6 +376,7 @@
 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@
@@ -452,13 +466,12 @@
 XGETTEXT = @XGETTEXT@
 XGETTEXT_015 = @XGETTEXT_015@
 XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
-XMKMF = @XMKMF@
+XSHM_CFLAGS = @XSHM_CFLAGS@
 XSHM_LIBS = @XSHM_LIBS@
+XVIDEO_CFLAGS = @XVIDEO_CFLAGS@
 XVIDEO_LIBS = @XVIDEO_LIBS@
 X_CFLAGS = @X_CFLAGS@
-X_EXTRA_LIBS = @X_EXTRA_LIBS@
 X_LIBS = @X_LIBS@
-X_PRE_LIBS = @X_PRE_LIBS@
 ZLIB_CFLAGS = @ZLIB_CFLAGS@
 ZLIB_LIBS = @ZLIB_LIBS@
 abs_builddir = @abs_builddir@
@@ -511,6 +524,7 @@
 psdir = @psdir@
 pyexecdir = @pyexecdir@
 pythondir = @pythondir@
+runstatedir = @runstatedir@
 sbindir = @sbindir@
 sharedstatedir = @sharedstatedir@
 srcdir = @srcdir@
@@ -566,7 +580,6 @@
 	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu gst/subparse/Makefile'; \
 	$(am__cd) $(top_srcdir) && \
 	  $(AUTOMAKE) --gnu gst/subparse/Makefile
-.PRECIOUS: Makefile
 Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
 	@case '$?' in \
 	  *config.status*) \
@@ -915,6 +928,8 @@
 	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.
diff --git a/gst/subparse/gstsubparse.c b/gst/subparse/gstsubparse.c
index b565e93..5dadb0a 100644
--- a/gst/subparse/gstsubparse.c
+++ b/gst/subparse/gstsubparse.c
@@ -135,7 +135,7 @@
       "Subtitle parser", "Codec/Parser/Subtitle",
       "Parses subtitle (.sub) files into text streams",
       "Gustavo J. A. M. Carneiro <gjc@inescporto.pt>, "
-      "GStreamer maintainers <gstreamer-devel@lists.sourceforge.net>");
+      "GStreamer maintainers <gstreamer-devel@lists.freedesktop.org>");
 
   element_class->change_state = gst_sub_parse_change_state;
 
@@ -452,7 +452,7 @@
         self->detected_encoding, err->message);
     g_free (self->detected_encoding);
     self->detected_encoding = NULL;
-    g_error_free (err);
+    g_clear_error (&err);
   }
 
   /* Otherwise check if it's UTF8 */
@@ -484,7 +484,7 @@
   if (err) {
     GST_WARNING_OBJECT (self, "could not convert string from '%s' to UTF-8: %s",
         encoding, err->message);
-    g_error_free (err);
+    g_clear_error (&err);
 
     /* invalid input encoding, fall back to ISO-8859-15 (always succeeds) */
     ret = gst_convert_to_utf8 (str, len, "ISO-8859-15", consumed, NULL);
@@ -1214,7 +1214,7 @@
           G_REGEX_RAW | G_REGEX_OPTIMIZE, 0, &gerr);
       if (result == NULL) {
         g_warning ("Compilation of mdvd regex failed: %s", gerr->message);
-        g_error_free (gerr);
+        g_clear_error (&gerr);
       }
       break;
     case GST_SUB_PARSE_REGEX_SUBRIP:
@@ -1225,7 +1225,7 @@
           G_REGEX_RAW | G_REGEX_OPTIMIZE, 0, &gerr);
       if (result == NULL) {
         g_warning ("Compilation of subrip regex failed: %s", gerr->message);
-        g_error_free (gerr);
+        g_clear_error (&gerr);
       }
       break;
     case GST_SUB_PARSE_REGEX_DKS:
@@ -1233,7 +1233,7 @@
           G_REGEX_RAW | G_REGEX_OPTIMIZE, 0, &gerr);
       if (result == NULL) {
         g_warning ("Compilation of dks regex failed: %s", gerr->message);
-        g_error_free (gerr);
+        g_clear_error (&gerr);
       }
       break;
     default:
@@ -1275,15 +1275,15 @@
   subrip_grx = (GRegex *) subrip_rx_once.retval;
   dks_grx = (GRegex *) dks_rx_once.retval;
 
-  if (g_regex_match (mdvd_grx, match_str, 0, NULL) == TRUE) {
+  if (g_regex_match (mdvd_grx, match_str, 0, NULL)) {
     GST_LOG ("MicroDVD (frame based) format detected");
     return GST_SUB_PARSE_FORMAT_MDVDSUB;
   }
-  if (g_regex_match (subrip_grx, match_str, 0, NULL) == TRUE) {
+  if (g_regex_match (subrip_grx, match_str, 0, NULL)) {
     GST_LOG ("SubRip (time based) format detected");
     return GST_SUB_PARSE_FORMAT_SUBRIP;
   }
-  if (g_regex_match (dks_grx, match_str, 0, NULL) == TRUE) {
+  if (g_regex_match (dks_grx, match_str, 0, NULL)) {
     GST_LOG ("DKS (time based) format detected");
     return GST_SUB_PARSE_FORMAT_DKS;
   }
@@ -1764,7 +1764,7 @@
     if (converted_str == NULL) {
       GST_DEBUG ("Encoding '%s' detected but conversion failed: %s", encoding,
           err->message);
-      g_error_free (err);
+      g_clear_error (&err);
     } else {
       g_free (str);
       str = converted_str;
diff --git a/gst/tcp/Makefile.am b/gst/tcp/Makefile.am
index c6f50d9..1ff06a3 100644
--- a/gst/tcp/Makefile.am
+++ b/gst/tcp/Makefile.am
@@ -8,6 +8,7 @@
 endif
 
 libgsttcp_la_SOURCES = \
+	gstsocketsrc.c \
 	gsttcpplugin.c \
 	gsttcpclientsrc.c gsttcpclientsink.c \
 	$(multifdsink_SOURCES) \
@@ -15,12 +16,13 @@
 	gstmultisocketsink.c  \
 	gsttcpserversrc.c gsttcpserversink.c
 
-libgsttcp_la_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_BASE_CFLAGS) $(GST_CFLAGS) $(GIO_CFLAGS)
+libgsttcp_la_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_BASE_CFLAGS) $(GST_NET_CFLAGS) $(GST_CFLAGS) $(GIO_CFLAGS)
 libgsttcp_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS)
-libgsttcp_la_LIBADD = $(GST_BASE_LIBS) $(GST_LIBS) $(GIO_LIBS)
+libgsttcp_la_LIBADD = $(GST_BASE_LIBS) $(GST_NET_LIBS) $(GST_LIBS) $(GIO_LIBS)
 libgsttcp_la_LIBTOOLFLAGS = $(GST_PLUGIN_LIBTOOLFLAGS)
 
 noinst_HEADERS = \
+  gstsocketsrc.h \
   gsttcp.h \
   gsttcpclientsrc.h gsttcpclientsink.h \
   gstmultifdsink.h  \
@@ -28,18 +30,3 @@
   gsttcpserversrc.h gsttcpserversink.h gstmultihandlesink.h
 
 CLEANFILES = $(BUILT_SOURCES)
-
-Android.mk: Makefile.am $(BUILT_SOURCES)
-	androgenizer \
-	-:PROJECT libgsttcp -:SHARED libgsttcp \
-	 -:TAGS eng debug \
-         -:REL_TOP $(top_srcdir) -:ABS_TOP $(abs_top_srcdir) \
-	 -:SOURCES $(libgsttcp_la_SOURCES) \
-	 	   $(nodist_libgsttcp_la_SOURCES) \
-	 -:CFLAGS $(DEFS) $(DEFAULT_INCLUDES) $(libgsttcp_la_CFLAGS) \
-	 -:LDFLAGS $(libgsttcp_la_LDFLAGS) \
-	           $(libgsttcp_la_LIBADD) \
-	           -ldl \
-	 -:PASSTHROUGH LOCAL_ARM_MODE:=arm \
-		       LOCAL_MODULE_PATH:='$$(TARGET_OUT)/lib/gstreamer-0.10' \
-	> $@
diff --git a/gst/tcp/Makefile.in b/gst/tcp/Makefile.in
index 8bb41b5..78ea37c 100644
--- a/gst/tcp/Makefile.in
+++ b/gst/tcp/Makefile.in
@@ -1,7 +1,7 @@
-# Makefile.in generated by automake 1.14.1 from Makefile.am.
+# Makefile.in generated by automake 1.15 from Makefile.am.
 # @configure_input@
 
-# Copyright (C) 1994-2013 Free Software Foundation, Inc.
+# 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,
@@ -16,7 +16,17 @@
 
 
 VPATH = @srcdir@
-am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)'
+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 \
       ?) ;; \
@@ -81,8 +91,6 @@
 host_triplet = @host@
 target_triplet = @target@
 subdir = gst/tcp
-DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \
-	$(top_srcdir)/depcomp $(noinst_HEADERS) README
 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 \
@@ -103,7 +111,6 @@
 	$(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-x11.m4 \
 	$(top_srcdir)/common/m4/gst.m4 \
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
@@ -120,6 +127,8 @@
 	$(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 =
@@ -155,14 +164,16 @@
 LTLIBRARIES = $(plugin_LTLIBRARIES)
 am__DEPENDENCIES_1 =
 libgsttcp_la_DEPENDENCIES = $(am__DEPENDENCIES_1) \
-	$(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1)
-am__libgsttcp_la_SOURCES_DIST = gsttcpplugin.c gsttcpclientsrc.c \
-	gsttcpclientsink.c gstmultifdsink.c gstmultihandlesink.c \
-	gstmultisocketsink.c gsttcpserversrc.c gsttcpserversink.c
+	$(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
+	$(am__DEPENDENCIES_1)
+am__libgsttcp_la_SOURCES_DIST = gstsocketsrc.c gsttcpplugin.c \
+	gsttcpclientsrc.c gsttcpclientsink.c gstmultifdsink.c \
+	gstmultihandlesink.c gstmultisocketsink.c gsttcpserversrc.c \
+	gsttcpserversink.c
 @HAVE_SYS_SOCKET_H_TRUE@am__objects_1 =  \
 @HAVE_SYS_SOCKET_H_TRUE@	libgsttcp_la-gstmultifdsink.lo
-am_libgsttcp_la_OBJECTS = libgsttcp_la-gsttcpplugin.lo \
-	libgsttcp_la-gsttcpclientsrc.lo \
+am_libgsttcp_la_OBJECTS = libgsttcp_la-gstsocketsrc.lo \
+	libgsttcp_la-gsttcpplugin.lo libgsttcp_la-gsttcpclientsrc.lo \
 	libgsttcp_la-gsttcpclientsink.lo $(am__objects_1) \
 	libgsttcp_la-gstmultihandlesink.lo \
 	libgsttcp_la-gstmultisocketsink.lo \
@@ -238,6 +249,7 @@
   done | $(am__uniquify_input)`
 ETAGS = etags
 CTAGS = ctags
+am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp README
 DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
 ACLOCAL = @ACLOCAL@
 ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@
@@ -298,6 +310,8 @@
 GIO_CFLAGS = @GIO_CFLAGS@
 GIO_LDFLAGS = @GIO_LDFLAGS@
 GIO_LIBS = @GIO_LIBS@
+GIO_UNIX_2_0_CFLAGS = @GIO_UNIX_2_0_CFLAGS@
+GIO_UNIX_2_0_LIBS = @GIO_UNIX_2_0_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
@@ -327,6 +341,8 @@
 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_OPTION_CFLAGS = @GST_OPTION_CFLAGS@
 GST_OPTION_CXXFLAGS = @GST_OPTION_CXXFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
@@ -354,7 +370,6 @@
 GTK_X11_CFLAGS = @GTK_X11_CFLAGS@
 GTK_X11_LIBS = @GTK_X11_LIBS@
 HAVE_CDPARANOIA = @HAVE_CDPARANOIA@
-HAVE_X = @HAVE_X@
 HAVE_XSHM = @HAVE_XSHM@
 HAVE_ZLIB = @HAVE_ZLIB@
 HTML_DIR = @HTML_DIR@
@@ -369,6 +384,7 @@
 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@
@@ -458,13 +474,12 @@
 XGETTEXT = @XGETTEXT@
 XGETTEXT_015 = @XGETTEXT_015@
 XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
-XMKMF = @XMKMF@
+XSHM_CFLAGS = @XSHM_CFLAGS@
 XSHM_LIBS = @XSHM_LIBS@
+XVIDEO_CFLAGS = @XVIDEO_CFLAGS@
 XVIDEO_LIBS = @XVIDEO_LIBS@
 X_CFLAGS = @X_CFLAGS@
-X_EXTRA_LIBS = @X_EXTRA_LIBS@
 X_LIBS = @X_LIBS@
-X_PRE_LIBS = @X_PRE_LIBS@
 ZLIB_CFLAGS = @ZLIB_CFLAGS@
 ZLIB_LIBS = @ZLIB_LIBS@
 abs_builddir = @abs_builddir@
@@ -517,6 +532,7 @@
 psdir = @psdir@
 pyexecdir = @pyexecdir@
 pythondir = @pythondir@
+runstatedir = @runstatedir@
 sbindir = @sbindir@
 sharedstatedir = @sharedstatedir@
 srcdir = @srcdir@
@@ -535,6 +551,7 @@
 @HAVE_SYS_SOCKET_H_TRUE@	gstmultifdsink.c
 
 libgsttcp_la_SOURCES = \
+	gstsocketsrc.c \
 	gsttcpplugin.c \
 	gsttcpclientsrc.c gsttcpclientsink.c \
 	$(multifdsink_SOURCES) \
@@ -542,11 +559,12 @@
 	gstmultisocketsink.c  \
 	gsttcpserversrc.c gsttcpserversink.c
 
-libgsttcp_la_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_BASE_CFLAGS) $(GST_CFLAGS) $(GIO_CFLAGS)
+libgsttcp_la_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_BASE_CFLAGS) $(GST_NET_CFLAGS) $(GST_CFLAGS) $(GIO_CFLAGS)
 libgsttcp_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS)
-libgsttcp_la_LIBADD = $(GST_BASE_LIBS) $(GST_LIBS) $(GIO_LIBS)
+libgsttcp_la_LIBADD = $(GST_BASE_LIBS) $(GST_NET_LIBS) $(GST_LIBS) $(GIO_LIBS)
 libgsttcp_la_LIBTOOLFLAGS = $(GST_PLUGIN_LIBTOOLFLAGS)
 noinst_HEADERS = \
+  gstsocketsrc.h \
   gsttcp.h \
   gsttcpclientsrc.h gsttcpclientsink.h \
   gstmultifdsink.h  \
@@ -570,7 +588,6 @@
 	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu gst/tcp/Makefile'; \
 	$(am__cd) $(top_srcdir) && \
 	  $(AUTOMAKE) --gnu gst/tcp/Makefile
-.PRECIOUS: Makefile
 Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
 	@case '$?' in \
 	  *config.status*) \
@@ -636,6 +653,7 @@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgsttcp_la-gstmultifdsink.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgsttcp_la-gstmultihandlesink.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgsttcp_la-gstmultisocketsink.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgsttcp_la-gstsocketsrc.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgsttcp_la-gsttcpclientsink.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgsttcp_la-gsttcpclientsrc.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgsttcp_la-gsttcpplugin.Plo@am__quote@
@@ -666,6 +684,13 @@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $<
 
+libgsttcp_la-gstsocketsrc.lo: gstsocketsrc.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgsttcp_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgsttcp_la_CFLAGS) $(CFLAGS) -MT libgsttcp_la-gstsocketsrc.lo -MD -MP -MF $(DEPDIR)/libgsttcp_la-gstsocketsrc.Tpo -c -o libgsttcp_la-gstsocketsrc.lo `test -f 'gstsocketsrc.c' || echo '$(srcdir)/'`gstsocketsrc.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgsttcp_la-gstsocketsrc.Tpo $(DEPDIR)/libgsttcp_la-gstsocketsrc.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='gstsocketsrc.c' object='libgsttcp_la-gstsocketsrc.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 $(libgsttcp_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgsttcp_la_CFLAGS) $(CFLAGS) -c -o libgsttcp_la-gstsocketsrc.lo `test -f 'gstsocketsrc.c' || echo '$(srcdir)/'`gstsocketsrc.c
+
 libgsttcp_la-gsttcpplugin.lo: gsttcpplugin.c
 @am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgsttcp_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgsttcp_la_CFLAGS) $(CFLAGS) -MT libgsttcp_la-gsttcpplugin.lo -MD -MP -MF $(DEPDIR)/libgsttcp_la-gsttcpplugin.Tpo -c -o libgsttcp_la-gsttcpplugin.lo `test -f 'gsttcpplugin.c' || echo '$(srcdir)/'`gsttcpplugin.c
 @am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgsttcp_la-gsttcpplugin.Tpo $(DEPDIR)/libgsttcp_la-gsttcpplugin.Plo
@@ -936,21 +961,8 @@
 	pdf pdf-am ps ps-am tags tags-am uninstall uninstall-am \
 	uninstall-pluginLTLIBRARIES
 
+.PRECIOUS: Makefile
 
-Android.mk: Makefile.am $(BUILT_SOURCES)
-	androgenizer \
-	-:PROJECT libgsttcp -:SHARED libgsttcp \
-	 -:TAGS eng debug \
-         -:REL_TOP $(top_srcdir) -:ABS_TOP $(abs_top_srcdir) \
-	 -:SOURCES $(libgsttcp_la_SOURCES) \
-	 	   $(nodist_libgsttcp_la_SOURCES) \
-	 -:CFLAGS $(DEFS) $(DEFAULT_INCLUDES) $(libgsttcp_la_CFLAGS) \
-	 -:LDFLAGS $(libgsttcp_la_LDFLAGS) \
-	           $(libgsttcp_la_LIBADD) \
-	           -ldl \
-	 -:PASSTHROUGH LOCAL_ARM_MODE:=arm \
-		       LOCAL_MODULE_PATH:='$$(TARGET_OUT)/lib/gstreamer-0.10' \
-	> $@
 
 # 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/tcp/gstmultifdsink.c b/gst/tcp/gstmultifdsink.c
index ab95985..c7b591f 100644
--- a/gst/tcp/gstmultifdsink.c
+++ b/gst/tcp/gstmultifdsink.c
@@ -153,8 +153,7 @@
 enum
 {
   PROP_0,
-  PROP_HANDLE_READ,
-  PROP_LAST
+  PROP_HANDLE_READ
 };
 
 static void gst_multi_fd_sink_stop_pre (GstMultiHandleSink * mhsink);
diff --git a/gst/tcp/gstmultihandlesink.c b/gst/tcp/gstmultihandlesink.c
index aa1cfb2..6ddbc98 100644
--- a/gst/tcp/gstmultihandlesink.c
+++ b/gst/tcp/gstmultihandlesink.c
@@ -194,9 +194,7 @@
 
   PROP_RESEND_STREAMHEADER,
 
-  PROP_NUM_HANDLES,
-
-  PROP_LAST
+  PROP_NUM_HANDLES
 };
 
 GType
@@ -1911,7 +1909,7 @@
   /* if we get IN_CAPS buffers, but the previous buffer was not IN_CAPS,
    * it means we're getting new streamheader buffers, and we should clear
    * the old ones */
-  if (in_caps && sink->previous_buffer_in_caps == FALSE) {
+  if (in_caps && !sink->previous_buffer_in_caps) {
     GST_DEBUG_OBJECT (sink,
         "receiving new HEADER buffers, clearing old streamheader");
     g_slist_foreach (sink->streamheader, (GFunc) gst_mini_object_unref, NULL);
diff --git a/gst/tcp/gstmultisocketsink.c b/gst/tcp/gstmultisocketsink.c
index 01647b1..d8e587b 100644
--- a/gst/tcp/gstmultisocketsink.c
+++ b/gst/tcp/gstmultisocketsink.c
@@ -103,6 +103,7 @@
 #endif
 
 #include <gst/gst-i18n-plugin.h>
+#include <gst/net/gstnetcontrolmessagemeta.h>
 
 #include <string.h>
 
@@ -574,7 +575,7 @@
     GST_DEBUG_OBJECT (sink, "%s client wants us to read", mhclient->debug);
 
     navail = g_socket_get_available_bytes (mhclient->handle.socket);
-    if (navail < 0)
+    if (navail <= 0)
       break;
 
     nread =
@@ -600,6 +601,120 @@
   return ret;
 }
 
+/**
+ * map_memory_output_vector_n:
+ * @buf: The #GstBuffer that should be mapped
+ * @offset: Offset into the buffer that should be mapped
+ * @vectors: (out,array length=num_vectors): an array of #GOutputVector structs to write into
+ * @mapinfo: (out,array length=num_vectors): an array of #GstMapInfo structs to write into
+ * @num_vectors: the number of elements in @vectors to prevent buffer overruns
+ *
+ * Maps a buffer into memory, populating a #GOutputVector to use scatter-gather
+ * I/O to send the data over a socket.  The whole buffer won't be mapped into
+ * memory if it consists of more than @num_vectors #GstMemory s.
+ *
+ * Use #unmap_n_memorys after you are
+ * finished with the mappings.
+ *
+ * Returns: The number of GstMemorys mapped
+ */
+static int
+map_n_memory_output_vector (GstBuffer * buf, size_t offset,
+    GOutputVector * vectors, GstMapInfo * mapinfo, int num_vectors)
+{
+  guint mem_idx, mem_len;
+  gsize mem_skip;
+  size_t maxsize;
+  int i;
+
+  g_return_val_if_fail (num_vectors > 0, 0);
+  memset (vectors, 0, sizeof (GOutputVector) * num_vectors);
+
+  maxsize = gst_buffer_get_size (buf) - offset;
+  if (!gst_buffer_find_memory (buf, offset, maxsize, &mem_idx, &mem_len,
+          &mem_skip))
+    g_error ("Unable to map memory at offset %" G_GSIZE_FORMAT ", buffer "
+        "length is %" G_GSIZE_FORMAT, offset, gst_buffer_get_size (buf));
+
+  for (i = 0; i < mem_len && i < num_vectors; i++) {
+    GstMapInfo map = { 0 };
+    GstMemory *mem = gst_buffer_peek_memory (buf, mem_idx + i);
+    if (!gst_memory_map (mem, &map, GST_MAP_READ))
+      g_error ("Unable to map memory %p.  This should never happen.", mem);
+
+    if (i == 0) {
+      vectors[i].buffer = map.data + mem_skip;
+      vectors[i].size = map.size - mem_skip;
+    } else {
+      vectors[i].buffer = map.data;
+      vectors[i].size = map.size;
+    }
+    mapinfo[i] = map;
+  }
+  return i;
+}
+
+/**
+ * map_n_memory_output_vector:
+ * @buf: The #GstBuffer that should be mapped
+ * @offset: Offset into the buffer that should be mapped
+ * @vectors: (out,array length=num_vectors): an array of #GOutputVector structs to write into
+ * @num_vectors: the number of elements in @vectors to prevent buffer overruns
+ *
+ * Returns: The number of GstMemorys mapped
+ */
+static void
+unmap_n_memorys (GstMapInfo * mapinfo, int num_mappings)
+{
+  int i;
+  g_return_if_fail (num_mappings > 0);
+
+  for (i = 0; i < num_mappings; i++)
+    gst_memory_unmap (mapinfo[i].memory, &mapinfo[i]);
+}
+
+static gsize
+gst_buffer_get_cmsg_list (GstBuffer * buf, GSocketControlMessage ** msgs,
+    gsize msg_space)
+{
+  gpointer iter_state = NULL;
+  GstMeta *meta;
+  gsize msg_count = 0;
+
+  while ((meta = gst_buffer_iterate_meta (buf, &iter_state)) != NULL
+      && msg_count < msg_space) {
+    if (meta->info->api == GST_NET_CONTROL_MESSAGE_META_API_TYPE)
+      msgs[msg_count++] = ((GstNetControlMessageMeta *) meta)->message;
+  }
+
+  return msg_count;
+}
+
+#define CMSG_MAX 255
+
+static gssize
+gst_multi_socket_sink_write (GstMultiSocketSink * sink,
+    GSocket * sock, GstBuffer * buffer, gsize bufoffset,
+    GCancellable * cancellable, GError ** err)
+{
+  GstMapInfo maps[8];
+  GOutputVector vec[8];
+  guint mems_mapped;
+  gssize wrote;
+  GSocketControlMessage *cmsgs[CMSG_MAX];
+  gsize msg_count;
+
+  mems_mapped = map_n_memory_output_vector (buffer, bufoffset, vec, maps, 8);
+
+  msg_count = gst_buffer_get_cmsg_list (buffer, cmsgs, CMSG_MAX);
+
+  wrote =
+      g_socket_send_message (sock, NULL, vec, mems_mapped, cmsgs, msg_count, 0,
+      cancellable, err);
+  unmap_n_memorys (maps, mems_mapped);
+  return wrote;
+}
+
 /* Handle a write on a client,
  * which indicates a read request from a client.
  *
@@ -644,8 +759,6 @@
 
   more = TRUE;
   do {
-    gint maxsize;
-
     if (!mhclient->sending) {
       /* client is not working on a buffer */
       if (mhclient->bufpos == -1) {
@@ -725,22 +838,12 @@
     if (mhclient->sending) {
       gssize wrote;
       GstBuffer *head;
-      GstMapInfo map;
 
       /* pick first buffer from list */
       head = GST_BUFFER (mhclient->sending->data);
 
-      gst_buffer_map (head, &map, GST_MAP_READ);
-      maxsize = map.size - mhclient->bufoffset;
-
-      /* FIXME: specific */
-      /* try to write the complete buffer */
-
-      wrote =
-          g_socket_send (mhclient->handle.socket,
-          (gchar *) map.data + mhclient->bufoffset, maxsize, sink->cancellable,
-          &err);
-      gst_buffer_unmap (head, &map);
+      wrote = gst_multi_socket_sink_write (sink, mhclient->handle.socket, head,
+          mhclient->bufoffset, sink->cancellable, &err);
 
       if (wrote < 0) {
         /* hmm error.. */
@@ -751,11 +854,12 @@
           GST_LOG_OBJECT (sink, "write would block %p",
               mhclient->handle.socket);
           more = FALSE;
+          g_clear_error (&err);
         } else {
           goto write_error;
         }
       } else {
-        if (wrote < maxsize) {
+        if (wrote < (gst_buffer_get_size (head) - mhclient->bufoffset)) {
           /* partial write, try again now */
           GST_LOG_OBJECT (sink,
               "partial write on %p of %" G_GSSIZE_FORMAT " bytes",
@@ -1069,7 +1173,8 @@
   sink = GST_MULTI_SOCKET_SINK (bsink);
 
   GST_DEBUG_OBJECT (sink, "unset flushing");
-  g_cancellable_reset (sink->cancellable);
+  g_object_unref (sink->cancellable);
+  sink->cancellable = g_cancellable_new ();
 
   return TRUE;
 }
diff --git a/gst/tcp/gstmultisocketsink.h b/gst/tcp/gstmultisocketsink.h
index 6111b16..e1d25ec 100644
--- a/gst/tcp/gstmultisocketsink.h
+++ b/gst/tcp/gstmultisocketsink.h
@@ -43,8 +43,6 @@
   (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_MULTI_SOCKET_SINK))
 #define GST_IS_MULTI_SOCKET_SINK_CLASS(klass) \
   (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_MULTI_SOCKET_SINK))
-#define GST_MULTI_SOCKET_SINK_GET_CLASS(klass) \
-  (G_TYPE_INSTANCE_GET_CLASS ((klass), GST_TYPE_MULTI_SOCKET_SINK, GstMultiSocketSinkClass))
 
 
 typedef struct _GstMultiSocketSink GstMultiSocketSink;
diff --git a/gst/tcp/gstsocketsrc.c b/gst/tcp/gstsocketsrc.c
new file mode 100644
index 0000000..149ced1
--- /dev/null
+++ b/gst/tcp/gstsocketsrc.c
@@ -0,0 +1,394 @@
+/* GStreamer
+ * Copyright (C) <1999> Erik Walthinsen <omega@cse.ogi.edu>
+ * Copyright (C) <2004> Thomas Vander Stichele <thomas at apestaart dot org>
+ * Copyright (C) <2011> Collabora Ltd.
+ *     Author: Sebastian Dröge <sebastian.droege@collabora.co.uk>
+ * Copyright (C) <2014> William Manley <will@williammanley.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.
+ */
+
+/**
+ * SECTION:element-socketsrc
+ *
+ * Receive data from a socket.
+ *
+ * As compared to other elements:
+ *
+ * socketsrc can be considered a source counterpart to the #multisocketsink
+ * sink.
+ *
+ * socketsrc can also be considered a generalization of #tcpclientsrc and
+ * #tcpserversrc: it contains all the logic required to communicate over the
+ * socket but none of the logic for creating the sockets/establishing the
+ * connection in the first place, allowing the user to accomplish this
+ * externally in whatever manner they wish making it applicable to other types
+ * of sockets besides TCP.
+ *
+ * As compared to #fdsrc socketsrc is socket specific and deals with #GSocket
+ * objects rather than sockets via integer file-descriptors.
+ *
+ * @see_also: #multisocketsink
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <gst/gst-i18n-plugin.h>
+#include <gst/net/gstnetcontrolmessagemeta.h>
+#include "gstsocketsrc.h"
+#include "gsttcp.h"
+
+GST_DEBUG_CATEGORY_STATIC (socketsrc_debug);
+#define GST_CAT_DEFAULT socketsrc_debug
+
+#define MAX_READ_SIZE                   4 * 1024
+
+
+static GstStaticPadTemplate srctemplate = GST_STATIC_PAD_TEMPLATE ("src",
+    GST_PAD_SRC,
+    GST_PAD_ALWAYS,
+    GST_STATIC_CAPS_ANY);
+
+
+enum
+{
+  PROP_0,
+  PROP_SOCKET,
+  PROP_CAPS,
+};
+
+enum
+{
+  CONNECTION_CLOSED_BY_PEER,
+  LAST_SIGNAL
+};
+
+static guint gst_socket_src_signals[LAST_SIGNAL] = { 0 };
+
+#define gst_socket_src_parent_class parent_class
+G_DEFINE_TYPE (GstSocketSrc, gst_socket_src, GST_TYPE_PUSH_SRC);
+
+
+static void gst_socket_src_finalize (GObject * gobject);
+
+static GstCaps *gst_socketsrc_getcaps (GstBaseSrc * src, GstCaps * filter);
+static GstFlowReturn gst_socket_src_fill (GstPushSrc * psrc,
+    GstBuffer * outbuf);
+static gboolean gst_socket_src_unlock (GstBaseSrc * bsrc);
+static gboolean gst_socket_src_unlock_stop (GstBaseSrc * bsrc);
+
+static void gst_socket_src_set_property (GObject * object, guint prop_id,
+    const GValue * value, GParamSpec * pspec);
+static void gst_socket_src_get_property (GObject * object, guint prop_id,
+    GValue * value, GParamSpec * pspec);
+
+#define SWAP(a, b) do { GSocket* _swap_tmp = a; a = b; b = _swap_tmp; } while (0);
+
+static void
+gst_socket_src_class_init (GstSocketSrcClass * klass)
+{
+  GObjectClass *gobject_class;
+  GstElementClass *gstelement_class;
+  GstBaseSrcClass *gstbasesrc_class;
+  GstPushSrcClass *gstpush_src_class;
+
+  gobject_class = (GObjectClass *) klass;
+  gstelement_class = (GstElementClass *) klass;
+  gstbasesrc_class = (GstBaseSrcClass *) klass;
+  gstpush_src_class = (GstPushSrcClass *) klass;
+
+  gobject_class->set_property = gst_socket_src_set_property;
+  gobject_class->get_property = gst_socket_src_get_property;
+  gobject_class->finalize = gst_socket_src_finalize;
+
+  g_object_class_install_property (gobject_class, PROP_SOCKET,
+      g_param_spec_object ("socket", "Socket",
+          "The socket to receive packets from", G_TYPE_SOCKET,
+          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+
+  g_object_class_install_property (gobject_class, PROP_CAPS,
+      g_param_spec_boxed ("caps", "Caps",
+          "The caps of the source pad", GST_TYPE_CAPS,
+          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+
+  gst_socket_src_signals[CONNECTION_CLOSED_BY_PEER] =
+      g_signal_new ("connection-closed-by-peer", G_TYPE_FROM_CLASS (klass),
+      G_SIGNAL_RUN_FIRST, G_STRUCT_OFFSET (GstSocketSrcClass,
+          connection_closed_by_peer), NULL, NULL, NULL, G_TYPE_NONE, 0);
+
+  gst_element_class_add_pad_template (gstelement_class,
+      gst_static_pad_template_get (&srctemplate));
+
+  gst_element_class_set_static_metadata (gstelement_class,
+      "socket source", "Source/Network",
+      "Receive data from a socket",
+      "Thomas Vander Stichele <thomas at apestaart dot org>, "
+      "William Manley <will@williammanley.net>");
+
+  gstbasesrc_class->get_caps = gst_socketsrc_getcaps;
+  gstbasesrc_class->unlock = gst_socket_src_unlock;
+  gstbasesrc_class->unlock_stop = gst_socket_src_unlock_stop;
+
+  gstpush_src_class->fill = gst_socket_src_fill;
+
+  GST_DEBUG_CATEGORY_INIT (socketsrc_debug, "socketsrc", 0, "Socket Source");
+}
+
+static void
+gst_socket_src_init (GstSocketSrc * this)
+{
+  this->socket = NULL;
+  this->cancellable = g_cancellable_new ();
+}
+
+static void
+gst_socket_src_finalize (GObject * gobject)
+{
+  GstSocketSrc *this = GST_SOCKET_SRC (gobject);
+
+  if (this->caps)
+    gst_caps_unref (this->caps);
+  g_clear_object (&this->cancellable);
+  g_clear_object (&this->socket);
+
+  G_OBJECT_CLASS (parent_class)->finalize (gobject);
+}
+
+static GstCaps *
+gst_socketsrc_getcaps (GstBaseSrc * src, GstCaps * filter)
+{
+  GstSocketSrc *socketsrc;
+  GstCaps *caps, *result;
+
+  socketsrc = GST_SOCKET_SRC (src);
+
+  GST_OBJECT_LOCK (src);
+  if ((caps = socketsrc->caps))
+    gst_caps_ref (caps);
+  GST_OBJECT_UNLOCK (src);
+
+  if (caps) {
+    if (filter) {
+      result = gst_caps_intersect_full (filter, caps, GST_CAPS_INTERSECT_FIRST);
+      gst_caps_unref (caps);
+    } else {
+      result = caps;
+    }
+  } else {
+    result = (filter) ? gst_caps_ref (filter) : gst_caps_new_any ();
+  }
+  return result;
+}
+
+static GstFlowReturn
+gst_socket_src_fill (GstPushSrc * psrc, GstBuffer * outbuf)
+{
+  GstSocketSrc *src;
+  GstFlowReturn ret = GST_FLOW_OK;
+  gssize rret;
+  GError *err = NULL;
+  GstMapInfo map;
+  GSocket *socket = NULL;
+  GSocketControlMessage **messages = NULL;
+  gint num_messages = 0;
+  gint i;
+  GInputVector ivec;
+  gint flags = 0;
+
+  src = GST_SOCKET_SRC (psrc);
+
+  GST_OBJECT_LOCK (src);
+
+  if (src->socket)
+    socket = g_object_ref (src->socket);
+
+  GST_OBJECT_UNLOCK (src);
+
+  if (socket == NULL)
+    goto no_socket;
+
+  GST_LOG_OBJECT (src, "asked for a buffer");
+
+retry:
+  gst_buffer_map (outbuf, &map, GST_MAP_READWRITE);
+  ivec.buffer = map.data;
+  ivec.size = map.size;
+  rret =
+      g_socket_receive_message (socket, NULL, &ivec, 1, &messages,
+      &num_messages, &flags, src->cancellable, &err);
+  gst_buffer_unmap (outbuf, &map);
+
+  for (i = 0; i < num_messages; i++) {
+    gst_buffer_add_net_control_message_meta (outbuf, messages[i]);
+    g_object_unref (messages[i]);
+    messages[i] = NULL;
+  }
+  g_free (messages);
+
+  if (rret == 0) {
+    GSocket *tmp = NULL;
+    GST_DEBUG_OBJECT (src, "Received EOS on socket %p fd %i", socket,
+        g_socket_get_fd (socket));
+
+    /* We've hit EOS but we'll send this signal to allow someone to change
+     * our socket before we send EOS downstream. */
+    g_signal_emit (src, gst_socket_src_signals[CONNECTION_CLOSED_BY_PEER], 0);
+
+    GST_OBJECT_LOCK (src);
+
+    if (src->socket)
+      tmp = g_object_ref (src->socket);
+
+    GST_OBJECT_UNLOCK (src);
+
+    /* Do this dance with tmp to avoid unreffing with the lock held */
+    if (tmp != NULL && tmp != socket) {
+      SWAP (socket, tmp);
+      g_clear_object (&tmp);
+
+      GST_INFO_OBJECT (src, "New socket available after EOS %p fd %i: Retrying",
+          socket, g_socket_get_fd (socket));
+
+      /* retry with our new socket: */
+      goto retry;
+    } else {
+      g_clear_object (&tmp);
+      GST_INFO_OBJECT (src, "Forwarding EOS downstream");
+      ret = GST_FLOW_EOS;
+    }
+  } else if (rret < 0) {
+    if (g_error_matches (err, G_IO_ERROR, G_IO_ERROR_CANCELLED)) {
+      ret = GST_FLOW_FLUSHING;
+      GST_DEBUG_OBJECT (src, "Cancelled reading from socket");
+    } else {
+      ret = GST_FLOW_ERROR;
+      GST_ELEMENT_ERROR (src, RESOURCE, READ, (NULL),
+          ("Failed to read from socket: %s", err->message));
+    }
+  } else {
+    ret = GST_FLOW_OK;
+    gst_buffer_resize (outbuf, 0, rret);
+
+    GST_LOG_OBJECT (src,
+        "Returning buffer from _get of size %" G_GSIZE_FORMAT ", ts %"
+        GST_TIME_FORMAT ", dur %" GST_TIME_FORMAT
+        ", offset %" G_GINT64_FORMAT ", offset_end %" G_GINT64_FORMAT,
+        gst_buffer_get_size (outbuf),
+        GST_TIME_ARGS (GST_BUFFER_TIMESTAMP (outbuf)),
+        GST_TIME_ARGS (GST_BUFFER_DURATION (outbuf)),
+        GST_BUFFER_OFFSET (outbuf), GST_BUFFER_OFFSET_END (outbuf));
+  }
+  g_clear_error (&err);
+  g_clear_object (&socket);
+
+  return ret;
+
+no_socket:
+  {
+    GST_ELEMENT_ERROR (src, RESOURCE, NOT_FOUND, (NULL),
+        ("Cannot receive: No socket set on socketsrc"));
+    return GST_FLOW_ERROR;
+  }
+}
+
+static void
+gst_socket_src_set_property (GObject * object, guint prop_id,
+    const GValue * value, GParamSpec * pspec)
+{
+  GstSocketSrc *socketsrc = GST_SOCKET_SRC (object);
+
+  switch (prop_id) {
+    case PROP_SOCKET:{
+      GSocket *socket = G_SOCKET (g_value_dup_object (value));
+      GST_OBJECT_LOCK (socketsrc);
+      SWAP (socket, socketsrc->socket);
+      GST_OBJECT_UNLOCK (socketsrc);
+      g_clear_object (&socket);
+      break;
+    }
+    case PROP_CAPS:
+    {
+      const GstCaps *new_caps_val = gst_value_get_caps (value);
+      GstCaps *new_caps;
+      GstCaps *old_caps;
+
+      if (new_caps_val == NULL) {
+        new_caps = gst_caps_new_any ();
+      } else {
+        new_caps = gst_caps_copy (new_caps_val);
+      }
+
+      GST_OBJECT_LOCK (socketsrc);
+      old_caps = socketsrc->caps;
+      socketsrc->caps = new_caps;
+      GST_OBJECT_UNLOCK (socketsrc);
+
+      if (old_caps)
+        gst_caps_unref (old_caps);
+
+      gst_pad_mark_reconfigure (GST_BASE_SRC_PAD (socketsrc));
+      break;
+    }
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      break;
+  }
+}
+
+static void
+gst_socket_src_get_property (GObject * object, guint prop_id,
+    GValue * value, GParamSpec * pspec)
+{
+  GstSocketSrc *socketsrc = GST_SOCKET_SRC (object);
+
+  switch (prop_id) {
+    case PROP_SOCKET:
+      g_value_set_object (value, socketsrc->socket);
+      break;
+    case PROP_CAPS:
+      GST_OBJECT_LOCK (socketsrc);
+      gst_value_set_caps (value, socketsrc->caps);
+      GST_OBJECT_UNLOCK (socketsrc);
+      break;
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      break;
+  }
+}
+
+static gboolean
+gst_socket_src_unlock (GstBaseSrc * bsrc)
+{
+  GstSocketSrc *src = GST_SOCKET_SRC (bsrc);
+
+  GST_DEBUG_OBJECT (src, "set to flushing");
+  g_cancellable_cancel (src->cancellable);
+
+  return TRUE;
+}
+
+static gboolean
+gst_socket_src_unlock_stop (GstBaseSrc * bsrc)
+{
+  GstSocketSrc *src = GST_SOCKET_SRC (bsrc);
+
+  GST_DEBUG_OBJECT (src, "unset flushing");
+  g_cancellable_reset (src->cancellable);
+
+  return TRUE;
+}
diff --git a/gst/tcp/gstsocketsrc.h b/gst/tcp/gstsocketsrc.h
new file mode 100644
index 0000000..9529e12
--- /dev/null
+++ b/gst/tcp/gstsocketsrc.h
@@ -0,0 +1,67 @@
+/* GStreamer
+ * Copyright (C) <1999> Erik Walthinsen <omega@cse.ogi.edu>
+ * Copyright (C) <2004> Thomas Vander Stichele <thomas at apestaart dot org>
+ * Copyright (C) <2014> William Manley <will@williammanley.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.
+ */
+
+
+#ifndef __GST_SOCKET_SRC_H__
+#define __GST_SOCKET_SRC_H__
+
+#include <gst/gst.h>
+#include <gst/base/gstpushsrc.h>
+
+#include <gio/gio.h>
+
+G_BEGIN_DECLS
+
+#define GST_TYPE_SOCKET_SRC \
+  (gst_socket_src_get_type())
+#define GST_SOCKET_SRC(obj) \
+  (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_SOCKET_SRC,GstSocketSrc))
+#define GST_SOCKET_SRC_CLASS(klass) \
+  (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_SOCKET_SRC,GstSocketSrcClass))
+#define GST_IS_SOCKET_SRC(obj) \
+  (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_SOCKET_SRC))
+#define GST_IS_SOCKET_SRC_CLASS(klass) \
+  (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_SOCKET_SRC))
+
+typedef struct _GstSocketSrc GstSocketSrc;
+typedef struct _GstSocketSrcClass GstSocketSrcClass;
+
+struct _GstSocketSrc {
+  GstPushSrc element;
+
+ /*< private >*/
+  GstCaps *caps;
+  GSocket *socket;
+  GCancellable *cancellable;
+};
+
+struct _GstSocketSrcClass {
+  GstPushSrcClass parent_class;
+
+  /* signals */
+  void  (*connection_closed_by_peer) (GstElement*);
+};
+
+GType gst_socket_src_get_type (void);
+
+G_END_DECLS
+
+#endif /* __GST_SOCKET_SRC_H__ */
diff --git a/gst/tcp/gsttcpclientsink.c b/gst/tcp/gsttcpclientsink.c
index d2465a6..d23ded4 100644
--- a/gst/tcp/gsttcpclientsink.c
+++ b/gst/tcp/gsttcpclientsink.c
@@ -30,8 +30,9 @@
  * # server:
  * nc -l -p 3000
  * # client:
- * gst-launch fdsink fd=1 ! tcpclientsink port=3000
- * ]| everything you type in the client is shown on the server
+ * gst-launch-1.0 fdsink fd=1 ! tcpclientsink port=3000
+ * ]| everything you type in the client is shown on the server (fd=1 means
+ * standard input which is the command line input file descriptor)
  * </refsect2>
  */
 
@@ -418,7 +419,8 @@
   GstTCPClientSink *sink = GST_TCP_CLIENT_SINK (bsink);
 
   GST_DEBUG_OBJECT (sink, "unset flushing");
-  g_cancellable_reset (sink->cancellable);
+  g_object_unref (sink->cancellable);
+  sink->cancellable = g_cancellable_new ();
 
   return TRUE;
 }
diff --git a/gst/tcp/gsttcpclientsrc.c b/gst/tcp/gsttcpclientsrc.c
index 633665b..776ff42 100644
--- a/gst/tcp/gsttcpclientsrc.c
+++ b/gst/tcp/gsttcpclientsrc.c
@@ -30,7 +30,7 @@
  * # server:
  * nc -l -p 3000
  * # client:
- * gst-launch tcpclientsrc port=3000 ! fdsink fd=2
+ * gst-launch-1.0 tcpclientsrc port=3000 ! fdsink fd=2
  * ]| everything you type in the server is shown on the client
  * </refsect2>
  */
@@ -485,7 +485,8 @@
   GstTCPClientSrc *src = GST_TCP_CLIENT_SRC (bsrc);
 
   GST_DEBUG_OBJECT (src, "unset flushing");
-  g_cancellable_reset (src->cancellable);
+  g_object_unref (src->cancellable);
+  src->cancellable = g_cancellable_new ();
 
   return TRUE;
 }
diff --git a/gst/tcp/gsttcpplugin.c b/gst/tcp/gsttcpplugin.c
index ac9867e..49db6d3 100644
--- a/gst/tcp/gsttcpplugin.c
+++ b/gst/tcp/gsttcpplugin.c
@@ -21,6 +21,7 @@
 #include "config.h"
 #endif
 
+#include "gstsocketsrc.h"
 #include "gsttcpclientsrc.h"
 #include "gsttcpclientsink.h"
 #include "gsttcpserversrc.h"
@@ -33,6 +34,9 @@
 static gboolean
 plugin_init (GstPlugin * plugin)
 {
+  if (!gst_element_register (plugin, "socketsrc", GST_RANK_NONE,
+          GST_TYPE_SOCKET_SRC))
+    return FALSE;
   if (!gst_element_register (plugin, "tcpclientsink", GST_RANK_NONE,
           GST_TYPE_TCP_CLIENT_SINK))
     return FALSE;
diff --git a/gst/tcp/gsttcpserversink.c b/gst/tcp/gsttcpserversink.c
index b805ebc..cb43d2d 100644
--- a/gst/tcp/gsttcpserversink.c
+++ b/gst/tcp/gsttcpserversink.c
@@ -26,9 +26,9 @@
  * <title>Example launch line</title>
  * |[
  * # server:
- * gst-launch fdsrc fd=1 ! tcpserversink port=3000
+ * gst-launch-1.0 fdsrc fd=1 ! tcpserversink port=3000
  * # client:
- * gst-launch tcpclientsrc port=3000 ! fdsink fd=2
+ * gst-launch-1.0 tcpclientsrc port=3000 ! fdsink fd=2
  * ]| 
  * </refsect2>
  */
diff --git a/gst/tcp/gsttcpserversrc.c b/gst/tcp/gsttcpserversrc.c
index d2a09e9..72efb86 100644
--- a/gst/tcp/gsttcpserversrc.c
+++ b/gst/tcp/gsttcpserversrc.c
@@ -28,9 +28,9 @@
  * <title>Example launch line</title>
  * |[
  * # server:
- * gst-launch tcpserversrc port=3000 ! fdsink fd=2
+ * gst-launch-1.0 tcpserversrc port=3000 ! fdsink fd=2
  * # client:
- * gst-launch fdsrc fd=1 ! tcpclientsink port=3000
+ * gst-launch-1.0 fdsrc fd=1 ! tcpclientsink port=3000
  * ]| 
  * </refsect2>
  */
@@ -559,7 +559,8 @@
 {
   GstTCPServerSrc *src = GST_TCP_SERVER_SRC (bsrc);
 
-  g_cancellable_reset (src->cancellable);
+  g_object_unref (src->cancellable);
+  src->cancellable = g_cancellable_new ();
 
   return TRUE;
 }
diff --git a/gst/typefind/Makefile.am b/gst/typefind/Makefile.am
index 414b55d..3213c40 100644
--- a/gst/typefind/Makefile.am
+++ b/gst/typefind/Makefile.am
@@ -10,17 +10,3 @@
 	$(GST_BASE_LIBS) $(GST_LIBS) $(GIO_LIBS)
 
 libgsttypefindfunctions_la_LIBTOOLFLAGS = $(GST_PLUGIN_LIBTOOLFLAGS)
-
-Android.mk: Makefile.am $(BUILT_SOURCES)
-	androgenizer \
-	-:PROJECT libgsttypefindfunctions -:SHARED libgsttypefindfunctions \
-	 -:TAGS eng debug \
-         -:REL_TOP $(top_srcdir) -:ABS_TOP $(abs_top_srcdir) \
-	 -:SOURCES $(libgsttypefindfunctions_la_SOURCES) \
-	 -:CFLAGS $(DEFS) $(DEFAULT_INCLUDES) $(libgsttypefindfunctions_la_CFLAGS) \
-	 -:LDFLAGS $(libgsttypefindfunctions_la_LDFLAGS) \
-	           $(libgsttypefindfunctions_la_LIBADD) \
-	           -ldl \
-	 -:PASSTHROUGH LOCAL_ARM_MODE:=arm \
-		       LOCAL_MODULE_PATH:='$$(TARGET_OUT)/lib/gstreamer-0.10' \
-	> $@
diff --git a/gst/typefind/Makefile.in b/gst/typefind/Makefile.in
index f299db8..cabeeab 100644
--- a/gst/typefind/Makefile.in
+++ b/gst/typefind/Makefile.in
@@ -1,7 +1,7 @@
-# Makefile.in generated by automake 1.14.1 from Makefile.am.
+# Makefile.in generated by automake 1.15 from Makefile.am.
 # @configure_input@
 
-# Copyright (C) 1994-2013 Free Software Foundation, Inc.
+# 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,
@@ -15,7 +15,17 @@
 @SET_MAKE@
 
 VPATH = @srcdir@
-am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)'
+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 \
       ?) ;; \
@@ -80,8 +90,6 @@
 host_triplet = @host@
 target_triplet = @target@
 subdir = gst/typefind
-DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \
-	$(top_srcdir)/depcomp
 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 \
@@ -102,7 +110,6 @@
 	$(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-x11.m4 \
 	$(top_srcdir)/common/m4/gst.m4 \
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
@@ -119,6 +126,7 @@
 	$(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
 mkinstalldirs = $(install_sh) -d
 CONFIG_HEADER = $(top_builddir)/config.h
 CONFIG_CLEAN_FILES =
@@ -229,6 +237,7 @@
   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@
@@ -289,6 +298,8 @@
 GIO_CFLAGS = @GIO_CFLAGS@
 GIO_LDFLAGS = @GIO_LDFLAGS@
 GIO_LIBS = @GIO_LIBS@
+GIO_UNIX_2_0_CFLAGS = @GIO_UNIX_2_0_CFLAGS@
+GIO_UNIX_2_0_LIBS = @GIO_UNIX_2_0_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
@@ -318,6 +329,8 @@
 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_OPTION_CFLAGS = @GST_OPTION_CFLAGS@
 GST_OPTION_CXXFLAGS = @GST_OPTION_CXXFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
@@ -345,7 +358,6 @@
 GTK_X11_CFLAGS = @GTK_X11_CFLAGS@
 GTK_X11_LIBS = @GTK_X11_LIBS@
 HAVE_CDPARANOIA = @HAVE_CDPARANOIA@
-HAVE_X = @HAVE_X@
 HAVE_XSHM = @HAVE_XSHM@
 HAVE_ZLIB = @HAVE_ZLIB@
 HTML_DIR = @HTML_DIR@
@@ -360,6 +372,7 @@
 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@
@@ -449,13 +462,12 @@
 XGETTEXT = @XGETTEXT@
 XGETTEXT_015 = @XGETTEXT_015@
 XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
-XMKMF = @XMKMF@
+XSHM_CFLAGS = @XSHM_CFLAGS@
 XSHM_LIBS = @XSHM_LIBS@
+XVIDEO_CFLAGS = @XVIDEO_CFLAGS@
 XVIDEO_LIBS = @XVIDEO_LIBS@
 X_CFLAGS = @X_CFLAGS@
-X_EXTRA_LIBS = @X_EXTRA_LIBS@
 X_LIBS = @X_LIBS@
-X_PRE_LIBS = @X_PRE_LIBS@
 ZLIB_CFLAGS = @ZLIB_CFLAGS@
 ZLIB_LIBS = @ZLIB_LIBS@
 abs_builddir = @abs_builddir@
@@ -508,6 +520,7 @@
 psdir = @psdir@
 pyexecdir = @pyexecdir@
 pythondir = @pythondir@
+runstatedir = @runstatedir@
 sbindir = @sbindir@
 sharedstatedir = @sharedstatedir@
 srcdir = @srcdir@
@@ -548,7 +561,6 @@
 	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu gst/typefind/Makefile'; \
 	$(am__cd) $(top_srcdir) && \
 	  $(AUTOMAKE) --gnu gst/typefind/Makefile
-.PRECIOUS: Makefile
 Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
 	@case '$?' in \
 	  *config.status*) \
@@ -857,20 +869,8 @@
 	pdf pdf-am ps ps-am tags tags-am uninstall uninstall-am \
 	uninstall-pluginLTLIBRARIES
 
+.PRECIOUS: Makefile
 
-Android.mk: Makefile.am $(BUILT_SOURCES)
-	androgenizer \
-	-:PROJECT libgsttypefindfunctions -:SHARED libgsttypefindfunctions \
-	 -:TAGS eng debug \
-         -:REL_TOP $(top_srcdir) -:ABS_TOP $(abs_top_srcdir) \
-	 -:SOURCES $(libgsttypefindfunctions_la_SOURCES) \
-	 -:CFLAGS $(DEFS) $(DEFAULT_INCLUDES) $(libgsttypefindfunctions_la_CFLAGS) \
-	 -:LDFLAGS $(libgsttypefindfunctions_la_LDFLAGS) \
-	           $(libgsttypefindfunctions_la_LIBADD) \
-	           -ldl \
-	 -:PASSTHROUGH LOCAL_ARM_MODE:=arm \
-		       LOCAL_MODULE_PATH:='$$(TARGET_OUT)/lib/gstreamer-0.10' \
-	> $@
 
 # 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/typefind/gsttypefindfunctions.c b/gst/typefind/gsttypefindfunctions.c
index 0364b8d..2bedf18 100644
--- a/gst/typefind/gsttypefindfunctions.c
+++ b/gst/typefind/gsttypefindfunctions.c
@@ -46,10 +46,6 @@
 GST_DEBUG_CATEGORY_STATIC (type_find_debug);
 #define GST_CAT_DEFAULT type_find_debug
 
-/* so our code stays ready for 0.11 */
-#define gst_type_find_peek(tf,off,len) \
-    ((const guint8 *)gst_type_find_peek((tf),(off),(len)))
-
 /* DataScanCtx: helper for typefind functions that scan through data
  * step-by-step, to avoid doing a peek at each and every offset */
 
@@ -509,8 +505,6 @@
 
   /* skip XMLDec in any case if we've got one */
   if (got_xmldec) {
-    if (pos + 5 >= length)
-      return FALSE;
     pos += 5;
     data += 5;
   }
@@ -600,6 +594,21 @@
   }
 }
 
+/*** application/dash+xml ****************************************************/
+
+static GstStaticCaps dash_caps = GST_STATIC_CAPS ("application/dash+xml");
+
+#define DASH_CAPS gst_static_caps_get (&dash_caps)
+
+static void
+dash_mpd_type_find (GstTypeFind * tf, gpointer unused)
+{
+  if (xml_check_first_element (tf, "MPD", 3, FALSE) ||
+      xml_check_first_element (tf, "mpd", 3, FALSE)) {
+    gst_type_find_suggest (tf, GST_TYPE_FIND_MAXIMUM, DASH_CAPS);
+  }
+}
+
 /*** application/sdp *********************************************************/
 
 static GstStaticCaps sdp_caps = GST_STATIC_CAPS ("application/sdp");
@@ -646,6 +655,19 @@
   }
 }
 
+/*** application/ttml+xml *****************************************************/
+
+static GstStaticCaps ttml_xml_caps = GST_STATIC_CAPS ("application/ttml+xml");
+
+#define TTML_XML_CAPS (gst_static_caps_get(&ttml_xml_caps))
+static void
+ttml_xml_type_find (GstTypeFind * tf, gpointer unused)
+{
+  if (xml_check_first_element (tf, "tt", 2, FALSE)) {
+    gst_type_find_suggest (tf, GST_TYPE_FIND_MAXIMUM, TTML_XML_CAPS);
+  }
+}
+
 /*** text/html ***/
 
 static GstStaticCaps html_caps = GST_STATIC_CAPS ("text/html");
@@ -1255,6 +1277,7 @@
   channels = (mode == 3) ? 1 : 2;
   samplerate = mp3types_freqs[version > 0 ? version - 1 : 0][samplerate];
   if (bitrate == 0) {
+    /* possible freeform mp3 */
     if (layer == 1) {
       length *= 4;
       length += possible_free_framelen;
@@ -1264,6 +1287,11 @@
       bitrate = length * samplerate /
           ((layer == 3 && version != 3) ? 72000 : 144000);
     }
+    /* freeform mp3 should have a higher-than-usually-allowed bitrate */
+    GST_LOG ("calculated bitrate: %u, max usually: %u", bitrate,
+        mp3types_bitrates[version == 3 ? 0 : 1][layer - 1][14]);
+    if (bitrate < mp3types_bitrates[version == 3 ? 0 : 1][layer - 1][14])
+      return 0;
   } else {
     /* calculating */
     bitrate = mp3types_bitrates[version == 3 ? 0 : 1][layer - 1][bitrate];
@@ -2653,8 +2681,12 @@
         if (nut == 15) {
           seen_ssps = TRUE;
           good++;
-        } else if (seen_ssps && (nut == 14 || nut == 20)) {
-          good++;
+        } else if (nut == 14 || nut == 20) {
+          /* Sometimes we see NAL 14 or 20 without SSPS
+           * if dropped into the middle of a stream -
+           * just ignore those (don't add to bad count) */
+          if (seen_ssps)
+            good++;
         } else {
           /* reserved */
           /* Theoretically these are good, since if they exist in the
@@ -3114,12 +3146,19 @@
       break;
     }
 
+    if (STRNCMP (&data[4], "ftypccff", 8) == 0) {
+      tip = GST_TYPE_FIND_MAXIMUM;
+      variant = "ccff";
+      break;
+    }
+
     /* box/atom types that are in common with ISO base media file format */
     if (STRNCMP (&data[4], "moov", 4) == 0 ||
         STRNCMP (&data[4], "mdat", 4) == 0 ||
         STRNCMP (&data[4], "ftyp", 4) == 0 ||
         STRNCMP (&data[4], "free", 4) == 0 ||
         STRNCMP (&data[4], "uuid", 4) == 0 ||
+        STRNCMP (&data[4], "moof", 4) == 0 ||
         STRNCMP (&data[4], "skip", 4) == 0) {
       if (tip == 0) {
         tip = GST_TYPE_FIND_LIKELY;
@@ -3470,6 +3509,12 @@
         goto suggest_audio_mod_caps;
       }
     }
+    /* UMX */
+    if (memcmp (data, "\xC1\x83\x2A\x9E", 4) == 0) {
+      mod_type = "umx";
+      probability = GST_TYPE_FIND_POSSIBLE;
+      goto suggest_audio_mod_caps;
+    }
   }
   /* FAR (Farandole) (secondary detection) */
   if ((data = gst_type_find_peek (tf, 44, 3)) != NULL) {
@@ -3549,62 +3594,95 @@
 
 /*** application/vnd.ms-sstr+xml ***/
 
+static void
+mss_manifest_load_utf16 (gunichar2 * utf16_ne, const guint8 * utf16_data,
+    gsize data_size, guint data_endianness)
+{
+  memcpy (utf16_ne, utf16_data, data_size);
+  if (data_endianness != G_BYTE_ORDER) {
+    guint i;
+
+    for (i = 0; i < data_size / 2; ++i)
+      utf16_ne[i] = GUINT16_SWAP_LE_BE (utf16_ne[i]);
+  }
+}
+
 static GstStaticCaps mss_manifest_caps =
 GST_STATIC_CAPS ("application/vnd.ms-sstr+xml");
 #define MSS_MANIFEST_CAPS (gst_static_caps_get(&mss_manifest_caps))
 static void
 mss_manifest_type_find (GstTypeFind * tf, gpointer unused)
 {
+  gunichar2 utf16_ne[512];
+  const guint8 *data;
+  guint data_endianness = 0;
+  glong n_read = 0, size = 0;
+  guint length;
+  gchar *utf8;
+  gboolean utf8_bom_detected = FALSE;
+
   if (xml_check_first_element (tf, "SmoothStreamingMedia", 20, TRUE)) {
     gst_type_find_suggest (tf, GST_TYPE_FIND_MAXIMUM, MSS_MANIFEST_CAPS);
+    return;
+  }
+
+  length = gst_type_find_get_length (tf);
+
+  /* try detecting the charset */
+  data = gst_type_find_peek (tf, 0, 3);
+
+  if (data == NULL)
+    return;
+
+  /* look for a possible BOM */
+  if (data[0] == 0xEF && data[1] == 0xBB && data[2] == 0xBF)
+    utf8_bom_detected = TRUE;
+  else if (data[0] == 0xFF && data[1] == 0xFE)
+    data_endianness = G_LITTLE_ENDIAN;
+  else if (data[0] == 0xFE && data[1] == 0xFF)
+    data_endianness = G_BIG_ENDIAN;
+  else
+    return;
+
+  /* try a default that should be enough */
+  if (length == 0)
+    length = 512;
+  else if (length < 64)
+    return;
+  else                          /* the first few bytes should be enough */
+    length = MIN (1024, length);
+
+  data = gst_type_find_peek (tf, 0, length);
+
+  if (data == NULL)
+    return;
+
+  /* skip the BOM */
+  data += 2;
+  length -= 2;
+
+  if (utf8_bom_detected) {
+    /* skip last byte of the BOM */
+    data++;
+    length--;
+
+    if (xml_check_first_element_from_data (data, length,
+            "SmoothStreamingMedia", 20, TRUE))
+      gst_type_find_suggest (tf, GST_TYPE_FIND_MAXIMUM, MSS_MANIFEST_CAPS);
   } else {
-    const guint8 *data;
-    gboolean utf16_le, utf16_be;
-    const gchar *convert_from = NULL;
-    guint8 *converted_data;
+    length = GST_ROUND_DOWN_2 (length);
 
-    /* try detecting the charset */
-    data = gst_type_find_peek (tf, 0, 2);
+    /* convert to native endian UTF-16 */
+    mss_manifest_load_utf16 (utf16_ne, data, length, data_endianness);
 
-    if (data == NULL)
-      return;
-
-    /* look for a possible BOM */
-    utf16_le = data[0] == 0xFF && data[1] == 0xFE;
-    utf16_be = data[0] == 0xFE && data[1] == 0xFF;
-    if (utf16_le) {
-      convert_from = "UTF-16LE";
-    } else if (utf16_be) {
-      convert_from = "UTF-16BE";
+    /* and now convert to UTF-8 */
+    utf8 = g_utf16_to_utf8 (utf16_ne, length / 2, &n_read, &size, NULL);
+    if (utf8 != NULL && n_read > 0) {
+      if (xml_check_first_element_from_data ((const guint8 *) utf8, size,
+              "SmoothStreamingMedia", 20, TRUE))
+        gst_type_find_suggest (tf, GST_TYPE_FIND_MAXIMUM, MSS_MANIFEST_CAPS);
     }
-
-    if (convert_from) {
-      gsize new_size = 0;
-      guint length = gst_type_find_get_length (tf);
-
-      /* try a default that should be enough */
-      if (length == 0)
-        length = 512;
-      data = gst_type_find_peek (tf, 0, length);
-
-      if (data) {
-        /* skip the BOM */
-        data += 2;
-        length -= 2;
-
-        converted_data =
-            (guint8 *) g_convert ((gchar *) data, length, "UTF-8", convert_from,
-            NULL, &new_size, NULL);
-        if (converted_data) {
-          if (xml_check_first_element_from_data (converted_data, new_size,
-                  "SmoothStreamingMedia", 20, TRUE))
-            gst_type_find_suggest (tf, GST_TYPE_FIND_MAXIMUM,
-                MSS_MANIFEST_CAPS);
-
-          g_free (converted_data);
-        }
-      }
-    }
+    g_free (utf8);
   }
 }
 
@@ -5384,12 +5462,12 @@
 {
   if (G_LIKELY (sw_data->caps != NULL))
     gst_caps_unref (sw_data->caps);
-  g_free (sw_data);
+  g_slice_free (GstTypeFindData, sw_data);
 }
 
 #define TYPE_FIND_REGISTER_START_WITH(plugin,name,rank,ext,_data,_size,_probability)\
 G_BEGIN_DECLS{                                                          \
-  GstTypeFindData *sw_data = g_new (GstTypeFindData, 1);                \
+  GstTypeFindData *sw_data = g_slice_new (GstTypeFindData);             \
   sw_data->data = (const guint8 *)_data;                                \
   sw_data->size = _size;                                                \
   sw_data->probability = _probability;                                  \
@@ -5397,8 +5475,7 @@
   if (!gst_type_find_register (plugin, name, rank, start_with_type_find,\
                      ext, sw_data->caps, sw_data,                       \
                      (GDestroyNotify) (sw_data_destroy))) {             \
-    gst_caps_unref (sw_data->caps);                                     \
-    g_free (sw_data);                                                   \
+    sw_data_destroy (sw_data);                                          \
   }                                                                     \
 }G_END_DECLS
 
@@ -5419,7 +5496,7 @@
 
 #define TYPE_FIND_REGISTER_RIFF(plugin,name,rank,ext,_data)             \
 G_BEGIN_DECLS{                                                          \
-  GstTypeFindData *sw_data = g_new (GstTypeFindData, 1);                \
+  GstTypeFindData *sw_data = g_slice_new (GstTypeFindData);             \
   sw_data->data = (gpointer)_data;                                      \
   sw_data->size = 4;                                                    \
   sw_data->probability = GST_TYPE_FIND_MAXIMUM;                         \
@@ -5427,8 +5504,7 @@
   if (!gst_type_find_register (plugin, name, rank, riff_type_find,      \
                       ext, sw_data->caps, sw_data,                      \
                       (GDestroyNotify) (sw_data_destroy))) {            \
-    gst_caps_unref (sw_data->caps);                                     \
-    g_free (sw_data);                                                   \
+    sw_data_destroy (sw_data);                                          \
   }                                                                     \
 }G_END_DECLS
 
@@ -5493,7 +5569,7 @@
       tta_type_find, "tta", TTA_CAPS, NULL, NULL);
   TYPE_FIND_REGISTER (plugin, "audio/x-mod", GST_RANK_SECONDARY, mod_type_find,
       "669,amf,ams,dbm,digi,dmf,dsm,gdm,far,imf,it,j2b,mdl,med,mod,mt2,mtm,"
-      "okt,psm,ptm,sam,s3m,stm,stx,ult,xm", MOD_CAPS, NULL, NULL);
+      "okt,psm,ptm,sam,s3m,stm,stx,ult,umx,xm", MOD_CAPS, NULL, NULL);
   TYPE_FIND_REGISTER (plugin, "audio/mpeg", GST_RANK_PRIMARY, mp3_type_find,
       "mp3,mp2,mp1,mpga", MP3_CAPS, NULL, NULL);
   TYPE_FIND_REGISTER (plugin, "audio/x-ac3", GST_RANK_PRIMARY, ac3_type_find,
@@ -5545,6 +5621,8 @@
       GST_TYPE_FIND_MAXIMUM);
   TYPE_FIND_REGISTER (plugin, "application/x-shockwave-flash",
       GST_RANK_SECONDARY, swf_type_find, "swf,swfl", SWF_CAPS, NULL, NULL);
+  TYPE_FIND_REGISTER (plugin, "application/dash+xml",
+      GST_RANK_PRIMARY, dash_mpd_type_find, "mpd,MPD", DASH_CAPS, NULL, NULL);
   TYPE_FIND_REGISTER (plugin, "application/vnd.ms-sstr+xml",
       GST_RANK_PRIMARY, mss_manifest_type_find, NULL, MSS_MANIFEST_CAPS, NULL,
       NULL);
@@ -5564,6 +5642,8 @@
       sdp_type_find, "sdp", SDP_CAPS, NULL, NULL);
   TYPE_FIND_REGISTER (plugin, "application/smil", GST_RANK_SECONDARY,
       smil_type_find, "smil", SMIL_CAPS, NULL, NULL);
+  TYPE_FIND_REGISTER (plugin, "application/ttml+xml", GST_RANK_SECONDARY,
+      ttml_xml_type_find, "ttml+xml", TTML_XML_CAPS, NULL, NULL);
   TYPE_FIND_REGISTER (plugin, "application/xml", GST_RANK_MARGINAL,
       xml_type_find, "xml", GENERIC_XML_CAPS, NULL, NULL);
   TYPE_FIND_REGISTER_RIFF (plugin, "audio/x-wav", GST_RANK_PRIMARY, "wav",
diff --git a/gst/videoconvert/Makefile.am b/gst/videoconvert/Makefile.am
index aed82d4..67b5625 100644
--- a/gst/videoconvert/Makefile.am
+++ b/gst/videoconvert/Makefile.am
@@ -1,36 +1,16 @@
 plugin_LTLIBRARIES = libgstvideoconvert.la
 
-ORC_SOURCE=gstvideoconvertorc
-include $(top_srcdir)/common/orc.mak
-
-libgstvideoconvert_la_SOURCES = gstvideoconvert.c videoconvert.c gstcms.c
+libgstvideoconvert_la_SOURCES = gstvideoconvert.c
 nodist_libgstvideoconvert_la_SOURCES = $(ORC_NODIST_SOURCES)
 libgstvideoconvert_la_CFLAGS = \
 	$(GST_PLUGINS_BASE_CFLAGS) \
-	$(GST_CFLAGS) \
-	$(ORC_CFLAGS)
+	$(GST_CFLAGS)
 libgstvideoconvert_la_LIBADD = \
 	$(top_builddir)/gst-libs/gst/video/libgstvideo-$(GST_API_VERSION).la \
 	$(GST_BASE_LIBS) \
 	$(GST_LIBS) \
-	$(ORC_LIBS) \
 	$(LIBM)
 libgstvideoconvert_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS)
 libgstvideoconvert_la_LIBTOOLFLAGS = $(GST_PLUGIN_LIBTOOLFLAGS)
 
-noinst_HEADERS = gstvideoconvert.h videoconvert.h gstcms.h
-
-Android.mk: Makefile.am $(BUILT_SOURCES)
-	androgenizer \
-	-:PROJECT libgstvideoconvert -:SHARED libgstvideoconvert \
-	 -:TAGS eng debug \
-         -:REL_TOP $(top_srcdir) -:ABS_TOP $(abs_top_srcdir) \
-	 -:SOURCES $(libgstvideoconvert_la_SOURCES) \
-	           $(nodist_libgstvideoconvert_la_SOURCES) \
-	 -:CFLAGS $(DEFS) $(DEFAULT_INCLUDES) $(libgstvideoconvert_la_CFLAGS) \
-	 -:LDFLAGS $(libgstvideoconvert_la_LDFLAGS) \
-	           $(libgstvideoconvert_la_LIBADD) \
-	           -ldl \
-	 -:PASSTHROUGH LOCAL_ARM_MODE:=arm \
-		       LOCAL_MODULE_PATH:='$$(TARGET_OUT)/lib/gstreamer-0.10' \
-	> $@
+noinst_HEADERS = gstvideoconvert.h
diff --git a/gst/videoconvert/Makefile.in b/gst/videoconvert/Makefile.in
index 6b76e79..2c89141 100644
--- a/gst/videoconvert/Makefile.in
+++ b/gst/videoconvert/Makefile.in
@@ -1,7 +1,7 @@
-# Makefile.in generated by automake 1.14.1 from Makefile.am.
+# Makefile.in generated by automake 1.15 from Makefile.am.
 # @configure_input@
 
-# Copyright (C) 1994-2013 Free Software Foundation, Inc.
+# 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,
@@ -14,31 +14,19 @@
 
 @SET_MAKE@
 
-#
-# This is a makefile.am fragment to build Orc code.
-#
-# Define ORC_SOURCE and then include this file, such as:
-#
-#  ORC_SOURCE=gstadderorc
-#  include $(top_srcdir)/common/orc.mak
-#
-# This fragment will create tmp-orc.c and gstadderorc.h from
-# gstadderorc.orc.
-#
-# When 'make dist' is run at the top level, or 'make orc-update'
-# in a directory including this fragment, the generated source 
-# files will be copied to $(ORC_SOURCE)-dist.[ch].  These files
-# should be checked in to git, since they are used if Orc is
-# disabled.
-# 
-# Note that this file defines BUILT_SOURCES, so any later usage
-# of BUILT_SOURCES in the Makefile.am that includes this file
-# must use '+='.
-#
-
 
 VPATH = @srcdir@
-am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)'
+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 \
       ?) ;; \
@@ -102,8 +90,6 @@
 build_triplet = @build@
 host_triplet = @host@
 target_triplet = @target@
-DIST_COMMON = $(top_srcdir)/common/orc.mak $(srcdir)/Makefile.in \
-	$(srcdir)/Makefile.am $(top_srcdir)/depcomp $(noinst_HEADERS)
 subdir = gst/videoconvert
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
 am__aclocal_m4_deps = $(top_srcdir)/common/m4/as-ac-expand.m4 \
@@ -125,7 +111,6 @@
 	$(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-x11.m4 \
 	$(top_srcdir)/common/m4/gst.m4 \
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
@@ -142,6 +127,8 @@
 	$(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 =
@@ -178,13 +165,10 @@
 am__DEPENDENCIES_1 =
 libgstvideoconvert_la_DEPENDENCIES = $(top_builddir)/gst-libs/gst/video/libgstvideo-$(GST_API_VERSION).la \
 	$(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
-	$(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1)
+	$(am__DEPENDENCIES_1)
 am_libgstvideoconvert_la_OBJECTS =  \
-	libgstvideoconvert_la-gstvideoconvert.lo \
-	libgstvideoconvert_la-videoconvert.lo \
-	libgstvideoconvert_la-gstcms.lo
-am__objects_1 = libgstvideoconvert_la-tmp-orc.lo
-nodist_libgstvideoconvert_la_OBJECTS = $(am__objects_1)
+	libgstvideoconvert_la-gstvideoconvert.lo
+nodist_libgstvideoconvert_la_OBJECTS =
 libgstvideoconvert_la_OBJECTS = $(am_libgstvideoconvert_la_OBJECTS) \
 	$(nodist_libgstvideoconvert_la_OBJECTS)
 AM_V_lt = $(am__v_lt_@AM_V@)
@@ -257,6 +241,7 @@
   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@
@@ -317,6 +302,8 @@
 GIO_CFLAGS = @GIO_CFLAGS@
 GIO_LDFLAGS = @GIO_LDFLAGS@
 GIO_LIBS = @GIO_LIBS@
+GIO_UNIX_2_0_CFLAGS = @GIO_UNIX_2_0_CFLAGS@
+GIO_UNIX_2_0_LIBS = @GIO_UNIX_2_0_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
@@ -346,6 +333,8 @@
 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_OPTION_CFLAGS = @GST_OPTION_CFLAGS@
 GST_OPTION_CXXFLAGS = @GST_OPTION_CXXFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
@@ -373,7 +362,6 @@
 GTK_X11_CFLAGS = @GTK_X11_CFLAGS@
 GTK_X11_LIBS = @GTK_X11_LIBS@
 HAVE_CDPARANOIA = @HAVE_CDPARANOIA@
-HAVE_X = @HAVE_X@
 HAVE_XSHM = @HAVE_XSHM@
 HAVE_ZLIB = @HAVE_ZLIB@
 HTML_DIR = @HTML_DIR@
@@ -388,6 +376,7 @@
 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@
@@ -477,13 +466,12 @@
 XGETTEXT = @XGETTEXT@
 XGETTEXT_015 = @XGETTEXT_015@
 XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
-XMKMF = @XMKMF@
+XSHM_CFLAGS = @XSHM_CFLAGS@
 XSHM_LIBS = @XSHM_LIBS@
+XVIDEO_CFLAGS = @XVIDEO_CFLAGS@
 XVIDEO_LIBS = @XVIDEO_LIBS@
 X_CFLAGS = @X_CFLAGS@
-X_EXTRA_LIBS = @X_EXTRA_LIBS@
 X_LIBS = @X_LIBS@
-X_PRE_LIBS = @X_PRE_LIBS@
 ZLIB_CFLAGS = @ZLIB_CFLAGS@
 ZLIB_LIBS = @ZLIB_LIBS@
 abs_builddir = @abs_builddir@
@@ -536,6 +524,7 @@
 psdir = @psdir@
 pyexecdir = @pyexecdir@
 pythondir = @pythondir@
+runstatedir = @runstatedir@
 sbindir = @sbindir@
 sharedstatedir = @sharedstatedir@
 srcdir = @srcdir@
@@ -549,39 +538,26 @@
 top_builddir = @top_builddir@
 top_srcdir = @top_srcdir@
 plugin_LTLIBRARIES = libgstvideoconvert.la
-ORC_SOURCE = gstvideoconvertorc
-EXTRA_DIST = $(ORC_SOURCE).orc
-ORC_NODIST_SOURCES = tmp-orc.c $(ORC_SOURCE).h
-BUILT_SOURCES = tmp-orc.c $(ORC_SOURCE).h
-orcc_v_gen = $(orcc_v_gen_$(V))
-orcc_v_gen_ = $(orcc_v_gen_$(AM_DEFAULT_VERBOSITY))
-orcc_v_gen_0 = @echo "  ORCC   $@";
-cp_v_gen = $(cp_v_gen_$(V))
-cp_v_gen_ = $(cp_v_gen_$(AM_DEFAULT_VERBOSITY))
-cp_v_gen_0 = @echo "  CP     $@";
-libgstvideoconvert_la_SOURCES = gstvideoconvert.c videoconvert.c gstcms.c
+libgstvideoconvert_la_SOURCES = gstvideoconvert.c
 nodist_libgstvideoconvert_la_SOURCES = $(ORC_NODIST_SOURCES)
 libgstvideoconvert_la_CFLAGS = \
 	$(GST_PLUGINS_BASE_CFLAGS) \
-	$(GST_CFLAGS) \
-	$(ORC_CFLAGS)
+	$(GST_CFLAGS)
 
 libgstvideoconvert_la_LIBADD = \
 	$(top_builddir)/gst-libs/gst/video/libgstvideo-$(GST_API_VERSION).la \
 	$(GST_BASE_LIBS) \
 	$(GST_LIBS) \
-	$(ORC_LIBS) \
 	$(LIBM)
 
 libgstvideoconvert_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS)
 libgstvideoconvert_la_LIBTOOLFLAGS = $(GST_PLUGIN_LIBTOOLFLAGS)
-noinst_HEADERS = gstvideoconvert.h videoconvert.h gstcms.h
-all: $(BUILT_SOURCES)
-	$(MAKE) $(AM_MAKEFLAGS) all-am
+noinst_HEADERS = gstvideoconvert.h
+all: all-am
 
 .SUFFIXES:
 .SUFFIXES: .c .lo .o .obj
-$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(top_srcdir)/common/orc.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*) \
@@ -593,7 +569,6 @@
 	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu gst/videoconvert/Makefile'; \
 	$(am__cd) $(top_srcdir) && \
 	  $(AUTOMAKE) --gnu gst/videoconvert/Makefile
-.PRECIOUS: Makefile
 Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
 	@case '$?' in \
 	  *config.status*) \
@@ -602,7 +577,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/orc.mak:
 
 $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
 	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
@@ -657,10 +631,7 @@
 distclean-compile:
 	-rm -f *.tab.c
 
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstvideoconvert_la-gstcms.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstvideoconvert_la-gstvideoconvert.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstvideoconvert_la-tmp-orc.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstvideoconvert_la-videoconvert.Plo@am__quote@
 
 .c.o:
 @am__fastdepCC_TRUE@	$(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\
@@ -693,27 +664,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 $(libgstvideoconvert_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstvideoconvert_la_CFLAGS) $(CFLAGS) -c -o libgstvideoconvert_la-gstvideoconvert.lo `test -f 'gstvideoconvert.c' || echo '$(srcdir)/'`gstvideoconvert.c
 
-libgstvideoconvert_la-videoconvert.lo: videoconvert.c
-@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstvideoconvert_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstvideoconvert_la_CFLAGS) $(CFLAGS) -MT libgstvideoconvert_la-videoconvert.lo -MD -MP -MF $(DEPDIR)/libgstvideoconvert_la-videoconvert.Tpo -c -o libgstvideoconvert_la-videoconvert.lo `test -f 'videoconvert.c' || echo '$(srcdir)/'`videoconvert.c
-@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstvideoconvert_la-videoconvert.Tpo $(DEPDIR)/libgstvideoconvert_la-videoconvert.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='videoconvert.c' object='libgstvideoconvert_la-videoconvert.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 $(libgstvideoconvert_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstvideoconvert_la_CFLAGS) $(CFLAGS) -c -o libgstvideoconvert_la-videoconvert.lo `test -f 'videoconvert.c' || echo '$(srcdir)/'`videoconvert.c
-
-libgstvideoconvert_la-gstcms.lo: gstcms.c
-@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstvideoconvert_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstvideoconvert_la_CFLAGS) $(CFLAGS) -MT libgstvideoconvert_la-gstcms.lo -MD -MP -MF $(DEPDIR)/libgstvideoconvert_la-gstcms.Tpo -c -o libgstvideoconvert_la-gstcms.lo `test -f 'gstcms.c' || echo '$(srcdir)/'`gstcms.c
-@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstvideoconvert_la-gstcms.Tpo $(DEPDIR)/libgstvideoconvert_la-gstcms.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='gstcms.c' object='libgstvideoconvert_la-gstcms.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 $(libgstvideoconvert_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstvideoconvert_la_CFLAGS) $(CFLAGS) -c -o libgstvideoconvert_la-gstcms.lo `test -f 'gstcms.c' || echo '$(srcdir)/'`gstcms.c
-
-libgstvideoconvert_la-tmp-orc.lo: tmp-orc.c
-@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstvideoconvert_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstvideoconvert_la_CFLAGS) $(CFLAGS) -MT libgstvideoconvert_la-tmp-orc.lo -MD -MP -MF $(DEPDIR)/libgstvideoconvert_la-tmp-orc.Tpo -c -o libgstvideoconvert_la-tmp-orc.lo `test -f 'tmp-orc.c' || echo '$(srcdir)/'`tmp-orc.c
-@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstvideoconvert_la-tmp-orc.Tpo $(DEPDIR)/libgstvideoconvert_la-tmp-orc.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='tmp-orc.c' object='libgstvideoconvert_la-tmp-orc.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 $(libgstvideoconvert_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstvideoconvert_la_CFLAGS) $(CFLAGS) -c -o libgstvideoconvert_la-tmp-orc.lo `test -f 'tmp-orc.c' || echo '$(srcdir)/'`tmp-orc.c
-
 mostlyclean-libtool:
 	-rm -f *.lo
 
@@ -802,19 +752,14 @@
 	    || exit 1; \
 	  fi; \
 	done
-	$(MAKE) $(AM_MAKEFLAGS) \
-	  top_distdir="$(top_distdir)" distdir="$(distdir)" \
-	  dist-hook
 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
@@ -844,11 +789,10 @@
 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-local \
-	clean-pluginLTLIBRARIES mostlyclean-am
+clean-am: clean-generic clean-libtool clean-pluginLTLIBRARIES \
+	mostlyclean-am
 
 distclean: distclean-am
 	-rm -rf ./$(DEPDIR)
@@ -916,75 +860,25 @@
 
 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-local clean-pluginLTLIBRARIES \
-	cscopelist-am ctags ctags-am dist-hook 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 \
+	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
 
-orc-update: tmp-orc.c $(ORC_SOURCE).h
-	$(top_srcdir)/common/gst-indent tmp-orc.c
-	cp tmp-orc.c $(srcdir)/$(ORC_SOURCE)-dist.c
-	cp $(ORC_SOURCE).h $(srcdir)/$(ORC_SOURCE)-dist.h
-
-@HAVE_ORCC_TRUE@tmp-orc.c: $(srcdir)/$(ORC_SOURCE).orc
-@HAVE_ORCC_TRUE@	$(orcc_v_gen)$(ORCC) $(ORCC_FLAGS) --implementation --include glib.h -o tmp-orc.c $(srcdir)/$(ORC_SOURCE).orc
-
-@HAVE_ORCC_TRUE@$(ORC_SOURCE).h: $(srcdir)/$(ORC_SOURCE).orc
-@HAVE_ORCC_TRUE@	$(orcc_v_gen)$(ORCC) $(ORCC_FLAGS) --header --include glib.h -o $(ORC_SOURCE).h $(srcdir)/$(ORC_SOURCE).orc
-@HAVE_ORCC_FALSE@tmp-orc.c: $(srcdir)/$(ORC_SOURCE).orc $(srcdir)/$(ORC_SOURCE)-dist.c
-@HAVE_ORCC_FALSE@	$(cp_v_gen)cp $(srcdir)/$(ORC_SOURCE)-dist.c tmp-orc.c
-
-@HAVE_ORCC_FALSE@$(ORC_SOURCE).h: $(srcdir)/$(ORC_SOURCE).orc $(srcdir)/$(ORC_SOURCE)-dist.c
-@HAVE_ORCC_FALSE@	$(cp_v_gen)cp $(srcdir)/$(ORC_SOURCE)-dist.h $(ORC_SOURCE).h
-
-clean-local: clean-orc
-.PHONY: clean-orc
-clean-orc:
-	rm -f tmp-orc.c $(ORC_SOURCE).h
-
-dist-hook: dist-hook-orc
-.PHONY: dist-hook-orc
-
-# we try and copy updated orc -dist files below, but don't fail if it
-# doesn't work as the srcdir might not be writable
-dist-hook-orc: tmp-orc.c $(ORC_SOURCE).h
-	$(top_srcdir)/common/gst-indent tmp-orc.c
-	rm -f tmp-orc.c~
-	cmp -s tmp-orc.c $(srcdir)/$(ORC_SOURCE)-dist.c || \
-	  cp tmp-orc.c $(srcdir)/$(ORC_SOURCE)-dist.c || true
-	cmp -s $(ORC_SOURCE).h $(srcdir)/$(ORC_SOURCE)-dist.h || \
-	  cp $(ORC_SOURCE).h $(srcdir)/$(ORC_SOURCE)-dist.h || true
-	cp -p tmp-orc.c $(distdir)/$(ORC_SOURCE)-dist.c
-	cp -p $(ORC_SOURCE).h $(distdir)/$(ORC_SOURCE)-dist.h
-
-Android.mk: Makefile.am $(BUILT_SOURCES)
-	androgenizer \
-	-:PROJECT libgstvideoconvert -:SHARED libgstvideoconvert \
-	 -:TAGS eng debug \
-         -:REL_TOP $(top_srcdir) -:ABS_TOP $(abs_top_srcdir) \
-	 -:SOURCES $(libgstvideoconvert_la_SOURCES) \
-	           $(nodist_libgstvideoconvert_la_SOURCES) \
-	 -:CFLAGS $(DEFS) $(DEFAULT_INCLUDES) $(libgstvideoconvert_la_CFLAGS) \
-	 -:LDFLAGS $(libgstvideoconvert_la_LDFLAGS) \
-	           $(libgstvideoconvert_la_LIBADD) \
-	           -ldl \
-	 -:PASSTHROUGH LOCAL_ARM_MODE:=arm \
-		       LOCAL_MODULE_PATH:='$$(TARGET_OUT)/lib/gstreamer-0.10' \
-	> $@
 
 # 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/videoconvert/gstcms.c b/gst/videoconvert/gstcms.c
deleted file mode 100644
index 96a9f70..0000000
--- a/gst/videoconvert/gstcms.c
+++ /dev/null
@@ -1,573 +0,0 @@
-/* GStreamer
- * Copyright (C) 2008 David Schleef <ds@entropywave.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 <gst/math-compat.h>
-#include "gstcms.h"
-
-#include <stdio.h>
-#include <string.h>
-#include <math.h>
-
-
-/* our simple CMS */
-
-void
-color_xyY_to_XYZ (Color * c)
-{
-  if (c->v[1] == 0) {
-    c->v[0] = 0;
-    c->v[1] = 0;
-    c->v[2] = 0;
-  } else {
-    double X, Y, Z;
-    X = c->v[0] * c->v[2] / c->v[1];
-    Y = c->v[2];
-    Z = (1.0 - c->v[0] - c->v[1]) * c->v[2] / c->v[1];
-    c->v[0] = X;
-    c->v[1] = Y;
-    c->v[2] = Z;
-  }
-}
-
-void
-color_XYZ_to_xyY (Color * c)
-{
-  double d;
-  d = c->v[0] + c->v[1] + c->v[2];
-  if (d == 0) {
-    c->v[0] = 0.3128;
-    c->v[1] = 0.3290;
-    c->v[2] = 0;
-  } else {
-    double x, y, Y;
-    x = c->v[0] / d;
-    y = c->v[1] / d;
-    Y = c->v[1];
-    c->v[0] = x;
-    c->v[1] = y;
-    c->v[2] = Y;
-  }
-}
-
-void
-color_set (Color * c, double x, double y, double z)
-{
-  c->v[0] = x;
-  c->v[1] = y;
-  c->v[2] = z;
-}
-
-void
-color_matrix_set_identity (ColorMatrix * m)
-{
-  int i, j;
-
-  for (i = 0; i < 4; i++) {
-    for (j = 0; j < 4; j++) {
-      m->m[i][j] = (i == j);
-    }
-  }
-}
-
-/* Prettyprint a 4x4 matrix @m@ */
-void
-color_matrix_dump (ColorMatrix * m)
-{
-  int i, j;
-
-  printf ("[\n");
-  for (i = 0; i < 4; i++) {
-    printf ("  ");
-    for (j = 0; j < 4; j++) {
-      printf (" %8.5g", m->m[i][j]);
-    }
-    printf ("\n");
-  }
-  printf ("]\n");
-}
-
-/* Perform 4x4 matrix multiplication:
- *  - @dst@ = @a@ * @b@
- *  - @dst@ may be a pointer to @a@ andor @b@
- */
-void
-color_matrix_multiply (ColorMatrix * dst, ColorMatrix * a, ColorMatrix * b)
-{
-  ColorMatrix tmp;
-  int i, j, k;
-
-  for (i = 0; i < 4; i++) {
-    for (j = 0; j < 4; j++) {
-      double x = 0;
-      for (k = 0; k < 4; k++) {
-        x += a->m[i][k] * b->m[k][j];
-      }
-      tmp.m[i][j] = x;
-    }
-  }
-
-  memcpy (dst, &tmp, sizeof (ColorMatrix));
-}
-
-void
-color_matrix_apply (ColorMatrix * m, Color * dest, Color * src)
-{
-  int i;
-  Color tmp;
-
-  for (i = 0; i < 3; i++) {
-    double x = 0;
-    x += m->m[i][0] * src->v[0];
-    x += m->m[i][1] * src->v[1];
-    x += m->m[i][2] * src->v[2];
-    x += m->m[i][3];
-    tmp.v[i] = x;
-  }
-  memcpy (dest, &tmp, sizeof (tmp));
-}
-
-void
-color_matrix_offset_components (ColorMatrix * m, double a1, double a2,
-    double a3)
-{
-  ColorMatrix a;
-
-  color_matrix_set_identity (&a);
-  a.m[0][3] = a1;
-  a.m[1][3] = a2;
-  a.m[2][3] = a3;
-  color_matrix_multiply (m, &a, m);
-}
-
-void
-color_matrix_scale_components (ColorMatrix * m, double a1, double a2, double a3)
-{
-  ColorMatrix a;
-
-  color_matrix_set_identity (&a);
-  a.m[0][0] = a1;
-  a.m[1][1] = a2;
-  a.m[2][2] = a3;
-  color_matrix_multiply (m, &a, m);
-}
-
-void
-color_matrix_YCbCr_to_RGB (ColorMatrix * m, double Kr, double Kb)
-{
-  double Kg = 1.0 - Kr - Kb;
-  ColorMatrix k = {
-    {
-          {1., 0., 2 * (1 - Kr), 0.},
-          {1., -2 * Kb * (1 - Kb) / Kg, -2 * Kr * (1 - Kr) / Kg, 0.},
-          {1., 2 * (1 - Kb), 0., 0.},
-          {0., 0., 0., 1.},
-        }
-  };
-
-  color_matrix_multiply (m, &k, m);
-}
-
-void
-color_matrix_RGB_to_YCbCr (ColorMatrix * m, double Kr, double Kb)
-{
-  double Kg = 1.0 - Kr - Kb;
-  ColorMatrix k;
-  double x;
-
-  k.m[0][0] = Kr;
-  k.m[0][1] = Kg;
-  k.m[0][2] = Kb;
-  k.m[0][3] = 0;
-
-  x = 1 / (2 * (1 - Kb));
-  k.m[1][0] = -x * Kr;
-  k.m[1][1] = -x * Kg;
-  k.m[1][2] = x * (1 - Kb);
-  k.m[1][3] = 0;
-
-  x = 1 / (2 * (1 - Kr));
-  k.m[2][0] = x * (1 - Kr);
-  k.m[2][1] = -x * Kg;
-  k.m[2][2] = -x * Kb;
-  k.m[2][3] = 0;
-
-  k.m[3][0] = 0;
-  k.m[3][1] = 0;
-  k.m[3][2] = 0;
-  k.m[3][3] = 1;
-
-  color_matrix_multiply (m, &k, m);
-}
-
-void
-color_matrix_build_yuv_to_rgb_601 (ColorMatrix * dst)
-{
-  /*
-   * At this point, everything is in YCbCr
-   * All components are in the range [0,255]
-   */
-  color_matrix_set_identity (dst);
-
-  /* offset required to get input video black to (0.,0.,0.) */
-  color_matrix_offset_components (dst, -16, -128, -128);
-
-  /* scale required to get input video black to (0.,0.,0.) */
-  color_matrix_scale_components (dst, (1 / 219.0), (1 / 224.0), (1 / 224.0));
-
-  /* colour matrix, YCbCr -> RGB */
-  /* Requires Y in [0,1.0], Cb&Cr in [-0.5,0.5] */
-  color_matrix_YCbCr_to_RGB (dst, 0.2990, 0.1140);      /* SD */
-
-  /*
-   * We are now in RGB space
-   */
-
-#if 0
-  /* scale to output range. */
-  color_matrix_scale_components (dst, 255.0, 255.0, 255.0);
-#endif
-}
-
-void
-color_matrix_build_bt709_to_bt601 (ColorMatrix * dst)
-{
-  color_matrix_set_identity (dst);
-
-  /* offset required to get input video black to (0.,0.,0.) */
-  color_matrix_offset_components (dst, -16, -128, -128);
-
-  /* scale required to get input video black to (0.,0.,0.) */
-  color_matrix_scale_components (dst, (1 / 219.0), (1 / 224.0), (1 / 224.0));
-
-  /* colour matrix, YCbCr -> RGB */
-  /* Requires Y in [0,1.0], Cb&Cr in [-0.5,0.5] */
-  color_matrix_YCbCr_to_RGB (dst, 0.2126, 0.0722);      /* HD */
-
-  color_matrix_RGB_to_YCbCr (dst, 0.2990, 0.1140);      /* SD */
-
-  color_matrix_scale_components (dst, 219.0, 224.0, 224.0);
-
-  color_matrix_offset_components (dst, 16, 128, 128);
-}
-
-void
-color_matrix_build_rgb_to_yuv_601 (ColorMatrix * dst)
-{
-  color_matrix_set_identity (dst);
-
-  color_matrix_RGB_to_YCbCr (dst, 0.2990, 0.1140);      /* SD */
-
-  color_matrix_scale_components (dst, 219.0, 224.0, 224.0);
-
-  color_matrix_offset_components (dst, 16, 128, 128);
-
-  {
-    Color c;
-    int i;
-    for (i = 7; i >= 0; i--) {
-      color_set (&c, (i & 2) ? 0.75 : 0.0, (i & 4) ? 0.75 : 0.0,
-          (i & 1) ? 0.75 : 0.0);
-      color_matrix_apply (dst, &c, &c);
-      g_print ("  { %g, %g, %g },\n", rint (c.v[0]), rint (c.v[1]),
-          rint (c.v[2]));
-    }
-    color_set (&c, -0.075, -0.075, -0.075);
-    color_matrix_apply (dst, &c, &c);
-    g_print ("  { %g, %g, %g },\n", rint (c.v[0]), rint (c.v[1]),
-        rint (c.v[2]));
-    color_set (&c, 0.075, 0.075, 0.075);
-    color_matrix_apply (dst, &c, &c);
-    g_print ("  { %g, %g, %g },\n", rint (c.v[0]), rint (c.v[1]),
-        rint (c.v[2]));
-  }
-}
-
-void
-color_matrix_invert (ColorMatrix * m)
-{
-  ColorMatrix tmp;
-  int i, j;
-  double det;
-
-  color_matrix_set_identity (&tmp);
-  for (j = 0; j < 3; j++) {
-    for (i = 0; i < 3; i++) {
-      tmp.m[j][i] =
-          m->m[(i + 1) % 3][(j + 1) % 3] * m->m[(i + 2) % 3][(j + 2) % 3] -
-          m->m[(i + 1) % 3][(j + 2) % 3] * m->m[(i + 2) % 3][(j + 1) % 3];
-    }
-  }
-  det =
-      tmp.m[0][0] * m->m[0][0] + tmp.m[0][1] * m->m[1][0] +
-      tmp.m[0][2] * m->m[2][0];
-  for (j = 0; j < 3; j++) {
-    for (i = 0; i < 3; i++) {
-      tmp.m[i][j] /= det;
-    }
-  }
-  memcpy (m, &tmp, sizeof (tmp));
-}
-
-void
-color_matrix_copy (ColorMatrix * dest, ColorMatrix * src)
-{
-  memcpy (dest, src, sizeof (ColorMatrix));
-}
-
-void
-color_matrix_transpose (ColorMatrix * m)
-{
-  int i, j;
-  ColorMatrix tmp;
-
-  color_matrix_set_identity (&tmp);
-  for (i = 0; i < 3; i++) {
-    for (j = 0; j < 3; j++) {
-      tmp.m[i][j] = m->m[j][i];
-    }
-  }
-  memcpy (m, &tmp, sizeof (ColorMatrix));
-}
-
-void
-color_matrix_build_XYZ (ColorMatrix * dst,
-    double rx, double ry,
-    double gx, double gy, double bx, double by, double wx, double wy)
-{
-  Color r, g, b, w, scale;
-  ColorMatrix m;
-
-  color_set (&r, rx, ry, 1.0);
-  color_xyY_to_XYZ (&r);
-  color_set (&g, gx, gy, 1.0);
-  color_xyY_to_XYZ (&g);
-  color_set (&b, bx, by, 1.0);
-  color_xyY_to_XYZ (&b);
-  color_set (&w, wx, wy, 1.0);
-  color_xyY_to_XYZ (&w);
-
-  color_matrix_set_identity (dst);
-
-  dst->m[0][0] = r.v[0];
-  dst->m[0][1] = r.v[1];
-  dst->m[0][2] = r.v[2];
-  dst->m[1][0] = g.v[0];
-  dst->m[1][1] = g.v[1];
-  dst->m[1][2] = g.v[2];
-  dst->m[2][0] = b.v[0];
-  dst->m[2][1] = b.v[1];
-  dst->m[2][2] = b.v[2];
-
-  color_matrix_dump (dst);
-  color_matrix_copy (&m, dst);
-  color_matrix_invert (&m);
-  color_matrix_dump (&m);
-
-  color_matrix_transpose (&m);
-  color_matrix_apply (&m, &scale, &w);
-  g_print ("%g %g %g\n", scale.v[0], scale.v[1], scale.v[2]);
-
-  dst->m[0][0] = r.v[0] * scale.v[0];
-  dst->m[0][1] = r.v[1] * scale.v[0];
-  dst->m[0][2] = r.v[2] * scale.v[0];
-  dst->m[1][0] = g.v[0] * scale.v[1];
-  dst->m[1][1] = g.v[1] * scale.v[1];
-  dst->m[1][2] = g.v[2] * scale.v[1];
-  dst->m[2][0] = b.v[0] * scale.v[2];
-  dst->m[2][1] = b.v[1] * scale.v[2];
-  dst->m[2][2] = b.v[2] * scale.v[2];
-
-  color_matrix_transpose (dst);
-  color_matrix_dump (dst);
-
-  color_set (&scale, 1, 1, 1);
-  color_matrix_apply (dst, &scale, &scale);
-  color_XYZ_to_xyY (&scale);
-  g_print ("white %g %g %g\n", scale.v[0], scale.v[1], scale.v[2]);
-
-}
-
-void
-color_matrix_build_rgb_to_XYZ_601 (ColorMatrix * dst)
-{
-  /* SMPTE C primaries, SMPTE 170M-2004 */
-  color_matrix_build_XYZ (dst,
-      0.630, 0.340, 0.310, 0.595, 0.155, 0.070, 0.3127, 0.3290);
-#if 0
-  /* NTSC 1953 primaries, SMPTE 170M-2004 */
-  color_matrix_build_XYZ (dst,
-      0.67, 0.33, 0.21, 0.71, 0.14, 0.08, 0.3127, 0.3290);
-#endif
-}
-
-void
-color_matrix_build_XYZ_to_rgb_709 (ColorMatrix * dst)
-{
-  /* Rec. ITU-R BT.709-5 */
-  color_matrix_build_XYZ (dst,
-      0.640, 0.330, 0.300, 0.600, 0.150, 0.060, 0.3127, 0.3290);
-}
-
-void
-color_matrix_build_XYZ_to_rgb_dell (ColorMatrix * dst)
-{
-  /* Dell monitor */
-#if 1
-  color_matrix_build_XYZ (dst,
-      0.662, 0.329, 0.205, 0.683, 0.146, 0.077, 0.3135, 0.3290);
-#endif
-#if 0
-  color_matrix_build_XYZ (dst,
-      0.630, 0.340, 0.310, 0.595, 0.155, 0.070, 0.3127, 0.3290);
-#endif
-  color_matrix_invert (dst);
-}
-
-void
-color_transfer_function_apply (Color * dest, Color * src)
-{
-  int i;
-
-  for (i = 0; i < 3; i++) {
-    if (src->v[i] < 0.0812) {
-      dest->v[i] = src->v[i] / 4.500;
-    } else {
-      dest->v[i] = pow (src->v[i] + 0.099, 1 / 0.4500);
-    }
-  }
-}
-
-void
-color_transfer_function_unapply (Color * dest, Color * src)
-{
-  int i;
-
-  for (i = 0; i < 3; i++) {
-    if (src->v[i] < 0.0812 / 4.500) {
-      dest->v[i] = src->v[i] * 4.500;
-    } else {
-      dest->v[i] = pow (src->v[i], 0.4500) - 0.099;
-    }
-  }
-}
-
-void
-color_gamut_clamp (Color * dest, Color * src)
-{
-  dest->v[0] = CLAMP (src->v[0], 0.0, 1.0);
-  dest->v[1] = CLAMP (src->v[1], 0.0, 1.0);
-  dest->v[2] = CLAMP (src->v[2], 0.0, 1.0);
-}
-
-#if 0
-static guint8 *
-get_color_transform_table (void)
-{
-  static guint8 *color_transform_table = NULL;
-
-#if 1
-  if (!color_transform_table) {
-    ColorMatrix bt601_to_rgb;
-    ColorMatrix bt601_to_yuv;
-    ColorMatrix bt601_rgb_to_XYZ;
-    ColorMatrix dell_XYZ_to_rgb;
-    guint8 *table_y;
-    guint8 *table_u;
-    guint8 *table_v;
-    int y, u, v;
-
-    color_matrix_build_yuv_to_rgb_601 (&bt601_to_rgb);
-    color_matrix_build_rgb_to_yuv_601 (&bt601_to_yuv);
-    color_matrix_build_rgb_to_XYZ_601 (&bt601_rgb_to_XYZ);
-    color_matrix_build_XYZ_to_rgb_dell (&dell_XYZ_to_rgb);
-
-    color_transform_table = g_malloc (0x1000000 * 3);
-
-    table_y = COG_OFFSET (color_transform_table, 0 * 0x1000000);
-    table_u = COG_OFFSET (color_transform_table, 1 * 0x1000000);
-    table_v = COG_OFFSET (color_transform_table, 2 * 0x1000000);
-
-    for (y = 0; y < 256; y++) {
-      for (u = 0; u < 256; u++) {
-        for (v = 0; v < 256; v++) {
-          Color c;
-
-          c.v[0] = y;
-          c.v[1] = u;
-          c.v[2] = v;
-          color_matrix_apply (&bt601_to_rgb, &c, &c);
-          color_gamut_clamp (&c, &c);
-          color_transfer_function_apply (&c, &c);
-          color_matrix_apply (&bt601_rgb_to_XYZ, &c, &c);
-          color_matrix_apply (&dell_XYZ_to_rgb, &c, &c);
-          color_transfer_function_unapply (&c, &c);
-          color_gamut_clamp (&c, &c);
-          color_matrix_apply (&bt601_to_yuv, &c, &c);
-
-          table_y[(y << 16) | (u << 8) | (v)] = rint (c.v[0]);
-          table_u[(y << 16) | (u << 8) | (v)] = rint (c.v[1]);
-          table_v[(y << 16) | (u << 8) | (v)] = rint (c.v[2]);
-        }
-      }
-    }
-  }
-#endif
-#if 0
-  if (!color_transform_table) {
-    ColorMatrix bt709_to_bt601;
-    guint8 *table_y;
-    guint8 *table_u;
-    guint8 *table_v;
-    int y, u, v;
-
-    color_matrix_build_bt709_to_bt601 (&bt709_to_bt601);
-
-    color_transform_table = g_malloc (0x1000000 * 3);
-
-    table_y = COG_OFFSET (color_transform_table, 0 * 0x1000000);
-    table_u = COG_OFFSET (color_transform_table, 1 * 0x1000000);
-    table_v = COG_OFFSET (color_transform_table, 2 * 0x1000000);
-
-    for (y = 0; y < 256; y++) {
-      for (u = 0; u < 256; u++) {
-        for (v = 0; v < 256; v++) {
-          Color c;
-
-          c.v[0] = y;
-          c.v[1] = u;
-          c.v[2] = v;
-          color_matrix_apply (&bt709_to_bt601, &c, &c);
-
-          table_y[(y << 16) | (u << 8) | (v)] = rint (c.v[0]);
-          table_u[(y << 16) | (u << 8) | (v)] = rint (c.v[1]);
-          table_v[(y << 16) | (u << 8) | (v)] = rint (c.v[2]);
-        }
-      }
-    }
-  }
-#endif
-
-  return color_transform_table;
-}
-#endif
diff --git a/gst/videoconvert/gstcms.h b/gst/videoconvert/gstcms.h
deleted file mode 100644
index f926a44..0000000
--- a/gst/videoconvert/gstcms.h
+++ /dev/null
@@ -1,71 +0,0 @@
-/* GStreamer
- * Copyright (C) 2008 David Schleef <ds@entropywave.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_CMS_H_
-#define _GST_CMS_H_
-
-#include <gst/gst.h>
-
-G_BEGIN_DECLS
-
-typedef struct _Color Color;
-typedef struct _ColorMatrix ColorMatrix;
-
-struct _Color
-{
-  double v[3];
-};
-
-struct _ColorMatrix
-{
-  double m[4][4];
-};
-
-void color_xyY_to_XYZ (Color * c);
-void color_XYZ_to_xyY (Color * c);
-void color_set (Color * c, double x, double y, double z);
-void color_matrix_set_identity (ColorMatrix * m);
-void color_matrix_dump (ColorMatrix * m);
-void color_matrix_multiply (ColorMatrix * dst, ColorMatrix * a, ColorMatrix * b);
-void color_matrix_apply (ColorMatrix * m, Color * dest, Color * src);
-void color_matrix_offset_components (ColorMatrix * m, double a1, double a2,
-    double a3);
-void color_matrix_scale_components (ColorMatrix * m, double a1, double a2, double a3);
-void color_matrix_YCbCr_to_RGB (ColorMatrix * m, double Kr, double Kb);
-void color_matrix_RGB_to_YCbCr (ColorMatrix * m, double Kr, double Kb);
-void color_matrix_build_yuv_to_rgb_601 (ColorMatrix * dst);
-void color_matrix_build_bt709_to_bt601 (ColorMatrix * dst);
-void color_matrix_build_rgb_to_yuv_601 (ColorMatrix * dst);
-void color_matrix_invert (ColorMatrix * m);
-void color_matrix_copy (ColorMatrix * dest, ColorMatrix * src);
-void color_matrix_transpose (ColorMatrix * m);
-void color_matrix_build_XYZ (ColorMatrix * dst,
-    double rx, double ry,
-    double gx, double gy, double bx, double by, double wx, double wy);
-void color_matrix_build_rgb_to_XYZ_601 (ColorMatrix * dst);
-void color_matrix_build_XYZ_to_rgb_709 (ColorMatrix * dst);
-void color_matrix_build_XYZ_to_rgb_dell (ColorMatrix * dst);
-void color_transfer_function_apply (Color * dest, Color * src);
-void color_transfer_function_unapply (Color * dest, Color * src);
-void color_gamut_clamp (Color * dest, Color * src);
-
-G_END_DECLS
-
-#endif
-
diff --git a/gst/videoconvert/gstvideoconvert.c b/gst/videoconvert/gstvideoconvert.c
index 34e3535..11d560d 100644
--- a/gst/videoconvert/gstvideoconvert.c
+++ b/gst/videoconvert/gstvideoconvert.c
@@ -28,8 +28,10 @@
  * <refsect2>
  * <title>Example launch line</title>
  * |[
- * gst-launch -v videotestsrc ! video/x-raw,format=\(string\)YUY2 ! videoconvert ! ximagesink
- * ]|
+ * gst-launch-1.0 -v videotestsrc ! video/x-raw,format=YUY2 ! videoconvert ! autovideosink
+ * ]| This will output a test video (generated in YUY2 format) in a video
+ * window. If the video sink selected does not support YUY2 videoconvert will
+ * automatically convert the video to a format understood by the video sink.
  * </refsect2>
  */
 
@@ -56,10 +58,28 @@
 #define gst_video_convert_parent_class parent_class
 G_DEFINE_TYPE (GstVideoConvert, gst_video_convert, GST_TYPE_VIDEO_FILTER);
 
+#define DEFAULT_PROP_DITHER      GST_VIDEO_DITHER_BAYER
+#define DEFAULT_PROP_DITHER_QUANTIZATION 1
+#define DEFAULT_PROP_CHROMA_RESAMPLER	GST_VIDEO_RESAMPLER_METHOD_LINEAR
+#define DEFAULT_PROP_ALPHA_MODE GST_VIDEO_ALPHA_MODE_COPY
+#define DEFAULT_PROP_ALPHA_VALUE 1.0
+#define DEFAULT_PROP_CHROMA_MODE GST_VIDEO_CHROMA_MODE_FULL
+#define DEFAULT_PROP_MATRIX_MODE GST_VIDEO_MATRIX_MODE_FULL
+#define DEFAULT_PROP_GAMMA_MODE GST_VIDEO_GAMMA_MODE_NONE
+#define DEFAULT_PROP_PRIMARIES_MODE GST_VIDEO_PRIMARIES_MODE_NONE
+
 enum
 {
   PROP_0,
-  PROP_DITHER
+  PROP_DITHER,
+  PROP_DITHER_QUANTIZATION,
+  PROP_CHROMA_RESAMPLER,
+  PROP_ALPHA_MODE,
+  PROP_ALPHA_VALUE,
+  PROP_CHROMA_MODE,
+  PROP_MATRIX_MODE,
+  PROP_GAMMA_MODE,
+  PROP_PRIMARIES_MODE
 };
 
 #define CSP_VIDEO_CAPS GST_VIDEO_CAPS_MAKE (GST_VIDEO_FORMATS_ALL) ";" \
@@ -90,24 +110,6 @@
 static GstFlowReturn gst_video_convert_transform_frame (GstVideoFilter * filter,
     GstVideoFrame * in_frame, GstVideoFrame * out_frame);
 
-static GType
-dither_method_get_type (void)
-{
-  static GType gtype = 0;
-
-  if (gtype == 0) {
-    static const GEnumValue values[] = {
-      {DITHER_NONE, "No dithering (default)", "none"},
-      {DITHER_VERTERR, "Vertical error propogation", "verterr"},
-      {DITHER_HALFTONE, "Half-tone", "halftone"},
-      {0, NULL, NULL}
-    };
-
-    gtype = g_enum_register_static ("GstVideoConvertDitherMethod", values);
-  }
-  return gtype;
-}
-
 /* copies the given caps */
 static GstCaps *
 gst_video_convert_caps_remove_format_info (GstCaps * caps)
@@ -353,6 +355,12 @@
   /* fixate remaining fields */
   result = gst_caps_fixate (result);
 
+  if (direction == GST_PAD_SINK) {
+    if (gst_caps_is_subset (caps, result)) {
+      gst_caps_replace (&result, caps);
+    }
+  }
+
   return result;
 }
 
@@ -419,7 +427,7 @@
   space = GST_VIDEO_CONVERT_CAST (filter);
 
   if (space->convert) {
-    videoconvert_convert_free (space->convert);
+    gst_video_converter_free (space->convert);
     space->convert = NULL;
   }
 
@@ -436,7 +444,27 @@
   if (in_info->interlace_mode != out_info->interlace_mode)
     goto format_mismatch;
 
-  space->convert = videoconvert_convert_new (in_info, out_info);
+
+  space->convert = gst_video_converter_new (in_info, out_info,
+      gst_structure_new ("GstVideoConvertConfig",
+          GST_VIDEO_CONVERTER_OPT_DITHER_METHOD, GST_TYPE_VIDEO_DITHER_METHOD,
+          space->dither,
+          GST_VIDEO_CONVERTER_OPT_DITHER_QUANTIZATION, G_TYPE_UINT,
+          space->dither_quantization,
+          GST_VIDEO_CONVERTER_OPT_CHROMA_RESAMPLER_METHOD,
+          GST_TYPE_VIDEO_RESAMPLER_METHOD, space->chroma_resampler,
+          GST_VIDEO_CONVERTER_OPT_ALPHA_MODE,
+          GST_TYPE_VIDEO_ALPHA_MODE, space->alpha_mode,
+          GST_VIDEO_CONVERTER_OPT_ALPHA_VALUE,
+          G_TYPE_DOUBLE, space->alpha_value,
+          GST_VIDEO_CONVERTER_OPT_CHROMA_MODE,
+          GST_TYPE_VIDEO_CHROMA_MODE, space->chroma_mode,
+          GST_VIDEO_CONVERTER_OPT_MATRIX_MODE,
+          GST_TYPE_VIDEO_MATRIX_MODE, space->matrix_mode,
+          GST_VIDEO_CONVERTER_OPT_GAMMA_MODE,
+          GST_TYPE_VIDEO_GAMMA_MODE, space->gamma_mode,
+          GST_VIDEO_CONVERTER_OPT_PRIMARIES_MODE,
+          GST_TYPE_VIDEO_PRIMARIES_MODE, space->primaries_mode, NULL));
   if (space->convert == NULL)
     goto no_convert;
 
@@ -464,7 +492,7 @@
   GstVideoConvert *space = GST_VIDEO_CONVERT (obj);
 
   if (space->convert) {
-    videoconvert_convert_free (space->convert);
+    gst_video_converter_free (space->convert);
   }
 
   G_OBJECT_CLASS (parent_class)->finalize (obj);
@@ -491,7 +519,7 @@
   gst_element_class_set_static_metadata (gstelement_class,
       "Colorspace converter", "Filter/Converter/Video",
       "Converts video from one colorspace to another",
-      "GStreamer maintainers <gstreamer-devel@lists.sourceforge.net>");
+      "GStreamer maintainers <gstreamer-devel@lists.freedesktop.org>");
 
   gstbasetransform_class->transform_caps =
       GST_DEBUG_FUNCPTR (gst_video_convert_transform_caps);
@@ -511,13 +539,57 @@
 
   g_object_class_install_property (gobject_class, PROP_DITHER,
       g_param_spec_enum ("dither", "Dither", "Apply dithering while converting",
-          dither_method_get_type (), DITHER_NONE,
+          gst_video_dither_method_get_type (), DEFAULT_PROP_DITHER,
+          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+  g_object_class_install_property (gobject_class, PROP_DITHER_QUANTIZATION,
+      g_param_spec_uint ("dither-quantization", "Dither Quantize",
+          "Quantizer to use", 0, G_MAXUINT, DEFAULT_PROP_DITHER_QUANTIZATION,
+          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+  g_object_class_install_property (gobject_class, PROP_CHROMA_RESAMPLER,
+      g_param_spec_enum ("chroma-resampler", "Chroma resampler",
+          "Chroma resampler method", gst_video_resampler_method_get_type (),
+          DEFAULT_PROP_CHROMA_RESAMPLER,
+          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+  g_object_class_install_property (gobject_class, PROP_ALPHA_MODE,
+      g_param_spec_enum ("alpha-mode", "Alpha Mode",
+          "Alpha Mode to use", gst_video_alpha_mode_get_type (),
+          DEFAULT_PROP_ALPHA_MODE, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+  g_object_class_install_property (gobject_class, PROP_ALPHA_VALUE,
+      g_param_spec_double ("alpha-value", "Alpha Value",
+          "Alpha Value to use", 0.0, 1.0,
+          DEFAULT_PROP_ALPHA_VALUE,
+          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+  g_object_class_install_property (gobject_class, PROP_CHROMA_MODE,
+      g_param_spec_enum ("chroma-mode", "Chroma Mode", "Chroma Resampling Mode",
+          gst_video_chroma_mode_get_type (), DEFAULT_PROP_CHROMA_MODE,
+          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+  g_object_class_install_property (gobject_class, PROP_MATRIX_MODE,
+      g_param_spec_enum ("matrix-mode", "Matrix Mode", "Matrix Conversion Mode",
+          gst_video_matrix_mode_get_type (), DEFAULT_PROP_MATRIX_MODE,
+          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+  g_object_class_install_property (gobject_class, PROP_GAMMA_MODE,
+      g_param_spec_enum ("gamma-mode", "Gamma Mode", "Gamma Conversion Mode",
+          gst_video_gamma_mode_get_type (), DEFAULT_PROP_GAMMA_MODE,
+          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+  g_object_class_install_property (gobject_class, PROP_PRIMARIES_MODE,
+      g_param_spec_enum ("primaries-mode", "Primaries Mode",
+          "Primaries Conversion Mode", gst_video_primaries_mode_get_type (),
+          DEFAULT_PROP_PRIMARIES_MODE,
           G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
 }
 
 static void
 gst_video_convert_init (GstVideoConvert * space)
 {
+  space->dither = DEFAULT_PROP_DITHER;
+  space->dither_quantization = DEFAULT_PROP_DITHER_QUANTIZATION;
+  space->chroma_resampler = DEFAULT_PROP_CHROMA_RESAMPLER;
+  space->alpha_mode = DEFAULT_PROP_ALPHA_MODE;
+  space->alpha_value = DEFAULT_PROP_ALPHA_VALUE;
+  space->chroma_mode = DEFAULT_PROP_CHROMA_MODE;
+  space->matrix_mode = DEFAULT_PROP_MATRIX_MODE;
+  space->gamma_mode = DEFAULT_PROP_GAMMA_MODE;
+  space->primaries_mode = DEFAULT_PROP_PRIMARIES_MODE;
 }
 
 void
@@ -532,6 +604,30 @@
     case PROP_DITHER:
       csp->dither = g_value_get_enum (value);
       break;
+    case PROP_CHROMA_RESAMPLER:
+      csp->chroma_resampler = g_value_get_enum (value);
+      break;
+    case PROP_ALPHA_MODE:
+      csp->alpha_mode = g_value_get_enum (value);
+      break;
+    case PROP_ALPHA_VALUE:
+      csp->alpha_value = g_value_get_double (value);
+      break;
+    case PROP_CHROMA_MODE:
+      csp->chroma_mode = g_value_get_enum (value);
+      break;
+    case PROP_MATRIX_MODE:
+      csp->matrix_mode = g_value_get_enum (value);
+      break;
+    case PROP_GAMMA_MODE:
+      csp->gamma_mode = g_value_get_enum (value);
+      break;
+    case PROP_PRIMARIES_MODE:
+      csp->primaries_mode = g_value_get_enum (value);
+      break;
+    case PROP_DITHER_QUANTIZATION:
+      csp->dither_quantization = g_value_get_uint (value);
+      break;
     default:
       G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
       break;
@@ -550,6 +646,30 @@
     case PROP_DITHER:
       g_value_set_enum (value, csp->dither);
       break;
+    case PROP_CHROMA_RESAMPLER:
+      g_value_set_enum (value, csp->chroma_resampler);
+      break;
+    case PROP_ALPHA_MODE:
+      g_value_set_enum (value, csp->alpha_mode);
+      break;
+    case PROP_ALPHA_VALUE:
+      g_value_set_double (value, csp->alpha_value);
+      break;
+    case PROP_CHROMA_MODE:
+      g_value_set_enum (value, csp->chroma_mode);
+      break;
+    case PROP_MATRIX_MODE:
+      g_value_set_enum (value, csp->matrix_mode);
+      break;
+    case PROP_GAMMA_MODE:
+      g_value_set_enum (value, csp->gamma_mode);
+      break;
+    case PROP_PRIMARIES_MODE:
+      g_value_set_enum (value, csp->primaries_mode);
+      break;
+    case PROP_DITHER_QUANTIZATION:
+      g_value_set_uint (value, csp->dither_quantization);
+      break;
     default:
       G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
       break;
@@ -569,9 +689,7 @@
       GST_VIDEO_INFO_NAME (&filter->in_info),
       GST_VIDEO_INFO_NAME (&filter->out_info));
 
-  videoconvert_convert_set_dither (space->convert, space->dither);
-
-  videoconvert_convert_convert (space->convert, out_frame, in_frame);
+  gst_video_converter_frame (space->convert, in_frame, out_frame);
 
   return GST_FLOW_OK;
 }
diff --git a/gst/videoconvert/gstvideoconvert.h b/gst/videoconvert/gstvideoconvert.h
index 00f588c..78678df 100644
--- a/gst/videoconvert/gstvideoconvert.h
+++ b/gst/videoconvert/gstvideoconvert.h
@@ -25,7 +25,6 @@
 #include <gst/gst.h>
 #include <gst/video/video.h>
 #include <gst/video/gstvideofilter.h>
-#include "videoconvert.h"
 
 G_BEGIN_DECLS
 
@@ -47,8 +46,16 @@
 struct _GstVideoConvert {
   GstVideoFilter element;
 
-  VideoConvert *convert;
-  gboolean dither;
+  GstVideoConverter *convert;
+  GstVideoDitherMethod dither;
+  guint dither_quantization;
+  GstVideoResamplerMethod chroma_resampler;
+  GstVideoAlphaMode alpha_mode;
+  GstVideoChromaMode chroma_mode;
+  GstVideoMatrixMode matrix_mode;
+  GstVideoGammaMode gamma_mode;
+  GstVideoPrimariesMode primaries_mode;
+  gdouble alpha_value;
 };
 
 struct _GstVideoConvertClass
diff --git a/gst/videoconvert/gstvideoconvertorc-dist.c b/gst/videoconvert/gstvideoconvertorc-dist.c
deleted file mode 100644
index 3eae949..0000000
--- a/gst/videoconvert/gstvideoconvertorc-dist.c
+++ /dev/null
@@ -1,8836 +0,0 @@
-
-/* autogenerated from gstvideoconvertorc.orc */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-#include <glib.h>
-
-#ifndef _ORC_INTEGER_TYPEDEFS_
-#define _ORC_INTEGER_TYPEDEFS_
-#if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
-#include <stdint.h>
-typedef int8_t orc_int8;
-typedef int16_t orc_int16;
-typedef int32_t orc_int32;
-typedef int64_t orc_int64;
-typedef uint8_t orc_uint8;
-typedef uint16_t orc_uint16;
-typedef uint32_t orc_uint32;
-typedef uint64_t orc_uint64;
-#define ORC_UINT64_C(x) UINT64_C(x)
-#elif defined(_MSC_VER)
-typedef signed __int8 orc_int8;
-typedef signed __int16 orc_int16;
-typedef signed __int32 orc_int32;
-typedef signed __int64 orc_int64;
-typedef unsigned __int8 orc_uint8;
-typedef unsigned __int16 orc_uint16;
-typedef unsigned __int32 orc_uint32;
-typedef unsigned __int64 orc_uint64;
-#define ORC_UINT64_C(x) (x##Ui64)
-#define inline __inline
-#else
-#include <limits.h>
-typedef signed char orc_int8;
-typedef short orc_int16;
-typedef int orc_int32;
-typedef unsigned char orc_uint8;
-typedef unsigned short orc_uint16;
-typedef unsigned int orc_uint32;
-#if INT_MAX == LONG_MAX
-typedef long long orc_int64;
-typedef unsigned long long orc_uint64;
-#define ORC_UINT64_C(x) (x##ULL)
-#else
-typedef long orc_int64;
-typedef unsigned long orc_uint64;
-#define ORC_UINT64_C(x) (x##UL)
-#endif
-#endif
-typedef union
-{
-  orc_int16 i;
-  orc_int8 x2[2];
-} orc_union16;
-typedef union
-{
-  orc_int32 i;
-  float f;
-  orc_int16 x2[2];
-  orc_int8 x4[4];
-} orc_union32;
-typedef union
-{
-  orc_int64 i;
-  double f;
-  orc_int32 x2[2];
-  float x2f[2];
-  orc_int16 x4[4];
-} orc_union64;
-#endif
-#ifndef ORC_RESTRICT
-#if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
-#define ORC_RESTRICT restrict
-#elif defined(__GNUC__) && __GNUC__ >= 4
-#define ORC_RESTRICT __restrict__
-#else
-#define ORC_RESTRICT
-#endif
-#endif
-
-#ifndef ORC_INTERNAL
-#if defined(__SUNPRO_C) && (__SUNPRO_C >= 0x590)
-#define ORC_INTERNAL __attribute__((visibility("hidden")))
-#elif defined(__SUNPRO_C) && (__SUNPRO_C >= 0x550)
-#define ORC_INTERNAL __hidden
-#elif defined (__GNUC__)
-#define ORC_INTERNAL __attribute__((visibility("hidden")))
-#else
-#define ORC_INTERNAL
-#endif
-#endif
-
-
-#ifndef DISABLE_ORC
-#include <orc/orc.h>
-#endif
-void video_convert_orc_memcpy_2d (guint8 * ORC_RESTRICT d1, int d1_stride,
-    const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m);
-void video_convert_orc_convert_I420_UYVY (guint8 * ORC_RESTRICT d1,
-    guint8 * ORC_RESTRICT d2, const guint8 * ORC_RESTRICT s1,
-    const guint8 * ORC_RESTRICT s2, const guint8 * ORC_RESTRICT s3,
-    const guint8 * ORC_RESTRICT s4, int n);
-void video_convert_orc_convert_I420_YUY2 (guint8 * ORC_RESTRICT d1,
-    guint8 * ORC_RESTRICT d2, const guint8 * ORC_RESTRICT s1,
-    const guint8 * ORC_RESTRICT s2, const guint8 * ORC_RESTRICT s3,
-    const guint8 * ORC_RESTRICT s4, int n);
-void video_convert_orc_convert_I420_AYUV (guint8 * ORC_RESTRICT d1,
-    guint8 * ORC_RESTRICT d2, const guint8 * ORC_RESTRICT s1,
-    const guint8 * ORC_RESTRICT s2, const guint8 * ORC_RESTRICT s3,
-    const guint8 * ORC_RESTRICT s4, int n);
-void video_convert_orc_convert_YUY2_I420 (guint8 * ORC_RESTRICT d1,
-    guint8 * ORC_RESTRICT d2, guint8 * ORC_RESTRICT d3,
-    guint8 * ORC_RESTRICT d4, const guint8 * ORC_RESTRICT s1,
-    const guint8 * ORC_RESTRICT s2, int n);
-void video_convert_orc_convert_UYVY_YUY2 (guint8 * ORC_RESTRICT d1,
-    int d1_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m);
-void video_convert_orc_planar_chroma_420_422 (guint8 * ORC_RESTRICT d1,
-    int d1_stride, guint8 * ORC_RESTRICT d2, int d2_stride,
-    const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m);
-void video_convert_orc_planar_chroma_420_444 (guint8 * ORC_RESTRICT d1,
-    int d1_stride, guint8 * ORC_RESTRICT d2, int d2_stride,
-    const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m);
-void video_convert_orc_planar_chroma_422_444 (guint8 * ORC_RESTRICT d1,
-    int d1_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m);
-void video_convert_orc_planar_chroma_444_422 (guint8 * ORC_RESTRICT d1,
-    int d1_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m);
-void video_convert_orc_planar_chroma_444_420 (guint8 * ORC_RESTRICT d1,
-    int d1_stride, const guint8 * ORC_RESTRICT s1, int s1_stride,
-    const guint8 * ORC_RESTRICT s2, int s2_stride, int n, int m);
-void video_convert_orc_planar_chroma_422_420 (guint8 * ORC_RESTRICT d1,
-    int d1_stride, const guint8 * ORC_RESTRICT s1, int s1_stride,
-    const guint8 * ORC_RESTRICT s2, int s2_stride, int n, int m);
-void video_convert_orc_convert_YUY2_AYUV (guint8 * ORC_RESTRICT d1,
-    int d1_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m);
-void video_convert_orc_convert_UYVY_AYUV (guint8 * ORC_RESTRICT d1,
-    int d1_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m);
-void video_convert_orc_convert_YUY2_Y42B (guint8 * ORC_RESTRICT d1,
-    int d1_stride, guint8 * ORC_RESTRICT d2, int d2_stride,
-    guint8 * ORC_RESTRICT d3, int d3_stride, const guint8 * ORC_RESTRICT s1,
-    int s1_stride, int n, int m);
-void video_convert_orc_convert_UYVY_Y42B (guint8 * ORC_RESTRICT d1,
-    int d1_stride, guint8 * ORC_RESTRICT d2, int d2_stride,
-    guint8 * ORC_RESTRICT d3, int d3_stride, const guint8 * ORC_RESTRICT s1,
-    int s1_stride, int n, int m);
-void video_convert_orc_convert_YUY2_Y444 (guint8 * ORC_RESTRICT d1,
-    int d1_stride, guint8 * ORC_RESTRICT d2, int d2_stride,
-    guint8 * ORC_RESTRICT d3, int d3_stride, const guint8 * ORC_RESTRICT s1,
-    int s1_stride, int n, int m);
-void video_convert_orc_convert_UYVY_Y444 (guint8 * ORC_RESTRICT d1,
-    int d1_stride, guint8 * ORC_RESTRICT d2, int d2_stride,
-    guint8 * ORC_RESTRICT d3, int d3_stride, const guint8 * ORC_RESTRICT s1,
-    int s1_stride, int n, int m);
-void video_convert_orc_convert_UYVY_I420 (guint8 * ORC_RESTRICT d1,
-    guint8 * ORC_RESTRICT d2, guint8 * ORC_RESTRICT d3,
-    guint8 * ORC_RESTRICT d4, const guint8 * ORC_RESTRICT s1,
-    const guint8 * ORC_RESTRICT s2, int n);
-void video_convert_orc_convert_AYUV_I420 (guint8 * ORC_RESTRICT d1,
-    int d1_stride, guint8 * ORC_RESTRICT d2, int d2_stride,
-    guint8 * ORC_RESTRICT d3, int d3_stride, guint8 * ORC_RESTRICT d4,
-    int d4_stride, const guint8 * ORC_RESTRICT s1, int s1_stride,
-    const guint8 * ORC_RESTRICT s2, int s2_stride, int n, int m);
-void video_convert_orc_convert_AYUV_YUY2 (guint8 * ORC_RESTRICT d1,
-    int d1_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m);
-void video_convert_orc_convert_AYUV_UYVY (guint8 * ORC_RESTRICT d1,
-    int d1_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m);
-void video_convert_orc_convert_AYUV_Y42B (guint8 * ORC_RESTRICT d1,
-    int d1_stride, guint8 * ORC_RESTRICT d2, int d2_stride,
-    guint8 * ORC_RESTRICT d3, int d3_stride, const guint8 * ORC_RESTRICT s1,
-    int s1_stride, int n, int m);
-void video_convert_orc_convert_AYUV_Y444 (guint8 * ORC_RESTRICT d1,
-    int d1_stride, guint8 * ORC_RESTRICT d2, int d2_stride,
-    guint8 * ORC_RESTRICT d3, int d3_stride, const guint8 * ORC_RESTRICT s1,
-    int s1_stride, int n, int m);
-void video_convert_orc_convert_Y42B_YUY2 (guint8 * ORC_RESTRICT d1,
-    int d1_stride, const guint8 * ORC_RESTRICT s1, int s1_stride,
-    const guint8 * ORC_RESTRICT s2, int s2_stride,
-    const guint8 * ORC_RESTRICT s3, int s3_stride, int n, int m);
-void video_convert_orc_convert_Y42B_UYVY (guint8 * ORC_RESTRICT d1,
-    int d1_stride, const guint8 * ORC_RESTRICT s1, int s1_stride,
-    const guint8 * ORC_RESTRICT s2, int s2_stride,
-    const guint8 * ORC_RESTRICT s3, int s3_stride, int n, int m);
-void video_convert_orc_convert_Y42B_AYUV (guint8 * ORC_RESTRICT d1,
-    int d1_stride, const guint8 * ORC_RESTRICT s1, int s1_stride,
-    const guint8 * ORC_RESTRICT s2, int s2_stride,
-    const guint8 * ORC_RESTRICT s3, int s3_stride, int n, int m);
-void video_convert_orc_convert_Y444_YUY2 (guint8 * ORC_RESTRICT d1,
-    int d1_stride, const guint8 * ORC_RESTRICT s1, int s1_stride,
-    const guint8 * ORC_RESTRICT s2, int s2_stride,
-    const guint8 * ORC_RESTRICT s3, int s3_stride, int n, int m);
-void video_convert_orc_convert_Y444_UYVY (guint8 * ORC_RESTRICT d1,
-    int d1_stride, const guint8 * ORC_RESTRICT s1, int s1_stride,
-    const guint8 * ORC_RESTRICT s2, int s2_stride,
-    const guint8 * ORC_RESTRICT s3, int s3_stride, int n, int m);
-void video_convert_orc_convert_Y444_AYUV (guint8 * ORC_RESTRICT d1,
-    int d1_stride, const guint8 * ORC_RESTRICT s1, int s1_stride,
-    const guint8 * ORC_RESTRICT s2, int s2_stride,
-    const guint8 * ORC_RESTRICT s3, int s3_stride, int n, int m);
-void video_convert_orc_convert_AYUV_ARGB (guint8 * ORC_RESTRICT d1,
-    int d1_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, int p1,
-    int p2, int p3, int p4, int p5, int n, int m);
-void video_convert_orc_convert_AYUV_BGRA (guint8 * ORC_RESTRICT d1,
-    int d1_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, int p1,
-    int p2, int p3, int p4, int p5, int n, int m);
-void video_convert_orc_convert_AYUV_ABGR (guint8 * ORC_RESTRICT d1,
-    int d1_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, int p1,
-    int p2, int p3, int p4, int p5, int n, int m);
-void video_convert_orc_convert_AYUV_RGBA (guint8 * ORC_RESTRICT d1,
-    int d1_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, int p1,
-    int p2, int p3, int p4, int p5, int n, int m);
-void video_convert_orc_convert_I420_BGRA (guint8 * ORC_RESTRICT d1,
-    const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2,
-    const guint8 * ORC_RESTRICT s3, int p1, int p2, int p3, int p4, int p5,
-    int n);
-
-
-/* begin Orc C target preamble */
-#define ORC_CLAMP(x,a,b) ((x)<(a) ? (a) : ((x)>(b) ? (b) : (x)))
-#define ORC_ABS(a) ((a)<0 ? -(a) : (a))
-#define ORC_MIN(a,b) ((a)<(b) ? (a) : (b))
-#define ORC_MAX(a,b) ((a)>(b) ? (a) : (b))
-#define ORC_SB_MAX 127
-#define ORC_SB_MIN (-1-ORC_SB_MAX)
-#define ORC_UB_MAX 255
-#define ORC_UB_MIN 0
-#define ORC_SW_MAX 32767
-#define ORC_SW_MIN (-1-ORC_SW_MAX)
-#define ORC_UW_MAX 65535
-#define ORC_UW_MIN 0
-#define ORC_SL_MAX 2147483647
-#define ORC_SL_MIN (-1-ORC_SL_MAX)
-#define ORC_UL_MAX 4294967295U
-#define ORC_UL_MIN 0
-#define ORC_CLAMP_SB(x) ORC_CLAMP(x,ORC_SB_MIN,ORC_SB_MAX)
-#define ORC_CLAMP_UB(x) ORC_CLAMP(x,ORC_UB_MIN,ORC_UB_MAX)
-#define ORC_CLAMP_SW(x) ORC_CLAMP(x,ORC_SW_MIN,ORC_SW_MAX)
-#define ORC_CLAMP_UW(x) ORC_CLAMP(x,ORC_UW_MIN,ORC_UW_MAX)
-#define ORC_CLAMP_SL(x) ORC_CLAMP(x,ORC_SL_MIN,ORC_SL_MAX)
-#define ORC_CLAMP_UL(x) ORC_CLAMP(x,ORC_UL_MIN,ORC_UL_MAX)
-#define ORC_SWAP_W(x) ((((x)&0xffU)<<8) | (((x)&0xff00U)>>8))
-#define ORC_SWAP_L(x) ((((x)&0xffU)<<24) | (((x)&0xff00U)<<8) | (((x)&0xff0000U)>>8) | (((x)&0xff000000U)>>24))
-#define ORC_SWAP_Q(x) ((((x)&ORC_UINT64_C(0xff))<<56) | (((x)&ORC_UINT64_C(0xff00))<<40) | (((x)&ORC_UINT64_C(0xff0000))<<24) | (((x)&ORC_UINT64_C(0xff000000))<<8) | (((x)&ORC_UINT64_C(0xff00000000))>>8) | (((x)&ORC_UINT64_C(0xff0000000000))>>24) | (((x)&ORC_UINT64_C(0xff000000000000))>>40) | (((x)&ORC_UINT64_C(0xff00000000000000))>>56))
-#define ORC_PTR_OFFSET(ptr,offset) ((void *)(((unsigned char *)(ptr)) + (offset)))
-#define ORC_DENORMAL(x) ((x) & ((((x)&0x7f800000) == 0) ? 0xff800000 : 0xffffffff))
-#define ORC_ISNAN(x) ((((x)&0x7f800000) == 0x7f800000) && (((x)&0x007fffff) != 0))
-#define ORC_DENORMAL_DOUBLE(x) ((x) & ((((x)&ORC_UINT64_C(0x7ff0000000000000)) == 0) ? ORC_UINT64_C(0xfff0000000000000) : ORC_UINT64_C(0xffffffffffffffff)))
-#define ORC_ISNAN_DOUBLE(x) ((((x)&ORC_UINT64_C(0x7ff0000000000000)) == ORC_UINT64_C(0x7ff0000000000000)) && (((x)&ORC_UINT64_C(0x000fffffffffffff)) != 0))
-#ifndef ORC_RESTRICT
-#if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
-#define ORC_RESTRICT restrict
-#elif defined(__GNUC__) && __GNUC__ >= 4
-#define ORC_RESTRICT __restrict__
-#else
-#define ORC_RESTRICT
-#endif
-#endif
-/* end Orc C target preamble */
-
-
-
-/* video_convert_orc_memcpy_2d */
-#ifdef DISABLE_ORC
-void
-video_convert_orc_memcpy_2d (guint8 * ORC_RESTRICT d1, int d1_stride,
-    const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m)
-{
-  int i;
-  int j;
-  orc_int8 *ORC_RESTRICT ptr0;
-  const orc_int8 *ORC_RESTRICT ptr4;
-  orc_int8 var32;
-  orc_int8 var33;
-
-  for (j = 0; j < m; j++) {
-    ptr0 = ORC_PTR_OFFSET (d1, d1_stride * j);
-    ptr4 = ORC_PTR_OFFSET (s1, s1_stride * j);
-
-
-    for (i = 0; i < n; i++) {
-      /* 0: loadb */
-      var32 = ptr4[i];
-      /* 1: copyb */
-      var33 = var32;
-      /* 2: storeb */
-      ptr0[i] = var33;
-    }
-  }
-
-}
-
-#else
-static void
-_backup_video_convert_orc_memcpy_2d (OrcExecutor * ORC_RESTRICT ex)
-{
-  int i;
-  int j;
-  int n = ex->n;
-  int m = ex->params[ORC_VAR_A1];
-  orc_int8 *ORC_RESTRICT ptr0;
-  const orc_int8 *ORC_RESTRICT ptr4;
-  orc_int8 var32;
-  orc_int8 var33;
-
-  for (j = 0; j < m; j++) {
-    ptr0 = ORC_PTR_OFFSET (ex->arrays[0], ex->params[0] * j);
-    ptr4 = ORC_PTR_OFFSET (ex->arrays[4], ex->params[4] * j);
-
-
-    for (i = 0; i < n; i++) {
-      /* 0: loadb */
-      var32 = ptr4[i];
-      /* 1: copyb */
-      var33 = var32;
-      /* 2: storeb */
-      ptr0[i] = var33;
-    }
-  }
-
-}
-
-void
-video_convert_orc_memcpy_2d (guint8 * ORC_RESTRICT d1, int d1_stride,
-    const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m)
-{
-  OrcExecutor _ex, *ex = &_ex;
-  static volatile int p_inited = 0;
-  static OrcCode *c = 0;
-  void (*func) (OrcExecutor *);
-
-  if (!p_inited) {
-    orc_once_mutex_lock ();
-    if (!p_inited) {
-      OrcProgram *p;
-
-#if 1
-      static const orc_uint8 bc[] = {
-        1, 7, 9, 27, 118, 105, 100, 101, 111, 95, 99, 111, 110, 118, 101, 114,
-        116, 95, 111, 114, 99, 95, 109, 101, 109, 99, 112, 121, 95, 50, 100, 11,
-        1, 1, 12, 1, 1, 42, 0, 4, 2, 0,
-      };
-      p = orc_program_new_from_static_bytecode (bc);
-      orc_program_set_backup_function (p, _backup_video_convert_orc_memcpy_2d);
-#else
-      p = orc_program_new ();
-      orc_program_set_2d (p);
-      orc_program_set_name (p, "video_convert_orc_memcpy_2d");
-      orc_program_set_backup_function (p, _backup_video_convert_orc_memcpy_2d);
-      orc_program_add_destination (p, 1, "d1");
-      orc_program_add_source (p, 1, "s1");
-
-      orc_program_append_2 (p, "copyb", 0, ORC_VAR_D1, ORC_VAR_S1, ORC_VAR_D1,
-          ORC_VAR_D1);
-#endif
-
-      orc_program_compile (p);
-      c = orc_program_take_code (p);
-      orc_program_free (p);
-    }
-    p_inited = TRUE;
-    orc_once_mutex_unlock ();
-  }
-  ex->arrays[ORC_VAR_A2] = c;
-  ex->program = 0;
-
-  ex->n = n;
-  ORC_EXECUTOR_M (ex) = m;
-  ex->arrays[ORC_VAR_D1] = d1;
-  ex->params[ORC_VAR_D1] = d1_stride;
-  ex->arrays[ORC_VAR_S1] = (void *) s1;
-  ex->params[ORC_VAR_S1] = s1_stride;
-
-  func = c->exec;
-  func (ex);
-}
-#endif
-
-
-/* video_convert_orc_convert_I420_UYVY */
-#ifdef DISABLE_ORC
-void
-video_convert_orc_convert_I420_UYVY (guint8 * ORC_RESTRICT d1,
-    guint8 * ORC_RESTRICT d2, const guint8 * ORC_RESTRICT s1,
-    const guint8 * ORC_RESTRICT s2, const guint8 * ORC_RESTRICT s3,
-    const guint8 * ORC_RESTRICT s4, int n)
-{
-  int i;
-  orc_union32 *ORC_RESTRICT ptr0;
-  orc_union32 *ORC_RESTRICT ptr1;
-  const orc_union16 *ORC_RESTRICT ptr4;
-  const orc_union16 *ORC_RESTRICT ptr5;
-  const orc_int8 *ORC_RESTRICT ptr6;
-  const orc_int8 *ORC_RESTRICT ptr7;
-  orc_int8 var33;
-  orc_int8 var34;
-  orc_union16 var35;
-  orc_union32 var36;
-  orc_union16 var37;
-  orc_union32 var38;
-  orc_union16 var39;
-
-  ptr0 = (orc_union32 *) d1;
-  ptr1 = (orc_union32 *) d2;
-  ptr4 = (orc_union16 *) s1;
-  ptr5 = (orc_union16 *) s2;
-  ptr6 = (orc_int8 *) s3;
-  ptr7 = (orc_int8 *) s4;
-
-
-  for (i = 0; i < n; i++) {
-    /* 0: loadb */
-    var33 = ptr6[i];
-    /* 1: loadb */
-    var34 = ptr7[i];
-    /* 2: mergebw */
-    {
-      orc_union16 _dest;
-      _dest.x2[0] = var33;
-      _dest.x2[1] = var34;
-      var39.i = _dest.i;
-    }
-    /* 3: loadw */
-    var35 = ptr4[i];
-    /* 4: mergebw */
-    {
-      orc_union16 _dest;
-      _dest.x2[0] = var39.x2[0];
-      _dest.x2[1] = var35.x2[0];
-      var36.x2[0] = _dest.i;
-    }
-    {
-      orc_union16 _dest;
-      _dest.x2[0] = var39.x2[1];
-      _dest.x2[1] = var35.x2[1];
-      var36.x2[1] = _dest.i;
-    }
-    /* 5: storel */
-    ptr0[i] = var36;
-    /* 6: loadw */
-    var37 = ptr5[i];
-    /* 7: mergebw */
-    {
-      orc_union16 _dest;
-      _dest.x2[0] = var39.x2[0];
-      _dest.x2[1] = var37.x2[0];
-      var38.x2[0] = _dest.i;
-    }
-    {
-      orc_union16 _dest;
-      _dest.x2[0] = var39.x2[1];
-      _dest.x2[1] = var37.x2[1];
-      var38.x2[1] = _dest.i;
-    }
-    /* 8: storel */
-    ptr1[i] = var38;
-  }
-
-}
-
-#else
-static void
-_backup_video_convert_orc_convert_I420_UYVY (OrcExecutor * ORC_RESTRICT ex)
-{
-  int i;
-  int n = ex->n;
-  orc_union32 *ORC_RESTRICT ptr0;
-  orc_union32 *ORC_RESTRICT ptr1;
-  const orc_union16 *ORC_RESTRICT ptr4;
-  const orc_union16 *ORC_RESTRICT ptr5;
-  const orc_int8 *ORC_RESTRICT ptr6;
-  const orc_int8 *ORC_RESTRICT ptr7;
-  orc_int8 var33;
-  orc_int8 var34;
-  orc_union16 var35;
-  orc_union32 var36;
-  orc_union16 var37;
-  orc_union32 var38;
-  orc_union16 var39;
-
-  ptr0 = (orc_union32 *) ex->arrays[0];
-  ptr1 = (orc_union32 *) ex->arrays[1];
-  ptr4 = (orc_union16 *) ex->arrays[4];
-  ptr5 = (orc_union16 *) ex->arrays[5];
-  ptr6 = (orc_int8 *) ex->arrays[6];
-  ptr7 = (orc_int8 *) ex->arrays[7];
-
-
-  for (i = 0; i < n; i++) {
-    /* 0: loadb */
-    var33 = ptr6[i];
-    /* 1: loadb */
-    var34 = ptr7[i];
-    /* 2: mergebw */
-    {
-      orc_union16 _dest;
-      _dest.x2[0] = var33;
-      _dest.x2[1] = var34;
-      var39.i = _dest.i;
-    }
-    /* 3: loadw */
-    var35 = ptr4[i];
-    /* 4: mergebw */
-    {
-      orc_union16 _dest;
-      _dest.x2[0] = var39.x2[0];
-      _dest.x2[1] = var35.x2[0];
-      var36.x2[0] = _dest.i;
-    }
-    {
-      orc_union16 _dest;
-      _dest.x2[0] = var39.x2[1];
-      _dest.x2[1] = var35.x2[1];
-      var36.x2[1] = _dest.i;
-    }
-    /* 5: storel */
-    ptr0[i] = var36;
-    /* 6: loadw */
-    var37 = ptr5[i];
-    /* 7: mergebw */
-    {
-      orc_union16 _dest;
-      _dest.x2[0] = var39.x2[0];
-      _dest.x2[1] = var37.x2[0];
-      var38.x2[0] = _dest.i;
-    }
-    {
-      orc_union16 _dest;
-      _dest.x2[0] = var39.x2[1];
-      _dest.x2[1] = var37.x2[1];
-      var38.x2[1] = _dest.i;
-    }
-    /* 8: storel */
-    ptr1[i] = var38;
-  }
-
-}
-
-void
-video_convert_orc_convert_I420_UYVY (guint8 * ORC_RESTRICT d1,
-    guint8 * ORC_RESTRICT d2, const guint8 * ORC_RESTRICT s1,
-    const guint8 * ORC_RESTRICT s2, const guint8 * ORC_RESTRICT s3,
-    const guint8 * ORC_RESTRICT s4, int n)
-{
-  OrcExecutor _ex, *ex = &_ex;
-  static volatile int p_inited = 0;
-  static OrcCode *c = 0;
-  void (*func) (OrcExecutor *);
-
-  if (!p_inited) {
-    orc_once_mutex_lock ();
-    if (!p_inited) {
-      OrcProgram *p;
-
-#if 1
-      static const orc_uint8 bc[] = {
-        1, 9, 35, 118, 105, 100, 101, 111, 95, 99, 111, 110, 118, 101, 114, 116,
-        95, 111, 114, 99, 95, 99, 111, 110, 118, 101, 114, 116, 95, 73, 52, 50,
-        48, 95, 85, 89, 86, 89, 11, 4, 4, 11, 4, 4, 12, 2, 2, 12,
-        2, 2, 12, 1, 1, 12, 1, 1, 20, 2, 196, 32, 6, 7, 21, 1,
-        196, 0, 32, 4, 21, 1, 196, 1, 32, 5, 2, 0,
-      };
-      p = orc_program_new_from_static_bytecode (bc);
-      orc_program_set_backup_function (p,
-          _backup_video_convert_orc_convert_I420_UYVY);
-#else
-      p = orc_program_new ();
-      orc_program_set_name (p, "video_convert_orc_convert_I420_UYVY");
-      orc_program_set_backup_function (p,
-          _backup_video_convert_orc_convert_I420_UYVY);
-      orc_program_add_destination (p, 4, "d1");
-      orc_program_add_destination (p, 4, "d2");
-      orc_program_add_source (p, 2, "s1");
-      orc_program_add_source (p, 2, "s2");
-      orc_program_add_source (p, 1, "s3");
-      orc_program_add_source (p, 1, "s4");
-      orc_program_add_temporary (p, 2, "t1");
-
-      orc_program_append_2 (p, "mergebw", 0, ORC_VAR_T1, ORC_VAR_S3, ORC_VAR_S4,
-          ORC_VAR_D1);
-      orc_program_append_2 (p, "mergebw", 1, ORC_VAR_D1, ORC_VAR_T1, ORC_VAR_S1,
-          ORC_VAR_D1);
-      orc_program_append_2 (p, "mergebw", 1, ORC_VAR_D2, ORC_VAR_T1, ORC_VAR_S2,
-          ORC_VAR_D1);
-#endif
-
-      orc_program_compile (p);
-      c = orc_program_take_code (p);
-      orc_program_free (p);
-    }
-    p_inited = TRUE;
-    orc_once_mutex_unlock ();
-  }
-  ex->arrays[ORC_VAR_A2] = c;
-  ex->program = 0;
-
-  ex->n = n;
-  ex->arrays[ORC_VAR_D1] = d1;
-  ex->arrays[ORC_VAR_D2] = d2;
-  ex->arrays[ORC_VAR_S1] = (void *) s1;
-  ex->arrays[ORC_VAR_S2] = (void *) s2;
-  ex->arrays[ORC_VAR_S3] = (void *) s3;
-  ex->arrays[ORC_VAR_S4] = (void *) s4;
-
-  func = c->exec;
-  func (ex);
-}
-#endif
-
-
-/* video_convert_orc_convert_I420_YUY2 */
-#ifdef DISABLE_ORC
-void
-video_convert_orc_convert_I420_YUY2 (guint8 * ORC_RESTRICT d1,
-    guint8 * ORC_RESTRICT d2, const guint8 * ORC_RESTRICT s1,
-    const guint8 * ORC_RESTRICT s2, const guint8 * ORC_RESTRICT s3,
-    const guint8 * ORC_RESTRICT s4, int n)
-{
-  int i;
-  orc_union32 *ORC_RESTRICT ptr0;
-  orc_union32 *ORC_RESTRICT ptr1;
-  const orc_union16 *ORC_RESTRICT ptr4;
-  const orc_union16 *ORC_RESTRICT ptr5;
-  const orc_int8 *ORC_RESTRICT ptr6;
-  const orc_int8 *ORC_RESTRICT ptr7;
-  orc_int8 var33;
-  orc_int8 var34;
-  orc_union16 var35;
-  orc_union32 var36;
-  orc_union16 var37;
-  orc_union32 var38;
-  orc_union16 var39;
-
-  ptr0 = (orc_union32 *) d1;
-  ptr1 = (orc_union32 *) d2;
-  ptr4 = (orc_union16 *) s1;
-  ptr5 = (orc_union16 *) s2;
-  ptr6 = (orc_int8 *) s3;
-  ptr7 = (orc_int8 *) s4;
-
-
-  for (i = 0; i < n; i++) {
-    /* 0: loadb */
-    var33 = ptr6[i];
-    /* 1: loadb */
-    var34 = ptr7[i];
-    /* 2: mergebw */
-    {
-      orc_union16 _dest;
-      _dest.x2[0] = var33;
-      _dest.x2[1] = var34;
-      var39.i = _dest.i;
-    }
-    /* 3: loadw */
-    var35 = ptr4[i];
-    /* 4: mergebw */
-    {
-      orc_union16 _dest;
-      _dest.x2[0] = var35.x2[0];
-      _dest.x2[1] = var39.x2[0];
-      var36.x2[0] = _dest.i;
-    }
-    {
-      orc_union16 _dest;
-      _dest.x2[0] = var35.x2[1];
-      _dest.x2[1] = var39.x2[1];
-      var36.x2[1] = _dest.i;
-    }
-    /* 5: storel */
-    ptr0[i] = var36;
-    /* 6: loadw */
-    var37 = ptr5[i];
-    /* 7: mergebw */
-    {
-      orc_union16 _dest;
-      _dest.x2[0] = var37.x2[0];
-      _dest.x2[1] = var39.x2[0];
-      var38.x2[0] = _dest.i;
-    }
-    {
-      orc_union16 _dest;
-      _dest.x2[0] = var37.x2[1];
-      _dest.x2[1] = var39.x2[1];
-      var38.x2[1] = _dest.i;
-    }
-    /* 8: storel */
-    ptr1[i] = var38;
-  }
-
-}
-
-#else
-static void
-_backup_video_convert_orc_convert_I420_YUY2 (OrcExecutor * ORC_RESTRICT ex)
-{
-  int i;
-  int n = ex->n;
-  orc_union32 *ORC_RESTRICT ptr0;
-  orc_union32 *ORC_RESTRICT ptr1;
-  const orc_union16 *ORC_RESTRICT ptr4;
-  const orc_union16 *ORC_RESTRICT ptr5;
-  const orc_int8 *ORC_RESTRICT ptr6;
-  const orc_int8 *ORC_RESTRICT ptr7;
-  orc_int8 var33;
-  orc_int8 var34;
-  orc_union16 var35;
-  orc_union32 var36;
-  orc_union16 var37;
-  orc_union32 var38;
-  orc_union16 var39;
-
-  ptr0 = (orc_union32 *) ex->arrays[0];
-  ptr1 = (orc_union32 *) ex->arrays[1];
-  ptr4 = (orc_union16 *) ex->arrays[4];
-  ptr5 = (orc_union16 *) ex->arrays[5];
-  ptr6 = (orc_int8 *) ex->arrays[6];
-  ptr7 = (orc_int8 *) ex->arrays[7];
-
-
-  for (i = 0; i < n; i++) {
-    /* 0: loadb */
-    var33 = ptr6[i];
-    /* 1: loadb */
-    var34 = ptr7[i];
-    /* 2: mergebw */
-    {
-      orc_union16 _dest;
-      _dest.x2[0] = var33;
-      _dest.x2[1] = var34;
-      var39.i = _dest.i;
-    }
-    /* 3: loadw */
-    var35 = ptr4[i];
-    /* 4: mergebw */
-    {
-      orc_union16 _dest;
-      _dest.x2[0] = var35.x2[0];
-      _dest.x2[1] = var39.x2[0];
-      var36.x2[0] = _dest.i;
-    }
-    {
-      orc_union16 _dest;
-      _dest.x2[0] = var35.x2[1];
-      _dest.x2[1] = var39.x2[1];
-      var36.x2[1] = _dest.i;
-    }
-    /* 5: storel */
-    ptr0[i] = var36;
-    /* 6: loadw */
-    var37 = ptr5[i];
-    /* 7: mergebw */
-    {
-      orc_union16 _dest;
-      _dest.x2[0] = var37.x2[0];
-      _dest.x2[1] = var39.x2[0];
-      var38.x2[0] = _dest.i;
-    }
-    {
-      orc_union16 _dest;
-      _dest.x2[0] = var37.x2[1];
-      _dest.x2[1] = var39.x2[1];
-      var38.x2[1] = _dest.i;
-    }
-    /* 8: storel */
-    ptr1[i] = var38;
-  }
-
-}
-
-void
-video_convert_orc_convert_I420_YUY2 (guint8 * ORC_RESTRICT d1,
-    guint8 * ORC_RESTRICT d2, const guint8 * ORC_RESTRICT s1,
-    const guint8 * ORC_RESTRICT s2, const guint8 * ORC_RESTRICT s3,
-    const guint8 * ORC_RESTRICT s4, int n)
-{
-  OrcExecutor _ex, *ex = &_ex;
-  static volatile int p_inited = 0;
-  static OrcCode *c = 0;
-  void (*func) (OrcExecutor *);
-
-  if (!p_inited) {
-    orc_once_mutex_lock ();
-    if (!p_inited) {
-      OrcProgram *p;
-
-#if 1
-      static const orc_uint8 bc[] = {
-        1, 9, 35, 118, 105, 100, 101, 111, 95, 99, 111, 110, 118, 101, 114, 116,
-        95, 111, 114, 99, 95, 99, 111, 110, 118, 101, 114, 116, 95, 73, 52, 50,
-        48, 95, 89, 85, 89, 50, 11, 4, 4, 11, 4, 4, 12, 2, 2, 12,
-        2, 2, 12, 1, 1, 12, 1, 1, 20, 2, 196, 32, 6, 7, 21, 1,
-        196, 0, 4, 32, 21, 1, 196, 1, 5, 32, 2, 0,
-      };
-      p = orc_program_new_from_static_bytecode (bc);
-      orc_program_set_backup_function (p,
-          _backup_video_convert_orc_convert_I420_YUY2);
-#else
-      p = orc_program_new ();
-      orc_program_set_name (p, "video_convert_orc_convert_I420_YUY2");
-      orc_program_set_backup_function (p,
-          _backup_video_convert_orc_convert_I420_YUY2);
-      orc_program_add_destination (p, 4, "d1");
-      orc_program_add_destination (p, 4, "d2");
-      orc_program_add_source (p, 2, "s1");
-      orc_program_add_source (p, 2, "s2");
-      orc_program_add_source (p, 1, "s3");
-      orc_program_add_source (p, 1, "s4");
-      orc_program_add_temporary (p, 2, "t1");
-
-      orc_program_append_2 (p, "mergebw", 0, ORC_VAR_T1, ORC_VAR_S3, ORC_VAR_S4,
-          ORC_VAR_D1);
-      orc_program_append_2 (p, "mergebw", 1, ORC_VAR_D1, ORC_VAR_S1, ORC_VAR_T1,
-          ORC_VAR_D1);
-      orc_program_append_2 (p, "mergebw", 1, ORC_VAR_D2, ORC_VAR_S2, ORC_VAR_T1,
-          ORC_VAR_D1);
-#endif
-
-      orc_program_compile (p);
-      c = orc_program_take_code (p);
-      orc_program_free (p);
-    }
-    p_inited = TRUE;
-    orc_once_mutex_unlock ();
-  }
-  ex->arrays[ORC_VAR_A2] = c;
-  ex->program = 0;
-
-  ex->n = n;
-  ex->arrays[ORC_VAR_D1] = d1;
-  ex->arrays[ORC_VAR_D2] = d2;
-  ex->arrays[ORC_VAR_S1] = (void *) s1;
-  ex->arrays[ORC_VAR_S2] = (void *) s2;
-  ex->arrays[ORC_VAR_S3] = (void *) s3;
-  ex->arrays[ORC_VAR_S4] = (void *) s4;
-
-  func = c->exec;
-  func (ex);
-}
-#endif
-
-
-/* video_convert_orc_convert_I420_AYUV */
-#ifdef DISABLE_ORC
-void
-video_convert_orc_convert_I420_AYUV (guint8 * ORC_RESTRICT d1,
-    guint8 * ORC_RESTRICT d2, const guint8 * ORC_RESTRICT s1,
-    const guint8 * ORC_RESTRICT s2, const guint8 * ORC_RESTRICT s3,
-    const guint8 * ORC_RESTRICT s4, int n)
-{
-  int i;
-  orc_union32 *ORC_RESTRICT ptr0;
-  orc_union32 *ORC_RESTRICT ptr1;
-  const orc_int8 *ORC_RESTRICT ptr4;
-  const orc_int8 *ORC_RESTRICT ptr5;
-  const orc_int8 *ORC_RESTRICT ptr6;
-  const orc_int8 *ORC_RESTRICT ptr7;
-#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
-  volatile orc_int8 var36;
-#else
-  orc_int8 var36;
-#endif
-  orc_int8 var37;
-  orc_union32 var38;
-  orc_int8 var39;
-  orc_union32 var40;
-  orc_int8 var41;
-  orc_int8 var42;
-  orc_union16 var43;
-  orc_union16 var44;
-  orc_union16 var45;
-
-  ptr0 = (orc_union32 *) d1;
-  ptr1 = (orc_union32 *) d2;
-  ptr4 = (orc_int8 *) s1;
-  ptr5 = (orc_int8 *) s2;
-  ptr6 = (orc_int8 *) s3;
-  ptr7 = (orc_int8 *) s4;
-
-  /* 3: loadpb */
-  var36 = (int) 0x000000ff;     /* 255 or 1.25987e-321f */
-
-  for (i = 0; i < n; i++) {
-    /* 0: loadupdb */
-    var41 = ptr6[i >> 1];
-    /* 1: loadupdb */
-    var42 = ptr7[i >> 1];
-    /* 2: mergebw */
-    {
-      orc_union16 _dest;
-      _dest.x2[0] = var41;
-      _dest.x2[1] = var42;
-      var43.i = _dest.i;
-    }
-    /* 4: loadb */
-    var37 = ptr4[i];
-    /* 5: mergebw */
-    {
-      orc_union16 _dest;
-      _dest.x2[0] = var36;
-      _dest.x2[1] = var37;
-      var44.i = _dest.i;
-    }
-    /* 6: mergewl */
-    {
-      orc_union32 _dest;
-      _dest.x2[0] = var44.i;
-      _dest.x2[1] = var43.i;
-      var38.i = _dest.i;
-    }
-    /* 7: storel */
-    ptr0[i] = var38;
-    /* 8: loadb */
-    var39 = ptr5[i];
-    /* 9: mergebw */
-    {
-      orc_union16 _dest;
-      _dest.x2[0] = var36;
-      _dest.x2[1] = var39;
-      var45.i = _dest.i;
-    }
-    /* 10: mergewl */
-    {
-      orc_union32 _dest;
-      _dest.x2[0] = var45.i;
-      _dest.x2[1] = var43.i;
-      var40.i = _dest.i;
-    }
-    /* 11: storel */
-    ptr1[i] = var40;
-  }
-
-}
-
-#else
-static void
-_backup_video_convert_orc_convert_I420_AYUV (OrcExecutor * ORC_RESTRICT ex)
-{
-  int i;
-  int n = ex->n;
-  orc_union32 *ORC_RESTRICT ptr0;
-  orc_union32 *ORC_RESTRICT ptr1;
-  const orc_int8 *ORC_RESTRICT ptr4;
-  const orc_int8 *ORC_RESTRICT ptr5;
-  const orc_int8 *ORC_RESTRICT ptr6;
-  const orc_int8 *ORC_RESTRICT ptr7;
-#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
-  volatile orc_int8 var36;
-#else
-  orc_int8 var36;
-#endif
-  orc_int8 var37;
-  orc_union32 var38;
-  orc_int8 var39;
-  orc_union32 var40;
-  orc_int8 var41;
-  orc_int8 var42;
-  orc_union16 var43;
-  orc_union16 var44;
-  orc_union16 var45;
-
-  ptr0 = (orc_union32 *) ex->arrays[0];
-  ptr1 = (orc_union32 *) ex->arrays[1];
-  ptr4 = (orc_int8 *) ex->arrays[4];
-  ptr5 = (orc_int8 *) ex->arrays[5];
-  ptr6 = (orc_int8 *) ex->arrays[6];
-  ptr7 = (orc_int8 *) ex->arrays[7];
-
-  /* 3: loadpb */
-  var36 = (int) 0x000000ff;     /* 255 or 1.25987e-321f */
-
-  for (i = 0; i < n; i++) {
-    /* 0: loadupdb */
-    var41 = ptr6[i >> 1];
-    /* 1: loadupdb */
-    var42 = ptr7[i >> 1];
-    /* 2: mergebw */
-    {
-      orc_union16 _dest;
-      _dest.x2[0] = var41;
-      _dest.x2[1] = var42;
-      var43.i = _dest.i;
-    }
-    /* 4: loadb */
-    var37 = ptr4[i];
-    /* 5: mergebw */
-    {
-      orc_union16 _dest;
-      _dest.x2[0] = var36;
-      _dest.x2[1] = var37;
-      var44.i = _dest.i;
-    }
-    /* 6: mergewl */
-    {
-      orc_union32 _dest;
-      _dest.x2[0] = var44.i;
-      _dest.x2[1] = var43.i;
-      var38.i = _dest.i;
-    }
-    /* 7: storel */
-    ptr0[i] = var38;
-    /* 8: loadb */
-    var39 = ptr5[i];
-    /* 9: mergebw */
-    {
-      orc_union16 _dest;
-      _dest.x2[0] = var36;
-      _dest.x2[1] = var39;
-      var45.i = _dest.i;
-    }
-    /* 10: mergewl */
-    {
-      orc_union32 _dest;
-      _dest.x2[0] = var45.i;
-      _dest.x2[1] = var43.i;
-      var40.i = _dest.i;
-    }
-    /* 11: storel */
-    ptr1[i] = var40;
-  }
-
-}
-
-void
-video_convert_orc_convert_I420_AYUV (guint8 * ORC_RESTRICT d1,
-    guint8 * ORC_RESTRICT d2, const guint8 * ORC_RESTRICT s1,
-    const guint8 * ORC_RESTRICT s2, const guint8 * ORC_RESTRICT s3,
-    const guint8 * ORC_RESTRICT s4, int n)
-{
-  OrcExecutor _ex, *ex = &_ex;
-  static volatile int p_inited = 0;
-  static OrcCode *c = 0;
-  void (*func) (OrcExecutor *);
-
-  if (!p_inited) {
-    orc_once_mutex_lock ();
-    if (!p_inited) {
-      OrcProgram *p;
-
-#if 1
-      static const orc_uint8 bc[] = {
-        1, 9, 35, 118, 105, 100, 101, 111, 95, 99, 111, 110, 118, 101, 114, 116,
-        95, 111, 114, 99, 95, 99, 111, 110, 118, 101, 114, 116, 95, 73, 52, 50,
-        48, 95, 65, 89, 85, 86, 11, 4, 4, 11, 4, 4, 12, 1, 1, 12,
-        1, 1, 12, 1, 1, 12, 1, 1, 14, 1, 255, 0, 0, 0, 20, 2,
-        20, 2, 20, 1, 20, 1, 45, 34, 6, 45, 35, 7, 196, 32, 34, 35,
-        196, 33, 16, 4, 195, 0, 33, 32, 196, 33, 16, 5, 195, 1, 33, 32,
-        2, 0,
-      };
-      p = orc_program_new_from_static_bytecode (bc);
-      orc_program_set_backup_function (p,
-          _backup_video_convert_orc_convert_I420_AYUV);
-#else
-      p = orc_program_new ();
-      orc_program_set_name (p, "video_convert_orc_convert_I420_AYUV");
-      orc_program_set_backup_function (p,
-          _backup_video_convert_orc_convert_I420_AYUV);
-      orc_program_add_destination (p, 4, "d1");
-      orc_program_add_destination (p, 4, "d2");
-      orc_program_add_source (p, 1, "s1");
-      orc_program_add_source (p, 1, "s2");
-      orc_program_add_source (p, 1, "s3");
-      orc_program_add_source (p, 1, "s4");
-      orc_program_add_constant (p, 1, 0x000000ff, "c1");
-      orc_program_add_temporary (p, 2, "t1");
-      orc_program_add_temporary (p, 2, "t2");
-      orc_program_add_temporary (p, 1, "t3");
-      orc_program_add_temporary (p, 1, "t4");
-
-      orc_program_append_2 (p, "loadupdb", 0, ORC_VAR_T3, ORC_VAR_S3,
-          ORC_VAR_D1, ORC_VAR_D1);
-      orc_program_append_2 (p, "loadupdb", 0, ORC_VAR_T4, ORC_VAR_S4,
-          ORC_VAR_D1, ORC_VAR_D1);
-      orc_program_append_2 (p, "mergebw", 0, ORC_VAR_T1, ORC_VAR_T3, ORC_VAR_T4,
-          ORC_VAR_D1);
-      orc_program_append_2 (p, "mergebw", 0, ORC_VAR_T2, ORC_VAR_C1, ORC_VAR_S1,
-          ORC_VAR_D1);
-      orc_program_append_2 (p, "mergewl", 0, ORC_VAR_D1, ORC_VAR_T2, ORC_VAR_T1,
-          ORC_VAR_D1);
-      orc_program_append_2 (p, "mergebw", 0, ORC_VAR_T2, ORC_VAR_C1, ORC_VAR_S2,
-          ORC_VAR_D1);
-      orc_program_append_2 (p, "mergewl", 0, ORC_VAR_D2, ORC_VAR_T2, ORC_VAR_T1,
-          ORC_VAR_D1);
-#endif
-
-      orc_program_compile (p);
-      c = orc_program_take_code (p);
-      orc_program_free (p);
-    }
-    p_inited = TRUE;
-    orc_once_mutex_unlock ();
-  }
-  ex->arrays[ORC_VAR_A2] = c;
-  ex->program = 0;
-
-  ex->n = n;
-  ex->arrays[ORC_VAR_D1] = d1;
-  ex->arrays[ORC_VAR_D2] = d2;
-  ex->arrays[ORC_VAR_S1] = (void *) s1;
-  ex->arrays[ORC_VAR_S2] = (void *) s2;
-  ex->arrays[ORC_VAR_S3] = (void *) s3;
-  ex->arrays[ORC_VAR_S4] = (void *) s4;
-
-  func = c->exec;
-  func (ex);
-}
-#endif
-
-
-/* video_convert_orc_convert_YUY2_I420 */
-#ifdef DISABLE_ORC
-void
-video_convert_orc_convert_YUY2_I420 (guint8 * ORC_RESTRICT d1,
-    guint8 * ORC_RESTRICT d2, guint8 * ORC_RESTRICT d3,
-    guint8 * ORC_RESTRICT d4, const guint8 * ORC_RESTRICT s1,
-    const guint8 * ORC_RESTRICT s2, int n)
-{
-  int i;
-  orc_union16 *ORC_RESTRICT ptr0;
-  orc_union16 *ORC_RESTRICT ptr1;
-  orc_int8 *ORC_RESTRICT ptr2;
-  orc_int8 *ORC_RESTRICT ptr3;
-  const orc_union32 *ORC_RESTRICT ptr4;
-  const orc_union32 *ORC_RESTRICT ptr5;
-  orc_union32 var35;
-  orc_union32 var36;
-  orc_int8 var37;
-  orc_int8 var38;
-  orc_union16 var39;
-  orc_union16 var40;
-  orc_union16 var41;
-  orc_union16 var42;
-  orc_union16 var43;
-
-  ptr0 = (orc_union16 *) d1;
-  ptr1 = (orc_union16 *) d2;
-  ptr2 = (orc_int8 *) d3;
-  ptr3 = (orc_int8 *) d4;
-  ptr4 = (orc_union32 *) s1;
-  ptr5 = (orc_union32 *) s2;
-
-
-  for (i = 0; i < n; i++) {
-    /* 0: loadl */
-    var35 = ptr4[i];
-    /* 1: splitwb */
-    {
-      orc_union16 _src;
-      _src.i = var35.x2[0];
-      var39.x2[0] = _src.x2[1];
-      var40.x2[0] = _src.x2[0];
-    }
-    {
-      orc_union16 _src;
-      _src.i = var35.x2[1];
-      var39.x2[1] = _src.x2[1];
-      var40.x2[1] = _src.x2[0];
-    }
-    /* 2: storew */
-    ptr0[i] = var40;
-    /* 3: loadl */
-    var36 = ptr5[i];
-    /* 4: splitwb */
-    {
-      orc_union16 _src;
-      _src.i = var36.x2[0];
-      var41.x2[0] = _src.x2[1];
-      var42.x2[0] = _src.x2[0];
-    }
-    {
-      orc_union16 _src;
-      _src.i = var36.x2[1];
-      var41.x2[1] = _src.x2[1];
-      var42.x2[1] = _src.x2[0];
-    }
-    /* 5: storew */
-    ptr1[i] = var42;
-    /* 6: avgub */
-    var43.x2[0] = ((orc_uint8) var39.x2[0] + (orc_uint8) var41.x2[0] + 1) >> 1;
-    var43.x2[1] = ((orc_uint8) var39.x2[1] + (orc_uint8) var41.x2[1] + 1) >> 1;
-    /* 7: splitwb */
-    {
-      orc_union16 _src;
-      _src.i = var43.i;
-      var37 = _src.x2[1];
-      var38 = _src.x2[0];
-    }
-    /* 8: storeb */
-    ptr3[i] = var37;
-    /* 9: storeb */
-    ptr2[i] = var38;
-  }
-
-}
-
-#else
-static void
-_backup_video_convert_orc_convert_YUY2_I420 (OrcExecutor * ORC_RESTRICT ex)
-{
-  int i;
-  int n = ex->n;
-  orc_union16 *ORC_RESTRICT ptr0;
-  orc_union16 *ORC_RESTRICT ptr1;
-  orc_int8 *ORC_RESTRICT ptr2;
-  orc_int8 *ORC_RESTRICT ptr3;
-  const orc_union32 *ORC_RESTRICT ptr4;
-  const orc_union32 *ORC_RESTRICT ptr5;
-  orc_union32 var35;
-  orc_union32 var36;
-  orc_int8 var37;
-  orc_int8 var38;
-  orc_union16 var39;
-  orc_union16 var40;
-  orc_union16 var41;
-  orc_union16 var42;
-  orc_union16 var43;
-
-  ptr0 = (orc_union16 *) ex->arrays[0];
-  ptr1 = (orc_union16 *) ex->arrays[1];
-  ptr2 = (orc_int8 *) ex->arrays[2];
-  ptr3 = (orc_int8 *) ex->arrays[3];
-  ptr4 = (orc_union32 *) ex->arrays[4];
-  ptr5 = (orc_union32 *) ex->arrays[5];
-
-
-  for (i = 0; i < n; i++) {
-    /* 0: loadl */
-    var35 = ptr4[i];
-    /* 1: splitwb */
-    {
-      orc_union16 _src;
-      _src.i = var35.x2[0];
-      var39.x2[0] = _src.x2[1];
-      var40.x2[0] = _src.x2[0];
-    }
-    {
-      orc_union16 _src;
-      _src.i = var35.x2[1];
-      var39.x2[1] = _src.x2[1];
-      var40.x2[1] = _src.x2[0];
-    }
-    /* 2: storew */
-    ptr0[i] = var40;
-    /* 3: loadl */
-    var36 = ptr5[i];
-    /* 4: splitwb */
-    {
-      orc_union16 _src;
-      _src.i = var36.x2[0];
-      var41.x2[0] = _src.x2[1];
-      var42.x2[0] = _src.x2[0];
-    }
-    {
-      orc_union16 _src;
-      _src.i = var36.x2[1];
-      var41.x2[1] = _src.x2[1];
-      var42.x2[1] = _src.x2[0];
-    }
-    /* 5: storew */
-    ptr1[i] = var42;
-    /* 6: avgub */
-    var43.x2[0] = ((orc_uint8) var39.x2[0] + (orc_uint8) var41.x2[0] + 1) >> 1;
-    var43.x2[1] = ((orc_uint8) var39.x2[1] + (orc_uint8) var41.x2[1] + 1) >> 1;
-    /* 7: splitwb */
-    {
-      orc_union16 _src;
-      _src.i = var43.i;
-      var37 = _src.x2[1];
-      var38 = _src.x2[0];
-    }
-    /* 8: storeb */
-    ptr3[i] = var37;
-    /* 9: storeb */
-    ptr2[i] = var38;
-  }
-
-}
-
-void
-video_convert_orc_convert_YUY2_I420 (guint8 * ORC_RESTRICT d1,
-    guint8 * ORC_RESTRICT d2, guint8 * ORC_RESTRICT d3,
-    guint8 * ORC_RESTRICT d4, const guint8 * ORC_RESTRICT s1,
-    const guint8 * ORC_RESTRICT s2, int n)
-{
-  OrcExecutor _ex, *ex = &_ex;
-  static volatile int p_inited = 0;
-  static OrcCode *c = 0;
-  void (*func) (OrcExecutor *);
-
-  if (!p_inited) {
-    orc_once_mutex_lock ();
-    if (!p_inited) {
-      OrcProgram *p;
-
-#if 1
-      static const orc_uint8 bc[] = {
-        1, 9, 35, 118, 105, 100, 101, 111, 95, 99, 111, 110, 118, 101, 114, 116,
-        95, 111, 114, 99, 95, 99, 111, 110, 118, 101, 114, 116, 95, 89, 85, 89,
-        50, 95, 73, 52, 50, 48, 11, 2, 2, 11, 2, 2, 11, 1, 1, 11,
-        1, 1, 12, 4, 4, 12, 4, 4, 20, 2, 20, 2, 20, 2, 21, 1,
-        199, 32, 34, 4, 97, 0, 34, 21, 1, 199, 33, 34, 5, 97, 1, 34,
-        21, 1, 39, 32, 32, 33, 199, 3, 2, 32, 2, 0,
-      };
-      p = orc_program_new_from_static_bytecode (bc);
-      orc_program_set_backup_function (p,
-          _backup_video_convert_orc_convert_YUY2_I420);
-#else
-      p = orc_program_new ();
-      orc_program_set_name (p, "video_convert_orc_convert_YUY2_I420");
-      orc_program_set_backup_function (p,
-          _backup_video_convert_orc_convert_YUY2_I420);
-      orc_program_add_destination (p, 2, "d1");
-      orc_program_add_destination (p, 2, "d2");
-      orc_program_add_destination (p, 1, "d3");
-      orc_program_add_destination (p, 1, "d4");
-      orc_program_add_source (p, 4, "s1");
-      orc_program_add_source (p, 4, "s2");
-      orc_program_add_temporary (p, 2, "t1");
-      orc_program_add_temporary (p, 2, "t2");
-      orc_program_add_temporary (p, 2, "t3");
-
-      orc_program_append_2 (p, "splitwb", 1, ORC_VAR_T1, ORC_VAR_T3, ORC_VAR_S1,
-          ORC_VAR_D1);
-      orc_program_append_2 (p, "storew", 0, ORC_VAR_D1, ORC_VAR_T3, ORC_VAR_D1,
-          ORC_VAR_D1);
-      orc_program_append_2 (p, "splitwb", 1, ORC_VAR_T2, ORC_VAR_T3, ORC_VAR_S2,
-          ORC_VAR_D1);
-      orc_program_append_2 (p, "storew", 0, ORC_VAR_D2, ORC_VAR_T3, ORC_VAR_D1,
-          ORC_VAR_D1);
-      orc_program_append_2 (p, "avgub", 1, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_T2,
-          ORC_VAR_D1);
-      orc_program_append_2 (p, "splitwb", 0, ORC_VAR_D4, ORC_VAR_D3, ORC_VAR_T1,
-          ORC_VAR_D1);
-#endif
-
-      orc_program_compile (p);
-      c = orc_program_take_code (p);
-      orc_program_free (p);
-    }
-    p_inited = TRUE;
-    orc_once_mutex_unlock ();
-  }
-  ex->arrays[ORC_VAR_A2] = c;
-  ex->program = 0;
-
-  ex->n = n;
-  ex->arrays[ORC_VAR_D1] = d1;
-  ex->arrays[ORC_VAR_D2] = d2;
-  ex->arrays[ORC_VAR_D3] = d3;
-  ex->arrays[ORC_VAR_D4] = d4;
-  ex->arrays[ORC_VAR_S1] = (void *) s1;
-  ex->arrays[ORC_VAR_S2] = (void *) s2;
-
-  func = c->exec;
-  func (ex);
-}
-#endif
-
-
-/* video_convert_orc_convert_UYVY_YUY2 */
-#ifdef DISABLE_ORC
-void
-video_convert_orc_convert_UYVY_YUY2 (guint8 * ORC_RESTRICT d1, int d1_stride,
-    const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m)
-{
-  int i;
-  int j;
-  orc_union32 *ORC_RESTRICT ptr0;
-  const orc_union32 *ORC_RESTRICT ptr4;
-  orc_union32 var32;
-  orc_union32 var33;
-
-  for (j = 0; j < m; j++) {
-    ptr0 = ORC_PTR_OFFSET (d1, d1_stride * j);
-    ptr4 = ORC_PTR_OFFSET (s1, s1_stride * j);
-
-
-    for (i = 0; i < n; i++) {
-      /* 0: loadl */
-      var32 = ptr4[i];
-      /* 1: swapw */
-      var33.x2[0] = ORC_SWAP_W (var32.x2[0]);
-      var33.x2[1] = ORC_SWAP_W (var32.x2[1]);
-      /* 2: storel */
-      ptr0[i] = var33;
-    }
-  }
-
-}
-
-#else
-static void
-_backup_video_convert_orc_convert_UYVY_YUY2 (OrcExecutor * ORC_RESTRICT ex)
-{
-  int i;
-  int j;
-  int n = ex->n;
-  int m = ex->params[ORC_VAR_A1];
-  orc_union32 *ORC_RESTRICT ptr0;
-  const orc_union32 *ORC_RESTRICT ptr4;
-  orc_union32 var32;
-  orc_union32 var33;
-
-  for (j = 0; j < m; j++) {
-    ptr0 = ORC_PTR_OFFSET (ex->arrays[0], ex->params[0] * j);
-    ptr4 = ORC_PTR_OFFSET (ex->arrays[4], ex->params[4] * j);
-
-
-    for (i = 0; i < n; i++) {
-      /* 0: loadl */
-      var32 = ptr4[i];
-      /* 1: swapw */
-      var33.x2[0] = ORC_SWAP_W (var32.x2[0]);
-      var33.x2[1] = ORC_SWAP_W (var32.x2[1]);
-      /* 2: storel */
-      ptr0[i] = var33;
-    }
-  }
-
-}
-
-void
-video_convert_orc_convert_UYVY_YUY2 (guint8 * ORC_RESTRICT d1, int d1_stride,
-    const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m)
-{
-  OrcExecutor _ex, *ex = &_ex;
-  static volatile int p_inited = 0;
-  static OrcCode *c = 0;
-  void (*func) (OrcExecutor *);
-
-  if (!p_inited) {
-    orc_once_mutex_lock ();
-    if (!p_inited) {
-      OrcProgram *p;
-
-#if 1
-      static const orc_uint8 bc[] = {
-        1, 7, 9, 35, 118, 105, 100, 101, 111, 95, 99, 111, 110, 118, 101, 114,
-        116, 95, 111, 114, 99, 95, 99, 111, 110, 118, 101, 114, 116, 95, 85, 89,
-        86, 89, 95, 89, 85, 89, 50, 11, 4, 4, 12, 4, 4, 21, 1, 183,
-        0, 4, 2, 0,
-      };
-      p = orc_program_new_from_static_bytecode (bc);
-      orc_program_set_backup_function (p,
-          _backup_video_convert_orc_convert_UYVY_YUY2);
-#else
-      p = orc_program_new ();
-      orc_program_set_2d (p);
-      orc_program_set_name (p, "video_convert_orc_convert_UYVY_YUY2");
-      orc_program_set_backup_function (p,
-          _backup_video_convert_orc_convert_UYVY_YUY2);
-      orc_program_add_destination (p, 4, "d1");
-      orc_program_add_source (p, 4, "s1");
-
-      orc_program_append_2 (p, "swapw", 1, ORC_VAR_D1, ORC_VAR_S1, ORC_VAR_D1,
-          ORC_VAR_D1);
-#endif
-
-      orc_program_compile (p);
-      c = orc_program_take_code (p);
-      orc_program_free (p);
-    }
-    p_inited = TRUE;
-    orc_once_mutex_unlock ();
-  }
-  ex->arrays[ORC_VAR_A2] = c;
-  ex->program = 0;
-
-  ex->n = n;
-  ORC_EXECUTOR_M (ex) = m;
-  ex->arrays[ORC_VAR_D1] = d1;
-  ex->params[ORC_VAR_D1] = d1_stride;
-  ex->arrays[ORC_VAR_S1] = (void *) s1;
-  ex->params[ORC_VAR_S1] = s1_stride;
-
-  func = c->exec;
-  func (ex);
-}
-#endif
-
-
-/* video_convert_orc_planar_chroma_420_422 */
-#ifdef DISABLE_ORC
-void
-video_convert_orc_planar_chroma_420_422 (guint8 * ORC_RESTRICT d1,
-    int d1_stride, guint8 * ORC_RESTRICT d2, int d2_stride,
-    const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m)
-{
-  int i;
-  int j;
-  orc_int8 *ORC_RESTRICT ptr0;
-  orc_int8 *ORC_RESTRICT ptr1;
-  const orc_int8 *ORC_RESTRICT ptr4;
-  orc_int8 var32;
-  orc_int8 var33;
-  orc_int8 var34;
-  orc_int8 var35;
-
-  for (j = 0; j < m; j++) {
-    ptr0 = ORC_PTR_OFFSET (d1, d1_stride * j);
-    ptr1 = ORC_PTR_OFFSET (d2, d2_stride * j);
-    ptr4 = ORC_PTR_OFFSET (s1, s1_stride * j);
-
-
-    for (i = 0; i < n; i++) {
-      /* 0: loadb */
-      var32 = ptr4[i];
-      /* 1: copyb */
-      var33 = var32;
-      /* 2: storeb */
-      ptr0[i] = var33;
-      /* 3: loadb */
-      var34 = ptr4[i];
-      /* 4: copyb */
-      var35 = var34;
-      /* 5: storeb */
-      ptr1[i] = var35;
-    }
-  }
-
-}
-
-#else
-static void
-_backup_video_convert_orc_planar_chroma_420_422 (OrcExecutor * ORC_RESTRICT ex)
-{
-  int i;
-  int j;
-  int n = ex->n;
-  int m = ex->params[ORC_VAR_A1];
-  orc_int8 *ORC_RESTRICT ptr0;
-  orc_int8 *ORC_RESTRICT ptr1;
-  const orc_int8 *ORC_RESTRICT ptr4;
-  orc_int8 var32;
-  orc_int8 var33;
-  orc_int8 var34;
-  orc_int8 var35;
-
-  for (j = 0; j < m; j++) {
-    ptr0 = ORC_PTR_OFFSET (ex->arrays[0], ex->params[0] * j);
-    ptr1 = ORC_PTR_OFFSET (ex->arrays[1], ex->params[1] * j);
-    ptr4 = ORC_PTR_OFFSET (ex->arrays[4], ex->params[4] * j);
-
-
-    for (i = 0; i < n; i++) {
-      /* 0: loadb */
-      var32 = ptr4[i];
-      /* 1: copyb */
-      var33 = var32;
-      /* 2: storeb */
-      ptr0[i] = var33;
-      /* 3: loadb */
-      var34 = ptr4[i];
-      /* 4: copyb */
-      var35 = var34;
-      /* 5: storeb */
-      ptr1[i] = var35;
-    }
-  }
-
-}
-
-void
-video_convert_orc_planar_chroma_420_422 (guint8 * ORC_RESTRICT d1,
-    int d1_stride, guint8 * ORC_RESTRICT d2, int d2_stride,
-    const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m)
-{
-  OrcExecutor _ex, *ex = &_ex;
-  static volatile int p_inited = 0;
-  static OrcCode *c = 0;
-  void (*func) (OrcExecutor *);
-
-  if (!p_inited) {
-    orc_once_mutex_lock ();
-    if (!p_inited) {
-      OrcProgram *p;
-
-#if 1
-      static const orc_uint8 bc[] = {
-        1, 7, 9, 39, 118, 105, 100, 101, 111, 95, 99, 111, 110, 118, 101, 114,
-        116, 95, 111, 114, 99, 95, 112, 108, 97, 110, 97, 114, 95, 99, 104, 114,
-        111, 109, 97, 95, 52, 50, 48, 95, 52, 50, 50, 11, 1, 1, 11, 1,
-        1, 12, 1, 1, 42, 0, 4, 42, 1, 4, 2, 0,
-      };
-      p = orc_program_new_from_static_bytecode (bc);
-      orc_program_set_backup_function (p,
-          _backup_video_convert_orc_planar_chroma_420_422);
-#else
-      p = orc_program_new ();
-      orc_program_set_2d (p);
-      orc_program_set_name (p, "video_convert_orc_planar_chroma_420_422");
-      orc_program_set_backup_function (p,
-          _backup_video_convert_orc_planar_chroma_420_422);
-      orc_program_add_destination (p, 1, "d1");
-      orc_program_add_destination (p, 1, "d2");
-      orc_program_add_source (p, 1, "s1");
-
-      orc_program_append_2 (p, "copyb", 0, ORC_VAR_D1, ORC_VAR_S1, ORC_VAR_D1,
-          ORC_VAR_D1);
-      orc_program_append_2 (p, "copyb", 0, ORC_VAR_D2, ORC_VAR_S1, ORC_VAR_D1,
-          ORC_VAR_D1);
-#endif
-
-      orc_program_compile (p);
-      c = orc_program_take_code (p);
-      orc_program_free (p);
-    }
-    p_inited = TRUE;
-    orc_once_mutex_unlock ();
-  }
-  ex->arrays[ORC_VAR_A2] = c;
-  ex->program = 0;
-
-  ex->n = n;
-  ORC_EXECUTOR_M (ex) = m;
-  ex->arrays[ORC_VAR_D1] = d1;
-  ex->params[ORC_VAR_D1] = d1_stride;
-  ex->arrays[ORC_VAR_D2] = d2;
-  ex->params[ORC_VAR_D2] = d2_stride;
-  ex->arrays[ORC_VAR_S1] = (void *) s1;
-  ex->params[ORC_VAR_S1] = s1_stride;
-
-  func = c->exec;
-  func (ex);
-}
-#endif
-
-
-/* video_convert_orc_planar_chroma_420_444 */
-#ifdef DISABLE_ORC
-void
-video_convert_orc_planar_chroma_420_444 (guint8 * ORC_RESTRICT d1,
-    int d1_stride, guint8 * ORC_RESTRICT d2, int d2_stride,
-    const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m)
-{
-  int i;
-  int j;
-  orc_union16 *ORC_RESTRICT ptr0;
-  orc_union16 *ORC_RESTRICT ptr1;
-  const orc_int8 *ORC_RESTRICT ptr4;
-  orc_int8 var33;
-  orc_union16 var34;
-
-  for (j = 0; j < m; j++) {
-    ptr0 = ORC_PTR_OFFSET (d1, d1_stride * j);
-    ptr1 = ORC_PTR_OFFSET (d2, d2_stride * j);
-    ptr4 = ORC_PTR_OFFSET (s1, s1_stride * j);
-
-
-    for (i = 0; i < n; i++) {
-      /* 0: loadb */
-      var33 = ptr4[i];
-      /* 1: splatbw */
-      var34.i = ((var33 & 0xff) << 8) | (var33 & 0xff);
-      /* 2: storew */
-      ptr0[i] = var34;
-      /* 3: storew */
-      ptr1[i] = var34;
-    }
-  }
-
-}
-
-#else
-static void
-_backup_video_convert_orc_planar_chroma_420_444 (OrcExecutor * ORC_RESTRICT ex)
-{
-  int i;
-  int j;
-  int n = ex->n;
-  int m = ex->params[ORC_VAR_A1];
-  orc_union16 *ORC_RESTRICT ptr0;
-  orc_union16 *ORC_RESTRICT ptr1;
-  const orc_int8 *ORC_RESTRICT ptr4;
-  orc_int8 var33;
-  orc_union16 var34;
-
-  for (j = 0; j < m; j++) {
-    ptr0 = ORC_PTR_OFFSET (ex->arrays[0], ex->params[0] * j);
-    ptr1 = ORC_PTR_OFFSET (ex->arrays[1], ex->params[1] * j);
-    ptr4 = ORC_PTR_OFFSET (ex->arrays[4], ex->params[4] * j);
-
-
-    for (i = 0; i < n; i++) {
-      /* 0: loadb */
-      var33 = ptr4[i];
-      /* 1: splatbw */
-      var34.i = ((var33 & 0xff) << 8) | (var33 & 0xff);
-      /* 2: storew */
-      ptr0[i] = var34;
-      /* 3: storew */
-      ptr1[i] = var34;
-    }
-  }
-
-}
-
-void
-video_convert_orc_planar_chroma_420_444 (guint8 * ORC_RESTRICT d1,
-    int d1_stride, guint8 * ORC_RESTRICT d2, int d2_stride,
-    const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m)
-{
-  OrcExecutor _ex, *ex = &_ex;
-  static volatile int p_inited = 0;
-  static OrcCode *c = 0;
-  void (*func) (OrcExecutor *);
-
-  if (!p_inited) {
-    orc_once_mutex_lock ();
-    if (!p_inited) {
-      OrcProgram *p;
-
-#if 1
-      static const orc_uint8 bc[] = {
-        1, 7, 9, 39, 118, 105, 100, 101, 111, 95, 99, 111, 110, 118, 101, 114,
-        116, 95, 111, 114, 99, 95, 112, 108, 97, 110, 97, 114, 95, 99, 104, 114,
-        111, 109, 97, 95, 52, 50, 48, 95, 52, 52, 52, 11, 2, 2, 11, 2,
-        2, 12, 1, 1, 20, 2, 151, 32, 4, 97, 0, 32, 97, 1, 32, 2,
-        0,
-      };
-      p = orc_program_new_from_static_bytecode (bc);
-      orc_program_set_backup_function (p,
-          _backup_video_convert_orc_planar_chroma_420_444);
-#else
-      p = orc_program_new ();
-      orc_program_set_2d (p);
-      orc_program_set_name (p, "video_convert_orc_planar_chroma_420_444");
-      orc_program_set_backup_function (p,
-          _backup_video_convert_orc_planar_chroma_420_444);
-      orc_program_add_destination (p, 2, "d1");
-      orc_program_add_destination (p, 2, "d2");
-      orc_program_add_source (p, 1, "s1");
-      orc_program_add_temporary (p, 2, "t1");
-
-      orc_program_append_2 (p, "splatbw", 0, ORC_VAR_T1, ORC_VAR_S1, ORC_VAR_D1,
-          ORC_VAR_D1);
-      orc_program_append_2 (p, "storew", 0, ORC_VAR_D1, ORC_VAR_T1, ORC_VAR_D1,
-          ORC_VAR_D1);
-      orc_program_append_2 (p, "storew", 0, ORC_VAR_D2, ORC_VAR_T1, ORC_VAR_D1,
-          ORC_VAR_D1);
-#endif
-
-      orc_program_compile (p);
-      c = orc_program_take_code (p);
-      orc_program_free (p);
-    }
-    p_inited = TRUE;
-    orc_once_mutex_unlock ();
-  }
-  ex->arrays[ORC_VAR_A2] = c;
-  ex->program = 0;
-
-  ex->n = n;
-  ORC_EXECUTOR_M (ex) = m;
-  ex->arrays[ORC_VAR_D1] = d1;
-  ex->params[ORC_VAR_D1] = d1_stride;
-  ex->arrays[ORC_VAR_D2] = d2;
-  ex->params[ORC_VAR_D2] = d2_stride;
-  ex->arrays[ORC_VAR_S1] = (void *) s1;
-  ex->params[ORC_VAR_S1] = s1_stride;
-
-  func = c->exec;
-  func (ex);
-}
-#endif
-
-
-/* video_convert_orc_planar_chroma_422_444 */
-#ifdef DISABLE_ORC
-void
-video_convert_orc_planar_chroma_422_444 (guint8 * ORC_RESTRICT d1,
-    int d1_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m)
-{
-  int i;
-  int j;
-  orc_union16 *ORC_RESTRICT ptr0;
-  const orc_int8 *ORC_RESTRICT ptr4;
-  orc_int8 var33;
-  orc_union16 var34;
-
-  for (j = 0; j < m; j++) {
-    ptr0 = ORC_PTR_OFFSET (d1, d1_stride * j);
-    ptr4 = ORC_PTR_OFFSET (s1, s1_stride * j);
-
-
-    for (i = 0; i < n; i++) {
-      /* 0: loadb */
-      var33 = ptr4[i];
-      /* 1: splatbw */
-      var34.i = ((var33 & 0xff) << 8) | (var33 & 0xff);
-      /* 2: storew */
-      ptr0[i] = var34;
-    }
-  }
-
-}
-
-#else
-static void
-_backup_video_convert_orc_planar_chroma_422_444 (OrcExecutor * ORC_RESTRICT ex)
-{
-  int i;
-  int j;
-  int n = ex->n;
-  int m = ex->params[ORC_VAR_A1];
-  orc_union16 *ORC_RESTRICT ptr0;
-  const orc_int8 *ORC_RESTRICT ptr4;
-  orc_int8 var33;
-  orc_union16 var34;
-
-  for (j = 0; j < m; j++) {
-    ptr0 = ORC_PTR_OFFSET (ex->arrays[0], ex->params[0] * j);
-    ptr4 = ORC_PTR_OFFSET (ex->arrays[4], ex->params[4] * j);
-
-
-    for (i = 0; i < n; i++) {
-      /* 0: loadb */
-      var33 = ptr4[i];
-      /* 1: splatbw */
-      var34.i = ((var33 & 0xff) << 8) | (var33 & 0xff);
-      /* 2: storew */
-      ptr0[i] = var34;
-    }
-  }
-
-}
-
-void
-video_convert_orc_planar_chroma_422_444 (guint8 * ORC_RESTRICT d1,
-    int d1_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m)
-{
-  OrcExecutor _ex, *ex = &_ex;
-  static volatile int p_inited = 0;
-  static OrcCode *c = 0;
-  void (*func) (OrcExecutor *);
-
-  if (!p_inited) {
-    orc_once_mutex_lock ();
-    if (!p_inited) {
-      OrcProgram *p;
-
-#if 1
-      static const orc_uint8 bc[] = {
-        1, 7, 9, 39, 118, 105, 100, 101, 111, 95, 99, 111, 110, 118, 101, 114,
-        116, 95, 111, 114, 99, 95, 112, 108, 97, 110, 97, 114, 95, 99, 104, 114,
-        111, 109, 97, 95, 52, 50, 50, 95, 52, 52, 52, 11, 2, 2, 12, 1,
-        1, 20, 2, 151, 32, 4, 97, 0, 32, 2, 0,
-      };
-      p = orc_program_new_from_static_bytecode (bc);
-      orc_program_set_backup_function (p,
-          _backup_video_convert_orc_planar_chroma_422_444);
-#else
-      p = orc_program_new ();
-      orc_program_set_2d (p);
-      orc_program_set_name (p, "video_convert_orc_planar_chroma_422_444");
-      orc_program_set_backup_function (p,
-          _backup_video_convert_orc_planar_chroma_422_444);
-      orc_program_add_destination (p, 2, "d1");
-      orc_program_add_source (p, 1, "s1");
-      orc_program_add_temporary (p, 2, "t1");
-
-      orc_program_append_2 (p, "splatbw", 0, ORC_VAR_T1, ORC_VAR_S1, ORC_VAR_D1,
-          ORC_VAR_D1);
-      orc_program_append_2 (p, "storew", 0, ORC_VAR_D1, ORC_VAR_T1, ORC_VAR_D1,
-          ORC_VAR_D1);
-#endif
-
-      orc_program_compile (p);
-      c = orc_program_take_code (p);
-      orc_program_free (p);
-    }
-    p_inited = TRUE;
-    orc_once_mutex_unlock ();
-  }
-  ex->arrays[ORC_VAR_A2] = c;
-  ex->program = 0;
-
-  ex->n = n;
-  ORC_EXECUTOR_M (ex) = m;
-  ex->arrays[ORC_VAR_D1] = d1;
-  ex->params[ORC_VAR_D1] = d1_stride;
-  ex->arrays[ORC_VAR_S1] = (void *) s1;
-  ex->params[ORC_VAR_S1] = s1_stride;
-
-  func = c->exec;
-  func (ex);
-}
-#endif
-
-
-/* video_convert_orc_planar_chroma_444_422 */
-#ifdef DISABLE_ORC
-void
-video_convert_orc_planar_chroma_444_422 (guint8 * ORC_RESTRICT d1,
-    int d1_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m)
-{
-  int i;
-  int j;
-  orc_int8 *ORC_RESTRICT ptr0;
-  const orc_union16 *ORC_RESTRICT ptr4;
-  orc_union16 var34;
-  orc_int8 var35;
-  orc_int8 var36;
-  orc_int8 var37;
-
-  for (j = 0; j < m; j++) {
-    ptr0 = ORC_PTR_OFFSET (d1, d1_stride * j);
-    ptr4 = ORC_PTR_OFFSET (s1, s1_stride * j);
-
-
-    for (i = 0; i < n; i++) {
-      /* 0: loadw */
-      var34 = ptr4[i];
-      /* 1: splitwb */
-      {
-        orc_union16 _src;
-        _src.i = var34.i;
-        var36 = _src.x2[1];
-        var37 = _src.x2[0];
-      }
-      /* 2: avgub */
-      var35 = ((orc_uint8) var36 + (orc_uint8) var37 + 1) >> 1;
-      /* 3: storeb */
-      ptr0[i] = var35;
-    }
-  }
-
-}
-
-#else
-static void
-_backup_video_convert_orc_planar_chroma_444_422 (OrcExecutor * ORC_RESTRICT ex)
-{
-  int i;
-  int j;
-  int n = ex->n;
-  int m = ex->params[ORC_VAR_A1];
-  orc_int8 *ORC_RESTRICT ptr0;
-  const orc_union16 *ORC_RESTRICT ptr4;
-  orc_union16 var34;
-  orc_int8 var35;
-  orc_int8 var36;
-  orc_int8 var37;
-
-  for (j = 0; j < m; j++) {
-    ptr0 = ORC_PTR_OFFSET (ex->arrays[0], ex->params[0] * j);
-    ptr4 = ORC_PTR_OFFSET (ex->arrays[4], ex->params[4] * j);
-
-
-    for (i = 0; i < n; i++) {
-      /* 0: loadw */
-      var34 = ptr4[i];
-      /* 1: splitwb */
-      {
-        orc_union16 _src;
-        _src.i = var34.i;
-        var36 = _src.x2[1];
-        var37 = _src.x2[0];
-      }
-      /* 2: avgub */
-      var35 = ((orc_uint8) var36 + (orc_uint8) var37 + 1) >> 1;
-      /* 3: storeb */
-      ptr0[i] = var35;
-    }
-  }
-
-}
-
-void
-video_convert_orc_planar_chroma_444_422 (guint8 * ORC_RESTRICT d1,
-    int d1_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m)
-{
-  OrcExecutor _ex, *ex = &_ex;
-  static volatile int p_inited = 0;
-  static OrcCode *c = 0;
-  void (*func) (OrcExecutor *);
-
-  if (!p_inited) {
-    orc_once_mutex_lock ();
-    if (!p_inited) {
-      OrcProgram *p;
-
-#if 1
-      static const orc_uint8 bc[] = {
-        1, 7, 9, 39, 118, 105, 100, 101, 111, 95, 99, 111, 110, 118, 101, 114,
-        116, 95, 111, 114, 99, 95, 112, 108, 97, 110, 97, 114, 95, 99, 104, 114,
-        111, 109, 97, 95, 52, 52, 52, 95, 52, 50, 50, 11, 1, 1, 12, 2,
-        2, 20, 1, 20, 1, 199, 32, 33, 4, 39, 0, 32, 33, 2, 0,
-      };
-      p = orc_program_new_from_static_bytecode (bc);
-      orc_program_set_backup_function (p,
-          _backup_video_convert_orc_planar_chroma_444_422);
-#else
-      p = orc_program_new ();
-      orc_program_set_2d (p);
-      orc_program_set_name (p, "video_convert_orc_planar_chroma_444_422");
-      orc_program_set_backup_function (p,
-          _backup_video_convert_orc_planar_chroma_444_422);
-      orc_program_add_destination (p, 1, "d1");
-      orc_program_add_source (p, 2, "s1");
-      orc_program_add_temporary (p, 1, "t1");
-      orc_program_add_temporary (p, 1, "t2");
-
-      orc_program_append_2 (p, "splitwb", 0, ORC_VAR_T1, ORC_VAR_T2, ORC_VAR_S1,
-          ORC_VAR_D1);
-      orc_program_append_2 (p, "avgub", 0, ORC_VAR_D1, ORC_VAR_T1, ORC_VAR_T2,
-          ORC_VAR_D1);
-#endif
-
-      orc_program_compile (p);
-      c = orc_program_take_code (p);
-      orc_program_free (p);
-    }
-    p_inited = TRUE;
-    orc_once_mutex_unlock ();
-  }
-  ex->arrays[ORC_VAR_A2] = c;
-  ex->program = 0;
-
-  ex->n = n;
-  ORC_EXECUTOR_M (ex) = m;
-  ex->arrays[ORC_VAR_D1] = d1;
-  ex->params[ORC_VAR_D1] = d1_stride;
-  ex->arrays[ORC_VAR_S1] = (void *) s1;
-  ex->params[ORC_VAR_S1] = s1_stride;
-
-  func = c->exec;
-  func (ex);
-}
-#endif
-
-
-/* video_convert_orc_planar_chroma_444_420 */
-#ifdef DISABLE_ORC
-void
-video_convert_orc_planar_chroma_444_420 (guint8 * ORC_RESTRICT d1,
-    int d1_stride, const guint8 * ORC_RESTRICT s1, int s1_stride,
-    const guint8 * ORC_RESTRICT s2, int s2_stride, int n, int m)
-{
-  int i;
-  int j;
-  orc_int8 *ORC_RESTRICT ptr0;
-  const orc_union16 *ORC_RESTRICT ptr4;
-  const orc_union16 *ORC_RESTRICT ptr5;
-  orc_union16 var35;
-  orc_union16 var36;
-  orc_int8 var37;
-  orc_union16 var38;
-  orc_int8 var39;
-  orc_int8 var40;
-
-  for (j = 0; j < m; j++) {
-    ptr0 = ORC_PTR_OFFSET (d1, d1_stride * j);
-    ptr4 = ORC_PTR_OFFSET (s1, s1_stride * j);
-    ptr5 = ORC_PTR_OFFSET (s2, s2_stride * j);
-
-
-    for (i = 0; i < n; i++) {
-      /* 0: loadw */
-      var35 = ptr4[i];
-      /* 1: loadw */
-      var36 = ptr5[i];
-      /* 2: avgub */
-      var38.x2[0] =
-          ((orc_uint8) var35.x2[0] + (orc_uint8) var36.x2[0] + 1) >> 1;
-      var38.x2[1] =
-          ((orc_uint8) var35.x2[1] + (orc_uint8) var36.x2[1] + 1) >> 1;
-      /* 3: splitwb */
-      {
-        orc_union16 _src;
-        _src.i = var38.i;
-        var39 = _src.x2[1];
-        var40 = _src.x2[0];
-      }
-      /* 4: avgub */
-      var37 = ((orc_uint8) var39 + (orc_uint8) var40 + 1) >> 1;
-      /* 5: storeb */
-      ptr0[i] = var37;
-    }
-  }
-
-}
-
-#else
-static void
-_backup_video_convert_orc_planar_chroma_444_420 (OrcExecutor * ORC_RESTRICT ex)
-{
-  int i;
-  int j;
-  int n = ex->n;
-  int m = ex->params[ORC_VAR_A1];
-  orc_int8 *ORC_RESTRICT ptr0;
-  const orc_union16 *ORC_RESTRICT ptr4;
-  const orc_union16 *ORC_RESTRICT ptr5;
-  orc_union16 var35;
-  orc_union16 var36;
-  orc_int8 var37;
-  orc_union16 var38;
-  orc_int8 var39;
-  orc_int8 var40;
-
-  for (j = 0; j < m; j++) {
-    ptr0 = ORC_PTR_OFFSET (ex->arrays[0], ex->params[0] * j);
-    ptr4 = ORC_PTR_OFFSET (ex->arrays[4], ex->params[4] * j);
-    ptr5 = ORC_PTR_OFFSET (ex->arrays[5], ex->params[5] * j);
-
-
-    for (i = 0; i < n; i++) {
-      /* 0: loadw */
-      var35 = ptr4[i];
-      /* 1: loadw */
-      var36 = ptr5[i];
-      /* 2: avgub */
-      var38.x2[0] =
-          ((orc_uint8) var35.x2[0] + (orc_uint8) var36.x2[0] + 1) >> 1;
-      var38.x2[1] =
-          ((orc_uint8) var35.x2[1] + (orc_uint8) var36.x2[1] + 1) >> 1;
-      /* 3: splitwb */
-      {
-        orc_union16 _src;
-        _src.i = var38.i;
-        var39 = _src.x2[1];
-        var40 = _src.x2[0];
-      }
-      /* 4: avgub */
-      var37 = ((orc_uint8) var39 + (orc_uint8) var40 + 1) >> 1;
-      /* 5: storeb */
-      ptr0[i] = var37;
-    }
-  }
-
-}
-
-void
-video_convert_orc_planar_chroma_444_420 (guint8 * ORC_RESTRICT d1,
-    int d1_stride, const guint8 * ORC_RESTRICT s1, int s1_stride,
-    const guint8 * ORC_RESTRICT s2, int s2_stride, int n, int m)
-{
-  OrcExecutor _ex, *ex = &_ex;
-  static volatile int p_inited = 0;
-  static OrcCode *c = 0;
-  void (*func) (OrcExecutor *);
-
-  if (!p_inited) {
-    orc_once_mutex_lock ();
-    if (!p_inited) {
-      OrcProgram *p;
-
-#if 1
-      static const orc_uint8 bc[] = {
-        1, 7, 9, 39, 118, 105, 100, 101, 111, 95, 99, 111, 110, 118, 101, 114,
-        116, 95, 111, 114, 99, 95, 112, 108, 97, 110, 97, 114, 95, 99, 104, 114,
-        111, 109, 97, 95, 52, 52, 52, 95, 52, 50, 48, 11, 1, 1, 12, 2,
-        2, 12, 2, 2, 20, 2, 20, 1, 20, 1, 21, 1, 39, 32, 4, 5,
-        199, 33, 34, 32, 39, 0, 33, 34, 2, 0,
-      };
-      p = orc_program_new_from_static_bytecode (bc);
-      orc_program_set_backup_function (p,
-          _backup_video_convert_orc_planar_chroma_444_420);
-#else
-      p = orc_program_new ();
-      orc_program_set_2d (p);
-      orc_program_set_name (p, "video_convert_orc_planar_chroma_444_420");
-      orc_program_set_backup_function (p,
-          _backup_video_convert_orc_planar_chroma_444_420);
-      orc_program_add_destination (p, 1, "d1");
-      orc_program_add_source (p, 2, "s1");
-      orc_program_add_source (p, 2, "s2");
-      orc_program_add_temporary (p, 2, "t1");
-      orc_program_add_temporary (p, 1, "t2");
-      orc_program_add_temporary (p, 1, "t3");
-
-      orc_program_append_2 (p, "avgub", 1, ORC_VAR_T1, ORC_VAR_S1, ORC_VAR_S2,
-          ORC_VAR_D1);
-      orc_program_append_2 (p, "splitwb", 0, ORC_VAR_T2, ORC_VAR_T3, ORC_VAR_T1,
-          ORC_VAR_D1);
-      orc_program_append_2 (p, "avgub", 0, ORC_VAR_D1, ORC_VAR_T2, ORC_VAR_T3,
-          ORC_VAR_D1);
-#endif
-
-      orc_program_compile (p);
-      c = orc_program_take_code (p);
-      orc_program_free (p);
-    }
-    p_inited = TRUE;
-    orc_once_mutex_unlock ();
-  }
-  ex->arrays[ORC_VAR_A2] = c;
-  ex->program = 0;
-
-  ex->n = n;
-  ORC_EXECUTOR_M (ex) = m;
-  ex->arrays[ORC_VAR_D1] = d1;
-  ex->params[ORC_VAR_D1] = d1_stride;
-  ex->arrays[ORC_VAR_S1] = (void *) s1;
-  ex->params[ORC_VAR_S1] = s1_stride;
-  ex->arrays[ORC_VAR_S2] = (void *) s2;
-  ex->params[ORC_VAR_S2] = s2_stride;
-
-  func = c->exec;
-  func (ex);
-}
-#endif
-
-
-/* video_convert_orc_planar_chroma_422_420 */
-#ifdef DISABLE_ORC
-void
-video_convert_orc_planar_chroma_422_420 (guint8 * ORC_RESTRICT d1,
-    int d1_stride, const guint8 * ORC_RESTRICT s1, int s1_stride,
-    const guint8 * ORC_RESTRICT s2, int s2_stride, int n, int m)
-{
-  int i;
-  int j;
-  orc_int8 *ORC_RESTRICT ptr0;
-  const orc_int8 *ORC_RESTRICT ptr4;
-  const orc_int8 *ORC_RESTRICT ptr5;
-  orc_int8 var32;
-  orc_int8 var33;
-  orc_int8 var34;
-
-  for (j = 0; j < m; j++) {
-    ptr0 = ORC_PTR_OFFSET (d1, d1_stride * j);
-    ptr4 = ORC_PTR_OFFSET (s1, s1_stride * j);
-    ptr5 = ORC_PTR_OFFSET (s2, s2_stride * j);
-
-
-    for (i = 0; i < n; i++) {
-      /* 0: loadb */
-      var32 = ptr4[i];
-      /* 1: loadb */
-      var33 = ptr5[i];
-      /* 2: avgub */
-      var34 = ((orc_uint8) var32 + (orc_uint8) var33 + 1) >> 1;
-      /* 3: storeb */
-      ptr0[i] = var34;
-    }
-  }
-
-}
-
-#else
-static void
-_backup_video_convert_orc_planar_chroma_422_420 (OrcExecutor * ORC_RESTRICT ex)
-{
-  int i;
-  int j;
-  int n = ex->n;
-  int m = ex->params[ORC_VAR_A1];
-  orc_int8 *ORC_RESTRICT ptr0;
-  const orc_int8 *ORC_RESTRICT ptr4;
-  const orc_int8 *ORC_RESTRICT ptr5;
-  orc_int8 var32;
-  orc_int8 var33;
-  orc_int8 var34;
-
-  for (j = 0; j < m; j++) {
-    ptr0 = ORC_PTR_OFFSET (ex->arrays[0], ex->params[0] * j);
-    ptr4 = ORC_PTR_OFFSET (ex->arrays[4], ex->params[4] * j);
-    ptr5 = ORC_PTR_OFFSET (ex->arrays[5], ex->params[5] * j);
-
-
-    for (i = 0; i < n; i++) {
-      /* 0: loadb */
-      var32 = ptr4[i];
-      /* 1: loadb */
-      var33 = ptr5[i];
-      /* 2: avgub */
-      var34 = ((orc_uint8) var32 + (orc_uint8) var33 + 1) >> 1;
-      /* 3: storeb */
-      ptr0[i] = var34;
-    }
-  }
-
-}
-
-void
-video_convert_orc_planar_chroma_422_420 (guint8 * ORC_RESTRICT d1,
-    int d1_stride, const guint8 * ORC_RESTRICT s1, int s1_stride,
-    const guint8 * ORC_RESTRICT s2, int s2_stride, int n, int m)
-{
-  OrcExecutor _ex, *ex = &_ex;
-  static volatile int p_inited = 0;
-  static OrcCode *c = 0;
-  void (*func) (OrcExecutor *);
-
-  if (!p_inited) {
-    orc_once_mutex_lock ();
-    if (!p_inited) {
-      OrcProgram *p;
-
-#if 1
-      static const orc_uint8 bc[] = {
-        1, 7, 9, 39, 118, 105, 100, 101, 111, 95, 99, 111, 110, 118, 101, 114,
-        116, 95, 111, 114, 99, 95, 112, 108, 97, 110, 97, 114, 95, 99, 104, 114,
-        111, 109, 97, 95, 52, 50, 50, 95, 52, 50, 48, 11, 1, 1, 12, 1,
-        1, 12, 1, 1, 39, 0, 4, 5, 2, 0,
-      };
-      p = orc_program_new_from_static_bytecode (bc);
-      orc_program_set_backup_function (p,
-          _backup_video_convert_orc_planar_chroma_422_420);
-#else
-      p = orc_program_new ();
-      orc_program_set_2d (p);
-      orc_program_set_name (p, "video_convert_orc_planar_chroma_422_420");
-      orc_program_set_backup_function (p,
-          _backup_video_convert_orc_planar_chroma_422_420);
-      orc_program_add_destination (p, 1, "d1");
-      orc_program_add_source (p, 1, "s1");
-      orc_program_add_source (p, 1, "s2");
-
-      orc_program_append_2 (p, "avgub", 0, ORC_VAR_D1, ORC_VAR_S1, ORC_VAR_S2,
-          ORC_VAR_D1);
-#endif
-
-      orc_program_compile (p);
-      c = orc_program_take_code (p);
-      orc_program_free (p);
-    }
-    p_inited = TRUE;
-    orc_once_mutex_unlock ();
-  }
-  ex->arrays[ORC_VAR_A2] = c;
-  ex->program = 0;
-
-  ex->n = n;
-  ORC_EXECUTOR_M (ex) = m;
-  ex->arrays[ORC_VAR_D1] = d1;
-  ex->params[ORC_VAR_D1] = d1_stride;
-  ex->arrays[ORC_VAR_S1] = (void *) s1;
-  ex->params[ORC_VAR_S1] = s1_stride;
-  ex->arrays[ORC_VAR_S2] = (void *) s2;
-  ex->params[ORC_VAR_S2] = s2_stride;
-
-  func = c->exec;
-  func (ex);
-}
-#endif
-
-
-/* video_convert_orc_convert_YUY2_AYUV */
-#ifdef DISABLE_ORC
-void
-video_convert_orc_convert_YUY2_AYUV (guint8 * ORC_RESTRICT d1, int d1_stride,
-    const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m)
-{
-  int i;
-  int j;
-  orc_union64 *ORC_RESTRICT ptr0;
-  const orc_union32 *ORC_RESTRICT ptr4;
-  orc_union32 var36;
-#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
-  volatile orc_union16 var37;
-#else
-  orc_union16 var37;
-#endif
-  orc_union64 var38;
-  orc_union16 var39;
-  orc_union16 var40;
-  orc_union32 var41;
-  orc_union32 var42;
-
-  for (j = 0; j < m; j++) {
-    ptr0 = ORC_PTR_OFFSET (d1, d1_stride * j);
-    ptr4 = ORC_PTR_OFFSET (s1, s1_stride * j);
-
-    /* 2: loadpb */
-    var37.x2[0] = (int) 0x000000ff;     /* 255 or 1.25987e-321f */
-    var37.x2[1] = (int) 0x000000ff;     /* 255 or 1.25987e-321f */
-
-    for (i = 0; i < n; i++) {
-      /* 0: loadl */
-      var36 = ptr4[i];
-      /* 1: splitwb */
-      {
-        orc_union16 _src;
-        _src.i = var36.x2[0];
-        var39.x2[0] = _src.x2[1];
-        var40.x2[0] = _src.x2[0];
-      }
-      {
-        orc_union16 _src;
-        _src.i = var36.x2[1];
-        var39.x2[1] = _src.x2[1];
-        var40.x2[1] = _src.x2[0];
-      }
-      /* 3: mergebw */
-      {
-        orc_union16 _dest;
-        _dest.x2[0] = var37.x2[0];
-        _dest.x2[1] = var40.x2[0];
-        var41.x2[0] = _dest.i;
-      }
-      {
-        orc_union16 _dest;
-        _dest.x2[0] = var37.x2[1];
-        _dest.x2[1] = var40.x2[1];
-        var41.x2[1] = _dest.i;
-      }
-      /* 4: mergewl */
-      {
-        orc_union32 _dest;
-        _dest.x2[0] = var39.i;
-        _dest.x2[1] = var39.i;
-        var42.i = _dest.i;
-      }
-      /* 5: mergewl */
-      {
-        orc_union32 _dest;
-        _dest.x2[0] = var41.x2[0];
-        _dest.x2[1] = var42.x2[0];
-        var38.x2[0] = _dest.i;
-      }
-      {
-        orc_union32 _dest;
-        _dest.x2[0] = var41.x2[1];
-        _dest.x2[1] = var42.x2[1];
-        var38.x2[1] = _dest.i;
-      }
-      /* 6: storeq */
-      ptr0[i] = var38;
-    }
-  }
-
-}
-
-#else
-static void
-_backup_video_convert_orc_convert_YUY2_AYUV (OrcExecutor * ORC_RESTRICT ex)
-{
-  int i;
-  int j;
-  int n = ex->n;
-  int m = ex->params[ORC_VAR_A1];
-  orc_union64 *ORC_RESTRICT ptr0;
-  const orc_union32 *ORC_RESTRICT ptr4;
-  orc_union32 var36;
-#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
-  volatile orc_union16 var37;
-#else
-  orc_union16 var37;
-#endif
-  orc_union64 var38;
-  orc_union16 var39;
-  orc_union16 var40;
-  orc_union32 var41;
-  orc_union32 var42;
-
-  for (j = 0; j < m; j++) {
-    ptr0 = ORC_PTR_OFFSET (ex->arrays[0], ex->params[0] * j);
-    ptr4 = ORC_PTR_OFFSET (ex->arrays[4], ex->params[4] * j);
-
-    /* 2: loadpb */
-    var37.x2[0] = (int) 0x000000ff;     /* 255 or 1.25987e-321f */
-    var37.x2[1] = (int) 0x000000ff;     /* 255 or 1.25987e-321f */
-
-    for (i = 0; i < n; i++) {
-      /* 0: loadl */
-      var36 = ptr4[i];
-      /* 1: splitwb */
-      {
-        orc_union16 _src;
-        _src.i = var36.x2[0];
-        var39.x2[0] = _src.x2[1];
-        var40.x2[0] = _src.x2[0];
-      }
-      {
-        orc_union16 _src;
-        _src.i = var36.x2[1];
-        var39.x2[1] = _src.x2[1];
-        var40.x2[1] = _src.x2[0];
-      }
-      /* 3: mergebw */
-      {
-        orc_union16 _dest;
-        _dest.x2[0] = var37.x2[0];
-        _dest.x2[1] = var40.x2[0];
-        var41.x2[0] = _dest.i;
-      }
-      {
-        orc_union16 _dest;
-        _dest.x2[0] = var37.x2[1];
-        _dest.x2[1] = var40.x2[1];
-        var41.x2[1] = _dest.i;
-      }
-      /* 4: mergewl */
-      {
-        orc_union32 _dest;
-        _dest.x2[0] = var39.i;
-        _dest.x2[1] = var39.i;
-        var42.i = _dest.i;
-      }
-      /* 5: mergewl */
-      {
-        orc_union32 _dest;
-        _dest.x2[0] = var41.x2[0];
-        _dest.x2[1] = var42.x2[0];
-        var38.x2[0] = _dest.i;
-      }
-      {
-        orc_union32 _dest;
-        _dest.x2[0] = var41.x2[1];
-        _dest.x2[1] = var42.x2[1];
-        var38.x2[1] = _dest.i;
-      }
-      /* 6: storeq */
-      ptr0[i] = var38;
-    }
-  }
-
-}
-
-void
-video_convert_orc_convert_YUY2_AYUV (guint8 * ORC_RESTRICT d1, int d1_stride,
-    const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m)
-{
-  OrcExecutor _ex, *ex = &_ex;
-  static volatile int p_inited = 0;
-  static OrcCode *c = 0;
-  void (*func) (OrcExecutor *);
-
-  if (!p_inited) {
-    orc_once_mutex_lock ();
-    if (!p_inited) {
-      OrcProgram *p;
-
-#if 1
-      static const orc_uint8 bc[] = {
-        1, 7, 9, 35, 118, 105, 100, 101, 111, 95, 99, 111, 110, 118, 101, 114,
-        116, 95, 111, 114, 99, 95, 99, 111, 110, 118, 101, 114, 116, 95, 89, 85,
-        89, 50, 95, 65, 89, 85, 86, 11, 8, 8, 12, 4, 4, 14, 2, 255,
-        0, 0, 0, 20, 2, 20, 2, 20, 4, 20, 4, 21, 1, 199, 33, 32,
-        4, 21, 1, 196, 34, 16, 32, 195, 35, 33, 33, 21, 1, 195, 0, 34,
-        35, 2, 0,
-      };
-      p = orc_program_new_from_static_bytecode (bc);
-      orc_program_set_backup_function (p,
-          _backup_video_convert_orc_convert_YUY2_AYUV);
-#else
-      p = orc_program_new ();
-      orc_program_set_2d (p);
-      orc_program_set_name (p, "video_convert_orc_convert_YUY2_AYUV");
-      orc_program_set_backup_function (p,
-          _backup_video_convert_orc_convert_YUY2_AYUV);
-      orc_program_add_destination (p, 8, "d1");
-      orc_program_add_source (p, 4, "s1");
-      orc_program_add_constant (p, 2, 0x000000ff, "c1");
-      orc_program_add_temporary (p, 2, "t1");
-      orc_program_add_temporary (p, 2, "t2");
-      orc_program_add_temporary (p, 4, "t3");
-      orc_program_add_temporary (p, 4, "t4");
-
-      orc_program_append_2 (p, "splitwb", 1, ORC_VAR_T2, ORC_VAR_T1, ORC_VAR_S1,
-          ORC_VAR_D1);
-      orc_program_append_2 (p, "mergebw", 1, ORC_VAR_T3, ORC_VAR_C1, ORC_VAR_T1,
-          ORC_VAR_D1);
-      orc_program_append_2 (p, "mergewl", 0, ORC_VAR_T4, ORC_VAR_T2, ORC_VAR_T2,
-          ORC_VAR_D1);
-      orc_program_append_2 (p, "mergewl", 1, ORC_VAR_D1, ORC_VAR_T3, ORC_VAR_T4,
-          ORC_VAR_D1);
-#endif
-
-      orc_program_compile (p);
-      c = orc_program_take_code (p);
-      orc_program_free (p);
-    }
-    p_inited = TRUE;
-    orc_once_mutex_unlock ();
-  }
-  ex->arrays[ORC_VAR_A2] = c;
-  ex->program = 0;
-
-  ex->n = n;
-  ORC_EXECUTOR_M (ex) = m;
-  ex->arrays[ORC_VAR_D1] = d1;
-  ex->params[ORC_VAR_D1] = d1_stride;
-  ex->arrays[ORC_VAR_S1] = (void *) s1;
-  ex->params[ORC_VAR_S1] = s1_stride;
-
-  func = c->exec;
-  func (ex);
-}
-#endif
-
-
-/* video_convert_orc_convert_UYVY_AYUV */
-#ifdef DISABLE_ORC
-void
-video_convert_orc_convert_UYVY_AYUV (guint8 * ORC_RESTRICT d1, int d1_stride,
-    const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m)
-{
-  int i;
-  int j;
-  orc_union64 *ORC_RESTRICT ptr0;
-  const orc_union32 *ORC_RESTRICT ptr4;
-  orc_union32 var36;
-#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
-  volatile orc_union16 var37;
-#else
-  orc_union16 var37;
-#endif
-  orc_union64 var38;
-  orc_union16 var39;
-  orc_union16 var40;
-  orc_union32 var41;
-  orc_union32 var42;
-
-  for (j = 0; j < m; j++) {
-    ptr0 = ORC_PTR_OFFSET (d1, d1_stride * j);
-    ptr4 = ORC_PTR_OFFSET (s1, s1_stride * j);
-
-    /* 2: loadpb */
-    var37.x2[0] = (int) 0x000000ff;     /* 255 or 1.25987e-321f */
-    var37.x2[1] = (int) 0x000000ff;     /* 255 or 1.25987e-321f */
-
-    for (i = 0; i < n; i++) {
-      /* 0: loadl */
-      var36 = ptr4[i];
-      /* 1: splitwb */
-      {
-        orc_union16 _src;
-        _src.i = var36.x2[0];
-        var39.x2[0] = _src.x2[1];
-        var40.x2[0] = _src.x2[0];
-      }
-      {
-        orc_union16 _src;
-        _src.i = var36.x2[1];
-        var39.x2[1] = _src.x2[1];
-        var40.x2[1] = _src.x2[0];
-      }
-      /* 3: mergebw */
-      {
-        orc_union16 _dest;
-        _dest.x2[0] = var37.x2[0];
-        _dest.x2[1] = var39.x2[0];
-        var41.x2[0] = _dest.i;
-      }
-      {
-        orc_union16 _dest;
-        _dest.x2[0] = var37.x2[1];
-        _dest.x2[1] = var39.x2[1];
-        var41.x2[1] = _dest.i;
-      }
-      /* 4: mergewl */
-      {
-        orc_union32 _dest;
-        _dest.x2[0] = var40.i;
-        _dest.x2[1] = var40.i;
-        var42.i = _dest.i;
-      }
-      /* 5: mergewl */
-      {
-        orc_union32 _dest;
-        _dest.x2[0] = var41.x2[0];
-        _dest.x2[1] = var42.x2[0];
-        var38.x2[0] = _dest.i;
-      }
-      {
-        orc_union32 _dest;
-        _dest.x2[0] = var41.x2[1];
-        _dest.x2[1] = var42.x2[1];
-        var38.x2[1] = _dest.i;
-      }
-      /* 6: storeq */
-      ptr0[i] = var38;
-    }
-  }
-
-}
-
-#else
-static void
-_backup_video_convert_orc_convert_UYVY_AYUV (OrcExecutor * ORC_RESTRICT ex)
-{
-  int i;
-  int j;
-  int n = ex->n;
-  int m = ex->params[ORC_VAR_A1];
-  orc_union64 *ORC_RESTRICT ptr0;
-  const orc_union32 *ORC_RESTRICT ptr4;
-  orc_union32 var36;
-#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
-  volatile orc_union16 var37;
-#else
-  orc_union16 var37;
-#endif
-  orc_union64 var38;
-  orc_union16 var39;
-  orc_union16 var40;
-  orc_union32 var41;
-  orc_union32 var42;
-
-  for (j = 0; j < m; j++) {
-    ptr0 = ORC_PTR_OFFSET (ex->arrays[0], ex->params[0] * j);
-    ptr4 = ORC_PTR_OFFSET (ex->arrays[4], ex->params[4] * j);
-
-    /* 2: loadpb */
-    var37.x2[0] = (int) 0x000000ff;     /* 255 or 1.25987e-321f */
-    var37.x2[1] = (int) 0x000000ff;     /* 255 or 1.25987e-321f */
-
-    for (i = 0; i < n; i++) {
-      /* 0: loadl */
-      var36 = ptr4[i];
-      /* 1: splitwb */
-      {
-        orc_union16 _src;
-        _src.i = var36.x2[0];
-        var39.x2[0] = _src.x2[1];
-        var40.x2[0] = _src.x2[0];
-      }
-      {
-        orc_union16 _src;
-        _src.i = var36.x2[1];
-        var39.x2[1] = _src.x2[1];
-        var40.x2[1] = _src.x2[0];
-      }
-      /* 3: mergebw */
-      {
-        orc_union16 _dest;
-        _dest.x2[0] = var37.x2[0];
-        _dest.x2[1] = var39.x2[0];
-        var41.x2[0] = _dest.i;
-      }
-      {
-        orc_union16 _dest;
-        _dest.x2[0] = var37.x2[1];
-        _dest.x2[1] = var39.x2[1];
-        var41.x2[1] = _dest.i;
-      }
-      /* 4: mergewl */
-      {
-        orc_union32 _dest;
-        _dest.x2[0] = var40.i;
-        _dest.x2[1] = var40.i;
-        var42.i = _dest.i;
-      }
-      /* 5: mergewl */
-      {
-        orc_union32 _dest;
-        _dest.x2[0] = var41.x2[0];
-        _dest.x2[1] = var42.x2[0];
-        var38.x2[0] = _dest.i;
-      }
-      {
-        orc_union32 _dest;
-        _dest.x2[0] = var41.x2[1];
-        _dest.x2[1] = var42.x2[1];
-        var38.x2[1] = _dest.i;
-      }
-      /* 6: storeq */
-      ptr0[i] = var38;
-    }
-  }
-
-}
-
-void
-video_convert_orc_convert_UYVY_AYUV (guint8 * ORC_RESTRICT d1, int d1_stride,
-    const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m)
-{
-  OrcExecutor _ex, *ex = &_ex;
-  static volatile int p_inited = 0;
-  static OrcCode *c = 0;
-  void (*func) (OrcExecutor *);
-
-  if (!p_inited) {
-    orc_once_mutex_lock ();
-    if (!p_inited) {
-      OrcProgram *p;
-
-#if 1
-      static const orc_uint8 bc[] = {
-        1, 7, 9, 35, 118, 105, 100, 101, 111, 95, 99, 111, 110, 118, 101, 114,
-        116, 95, 111, 114, 99, 95, 99, 111, 110, 118, 101, 114, 116, 95, 85, 89,
-        86, 89, 95, 65, 89, 85, 86, 11, 8, 8, 12, 4, 4, 14, 2, 255,
-        0, 0, 0, 20, 2, 20, 2, 20, 4, 20, 4, 21, 1, 199, 32, 33,
-        4, 21, 1, 196, 34, 16, 32, 195, 35, 33, 33, 21, 1, 195, 0, 34,
-        35, 2, 0,
-      };
-      p = orc_program_new_from_static_bytecode (bc);
-      orc_program_set_backup_function (p,
-          _backup_video_convert_orc_convert_UYVY_AYUV);
-#else
-      p = orc_program_new ();
-      orc_program_set_2d (p);
-      orc_program_set_name (p, "video_convert_orc_convert_UYVY_AYUV");
-      orc_program_set_backup_function (p,
-          _backup_video_convert_orc_convert_UYVY_AYUV);
-      orc_program_add_destination (p, 8, "d1");
-      orc_program_add_source (p, 4, "s1");
-      orc_program_add_constant (p, 2, 0x000000ff, "c1");
-      orc_program_add_temporary (p, 2, "t1");
-      orc_program_add_temporary (p, 2, "t2");
-      orc_program_add_temporary (p, 4, "t3");
-      orc_program_add_temporary (p, 4, "t4");
-
-      orc_program_append_2 (p, "splitwb", 1, ORC_VAR_T1, ORC_VAR_T2, ORC_VAR_S1,
-          ORC_VAR_D1);
-      orc_program_append_2 (p, "mergebw", 1, ORC_VAR_T3, ORC_VAR_C1, ORC_VAR_T1,
-          ORC_VAR_D1);
-      orc_program_append_2 (p, "mergewl", 0, ORC_VAR_T4, ORC_VAR_T2, ORC_VAR_T2,
-          ORC_VAR_D1);
-      orc_program_append_2 (p, "mergewl", 1, ORC_VAR_D1, ORC_VAR_T3, ORC_VAR_T4,
-          ORC_VAR_D1);
-#endif
-
-      orc_program_compile (p);
-      c = orc_program_take_code (p);
-      orc_program_free (p);
-    }
-    p_inited = TRUE;
-    orc_once_mutex_unlock ();
-  }
-  ex->arrays[ORC_VAR_A2] = c;
-  ex->program = 0;
-
-  ex->n = n;
-  ORC_EXECUTOR_M (ex) = m;
-  ex->arrays[ORC_VAR_D1] = d1;
-  ex->params[ORC_VAR_D1] = d1_stride;
-  ex->arrays[ORC_VAR_S1] = (void *) s1;
-  ex->params[ORC_VAR_S1] = s1_stride;
-
-  func = c->exec;
-  func (ex);
-}
-#endif
-
-
-/* video_convert_orc_convert_YUY2_Y42B */
-#ifdef DISABLE_ORC
-void
-video_convert_orc_convert_YUY2_Y42B (guint8 * ORC_RESTRICT d1, int d1_stride,
-    guint8 * ORC_RESTRICT d2, int d2_stride, guint8 * ORC_RESTRICT d3,
-    int d3_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m)
-{
-  int i;
-  int j;
-  orc_union16 *ORC_RESTRICT ptr0;
-  orc_int8 *ORC_RESTRICT ptr1;
-  orc_int8 *ORC_RESTRICT ptr2;
-  const orc_union32 *ORC_RESTRICT ptr4;
-  orc_union32 var33;
-  orc_union16 var34;
-  orc_int8 var35;
-  orc_int8 var36;
-  orc_union16 var37;
-
-  for (j = 0; j < m; j++) {
-    ptr0 = ORC_PTR_OFFSET (d1, d1_stride * j);
-    ptr1 = ORC_PTR_OFFSET (d2, d2_stride * j);
-    ptr2 = ORC_PTR_OFFSET (d3, d3_stride * j);
-    ptr4 = ORC_PTR_OFFSET (s1, s1_stride * j);
-
-
-    for (i = 0; i < n; i++) {
-      /* 0: loadl */
-      var33 = ptr4[i];
-      /* 1: splitwb */
-      {
-        orc_union16 _src;
-        _src.i = var33.x2[0];
-        var37.x2[0] = _src.x2[1];
-        var34.x2[0] = _src.x2[0];
-      }
-      {
-        orc_union16 _src;
-        _src.i = var33.x2[1];
-        var37.x2[1] = _src.x2[1];
-        var34.x2[1] = _src.x2[0];
-      }
-      /* 2: storew */
-      ptr0[i] = var34;
-      /* 3: splitwb */
-      {
-        orc_union16 _src;
-        _src.i = var37.i;
-        var35 = _src.x2[1];
-        var36 = _src.x2[0];
-      }
-      /* 4: storeb */
-      ptr2[i] = var35;
-      /* 5: storeb */
-      ptr1[i] = var36;
-    }
-  }
-
-}
-
-#else
-static void
-_backup_video_convert_orc_convert_YUY2_Y42B (OrcExecutor * ORC_RESTRICT ex)
-{
-  int i;
-  int j;
-  int n = ex->n;
-  int m = ex->params[ORC_VAR_A1];
-  orc_union16 *ORC_RESTRICT ptr0;
-  orc_int8 *ORC_RESTRICT ptr1;
-  orc_int8 *ORC_RESTRICT ptr2;
-  const orc_union32 *ORC_RESTRICT ptr4;
-  orc_union32 var33;
-  orc_union16 var34;
-  orc_int8 var35;
-  orc_int8 var36;
-  orc_union16 var37;
-
-  for (j = 0; j < m; j++) {
-    ptr0 = ORC_PTR_OFFSET (ex->arrays[0], ex->params[0] * j);
-    ptr1 = ORC_PTR_OFFSET (ex->arrays[1], ex->params[1] * j);
-    ptr2 = ORC_PTR_OFFSET (ex->arrays[2], ex->params[2] * j);
-    ptr4 = ORC_PTR_OFFSET (ex->arrays[4], ex->params[4] * j);
-
-
-    for (i = 0; i < n; i++) {
-      /* 0: loadl */
-      var33 = ptr4[i];
-      /* 1: splitwb */
-      {
-        orc_union16 _src;
-        _src.i = var33.x2[0];
-        var37.x2[0] = _src.x2[1];
-        var34.x2[0] = _src.x2[0];
-      }
-      {
-        orc_union16 _src;
-        _src.i = var33.x2[1];
-        var37.x2[1] = _src.x2[1];
-        var34.x2[1] = _src.x2[0];
-      }
-      /* 2: storew */
-      ptr0[i] = var34;
-      /* 3: splitwb */
-      {
-        orc_union16 _src;
-        _src.i = var37.i;
-        var35 = _src.x2[1];
-        var36 = _src.x2[0];
-      }
-      /* 4: storeb */
-      ptr2[i] = var35;
-      /* 5: storeb */
-      ptr1[i] = var36;
-    }
-  }
-
-}
-
-void
-video_convert_orc_convert_YUY2_Y42B (guint8 * ORC_RESTRICT d1, int d1_stride,
-    guint8 * ORC_RESTRICT d2, int d2_stride, guint8 * ORC_RESTRICT d3,
-    int d3_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m)
-{
-  OrcExecutor _ex, *ex = &_ex;
-  static volatile int p_inited = 0;
-  static OrcCode *c = 0;
-  void (*func) (OrcExecutor *);
-
-  if (!p_inited) {
-    orc_once_mutex_lock ();
-    if (!p_inited) {
-      OrcProgram *p;
-
-#if 1
-      static const orc_uint8 bc[] = {
-        1, 7, 9, 35, 118, 105, 100, 101, 111, 95, 99, 111, 110, 118, 101, 114,
-        116, 95, 111, 114, 99, 95, 99, 111, 110, 118, 101, 114, 116, 95, 89, 85,
-        89, 50, 95, 89, 52, 50, 66, 11, 2, 2, 11, 1, 1, 11, 1, 1,
-        12, 4, 4, 20, 2, 21, 1, 199, 32, 0, 4, 199, 2, 1, 32, 2,
-        0,
-      };
-      p = orc_program_new_from_static_bytecode (bc);
-      orc_program_set_backup_function (p,
-          _backup_video_convert_orc_convert_YUY2_Y42B);
-#else
-      p = orc_program_new ();
-      orc_program_set_2d (p);
-      orc_program_set_name (p, "video_convert_orc_convert_YUY2_Y42B");
-      orc_program_set_backup_function (p,
-          _backup_video_convert_orc_convert_YUY2_Y42B);
-      orc_program_add_destination (p, 2, "d1");
-      orc_program_add_destination (p, 1, "d2");
-      orc_program_add_destination (p, 1, "d3");
-      orc_program_add_source (p, 4, "s1");
-      orc_program_add_temporary (p, 2, "t1");
-
-      orc_program_append_2 (p, "splitwb", 1, ORC_VAR_T1, ORC_VAR_D1, ORC_VAR_S1,
-          ORC_VAR_D1);
-      orc_program_append_2 (p, "splitwb", 0, ORC_VAR_D3, ORC_VAR_D2, ORC_VAR_T1,
-          ORC_VAR_D1);
-#endif
-
-      orc_program_compile (p);
-      c = orc_program_take_code (p);
-      orc_program_free (p);
-    }
-    p_inited = TRUE;
-    orc_once_mutex_unlock ();
-  }
-  ex->arrays[ORC_VAR_A2] = c;
-  ex->program = 0;
-
-  ex->n = n;
-  ORC_EXECUTOR_M (ex) = m;
-  ex->arrays[ORC_VAR_D1] = d1;
-  ex->params[ORC_VAR_D1] = d1_stride;
-  ex->arrays[ORC_VAR_D2] = d2;
-  ex->params[ORC_VAR_D2] = d2_stride;
-  ex->arrays[ORC_VAR_D3] = d3;
-  ex->params[ORC_VAR_D3] = d3_stride;
-  ex->arrays[ORC_VAR_S1] = (void *) s1;
-  ex->params[ORC_VAR_S1] = s1_stride;
-
-  func = c->exec;
-  func (ex);
-}
-#endif
-
-
-/* video_convert_orc_convert_UYVY_Y42B */
-#ifdef DISABLE_ORC
-void
-video_convert_orc_convert_UYVY_Y42B (guint8 * ORC_RESTRICT d1, int d1_stride,
-    guint8 * ORC_RESTRICT d2, int d2_stride, guint8 * ORC_RESTRICT d3,
-    int d3_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m)
-{
-  int i;
-  int j;
-  orc_union16 *ORC_RESTRICT ptr0;
-  orc_int8 *ORC_RESTRICT ptr1;
-  orc_int8 *ORC_RESTRICT ptr2;
-  const orc_union32 *ORC_RESTRICT ptr4;
-  orc_union32 var33;
-  orc_union16 var34;
-  orc_int8 var35;
-  orc_int8 var36;
-  orc_union16 var37;
-
-  for (j = 0; j < m; j++) {
-    ptr0 = ORC_PTR_OFFSET (d1, d1_stride * j);
-    ptr1 = ORC_PTR_OFFSET (d2, d2_stride * j);
-    ptr2 = ORC_PTR_OFFSET (d3, d3_stride * j);
-    ptr4 = ORC_PTR_OFFSET (s1, s1_stride * j);
-
-
-    for (i = 0; i < n; i++) {
-      /* 0: loadl */
-      var33 = ptr4[i];
-      /* 1: splitwb */
-      {
-        orc_union16 _src;
-        _src.i = var33.x2[0];
-        var34.x2[0] = _src.x2[1];
-        var37.x2[0] = _src.x2[0];
-      }
-      {
-        orc_union16 _src;
-        _src.i = var33.x2[1];
-        var34.x2[1] = _src.x2[1];
-        var37.x2[1] = _src.x2[0];
-      }
-      /* 2: storew */
-      ptr0[i] = var34;
-      /* 3: splitwb */
-      {
-        orc_union16 _src;
-        _src.i = var37.i;
-        var35 = _src.x2[1];
-        var36 = _src.x2[0];
-      }
-      /* 4: storeb */
-      ptr2[i] = var35;
-      /* 5: storeb */
-      ptr1[i] = var36;
-    }
-  }
-
-}
-
-#else
-static void
-_backup_video_convert_orc_convert_UYVY_Y42B (OrcExecutor * ORC_RESTRICT ex)
-{
-  int i;
-  int j;
-  int n = ex->n;
-  int m = ex->params[ORC_VAR_A1];
-  orc_union16 *ORC_RESTRICT ptr0;
-  orc_int8 *ORC_RESTRICT ptr1;
-  orc_int8 *ORC_RESTRICT ptr2;
-  const orc_union32 *ORC_RESTRICT ptr4;
-  orc_union32 var33;
-  orc_union16 var34;
-  orc_int8 var35;
-  orc_int8 var36;
-  orc_union16 var37;
-
-  for (j = 0; j < m; j++) {
-    ptr0 = ORC_PTR_OFFSET (ex->arrays[0], ex->params[0] * j);
-    ptr1 = ORC_PTR_OFFSET (ex->arrays[1], ex->params[1] * j);
-    ptr2 = ORC_PTR_OFFSET (ex->arrays[2], ex->params[2] * j);
-    ptr4 = ORC_PTR_OFFSET (ex->arrays[4], ex->params[4] * j);
-
-
-    for (i = 0; i < n; i++) {
-      /* 0: loadl */
-      var33 = ptr4[i];
-      /* 1: splitwb */
-      {
-        orc_union16 _src;
-        _src.i = var33.x2[0];
-        var34.x2[0] = _src.x2[1];
-        var37.x2[0] = _src.x2[0];
-      }
-      {
-        orc_union16 _src;
-        _src.i = var33.x2[1];
-        var34.x2[1] = _src.x2[1];
-        var37.x2[1] = _src.x2[0];
-      }
-      /* 2: storew */
-      ptr0[i] = var34;
-      /* 3: splitwb */
-      {
-        orc_union16 _src;
-        _src.i = var37.i;
-        var35 = _src.x2[1];
-        var36 = _src.x2[0];
-      }
-      /* 4: storeb */
-      ptr2[i] = var35;
-      /* 5: storeb */
-      ptr1[i] = var36;
-    }
-  }
-
-}
-
-void
-video_convert_orc_convert_UYVY_Y42B (guint8 * ORC_RESTRICT d1, int d1_stride,
-    guint8 * ORC_RESTRICT d2, int d2_stride, guint8 * ORC_RESTRICT d3,
-    int d3_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m)
-{
-  OrcExecutor _ex, *ex = &_ex;
-  static volatile int p_inited = 0;
-  static OrcCode *c = 0;
-  void (*func) (OrcExecutor *);
-
-  if (!p_inited) {
-    orc_once_mutex_lock ();
-    if (!p_inited) {
-      OrcProgram *p;
-
-#if 1
-      static const orc_uint8 bc[] = {
-        1, 7, 9, 35, 118, 105, 100, 101, 111, 95, 99, 111, 110, 118, 101, 114,
-        116, 95, 111, 114, 99, 95, 99, 111, 110, 118, 101, 114, 116, 95, 85, 89,
-        86, 89, 95, 89, 52, 50, 66, 11, 2, 2, 11, 1, 1, 11, 1, 1,
-        12, 4, 4, 20, 2, 21, 1, 199, 0, 32, 4, 199, 2, 1, 32, 2,
-        0,
-      };
-      p = orc_program_new_from_static_bytecode (bc);
-      orc_program_set_backup_function (p,
-          _backup_video_convert_orc_convert_UYVY_Y42B);
-#else
-      p = orc_program_new ();
-      orc_program_set_2d (p);
-      orc_program_set_name (p, "video_convert_orc_convert_UYVY_Y42B");
-      orc_program_set_backup_function (p,
-          _backup_video_convert_orc_convert_UYVY_Y42B);
-      orc_program_add_destination (p, 2, "d1");
-      orc_program_add_destination (p, 1, "d2");
-      orc_program_add_destination (p, 1, "d3");
-      orc_program_add_source (p, 4, "s1");
-      orc_program_add_temporary (p, 2, "t1");
-
-      orc_program_append_2 (p, "splitwb", 1, ORC_VAR_D1, ORC_VAR_T1, ORC_VAR_S1,
-          ORC_VAR_D1);
-      orc_program_append_2 (p, "splitwb", 0, ORC_VAR_D3, ORC_VAR_D2, ORC_VAR_T1,
-          ORC_VAR_D1);
-#endif
-
-      orc_program_compile (p);
-      c = orc_program_take_code (p);
-      orc_program_free (p);
-    }
-    p_inited = TRUE;
-    orc_once_mutex_unlock ();
-  }
-  ex->arrays[ORC_VAR_A2] = c;
-  ex->program = 0;
-
-  ex->n = n;
-  ORC_EXECUTOR_M (ex) = m;
-  ex->arrays[ORC_VAR_D1] = d1;
-  ex->params[ORC_VAR_D1] = d1_stride;
-  ex->arrays[ORC_VAR_D2] = d2;
-  ex->params[ORC_VAR_D2] = d2_stride;
-  ex->arrays[ORC_VAR_D3] = d3;
-  ex->params[ORC_VAR_D3] = d3_stride;
-  ex->arrays[ORC_VAR_S1] = (void *) s1;
-  ex->params[ORC_VAR_S1] = s1_stride;
-
-  func = c->exec;
-  func (ex);
-}
-#endif
-
-
-/* video_convert_orc_convert_YUY2_Y444 */
-#ifdef DISABLE_ORC
-void
-video_convert_orc_convert_YUY2_Y444 (guint8 * ORC_RESTRICT d1, int d1_stride,
-    guint8 * ORC_RESTRICT d2, int d2_stride, guint8 * ORC_RESTRICT d3,
-    int d3_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m)
-{
-  int i;
-  int j;
-  orc_union16 *ORC_RESTRICT ptr0;
-  orc_union16 *ORC_RESTRICT ptr1;
-  orc_union16 *ORC_RESTRICT ptr2;
-  const orc_union32 *ORC_RESTRICT ptr4;
-  orc_union32 var35;
-  orc_union16 var36;
-  orc_union16 var37;
-  orc_union16 var38;
-  orc_union16 var39;
-  orc_int8 var40;
-  orc_int8 var41;
-
-  for (j = 0; j < m; j++) {
-    ptr0 = ORC_PTR_OFFSET (d1, d1_stride * j);
-    ptr1 = ORC_PTR_OFFSET (d2, d2_stride * j);
-    ptr2 = ORC_PTR_OFFSET (d3, d3_stride * j);
-    ptr4 = ORC_PTR_OFFSET (s1, s1_stride * j);
-
-
-    for (i = 0; i < n; i++) {
-      /* 0: loadl */
-      var35 = ptr4[i];
-      /* 1: splitwb */
-      {
-        orc_union16 _src;
-        _src.i = var35.x2[0];
-        var39.x2[0] = _src.x2[1];
-        var36.x2[0] = _src.x2[0];
-      }
-      {
-        orc_union16 _src;
-        _src.i = var35.x2[1];
-        var39.x2[1] = _src.x2[1];
-        var36.x2[1] = _src.x2[0];
-      }
-      /* 2: storew */
-      ptr0[i] = var36;
-      /* 3: splitwb */
-      {
-        orc_union16 _src;
-        _src.i = var39.i;
-        var40 = _src.x2[1];
-        var41 = _src.x2[0];
-      }
-      /* 4: splatbw */
-      var37.i = ((var41 & 0xff) << 8) | (var41 & 0xff);
-      /* 5: storew */
-      ptr1[i] = var37;
-      /* 6: splatbw */
-      var38.i = ((var40 & 0xff) << 8) | (var40 & 0xff);
-      /* 7: storew */
-      ptr2[i] = var38;
-    }
-  }
-
-}
-
-#else
-static void
-_backup_video_convert_orc_convert_YUY2_Y444 (OrcExecutor * ORC_RESTRICT ex)
-{
-  int i;
-  int j;
-  int n = ex->n;
-  int m = ex->params[ORC_VAR_A1];
-  orc_union16 *ORC_RESTRICT ptr0;
-  orc_union16 *ORC_RESTRICT ptr1;
-  orc_union16 *ORC_RESTRICT ptr2;
-  const orc_union32 *ORC_RESTRICT ptr4;
-  orc_union32 var35;
-  orc_union16 var36;
-  orc_union16 var37;
-  orc_union16 var38;
-  orc_union16 var39;
-  orc_int8 var40;
-  orc_int8 var41;
-
-  for (j = 0; j < m; j++) {
-    ptr0 = ORC_PTR_OFFSET (ex->arrays[0], ex->params[0] * j);
-    ptr1 = ORC_PTR_OFFSET (ex->arrays[1], ex->params[1] * j);
-    ptr2 = ORC_PTR_OFFSET (ex->arrays[2], ex->params[2] * j);
-    ptr4 = ORC_PTR_OFFSET (ex->arrays[4], ex->params[4] * j);
-
-
-    for (i = 0; i < n; i++) {
-      /* 0: loadl */
-      var35 = ptr4[i];
-      /* 1: splitwb */
-      {
-        orc_union16 _src;
-        _src.i = var35.x2[0];
-        var39.x2[0] = _src.x2[1];
-        var36.x2[0] = _src.x2[0];
-      }
-      {
-        orc_union16 _src;
-        _src.i = var35.x2[1];
-        var39.x2[1] = _src.x2[1];
-        var36.x2[1] = _src.x2[0];
-      }
-      /* 2: storew */
-      ptr0[i] = var36;
-      /* 3: splitwb */
-      {
-        orc_union16 _src;
-        _src.i = var39.i;
-        var40 = _src.x2[1];
-        var41 = _src.x2[0];
-      }
-      /* 4: splatbw */
-      var37.i = ((var41 & 0xff) << 8) | (var41 & 0xff);
-      /* 5: storew */
-      ptr1[i] = var37;
-      /* 6: splatbw */
-      var38.i = ((var40 & 0xff) << 8) | (var40 & 0xff);
-      /* 7: storew */
-      ptr2[i] = var38;
-    }
-  }
-
-}
-
-void
-video_convert_orc_convert_YUY2_Y444 (guint8 * ORC_RESTRICT d1, int d1_stride,
-    guint8 * ORC_RESTRICT d2, int d2_stride, guint8 * ORC_RESTRICT d3,
-    int d3_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m)
-{
-  OrcExecutor _ex, *ex = &_ex;
-  static volatile int p_inited = 0;
-  static OrcCode *c = 0;
-  void (*func) (OrcExecutor *);
-
-  if (!p_inited) {
-    orc_once_mutex_lock ();
-    if (!p_inited) {
-      OrcProgram *p;
-
-#if 1
-      static const orc_uint8 bc[] = {
-        1, 7, 9, 35, 118, 105, 100, 101, 111, 95, 99, 111, 110, 118, 101, 114,
-        116, 95, 111, 114, 99, 95, 99, 111, 110, 118, 101, 114, 116, 95, 89, 85,
-        89, 50, 95, 89, 52, 52, 52, 11, 2, 2, 11, 2, 2, 11, 2, 2,
-        12, 4, 4, 20, 2, 20, 1, 20, 1, 21, 1, 199, 32, 0, 4, 199,
-        34, 33, 32, 151, 1, 33, 151, 2, 34, 2, 0,
-      };
-      p = orc_program_new_from_static_bytecode (bc);
-      orc_program_set_backup_function (p,
-          _backup_video_convert_orc_convert_YUY2_Y444);
-#else
-      p = orc_program_new ();
-      orc_program_set_2d (p);
-      orc_program_set_name (p, "video_convert_orc_convert_YUY2_Y444");
-      orc_program_set_backup_function (p,
-          _backup_video_convert_orc_convert_YUY2_Y444);
-      orc_program_add_destination (p, 2, "d1");
-      orc_program_add_destination (p, 2, "d2");
-      orc_program_add_destination (p, 2, "d3");
-      orc_program_add_source (p, 4, "s1");
-      orc_program_add_temporary (p, 2, "t1");
-      orc_program_add_temporary (p, 1, "t2");
-      orc_program_add_temporary (p, 1, "t3");
-
-      orc_program_append_2 (p, "splitwb", 1, ORC_VAR_T1, ORC_VAR_D1, ORC_VAR_S1,
-          ORC_VAR_D1);
-      orc_program_append_2 (p, "splitwb", 0, ORC_VAR_T3, ORC_VAR_T2, ORC_VAR_T1,
-          ORC_VAR_D1);
-      orc_program_append_2 (p, "splatbw", 0, ORC_VAR_D2, ORC_VAR_T2, ORC_VAR_D1,
-          ORC_VAR_D1);
-      orc_program_append_2 (p, "splatbw", 0, ORC_VAR_D3, ORC_VAR_T3, ORC_VAR_D1,
-          ORC_VAR_D1);
-#endif
-
-      orc_program_compile (p);
-      c = orc_program_take_code (p);
-      orc_program_free (p);
-    }
-    p_inited = TRUE;
-    orc_once_mutex_unlock ();
-  }
-  ex->arrays[ORC_VAR_A2] = c;
-  ex->program = 0;
-
-  ex->n = n;
-  ORC_EXECUTOR_M (ex) = m;
-  ex->arrays[ORC_VAR_D1] = d1;
-  ex->params[ORC_VAR_D1] = d1_stride;
-  ex->arrays[ORC_VAR_D2] = d2;
-  ex->params[ORC_VAR_D2] = d2_stride;
-  ex->arrays[ORC_VAR_D3] = d3;
-  ex->params[ORC_VAR_D3] = d3_stride;
-  ex->arrays[ORC_VAR_S1] = (void *) s1;
-  ex->params[ORC_VAR_S1] = s1_stride;
-
-  func = c->exec;
-  func (ex);
-}
-#endif
-
-
-/* video_convert_orc_convert_UYVY_Y444 */
-#ifdef DISABLE_ORC
-void
-video_convert_orc_convert_UYVY_Y444 (guint8 * ORC_RESTRICT d1, int d1_stride,
-    guint8 * ORC_RESTRICT d2, int d2_stride, guint8 * ORC_RESTRICT d3,
-    int d3_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m)
-{
-  int i;
-  int j;
-  orc_union16 *ORC_RESTRICT ptr0;
-  orc_union16 *ORC_RESTRICT ptr1;
-  orc_union16 *ORC_RESTRICT ptr2;
-  const orc_union32 *ORC_RESTRICT ptr4;
-  orc_union32 var35;
-  orc_union16 var36;
-  orc_union16 var37;
-  orc_union16 var38;
-  orc_union16 var39;
-  orc_int8 var40;
-  orc_int8 var41;
-
-  for (j = 0; j < m; j++) {
-    ptr0 = ORC_PTR_OFFSET (d1, d1_stride * j);
-    ptr1 = ORC_PTR_OFFSET (d2, d2_stride * j);
-    ptr2 = ORC_PTR_OFFSET (d3, d3_stride * j);
-    ptr4 = ORC_PTR_OFFSET (s1, s1_stride * j);
-
-
-    for (i = 0; i < n; i++) {
-      /* 0: loadl */
-      var35 = ptr4[i];
-      /* 1: splitwb */
-      {
-        orc_union16 _src;
-        _src.i = var35.x2[0];
-        var36.x2[0] = _src.x2[1];
-        var39.x2[0] = _src.x2[0];
-      }
-      {
-        orc_union16 _src;
-        _src.i = var35.x2[1];
-        var36.x2[1] = _src.x2[1];
-        var39.x2[1] = _src.x2[0];
-      }
-      /* 2: storew */
-      ptr0[i] = var36;
-      /* 3: splitwb */
-      {
-        orc_union16 _src;
-        _src.i = var39.i;
-        var40 = _src.x2[1];
-        var41 = _src.x2[0];
-      }
-      /* 4: splatbw */
-      var37.i = ((var41 & 0xff) << 8) | (var41 & 0xff);
-      /* 5: storew */
-      ptr1[i] = var37;
-      /* 6: splatbw */
-      var38.i = ((var40 & 0xff) << 8) | (var40 & 0xff);
-      /* 7: storew */
-      ptr2[i] = var38;
-    }
-  }
-
-}
-
-#else
-static void
-_backup_video_convert_orc_convert_UYVY_Y444 (OrcExecutor * ORC_RESTRICT ex)
-{
-  int i;
-  int j;
-  int n = ex->n;
-  int m = ex->params[ORC_VAR_A1];
-  orc_union16 *ORC_RESTRICT ptr0;
-  orc_union16 *ORC_RESTRICT ptr1;
-  orc_union16 *ORC_RESTRICT ptr2;
-  const orc_union32 *ORC_RESTRICT ptr4;
-  orc_union32 var35;
-  orc_union16 var36;
-  orc_union16 var37;
-  orc_union16 var38;
-  orc_union16 var39;
-  orc_int8 var40;
-  orc_int8 var41;
-
-  for (j = 0; j < m; j++) {
-    ptr0 = ORC_PTR_OFFSET (ex->arrays[0], ex->params[0] * j);
-    ptr1 = ORC_PTR_OFFSET (ex->arrays[1], ex->params[1] * j);
-    ptr2 = ORC_PTR_OFFSET (ex->arrays[2], ex->params[2] * j);
-    ptr4 = ORC_PTR_OFFSET (ex->arrays[4], ex->params[4] * j);
-
-
-    for (i = 0; i < n; i++) {
-      /* 0: loadl */
-      var35 = ptr4[i];
-      /* 1: splitwb */
-      {
-        orc_union16 _src;
-        _src.i = var35.x2[0];
-        var36.x2[0] = _src.x2[1];
-        var39.x2[0] = _src.x2[0];
-      }
-      {
-        orc_union16 _src;
-        _src.i = var35.x2[1];
-        var36.x2[1] = _src.x2[1];
-        var39.x2[1] = _src.x2[0];
-      }
-      /* 2: storew */
-      ptr0[i] = var36;
-      /* 3: splitwb */
-      {
-        orc_union16 _src;
-        _src.i = var39.i;
-        var40 = _src.x2[1];
-        var41 = _src.x2[0];
-      }
-      /* 4: splatbw */
-      var37.i = ((var41 & 0xff) << 8) | (var41 & 0xff);
-      /* 5: storew */
-      ptr1[i] = var37;
-      /* 6: splatbw */
-      var38.i = ((var40 & 0xff) << 8) | (var40 & 0xff);
-      /* 7: storew */
-      ptr2[i] = var38;
-    }
-  }
-
-}
-
-void
-video_convert_orc_convert_UYVY_Y444 (guint8 * ORC_RESTRICT d1, int d1_stride,
-    guint8 * ORC_RESTRICT d2, int d2_stride, guint8 * ORC_RESTRICT d3,
-    int d3_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m)
-{
-  OrcExecutor _ex, *ex = &_ex;
-  static volatile int p_inited = 0;
-  static OrcCode *c = 0;
-  void (*func) (OrcExecutor *);
-
-  if (!p_inited) {
-    orc_once_mutex_lock ();
-    if (!p_inited) {
-      OrcProgram *p;
-
-#if 1
-      static const orc_uint8 bc[] = {
-        1, 7, 9, 35, 118, 105, 100, 101, 111, 95, 99, 111, 110, 118, 101, 114,
-        116, 95, 111, 114, 99, 95, 99, 111, 110, 118, 101, 114, 116, 95, 85, 89,
-        86, 89, 95, 89, 52, 52, 52, 11, 2, 2, 11, 2, 2, 11, 2, 2,
-        12, 4, 4, 20, 2, 20, 1, 20, 1, 21, 1, 199, 0, 32, 4, 199,
-        34, 33, 32, 151, 1, 33, 151, 2, 34, 2, 0,
-      };
-      p = orc_program_new_from_static_bytecode (bc);
-      orc_program_set_backup_function (p,
-          _backup_video_convert_orc_convert_UYVY_Y444);
-#else
-      p = orc_program_new ();
-      orc_program_set_2d (p);
-      orc_program_set_name (p, "video_convert_orc_convert_UYVY_Y444");
-      orc_program_set_backup_function (p,
-          _backup_video_convert_orc_convert_UYVY_Y444);
-      orc_program_add_destination (p, 2, "d1");
-      orc_program_add_destination (p, 2, "d2");
-      orc_program_add_destination (p, 2, "d3");
-      orc_program_add_source (p, 4, "s1");
-      orc_program_add_temporary (p, 2, "t1");
-      orc_program_add_temporary (p, 1, "t2");
-      orc_program_add_temporary (p, 1, "t3");
-
-      orc_program_append_2 (p, "splitwb", 1, ORC_VAR_D1, ORC_VAR_T1, ORC_VAR_S1,
-          ORC_VAR_D1);
-      orc_program_append_2 (p, "splitwb", 0, ORC_VAR_T3, ORC_VAR_T2, ORC_VAR_T1,
-          ORC_VAR_D1);
-      orc_program_append_2 (p, "splatbw", 0, ORC_VAR_D2, ORC_VAR_T2, ORC_VAR_D1,
-          ORC_VAR_D1);
-      orc_program_append_2 (p, "splatbw", 0, ORC_VAR_D3, ORC_VAR_T3, ORC_VAR_D1,
-          ORC_VAR_D1);
-#endif
-
-      orc_program_compile (p);
-      c = orc_program_take_code (p);
-      orc_program_free (p);
-    }
-    p_inited = TRUE;
-    orc_once_mutex_unlock ();
-  }
-  ex->arrays[ORC_VAR_A2] = c;
-  ex->program = 0;
-
-  ex->n = n;
-  ORC_EXECUTOR_M (ex) = m;
-  ex->arrays[ORC_VAR_D1] = d1;
-  ex->params[ORC_VAR_D1] = d1_stride;
-  ex->arrays[ORC_VAR_D2] = d2;
-  ex->params[ORC_VAR_D2] = d2_stride;
-  ex->arrays[ORC_VAR_D3] = d3;
-  ex->params[ORC_VAR_D3] = d3_stride;
-  ex->arrays[ORC_VAR_S1] = (void *) s1;
-  ex->params[ORC_VAR_S1] = s1_stride;
-
-  func = c->exec;
-  func (ex);
-}
-#endif
-
-
-/* video_convert_orc_convert_UYVY_I420 */
-#ifdef DISABLE_ORC
-void
-video_convert_orc_convert_UYVY_I420 (guint8 * ORC_RESTRICT d1,
-    guint8 * ORC_RESTRICT d2, guint8 * ORC_RESTRICT d3,
-    guint8 * ORC_RESTRICT d4, const guint8 * ORC_RESTRICT s1,
-    const guint8 * ORC_RESTRICT s2, int n)
-{
-  int i;
-  orc_union16 *ORC_RESTRICT ptr0;
-  orc_union16 *ORC_RESTRICT ptr1;
-  orc_int8 *ORC_RESTRICT ptr2;
-  orc_int8 *ORC_RESTRICT ptr3;
-  const orc_union32 *ORC_RESTRICT ptr4;
-  const orc_union32 *ORC_RESTRICT ptr5;
-  orc_union32 var35;
-  orc_union32 var36;
-  orc_int8 var37;
-  orc_int8 var38;
-  orc_union16 var39;
-  orc_union16 var40;
-  orc_union16 var41;
-  orc_union16 var42;
-  orc_union16 var43;
-
-  ptr0 = (orc_union16 *) d1;
-  ptr1 = (orc_union16 *) d2;
-  ptr2 = (orc_int8 *) d3;
-  ptr3 = (orc_int8 *) d4;
-  ptr4 = (orc_union32 *) s1;
-  ptr5 = (orc_union32 *) s2;
-
-
-  for (i = 0; i < n; i++) {
-    /* 0: loadl */
-    var35 = ptr4[i];
-    /* 1: splitwb */
-    {
-      orc_union16 _src;
-      _src.i = var35.x2[0];
-      var39.x2[0] = _src.x2[1];
-      var40.x2[0] = _src.x2[0];
-    }
-    {
-      orc_union16 _src;
-      _src.i = var35.x2[1];
-      var39.x2[1] = _src.x2[1];
-      var40.x2[1] = _src.x2[0];
-    }
-    /* 2: storew */
-    ptr0[i] = var39;
-    /* 3: loadl */
-    var36 = ptr5[i];
-    /* 4: splitwb */
-    {
-      orc_union16 _src;
-      _src.i = var36.x2[0];
-      var41.x2[0] = _src.x2[1];
-      var42.x2[0] = _src.x2[0];
-    }
-    {
-      orc_union16 _src;
-      _src.i = var36.x2[1];
-      var41.x2[1] = _src.x2[1];
-      var42.x2[1] = _src.x2[0];
-    }
-    /* 5: storew */
-    ptr1[i] = var41;
-    /* 6: avgub */
-    var43.x2[0] = ((orc_uint8) var40.x2[0] + (orc_uint8) var42.x2[0] + 1) >> 1;
-    var43.x2[1] = ((orc_uint8) var40.x2[1] + (orc_uint8) var42.x2[1] + 1) >> 1;
-    /* 7: splitwb */
-    {
-      orc_union16 _src;
-      _src.i = var43.i;
-      var37 = _src.x2[1];
-      var38 = _src.x2[0];
-    }
-    /* 8: storeb */
-    ptr3[i] = var37;
-    /* 9: storeb */
-    ptr2[i] = var38;
-  }
-
-}
-
-#else
-static void
-_backup_video_convert_orc_convert_UYVY_I420 (OrcExecutor * ORC_RESTRICT ex)
-{
-  int i;
-  int n = ex->n;
-  orc_union16 *ORC_RESTRICT ptr0;
-  orc_union16 *ORC_RESTRICT ptr1;
-  orc_int8 *ORC_RESTRICT ptr2;
-  orc_int8 *ORC_RESTRICT ptr3;
-  const orc_union32 *ORC_RESTRICT ptr4;
-  const orc_union32 *ORC_RESTRICT ptr5;
-  orc_union32 var35;
-  orc_union32 var36;
-  orc_int8 var37;
-  orc_int8 var38;
-  orc_union16 var39;
-  orc_union16 var40;
-  orc_union16 var41;
-  orc_union16 var42;
-  orc_union16 var43;
-
-  ptr0 = (orc_union16 *) ex->arrays[0];
-  ptr1 = (orc_union16 *) ex->arrays[1];
-  ptr2 = (orc_int8 *) ex->arrays[2];
-  ptr3 = (orc_int8 *) ex->arrays[3];
-  ptr4 = (orc_union32 *) ex->arrays[4];
-  ptr5 = (orc_union32 *) ex->arrays[5];
-
-
-  for (i = 0; i < n; i++) {
-    /* 0: loadl */
-    var35 = ptr4[i];
-    /* 1: splitwb */
-    {
-      orc_union16 _src;
-      _src.i = var35.x2[0];
-      var39.x2[0] = _src.x2[1];
-      var40.x2[0] = _src.x2[0];
-    }
-    {
-      orc_union16 _src;
-      _src.i = var35.x2[1];
-      var39.x2[1] = _src.x2[1];
-      var40.x2[1] = _src.x2[0];
-    }
-    /* 2: storew */
-    ptr0[i] = var39;
-    /* 3: loadl */
-    var36 = ptr5[i];
-    /* 4: splitwb */
-    {
-      orc_union16 _src;
-      _src.i = var36.x2[0];
-      var41.x2[0] = _src.x2[1];
-      var42.x2[0] = _src.x2[0];
-    }
-    {
-      orc_union16 _src;
-      _src.i = var36.x2[1];
-      var41.x2[1] = _src.x2[1];
-      var42.x2[1] = _src.x2[0];
-    }
-    /* 5: storew */
-    ptr1[i] = var41;
-    /* 6: avgub */
-    var43.x2[0] = ((orc_uint8) var40.x2[0] + (orc_uint8) var42.x2[0] + 1) >> 1;
-    var43.x2[1] = ((orc_uint8) var40.x2[1] + (orc_uint8) var42.x2[1] + 1) >> 1;
-    /* 7: splitwb */
-    {
-      orc_union16 _src;
-      _src.i = var43.i;
-      var37 = _src.x2[1];
-      var38 = _src.x2[0];
-    }
-    /* 8: storeb */
-    ptr3[i] = var37;
-    /* 9: storeb */
-    ptr2[i] = var38;
-  }
-
-}
-
-void
-video_convert_orc_convert_UYVY_I420 (guint8 * ORC_RESTRICT d1,
-    guint8 * ORC_RESTRICT d2, guint8 * ORC_RESTRICT d3,
-    guint8 * ORC_RESTRICT d4, const guint8 * ORC_RESTRICT s1,
-    const guint8 * ORC_RESTRICT s2, int n)
-{
-  OrcExecutor _ex, *ex = &_ex;
-  static volatile int p_inited = 0;
-  static OrcCode *c = 0;
-  void (*func) (OrcExecutor *);
-
-  if (!p_inited) {
-    orc_once_mutex_lock ();
-    if (!p_inited) {
-      OrcProgram *p;
-
-#if 1
-      static const orc_uint8 bc[] = {
-        1, 9, 35, 118, 105, 100, 101, 111, 95, 99, 111, 110, 118, 101, 114, 116,
-        95, 111, 114, 99, 95, 99, 111, 110, 118, 101, 114, 116, 95, 85, 89, 86,
-        89, 95, 73, 52, 50, 48, 11, 2, 2, 11, 2, 2, 11, 1, 1, 11,
-        1, 1, 12, 4, 4, 12, 4, 4, 20, 2, 20, 2, 20, 2, 21, 1,
-        199, 34, 32, 4, 97, 0, 34, 21, 1, 199, 34, 33, 5, 97, 1, 34,
-        21, 1, 39, 32, 32, 33, 199, 3, 2, 32, 2, 0,
-      };
-      p = orc_program_new_from_static_bytecode (bc);
-      orc_program_set_backup_function (p,
-          _backup_video_convert_orc_convert_UYVY_I420);
-#else
-      p = orc_program_new ();
-      orc_program_set_name (p, "video_convert_orc_convert_UYVY_I420");
-      orc_program_set_backup_function (p,
-          _backup_video_convert_orc_convert_UYVY_I420);
-      orc_program_add_destination (p, 2, "d1");
-      orc_program_add_destination (p, 2, "d2");
-      orc_program_add_destination (p, 1, "d3");
-      orc_program_add_destination (p, 1, "d4");
-      orc_program_add_source (p, 4, "s1");
-      orc_program_add_source (p, 4, "s2");
-      orc_program_add_temporary (p, 2, "t1");
-      orc_program_add_temporary (p, 2, "t2");
-      orc_program_add_temporary (p, 2, "t3");
-
-      orc_program_append_2 (p, "splitwb", 1, ORC_VAR_T3, ORC_VAR_T1, ORC_VAR_S1,
-          ORC_VAR_D1);
-      orc_program_append_2 (p, "storew", 0, ORC_VAR_D1, ORC_VAR_T3, ORC_VAR_D1,
-          ORC_VAR_D1);
-      orc_program_append_2 (p, "splitwb", 1, ORC_VAR_T3, ORC_VAR_T2, ORC_VAR_S2,
-          ORC_VAR_D1);
-      orc_program_append_2 (p, "storew", 0, ORC_VAR_D2, ORC_VAR_T3, ORC_VAR_D1,
-          ORC_VAR_D1);
-      orc_program_append_2 (p, "avgub", 1, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_T2,
-          ORC_VAR_D1);
-      orc_program_append_2 (p, "splitwb", 0, ORC_VAR_D4, ORC_VAR_D3, ORC_VAR_T1,
-          ORC_VAR_D1);
-#endif
-
-      orc_program_compile (p);
-      c = orc_program_take_code (p);
-      orc_program_free (p);
-    }
-    p_inited = TRUE;
-    orc_once_mutex_unlock ();
-  }
-  ex->arrays[ORC_VAR_A2] = c;
-  ex->program = 0;
-
-  ex->n = n;
-  ex->arrays[ORC_VAR_D1] = d1;
-  ex->arrays[ORC_VAR_D2] = d2;
-  ex->arrays[ORC_VAR_D3] = d3;
-  ex->arrays[ORC_VAR_D4] = d4;
-  ex->arrays[ORC_VAR_S1] = (void *) s1;
-  ex->arrays[ORC_VAR_S2] = (void *) s2;
-
-  func = c->exec;
-  func (ex);
-}
-#endif
-
-
-/* video_convert_orc_convert_AYUV_I420 */
-#ifdef DISABLE_ORC
-void
-video_convert_orc_convert_AYUV_I420 (guint8 * ORC_RESTRICT d1, int d1_stride,
-    guint8 * ORC_RESTRICT d2, int d2_stride, guint8 * ORC_RESTRICT d3,
-    int d3_stride, guint8 * ORC_RESTRICT d4, int d4_stride,
-    const guint8 * ORC_RESTRICT s1, int s1_stride,
-    const guint8 * ORC_RESTRICT s2, int s2_stride, int n, int m)
-{
-  int i;
-  int j;
-  orc_union16 *ORC_RESTRICT ptr0;
-  orc_union16 *ORC_RESTRICT ptr1;
-  orc_int8 *ORC_RESTRICT ptr2;
-  orc_int8 *ORC_RESTRICT ptr3;
-  const orc_union64 *ORC_RESTRICT ptr4;
-  const orc_union64 *ORC_RESTRICT ptr5;
-  orc_union64 var40;
-  orc_union16 var41;
-  orc_union64 var42;
-  orc_union16 var43;
-  orc_int8 var44;
-  orc_int8 var45;
-  orc_union32 var46;
-  orc_union32 var47;
-  orc_union32 var48;
-  orc_union32 var49;
-  orc_union32 var50;
-  orc_union16 var51;
-  orc_union16 var52;
-  orc_int8 var53;
-  orc_int8 var54;
-  orc_int8 var55;
-  orc_int8 var56;
-
-  for (j = 0; j < m; j++) {
-    ptr0 = ORC_PTR_OFFSET (d1, d1_stride * j);
-    ptr1 = ORC_PTR_OFFSET (d2, d2_stride * j);
-    ptr2 = ORC_PTR_OFFSET (d3, d3_stride * j);
-    ptr3 = ORC_PTR_OFFSET (d4, d4_stride * j);
-    ptr4 = ORC_PTR_OFFSET (s1, s1_stride * j);
-    ptr5 = ORC_PTR_OFFSET (s2, s2_stride * j);
-
-
-    for (i = 0; i < n; i++) {
-      /* 0: loadq */
-      var40 = ptr4[i];
-      /* 1: splitlw */
-      {
-        orc_union32 _src;
-        _src.i = var40.x2[0];
-        var46.x2[0] = _src.x2[1];
-        var47.x2[0] = _src.x2[0];
-      }
-      {
-        orc_union32 _src;
-        _src.i = var40.x2[1];
-        var46.x2[1] = _src.x2[1];
-        var47.x2[1] = _src.x2[0];
-      }
-      /* 2: select1wb */
-      {
-        orc_union16 _src;
-        _src.i = var47.x2[0];
-        var41.x2[0] = _src.x2[1];
-      }
-      {
-        orc_union16 _src;
-        _src.i = var47.x2[1];
-        var41.x2[1] = _src.x2[1];
-      }
-      /* 3: storew */
-      ptr0[i] = var41;
-      /* 4: loadq */
-      var42 = ptr5[i];
-      /* 5: splitlw */
-      {
-        orc_union32 _src;
-        _src.i = var42.x2[0];
-        var48.x2[0] = _src.x2[1];
-        var49.x2[0] = _src.x2[0];
-      }
-      {
-        orc_union32 _src;
-        _src.i = var42.x2[1];
-        var48.x2[1] = _src.x2[1];
-        var49.x2[1] = _src.x2[0];
-      }
-      /* 6: select1wb */
-      {
-        orc_union16 _src;
-        _src.i = var49.x2[0];
-        var43.x2[0] = _src.x2[1];
-      }
-      {
-        orc_union16 _src;
-        _src.i = var49.x2[1];
-        var43.x2[1] = _src.x2[1];
-      }
-      /* 7: storew */
-      ptr1[i] = var43;
-      /* 8: avgub */
-      var50.x4[0] =
-          ((orc_uint8) var46.x4[0] + (orc_uint8) var48.x4[0] + 1) >> 1;
-      var50.x4[1] =
-          ((orc_uint8) var46.x4[1] + (orc_uint8) var48.x4[1] + 1) >> 1;
-      var50.x4[2] =
-          ((orc_uint8) var46.x4[2] + (orc_uint8) var48.x4[2] + 1) >> 1;
-      var50.x4[3] =
-          ((orc_uint8) var46.x4[3] + (orc_uint8) var48.x4[3] + 1) >> 1;
-      /* 9: splitwb */
-      {
-        orc_union16 _src;
-        _src.i = var50.x2[0];
-        var51.x2[0] = _src.x2[1];
-        var52.x2[0] = _src.x2[0];
-      }
-      {
-        orc_union16 _src;
-        _src.i = var50.x2[1];
-        var51.x2[1] = _src.x2[1];
-        var52.x2[1] = _src.x2[0];
-      }
-      /* 10: splitwb */
-      {
-        orc_union16 _src;
-        _src.i = var52.i;
-        var53 = _src.x2[1];
-        var54 = _src.x2[0];
-      }
-      /* 11: avgub */
-      var44 = ((orc_uint8) var53 + (orc_uint8) var54 + 1) >> 1;
-      /* 12: storeb */
-      ptr2[i] = var44;
-      /* 13: splitwb */
-      {
-        orc_union16 _src;
-        _src.i = var51.i;
-        var55 = _src.x2[1];
-        var56 = _src.x2[0];
-      }
-      /* 14: avgub */
-      var45 = ((orc_uint8) var55 + (orc_uint8) var56 + 1) >> 1;
-      /* 15: storeb */
-      ptr3[i] = var45;
-    }
-  }
-
-}
-
-#else
-static void
-_backup_video_convert_orc_convert_AYUV_I420 (OrcExecutor * ORC_RESTRICT ex)
-{
-  int i;
-  int j;
-  int n = ex->n;
-  int m = ex->params[ORC_VAR_A1];
-  orc_union16 *ORC_RESTRICT ptr0;
-  orc_union16 *ORC_RESTRICT ptr1;
-  orc_int8 *ORC_RESTRICT ptr2;
-  orc_int8 *ORC_RESTRICT ptr3;
-  const orc_union64 *ORC_RESTRICT ptr4;
-  const orc_union64 *ORC_RESTRICT ptr5;
-  orc_union64 var40;
-  orc_union16 var41;
-  orc_union64 var42;
-  orc_union16 var43;
-  orc_int8 var44;
-  orc_int8 var45;
-  orc_union32 var46;
-  orc_union32 var47;
-  orc_union32 var48;
-  orc_union32 var49;
-  orc_union32 var50;
-  orc_union16 var51;
-  orc_union16 var52;
-  orc_int8 var53;
-  orc_int8 var54;
-  orc_int8 var55;
-  orc_int8 var56;
-
-  for (j = 0; j < m; j++) {
-    ptr0 = ORC_PTR_OFFSET (ex->arrays[0], ex->params[0] * j);
-    ptr1 = ORC_PTR_OFFSET (ex->arrays[1], ex->params[1] * j);
-    ptr2 = ORC_PTR_OFFSET (ex->arrays[2], ex->params[2] * j);
-    ptr3 = ORC_PTR_OFFSET (ex->arrays[3], ex->params[3] * j);
-    ptr4 = ORC_PTR_OFFSET (ex->arrays[4], ex->params[4] * j);
-    ptr5 = ORC_PTR_OFFSET (ex->arrays[5], ex->params[5] * j);
-
-
-    for (i = 0; i < n; i++) {
-      /* 0: loadq */
-      var40 = ptr4[i];
-      /* 1: splitlw */
-      {
-        orc_union32 _src;
-        _src.i = var40.x2[0];
-        var46.x2[0] = _src.x2[1];
-        var47.x2[0] = _src.x2[0];
-      }
-      {
-        orc_union32 _src;
-        _src.i = var40.x2[1];
-        var46.x2[1] = _src.x2[1];
-        var47.x2[1] = _src.x2[0];
-      }
-      /* 2: select1wb */
-      {
-        orc_union16 _src;
-        _src.i = var47.x2[0];
-        var41.x2[0] = _src.x2[1];
-      }
-      {
-        orc_union16 _src;
-        _src.i = var47.x2[1];
-        var41.x2[1] = _src.x2[1];
-      }
-      /* 3: storew */
-      ptr0[i] = var41;
-      /* 4: loadq */
-      var42 = ptr5[i];
-      /* 5: splitlw */
-      {
-        orc_union32 _src;
-        _src.i = var42.x2[0];
-        var48.x2[0] = _src.x2[1];
-        var49.x2[0] = _src.x2[0];
-      }
-      {
-        orc_union32 _src;
-        _src.i = var42.x2[1];
-        var48.x2[1] = _src.x2[1];
-        var49.x2[1] = _src.x2[0];
-      }
-      /* 6: select1wb */
-      {
-        orc_union16 _src;
-        _src.i = var49.x2[0];
-        var43.x2[0] = _src.x2[1];
-      }
-      {
-        orc_union16 _src;
-        _src.i = var49.x2[1];
-        var43.x2[1] = _src.x2[1];
-      }
-      /* 7: storew */
-      ptr1[i] = var43;
-      /* 8: avgub */
-      var50.x4[0] =
-          ((orc_uint8) var46.x4[0] + (orc_uint8) var48.x4[0] + 1) >> 1;
-      var50.x4[1] =
-          ((orc_uint8) var46.x4[1] + (orc_uint8) var48.x4[1] + 1) >> 1;
-      var50.x4[2] =
-          ((orc_uint8) var46.x4[2] + (orc_uint8) var48.x4[2] + 1) >> 1;
-      var50.x4[3] =
-          ((orc_uint8) var46.x4[3] + (orc_uint8) var48.x4[3] + 1) >> 1;
-      /* 9: splitwb */
-      {
-        orc_union16 _src;
-        _src.i = var50.x2[0];
-        var51.x2[0] = _src.x2[1];
-        var52.x2[0] = _src.x2[0];
-      }
-      {
-        orc_union16 _src;
-        _src.i = var50.x2[1];
-        var51.x2[1] = _src.x2[1];
-        var52.x2[1] = _src.x2[0];
-      }
-      /* 10: splitwb */
-      {
-        orc_union16 _src;
-        _src.i = var52.i;
-        var53 = _src.x2[1];
-        var54 = _src.x2[0];
-      }
-      /* 11: avgub */
-      var44 = ((orc_uint8) var53 + (orc_uint8) var54 + 1) >> 1;
-      /* 12: storeb */
-      ptr2[i] = var44;
-      /* 13: splitwb */
-      {
-        orc_union16 _src;
-        _src.i = var51.i;
-        var55 = _src.x2[1];
-        var56 = _src.x2[0];
-      }
-      /* 14: avgub */
-      var45 = ((orc_uint8) var55 + (orc_uint8) var56 + 1) >> 1;
-      /* 15: storeb */
-      ptr3[i] = var45;
-    }
-  }
-
-}
-
-void
-video_convert_orc_convert_AYUV_I420 (guint8 * ORC_RESTRICT d1, int d1_stride,
-    guint8 * ORC_RESTRICT d2, int d2_stride, guint8 * ORC_RESTRICT d3,
-    int d3_stride, guint8 * ORC_RESTRICT d4, int d4_stride,
-    const guint8 * ORC_RESTRICT s1, int s1_stride,
-    const guint8 * ORC_RESTRICT s2, int s2_stride, int n, int m)
-{
-  OrcExecutor _ex, *ex = &_ex;
-  static volatile int p_inited = 0;
-  static OrcCode *c = 0;
-  void (*func) (OrcExecutor *);
-
-  if (!p_inited) {
-    orc_once_mutex_lock ();
-    if (!p_inited) {
-      OrcProgram *p;
-
-#if 1
-      static const orc_uint8 bc[] = {
-        1, 7, 9, 35, 118, 105, 100, 101, 111, 95, 99, 111, 110, 118, 101, 114,
-        116, 95, 111, 114, 99, 95, 99, 111, 110, 118, 101, 114, 116, 95, 65, 89,
-        85, 86, 95, 73, 52, 50, 48, 11, 2, 2, 11, 2, 2, 11, 1, 1,
-        11, 1, 1, 12, 8, 8, 12, 8, 8, 20, 4, 20, 4, 20, 4, 20,
-        4, 20, 2, 20, 2, 20, 1, 20, 1, 21, 1, 198, 33, 32, 4, 21,
-        1, 189, 0, 32, 21, 1, 198, 34, 32, 5, 21, 1, 189, 1, 32, 21,
-        2, 39, 35, 33, 34, 21, 1, 199, 37, 36, 35, 199, 38, 39, 36, 39,
-        2, 38, 39, 199, 38, 39, 37, 39, 3, 38, 39, 2, 0,
-      };
-      p = orc_program_new_from_static_bytecode (bc);
-      orc_program_set_backup_function (p,
-          _backup_video_convert_orc_convert_AYUV_I420);
-#else
-      p = orc_program_new ();
-      orc_program_set_2d (p);
-      orc_program_set_name (p, "video_convert_orc_convert_AYUV_I420");
-      orc_program_set_backup_function (p,
-          _backup_video_convert_orc_convert_AYUV_I420);
-      orc_program_add_destination (p, 2, "d1");
-      orc_program_add_destination (p, 2, "d2");
-      orc_program_add_destination (p, 1, "d3");
-      orc_program_add_destination (p, 1, "d4");
-      orc_program_add_source (p, 8, "s1");
-      orc_program_add_source (p, 8, "s2");
-      orc_program_add_temporary (p, 4, "t1");
-      orc_program_add_temporary (p, 4, "t2");
-      orc_program_add_temporary (p, 4, "t3");
-      orc_program_add_temporary (p, 4, "t4");
-      orc_program_add_temporary (p, 2, "t5");
-      orc_program_add_temporary (p, 2, "t6");
-      orc_program_add_temporary (p, 1, "t7");
-      orc_program_add_temporary (p, 1, "t8");
-
-      orc_program_append_2 (p, "splitlw", 1, ORC_VAR_T2, ORC_VAR_T1, ORC_VAR_S1,
-          ORC_VAR_D1);
-      orc_program_append_2 (p, "select1wb", 1, ORC_VAR_D1, ORC_VAR_T1,
-          ORC_VAR_D1, ORC_VAR_D1);
-      orc_program_append_2 (p, "splitlw", 1, ORC_VAR_T3, ORC_VAR_T1, ORC_VAR_S2,
-          ORC_VAR_D1);
-      orc_program_append_2 (p, "select1wb", 1, ORC_VAR_D2, ORC_VAR_T1,
-          ORC_VAR_D1, ORC_VAR_D1);
-      orc_program_append_2 (p, "avgub", 2, ORC_VAR_T4, ORC_VAR_T2, ORC_VAR_T3,
-          ORC_VAR_D1);
-      orc_program_append_2 (p, "splitwb", 1, ORC_VAR_T6, ORC_VAR_T5, ORC_VAR_T4,
-          ORC_VAR_D1);
-      orc_program_append_2 (p, "splitwb", 0, ORC_VAR_T7, ORC_VAR_T8, ORC_VAR_T5,
-          ORC_VAR_D1);
-      orc_program_append_2 (p, "avgub", 0, ORC_VAR_D3, ORC_VAR_T7, ORC_VAR_T8,
-          ORC_VAR_D1);
-      orc_program_append_2 (p, "splitwb", 0, ORC_VAR_T7, ORC_VAR_T8, ORC_VAR_T6,
-          ORC_VAR_D1);
-      orc_program_append_2 (p, "avgub", 0, ORC_VAR_D4, ORC_VAR_T7, ORC_VAR_T8,
-          ORC_VAR_D1);
-#endif
-
-      orc_program_compile (p);
-      c = orc_program_take_code (p);
-      orc_program_free (p);
-    }
-    p_inited = TRUE;
-    orc_once_mutex_unlock ();
-  }
-  ex->arrays[ORC_VAR_A2] = c;
-  ex->program = 0;
-
-  ex->n = n;
-  ORC_EXECUTOR_M (ex) = m;
-  ex->arrays[ORC_VAR_D1] = d1;
-  ex->params[ORC_VAR_D1] = d1_stride;
-  ex->arrays[ORC_VAR_D2] = d2;
-  ex->params[ORC_VAR_D2] = d2_stride;
-  ex->arrays[ORC_VAR_D3] = d3;
-  ex->params[ORC_VAR_D3] = d3_stride;
-  ex->arrays[ORC_VAR_D4] = d4;
-  ex->params[ORC_VAR_D4] = d4_stride;
-  ex->arrays[ORC_VAR_S1] = (void *) s1;
-  ex->params[ORC_VAR_S1] = s1_stride;
-  ex->arrays[ORC_VAR_S2] = (void *) s2;
-  ex->params[ORC_VAR_S2] = s2_stride;
-
-  func = c->exec;
-  func (ex);
-}
-#endif
-
-
-/* video_convert_orc_convert_AYUV_YUY2 */
-#ifdef DISABLE_ORC
-void
-video_convert_orc_convert_AYUV_YUY2 (guint8 * ORC_RESTRICT d1, int d1_stride,
-    const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m)
-{
-  int i;
-  int j;
-  orc_union32 *ORC_RESTRICT ptr0;
-  const orc_union64 *ORC_RESTRICT ptr4;
-  orc_union64 var37;
-  orc_union32 var38;
-  orc_union32 var39;
-  orc_union32 var40;
-  orc_union16 var41;
-  orc_union16 var42;
-  orc_union16 var43;
-  orc_union16 var44;
-
-  for (j = 0; j < m; j++) {
-    ptr0 = ORC_PTR_OFFSET (d1, d1_stride * j);
-    ptr4 = ORC_PTR_OFFSET (s1, s1_stride * j);
-
-
-    for (i = 0; i < n; i++) {
-      /* 0: loadq */
-      var37 = ptr4[i];
-      /* 1: splitlw */
-      {
-        orc_union32 _src;
-        _src.i = var37.x2[0];
-        var39.x2[0] = _src.x2[1];
-        var40.x2[0] = _src.x2[0];
-      }
-      {
-        orc_union32 _src;
-        _src.i = var37.x2[1];
-        var39.x2[1] = _src.x2[1];
-        var40.x2[1] = _src.x2[0];
-      }
-      /* 2: splitlw */
-      {
-        orc_union32 _src;
-        _src.i = var39.i;
-        var41.i = _src.x2[1];
-        var42.i = _src.x2[0];
-      }
-      /* 3: avgub */
-      var43.x2[0] =
-          ((orc_uint8) var41.x2[0] + (orc_uint8) var42.x2[0] + 1) >> 1;
-      var43.x2[1] =
-          ((orc_uint8) var41.x2[1] + (orc_uint8) var42.x2[1] + 1) >> 1;
-      /* 4: select1wb */
-      {
-        orc_union16 _src;
-        _src.i = var40.x2[0];
-        var44.x2[0] = _src.x2[1];
-      }
-      {
-        orc_union16 _src;
-        _src.i = var40.x2[1];
-        var44.x2[1] = _src.x2[1];
-      }
-      /* 5: mergebw */
-      {
-        orc_union16 _dest;
-        _dest.x2[0] = var44.x2[0];
-        _dest.x2[1] = var43.x2[0];
-        var38.x2[0] = _dest.i;
-      }
-      {
-        orc_union16 _dest;
-        _dest.x2[0] = var44.x2[1];
-        _dest.x2[1] = var43.x2[1];
-        var38.x2[1] = _dest.i;
-      }
-      /* 6: storel */
-      ptr0[i] = var38;
-    }
-  }
-
-}
-
-#else
-static void
-_backup_video_convert_orc_convert_AYUV_YUY2 (OrcExecutor * ORC_RESTRICT ex)
-{
-  int i;
-  int j;
-  int n = ex->n;
-  int m = ex->params[ORC_VAR_A1];
-  orc_union32 *ORC_RESTRICT ptr0;
-  const orc_union64 *ORC_RESTRICT ptr4;
-  orc_union64 var37;
-  orc_union32 var38;
-  orc_union32 var39;
-  orc_union32 var40;
-  orc_union16 var41;
-  orc_union16 var42;
-  orc_union16 var43;
-  orc_union16 var44;
-
-  for (j = 0; j < m; j++) {
-    ptr0 = ORC_PTR_OFFSET (ex->arrays[0], ex->params[0] * j);
-    ptr4 = ORC_PTR_OFFSET (ex->arrays[4], ex->params[4] * j);
-
-
-    for (i = 0; i < n; i++) {
-      /* 0: loadq */
-      var37 = ptr4[i];
-      /* 1: splitlw */
-      {
-        orc_union32 _src;
-        _src.i = var37.x2[0];
-        var39.x2[0] = _src.x2[1];
-        var40.x2[0] = _src.x2[0];
-      }
-      {
-        orc_union32 _src;
-        _src.i = var37.x2[1];
-        var39.x2[1] = _src.x2[1];
-        var40.x2[1] = _src.x2[0];
-      }
-      /* 2: splitlw */
-      {
-        orc_union32 _src;
-        _src.i = var39.i;
-        var41.i = _src.x2[1];
-        var42.i = _src.x2[0];
-      }
-      /* 3: avgub */
-      var43.x2[0] =
-          ((orc_uint8) var41.x2[0] + (orc_uint8) var42.x2[0] + 1) >> 1;
-      var43.x2[1] =
-          ((orc_uint8) var41.x2[1] + (orc_uint8) var42.x2[1] + 1) >> 1;
-      /* 4: select1wb */
-      {
-        orc_union16 _src;
-        _src.i = var40.x2[0];
-        var44.x2[0] = _src.x2[1];
-      }
-      {
-        orc_union16 _src;
-        _src.i = var40.x2[1];
-        var44.x2[1] = _src.x2[1];
-      }
-      /* 5: mergebw */
-      {
-        orc_union16 _dest;
-        _dest.x2[0] = var44.x2[0];
-        _dest.x2[1] = var43.x2[0];
-        var38.x2[0] = _dest.i;
-      }
-      {
-        orc_union16 _dest;
-        _dest.x2[0] = var44.x2[1];
-        _dest.x2[1] = var43.x2[1];
-        var38.x2[1] = _dest.i;
-      }
-      /* 6: storel */
-      ptr0[i] = var38;
-    }
-  }
-
-}
-
-void
-video_convert_orc_convert_AYUV_YUY2 (guint8 * ORC_RESTRICT d1, int d1_stride,
-    const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m)
-{
-  OrcExecutor _ex, *ex = &_ex;
-  static volatile int p_inited = 0;
-  static OrcCode *c = 0;
-  void (*func) (OrcExecutor *);
-
-  if (!p_inited) {
-    orc_once_mutex_lock ();
-    if (!p_inited) {
-      OrcProgram *p;
-
-#if 1
-      static const orc_uint8 bc[] = {
-        1, 7, 9, 35, 118, 105, 100, 101, 111, 95, 99, 111, 110, 118, 101, 114,
-        116, 95, 111, 114, 99, 95, 99, 111, 110, 118, 101, 114, 116, 95, 65, 89,
-        85, 86, 95, 89, 85, 89, 50, 11, 4, 4, 12, 8, 8, 20, 2, 20,
-        2, 20, 2, 20, 4, 20, 4, 21, 1, 198, 36, 35, 4, 198, 33, 34,
-        36, 21, 1, 39, 33, 33, 34, 21, 1, 189, 32, 35, 21, 1, 196, 0,
-        32, 33, 2, 0,
-      };
-      p = orc_program_new_from_static_bytecode (bc);
-      orc_program_set_backup_function (p,
-          _backup_video_convert_orc_convert_AYUV_YUY2);
-#else
-      p = orc_program_new ();
-      orc_program_set_2d (p);
-      orc_program_set_name (p, "video_convert_orc_convert_AYUV_YUY2");
-      orc_program_set_backup_function (p,
-          _backup_video_convert_orc_convert_AYUV_YUY2);
-      orc_program_add_destination (p, 4, "d1");
-      orc_program_add_source (p, 8, "s1");
-      orc_program_add_temporary (p, 2, "t1");
-      orc_program_add_temporary (p, 2, "t2");
-      orc_program_add_temporary (p, 2, "t3");
-      orc_program_add_temporary (p, 4, "t4");
-      orc_program_add_temporary (p, 4, "t5");
-
-      orc_program_append_2 (p, "splitlw", 1, ORC_VAR_T5, ORC_VAR_T4, ORC_VAR_S1,
-          ORC_VAR_D1);
-      orc_program_append_2 (p, "splitlw", 0, ORC_VAR_T2, ORC_VAR_T3, ORC_VAR_T5,
-          ORC_VAR_D1);
-      orc_program_append_2 (p, "avgub", 1, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_T3,
-          ORC_VAR_D1);
-      orc_program_append_2 (p, "select1wb", 1, ORC_VAR_T1, ORC_VAR_T4,
-          ORC_VAR_D1, ORC_VAR_D1);
-      orc_program_append_2 (p, "mergebw", 1, ORC_VAR_D1, ORC_VAR_T1, ORC_VAR_T2,
-          ORC_VAR_D1);
-#endif
-
-      orc_program_compile (p);
-      c = orc_program_take_code (p);
-      orc_program_free (p);
-    }
-    p_inited = TRUE;
-    orc_once_mutex_unlock ();
-  }
-  ex->arrays[ORC_VAR_A2] = c;
-  ex->program = 0;
-
-  ex->n = n;
-  ORC_EXECUTOR_M (ex) = m;
-  ex->arrays[ORC_VAR_D1] = d1;
-  ex->params[ORC_VAR_D1] = d1_stride;
-  ex->arrays[ORC_VAR_S1] = (void *) s1;
-  ex->params[ORC_VAR_S1] = s1_stride;
-
-  func = c->exec;
-  func (ex);
-}
-#endif
-
-
-/* video_convert_orc_convert_AYUV_UYVY */
-#ifdef DISABLE_ORC
-void
-video_convert_orc_convert_AYUV_UYVY (guint8 * ORC_RESTRICT d1, int d1_stride,
-    const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m)
-{
-  int i;
-  int j;
-  orc_union32 *ORC_RESTRICT ptr0;
-  const orc_union64 *ORC_RESTRICT ptr4;
-  orc_union64 var37;
-  orc_union32 var38;
-  orc_union32 var39;
-  orc_union32 var40;
-  orc_union16 var41;
-  orc_union16 var42;
-  orc_union16 var43;
-  orc_union16 var44;
-
-  for (j = 0; j < m; j++) {
-    ptr0 = ORC_PTR_OFFSET (d1, d1_stride * j);
-    ptr4 = ORC_PTR_OFFSET (s1, s1_stride * j);
-
-
-    for (i = 0; i < n; i++) {
-      /* 0: loadq */
-      var37 = ptr4[i];
-      /* 1: splitlw */
-      {
-        orc_union32 _src;
-        _src.i = var37.x2[0];
-        var39.x2[0] = _src.x2[1];
-        var40.x2[0] = _src.x2[0];
-      }
-      {
-        orc_union32 _src;
-        _src.i = var37.x2[1];
-        var39.x2[1] = _src.x2[1];
-        var40.x2[1] = _src.x2[0];
-      }
-      /* 2: splitlw */
-      {
-        orc_union32 _src;
-        _src.i = var39.i;
-        var41.i = _src.x2[1];
-        var42.i = _src.x2[0];
-      }
-      /* 3: avgub */
-      var43.x2[0] =
-          ((orc_uint8) var41.x2[0] + (orc_uint8) var42.x2[0] + 1) >> 1;
-      var43.x2[1] =
-          ((orc_uint8) var41.x2[1] + (orc_uint8) var42.x2[1] + 1) >> 1;
-      /* 4: select1wb */
-      {
-        orc_union16 _src;
-        _src.i = var40.x2[0];
-        var44.x2[0] = _src.x2[1];
-      }
-      {
-        orc_union16 _src;
-        _src.i = var40.x2[1];
-        var44.x2[1] = _src.x2[1];
-      }
-      /* 5: mergebw */
-      {
-        orc_union16 _dest;
-        _dest.x2[0] = var43.x2[0];
-        _dest.x2[1] = var44.x2[0];
-        var38.x2[0] = _dest.i;
-      }
-      {
-        orc_union16 _dest;
-        _dest.x2[0] = var43.x2[1];
-        _dest.x2[1] = var44.x2[1];
-        var38.x2[1] = _dest.i;
-      }
-      /* 6: storel */
-      ptr0[i] = var38;
-    }
-  }
-
-}
-
-#else
-static void
-_backup_video_convert_orc_convert_AYUV_UYVY (OrcExecutor * ORC_RESTRICT ex)
-{
-  int i;
-  int j;
-  int n = ex->n;
-  int m = ex->params[ORC_VAR_A1];
-  orc_union32 *ORC_RESTRICT ptr0;
-  const orc_union64 *ORC_RESTRICT ptr4;
-  orc_union64 var37;
-  orc_union32 var38;
-  orc_union32 var39;
-  orc_union32 var40;
-  orc_union16 var41;
-  orc_union16 var42;
-  orc_union16 var43;
-  orc_union16 var44;
-
-  for (j = 0; j < m; j++) {
-    ptr0 = ORC_PTR_OFFSET (ex->arrays[0], ex->params[0] * j);
-    ptr4 = ORC_PTR_OFFSET (ex->arrays[4], ex->params[4] * j);
-
-
-    for (i = 0; i < n; i++) {
-      /* 0: loadq */
-      var37 = ptr4[i];
-      /* 1: splitlw */
-      {
-        orc_union32 _src;
-        _src.i = var37.x2[0];
-        var39.x2[0] = _src.x2[1];
-        var40.x2[0] = _src.x2[0];
-      }
-      {
-        orc_union32 _src;
-        _src.i = var37.x2[1];
-        var39.x2[1] = _src.x2[1];
-        var40.x2[1] = _src.x2[0];
-      }
-      /* 2: splitlw */
-      {
-        orc_union32 _src;
-        _src.i = var39.i;
-        var41.i = _src.x2[1];
-        var42.i = _src.x2[0];
-      }
-      /* 3: avgub */
-      var43.x2[0] =
-          ((orc_uint8) var41.x2[0] + (orc_uint8) var42.x2[0] + 1) >> 1;
-      var43.x2[1] =
-          ((orc_uint8) var41.x2[1] + (orc_uint8) var42.x2[1] + 1) >> 1;
-      /* 4: select1wb */
-      {
-        orc_union16 _src;
-        _src.i = var40.x2[0];
-        var44.x2[0] = _src.x2[1];
-      }
-      {
-        orc_union16 _src;
-        _src.i = var40.x2[1];
-        var44.x2[1] = _src.x2[1];
-      }
-      /* 5: mergebw */
-      {
-        orc_union16 _dest;
-        _dest.x2[0] = var43.x2[0];
-        _dest.x2[1] = var44.x2[0];
-        var38.x2[0] = _dest.i;
-      }
-      {
-        orc_union16 _dest;
-        _dest.x2[0] = var43.x2[1];
-        _dest.x2[1] = var44.x2[1];
-        var38.x2[1] = _dest.i;
-      }
-      /* 6: storel */
-      ptr0[i] = var38;
-    }
-  }
-
-}
-
-void
-video_convert_orc_convert_AYUV_UYVY (guint8 * ORC_RESTRICT d1, int d1_stride,
-    const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m)
-{
-  OrcExecutor _ex, *ex = &_ex;
-  static volatile int p_inited = 0;
-  static OrcCode *c = 0;
-  void (*func) (OrcExecutor *);
-
-  if (!p_inited) {
-    orc_once_mutex_lock ();
-    if (!p_inited) {
-      OrcProgram *p;
-
-#if 1
-      static const orc_uint8 bc[] = {
-        1, 7, 9, 35, 118, 105, 100, 101, 111, 95, 99, 111, 110, 118, 101, 114,
-        116, 95, 111, 114, 99, 95, 99, 111, 110, 118, 101, 114, 116, 95, 65, 89,
-        85, 86, 95, 85, 89, 86, 89, 11, 4, 4, 12, 8, 8, 20, 2, 20,
-        2, 20, 2, 20, 4, 20, 4, 21, 1, 198, 36, 35, 4, 198, 33, 34,
-        36, 21, 1, 39, 33, 33, 34, 21, 1, 189, 32, 35, 21, 1, 196, 0,
-        33, 32, 2, 0,
-      };
-      p = orc_program_new_from_static_bytecode (bc);
-      orc_program_set_backup_function (p,
-          _backup_video_convert_orc_convert_AYUV_UYVY);
-#else
-      p = orc_program_new ();
-      orc_program_set_2d (p);
-      orc_program_set_name (p, "video_convert_orc_convert_AYUV_UYVY");
-      orc_program_set_backup_function (p,
-          _backup_video_convert_orc_convert_AYUV_UYVY);
-      orc_program_add_destination (p, 4, "d1");
-      orc_program_add_source (p, 8, "s1");
-      orc_program_add_temporary (p, 2, "t1");
-      orc_program_add_temporary (p, 2, "t2");
-      orc_program_add_temporary (p, 2, "t3");
-      orc_program_add_temporary (p, 4, "t4");
-      orc_program_add_temporary (p, 4, "t5");
-
-      orc_program_append_2 (p, "splitlw", 1, ORC_VAR_T5, ORC_VAR_T4, ORC_VAR_S1,
-          ORC_VAR_D1);
-      orc_program_append_2 (p, "splitlw", 0, ORC_VAR_T2, ORC_VAR_T3, ORC_VAR_T5,
-          ORC_VAR_D1);
-      orc_program_append_2 (p, "avgub", 1, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_T3,
-          ORC_VAR_D1);
-      orc_program_append_2 (p, "select1wb", 1, ORC_VAR_T1, ORC_VAR_T4,
-          ORC_VAR_D1, ORC_VAR_D1);
-      orc_program_append_2 (p, "mergebw", 1, ORC_VAR_D1, ORC_VAR_T2, ORC_VAR_T1,
-          ORC_VAR_D1);
-#endif
-
-      orc_program_compile (p);
-      c = orc_program_take_code (p);
-      orc_program_free (p);
-    }
-    p_inited = TRUE;
-    orc_once_mutex_unlock ();
-  }
-  ex->arrays[ORC_VAR_A2] = c;
-  ex->program = 0;
-
-  ex->n = n;
-  ORC_EXECUTOR_M (ex) = m;
-  ex->arrays[ORC_VAR_D1] = d1;
-  ex->params[ORC_VAR_D1] = d1_stride;
-  ex->arrays[ORC_VAR_S1] = (void *) s1;
-  ex->params[ORC_VAR_S1] = s1_stride;
-
-  func = c->exec;
-  func (ex);
-}
-#endif
-
-
-/* video_convert_orc_convert_AYUV_Y42B */
-#ifdef DISABLE_ORC
-void
-video_convert_orc_convert_AYUV_Y42B (guint8 * ORC_RESTRICT d1, int d1_stride,
-    guint8 * ORC_RESTRICT d2, int d2_stride, guint8 * ORC_RESTRICT d3,
-    int d3_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m)
-{
-  int i;
-  int j;
-  orc_union16 *ORC_RESTRICT ptr0;
-  orc_int8 *ORC_RESTRICT ptr1;
-  orc_int8 *ORC_RESTRICT ptr2;
-  const orc_union64 *ORC_RESTRICT ptr4;
-  orc_union64 var36;
-  orc_int8 var37;
-  orc_int8 var38;
-  orc_union16 var39;
-  orc_union32 var40;
-  orc_union32 var41;
-  orc_union16 var42;
-  orc_union16 var43;
-  orc_union16 var44;
-
-  for (j = 0; j < m; j++) {
-    ptr0 = ORC_PTR_OFFSET (d1, d1_stride * j);
-    ptr1 = ORC_PTR_OFFSET (d2, d2_stride * j);
-    ptr2 = ORC_PTR_OFFSET (d3, d3_stride * j);
-    ptr4 = ORC_PTR_OFFSET (s1, s1_stride * j);
-
-
-    for (i = 0; i < n; i++) {
-      /* 0: loadq */
-      var36 = ptr4[i];
-      /* 1: splitlw */
-      {
-        orc_union32 _src;
-        _src.i = var36.x2[0];
-        var40.x2[0] = _src.x2[1];
-        var41.x2[0] = _src.x2[0];
-      }
-      {
-        orc_union32 _src;
-        _src.i = var36.x2[1];
-        var40.x2[1] = _src.x2[1];
-        var41.x2[1] = _src.x2[0];
-      }
-      /* 2: splitlw */
-      {
-        orc_union32 _src;
-        _src.i = var40.i;
-        var42.i = _src.x2[1];
-        var43.i = _src.x2[0];
-      }
-      /* 3: avgub */
-      var44.x2[0] =
-          ((orc_uint8) var42.x2[0] + (orc_uint8) var43.x2[0] + 1) >> 1;
-      var44.x2[1] =
-          ((orc_uint8) var42.x2[1] + (orc_uint8) var43.x2[1] + 1) >> 1;
-      /* 4: splitwb */
-      {
-        orc_union16 _src;
-        _src.i = var44.i;
-        var37 = _src.x2[1];
-        var38 = _src.x2[0];
-      }
-      /* 5: storeb */
-      ptr2[i] = var37;
-      /* 6: storeb */
-      ptr1[i] = var38;
-      /* 7: select1wb */
-      {
-        orc_union16 _src;
-        _src.i = var41.x2[0];
-        var39.x2[0] = _src.x2[1];
-      }
-      {
-        orc_union16 _src;
-        _src.i = var41.x2[1];
-        var39.x2[1] = _src.x2[1];
-      }
-      /* 8: storew */
-      ptr0[i] = var39;
-    }
-  }
-
-}
-
-#else
-static void
-_backup_video_convert_orc_convert_AYUV_Y42B (OrcExecutor * ORC_RESTRICT ex)
-{
-  int i;
-  int j;
-  int n = ex->n;
-  int m = ex->params[ORC_VAR_A1];
-  orc_union16 *ORC_RESTRICT ptr0;
-  orc_int8 *ORC_RESTRICT ptr1;
-  orc_int8 *ORC_RESTRICT ptr2;
-  const orc_union64 *ORC_RESTRICT ptr4;
-  orc_union64 var36;
-  orc_int8 var37;
-  orc_int8 var38;
-  orc_union16 var39;
-  orc_union32 var40;
-  orc_union32 var41;
-  orc_union16 var42;
-  orc_union16 var43;
-  orc_union16 var44;
-
-  for (j = 0; j < m; j++) {
-    ptr0 = ORC_PTR_OFFSET (ex->arrays[0], ex->params[0] * j);
-    ptr1 = ORC_PTR_OFFSET (ex->arrays[1], ex->params[1] * j);
-    ptr2 = ORC_PTR_OFFSET (ex->arrays[2], ex->params[2] * j);
-    ptr4 = ORC_PTR_OFFSET (ex->arrays[4], ex->params[4] * j);
-
-
-    for (i = 0; i < n; i++) {
-      /* 0: loadq */
-      var36 = ptr4[i];
-      /* 1: splitlw */
-      {
-        orc_union32 _src;
-        _src.i = var36.x2[0];
-        var40.x2[0] = _src.x2[1];
-        var41.x2[0] = _src.x2[0];
-      }
-      {
-        orc_union32 _src;
-        _src.i = var36.x2[1];
-        var40.x2[1] = _src.x2[1];
-        var41.x2[1] = _src.x2[0];
-      }
-      /* 2: splitlw */
-      {
-        orc_union32 _src;
-        _src.i = var40.i;
-        var42.i = _src.x2[1];
-        var43.i = _src.x2[0];
-      }
-      /* 3: avgub */
-      var44.x2[0] =
-          ((orc_uint8) var42.x2[0] + (orc_uint8) var43.x2[0] + 1) >> 1;
-      var44.x2[1] =
-          ((orc_uint8) var42.x2[1] + (orc_uint8) var43.x2[1] + 1) >> 1;
-      /* 4: splitwb */
-      {
-        orc_union16 _src;
-        _src.i = var44.i;
-        var37 = _src.x2[1];
-        var38 = _src.x2[0];
-      }
-      /* 5: storeb */
-      ptr2[i] = var37;
-      /* 6: storeb */
-      ptr1[i] = var38;
-      /* 7: select1wb */
-      {
-        orc_union16 _src;
-        _src.i = var41.x2[0];
-        var39.x2[0] = _src.x2[1];
-      }
-      {
-        orc_union16 _src;
-        _src.i = var41.x2[1];
-        var39.x2[1] = _src.x2[1];
-      }
-      /* 8: storew */
-      ptr0[i] = var39;
-    }
-  }
-
-}
-
-void
-video_convert_orc_convert_AYUV_Y42B (guint8 * ORC_RESTRICT d1, int d1_stride,
-    guint8 * ORC_RESTRICT d2, int d2_stride, guint8 * ORC_RESTRICT d3,
-    int d3_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m)
-{
-  OrcExecutor _ex, *ex = &_ex;
-  static volatile int p_inited = 0;
-  static OrcCode *c = 0;
-  void (*func) (OrcExecutor *);
-
-  if (!p_inited) {
-    orc_once_mutex_lock ();
-    if (!p_inited) {
-      OrcProgram *p;
-
-#if 1
-      static const orc_uint8 bc[] = {
-        1, 7, 9, 35, 118, 105, 100, 101, 111, 95, 99, 111, 110, 118, 101, 114,
-        116, 95, 111, 114, 99, 95, 99, 111, 110, 118, 101, 114, 116, 95, 65, 89,
-        85, 86, 95, 89, 52, 50, 66, 11, 2, 2, 11, 1, 1, 11, 1, 1,
-        12, 8, 8, 20, 4, 20, 4, 20, 2, 20, 2, 21, 1, 198, 33, 32,
-        4, 198, 34, 35, 33, 21, 1, 39, 34, 34, 35, 199, 2, 1, 34, 21,
-        1, 189, 0, 32, 2, 0,
-      };
-      p = orc_program_new_from_static_bytecode (bc);
-      orc_program_set_backup_function (p,
-          _backup_video_convert_orc_convert_AYUV_Y42B);
-#else
-      p = orc_program_new ();
-      orc_program_set_2d (p);
-      orc_program_set_name (p, "video_convert_orc_convert_AYUV_Y42B");
-      orc_program_set_backup_function (p,
-          _backup_video_convert_orc_convert_AYUV_Y42B);
-      orc_program_add_destination (p, 2, "d1");
-      orc_program_add_destination (p, 1, "d2");
-      orc_program_add_destination (p, 1, "d3");
-      orc_program_add_source (p, 8, "s1");
-      orc_program_add_temporary (p, 4, "t1");
-      orc_program_add_temporary (p, 4, "t2");
-      orc_program_add_temporary (p, 2, "t3");
-      orc_program_add_temporary (p, 2, "t4");
-
-      orc_program_append_2 (p, "splitlw", 1, ORC_VAR_T2, ORC_VAR_T1, ORC_VAR_S1,
-          ORC_VAR_D1);
-      orc_program_append_2 (p, "splitlw", 0, ORC_VAR_T3, ORC_VAR_T4, ORC_VAR_T2,
-          ORC_VAR_D1);
-      orc_program_append_2 (p, "avgub", 1, ORC_VAR_T3, ORC_VAR_T3, ORC_VAR_T4,
-          ORC_VAR_D1);
-      orc_program_append_2 (p, "splitwb", 0, ORC_VAR_D3, ORC_VAR_D2, ORC_VAR_T3,
-          ORC_VAR_D1);
-      orc_program_append_2 (p, "select1wb", 1, ORC_VAR_D1, ORC_VAR_T1,
-          ORC_VAR_D1, ORC_VAR_D1);
-#endif
-
-      orc_program_compile (p);
-      c = orc_program_take_code (p);
-      orc_program_free (p);
-    }
-    p_inited = TRUE;
-    orc_once_mutex_unlock ();
-  }
-  ex->arrays[ORC_VAR_A2] = c;
-  ex->program = 0;
-
-  ex->n = n;
-  ORC_EXECUTOR_M (ex) = m;
-  ex->arrays[ORC_VAR_D1] = d1;
-  ex->params[ORC_VAR_D1] = d1_stride;
-  ex->arrays[ORC_VAR_D2] = d2;
-  ex->params[ORC_VAR_D2] = d2_stride;
-  ex->arrays[ORC_VAR_D3] = d3;
-  ex->params[ORC_VAR_D3] = d3_stride;
-  ex->arrays[ORC_VAR_S1] = (void *) s1;
-  ex->params[ORC_VAR_S1] = s1_stride;
-
-  func = c->exec;
-  func (ex);
-}
-#endif
-
-
-/* video_convert_orc_convert_AYUV_Y444 */
-#ifdef DISABLE_ORC
-void
-video_convert_orc_convert_AYUV_Y444 (guint8 * ORC_RESTRICT d1, int d1_stride,
-    guint8 * ORC_RESTRICT d2, int d2_stride, guint8 * ORC_RESTRICT d3,
-    int d3_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m)
-{
-  int i;
-  int j;
-  orc_int8 *ORC_RESTRICT ptr0;
-  orc_int8 *ORC_RESTRICT ptr1;
-  orc_int8 *ORC_RESTRICT ptr2;
-  const orc_union32 *ORC_RESTRICT ptr4;
-  orc_union32 var34;
-  orc_int8 var35;
-  orc_int8 var36;
-  orc_int8 var37;
-  orc_union16 var38;
-  orc_union16 var39;
-
-  for (j = 0; j < m; j++) {
-    ptr0 = ORC_PTR_OFFSET (d1, d1_stride * j);
-    ptr1 = ORC_PTR_OFFSET (d2, d2_stride * j);
-    ptr2 = ORC_PTR_OFFSET (d3, d3_stride * j);
-    ptr4 = ORC_PTR_OFFSET (s1, s1_stride * j);
-
-
-    for (i = 0; i < n; i++) {
-      /* 0: loadl */
-      var34 = ptr4[i];
-      /* 1: splitlw */
-      {
-        orc_union32 _src;
-        _src.i = var34.i;
-        var38.i = _src.x2[1];
-        var39.i = _src.x2[0];
-      }
-      /* 2: splitwb */
-      {
-        orc_union16 _src;
-        _src.i = var38.i;
-        var35 = _src.x2[1];
-        var36 = _src.x2[0];
-      }
-      /* 3: storeb */
-      ptr2[i] = var35;
-      /* 4: storeb */
-      ptr1[i] = var36;
-      /* 5: select1wb */
-      {
-        orc_union16 _src;
-        _src.i = var39.i;
-        var37 = _src.x2[1];
-      }
-      /* 6: storeb */
-      ptr0[i] = var37;
-    }
-  }
-
-}
-
-#else
-static void
-_backup_video_convert_orc_convert_AYUV_Y444 (OrcExecutor * ORC_RESTRICT ex)
-{
-  int i;
-  int j;
-  int n = ex->n;
-  int m = ex->params[ORC_VAR_A1];
-  orc_int8 *ORC_RESTRICT ptr0;
-  orc_int8 *ORC_RESTRICT ptr1;
-  orc_int8 *ORC_RESTRICT ptr2;
-  const orc_union32 *ORC_RESTRICT ptr4;
-  orc_union32 var34;
-  orc_int8 var35;
-  orc_int8 var36;
-  orc_int8 var37;
-  orc_union16 var38;
-  orc_union16 var39;
-
-  for (j = 0; j < m; j++) {
-    ptr0 = ORC_PTR_OFFSET (ex->arrays[0], ex->params[0] * j);
-    ptr1 = ORC_PTR_OFFSET (ex->arrays[1], ex->params[1] * j);
-    ptr2 = ORC_PTR_OFFSET (ex->arrays[2], ex->params[2] * j);
-    ptr4 = ORC_PTR_OFFSET (ex->arrays[4], ex->params[4] * j);
-
-
-    for (i = 0; i < n; i++) {
-      /* 0: loadl */
-      var34 = ptr4[i];
-      /* 1: splitlw */
-      {
-        orc_union32 _src;
-        _src.i = var34.i;
-        var38.i = _src.x2[1];
-        var39.i = _src.x2[0];
-      }
-      /* 2: splitwb */
-      {
-        orc_union16 _src;
-        _src.i = var38.i;
-        var35 = _src.x2[1];
-        var36 = _src.x2[0];
-      }
-      /* 3: storeb */
-      ptr2[i] = var35;
-      /* 4: storeb */
-      ptr1[i] = var36;
-      /* 5: select1wb */
-      {
-        orc_union16 _src;
-        _src.i = var39.i;
-        var37 = _src.x2[1];
-      }
-      /* 6: storeb */
-      ptr0[i] = var37;
-    }
-  }
-
-}
-
-void
-video_convert_orc_convert_AYUV_Y444 (guint8 * ORC_RESTRICT d1, int d1_stride,
-    guint8 * ORC_RESTRICT d2, int d2_stride, guint8 * ORC_RESTRICT d3,
-    int d3_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m)
-{
-  OrcExecutor _ex, *ex = &_ex;
-  static volatile int p_inited = 0;
-  static OrcCode *c = 0;
-  void (*func) (OrcExecutor *);
-
-  if (!p_inited) {
-    orc_once_mutex_lock ();
-    if (!p_inited) {
-      OrcProgram *p;
-
-#if 1
-      static const orc_uint8 bc[] = {
-        1, 7, 9, 35, 118, 105, 100, 101, 111, 95, 99, 111, 110, 118, 101, 114,
-        116, 95, 111, 114, 99, 95, 99, 111, 110, 118, 101, 114, 116, 95, 65, 89,
-        85, 86, 95, 89, 52, 52, 52, 11, 1, 1, 11, 1, 1, 11, 1, 1,
-        12, 4, 4, 20, 2, 20, 2, 198, 33, 32, 4, 199, 2, 1, 33, 189,
-        0, 32, 2, 0,
-      };
-      p = orc_program_new_from_static_bytecode (bc);
-      orc_program_set_backup_function (p,
-          _backup_video_convert_orc_convert_AYUV_Y444);
-#else
-      p = orc_program_new ();
-      orc_program_set_2d (p);
-      orc_program_set_name (p, "video_convert_orc_convert_AYUV_Y444");
-      orc_program_set_backup_function (p,
-          _backup_video_convert_orc_convert_AYUV_Y444);
-      orc_program_add_destination (p, 1, "d1");
-      orc_program_add_destination (p, 1, "d2");
-      orc_program_add_destination (p, 1, "d3");
-      orc_program_add_source (p, 4, "s1");
-      orc_program_add_temporary (p, 2, "t1");
-      orc_program_add_temporary (p, 2, "t2");
-
-      orc_program_append_2 (p, "splitlw", 0, ORC_VAR_T2, ORC_VAR_T1, ORC_VAR_S1,
-          ORC_VAR_D1);
-      orc_program_append_2 (p, "splitwb", 0, ORC_VAR_D3, ORC_VAR_D2, ORC_VAR_T2,
-          ORC_VAR_D1);
-      orc_program_append_2 (p, "select1wb", 0, ORC_VAR_D1, ORC_VAR_T1,
-          ORC_VAR_D1, ORC_VAR_D1);
-#endif
-
-      orc_program_compile (p);
-      c = orc_program_take_code (p);
-      orc_program_free (p);
-    }
-    p_inited = TRUE;
-    orc_once_mutex_unlock ();
-  }
-  ex->arrays[ORC_VAR_A2] = c;
-  ex->program = 0;
-
-  ex->n = n;
-  ORC_EXECUTOR_M (ex) = m;
-  ex->arrays[ORC_VAR_D1] = d1;
-  ex->params[ORC_VAR_D1] = d1_stride;
-  ex->arrays[ORC_VAR_D2] = d2;
-  ex->params[ORC_VAR_D2] = d2_stride;
-  ex->arrays[ORC_VAR_D3] = d3;
-  ex->params[ORC_VAR_D3] = d3_stride;
-  ex->arrays[ORC_VAR_S1] = (void *) s1;
-  ex->params[ORC_VAR_S1] = s1_stride;
-
-  func = c->exec;
-  func (ex);
-}
-#endif
-
-
-/* video_convert_orc_convert_Y42B_YUY2 */
-#ifdef DISABLE_ORC
-void
-video_convert_orc_convert_Y42B_YUY2 (guint8 * ORC_RESTRICT d1, int d1_stride,
-    const guint8 * ORC_RESTRICT s1, int s1_stride,
-    const guint8 * ORC_RESTRICT s2, int s2_stride,
-    const guint8 * ORC_RESTRICT s3, int s3_stride, int n, int m)
-{
-  int i;
-  int j;
-  orc_union32 *ORC_RESTRICT ptr0;
-  const orc_union16 *ORC_RESTRICT ptr4;
-  const orc_int8 *ORC_RESTRICT ptr5;
-  const orc_int8 *ORC_RESTRICT ptr6;
-  orc_int8 var33;
-  orc_int8 var34;
-  orc_union16 var35;
-  orc_union32 var36;
-  orc_union16 var37;
-
-  for (j = 0; j < m; j++) {
-    ptr0 = ORC_PTR_OFFSET (d1, d1_stride * j);
-    ptr4 = ORC_PTR_OFFSET (s1, s1_stride * j);
-    ptr5 = ORC_PTR_OFFSET (s2, s2_stride * j);
-    ptr6 = ORC_PTR_OFFSET (s3, s3_stride * j);
-
-
-    for (i = 0; i < n; i++) {
-      /* 0: loadb */
-      var33 = ptr5[i];
-      /* 1: loadb */
-      var34 = ptr6[i];
-      /* 2: mergebw */
-      {
-        orc_union16 _dest;
-        _dest.x2[0] = var33;
-        _dest.x2[1] = var34;
-        var37.i = _dest.i;
-      }
-      /* 3: loadw */
-      var35 = ptr4[i];
-      /* 4: mergebw */
-      {
-        orc_union16 _dest;
-        _dest.x2[0] = var35.x2[0];
-        _dest.x2[1] = var37.x2[0];
-        var36.x2[0] = _dest.i;
-      }
-      {
-        orc_union16 _dest;
-        _dest.x2[0] = var35.x2[1];
-        _dest.x2[1] = var37.x2[1];
-        var36.x2[1] = _dest.i;
-      }
-      /* 5: storel */
-      ptr0[i] = var36;
-    }
-  }
-
-}
-
-#else
-static void
-_backup_video_convert_orc_convert_Y42B_YUY2 (OrcExecutor * ORC_RESTRICT ex)
-{
-  int i;
-  int j;
-  int n = ex->n;
-  int m = ex->params[ORC_VAR_A1];
-  orc_union32 *ORC_RESTRICT ptr0;
-  const orc_union16 *ORC_RESTRICT ptr4;
-  const orc_int8 *ORC_RESTRICT ptr5;
-  const orc_int8 *ORC_RESTRICT ptr6;
-  orc_int8 var33;
-  orc_int8 var34;
-  orc_union16 var35;
-  orc_union32 var36;
-  orc_union16 var37;
-
-  for (j = 0; j < m; j++) {
-    ptr0 = ORC_PTR_OFFSET (ex->arrays[0], ex->params[0] * j);
-    ptr4 = ORC_PTR_OFFSET (ex->arrays[4], ex->params[4] * j);
-    ptr5 = ORC_PTR_OFFSET (ex->arrays[5], ex->params[5] * j);
-    ptr6 = ORC_PTR_OFFSET (ex->arrays[6], ex->params[6] * j);
-
-
-    for (i = 0; i < n; i++) {
-      /* 0: loadb */
-      var33 = ptr5[i];
-      /* 1: loadb */
-      var34 = ptr6[i];
-      /* 2: mergebw */
-      {
-        orc_union16 _dest;
-        _dest.x2[0] = var33;
-        _dest.x2[1] = var34;
-        var37.i = _dest.i;
-      }
-      /* 3: loadw */
-      var35 = ptr4[i];
-      /* 4: mergebw */
-      {
-        orc_union16 _dest;
-        _dest.x2[0] = var35.x2[0];
-        _dest.x2[1] = var37.x2[0];
-        var36.x2[0] = _dest.i;
-      }
-      {
-        orc_union16 _dest;
-        _dest.x2[0] = var35.x2[1];
-        _dest.x2[1] = var37.x2[1];
-        var36.x2[1] = _dest.i;
-      }
-      /* 5: storel */
-      ptr0[i] = var36;
-    }
-  }
-
-}
-
-void
-video_convert_orc_convert_Y42B_YUY2 (guint8 * ORC_RESTRICT d1, int d1_stride,
-    const guint8 * ORC_RESTRICT s1, int s1_stride,
-    const guint8 * ORC_RESTRICT s2, int s2_stride,
-    const guint8 * ORC_RESTRICT s3, int s3_stride, int n, int m)
-{
-  OrcExecutor _ex, *ex = &_ex;
-  static volatile int p_inited = 0;
-  static OrcCode *c = 0;
-  void (*func) (OrcExecutor *);
-
-  if (!p_inited) {
-    orc_once_mutex_lock ();
-    if (!p_inited) {
-      OrcProgram *p;
-
-#if 1
-      static const orc_uint8 bc[] = {
-        1, 7, 9, 35, 118, 105, 100, 101, 111, 95, 99, 111, 110, 118, 101, 114,
-        116, 95, 111, 114, 99, 95, 99, 111, 110, 118, 101, 114, 116, 95, 89, 52,
-        50, 66, 95, 89, 85, 89, 50, 11, 4, 4, 12, 2, 2, 12, 1, 1,
-        12, 1, 1, 20, 2, 196, 32, 5, 6, 21, 1, 196, 0, 4, 32, 2,
-        0,
-      };
-      p = orc_program_new_from_static_bytecode (bc);
-      orc_program_set_backup_function (p,
-          _backup_video_convert_orc_convert_Y42B_YUY2);
-#else
-      p = orc_program_new ();
-      orc_program_set_2d (p);
-      orc_program_set_name (p, "video_convert_orc_convert_Y42B_YUY2");
-      orc_program_set_backup_function (p,
-          _backup_video_convert_orc_convert_Y42B_YUY2);
-      orc_program_add_destination (p, 4, "d1");
-      orc_program_add_source (p, 2, "s1");
-      orc_program_add_source (p, 1, "s2");
-      orc_program_add_source (p, 1, "s3");
-      orc_program_add_temporary (p, 2, "t1");
-
-      orc_program_append_2 (p, "mergebw", 0, ORC_VAR_T1, ORC_VAR_S2, ORC_VAR_S3,
-          ORC_VAR_D1);
-      orc_program_append_2 (p, "mergebw", 1, ORC_VAR_D1, ORC_VAR_S1, ORC_VAR_T1,
-          ORC_VAR_D1);
-#endif
-
-      orc_program_compile (p);
-      c = orc_program_take_code (p);
-      orc_program_free (p);
-    }
-    p_inited = TRUE;
-    orc_once_mutex_unlock ();
-  }
-  ex->arrays[ORC_VAR_A2] = c;
-  ex->program = 0;
-
-  ex->n = n;
-  ORC_EXECUTOR_M (ex) = m;
-  ex->arrays[ORC_VAR_D1] = d1;
-  ex->params[ORC_VAR_D1] = d1_stride;
-  ex->arrays[ORC_VAR_S1] = (void *) s1;
-  ex->params[ORC_VAR_S1] = s1_stride;
-  ex->arrays[ORC_VAR_S2] = (void *) s2;
-  ex->params[ORC_VAR_S2] = s2_stride;
-  ex->arrays[ORC_VAR_S3] = (void *) s3;
-  ex->params[ORC_VAR_S3] = s3_stride;
-
-  func = c->exec;
-  func (ex);
-}
-#endif
-
-
-/* video_convert_orc_convert_Y42B_UYVY */
-#ifdef DISABLE_ORC
-void
-video_convert_orc_convert_Y42B_UYVY (guint8 * ORC_RESTRICT d1, int d1_stride,
-    const guint8 * ORC_RESTRICT s1, int s1_stride,
-    const guint8 * ORC_RESTRICT s2, int s2_stride,
-    const guint8 * ORC_RESTRICT s3, int s3_stride, int n, int m)
-{
-  int i;
-  int j;
-  orc_union32 *ORC_RESTRICT ptr0;
-  const orc_union16 *ORC_RESTRICT ptr4;
-  const orc_int8 *ORC_RESTRICT ptr5;
-  const orc_int8 *ORC_RESTRICT ptr6;
-  orc_int8 var33;
-  orc_int8 var34;
-  orc_union16 var35;
-  orc_union32 var36;
-  orc_union16 var37;
-
-  for (j = 0; j < m; j++) {
-    ptr0 = ORC_PTR_OFFSET (d1, d1_stride * j);
-    ptr4 = ORC_PTR_OFFSET (s1, s1_stride * j);
-    ptr5 = ORC_PTR_OFFSET (s2, s2_stride * j);
-    ptr6 = ORC_PTR_OFFSET (s3, s3_stride * j);
-
-
-    for (i = 0; i < n; i++) {
-      /* 0: loadb */
-      var33 = ptr5[i];
-      /* 1: loadb */
-      var34 = ptr6[i];
-      /* 2: mergebw */
-      {
-        orc_union16 _dest;
-        _dest.x2[0] = var33;
-        _dest.x2[1] = var34;
-        var37.i = _dest.i;
-      }
-      /* 3: loadw */
-      var35 = ptr4[i];
-      /* 4: mergebw */
-      {
-        orc_union16 _dest;
-        _dest.x2[0] = var37.x2[0];
-        _dest.x2[1] = var35.x2[0];
-        var36.x2[0] = _dest.i;
-      }
-      {
-        orc_union16 _dest;
-        _dest.x2[0] = var37.x2[1];
-        _dest.x2[1] = var35.x2[1];
-        var36.x2[1] = _dest.i;
-      }
-      /* 5: storel */
-      ptr0[i] = var36;
-    }
-  }
-
-}
-
-#else
-static void
-_backup_video_convert_orc_convert_Y42B_UYVY (OrcExecutor * ORC_RESTRICT ex)
-{
-  int i;
-  int j;
-  int n = ex->n;
-  int m = ex->params[ORC_VAR_A1];
-  orc_union32 *ORC_RESTRICT ptr0;
-  const orc_union16 *ORC_RESTRICT ptr4;
-  const orc_int8 *ORC_RESTRICT ptr5;
-  const orc_int8 *ORC_RESTRICT ptr6;
-  orc_int8 var33;
-  orc_int8 var34;
-  orc_union16 var35;
-  orc_union32 var36;
-  orc_union16 var37;
-
-  for (j = 0; j < m; j++) {
-    ptr0 = ORC_PTR_OFFSET (ex->arrays[0], ex->params[0] * j);
-    ptr4 = ORC_PTR_OFFSET (ex->arrays[4], ex->params[4] * j);
-    ptr5 = ORC_PTR_OFFSET (ex->arrays[5], ex->params[5] * j);
-    ptr6 = ORC_PTR_OFFSET (ex->arrays[6], ex->params[6] * j);
-
-
-    for (i = 0; i < n; i++) {
-      /* 0: loadb */
-      var33 = ptr5[i];
-      /* 1: loadb */
-      var34 = ptr6[i];
-      /* 2: mergebw */
-      {
-        orc_union16 _dest;
-        _dest.x2[0] = var33;
-        _dest.x2[1] = var34;
-        var37.i = _dest.i;
-      }
-      /* 3: loadw */
-      var35 = ptr4[i];
-      /* 4: mergebw */
-      {
-        orc_union16 _dest;
-        _dest.x2[0] = var37.x2[0];
-        _dest.x2[1] = var35.x2[0];
-        var36.x2[0] = _dest.i;
-      }
-      {
-        orc_union16 _dest;
-        _dest.x2[0] = var37.x2[1];
-        _dest.x2[1] = var35.x2[1];
-        var36.x2[1] = _dest.i;
-      }
-      /* 5: storel */
-      ptr0[i] = var36;
-    }
-  }
-
-}
-
-void
-video_convert_orc_convert_Y42B_UYVY (guint8 * ORC_RESTRICT d1, int d1_stride,
-    const guint8 * ORC_RESTRICT s1, int s1_stride,
-    const guint8 * ORC_RESTRICT s2, int s2_stride,
-    const guint8 * ORC_RESTRICT s3, int s3_stride, int n, int m)
-{
-  OrcExecutor _ex, *ex = &_ex;
-  static volatile int p_inited = 0;
-  static OrcCode *c = 0;
-  void (*func) (OrcExecutor *);
-
-  if (!p_inited) {
-    orc_once_mutex_lock ();
-    if (!p_inited) {
-      OrcProgram *p;
-
-#if 1
-      static const orc_uint8 bc[] = {
-        1, 7, 9, 35, 118, 105, 100, 101, 111, 95, 99, 111, 110, 118, 101, 114,
-        116, 95, 111, 114, 99, 95, 99, 111, 110, 118, 101, 114, 116, 95, 89, 52,
-        50, 66, 95, 85, 89, 86, 89, 11, 4, 4, 12, 2, 2, 12, 1, 1,
-        12, 1, 1, 20, 2, 196, 32, 5, 6, 21, 1, 196, 0, 32, 4, 2,
-        0,
-      };
-      p = orc_program_new_from_static_bytecode (bc);
-      orc_program_set_backup_function (p,
-          _backup_video_convert_orc_convert_Y42B_UYVY);
-#else
-      p = orc_program_new ();
-      orc_program_set_2d (p);
-      orc_program_set_name (p, "video_convert_orc_convert_Y42B_UYVY");
-      orc_program_set_backup_function (p,
-          _backup_video_convert_orc_convert_Y42B_UYVY);
-      orc_program_add_destination (p, 4, "d1");
-      orc_program_add_source (p, 2, "s1");
-      orc_program_add_source (p, 1, "s2");
-      orc_program_add_source (p, 1, "s3");
-      orc_program_add_temporary (p, 2, "t1");
-
-      orc_program_append_2 (p, "mergebw", 0, ORC_VAR_T1, ORC_VAR_S2, ORC_VAR_S3,
-          ORC_VAR_D1);
-      orc_program_append_2 (p, "mergebw", 1, ORC_VAR_D1, ORC_VAR_T1, ORC_VAR_S1,
-          ORC_VAR_D1);
-#endif
-
-      orc_program_compile (p);
-      c = orc_program_take_code (p);
-      orc_program_free (p);
-    }
-    p_inited = TRUE;
-    orc_once_mutex_unlock ();
-  }
-  ex->arrays[ORC_VAR_A2] = c;
-  ex->program = 0;
-
-  ex->n = n;
-  ORC_EXECUTOR_M (ex) = m;
-  ex->arrays[ORC_VAR_D1] = d1;
-  ex->params[ORC_VAR_D1] = d1_stride;
-  ex->arrays[ORC_VAR_S1] = (void *) s1;
-  ex->params[ORC_VAR_S1] = s1_stride;
-  ex->arrays[ORC_VAR_S2] = (void *) s2;
-  ex->params[ORC_VAR_S2] = s2_stride;
-  ex->arrays[ORC_VAR_S3] = (void *) s3;
-  ex->params[ORC_VAR_S3] = s3_stride;
-
-  func = c->exec;
-  func (ex);
-}
-#endif
-
-
-/* video_convert_orc_convert_Y42B_AYUV */
-#ifdef DISABLE_ORC
-void
-video_convert_orc_convert_Y42B_AYUV (guint8 * ORC_RESTRICT d1, int d1_stride,
-    const guint8 * ORC_RESTRICT s1, int s1_stride,
-    const guint8 * ORC_RESTRICT s2, int s2_stride,
-    const guint8 * ORC_RESTRICT s3, int s3_stride, int n, int m)
-{
-  int i;
-  int j;
-  orc_union64 *ORC_RESTRICT ptr0;
-  const orc_union16 *ORC_RESTRICT ptr4;
-  const orc_int8 *ORC_RESTRICT ptr5;
-  const orc_int8 *ORC_RESTRICT ptr6;
-  orc_int8 var36;
-  orc_int8 var37;
-#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
-  volatile orc_union16 var38;
-#else
-  orc_union16 var38;
-#endif
-  orc_union16 var39;
-  orc_union64 var40;
-  orc_union16 var41;
-  orc_union32 var42;
-  orc_union32 var43;
-
-  for (j = 0; j < m; j++) {
-    ptr0 = ORC_PTR_OFFSET (d1, d1_stride * j);
-    ptr4 = ORC_PTR_OFFSET (s1, s1_stride * j);
-    ptr5 = ORC_PTR_OFFSET (s2, s2_stride * j);
-    ptr6 = ORC_PTR_OFFSET (s3, s3_stride * j);
-
-    /* 3: loadpb */
-    var38.x2[0] = (int) 0x000000ff;     /* 255 or 1.25987e-321f */
-    var38.x2[1] = (int) 0x000000ff;     /* 255 or 1.25987e-321f */
-
-    for (i = 0; i < n; i++) {
-      /* 0: loadb */
-      var36 = ptr5[i];
-      /* 1: loadb */
-      var37 = ptr6[i];
-      /* 2: mergebw */
-      {
-        orc_union16 _dest;
-        _dest.x2[0] = var36;
-        _dest.x2[1] = var37;
-        var41.i = _dest.i;
-      }
-      /* 4: loadw */
-      var39 = ptr4[i];
-      /* 5: mergebw */
-      {
-        orc_union16 _dest;
-        _dest.x2[0] = var38.x2[0];
-        _dest.x2[1] = var39.x2[0];
-        var42.x2[0] = _dest.i;
-      }
-      {
-        orc_union16 _dest;
-        _dest.x2[0] = var38.x2[1];
-        _dest.x2[1] = var39.x2[1];
-        var42.x2[1] = _dest.i;
-      }
-      /* 6: mergewl */
-      {
-        orc_union32 _dest;
-        _dest.x2[0] = var41.i;
-        _dest.x2[1] = var41.i;
-        var43.i = _dest.i;
-      }
-      /* 7: mergewl */
-      {
-        orc_union32 _dest;
-        _dest.x2[0] = var42.x2[0];
-        _dest.x2[1] = var43.x2[0];
-        var40.x2[0] = _dest.i;
-      }
-      {
-        orc_union32 _dest;
-        _dest.x2[0] = var42.x2[1];
-        _dest.x2[1] = var43.x2[1];
-        var40.x2[1] = _dest.i;
-      }
-      /* 8: storeq */
-      ptr0[i] = var40;
-    }
-  }
-
-}
-
-#else
-static void
-_backup_video_convert_orc_convert_Y42B_AYUV (OrcExecutor * ORC_RESTRICT ex)
-{
-  int i;
-  int j;
-  int n = ex->n;
-  int m = ex->params[ORC_VAR_A1];
-  orc_union64 *ORC_RESTRICT ptr0;
-  const orc_union16 *ORC_RESTRICT ptr4;
-  const orc_int8 *ORC_RESTRICT ptr5;
-  const orc_int8 *ORC_RESTRICT ptr6;
-  orc_int8 var36;
-  orc_int8 var37;
-#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
-  volatile orc_union16 var38;
-#else
-  orc_union16 var38;
-#endif
-  orc_union16 var39;
-  orc_union64 var40;
-  orc_union16 var41;
-  orc_union32 var42;
-  orc_union32 var43;
-
-  for (j = 0; j < m; j++) {
-    ptr0 = ORC_PTR_OFFSET (ex->arrays[0], ex->params[0] * j);
-    ptr4 = ORC_PTR_OFFSET (ex->arrays[4], ex->params[4] * j);
-    ptr5 = ORC_PTR_OFFSET (ex->arrays[5], ex->params[5] * j);
-    ptr6 = ORC_PTR_OFFSET (ex->arrays[6], ex->params[6] * j);
-
-    /* 3: loadpb */
-    var38.x2[0] = (int) 0x000000ff;     /* 255 or 1.25987e-321f */
-    var38.x2[1] = (int) 0x000000ff;     /* 255 or 1.25987e-321f */
-
-    for (i = 0; i < n; i++) {
-      /* 0: loadb */
-      var36 = ptr5[i];
-      /* 1: loadb */
-      var37 = ptr6[i];
-      /* 2: mergebw */
-      {
-        orc_union16 _dest;
-        _dest.x2[0] = var36;
-        _dest.x2[1] = var37;
-        var41.i = _dest.i;
-      }
-      /* 4: loadw */
-      var39 = ptr4[i];
-      /* 5: mergebw */
-      {
-        orc_union16 _dest;
-        _dest.x2[0] = var38.x2[0];
-        _dest.x2[1] = var39.x2[0];
-        var42.x2[0] = _dest.i;
-      }
-      {
-        orc_union16 _dest;
-        _dest.x2[0] = var38.x2[1];
-        _dest.x2[1] = var39.x2[1];
-        var42.x2[1] = _dest.i;
-      }
-      /* 6: mergewl */
-      {
-        orc_union32 _dest;
-        _dest.x2[0] = var41.i;
-        _dest.x2[1] = var41.i;
-        var43.i = _dest.i;
-      }
-      /* 7: mergewl */
-      {
-        orc_union32 _dest;
-        _dest.x2[0] = var42.x2[0];
-        _dest.x2[1] = var43.x2[0];
-        var40.x2[0] = _dest.i;
-      }
-      {
-        orc_union32 _dest;
-        _dest.x2[0] = var42.x2[1];
-        _dest.x2[1] = var43.x2[1];
-        var40.x2[1] = _dest.i;
-      }
-      /* 8: storeq */
-      ptr0[i] = var40;
-    }
-  }
-
-}
-
-void
-video_convert_orc_convert_Y42B_AYUV (guint8 * ORC_RESTRICT d1, int d1_stride,
-    const guint8 * ORC_RESTRICT s1, int s1_stride,
-    const guint8 * ORC_RESTRICT s2, int s2_stride,
-    const guint8 * ORC_RESTRICT s3, int s3_stride, int n, int m)
-{
-  OrcExecutor _ex, *ex = &_ex;
-  static volatile int p_inited = 0;
-  static OrcCode *c = 0;
-  void (*func) (OrcExecutor *);
-
-  if (!p_inited) {
-    orc_once_mutex_lock ();
-    if (!p_inited) {
-      OrcProgram *p;
-
-#if 1
-      static const orc_uint8 bc[] = {
-        1, 7, 9, 35, 118, 105, 100, 101, 111, 95, 99, 111, 110, 118, 101, 114,
-        116, 95, 111, 114, 99, 95, 99, 111, 110, 118, 101, 114, 116, 95, 89, 52,
-        50, 66, 95, 65, 89, 85, 86, 11, 8, 8, 12, 2, 2, 12, 1, 1,
-        12, 1, 1, 14, 1, 255, 0, 0, 0, 20, 2, 20, 2, 20, 4, 20,
-        4, 196, 32, 5, 6, 21, 1, 196, 35, 16, 4, 195, 34, 32, 32, 21,
-        1, 195, 0, 35, 34, 2, 0,
-      };
-      p = orc_program_new_from_static_bytecode (bc);
-      orc_program_set_backup_function (p,
-          _backup_video_convert_orc_convert_Y42B_AYUV);
-#else
-      p = orc_program_new ();
-      orc_program_set_2d (p);
-      orc_program_set_name (p, "video_convert_orc_convert_Y42B_AYUV");
-      orc_program_set_backup_function (p,
-          _backup_video_convert_orc_convert_Y42B_AYUV);
-      orc_program_add_destination (p, 8, "d1");
-      orc_program_add_source (p, 2, "s1");
-      orc_program_add_source (p, 1, "s2");
-      orc_program_add_source (p, 1, "s3");
-      orc_program_add_constant (p, 1, 0x000000ff, "c1");
-      orc_program_add_temporary (p, 2, "t1");
-      orc_program_add_temporary (p, 2, "t2");
-      orc_program_add_temporary (p, 4, "t3");
-      orc_program_add_temporary (p, 4, "t4");
-
-      orc_program_append_2 (p, "mergebw", 0, ORC_VAR_T1, ORC_VAR_S2, ORC_VAR_S3,
-          ORC_VAR_D1);
-      orc_program_append_2 (p, "mergebw", 1, ORC_VAR_T4, ORC_VAR_C1, ORC_VAR_S1,
-          ORC_VAR_D1);
-      orc_program_append_2 (p, "mergewl", 0, ORC_VAR_T3, ORC_VAR_T1, ORC_VAR_T1,
-          ORC_VAR_D1);
-      orc_program_append_2 (p, "mergewl", 1, ORC_VAR_D1, ORC_VAR_T4, ORC_VAR_T3,
-          ORC_VAR_D1);
-#endif
-
-      orc_program_compile (p);
-      c = orc_program_take_code (p);
-      orc_program_free (p);
-    }
-    p_inited = TRUE;
-    orc_once_mutex_unlock ();
-  }
-  ex->arrays[ORC_VAR_A2] = c;
-  ex->program = 0;
-
-  ex->n = n;
-  ORC_EXECUTOR_M (ex) = m;
-  ex->arrays[ORC_VAR_D1] = d1;
-  ex->params[ORC_VAR_D1] = d1_stride;
-  ex->arrays[ORC_VAR_S1] = (void *) s1;
-  ex->params[ORC_VAR_S1] = s1_stride;
-  ex->arrays[ORC_VAR_S2] = (void *) s2;
-  ex->params[ORC_VAR_S2] = s2_stride;
-  ex->arrays[ORC_VAR_S3] = (void *) s3;
-  ex->params[ORC_VAR_S3] = s3_stride;
-
-  func = c->exec;
-  func (ex);
-}
-#endif
-
-
-/* video_convert_orc_convert_Y444_YUY2 */
-#ifdef DISABLE_ORC
-void
-video_convert_orc_convert_Y444_YUY2 (guint8 * ORC_RESTRICT d1, int d1_stride,
-    const guint8 * ORC_RESTRICT s1, int s1_stride,
-    const guint8 * ORC_RESTRICT s2, int s2_stride,
-    const guint8 * ORC_RESTRICT s3, int s3_stride, int n, int m)
-{
-  int i;
-  int j;
-  orc_union32 *ORC_RESTRICT ptr0;
-  const orc_union16 *ORC_RESTRICT ptr4;
-  const orc_union16 *ORC_RESTRICT ptr5;
-  const orc_union16 *ORC_RESTRICT ptr6;
-  orc_union16 var36;
-  orc_union16 var37;
-  orc_union16 var38;
-  orc_union32 var39;
-  orc_union32 var40;
-  orc_union16 var41;
-  orc_union16 var42;
-  orc_union16 var43;
-
-  for (j = 0; j < m; j++) {
-    ptr0 = ORC_PTR_OFFSET (d1, d1_stride * j);
-    ptr4 = ORC_PTR_OFFSET (s1, s1_stride * j);
-    ptr5 = ORC_PTR_OFFSET (s2, s2_stride * j);
-    ptr6 = ORC_PTR_OFFSET (s3, s3_stride * j);
-
-
-    for (i = 0; i < n; i++) {
-      /* 0: loadw */
-      var36 = ptr5[i];
-      /* 1: loadw */
-      var37 = ptr6[i];
-      /* 2: mergebw */
-      {
-        orc_union16 _dest;
-        _dest.x2[0] = var36.x2[0];
-        _dest.x2[1] = var37.x2[0];
-        var40.x2[0] = _dest.i;
-      }
-      {
-        orc_union16 _dest;
-        _dest.x2[0] = var36.x2[1];
-        _dest.x2[1] = var37.x2[1];
-        var40.x2[1] = _dest.i;
-      }
-      /* 3: splitlw */
-      {
-        orc_union32 _src;
-        _src.i = var40.i;
-        var41.i = _src.x2[1];
-        var42.i = _src.x2[0];
-      }
-      /* 4: avgub */
-      var43.x2[0] =
-          ((orc_uint8) var41.x2[0] + (orc_uint8) var42.x2[0] + 1) >> 1;
-      var43.x2[1] =
-          ((orc_uint8) var41.x2[1] + (orc_uint8) var42.x2[1] + 1) >> 1;
-      /* 5: loadw */
-      var38 = ptr4[i];
-      /* 6: mergebw */
-      {
-        orc_union16 _dest;
-        _dest.x2[0] = var38.x2[0];
-        _dest.x2[1] = var43.x2[0];
-        var39.x2[0] = _dest.i;
-      }
-      {
-        orc_union16 _dest;
-        _dest.x2[0] = var38.x2[1];
-        _dest.x2[1] = var43.x2[1];
-        var39.x2[1] = _dest.i;
-      }
-      /* 7: storel */
-      ptr0[i] = var39;
-    }
-  }
-
-}
-
-#else
-static void
-_backup_video_convert_orc_convert_Y444_YUY2 (OrcExecutor * ORC_RESTRICT ex)
-{
-  int i;
-  int j;
-  int n = ex->n;
-  int m = ex->params[ORC_VAR_A1];
-  orc_union32 *ORC_RESTRICT ptr0;
-  const orc_union16 *ORC_RESTRICT ptr4;
-  const orc_union16 *ORC_RESTRICT ptr5;
-  const orc_union16 *ORC_RESTRICT ptr6;
-  orc_union16 var36;
-  orc_union16 var37;
-  orc_union16 var38;
-  orc_union32 var39;
-  orc_union32 var40;
-  orc_union16 var41;
-  orc_union16 var42;
-  orc_union16 var43;
-
-  for (j = 0; j < m; j++) {
-    ptr0 = ORC_PTR_OFFSET (ex->arrays[0], ex->params[0] * j);
-    ptr4 = ORC_PTR_OFFSET (ex->arrays[4], ex->params[4] * j);
-    ptr5 = ORC_PTR_OFFSET (ex->arrays[5], ex->params[5] * j);
-    ptr6 = ORC_PTR_OFFSET (ex->arrays[6], ex->params[6] * j);
-
-
-    for (i = 0; i < n; i++) {
-      /* 0: loadw */
-      var36 = ptr5[i];
-      /* 1: loadw */
-      var37 = ptr6[i];
-      /* 2: mergebw */
-      {
-        orc_union16 _dest;
-        _dest.x2[0] = var36.x2[0];
-        _dest.x2[1] = var37.x2[0];
-        var40.x2[0] = _dest.i;
-      }
-      {
-        orc_union16 _dest;
-        _dest.x2[0] = var36.x2[1];
-        _dest.x2[1] = var37.x2[1];
-        var40.x2[1] = _dest.i;
-      }
-      /* 3: splitlw */
-      {
-        orc_union32 _src;
-        _src.i = var40.i;
-        var41.i = _src.x2[1];
-        var42.i = _src.x2[0];
-      }
-      /* 4: avgub */
-      var43.x2[0] =
-          ((orc_uint8) var41.x2[0] + (orc_uint8) var42.x2[0] + 1) >> 1;
-      var43.x2[1] =
-          ((orc_uint8) var41.x2[1] + (orc_uint8) var42.x2[1] + 1) >> 1;
-      /* 5: loadw */
-      var38 = ptr4[i];
-      /* 6: mergebw */
-      {
-        orc_union16 _dest;
-        _dest.x2[0] = var38.x2[0];
-        _dest.x2[1] = var43.x2[0];
-        var39.x2[0] = _dest.i;
-      }
-      {
-        orc_union16 _dest;
-        _dest.x2[0] = var38.x2[1];
-        _dest.x2[1] = var43.x2[1];
-        var39.x2[1] = _dest.i;
-      }
-      /* 7: storel */
-      ptr0[i] = var39;
-    }
-  }
-
-}
-
-void
-video_convert_orc_convert_Y444_YUY2 (guint8 * ORC_RESTRICT d1, int d1_stride,
-    const guint8 * ORC_RESTRICT s1, int s1_stride,
-    const guint8 * ORC_RESTRICT s2, int s2_stride,
-    const guint8 * ORC_RESTRICT s3, int s3_stride, int n, int m)
-{
-  OrcExecutor _ex, *ex = &_ex;
-  static volatile int p_inited = 0;
-  static OrcCode *c = 0;
-  void (*func) (OrcExecutor *);
-
-  if (!p_inited) {
-    orc_once_mutex_lock ();
-    if (!p_inited) {
-      OrcProgram *p;
-
-#if 1
-      static const orc_uint8 bc[] = {
-        1, 7, 9, 35, 118, 105, 100, 101, 111, 95, 99, 111, 110, 118, 101, 114,
-        116, 95, 111, 114, 99, 95, 99, 111, 110, 118, 101, 114, 116, 95, 89, 52,
-        52, 52, 95, 89, 85, 89, 50, 11, 4, 4, 12, 2, 2, 12, 2, 2,
-        12, 2, 2, 20, 2, 20, 4, 20, 2, 20, 2, 21, 1, 196, 33, 5,
-        6, 198, 34, 35, 33, 21, 1, 39, 32, 34, 35, 21, 1, 196, 0, 4,
-        32, 2, 0,
-      };
-      p = orc_program_new_from_static_bytecode (bc);
-      orc_program_set_backup_function (p,
-          _backup_video_convert_orc_convert_Y444_YUY2);
-#else
-      p = orc_program_new ();
-      orc_program_set_2d (p);
-      orc_program_set_name (p, "video_convert_orc_convert_Y444_YUY2");
-      orc_program_set_backup_function (p,
-          _backup_video_convert_orc_convert_Y444_YUY2);
-      orc_program_add_destination (p, 4, "d1");
-      orc_program_add_source (p, 2, "s1");
-      orc_program_add_source (p, 2, "s2");
-      orc_program_add_source (p, 2, "s3");
-      orc_program_add_temporary (p, 2, "t1");
-      orc_program_add_temporary (p, 4, "t2");
-      orc_program_add_temporary (p, 2, "t3");
-      orc_program_add_temporary (p, 2, "t4");
-
-      orc_program_append_2 (p, "mergebw", 1, ORC_VAR_T2, ORC_VAR_S2, ORC_VAR_S3,
-          ORC_VAR_D1);
-      orc_program_append_2 (p, "splitlw", 0, ORC_VAR_T3, ORC_VAR_T4, ORC_VAR_T2,
-          ORC_VAR_D1);
-      orc_program_append_2 (p, "avgub", 1, ORC_VAR_T1, ORC_VAR_T3, ORC_VAR_T4,
-          ORC_VAR_D1);
-      orc_program_append_2 (p, "mergebw", 1, ORC_VAR_D1, ORC_VAR_S1, ORC_VAR_T1,
-          ORC_VAR_D1);
-#endif
-
-      orc_program_compile (p);
-      c = orc_program_take_code (p);
-      orc_program_free (p);
-    }
-    p_inited = TRUE;
-    orc_once_mutex_unlock ();
-  }
-  ex->arrays[ORC_VAR_A2] = c;
-  ex->program = 0;
-
-  ex->n = n;
-  ORC_EXECUTOR_M (ex) = m;
-  ex->arrays[ORC_VAR_D1] = d1;
-  ex->params[ORC_VAR_D1] = d1_stride;
-  ex->arrays[ORC_VAR_S1] = (void *) s1;
-  ex->params[ORC_VAR_S1] = s1_stride;
-  ex->arrays[ORC_VAR_S2] = (void *) s2;
-  ex->params[ORC_VAR_S2] = s2_stride;
-  ex->arrays[ORC_VAR_S3] = (void *) s3;
-  ex->params[ORC_VAR_S3] = s3_stride;
-
-  func = c->exec;
-  func (ex);
-}
-#endif
-
-
-/* video_convert_orc_convert_Y444_UYVY */
-#ifdef DISABLE_ORC
-void
-video_convert_orc_convert_Y444_UYVY (guint8 * ORC_RESTRICT d1, int d1_stride,
-    const guint8 * ORC_RESTRICT s1, int s1_stride,
-    const guint8 * ORC_RESTRICT s2, int s2_stride,
-    const guint8 * ORC_RESTRICT s3, int s3_stride, int n, int m)
-{
-  int i;
-  int j;
-  orc_union32 *ORC_RESTRICT ptr0;
-  const orc_union16 *ORC_RESTRICT ptr4;
-  const orc_union16 *ORC_RESTRICT ptr5;
-  const orc_union16 *ORC_RESTRICT ptr6;
-  orc_union16 var36;
-  orc_union16 var37;
-  orc_union16 var38;
-  orc_union32 var39;
-  orc_union32 var40;
-  orc_union16 var41;
-  orc_union16 var42;
-  orc_union16 var43;
-
-  for (j = 0; j < m; j++) {
-    ptr0 = ORC_PTR_OFFSET (d1, d1_stride * j);
-    ptr4 = ORC_PTR_OFFSET (s1, s1_stride * j);
-    ptr5 = ORC_PTR_OFFSET (s2, s2_stride * j);
-    ptr6 = ORC_PTR_OFFSET (s3, s3_stride * j);
-
-
-    for (i = 0; i < n; i++) {
-      /* 0: loadw */
-      var36 = ptr5[i];
-      /* 1: loadw */
-      var37 = ptr6[i];
-      /* 2: mergebw */
-      {
-        orc_union16 _dest;
-        _dest.x2[0] = var36.x2[0];
-        _dest.x2[1] = var37.x2[0];
-        var40.x2[0] = _dest.i;
-      }
-      {
-        orc_union16 _dest;
-        _dest.x2[0] = var36.x2[1];
-        _dest.x2[1] = var37.x2[1];
-        var40.x2[1] = _dest.i;
-      }
-      /* 3: splitlw */
-      {
-        orc_union32 _src;
-        _src.i = var40.i;
-        var41.i = _src.x2[1];
-        var42.i = _src.x2[0];
-      }
-      /* 4: avgub */
-      var43.x2[0] =
-          ((orc_uint8) var41.x2[0] + (orc_uint8) var42.x2[0] + 1) >> 1;
-      var43.x2[1] =
-          ((orc_uint8) var41.x2[1] + (orc_uint8) var42.x2[1] + 1) >> 1;
-      /* 5: loadw */
-      var38 = ptr4[i];
-      /* 6: mergebw */
-      {
-        orc_union16 _dest;
-        _dest.x2[0] = var43.x2[0];
-        _dest.x2[1] = var38.x2[0];
-        var39.x2[0] = _dest.i;
-      }
-      {
-        orc_union16 _dest;
-        _dest.x2[0] = var43.x2[1];
-        _dest.x2[1] = var38.x2[1];
-        var39.x2[1] = _dest.i;
-      }
-      /* 7: storel */
-      ptr0[i] = var39;
-    }
-  }
-
-}
-
-#else
-static void
-_backup_video_convert_orc_convert_Y444_UYVY (OrcExecutor * ORC_RESTRICT ex)
-{
-  int i;
-  int j;
-  int n = ex->n;
-  int m = ex->params[ORC_VAR_A1];
-  orc_union32 *ORC_RESTRICT ptr0;
-  const orc_union16 *ORC_RESTRICT ptr4;
-  const orc_union16 *ORC_RESTRICT ptr5;
-  const orc_union16 *ORC_RESTRICT ptr6;
-  orc_union16 var36;
-  orc_union16 var37;
-  orc_union16 var38;
-  orc_union32 var39;
-  orc_union32 var40;
-  orc_union16 var41;
-  orc_union16 var42;
-  orc_union16 var43;
-
-  for (j = 0; j < m; j++) {
-    ptr0 = ORC_PTR_OFFSET (ex->arrays[0], ex->params[0] * j);
-    ptr4 = ORC_PTR_OFFSET (ex->arrays[4], ex->params[4] * j);
-    ptr5 = ORC_PTR_OFFSET (ex->arrays[5], ex->params[5] * j);
-    ptr6 = ORC_PTR_OFFSET (ex->arrays[6], ex->params[6] * j);
-
-
-    for (i = 0; i < n; i++) {
-      /* 0: loadw */
-      var36 = ptr5[i];
-      /* 1: loadw */
-      var37 = ptr6[i];
-      /* 2: mergebw */
-      {
-        orc_union16 _dest;
-        _dest.x2[0] = var36.x2[0];
-        _dest.x2[1] = var37.x2[0];
-        var40.x2[0] = _dest.i;
-      }
-      {
-        orc_union16 _dest;
-        _dest.x2[0] = var36.x2[1];
-        _dest.x2[1] = var37.x2[1];
-        var40.x2[1] = _dest.i;
-      }
-      /* 3: splitlw */
-      {
-        orc_union32 _src;
-        _src.i = var40.i;
-        var41.i = _src.x2[1];
-        var42.i = _src.x2[0];
-      }
-      /* 4: avgub */
-      var43.x2[0] =
-          ((orc_uint8) var41.x2[0] + (orc_uint8) var42.x2[0] + 1) >> 1;
-      var43.x2[1] =
-          ((orc_uint8) var41.x2[1] + (orc_uint8) var42.x2[1] + 1) >> 1;
-      /* 5: loadw */
-      var38 = ptr4[i];
-      /* 6: mergebw */
-      {
-        orc_union16 _dest;
-        _dest.x2[0] = var43.x2[0];
-        _dest.x2[1] = var38.x2[0];
-        var39.x2[0] = _dest.i;
-      }
-      {
-        orc_union16 _dest;
-        _dest.x2[0] = var43.x2[1];
-        _dest.x2[1] = var38.x2[1];
-        var39.x2[1] = _dest.i;
-      }
-      /* 7: storel */
-      ptr0[i] = var39;
-    }
-  }
-
-}
-
-void
-video_convert_orc_convert_Y444_UYVY (guint8 * ORC_RESTRICT d1, int d1_stride,
-    const guint8 * ORC_RESTRICT s1, int s1_stride,
-    const guint8 * ORC_RESTRICT s2, int s2_stride,
-    const guint8 * ORC_RESTRICT s3, int s3_stride, int n, int m)
-{
-  OrcExecutor _ex, *ex = &_ex;
-  static volatile int p_inited = 0;
-  static OrcCode *c = 0;
-  void (*func) (OrcExecutor *);
-
-  if (!p_inited) {
-    orc_once_mutex_lock ();
-    if (!p_inited) {
-      OrcProgram *p;
-
-#if 1
-      static const orc_uint8 bc[] = {
-        1, 7, 9, 35, 118, 105, 100, 101, 111, 95, 99, 111, 110, 118, 101, 114,
-        116, 95, 111, 114, 99, 95, 99, 111, 110, 118, 101, 114, 116, 95, 89, 52,
-        52, 52, 95, 85, 89, 86, 89, 11, 4, 4, 12, 2, 2, 12, 2, 2,
-        12, 2, 2, 20, 2, 20, 4, 20, 2, 20, 2, 21, 1, 196, 33, 5,
-        6, 198, 34, 35, 33, 21, 1, 39, 32, 34, 35, 21, 1, 196, 0, 32,
-        4, 2, 0,
-      };
-      p = orc_program_new_from_static_bytecode (bc);
-      orc_program_set_backup_function (p,
-          _backup_video_convert_orc_convert_Y444_UYVY);
-#else
-      p = orc_program_new ();
-      orc_program_set_2d (p);
-      orc_program_set_name (p, "video_convert_orc_convert_Y444_UYVY");
-      orc_program_set_backup_function (p,
-          _backup_video_convert_orc_convert_Y444_UYVY);
-      orc_program_add_destination (p, 4, "d1");
-      orc_program_add_source (p, 2, "s1");
-      orc_program_add_source (p, 2, "s2");
-      orc_program_add_source (p, 2, "s3");
-      orc_program_add_temporary (p, 2, "t1");
-      orc_program_add_temporary (p, 4, "t2");
-      orc_program_add_temporary (p, 2, "t3");
-      orc_program_add_temporary (p, 2, "t4");
-
-      orc_program_append_2 (p, "mergebw", 1, ORC_VAR_T2, ORC_VAR_S2, ORC_VAR_S3,
-          ORC_VAR_D1);
-      orc_program_append_2 (p, "splitlw", 0, ORC_VAR_T3, ORC_VAR_T4, ORC_VAR_T2,
-          ORC_VAR_D1);
-      orc_program_append_2 (p, "avgub", 1, ORC_VAR_T1, ORC_VAR_T3, ORC_VAR_T4,
-          ORC_VAR_D1);
-      orc_program_append_2 (p, "mergebw", 1, ORC_VAR_D1, ORC_VAR_T1, ORC_VAR_S1,
-          ORC_VAR_D1);
-#endif
-
-      orc_program_compile (p);
-      c = orc_program_take_code (p);
-      orc_program_free (p);
-    }
-    p_inited = TRUE;
-    orc_once_mutex_unlock ();
-  }
-  ex->arrays[ORC_VAR_A2] = c;
-  ex->program = 0;
-
-  ex->n = n;
-  ORC_EXECUTOR_M (ex) = m;
-  ex->arrays[ORC_VAR_D1] = d1;
-  ex->params[ORC_VAR_D1] = d1_stride;
-  ex->arrays[ORC_VAR_S1] = (void *) s1;
-  ex->params[ORC_VAR_S1] = s1_stride;
-  ex->arrays[ORC_VAR_S2] = (void *) s2;
-  ex->params[ORC_VAR_S2] = s2_stride;
-  ex->arrays[ORC_VAR_S3] = (void *) s3;
-  ex->params[ORC_VAR_S3] = s3_stride;
-
-  func = c->exec;
-  func (ex);
-}
-#endif
-
-
-/* video_convert_orc_convert_Y444_AYUV */
-#ifdef DISABLE_ORC
-void
-video_convert_orc_convert_Y444_AYUV (guint8 * ORC_RESTRICT d1, int d1_stride,
-    const guint8 * ORC_RESTRICT s1, int s1_stride,
-    const guint8 * ORC_RESTRICT s2, int s2_stride,
-    const guint8 * ORC_RESTRICT s3, int s3_stride, int n, int m)
-{
-  int i;
-  int j;
-  orc_union32 *ORC_RESTRICT ptr0;
-  const orc_int8 *ORC_RESTRICT ptr4;
-  const orc_int8 *ORC_RESTRICT ptr5;
-  const orc_int8 *ORC_RESTRICT ptr6;
-  orc_int8 var34;
-  orc_int8 var35;
-#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
-  volatile orc_int8 var36;
-#else
-  orc_int8 var36;
-#endif
-  orc_int8 var37;
-  orc_union32 var38;
-  orc_union16 var39;
-  orc_union16 var40;
-
-  for (j = 0; j < m; j++) {
-    ptr0 = ORC_PTR_OFFSET (d1, d1_stride * j);
-    ptr4 = ORC_PTR_OFFSET (s1, s1_stride * j);
-    ptr5 = ORC_PTR_OFFSET (s2, s2_stride * j);
-    ptr6 = ORC_PTR_OFFSET (s3, s3_stride * j);
-
-    /* 3: loadpb */
-    var36 = (int) 0x000000ff;   /* 255 or 1.25987e-321f */
-
-    for (i = 0; i < n; i++) {
-      /* 0: loadb */
-      var34 = ptr5[i];
-      /* 1: loadb */
-      var35 = ptr6[i];
-      /* 2: mergebw */
-      {
-        orc_union16 _dest;
-        _dest.x2[0] = var34;
-        _dest.x2[1] = var35;
-        var39.i = _dest.i;
-      }
-      /* 4: loadb */
-      var37 = ptr4[i];
-      /* 5: mergebw */
-      {
-        orc_union16 _dest;
-        _dest.x2[0] = var36;
-        _dest.x2[1] = var37;
-        var40.i = _dest.i;
-      }
-      /* 6: mergewl */
-      {
-        orc_union32 _dest;
-        _dest.x2[0] = var40.i;
-        _dest.x2[1] = var39.i;
-        var38.i = _dest.i;
-      }
-      /* 7: storel */
-      ptr0[i] = var38;
-    }
-  }
-
-}
-
-#else
-static void
-_backup_video_convert_orc_convert_Y444_AYUV (OrcExecutor * ORC_RESTRICT ex)
-{
-  int i;
-  int j;
-  int n = ex->n;
-  int m = ex->params[ORC_VAR_A1];
-  orc_union32 *ORC_RESTRICT ptr0;
-  const orc_int8 *ORC_RESTRICT ptr4;
-  const orc_int8 *ORC_RESTRICT ptr5;
-  const orc_int8 *ORC_RESTRICT ptr6;
-  orc_int8 var34;
-  orc_int8 var35;
-#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
-  volatile orc_int8 var36;
-#else
-  orc_int8 var36;
-#endif
-  orc_int8 var37;
-  orc_union32 var38;
-  orc_union16 var39;
-  orc_union16 var40;
-
-  for (j = 0; j < m; j++) {
-    ptr0 = ORC_PTR_OFFSET (ex->arrays[0], ex->params[0] * j);
-    ptr4 = ORC_PTR_OFFSET (ex->arrays[4], ex->params[4] * j);
-    ptr5 = ORC_PTR_OFFSET (ex->arrays[5], ex->params[5] * j);
-    ptr6 = ORC_PTR_OFFSET (ex->arrays[6], ex->params[6] * j);
-
-    /* 3: loadpb */
-    var36 = (int) 0x000000ff;   /* 255 or 1.25987e-321f */
-
-    for (i = 0; i < n; i++) {
-      /* 0: loadb */
-      var34 = ptr5[i];
-      /* 1: loadb */
-      var35 = ptr6[i];
-      /* 2: mergebw */
-      {
-        orc_union16 _dest;
-        _dest.x2[0] = var34;
-        _dest.x2[1] = var35;
-        var39.i = _dest.i;
-      }
-      /* 4: loadb */
-      var37 = ptr4[i];
-      /* 5: mergebw */
-      {
-        orc_union16 _dest;
-        _dest.x2[0] = var36;
-        _dest.x2[1] = var37;
-        var40.i = _dest.i;
-      }
-      /* 6: mergewl */
-      {
-        orc_union32 _dest;
-        _dest.x2[0] = var40.i;
-        _dest.x2[1] = var39.i;
-        var38.i = _dest.i;
-      }
-      /* 7: storel */
-      ptr0[i] = var38;
-    }
-  }
-
-}
-
-void
-video_convert_orc_convert_Y444_AYUV (guint8 * ORC_RESTRICT d1, int d1_stride,
-    const guint8 * ORC_RESTRICT s1, int s1_stride,
-    const guint8 * ORC_RESTRICT s2, int s2_stride,
-    const guint8 * ORC_RESTRICT s3, int s3_stride, int n, int m)
-{
-  OrcExecutor _ex, *ex = &_ex;
-  static volatile int p_inited = 0;
-  static OrcCode *c = 0;
-  void (*func) (OrcExecutor *);
-
-  if (!p_inited) {
-    orc_once_mutex_lock ();
-    if (!p_inited) {
-      OrcProgram *p;
-
-#if 1
-      static const orc_uint8 bc[] = {
-        1, 7, 9, 35, 118, 105, 100, 101, 111, 95, 99, 111, 110, 118, 101, 114,
-        116, 95, 111, 114, 99, 95, 99, 111, 110, 118, 101, 114, 116, 95, 89, 52,
-        52, 52, 95, 65, 89, 85, 86, 11, 4, 4, 12, 1, 1, 12, 1, 1,
-        12, 1, 1, 14, 1, 255, 0, 0, 0, 20, 2, 20, 2, 196, 32, 5,
-        6, 196, 33, 16, 4, 195, 0, 33, 32, 2, 0,
-      };
-      p = orc_program_new_from_static_bytecode (bc);
-      orc_program_set_backup_function (p,
-          _backup_video_convert_orc_convert_Y444_AYUV);
-#else
-      p = orc_program_new ();
-      orc_program_set_2d (p);
-      orc_program_set_name (p, "video_convert_orc_convert_Y444_AYUV");
-      orc_program_set_backup_function (p,
-          _backup_video_convert_orc_convert_Y444_AYUV);
-      orc_program_add_destination (p, 4, "d1");
-      orc_program_add_source (p, 1, "s1");
-      orc_program_add_source (p, 1, "s2");
-      orc_program_add_source (p, 1, "s3");
-      orc_program_add_constant (p, 1, 0x000000ff, "c1");
-      orc_program_add_temporary (p, 2, "t1");
-      orc_program_add_temporary (p, 2, "t2");
-
-      orc_program_append_2 (p, "mergebw", 0, ORC_VAR_T1, ORC_VAR_S2, ORC_VAR_S3,
-          ORC_VAR_D1);
-      orc_program_append_2 (p, "mergebw", 0, ORC_VAR_T2, ORC_VAR_C1, ORC_VAR_S1,
-          ORC_VAR_D1);
-      orc_program_append_2 (p, "mergewl", 0, ORC_VAR_D1, ORC_VAR_T2, ORC_VAR_T1,
-          ORC_VAR_D1);
-#endif
-
-      orc_program_compile (p);
-      c = orc_program_take_code (p);
-      orc_program_free (p);
-    }
-    p_inited = TRUE;
-    orc_once_mutex_unlock ();
-  }
-  ex->arrays[ORC_VAR_A2] = c;
-  ex->program = 0;
-
-  ex->n = n;
-  ORC_EXECUTOR_M (ex) = m;
-  ex->arrays[ORC_VAR_D1] = d1;
-  ex->params[ORC_VAR_D1] = d1_stride;
-  ex->arrays[ORC_VAR_S1] = (void *) s1;
-  ex->params[ORC_VAR_S1] = s1_stride;
-  ex->arrays[ORC_VAR_S2] = (void *) s2;
-  ex->params[ORC_VAR_S2] = s2_stride;
-  ex->arrays[ORC_VAR_S3] = (void *) s3;
-  ex->params[ORC_VAR_S3] = s3_stride;
-
-  func = c->exec;
-  func (ex);
-}
-#endif
-
-
-/* video_convert_orc_convert_AYUV_ARGB */
-#ifdef DISABLE_ORC
-void
-video_convert_orc_convert_AYUV_ARGB (guint8 * ORC_RESTRICT d1, int d1_stride,
-    const guint8 * ORC_RESTRICT s1, int s1_stride, int p1, int p2, int p3,
-    int p4, int p5, int n, int m)
-{
-  int i;
-  int j;
-  orc_union32 *ORC_RESTRICT ptr0;
-  const orc_union32 *ORC_RESTRICT ptr4;
-  orc_union32 var46;
-#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
-  volatile orc_union32 var47;
-#else
-  orc_union32 var47;
-#endif
-  orc_union16 var48;
-  orc_union16 var49;
-  orc_union16 var50;
-  orc_union16 var51;
-  orc_union16 var52;
-  orc_union32 var53;
-  orc_union32 var54;
-  orc_union16 var55;
-  orc_union16 var56;
-  orc_int8 var57;
-  orc_int8 var58;
-  orc_int8 var59;
-  orc_int8 var60;
-  orc_union16 var61;
-  orc_union16 var62;
-  orc_union16 var63;
-  orc_union16 var64;
-  orc_union16 var65;
-  orc_union16 var66;
-  orc_union16 var67;
-  orc_union16 var68;
-  orc_union16 var69;
-  orc_union16 var70;
-  orc_union16 var71;
-  orc_union16 var72;
-  orc_int8 var73;
-  orc_int8 var74;
-  orc_int8 var75;
-  orc_union16 var76;
-  orc_union16 var77;
-  orc_union32 var78;
-
-  for (j = 0; j < m; j++) {
-    ptr0 = ORC_PTR_OFFSET (d1, d1_stride * j);
-    ptr4 = ORC_PTR_OFFSET (s1, s1_stride * j);
-
-    /* 1: loadpb */
-    var47.x4[0] = (int) 0x00000080;     /* 128 or 6.32404e-322f */
-    var47.x4[1] = (int) 0x00000080;     /* 128 or 6.32404e-322f */
-    var47.x4[2] = (int) 0x00000080;     /* 128 or 6.32404e-322f */
-    var47.x4[3] = (int) 0x00000080;     /* 128 or 6.32404e-322f */
-    /* 9: loadpw */
-    var48.i = p1;
-    /* 11: loadpw */
-    var49.i = p2;
-    /* 14: loadpw */
-    var50.i = p3;
-    /* 17: loadpw */
-    var51.i = p4;
-    /* 20: loadpw */
-    var52.i = p5;
-
-    for (i = 0; i < n; i++) {
-      /* 0: loadl */
-      var46 = ptr4[i];
-      /* 2: subb */
-      var54.x4[0] = var46.x4[0] - var47.x4[0];
-      var54.x4[1] = var46.x4[1] - var47.x4[1];
-      var54.x4[2] = var46.x4[2] - var47.x4[2];
-      var54.x4[3] = var46.x4[3] - var47.x4[3];
-      /* 3: splitlw */
-      {
-        orc_union32 _src;
-        _src.i = var54.i;
-        var55.i = _src.x2[1];
-        var56.i = _src.x2[0];
-      }
-      /* 4: splitwb */
-      {
-        orc_union16 _src;
-        _src.i = var56.i;
-        var57 = _src.x2[1];
-        var58 = _src.x2[0];
-      }
-      /* 5: splitwb */
-      {
-        orc_union16 _src;
-        _src.i = var55.i;
-        var59 = _src.x2[1];
-        var60 = _src.x2[0];
-      }
-      /* 6: splatbw */
-      var61.i = ((var57 & 0xff) << 8) | (var57 & 0xff);
-      /* 7: splatbw */
-      var62.i = ((var60 & 0xff) << 8) | (var60 & 0xff);
-      /* 8: splatbw */
-      var63.i = ((var59 & 0xff) << 8) | (var59 & 0xff);
-      /* 10: mulhsw */
-      var64.i = (var61.i * var48.i) >> 16;
-      /* 12: mulhsw */
-      var65.i = (var63.i * var49.i) >> 16;
-      /* 13: addssw */
-      var66.i = ORC_CLAMP_SW (var64.i + var65.i);
-      /* 15: mulhsw */
-      var67.i = (var62.i * var50.i) >> 16;
-      /* 16: addssw */
-      var68.i = ORC_CLAMP_SW (var64.i + var67.i);
-      /* 18: mulhsw */
-      var69.i = (var62.i * var51.i) >> 16;
-      /* 19: addssw */
-      var70.i = ORC_CLAMP_SW (var64.i + var69.i);
-      /* 21: mulhsw */
-      var71.i = (var63.i * var52.i) >> 16;
-      /* 22: addssw */
-      var72.i = ORC_CLAMP_SW (var70.i + var71.i);
-      /* 23: convssswb */
-      var73 = ORC_CLAMP_SB (var66.i);
-      /* 24: convssswb */
-      var74 = ORC_CLAMP_SB (var72.i);
-      /* 25: convssswb */
-      var75 = ORC_CLAMP_SB (var68.i);
-      /* 26: mergebw */
-      {
-        orc_union16 _dest;
-        _dest.x2[0] = var58;
-        _dest.x2[1] = var73;
-        var76.i = _dest.i;
-      }
-      /* 27: mergebw */
-      {
-        orc_union16 _dest;
-        _dest.x2[0] = var74;
-        _dest.x2[1] = var75;
-        var77.i = _dest.i;
-      }
-      /* 28: mergewl */
-      {
-        orc_union32 _dest;
-        _dest.x2[0] = var76.i;
-        _dest.x2[1] = var77.i;
-        var78.i = _dest.i;
-      }
-      /* 29: addb */
-      var53.x4[0] = var78.x4[0] + var47.x4[0];
-      var53.x4[1] = var78.x4[1] + var47.x4[1];
-      var53.x4[2] = var78.x4[2] + var47.x4[2];
-      var53.x4[3] = var78.x4[3] + var47.x4[3];
-      /* 30: storel */
-      ptr0[i] = var53;
-    }
-  }
-
-}
-
-#else
-static void
-_backup_video_convert_orc_convert_AYUV_ARGB (OrcExecutor * ORC_RESTRICT ex)
-{
-  int i;
-  int j;
-  int n = ex->n;
-  int m = ex->params[ORC_VAR_A1];
-  orc_union32 *ORC_RESTRICT ptr0;
-  const orc_union32 *ORC_RESTRICT ptr4;
-  orc_union32 var46;
-#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
-  volatile orc_union32 var47;
-#else
-  orc_union32 var47;
-#endif
-  orc_union16 var48;
-  orc_union16 var49;
-  orc_union16 var50;
-  orc_union16 var51;
-  orc_union16 var52;
-  orc_union32 var53;
-  orc_union32 var54;
-  orc_union16 var55;
-  orc_union16 var56;
-  orc_int8 var57;
-  orc_int8 var58;
-  orc_int8 var59;
-  orc_int8 var60;
-  orc_union16 var61;
-  orc_union16 var62;
-  orc_union16 var63;
-  orc_union16 var64;
-  orc_union16 var65;
-  orc_union16 var66;
-  orc_union16 var67;
-  orc_union16 var68;
-  orc_union16 var69;
-  orc_union16 var70;
-  orc_union16 var71;
-  orc_union16 var72;
-  orc_int8 var73;
-  orc_int8 var74;
-  orc_int8 var75;
-  orc_union16 var76;
-  orc_union16 var77;
-  orc_union32 var78;
-
-  for (j = 0; j < m; j++) {
-    ptr0 = ORC_PTR_OFFSET (ex->arrays[0], ex->params[0] * j);
-    ptr4 = ORC_PTR_OFFSET (ex->arrays[4], ex->params[4] * j);
-
-    /* 1: loadpb */
-    var47.x4[0] = (int) 0x00000080;     /* 128 or 6.32404e-322f */
-    var47.x4[1] = (int) 0x00000080;     /* 128 or 6.32404e-322f */
-    var47.x4[2] = (int) 0x00000080;     /* 128 or 6.32404e-322f */
-    var47.x4[3] = (int) 0x00000080;     /* 128 or 6.32404e-322f */
-    /* 9: loadpw */
-    var48.i = ex->params[24];
-    /* 11: loadpw */
-    var49.i = ex->params[25];
-    /* 14: loadpw */
-    var50.i = ex->params[26];
-    /* 17: loadpw */
-    var51.i = ex->params[27];
-    /* 20: loadpw */
-    var52.i = ex->params[28];
-
-    for (i = 0; i < n; i++) {
-      /* 0: loadl */
-      var46 = ptr4[i];
-      /* 2: subb */
-      var54.x4[0] = var46.x4[0] - var47.x4[0];
-      var54.x4[1] = var46.x4[1] - var47.x4[1];
-      var54.x4[2] = var46.x4[2] - var47.x4[2];
-      var54.x4[3] = var46.x4[3] - var47.x4[3];
-      /* 3: splitlw */
-      {
-        orc_union32 _src;
-        _src.i = var54.i;
-        var55.i = _src.x2[1];
-        var56.i = _src.x2[0];
-      }
-      /* 4: splitwb */
-      {
-        orc_union16 _src;
-        _src.i = var56.i;
-        var57 = _src.x2[1];
-        var58 = _src.x2[0];
-      }
-      /* 5: splitwb */
-      {
-        orc_union16 _src;
-        _src.i = var55.i;
-        var59 = _src.x2[1];
-        var60 = _src.x2[0];
-      }
-      /* 6: splatbw */
-      var61.i = ((var57 & 0xff) << 8) | (var57 & 0xff);
-      /* 7: splatbw */
-      var62.i = ((var60 & 0xff) << 8) | (var60 & 0xff);
-      /* 8: splatbw */
-      var63.i = ((var59 & 0xff) << 8) | (var59 & 0xff);
-      /* 10: mulhsw */
-      var64.i = (var61.i * var48.i) >> 16;
-      /* 12: mulhsw */
-      var65.i = (var63.i * var49.i) >> 16;
-      /* 13: addssw */
-      var66.i = ORC_CLAMP_SW (var64.i + var65.i);
-      /* 15: mulhsw */
-      var67.i = (var62.i * var50.i) >> 16;
-      /* 16: addssw */
-      var68.i = ORC_CLAMP_SW (var64.i + var67.i);
-      /* 18: mulhsw */
-      var69.i = (var62.i * var51.i) >> 16;
-      /* 19: addssw */
-      var70.i = ORC_CLAMP_SW (var64.i + var69.i);
-      /* 21: mulhsw */
-      var71.i = (var63.i * var52.i) >> 16;
-      /* 22: addssw */
-      var72.i = ORC_CLAMP_SW (var70.i + var71.i);
-      /* 23: convssswb */
-      var73 = ORC_CLAMP_SB (var66.i);
-      /* 24: convssswb */
-      var74 = ORC_CLAMP_SB (var72.i);
-      /* 25: convssswb */
-      var75 = ORC_CLAMP_SB (var68.i);
-      /* 26: mergebw */
-      {
-        orc_union16 _dest;
-        _dest.x2[0] = var58;
-        _dest.x2[1] = var73;
-        var76.i = _dest.i;
-      }
-      /* 27: mergebw */
-      {
-        orc_union16 _dest;
-        _dest.x2[0] = var74;
-        _dest.x2[1] = var75;
-        var77.i = _dest.i;
-      }
-      /* 28: mergewl */
-      {
-        orc_union32 _dest;
-        _dest.x2[0] = var76.i;
-        _dest.x2[1] = var77.i;
-        var78.i = _dest.i;
-      }
-      /* 29: addb */
-      var53.x4[0] = var78.x4[0] + var47.x4[0];
-      var53.x4[1] = var78.x4[1] + var47.x4[1];
-      var53.x4[2] = var78.x4[2] + var47.x4[2];
-      var53.x4[3] = var78.x4[3] + var47.x4[3];
-      /* 30: storel */
-      ptr0[i] = var53;
-    }
-  }
-
-}
-
-void
-video_convert_orc_convert_AYUV_ARGB (guint8 * ORC_RESTRICT d1, int d1_stride,
-    const guint8 * ORC_RESTRICT s1, int s1_stride, int p1, int p2, int p3,
-    int p4, int p5, int n, int m)
-{
-  OrcExecutor _ex, *ex = &_ex;
-  static volatile int p_inited = 0;
-  static OrcCode *c = 0;
-  void (*func) (OrcExecutor *);
-
-  if (!p_inited) {
-    orc_once_mutex_lock ();
-    if (!p_inited) {
-      OrcProgram *p;
-
-#if 1
-      static const orc_uint8 bc[] = {
-        1, 7, 9, 35, 118, 105, 100, 101, 111, 95, 99, 111, 110, 118, 101, 114,
-        116, 95, 111, 114, 99, 95, 99, 111, 110, 118, 101, 114, 116, 95, 65, 89,
-        85, 86, 95, 65, 82, 71, 66, 11, 4, 4, 12, 4, 4, 14, 1, 128,
-        0, 0, 0, 16, 2, 16, 2, 16, 2, 16, 2, 16, 2, 20, 1, 20,
-        1, 20, 1, 20, 1, 20, 2, 20, 2, 20, 2, 20, 2, 20, 2, 20,
-        2, 20, 1, 20, 1, 20, 1, 20, 4, 21, 2, 65, 45, 4, 16, 198,
-        38, 36, 45, 199, 33, 32, 36, 199, 35, 34, 38, 151, 36, 33, 151, 37,
-        34, 151, 38, 35, 90, 36, 36, 24, 90, 39, 38, 25, 71, 39, 36, 39,
-        90, 41, 37, 26, 71, 41, 36, 41, 90, 40, 37, 27, 71, 40, 36, 40,
-        90, 36, 38, 28, 71, 40, 40, 36, 159, 42, 39, 159, 43, 40, 159, 44,
-        41, 196, 39, 32, 42, 196, 41, 43, 44, 195, 45, 39, 41, 21, 2, 33,
-        0, 45, 16, 2, 0,
-      };
-      p = orc_program_new_from_static_bytecode (bc);
-      orc_program_set_backup_function (p,
-          _backup_video_convert_orc_convert_AYUV_ARGB);
-#else
-      p = orc_program_new ();
-      orc_program_set_2d (p);
-      orc_program_set_name (p, "video_convert_orc_convert_AYUV_ARGB");
-      orc_program_set_backup_function (p,
-          _backup_video_convert_orc_convert_AYUV_ARGB);
-      orc_program_add_destination (p, 4, "d1");
-      orc_program_add_source (p, 4, "s1");
-      orc_program_add_constant (p, 1, 0x00000080, "c1");
-      orc_program_add_parameter (p, 2, "p1");
-      orc_program_add_parameter (p, 2, "p2");
-      orc_program_add_parameter (p, 2, "p3");
-      orc_program_add_parameter (p, 2, "p4");
-      orc_program_add_parameter (p, 2, "p5");
-      orc_program_add_temporary (p, 1, "t1");
-      orc_program_add_temporary (p, 1, "t2");
-      orc_program_add_temporary (p, 1, "t3");
-      orc_program_add_temporary (p, 1, "t4");
-      orc_program_add_temporary (p, 2, "t5");
-      orc_program_add_temporary (p, 2, "t6");
-      orc_program_add_temporary (p, 2, "t7");
-      orc_program_add_temporary (p, 2, "t8");
-      orc_program_add_temporary (p, 2, "t9");
-      orc_program_add_temporary (p, 2, "t10");
-      orc_program_add_temporary (p, 1, "t11");
-      orc_program_add_temporary (p, 1, "t12");
-      orc_program_add_temporary (p, 1, "t13");
-      orc_program_add_temporary (p, 4, "t14");
-
-      orc_program_append_2 (p, "subb", 2, ORC_VAR_T14, ORC_VAR_S1, ORC_VAR_C1,
-          ORC_VAR_D1);
-      orc_program_append_2 (p, "splitlw", 0, ORC_VAR_T7, ORC_VAR_T5,
-          ORC_VAR_T14, ORC_VAR_D1);
-      orc_program_append_2 (p, "splitwb", 0, ORC_VAR_T2, ORC_VAR_T1, ORC_VAR_T5,
-          ORC_VAR_D1);
-      orc_program_append_2 (p, "splitwb", 0, ORC_VAR_T4, ORC_VAR_T3, ORC_VAR_T7,
-          ORC_VAR_D1);
-      orc_program_append_2 (p, "splatbw", 0, ORC_VAR_T5, ORC_VAR_T2, ORC_VAR_D1,
-          ORC_VAR_D1);
-      orc_program_append_2 (p, "splatbw", 0, ORC_VAR_T6, ORC_VAR_T3, ORC_VAR_D1,
-          ORC_VAR_D1);
-      orc_program_append_2 (p, "splatbw", 0, ORC_VAR_T7, ORC_VAR_T4, ORC_VAR_D1,
-          ORC_VAR_D1);
-      orc_program_append_2 (p, "mulhsw", 0, ORC_VAR_T5, ORC_VAR_T5, ORC_VAR_P1,
-          ORC_VAR_D1);
-      orc_program_append_2 (p, "mulhsw", 0, ORC_VAR_T8, ORC_VAR_T7, ORC_VAR_P2,
-          ORC_VAR_D1);
-      orc_program_append_2 (p, "addssw", 0, ORC_VAR_T8, ORC_VAR_T5, ORC_VAR_T8,
-          ORC_VAR_D1);
-      orc_program_append_2 (p, "mulhsw", 0, ORC_VAR_T10, ORC_VAR_T6, ORC_VAR_P3,
-          ORC_VAR_D1);
-      orc_program_append_2 (p, "addssw", 0, ORC_VAR_T10, ORC_VAR_T5,
-          ORC_VAR_T10, ORC_VAR_D1);
-      orc_program_append_2 (p, "mulhsw", 0, ORC_VAR_T9, ORC_VAR_T6, ORC_VAR_P4,
-          ORC_VAR_D1);
-      orc_program_append_2 (p, "addssw", 0, ORC_VAR_T9, ORC_VAR_T5, ORC_VAR_T9,
-          ORC_VAR_D1);
-      orc_program_append_2 (p, "mulhsw", 0, ORC_VAR_T5, ORC_VAR_T7, ORC_VAR_P5,
-          ORC_VAR_D1);
-      orc_program_append_2 (p, "addssw", 0, ORC_VAR_T9, ORC_VAR_T9, ORC_VAR_T5,
-          ORC_VAR_D1);
-      orc_program_append_2 (p, "convssswb", 0, ORC_VAR_T11, ORC_VAR_T8,
-          ORC_VAR_D1, ORC_VAR_D1);
-      orc_program_append_2 (p, "convssswb", 0, ORC_VAR_T12, ORC_VAR_T9,
-          ORC_VAR_D1, ORC_VAR_D1);
-      orc_program_append_2 (p, "convssswb", 0, ORC_VAR_T13, ORC_VAR_T10,
-          ORC_VAR_D1, ORC_VAR_D1);
-      orc_program_append_2 (p, "mergebw", 0, ORC_VAR_T8, ORC_VAR_T1,
-          ORC_VAR_T11, ORC_VAR_D1);
-      orc_program_append_2 (p, "mergebw", 0, ORC_VAR_T10, ORC_VAR_T12,
-          ORC_VAR_T13, ORC_VAR_D1);
-      orc_program_append_2 (p, "mergewl", 0, ORC_VAR_T14, ORC_VAR_T8,
-          ORC_VAR_T10, ORC_VAR_D1);
-      orc_program_append_2 (p, "addb", 2, ORC_VAR_D1, ORC_VAR_T14, ORC_VAR_C1,
-          ORC_VAR_D1);
-#endif
-
-      orc_program_compile (p);
-      c = orc_program_take_code (p);
-      orc_program_free (p);
-    }
-    p_inited = TRUE;
-    orc_once_mutex_unlock ();
-  }
-  ex->arrays[ORC_VAR_A2] = c;
-  ex->program = 0;
-
-  ex->n = n;
-  ORC_EXECUTOR_M (ex) = m;
-  ex->arrays[ORC_VAR_D1] = d1;
-  ex->params[ORC_VAR_D1] = d1_stride;
-  ex->arrays[ORC_VAR_S1] = (void *) s1;
-  ex->params[ORC_VAR_S1] = s1_stride;
-  ex->params[ORC_VAR_P1] = p1;
-  ex->params[ORC_VAR_P2] = p2;
-  ex->params[ORC_VAR_P3] = p3;
-  ex->params[ORC_VAR_P4] = p4;
-  ex->params[ORC_VAR_P5] = p5;
-
-  func = c->exec;
-  func (ex);
-}
-#endif
-
-
-/* video_convert_orc_convert_AYUV_BGRA */
-#ifdef DISABLE_ORC
-void
-video_convert_orc_convert_AYUV_BGRA (guint8 * ORC_RESTRICT d1, int d1_stride,
-    const guint8 * ORC_RESTRICT s1, int s1_stride, int p1, int p2, int p3,
-    int p4, int p5, int n, int m)
-{
-  int i;
-  int j;
-  orc_union32 *ORC_RESTRICT ptr0;
-  const orc_union32 *ORC_RESTRICT ptr4;
-  orc_union32 var46;
-#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
-  volatile orc_union32 var47;
-#else
-  orc_union32 var47;
-#endif
-  orc_union16 var48;
-  orc_union16 var49;
-  orc_union16 var50;
-  orc_union16 var51;
-  orc_union16 var52;
-  orc_union32 var53;
-  orc_union32 var54;
-  orc_union16 var55;
-  orc_union16 var56;
-  orc_int8 var57;
-  orc_int8 var58;
-  orc_int8 var59;
-  orc_int8 var60;
-  orc_union16 var61;
-  orc_union16 var62;
-  orc_union16 var63;
-  orc_union16 var64;
-  orc_union16 var65;
-  orc_union16 var66;
-  orc_union16 var67;
-  orc_union16 var68;
-  orc_union16 var69;
-  orc_union16 var70;
-  orc_union16 var71;
-  orc_union16 var72;
-  orc_int8 var73;
-  orc_int8 var74;
-  orc_int8 var75;
-  orc_union16 var76;
-  orc_union16 var77;
-  orc_union32 var78;
-
-  for (j = 0; j < m; j++) {
-    ptr0 = ORC_PTR_OFFSET (d1, d1_stride * j);
-    ptr4 = ORC_PTR_OFFSET (s1, s1_stride * j);
-
-    /* 1: loadpb */
-    var47.x4[0] = (int) 0x00000080;     /* 128 or 6.32404e-322f */
-    var47.x4[1] = (int) 0x00000080;     /* 128 or 6.32404e-322f */
-    var47.x4[2] = (int) 0x00000080;     /* 128 or 6.32404e-322f */
-    var47.x4[3] = (int) 0x00000080;     /* 128 or 6.32404e-322f */
-    /* 9: loadpw */
-    var48.i = p1;
-    /* 11: loadpw */
-    var49.i = p2;
-    /* 14: loadpw */
-    var50.i = p3;
-    /* 17: loadpw */
-    var51.i = p4;
-    /* 20: loadpw */
-    var52.i = p5;
-
-    for (i = 0; i < n; i++) {
-      /* 0: loadl */
-      var46 = ptr4[i];
-      /* 2: subb */
-      var54.x4[0] = var46.x4[0] - var47.x4[0];
-      var54.x4[1] = var46.x4[1] - var47.x4[1];
-      var54.x4[2] = var46.x4[2] - var47.x4[2];
-      var54.x4[3] = var46.x4[3] - var47.x4[3];
-      /* 3: splitlw */
-      {
-        orc_union32 _src;
-        _src.i = var54.i;
-        var55.i = _src.x2[1];
-        var56.i = _src.x2[0];
-      }
-      /* 4: splitwb */
-      {
-        orc_union16 _src;
-        _src.i = var56.i;
-        var57 = _src.x2[1];
-        var58 = _src.x2[0];
-      }
-      /* 5: splitwb */
-      {
-        orc_union16 _src;
-        _src.i = var55.i;
-        var59 = _src.x2[1];
-        var60 = _src.x2[0];
-      }
-      /* 6: splatbw */
-      var61.i = ((var57 & 0xff) << 8) | (var57 & 0xff);
-      /* 7: splatbw */
-      var62.i = ((var60 & 0xff) << 8) | (var60 & 0xff);
-      /* 8: splatbw */
-      var63.i = ((var59 & 0xff) << 8) | (var59 & 0xff);
-      /* 10: mulhsw */
-      var64.i = (var61.i * var48.i) >> 16;
-      /* 12: mulhsw */
-      var65.i = (var63.i * var49.i) >> 16;
-      /* 13: addssw */
-      var66.i = ORC_CLAMP_SW (var64.i + var65.i);
-      /* 15: mulhsw */
-      var67.i = (var62.i * var50.i) >> 16;
-      /* 16: addssw */
-      var68.i = ORC_CLAMP_SW (var64.i + var67.i);
-      /* 18: mulhsw */
-      var69.i = (var62.i * var51.i) >> 16;
-      /* 19: addssw */
-      var70.i = ORC_CLAMP_SW (var64.i + var69.i);
-      /* 21: mulhsw */
-      var71.i = (var63.i * var52.i) >> 16;
-      /* 22: addssw */
-      var72.i = ORC_CLAMP_SW (var70.i + var71.i);
-      /* 23: convssswb */
-      var73 = ORC_CLAMP_SB (var66.i);
-      /* 24: convssswb */
-      var74 = ORC_CLAMP_SB (var72.i);
-      /* 25: convssswb */
-      var75 = ORC_CLAMP_SB (var68.i);
-      /* 26: mergebw */
-      {
-        orc_union16 _dest;
-        _dest.x2[0] = var75;
-        _dest.x2[1] = var74;
-        var76.i = _dest.i;
-      }
-      /* 27: mergebw */
-      {
-        orc_union16 _dest;
-        _dest.x2[0] = var73;
-        _dest.x2[1] = var58;
-        var77.i = _dest.i;
-      }
-      /* 28: mergewl */
-      {
-        orc_union32 _dest;
-        _dest.x2[0] = var76.i;
-        _dest.x2[1] = var77.i;
-        var78.i = _dest.i;
-      }
-      /* 29: addb */
-      var53.x4[0] = var78.x4[0] + var47.x4[0];
-      var53.x4[1] = var78.x4[1] + var47.x4[1];
-      var53.x4[2] = var78.x4[2] + var47.x4[2];
-      var53.x4[3] = var78.x4[3] + var47.x4[3];
-      /* 30: storel */
-      ptr0[i] = var53;
-    }
-  }
-
-}
-
-#else
-static void
-_backup_video_convert_orc_convert_AYUV_BGRA (OrcExecutor * ORC_RESTRICT ex)
-{
-  int i;
-  int j;
-  int n = ex->n;
-  int m = ex->params[ORC_VAR_A1];
-  orc_union32 *ORC_RESTRICT ptr0;
-  const orc_union32 *ORC_RESTRICT ptr4;
-  orc_union32 var46;
-#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
-  volatile orc_union32 var47;
-#else
-  orc_union32 var47;
-#endif
-  orc_union16 var48;
-  orc_union16 var49;
-  orc_union16 var50;
-  orc_union16 var51;
-  orc_union16 var52;
-  orc_union32 var53;
-  orc_union32 var54;
-  orc_union16 var55;
-  orc_union16 var56;
-  orc_int8 var57;
-  orc_int8 var58;
-  orc_int8 var59;
-  orc_int8 var60;
-  orc_union16 var61;
-  orc_union16 var62;
-  orc_union16 var63;
-  orc_union16 var64;
-  orc_union16 var65;
-  orc_union16 var66;
-  orc_union16 var67;
-  orc_union16 var68;
-  orc_union16 var69;
-  orc_union16 var70;
-  orc_union16 var71;
-  orc_union16 var72;
-  orc_int8 var73;
-  orc_int8 var74;
-  orc_int8 var75;
-  orc_union16 var76;
-  orc_union16 var77;
-  orc_union32 var78;
-
-  for (j = 0; j < m; j++) {
-    ptr0 = ORC_PTR_OFFSET (ex->arrays[0], ex->params[0] * j);
-    ptr4 = ORC_PTR_OFFSET (ex->arrays[4], ex->params[4] * j);
-
-    /* 1: loadpb */
-    var47.x4[0] = (int) 0x00000080;     /* 128 or 6.32404e-322f */
-    var47.x4[1] = (int) 0x00000080;     /* 128 or 6.32404e-322f */
-    var47.x4[2] = (int) 0x00000080;     /* 128 or 6.32404e-322f */
-    var47.x4[3] = (int) 0x00000080;     /* 128 or 6.32404e-322f */
-    /* 9: loadpw */
-    var48.i = ex->params[24];
-    /* 11: loadpw */
-    var49.i = ex->params[25];
-    /* 14: loadpw */
-    var50.i = ex->params[26];
-    /* 17: loadpw */
-    var51.i = ex->params[27];
-    /* 20: loadpw */
-    var52.i = ex->params[28];
-
-    for (i = 0; i < n; i++) {
-      /* 0: loadl */
-      var46 = ptr4[i];
-      /* 2: subb */
-      var54.x4[0] = var46.x4[0] - var47.x4[0];
-      var54.x4[1] = var46.x4[1] - var47.x4[1];
-      var54.x4[2] = var46.x4[2] - var47.x4[2];
-      var54.x4[3] = var46.x4[3] - var47.x4[3];
-      /* 3: splitlw */
-      {
-        orc_union32 _src;
-        _src.i = var54.i;
-        var55.i = _src.x2[1];
-        var56.i = _src.x2[0];
-      }
-      /* 4: splitwb */
-      {
-        orc_union16 _src;
-        _src.i = var56.i;
-        var57 = _src.x2[1];
-        var58 = _src.x2[0];
-      }
-      /* 5: splitwb */
-      {
-        orc_union16 _src;
-        _src.i = var55.i;
-        var59 = _src.x2[1];
-        var60 = _src.x2[0];
-      }
-      /* 6: splatbw */
-      var61.i = ((var57 & 0xff) << 8) | (var57 & 0xff);
-      /* 7: splatbw */
-      var62.i = ((var60 & 0xff) << 8) | (var60 & 0xff);
-      /* 8: splatbw */
-      var63.i = ((var59 & 0xff) << 8) | (var59 & 0xff);
-      /* 10: mulhsw */
-      var64.i = (var61.i * var48.i) >> 16;
-      /* 12: mulhsw */
-      var65.i = (var63.i * var49.i) >> 16;
-      /* 13: addssw */
-      var66.i = ORC_CLAMP_SW (var64.i + var65.i);
-      /* 15: mulhsw */
-      var67.i = (var62.i * var50.i) >> 16;
-      /* 16: addssw */
-      var68.i = ORC_CLAMP_SW (var64.i + var67.i);
-      /* 18: mulhsw */
-      var69.i = (var62.i * var51.i) >> 16;
-      /* 19: addssw */
-      var70.i = ORC_CLAMP_SW (var64.i + var69.i);
-      /* 21: mulhsw */
-      var71.i = (var63.i * var52.i) >> 16;
-      /* 22: addssw */
-      var72.i = ORC_CLAMP_SW (var70.i + var71.i);
-      /* 23: convssswb */
-      var73 = ORC_CLAMP_SB (var66.i);
-      /* 24: convssswb */
-      var74 = ORC_CLAMP_SB (var72.i);
-      /* 25: convssswb */
-      var75 = ORC_CLAMP_SB (var68.i);
-      /* 26: mergebw */
-      {
-        orc_union16 _dest;
-        _dest.x2[0] = var75;
-        _dest.x2[1] = var74;
-        var76.i = _dest.i;
-      }
-      /* 27: mergebw */
-      {
-        orc_union16 _dest;
-        _dest.x2[0] = var73;
-        _dest.x2[1] = var58;
-        var77.i = _dest.i;
-      }
-      /* 28: mergewl */
-      {
-        orc_union32 _dest;
-        _dest.x2[0] = var76.i;
-        _dest.x2[1] = var77.i;
-        var78.i = _dest.i;
-      }
-      /* 29: addb */
-      var53.x4[0] = var78.x4[0] + var47.x4[0];
-      var53.x4[1] = var78.x4[1] + var47.x4[1];
-      var53.x4[2] = var78.x4[2] + var47.x4[2];
-      var53.x4[3] = var78.x4[3] + var47.x4[3];
-      /* 30: storel */
-      ptr0[i] = var53;
-    }
-  }
-
-}
-
-void
-video_convert_orc_convert_AYUV_BGRA (guint8 * ORC_RESTRICT d1, int d1_stride,
-    const guint8 * ORC_RESTRICT s1, int s1_stride, int p1, int p2, int p3,
-    int p4, int p5, int n, int m)
-{
-  OrcExecutor _ex, *ex = &_ex;
-  static volatile int p_inited = 0;
-  static OrcCode *c = 0;
-  void (*func) (OrcExecutor *);
-
-  if (!p_inited) {
-    orc_once_mutex_lock ();
-    if (!p_inited) {
-      OrcProgram *p;
-
-#if 1
-      static const orc_uint8 bc[] = {
-        1, 7, 9, 35, 118, 105, 100, 101, 111, 95, 99, 111, 110, 118, 101, 114,
-        116, 95, 111, 114, 99, 95, 99, 111, 110, 118, 101, 114, 116, 95, 65, 89,
-        85, 86, 95, 66, 71, 82, 65, 11, 4, 4, 12, 4, 4, 14, 1, 128,
-        0, 0, 0, 16, 2, 16, 2, 16, 2, 16, 2, 16, 2, 20, 1, 20,
-        1, 20, 1, 20, 1, 20, 2, 20, 2, 20, 2, 20, 2, 20, 2, 20,
-        2, 20, 1, 20, 1, 20, 1, 20, 4, 21, 2, 65, 45, 4, 16, 198,
-        38, 36, 45, 199, 33, 32, 36, 199, 35, 34, 38, 151, 36, 33, 151, 37,
-        34, 151, 38, 35, 90, 36, 36, 24, 90, 39, 38, 25, 71, 39, 36, 39,
-        90, 41, 37, 26, 71, 41, 36, 41, 90, 40, 37, 27, 71, 40, 36, 40,
-        90, 36, 38, 28, 71, 40, 40, 36, 159, 42, 39, 159, 43, 40, 159, 44,
-        41, 196, 41, 44, 43, 196, 39, 42, 32, 195, 45, 41, 39, 21, 2, 33,
-        0, 45, 16, 2, 0,
-      };
-      p = orc_program_new_from_static_bytecode (bc);
-      orc_program_set_backup_function (p,
-          _backup_video_convert_orc_convert_AYUV_BGRA);
-#else
-      p = orc_program_new ();
-      orc_program_set_2d (p);
-      orc_program_set_name (p, "video_convert_orc_convert_AYUV_BGRA");
-      orc_program_set_backup_function (p,
-          _backup_video_convert_orc_convert_AYUV_BGRA);
-      orc_program_add_destination (p, 4, "d1");
-      orc_program_add_source (p, 4, "s1");
-      orc_program_add_constant (p, 1, 0x00000080, "c1");
-      orc_program_add_parameter (p, 2, "p1");
-      orc_program_add_parameter (p, 2, "p2");
-      orc_program_add_parameter (p, 2, "p3");
-      orc_program_add_parameter (p, 2, "p4");
-      orc_program_add_parameter (p, 2, "p5");
-      orc_program_add_temporary (p, 1, "t1");
-      orc_program_add_temporary (p, 1, "t2");
-      orc_program_add_temporary (p, 1, "t3");
-      orc_program_add_temporary (p, 1, "t4");
-      orc_program_add_temporary (p, 2, "t5");
-      orc_program_add_temporary (p, 2, "t6");
-      orc_program_add_temporary (p, 2, "t7");
-      orc_program_add_temporary (p, 2, "t8");
-      orc_program_add_temporary (p, 2, "t9");
-      orc_program_add_temporary (p, 2, "t10");
-      orc_program_add_temporary (p, 1, "t11");
-      orc_program_add_temporary (p, 1, "t12");
-      orc_program_add_temporary (p, 1, "t13");
-      orc_program_add_temporary (p, 4, "t14");
-
-      orc_program_append_2 (p, "subb", 2, ORC_VAR_T14, ORC_VAR_S1, ORC_VAR_C1,
-          ORC_VAR_D1);
-      orc_program_append_2 (p, "splitlw", 0, ORC_VAR_T7, ORC_VAR_T5,
-          ORC_VAR_T14, ORC_VAR_D1);
-      orc_program_append_2 (p, "splitwb", 0, ORC_VAR_T2, ORC_VAR_T1, ORC_VAR_T5,
-          ORC_VAR_D1);
-      orc_program_append_2 (p, "splitwb", 0, ORC_VAR_T4, ORC_VAR_T3, ORC_VAR_T7,
-          ORC_VAR_D1);
-      orc_program_append_2 (p, "splatbw", 0, ORC_VAR_T5, ORC_VAR_T2, ORC_VAR_D1,
-          ORC_VAR_D1);
-      orc_program_append_2 (p, "splatbw", 0, ORC_VAR_T6, ORC_VAR_T3, ORC_VAR_D1,
-          ORC_VAR_D1);
-      orc_program_append_2 (p, "splatbw", 0, ORC_VAR_T7, ORC_VAR_T4, ORC_VAR_D1,
-          ORC_VAR_D1);
-      orc_program_append_2 (p, "mulhsw", 0, ORC_VAR_T5, ORC_VAR_T5, ORC_VAR_P1,
-          ORC_VAR_D1);
-      orc_program_append_2 (p, "mulhsw", 0, ORC_VAR_T8, ORC_VAR_T7, ORC_VAR_P2,
-          ORC_VAR_D1);
-      orc_program_append_2 (p, "addssw", 0, ORC_VAR_T8, ORC_VAR_T5, ORC_VAR_T8,
-          ORC_VAR_D1);
-      orc_program_append_2 (p, "mulhsw", 0, ORC_VAR_T10, ORC_VAR_T6, ORC_VAR_P3,
-          ORC_VAR_D1);
-      orc_program_append_2 (p, "addssw", 0, ORC_VAR_T10, ORC_VAR_T5,
-          ORC_VAR_T10, ORC_VAR_D1);
-      orc_program_append_2 (p, "mulhsw", 0, ORC_VAR_T9, ORC_VAR_T6, ORC_VAR_P4,
-          ORC_VAR_D1);
-      orc_program_append_2 (p, "addssw", 0, ORC_VAR_T9, ORC_VAR_T5, ORC_VAR_T9,
-          ORC_VAR_D1);
-      orc_program_append_2 (p, "mulhsw", 0, ORC_VAR_T5, ORC_VAR_T7, ORC_VAR_P5,
-          ORC_VAR_D1);
-      orc_program_append_2 (p, "addssw", 0, ORC_VAR_T9, ORC_VAR_T9, ORC_VAR_T5,
-          ORC_VAR_D1);
-      orc_program_append_2 (p, "convssswb", 0, ORC_VAR_T11, ORC_VAR_T8,
-          ORC_VAR_D1, ORC_VAR_D1);
-      orc_program_append_2 (p, "convssswb", 0, ORC_VAR_T12, ORC_VAR_T9,
-          ORC_VAR_D1, ORC_VAR_D1);
-      orc_program_append_2 (p, "convssswb", 0, ORC_VAR_T13, ORC_VAR_T10,
-          ORC_VAR_D1, ORC_VAR_D1);
-      orc_program_append_2 (p, "mergebw", 0, ORC_VAR_T10, ORC_VAR_T13,
-          ORC_VAR_T12, ORC_VAR_D1);
-      orc_program_append_2 (p, "mergebw", 0, ORC_VAR_T8, ORC_VAR_T11,
-          ORC_VAR_T1, ORC_VAR_D1);
-      orc_program_append_2 (p, "mergewl", 0, ORC_VAR_T14, ORC_VAR_T10,
-          ORC_VAR_T8, ORC_VAR_D1);
-      orc_program_append_2 (p, "addb", 2, ORC_VAR_D1, ORC_VAR_T14, ORC_VAR_C1,
-          ORC_VAR_D1);
-#endif
-
-      orc_program_compile (p);
-      c = orc_program_take_code (p);
-      orc_program_free (p);
-    }
-    p_inited = TRUE;
-    orc_once_mutex_unlock ();
-  }
-  ex->arrays[ORC_VAR_A2] = c;
-  ex->program = 0;
-
-  ex->n = n;
-  ORC_EXECUTOR_M (ex) = m;
-  ex->arrays[ORC_VAR_D1] = d1;
-  ex->params[ORC_VAR_D1] = d1_stride;
-  ex->arrays[ORC_VAR_S1] = (void *) s1;
-  ex->params[ORC_VAR_S1] = s1_stride;
-  ex->params[ORC_VAR_P1] = p1;
-  ex->params[ORC_VAR_P2] = p2;
-  ex->params[ORC_VAR_P3] = p3;
-  ex->params[ORC_VAR_P4] = p4;
-  ex->params[ORC_VAR_P5] = p5;
-
-  func = c->exec;
-  func (ex);
-}
-#endif
-
-
-/* video_convert_orc_convert_AYUV_ABGR */
-#ifdef DISABLE_ORC
-void
-video_convert_orc_convert_AYUV_ABGR (guint8 * ORC_RESTRICT d1, int d1_stride,
-    const guint8 * ORC_RESTRICT s1, int s1_stride, int p1, int p2, int p3,
-    int p4, int p5, int n, int m)
-{
-  int i;
-  int j;
-  orc_union32 *ORC_RESTRICT ptr0;
-  const orc_union32 *ORC_RESTRICT ptr4;
-  orc_union32 var46;
-#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
-  volatile orc_union32 var47;
-#else
-  orc_union32 var47;
-#endif
-  orc_union16 var48;
-  orc_union16 var49;
-  orc_union16 var50;
-  orc_union16 var51;
-  orc_union16 var52;
-  orc_union32 var53;
-  orc_union32 var54;
-  orc_union16 var55;
-  orc_union16 var56;
-  orc_int8 var57;
-  orc_int8 var58;
-  orc_int8 var59;
-  orc_int8 var60;
-  orc_union16 var61;
-  orc_union16 var62;
-  orc_union16 var63;
-  orc_union16 var64;
-  orc_union16 var65;
-  orc_union16 var66;
-  orc_union16 var67;
-  orc_union16 var68;
-  orc_union16 var69;
-  orc_union16 var70;
-  orc_union16 var71;
-  orc_union16 var72;
-  orc_int8 var73;
-  orc_int8 var74;
-  orc_int8 var75;
-  orc_union16 var76;
-  orc_union16 var77;
-  orc_union32 var78;
-
-  for (j = 0; j < m; j++) {
-    ptr0 = ORC_PTR_OFFSET (d1, d1_stride * j);
-    ptr4 = ORC_PTR_OFFSET (s1, s1_stride * j);
-
-    /* 1: loadpb */
-    var47.x4[0] = (int) 0x00000080;     /* 128 or 6.32404e-322f */
-    var47.x4[1] = (int) 0x00000080;     /* 128 or 6.32404e-322f */
-    var47.x4[2] = (int) 0x00000080;     /* 128 or 6.32404e-322f */
-    var47.x4[3] = (int) 0x00000080;     /* 128 or 6.32404e-322f */
-    /* 9: loadpw */
-    var48.i = p1;
-    /* 11: loadpw */
-    var49.i = p2;
-    /* 14: loadpw */
-    var50.i = p3;
-    /* 17: loadpw */
-    var51.i = p4;
-    /* 20: loadpw */
-    var52.i = p5;
-
-    for (i = 0; i < n; i++) {
-      /* 0: loadl */
-      var46 = ptr4[i];
-      /* 2: subb */
-      var54.x4[0] = var46.x4[0] - var47.x4[0];
-      var54.x4[1] = var46.x4[1] - var47.x4[1];
-      var54.x4[2] = var46.x4[2] - var47.x4[2];
-      var54.x4[3] = var46.x4[3] - var47.x4[3];
-      /* 3: splitlw */
-      {
-        orc_union32 _src;
-        _src.i = var54.i;
-        var55.i = _src.x2[1];
-        var56.i = _src.x2[0];
-      }
-      /* 4: splitwb */
-      {
-        orc_union16 _src;
-        _src.i = var56.i;
-        var57 = _src.x2[1];
-        var58 = _src.x2[0];
-      }
-      /* 5: splitwb */
-      {
-        orc_union16 _src;
-        _src.i = var55.i;
-        var59 = _src.x2[1];
-        var60 = _src.x2[0];
-      }
-      /* 6: splatbw */
-      var61.i = ((var57 & 0xff) << 8) | (var57 & 0xff);
-      /* 7: splatbw */
-      var62.i = ((var60 & 0xff) << 8) | (var60 & 0xff);
-      /* 8: splatbw */
-      var63.i = ((var59 & 0xff) << 8) | (var59 & 0xff);
-      /* 10: mulhsw */
-      var64.i = (var61.i * var48.i) >> 16;
-      /* 12: mulhsw */
-      var65.i = (var63.i * var49.i) >> 16;
-      /* 13: addssw */
-      var66.i = ORC_CLAMP_SW (var64.i + var65.i);
-      /* 15: mulhsw */
-      var67.i = (var62.i * var50.i) >> 16;
-      /* 16: addssw */
-      var68.i = ORC_CLAMP_SW (var64.i + var67.i);
-      /* 18: mulhsw */
-      var69.i = (var62.i * var51.i) >> 16;
-      /* 19: addssw */
-      var70.i = ORC_CLAMP_SW (var64.i + var69.i);
-      /* 21: mulhsw */
-      var71.i = (var63.i * var52.i) >> 16;
-      /* 22: addssw */
-      var72.i = ORC_CLAMP_SW (var70.i + var71.i);
-      /* 23: convssswb */
-      var73 = ORC_CLAMP_SB (var66.i);
-      /* 24: convssswb */
-      var74 = ORC_CLAMP_SB (var72.i);
-      /* 25: convssswb */
-      var75 = ORC_CLAMP_SB (var68.i);
-      /* 26: mergebw */
-      {
-        orc_union16 _dest;
-        _dest.x2[0] = var58;
-        _dest.x2[1] = var75;
-        var76.i = _dest.i;
-      }
-      /* 27: mergebw */
-      {
-        orc_union16 _dest;
-        _dest.x2[0] = var74;
-        _dest.x2[1] = var73;
-        var77.i = _dest.i;
-      }
-      /* 28: mergewl */
-      {
-        orc_union32 _dest;
-        _dest.x2[0] = var76.i;
-        _dest.x2[1] = var77.i;
-        var78.i = _dest.i;
-      }
-      /* 29: addb */
-      var53.x4[0] = var78.x4[0] + var47.x4[0];
-      var53.x4[1] = var78.x4[1] + var47.x4[1];
-      var53.x4[2] = var78.x4[2] + var47.x4[2];
-      var53.x4[3] = var78.x4[3] + var47.x4[3];
-      /* 30: storel */
-      ptr0[i] = var53;
-    }
-  }
-
-}
-
-#else
-static void
-_backup_video_convert_orc_convert_AYUV_ABGR (OrcExecutor * ORC_RESTRICT ex)
-{
-  int i;
-  int j;
-  int n = ex->n;
-  int m = ex->params[ORC_VAR_A1];
-  orc_union32 *ORC_RESTRICT ptr0;
-  const orc_union32 *ORC_RESTRICT ptr4;
-  orc_union32 var46;
-#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
-  volatile orc_union32 var47;
-#else
-  orc_union32 var47;
-#endif
-  orc_union16 var48;
-  orc_union16 var49;
-  orc_union16 var50;
-  orc_union16 var51;
-  orc_union16 var52;
-  orc_union32 var53;
-  orc_union32 var54;
-  orc_union16 var55;
-  orc_union16 var56;
-  orc_int8 var57;
-  orc_int8 var58;
-  orc_int8 var59;
-  orc_int8 var60;
-  orc_union16 var61;
-  orc_union16 var62;
-  orc_union16 var63;
-  orc_union16 var64;
-  orc_union16 var65;
-  orc_union16 var66;
-  orc_union16 var67;
-  orc_union16 var68;
-  orc_union16 var69;
-  orc_union16 var70;
-  orc_union16 var71;
-  orc_union16 var72;
-  orc_int8 var73;
-  orc_int8 var74;
-  orc_int8 var75;
-  orc_union16 var76;
-  orc_union16 var77;
-  orc_union32 var78;
-
-  for (j = 0; j < m; j++) {
-    ptr0 = ORC_PTR_OFFSET (ex->arrays[0], ex->params[0] * j);
-    ptr4 = ORC_PTR_OFFSET (ex->arrays[4], ex->params[4] * j);
-
-    /* 1: loadpb */
-    var47.x4[0] = (int) 0x00000080;     /* 128 or 6.32404e-322f */
-    var47.x4[1] = (int) 0x00000080;     /* 128 or 6.32404e-322f */
-    var47.x4[2] = (int) 0x00000080;     /* 128 or 6.32404e-322f */
-    var47.x4[3] = (int) 0x00000080;     /* 128 or 6.32404e-322f */
-    /* 9: loadpw */
-    var48.i = ex->params[24];
-    /* 11: loadpw */
-    var49.i = ex->params[25];
-    /* 14: loadpw */
-    var50.i = ex->params[26];
-    /* 17: loadpw */
-    var51.i = ex->params[27];
-    /* 20: loadpw */
-    var52.i = ex->params[28];
-
-    for (i = 0; i < n; i++) {
-      /* 0: loadl */
-      var46 = ptr4[i];
-      /* 2: subb */
-      var54.x4[0] = var46.x4[0] - var47.x4[0];
-      var54.x4[1] = var46.x4[1] - var47.x4[1];
-      var54.x4[2] = var46.x4[2] - var47.x4[2];
-      var54.x4[3] = var46.x4[3] - var47.x4[3];
-      /* 3: splitlw */
-      {
-        orc_union32 _src;
-        _src.i = var54.i;
-        var55.i = _src.x2[1];
-        var56.i = _src.x2[0];
-      }
-      /* 4: splitwb */
-      {
-        orc_union16 _src;
-        _src.i = var56.i;
-        var57 = _src.x2[1];
-        var58 = _src.x2[0];
-      }
-      /* 5: splitwb */
-      {
-        orc_union16 _src;
-        _src.i = var55.i;
-        var59 = _src.x2[1];
-        var60 = _src.x2[0];
-      }
-      /* 6: splatbw */
-      var61.i = ((var57 & 0xff) << 8) | (var57 & 0xff);
-      /* 7: splatbw */
-      var62.i = ((var60 & 0xff) << 8) | (var60 & 0xff);
-      /* 8: splatbw */
-      var63.i = ((var59 & 0xff) << 8) | (var59 & 0xff);
-      /* 10: mulhsw */
-      var64.i = (var61.i * var48.i) >> 16;
-      /* 12: mulhsw */
-      var65.i = (var63.i * var49.i) >> 16;
-      /* 13: addssw */
-      var66.i = ORC_CLAMP_SW (var64.i + var65.i);
-      /* 15: mulhsw */
-      var67.i = (var62.i * var50.i) >> 16;
-      /* 16: addssw */
-      var68.i = ORC_CLAMP_SW (var64.i + var67.i);
-      /* 18: mulhsw */
-      var69.i = (var62.i * var51.i) >> 16;
-      /* 19: addssw */
-      var70.i = ORC_CLAMP_SW (var64.i + var69.i);
-      /* 21: mulhsw */
-      var71.i = (var63.i * var52.i) >> 16;
-      /* 22: addssw */
-      var72.i = ORC_CLAMP_SW (var70.i + var71.i);
-      /* 23: convssswb */
-      var73 = ORC_CLAMP_SB (var66.i);
-      /* 24: convssswb */
-      var74 = ORC_CLAMP_SB (var72.i);
-      /* 25: convssswb */
-      var75 = ORC_CLAMP_SB (var68.i);
-      /* 26: mergebw */
-      {
-        orc_union16 _dest;
-        _dest.x2[0] = var58;
-        _dest.x2[1] = var75;
-        var76.i = _dest.i;
-      }
-      /* 27: mergebw */
-      {
-        orc_union16 _dest;
-        _dest.x2[0] = var74;
-        _dest.x2[1] = var73;
-        var77.i = _dest.i;
-      }
-      /* 28: mergewl */
-      {
-        orc_union32 _dest;
-        _dest.x2[0] = var76.i;
-        _dest.x2[1] = var77.i;
-        var78.i = _dest.i;
-      }
-      /* 29: addb */
-      var53.x4[0] = var78.x4[0] + var47.x4[0];
-      var53.x4[1] = var78.x4[1] + var47.x4[1];
-      var53.x4[2] = var78.x4[2] + var47.x4[2];
-      var53.x4[3] = var78.x4[3] + var47.x4[3];
-      /* 30: storel */
-      ptr0[i] = var53;
-    }
-  }
-
-}
-
-void
-video_convert_orc_convert_AYUV_ABGR (guint8 * ORC_RESTRICT d1, int d1_stride,
-    const guint8 * ORC_RESTRICT s1, int s1_stride, int p1, int p2, int p3,
-    int p4, int p5, int n, int m)
-{
-  OrcExecutor _ex, *ex = &_ex;
-  static volatile int p_inited = 0;
-  static OrcCode *c = 0;
-  void (*func) (OrcExecutor *);
-
-  if (!p_inited) {
-    orc_once_mutex_lock ();
-    if (!p_inited) {
-      OrcProgram *p;
-
-#if 1
-      static const orc_uint8 bc[] = {
-        1, 7, 9, 35, 118, 105, 100, 101, 111, 95, 99, 111, 110, 118, 101, 114,
-        116, 95, 111, 114, 99, 95, 99, 111, 110, 118, 101, 114, 116, 95, 65, 89,
-        85, 86, 95, 65, 66, 71, 82, 11, 4, 4, 12, 4, 4, 14, 1, 128,
-        0, 0, 0, 16, 2, 16, 2, 16, 2, 16, 2, 16, 2, 20, 1, 20,
-        1, 20, 1, 20, 1, 20, 2, 20, 2, 20, 2, 20, 2, 20, 2, 20,
-        2, 20, 1, 20, 1, 20, 1, 20, 4, 21, 2, 65, 45, 4, 16, 198,
-        38, 36, 45, 199, 33, 32, 36, 199, 35, 34, 38, 151, 36, 33, 151, 37,
-        34, 151, 38, 35, 90, 36, 36, 24, 90, 39, 38, 25, 71, 39, 36, 39,
-        90, 41, 37, 26, 71, 41, 36, 41, 90, 40, 37, 27, 71, 40, 36, 40,
-        90, 36, 38, 28, 71, 40, 40, 36, 159, 42, 39, 159, 43, 40, 159, 44,
-        41, 196, 41, 32, 44, 196, 39, 43, 42, 195, 45, 41, 39, 21, 2, 33,
-        0, 45, 16, 2, 0,
-      };
-      p = orc_program_new_from_static_bytecode (bc);
-      orc_program_set_backup_function (p,
-          _backup_video_convert_orc_convert_AYUV_ABGR);
-#else
-      p = orc_program_new ();
-      orc_program_set_2d (p);
-      orc_program_set_name (p, "video_convert_orc_convert_AYUV_ABGR");
-      orc_program_set_backup_function (p,
-          _backup_video_convert_orc_convert_AYUV_ABGR);
-      orc_program_add_destination (p, 4, "d1");
-      orc_program_add_source (p, 4, "s1");
-      orc_program_add_constant (p, 1, 0x00000080, "c1");
-      orc_program_add_parameter (p, 2, "p1");
-      orc_program_add_parameter (p, 2, "p2");
-      orc_program_add_parameter (p, 2, "p3");
-      orc_program_add_parameter (p, 2, "p4");
-      orc_program_add_parameter (p, 2, "p5");
-      orc_program_add_temporary (p, 1, "t1");
-      orc_program_add_temporary (p, 1, "t2");
-      orc_program_add_temporary (p, 1, "t3");
-      orc_program_add_temporary (p, 1, "t4");
-      orc_program_add_temporary (p, 2, "t5");
-      orc_program_add_temporary (p, 2, "t6");
-      orc_program_add_temporary (p, 2, "t7");
-      orc_program_add_temporary (p, 2, "t8");
-      orc_program_add_temporary (p, 2, "t9");
-      orc_program_add_temporary (p, 2, "t10");
-      orc_program_add_temporary (p, 1, "t11");
-      orc_program_add_temporary (p, 1, "t12");
-      orc_program_add_temporary (p, 1, "t13");
-      orc_program_add_temporary (p, 4, "t14");
-
-      orc_program_append_2 (p, "subb", 2, ORC_VAR_T14, ORC_VAR_S1, ORC_VAR_C1,
-          ORC_VAR_D1);
-      orc_program_append_2 (p, "splitlw", 0, ORC_VAR_T7, ORC_VAR_T5,
-          ORC_VAR_T14, ORC_VAR_D1);
-      orc_program_append_2 (p, "splitwb", 0, ORC_VAR_T2, ORC_VAR_T1, ORC_VAR_T5,
-          ORC_VAR_D1);
-      orc_program_append_2 (p, "splitwb", 0, ORC_VAR_T4, ORC_VAR_T3, ORC_VAR_T7,
-          ORC_VAR_D1);
-      orc_program_append_2 (p, "splatbw", 0, ORC_VAR_T5, ORC_VAR_T2, ORC_VAR_D1,
-          ORC_VAR_D1);
-      orc_program_append_2 (p, "splatbw", 0, ORC_VAR_T6, ORC_VAR_T3, ORC_VAR_D1,
-          ORC_VAR_D1);
-      orc_program_append_2 (p, "splatbw", 0, ORC_VAR_T7, ORC_VAR_T4, ORC_VAR_D1,
-          ORC_VAR_D1);
-      orc_program_append_2 (p, "mulhsw", 0, ORC_VAR_T5, ORC_VAR_T5, ORC_VAR_P1,
-          ORC_VAR_D1);
-      orc_program_append_2 (p, "mulhsw", 0, ORC_VAR_T8, ORC_VAR_T7, ORC_VAR_P2,
-          ORC_VAR_D1);
-      orc_program_append_2 (p, "addssw", 0, ORC_VAR_T8, ORC_VAR_T5, ORC_VAR_T8,
-          ORC_VAR_D1);
-      orc_program_append_2 (p, "mulhsw", 0, ORC_VAR_T10, ORC_VAR_T6, ORC_VAR_P3,
-          ORC_VAR_D1);
-      orc_program_append_2 (p, "addssw", 0, ORC_VAR_T10, ORC_VAR_T5,
-          ORC_VAR_T10, ORC_VAR_D1);
-      orc_program_append_2 (p, "mulhsw", 0, ORC_VAR_T9, ORC_VAR_T6, ORC_VAR_P4,
-          ORC_VAR_D1);
-      orc_program_append_2 (p, "addssw", 0, ORC_VAR_T9, ORC_VAR_T5, ORC_VAR_T9,
-          ORC_VAR_D1);
-      orc_program_append_2 (p, "mulhsw", 0, ORC_VAR_T5, ORC_VAR_T7, ORC_VAR_P5,
-          ORC_VAR_D1);
-      orc_program_append_2 (p, "addssw", 0, ORC_VAR_T9, ORC_VAR_T9, ORC_VAR_T5,
-          ORC_VAR_D1);
-      orc_program_append_2 (p, "convssswb", 0, ORC_VAR_T11, ORC_VAR_T8,
-          ORC_VAR_D1, ORC_VAR_D1);
-      orc_program_append_2 (p, "convssswb", 0, ORC_VAR_T12, ORC_VAR_T9,
-          ORC_VAR_D1, ORC_VAR_D1);
-      orc_program_append_2 (p, "convssswb", 0, ORC_VAR_T13, ORC_VAR_T10,
-          ORC_VAR_D1, ORC_VAR_D1);
-      orc_program_append_2 (p, "mergebw", 0, ORC_VAR_T10, ORC_VAR_T1,
-          ORC_VAR_T13, ORC_VAR_D1);
-      orc_program_append_2 (p, "mergebw", 0, ORC_VAR_T8, ORC_VAR_T12,
-          ORC_VAR_T11, ORC_VAR_D1);
-      orc_program_append_2 (p, "mergewl", 0, ORC_VAR_T14, ORC_VAR_T10,
-          ORC_VAR_T8, ORC_VAR_D1);
-      orc_program_append_2 (p, "addb", 2, ORC_VAR_D1, ORC_VAR_T14, ORC_VAR_C1,
-          ORC_VAR_D1);
-#endif
-
-      orc_program_compile (p);
-      c = orc_program_take_code (p);
-      orc_program_free (p);
-    }
-    p_inited = TRUE;
-    orc_once_mutex_unlock ();
-  }
-  ex->arrays[ORC_VAR_A2] = c;
-  ex->program = 0;
-
-  ex->n = n;
-  ORC_EXECUTOR_M (ex) = m;
-  ex->arrays[ORC_VAR_D1] = d1;
-  ex->params[ORC_VAR_D1] = d1_stride;
-  ex->arrays[ORC_VAR_S1] = (void *) s1;
-  ex->params[ORC_VAR_S1] = s1_stride;
-  ex->params[ORC_VAR_P1] = p1;
-  ex->params[ORC_VAR_P2] = p2;
-  ex->params[ORC_VAR_P3] = p3;
-  ex->params[ORC_VAR_P4] = p4;
-  ex->params[ORC_VAR_P5] = p5;
-
-  func = c->exec;
-  func (ex);
-}
-#endif
-
-
-/* video_convert_orc_convert_AYUV_RGBA */
-#ifdef DISABLE_ORC
-void
-video_convert_orc_convert_AYUV_RGBA (guint8 * ORC_RESTRICT d1, int d1_stride,
-    const guint8 * ORC_RESTRICT s1, int s1_stride, int p1, int p2, int p3,
-    int p4, int p5, int n, int m)
-{
-  int i;
-  int j;
-  orc_union32 *ORC_RESTRICT ptr0;
-  const orc_union32 *ORC_RESTRICT ptr4;
-  orc_union32 var46;
-#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
-  volatile orc_union32 var47;
-#else
-  orc_union32 var47;
-#endif
-  orc_union16 var48;
-  orc_union16 var49;
-  orc_union16 var50;
-  orc_union16 var51;
-  orc_union16 var52;
-  orc_union32 var53;
-  orc_union32 var54;
-  orc_union16 var55;
-  orc_union16 var56;
-  orc_int8 var57;
-  orc_int8 var58;
-  orc_int8 var59;
-  orc_int8 var60;
-  orc_union16 var61;
-  orc_union16 var62;
-  orc_union16 var63;
-  orc_union16 var64;
-  orc_union16 var65;
-  orc_union16 var66;
-  orc_union16 var67;
-  orc_union16 var68;
-  orc_union16 var69;
-  orc_union16 var70;
-  orc_union16 var71;
-  orc_union16 var72;
-  orc_int8 var73;
-  orc_int8 var74;
-  orc_int8 var75;
-  orc_union16 var76;
-  orc_union16 var77;
-  orc_union32 var78;
-
-  for (j = 0; j < m; j++) {
-    ptr0 = ORC_PTR_OFFSET (d1, d1_stride * j);
-    ptr4 = ORC_PTR_OFFSET (s1, s1_stride * j);
-
-    /* 1: loadpb */
-    var47.x4[0] = (int) 0x00000080;     /* 128 or 6.32404e-322f */
-    var47.x4[1] = (int) 0x00000080;     /* 128 or 6.32404e-322f */
-    var47.x4[2] = (int) 0x00000080;     /* 128 or 6.32404e-322f */
-    var47.x4[3] = (int) 0x00000080;     /* 128 or 6.32404e-322f */
-    /* 9: loadpw */
-    var48.i = p1;
-    /* 11: loadpw */
-    var49.i = p2;
-    /* 14: loadpw */
-    var50.i = p3;
-    /* 17: loadpw */
-    var51.i = p4;
-    /* 20: loadpw */
-    var52.i = p5;
-
-    for (i = 0; i < n; i++) {
-      /* 0: loadl */
-      var46 = ptr4[i];
-      /* 2: subb */
-      var54.x4[0] = var46.x4[0] - var47.x4[0];
-      var54.x4[1] = var46.x4[1] - var47.x4[1];
-      var54.x4[2] = var46.x4[2] - var47.x4[2];
-      var54.x4[3] = var46.x4[3] - var47.x4[3];
-      /* 3: splitlw */
-      {
-        orc_union32 _src;
-        _src.i = var54.i;
-        var55.i = _src.x2[1];
-        var56.i = _src.x2[0];
-      }
-      /* 4: splitwb */
-      {
-        orc_union16 _src;
-        _src.i = var56.i;
-        var57 = _src.x2[1];
-        var58 = _src.x2[0];
-      }
-      /* 5: splitwb */
-      {
-        orc_union16 _src;
-        _src.i = var55.i;
-        var59 = _src.x2[1];
-        var60 = _src.x2[0];
-      }
-      /* 6: splatbw */
-      var61.i = ((var57 & 0xff) << 8) | (var57 & 0xff);
-      /* 7: splatbw */
-      var62.i = ((var60 & 0xff) << 8) | (var60 & 0xff);
-      /* 8: splatbw */
-      var63.i = ((var59 & 0xff) << 8) | (var59 & 0xff);
-      /* 10: mulhsw */
-      var64.i = (var61.i * var48.i) >> 16;
-      /* 12: mulhsw */
-      var65.i = (var63.i * var49.i) >> 16;
-      /* 13: addssw */
-      var66.i = ORC_CLAMP_SW (var64.i + var65.i);
-      /* 15: mulhsw */
-      var67.i = (var62.i * var50.i) >> 16;
-      /* 16: addssw */
-      var68.i = ORC_CLAMP_SW (var64.i + var67.i);
-      /* 18: mulhsw */
-      var69.i = (var62.i * var51.i) >> 16;
-      /* 19: addssw */
-      var70.i = ORC_CLAMP_SW (var64.i + var69.i);
-      /* 21: mulhsw */
-      var71.i = (var63.i * var52.i) >> 16;
-      /* 22: addssw */
-      var72.i = ORC_CLAMP_SW (var70.i + var71.i);
-      /* 23: convssswb */
-      var73 = ORC_CLAMP_SB (var66.i);
-      /* 24: convssswb */
-      var74 = ORC_CLAMP_SB (var72.i);
-      /* 25: convssswb */
-      var75 = ORC_CLAMP_SB (var68.i);
-      /* 26: mergebw */
-      {
-        orc_union16 _dest;
-        _dest.x2[0] = var73;
-        _dest.x2[1] = var74;
-        var76.i = _dest.i;
-      }
-      /* 27: mergebw */
-      {
-        orc_union16 _dest;
-        _dest.x2[0] = var75;
-        _dest.x2[1] = var58;
-        var77.i = _dest.i;
-      }
-      /* 28: mergewl */
-      {
-        orc_union32 _dest;
-        _dest.x2[0] = var76.i;
-        _dest.x2[1] = var77.i;
-        var78.i = _dest.i;
-      }
-      /* 29: addb */
-      var53.x4[0] = var78.x4[0] + var47.x4[0];
-      var53.x4[1] = var78.x4[1] + var47.x4[1];
-      var53.x4[2] = var78.x4[2] + var47.x4[2];
-      var53.x4[3] = var78.x4[3] + var47.x4[3];
-      /* 30: storel */
-      ptr0[i] = var53;
-    }
-  }
-
-}
-
-#else
-static void
-_backup_video_convert_orc_convert_AYUV_RGBA (OrcExecutor * ORC_RESTRICT ex)
-{
-  int i;
-  int j;
-  int n = ex->n;
-  int m = ex->params[ORC_VAR_A1];
-  orc_union32 *ORC_RESTRICT ptr0;
-  const orc_union32 *ORC_RESTRICT ptr4;
-  orc_union32 var46;
-#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
-  volatile orc_union32 var47;
-#else
-  orc_union32 var47;
-#endif
-  orc_union16 var48;
-  orc_union16 var49;
-  orc_union16 var50;
-  orc_union16 var51;
-  orc_union16 var52;
-  orc_union32 var53;
-  orc_union32 var54;
-  orc_union16 var55;
-  orc_union16 var56;
-  orc_int8 var57;
-  orc_int8 var58;
-  orc_int8 var59;
-  orc_int8 var60;
-  orc_union16 var61;
-  orc_union16 var62;
-  orc_union16 var63;
-  orc_union16 var64;
-  orc_union16 var65;
-  orc_union16 var66;
-  orc_union16 var67;
-  orc_union16 var68;
-  orc_union16 var69;
-  orc_union16 var70;
-  orc_union16 var71;
-  orc_union16 var72;
-  orc_int8 var73;
-  orc_int8 var74;
-  orc_int8 var75;
-  orc_union16 var76;
-  orc_union16 var77;
-  orc_union32 var78;
-
-  for (j = 0; j < m; j++) {
-    ptr0 = ORC_PTR_OFFSET (ex->arrays[0], ex->params[0] * j);
-    ptr4 = ORC_PTR_OFFSET (ex->arrays[4], ex->params[4] * j);
-
-    /* 1: loadpb */
-    var47.x4[0] = (int) 0x00000080;     /* 128 or 6.32404e-322f */
-    var47.x4[1] = (int) 0x00000080;     /* 128 or 6.32404e-322f */
-    var47.x4[2] = (int) 0x00000080;     /* 128 or 6.32404e-322f */
-    var47.x4[3] = (int) 0x00000080;     /* 128 or 6.32404e-322f */
-    /* 9: loadpw */
-    var48.i = ex->params[24];
-    /* 11: loadpw */
-    var49.i = ex->params[25];
-    /* 14: loadpw */
-    var50.i = ex->params[26];
-    /* 17: loadpw */
-    var51.i = ex->params[27];
-    /* 20: loadpw */
-    var52.i = ex->params[28];
-
-    for (i = 0; i < n; i++) {
-      /* 0: loadl */
-      var46 = ptr4[i];
-      /* 2: subb */
-      var54.x4[0] = var46.x4[0] - var47.x4[0];
-      var54.x4[1] = var46.x4[1] - var47.x4[1];
-      var54.x4[2] = var46.x4[2] - var47.x4[2];
-      var54.x4[3] = var46.x4[3] - var47.x4[3];
-      /* 3: splitlw */
-      {
-        orc_union32 _src;
-        _src.i = var54.i;
-        var55.i = _src.x2[1];
-        var56.i = _src.x2[0];
-      }
-      /* 4: splitwb */
-      {
-        orc_union16 _src;
-        _src.i = var56.i;
-        var57 = _src.x2[1];
-        var58 = _src.x2[0];
-      }
-      /* 5: splitwb */
-      {
-        orc_union16 _src;
-        _src.i = var55.i;
-        var59 = _src.x2[1];
-        var60 = _src.x2[0];
-      }
-      /* 6: splatbw */
-      var61.i = ((var57 & 0xff) << 8) | (var57 & 0xff);
-      /* 7: splatbw */
-      var62.i = ((var60 & 0xff) << 8) | (var60 & 0xff);
-      /* 8: splatbw */
-      var63.i = ((var59 & 0xff) << 8) | (var59 & 0xff);
-      /* 10: mulhsw */
-      var64.i = (var61.i * var48.i) >> 16;
-      /* 12: mulhsw */
-      var65.i = (var63.i * var49.i) >> 16;
-      /* 13: addssw */
-      var66.i = ORC_CLAMP_SW (var64.i + var65.i);
-      /* 15: mulhsw */
-      var67.i = (var62.i * var50.i) >> 16;
-      /* 16: addssw */
-      var68.i = ORC_CLAMP_SW (var64.i + var67.i);
-      /* 18: mulhsw */
-      var69.i = (var62.i * var51.i) >> 16;
-      /* 19: addssw */
-      var70.i = ORC_CLAMP_SW (var64.i + var69.i);
-      /* 21: mulhsw */
-      var71.i = (var63.i * var52.i) >> 16;
-      /* 22: addssw */
-      var72.i = ORC_CLAMP_SW (var70.i + var71.i);
-      /* 23: convssswb */
-      var73 = ORC_CLAMP_SB (var66.i);
-      /* 24: convssswb */
-      var74 = ORC_CLAMP_SB (var72.i);
-      /* 25: convssswb */
-      var75 = ORC_CLAMP_SB (var68.i);
-      /* 26: mergebw */
-      {
-        orc_union16 _dest;
-        _dest.x2[0] = var73;
-        _dest.x2[1] = var74;
-        var76.i = _dest.i;
-      }
-      /* 27: mergebw */
-      {
-        orc_union16 _dest;
-        _dest.x2[0] = var75;
-        _dest.x2[1] = var58;
-        var77.i = _dest.i;
-      }
-      /* 28: mergewl */
-      {
-        orc_union32 _dest;
-        _dest.x2[0] = var76.i;
-        _dest.x2[1] = var77.i;
-        var78.i = _dest.i;
-      }
-      /* 29: addb */
-      var53.x4[0] = var78.x4[0] + var47.x4[0];
-      var53.x4[1] = var78.x4[1] + var47.x4[1];
-      var53.x4[2] = var78.x4[2] + var47.x4[2];
-      var53.x4[3] = var78.x4[3] + var47.x4[3];
-      /* 30: storel */
-      ptr0[i] = var53;
-    }
-  }
-
-}
-
-void
-video_convert_orc_convert_AYUV_RGBA (guint8 * ORC_RESTRICT d1, int d1_stride,
-    const guint8 * ORC_RESTRICT s1, int s1_stride, int p1, int p2, int p3,
-    int p4, int p5, int n, int m)
-{
-  OrcExecutor _ex, *ex = &_ex;
-  static volatile int p_inited = 0;
-  static OrcCode *c = 0;
-  void (*func) (OrcExecutor *);
-
-  if (!p_inited) {
-    orc_once_mutex_lock ();
-    if (!p_inited) {
-      OrcProgram *p;
-
-#if 1
-      static const orc_uint8 bc[] = {
-        1, 7, 9, 35, 118, 105, 100, 101, 111, 95, 99, 111, 110, 118, 101, 114,
-        116, 95, 111, 114, 99, 95, 99, 111, 110, 118, 101, 114, 116, 95, 65, 89,
-        85, 86, 95, 82, 71, 66, 65, 11, 4, 4, 12, 4, 4, 14, 1, 128,
-        0, 0, 0, 16, 2, 16, 2, 16, 2, 16, 2, 16, 2, 20, 1, 20,
-        1, 20, 1, 20, 1, 20, 2, 20, 2, 20, 2, 20, 2, 20, 2, 20,
-        2, 20, 1, 20, 1, 20, 1, 20, 4, 21, 2, 65, 45, 4, 16, 198,
-        38, 36, 45, 199, 33, 32, 36, 199, 35, 34, 38, 151, 36, 33, 151, 37,
-        34, 151, 38, 35, 90, 36, 36, 24, 90, 39, 38, 25, 71, 39, 36, 39,
-        90, 41, 37, 26, 71, 41, 36, 41, 90, 40, 37, 27, 71, 40, 36, 40,
-        90, 36, 38, 28, 71, 40, 40, 36, 159, 42, 39, 159, 43, 40, 159, 44,
-        41, 196, 39, 42, 43, 196, 41, 44, 32, 195, 45, 39, 41, 21, 2, 33,
-        0, 45, 16, 2, 0,
-      };
-      p = orc_program_new_from_static_bytecode (bc);
-      orc_program_set_backup_function (p,
-          _backup_video_convert_orc_convert_AYUV_RGBA);
-#else
-      p = orc_program_new ();
-      orc_program_set_2d (p);
-      orc_program_set_name (p, "video_convert_orc_convert_AYUV_RGBA");
-      orc_program_set_backup_function (p,
-          _backup_video_convert_orc_convert_AYUV_RGBA);
-      orc_program_add_destination (p, 4, "d1");
-      orc_program_add_source (p, 4, "s1");
-      orc_program_add_constant (p, 1, 0x00000080, "c1");
-      orc_program_add_parameter (p, 2, "p1");
-      orc_program_add_parameter (p, 2, "p2");
-      orc_program_add_parameter (p, 2, "p3");
-      orc_program_add_parameter (p, 2, "p4");
-      orc_program_add_parameter (p, 2, "p5");
-      orc_program_add_temporary (p, 1, "t1");
-      orc_program_add_temporary (p, 1, "t2");
-      orc_program_add_temporary (p, 1, "t3");
-      orc_program_add_temporary (p, 1, "t4");
-      orc_program_add_temporary (p, 2, "t5");
-      orc_program_add_temporary (p, 2, "t6");
-      orc_program_add_temporary (p, 2, "t7");
-      orc_program_add_temporary (p, 2, "t8");
-      orc_program_add_temporary (p, 2, "t9");
-      orc_program_add_temporary (p, 2, "t10");
-      orc_program_add_temporary (p, 1, "t11");
-      orc_program_add_temporary (p, 1, "t12");
-      orc_program_add_temporary (p, 1, "t13");
-      orc_program_add_temporary (p, 4, "t14");
-
-      orc_program_append_2 (p, "subb", 2, ORC_VAR_T14, ORC_VAR_S1, ORC_VAR_C1,
-          ORC_VAR_D1);
-      orc_program_append_2 (p, "splitlw", 0, ORC_VAR_T7, ORC_VAR_T5,
-          ORC_VAR_T14, ORC_VAR_D1);
-      orc_program_append_2 (p, "splitwb", 0, ORC_VAR_T2, ORC_VAR_T1, ORC_VAR_T5,
-          ORC_VAR_D1);
-      orc_program_append_2 (p, "splitwb", 0, ORC_VAR_T4, ORC_VAR_T3, ORC_VAR_T7,
-          ORC_VAR_D1);
-      orc_program_append_2 (p, "splatbw", 0, ORC_VAR_T5, ORC_VAR_T2, ORC_VAR_D1,
-          ORC_VAR_D1);
-      orc_program_append_2 (p, "splatbw", 0, ORC_VAR_T6, ORC_VAR_T3, ORC_VAR_D1,
-          ORC_VAR_D1);
-      orc_program_append_2 (p, "splatbw", 0, ORC_VAR_T7, ORC_VAR_T4, ORC_VAR_D1,
-          ORC_VAR_D1);
-      orc_program_append_2 (p, "mulhsw", 0, ORC_VAR_T5, ORC_VAR_T5, ORC_VAR_P1,
-          ORC_VAR_D1);
-      orc_program_append_2 (p, "mulhsw", 0, ORC_VAR_T8, ORC_VAR_T7, ORC_VAR_P2,
-          ORC_VAR_D1);
-      orc_program_append_2 (p, "addssw", 0, ORC_VAR_T8, ORC_VAR_T5, ORC_VAR_T8,
-          ORC_VAR_D1);
-      orc_program_append_2 (p, "mulhsw", 0, ORC_VAR_T10, ORC_VAR_T6, ORC_VAR_P3,
-          ORC_VAR_D1);
-      orc_program_append_2 (p, "addssw", 0, ORC_VAR_T10, ORC_VAR_T5,
-          ORC_VAR_T10, ORC_VAR_D1);
-      orc_program_append_2 (p, "mulhsw", 0, ORC_VAR_T9, ORC_VAR_T6, ORC_VAR_P4,
-          ORC_VAR_D1);
-      orc_program_append_2 (p, "addssw", 0, ORC_VAR_T9, ORC_VAR_T5, ORC_VAR_T9,
-          ORC_VAR_D1);
-      orc_program_append_2 (p, "mulhsw", 0, ORC_VAR_T5, ORC_VAR_T7, ORC_VAR_P5,
-          ORC_VAR_D1);
-      orc_program_append_2 (p, "addssw", 0, ORC_VAR_T9, ORC_VAR_T9, ORC_VAR_T5,
-          ORC_VAR_D1);
-      orc_program_append_2 (p, "convssswb", 0, ORC_VAR_T11, ORC_VAR_T8,
-          ORC_VAR_D1, ORC_VAR_D1);
-      orc_program_append_2 (p, "convssswb", 0, ORC_VAR_T12, ORC_VAR_T9,
-          ORC_VAR_D1, ORC_VAR_D1);
-      orc_program_append_2 (p, "convssswb", 0, ORC_VAR_T13, ORC_VAR_T10,
-          ORC_VAR_D1, ORC_VAR_D1);
-      orc_program_append_2 (p, "mergebw", 0, ORC_VAR_T8, ORC_VAR_T11,
-          ORC_VAR_T12, ORC_VAR_D1);
-      orc_program_append_2 (p, "mergebw", 0, ORC_VAR_T10, ORC_VAR_T13,
-          ORC_VAR_T1, ORC_VAR_D1);
-      orc_program_append_2 (p, "mergewl", 0, ORC_VAR_T14, ORC_VAR_T8,
-          ORC_VAR_T10, ORC_VAR_D1);
-      orc_program_append_2 (p, "addb", 2, ORC_VAR_D1, ORC_VAR_T14, ORC_VAR_C1,
-          ORC_VAR_D1);
-#endif
-
-      orc_program_compile (p);
-      c = orc_program_take_code (p);
-      orc_program_free (p);
-    }
-    p_inited = TRUE;
-    orc_once_mutex_unlock ();
-  }
-  ex->arrays[ORC_VAR_A2] = c;
-  ex->program = 0;
-
-  ex->n = n;
-  ORC_EXECUTOR_M (ex) = m;
-  ex->arrays[ORC_VAR_D1] = d1;
-  ex->params[ORC_VAR_D1] = d1_stride;
-  ex->arrays[ORC_VAR_S1] = (void *) s1;
-  ex->params[ORC_VAR_S1] = s1_stride;
-  ex->params[ORC_VAR_P1] = p1;
-  ex->params[ORC_VAR_P2] = p2;
-  ex->params[ORC_VAR_P3] = p3;
-  ex->params[ORC_VAR_P4] = p4;
-  ex->params[ORC_VAR_P5] = p5;
-
-  func = c->exec;
-  func (ex);
-}
-#endif
-
-
-/* video_convert_orc_convert_I420_BGRA */
-#ifdef DISABLE_ORC
-void
-video_convert_orc_convert_I420_BGRA (guint8 * ORC_RESTRICT d1,
-    const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2,
-    const guint8 * ORC_RESTRICT s3, int p1, int p2, int p3, int p4, int p5,
-    int n)
-{
-  int i;
-  orc_union32 *ORC_RESTRICT ptr0;
-  const orc_int8 *ORC_RESTRICT ptr4;
-  const orc_int8 *ORC_RESTRICT ptr5;
-  const orc_int8 *ORC_RESTRICT ptr6;
-  orc_int8 var42;
-#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
-  volatile orc_int8 var43;
-#else
-  orc_int8 var43;
-#endif
-  orc_union16 var44;
-  orc_union16 var45;
-  orc_union16 var46;
-  orc_union16 var47;
-  orc_union16 var48;
-#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
-  volatile orc_int8 var49;
-#else
-  orc_int8 var49;
-#endif
-#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
-  volatile orc_union32 var50;
-#else
-  orc_union32 var50;
-#endif
-  orc_union32 var51;
-  orc_int8 var52;
-  orc_union16 var53;
-  orc_int8 var54;
-  orc_int8 var55;
-  orc_union16 var56;
-  orc_int8 var57;
-  orc_int8 var58;
-  orc_union16 var59;
-  orc_union16 var60;
-  orc_union16 var61;
-  orc_union16 var62;
-  orc_union16 var63;
-  orc_union16 var64;
-  orc_union16 var65;
-  orc_union16 var66;
-  orc_union16 var67;
-  orc_union16 var68;
-  orc_int8 var69;
-  orc_int8 var70;
-  orc_int8 var71;
-  orc_union16 var72;
-  orc_union16 var73;
-  orc_union32 var74;
-
-  ptr0 = (orc_union32 *) d1;
-  ptr4 = (orc_int8 *) s1;
-  ptr5 = (orc_int8 *) s2;
-  ptr6 = (orc_int8 *) s3;
-
-  /* 1: loadpb */
-  var43 = (int) 0x00000080;     /* 128 or 6.32404e-322f */
-  /* 10: loadpw */
-  var44.i = p1;
-  /* 12: loadpw */
-  var45.i = p2;
-  /* 15: loadpw */
-  var46.i = p3;
-  /* 18: loadpw */
-  var47.i = p4;
-  /* 21: loadpw */
-  var48.i = p5;
-  /* 28: loadpb */
-  var49 = (int) 0x0000007f;     /* 127 or 6.27463e-322f */
-  /* 31: loadpb */
-  var50.x4[0] = (int) 0x00000080;       /* 128 or 6.32404e-322f */
-  var50.x4[1] = (int) 0x00000080;       /* 128 or 6.32404e-322f */
-  var50.x4[2] = (int) 0x00000080;       /* 128 or 6.32404e-322f */
-  var50.x4[3] = (int) 0x00000080;       /* 128 or 6.32404e-322f */
-
-  for (i = 0; i < n; i++) {
-    /* 0: loadb */
-    var42 = ptr4[i];
-    /* 2: subb */
-    var52 = var42 - var43;
-    /* 3: splatbw */
-    var53.i = ((var52 & 0xff) << 8) | (var52 & 0xff);
-    /* 4: loadupdb */
-    var54 = ptr5[i >> 1];
-    /* 5: subb */
-    var55 = var54 - var43;
-    /* 6: splatbw */
-    var56.i = ((var55 & 0xff) << 8) | (var55 & 0xff);
-    /* 7: loadupdb */
-    var57 = ptr6[i >> 1];
-    /* 8: subb */
-    var58 = var57 - var43;
-    /* 9: splatbw */
-    var59.i = ((var58 & 0xff) << 8) | (var58 & 0xff);
-    /* 11: mulhsw */
-    var60.i = (var53.i * var44.i) >> 16;
-    /* 13: mulhsw */
-    var61.i = (var59.i * var45.i) >> 16;
-    /* 14: addssw */
-    var62.i = ORC_CLAMP_SW (var60.i + var61.i);
-    /* 16: mulhsw */
-    var63.i = (var56.i * var46.i) >> 16;
-    /* 17: addssw */
-    var64.i = ORC_CLAMP_SW (var60.i + var63.i);
-    /* 19: mulhsw */
-    var65.i = (var56.i * var47.i) >> 16;
-    /* 20: addssw */
-    var66.i = ORC_CLAMP_SW (var60.i + var65.i);
-    /* 22: mulhsw */
-    var67.i = (var59.i * var48.i) >> 16;
-    /* 23: addssw */
-    var68.i = ORC_CLAMP_SW (var66.i + var67.i);
-    /* 24: convssswb */
-    var69 = ORC_CLAMP_SB (var62.i);
-    /* 25: convssswb */
-    var70 = ORC_CLAMP_SB (var68.i);
-    /* 26: convssswb */
-    var71 = ORC_CLAMP_SB (var64.i);
-    /* 27: mergebw */
-    {
-      orc_union16 _dest;
-      _dest.x2[0] = var71;
-      _dest.x2[1] = var70;
-      var72.i = _dest.i;
-    }
-    /* 29: mergebw */
-    {
-      orc_union16 _dest;
-      _dest.x2[0] = var69;
-      _dest.x2[1] = var49;
-      var73.i = _dest.i;
-    }
-    /* 30: mergewl */
-    {
-      orc_union32 _dest;
-      _dest.x2[0] = var72.i;
-      _dest.x2[1] = var73.i;
-      var74.i = _dest.i;
-    }
-    /* 32: addb */
-    var51.x4[0] = var74.x4[0] + var50.x4[0];
-    var51.x4[1] = var74.x4[1] + var50.x4[1];
-    var51.x4[2] = var74.x4[2] + var50.x4[2];
-    var51.x4[3] = var74.x4[3] + var50.x4[3];
-    /* 33: storel */
-    ptr0[i] = var51;
-  }
-
-}
-
-#else
-static void
-_backup_video_convert_orc_convert_I420_BGRA (OrcExecutor * ORC_RESTRICT ex)
-{
-  int i;
-  int n = ex->n;
-  orc_union32 *ORC_RESTRICT ptr0;
-  const orc_int8 *ORC_RESTRICT ptr4;
-  const orc_int8 *ORC_RESTRICT ptr5;
-  const orc_int8 *ORC_RESTRICT ptr6;
-  orc_int8 var42;
-#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
-  volatile orc_int8 var43;
-#else
-  orc_int8 var43;
-#endif
-  orc_union16 var44;
-  orc_union16 var45;
-  orc_union16 var46;
-  orc_union16 var47;
-  orc_union16 var48;
-#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
-  volatile orc_int8 var49;
-#else
-  orc_int8 var49;
-#endif
-#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
-  volatile orc_union32 var50;
-#else
-  orc_union32 var50;
-#endif
-  orc_union32 var51;
-  orc_int8 var52;
-  orc_union16 var53;
-  orc_int8 var54;
-  orc_int8 var55;
-  orc_union16 var56;
-  orc_int8 var57;
-  orc_int8 var58;
-  orc_union16 var59;
-  orc_union16 var60;
-  orc_union16 var61;
-  orc_union16 var62;
-  orc_union16 var63;
-  orc_union16 var64;
-  orc_union16 var65;
-  orc_union16 var66;
-  orc_union16 var67;
-  orc_union16 var68;
-  orc_int8 var69;
-  orc_int8 var70;
-  orc_int8 var71;
-  orc_union16 var72;
-  orc_union16 var73;
-  orc_union32 var74;
-
-  ptr0 = (orc_union32 *) ex->arrays[0];
-  ptr4 = (orc_int8 *) ex->arrays[4];
-  ptr5 = (orc_int8 *) ex->arrays[5];
-  ptr6 = (orc_int8 *) ex->arrays[6];
-
-  /* 1: loadpb */
-  var43 = (int) 0x00000080;     /* 128 or 6.32404e-322f */
-  /* 10: loadpw */
-  var44.i = ex->params[24];
-  /* 12: loadpw */
-  var45.i = ex->params[25];
-  /* 15: loadpw */
-  var46.i = ex->params[26];
-  /* 18: loadpw */
-  var47.i = ex->params[27];
-  /* 21: loadpw */
-  var48.i = ex->params[28];
-  /* 28: loadpb */
-  var49 = (int) 0x0000007f;     /* 127 or 6.27463e-322f */
-  /* 31: loadpb */
-  var50.x4[0] = (int) 0x00000080;       /* 128 or 6.32404e-322f */
-  var50.x4[1] = (int) 0x00000080;       /* 128 or 6.32404e-322f */
-  var50.x4[2] = (int) 0x00000080;       /* 128 or 6.32404e-322f */
-  var50.x4[3] = (int) 0x00000080;       /* 128 or 6.32404e-322f */
-
-  for (i = 0; i < n; i++) {
-    /* 0: loadb */
-    var42 = ptr4[i];
-    /* 2: subb */
-    var52 = var42 - var43;
-    /* 3: splatbw */
-    var53.i = ((var52 & 0xff) << 8) | (var52 & 0xff);
-    /* 4: loadupdb */
-    var54 = ptr5[i >> 1];
-    /* 5: subb */
-    var55 = var54 - var43;
-    /* 6: splatbw */
-    var56.i = ((var55 & 0xff) << 8) | (var55 & 0xff);
-    /* 7: loadupdb */
-    var57 = ptr6[i >> 1];
-    /* 8: subb */
-    var58 = var57 - var43;
-    /* 9: splatbw */
-    var59.i = ((var58 & 0xff) << 8) | (var58 & 0xff);
-    /* 11: mulhsw */
-    var60.i = (var53.i * var44.i) >> 16;
-    /* 13: mulhsw */
-    var61.i = (var59.i * var45.i) >> 16;
-    /* 14: addssw */
-    var62.i = ORC_CLAMP_SW (var60.i + var61.i);
-    /* 16: mulhsw */
-    var63.i = (var56.i * var46.i) >> 16;
-    /* 17: addssw */
-    var64.i = ORC_CLAMP_SW (var60.i + var63.i);
-    /* 19: mulhsw */
-    var65.i = (var56.i * var47.i) >> 16;
-    /* 20: addssw */
-    var66.i = ORC_CLAMP_SW (var60.i + var65.i);
-    /* 22: mulhsw */
-    var67.i = (var59.i * var48.i) >> 16;
-    /* 23: addssw */
-    var68.i = ORC_CLAMP_SW (var66.i + var67.i);
-    /* 24: convssswb */
-    var69 = ORC_CLAMP_SB (var62.i);
-    /* 25: convssswb */
-    var70 = ORC_CLAMP_SB (var68.i);
-    /* 26: convssswb */
-    var71 = ORC_CLAMP_SB (var64.i);
-    /* 27: mergebw */
-    {
-      orc_union16 _dest;
-      _dest.x2[0] = var71;
-      _dest.x2[1] = var70;
-      var72.i = _dest.i;
-    }
-    /* 29: mergebw */
-    {
-      orc_union16 _dest;
-      _dest.x2[0] = var69;
-      _dest.x2[1] = var49;
-      var73.i = _dest.i;
-    }
-    /* 30: mergewl */
-    {
-      orc_union32 _dest;
-      _dest.x2[0] = var72.i;
-      _dest.x2[1] = var73.i;
-      var74.i = _dest.i;
-    }
-    /* 32: addb */
-    var51.x4[0] = var74.x4[0] + var50.x4[0];
-    var51.x4[1] = var74.x4[1] + var50.x4[1];
-    var51.x4[2] = var74.x4[2] + var50.x4[2];
-    var51.x4[3] = var74.x4[3] + var50.x4[3];
-    /* 33: storel */
-    ptr0[i] = var51;
-  }
-
-}
-
-void
-video_convert_orc_convert_I420_BGRA (guint8 * ORC_RESTRICT d1,
-    const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2,
-    const guint8 * ORC_RESTRICT s3, int p1, int p2, int p3, int p4, int p5,
-    int n)
-{
-  OrcExecutor _ex, *ex = &_ex;
-  static volatile int p_inited = 0;
-  static OrcCode *c = 0;
-  void (*func) (OrcExecutor *);
-
-  if (!p_inited) {
-    orc_once_mutex_lock ();
-    if (!p_inited) {
-      OrcProgram *p;
-
-#if 1
-      static const orc_uint8 bc[] = {
-        1, 9, 35, 118, 105, 100, 101, 111, 95, 99, 111, 110, 118, 101, 114, 116,
-        95, 111, 114, 99, 95, 99, 111, 110, 118, 101, 114, 116, 95, 73, 52, 50,
-        48, 95, 66, 71, 82, 65, 11, 4, 4, 12, 1, 1, 12, 1, 1, 12,
-        1, 1, 14, 1, 128, 0, 0, 0, 14, 1, 127, 0, 0, 0, 16, 2,
-        16, 2, 16, 2, 16, 2, 16, 2, 20, 2, 20, 2, 20, 2, 20, 2,
-        20, 2, 20, 2, 20, 1, 20, 1, 20, 1, 20, 4, 65, 38, 4, 16,
-        151, 32, 38, 45, 38, 5, 65, 38, 38, 16, 151, 33, 38, 45, 38, 6,
-        65, 38, 38, 16, 151, 34, 38, 90, 32, 32, 24, 90, 35, 34, 25, 71,
-        35, 32, 35, 90, 37, 33, 26, 71, 37, 32, 37, 90, 36, 33, 27, 71,
-        36, 32, 36, 90, 32, 34, 28, 71, 36, 36, 32, 159, 38, 35, 159, 39,
-        36, 159, 40, 37, 196, 37, 40, 39, 196, 35, 38, 17, 195, 41, 37, 35,
-        21, 2, 33, 0, 41, 16, 2, 0,
-      };
-      p = orc_program_new_from_static_bytecode (bc);
-      orc_program_set_backup_function (p,
-          _backup_video_convert_orc_convert_I420_BGRA);
-#else
-      p = orc_program_new ();
-      orc_program_set_name (p, "video_convert_orc_convert_I420_BGRA");
-      orc_program_set_backup_function (p,
-          _backup_video_convert_orc_convert_I420_BGRA);
-      orc_program_add_destination (p, 4, "d1");
-      orc_program_add_source (p, 1, "s1");
-      orc_program_add_source (p, 1, "s2");
-      orc_program_add_source (p, 1, "s3");
-      orc_program_add_constant (p, 1, 0x00000080, "c1");
-      orc_program_add_constant (p, 1, 0x0000007f, "c2");
-      orc_program_add_parameter (p, 2, "p1");
-      orc_program_add_parameter (p, 2, "p2");
-      orc_program_add_parameter (p, 2, "p3");
-      orc_program_add_parameter (p, 2, "p4");
-      orc_program_add_parameter (p, 2, "p5");
-      orc_program_add_temporary (p, 2, "t1");
-      orc_program_add_temporary (p, 2, "t2");
-      orc_program_add_temporary (p, 2, "t3");
-      orc_program_add_temporary (p, 2, "t4");
-      orc_program_add_temporary (p, 2, "t5");
-      orc_program_add_temporary (p, 2, "t6");
-      orc_program_add_temporary (p, 1, "t7");
-      orc_program_add_temporary (p, 1, "t8");
-      orc_program_add_temporary (p, 1, "t9");
-      orc_program_add_temporary (p, 4, "t10");
-
-      orc_program_append_2 (p, "subb", 0, ORC_VAR_T7, ORC_VAR_S1, ORC_VAR_C1,
-          ORC_VAR_D1);
-      orc_program_append_2 (p, "splatbw", 0, ORC_VAR_T1, ORC_VAR_T7, ORC_VAR_D1,
-          ORC_VAR_D1);
-      orc_program_append_2 (p, "loadupdb", 0, ORC_VAR_T7, ORC_VAR_S2,
-          ORC_VAR_D1, ORC_VAR_D1);
-      orc_program_append_2 (p, "subb", 0, ORC_VAR_T7, ORC_VAR_T7, ORC_VAR_C1,
-          ORC_VAR_D1);
-      orc_program_append_2 (p, "splatbw", 0, ORC_VAR_T2, ORC_VAR_T7, ORC_VAR_D1,
-          ORC_VAR_D1);
-      orc_program_append_2 (p, "loadupdb", 0, ORC_VAR_T7, ORC_VAR_S3,
-          ORC_VAR_D1, ORC_VAR_D1);
-      orc_program_append_2 (p, "subb", 0, ORC_VAR_T7, ORC_VAR_T7, ORC_VAR_C1,
-          ORC_VAR_D1);
-      orc_program_append_2 (p, "splatbw", 0, ORC_VAR_T3, ORC_VAR_T7, ORC_VAR_D1,
-          ORC_VAR_D1);
-      orc_program_append_2 (p, "mulhsw", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_P1,
-          ORC_VAR_D1);
-      orc_program_append_2 (p, "mulhsw", 0, ORC_VAR_T4, ORC_VAR_T3, ORC_VAR_P2,
-          ORC_VAR_D1);
-      orc_program_append_2 (p, "addssw", 0, ORC_VAR_T4, ORC_VAR_T1, ORC_VAR_T4,
-          ORC_VAR_D1);
-      orc_program_append_2 (p, "mulhsw", 0, ORC_VAR_T6, ORC_VAR_T2, ORC_VAR_P3,
-          ORC_VAR_D1);
-      orc_program_append_2 (p, "addssw", 0, ORC_VAR_T6, ORC_VAR_T1, ORC_VAR_T6,
-          ORC_VAR_D1);
-      orc_program_append_2 (p, "mulhsw", 0, ORC_VAR_T5, ORC_VAR_T2, ORC_VAR_P4,
-          ORC_VAR_D1);
-      orc_program_append_2 (p, "addssw", 0, ORC_VAR_T5, ORC_VAR_T1, ORC_VAR_T5,
-          ORC_VAR_D1);
-      orc_program_append_2 (p, "mulhsw", 0, ORC_VAR_T1, ORC_VAR_T3, ORC_VAR_P5,
-          ORC_VAR_D1);
-      orc_program_append_2 (p, "addssw", 0, ORC_VAR_T5, ORC_VAR_T5, ORC_VAR_T1,
-          ORC_VAR_D1);
-      orc_program_append_2 (p, "convssswb", 0, ORC_VAR_T7, ORC_VAR_T4,
-          ORC_VAR_D1, ORC_VAR_D1);
-      orc_program_append_2 (p, "convssswb", 0, ORC_VAR_T8, ORC_VAR_T5,
-          ORC_VAR_D1, ORC_VAR_D1);
-      orc_program_append_2 (p, "convssswb", 0, ORC_VAR_T9, ORC_VAR_T6,
-          ORC_VAR_D1, ORC_VAR_D1);
-      orc_program_append_2 (p, "mergebw", 0, ORC_VAR_T6, ORC_VAR_T9, ORC_VAR_T8,
-          ORC_VAR_D1);
-      orc_program_append_2 (p, "mergebw", 0, ORC_VAR_T4, ORC_VAR_T7, ORC_VAR_C2,
-          ORC_VAR_D1);
-      orc_program_append_2 (p, "mergewl", 0, ORC_VAR_T10, ORC_VAR_T6,
-          ORC_VAR_T4, ORC_VAR_D1);
-      orc_program_append_2 (p, "addb", 2, ORC_VAR_D1, ORC_VAR_T10, ORC_VAR_C1,
-          ORC_VAR_D1);
-#endif
-
-      orc_program_compile (p);
-      c = orc_program_take_code (p);
-      orc_program_free (p);
-    }
-    p_inited = TRUE;
-    orc_once_mutex_unlock ();
-  }
-  ex->arrays[ORC_VAR_A2] = c;
-  ex->program = 0;
-
-  ex->n = n;
-  ex->arrays[ORC_VAR_D1] = d1;
-  ex->arrays[ORC_VAR_S1] = (void *) s1;
-  ex->arrays[ORC_VAR_S2] = (void *) s2;
-  ex->arrays[ORC_VAR_S3] = (void *) s3;
-  ex->params[ORC_VAR_P1] = p1;
-  ex->params[ORC_VAR_P2] = p2;
-  ex->params[ORC_VAR_P3] = p3;
-  ex->params[ORC_VAR_P4] = p4;
-  ex->params[ORC_VAR_P5] = p5;
-
-  func = c->exec;
-  func (ex);
-}
-#endif
diff --git a/gst/videoconvert/gstvideoconvertorc-dist.h b/gst/videoconvert/gstvideoconvertorc-dist.h
deleted file mode 100644
index b4981d1..0000000
--- a/gst/videoconvert/gstvideoconvertorc-dist.h
+++ /dev/null
@@ -1,124 +0,0 @@
-
-/* autogenerated from gstvideoconvertorc.orc */
-
-#ifndef _GSTVIDEOCONVERTORC_H_
-#define _GSTVIDEOCONVERTORC_H_
-
-#include <glib.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-
-
-#ifndef _ORC_INTEGER_TYPEDEFS_
-#define _ORC_INTEGER_TYPEDEFS_
-#if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
-#include <stdint.h>
-typedef int8_t orc_int8;
-typedef int16_t orc_int16;
-typedef int32_t orc_int32;
-typedef int64_t orc_int64;
-typedef uint8_t orc_uint8;
-typedef uint16_t orc_uint16;
-typedef uint32_t orc_uint32;
-typedef uint64_t orc_uint64;
-#define ORC_UINT64_C(x) UINT64_C(x)
-#elif defined(_MSC_VER)
-typedef signed __int8 orc_int8;
-typedef signed __int16 orc_int16;
-typedef signed __int32 orc_int32;
-typedef signed __int64 orc_int64;
-typedef unsigned __int8 orc_uint8;
-typedef unsigned __int16 orc_uint16;
-typedef unsigned __int32 orc_uint32;
-typedef unsigned __int64 orc_uint64;
-#define ORC_UINT64_C(x) (x##Ui64)
-#define inline __inline
-#else
-#include <limits.h>
-typedef signed char orc_int8;
-typedef short orc_int16;
-typedef int orc_int32;
-typedef unsigned char orc_uint8;
-typedef unsigned short orc_uint16;
-typedef unsigned int orc_uint32;
-#if INT_MAX == LONG_MAX
-typedef long long orc_int64;
-typedef unsigned long long orc_uint64;
-#define ORC_UINT64_C(x) (x##ULL)
-#else
-typedef long orc_int64;
-typedef unsigned long orc_uint64;
-#define ORC_UINT64_C(x) (x##UL)
-#endif
-#endif
-typedef union { orc_int16 i; orc_int8 x2[2]; } orc_union16;
-typedef union { orc_int32 i; float f; orc_int16 x2[2]; orc_int8 x4[4]; } orc_union32;
-typedef union { orc_int64 i; double f; orc_int32 x2[2]; float x2f[2]; orc_int16 x4[4]; } orc_union64;
-#endif
-#ifndef ORC_RESTRICT
-#if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
-#define ORC_RESTRICT restrict
-#elif defined(__GNUC__) && __GNUC__ >= 4
-#define ORC_RESTRICT __restrict__
-#else
-#define ORC_RESTRICT
-#endif
-#endif
-
-#ifndef ORC_INTERNAL
-#if defined(__SUNPRO_C) && (__SUNPRO_C >= 0x590)
-#define ORC_INTERNAL __attribute__((visibility("hidden")))
-#elif defined(__SUNPRO_C) && (__SUNPRO_C >= 0x550)
-#define ORC_INTERNAL __hidden
-#elif defined (__GNUC__)
-#define ORC_INTERNAL __attribute__((visibility("hidden")))
-#else
-#define ORC_INTERNAL
-#endif
-#endif
-
-void video_convert_orc_memcpy_2d (guint8 * ORC_RESTRICT d1, int d1_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m);
-void video_convert_orc_convert_I420_UYVY (guint8 * ORC_RESTRICT d1, guint8 * ORC_RESTRICT d2, const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, const guint8 * ORC_RESTRICT s3, const guint8 * ORC_RESTRICT s4, int n);
-void video_convert_orc_convert_I420_YUY2 (guint8 * ORC_RESTRICT d1, guint8 * ORC_RESTRICT d2, const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, const guint8 * ORC_RESTRICT s3, const guint8 * ORC_RESTRICT s4, int n);
-void video_convert_orc_convert_I420_AYUV (guint8 * ORC_RESTRICT d1, guint8 * ORC_RESTRICT d2, const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, const guint8 * ORC_RESTRICT s3, const guint8 * ORC_RESTRICT s4, int n);
-void video_convert_orc_convert_YUY2_I420 (guint8 * ORC_RESTRICT d1, guint8 * ORC_RESTRICT d2, guint8 * ORC_RESTRICT d3, guint8 * ORC_RESTRICT d4, const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, int n);
-void video_convert_orc_convert_UYVY_YUY2 (guint8 * ORC_RESTRICT d1, int d1_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m);
-void video_convert_orc_planar_chroma_420_422 (guint8 * ORC_RESTRICT d1, int d1_stride, guint8 * ORC_RESTRICT d2, int d2_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m);
-void video_convert_orc_planar_chroma_420_444 (guint8 * ORC_RESTRICT d1, int d1_stride, guint8 * ORC_RESTRICT d2, int d2_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m);
-void video_convert_orc_planar_chroma_422_444 (guint8 * ORC_RESTRICT d1, int d1_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m);
-void video_convert_orc_planar_chroma_444_422 (guint8 * ORC_RESTRICT d1, int d1_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m);
-void video_convert_orc_planar_chroma_444_420 (guint8 * ORC_RESTRICT d1, int d1_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, const guint8 * ORC_RESTRICT s2, int s2_stride, int n, int m);
-void video_convert_orc_planar_chroma_422_420 (guint8 * ORC_RESTRICT d1, int d1_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, const guint8 * ORC_RESTRICT s2, int s2_stride, int n, int m);
-void video_convert_orc_convert_YUY2_AYUV (guint8 * ORC_RESTRICT d1, int d1_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m);
-void video_convert_orc_convert_UYVY_AYUV (guint8 * ORC_RESTRICT d1, int d1_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m);
-void video_convert_orc_convert_YUY2_Y42B (guint8 * ORC_RESTRICT d1, int d1_stride, guint8 * ORC_RESTRICT d2, int d2_stride, guint8 * ORC_RESTRICT d3, int d3_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m);
-void video_convert_orc_convert_UYVY_Y42B (guint8 * ORC_RESTRICT d1, int d1_stride, guint8 * ORC_RESTRICT d2, int d2_stride, guint8 * ORC_RESTRICT d3, int d3_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m);
-void video_convert_orc_convert_YUY2_Y444 (guint8 * ORC_RESTRICT d1, int d1_stride, guint8 * ORC_RESTRICT d2, int d2_stride, guint8 * ORC_RESTRICT d3, int d3_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m);
-void video_convert_orc_convert_UYVY_Y444 (guint8 * ORC_RESTRICT d1, int d1_stride, guint8 * ORC_RESTRICT d2, int d2_stride, guint8 * ORC_RESTRICT d3, int d3_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m);
-void video_convert_orc_convert_UYVY_I420 (guint8 * ORC_RESTRICT d1, guint8 * ORC_RESTRICT d2, guint8 * ORC_RESTRICT d3, guint8 * ORC_RESTRICT d4, const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, int n);
-void video_convert_orc_convert_AYUV_I420 (guint8 * ORC_RESTRICT d1, int d1_stride, guint8 * ORC_RESTRICT d2, int d2_stride, guint8 * ORC_RESTRICT d3, int d3_stride, guint8 * ORC_RESTRICT d4, int d4_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, const guint8 * ORC_RESTRICT s2, int s2_stride, int n, int m);
-void video_convert_orc_convert_AYUV_YUY2 (guint8 * ORC_RESTRICT d1, int d1_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m);
-void video_convert_orc_convert_AYUV_UYVY (guint8 * ORC_RESTRICT d1, int d1_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m);
-void video_convert_orc_convert_AYUV_Y42B (guint8 * ORC_RESTRICT d1, int d1_stride, guint8 * ORC_RESTRICT d2, int d2_stride, guint8 * ORC_RESTRICT d3, int d3_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m);
-void video_convert_orc_convert_AYUV_Y444 (guint8 * ORC_RESTRICT d1, int d1_stride, guint8 * ORC_RESTRICT d2, int d2_stride, guint8 * ORC_RESTRICT d3, int d3_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, int n, int m);
-void video_convert_orc_convert_Y42B_YUY2 (guint8 * ORC_RESTRICT d1, int d1_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, const guint8 * ORC_RESTRICT s2, int s2_stride, const guint8 * ORC_RESTRICT s3, int s3_stride, int n, int m);
-void video_convert_orc_convert_Y42B_UYVY (guint8 * ORC_RESTRICT d1, int d1_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, const guint8 * ORC_RESTRICT s2, int s2_stride, const guint8 * ORC_RESTRICT s3, int s3_stride, int n, int m);
-void video_convert_orc_convert_Y42B_AYUV (guint8 * ORC_RESTRICT d1, int d1_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, const guint8 * ORC_RESTRICT s2, int s2_stride, const guint8 * ORC_RESTRICT s3, int s3_stride, int n, int m);
-void video_convert_orc_convert_Y444_YUY2 (guint8 * ORC_RESTRICT d1, int d1_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, const guint8 * ORC_RESTRICT s2, int s2_stride, const guint8 * ORC_RESTRICT s3, int s3_stride, int n, int m);
-void video_convert_orc_convert_Y444_UYVY (guint8 * ORC_RESTRICT d1, int d1_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, const guint8 * ORC_RESTRICT s2, int s2_stride, const guint8 * ORC_RESTRICT s3, int s3_stride, int n, int m);
-void video_convert_orc_convert_Y444_AYUV (guint8 * ORC_RESTRICT d1, int d1_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, const guint8 * ORC_RESTRICT s2, int s2_stride, const guint8 * ORC_RESTRICT s3, int s3_stride, int n, int m);
-void video_convert_orc_convert_AYUV_ARGB (guint8 * ORC_RESTRICT d1, int d1_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, int p1, int p2, int p3, int p4, int p5, int n, int m);
-void video_convert_orc_convert_AYUV_BGRA (guint8 * ORC_RESTRICT d1, int d1_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, int p1, int p2, int p3, int p4, int p5, int n, int m);
-void video_convert_orc_convert_AYUV_ABGR (guint8 * ORC_RESTRICT d1, int d1_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, int p1, int p2, int p3, int p4, int p5, int n, int m);
-void video_convert_orc_convert_AYUV_RGBA (guint8 * ORC_RESTRICT d1, int d1_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, int p1, int p2, int p3, int p4, int p5, int n, int m);
-void video_convert_orc_convert_I420_BGRA (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, const guint8 * ORC_RESTRICT s3, int p1, int p2, int p3, int p4, int p5, int n);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
-
diff --git a/gst/videoconvert/gstvideoconvertorc.orc b/gst/videoconvert/gstvideoconvertorc.orc
deleted file mode 100644
index 29a1998..0000000
--- a/gst/videoconvert/gstvideoconvertorc.orc
+++ /dev/null
@@ -1,729 +0,0 @@
-
-.function video_convert_orc_memcpy_2d
-.flags 2d
-.dest 1 d1 guint8
-.source 1 s1 guint8
-
-copyb d1, s1
-
-.function video_convert_orc_convert_I420_UYVY
-.dest 4 d1 guint8
-.dest 4 d2 guint8
-.source 2 y1 guint8
-.source 2 y2 guint8
-.source 1 u guint8
-.source 1 v guint8
-.temp 2 uv
-
-mergebw uv, u, v
-x2 mergebw d1, uv, y1
-x2 mergebw d2, uv, y2
-
-
-.function video_convert_orc_convert_I420_YUY2
-.dest 4 d1 guint8
-.dest 4 d2 guint8
-.source 2 y1 guint8
-.source 2 y2 guint8
-.source 1 u guint8
-.source 1 v guint8
-.temp 2 uv
-
-mergebw uv, u, v
-x2 mergebw d1, y1, uv
-x2 mergebw d2, y2, uv
-
-
-
-.function video_convert_orc_convert_I420_AYUV
-.dest 4 d1 guint8
-.dest 4 d2 guint8
-.source 1 y1 guint8
-.source 1 y2 guint8
-.source 1 u guint8
-.source 1 v guint8
-.const 1 c255 255
-.temp 2 uv
-.temp 2 ay
-.temp 1 tu
-.temp 1 tv
-
-loadupdb tu, u
-loadupdb tv, v
-mergebw uv, tu, tv
-mergebw ay, c255, y1
-mergewl d1, ay, uv
-mergebw ay, c255, y2
-mergewl d2, ay, uv
-
-
-.function video_convert_orc_convert_YUY2_I420
-.dest 2 y1 guint8
-.dest 2 y2 guint8
-.dest 1 u guint8
-.dest 1 v guint8
-.source 4 yuv1 guint8
-.source 4 yuv2 guint8
-.temp 2 t1
-.temp 2 t2
-.temp 2 ty
-
-x2 splitwb t1, ty, yuv1
-storew y1, ty
-x2 splitwb t2, ty, yuv2
-storew y2, ty
-x2 avgub t1, t1, t2
-splitwb v, u, t1
-
-
-.function video_convert_orc_convert_UYVY_YUY2
-.flags 2d
-.dest 4 yuy2 guint8
-.source 4 uyvy guint8
-
-x2 swapw yuy2, uyvy
-
-
-.function video_convert_orc_planar_chroma_420_422
-.flags 2d
-.dest 1 d1 guint8
-.dest 1 d2 guint8
-.source 1 s guint8
-
-copyb d1, s
-copyb d2, s
-
-
-.function video_convert_orc_planar_chroma_420_444
-.flags 2d
-.dest 2 d1 guint8
-.dest 2 d2 guint8
-.source 1 s guint8
-.temp 2 t
-
-splatbw t, s
-storew d1, t
-storew d2, t
-
-
-.function video_convert_orc_planar_chroma_422_444
-.flags 2d
-.dest 2 d1 guint8
-.source 1 s guint8
-.temp 2 t
-
-splatbw t, s
-storew d1, t
-
-
-.function video_convert_orc_planar_chroma_444_422
-.flags 2d
-.dest 1 d guint8
-.source 2 s guint8
-.temp 1 t1
-.temp 1 t2
-
-splitwb t1, t2, s
-avgub d, t1, t2
-
-
-.function video_convert_orc_planar_chroma_444_420
-.flags 2d
-.dest 1 d guint8
-.source 2 s1 guint8
-.source 2 s2 guint8
-.temp 2 t
-.temp 1 t1
-.temp 1 t2
-
-x2 avgub t, s1, s2
-splitwb t1, t2, t
-avgub d, t1, t2
-
-
-.function video_convert_orc_planar_chroma_422_420
-.flags 2d
-.dest 1 d guint8
-.source 1 s1 guint8
-.source 1 s2 guint8
-
-avgub d, s1, s2
-
-
-.function video_convert_orc_convert_YUY2_AYUV
-.flags 2d
-.dest 8 ayuv guint8
-.source 4 yuy2 guint8
-.const 2 c255 0xff
-.temp 2 yy
-.temp 2 uv
-.temp 4 ayay
-.temp 4 uvuv
-
-x2 splitwb uv, yy, yuy2
-x2 mergebw ayay, c255, yy
-mergewl uvuv, uv, uv
-x2 mergewl ayuv, ayay, uvuv
-
-
-.function video_convert_orc_convert_UYVY_AYUV
-.flags 2d
-.dest 8 ayuv guint8
-.source 4 uyvy guint8
-.const 2 c255 0xff
-.temp 2 yy
-.temp 2 uv
-.temp 4 ayay
-.temp 4 uvuv
-
-x2 splitwb yy, uv, uyvy
-x2 mergebw ayay, c255, yy
-mergewl uvuv, uv, uv
-x2 mergewl ayuv, ayay, uvuv
-
-
-.function video_convert_orc_convert_YUY2_Y42B
-.flags 2d
-.dest 2 y guint8
-.dest 1 u guint8
-.dest 1 v guint8
-.source 4 yuy2 guint8
-.temp 2 uv
-
-x2 splitwb uv, y, yuy2
-splitwb v, u, uv
-
-
-.function video_convert_orc_convert_UYVY_Y42B
-.flags 2d
-.dest 2 y guint8
-.dest 1 u guint8
-.dest 1 v guint8
-.source 4 uyvy guint8
-.temp 2 uv
-
-x2 splitwb y, uv, uyvy
-splitwb v, u, uv
-
-
-.function video_convert_orc_convert_YUY2_Y444
-.flags 2d
-.dest 2 y guint8
-.dest 2 uu guint8
-.dest 2 vv guint8
-.source 4 yuy2 guint8
-.temp 2 uv
-.temp 1 u
-.temp 1 v
-
-x2 splitwb uv, y, yuy2
-splitwb v, u, uv
-splatbw uu, u
-splatbw vv, v
-
-
-.function video_convert_orc_convert_UYVY_Y444
-.flags 2d
-.dest 2 y guint8
-.dest 2 uu guint8
-.dest 2 vv guint8
-.source 4 uyvy guint8
-.temp 2 uv
-.temp 1 u
-.temp 1 v
-
-x2 splitwb y, uv, uyvy
-splitwb v, u, uv
-splatbw uu, u
-splatbw vv, v
-
-
-.function video_convert_orc_convert_UYVY_I420
-.dest 2 y1 guint8
-.dest 2 y2 guint8
-.dest 1 u guint8
-.dest 1 v guint8
-.source 4 yuv1 guint8
-.source 4 yuv2 guint8
-.temp 2 t1
-.temp 2 t2
-.temp 2 ty
-
-x2 splitwb ty, t1, yuv1
-storew y1, ty
-x2 splitwb ty, t2, yuv2
-storew y2, ty
-x2 avgub t1, t1, t2
-splitwb v, u, t1
-
-
-
-.function video_convert_orc_convert_AYUV_I420
-.flags 2d
-.dest 2 y1 guint8
-.dest 2 y2 guint8
-.dest 1 u guint8
-.dest 1 v guint8
-.source 8 ayuv1 guint8
-.source 8 ayuv2 guint8
-.temp 4 ay
-.temp 4 uv1
-.temp 4 uv2
-.temp 4 uv
-.temp 2 uu
-.temp 2 vv
-.temp 1 t1
-.temp 1 t2
-
-x2 splitlw uv1, ay, ayuv1
-x2 select1wb y1, ay
-x2 splitlw uv2, ay, ayuv2
-x2 select1wb y2, ay
-x4 avgub uv, uv1, uv2
-x2 splitwb vv, uu, uv
-splitwb t1, t2, uu
-avgub u, t1, t2
-splitwb t1, t2, vv
-avgub v, t1, t2
-
-
-
-.function video_convert_orc_convert_AYUV_YUY2
-.flags 2d
-.dest 4 yuy2 guint8
-.source 8 ayuv guint8
-.temp 2 yy
-.temp 2 uv1
-.temp 2 uv2
-.temp 4 ayay
-.temp 4 uvuv
-
-x2 splitlw uvuv, ayay, ayuv
-splitlw uv1, uv2, uvuv
-x2 avgub uv1, uv1, uv2
-x2 select1wb yy, ayay
-x2 mergebw yuy2, yy, uv1
-
-
-.function video_convert_orc_convert_AYUV_UYVY
-.flags 2d
-.dest 4 yuy2 guint8
-.source 8 ayuv guint8
-.temp 2 yy
-.temp 2 uv1
-.temp 2 uv2
-.temp 4 ayay
-.temp 4 uvuv
-
-x2 splitlw uvuv, ayay, ayuv
-splitlw uv1, uv2, uvuv
-x2 avgub uv1, uv1, uv2
-x2 select1wb yy, ayay
-x2 mergebw yuy2, uv1, yy
-
-
-
-.function video_convert_orc_convert_AYUV_Y42B
-.flags 2d
-.dest 2 y guint8
-.dest 1 u guint8
-.dest 1 v guint8
-.source 8 ayuv guint8
-.temp 4 ayay
-.temp 4 uvuv
-.temp 2 uv1
-.temp 2 uv2
-
-x2 splitlw uvuv, ayay, ayuv
-splitlw uv1, uv2, uvuv
-x2 avgub uv1, uv1, uv2
-splitwb v, u, uv1
-x2 select1wb y, ayay
-
-
-.function video_convert_orc_convert_AYUV_Y444
-.flags 2d
-.dest 1 y guint8
-.dest 1 u guint8
-.dest 1 v guint8
-.source 4 ayuv guint8
-.temp 2 ay
-.temp 2 uv
-
-splitlw uv, ay, ayuv
-splitwb v, u, uv
-select1wb y, ay
-
-
-.function video_convert_orc_convert_Y42B_YUY2
-.flags 2d
-.dest 4 yuy2 guint8
-.source 2 y guint8
-.source 1 u guint8
-.source 1 v guint8
-.temp 2 uv
-
-mergebw uv, u, v
-x2 mergebw yuy2, y, uv
-
-
-.function video_convert_orc_convert_Y42B_UYVY
-.flags 2d
-.dest 4 uyvy guint8
-.source 2 y guint8
-.source 1 u guint8
-.source 1 v guint8
-.temp 2 uv
-
-mergebw uv, u, v
-x2 mergebw uyvy, uv, y
-
-
-.function video_convert_orc_convert_Y42B_AYUV
-.flags 2d
-.dest 8 ayuv guint8
-.source 2 yy guint8
-.source 1 u guint8
-.source 1 v guint8
-.const 1 c255 255
-.temp 2 uv
-.temp 2 ay
-.temp 4 uvuv
-.temp 4 ayay
-
-mergebw uv, u, v
-x2 mergebw ayay, c255, yy
-mergewl uvuv, uv, uv
-x2 mergewl ayuv, ayay, uvuv
-
-
-.function video_convert_orc_convert_Y444_YUY2
-.flags 2d
-.dest 4 yuy2 guint8
-.source 2 y guint8
-.source 2 u guint8
-.source 2 v guint8
-.temp 2 uv
-.temp 4 uvuv
-.temp 2 uv1
-.temp 2 uv2
-
-x2 mergebw uvuv, u, v
-splitlw uv1, uv2, uvuv
-x2 avgub uv, uv1, uv2
-x2 mergebw yuy2, y, uv
-
-
-.function video_convert_orc_convert_Y444_UYVY
-.flags 2d
-.dest 4 uyvy guint8
-.source 2 y guint8
-.source 2 u guint8
-.source 2 v guint8
-.temp 2 uv
-.temp 4 uvuv
-.temp 2 uv1
-.temp 2 uv2
-
-x2 mergebw uvuv, u, v
-splitlw uv1, uv2, uvuv
-x2 avgub uv, uv1, uv2
-x2 mergebw uyvy, uv, y
-
-
-.function video_convert_orc_convert_Y444_AYUV
-.flags 2d
-.dest 4 ayuv guint8
-.source 1 yy guint8
-.source 1 u guint8
-.source 1 v guint8
-.const 1 c255 255
-.temp 2 uv
-.temp 2 ay
-
-mergebw uv, u, v
-mergebw ay, c255, yy
-mergewl ayuv, ay, uv
-
-
-
-.function video_convert_orc_convert_AYUV_ARGB
-.flags 2d
-.dest 4 argb guint8
-.source 4 ayuv guint8
-.param 2 p1
-.param 2 p2
-.param 2 p3
-.param 2 p4
-.param 2 p5
-.temp 1 a
-.temp 1 y
-.temp 1 u
-.temp 1 v
-.temp 2 wy
-.temp 2 wu
-.temp 2 wv
-.temp 2 wr
-.temp 2 wg
-.temp 2 wb
-.temp 1 r
-.temp 1 g
-.temp 1 b
-.temp 4 x
-.const 1 c128 128
-
-x4 subb x, ayuv, c128 
-splitlw wv, wy, x
-splitwb y, a, wy
-splitwb v, u, wv
-
-splatbw wy, y
-splatbw wu, u
-splatbw wv, v
-
-mulhsw wy, wy, p1
-
-mulhsw wr, wv, p2
-addssw wr, wy, wr
-
-mulhsw wb, wu, p3
-addssw wb, wy, wb
-
-mulhsw wg, wu, p4
-addssw wg, wy, wg
-mulhsw wy, wv, p5
-addssw wg, wg, wy
-
-convssswb r, wr
-convssswb g, wg
-convssswb b, wb
-
-mergebw wr, a, r
-mergebw wb, g, b
-mergewl x, wr, wb
-x4 addb argb, x, c128
-
-.function video_convert_orc_convert_AYUV_BGRA
-.flags 2d
-.dest 4 bgra guint8
-.source 4 ayuv guint8
-.param 2 p1
-.param 2 p2
-.param 2 p3
-.param 2 p4
-.param 2 p5
-.temp 1 a
-.temp 1 y
-.temp 1 u
-.temp 1 v
-.temp 2 wy
-.temp 2 wu
-.temp 2 wv
-.temp 2 wr
-.temp 2 wg
-.temp 2 wb
-.temp 1 r
-.temp 1 g
-.temp 1 b
-.temp 4 x
-.const 1 c128 128
-
-x4 subb x, ayuv, c128 
-splitlw wv, wy, x
-splitwb y, a, wy
-splitwb v, u, wv
-
-splatbw wy, y
-splatbw wu, u
-splatbw wv, v
-
-mulhsw wy, wy, p1
-
-mulhsw wr, wv, p2
-addssw wr, wy, wr
-
-mulhsw wb, wu, p3
-addssw wb, wy, wb
-
-mulhsw wg, wu, p4
-addssw wg, wy, wg
-mulhsw wy, wv, p5
-addssw wg, wg, wy
-
-convssswb r, wr
-convssswb g, wg
-convssswb b, wb
-
-mergebw wb, b, g
-mergebw wr, r, a
-mergewl x, wb, wr
-x4 addb bgra, x, c128
-
-
-.function video_convert_orc_convert_AYUV_ABGR
-.flags 2d
-.dest 4 argb guint8
-.source 4 ayuv guint8
-.param 2 p1
-.param 2 p2
-.param 2 p3
-.param 2 p4
-.param 2 p5
-.temp 1 a
-.temp 1 y
-.temp 1 u
-.temp 1 v
-.temp 2 wy
-.temp 2 wu
-.temp 2 wv
-.temp 2 wr
-.temp 2 wg
-.temp 2 wb
-.temp 1 r
-.temp 1 g
-.temp 1 b
-.temp 4 x
-.const 1 c128 128
-
-x4 subb x, ayuv, c128 
-splitlw wv, wy, x
-splitwb y, a, wy
-splitwb v, u, wv
-
-splatbw wy, y
-splatbw wu, u
-splatbw wv, v
-
-mulhsw wy, wy, p1
-
-mulhsw wr, wv, p2
-addssw wr, wy, wr
-
-mulhsw wb, wu, p3
-addssw wb, wy, wb
-
-mulhsw wg, wu, p4
-addssw wg, wy, wg
-mulhsw wy, wv, p5
-addssw wg, wg, wy
-
-convssswb r, wr
-convssswb g, wg
-convssswb b, wb
-
-mergebw wb, a, b
-mergebw wr, g, r
-mergewl x, wb, wr
-x4 addb argb, x, c128
-
-.function video_convert_orc_convert_AYUV_RGBA
-.flags 2d
-.dest 4 argb guint8
-.source 4 ayuv guint8
-.param 2 p1
-.param 2 p2
-.param 2 p3
-.param 2 p4
-.param 2 p5
-.temp 1 a
-.temp 1 y
-.temp 1 u
-.temp 1 v
-.temp 2 wy
-.temp 2 wu
-.temp 2 wv
-.temp 2 wr
-.temp 2 wg
-.temp 2 wb
-.temp 1 r
-.temp 1 g
-.temp 1 b
-.temp 4 x
-.const 1 c128 128
-
-x4 subb x, ayuv, c128 
-splitlw wv, wy, x
-splitwb y, a, wy
-splitwb v, u, wv
-
-splatbw wy, y
-splatbw wu, u
-splatbw wv, v
-
-mulhsw wy, wy, p1
-
-mulhsw wr, wv, p2
-addssw wr, wy, wr
-
-mulhsw wb, wu, p3
-addssw wb, wy, wb
-
-mulhsw wg, wu, p4
-addssw wg, wy, wg
-mulhsw wy, wv, p5
-addssw wg, wg, wy
-
-convssswb r, wr
-convssswb g, wg
-convssswb b, wb
-
-mergebw wr, r, g
-mergebw wb, b, a
-mergewl x, wr, wb
-x4 addb argb, x, c128
-
-
-
-.function video_convert_orc_convert_I420_BGRA
-.dest 4 argb guint8
-.source 1 y guint8
-.source 1 u guint8
-.source 1 v guint8
-.param 2 p1
-.param 2 p2
-.param 2 p3
-.param 2 p4
-.param 2 p5
-.temp 2 wy
-.temp 2 wu
-.temp 2 wv
-.temp 2 wr
-.temp 2 wg
-.temp 2 wb
-.temp 1 r
-.temp 1 g
-.temp 1 b
-.temp 4 x
-.const 1 c128 128
-
-subb r, y, c128
-splatbw wy, r
-loadupdb r, u
-subb r, r, c128
-splatbw wu, r
-loadupdb r, v
-subb r, r, c128
-splatbw wv, r
-
-mulhsw wy, wy, p1
-
-mulhsw wr, wv, p2
-addssw wr, wy, wr
-
-mulhsw wb, wu, p3
-addssw wb, wy, wb
-
-mulhsw wg, wu, p4
-addssw wg, wy, wg
-mulhsw wy, wv, p5
-addssw wg, wg, wy
-
-convssswb r, wr
-convssswb g, wg
-convssswb b, wb
-
-mergebw wb, b, g
-mergebw wr, r, 127
-mergewl x, wb, wr
-x4 addb argb, x, c128
-
diff --git a/gst/videoconvert/videoconvert.c b/gst/videoconvert/videoconvert.c
deleted file mode 100644
index 380822d..0000000
--- a/gst/videoconvert/videoconvert.c
+++ /dev/null
@@ -1,1502 +0,0 @@
-/* GStreamer
- * Copyright (C) 2010 David Schleef <ds@schleef.org>
- * 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 "videoconvert.h"
-
-#include <glib.h>
-#include <string.h>
-#include <math.h>
-
-#include "gstvideoconvertorc.h"
-
-
-static void videoconvert_convert_generic (VideoConvert * convert,
-    GstVideoFrame * dest, const GstVideoFrame * src);
-static void videoconvert_convert_matrix8 (VideoConvert * convert,
-    gpointer pixels);
-static void videoconvert_convert_matrix16 (VideoConvert * convert,
-    gpointer pixels);
-static gboolean videoconvert_convert_lookup_fastpath (VideoConvert * convert);
-static gboolean videoconvert_convert_compute_matrix (VideoConvert * convert);
-static gboolean videoconvert_convert_compute_resample (VideoConvert * convert);
-static void videoconvert_dither_verterr (VideoConvert * convert,
-    guint16 * pixels, int j);
-static void videoconvert_dither_halftone (VideoConvert * convert,
-    guint16 * pixels, int j);
-
-
-VideoConvert *
-videoconvert_convert_new (GstVideoInfo * in_info, GstVideoInfo * out_info)
-{
-  VideoConvert *convert;
-  gint width;
-
-  convert = g_malloc0 (sizeof (VideoConvert));
-
-  convert->in_info = *in_info;
-  convert->out_info = *out_info;
-  convert->dither16 = NULL;
-
-  convert->width = GST_VIDEO_INFO_WIDTH (in_info);
-  convert->height = GST_VIDEO_INFO_HEIGHT (in_info);
-
-  if (!videoconvert_convert_lookup_fastpath (convert)) {
-    convert->convert = videoconvert_convert_generic;
-    if (!videoconvert_convert_compute_matrix (convert))
-      goto no_convert;
-
-    if (!videoconvert_convert_compute_resample (convert))
-      goto no_convert;
-  }
-
-  width = convert->width;
-
-  convert->lines = out_info->finfo->pack_lines;
-  convert->errline = g_malloc0 (sizeof (guint16) * width * 4);
-
-  return convert;
-
-  /* ERRORS */
-no_convert:
-  {
-    videoconvert_convert_free (convert);
-    return NULL;
-  }
-}
-
-void
-videoconvert_convert_free (VideoConvert * convert)
-{
-  gint i;
-
-  if (convert->upsample)
-    gst_video_chroma_resample_free (convert->upsample);
-  if (convert->downsample)
-    gst_video_chroma_resample_free (convert->downsample);
-
-  for (i = 0; i < convert->n_tmplines; i++)
-    g_free (convert->tmplines[i]);
-  g_free (convert->tmplines);
-  g_free (convert->errline);
-
-  g_free (convert);
-}
-
-void
-videoconvert_convert_set_dither (VideoConvert * convert, int type)
-{
-  switch (type) {
-    case 0:
-    default:
-      convert->dither16 = NULL;
-      break;
-    case 1:
-      convert->dither16 = videoconvert_dither_verterr;
-      break;
-    case 2:
-      convert->dither16 = videoconvert_dither_halftone;
-      break;
-  }
-}
-
-void
-videoconvert_convert_convert (VideoConvert * convert,
-    GstVideoFrame * dest, const GstVideoFrame * src)
-{
-  convert->convert (convert, dest, src);
-}
-
-#define SCALE    (8)
-#define SCALE_F  ((float) (1 << SCALE))
-
-static void
-videoconvert_convert_matrix8 (VideoConvert * convert, gpointer pixels)
-{
-  int i;
-  int r, g, b;
-  int y, u, v;
-  guint8 *p = pixels;
-
-  for (i = 0; i < convert->width; i++) {
-    r = p[i * 4 + 1];
-    g = p[i * 4 + 2];
-    b = p[i * 4 + 3];
-
-    y = (convert->cmatrix[0][0] * r + convert->cmatrix[0][1] * g +
-        convert->cmatrix[0][2] * b + convert->cmatrix[0][3]) >> SCALE;
-    u = (convert->cmatrix[1][0] * r + convert->cmatrix[1][1] * g +
-        convert->cmatrix[1][2] * b + convert->cmatrix[1][3]) >> SCALE;
-    v = (convert->cmatrix[2][0] * r + convert->cmatrix[2][1] * g +
-        convert->cmatrix[2][2] * b + convert->cmatrix[2][3]) >> SCALE;
-
-    p[i * 4 + 1] = CLAMP (y, 0, 255);
-    p[i * 4 + 2] = CLAMP (u, 0, 255);
-    p[i * 4 + 3] = CLAMP (v, 0, 255);
-  }
-}
-
-static void
-videoconvert_convert_matrix16 (VideoConvert * convert, gpointer pixels)
-{
-  int i;
-  int r, g, b;
-  int y, u, v;
-  guint16 *p = pixels;
-
-  for (i = 0; i < convert->width; i++) {
-    r = p[i * 4 + 1];
-    g = p[i * 4 + 2];
-    b = p[i * 4 + 3];
-
-    y = (convert->cmatrix[0][0] * r + convert->cmatrix[0][1] * g +
-        convert->cmatrix[0][2] * b + convert->cmatrix[0][3]) >> SCALE;
-    u = (convert->cmatrix[1][0] * r + convert->cmatrix[1][1] * g +
-        convert->cmatrix[1][2] * b + convert->cmatrix[1][3]) >> SCALE;
-    v = (convert->cmatrix[2][0] * r + convert->cmatrix[2][1] * g +
-        convert->cmatrix[2][2] * b + convert->cmatrix[2][3]) >> SCALE;
-
-    p[i * 4 + 1] = CLAMP (y, 0, 65535);
-    p[i * 4 + 2] = CLAMP (u, 0, 65535);
-    p[i * 4 + 3] = CLAMP (v, 0, 65535);
-  }
-}
-
-static gboolean
-get_Kr_Kb (GstVideoColorMatrix matrix, gdouble * Kr, gdouble * Kb)
-{
-  gboolean res = TRUE;
-
-  switch (matrix) {
-      /* RGB */
-    default:
-    case GST_VIDEO_COLOR_MATRIX_RGB:
-      res = FALSE;
-      break;
-      /* YUV */
-    case GST_VIDEO_COLOR_MATRIX_FCC:
-      *Kr = 0.30;
-      *Kb = 0.11;
-      break;
-    case GST_VIDEO_COLOR_MATRIX_BT709:
-      *Kr = 0.2126;
-      *Kb = 0.0722;
-      break;
-    case GST_VIDEO_COLOR_MATRIX_BT601:
-      *Kr = 0.2990;
-      *Kb = 0.1140;
-      break;
-    case GST_VIDEO_COLOR_MATRIX_SMPTE240M:
-      *Kr = 0.212;
-      *Kb = 0.087;
-      break;
-  }
-  GST_DEBUG ("matrix: %d, Kr %f, Kb %f", matrix, *Kr, *Kb);
-  return res;
-}
-
-static gboolean
-videoconvert_convert_compute_matrix (VideoConvert * convert)
-{
-  GstVideoInfo *in_info, *out_info;
-  ColorMatrix dst;
-  gint i, j;
-  const GstVideoFormatInfo *sfinfo, *dfinfo;
-  const GstVideoFormatInfo *suinfo, *duinfo;
-  gint offset[4], scale[4];
-  gdouble Kr = 0, Kb = 0;
-
-  in_info = &convert->in_info;
-  out_info = &convert->out_info;
-
-  sfinfo = in_info->finfo;
-  dfinfo = out_info->finfo;
-
-  if (sfinfo->unpack_func == NULL)
-    goto no_unpack_func;
-
-  if (dfinfo->pack_func == NULL)
-    goto no_pack_func;
-
-  suinfo = gst_video_format_get_info (sfinfo->unpack_format);
-  duinfo = gst_video_format_get_info (dfinfo->unpack_format);
-
-  convert->in_bits = GST_VIDEO_FORMAT_INFO_DEPTH (suinfo, 0);
-  convert->out_bits = GST_VIDEO_FORMAT_INFO_DEPTH (duinfo, 0);
-
-  GST_DEBUG ("in bits %d, out bits %d", convert->in_bits, convert->out_bits);
-
-  if (in_info->colorimetry.range == out_info->colorimetry.range &&
-      in_info->colorimetry.matrix == out_info->colorimetry.matrix) {
-    GST_DEBUG ("using identity color transform");
-    convert->matrix = NULL;
-    return TRUE;
-  }
-
-  /* calculate intermediate format for the matrix. When unpacking, we expand
-   * input to 16 when one of the inputs is 16 bits */
-  if (convert->in_bits == 16 || convert->out_bits == 16) {
-    convert->matrix = videoconvert_convert_matrix16;
-
-    if (GST_VIDEO_FORMAT_INFO_IS_RGB (suinfo))
-      suinfo = gst_video_format_get_info (GST_VIDEO_FORMAT_ARGB64);
-    else
-      suinfo = gst_video_format_get_info (GST_VIDEO_FORMAT_AYUV64);
-
-    if (GST_VIDEO_FORMAT_INFO_IS_RGB (duinfo))
-      duinfo = gst_video_format_get_info (GST_VIDEO_FORMAT_ARGB64);
-    else
-      duinfo = gst_video_format_get_info (GST_VIDEO_FORMAT_AYUV64);
-  } else {
-    convert->matrix = videoconvert_convert_matrix8;
-  }
-
-  color_matrix_set_identity (&dst);
-
-  /* 1, bring color components to [0..1.0] range */
-  gst_video_color_range_offsets (in_info->colorimetry.range, suinfo, offset,
-      scale);
-
-  color_matrix_offset_components (&dst, -offset[0], -offset[1], -offset[2]);
-
-  color_matrix_scale_components (&dst, 1 / ((float) scale[0]),
-      1 / ((float) scale[1]), 1 / ((float) scale[2]));
-
-  /* 2. bring components to R'G'B' space */
-  if (get_Kr_Kb (in_info->colorimetry.matrix, &Kr, &Kb))
-    color_matrix_YCbCr_to_RGB (&dst, Kr, Kb);
-
-  /* 3. inverse transfer function. R'G'B' to linear RGB */
-
-  /* 4. from RGB to XYZ using the primaries */
-
-  /* 5. from XYZ to RGB using the primaries */
-
-  /* 6. transfer function. linear RGB to R'G'B' */
-
-  /* 7. bring components to YCbCr space */
-  if (get_Kr_Kb (out_info->colorimetry.matrix, &Kr, &Kb))
-    color_matrix_RGB_to_YCbCr (&dst, Kr, Kb);
-
-  /* 8, bring color components to nominal range */
-  gst_video_color_range_offsets (out_info->colorimetry.range, duinfo, offset,
-      scale);
-
-  color_matrix_scale_components (&dst, (float) scale[0], (float) scale[1],
-      (float) scale[2]);
-
-  color_matrix_offset_components (&dst, offset[0], offset[1], offset[2]);
-
-  /* because we're doing fixed point matrix coefficients */
-  color_matrix_scale_components (&dst, SCALE_F, SCALE_F, SCALE_F);
-
-  for (i = 0; i < 4; i++)
-    for (j = 0; j < 4; j++)
-      convert->cmatrix[i][j] = rint (dst.m[i][j]);
-
-  GST_DEBUG ("[%6d %6d %6d %6d]", convert->cmatrix[0][0],
-      convert->cmatrix[0][1], convert->cmatrix[0][2], convert->cmatrix[0][3]);
-  GST_DEBUG ("[%6d %6d %6d %6d]", convert->cmatrix[1][0],
-      convert->cmatrix[1][1], convert->cmatrix[1][2], convert->cmatrix[1][3]);
-  GST_DEBUG ("[%6d %6d %6d %6d]", convert->cmatrix[2][0],
-      convert->cmatrix[2][1], convert->cmatrix[2][2], convert->cmatrix[2][3]);
-  GST_DEBUG ("[%6d %6d %6d %6d]", convert->cmatrix[3][0],
-      convert->cmatrix[3][1], convert->cmatrix[3][2], convert->cmatrix[3][3]);
-
-  return TRUE;
-
-  /* ERRORS */
-no_unpack_func:
-  {
-    GST_ERROR ("no unpack_func for format %s",
-        gst_video_format_to_string (GST_VIDEO_INFO_FORMAT (in_info)));
-    return FALSE;
-  }
-no_pack_func:
-  {
-    GST_ERROR ("no pack_func for format %s",
-        gst_video_format_to_string (GST_VIDEO_INFO_FORMAT (out_info)));
-    return FALSE;
-  }
-}
-
-static void
-videoconvert_dither_verterr (VideoConvert * convert, guint16 * pixels, int j)
-{
-  int i;
-  guint16 *errline = convert->errline;
-  unsigned int mask = 0xff;
-
-  for (i = 0; i < 4 * convert->width; i++) {
-    int x = pixels[i] + errline[i];
-    if (x > 65535)
-      x = 65535;
-    pixels[i] = x;
-    errline[i] = x & mask;
-  }
-}
-
-static void
-videoconvert_dither_halftone (VideoConvert * convert, guint16 * pixels, int j)
-{
-  int i;
-  static guint16 halftone[8][8] = {
-    {0, 128, 32, 160, 8, 136, 40, 168},
-    {192, 64, 224, 96, 200, 72, 232, 104},
-    {48, 176, 16, 144, 56, 184, 24, 152},
-    {240, 112, 208, 80, 248, 120, 216, 88},
-    {12, 240, 44, 172, 4, 132, 36, 164},
-    {204, 76, 236, 108, 196, 68, 228, 100},
-    {60, 188, 28, 156, 52, 180, 20, 148},
-    {252, 142, 220, 92, 244, 116, 212, 84}
-  };
-
-  for (i = 0; i < convert->width * 4; i++) {
-    int x;
-    x = pixels[i] + halftone[(i >> 2) & 7][j & 7];
-    if (x > 65535)
-      x = 65535;
-    pixels[i] = x;
-  }
-}
-
-static void
-alloc_tmplines (VideoConvert * convert, guint lines, gint width)
-{
-  gint i;
-
-  convert->n_tmplines = lines;
-  convert->tmplines = g_malloc (lines * sizeof (gpointer));
-  for (i = 0; i < lines; i++)
-    convert->tmplines[i] = g_malloc (sizeof (guint16) * (width + 8) * 4);
-}
-
-static gboolean
-videoconvert_convert_compute_resample (VideoConvert * convert)
-{
-  GstVideoInfo *in_info, *out_info;
-  const GstVideoFormatInfo *sfinfo, *dfinfo;
-  gint width;
-
-  in_info = &convert->in_info;
-  out_info = &convert->out_info;
-
-  sfinfo = in_info->finfo;
-  dfinfo = out_info->finfo;
-
-  width = convert->width;
-
-  if (sfinfo->w_sub[2] != dfinfo->w_sub[2] ||
-      sfinfo->h_sub[2] != dfinfo->h_sub[2] ||
-      in_info->chroma_site != out_info->chroma_site) {
-    convert->upsample = gst_video_chroma_resample_new (0,
-        in_info->chroma_site, 0, sfinfo->unpack_format, sfinfo->w_sub[2],
-        sfinfo->h_sub[2]);
-
-
-    convert->downsample = gst_video_chroma_resample_new (0,
-        out_info->chroma_site, 0, dfinfo->unpack_format, -dfinfo->w_sub[2],
-        -dfinfo->h_sub[2]);
-
-  } else {
-    convert->upsample = NULL;
-    convert->downsample = NULL;
-  }
-
-  if (convert->upsample) {
-    gst_video_chroma_resample_get_info (convert->upsample,
-        &convert->up_n_lines, &convert->up_offset);
-  } else {
-    convert->up_n_lines = 1;
-    convert->up_offset = 0;
-  }
-  if (convert->downsample) {
-    gst_video_chroma_resample_get_info (convert->downsample,
-        &convert->down_n_lines, &convert->down_offset);
-  } else {
-    convert->down_n_lines = 1;
-    convert->down_offset = 0;
-  }
-  GST_DEBUG ("upsample: %p, site: %d, offset %d, n_lines %d", convert->upsample,
-      in_info->chroma_site, convert->up_offset, convert->up_n_lines);
-  GST_DEBUG ("downsample: %p, site: %d, offset %d, n_lines %d",
-      convert->downsample, out_info->chroma_site, convert->down_offset,
-      convert->down_n_lines);
-
-  alloc_tmplines (convert, convert->down_n_lines + convert->up_n_lines, width);
-
-  return TRUE;
-}
-
-#define TO_16(x) (((x)<<8) | (x))
-
-static void
-convert_to16 (gpointer line, gint width)
-{
-  guint8 *line8 = line;
-  guint16 *line16 = line;
-  gint i;
-
-  for (i = (width - 1) * 4; i >= 0; i--)
-    line16[i] = TO_16 (line8[i]);
-}
-
-static void
-convert_to8 (gpointer line, gint width)
-{
-  guint8 *line8 = line;
-  guint16 *line16 = line;
-  gint i;
-
-  for (i = 0; i < width * 4; i++)
-    line8[i] = line16[i] >> 8;
-}
-
-#define UNPACK_FRAME(frame,dest,line,width)          \
-  frame->info.finfo->unpack_func (frame->info.finfo, \
-      (GST_VIDEO_FRAME_IS_INTERLACED (frame) ?       \
-        GST_VIDEO_PACK_FLAG_INTERLACED :             \
-        GST_VIDEO_PACK_FLAG_NONE),                   \
-      dest, frame->data, frame->info.stride, 0,      \
-      line, width)
-#define PACK_FRAME(frame,dest,line,width)            \
-  frame->info.finfo->pack_func (frame->info.finfo,   \
-      (GST_VIDEO_FRAME_IS_INTERLACED (frame) ?       \
-        GST_VIDEO_PACK_FLAG_INTERLACED :             \
-        GST_VIDEO_PACK_FLAG_NONE),                   \
-      dest, 0, frame->data, frame->info.stride,      \
-      frame->info.chroma_site, line, width);
-
-static void
-videoconvert_convert_generic (VideoConvert * convert, GstVideoFrame * dest,
-    const GstVideoFrame * src)
-{
-  int j, k;
-  gint width, height, lines, max_lines;
-  guint in_bits, out_bits;
-  gconstpointer pal;
-  gsize palsize;
-  guint up_n_lines, down_n_lines;
-  gint up_offset, down_offset;
-  gint in_lines, out_lines;
-  gint up_line, down_line;
-  gint start_offset, stop_offset;
-  gpointer in_tmplines[8];
-  gpointer out_tmplines[8];
-
-  height = convert->height;
-  width = convert->width;
-
-  in_bits = convert->in_bits;
-  out_bits = convert->out_bits;
-
-  lines = convert->lines;
-  up_n_lines = convert->up_n_lines;
-  up_offset = convert->up_offset;
-  down_n_lines = convert->down_n_lines;
-  down_offset = convert->down_offset;
-  max_lines = convert->n_tmplines;
-
-  in_lines = 0;
-  out_lines = 0;
-
-  GST_DEBUG ("up_offset %d, up_n_lines %u", up_offset, up_n_lines);
-
-  start_offset = MIN (up_offset, down_offset);
-  stop_offset = height + start_offset + MAX (up_n_lines, down_n_lines);
-
-  for (; start_offset < stop_offset; start_offset++) {
-    guint idx, start;
-
-    idx = CLAMP (start_offset, 0, height);
-    in_tmplines[in_lines] = convert->tmplines[idx % max_lines];
-    out_tmplines[out_lines] = in_tmplines[in_lines];
-    GST_DEBUG ("start_offset %d/%d, %d, idx %u, in %d, out %d", start_offset,
-        stop_offset, up_offset, idx, in_lines, out_lines);
-
-    up_line = up_offset + in_lines;
-
-    /* extract the next line */
-    if (up_line >= 0 && up_line < height) {
-      GST_DEBUG ("unpack line %d into %d", up_line, in_lines);
-      UNPACK_FRAME (src, in_tmplines[in_lines], up_line, width);
-    }
-
-    if (start_offset >= up_offset)
-      in_lines++;
-
-    if (start_offset >= down_offset)
-      out_lines++;
-
-    if (in_lines < up_n_lines)
-      continue;
-
-    in_lines = 0;
-
-    /* we have enough lines to upsample */
-    if (convert->upsample) {
-      GST_DEBUG ("doing upsample");
-      gst_video_chroma_resample (convert->upsample, in_tmplines, width);
-    }
-
-    /* convert upsampled lines */
-    for (k = 0; k < up_n_lines; k++) {
-      down_line = up_offset + k;
-
-      /* only takes lines with valid output */
-      if (down_line < 0 || down_line >= height)
-        continue;
-
-      GST_DEBUG ("handle line %d, %d/%d, down_line %d", k, out_lines,
-          down_n_lines, down_line);
-
-      if (out_bits == 16 || in_bits == 16) {
-        /* FIXME, we can scale in the conversion matrix */
-        if (in_bits == 8)
-          convert_to16 (in_tmplines[k], width);
-
-        if (convert->matrix)
-          convert->matrix (convert, in_tmplines[k]);
-        if (convert->dither16)
-          convert->dither16 (convert, in_tmplines[k], down_line);
-
-        if (out_bits == 8)
-          convert_to8 (in_tmplines[k], width);
-      } else {
-        if (convert->matrix)
-          convert->matrix (convert, in_tmplines[k]);
-      }
-    }
-
-    start = 0;
-    while (out_lines >= down_n_lines) {
-      if (convert->downsample) {
-        GST_DEBUG ("doing downsample %u", start);
-        gst_video_chroma_resample (convert->downsample,
-            &out_tmplines[start], width);
-      }
-
-      for (j = 0; j < down_n_lines; j += lines) {
-        idx = down_offset + j;
-
-        if (idx < height) {
-          GST_DEBUG ("packing line %d %d %d", j + start, down_offset, idx);
-          /* FIXME, not correct if lines > 1 */
-          PACK_FRAME (dest, out_tmplines[j + start], idx, width);
-        }
-      }
-      down_offset += down_n_lines;
-      start += down_n_lines;
-      out_lines -= down_n_lines;
-    }
-    /* we didn't process these lines, move them up for the next round */
-    for (j = 0; j < out_lines; j++) {
-      GST_DEBUG ("move line %d->%d", j + start, j);
-      out_tmplines[j] = out_tmplines[j + start];
-    }
-
-    up_offset += up_n_lines;
-  }
-  if ((pal =
-          gst_video_format_get_palette (GST_VIDEO_FRAME_FORMAT (dest),
-              &palsize))) {
-    memcpy (GST_VIDEO_FRAME_PLANE_DATA (dest, 1), pal, palsize);
-  }
-}
-
-#define FRAME_GET_PLANE_STRIDE(frame, plane) \
-  GST_VIDEO_FRAME_PLANE_STRIDE (frame, plane)
-#define FRAME_GET_PLANE_LINE(frame, plane, line) \
-  (gpointer)(((guint8*)(GST_VIDEO_FRAME_PLANE_DATA (frame, plane))) + \
-      FRAME_GET_PLANE_STRIDE (frame, plane) * (line))
-
-#define FRAME_GET_COMP_STRIDE(frame, comp) \
-  GST_VIDEO_FRAME_COMP_STRIDE (frame, comp)
-#define FRAME_GET_COMP_LINE(frame, comp, line) \
-  (gpointer)(((guint8*)(GST_VIDEO_FRAME_COMP_DATA (frame, comp))) + \
-      FRAME_GET_COMP_STRIDE (frame, comp) * (line))
-
-#define FRAME_GET_STRIDE(frame)      FRAME_GET_PLANE_STRIDE (frame, 0)
-#define FRAME_GET_LINE(frame,line)   FRAME_GET_PLANE_LINE (frame, 0, line)
-
-#define FRAME_GET_Y_LINE(frame,line) FRAME_GET_COMP_LINE(frame, GST_VIDEO_COMP_Y, line)
-#define FRAME_GET_U_LINE(frame,line) FRAME_GET_COMP_LINE(frame, GST_VIDEO_COMP_U, line)
-#define FRAME_GET_V_LINE(frame,line) FRAME_GET_COMP_LINE(frame, GST_VIDEO_COMP_V, line)
-#define FRAME_GET_A_LINE(frame,line) FRAME_GET_COMP_LINE(frame, GST_VIDEO_COMP_A, line)
-
-#define FRAME_GET_Y_STRIDE(frame)    FRAME_GET_COMP_STRIDE(frame, GST_VIDEO_COMP_Y)
-#define FRAME_GET_U_STRIDE(frame)    FRAME_GET_COMP_STRIDE(frame, GST_VIDEO_COMP_U)
-#define FRAME_GET_V_STRIDE(frame)    FRAME_GET_COMP_STRIDE(frame, GST_VIDEO_COMP_V)
-#define FRAME_GET_A_STRIDE(frame)    FRAME_GET_COMP_STRIDE(frame, GST_VIDEO_COMP_A)
-
-/* Fast paths */
-
-#define GET_LINE_OFFSETS(interlaced,line,l1,l2) \
-    if (interlaced) {                           \
-      l1 = (line & 2 ? line - 1 : line);        \
-      l2 = l1 + 2;                              \
-    } else {                                    \
-      l1 = line;                                \
-      l2 = l1 + 1;                              \
-    }
-
-
-static void
-convert_I420_YUY2 (VideoConvert * convert, GstVideoFrame * dest,
-    const GstVideoFrame * src)
-{
-  int i;
-  gint width = convert->width;
-  gint height = convert->height;
-  gboolean interlaced = GST_VIDEO_FRAME_IS_INTERLACED (src);
-  gint l1, l2;
-
-  for (i = 0; i < GST_ROUND_DOWN_2 (height); i += 2) {
-    GET_LINE_OFFSETS (interlaced, i, l1, l2);
-
-    video_convert_orc_convert_I420_YUY2 (FRAME_GET_LINE (dest, l1),
-        FRAME_GET_LINE (dest, l2),
-        FRAME_GET_Y_LINE (src, l1),
-        FRAME_GET_Y_LINE (src, l2),
-        FRAME_GET_U_LINE (src, i >> 1),
-        FRAME_GET_V_LINE (src, i >> 1), (width + 1) / 2);
-  }
-
-  /* now handle last line */
-  if (height & 1) {
-    UNPACK_FRAME (src, convert->tmplines[0], height - 1, width);
-    PACK_FRAME (dest, convert->tmplines[0], height - 1, width);
-  }
-}
-
-static void
-convert_I420_UYVY (VideoConvert * convert, GstVideoFrame * dest,
-    const GstVideoFrame * src)
-{
-  int i;
-  gint width = convert->width;
-  gint height = convert->height;
-  gboolean interlaced = GST_VIDEO_FRAME_IS_INTERLACED (src);
-  gint l1, l2;
-
-  for (i = 0; i < GST_ROUND_DOWN_2 (height); i += 2) {
-    GET_LINE_OFFSETS (interlaced, i, l1, l2);
-
-    video_convert_orc_convert_I420_UYVY (FRAME_GET_LINE (dest, l1),
-        FRAME_GET_LINE (dest, l2),
-        FRAME_GET_Y_LINE (src, l1),
-        FRAME_GET_Y_LINE (src, l2),
-        FRAME_GET_U_LINE (src, i >> 1),
-        FRAME_GET_V_LINE (src, i >> 1), (width + 1) / 2);
-  }
-
-  /* now handle last line */
-  if (height & 1) {
-    UNPACK_FRAME (src, convert->tmplines[0], height - 1, width);
-    PACK_FRAME (dest, convert->tmplines[0], height - 1, width);
-  }
-}
-
-static void
-convert_I420_AYUV (VideoConvert * convert, GstVideoFrame * dest,
-    const GstVideoFrame * src)
-{
-  int i;
-  gint width = convert->width;
-  gint height = convert->height;
-  gboolean interlaced = GST_VIDEO_FRAME_IS_INTERLACED (src);
-  gint l1, l2;
-
-  for (i = 0; i < GST_ROUND_DOWN_2 (height); i += 2) {
-    GET_LINE_OFFSETS (interlaced, i, l1, l2);
-
-    video_convert_orc_convert_I420_AYUV (FRAME_GET_LINE (dest, l1),
-        FRAME_GET_LINE (dest, l2),
-        FRAME_GET_Y_LINE (src, l1),
-        FRAME_GET_Y_LINE (src, l2),
-        FRAME_GET_U_LINE (src, i >> 1), FRAME_GET_V_LINE (src, i >> 1), width);
-  }
-
-  /* now handle last line */
-  if (height & 1) {
-    UNPACK_FRAME (src, convert->tmplines[0], height - 1, width);
-    PACK_FRAME (dest, convert->tmplines[0], height - 1, width);
-  }
-}
-
-static void
-convert_I420_Y42B (VideoConvert * convert, GstVideoFrame * dest,
-    const GstVideoFrame * src)
-{
-  gint width = convert->width;
-  gint height = convert->height;
-
-  video_convert_orc_memcpy_2d (FRAME_GET_Y_LINE (dest, 0),
-      FRAME_GET_Y_STRIDE (dest), FRAME_GET_Y_LINE (src, 0),
-      FRAME_GET_Y_STRIDE (src), width, height);
-
-  video_convert_orc_planar_chroma_420_422 (FRAME_GET_U_LINE (dest, 0),
-      2 * FRAME_GET_U_STRIDE (dest), FRAME_GET_U_LINE (dest, 1),
-      2 * FRAME_GET_U_STRIDE (dest), FRAME_GET_U_LINE (src, 0),
-      FRAME_GET_U_STRIDE (src), (width + 1) / 2, height / 2);
-
-  video_convert_orc_planar_chroma_420_422 (FRAME_GET_V_LINE (dest, 0),
-      2 * FRAME_GET_V_STRIDE (dest), FRAME_GET_V_LINE (dest, 1),
-      2 * FRAME_GET_V_STRIDE (dest), FRAME_GET_V_LINE (src, 0),
-      FRAME_GET_V_STRIDE (src), (width + 1) / 2, height / 2);
-}
-
-static void
-convert_I420_Y444 (VideoConvert * convert, GstVideoFrame * dest,
-    const GstVideoFrame * src)
-{
-  gint width = convert->width;
-  gint height = convert->height;
-
-  video_convert_orc_memcpy_2d (FRAME_GET_Y_LINE (dest, 0),
-      FRAME_GET_Y_STRIDE (dest), FRAME_GET_Y_LINE (src, 0),
-      FRAME_GET_Y_STRIDE (src), width, height);
-
-  video_convert_orc_planar_chroma_420_444 (FRAME_GET_U_LINE (dest, 0),
-      2 * FRAME_GET_U_STRIDE (dest), FRAME_GET_U_LINE (dest, 1),
-      2 * FRAME_GET_U_STRIDE (dest), FRAME_GET_U_LINE (src, 0),
-      FRAME_GET_U_STRIDE (src), (width + 1) / 2, height / 2);
-
-  video_convert_orc_planar_chroma_420_444 (FRAME_GET_V_LINE (dest, 0),
-      2 * FRAME_GET_V_STRIDE (dest), FRAME_GET_V_LINE (dest, 1),
-      2 * FRAME_GET_V_STRIDE (dest), FRAME_GET_V_LINE (src, 0),
-      FRAME_GET_V_STRIDE (src), (width + 1) / 2, height / 2);
-
-  /* now handle last line */
-  if (height & 1) {
-    UNPACK_FRAME (src, convert->tmplines[0], height - 1, width);
-    PACK_FRAME (dest, convert->tmplines[0], height - 1, width);
-  }
-}
-
-static void
-convert_YUY2_I420 (VideoConvert * convert, GstVideoFrame * dest,
-    const GstVideoFrame * src)
-{
-  int i;
-  gint width = convert->width;
-  gint height = convert->height;
-  gboolean interlaced = GST_VIDEO_FRAME_IS_INTERLACED (src);
-  gint l1, l2;
-
-  for (i = 0; i < GST_ROUND_DOWN_2 (height); i += 2) {
-    GET_LINE_OFFSETS (interlaced, i, l1, l2);
-
-    video_convert_orc_convert_YUY2_I420 (FRAME_GET_Y_LINE (dest, l1),
-        FRAME_GET_Y_LINE (dest, l2),
-        FRAME_GET_U_LINE (dest, i >> 1),
-        FRAME_GET_V_LINE (dest, i >> 1),
-        FRAME_GET_LINE (src, l1), FRAME_GET_LINE (src, l2), (width + 1) / 2);
-  }
-
-  /* now handle last line */
-  if (height & 1) {
-    UNPACK_FRAME (src, convert->tmplines[0], height - 1, width);
-    PACK_FRAME (dest, convert->tmplines[0], height - 1, width);
-  }
-}
-
-static void
-convert_YUY2_AYUV (VideoConvert * convert, GstVideoFrame * dest,
-    const GstVideoFrame * src)
-{
-  gint width = convert->width;
-  gint height = convert->height;
-
-  video_convert_orc_convert_YUY2_AYUV (FRAME_GET_LINE (dest, 0),
-      FRAME_GET_STRIDE (dest), FRAME_GET_LINE (src, 0),
-      FRAME_GET_STRIDE (src), (width + 1) / 2, height);
-}
-
-static void
-convert_YUY2_Y42B (VideoConvert * convert, GstVideoFrame * dest,
-    const GstVideoFrame * src)
-{
-  gint width = convert->width;
-  gint height = convert->height;
-
-  video_convert_orc_convert_YUY2_Y42B (FRAME_GET_Y_LINE (dest, 0),
-      FRAME_GET_Y_STRIDE (dest), FRAME_GET_U_LINE (dest, 0),
-      FRAME_GET_U_STRIDE (dest), FRAME_GET_V_LINE (dest, 0),
-      FRAME_GET_V_STRIDE (dest), FRAME_GET_LINE (src, 0),
-      FRAME_GET_STRIDE (src), (width + 1) / 2, height);
-}
-
-static void
-convert_YUY2_Y444 (VideoConvert * convert, GstVideoFrame * dest,
-    const GstVideoFrame * src)
-{
-  gint width = convert->width;
-  gint height = convert->height;
-
-  video_convert_orc_convert_YUY2_Y444 (FRAME_GET_COMP_LINE (dest, 0, 0),
-      FRAME_GET_COMP_STRIDE (dest, 0), FRAME_GET_COMP_LINE (dest, 1, 0),
-      FRAME_GET_COMP_STRIDE (dest, 1), FRAME_GET_COMP_LINE (dest, 2, 0),
-      FRAME_GET_COMP_STRIDE (dest, 2), FRAME_GET_LINE (src, 0),
-      FRAME_GET_STRIDE (src), (width + 1) / 2, height);
-}
-
-
-static void
-convert_UYVY_I420 (VideoConvert * convert, GstVideoFrame * dest,
-    const GstVideoFrame * src)
-{
-  int i;
-  gint width = convert->width;
-  gint height = convert->height;
-  gboolean interlaced = GST_VIDEO_FRAME_IS_INTERLACED (src);
-  gint l1, l2;
-
-  for (i = 0; i < GST_ROUND_DOWN_2 (height); i += 2) {
-    GET_LINE_OFFSETS (interlaced, i, l1, l2);
-
-    video_convert_orc_convert_UYVY_I420 (FRAME_GET_COMP_LINE (dest, 0, l1),
-        FRAME_GET_COMP_LINE (dest, 0, l2),
-        FRAME_GET_COMP_LINE (dest, 1, i >> 1),
-        FRAME_GET_COMP_LINE (dest, 2, i >> 1),
-        FRAME_GET_LINE (src, l1), FRAME_GET_LINE (src, l2), (width + 1) / 2);
-  }
-
-  /* now handle last line */
-  if (height & 1) {
-    UNPACK_FRAME (src, convert->tmplines[0], height - 1, width);
-    PACK_FRAME (dest, convert->tmplines[0], height - 1, width);
-  }
-}
-
-static void
-convert_UYVY_AYUV (VideoConvert * convert, GstVideoFrame * dest,
-    const GstVideoFrame * src)
-{
-  gint width = convert->width;
-  gint height = convert->height;
-
-  video_convert_orc_convert_UYVY_AYUV (FRAME_GET_LINE (dest, 0),
-      FRAME_GET_STRIDE (dest), FRAME_GET_LINE (src, 0),
-      FRAME_GET_STRIDE (src), (width + 1) / 2, height);
-}
-
-static void
-convert_UYVY_YUY2 (VideoConvert * convert, GstVideoFrame * dest,
-    const GstVideoFrame * src)
-{
-  gint width = convert->width;
-  gint height = convert->height;
-
-  video_convert_orc_convert_UYVY_YUY2 (FRAME_GET_LINE (dest, 0),
-      FRAME_GET_STRIDE (dest), FRAME_GET_LINE (src, 0),
-      FRAME_GET_STRIDE (src), (width + 1) / 2, height);
-}
-
-static void
-convert_UYVY_Y42B (VideoConvert * convert, GstVideoFrame * dest,
-    const GstVideoFrame * src)
-{
-  gint width = convert->width;
-  gint height = convert->height;
-
-  video_convert_orc_convert_UYVY_Y42B (FRAME_GET_Y_LINE (dest, 0),
-      FRAME_GET_Y_STRIDE (dest), FRAME_GET_U_LINE (dest, 0),
-      FRAME_GET_U_STRIDE (dest), FRAME_GET_V_LINE (dest, 0),
-      FRAME_GET_V_STRIDE (dest), FRAME_GET_LINE (src, 0),
-      FRAME_GET_STRIDE (src), (width + 1) / 2, height);
-}
-
-static void
-convert_UYVY_Y444 (VideoConvert * convert, GstVideoFrame * dest,
-    const GstVideoFrame * src)
-{
-  gint width = convert->width;
-  gint height = convert->height;
-
-  video_convert_orc_convert_UYVY_Y444 (FRAME_GET_Y_LINE (dest, 0),
-      FRAME_GET_Y_STRIDE (dest), FRAME_GET_U_LINE (dest, 0),
-      FRAME_GET_U_STRIDE (dest), FRAME_GET_V_LINE (dest, 0),
-      FRAME_GET_V_STRIDE (dest), FRAME_GET_LINE (src, 0),
-      FRAME_GET_STRIDE (src), (width + 1) / 2, height);
-}
-
-static void
-convert_AYUV_I420 (VideoConvert * convert, GstVideoFrame * dest,
-    const GstVideoFrame * src)
-{
-  gint width = convert->width;
-  gint height = convert->height;
-
-  /* only for even width/height */
-  video_convert_orc_convert_AYUV_I420 (FRAME_GET_Y_LINE (dest, 0),
-      2 * FRAME_GET_Y_STRIDE (dest), FRAME_GET_Y_LINE (dest, 1),
-      2 * FRAME_GET_Y_STRIDE (dest), FRAME_GET_U_LINE (dest, 0),
-      FRAME_GET_U_STRIDE (dest), FRAME_GET_V_LINE (dest, 0),
-      FRAME_GET_V_STRIDE (dest), FRAME_GET_LINE (src, 0),
-      2 * FRAME_GET_STRIDE (src), FRAME_GET_LINE (src, 1),
-      2 * FRAME_GET_STRIDE (src), width / 2, height / 2);
-}
-
-static void
-convert_AYUV_YUY2 (VideoConvert * convert, GstVideoFrame * dest,
-    const GstVideoFrame * src)
-{
-  gint width = convert->width;
-  gint height = convert->height;
-
-  /* only for even width */
-  video_convert_orc_convert_AYUV_YUY2 (FRAME_GET_LINE (dest, 0),
-      FRAME_GET_STRIDE (dest), FRAME_GET_LINE (src, 0),
-      FRAME_GET_STRIDE (src), width / 2, height);
-}
-
-static void
-convert_AYUV_UYVY (VideoConvert * convert, GstVideoFrame * dest,
-    const GstVideoFrame * src)
-{
-  gint width = convert->width;
-  gint height = convert->height;
-
-  /* only for even width */
-  video_convert_orc_convert_AYUV_UYVY (FRAME_GET_LINE (dest, 0),
-      FRAME_GET_STRIDE (dest), FRAME_GET_LINE (src, 0),
-      FRAME_GET_STRIDE (src), width / 2, height);
-}
-
-static void
-convert_AYUV_Y42B (VideoConvert * convert, GstVideoFrame * dest,
-    const GstVideoFrame * src)
-{
-  gint width = convert->width;
-  gint height = convert->height;
-
-  /* only works for even width */
-  video_convert_orc_convert_AYUV_Y42B (FRAME_GET_Y_LINE (dest, 0),
-      FRAME_GET_Y_STRIDE (dest), FRAME_GET_U_LINE (dest, 0),
-      FRAME_GET_U_STRIDE (dest), FRAME_GET_V_LINE (dest, 0),
-      FRAME_GET_V_STRIDE (dest), FRAME_GET_LINE (src, 0),
-      FRAME_GET_STRIDE (src), width / 2, height);
-}
-
-static void
-convert_AYUV_Y444 (VideoConvert * convert, GstVideoFrame * dest,
-    const GstVideoFrame * src)
-{
-  gint width = convert->width;
-  gint height = convert->height;
-
-  video_convert_orc_convert_AYUV_Y444 (FRAME_GET_Y_LINE (dest, 0),
-      FRAME_GET_Y_STRIDE (dest), FRAME_GET_U_LINE (dest, 0),
-      FRAME_GET_U_STRIDE (dest), FRAME_GET_V_LINE (dest, 0),
-      FRAME_GET_V_STRIDE (dest), FRAME_GET_LINE (src, 0),
-      FRAME_GET_STRIDE (src), width, height);
-}
-
-static void
-convert_Y42B_I420 (VideoConvert * convert, GstVideoFrame * dest,
-    const GstVideoFrame * src)
-{
-  gint width = convert->width;
-  gint height = convert->height;
-
-  video_convert_orc_memcpy_2d (FRAME_GET_Y_LINE (dest, 0),
-      FRAME_GET_Y_STRIDE (dest), FRAME_GET_Y_LINE (src, 0),
-      FRAME_GET_Y_STRIDE (src), width, height);
-
-  video_convert_orc_planar_chroma_422_420 (FRAME_GET_U_LINE (dest, 0),
-      FRAME_GET_U_STRIDE (dest), FRAME_GET_U_LINE (src, 0),
-      2 * FRAME_GET_U_STRIDE (src), FRAME_GET_U_LINE (src, 1),
-      2 * FRAME_GET_U_STRIDE (src), (width + 1) / 2, height / 2);
-
-  video_convert_orc_planar_chroma_422_420 (FRAME_GET_V_LINE (dest, 0),
-      FRAME_GET_V_STRIDE (dest), FRAME_GET_V_LINE (src, 0),
-      2 * FRAME_GET_V_STRIDE (src), FRAME_GET_V_LINE (src, 1),
-      2 * FRAME_GET_V_STRIDE (src), (width + 1) / 2, height / 2);
-
-  /* now handle last line */
-  if (height & 1) {
-    UNPACK_FRAME (src, convert->tmplines[0], height - 1, width);
-    PACK_FRAME (dest, convert->tmplines[0], height - 1, width);
-  }
-}
-
-static void
-convert_Y42B_Y444 (VideoConvert * convert, GstVideoFrame * dest,
-    const GstVideoFrame * src)
-{
-  gint width = convert->width;
-  gint height = convert->height;
-
-  video_convert_orc_memcpy_2d (FRAME_GET_Y_LINE (dest, 0),
-      FRAME_GET_Y_STRIDE (dest), FRAME_GET_Y_LINE (src, 0),
-      FRAME_GET_Y_STRIDE (src), width, height);
-
-  video_convert_orc_planar_chroma_422_444 (FRAME_GET_U_LINE (dest, 0),
-      FRAME_GET_U_STRIDE (dest), FRAME_GET_U_LINE (src, 0),
-      FRAME_GET_U_STRIDE (src), (width + 1) / 2, height);
-
-  video_convert_orc_planar_chroma_422_444 (FRAME_GET_V_LINE (dest, 0),
-      FRAME_GET_V_STRIDE (dest), FRAME_GET_V_LINE (src, 0),
-      FRAME_GET_V_STRIDE (src), (width + 1) / 2, height);
-}
-
-static void
-convert_Y42B_YUY2 (VideoConvert * convert, GstVideoFrame * dest,
-    const GstVideoFrame * src)
-{
-  gint width = convert->width;
-  gint height = convert->height;
-
-  video_convert_orc_convert_Y42B_YUY2 (FRAME_GET_LINE (dest, 0),
-      FRAME_GET_STRIDE (dest), FRAME_GET_Y_LINE (src, 0),
-      FRAME_GET_Y_STRIDE (src), FRAME_GET_U_LINE (src, 0),
-      FRAME_GET_U_STRIDE (src), FRAME_GET_V_LINE (src, 0),
-      FRAME_GET_V_STRIDE (src), (width + 1) / 2, height);
-}
-
-static void
-convert_Y42B_UYVY (VideoConvert * convert, GstVideoFrame * dest,
-    const GstVideoFrame * src)
-{
-  gint width = convert->width;
-  gint height = convert->height;
-
-  video_convert_orc_convert_Y42B_UYVY (FRAME_GET_LINE (dest, 0),
-      FRAME_GET_STRIDE (dest), FRAME_GET_Y_LINE (src, 0),
-      FRAME_GET_Y_STRIDE (src), FRAME_GET_U_LINE (src, 0),
-      FRAME_GET_U_STRIDE (src), FRAME_GET_V_LINE (src, 0),
-      FRAME_GET_V_STRIDE (src), (width + 1) / 2, height);
-}
-
-static void
-convert_Y42B_AYUV (VideoConvert * convert, GstVideoFrame * dest,
-    const GstVideoFrame * src)
-{
-  gint width = convert->width;
-  gint height = convert->height;
-
-  /* only for even width */
-  video_convert_orc_convert_Y42B_AYUV (FRAME_GET_LINE (dest, 0),
-      FRAME_GET_STRIDE (dest), FRAME_GET_Y_LINE (src, 0),
-      FRAME_GET_Y_STRIDE (src), FRAME_GET_U_LINE (src, 0),
-      FRAME_GET_U_STRIDE (src), FRAME_GET_V_LINE (src, 0),
-      FRAME_GET_V_STRIDE (src), width / 2, height);
-}
-
-static void
-convert_Y444_I420 (VideoConvert * convert, GstVideoFrame * dest,
-    const GstVideoFrame * src)
-{
-  gint width = convert->width;
-  gint height = convert->height;
-
-  video_convert_orc_memcpy_2d (FRAME_GET_Y_LINE (dest, 0),
-      FRAME_GET_Y_STRIDE (dest), FRAME_GET_Y_LINE (src, 0),
-      FRAME_GET_Y_STRIDE (src), width, height);
-
-  video_convert_orc_planar_chroma_444_420 (FRAME_GET_U_LINE (dest, 0),
-      FRAME_GET_U_STRIDE (dest), FRAME_GET_U_LINE (src, 0),
-      2 * FRAME_GET_U_STRIDE (src), FRAME_GET_U_LINE (src, 1),
-      2 * FRAME_GET_U_STRIDE (src), width / 2, height / 2);
-
-  video_convert_orc_planar_chroma_444_420 (FRAME_GET_V_LINE (dest, 0),
-      FRAME_GET_V_STRIDE (dest), FRAME_GET_V_LINE (src, 0),
-      2 * FRAME_GET_V_STRIDE (src), FRAME_GET_V_LINE (src, 1),
-      2 * FRAME_GET_V_STRIDE (src), width / 2, height / 2);
-
-  /* now handle last line */
-  if (height & 1) {
-    UNPACK_FRAME (src, convert->tmplines[0], height - 1, width);
-    PACK_FRAME (dest, convert->tmplines[0], height - 1, width);
-  }
-}
-
-static void
-convert_Y444_Y42B (VideoConvert * convert, GstVideoFrame * dest,
-    const GstVideoFrame * src)
-{
-  gint width = convert->width;
-  gint height = convert->height;
-
-  video_convert_orc_memcpy_2d (FRAME_GET_Y_LINE (dest, 0),
-      FRAME_GET_Y_STRIDE (dest), FRAME_GET_Y_LINE (src, 0),
-      FRAME_GET_Y_STRIDE (src), width, height);
-
-  video_convert_orc_planar_chroma_444_422 (FRAME_GET_U_LINE (dest, 0),
-      FRAME_GET_U_STRIDE (dest), FRAME_GET_U_LINE (src, 0),
-      FRAME_GET_U_STRIDE (src), width / 2, height);
-
-  video_convert_orc_planar_chroma_444_422 (FRAME_GET_V_LINE (dest, 0),
-      FRAME_GET_V_STRIDE (dest), FRAME_GET_V_LINE (src, 0),
-      FRAME_GET_V_STRIDE (src), width / 2, height);
-}
-
-static void
-convert_Y444_YUY2 (VideoConvert * convert, GstVideoFrame * dest,
-    const GstVideoFrame * src)
-{
-  gint width = convert->width;
-  gint height = convert->height;
-
-  video_convert_orc_convert_Y444_YUY2 (FRAME_GET_LINE (dest, 0),
-      FRAME_GET_STRIDE (dest), FRAME_GET_Y_LINE (src, 0),
-      FRAME_GET_Y_STRIDE (src), FRAME_GET_U_LINE (src, 0),
-      FRAME_GET_U_STRIDE (src), FRAME_GET_V_LINE (src, 0),
-      FRAME_GET_V_STRIDE (src), width / 2, height);
-}
-
-static void
-convert_Y444_UYVY (VideoConvert * convert, GstVideoFrame * dest,
-    const GstVideoFrame * src)
-{
-  gint width = convert->width;
-  gint height = convert->height;
-
-  video_convert_orc_convert_Y444_UYVY (FRAME_GET_LINE (dest, 0),
-      FRAME_GET_STRIDE (dest), FRAME_GET_Y_LINE (src, 0),
-      FRAME_GET_Y_STRIDE (src), FRAME_GET_U_LINE (src, 0),
-      FRAME_GET_U_STRIDE (src), FRAME_GET_V_LINE (src, 0),
-      FRAME_GET_V_STRIDE (src), width / 2, height);
-}
-
-static void
-convert_Y444_AYUV (VideoConvert * convert, GstVideoFrame * dest,
-    const GstVideoFrame * src)
-{
-  gint width = convert->width;
-  gint height = convert->height;
-
-  video_convert_orc_convert_Y444_AYUV (FRAME_GET_LINE (dest, 0),
-      FRAME_GET_STRIDE (dest), FRAME_GET_Y_LINE (src, 0),
-      FRAME_GET_Y_STRIDE (src), FRAME_GET_U_LINE (src, 0),
-      FRAME_GET_U_STRIDE (src), FRAME_GET_V_LINE (src, 0),
-      FRAME_GET_V_STRIDE (src), width, height);
-}
-
-#if G_BYTE_ORDER == G_LITTLE_ENDIAN
-static void
-convert_AYUV_ARGB (VideoConvert * convert, GstVideoFrame * dest,
-    const GstVideoFrame * src)
-{
-  gint width = convert->width;
-  gint height = convert->height;
-
-  video_convert_orc_convert_AYUV_ARGB (FRAME_GET_LINE (dest, 0),
-      FRAME_GET_STRIDE (dest), FRAME_GET_LINE (src, 0),
-      FRAME_GET_STRIDE (src), convert->cmatrix[0][0], convert->cmatrix[0][2],
-      convert->cmatrix[2][1], convert->cmatrix[1][1], convert->cmatrix[1][2],
-      width, height);
-}
-
-static void
-convert_AYUV_BGRA (VideoConvert * convert, GstVideoFrame * dest,
-    const GstVideoFrame * src)
-{
-  gint width = convert->width;
-  gint height = convert->height;
-
-  video_convert_orc_convert_AYUV_BGRA (FRAME_GET_LINE (dest, 0),
-      FRAME_GET_STRIDE (dest), FRAME_GET_LINE (src, 0),
-      FRAME_GET_STRIDE (src), convert->cmatrix[0][0], convert->cmatrix[0][2],
-      convert->cmatrix[2][1], convert->cmatrix[1][1], convert->cmatrix[1][2],
-      width, height);
-}
-
-static void
-convert_AYUV_ABGR (VideoConvert * convert, GstVideoFrame * dest,
-    const GstVideoFrame * src)
-{
-  gint width = convert->width;
-  gint height = convert->height;
-
-  video_convert_orc_convert_AYUV_ABGR (FRAME_GET_LINE (dest, 0),
-      FRAME_GET_STRIDE (dest), FRAME_GET_LINE (src, 0),
-      FRAME_GET_STRIDE (src), convert->cmatrix[0][0], convert->cmatrix[0][2],
-      convert->cmatrix[2][1], convert->cmatrix[1][1], convert->cmatrix[1][2],
-      width, height);
-}
-
-static void
-convert_AYUV_RGBA (VideoConvert * convert, GstVideoFrame * dest,
-    const GstVideoFrame * src)
-{
-  gint width = convert->width;
-  gint height = convert->height;
-
-  video_convert_orc_convert_AYUV_RGBA (FRAME_GET_LINE (dest, 0),
-      FRAME_GET_STRIDE (dest), FRAME_GET_LINE (src, 0),
-      FRAME_GET_STRIDE (src), convert->cmatrix[0][0], convert->cmatrix[0][2],
-      convert->cmatrix[2][1], convert->cmatrix[1][1], convert->cmatrix[1][2],
-      width, height);
-}
-
-static void
-convert_I420_BGRA (VideoConvert * convert, GstVideoFrame * dest,
-    const GstVideoFrame * src)
-{
-  int i;
-  gint width = convert->width;
-  gint height = convert->height;
-
-  for (i = 0; i < height; i++) {
-    video_convert_orc_convert_I420_BGRA (FRAME_GET_LINE (dest, i),
-        FRAME_GET_Y_LINE (src, i),
-        FRAME_GET_U_LINE (src, i >> 1), FRAME_GET_V_LINE (src, i >> 1),
-        convert->cmatrix[0][0], convert->cmatrix[0][2],
-        convert->cmatrix[2][1], convert->cmatrix[1][1], convert->cmatrix[1][2],
-        width);
-  }
-}
-#endif
-
-
-
-/* Fast paths */
-
-typedef struct
-{
-  GstVideoFormat in_format;
-  GstVideoColorMatrix in_matrix;
-  GstVideoFormat out_format;
-  GstVideoColorMatrix out_matrix;
-  gboolean keeps_color_matrix;
-  gboolean keeps_interlaced;
-  gboolean needs_color_matrix;
-  gint width_align, height_align;
-  void (*convert) (VideoConvert * convert, GstVideoFrame * dest,
-      const GstVideoFrame * src);
-} VideoTransform;
-
-static const VideoTransform transforms[] = {
-  {GST_VIDEO_FORMAT_I420, GST_VIDEO_COLOR_MATRIX_UNKNOWN, GST_VIDEO_FORMAT_YUY2,
-        GST_VIDEO_COLOR_MATRIX_UNKNOWN, TRUE, TRUE, FALSE, 0, 0,
-      convert_I420_YUY2},
-  {GST_VIDEO_FORMAT_I420, GST_VIDEO_COLOR_MATRIX_UNKNOWN, GST_VIDEO_FORMAT_UYVY,
-        GST_VIDEO_COLOR_MATRIX_UNKNOWN, TRUE, TRUE, FALSE, 0, 0,
-      convert_I420_UYVY},
-  {GST_VIDEO_FORMAT_I420, GST_VIDEO_COLOR_MATRIX_UNKNOWN, GST_VIDEO_FORMAT_AYUV,
-        GST_VIDEO_COLOR_MATRIX_UNKNOWN, TRUE, TRUE, FALSE, 0, 0,
-      convert_I420_AYUV},
-  {GST_VIDEO_FORMAT_I420, GST_VIDEO_COLOR_MATRIX_UNKNOWN, GST_VIDEO_FORMAT_Y42B,
-        GST_VIDEO_COLOR_MATRIX_UNKNOWN, TRUE, FALSE, FALSE, 0, 0,
-      convert_I420_Y42B},
-  {GST_VIDEO_FORMAT_I420, GST_VIDEO_COLOR_MATRIX_UNKNOWN, GST_VIDEO_FORMAT_Y444,
-        GST_VIDEO_COLOR_MATRIX_UNKNOWN, TRUE, FALSE, FALSE, 0, 0,
-      convert_I420_Y444},
-
-  {GST_VIDEO_FORMAT_YV12, GST_VIDEO_COLOR_MATRIX_UNKNOWN, GST_VIDEO_FORMAT_YUY2,
-        GST_VIDEO_COLOR_MATRIX_UNKNOWN, TRUE, TRUE, FALSE, 0, 0,
-      convert_I420_YUY2},
-  {GST_VIDEO_FORMAT_YV12, GST_VIDEO_COLOR_MATRIX_UNKNOWN, GST_VIDEO_FORMAT_UYVY,
-        GST_VIDEO_COLOR_MATRIX_UNKNOWN, TRUE, TRUE, FALSE, 0, 0,
-      convert_I420_UYVY},
-  {GST_VIDEO_FORMAT_YV12, GST_VIDEO_COLOR_MATRIX_UNKNOWN, GST_VIDEO_FORMAT_AYUV,
-        GST_VIDEO_COLOR_MATRIX_UNKNOWN, TRUE, TRUE, FALSE, 0, 0,
-      convert_I420_AYUV},
-  {GST_VIDEO_FORMAT_YV12, GST_VIDEO_COLOR_MATRIX_UNKNOWN, GST_VIDEO_FORMAT_Y42B,
-        GST_VIDEO_COLOR_MATRIX_UNKNOWN, TRUE, FALSE, FALSE, 0, 0,
-      convert_I420_Y42B},
-  {GST_VIDEO_FORMAT_YV12, GST_VIDEO_COLOR_MATRIX_UNKNOWN, GST_VIDEO_FORMAT_Y444,
-        GST_VIDEO_COLOR_MATRIX_UNKNOWN, TRUE, FALSE, FALSE, 0, 0,
-      convert_I420_Y444},
-
-  {GST_VIDEO_FORMAT_YUY2, GST_VIDEO_COLOR_MATRIX_UNKNOWN, GST_VIDEO_FORMAT_I420,
-        GST_VIDEO_COLOR_MATRIX_UNKNOWN, TRUE, TRUE, FALSE, 0, 0,
-      convert_YUY2_I420},
-  {GST_VIDEO_FORMAT_YUY2, GST_VIDEO_COLOR_MATRIX_UNKNOWN, GST_VIDEO_FORMAT_YV12,
-        GST_VIDEO_COLOR_MATRIX_UNKNOWN, TRUE, TRUE, FALSE, 0, 0,
-      convert_YUY2_I420},
-  {GST_VIDEO_FORMAT_YUY2, GST_VIDEO_COLOR_MATRIX_UNKNOWN, GST_VIDEO_FORMAT_UYVY,
-      GST_VIDEO_COLOR_MATRIX_UNKNOWN, TRUE, TRUE, FALSE, 0, 0, convert_UYVY_YUY2},      /* alias */
-  {GST_VIDEO_FORMAT_YUY2, GST_VIDEO_COLOR_MATRIX_UNKNOWN, GST_VIDEO_FORMAT_AYUV,
-        GST_VIDEO_COLOR_MATRIX_UNKNOWN, TRUE, TRUE, FALSE, 0, 0,
-      convert_YUY2_AYUV},
-  {GST_VIDEO_FORMAT_YUY2, GST_VIDEO_COLOR_MATRIX_UNKNOWN, GST_VIDEO_FORMAT_Y42B,
-        GST_VIDEO_COLOR_MATRIX_UNKNOWN, TRUE, TRUE, FALSE, 0, 0,
-      convert_YUY2_Y42B},
-  {GST_VIDEO_FORMAT_YUY2, GST_VIDEO_COLOR_MATRIX_UNKNOWN, GST_VIDEO_FORMAT_Y444,
-        GST_VIDEO_COLOR_MATRIX_UNKNOWN, TRUE, TRUE, FALSE, 0, 0,
-      convert_YUY2_Y444},
-
-  {GST_VIDEO_FORMAT_UYVY, GST_VIDEO_COLOR_MATRIX_UNKNOWN, GST_VIDEO_FORMAT_I420,
-        GST_VIDEO_COLOR_MATRIX_UNKNOWN, TRUE, TRUE, FALSE, 0, 0,
-      convert_UYVY_I420},
-  {GST_VIDEO_FORMAT_UYVY, GST_VIDEO_COLOR_MATRIX_UNKNOWN, GST_VIDEO_FORMAT_YV12,
-        GST_VIDEO_COLOR_MATRIX_UNKNOWN, TRUE, TRUE, FALSE, 0, 0,
-      convert_UYVY_I420},
-  {GST_VIDEO_FORMAT_UYVY, GST_VIDEO_COLOR_MATRIX_UNKNOWN, GST_VIDEO_FORMAT_YUY2,
-        GST_VIDEO_COLOR_MATRIX_UNKNOWN, TRUE, TRUE, FALSE, 0, 0,
-      convert_UYVY_YUY2},
-  {GST_VIDEO_FORMAT_UYVY, GST_VIDEO_COLOR_MATRIX_UNKNOWN, GST_VIDEO_FORMAT_AYUV,
-        GST_VIDEO_COLOR_MATRIX_UNKNOWN, TRUE, TRUE, FALSE, 0, 0,
-      convert_UYVY_AYUV},
-  {GST_VIDEO_FORMAT_UYVY, GST_VIDEO_COLOR_MATRIX_UNKNOWN, GST_VIDEO_FORMAT_Y42B,
-        GST_VIDEO_COLOR_MATRIX_UNKNOWN, TRUE, TRUE, FALSE, 0, 0,
-      convert_UYVY_Y42B},
-  {GST_VIDEO_FORMAT_UYVY, GST_VIDEO_COLOR_MATRIX_UNKNOWN, GST_VIDEO_FORMAT_Y444,
-        GST_VIDEO_COLOR_MATRIX_UNKNOWN, TRUE, TRUE, FALSE, 0, 0,
-      convert_UYVY_Y444},
-
-  {GST_VIDEO_FORMAT_AYUV, GST_VIDEO_COLOR_MATRIX_UNKNOWN, GST_VIDEO_FORMAT_I420,
-        GST_VIDEO_COLOR_MATRIX_UNKNOWN, TRUE, FALSE, FALSE, 1, 1,
-      convert_AYUV_I420},
-  {GST_VIDEO_FORMAT_AYUV, GST_VIDEO_COLOR_MATRIX_UNKNOWN, GST_VIDEO_FORMAT_YV12,
-        GST_VIDEO_COLOR_MATRIX_UNKNOWN, TRUE, FALSE, FALSE, 1, 1,
-      convert_AYUV_I420},
-  {GST_VIDEO_FORMAT_AYUV, GST_VIDEO_COLOR_MATRIX_UNKNOWN, GST_VIDEO_FORMAT_YUY2,
-        GST_VIDEO_COLOR_MATRIX_UNKNOWN, TRUE, TRUE, FALSE, 1, 0,
-      convert_AYUV_YUY2},
-  {GST_VIDEO_FORMAT_AYUV, GST_VIDEO_COLOR_MATRIX_UNKNOWN, GST_VIDEO_FORMAT_UYVY,
-        GST_VIDEO_COLOR_MATRIX_UNKNOWN, TRUE, TRUE, FALSE, 1, 0,
-      convert_AYUV_UYVY},
-  {GST_VIDEO_FORMAT_AYUV, GST_VIDEO_COLOR_MATRIX_UNKNOWN, GST_VIDEO_FORMAT_Y42B,
-        GST_VIDEO_COLOR_MATRIX_UNKNOWN, TRUE, TRUE, FALSE, 1, 0,
-      convert_AYUV_Y42B},
-  {GST_VIDEO_FORMAT_AYUV, GST_VIDEO_COLOR_MATRIX_UNKNOWN, GST_VIDEO_FORMAT_Y444,
-        GST_VIDEO_COLOR_MATRIX_UNKNOWN, TRUE, TRUE, FALSE, 0, 0,
-      convert_AYUV_Y444},
-
-  {GST_VIDEO_FORMAT_Y42B, GST_VIDEO_COLOR_MATRIX_UNKNOWN, GST_VIDEO_FORMAT_I420,
-        GST_VIDEO_COLOR_MATRIX_UNKNOWN, TRUE, FALSE, FALSE, 0, 0,
-      convert_Y42B_I420},
-  {GST_VIDEO_FORMAT_Y42B, GST_VIDEO_COLOR_MATRIX_UNKNOWN, GST_VIDEO_FORMAT_YV12,
-        GST_VIDEO_COLOR_MATRIX_UNKNOWN, TRUE, FALSE, FALSE, 0, 0,
-      convert_Y42B_I420},
-  {GST_VIDEO_FORMAT_Y42B, GST_VIDEO_COLOR_MATRIX_UNKNOWN, GST_VIDEO_FORMAT_YUY2,
-        GST_VIDEO_COLOR_MATRIX_UNKNOWN, TRUE, TRUE, FALSE, 0, 0,
-      convert_Y42B_YUY2},
-  {GST_VIDEO_FORMAT_Y42B, GST_VIDEO_COLOR_MATRIX_UNKNOWN, GST_VIDEO_FORMAT_UYVY,
-        GST_VIDEO_COLOR_MATRIX_UNKNOWN, TRUE, TRUE, FALSE, 0, 0,
-      convert_Y42B_UYVY},
-  {GST_VIDEO_FORMAT_Y42B, GST_VIDEO_COLOR_MATRIX_UNKNOWN, GST_VIDEO_FORMAT_AYUV,
-        GST_VIDEO_COLOR_MATRIX_UNKNOWN, TRUE, TRUE, FALSE, 1, 0,
-      convert_Y42B_AYUV},
-  {GST_VIDEO_FORMAT_Y42B, GST_VIDEO_COLOR_MATRIX_UNKNOWN, GST_VIDEO_FORMAT_Y444,
-        GST_VIDEO_COLOR_MATRIX_UNKNOWN, TRUE, TRUE, FALSE, 0, 0,
-      convert_Y42B_Y444},
-
-  {GST_VIDEO_FORMAT_Y444, GST_VIDEO_COLOR_MATRIX_UNKNOWN, GST_VIDEO_FORMAT_I420,
-        GST_VIDEO_COLOR_MATRIX_UNKNOWN, TRUE, FALSE, FALSE, 1, 0,
-      convert_Y444_I420},
-  {GST_VIDEO_FORMAT_Y444, GST_VIDEO_COLOR_MATRIX_UNKNOWN, GST_VIDEO_FORMAT_YV12,
-        GST_VIDEO_COLOR_MATRIX_UNKNOWN, TRUE, FALSE, FALSE, 1, 0,
-      convert_Y444_I420},
-  {GST_VIDEO_FORMAT_Y444, GST_VIDEO_COLOR_MATRIX_UNKNOWN, GST_VIDEO_FORMAT_YUY2,
-        GST_VIDEO_COLOR_MATRIX_UNKNOWN, TRUE, TRUE, FALSE, 1, 0,
-      convert_Y444_YUY2},
-  {GST_VIDEO_FORMAT_Y444, GST_VIDEO_COLOR_MATRIX_UNKNOWN, GST_VIDEO_FORMAT_UYVY,
-        GST_VIDEO_COLOR_MATRIX_UNKNOWN, TRUE, TRUE, FALSE, 1, 0,
-      convert_Y444_UYVY},
-  {GST_VIDEO_FORMAT_Y444, GST_VIDEO_COLOR_MATRIX_UNKNOWN, GST_VIDEO_FORMAT_AYUV,
-        GST_VIDEO_COLOR_MATRIX_UNKNOWN, TRUE, TRUE, FALSE, 0, 0,
-      convert_Y444_AYUV},
-  {GST_VIDEO_FORMAT_Y444, GST_VIDEO_COLOR_MATRIX_UNKNOWN, GST_VIDEO_FORMAT_Y42B,
-        GST_VIDEO_COLOR_MATRIX_UNKNOWN, TRUE, TRUE, FALSE, 1, 0,
-      convert_Y444_Y42B},
-
-#if G_BYTE_ORDER == G_LITTLE_ENDIAN
-  {GST_VIDEO_FORMAT_AYUV, GST_VIDEO_COLOR_MATRIX_UNKNOWN, GST_VIDEO_FORMAT_ARGB,
-        GST_VIDEO_COLOR_MATRIX_UNKNOWN, TRUE, TRUE, TRUE, 0, 0,
-      convert_AYUV_ARGB},
-  {GST_VIDEO_FORMAT_AYUV, GST_VIDEO_COLOR_MATRIX_UNKNOWN, GST_VIDEO_FORMAT_BGRA,
-        GST_VIDEO_COLOR_MATRIX_UNKNOWN, TRUE, TRUE, TRUE, 0, 0,
-      convert_AYUV_BGRA},
-  {GST_VIDEO_FORMAT_AYUV, GST_VIDEO_COLOR_MATRIX_UNKNOWN, GST_VIDEO_FORMAT_xRGB,
-      GST_VIDEO_COLOR_MATRIX_UNKNOWN, TRUE, TRUE, TRUE, 0, 0, convert_AYUV_ARGB},       /* alias */
-  {GST_VIDEO_FORMAT_AYUV, GST_VIDEO_COLOR_MATRIX_UNKNOWN, GST_VIDEO_FORMAT_BGRx,
-      GST_VIDEO_COLOR_MATRIX_UNKNOWN, TRUE, TRUE, TRUE, 0, 0, convert_AYUV_BGRA},       /* alias */
-  {GST_VIDEO_FORMAT_AYUV, GST_VIDEO_COLOR_MATRIX_UNKNOWN, GST_VIDEO_FORMAT_ABGR,
-        GST_VIDEO_COLOR_MATRIX_UNKNOWN, TRUE, TRUE, TRUE, 0, 0,
-      convert_AYUV_ABGR},
-  {GST_VIDEO_FORMAT_AYUV, GST_VIDEO_COLOR_MATRIX_UNKNOWN, GST_VIDEO_FORMAT_RGBA,
-        GST_VIDEO_COLOR_MATRIX_UNKNOWN, TRUE, TRUE, TRUE, 0, 0,
-      convert_AYUV_RGBA},
-  {GST_VIDEO_FORMAT_AYUV, GST_VIDEO_COLOR_MATRIX_UNKNOWN, GST_VIDEO_FORMAT_xBGR,
-      GST_VIDEO_COLOR_MATRIX_UNKNOWN, TRUE, TRUE, TRUE, 0, 0, convert_AYUV_ABGR},       /* alias */
-  {GST_VIDEO_FORMAT_AYUV, GST_VIDEO_COLOR_MATRIX_UNKNOWN, GST_VIDEO_FORMAT_RGBx,
-      GST_VIDEO_COLOR_MATRIX_UNKNOWN, TRUE, TRUE, TRUE, 0, 0, convert_AYUV_RGBA},       /* alias */
-
-  {GST_VIDEO_FORMAT_I420, GST_VIDEO_COLOR_MATRIX_UNKNOWN, GST_VIDEO_FORMAT_BGRA,
-        GST_VIDEO_COLOR_MATRIX_UNKNOWN, TRUE, FALSE, TRUE, 0, 0,
-      convert_I420_BGRA},
-  {GST_VIDEO_FORMAT_I420, GST_VIDEO_COLOR_MATRIX_UNKNOWN, GST_VIDEO_FORMAT_BGRx,
-        GST_VIDEO_COLOR_MATRIX_UNKNOWN, TRUE, FALSE, TRUE, 0, 0,
-      convert_I420_BGRA},
-  {GST_VIDEO_FORMAT_YV12, GST_VIDEO_COLOR_MATRIX_UNKNOWN, GST_VIDEO_FORMAT_BGRA,
-        GST_VIDEO_COLOR_MATRIX_UNKNOWN, TRUE, FALSE, TRUE, 0, 0,
-      convert_I420_BGRA},
-  {GST_VIDEO_FORMAT_YV12, GST_VIDEO_COLOR_MATRIX_UNKNOWN, GST_VIDEO_FORMAT_BGRx,
-        GST_VIDEO_COLOR_MATRIX_UNKNOWN, TRUE, FALSE, TRUE, 0, 0,
-      convert_I420_BGRA},
-#endif
-};
-
-static gboolean
-videoconvert_convert_lookup_fastpath (VideoConvert * convert)
-{
-  int i;
-  GstVideoFormat in_format, out_format;
-  GstVideoColorMatrix in_matrix, out_matrix;
-  gboolean interlaced;
-  gint width, height;
-
-  in_format = GST_VIDEO_INFO_FORMAT (&convert->in_info);
-  out_format = GST_VIDEO_INFO_FORMAT (&convert->out_info);
-
-  width = GST_VIDEO_INFO_WIDTH (&convert->in_info);
-  height = GST_VIDEO_INFO_HEIGHT (&convert->in_info);
-
-  in_matrix = convert->in_info.colorimetry.matrix;
-  out_matrix = convert->out_info.colorimetry.matrix;
-
-  interlaced = GST_VIDEO_INFO_IS_INTERLACED (&convert->in_info);
-  interlaced |= GST_VIDEO_INFO_IS_INTERLACED (&convert->out_info);
-
-  for (i = 0; i < sizeof (transforms) / sizeof (transforms[0]); i++) {
-    if (transforms[i].in_format == in_format &&
-        transforms[i].out_format == out_format &&
-        (transforms[i].keeps_color_matrix ||
-            (transforms[i].in_matrix == in_matrix &&
-                transforms[i].out_matrix == out_matrix)) &&
-        (transforms[i].keeps_interlaced || !interlaced) &&
-        (transforms[i].width_align & width) == 0 &&
-        (transforms[i].height_align & height) == 0) {
-      GST_DEBUG ("using fastpath");
-      if (transforms[i].needs_color_matrix)
-        if (!videoconvert_convert_compute_matrix (convert))
-          goto no_convert;
-      convert->convert = transforms[i].convert;
-      alloc_tmplines (convert, 1, GST_VIDEO_INFO_WIDTH (&convert->in_info));
-      return TRUE;
-    }
-  }
-  GST_DEBUG ("no fastpath found");
-  return FALSE;
-
-no_convert:
-  {
-    GST_DEBUG ("can't create matrix");
-    return FALSE;
-  }
-}
diff --git a/gst/videoconvert/videoconvert.h b/gst/videoconvert/videoconvert.h
deleted file mode 100644
index bc0aa7a..0000000
--- a/gst/videoconvert/videoconvert.h
+++ /dev/null
@@ -1,80 +0,0 @@
-/* Video conversion functions
- * Copyright (C) 2010 David Schleef <ds@schleef.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.
- */
-
-#ifndef __COLORSPACE_H__
-#define __COLORSPACE_H__
-
-#include <gst/video/video.h>
-#include "gstcms.h"
-
-G_BEGIN_DECLS
-
-typedef struct _VideoConvert VideoConvert;
-
-typedef enum {
-  DITHER_NONE,
-  DITHER_VERTERR,
-  DITHER_HALFTONE
-} ColorSpaceDitherMethod;
-
-struct _VideoConvert {
-  GstVideoInfo in_info;
-  GstVideoInfo out_info;
-
-  gint width;
-  gint height;
-
-  gint in_bits;
-  gint out_bits;
-  gint cmatrix[4][4];
-
-  ColorSpaceDitherMethod dither;
-
-  guint lines;
-
-  guint n_tmplines;
-  gpointer *tmplines;
-  guint16 *errline;
-
-  GstVideoChromaResample *upsample;
-  guint up_n_lines;
-  gint up_offset;
-  GstVideoChromaResample *downsample;
-  guint down_n_lines;
-  gint down_offset;
-
-  void (*convert)      (VideoConvert *convert, GstVideoFrame *dest, const GstVideoFrame *src);
-  void (*matrix)       (VideoConvert *convert, gpointer pixels);
-  void (*dither16)     (VideoConvert *convert, guint16 * pixels, int j);
-
-};
-
-VideoConvert *   videoconvert_convert_new            (GstVideoInfo *in_info,
-                                                      GstVideoInfo *out_info);
-void             videoconvert_convert_free           (VideoConvert * convert);
-
-void             videoconvert_convert_set_dither     (VideoConvert * convert, int type);
-
-void             videoconvert_convert_convert        (VideoConvert * convert,
-                                                      GstVideoFrame *dest, const GstVideoFrame *src);
-
-
-G_END_DECLS
-
-#endif /* __GST_COLORSPACE_H__ */
diff --git a/gst/videorate/Makefile.am b/gst/videorate/Makefile.am
index d950ad9..e107924 100644
--- a/gst/videorate/Makefile.am
+++ b/gst/videorate/Makefile.am
@@ -3,21 +3,10 @@
 plugin_LTLIBRARIES = libgstvideorate.la
 
 libgstvideorate_la_SOURCES = gstvideorate.c
-libgstvideorate_la_CFLAGS = $(GST_CFLAGS) $(GST_BASE_CFLAGS)
+libgstvideorate_la_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_BASE_CFLAGS) $(GST_CFLAGS)
 libgstvideorate_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS)
-libgstvideorate_la_LIBADD = $(GST_LIBS) $(GST_BASE_LIBS)
+libgstvideorate_la_LIBADD = \
+	$(top_builddir)/gst-libs/gst/video/libgstvideo-$(GST_API_VERSION).la \
+	$(GST_BASE_LIBS) \
+	$(GST_LIBS)
 libgstvideorate_la_LIBTOOLFLAGS = $(GST_PLUGIN_LIBTOOLFLAGS)
-
-Android.mk: Makefile.am $(BUILT_SOURCES)
-	androgenizer \
-	-:PROJECT libgstvideorate -:SHARED libgstvideorate \
-	 -:TAGS eng debug \
-         -:REL_TOP $(top_srcdir) -:ABS_TOP $(abs_top_srcdir) \
-	 -:SOURCES $(libgstvideorate_la_SOURCES) \
-	 -:CFLAGS $(DEFS) $(DEFAULT_INCLUDES) $(libgstvideorate_la_CFLAGS) \
-	 -:LDFLAGS $(libgstvideorate_la_LDFLAGS) \
-	           $(libgstvideorate_la_LIBADD) \
-	           -ldl \
-	 -:PASSTHROUGH LOCAL_ARM_MODE:=arm \
-		       LOCAL_MODULE_PATH:='$$(TARGET_OUT)/lib/gstreamer-0.10' \
-	> $@
diff --git a/gst/videorate/Makefile.in b/gst/videorate/Makefile.in
index 18b60f6..982898b 100644
--- a/gst/videorate/Makefile.in
+++ b/gst/videorate/Makefile.in
@@ -1,7 +1,7 @@
-# Makefile.in generated by automake 1.14.1 from Makefile.am.
+# Makefile.in generated by automake 1.15 from Makefile.am.
 # @configure_input@
 
-# Copyright (C) 1994-2013 Free Software Foundation, Inc.
+# 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,
@@ -16,7 +16,17 @@
 
 
 VPATH = @srcdir@
-am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)'
+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 \
       ?) ;; \
@@ -81,8 +91,6 @@
 host_triplet = @host@
 target_triplet = @target@
 subdir = gst/videorate
-DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \
-	$(top_srcdir)/depcomp $(noinst_HEADERS)
 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 \
@@ -103,7 +111,6 @@
 	$(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-x11.m4 \
 	$(top_srcdir)/common/m4/gst.m4 \
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
@@ -120,6 +127,8 @@
 	$(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 =
@@ -154,8 +163,8 @@
 am__installdirs = "$(DESTDIR)$(plugindir)"
 LTLIBRARIES = $(plugin_LTLIBRARIES)
 am__DEPENDENCIES_1 =
-libgstvideorate_la_DEPENDENCIES = $(am__DEPENDENCIES_1) \
-	$(am__DEPENDENCIES_1)
+libgstvideorate_la_DEPENDENCIES = $(top_builddir)/gst-libs/gst/video/libgstvideo-$(GST_API_VERSION).la \
+	$(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1)
 am_libgstvideorate_la_OBJECTS = libgstvideorate_la-gstvideorate.lo
 libgstvideorate_la_OBJECTS = $(am_libgstvideorate_la_OBJECTS)
 AM_V_lt = $(am__v_lt_@AM_V@)
@@ -227,6 +236,7 @@
   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@
@@ -287,6 +297,8 @@
 GIO_CFLAGS = @GIO_CFLAGS@
 GIO_LDFLAGS = @GIO_LDFLAGS@
 GIO_LIBS = @GIO_LIBS@
+GIO_UNIX_2_0_CFLAGS = @GIO_UNIX_2_0_CFLAGS@
+GIO_UNIX_2_0_LIBS = @GIO_UNIX_2_0_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
@@ -316,6 +328,8 @@
 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_OPTION_CFLAGS = @GST_OPTION_CFLAGS@
 GST_OPTION_CXXFLAGS = @GST_OPTION_CXXFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
@@ -343,7 +357,6 @@
 GTK_X11_CFLAGS = @GTK_X11_CFLAGS@
 GTK_X11_LIBS = @GTK_X11_LIBS@
 HAVE_CDPARANOIA = @HAVE_CDPARANOIA@
-HAVE_X = @HAVE_X@
 HAVE_XSHM = @HAVE_XSHM@
 HAVE_ZLIB = @HAVE_ZLIB@
 HTML_DIR = @HTML_DIR@
@@ -358,6 +371,7 @@
 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@
@@ -447,13 +461,12 @@
 XGETTEXT = @XGETTEXT@
 XGETTEXT_015 = @XGETTEXT_015@
 XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
-XMKMF = @XMKMF@
+XSHM_CFLAGS = @XSHM_CFLAGS@
 XSHM_LIBS = @XSHM_LIBS@
+XVIDEO_CFLAGS = @XVIDEO_CFLAGS@
 XVIDEO_LIBS = @XVIDEO_LIBS@
 X_CFLAGS = @X_CFLAGS@
-X_EXTRA_LIBS = @X_EXTRA_LIBS@
 X_LIBS = @X_LIBS@
-X_PRE_LIBS = @X_PRE_LIBS@
 ZLIB_CFLAGS = @ZLIB_CFLAGS@
 ZLIB_LIBS = @ZLIB_LIBS@
 abs_builddir = @abs_builddir@
@@ -506,6 +519,7 @@
 psdir = @psdir@
 pyexecdir = @pyexecdir@
 pythondir = @pythondir@
+runstatedir = @runstatedir@
 sbindir = @sbindir@
 sharedstatedir = @sharedstatedir@
 srcdir = @srcdir@
@@ -521,9 +535,13 @@
 noinst_HEADERS = gstvideorate.h
 plugin_LTLIBRARIES = libgstvideorate.la
 libgstvideorate_la_SOURCES = gstvideorate.c
-libgstvideorate_la_CFLAGS = $(GST_CFLAGS) $(GST_BASE_CFLAGS)
+libgstvideorate_la_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_BASE_CFLAGS) $(GST_CFLAGS)
 libgstvideorate_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS)
-libgstvideorate_la_LIBADD = $(GST_LIBS) $(GST_BASE_LIBS)
+libgstvideorate_la_LIBADD = \
+	$(top_builddir)/gst-libs/gst/video/libgstvideo-$(GST_API_VERSION).la \
+	$(GST_BASE_LIBS) \
+	$(GST_LIBS)
+
 libgstvideorate_la_LIBTOOLFLAGS = $(GST_PLUGIN_LIBTOOLFLAGS)
 all: all-am
 
@@ -541,7 +559,6 @@
 	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu gst/videorate/Makefile'; \
 	$(am__cd) $(top_srcdir) && \
 	  $(AUTOMAKE) --gnu gst/videorate/Makefile
-.PRECIOUS: Makefile
 Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
 	@case '$?' in \
 	  *config.status*) \
@@ -850,20 +867,8 @@
 	pdf pdf-am ps ps-am tags tags-am uninstall uninstall-am \
 	uninstall-pluginLTLIBRARIES
 
+.PRECIOUS: Makefile
 
-Android.mk: Makefile.am $(BUILT_SOURCES)
-	androgenizer \
-	-:PROJECT libgstvideorate -:SHARED libgstvideorate \
-	 -:TAGS eng debug \
-         -:REL_TOP $(top_srcdir) -:ABS_TOP $(abs_top_srcdir) \
-	 -:SOURCES $(libgstvideorate_la_SOURCES) \
-	 -:CFLAGS $(DEFS) $(DEFAULT_INCLUDES) $(libgstvideorate_la_CFLAGS) \
-	 -:LDFLAGS $(libgstvideorate_la_LDFLAGS) \
-	           $(libgstvideorate_la_LIBADD) \
-	           -ldl \
-	 -:PASSTHROUGH LOCAL_ARM_MODE:=arm \
-		       LOCAL_MODULE_PATH:='$$(TARGET_OUT)/lib/gstreamer-0.10' \
-	> $@
 
 # 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/videorate/gstvideorate.c b/gst/videorate/gstvideorate.c
index f8915c6..9b9f260 100644
--- a/gst/videorate/gstvideorate.c
+++ b/gst/videorate/gstvideorate.c
@@ -55,13 +55,16 @@
  * <refsect2>
  * <title>Example pipelines</title>
  * |[
- * gst-launch -v filesrc location=videotestsrc.ogg ! oggdemux ! theoradec ! videorate ! video/x-raw,framerate=15/1 ! xvimagesink
- * ]| Decode an Ogg/Theora file and adjust the framerate to 15 fps before playing.
- * To create the test Ogg/Theora file refer to the documentation of theoraenc.
+ * gst-launch-1.0 -v uridecodebin uri=file:///path/to/video.ogg ! videoconvert ! videoscale ! videorate ! video/x-raw,framerate=15/1 ! autovideosink
+ * ]| Decode a video file and adjust the framerate to 15 fps before playing.
+ * To create a test Ogg/Theora file refer to the documentation of theoraenc.
  * |[
- * gst-launch -v v4l2src ! videorate ! video/x-raw,framerate=25/2 ! theoraenc ! oggmux ! filesink location=recording.ogg
+ * gst-launch-1.0 -v v4l2src ! videorate ! video/x-raw,framerate=25/2 ! theoraenc ! oggmux ! filesink location=recording.ogg
  * ]| Capture video from a V4L device, and adjust the stream to 12.5 fps before
  * encoding to Ogg/Theora.
+ * |[
+ * gst-launch-1.0 -v uridecodebin uri=file:///path/to/video.ogg ! videoconvert ! videoscale ! videorate ! video/x-raw,framerate=1/5 ! jpegenc ! multifilesink location=snapshot-%05d.jpg
+ * ]| Decode a video file and save a snapshot every 5 seconds as consecutively numbered jpeg file.
  * </refsect2>
  */
 
@@ -70,6 +73,7 @@
 #endif
 
 #include "gstvideorate.h"
+#include <gst/video/video.h>
 
 GST_DEBUG_CATEGORY_STATIC (video_rate_debug);
 #define GST_CAT_DEFAULT video_rate_debug
@@ -107,14 +111,16 @@
     GST_STATIC_PAD_TEMPLATE ("src",
     GST_PAD_SRC,
     GST_PAD_ALWAYS,
-    GST_STATIC_CAPS ("video/x-raw;" "image/jpeg;" "image/png")
+    GST_STATIC_CAPS ("video/x-raw(ANY);" "video/x-bayer(ANY);"
+        "image/jpeg(ANY);" "image/png(ANY)")
     );
 
 static GstStaticPadTemplate gst_video_rate_sink_template =
     GST_STATIC_PAD_TEMPLATE ("sink",
     GST_PAD_SINK,
     GST_PAD_ALWAYS,
-    GST_STATIC_CAPS ("video/x-raw;" "image/jpeg;" "image/png")
+    GST_STATIC_CAPS ("video/x-raw(ANY);" "video/x-bayer(ANY);"
+        "image/jpeg(ANY);" "image/png(ANY)")
     );
 
 static void gst_video_rate_swap_prev (GstVideoRate * videorate,
@@ -136,6 +142,9 @@
 static GstFlowReturn gst_video_rate_transform_ip (GstBaseTransform * trans,
     GstBuffer * buf);
 
+static gboolean gst_video_rate_propose_allocation (GstBaseTransform * trans,
+    GstQuery * decide_query, GstQuery * query);
+
 static gboolean gst_video_rate_start (GstBaseTransform * trans);
 static gboolean gst_video_rate_stop (GstBaseTransform * trans);
 
@@ -170,6 +179,8 @@
   base_class->stop = GST_DEBUG_FUNCPTR (gst_video_rate_stop);
   base_class->fixate_caps = GST_DEBUG_FUNCPTR (gst_video_rate_fixate_caps);
   base_class->query = GST_DEBUG_FUNCPTR (gst_video_rate_query);
+  base_class->propose_allocation =
+      GST_DEBUG_FUNCPTR (gst_video_rate_propose_allocation);
 
   g_object_class_install_property (object_class, PROP_IN,
       g_param_spec_uint64 ("in", "In",
@@ -365,6 +376,19 @@
     s = gst_caps_get_structure (caps, i);
 
     s1 = gst_structure_copy (s);
+
+    if (videorate->updating_caps && direction == GST_PAD_SINK) {
+      GST_INFO_OBJECT (trans,
+          "Only updating caps %" GST_PTR_FORMAT " with framerate" " %d/%d",
+          caps, videorate->to_rate_numerator, videorate->to_rate_denominator);
+
+      gst_structure_set (s1, "framerate", GST_TYPE_FRACTION,
+          videorate->to_rate_numerator, videorate->to_rate_denominator, NULL);
+      ret = gst_caps_merge_structure (ret, s1);
+
+      continue;
+    }
+
     s2 = gst_structure_copy (s);
     s3 = NULL;
 
@@ -429,10 +453,13 @@
           G_MAXINT, 1, NULL);
     }
     if (s1 != NULL)
-      ret = gst_caps_merge_structure (ret, s1);
-    ret = gst_caps_merge_structure (ret, s2);
+      ret = gst_caps_merge_structure_full (ret, s1,
+          gst_caps_features_copy (gst_caps_get_features (caps, i)));
+    ret = gst_caps_merge_structure_full (ret, s2,
+        gst_caps_features_copy (gst_caps_get_features (caps, i)));
     if (s3 != NULL)
-      ret = gst_caps_merge_structure (ret, s3);
+      ret = gst_caps_merge_structure_full (ret, s3,
+          gst_caps_features_copy (gst_caps_get_features (caps, i)));
   }
   if (filter) {
     GstCaps *intersection;
@@ -451,6 +478,7 @@
 {
   GstStructure *s;
   gint num, denom;
+  const GValue *par;
 
   s = gst_caps_get_structure (caps, 0);
   if (G_UNLIKELY (!gst_structure_get_fraction (s, "framerate", &num, &denom)))
@@ -461,6 +489,9 @@
   s = gst_caps_get_structure (othercaps, 0);
   gst_structure_fixate_field_nearest_fraction (s, "framerate", num, denom);
 
+  if ((par = gst_structure_get_value (s, "pixel-aspect-ratio")))
+    gst_structure_fixate_field_nearest_fraction (s, "pixel-aspect-ratio", 1, 1);
+
   return othercaps;
 }
 
@@ -541,6 +572,7 @@
   videorate->last_ts = GST_CLOCK_TIME_NONE;
   videorate->discont = TRUE;
   videorate->average = 0;
+  videorate->force_variable_rate = FALSE;
   gst_video_rate_swap_prev (videorate, NULL, 0);
 
   gst_segment_init (&videorate->segment, GST_FORMAT_TIME);
@@ -606,6 +638,8 @@
         videorate->to_rate_denominator * GST_SECOND,
         videorate->to_rate_numerator);
     GST_BUFFER_DURATION (outbuf) = videorate->next_ts - push_ts;
+  } else if (GST_CLOCK_TIME_IS_VALID (GST_BUFFER_DURATION (outbuf))) {
+    videorate->next_ts = GST_BUFFER_PTS (outbuf) + GST_BUFFER_DURATION (outbuf);
   }
 
   /* We do not need to update time in VFR (variable frame rate) mode */
@@ -805,10 +839,12 @@
       gboolean live;
       guint64 latency;
       guint64 avg_period;
+      gboolean drop_only;
       GstPad *peer;
 
       GST_OBJECT_LOCK (videorate);
       avg_period = videorate->average_period_set;
+      drop_only = videorate->drop_only;
       GST_OBJECT_UNLOCK (videorate);
 
       if (avg_period == 0 && (peer = gst_pad_get_peer (otherpad))) {
@@ -819,7 +855,8 @@
               GST_TIME_FORMAT " max %" GST_TIME_FORMAT,
               GST_TIME_ARGS (min), GST_TIME_ARGS (max));
 
-          if (videorate->from_rate_numerator != 0) {
+          /* Drop only has no latency, other modes have one frame latency */
+          if (!drop_only && videorate->from_rate_numerator != 0) {
             /* add latency. We don't really know since we hold on to the frames
              * until we get a next frame, which can be anything. We assume
              * however that this will take from_rate time. */
@@ -860,6 +897,60 @@
   return res;
 }
 
+static gboolean
+gst_video_rate_propose_allocation (GstBaseTransform * trans,
+    GstQuery * decide_query, GstQuery * query)
+{
+  GstBaseTransformClass *klass = GST_BASE_TRANSFORM_CLASS (parent_class);
+  gboolean res;
+
+  /* We should always be passthrough */
+  g_return_val_if_fail (decide_query == NULL, FALSE);
+
+  res = klass->propose_allocation (trans, NULL, query);
+
+  if (res) {
+    guint i = 0;
+    guint n_allocation;
+    guint down_min = 0;
+
+    n_allocation = gst_query_get_n_allocation_pools (query);
+
+    while (i < n_allocation) {
+      GstBufferPool *pool = NULL;
+      guint size, min, max;
+
+      gst_query_parse_nth_allocation_pool (query, i, &pool, &size, &min, &max);
+
+      if (min == max) {
+        if (pool)
+          gst_object_unref (pool);
+        gst_query_remove_nth_allocation_pool (query, i);
+        n_allocation--;
+        down_min = MAX (min, down_min);
+        continue;
+      }
+
+      gst_query_set_nth_allocation_pool (query, i, pool, size, min + 1, max);
+      if (pool)
+        gst_object_unref (pool);
+      i++;
+    }
+
+    if (n_allocation == 0) {
+      GstCaps *caps;
+      GstVideoInfo info;
+
+      gst_query_parse_allocation (query, &caps, NULL);
+      gst_video_info_from_caps (&info, caps);
+
+      gst_query_add_allocation_pool (query, NULL, info.size, down_min + 1, 0);
+    }
+  }
+
+  return res;
+}
+
 static GstFlowReturn
 gst_video_rate_trans_ip_max_avg (GstVideoRate * videorate, GstBuffer * buf)
 {
@@ -913,6 +1004,55 @@
   return GST_BASE_TRANSFORM_FLOW_DROPPED;
 }
 
+/* Check if downstream forces variable framerate (0/1) and if
+ * it is the case, use variable framerate ourself
+ * Otherwise compute the framerate from the 2 buffers that we
+ * have already received and make use of it as wanted framerate
+ */
+static void
+gst_video_rate_check_variable_rate (GstVideoRate * videorate,
+    GstBuffer * buffer)
+{
+  GstStructure *st;
+  gint fps_d, fps_n;
+  GstCaps *srcpadcaps, *tmpcaps;
+  GstPad *pad = NULL;
+
+  srcpadcaps =
+      gst_pad_get_current_caps (GST_BASE_TRANSFORM_SRC_PAD (videorate));
+
+  gst_video_guess_framerate (GST_BUFFER_PTS (buffer) -
+      GST_BUFFER_PTS (videorate->prevbuf), &fps_n, &fps_d);
+
+  tmpcaps = gst_caps_copy (srcpadcaps);
+  st = gst_caps_get_structure (tmpcaps, 0);
+  gst_structure_set (st, "framerate", GST_TYPE_FRACTION, fps_n, fps_d, NULL);
+  gst_caps_unref (srcpadcaps);
+
+  pad = gst_pad_get_peer (GST_BASE_TRANSFORM_SRC_PAD (videorate));
+  if (pad && !gst_pad_query_accept_caps (pad, tmpcaps)) {
+    videorate->force_variable_rate = TRUE;
+    GST_DEBUG_OBJECT (videorate, "Downstream forces variable framerate"
+        " respecting it");
+
+    goto done;
+  }
+
+  videorate->to_rate_numerator = fps_n;
+  videorate->to_rate_denominator = fps_d;
+
+  GST_INFO_OBJECT (videorate, "Computed framerate to %d/%d",
+      videorate->to_rate_numerator, videorate->to_rate_denominator);
+
+  videorate->updating_caps = TRUE;
+  gst_base_transform_update_src_caps (GST_BASE_TRANSFORM (videorate), tmpcaps);
+
+done:
+  gst_caps_unref (tmpcaps);
+  if (pad)
+    gst_object_unref (pad);
+}
+
 static GstFlowReturn
 gst_video_rate_transform_ip (GstBaseTransform * trans, GstBuffer * buffer)
 {
@@ -929,6 +1069,11 @@
       videorate->to_rate_denominator == 0)
     goto not_negotiated;
 
+  if (videorate->to_rate_numerator == 0 && videorate->prevbuf &&
+      !videorate->force_variable_rate) {
+    gst_video_rate_check_variable_rate (videorate, buffer);
+  }
+
   GST_OBJECT_LOCK (videorate);
   avg_period = videorate->average_period_set;
   GST_OBJECT_UNLOCK (videorate);
@@ -983,7 +1128,7 @@
   intime = in_ts + videorate->segment.base;
 
   /* we need to have two buffers to compare */
-  if (videorate->prevbuf == NULL) {
+  if (videorate->prevbuf == NULL || videorate->drop_only) {
     gst_video_rate_swap_prev (videorate, buffer, intime);
     videorate->in++;
     if (!GST_CLOCK_TIME_IS_VALID (videorate->next_ts)) {
@@ -997,6 +1142,24 @@
         videorate->next_ts = videorate->segment.start + videorate->segment.base;
       }
     }
+
+    /* In drop-only mode we can already decide here if we should output the
+     * current frame or drop it because it's coming earlier than our minimum
+     * allowed frame period. This also keeps latency down to 0 frames
+     */
+    if (videorate->drop_only) {
+      if (intime >= videorate->next_ts) {
+        GstFlowReturn r;
+
+        /* on error the _flush function posted a warning already */
+        if ((r = gst_video_rate_flush_prev (videorate, FALSE)) != GST_FLOW_OK) {
+          res = r;
+          goto done;
+        }
+      }
+      /* No need to keep the buffer around for longer */
+      gst_buffer_replace (&videorate->prevbuf, NULL);
+    }
   } else {
     GstClockTime prevtime;
     gint count = 0;
@@ -1042,6 +1205,12 @@
           GST_TIME_ARGS (diff1), GST_TIME_ARGS (diff2),
           GST_TIME_ARGS (videorate->next_ts));
 
+      if (!GST_BUFFER_DURATION_IS_VALID (videorate->prevbuf) &&
+          intime > prevtime) {
+        /* Make sure that we have a duration for previous buffer */
+        GST_BUFFER_DURATION (videorate->prevbuf) = intime - prevtime;
+      }
+
       /* output first one when its the best */
       if (diff1 <= diff2) {
         GstFlowReturn r;
@@ -1130,6 +1299,7 @@
     guint prop_id, const GValue * value, GParamSpec * pspec)
 {
   GstVideoRate *videorate = GST_VIDEO_RATE (object);
+  gboolean latency_changed = FALSE;
 
   GST_OBJECT_LOCK (videorate);
   switch (prop_id) {
@@ -1142,10 +1312,15 @@
     case PROP_SKIP_TO_FIRST:
       videorate->skip_to_first = g_value_get_boolean (value);
       break;
-    case PROP_DROP_ONLY:
+    case PROP_DROP_ONLY:{
+      gboolean new_value = g_value_get_boolean (value);
+
+      /* Latency changes if we switch drop-only mode */
+      latency_changed = new_value != videorate->drop_only;
       videorate->drop_only = g_value_get_boolean (value);
       goto reconfigure;
       break;
+    }
     case PROP_AVERAGE_PERIOD:
       videorate->average_period_set = g_value_get_uint64 (value);
       break;
@@ -1163,6 +1338,11 @@
 reconfigure:
   GST_OBJECT_UNLOCK (videorate);
   gst_base_transform_reconfigure_src (GST_BASE_TRANSFORM (videorate));
+
+  if (latency_changed) {
+    gst_element_post_message (GST_ELEMENT (videorate),
+        gst_message_new_latency (GST_OBJECT (videorate)));
+  }
 }
 
 static void
diff --git a/gst/videorate/gstvideorate.h b/gst/videorate/gstvideorate.h
index 92c841c..d5e7c19 100644
--- a/gst/videorate/gstvideorate.h
+++ b/gst/videorate/gstvideorate.h
@@ -65,6 +65,8 @@
   guint64 average_period;
   GstClockTimeDiff wanted_diff; /* target average diff */
   GstClockTimeDiff average;     /* moving average period */
+  gboolean force_variable_rate;
+  gboolean updating_caps;
 
   /* segment handling */
   GstSegment segment;
diff --git a/gst/videoscale/Makefile.am b/gst/videoscale/Makefile.am
index 5d96422..9462611 100644
--- a/gst/videoscale/Makefile.am
+++ b/gst/videoscale/Makefile.am
@@ -1,43 +1,13 @@
 plugin_LTLIBRARIES = libgstvideoscale.la
 
-ORC_SOURCE=gstvideoscaleorc
-include $(top_srcdir)/common/orc.mak
+libgstvideoscale_la_SOURCES = gstvideoscale.c 
 
-libgstvideoscale_la_SOURCES = \
-	gstvideoscale.c \
-	vs_image.c \
-	vs_scanline.c \
-	vs_4tap.c \
-	vs_fill_borders.c \
-	vs_lanczos.c
-
-nodist_libgstvideoscale_la_SOURCES = $(ORC_NODIST_SOURCES)
-
-libgstvideoscale_la_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_BASE_CFLAGS) $(GST_CFLAGS) $(ORC_CFLAGS)
+libgstvideoscale_la_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_BASE_CFLAGS) $(GST_CFLAGS)
 libgstvideoscale_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS)
 libgstvideoscale_la_LIBADD = \
 	$(top_builddir)/gst-libs/gst/video/libgstvideo-$(GST_API_VERSION).la \
-	$(GST_BASE_LIBS) $(GST_LIBS) $(ORC_LIBS) $(LIBM)
+	$(GST_BASE_LIBS) $(GST_LIBS) $(LIBM)
 libgstvideoscale_la_LIBTOOLFLAGS = $(GST_PLUGIN_LIBTOOLFLAGS)
 
 noinst_HEADERS = \
-	gstvideoscale.h \
-	vs_image.h \
-	vs_scanline.h \
-	vs_4tap.h \
-	vs_fill_borders.h
-
-Android.mk: Makefile.am $(BUILT_SOURCES)
-	androgenizer \
-	-:PROJECT libgstvideoscale -:SHARED libgstvideoscale \
-	 -:TAGS eng debug \
-         -:REL_TOP $(top_srcdir) -:ABS_TOP $(abs_top_srcdir) \
-	 -:SOURCES $(libgstvideoscale_la_SOURCES) \
-	 	   $(nodist_libgstvideoscale_la_SOURCES) \
-	 -:CFLAGS $(DEFS) $(DEFAULT_INCLUDES) $(libgstvideoscale_la_CFLAGS) \
-	 -:LDFLAGS $(libgstvideoscale_la_LDFLAGS) \
-	           $(libgstvideoscale_la_LIBADD) \
-	           -ldl \
-	 -:PASSTHROUGH LOCAL_ARM_MODE:=arm \
-		       LOCAL_MODULE_PATH:='$$(TARGET_OUT)/lib/gstreamer-0.10' \
-	> $@
+	gstvideoscale.h
diff --git a/gst/videoscale/Makefile.in b/gst/videoscale/Makefile.in
index f775fc2..ffb2d3b 100644
--- a/gst/videoscale/Makefile.in
+++ b/gst/videoscale/Makefile.in
@@ -1,7 +1,7 @@
-# Makefile.in generated by automake 1.14.1 from Makefile.am.
+# Makefile.in generated by automake 1.15 from Makefile.am.
 # @configure_input@
 
-# Copyright (C) 1994-2013 Free Software Foundation, Inc.
+# 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,
@@ -14,31 +14,19 @@
 
 @SET_MAKE@
 
-#
-# This is a makefile.am fragment to build Orc code.
-#
-# Define ORC_SOURCE and then include this file, such as:
-#
-#  ORC_SOURCE=gstadderorc
-#  include $(top_srcdir)/common/orc.mak
-#
-# This fragment will create tmp-orc.c and gstadderorc.h from
-# gstadderorc.orc.
-#
-# When 'make dist' is run at the top level, or 'make orc-update'
-# in a directory including this fragment, the generated source 
-# files will be copied to $(ORC_SOURCE)-dist.[ch].  These files
-# should be checked in to git, since they are used if Orc is
-# disabled.
-# 
-# Note that this file defines BUILT_SOURCES, so any later usage
-# of BUILT_SOURCES in the Makefile.am that includes this file
-# must use '+='.
-#
-
 
 VPATH = @srcdir@
-am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)'
+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 \
       ?) ;; \
@@ -102,9 +90,6 @@
 build_triplet = @build@
 host_triplet = @host@
 target_triplet = @target@
-DIST_COMMON = $(top_srcdir)/common/orc.mak $(srcdir)/Makefile.in \
-	$(srcdir)/Makefile.am $(top_srcdir)/depcomp $(noinst_HEADERS) \
-	README
 subdir = gst/videoscale
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
 am__aclocal_m4_deps = $(top_srcdir)/common/m4/as-ac-expand.m4 \
@@ -126,7 +111,6 @@
 	$(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-x11.m4 \
 	$(top_srcdir)/common/m4/gst.m4 \
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
@@ -143,6 +127,8 @@
 	$(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 =
@@ -179,17 +165,9 @@
 am__DEPENDENCIES_1 =
 libgstvideoscale_la_DEPENDENCIES = $(top_builddir)/gst-libs/gst/video/libgstvideo-$(GST_API_VERSION).la \
 	$(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
-	$(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1)
-am_libgstvideoscale_la_OBJECTS = libgstvideoscale_la-gstvideoscale.lo \
-	libgstvideoscale_la-vs_image.lo \
-	libgstvideoscale_la-vs_scanline.lo \
-	libgstvideoscale_la-vs_4tap.lo \
-	libgstvideoscale_la-vs_fill_borders.lo \
-	libgstvideoscale_la-vs_lanczos.lo
-am__objects_1 = libgstvideoscale_la-tmp-orc.lo
-nodist_libgstvideoscale_la_OBJECTS = $(am__objects_1)
-libgstvideoscale_la_OBJECTS = $(am_libgstvideoscale_la_OBJECTS) \
-	$(nodist_libgstvideoscale_la_OBJECTS)
+	$(am__DEPENDENCIES_1)
+am_libgstvideoscale_la_OBJECTS = libgstvideoscale_la-gstvideoscale.lo
+libgstvideoscale_la_OBJECTS = $(am_libgstvideoscale_la_OBJECTS)
 AM_V_lt = $(am__v_lt_@AM_V@)
 am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
 am__v_lt_0 = --silent
@@ -232,8 +210,7 @@
 am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@)
 am__v_CCLD_0 = @echo "  CCLD    " $@;
 am__v_CCLD_1 = 
-SOURCES = $(libgstvideoscale_la_SOURCES) \
-	$(nodist_libgstvideoscale_la_SOURCES)
+SOURCES = $(libgstvideoscale_la_SOURCES)
 DIST_SOURCES = $(libgstvideoscale_la_SOURCES)
 am__can_run_installinfo = \
   case $$AM_UPDATE_INFO_DIR in \
@@ -260,6 +237,7 @@
   done | $(am__uniquify_input)`
 ETAGS = etags
 CTAGS = ctags
+am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp README
 DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
 ACLOCAL = @ACLOCAL@
 ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@
@@ -320,6 +298,8 @@
 GIO_CFLAGS = @GIO_CFLAGS@
 GIO_LDFLAGS = @GIO_LDFLAGS@
 GIO_LIBS = @GIO_LIBS@
+GIO_UNIX_2_0_CFLAGS = @GIO_UNIX_2_0_CFLAGS@
+GIO_UNIX_2_0_LIBS = @GIO_UNIX_2_0_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
@@ -349,6 +329,8 @@
 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_OPTION_CFLAGS = @GST_OPTION_CFLAGS@
 GST_OPTION_CXXFLAGS = @GST_OPTION_CXXFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
@@ -376,7 +358,6 @@
 GTK_X11_CFLAGS = @GTK_X11_CFLAGS@
 GTK_X11_LIBS = @GTK_X11_LIBS@
 HAVE_CDPARANOIA = @HAVE_CDPARANOIA@
-HAVE_X = @HAVE_X@
 HAVE_XSHM = @HAVE_XSHM@
 HAVE_ZLIB = @HAVE_ZLIB@
 HTML_DIR = @HTML_DIR@
@@ -391,6 +372,7 @@
 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@
@@ -480,13 +462,12 @@
 XGETTEXT = @XGETTEXT@
 XGETTEXT_015 = @XGETTEXT_015@
 XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
-XMKMF = @XMKMF@
+XSHM_CFLAGS = @XSHM_CFLAGS@
 XSHM_LIBS = @XSHM_LIBS@
+XVIDEO_CFLAGS = @XVIDEO_CFLAGS@
 XVIDEO_LIBS = @XVIDEO_LIBS@
 X_CFLAGS = @X_CFLAGS@
-X_EXTRA_LIBS = @X_EXTRA_LIBS@
 X_LIBS = @X_LIBS@
-X_PRE_LIBS = @X_PRE_LIBS@
 ZLIB_CFLAGS = @ZLIB_CFLAGS@
 ZLIB_LIBS = @ZLIB_LIBS@
 abs_builddir = @abs_builddir@
@@ -539,6 +520,7 @@
 psdir = @psdir@
 pyexecdir = @pyexecdir@
 pythondir = @pythondir@
+runstatedir = @runstatedir@
 sbindir = @sbindir@
 sharedstatedir = @sharedstatedir@
 srcdir = @srcdir@
@@ -552,45 +534,22 @@
 top_builddir = @top_builddir@
 top_srcdir = @top_srcdir@
 plugin_LTLIBRARIES = libgstvideoscale.la
-ORC_SOURCE = gstvideoscaleorc
-EXTRA_DIST = $(ORC_SOURCE).orc
-ORC_NODIST_SOURCES = tmp-orc.c $(ORC_SOURCE).h
-BUILT_SOURCES = tmp-orc.c $(ORC_SOURCE).h
-orcc_v_gen = $(orcc_v_gen_$(V))
-orcc_v_gen_ = $(orcc_v_gen_$(AM_DEFAULT_VERBOSITY))
-orcc_v_gen_0 = @echo "  ORCC   $@";
-cp_v_gen = $(cp_v_gen_$(V))
-cp_v_gen_ = $(cp_v_gen_$(AM_DEFAULT_VERBOSITY))
-cp_v_gen_0 = @echo "  CP     $@";
-libgstvideoscale_la_SOURCES = \
-	gstvideoscale.c \
-	vs_image.c \
-	vs_scanline.c \
-	vs_4tap.c \
-	vs_fill_borders.c \
-	vs_lanczos.c
-
-nodist_libgstvideoscale_la_SOURCES = $(ORC_NODIST_SOURCES)
-libgstvideoscale_la_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_BASE_CFLAGS) $(GST_CFLAGS) $(ORC_CFLAGS)
+libgstvideoscale_la_SOURCES = gstvideoscale.c 
+libgstvideoscale_la_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_BASE_CFLAGS) $(GST_CFLAGS)
 libgstvideoscale_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS)
 libgstvideoscale_la_LIBADD = \
 	$(top_builddir)/gst-libs/gst/video/libgstvideo-$(GST_API_VERSION).la \
-	$(GST_BASE_LIBS) $(GST_LIBS) $(ORC_LIBS) $(LIBM)
+	$(GST_BASE_LIBS) $(GST_LIBS) $(LIBM)
 
 libgstvideoscale_la_LIBTOOLFLAGS = $(GST_PLUGIN_LIBTOOLFLAGS)
 noinst_HEADERS = \
-	gstvideoscale.h \
-	vs_image.h \
-	vs_scanline.h \
-	vs_4tap.h \
-	vs_fill_borders.h
+	gstvideoscale.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/orc.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*) \
@@ -602,7 +561,6 @@
 	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu gst/videoscale/Makefile'; \
 	$(am__cd) $(top_srcdir) && \
 	  $(AUTOMAKE) --gnu gst/videoscale/Makefile
-.PRECIOUS: Makefile
 Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
 	@case '$?' in \
 	  *config.status*) \
@@ -611,7 +569,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/orc.mak:
 
 $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
 	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
@@ -667,12 +624,6 @@
 	-rm -f *.tab.c
 
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstvideoscale_la-gstvideoscale.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstvideoscale_la-tmp-orc.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstvideoscale_la-vs_4tap.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstvideoscale_la-vs_fill_borders.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstvideoscale_la-vs_image.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstvideoscale_la-vs_lanczos.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstvideoscale_la-vs_scanline.Plo@am__quote@
 
 .c.o:
 @am__fastdepCC_TRUE@	$(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\
@@ -705,48 +656,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 $(libgstvideoscale_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstvideoscale_la_CFLAGS) $(CFLAGS) -c -o libgstvideoscale_la-gstvideoscale.lo `test -f 'gstvideoscale.c' || echo '$(srcdir)/'`gstvideoscale.c
 
-libgstvideoscale_la-vs_image.lo: vs_image.c
-@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstvideoscale_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstvideoscale_la_CFLAGS) $(CFLAGS) -MT libgstvideoscale_la-vs_image.lo -MD -MP -MF $(DEPDIR)/libgstvideoscale_la-vs_image.Tpo -c -o libgstvideoscale_la-vs_image.lo `test -f 'vs_image.c' || echo '$(srcdir)/'`vs_image.c
-@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstvideoscale_la-vs_image.Tpo $(DEPDIR)/libgstvideoscale_la-vs_image.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='vs_image.c' object='libgstvideoscale_la-vs_image.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 $(libgstvideoscale_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstvideoscale_la_CFLAGS) $(CFLAGS) -c -o libgstvideoscale_la-vs_image.lo `test -f 'vs_image.c' || echo '$(srcdir)/'`vs_image.c
-
-libgstvideoscale_la-vs_scanline.lo: vs_scanline.c
-@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstvideoscale_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstvideoscale_la_CFLAGS) $(CFLAGS) -MT libgstvideoscale_la-vs_scanline.lo -MD -MP -MF $(DEPDIR)/libgstvideoscale_la-vs_scanline.Tpo -c -o libgstvideoscale_la-vs_scanline.lo `test -f 'vs_scanline.c' || echo '$(srcdir)/'`vs_scanline.c
-@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstvideoscale_la-vs_scanline.Tpo $(DEPDIR)/libgstvideoscale_la-vs_scanline.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='vs_scanline.c' object='libgstvideoscale_la-vs_scanline.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 $(libgstvideoscale_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstvideoscale_la_CFLAGS) $(CFLAGS) -c -o libgstvideoscale_la-vs_scanline.lo `test -f 'vs_scanline.c' || echo '$(srcdir)/'`vs_scanline.c
-
-libgstvideoscale_la-vs_4tap.lo: vs_4tap.c
-@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstvideoscale_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstvideoscale_la_CFLAGS) $(CFLAGS) -MT libgstvideoscale_la-vs_4tap.lo -MD -MP -MF $(DEPDIR)/libgstvideoscale_la-vs_4tap.Tpo -c -o libgstvideoscale_la-vs_4tap.lo `test -f 'vs_4tap.c' || echo '$(srcdir)/'`vs_4tap.c
-@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstvideoscale_la-vs_4tap.Tpo $(DEPDIR)/libgstvideoscale_la-vs_4tap.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='vs_4tap.c' object='libgstvideoscale_la-vs_4tap.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 $(libgstvideoscale_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstvideoscale_la_CFLAGS) $(CFLAGS) -c -o libgstvideoscale_la-vs_4tap.lo `test -f 'vs_4tap.c' || echo '$(srcdir)/'`vs_4tap.c
-
-libgstvideoscale_la-vs_fill_borders.lo: vs_fill_borders.c
-@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstvideoscale_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstvideoscale_la_CFLAGS) $(CFLAGS) -MT libgstvideoscale_la-vs_fill_borders.lo -MD -MP -MF $(DEPDIR)/libgstvideoscale_la-vs_fill_borders.Tpo -c -o libgstvideoscale_la-vs_fill_borders.lo `test -f 'vs_fill_borders.c' || echo '$(srcdir)/'`vs_fill_borders.c
-@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstvideoscale_la-vs_fill_borders.Tpo $(DEPDIR)/libgstvideoscale_la-vs_fill_borders.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='vs_fill_borders.c' object='libgstvideoscale_la-vs_fill_borders.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 $(libgstvideoscale_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstvideoscale_la_CFLAGS) $(CFLAGS) -c -o libgstvideoscale_la-vs_fill_borders.lo `test -f 'vs_fill_borders.c' || echo '$(srcdir)/'`vs_fill_borders.c
-
-libgstvideoscale_la-vs_lanczos.lo: vs_lanczos.c
-@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstvideoscale_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstvideoscale_la_CFLAGS) $(CFLAGS) -MT libgstvideoscale_la-vs_lanczos.lo -MD -MP -MF $(DEPDIR)/libgstvideoscale_la-vs_lanczos.Tpo -c -o libgstvideoscale_la-vs_lanczos.lo `test -f 'vs_lanczos.c' || echo '$(srcdir)/'`vs_lanczos.c
-@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstvideoscale_la-vs_lanczos.Tpo $(DEPDIR)/libgstvideoscale_la-vs_lanczos.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='vs_lanczos.c' object='libgstvideoscale_la-vs_lanczos.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 $(libgstvideoscale_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstvideoscale_la_CFLAGS) $(CFLAGS) -c -o libgstvideoscale_la-vs_lanczos.lo `test -f 'vs_lanczos.c' || echo '$(srcdir)/'`vs_lanczos.c
-
-libgstvideoscale_la-tmp-orc.lo: tmp-orc.c
-@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstvideoscale_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstvideoscale_la_CFLAGS) $(CFLAGS) -MT libgstvideoscale_la-tmp-orc.lo -MD -MP -MF $(DEPDIR)/libgstvideoscale_la-tmp-orc.Tpo -c -o libgstvideoscale_la-tmp-orc.lo `test -f 'tmp-orc.c' || echo '$(srcdir)/'`tmp-orc.c
-@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstvideoscale_la-tmp-orc.Tpo $(DEPDIR)/libgstvideoscale_la-tmp-orc.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='tmp-orc.c' object='libgstvideoscale_la-tmp-orc.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 $(libgstvideoscale_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstvideoscale_la_CFLAGS) $(CFLAGS) -c -o libgstvideoscale_la-tmp-orc.lo `test -f 'tmp-orc.c' || echo '$(srcdir)/'`tmp-orc.c
-
 mostlyclean-libtool:
 	-rm -f *.lo
 
@@ -835,19 +744,14 @@
 	    || exit 1; \
 	  fi; \
 	done
-	$(MAKE) $(AM_MAKEFLAGS) \
-	  top_distdir="$(top_distdir)" distdir="$(distdir)" \
-	  dist-hook
 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
@@ -877,11 +781,10 @@
 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-local \
-	clean-pluginLTLIBRARIES mostlyclean-am
+clean-am: clean-generic clean-libtool clean-pluginLTLIBRARIES \
+	mostlyclean-am
 
 distclean: distclean-am
 	-rm -rf ./$(DEPDIR)
@@ -949,75 +852,25 @@
 
 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-local clean-pluginLTLIBRARIES \
-	cscopelist-am ctags ctags-am dist-hook 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 \
+	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
 
-orc-update: tmp-orc.c $(ORC_SOURCE).h
-	$(top_srcdir)/common/gst-indent tmp-orc.c
-	cp tmp-orc.c $(srcdir)/$(ORC_SOURCE)-dist.c
-	cp $(ORC_SOURCE).h $(srcdir)/$(ORC_SOURCE)-dist.h
-
-@HAVE_ORCC_TRUE@tmp-orc.c: $(srcdir)/$(ORC_SOURCE).orc
-@HAVE_ORCC_TRUE@	$(orcc_v_gen)$(ORCC) $(ORCC_FLAGS) --implementation --include glib.h -o tmp-orc.c $(srcdir)/$(ORC_SOURCE).orc
-
-@HAVE_ORCC_TRUE@$(ORC_SOURCE).h: $(srcdir)/$(ORC_SOURCE).orc
-@HAVE_ORCC_TRUE@	$(orcc_v_gen)$(ORCC) $(ORCC_FLAGS) --header --include glib.h -o $(ORC_SOURCE).h $(srcdir)/$(ORC_SOURCE).orc
-@HAVE_ORCC_FALSE@tmp-orc.c: $(srcdir)/$(ORC_SOURCE).orc $(srcdir)/$(ORC_SOURCE)-dist.c
-@HAVE_ORCC_FALSE@	$(cp_v_gen)cp $(srcdir)/$(ORC_SOURCE)-dist.c tmp-orc.c
-
-@HAVE_ORCC_FALSE@$(ORC_SOURCE).h: $(srcdir)/$(ORC_SOURCE).orc $(srcdir)/$(ORC_SOURCE)-dist.c
-@HAVE_ORCC_FALSE@	$(cp_v_gen)cp $(srcdir)/$(ORC_SOURCE)-dist.h $(ORC_SOURCE).h
-
-clean-local: clean-orc
-.PHONY: clean-orc
-clean-orc:
-	rm -f tmp-orc.c $(ORC_SOURCE).h
-
-dist-hook: dist-hook-orc
-.PHONY: dist-hook-orc
-
-# we try and copy updated orc -dist files below, but don't fail if it
-# doesn't work as the srcdir might not be writable
-dist-hook-orc: tmp-orc.c $(ORC_SOURCE).h
-	$(top_srcdir)/common/gst-indent tmp-orc.c
-	rm -f tmp-orc.c~
-	cmp -s tmp-orc.c $(srcdir)/$(ORC_SOURCE)-dist.c || \
-	  cp tmp-orc.c $(srcdir)/$(ORC_SOURCE)-dist.c || true
-	cmp -s $(ORC_SOURCE).h $(srcdir)/$(ORC_SOURCE)-dist.h || \
-	  cp $(ORC_SOURCE).h $(srcdir)/$(ORC_SOURCE)-dist.h || true
-	cp -p tmp-orc.c $(distdir)/$(ORC_SOURCE)-dist.c
-	cp -p $(ORC_SOURCE).h $(distdir)/$(ORC_SOURCE)-dist.h
-
-Android.mk: Makefile.am $(BUILT_SOURCES)
-	androgenizer \
-	-:PROJECT libgstvideoscale -:SHARED libgstvideoscale \
-	 -:TAGS eng debug \
-         -:REL_TOP $(top_srcdir) -:ABS_TOP $(abs_top_srcdir) \
-	 -:SOURCES $(libgstvideoscale_la_SOURCES) \
-	 	   $(nodist_libgstvideoscale_la_SOURCES) \
-	 -:CFLAGS $(DEFS) $(DEFAULT_INCLUDES) $(libgstvideoscale_la_CFLAGS) \
-	 -:LDFLAGS $(libgstvideoscale_la_LDFLAGS) \
-	           $(libgstvideoscale_la_LIBADD) \
-	           -ldl \
-	 -:PASSTHROUGH LOCAL_ARM_MODE:=arm \
-		       LOCAL_MODULE_PATH:='$$(TARGET_OUT)/lib/gstreamer-0.10' \
-	> $@
 
 # 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/videoscale/gstvideoscale.c b/gst/videoscale/gstvideoscale.c
index 97d5648..871717b 100644
--- a/gst/videoscale/gstvideoscale.c
+++ b/gst/videoscale/gstvideoscale.c
@@ -34,15 +34,14 @@
  * <refsect2>
  * <title>Example pipelines</title>
  * |[
- * gst-launch -v filesrc location=videotestsrc.ogg ! oggdemux ! theoradec ! videoconvert ! videoscale ! ximagesink
- * ]| Decode an Ogg/Theora and display the video using ximagesink. Since
- * ximagesink cannot perform scaling, the video scaling will be performed by
- * videoscale when you resize the video window.
+ * gst-launch-1.0 -v filesrc location=videotestsrc.ogg ! oggdemux ! theoradec ! videoconvert ! videoscale ! autovideosink
+ * ]| Decode an Ogg/Theora and display the video. If the video sink chosen
+ * cannot perform scaling, the video scaling will be performed by videoscale
+ * when you resize the video window.
  * To create the test Ogg/Theora file refer to the documentation of theoraenc.
  * |[
- * gst-launch -v filesrc location=videotestsrc.ogg ! oggdemux ! theoradec ! videoscale ! video/x-raw, width=50 ! xvimagesink
- * ]| Decode an Ogg/Theora and display the video using xvimagesink with a width
- * of 50.
+ * gst-launch-1.0 -v filesrc location=videotestsrc.ogg ! oggdemux ! theoradec ! videoconvert ! videoscale ! video/x-raw,width=100 ! autovideosink
+ * ]| Decode an Ogg/Theora and display the video with a width of 100.
  * </refsect2>
  */
 
@@ -78,14 +77,10 @@
 #include <gst/video/gstvideopool.h>
 
 #include "gstvideoscale.h"
-#include "gstvideoscaleorc.h"
-#include "vs_image.h"
-#include "vs_4tap.h"
-#include "vs_fill_borders.h"
 
-/* debug variable definition */
-GST_DEBUG_CATEGORY (video_scale_debug);
-GST_DEBUG_CATEGORY_STATIC (GST_CAT_PERFORMANCE);
+#define GST_CAT_DEFAULT video_scale_debug
+GST_DEBUG_CATEGORY_STATIC (video_scale_debug);
+GST_DEBUG_CATEGORY_EXTERN (GST_CAT_PERFORMANCE);
 
 #define DEFAULT_PROP_METHOD       GST_VIDEO_SCALE_BILINEAR
 #define DEFAULT_PROP_ADD_BORDERS  TRUE
@@ -94,6 +89,7 @@
 #define DEFAULT_PROP_DITHER       FALSE
 #define DEFAULT_PROP_SUBMETHOD    1
 #define DEFAULT_PROP_ENVELOPE     2.0
+#define DEFAULT_PROP_GAMMA_DECODE FALSE
 
 enum
 {
@@ -104,7 +100,8 @@
   PROP_SHARPEN,
   PROP_DITHER,
   PROP_SUBMETHOD,
-  PROP_ENVELOPE
+  PROP_ENVELOPE,
+  PROP_GAMMA_DECODE,
 };
 
 #undef GST_VIDEO_SIZE_RANGE
@@ -112,7 +109,6 @@
 
 /* FIXME: add v210 support
  * FIXME: add v216 support
- * FIXME: add NV21 support
  * FIXME: add UYVP support
  * FIXME: add A420 support
  * FIXME: add YUV9 support
@@ -121,12 +117,7 @@
  * FIXME: add r210 support
  */
 
-/* FIXME: if we can do NV12, NV21 shouldn't be so hard */
-#define GST_VIDEO_FORMATS "{ I420, YV12, YUY2, UYVY, AYUV, RGBx, " \
-    "BGRx, xRGB, xBGR, RGBA, BGRA, ARGB, ABGR, RGB, " \
-    "BGR, Y41B, Y42B, YVYU, Y444, GRAY8, GRAY16_BE, GRAY16_LE, " \
-    "v308, RGB16, RGB15, ARGB64, AYUV64, NV12 } "
-
+#define GST_VIDEO_FORMATS GST_VIDEO_FORMATS_ALL
 
 static GstStaticCaps gst_video_scale_format_caps =
     GST_STATIC_CAPS (GST_VIDEO_CAPS_MAKE (GST_VIDEO_FORMATS) ";"
@@ -140,9 +131,15 @@
 
   static const GEnumValue video_scale_methods[] = {
     {GST_VIDEO_SCALE_NEAREST, "Nearest Neighbour", "nearest-neighbour"},
-    {GST_VIDEO_SCALE_BILINEAR, "Bilinear", "bilinear"},
-    {GST_VIDEO_SCALE_4TAP, "4-tap", "4-tap"},
-    {GST_VIDEO_SCALE_LANCZOS, "Lanczos (experimental/unstable)", "lanczos"},
+    {GST_VIDEO_SCALE_BILINEAR, "Bilinear (2-tap)", "bilinear"},
+    {GST_VIDEO_SCALE_4TAP, "4-tap Sinc", "4-tap"},
+    {GST_VIDEO_SCALE_LANCZOS, "Lanczos", "lanczos"},
+    {GST_VIDEO_SCALE_BILINEAR2, "Bilinear (multi-tap)", "bilinear2"},
+    {GST_VIDEO_SCALE_SINC, "Sinc (multi-tap)", "sinc"},
+    {GST_VIDEO_SCALE_HERMITE, "Hermite (multi-tap)", "hermite"},
+    {GST_VIDEO_SCALE_SPLINE, "Spline (multi-tap)", "spline"},
+    {GST_VIDEO_SCALE_CATROM, "Catmull-Rom (multi-tap)", "catrom"},
+    {GST_VIDEO_SCALE_MITCHELL, "Mitchell (multi-tap)", "mitchell"},
     {0, NULL, NULL},
   };
 
@@ -202,9 +199,6 @@
 static void gst_video_scale_get_property (GObject * object, guint prop_id,
     GValue * value, GParamSpec * pspec);
 
-static GstFlowReturn do_scale (GstVideoFilter * filter, VSImage dest[4],
-    VSImage src[4]);
-
 #define gst_video_scale_parent_class parent_class
 G_DEFINE_TYPE (GstVideoScale, gst_video_scale, GST_TYPE_VIDEO_FILTER);
 
@@ -261,9 +255,15 @@
           "Size of filter envelope", 1.0, 5.0, DEFAULT_PROP_ENVELOPE,
           G_PARAM_CONSTRUCT | G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
 
+  g_object_class_install_property (gobject_class, PROP_GAMMA_DECODE,
+      g_param_spec_boolean ("gamma-decode", "Gamma Decode",
+          "Decode gamma before scaling", DEFAULT_PROP_GAMMA_DECODE,
+          G_PARAM_CONSTRUCT | G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+
+
   gst_element_class_set_static_metadata (element_class,
       "Video scaler", "Filter/Converter/Video/Scaler",
-      "Resizes video", "Wim Taymans <wim.taymans@chello.be>");
+      "Resizes video", "Wim Taymans <wim.taymans@gmail.com>");
 
   gst_element_class_add_pad_template (element_class,
       gst_video_scale_sink_template_factory ());
@@ -283,7 +283,6 @@
 static void
 gst_video_scale_init (GstVideoScale * videoscale)
 {
-  videoscale->tmp_buf = NULL;
   videoscale->method = DEFAULT_PROP_METHOD;
   videoscale->add_borders = DEFAULT_PROP_ADD_BORDERS;
   videoscale->submethod = DEFAULT_PROP_SUBMETHOD;
@@ -291,13 +290,14 @@
   videoscale->sharpen = DEFAULT_PROP_SHARPEN;
   videoscale->dither = DEFAULT_PROP_DITHER;
   videoscale->envelope = DEFAULT_PROP_ENVELOPE;
+  videoscale->gamma_decode = DEFAULT_PROP_GAMMA_DECODE;
 }
 
 static void
 gst_video_scale_finalize (GstVideoScale * videoscale)
 {
-  if (videoscale->tmp_buf)
-    g_free (videoscale->tmp_buf);
+  if (videoscale->convert)
+    gst_video_converter_free (videoscale->convert);
 
   G_OBJECT_CLASS (parent_class)->finalize (G_OBJECT (videoscale));
 }
@@ -345,6 +345,11 @@
       vscale->envelope = g_value_get_double (value);
       GST_OBJECT_UNLOCK (vscale);
       break;
+    case PROP_GAMMA_DECODE:
+      GST_OBJECT_LOCK (vscale);
+      vscale->gamma_decode = g_value_get_boolean (value);
+      GST_OBJECT_UNLOCK (vscale);
+      break;
     default:
       G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
       break;
@@ -393,6 +398,11 @@
       g_value_set_double (value, vscale->envelope);
       GST_OBJECT_UNLOCK (vscale);
       break;
+    case PROP_GAMMA_DECODE:
+      GST_OBJECT_LOCK (vscale);
+      g_value_set_boolean (value, vscale->gamma_decode);
+      GST_OBJECT_UNLOCK (vscale);
+      break;
     default:
       G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
       break;
@@ -400,46 +410,10 @@
 }
 
 static GstCaps *
-get_formats_filter (GstVideoScaleMethod method)
-{
-  switch (method) {
-    case GST_VIDEO_SCALE_NEAREST:
-    case GST_VIDEO_SCALE_BILINEAR:
-      return NULL;
-    case GST_VIDEO_SCALE_4TAP:
-    {
-      static GstStaticCaps fourtap_filter =
-          GST_STATIC_CAPS ("video/x-raw(ANY),"
-          "format = (string) { RGBx, xRGB, BGRx, xBGR, RGBA, "
-          "ARGB, BGRA, ABGR, AYUV, ARGB64, AYUV64, "
-          "RGB, BGR, v308, YUY2, YVYU, UYVY, "
-          "GRAY8, GRAY16_LE, GRAY16_BE, I420, YV12, "
-          "Y444, Y42B, Y41B, RGB16, RGB15 }");
-      return gst_static_caps_get (&fourtap_filter);
-    }
-    case GST_VIDEO_SCALE_LANCZOS:
-    {
-      static GstStaticCaps lanczos_filter =
-          GST_STATIC_CAPS ("video/x-raw(ANY),"
-          "format = (string) { RGBx, xRGB, BGRx, xBGR, RGBA, "
-          "ARGB, BGRA, ABGR, AYUV, ARGB64, AYUV64, "
-          "I420, YV12, Y444, Y42B, Y41B }");
-      return gst_static_caps_get (&lanczos_filter);
-    }
-    default:
-      g_assert_not_reached ();
-      break;
-  }
-  return NULL;
-}
-
-static GstCaps *
 gst_video_scale_transform_caps (GstBaseTransform * trans,
     GstPadDirection direction, GstCaps * caps, GstCaps * filter)
 {
-  GstVideoScale *videoscale = GST_VIDEO_SCALE (trans);
-  GstVideoScaleMethod method;
-  GstCaps *ret, *mfilter;
+  GstCaps *ret;
   GstStructure *structure;
   GstCapsFeatures *features;
   gint i, n;
@@ -448,20 +422,6 @@
       "Transforming caps %" GST_PTR_FORMAT " in direction %s", caps,
       (direction == GST_PAD_SINK) ? "sink" : "src");
 
-  GST_OBJECT_LOCK (videoscale);
-  method = videoscale->method;
-  GST_OBJECT_UNLOCK (videoscale);
-
-  /* filter the supported formats */
-  /* FIXME: Ideally we would still allow passthrough for the color formats
-   * that are unsupported by the selected method */
-  if ((mfilter = get_formats_filter (method))) {
-    caps = gst_caps_intersect_full (caps, mfilter, GST_CAPS_INTERSECT_FIRST);
-    gst_caps_unref (mfilter);
-  } else {
-    gst_caps_ref (caps);
-  }
-
   ret = gst_caps_new_empty ();
   n = gst_caps_get_size (caps);
   for (i = 0; i < n; i++) {
@@ -489,7 +449,6 @@
             GST_TYPE_FRACTION_RANGE, 1, G_MAXINT, G_MAXINT, 1, NULL);
       }
     }
-
     gst_caps_append_structure_full (ret, structure,
         gst_caps_features_copy (features));
   }
@@ -503,7 +462,6 @@
     ret = intersection;
   }
 
-  gst_caps_unref (caps);
   GST_DEBUG_OBJECT (trans, "returning caps: %" GST_PTR_FORMAT, ret);
 
   return ret;
@@ -554,16 +512,111 @@
     }
   }
 
-  if (videoscale->tmp_buf)
-    g_free (videoscale->tmp_buf);
-  videoscale->tmp_buf = g_malloc (out_info->width * sizeof (guint64) * 4);
-
   if (in_info->width == out_info->width && in_info->height == out_info->height
       && videoscale->borders_w == 0 && videoscale->borders_h == 0) {
     gst_base_transform_set_passthrough (GST_BASE_TRANSFORM (filter), TRUE);
   } else {
+    GstStructure *options;
     GST_CAT_DEBUG_OBJECT (GST_CAT_PERFORMANCE, filter, "setup videoscaling");
     gst_base_transform_set_passthrough (GST_BASE_TRANSFORM (filter), FALSE);
+
+    options = gst_structure_new_empty ("videoscale");
+
+    switch (videoscale->method) {
+      case GST_VIDEO_SCALE_NEAREST:
+        gst_structure_set (options,
+            GST_VIDEO_CONVERTER_OPT_RESAMPLER_METHOD,
+            GST_TYPE_VIDEO_RESAMPLER_METHOD, GST_VIDEO_RESAMPLER_METHOD_NEAREST,
+            NULL);
+        break;
+      case GST_VIDEO_SCALE_BILINEAR:
+        gst_structure_set (options,
+            GST_VIDEO_CONVERTER_OPT_RESAMPLER_METHOD,
+            GST_TYPE_VIDEO_RESAMPLER_METHOD, GST_VIDEO_RESAMPLER_METHOD_LINEAR,
+            GST_VIDEO_RESAMPLER_OPT_MAX_TAPS, G_TYPE_INT, 2, NULL);
+        break;
+      case GST_VIDEO_SCALE_4TAP:
+        gst_structure_set (options,
+            GST_VIDEO_CONVERTER_OPT_RESAMPLER_METHOD,
+            GST_TYPE_VIDEO_RESAMPLER_METHOD, GST_VIDEO_RESAMPLER_METHOD_SINC,
+            GST_VIDEO_RESAMPLER_OPT_MAX_TAPS, G_TYPE_INT, 4, NULL);
+        break;
+      case GST_VIDEO_SCALE_LANCZOS:
+        gst_structure_set (options,
+            GST_VIDEO_CONVERTER_OPT_RESAMPLER_METHOD,
+            GST_TYPE_VIDEO_RESAMPLER_METHOD, GST_VIDEO_RESAMPLER_METHOD_LANCZOS,
+            NULL);
+        break;
+      case GST_VIDEO_SCALE_BILINEAR2:
+        gst_structure_set (options,
+            GST_VIDEO_CONVERTER_OPT_RESAMPLER_METHOD,
+            GST_TYPE_VIDEO_RESAMPLER_METHOD, GST_VIDEO_RESAMPLER_METHOD_LINEAR,
+            NULL);
+        break;
+      case GST_VIDEO_SCALE_SINC:
+        gst_structure_set (options,
+            GST_VIDEO_CONVERTER_OPT_RESAMPLER_METHOD,
+            GST_TYPE_VIDEO_RESAMPLER_METHOD, GST_VIDEO_RESAMPLER_METHOD_SINC,
+            NULL);
+        break;
+      case GST_VIDEO_SCALE_HERMITE:
+        gst_structure_set (options,
+            GST_VIDEO_CONVERTER_OPT_RESAMPLER_METHOD,
+            GST_TYPE_VIDEO_RESAMPLER_METHOD, GST_VIDEO_RESAMPLER_METHOD_CUBIC,
+            GST_VIDEO_RESAMPLER_OPT_CUBIC_B, G_TYPE_DOUBLE, (gdouble) 0.0,
+            GST_VIDEO_RESAMPLER_OPT_CUBIC_C, G_TYPE_DOUBLE, (gdouble) 0.0,
+            NULL);
+        break;
+      case GST_VIDEO_SCALE_SPLINE:
+        gst_structure_set (options,
+            GST_VIDEO_CONVERTER_OPT_RESAMPLER_METHOD,
+            GST_TYPE_VIDEO_RESAMPLER_METHOD, GST_VIDEO_RESAMPLER_METHOD_CUBIC,
+            GST_VIDEO_RESAMPLER_OPT_CUBIC_B, G_TYPE_DOUBLE, (gdouble) 1.0,
+            GST_VIDEO_RESAMPLER_OPT_CUBIC_C, G_TYPE_DOUBLE, (gdouble) 0.0,
+            NULL);
+        break;
+      case GST_VIDEO_SCALE_CATROM:
+        gst_structure_set (options,
+            GST_VIDEO_CONVERTER_OPT_RESAMPLER_METHOD,
+            GST_TYPE_VIDEO_RESAMPLER_METHOD, GST_VIDEO_RESAMPLER_METHOD_CUBIC,
+            GST_VIDEO_RESAMPLER_OPT_CUBIC_B, G_TYPE_DOUBLE, (gdouble) 0.0,
+            GST_VIDEO_RESAMPLER_OPT_CUBIC_C, G_TYPE_DOUBLE, (gdouble) 0.5,
+            NULL);
+        break;
+      case GST_VIDEO_SCALE_MITCHELL:
+        gst_structure_set (options,
+            GST_VIDEO_CONVERTER_OPT_RESAMPLER_METHOD,
+            GST_TYPE_VIDEO_RESAMPLER_METHOD, GST_VIDEO_RESAMPLER_METHOD_CUBIC,
+            GST_VIDEO_RESAMPLER_OPT_CUBIC_B, G_TYPE_DOUBLE, (gdouble) 1.0 / 3.0,
+            GST_VIDEO_RESAMPLER_OPT_CUBIC_C, G_TYPE_DOUBLE, (gdouble) 1.0 / 3.0,
+            NULL);
+        break;
+    }
+    gst_structure_set (options,
+        GST_VIDEO_RESAMPLER_OPT_ENVELOPE, G_TYPE_DOUBLE, videoscale->envelope,
+        GST_VIDEO_RESAMPLER_OPT_SHARPNESS, G_TYPE_DOUBLE, videoscale->sharpness,
+        GST_VIDEO_RESAMPLER_OPT_SHARPEN, G_TYPE_DOUBLE, videoscale->sharpen,
+        GST_VIDEO_CONVERTER_OPT_DEST_X, G_TYPE_INT, videoscale->borders_w / 2,
+        GST_VIDEO_CONVERTER_OPT_DEST_Y, G_TYPE_INT, videoscale->borders_h / 2,
+        GST_VIDEO_CONVERTER_OPT_DEST_WIDTH, G_TYPE_INT,
+        out_info->width - videoscale->borders_w,
+        GST_VIDEO_CONVERTER_OPT_DEST_HEIGHT, G_TYPE_INT,
+        out_info->height - videoscale->borders_h,
+        GST_VIDEO_CONVERTER_OPT_MATRIX_MODE, GST_TYPE_VIDEO_MATRIX_MODE,
+        GST_VIDEO_MATRIX_MODE_NONE, GST_VIDEO_CONVERTER_OPT_DITHER_METHOD,
+        GST_TYPE_VIDEO_DITHER_METHOD, GST_VIDEO_DITHER_NONE,
+        GST_VIDEO_CONVERTER_OPT_CHROMA_MODE, GST_TYPE_VIDEO_CHROMA_MODE,
+        GST_VIDEO_CHROMA_MODE_NONE, NULL);
+
+    if (videoscale->gamma_decode) {
+      gst_structure_set (options,
+          GST_VIDEO_CONVERTER_OPT_GAMMA_MODE, GST_TYPE_VIDEO_GAMMA_MODE,
+          GST_VIDEO_GAMMA_MODE_REMAP, NULL);
+    }
+
+    if (videoscale->convert)
+      gst_video_converter_free (videoscale->convert);
+    videoscale->convert = gst_video_converter_new (in_info, out_info, options);
   }
 
   GST_DEBUG_OBJECT (videoscale, "from=%dx%d (par=%d/%d dar=%d/%d), size %"
@@ -928,6 +981,7 @@
               &to_par_n, &to_par_d)) {
         GST_ELEMENT_ERROR (base, CORE, NEGOTIATION, (NULL),
             ("Error calculating the output scaled size - integer overflow"));
+        gst_structure_free (tmp);
         goto done;
       }
 
@@ -1014,440 +1068,22 @@
   return othercaps;
 }
 
-static void
-gst_video_scale_setup_vs_image (VSImage * image, GstVideoFrame * frame,
-    gint component, gint b_w, gint b_h, gboolean interlaced, gint field)
-{
-  GstVideoFormat format;
-  gint width, height;
-
-  format = GST_VIDEO_FRAME_FORMAT (frame);
-  width = GST_VIDEO_FRAME_WIDTH (frame);
-  height = GST_VIDEO_FRAME_HEIGHT (frame);
-
-  image->real_width = GST_VIDEO_FRAME_COMP_WIDTH (frame, component);
-  image->real_height = GST_VIDEO_FRAME_COMP_HEIGHT (frame, component);
-  image->width = GST_VIDEO_FORMAT_INFO_SCALE_WIDTH (frame->info.finfo,
-      component, MAX (1, width - b_w));
-  image->height = GST_VIDEO_FORMAT_INFO_SCALE_HEIGHT (frame->info.finfo,
-      component, MAX (1, height - b_h));
-
-  if (interlaced) {
-    image->real_height /= 2;
-    image->height /= 2;
-  }
-
-  image->border_top = (image->real_height - image->height) / 2;
-  image->border_bottom = image->real_height - image->height - image->border_top;
-
-  if (format == GST_VIDEO_FORMAT_YUY2 || format == GST_VIDEO_FORMAT_YVYU
-      || format == GST_VIDEO_FORMAT_UYVY) {
-    g_assert (component == 0);
-
-    image->border_left = (image->real_width - image->width) / 2;
-
-    if (image->border_left % 2 == 1)
-      image->border_left--;
-    image->border_right = image->real_width - image->width - image->border_left;
-  } else {
-    image->border_left = (image->real_width - image->width) / 2;
-    image->border_right = image->real_width - image->width - image->border_left;
-  }
-
-  image->real_pixels = GST_VIDEO_FRAME_PLANE_DATA (frame, component);
-  image->stride = GST_VIDEO_FRAME_PLANE_STRIDE (frame, component);
-
-  if (interlaced) {
-    if (field == 1)
-      image->real_pixels += image->stride;
-    image->stride *= 2;
-  }
-
-  image->pixels =
-      image->real_pixels + image->border_top * image->stride +
-      image->border_left * GST_VIDEO_FRAME_COMP_PSTRIDE (frame, component);
-
-}
-
-static const guint8 *
-_get_black_for_format (GstVideoFormat format)
-{
-  static const guint8 black[][4] = {
-    {255, 0, 0, 0},             /*  0 = ARGB, ABGR, xRGB, xBGR */
-    {0, 0, 0, 255},             /*  1 = RGBA, BGRA, RGBx, BGRx */
-    {255, 16, 128, 128},        /*  2 = AYUV */
-    {0, 0, 0, 0},               /*  3 = RGB and BGR */
-    {16, 128, 128, 0},          /*  4 = v301 */
-    {16, 128, 16, 128},         /*  5 = YUY2, YUYV */
-    {128, 16, 128, 16},         /*  6 = UYVY */
-    {16, 0, 0, 0},              /*  7 = Y */
-    {0, 0, 0, 0}                /*  8 = RGB565, RGB666 */
-  };
-
-  switch (format) {
-    case GST_VIDEO_FORMAT_ARGB:
-    case GST_VIDEO_FORMAT_ABGR:
-    case GST_VIDEO_FORMAT_xRGB:
-    case GST_VIDEO_FORMAT_xBGR:
-    case GST_VIDEO_FORMAT_ARGB64:
-      return black[0];
-    case GST_VIDEO_FORMAT_RGBA:
-    case GST_VIDEO_FORMAT_BGRA:
-    case GST_VIDEO_FORMAT_RGBx:
-    case GST_VIDEO_FORMAT_BGRx:
-      return black[1];
-    case GST_VIDEO_FORMAT_AYUV:
-    case GST_VIDEO_FORMAT_AYUV64:
-      return black[2];
-    case GST_VIDEO_FORMAT_RGB:
-    case GST_VIDEO_FORMAT_BGR:
-      return black[3];
-    case GST_VIDEO_FORMAT_v308:
-      return black[4];
-    case GST_VIDEO_FORMAT_YUY2:
-    case GST_VIDEO_FORMAT_YVYU:
-      return black[5];
-    case GST_VIDEO_FORMAT_UYVY:
-      return black[6];
-    case GST_VIDEO_FORMAT_GRAY8:
-      return black[7];
-    case GST_VIDEO_FORMAT_GRAY16_LE:
-    case GST_VIDEO_FORMAT_GRAY16_BE:
-      return NULL;              /* Handled by the caller */
-    case GST_VIDEO_FORMAT_I420:
-    case GST_VIDEO_FORMAT_YV12:
-    case GST_VIDEO_FORMAT_Y444:
-    case GST_VIDEO_FORMAT_Y42B:
-    case GST_VIDEO_FORMAT_Y41B:
-    case GST_VIDEO_FORMAT_NV12:
-      return black[4];          /* Y, U, V, 0 */
-    case GST_VIDEO_FORMAT_RGB16:
-    case GST_VIDEO_FORMAT_RGB15:
-      return black[8];
-    default:
-      return NULL;
-  }
-}
+#define GET_LINE(frame, line) \
+    (gpointer)(((guint8*)(GST_VIDEO_FRAME_PLANE_DATA (frame, 0))) + \
+     GST_VIDEO_FRAME_PLANE_STRIDE (frame, 0) * (line))
 
 static GstFlowReturn
 gst_video_scale_transform_frame (GstVideoFilter * filter,
     GstVideoFrame * in_frame, GstVideoFrame * out_frame)
 {
-  GstVideoScale *videoscale = GST_VIDEO_SCALE (filter);
+  GstVideoScale *videoscale = GST_VIDEO_SCALE_CAST (filter);
   GstFlowReturn ret = GST_FLOW_OK;
-  VSImage dest[4] = { {NULL,}, };
-  VSImage src[4] = { {NULL,}, };
-  gint i;
-  gboolean interlaced;
 
-  interlaced = GST_VIDEO_FRAME_IS_INTERLACED (in_frame);
+  GST_CAT_DEBUG_OBJECT (GST_CAT_PERFORMANCE, filter, "doing video scaling");
 
-  for (i = 0; i < GST_VIDEO_FRAME_N_PLANES (in_frame); i++) {
-    gst_video_scale_setup_vs_image (&src[i], in_frame, i, 0, 0, interlaced, 0);
-    gst_video_scale_setup_vs_image (&dest[i], out_frame, i,
-        videoscale->borders_w, videoscale->borders_h, interlaced, 0);
-  }
-  ret = do_scale (filter, dest, src);
-
-  if (interlaced) {
-    for (i = 0; i < GST_VIDEO_FRAME_N_PLANES (in_frame); i++) {
-      gst_video_scale_setup_vs_image (&src[i], in_frame, i, 0, 0, interlaced,
-          1);
-      gst_video_scale_setup_vs_image (&dest[i], out_frame, i,
-          videoscale->borders_w, videoscale->borders_h, interlaced, 1);
-    }
-    ret = do_scale (filter, dest, src);
-  }
-  return ret;
-}
-
-static GstFlowReturn
-do_scale (GstVideoFilter * filter, VSImage dest[4], VSImage src[4])
-{
-  GstVideoScale *videoscale = GST_VIDEO_SCALE (filter);
-  GstFlowReturn ret = GST_FLOW_OK;
-  gint method;
-  const guint8 *black;
-  GstVideoFormat format;
-  gboolean add_borders;
-
-  GST_OBJECT_LOCK (videoscale);
-  method = videoscale->method;
-  add_borders = videoscale->add_borders;
-  GST_OBJECT_UNLOCK (videoscale);
-
-  format = GST_VIDEO_INFO_FORMAT (&filter->in_info);
-  black = _get_black_for_format (format);
-
-  if (filter->in_info.width == 1) {
-    method = GST_VIDEO_SCALE_NEAREST;
-  }
-  if (method == GST_VIDEO_SCALE_4TAP &&
-      (filter->in_info.width < 4 || filter->in_info.height < 4)) {
-    method = GST_VIDEO_SCALE_BILINEAR;
-  }
-
-  GST_CAT_DEBUG_OBJECT (GST_CAT_PERFORMANCE, filter,
-      "doing videoscale format %s", GST_VIDEO_INFO_NAME (&filter->in_info));
-
-  switch (format) {
-    case GST_VIDEO_FORMAT_RGBx:
-    case GST_VIDEO_FORMAT_xRGB:
-    case GST_VIDEO_FORMAT_BGRx:
-    case GST_VIDEO_FORMAT_xBGR:
-    case GST_VIDEO_FORMAT_RGBA:
-    case GST_VIDEO_FORMAT_ARGB:
-    case GST_VIDEO_FORMAT_BGRA:
-    case GST_VIDEO_FORMAT_ABGR:
-    case GST_VIDEO_FORMAT_AYUV:
-      if (add_borders)
-        vs_fill_borders_RGBA (&dest[0], black);
-      switch (method) {
-        case GST_VIDEO_SCALE_NEAREST:
-          vs_image_scale_nearest_RGBA (&dest[0], &src[0], videoscale->tmp_buf);
-          break;
-        case GST_VIDEO_SCALE_BILINEAR:
-          vs_image_scale_linear_RGBA (&dest[0], &src[0], videoscale->tmp_buf);
-          break;
-        case GST_VIDEO_SCALE_4TAP:
-          vs_image_scale_4tap_RGBA (&dest[0], &src[0], videoscale->tmp_buf);
-          break;
-        case GST_VIDEO_SCALE_LANCZOS:
-          vs_image_scale_lanczos_AYUV (&dest[0], &src[0], videoscale->tmp_buf,
-              videoscale->sharpness, videoscale->dither, videoscale->submethod,
-              videoscale->envelope, videoscale->sharpen);
-          break;
-        default:
-          goto unknown_mode;
-      }
-      break;
-    case GST_VIDEO_FORMAT_ARGB64:
-    case GST_VIDEO_FORMAT_AYUV64:
-      if (add_borders)
-        vs_fill_borders_AYUV64 (&dest[0], black);
-      switch (method) {
-        case GST_VIDEO_SCALE_NEAREST:
-          vs_image_scale_nearest_AYUV64 (&dest[0], &src[0],
-              videoscale->tmp_buf);
-          break;
-        case GST_VIDEO_SCALE_BILINEAR:
-          vs_image_scale_linear_AYUV64 (&dest[0], &src[0], videoscale->tmp_buf);
-          break;
-        case GST_VIDEO_SCALE_4TAP:
-          vs_image_scale_4tap_AYUV64 (&dest[0], &src[0], videoscale->tmp_buf);
-          break;
-        case GST_VIDEO_SCALE_LANCZOS:
-          vs_image_scale_lanczos_AYUV64 (&dest[0], &src[0], videoscale->tmp_buf,
-              videoscale->sharpness, videoscale->dither, videoscale->submethod,
-              videoscale->envelope, videoscale->sharpen);
-          break;
-        default:
-          goto unknown_mode;
-      }
-      break;
-    case GST_VIDEO_FORMAT_RGB:
-    case GST_VIDEO_FORMAT_BGR:
-    case GST_VIDEO_FORMAT_v308:
-      if (add_borders)
-        vs_fill_borders_RGB (&dest[0], black);
-      switch (method) {
-        case GST_VIDEO_SCALE_NEAREST:
-          vs_image_scale_nearest_RGB (&dest[0], &src[0], videoscale->tmp_buf);
-          break;
-        case GST_VIDEO_SCALE_BILINEAR:
-          vs_image_scale_linear_RGB (&dest[0], &src[0], videoscale->tmp_buf);
-          break;
-        case GST_VIDEO_SCALE_4TAP:
-          vs_image_scale_4tap_RGB (&dest[0], &src[0], videoscale->tmp_buf);
-          break;
-        default:
-          goto unknown_mode;
-      }
-      break;
-    case GST_VIDEO_FORMAT_YUY2:
-    case GST_VIDEO_FORMAT_YVYU:
-      if (add_borders)
-        vs_fill_borders_YUYV (&dest[0], black);
-      switch (method) {
-        case GST_VIDEO_SCALE_NEAREST:
-          vs_image_scale_nearest_YUYV (&dest[0], &src[0], videoscale->tmp_buf);
-          break;
-        case GST_VIDEO_SCALE_BILINEAR:
-          vs_image_scale_linear_YUYV (&dest[0], &src[0], videoscale->tmp_buf);
-          break;
-        case GST_VIDEO_SCALE_4TAP:
-          vs_image_scale_4tap_YUYV (&dest[0], &src[0], videoscale->tmp_buf);
-          break;
-        default:
-          goto unknown_mode;
-      }
-      break;
-    case GST_VIDEO_FORMAT_UYVY:
-      if (add_borders)
-        vs_fill_borders_UYVY (&dest[0], black);
-      switch (method) {
-        case GST_VIDEO_SCALE_NEAREST:
-          vs_image_scale_nearest_UYVY (&dest[0], &src[0], videoscale->tmp_buf);
-          break;
-        case GST_VIDEO_SCALE_BILINEAR:
-          vs_image_scale_linear_UYVY (&dest[0], &src[0], videoscale->tmp_buf);
-          break;
-        case GST_VIDEO_SCALE_4TAP:
-          vs_image_scale_4tap_UYVY (&dest[0], &src[0], videoscale->tmp_buf);
-          break;
-        default:
-          goto unknown_mode;
-      }
-      break;
-    case GST_VIDEO_FORMAT_GRAY8:
-      if (add_borders)
-        vs_fill_borders_Y (&dest[0], black);
-      switch (method) {
-        case GST_VIDEO_SCALE_NEAREST:
-          vs_image_scale_nearest_Y (&dest[0], &src[0], videoscale->tmp_buf);
-          break;
-        case GST_VIDEO_SCALE_BILINEAR:
-          vs_image_scale_linear_Y (&dest[0], &src[0], videoscale->tmp_buf);
-          break;
-        case GST_VIDEO_SCALE_4TAP:
-          vs_image_scale_4tap_Y (&dest[0], &src[0], videoscale->tmp_buf);
-          break;
-        default:
-          goto unknown_mode;
-      }
-      break;
-    case GST_VIDEO_FORMAT_GRAY16_LE:
-    case GST_VIDEO_FORMAT_GRAY16_BE:
-      if (add_borders)
-        vs_fill_borders_Y16 (&dest[0], 0);
-      switch (method) {
-        case GST_VIDEO_SCALE_NEAREST:
-          vs_image_scale_nearest_Y16 (&dest[0], &src[0], videoscale->tmp_buf);
-          break;
-        case GST_VIDEO_SCALE_BILINEAR:
-          vs_image_scale_linear_Y16 (&dest[0], &src[0], videoscale->tmp_buf);
-          break;
-        case GST_VIDEO_SCALE_4TAP:
-          vs_image_scale_4tap_Y16 (&dest[0], &src[0], videoscale->tmp_buf);
-          break;
-        default:
-          goto unknown_mode;
-      }
-      break;
-    case GST_VIDEO_FORMAT_I420:
-    case GST_VIDEO_FORMAT_YV12:
-    case GST_VIDEO_FORMAT_Y444:
-    case GST_VIDEO_FORMAT_Y42B:
-    case GST_VIDEO_FORMAT_Y41B:
-      if (add_borders) {
-        vs_fill_borders_Y (&dest[0], black);
-        vs_fill_borders_Y (&dest[1], black + 1);
-        vs_fill_borders_Y (&dest[2], black + 2);
-      }
-      switch (method) {
-        case GST_VIDEO_SCALE_NEAREST:
-          vs_image_scale_nearest_Y (&dest[0], &src[0], videoscale->tmp_buf);
-          vs_image_scale_nearest_Y (&dest[1], &src[1], videoscale->tmp_buf);
-          vs_image_scale_nearest_Y (&dest[2], &src[2], videoscale->tmp_buf);
-          break;
-        case GST_VIDEO_SCALE_BILINEAR:
-          vs_image_scale_linear_Y (&dest[0], &src[0], videoscale->tmp_buf);
-          vs_image_scale_linear_Y (&dest[1], &src[1], videoscale->tmp_buf);
-          vs_image_scale_linear_Y (&dest[2], &src[2], videoscale->tmp_buf);
-          break;
-        case GST_VIDEO_SCALE_4TAP:
-          vs_image_scale_4tap_Y (&dest[0], &src[0], videoscale->tmp_buf);
-          vs_image_scale_4tap_Y (&dest[1], &src[1], videoscale->tmp_buf);
-          vs_image_scale_4tap_Y (&dest[2], &src[2], videoscale->tmp_buf);
-          break;
-        case GST_VIDEO_SCALE_LANCZOS:
-          vs_image_scale_lanczos_Y (&dest[0], &src[0], videoscale->tmp_buf,
-              videoscale->sharpness, videoscale->dither, videoscale->submethod,
-              videoscale->envelope, videoscale->sharpen);
-          vs_image_scale_lanczos_Y (&dest[1], &src[1], videoscale->tmp_buf,
-              videoscale->sharpness, videoscale->dither, videoscale->submethod,
-              videoscale->envelope, videoscale->sharpen);
-          vs_image_scale_lanczos_Y (&dest[2], &src[2], videoscale->tmp_buf,
-              videoscale->sharpness, videoscale->dither, videoscale->submethod,
-              videoscale->envelope, videoscale->sharpen);
-          break;
-        default:
-          goto unknown_mode;
-      }
-      break;
-    case GST_VIDEO_FORMAT_NV12:
-      if (add_borders) {
-        vs_fill_borders_Y (&dest[0], black);
-        vs_fill_borders_Y16 (&dest[1], (black[1] << 8) | black[2]);
-      }
-      switch (method) {
-        case GST_VIDEO_SCALE_NEAREST:
-          vs_image_scale_nearest_Y (&dest[0], &src[0], videoscale->tmp_buf);
-          vs_image_scale_nearest_NV12 (&dest[1], &src[1], videoscale->tmp_buf);
-          break;
-        case GST_VIDEO_SCALE_BILINEAR:
-          vs_image_scale_linear_Y (&dest[0], &src[0], videoscale->tmp_buf);
-          vs_image_scale_linear_NV12 (&dest[1], &src[1], videoscale->tmp_buf);
-          break;
-        default:
-          goto unknown_mode;
-      }
-      break;
-    case GST_VIDEO_FORMAT_RGB16:
-      if (add_borders)
-        vs_fill_borders_RGB565 (&dest[0], black);
-      switch (method) {
-        case GST_VIDEO_SCALE_NEAREST:
-          vs_image_scale_nearest_RGB565 (&dest[0], &src[0],
-              videoscale->tmp_buf);
-          break;
-        case GST_VIDEO_SCALE_BILINEAR:
-          vs_image_scale_linear_RGB565 (&dest[0], &src[0], videoscale->tmp_buf);
-          break;
-        case GST_VIDEO_SCALE_4TAP:
-          vs_image_scale_4tap_RGB565 (&dest[0], &src[0], videoscale->tmp_buf);
-          break;
-        default:
-          goto unknown_mode;
-      }
-      break;
-    case GST_VIDEO_FORMAT_RGB15:
-      if (add_borders)
-        vs_fill_borders_RGB555 (&dest[0], black);
-      switch (method) {
-        case GST_VIDEO_SCALE_NEAREST:
-          vs_image_scale_nearest_RGB555 (&dest[0], &src[0],
-              videoscale->tmp_buf);
-          break;
-        case GST_VIDEO_SCALE_BILINEAR:
-          vs_image_scale_linear_RGB555 (&dest[0], &src[0], videoscale->tmp_buf);
-          break;
-        case GST_VIDEO_SCALE_4TAP:
-          vs_image_scale_4tap_RGB555 (&dest[0], &src[0], videoscale->tmp_buf);
-          break;
-        default:
-          goto unknown_mode;
-      }
-      break;
-    default:
-      goto unsupported;
-  }
+  gst_video_converter_frame (videoscale->convert, in_frame, out_frame);
 
   return ret;
-
-  /* ERRORS */
-unsupported:
-  {
-    GST_ELEMENT_ERROR (videoscale, STREAM, NOT_IMPLEMENTED, (NULL),
-        ("Unsupported format %d for scaling method %d", format, method));
-    return GST_FLOW_ERROR;
-  }
-unknown_mode:
-  {
-    GST_ELEMENT_ERROR (videoscale, STREAM, NOT_IMPLEMENTED, (NULL),
-        ("Unknown scaling method %d", videoscale->method));
-    return GST_FLOW_ERROR;
-  }
 }
 
 static gboolean
@@ -1500,8 +1136,6 @@
       "videoscale element");
   GST_DEBUG_CATEGORY_GET (GST_CAT_PERFORMANCE, "GST_PERFORMANCE");
 
-  vs_4tap_init ();
-
   return TRUE;
 }
 
diff --git a/gst/videoscale/gstvideoscale.h b/gst/videoscale/gstvideoscale.h
index 37c056e..c16f816 100644
--- a/gst/videoscale/gstvideoscale.h
+++ b/gst/videoscale/gstvideoscale.h
@@ -24,13 +24,8 @@
 #include <gst/video/video.h>
 #include <gst/video/gstvideofilter.h>
 
-#include "vs_image.h"
-
 G_BEGIN_DECLS
 
-GST_DEBUG_CATEGORY_EXTERN (video_scale_debug);
-#define GST_CAT_DEFAULT video_scale_debug
-
 #define GST_TYPE_VIDEO_SCALE \
   (gst_video_scale_get_type())
 #define GST_VIDEO_SCALE(obj) \
@@ -47,9 +42,15 @@
 /**
  * GstVideoScaleMethod:
  * @GST_VIDEO_SCALE_NEAREST: use nearest neighbour scaling (fast and ugly)
- * @GST_VIDEO_SCALE_BILINEAR: use bilinear scaling (slower but prettier).
- * @GST_VIDEO_SCALE_4TAP: use a 4-tap filter for scaling (slow).
+ * @GST_VIDEO_SCALE_BILINEAR: use 2-tap bilinear scaling (slower but prettier).
+ * @GST_VIDEO_SCALE_4TAP: use a 4-tap sinc filter for scaling (slow).
  * @GST_VIDEO_SCALE_LANCZOS: use a multitap Lanczos filter for scaling (slow).
+ * @GST_VIDEO_SCALE_BILINEAR2: use a multitap bilinear filter
+ * @GST_VIDEO_SCALE_SINC: use a multitap sinc filter
+ * @GST_VIDEO_SCALE_HERMITE: use a multitap bicubic Hermite filter
+ * @GST_VIDEO_SCALE_SPLINE: use a multitap bicubic spline filter
+ * @GST_VIDEO_SCALE_CATROM: use a multitap bicubic Catmull-Rom filter
+ * @GST_VIDEO_SCALE_MITCHELL: use a multitap bicubic Mitchell filter
  *
  * The videoscale method to use.
  */
@@ -57,7 +58,14 @@
   GST_VIDEO_SCALE_NEAREST,
   GST_VIDEO_SCALE_BILINEAR,
   GST_VIDEO_SCALE_4TAP,
-  GST_VIDEO_SCALE_LANCZOS
+  GST_VIDEO_SCALE_LANCZOS,
+
+  GST_VIDEO_SCALE_BILINEAR2,
+  GST_VIDEO_SCALE_SINC,
+  GST_VIDEO_SCALE_HERMITE,
+  GST_VIDEO_SCALE_SPLINE,
+  GST_VIDEO_SCALE_CATROM,
+  GST_VIDEO_SCALE_MITCHELL
 } GstVideoScaleMethod;
 
 typedef struct _GstVideoScale GstVideoScale;
@@ -79,12 +87,12 @@
   gboolean dither;
   int submethod;
   double envelope;
+  gboolean gamma_decode;
+
+  GstVideoConverter *convert;
 
   gint borders_h;
   gint borders_w;
-
-  /*< private >*/
-  guint8 *tmp_buf;
 };
 
 struct _GstVideoScaleClass {
diff --git a/gst/videoscale/gstvideoscaleorc-dist.c b/gst/videoscale/gstvideoscaleorc-dist.c
deleted file mode 100644
index d7e4076..0000000
--- a/gst/videoscale/gstvideoscaleorc-dist.c
+++ /dev/null
@@ -1,2577 +0,0 @@
-
-/* autogenerated from gstvideoscaleorc.orc */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-#include <glib.h>
-
-#ifndef _ORC_INTEGER_TYPEDEFS_
-#define _ORC_INTEGER_TYPEDEFS_
-#if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
-#include <stdint.h>
-typedef int8_t orc_int8;
-typedef int16_t orc_int16;
-typedef int32_t orc_int32;
-typedef int64_t orc_int64;
-typedef uint8_t orc_uint8;
-typedef uint16_t orc_uint16;
-typedef uint32_t orc_uint32;
-typedef uint64_t orc_uint64;
-#define ORC_UINT64_C(x) UINT64_C(x)
-#elif defined(_MSC_VER)
-typedef signed __int8 orc_int8;
-typedef signed __int16 orc_int16;
-typedef signed __int32 orc_int32;
-typedef signed __int64 orc_int64;
-typedef unsigned __int8 orc_uint8;
-typedef unsigned __int16 orc_uint16;
-typedef unsigned __int32 orc_uint32;
-typedef unsigned __int64 orc_uint64;
-#define ORC_UINT64_C(x) (x##Ui64)
-#define inline __inline
-#else
-#include <limits.h>
-typedef signed char orc_int8;
-typedef short orc_int16;
-typedef int orc_int32;
-typedef unsigned char orc_uint8;
-typedef unsigned short orc_uint16;
-typedef unsigned int orc_uint32;
-#if INT_MAX == LONG_MAX
-typedef long long orc_int64;
-typedef unsigned long long orc_uint64;
-#define ORC_UINT64_C(x) (x##ULL)
-#else
-typedef long orc_int64;
-typedef unsigned long orc_uint64;
-#define ORC_UINT64_C(x) (x##UL)
-#endif
-#endif
-typedef union
-{
-  orc_int16 i;
-  orc_int8 x2[2];
-} orc_union16;
-typedef union
-{
-  orc_int32 i;
-  float f;
-  orc_int16 x2[2];
-  orc_int8 x4[4];
-} orc_union32;
-typedef union
-{
-  orc_int64 i;
-  double f;
-  orc_int32 x2[2];
-  float x2f[2];
-  orc_int16 x4[4];
-} orc_union64;
-#endif
-#ifndef ORC_RESTRICT
-#if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
-#define ORC_RESTRICT restrict
-#elif defined(__GNUC__) && __GNUC__ >= 4
-#define ORC_RESTRICT __restrict__
-#else
-#define ORC_RESTRICT
-#endif
-#endif
-
-#ifndef ORC_INTERNAL
-#if defined(__SUNPRO_C) && (__SUNPRO_C >= 0x590)
-#define ORC_INTERNAL __attribute__((visibility("hidden")))
-#elif defined(__SUNPRO_C) && (__SUNPRO_C >= 0x550)
-#define ORC_INTERNAL __hidden
-#elif defined (__GNUC__)
-#define ORC_INTERNAL __attribute__((visibility("hidden")))
-#else
-#define ORC_INTERNAL
-#endif
-#endif
-
-
-#ifndef DISABLE_ORC
-#include <orc/orc.h>
-#endif
-void video_scale_orc_merge_linear_u8 (orc_uint8 * ORC_RESTRICT d1,
-    const orc_uint8 * ORC_RESTRICT s1, const orc_uint8 * ORC_RESTRICT s2,
-    int p1, int n);
-void video_scale_orc_merge_linear_u16 (orc_uint16 * ORC_RESTRICT d1,
-    const orc_uint16 * ORC_RESTRICT s1, const orc_uint16 * ORC_RESTRICT s2,
-    int p1, int p2, int n);
-void video_scale_orc_splat_u16 (orc_uint16 * ORC_RESTRICT d1, int p1, int n);
-void video_scale_orc_splat_u32 (orc_uint32 * ORC_RESTRICT d1, int p1, int n);
-void video_scale_orc_splat_u64 (orc_uint64 * ORC_RESTRICT d1, orc_int64 p1,
-    int n);
-void video_scale_orc_downsample_u8 (guint8 * ORC_RESTRICT d1,
-    const guint8 * ORC_RESTRICT s1, int n);
-void video_scale_orc_downsample_u16 (guint16 * ORC_RESTRICT d1,
-    const guint16 * ORC_RESTRICT s1, int n);
-void video_scale_orc_downsample_u32 (guint8 * ORC_RESTRICT d1,
-    const guint8 * ORC_RESTRICT s1, int n);
-void video_scale_orc_downsample_yuyv (guint8 * ORC_RESTRICT d1,
-    const guint8 * ORC_RESTRICT s1, int n);
-void video_scale_orc_resample_nearest_u8 (guint8 * ORC_RESTRICT d1,
-    const guint8 * ORC_RESTRICT s1, int p1, int p2, int n);
-void video_scale_orc_resample_bilinear_u8 (guint8 * ORC_RESTRICT d1,
-    const guint8 * ORC_RESTRICT s1, int p1, int p2, int n);
-void video_scale_orc_resample_nearest_u32 (guint8 * ORC_RESTRICT d1,
-    const guint8 * ORC_RESTRICT s1, int p1, int p2, int n);
-void video_scale_orc_resample_bilinear_u32 (guint8 * ORC_RESTRICT d1,
-    const guint8 * ORC_RESTRICT s1, int p1, int p2, int n);
-void video_scale_orc_resample_merge_bilinear_u32 (guint8 * ORC_RESTRICT d1,
-    guint8 * ORC_RESTRICT d2, const guint8 * ORC_RESTRICT s1,
-    const guint8 * ORC_RESTRICT s2, int p1, int p2, int p3, int n);
-void video_scale_orc_merge_bicubic_u8 (guint8 * ORC_RESTRICT d1,
-    const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2,
-    const guint8 * ORC_RESTRICT s3, const guint8 * ORC_RESTRICT s4, int p1,
-    int p2, int p3, int p4, int n);
-
-
-/* begin Orc C target preamble */
-#define ORC_CLAMP(x,a,b) ((x)<(a) ? (a) : ((x)>(b) ? (b) : (x)))
-#define ORC_ABS(a) ((a)<0 ? -(a) : (a))
-#define ORC_MIN(a,b) ((a)<(b) ? (a) : (b))
-#define ORC_MAX(a,b) ((a)>(b) ? (a) : (b))
-#define ORC_SB_MAX 127
-#define ORC_SB_MIN (-1-ORC_SB_MAX)
-#define ORC_UB_MAX 255
-#define ORC_UB_MIN 0
-#define ORC_SW_MAX 32767
-#define ORC_SW_MIN (-1-ORC_SW_MAX)
-#define ORC_UW_MAX 65535
-#define ORC_UW_MIN 0
-#define ORC_SL_MAX 2147483647
-#define ORC_SL_MIN (-1-ORC_SL_MAX)
-#define ORC_UL_MAX 4294967295U
-#define ORC_UL_MIN 0
-#define ORC_CLAMP_SB(x) ORC_CLAMP(x,ORC_SB_MIN,ORC_SB_MAX)
-#define ORC_CLAMP_UB(x) ORC_CLAMP(x,ORC_UB_MIN,ORC_UB_MAX)
-#define ORC_CLAMP_SW(x) ORC_CLAMP(x,ORC_SW_MIN,ORC_SW_MAX)
-#define ORC_CLAMP_UW(x) ORC_CLAMP(x,ORC_UW_MIN,ORC_UW_MAX)
-#define ORC_CLAMP_SL(x) ORC_CLAMP(x,ORC_SL_MIN,ORC_SL_MAX)
-#define ORC_CLAMP_UL(x) ORC_CLAMP(x,ORC_UL_MIN,ORC_UL_MAX)
-#define ORC_SWAP_W(x) ((((x)&0xffU)<<8) | (((x)&0xff00U)>>8))
-#define ORC_SWAP_L(x) ((((x)&0xffU)<<24) | (((x)&0xff00U)<<8) | (((x)&0xff0000U)>>8) | (((x)&0xff000000U)>>24))
-#define ORC_SWAP_Q(x) ((((x)&ORC_UINT64_C(0xff))<<56) | (((x)&ORC_UINT64_C(0xff00))<<40) | (((x)&ORC_UINT64_C(0xff0000))<<24) | (((x)&ORC_UINT64_C(0xff000000))<<8) | (((x)&ORC_UINT64_C(0xff00000000))>>8) | (((x)&ORC_UINT64_C(0xff0000000000))>>24) | (((x)&ORC_UINT64_C(0xff000000000000))>>40) | (((x)&ORC_UINT64_C(0xff00000000000000))>>56))
-#define ORC_PTR_OFFSET(ptr,offset) ((void *)(((unsigned char *)(ptr)) + (offset)))
-#define ORC_DENORMAL(x) ((x) & ((((x)&0x7f800000) == 0) ? 0xff800000 : 0xffffffff))
-#define ORC_ISNAN(x) ((((x)&0x7f800000) == 0x7f800000) && (((x)&0x007fffff) != 0))
-#define ORC_DENORMAL_DOUBLE(x) ((x) & ((((x)&ORC_UINT64_C(0x7ff0000000000000)) == 0) ? ORC_UINT64_C(0xfff0000000000000) : ORC_UINT64_C(0xffffffffffffffff)))
-#define ORC_ISNAN_DOUBLE(x) ((((x)&ORC_UINT64_C(0x7ff0000000000000)) == ORC_UINT64_C(0x7ff0000000000000)) && (((x)&ORC_UINT64_C(0x000fffffffffffff)) != 0))
-#ifndef ORC_RESTRICT
-#if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
-#define ORC_RESTRICT restrict
-#elif defined(__GNUC__) && __GNUC__ >= 4
-#define ORC_RESTRICT __restrict__
-#else
-#define ORC_RESTRICT
-#endif
-#endif
-/* end Orc C target preamble */
-
-
-
-/* video_scale_orc_merge_linear_u8 */
-#ifdef DISABLE_ORC
-void
-video_scale_orc_merge_linear_u8 (orc_uint8 * ORC_RESTRICT d1,
-    const orc_uint8 * ORC_RESTRICT s1, const orc_uint8 * ORC_RESTRICT s2,
-    int p1, int n)
-{
-  int i;
-  orc_int8 *ORC_RESTRICT ptr0;
-  const orc_int8 *ORC_RESTRICT ptr4;
-  const orc_int8 *ORC_RESTRICT ptr5;
-  orc_int8 var36;
-  orc_int8 var37;
-  orc_union16 var38;
-#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
-  volatile orc_union16 var39;
-#else
-  orc_union16 var39;
-#endif
-  orc_int8 var40;
-  orc_int8 var41;
-  orc_union16 var42;
-  orc_union16 var43;
-  orc_union16 var44;
-  orc_union16 var45;
-  orc_union16 var46;
-  orc_int8 var47;
-
-  ptr0 = (orc_int8 *) d1;
-  ptr4 = (orc_int8 *) s1;
-  ptr5 = (orc_int8 *) s2;
-
-  /* 6: loadpw */
-  var38.i = p1;
-  /* 8: loadpw */
-  var39.i = (int) 0x00000080;   /* 128 or 6.32404e-322f */
-
-  for (i = 0; i < n; i++) {
-    /* 0: loadb */
-    var41 = ptr4[i];
-    /* 1: loadb */
-    var36 = ptr4[i];
-    /* 2: convubw */
-    var42.i = (orc_uint8) var36;
-    /* 3: loadb */
-    var37 = ptr5[i];
-    /* 4: convubw */
-    var43.i = (orc_uint8) var37;
-    /* 5: subw */
-    var44.i = var43.i - var42.i;
-    /* 7: mullw */
-    var45.i = (var44.i * var38.i) & 0xffff;
-    /* 9: addw */
-    var46.i = var45.i + var39.i;
-    /* 10: convhwb */
-    var47 = ((orc_uint16) var46.i) >> 8;
-    /* 11: addb */
-    var40 = var47 + var41;
-    /* 12: storeb */
-    ptr0[i] = var40;
-  }
-
-}
-
-#else
-static void
-_backup_video_scale_orc_merge_linear_u8 (OrcExecutor * ORC_RESTRICT ex)
-{
-  int i;
-  int n = ex->n;
-  orc_int8 *ORC_RESTRICT ptr0;
-  const orc_int8 *ORC_RESTRICT ptr4;
-  const orc_int8 *ORC_RESTRICT ptr5;
-  orc_int8 var36;
-  orc_int8 var37;
-  orc_union16 var38;
-#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
-  volatile orc_union16 var39;
-#else
-  orc_union16 var39;
-#endif
-  orc_int8 var40;
-  orc_int8 var41;
-  orc_union16 var42;
-  orc_union16 var43;
-  orc_union16 var44;
-  orc_union16 var45;
-  orc_union16 var46;
-  orc_int8 var47;
-
-  ptr0 = (orc_int8 *) ex->arrays[0];
-  ptr4 = (orc_int8 *) ex->arrays[4];
-  ptr5 = (orc_int8 *) ex->arrays[5];
-
-  /* 6: loadpw */
-  var38.i = ex->params[24];
-  /* 8: loadpw */
-  var39.i = (int) 0x00000080;   /* 128 or 6.32404e-322f */
-
-  for (i = 0; i < n; i++) {
-    /* 0: loadb */
-    var41 = ptr4[i];
-    /* 1: loadb */
-    var36 = ptr4[i];
-    /* 2: convubw */
-    var42.i = (orc_uint8) var36;
-    /* 3: loadb */
-    var37 = ptr5[i];
-    /* 4: convubw */
-    var43.i = (orc_uint8) var37;
-    /* 5: subw */
-    var44.i = var43.i - var42.i;
-    /* 7: mullw */
-    var45.i = (var44.i * var38.i) & 0xffff;
-    /* 9: addw */
-    var46.i = var45.i + var39.i;
-    /* 10: convhwb */
-    var47 = ((orc_uint16) var46.i) >> 8;
-    /* 11: addb */
-    var40 = var47 + var41;
-    /* 12: storeb */
-    ptr0[i] = var40;
-  }
-
-}
-
-void
-video_scale_orc_merge_linear_u8 (orc_uint8 * ORC_RESTRICT d1,
-    const orc_uint8 * ORC_RESTRICT s1, const orc_uint8 * ORC_RESTRICT s2,
-    int p1, int n)
-{
-  OrcExecutor _ex, *ex = &_ex;
-  static volatile int p_inited = 0;
-  static OrcCode *c = 0;
-  void (*func) (OrcExecutor *);
-
-  if (!p_inited) {
-    orc_once_mutex_lock ();
-    if (!p_inited) {
-      OrcProgram *p;
-
-#if 1
-      static const orc_uint8 bc[] = {
-        1, 9, 31, 118, 105, 100, 101, 111, 95, 115, 99, 97, 108, 101, 95, 111,
-        114, 99, 95, 109, 101, 114, 103, 101, 95, 108, 105, 110, 101, 97, 114,
-            95,
-        117, 56, 11, 1, 1, 12, 1, 1, 12, 1, 1, 14, 2, 128, 0, 0,
-        0, 16, 1, 20, 2, 20, 2, 20, 1, 20, 1, 43, 34, 4, 150, 32,
-        4, 150, 33, 5, 98, 33, 33, 32, 89, 33, 33, 24, 70, 33, 33, 16,
-        158, 35, 33, 33, 0, 35, 34, 2, 0,
-      };
-      p = orc_program_new_from_static_bytecode (bc);
-      orc_program_set_backup_function (p,
-          _backup_video_scale_orc_merge_linear_u8);
-#else
-      p = orc_program_new ();
-      orc_program_set_name (p, "video_scale_orc_merge_linear_u8");
-      orc_program_set_backup_function (p,
-          _backup_video_scale_orc_merge_linear_u8);
-      orc_program_add_destination (p, 1, "d1");
-      orc_program_add_source (p, 1, "s1");
-      orc_program_add_source (p, 1, "s2");
-      orc_program_add_constant (p, 2, 0x00000080, "c1");
-      orc_program_add_parameter (p, 1, "p1");
-      orc_program_add_temporary (p, 2, "t1");
-      orc_program_add_temporary (p, 2, "t2");
-      orc_program_add_temporary (p, 1, "t3");
-      orc_program_add_temporary (p, 1, "t4");
-
-      orc_program_append_2 (p, "loadb", 0, ORC_VAR_T3, ORC_VAR_S1, ORC_VAR_D1,
-          ORC_VAR_D1);
-      orc_program_append_2 (p, "convubw", 0, ORC_VAR_T1, ORC_VAR_S1, ORC_VAR_D1,
-          ORC_VAR_D1);
-      orc_program_append_2 (p, "convubw", 0, ORC_VAR_T2, ORC_VAR_S2, ORC_VAR_D1,
-          ORC_VAR_D1);
-      orc_program_append_2 (p, "subw", 0, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_T1,
-          ORC_VAR_D1);
-      orc_program_append_2 (p, "mullw", 0, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_P1,
-          ORC_VAR_D1);
-      orc_program_append_2 (p, "addw", 0, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_C1,
-          ORC_VAR_D1);
-      orc_program_append_2 (p, "convhwb", 0, ORC_VAR_T4, ORC_VAR_T2, ORC_VAR_D1,
-          ORC_VAR_D1);
-      orc_program_append_2 (p, "addb", 0, ORC_VAR_D1, ORC_VAR_T4, ORC_VAR_T3,
-          ORC_VAR_D1);
-#endif
-
-      orc_program_compile (p);
-      c = orc_program_take_code (p);
-      orc_program_free (p);
-    }
-    p_inited = TRUE;
-    orc_once_mutex_unlock ();
-  }
-  ex->arrays[ORC_VAR_A2] = c;
-  ex->program = 0;
-
-  ex->n = n;
-  ex->arrays[ORC_VAR_D1] = d1;
-  ex->arrays[ORC_VAR_S1] = (void *) s1;
-  ex->arrays[ORC_VAR_S2] = (void *) s2;
-  ex->params[ORC_VAR_P1] = p1;
-
-  func = c->exec;
-  func (ex);
-}
-#endif
-
-
-/* video_scale_orc_merge_linear_u16 */
-#ifdef DISABLE_ORC
-void
-video_scale_orc_merge_linear_u16 (orc_uint16 * ORC_RESTRICT d1,
-    const orc_uint16 * ORC_RESTRICT s1, const orc_uint16 * ORC_RESTRICT s2,
-    int p1, int p2, int n)
-{
-  int i;
-  orc_union16 *ORC_RESTRICT ptr0;
-  const orc_union16 *ORC_RESTRICT ptr4;
-  const orc_union16 *ORC_RESTRICT ptr5;
-  orc_union16 var34;
-  orc_union16 var35;
-  orc_union16 var36;
-  orc_union16 var37;
-  orc_union16 var38;
-  orc_union32 var39;
-  orc_union32 var40;
-  orc_union32 var41;
-  orc_union32 var42;
-
-  ptr0 = (orc_union16 *) d1;
-  ptr4 = (orc_union16 *) s1;
-  ptr5 = (orc_union16 *) s2;
-
-  /* 1: loadpw */
-  var35.i = p1;
-  /* 4: loadpw */
-  var37.i = p2;
-
-  for (i = 0; i < n; i++) {
-    /* 0: loadw */
-    var34 = ptr4[i];
-    /* 2: muluwl */
-    var39.i =
-        ((orc_uint32) ((orc_uint16) var34.i)) *
-        ((orc_uint32) ((orc_uint16) var35.i));
-    /* 3: loadw */
-    var36 = ptr5[i];
-    /* 5: muluwl */
-    var40.i =
-        ((orc_uint32) ((orc_uint16) var36.i)) *
-        ((orc_uint32) ((orc_uint16) var37.i));
-    /* 6: addl */
-    var41.i = ((orc_uint32) var39.i) + ((orc_uint32) var40.i);
-    /* 7: shrul */
-    var42.i = ((orc_uint32) var41.i) >> 16;
-    /* 8: convlw */
-    var38.i = var42.i;
-    /* 9: storew */
-    ptr0[i] = var38;
-  }
-
-}
-
-#else
-static void
-_backup_video_scale_orc_merge_linear_u16 (OrcExecutor * ORC_RESTRICT ex)
-{
-  int i;
-  int n = ex->n;
-  orc_union16 *ORC_RESTRICT ptr0;
-  const orc_union16 *ORC_RESTRICT ptr4;
-  const orc_union16 *ORC_RESTRICT ptr5;
-  orc_union16 var34;
-  orc_union16 var35;
-  orc_union16 var36;
-  orc_union16 var37;
-  orc_union16 var38;
-  orc_union32 var39;
-  orc_union32 var40;
-  orc_union32 var41;
-  orc_union32 var42;
-
-  ptr0 = (orc_union16 *) ex->arrays[0];
-  ptr4 = (orc_union16 *) ex->arrays[4];
-  ptr5 = (orc_union16 *) ex->arrays[5];
-
-  /* 1: loadpw */
-  var35.i = ex->params[24];
-  /* 4: loadpw */
-  var37.i = ex->params[25];
-
-  for (i = 0; i < n; i++) {
-    /* 0: loadw */
-    var34 = ptr4[i];
-    /* 2: muluwl */
-    var39.i =
-        ((orc_uint32) ((orc_uint16) var34.i)) *
-        ((orc_uint32) ((orc_uint16) var35.i));
-    /* 3: loadw */
-    var36 = ptr5[i];
-    /* 5: muluwl */
-    var40.i =
-        ((orc_uint32) ((orc_uint16) var36.i)) *
-        ((orc_uint32) ((orc_uint16) var37.i));
-    /* 6: addl */
-    var41.i = ((orc_uint32) var39.i) + ((orc_uint32) var40.i);
-    /* 7: shrul */
-    var42.i = ((orc_uint32) var41.i) >> 16;
-    /* 8: convlw */
-    var38.i = var42.i;
-    /* 9: storew */
-    ptr0[i] = var38;
-  }
-
-}
-
-void
-video_scale_orc_merge_linear_u16 (orc_uint16 * ORC_RESTRICT d1,
-    const orc_uint16 * ORC_RESTRICT s1, const orc_uint16 * ORC_RESTRICT s2,
-    int p1, int p2, int n)
-{
-  OrcExecutor _ex, *ex = &_ex;
-  static volatile int p_inited = 0;
-  static OrcCode *c = 0;
-  void (*func) (OrcExecutor *);
-
-  if (!p_inited) {
-    orc_once_mutex_lock ();
-    if (!p_inited) {
-      OrcProgram *p;
-
-#if 1
-      static const orc_uint8 bc[] = {
-        1, 9, 32, 118, 105, 100, 101, 111, 95, 115, 99, 97, 108, 101, 95, 111,
-        114, 99, 95, 109, 101, 114, 103, 101, 95, 108, 105, 110, 101, 97, 114,
-            95,
-        117, 49, 54, 11, 2, 2, 12, 2, 2, 12, 2, 2, 14, 4, 16, 0,
-        0, 0, 16, 2, 16, 2, 20, 4, 20, 4, 177, 32, 4, 24, 177, 33,
-        5, 25, 103, 32, 32, 33, 126, 32, 32, 16, 163, 0, 32, 2, 0,
-      };
-      p = orc_program_new_from_static_bytecode (bc);
-      orc_program_set_backup_function (p,
-          _backup_video_scale_orc_merge_linear_u16);
-#else
-      p = orc_program_new ();
-      orc_program_set_name (p, "video_scale_orc_merge_linear_u16");
-      orc_program_set_backup_function (p,
-          _backup_video_scale_orc_merge_linear_u16);
-      orc_program_add_destination (p, 2, "d1");
-      orc_program_add_source (p, 2, "s1");
-      orc_program_add_source (p, 2, "s2");
-      orc_program_add_constant (p, 4, 0x00000010, "c1");
-      orc_program_add_parameter (p, 2, "p1");
-      orc_program_add_parameter (p, 2, "p2");
-      orc_program_add_temporary (p, 4, "t1");
-      orc_program_add_temporary (p, 4, "t2");
-
-      orc_program_append_2 (p, "muluwl", 0, ORC_VAR_T1, ORC_VAR_S1, ORC_VAR_P1,
-          ORC_VAR_D1);
-      orc_program_append_2 (p, "muluwl", 0, ORC_VAR_T2, ORC_VAR_S2, ORC_VAR_P2,
-          ORC_VAR_D1);
-      orc_program_append_2 (p, "addl", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_T2,
-          ORC_VAR_D1);
-      orc_program_append_2 (p, "shrul", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_C1,
-          ORC_VAR_D1);
-      orc_program_append_2 (p, "convlw", 0, ORC_VAR_D1, ORC_VAR_T1, ORC_VAR_D1,
-          ORC_VAR_D1);
-#endif
-
-      orc_program_compile (p);
-      c = orc_program_take_code (p);
-      orc_program_free (p);
-    }
-    p_inited = TRUE;
-    orc_once_mutex_unlock ();
-  }
-  ex->arrays[ORC_VAR_A2] = c;
-  ex->program = 0;
-
-  ex->n = n;
-  ex->arrays[ORC_VAR_D1] = d1;
-  ex->arrays[ORC_VAR_S1] = (void *) s1;
-  ex->arrays[ORC_VAR_S2] = (void *) s2;
-  ex->params[ORC_VAR_P1] = p1;
-  ex->params[ORC_VAR_P2] = p2;
-
-  func = c->exec;
-  func (ex);
-}
-#endif
-
-
-/* video_scale_orc_splat_u16 */
-#ifdef DISABLE_ORC
-void
-video_scale_orc_splat_u16 (orc_uint16 * ORC_RESTRICT d1, int p1, int n)
-{
-  int i;
-  orc_union16 *ORC_RESTRICT ptr0;
-  orc_union16 var32;
-  orc_union16 var33;
-
-  ptr0 = (orc_union16 *) d1;
-
-  /* 0: loadpw */
-  var32.i = p1;
-
-  for (i = 0; i < n; i++) {
-    /* 1: copyw */
-    var33.i = var32.i;
-    /* 2: storew */
-    ptr0[i] = var33;
-  }
-
-}
-
-#else
-static void
-_backup_video_scale_orc_splat_u16 (OrcExecutor * ORC_RESTRICT ex)
-{
-  int i;
-  int n = ex->n;
-  orc_union16 *ORC_RESTRICT ptr0;
-  orc_union16 var32;
-  orc_union16 var33;
-
-  ptr0 = (orc_union16 *) ex->arrays[0];
-
-  /* 0: loadpw */
-  var32.i = ex->params[24];
-
-  for (i = 0; i < n; i++) {
-    /* 1: copyw */
-    var33.i = var32.i;
-    /* 2: storew */
-    ptr0[i] = var33;
-  }
-
-}
-
-void
-video_scale_orc_splat_u16 (orc_uint16 * ORC_RESTRICT d1, int p1, int n)
-{
-  OrcExecutor _ex, *ex = &_ex;
-  static volatile int p_inited = 0;
-  static OrcCode *c = 0;
-  void (*func) (OrcExecutor *);
-
-  if (!p_inited) {
-    orc_once_mutex_lock ();
-    if (!p_inited) {
-      OrcProgram *p;
-
-#if 1
-      static const orc_uint8 bc[] = {
-        1, 9, 25, 118, 105, 100, 101, 111, 95, 115, 99, 97, 108, 101, 95, 111,
-        114, 99, 95, 115, 112, 108, 97, 116, 95, 117, 49, 54, 11, 2, 2, 16,
-        2, 79, 0, 24, 2, 0,
-      };
-      p = orc_program_new_from_static_bytecode (bc);
-      orc_program_set_backup_function (p, _backup_video_scale_orc_splat_u16);
-#else
-      p = orc_program_new ();
-      orc_program_set_name (p, "video_scale_orc_splat_u16");
-      orc_program_set_backup_function (p, _backup_video_scale_orc_splat_u16);
-      orc_program_add_destination (p, 2, "d1");
-      orc_program_add_parameter (p, 2, "p1");
-
-      orc_program_append_2 (p, "copyw", 0, ORC_VAR_D1, ORC_VAR_P1, ORC_VAR_D1,
-          ORC_VAR_D1);
-#endif
-
-      orc_program_compile (p);
-      c = orc_program_take_code (p);
-      orc_program_free (p);
-    }
-    p_inited = TRUE;
-    orc_once_mutex_unlock ();
-  }
-  ex->arrays[ORC_VAR_A2] = c;
-  ex->program = 0;
-
-  ex->n = n;
-  ex->arrays[ORC_VAR_D1] = d1;
-  ex->params[ORC_VAR_P1] = p1;
-
-  func = c->exec;
-  func (ex);
-}
-#endif
-
-
-/* video_scale_orc_splat_u32 */
-#ifdef DISABLE_ORC
-void
-video_scale_orc_splat_u32 (orc_uint32 * ORC_RESTRICT d1, int p1, int n)
-{
-  int i;
-  orc_union32 *ORC_RESTRICT ptr0;
-  orc_union32 var32;
-  orc_union32 var33;
-
-  ptr0 = (orc_union32 *) d1;
-
-  /* 0: loadpl */
-  var32.i = p1;
-
-  for (i = 0; i < n; i++) {
-    /* 1: copyl */
-    var33.i = var32.i;
-    /* 2: storel */
-    ptr0[i] = var33;
-  }
-
-}
-
-#else
-static void
-_backup_video_scale_orc_splat_u32 (OrcExecutor * ORC_RESTRICT ex)
-{
-  int i;
-  int n = ex->n;
-  orc_union32 *ORC_RESTRICT ptr0;
-  orc_union32 var32;
-  orc_union32 var33;
-
-  ptr0 = (orc_union32 *) ex->arrays[0];
-
-  /* 0: loadpl */
-  var32.i = ex->params[24];
-
-  for (i = 0; i < n; i++) {
-    /* 1: copyl */
-    var33.i = var32.i;
-    /* 2: storel */
-    ptr0[i] = var33;
-  }
-
-}
-
-void
-video_scale_orc_splat_u32 (orc_uint32 * ORC_RESTRICT d1, int p1, int n)
-{
-  OrcExecutor _ex, *ex = &_ex;
-  static volatile int p_inited = 0;
-  static OrcCode *c = 0;
-  void (*func) (OrcExecutor *);
-
-  if (!p_inited) {
-    orc_once_mutex_lock ();
-    if (!p_inited) {
-      OrcProgram *p;
-
-#if 1
-      static const orc_uint8 bc[] = {
-        1, 9, 25, 118, 105, 100, 101, 111, 95, 115, 99, 97, 108, 101, 95, 111,
-        114, 99, 95, 115, 112, 108, 97, 116, 95, 117, 51, 50, 11, 4, 4, 16,
-        4, 112, 0, 24, 2, 0,
-      };
-      p = orc_program_new_from_static_bytecode (bc);
-      orc_program_set_backup_function (p, _backup_video_scale_orc_splat_u32);
-#else
-      p = orc_program_new ();
-      orc_program_set_name (p, "video_scale_orc_splat_u32");
-      orc_program_set_backup_function (p, _backup_video_scale_orc_splat_u32);
-      orc_program_add_destination (p, 4, "d1");
-      orc_program_add_parameter (p, 4, "p1");
-
-      orc_program_append_2 (p, "copyl", 0, ORC_VAR_D1, ORC_VAR_P1, ORC_VAR_D1,
-          ORC_VAR_D1);
-#endif
-
-      orc_program_compile (p);
-      c = orc_program_take_code (p);
-      orc_program_free (p);
-    }
-    p_inited = TRUE;
-    orc_once_mutex_unlock ();
-  }
-  ex->arrays[ORC_VAR_A2] = c;
-  ex->program = 0;
-
-  ex->n = n;
-  ex->arrays[ORC_VAR_D1] = d1;
-  ex->params[ORC_VAR_P1] = p1;
-
-  func = c->exec;
-  func (ex);
-}
-#endif
-
-
-/* video_scale_orc_splat_u64 */
-#ifdef DISABLE_ORC
-void
-video_scale_orc_splat_u64 (orc_uint64 * ORC_RESTRICT d1, orc_int64 p1, int n)
-{
-  int i;
-  orc_union64 *ORC_RESTRICT ptr0;
-  orc_union64 var32;
-  orc_union64 var33;
-
-  ptr0 = (orc_union64 *) d1;
-
-  /* 0: loadpq */
-  var32.i = p1;
-
-  for (i = 0; i < n; i++) {
-    /* 1: copyq */
-    var33.i = var32.i;
-    /* 2: storeq */
-    ptr0[i] = var33;
-  }
-
-}
-
-#else
-static void
-_backup_video_scale_orc_splat_u64 (OrcExecutor * ORC_RESTRICT ex)
-{
-  int i;
-  int n = ex->n;
-  orc_union64 *ORC_RESTRICT ptr0;
-  orc_union64 var32;
-  orc_union64 var33;
-
-  ptr0 = (orc_union64 *) ex->arrays[0];
-
-  /* 0: loadpq */
-  var32.i =
-      (ex->params[24] & 0xffffffff) | ((orc_uint64) (ex->params[24 +
-              (ORC_VAR_T1 - ORC_VAR_P1)]) << 32);
-
-  for (i = 0; i < n; i++) {
-    /* 1: copyq */
-    var33.i = var32.i;
-    /* 2: storeq */
-    ptr0[i] = var33;
-  }
-
-}
-
-void
-video_scale_orc_splat_u64 (orc_uint64 * ORC_RESTRICT d1, orc_int64 p1, int n)
-{
-  OrcExecutor _ex, *ex = &_ex;
-  static volatile int p_inited = 0;
-  static OrcCode *c = 0;
-  void (*func) (OrcExecutor *);
-
-  if (!p_inited) {
-    orc_once_mutex_lock ();
-    if (!p_inited) {
-      OrcProgram *p;
-
-#if 1
-      static const orc_uint8 bc[] = {
-        1, 9, 25, 118, 105, 100, 101, 111, 95, 115, 99, 97, 108, 101, 95, 111,
-        114, 99, 95, 115, 112, 108, 97, 116, 95, 117, 54, 52, 11, 8, 8, 18,
-        8, 137, 0, 24, 2, 0,
-      };
-      p = orc_program_new_from_static_bytecode (bc);
-      orc_program_set_backup_function (p, _backup_video_scale_orc_splat_u64);
-#else
-      p = orc_program_new ();
-      orc_program_set_name (p, "video_scale_orc_splat_u64");
-      orc_program_set_backup_function (p, _backup_video_scale_orc_splat_u64);
-      orc_program_add_destination (p, 8, "d1");
-      orc_program_add_parameter_int64 (p, 8, "p1");
-
-      orc_program_append_2 (p, "copyq", 0, ORC_VAR_D1, ORC_VAR_P1, ORC_VAR_D1,
-          ORC_VAR_D1);
-#endif
-
-      orc_program_compile (p);
-      c = orc_program_take_code (p);
-      orc_program_free (p);
-    }
-    p_inited = TRUE;
-    orc_once_mutex_unlock ();
-  }
-  ex->arrays[ORC_VAR_A2] = c;
-  ex->program = 0;
-
-  ex->n = n;
-  ex->arrays[ORC_VAR_D1] = d1;
-  {
-    orc_union64 tmp;
-    tmp.i = p1;
-    ex->params[ORC_VAR_P1] = ((orc_uint64) tmp.i) & 0xffffffff;
-    ex->params[ORC_VAR_T1] = ((orc_uint64) tmp.i) >> 32;
-  }
-
-  func = c->exec;
-  func (ex);
-}
-#endif
-
-
-/* video_scale_orc_downsample_u8 */
-#ifdef DISABLE_ORC
-void
-video_scale_orc_downsample_u8 (guint8 * ORC_RESTRICT d1,
-    const guint8 * ORC_RESTRICT s1, int n)
-{
-  int i;
-  orc_int8 *ORC_RESTRICT ptr0;
-  const orc_union16 *ORC_RESTRICT ptr4;
-  orc_union16 var34;
-  orc_int8 var35;
-  orc_int8 var36;
-  orc_int8 var37;
-
-  ptr0 = (orc_int8 *) d1;
-  ptr4 = (orc_union16 *) s1;
-
-
-  for (i = 0; i < n; i++) {
-    /* 0: loadw */
-    var34 = ptr4[i];
-    /* 1: splitwb */
-    {
-      orc_union16 _src;
-      _src.i = var34.i;
-      var36 = _src.x2[1];
-      var37 = _src.x2[0];
-    }
-    /* 2: avgub */
-    var35 = ((orc_uint8) var36 + (orc_uint8) var37 + 1) >> 1;
-    /* 3: storeb */
-    ptr0[i] = var35;
-  }
-
-}
-
-#else
-static void
-_backup_video_scale_orc_downsample_u8 (OrcExecutor * ORC_RESTRICT ex)
-{
-  int i;
-  int n = ex->n;
-  orc_int8 *ORC_RESTRICT ptr0;
-  const orc_union16 *ORC_RESTRICT ptr4;
-  orc_union16 var34;
-  orc_int8 var35;
-  orc_int8 var36;
-  orc_int8 var37;
-
-  ptr0 = (orc_int8 *) ex->arrays[0];
-  ptr4 = (orc_union16 *) ex->arrays[4];
-
-
-  for (i = 0; i < n; i++) {
-    /* 0: loadw */
-    var34 = ptr4[i];
-    /* 1: splitwb */
-    {
-      orc_union16 _src;
-      _src.i = var34.i;
-      var36 = _src.x2[1];
-      var37 = _src.x2[0];
-    }
-    /* 2: avgub */
-    var35 = ((orc_uint8) var36 + (orc_uint8) var37 + 1) >> 1;
-    /* 3: storeb */
-    ptr0[i] = var35;
-  }
-
-}
-
-void
-video_scale_orc_downsample_u8 (guint8 * ORC_RESTRICT d1,
-    const guint8 * ORC_RESTRICT s1, int n)
-{
-  OrcExecutor _ex, *ex = &_ex;
-  static volatile int p_inited = 0;
-  static OrcCode *c = 0;
-  void (*func) (OrcExecutor *);
-
-  if (!p_inited) {
-    orc_once_mutex_lock ();
-    if (!p_inited) {
-      OrcProgram *p;
-
-#if 1
-      static const orc_uint8 bc[] = {
-        1, 9, 29, 118, 105, 100, 101, 111, 95, 115, 99, 97, 108, 101, 95, 111,
-        114, 99, 95, 100, 111, 119, 110, 115, 97, 109, 112, 108, 101, 95, 117,
-            56,
-        11, 1, 1, 12, 2, 2, 20, 1, 20, 1, 199, 32, 33, 4, 39, 0,
-        32, 33, 2, 0,
-      };
-      p = orc_program_new_from_static_bytecode (bc);
-      orc_program_set_backup_function (p,
-          _backup_video_scale_orc_downsample_u8);
-#else
-      p = orc_program_new ();
-      orc_program_set_name (p, "video_scale_orc_downsample_u8");
-      orc_program_set_backup_function (p,
-          _backup_video_scale_orc_downsample_u8);
-      orc_program_add_destination (p, 1, "d1");
-      orc_program_add_source (p, 2, "s1");
-      orc_program_add_temporary (p, 1, "t1");
-      orc_program_add_temporary (p, 1, "t2");
-
-      orc_program_append_2 (p, "splitwb", 0, ORC_VAR_T1, ORC_VAR_T2, ORC_VAR_S1,
-          ORC_VAR_D1);
-      orc_program_append_2 (p, "avgub", 0, ORC_VAR_D1, ORC_VAR_T1, ORC_VAR_T2,
-          ORC_VAR_D1);
-#endif
-
-      orc_program_compile (p);
-      c = orc_program_take_code (p);
-      orc_program_free (p);
-    }
-    p_inited = TRUE;
-    orc_once_mutex_unlock ();
-  }
-  ex->arrays[ORC_VAR_A2] = c;
-  ex->program = 0;
-
-  ex->n = n;
-  ex->arrays[ORC_VAR_D1] = d1;
-  ex->arrays[ORC_VAR_S1] = (void *) s1;
-
-  func = c->exec;
-  func (ex);
-}
-#endif
-
-
-/* video_scale_orc_downsample_u16 */
-#ifdef DISABLE_ORC
-void
-video_scale_orc_downsample_u16 (guint16 * ORC_RESTRICT d1,
-    const guint16 * ORC_RESTRICT s1, int n)
-{
-  int i;
-  orc_union16 *ORC_RESTRICT ptr0;
-  const orc_union32 *ORC_RESTRICT ptr4;
-  orc_union32 var34;
-  orc_union16 var35;
-  orc_union16 var36;
-  orc_union16 var37;
-
-  ptr0 = (orc_union16 *) d1;
-  ptr4 = (orc_union32 *) s1;
-
-
-  for (i = 0; i < n; i++) {
-    /* 0: loadl */
-    var34 = ptr4[i];
-    /* 1: splitlw */
-    {
-      orc_union32 _src;
-      _src.i = var34.i;
-      var36.i = _src.x2[1];
-      var37.i = _src.x2[0];
-    }
-    /* 2: avguw */
-    var35.i = ((orc_uint16) var36.i + (orc_uint16) var37.i + 1) >> 1;
-    /* 3: storew */
-    ptr0[i] = var35;
-  }
-
-}
-
-#else
-static void
-_backup_video_scale_orc_downsample_u16 (OrcExecutor * ORC_RESTRICT ex)
-{
-  int i;
-  int n = ex->n;
-  orc_union16 *ORC_RESTRICT ptr0;
-  const orc_union32 *ORC_RESTRICT ptr4;
-  orc_union32 var34;
-  orc_union16 var35;
-  orc_union16 var36;
-  orc_union16 var37;
-
-  ptr0 = (orc_union16 *) ex->arrays[0];
-  ptr4 = (orc_union32 *) ex->arrays[4];
-
-
-  for (i = 0; i < n; i++) {
-    /* 0: loadl */
-    var34 = ptr4[i];
-    /* 1: splitlw */
-    {
-      orc_union32 _src;
-      _src.i = var34.i;
-      var36.i = _src.x2[1];
-      var37.i = _src.x2[0];
-    }
-    /* 2: avguw */
-    var35.i = ((orc_uint16) var36.i + (orc_uint16) var37.i + 1) >> 1;
-    /* 3: storew */
-    ptr0[i] = var35;
-  }
-
-}
-
-void
-video_scale_orc_downsample_u16 (guint16 * ORC_RESTRICT d1,
-    const guint16 * ORC_RESTRICT s1, int n)
-{
-  OrcExecutor _ex, *ex = &_ex;
-  static volatile int p_inited = 0;
-  static OrcCode *c = 0;
-  void (*func) (OrcExecutor *);
-
-  if (!p_inited) {
-    orc_once_mutex_lock ();
-    if (!p_inited) {
-      OrcProgram *p;
-
-#if 1
-      static const orc_uint8 bc[] = {
-        1, 9, 30, 118, 105, 100, 101, 111, 95, 115, 99, 97, 108, 101, 95, 111,
-        114, 99, 95, 100, 111, 119, 110, 115, 97, 109, 112, 108, 101, 95, 117,
-            49,
-        54, 11, 2, 2, 12, 4, 4, 20, 2, 20, 2, 198, 32, 33, 4, 76,
-        0, 32, 33, 2, 0,
-      };
-      p = orc_program_new_from_static_bytecode (bc);
-      orc_program_set_backup_function (p,
-          _backup_video_scale_orc_downsample_u16);
-#else
-      p = orc_program_new ();
-      orc_program_set_name (p, "video_scale_orc_downsample_u16");
-      orc_program_set_backup_function (p,
-          _backup_video_scale_orc_downsample_u16);
-      orc_program_add_destination (p, 2, "d1");
-      orc_program_add_source (p, 4, "s1");
-      orc_program_add_temporary (p, 2, "t1");
-      orc_program_add_temporary (p, 2, "t2");
-
-      orc_program_append_2 (p, "splitlw", 0, ORC_VAR_T1, ORC_VAR_T2, ORC_VAR_S1,
-          ORC_VAR_D1);
-      orc_program_append_2 (p, "avguw", 0, ORC_VAR_D1, ORC_VAR_T1, ORC_VAR_T2,
-          ORC_VAR_D1);
-#endif
-
-      orc_program_compile (p);
-      c = orc_program_take_code (p);
-      orc_program_free (p);
-    }
-    p_inited = TRUE;
-    orc_once_mutex_unlock ();
-  }
-  ex->arrays[ORC_VAR_A2] = c;
-  ex->program = 0;
-
-  ex->n = n;
-  ex->arrays[ORC_VAR_D1] = d1;
-  ex->arrays[ORC_VAR_S1] = (void *) s1;
-
-  func = c->exec;
-  func (ex);
-}
-#endif
-
-
-/* video_scale_orc_downsample_u32 */
-#ifdef DISABLE_ORC
-void
-video_scale_orc_downsample_u32 (guint8 * ORC_RESTRICT d1,
-    const guint8 * ORC_RESTRICT s1, int n)
-{
-  int i;
-  orc_union32 *ORC_RESTRICT ptr0;
-  const orc_union64 *ORC_RESTRICT ptr4;
-  orc_union64 var34;
-  orc_union32 var35;
-  orc_union32 var36;
-  orc_union32 var37;
-
-  ptr0 = (orc_union32 *) d1;
-  ptr4 = (orc_union64 *) s1;
-
-
-  for (i = 0; i < n; i++) {
-    /* 0: loadq */
-    var34 = ptr4[i];
-    /* 1: splitql */
-    {
-      orc_union64 _src;
-      _src.i = var34.i;
-      var36.i = _src.x2[1];
-      var37.i = _src.x2[0];
-    }
-    /* 2: avgub */
-    var35.x4[0] = ((orc_uint8) var36.x4[0] + (orc_uint8) var37.x4[0] + 1) >> 1;
-    var35.x4[1] = ((orc_uint8) var36.x4[1] + (orc_uint8) var37.x4[1] + 1) >> 1;
-    var35.x4[2] = ((orc_uint8) var36.x4[2] + (orc_uint8) var37.x4[2] + 1) >> 1;
-    var35.x4[3] = ((orc_uint8) var36.x4[3] + (orc_uint8) var37.x4[3] + 1) >> 1;
-    /* 3: storel */
-    ptr0[i] = var35;
-  }
-
-}
-
-#else
-static void
-_backup_video_scale_orc_downsample_u32 (OrcExecutor * ORC_RESTRICT ex)
-{
-  int i;
-  int n = ex->n;
-  orc_union32 *ORC_RESTRICT ptr0;
-  const orc_union64 *ORC_RESTRICT ptr4;
-  orc_union64 var34;
-  orc_union32 var35;
-  orc_union32 var36;
-  orc_union32 var37;
-
-  ptr0 = (orc_union32 *) ex->arrays[0];
-  ptr4 = (orc_union64 *) ex->arrays[4];
-
-
-  for (i = 0; i < n; i++) {
-    /* 0: loadq */
-    var34 = ptr4[i];
-    /* 1: splitql */
-    {
-      orc_union64 _src;
-      _src.i = var34.i;
-      var36.i = _src.x2[1];
-      var37.i = _src.x2[0];
-    }
-    /* 2: avgub */
-    var35.x4[0] = ((orc_uint8) var36.x4[0] + (orc_uint8) var37.x4[0] + 1) >> 1;
-    var35.x4[1] = ((orc_uint8) var36.x4[1] + (orc_uint8) var37.x4[1] + 1) >> 1;
-    var35.x4[2] = ((orc_uint8) var36.x4[2] + (orc_uint8) var37.x4[2] + 1) >> 1;
-    var35.x4[3] = ((orc_uint8) var36.x4[3] + (orc_uint8) var37.x4[3] + 1) >> 1;
-    /* 3: storel */
-    ptr0[i] = var35;
-  }
-
-}
-
-void
-video_scale_orc_downsample_u32 (guint8 * ORC_RESTRICT d1,
-    const guint8 * ORC_RESTRICT s1, int n)
-{
-  OrcExecutor _ex, *ex = &_ex;
-  static volatile int p_inited = 0;
-  static OrcCode *c = 0;
-  void (*func) (OrcExecutor *);
-
-  if (!p_inited) {
-    orc_once_mutex_lock ();
-    if (!p_inited) {
-      OrcProgram *p;
-
-#if 1
-      static const orc_uint8 bc[] = {
-        1, 9, 30, 118, 105, 100, 101, 111, 95, 115, 99, 97, 108, 101, 95, 111,
-        114, 99, 95, 100, 111, 119, 110, 115, 97, 109, 112, 108, 101, 95, 117,
-            51,
-        50, 11, 4, 4, 12, 8, 8, 20, 4, 20, 4, 197, 32, 33, 4, 21,
-        2, 39, 0, 32, 33, 2, 0,
-      };
-      p = orc_program_new_from_static_bytecode (bc);
-      orc_program_set_backup_function (p,
-          _backup_video_scale_orc_downsample_u32);
-#else
-      p = orc_program_new ();
-      orc_program_set_name (p, "video_scale_orc_downsample_u32");
-      orc_program_set_backup_function (p,
-          _backup_video_scale_orc_downsample_u32);
-      orc_program_add_destination (p, 4, "d1");
-      orc_program_add_source (p, 8, "s1");
-      orc_program_add_temporary (p, 4, "t1");
-      orc_program_add_temporary (p, 4, "t2");
-
-      orc_program_append_2 (p, "splitql", 0, ORC_VAR_T1, ORC_VAR_T2, ORC_VAR_S1,
-          ORC_VAR_D1);
-      orc_program_append_2 (p, "avgub", 2, ORC_VAR_D1, ORC_VAR_T1, ORC_VAR_T2,
-          ORC_VAR_D1);
-#endif
-
-      orc_program_compile (p);
-      c = orc_program_take_code (p);
-      orc_program_free (p);
-    }
-    p_inited = TRUE;
-    orc_once_mutex_unlock ();
-  }
-  ex->arrays[ORC_VAR_A2] = c;
-  ex->program = 0;
-
-  ex->n = n;
-  ex->arrays[ORC_VAR_D1] = d1;
-  ex->arrays[ORC_VAR_S1] = (void *) s1;
-
-  func = c->exec;
-  func (ex);
-}
-#endif
-
-
-/* video_scale_orc_downsample_yuyv */
-#ifdef DISABLE_ORC
-void
-video_scale_orc_downsample_yuyv (guint8 * ORC_RESTRICT d1,
-    const guint8 * ORC_RESTRICT s1, int n)
-{
-  int i;
-  orc_union32 *ORC_RESTRICT ptr0;
-  const orc_union64 *ORC_RESTRICT ptr4;
-  orc_union64 var38;
-  orc_union32 var39;
-  orc_union32 var40;
-  orc_union32 var41;
-  orc_union16 var42;
-  orc_union16 var43;
-  orc_union16 var44;
-  orc_union16 var45;
-  orc_union16 var46;
-  orc_union16 var47;
-
-  ptr0 = (orc_union32 *) d1;
-  ptr4 = (orc_union64 *) s1;
-
-
-  for (i = 0; i < n; i++) {
-    /* 0: loadq */
-    var38 = ptr4[i];
-    /* 1: splitwb */
-    {
-      orc_union16 _src;
-      _src.i = var38.x4[0];
-      var40.x4[0] = _src.x2[1];
-      var41.x4[0] = _src.x2[0];
-    }
-    {
-      orc_union16 _src;
-      _src.i = var38.x4[1];
-      var40.x4[1] = _src.x2[1];
-      var41.x4[1] = _src.x2[0];
-    }
-    {
-      orc_union16 _src;
-      _src.i = var38.x4[2];
-      var40.x4[2] = _src.x2[1];
-      var41.x4[2] = _src.x2[0];
-    }
-    {
-      orc_union16 _src;
-      _src.i = var38.x4[3];
-      var40.x4[3] = _src.x2[1];
-      var41.x4[3] = _src.x2[0];
-    }
-    /* 2: splitwb */
-    {
-      orc_union16 _src;
-      _src.i = var40.x2[0];
-      var42.x2[0] = _src.x2[1];
-      var43.x2[0] = _src.x2[0];
-    }
-    {
-      orc_union16 _src;
-      _src.i = var40.x2[1];
-      var42.x2[1] = _src.x2[1];
-      var43.x2[1] = _src.x2[0];
-    }
-    /* 3: avgub */
-    var44.x2[0] = ((orc_uint8) var42.x2[0] + (orc_uint8) var43.x2[0] + 1) >> 1;
-    var44.x2[1] = ((orc_uint8) var42.x2[1] + (orc_uint8) var43.x2[1] + 1) >> 1;
-    /* 4: splitlw */
-    {
-      orc_union32 _src;
-      _src.i = var41.i;
-      var45.i = _src.x2[1];
-      var46.i = _src.x2[0];
-    }
-    /* 5: avgub */
-    var47.x2[0] = ((orc_uint8) var45.x2[0] + (orc_uint8) var46.x2[0] + 1) >> 1;
-    var47.x2[1] = ((orc_uint8) var45.x2[1] + (orc_uint8) var46.x2[1] + 1) >> 1;
-    /* 6: mergebw */
-    {
-      orc_union16 _dest;
-      _dest.x2[0] = var44.x2[0];
-      _dest.x2[1] = var47.x2[0];
-      var39.x2[0] = _dest.i;
-    }
-    {
-      orc_union16 _dest;
-      _dest.x2[0] = var44.x2[1];
-      _dest.x2[1] = var47.x2[1];
-      var39.x2[1] = _dest.i;
-    }
-    /* 7: storel */
-    ptr0[i] = var39;
-  }
-
-}
-
-#else
-static void
-_backup_video_scale_orc_downsample_yuyv (OrcExecutor * ORC_RESTRICT ex)
-{
-  int i;
-  int n = ex->n;
-  orc_union32 *ORC_RESTRICT ptr0;
-  const orc_union64 *ORC_RESTRICT ptr4;
-  orc_union64 var38;
-  orc_union32 var39;
-  orc_union32 var40;
-  orc_union32 var41;
-  orc_union16 var42;
-  orc_union16 var43;
-  orc_union16 var44;
-  orc_union16 var45;
-  orc_union16 var46;
-  orc_union16 var47;
-
-  ptr0 = (orc_union32 *) ex->arrays[0];
-  ptr4 = (orc_union64 *) ex->arrays[4];
-
-
-  for (i = 0; i < n; i++) {
-    /* 0: loadq */
-    var38 = ptr4[i];
-    /* 1: splitwb */
-    {
-      orc_union16 _src;
-      _src.i = var38.x4[0];
-      var40.x4[0] = _src.x2[1];
-      var41.x4[0] = _src.x2[0];
-    }
-    {
-      orc_union16 _src;
-      _src.i = var38.x4[1];
-      var40.x4[1] = _src.x2[1];
-      var41.x4[1] = _src.x2[0];
-    }
-    {
-      orc_union16 _src;
-      _src.i = var38.x4[2];
-      var40.x4[2] = _src.x2[1];
-      var41.x4[2] = _src.x2[0];
-    }
-    {
-      orc_union16 _src;
-      _src.i = var38.x4[3];
-      var40.x4[3] = _src.x2[1];
-      var41.x4[3] = _src.x2[0];
-    }
-    /* 2: splitwb */
-    {
-      orc_union16 _src;
-      _src.i = var40.x2[0];
-      var42.x2[0] = _src.x2[1];
-      var43.x2[0] = _src.x2[0];
-    }
-    {
-      orc_union16 _src;
-      _src.i = var40.x2[1];
-      var42.x2[1] = _src.x2[1];
-      var43.x2[1] = _src.x2[0];
-    }
-    /* 3: avgub */
-    var44.x2[0] = ((orc_uint8) var42.x2[0] + (orc_uint8) var43.x2[0] + 1) >> 1;
-    var44.x2[1] = ((orc_uint8) var42.x2[1] + (orc_uint8) var43.x2[1] + 1) >> 1;
-    /* 4: splitlw */
-    {
-      orc_union32 _src;
-      _src.i = var41.i;
-      var45.i = _src.x2[1];
-      var46.i = _src.x2[0];
-    }
-    /* 5: avgub */
-    var47.x2[0] = ((orc_uint8) var45.x2[0] + (orc_uint8) var46.x2[0] + 1) >> 1;
-    var47.x2[1] = ((orc_uint8) var45.x2[1] + (orc_uint8) var46.x2[1] + 1) >> 1;
-    /* 6: mergebw */
-    {
-      orc_union16 _dest;
-      _dest.x2[0] = var44.x2[0];
-      _dest.x2[1] = var47.x2[0];
-      var39.x2[0] = _dest.i;
-    }
-    {
-      orc_union16 _dest;
-      _dest.x2[0] = var44.x2[1];
-      _dest.x2[1] = var47.x2[1];
-      var39.x2[1] = _dest.i;
-    }
-    /* 7: storel */
-    ptr0[i] = var39;
-  }
-
-}
-
-void
-video_scale_orc_downsample_yuyv (guint8 * ORC_RESTRICT d1,
-    const guint8 * ORC_RESTRICT s1, int n)
-{
-  OrcExecutor _ex, *ex = &_ex;
-  static volatile int p_inited = 0;
-  static OrcCode *c = 0;
-  void (*func) (OrcExecutor *);
-
-  if (!p_inited) {
-    orc_once_mutex_lock ();
-    if (!p_inited) {
-      OrcProgram *p;
-
-#if 1
-      static const orc_uint8 bc[] = {
-        1, 9, 31, 118, 105, 100, 101, 111, 95, 115, 99, 97, 108, 101, 95, 111,
-        114, 99, 95, 100, 111, 119, 110, 115, 97, 109, 112, 108, 101, 95, 121,
-            117,
-        121, 118, 11, 4, 4, 12, 8, 8, 20, 4, 20, 4, 20, 2, 20, 2,
-        20, 2, 20, 2, 21, 2, 199, 32, 33, 4, 21, 1, 199, 34, 35, 32,
-        21, 1, 39, 36, 34, 35, 198, 34, 35, 33, 21, 1, 39, 37, 34, 35,
-        21, 1, 196, 0, 36, 37, 2, 0,
-      };
-      p = orc_program_new_from_static_bytecode (bc);
-      orc_program_set_backup_function (p,
-          _backup_video_scale_orc_downsample_yuyv);
-#else
-      p = orc_program_new ();
-      orc_program_set_name (p, "video_scale_orc_downsample_yuyv");
-      orc_program_set_backup_function (p,
-          _backup_video_scale_orc_downsample_yuyv);
-      orc_program_add_destination (p, 4, "d1");
-      orc_program_add_source (p, 8, "s1");
-      orc_program_add_temporary (p, 4, "t1");
-      orc_program_add_temporary (p, 4, "t2");
-      orc_program_add_temporary (p, 2, "t3");
-      orc_program_add_temporary (p, 2, "t4");
-      orc_program_add_temporary (p, 2, "t5");
-      orc_program_add_temporary (p, 2, "t6");
-
-      orc_program_append_2 (p, "splitwb", 2, ORC_VAR_T1, ORC_VAR_T2, ORC_VAR_S1,
-          ORC_VAR_D1);
-      orc_program_append_2 (p, "splitwb", 1, ORC_VAR_T3, ORC_VAR_T4, ORC_VAR_T1,
-          ORC_VAR_D1);
-      orc_program_append_2 (p, "avgub", 1, ORC_VAR_T5, ORC_VAR_T3, ORC_VAR_T4,
-          ORC_VAR_D1);
-      orc_program_append_2 (p, "splitlw", 0, ORC_VAR_T3, ORC_VAR_T4, ORC_VAR_T2,
-          ORC_VAR_D1);
-      orc_program_append_2 (p, "avgub", 1, ORC_VAR_T6, ORC_VAR_T3, ORC_VAR_T4,
-          ORC_VAR_D1);
-      orc_program_append_2 (p, "mergebw", 1, ORC_VAR_D1, ORC_VAR_T5, ORC_VAR_T6,
-          ORC_VAR_D1);
-#endif
-
-      orc_program_compile (p);
-      c = orc_program_take_code (p);
-      orc_program_free (p);
-    }
-    p_inited = TRUE;
-    orc_once_mutex_unlock ();
-  }
-  ex->arrays[ORC_VAR_A2] = c;
-  ex->program = 0;
-
-  ex->n = n;
-  ex->arrays[ORC_VAR_D1] = d1;
-  ex->arrays[ORC_VAR_S1] = (void *) s1;
-
-  func = c->exec;
-  func (ex);
-}
-#endif
-
-
-/* video_scale_orc_resample_nearest_u8 */
-#ifdef DISABLE_ORC
-void
-video_scale_orc_resample_nearest_u8 (guint8 * ORC_RESTRICT d1,
-    const guint8 * ORC_RESTRICT s1, int p1, int p2, int n)
-{
-  int i;
-  orc_int8 *ORC_RESTRICT ptr0;
-  const orc_int8 *ORC_RESTRICT ptr4;
-  orc_int8 var32;
-
-  ptr0 = (orc_int8 *) d1;
-  ptr4 = (orc_int8 *) s1;
-
-
-  for (i = 0; i < n; i++) {
-    /* 0: ldresnearb */
-    var32 = ptr4[(p1 + i * p2) >> 16];
-    /* 1: storeb */
-    ptr0[i] = var32;
-  }
-
-}
-
-#else
-static void
-_backup_video_scale_orc_resample_nearest_u8 (OrcExecutor * ORC_RESTRICT ex)
-{
-  int i;
-  int n = ex->n;
-  orc_int8 *ORC_RESTRICT ptr0;
-  const orc_int8 *ORC_RESTRICT ptr4;
-  orc_int8 var32;
-
-  ptr0 = (orc_int8 *) ex->arrays[0];
-  ptr4 = (orc_int8 *) ex->arrays[4];
-
-
-  for (i = 0; i < n; i++) {
-    /* 0: ldresnearb */
-    var32 = ptr4[(ex->params[24] + i * ex->params[25]) >> 16];
-    /* 1: storeb */
-    ptr0[i] = var32;
-  }
-
-}
-
-void
-video_scale_orc_resample_nearest_u8 (guint8 * ORC_RESTRICT d1,
-    const guint8 * ORC_RESTRICT s1, int p1, int p2, int n)
-{
-  OrcExecutor _ex, *ex = &_ex;
-  static volatile int p_inited = 0;
-  static OrcCode *c = 0;
-  void (*func) (OrcExecutor *);
-
-  if (!p_inited) {
-    orc_once_mutex_lock ();
-    if (!p_inited) {
-      OrcProgram *p;
-
-#if 1
-      static const orc_uint8 bc[] = {
-        1, 9, 35, 118, 105, 100, 101, 111, 95, 115, 99, 97, 108, 101, 95, 111,
-        114, 99, 95, 114, 101, 115, 97, 109, 112, 108, 101, 95, 110, 101, 97,
-            114,
-        101, 115, 116, 95, 117, 56, 11, 1, 1, 12, 1, 1, 16, 4, 16, 4,
-        48, 0, 4, 24, 25, 2, 0,
-      };
-      p = orc_program_new_from_static_bytecode (bc);
-      orc_program_set_backup_function (p,
-          _backup_video_scale_orc_resample_nearest_u8);
-#else
-      p = orc_program_new ();
-      orc_program_set_name (p, "video_scale_orc_resample_nearest_u8");
-      orc_program_set_backup_function (p,
-          _backup_video_scale_orc_resample_nearest_u8);
-      orc_program_add_destination (p, 1, "d1");
-      orc_program_add_source (p, 1, "s1");
-      orc_program_add_parameter (p, 4, "p1");
-      orc_program_add_parameter (p, 4, "p2");
-
-      orc_program_append_2 (p, "ldresnearb", 0, ORC_VAR_D1, ORC_VAR_S1,
-          ORC_VAR_P1, ORC_VAR_P2);
-#endif
-
-      orc_program_compile (p);
-      c = orc_program_take_code (p);
-      orc_program_free (p);
-    }
-    p_inited = TRUE;
-    orc_once_mutex_unlock ();
-  }
-  ex->arrays[ORC_VAR_A2] = c;
-  ex->program = 0;
-
-  ex->n = n;
-  ex->arrays[ORC_VAR_D1] = d1;
-  ex->arrays[ORC_VAR_S1] = (void *) s1;
-  ex->params[ORC_VAR_P1] = p1;
-  ex->params[ORC_VAR_P2] = p2;
-
-  func = c->exec;
-  func (ex);
-}
-#endif
-
-
-/* video_scale_orc_resample_bilinear_u8 */
-#ifdef DISABLE_ORC
-void
-video_scale_orc_resample_bilinear_u8 (guint8 * ORC_RESTRICT d1,
-    const guint8 * ORC_RESTRICT s1, int p1, int p2, int n)
-{
-  int i;
-  orc_int8 *ORC_RESTRICT ptr0;
-  const orc_int8 *ORC_RESTRICT ptr4;
-  orc_int8 var32;
-
-  ptr0 = (orc_int8 *) d1;
-  ptr4 = (orc_int8 *) s1;
-
-
-  for (i = 0; i < n; i++) {
-    /* 0: ldreslinb */
-    {
-      int tmp = p1 + i * p2;
-      var32 =
-          ((orc_uint8) ptr4[tmp >> 16] * (256 - ((tmp >> 8) & 0xff)) +
-          (orc_uint8) ptr4[(tmp >> 16) + 1] * ((tmp >> 8) & 0xff)) >> 8;
-    }
-    /* 1: storeb */
-    ptr0[i] = var32;
-  }
-
-}
-
-#else
-static void
-_backup_video_scale_orc_resample_bilinear_u8 (OrcExecutor * ORC_RESTRICT ex)
-{
-  int i;
-  int n = ex->n;
-  orc_int8 *ORC_RESTRICT ptr0;
-  const orc_int8 *ORC_RESTRICT ptr4;
-  orc_int8 var32;
-
-  ptr0 = (orc_int8 *) ex->arrays[0];
-  ptr4 = (orc_int8 *) ex->arrays[4];
-
-
-  for (i = 0; i < n; i++) {
-    /* 0: ldreslinb */
-    {
-      int tmp = ex->params[24] + i * ex->params[25];
-      var32 =
-          ((orc_uint8) ptr4[tmp >> 16] * (256 - ((tmp >> 8) & 0xff)) +
-          (orc_uint8) ptr4[(tmp >> 16) + 1] * ((tmp >> 8) & 0xff)) >> 8;
-    }
-    /* 1: storeb */
-    ptr0[i] = var32;
-  }
-
-}
-
-void
-video_scale_orc_resample_bilinear_u8 (guint8 * ORC_RESTRICT d1,
-    const guint8 * ORC_RESTRICT s1, int p1, int p2, int n)
-{
-  OrcExecutor _ex, *ex = &_ex;
-  static volatile int p_inited = 0;
-  static OrcCode *c = 0;
-  void (*func) (OrcExecutor *);
-
-  if (!p_inited) {
-    orc_once_mutex_lock ();
-    if (!p_inited) {
-      OrcProgram *p;
-
-#if 1
-      static const orc_uint8 bc[] = {
-        1, 9, 36, 118, 105, 100, 101, 111, 95, 115, 99, 97, 108, 101, 95, 111,
-        114, 99, 95, 114, 101, 115, 97, 109, 112, 108, 101, 95, 98, 105, 108,
-            105,
-        110, 101, 97, 114, 95, 117, 56, 11, 1, 1, 12, 1, 1, 16, 4, 16,
-        4, 50, 0, 4, 24, 25, 2, 0,
-      };
-      p = orc_program_new_from_static_bytecode (bc);
-      orc_program_set_backup_function (p,
-          _backup_video_scale_orc_resample_bilinear_u8);
-#else
-      p = orc_program_new ();
-      orc_program_set_name (p, "video_scale_orc_resample_bilinear_u8");
-      orc_program_set_backup_function (p,
-          _backup_video_scale_orc_resample_bilinear_u8);
-      orc_program_add_destination (p, 1, "d1");
-      orc_program_add_source (p, 1, "s1");
-      orc_program_add_parameter (p, 4, "p1");
-      orc_program_add_parameter (p, 4, "p2");
-
-      orc_program_append_2 (p, "ldreslinb", 0, ORC_VAR_D1, ORC_VAR_S1,
-          ORC_VAR_P1, ORC_VAR_P2);
-#endif
-
-      orc_program_compile (p);
-      c = orc_program_take_code (p);
-      orc_program_free (p);
-    }
-    p_inited = TRUE;
-    orc_once_mutex_unlock ();
-  }
-  ex->arrays[ORC_VAR_A2] = c;
-  ex->program = 0;
-
-  ex->n = n;
-  ex->arrays[ORC_VAR_D1] = d1;
-  ex->arrays[ORC_VAR_S1] = (void *) s1;
-  ex->params[ORC_VAR_P1] = p1;
-  ex->params[ORC_VAR_P2] = p2;
-
-  func = c->exec;
-  func (ex);
-}
-#endif
-
-
-/* video_scale_orc_resample_nearest_u32 */
-#ifdef DISABLE_ORC
-void
-video_scale_orc_resample_nearest_u32 (guint8 * ORC_RESTRICT d1,
-    const guint8 * ORC_RESTRICT s1, int p1, int p2, int n)
-{
-  int i;
-  orc_union32 *ORC_RESTRICT ptr0;
-  const orc_union32 *ORC_RESTRICT ptr4;
-  orc_union32 var32;
-
-  ptr0 = (orc_union32 *) d1;
-  ptr4 = (orc_union32 *) s1;
-
-
-  for (i = 0; i < n; i++) {
-    /* 0: ldresnearl */
-    var32 = ptr4[(p1 + i * p2) >> 16];
-    /* 1: storel */
-    ptr0[i] = var32;
-  }
-
-}
-
-#else
-static void
-_backup_video_scale_orc_resample_nearest_u32 (OrcExecutor * ORC_RESTRICT ex)
-{
-  int i;
-  int n = ex->n;
-  orc_union32 *ORC_RESTRICT ptr0;
-  const orc_union32 *ORC_RESTRICT ptr4;
-  orc_union32 var32;
-
-  ptr0 = (orc_union32 *) ex->arrays[0];
-  ptr4 = (orc_union32 *) ex->arrays[4];
-
-
-  for (i = 0; i < n; i++) {
-    /* 0: ldresnearl */
-    var32 = ptr4[(ex->params[24] + i * ex->params[25]) >> 16];
-    /* 1: storel */
-    ptr0[i] = var32;
-  }
-
-}
-
-void
-video_scale_orc_resample_nearest_u32 (guint8 * ORC_RESTRICT d1,
-    const guint8 * ORC_RESTRICT s1, int p1, int p2, int n)
-{
-  OrcExecutor _ex, *ex = &_ex;
-  static volatile int p_inited = 0;
-  static OrcCode *c = 0;
-  void (*func) (OrcExecutor *);
-
-  if (!p_inited) {
-    orc_once_mutex_lock ();
-    if (!p_inited) {
-      OrcProgram *p;
-
-#if 1
-      static const orc_uint8 bc[] = {
-        1, 9, 36, 118, 105, 100, 101, 111, 95, 115, 99, 97, 108, 101, 95, 111,
-        114, 99, 95, 114, 101, 115, 97, 109, 112, 108, 101, 95, 110, 101, 97,
-            114,
-        101, 115, 116, 95, 117, 51, 50, 11, 4, 4, 12, 4, 4, 16, 4, 16,
-        4, 49, 0, 4, 24, 25, 2, 0,
-      };
-      p = orc_program_new_from_static_bytecode (bc);
-      orc_program_set_backup_function (p,
-          _backup_video_scale_orc_resample_nearest_u32);
-#else
-      p = orc_program_new ();
-      orc_program_set_name (p, "video_scale_orc_resample_nearest_u32");
-      orc_program_set_backup_function (p,
-          _backup_video_scale_orc_resample_nearest_u32);
-      orc_program_add_destination (p, 4, "d1");
-      orc_program_add_source (p, 4, "s1");
-      orc_program_add_parameter (p, 4, "p1");
-      orc_program_add_parameter (p, 4, "p2");
-
-      orc_program_append_2 (p, "ldresnearl", 0, ORC_VAR_D1, ORC_VAR_S1,
-          ORC_VAR_P1, ORC_VAR_P2);
-#endif
-
-      orc_program_compile (p);
-      c = orc_program_take_code (p);
-      orc_program_free (p);
-    }
-    p_inited = TRUE;
-    orc_once_mutex_unlock ();
-  }
-  ex->arrays[ORC_VAR_A2] = c;
-  ex->program = 0;
-
-  ex->n = n;
-  ex->arrays[ORC_VAR_D1] = d1;
-  ex->arrays[ORC_VAR_S1] = (void *) s1;
-  ex->params[ORC_VAR_P1] = p1;
-  ex->params[ORC_VAR_P2] = p2;
-
-  func = c->exec;
-  func (ex);
-}
-#endif
-
-
-/* video_scale_orc_resample_bilinear_u32 */
-#ifdef DISABLE_ORC
-void
-video_scale_orc_resample_bilinear_u32 (guint8 * ORC_RESTRICT d1,
-    const guint8 * ORC_RESTRICT s1, int p1, int p2, int n)
-{
-  int i;
-  orc_union32 *ORC_RESTRICT ptr0;
-  const orc_union32 *ORC_RESTRICT ptr4;
-  orc_union32 var32;
-
-  ptr0 = (orc_union32 *) d1;
-  ptr4 = (orc_union32 *) s1;
-
-
-  for (i = 0; i < n; i++) {
-    /* 0: ldreslinl */
-    {
-      int tmp = p1 + i * p2;
-      orc_union32 a = ptr4[tmp >> 16];
-      orc_union32 b = ptr4[(tmp >> 16) + 1];
-      var32.x4[0] =
-          ((orc_uint8) a.x4[0] * (256 - ((tmp >> 8) & 0xff)) +
-          (orc_uint8) b.x4[0] * ((tmp >> 8) & 0xff)) >> 8;
-      var32.x4[1] =
-          ((orc_uint8) a.x4[1] * (256 - ((tmp >> 8) & 0xff)) +
-          (orc_uint8) b.x4[1] * ((tmp >> 8) & 0xff)) >> 8;
-      var32.x4[2] =
-          ((orc_uint8) a.x4[2] * (256 - ((tmp >> 8) & 0xff)) +
-          (orc_uint8) b.x4[2] * ((tmp >> 8) & 0xff)) >> 8;
-      var32.x4[3] =
-          ((orc_uint8) a.x4[3] * (256 - ((tmp >> 8) & 0xff)) +
-          (orc_uint8) b.x4[3] * ((tmp >> 8) & 0xff)) >> 8;
-    }
-    /* 1: storel */
-    ptr0[i] = var32;
-  }
-
-}
-
-#else
-static void
-_backup_video_scale_orc_resample_bilinear_u32 (OrcExecutor * ORC_RESTRICT ex)
-{
-  int i;
-  int n = ex->n;
-  orc_union32 *ORC_RESTRICT ptr0;
-  const orc_union32 *ORC_RESTRICT ptr4;
-  orc_union32 var32;
-
-  ptr0 = (orc_union32 *) ex->arrays[0];
-  ptr4 = (orc_union32 *) ex->arrays[4];
-
-
-  for (i = 0; i < n; i++) {
-    /* 0: ldreslinl */
-    {
-      int tmp = ex->params[24] + i * ex->params[25];
-      orc_union32 a = ptr4[tmp >> 16];
-      orc_union32 b = ptr4[(tmp >> 16) + 1];
-      var32.x4[0] =
-          ((orc_uint8) a.x4[0] * (256 - ((tmp >> 8) & 0xff)) +
-          (orc_uint8) b.x4[0] * ((tmp >> 8) & 0xff)) >> 8;
-      var32.x4[1] =
-          ((orc_uint8) a.x4[1] * (256 - ((tmp >> 8) & 0xff)) +
-          (orc_uint8) b.x4[1] * ((tmp >> 8) & 0xff)) >> 8;
-      var32.x4[2] =
-          ((orc_uint8) a.x4[2] * (256 - ((tmp >> 8) & 0xff)) +
-          (orc_uint8) b.x4[2] * ((tmp >> 8) & 0xff)) >> 8;
-      var32.x4[3] =
-          ((orc_uint8) a.x4[3] * (256 - ((tmp >> 8) & 0xff)) +
-          (orc_uint8) b.x4[3] * ((tmp >> 8) & 0xff)) >> 8;
-    }
-    /* 1: storel */
-    ptr0[i] = var32;
-  }
-
-}
-
-void
-video_scale_orc_resample_bilinear_u32 (guint8 * ORC_RESTRICT d1,
-    const guint8 * ORC_RESTRICT s1, int p1, int p2, int n)
-{
-  OrcExecutor _ex, *ex = &_ex;
-  static volatile int p_inited = 0;
-  static OrcCode *c = 0;
-  void (*func) (OrcExecutor *);
-
-  if (!p_inited) {
-    orc_once_mutex_lock ();
-    if (!p_inited) {
-      OrcProgram *p;
-
-#if 1
-      static const orc_uint8 bc[] = {
-        1, 9, 37, 118, 105, 100, 101, 111, 95, 115, 99, 97, 108, 101, 95, 111,
-        114, 99, 95, 114, 101, 115, 97, 109, 112, 108, 101, 95, 98, 105, 108,
-            105,
-        110, 101, 97, 114, 95, 117, 51, 50, 11, 4, 4, 12, 4, 4, 16, 4,
-        16, 4, 51, 0, 4, 24, 25, 2, 0,
-      };
-      p = orc_program_new_from_static_bytecode (bc);
-      orc_program_set_backup_function (p,
-          _backup_video_scale_orc_resample_bilinear_u32);
-#else
-      p = orc_program_new ();
-      orc_program_set_name (p, "video_scale_orc_resample_bilinear_u32");
-      orc_program_set_backup_function (p,
-          _backup_video_scale_orc_resample_bilinear_u32);
-      orc_program_add_destination (p, 4, "d1");
-      orc_program_add_source (p, 4, "s1");
-      orc_program_add_parameter (p, 4, "p1");
-      orc_program_add_parameter (p, 4, "p2");
-
-      orc_program_append_2 (p, "ldreslinl", 0, ORC_VAR_D1, ORC_VAR_S1,
-          ORC_VAR_P1, ORC_VAR_P2);
-#endif
-
-      orc_program_compile (p);
-      c = orc_program_take_code (p);
-      orc_program_free (p);
-    }
-    p_inited = TRUE;
-    orc_once_mutex_unlock ();
-  }
-  ex->arrays[ORC_VAR_A2] = c;
-  ex->program = 0;
-
-  ex->n = n;
-  ex->arrays[ORC_VAR_D1] = d1;
-  ex->arrays[ORC_VAR_S1] = (void *) s1;
-  ex->params[ORC_VAR_P1] = p1;
-  ex->params[ORC_VAR_P2] = p2;
-
-  func = c->exec;
-  func (ex);
-}
-#endif
-
-
-/* video_scale_orc_resample_merge_bilinear_u32 */
-#ifdef DISABLE_ORC
-void
-video_scale_orc_resample_merge_bilinear_u32 (guint8 * ORC_RESTRICT d1,
-    guint8 * ORC_RESTRICT d2, const guint8 * ORC_RESTRICT s1,
-    const guint8 * ORC_RESTRICT s2, int p1, int p2, int p3, int n)
-{
-  int i;
-  orc_union32 *ORC_RESTRICT ptr0;
-  orc_union32 *ORC_RESTRICT ptr1;
-  const orc_union32 *ORC_RESTRICT ptr4;
-  const orc_union32 *ORC_RESTRICT ptr5;
-  orc_union64 var37;
-  orc_union32 var38;
-  orc_union32 var39;
-  orc_union32 var40;
-  orc_union64 var41;
-  orc_union64 var42;
-  orc_union64 var43;
-  orc_union64 var44;
-  orc_union32 var45;
-
-  ptr0 = (orc_union32 *) d1;
-  ptr1 = (orc_union32 *) d2;
-  ptr4 = (orc_union32 *) s1;
-  ptr5 = (orc_union32 *) s2;
-
-  /* 6: loadpw */
-  var37.x4[0] = p1;
-  var37.x4[1] = p1;
-  var37.x4[2] = p1;
-  var37.x4[3] = p1;
-
-  for (i = 0; i < n; i++) {
-    /* 0: ldreslinl */
-    {
-      int tmp = p2 + i * p3;
-      orc_union32 a = ptr5[tmp >> 16];
-      orc_union32 b = ptr5[(tmp >> 16) + 1];
-      var39.x4[0] =
-          ((orc_uint8) a.x4[0] * (256 - ((tmp >> 8) & 0xff)) +
-          (orc_uint8) b.x4[0] * ((tmp >> 8) & 0xff)) >> 8;
-      var39.x4[1] =
-          ((orc_uint8) a.x4[1] * (256 - ((tmp >> 8) & 0xff)) +
-          (orc_uint8) b.x4[1] * ((tmp >> 8) & 0xff)) >> 8;
-      var39.x4[2] =
-          ((orc_uint8) a.x4[2] * (256 - ((tmp >> 8) & 0xff)) +
-          (orc_uint8) b.x4[2] * ((tmp >> 8) & 0xff)) >> 8;
-      var39.x4[3] =
-          ((orc_uint8) a.x4[3] * (256 - ((tmp >> 8) & 0xff)) +
-          (orc_uint8) b.x4[3] * ((tmp >> 8) & 0xff)) >> 8;
-    }
-    /* 1: storel */
-    ptr1[i] = var39;
-    /* 2: loadl */
-    var40 = ptr4[i];
-    /* 3: convubw */
-    var41.x4[0] = (orc_uint8) var40.x4[0];
-    var41.x4[1] = (orc_uint8) var40.x4[1];
-    var41.x4[2] = (orc_uint8) var40.x4[2];
-    var41.x4[3] = (orc_uint8) var40.x4[3];
-    /* 4: convubw */
-    var42.x4[0] = (orc_uint8) var39.x4[0];
-    var42.x4[1] = (orc_uint8) var39.x4[1];
-    var42.x4[2] = (orc_uint8) var39.x4[2];
-    var42.x4[3] = (orc_uint8) var39.x4[3];
-    /* 5: subw */
-    var43.x4[0] = var42.x4[0] - var41.x4[0];
-    var43.x4[1] = var42.x4[1] - var41.x4[1];
-    var43.x4[2] = var42.x4[2] - var41.x4[2];
-    var43.x4[3] = var42.x4[3] - var41.x4[3];
-    /* 7: mullw */
-    var44.x4[0] = (var43.x4[0] * var37.x4[0]) & 0xffff;
-    var44.x4[1] = (var43.x4[1] * var37.x4[1]) & 0xffff;
-    var44.x4[2] = (var43.x4[2] * var37.x4[2]) & 0xffff;
-    var44.x4[3] = (var43.x4[3] * var37.x4[3]) & 0xffff;
-    /* 8: convhwb */
-    var45.x4[0] = ((orc_uint16) var44.x4[0]) >> 8;
-    var45.x4[1] = ((orc_uint16) var44.x4[1]) >> 8;
-    var45.x4[2] = ((orc_uint16) var44.x4[2]) >> 8;
-    var45.x4[3] = ((orc_uint16) var44.x4[3]) >> 8;
-    /* 9: addb */
-    var38.x4[0] = var45.x4[0] + var40.x4[0];
-    var38.x4[1] = var45.x4[1] + var40.x4[1];
-    var38.x4[2] = var45.x4[2] + var40.x4[2];
-    var38.x4[3] = var45.x4[3] + var40.x4[3];
-    /* 10: storel */
-    ptr0[i] = var38;
-  }
-
-}
-
-#else
-static void
-_backup_video_scale_orc_resample_merge_bilinear_u32 (OrcExecutor *
-    ORC_RESTRICT ex)
-{
-  int i;
-  int n = ex->n;
-  orc_union32 *ORC_RESTRICT ptr0;
-  orc_union32 *ORC_RESTRICT ptr1;
-  const orc_union32 *ORC_RESTRICT ptr4;
-  const orc_union32 *ORC_RESTRICT ptr5;
-  orc_union64 var37;
-  orc_union32 var38;
-  orc_union32 var39;
-  orc_union32 var40;
-  orc_union64 var41;
-  orc_union64 var42;
-  orc_union64 var43;
-  orc_union64 var44;
-  orc_union32 var45;
-
-  ptr0 = (orc_union32 *) ex->arrays[0];
-  ptr1 = (orc_union32 *) ex->arrays[1];
-  ptr4 = (orc_union32 *) ex->arrays[4];
-  ptr5 = (orc_union32 *) ex->arrays[5];
-
-  /* 6: loadpw */
-  var37.x4[0] = ex->params[24];
-  var37.x4[1] = ex->params[24];
-  var37.x4[2] = ex->params[24];
-  var37.x4[3] = ex->params[24];
-
-  for (i = 0; i < n; i++) {
-    /* 0: ldreslinl */
-    {
-      int tmp = ex->params[25] + i * ex->params[26];
-      orc_union32 a = ptr5[tmp >> 16];
-      orc_union32 b = ptr5[(tmp >> 16) + 1];
-      var39.x4[0] =
-          ((orc_uint8) a.x4[0] * (256 - ((tmp >> 8) & 0xff)) +
-          (orc_uint8) b.x4[0] * ((tmp >> 8) & 0xff)) >> 8;
-      var39.x4[1] =
-          ((orc_uint8) a.x4[1] * (256 - ((tmp >> 8) & 0xff)) +
-          (orc_uint8) b.x4[1] * ((tmp >> 8) & 0xff)) >> 8;
-      var39.x4[2] =
-          ((orc_uint8) a.x4[2] * (256 - ((tmp >> 8) & 0xff)) +
-          (orc_uint8) b.x4[2] * ((tmp >> 8) & 0xff)) >> 8;
-      var39.x4[3] =
-          ((orc_uint8) a.x4[3] * (256 - ((tmp >> 8) & 0xff)) +
-          (orc_uint8) b.x4[3] * ((tmp >> 8) & 0xff)) >> 8;
-    }
-    /* 1: storel */
-    ptr1[i] = var39;
-    /* 2: loadl */
-    var40 = ptr4[i];
-    /* 3: convubw */
-    var41.x4[0] = (orc_uint8) var40.x4[0];
-    var41.x4[1] = (orc_uint8) var40.x4[1];
-    var41.x4[2] = (orc_uint8) var40.x4[2];
-    var41.x4[3] = (orc_uint8) var40.x4[3];
-    /* 4: convubw */
-    var42.x4[0] = (orc_uint8) var39.x4[0];
-    var42.x4[1] = (orc_uint8) var39.x4[1];
-    var42.x4[2] = (orc_uint8) var39.x4[2];
-    var42.x4[3] = (orc_uint8) var39.x4[3];
-    /* 5: subw */
-    var43.x4[0] = var42.x4[0] - var41.x4[0];
-    var43.x4[1] = var42.x4[1] - var41.x4[1];
-    var43.x4[2] = var42.x4[2] - var41.x4[2];
-    var43.x4[3] = var42.x4[3] - var41.x4[3];
-    /* 7: mullw */
-    var44.x4[0] = (var43.x4[0] * var37.x4[0]) & 0xffff;
-    var44.x4[1] = (var43.x4[1] * var37.x4[1]) & 0xffff;
-    var44.x4[2] = (var43.x4[2] * var37.x4[2]) & 0xffff;
-    var44.x4[3] = (var43.x4[3] * var37.x4[3]) & 0xffff;
-    /* 8: convhwb */
-    var45.x4[0] = ((orc_uint16) var44.x4[0]) >> 8;
-    var45.x4[1] = ((orc_uint16) var44.x4[1]) >> 8;
-    var45.x4[2] = ((orc_uint16) var44.x4[2]) >> 8;
-    var45.x4[3] = ((orc_uint16) var44.x4[3]) >> 8;
-    /* 9: addb */
-    var38.x4[0] = var45.x4[0] + var40.x4[0];
-    var38.x4[1] = var45.x4[1] + var40.x4[1];
-    var38.x4[2] = var45.x4[2] + var40.x4[2];
-    var38.x4[3] = var45.x4[3] + var40.x4[3];
-    /* 10: storel */
-    ptr0[i] = var38;
-  }
-
-}
-
-void
-video_scale_orc_resample_merge_bilinear_u32 (guint8 * ORC_RESTRICT d1,
-    guint8 * ORC_RESTRICT d2, const guint8 * ORC_RESTRICT s1,
-    const guint8 * ORC_RESTRICT s2, int p1, int p2, int p3, int n)
-{
-  OrcExecutor _ex, *ex = &_ex;
-  static volatile int p_inited = 0;
-  static OrcCode *c = 0;
-  void (*func) (OrcExecutor *);
-
-  if (!p_inited) {
-    orc_once_mutex_lock ();
-    if (!p_inited) {
-      OrcProgram *p;
-
-#if 1
-      static const orc_uint8 bc[] = {
-        1, 9, 43, 118, 105, 100, 101, 111, 95, 115, 99, 97, 108, 101, 95, 111,
-        114, 99, 95, 114, 101, 115, 97, 109, 112, 108, 101, 95, 109, 101, 114,
-            103,
-        101, 95, 98, 105, 108, 105, 110, 101, 97, 114, 95, 117, 51, 50, 11, 4,
-        4, 11, 4, 4, 12, 4, 4, 12, 4, 4, 16, 4, 16, 4, 16, 4,
-        20, 4, 20, 4, 20, 4, 20, 8, 20, 8, 51, 33, 5, 25, 26, 128,
-        1, 33, 113, 32, 4, 21, 2, 150, 35, 32, 21, 2, 150, 36, 33, 21,
-        2, 98, 36, 36, 35, 21, 2, 89, 36, 36, 24, 21, 2, 158, 34, 36,
-        21, 2, 33, 0, 34, 32, 2, 0,
-      };
-      p = orc_program_new_from_static_bytecode (bc);
-      orc_program_set_backup_function (p,
-          _backup_video_scale_orc_resample_merge_bilinear_u32);
-#else
-      p = orc_program_new ();
-      orc_program_set_name (p, "video_scale_orc_resample_merge_bilinear_u32");
-      orc_program_set_backup_function (p,
-          _backup_video_scale_orc_resample_merge_bilinear_u32);
-      orc_program_add_destination (p, 4, "d1");
-      orc_program_add_destination (p, 4, "d2");
-      orc_program_add_source (p, 4, "s1");
-      orc_program_add_source (p, 4, "s2");
-      orc_program_add_parameter (p, 4, "p1");
-      orc_program_add_parameter (p, 4, "p2");
-      orc_program_add_parameter (p, 4, "p3");
-      orc_program_add_temporary (p, 4, "t1");
-      orc_program_add_temporary (p, 4, "t2");
-      orc_program_add_temporary (p, 4, "t3");
-      orc_program_add_temporary (p, 8, "t4");
-      orc_program_add_temporary (p, 8, "t5");
-
-      orc_program_append_2 (p, "ldreslinl", 0, ORC_VAR_T2, ORC_VAR_S2,
-          ORC_VAR_P2, ORC_VAR_P3);
-      orc_program_append_2 (p, "storel", 0, ORC_VAR_D2, ORC_VAR_T2, ORC_VAR_D1,
-          ORC_VAR_D1);
-      orc_program_append_2 (p, "loadl", 0, ORC_VAR_T1, ORC_VAR_S1, ORC_VAR_D1,
-          ORC_VAR_D1);
-      orc_program_append_2 (p, "convubw", 2, ORC_VAR_T4, ORC_VAR_T1, ORC_VAR_D1,
-          ORC_VAR_D1);
-      orc_program_append_2 (p, "convubw", 2, ORC_VAR_T5, ORC_VAR_T2, ORC_VAR_D1,
-          ORC_VAR_D1);
-      orc_program_append_2 (p, "subw", 2, ORC_VAR_T5, ORC_VAR_T5, ORC_VAR_T4,
-          ORC_VAR_D1);
-      orc_program_append_2 (p, "mullw", 2, ORC_VAR_T5, ORC_VAR_T5, ORC_VAR_P1,
-          ORC_VAR_D1);
-      orc_program_append_2 (p, "convhwb", 2, ORC_VAR_T3, ORC_VAR_T5, ORC_VAR_D1,
-          ORC_VAR_D1);
-      orc_program_append_2 (p, "addb", 2, ORC_VAR_D1, ORC_VAR_T3, ORC_VAR_T1,
-          ORC_VAR_D1);
-#endif
-
-      orc_program_compile (p);
-      c = orc_program_take_code (p);
-      orc_program_free (p);
-    }
-    p_inited = TRUE;
-    orc_once_mutex_unlock ();
-  }
-  ex->arrays[ORC_VAR_A2] = c;
-  ex->program = 0;
-
-  ex->n = n;
-  ex->arrays[ORC_VAR_D1] = d1;
-  ex->arrays[ORC_VAR_D2] = d2;
-  ex->arrays[ORC_VAR_S1] = (void *) s1;
-  ex->arrays[ORC_VAR_S2] = (void *) s2;
-  ex->params[ORC_VAR_P1] = p1;
-  ex->params[ORC_VAR_P2] = p2;
-  ex->params[ORC_VAR_P3] = p3;
-
-  func = c->exec;
-  func (ex);
-}
-#endif
-
-
-/* video_scale_orc_merge_bicubic_u8 */
-#ifdef DISABLE_ORC
-void
-video_scale_orc_merge_bicubic_u8 (guint8 * ORC_RESTRICT d1,
-    const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2,
-    const guint8 * ORC_RESTRICT s3, const guint8 * ORC_RESTRICT s4, int p1,
-    int p2, int p3, int p4, int n)
-{
-  int i;
-  orc_int8 *ORC_RESTRICT ptr0;
-  const orc_int8 *ORC_RESTRICT ptr4;
-  const orc_int8 *ORC_RESTRICT ptr5;
-  const orc_int8 *ORC_RESTRICT ptr6;
-  const orc_int8 *ORC_RESTRICT ptr7;
-  orc_int8 var34;
-  orc_int8 var35;
-  orc_int8 var36;
-  orc_int8 var37;
-  orc_int8 var38;
-  orc_int8 var39;
-  orc_int8 var40;
-  orc_int8 var41;
-#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
-  volatile orc_union16 var42;
-#else
-  orc_union16 var42;
-#endif
-  orc_int8 var43;
-  orc_union16 var44;
-  orc_union16 var45;
-  orc_union16 var46;
-  orc_union16 var47;
-  orc_union16 var48;
-  orc_union16 var49;
-  orc_union16 var50;
-  orc_union16 var51;
-  orc_union16 var52;
-
-  ptr0 = (orc_int8 *) d1;
-  ptr4 = (orc_int8 *) s1;
-  ptr5 = (orc_int8 *) s2;
-  ptr6 = (orc_int8 *) s3;
-  ptr7 = (orc_int8 *) s4;
-
-  /* 1: loadpb */
-  var35 = p2;
-  /* 4: loadpb */
-  var37 = p3;
-  /* 8: loadpb */
-  var39 = p1;
-  /* 12: loadpb */
-  var41 = p4;
-  /* 15: loadpw */
-  var42.i = (int) 0x00000020;   /* 32 or 1.58101e-322f */
-
-  for (i = 0; i < n; i++) {
-    /* 0: loadb */
-    var34 = ptr5[i];
-    /* 2: mulubw */
-    var44.i =
-        ((orc_uint16) ((orc_uint8) var34)) * ((orc_uint16) ((orc_uint8) var35));
-    /* 3: loadb */
-    var36 = ptr6[i];
-    /* 5: mulubw */
-    var45.i =
-        ((orc_uint16) ((orc_uint8) var36)) * ((orc_uint16) ((orc_uint8) var37));
-    /* 6: addw */
-    var46.i = var44.i + var45.i;
-    /* 7: loadb */
-    var38 = ptr4[i];
-    /* 9: mulubw */
-    var47.i =
-        ((orc_uint16) ((orc_uint8) var38)) * ((orc_uint16) ((orc_uint8) var39));
-    /* 10: subw */
-    var48.i = var46.i - var47.i;
-    /* 11: loadb */
-    var40 = ptr7[i];
-    /* 13: mulubw */
-    var49.i =
-        ((orc_uint16) ((orc_uint8) var40)) * ((orc_uint16) ((orc_uint8) var41));
-    /* 14: subw */
-    var50.i = var48.i - var49.i;
-    /* 16: addw */
-    var51.i = var50.i + var42.i;
-    /* 17: shrsw */
-    var52.i = var51.i >> 6;
-    /* 18: convsuswb */
-    var43 = ORC_CLAMP_UB (var52.i);
-    /* 19: storeb */
-    ptr0[i] = var43;
-  }
-
-}
-
-#else
-static void
-_backup_video_scale_orc_merge_bicubic_u8 (OrcExecutor * ORC_RESTRICT ex)
-{
-  int i;
-  int n = ex->n;
-  orc_int8 *ORC_RESTRICT ptr0;
-  const orc_int8 *ORC_RESTRICT ptr4;
-  const orc_int8 *ORC_RESTRICT ptr5;
-  const orc_int8 *ORC_RESTRICT ptr6;
-  const orc_int8 *ORC_RESTRICT ptr7;
-  orc_int8 var34;
-  orc_int8 var35;
-  orc_int8 var36;
-  orc_int8 var37;
-  orc_int8 var38;
-  orc_int8 var39;
-  orc_int8 var40;
-  orc_int8 var41;
-#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
-  volatile orc_union16 var42;
-#else
-  orc_union16 var42;
-#endif
-  orc_int8 var43;
-  orc_union16 var44;
-  orc_union16 var45;
-  orc_union16 var46;
-  orc_union16 var47;
-  orc_union16 var48;
-  orc_union16 var49;
-  orc_union16 var50;
-  orc_union16 var51;
-  orc_union16 var52;
-
-  ptr0 = (orc_int8 *) ex->arrays[0];
-  ptr4 = (orc_int8 *) ex->arrays[4];
-  ptr5 = (orc_int8 *) ex->arrays[5];
-  ptr6 = (orc_int8 *) ex->arrays[6];
-  ptr7 = (orc_int8 *) ex->arrays[7];
-
-  /* 1: loadpb */
-  var35 = ex->params[25];
-  /* 4: loadpb */
-  var37 = ex->params[26];
-  /* 8: loadpb */
-  var39 = ex->params[24];
-  /* 12: loadpb */
-  var41 = ex->params[27];
-  /* 15: loadpw */
-  var42.i = (int) 0x00000020;   /* 32 or 1.58101e-322f */
-
-  for (i = 0; i < n; i++) {
-    /* 0: loadb */
-    var34 = ptr5[i];
-    /* 2: mulubw */
-    var44.i =
-        ((orc_uint16) ((orc_uint8) var34)) * ((orc_uint16) ((orc_uint8) var35));
-    /* 3: loadb */
-    var36 = ptr6[i];
-    /* 5: mulubw */
-    var45.i =
-        ((orc_uint16) ((orc_uint8) var36)) * ((orc_uint16) ((orc_uint8) var37));
-    /* 6: addw */
-    var46.i = var44.i + var45.i;
-    /* 7: loadb */
-    var38 = ptr4[i];
-    /* 9: mulubw */
-    var47.i =
-        ((orc_uint16) ((orc_uint8) var38)) * ((orc_uint16) ((orc_uint8) var39));
-    /* 10: subw */
-    var48.i = var46.i - var47.i;
-    /* 11: loadb */
-    var40 = ptr7[i];
-    /* 13: mulubw */
-    var49.i =
-        ((orc_uint16) ((orc_uint8) var40)) * ((orc_uint16) ((orc_uint8) var41));
-    /* 14: subw */
-    var50.i = var48.i - var49.i;
-    /* 16: addw */
-    var51.i = var50.i + var42.i;
-    /* 17: shrsw */
-    var52.i = var51.i >> 6;
-    /* 18: convsuswb */
-    var43 = ORC_CLAMP_UB (var52.i);
-    /* 19: storeb */
-    ptr0[i] = var43;
-  }
-
-}
-
-void
-video_scale_orc_merge_bicubic_u8 (guint8 * ORC_RESTRICT d1,
-    const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2,
-    const guint8 * ORC_RESTRICT s3, const guint8 * ORC_RESTRICT s4, int p1,
-    int p2, int p3, int p4, int n)
-{
-  OrcExecutor _ex, *ex = &_ex;
-  static volatile int p_inited = 0;
-  static OrcCode *c = 0;
-  void (*func) (OrcExecutor *);
-
-  if (!p_inited) {
-    orc_once_mutex_lock ();
-    if (!p_inited) {
-      OrcProgram *p;
-
-#if 1
-      static const orc_uint8 bc[] = {
-        1, 9, 32, 118, 105, 100, 101, 111, 95, 115, 99, 97, 108, 101, 95, 111,
-        114, 99, 95, 109, 101, 114, 103, 101, 95, 98, 105, 99, 117, 98, 105, 99,
-        95, 117, 56, 11, 1, 1, 12, 1, 1, 12, 1, 1, 12, 1, 1, 12,
-        1, 1, 14, 2, 32, 0, 0, 0, 14, 2, 6, 0, 0, 0, 16, 4,
-        16, 4, 16, 4, 16, 4, 20, 2, 20, 2, 175, 32, 5, 25, 175, 33,
-        6, 26, 70, 32, 32, 33, 175, 33, 4, 24, 98, 32, 32, 33, 175, 33,
-        7, 27, 98, 32, 32, 33, 70, 32, 32, 16, 94, 32, 32, 17, 160, 0,
-        32, 2, 0,
-      };
-      p = orc_program_new_from_static_bytecode (bc);
-      orc_program_set_backup_function (p,
-          _backup_video_scale_orc_merge_bicubic_u8);
-#else
-      p = orc_program_new ();
-      orc_program_set_name (p, "video_scale_orc_merge_bicubic_u8");
-      orc_program_set_backup_function (p,
-          _backup_video_scale_orc_merge_bicubic_u8);
-      orc_program_add_destination (p, 1, "d1");
-      orc_program_add_source (p, 1, "s1");
-      orc_program_add_source (p, 1, "s2");
-      orc_program_add_source (p, 1, "s3");
-      orc_program_add_source (p, 1, "s4");
-      orc_program_add_constant (p, 2, 0x00000020, "c1");
-      orc_program_add_constant (p, 2, 0x00000006, "c2");
-      orc_program_add_parameter (p, 4, "p1");
-      orc_program_add_parameter (p, 4, "p2");
-      orc_program_add_parameter (p, 4, "p3");
-      orc_program_add_parameter (p, 4, "p4");
-      orc_program_add_temporary (p, 2, "t1");
-      orc_program_add_temporary (p, 2, "t2");
-
-      orc_program_append_2 (p, "mulubw", 0, ORC_VAR_T1, ORC_VAR_S2, ORC_VAR_P2,
-          ORC_VAR_D1);
-      orc_program_append_2 (p, "mulubw", 0, ORC_VAR_T2, ORC_VAR_S3, ORC_VAR_P3,
-          ORC_VAR_D1);
-      orc_program_append_2 (p, "addw", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_T2,
-          ORC_VAR_D1);
-      orc_program_append_2 (p, "mulubw", 0, ORC_VAR_T2, ORC_VAR_S1, ORC_VAR_P1,
-          ORC_VAR_D1);
-      orc_program_append_2 (p, "subw", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_T2,
-          ORC_VAR_D1);
-      orc_program_append_2 (p, "mulubw", 0, ORC_VAR_T2, ORC_VAR_S4, ORC_VAR_P4,
-          ORC_VAR_D1);
-      orc_program_append_2 (p, "subw", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_T2,
-          ORC_VAR_D1);
-      orc_program_append_2 (p, "addw", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_C1,
-          ORC_VAR_D1);
-      orc_program_append_2 (p, "shrsw", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_C2,
-          ORC_VAR_D1);
-      orc_program_append_2 (p, "convsuswb", 0, ORC_VAR_D1, ORC_VAR_T1,
-          ORC_VAR_D1, ORC_VAR_D1);
-#endif
-
-      orc_program_compile (p);
-      c = orc_program_take_code (p);
-      orc_program_free (p);
-    }
-    p_inited = TRUE;
-    orc_once_mutex_unlock ();
-  }
-  ex->arrays[ORC_VAR_A2] = c;
-  ex->program = 0;
-
-  ex->n = n;
-  ex->arrays[ORC_VAR_D1] = d1;
-  ex->arrays[ORC_VAR_S1] = (void *) s1;
-  ex->arrays[ORC_VAR_S2] = (void *) s2;
-  ex->arrays[ORC_VAR_S3] = (void *) s3;
-  ex->arrays[ORC_VAR_S4] = (void *) s4;
-  ex->params[ORC_VAR_P1] = p1;
-  ex->params[ORC_VAR_P2] = p2;
-  ex->params[ORC_VAR_P3] = p3;
-  ex->params[ORC_VAR_P4] = p4;
-
-  func = c->exec;
-  func (ex);
-}
-#endif
diff --git a/gst/videoscale/gstvideoscaleorc-dist.h b/gst/videoscale/gstvideoscaleorc-dist.h
deleted file mode 100644
index 868f07b..0000000
--- a/gst/videoscale/gstvideoscaleorc-dist.h
+++ /dev/null
@@ -1,104 +0,0 @@
-
-/* autogenerated from gstvideoscaleorc.orc */
-
-#ifndef _GSTVIDEOSCALEORC_H_
-#define _GSTVIDEOSCALEORC_H_
-
-#include <glib.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-
-
-#ifndef _ORC_INTEGER_TYPEDEFS_
-#define _ORC_INTEGER_TYPEDEFS_
-#if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
-#include <stdint.h>
-typedef int8_t orc_int8;
-typedef int16_t orc_int16;
-typedef int32_t orc_int32;
-typedef int64_t orc_int64;
-typedef uint8_t orc_uint8;
-typedef uint16_t orc_uint16;
-typedef uint32_t orc_uint32;
-typedef uint64_t orc_uint64;
-#define ORC_UINT64_C(x) UINT64_C(x)
-#elif defined(_MSC_VER)
-typedef signed __int8 orc_int8;
-typedef signed __int16 orc_int16;
-typedef signed __int32 orc_int32;
-typedef signed __int64 orc_int64;
-typedef unsigned __int8 orc_uint8;
-typedef unsigned __int16 orc_uint16;
-typedef unsigned __int32 orc_uint32;
-typedef unsigned __int64 orc_uint64;
-#define ORC_UINT64_C(x) (x##Ui64)
-#define inline __inline
-#else
-#include <limits.h>
-typedef signed char orc_int8;
-typedef short orc_int16;
-typedef int orc_int32;
-typedef unsigned char orc_uint8;
-typedef unsigned short orc_uint16;
-typedef unsigned int orc_uint32;
-#if INT_MAX == LONG_MAX
-typedef long long orc_int64;
-typedef unsigned long long orc_uint64;
-#define ORC_UINT64_C(x) (x##ULL)
-#else
-typedef long orc_int64;
-typedef unsigned long orc_uint64;
-#define ORC_UINT64_C(x) (x##UL)
-#endif
-#endif
-typedef union { orc_int16 i; orc_int8 x2[2]; } orc_union16;
-typedef union { orc_int32 i; float f; orc_int16 x2[2]; orc_int8 x4[4]; } orc_union32;
-typedef union { orc_int64 i; double f; orc_int32 x2[2]; float x2f[2]; orc_int16 x4[4]; } orc_union64;
-#endif
-#ifndef ORC_RESTRICT
-#if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
-#define ORC_RESTRICT restrict
-#elif defined(__GNUC__) && __GNUC__ >= 4
-#define ORC_RESTRICT __restrict__
-#else
-#define ORC_RESTRICT
-#endif
-#endif
-
-#ifndef ORC_INTERNAL
-#if defined(__SUNPRO_C) && (__SUNPRO_C >= 0x590)
-#define ORC_INTERNAL __attribute__((visibility("hidden")))
-#elif defined(__SUNPRO_C) && (__SUNPRO_C >= 0x550)
-#define ORC_INTERNAL __hidden
-#elif defined (__GNUC__)
-#define ORC_INTERNAL __attribute__((visibility("hidden")))
-#else
-#define ORC_INTERNAL
-#endif
-#endif
-
-void video_scale_orc_merge_linear_u8 (orc_uint8 * ORC_RESTRICT d1, const orc_uint8 * ORC_RESTRICT s1, const orc_uint8 * ORC_RESTRICT s2, int p1, int n);
-void video_scale_orc_merge_linear_u16 (orc_uint16 * ORC_RESTRICT d1, const orc_uint16 * ORC_RESTRICT s1, const orc_uint16 * ORC_RESTRICT s2, int p1, int p2, int n);
-void video_scale_orc_splat_u16 (orc_uint16 * ORC_RESTRICT d1, int p1, int n);
-void video_scale_orc_splat_u32 (orc_uint32 * ORC_RESTRICT d1, int p1, int n);
-void video_scale_orc_splat_u64 (orc_uint64 * ORC_RESTRICT d1, orc_int64 p1, int n);
-void video_scale_orc_downsample_u8 (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1, int n);
-void video_scale_orc_downsample_u16 (guint16 * ORC_RESTRICT d1, const guint16 * ORC_RESTRICT s1, int n);
-void video_scale_orc_downsample_u32 (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1, int n);
-void video_scale_orc_downsample_yuyv (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1, int n);
-void video_scale_orc_resample_nearest_u8 (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1, int p1, int p2, int n);
-void video_scale_orc_resample_bilinear_u8 (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1, int p1, int p2, int n);
-void video_scale_orc_resample_nearest_u32 (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1, int p1, int p2, int n);
-void video_scale_orc_resample_bilinear_u32 (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1, int p1, int p2, int n);
-void video_scale_orc_resample_merge_bilinear_u32 (guint8 * ORC_RESTRICT d1, guint8 * ORC_RESTRICT d2, const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, int p1, int p2, int p3, int n);
-void video_scale_orc_merge_bicubic_u8 (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, const guint8 * ORC_RESTRICT s3, const guint8 * ORC_RESTRICT s4, int p1, int p2, int p3, int p4, int n);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
-
diff --git a/gst/videoscale/gstvideoscaleorc.orc b/gst/videoscale/gstvideoscaleorc.orc
deleted file mode 100644
index 06e8c9b..0000000
--- a/gst/videoscale/gstvideoscaleorc.orc
+++ /dev/null
@@ -1,197 +0,0 @@
-
-.function video_scale_orc_merge_linear_u8
-.dest 1 d1
-.source 1 s1
-.source 1 s2
-.param 1 p1
-.temp 2 t1
-.temp 2 t2
-.temp 1 a
-.temp 1 t
-
-loadb a, s1
-convubw t1, s1
-convubw t2, s2
-subw t2, t2, t1
-mullw t2, t2, p1
-addw t2, t2, 128
-convhwb t, t2
-addb d1, t, a
-
-
-
-.function video_scale_orc_merge_linear_u16
-.dest 2 d1
-.source 2 s1
-.source 2 s2
-.param 2 p1
-.param 2 p2
-.temp 4 t1
-.temp 4 t2
-
-# This is slightly different thatn the u8 case, since muluwl
-# tends to be much faster than mulll
-muluwl t1, s1, p1
-muluwl t2, s2, p2
-addl t1, t1, t2
-shrul t1, t1, 16
-convlw d1, t1
-
-
-.function video_scale_orc_splat_u16
-.dest 2 d1
-.param 2 p1
-
-copyw d1, p1
-
-
-.function video_scale_orc_splat_u32
-.dest 4 d1
-.param 4 p1
-
-copyl d1, p1
-
-
-.function video_scale_orc_splat_u64
-.dest 8 d1
-.longparam 8 p1
-
-copyq d1, p1
-
-
-.function video_scale_orc_downsample_u8
-.dest 1 d1 guint8
-.source 2 s1 guint8
-.temp 1 t1
-.temp 1 t2
-
-splitwb t1, t2, s1
-avgub d1, t1, t2
-
-
-.function video_scale_orc_downsample_u16
-.dest 2 d1 guint16
-.source 4 s1 guint16
-.temp 2 t1
-.temp 2 t2
-
-splitlw t1, t2, s1
-avguw d1, t1, t2
-
-
-.function video_scale_orc_downsample_u32
-.dest 4 d1 guint8
-.source 8 s1 guint8
-.temp 4 t1
-.temp 4 t2
-
-splitql t1, t2, s1
-x4 avgub d1, t1, t2
-
-
-.function video_scale_orc_downsample_yuyv
-.dest 4 d1 guint8
-.source 8 s1 guint8
-.temp 4 yyyy
-.temp 4 uvuv
-.temp 2 t1
-.temp 2 t2
-.temp 2 yy
-.temp 2 uv
-
-x4 splitwb yyyy, uvuv, s1
-x2 splitwb t1, t2, yyyy
-x2 avgub yy, t1, t2
-splitlw t1, t2, uvuv
-x2 avgub uv, t1, t2
-x2 mergebw d1, yy, uv
-
-
-
-.function video_scale_orc_resample_nearest_u8
-.dest 1 d1 guint8
-.source 1 s1 guint8
-.param 4 p1
-.param 4 p2
-
-ldresnearb d1, s1, p1, p2
-
-
-.function video_scale_orc_resample_bilinear_u8
-.dest 1 d1 guint8
-.source 1 s1 guint8
-.param 4 p1
-.param 4 p2
-
-ldreslinb d1, s1, p1, p2
-
-
-.function video_scale_orc_resample_nearest_u32
-.dest 4 d1 guint8
-.source 4 s1 guint8
-.param 4 p1
-.param 4 p2
-
-ldresnearl d1, s1, p1, p2
-
-
-.function video_scale_orc_resample_bilinear_u32
-.dest 4 d1 guint8
-.source 4 s1 guint8
-.param 4 p1
-.param 4 p2
-
-ldreslinl d1, s1, p1, p2
-
-
-.function video_scale_orc_resample_merge_bilinear_u32
-.dest 4 d1 guint8
-.dest 4 d2 guint8
-.source 4 s1 guint8
-.source 4 s2 guint8
-.temp 4 a
-.temp 4 b
-.temp 4 t
-.temp 8 t1
-.temp 8 t2
-.param 4 p1
-.param 4 p2
-.param 4 p3
-
-ldreslinl b, s2, p2, p3
-storel d2, b
-loadl a, s1
-x4 convubw t1, a
-x4 convubw t2, b
-x4 subw t2, t2, t1
-x4 mullw t2, t2, p1
-x4 convhwb t, t2
-x4 addb d1, t, a
-
-
-
-.function video_scale_orc_merge_bicubic_u8
-.dest 1 d1 guint8
-.source 1 s1 guint8
-.source 1 s2 guint8
-.source 1 s3 guint8
-.source 1 s4 guint8
-.param 4 p1
-.param 4 p2
-.param 4 p3
-.param 4 p4
-.temp 2 t1
-.temp 2 t2
-
-mulubw t1, s2, p2
-mulubw t2, s3, p3
-addw t1, t1, t2
-mulubw t2, s1, p1
-subw t1, t1, t2
-mulubw t2, s4, p4
-subw t1, t1, t2
-addw t1, t1, 32
-shrsw t1, t1, 6
-convsuswb d1, t1
-
-
diff --git a/gst/videoscale/vs_4tap.c b/gst/videoscale/vs_4tap.c
deleted file mode 100644
index c653a78..0000000
--- a/gst/videoscale/vs_4tap.c
+++ /dev/null
@@ -1,1502 +0,0 @@
-/*
- * Image Scaling Functions (4 tap)
- * Copyright (c) 2005 David A. Schleef <ds@schleef.org>
- * Copyright (c) 2009 Sebastian Dröge <sebastian.droege@collabora.co.uk>
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. 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.
- * 
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 AUTHOR 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 "vs_image.h"
-#include "vs_scanline.h"
-
-#include "vs_4tap.h"
-
-#include <gst/math-compat.h>
-
-#define SHIFT 10
-
-static int16_t vs_4tap_taps[256][4];
-
-
-static void vs_scanline_resample_4tap_Y (uint8_t * dest, uint8_t * src,
-    int n, int src_width, int *xacc, int increment);
-static void vs_scanline_merge_4tap_Y (uint8_t * dest, uint8_t * src1,
-    uint8_t * src2, uint8_t * src3, uint8_t * src4, int n, int acc);
-
-static void vs_scanline_resample_4tap_RGBA (uint8_t * dest, uint8_t * src,
-    int n, int src_width, int *xacc, int increment);
-static void vs_scanline_merge_4tap_RGBA (uint8_t * dest, uint8_t * src1,
-    uint8_t * src2, uint8_t * src3, uint8_t * src4, int n, int acc);
-
-static void vs_scanline_resample_4tap_RGB (uint8_t * dest, uint8_t * src,
-    int n, int src_width, int *xacc, int increment);
-static void vs_scanline_merge_4tap_RGB (uint8_t * dest, uint8_t * src1,
-    uint8_t * src2, uint8_t * src3, uint8_t * src4, int n, int acc);
-
-static void vs_scanline_resample_4tap_YUYV (uint8_t * dest, uint8_t * src,
-    int n, int src_width, int *xacc, int increment);
-static void vs_scanline_merge_4tap_YUYV (uint8_t * dest, uint8_t * src1,
-    uint8_t * src2, uint8_t * src3, uint8_t * src4, int n, int acc);
-
-static void vs_scanline_resample_4tap_UYVY (uint8_t * dest, uint8_t * src,
-    int n, int src_width, int *xacc, int increment);
-static void vs_scanline_merge_4tap_UYVY (uint8_t * dest, uint8_t * src1,
-    uint8_t * src2, uint8_t * src3, uint8_t * src4, int n, int acc);
-
-static void vs_scanline_resample_4tap_RGB565 (uint8_t * dest, uint8_t * src,
-    int n, int src_width, int *xacc, int increment);
-static void vs_scanline_merge_4tap_RGB565 (uint8_t * dest, uint8_t * src1,
-    uint8_t * src2, uint8_t * src3, uint8_t * src4, int n, int acc);
-
-static void vs_scanline_resample_4tap_RGB555 (uint8_t * dest, uint8_t * src,
-    int n, int src_width, int *xacc, int increment);
-static void vs_scanline_merge_4tap_RGB555 (uint8_t * dest, uint8_t * src1,
-    uint8_t * src2, uint8_t * src3, uint8_t * src4, int n, int acc);
-
-static void vs_scanline_resample_4tap_Y16 (uint8_t * dest, uint8_t * src,
-    int n, int src_width, int *xacc, int increment);
-static void vs_scanline_merge_4tap_Y16 (uint8_t * dest, uint8_t * src1,
-    uint8_t * src2, uint8_t * src3, uint8_t * src4, int n, int acc);
-
-static void vs_scanline_resample_4tap_AYUV64 (uint16_t * dest, uint16_t * src,
-    int n, int src_width, int *xacc, int increment);
-static void vs_scanline_merge_4tap_AYUV64 (uint16_t * dest, uint16_t * src1,
-    uint16_t * src2, uint16_t * src3, uint16_t * src4, int n, int acc);
-
-static double
-vs_4tap_func (double x)
-{
-#if 0
-  if (x < -1)
-    return 0;
-  if (x > 1)
-    return 0;
-  if (x < 0)
-    return 1 + x;
-  return 1 - x;
-#endif
-#if 0
-  if (x == 0)
-    return 1;
-  return sin (G_PI * x) / (G_PI * x) * (1 - 0.25 * x * x);
-#endif
-#if 1
-  if (x == 0)
-    return 1;
-  return sin (G_PI * x) / (G_PI * x);
-#endif
-}
-
-void
-vs_4tap_init (void)
-{
-  int i;
-  double a, b, c, d;
-  double sum;
-
-  for (i = 0; i < 256; i++) {
-    a = vs_4tap_func (-1 - i / 256.0);
-    b = vs_4tap_func (0 - i / 256.0);
-    c = vs_4tap_func (1 - i / 256.0);
-    d = vs_4tap_func (2 - i / 256.0);
-    sum = a + b + c + d;
-
-    vs_4tap_taps[i][0] = rint ((1 << SHIFT) * (a / sum));
-    vs_4tap_taps[i][1] = rint ((1 << SHIFT) * (b / sum));
-    vs_4tap_taps[i][2] = rint ((1 << SHIFT) * (c / sum));
-    vs_4tap_taps[i][3] = rint ((1 << SHIFT) * (d / sum));
-  }
-}
-
-
-void
-vs_scanline_resample_4tap_Y (uint8_t * dest, uint8_t * src,
-    int n, int src_width, int *xacc, int increment)
-{
-  int i;
-  int j;
-  int acc;
-  int x;
-  int y;
-
-  acc = *xacc;
-  for (i = 0; i < n; i++) {
-    j = acc >> 16;
-    x = (acc & 0xff00) >> 8;
-    if (j - 1 >= 0 && j + 2 < src_width) {
-      y = vs_4tap_taps[x][0] * src[j - 1];
-      y += vs_4tap_taps[x][1] * src[j];
-      y += vs_4tap_taps[x][2] * src[j + 1];
-      y += vs_4tap_taps[x][3] * src[j + 2];
-    } else {
-      y = vs_4tap_taps[x][0] * src[CLAMP (j - 1, 0, src_width - 1)];
-      y += vs_4tap_taps[x][1] * src[CLAMP (j, 0, src_width - 1)];
-      y += vs_4tap_taps[x][2] * src[CLAMP (j + 1, 0, src_width - 1)];
-      y += vs_4tap_taps[x][3] * src[CLAMP (j + 2, 0, src_width - 1)];
-    }
-    y += (1 << (SHIFT - 1));
-    dest[i] = CLAMP (y >> SHIFT, 0, 255);
-    acc += increment;
-  }
-  *xacc = acc;
-}
-
-void
-vs_scanline_merge_4tap_Y (uint8_t * dest, uint8_t * src1, uint8_t * src2,
-    uint8_t * src3, uint8_t * src4, int n, int acc)
-{
-  int i;
-  int y;
-  int a, b, c, d;
-
-  acc = (acc >> 8) & 0xff;
-  a = vs_4tap_taps[acc][0];
-  b = vs_4tap_taps[acc][1];
-  c = vs_4tap_taps[acc][2];
-  d = vs_4tap_taps[acc][3];
-  for (i = 0; i < n; i++) {
-    y = a * src1[i];
-    y += b * src2[i];
-    y += c * src3[i];
-    y += d * src4[i];
-    y += (1 << (SHIFT - 1));
-    dest[i] = CLAMP (y >> SHIFT, 0, 255);
-  }
-}
-
-
-void
-vs_image_scale_4tap_Y (const VSImage * dest, const VSImage * src,
-    uint8_t * tmpbuf)
-{
-  int yacc;
-  int y_increment;
-  int x_increment;
-  int i;
-  int j;
-  int xacc;
-  int k;
-
-  if (dest->height == 1)
-    y_increment = 0;
-  else
-    y_increment = ((src->height - 1) << 16) / (dest->height - 1);
-
-  if (dest->width == 1)
-    x_increment = 0;
-  else
-    x_increment = ((src->width - 1) << 16) / (dest->width - 1);
-
-  k = 0;
-  for (i = 0; i < 4; i++) {
-    xacc = 0;
-    vs_scanline_resample_4tap_Y (tmpbuf + i * dest->stride,
-        src->pixels + CLAMP (i, 0, src->height - 1) * src->stride, dest->width,
-        src->width, &xacc, x_increment);
-  }
-
-  yacc = 0;
-  for (i = 0; i < dest->height; i++) {
-    uint8_t *t0, *t1, *t2, *t3;
-
-    j = yacc >> 16;
-
-    while (j > k) {
-      k++;
-      if (k + 3 < src->height) {
-        xacc = 0;
-        vs_scanline_resample_4tap_Y (tmpbuf + ((k + 3) & 3) * dest->stride,
-            src->pixels + (k + 3) * src->stride,
-            dest->width, src->width, &xacc, x_increment);
-      }
-    }
-
-    t0 = tmpbuf + (CLAMP (j - 1, 0, src->height - 1) & 3) * dest->stride;
-    t1 = tmpbuf + (CLAMP (j, 0, src->height - 1) & 3) * dest->stride;
-    t2 = tmpbuf + (CLAMP (j + 1, 0, src->height - 1) & 3) * dest->stride;
-    t3 = tmpbuf + (CLAMP (j + 2, 0, src->height - 1) & 3) * dest->stride;
-    vs_scanline_merge_4tap_Y (dest->pixels + i * dest->stride,
-        t0, t1, t2, t3, dest->width, yacc & 0xffff);
-
-    yacc += y_increment;
-  }
-}
-
-void
-vs_scanline_resample_4tap_Y16 (uint8_t * dest, uint8_t * src,
-    int n, int src_width, int *xacc, int increment)
-{
-  int i;
-  int j;
-  int acc;
-  int x;
-  int y;
-  uint16_t *d = (uint16_t *) dest, *s = (uint16_t *) src;
-
-  acc = *xacc;
-  for (i = 0; i < n; i++) {
-    j = acc >> 16;
-    x = (acc & 0xff00) >> 8;
-    if (j - 1 >= 0 && j + 2 < src_width) {
-      y = vs_4tap_taps[x][0] * s[j - 1];
-      y += vs_4tap_taps[x][1] * s[j];
-      y += vs_4tap_taps[x][2] * s[j + 1];
-      y += vs_4tap_taps[x][3] * s[j + 2];
-    } else {
-      y = vs_4tap_taps[x][0] * s[CLAMP (j - 1, 0, src_width - 1)];
-      y += vs_4tap_taps[x][1] * s[CLAMP (j, 0, src_width - 1)];
-      y += vs_4tap_taps[x][2] * s[CLAMP (j + 1, 0, src_width - 1)];
-      y += vs_4tap_taps[x][3] * s[CLAMP (j + 2, 0, src_width - 1)];
-    }
-    y += (1 << (SHIFT - 1));
-    d[i] = CLAMP (y >> SHIFT, 0, 65535);
-    acc += increment;
-  }
-  *xacc = acc;
-}
-
-void
-vs_scanline_merge_4tap_Y16 (uint8_t * dest, uint8_t * src1, uint8_t * src2,
-    uint8_t * src3, uint8_t * src4, int n, int acc)
-{
-  int i;
-  int y;
-  int a, b, c, d;
-  uint16_t *de = (uint16_t *) dest, *s1 = (uint16_t *) src1;
-  uint16_t *s2 = (uint16_t *) src2, *s3 = (uint16_t *) src3;
-  uint16_t *s4 = (uint16_t *) src4;
-
-  acc = (acc >> 8) & 0xff;
-  a = vs_4tap_taps[acc][0];
-  b = vs_4tap_taps[acc][1];
-  c = vs_4tap_taps[acc][2];
-  d = vs_4tap_taps[acc][3];
-  for (i = 0; i < n; i++) {
-    y = a * s1[i];
-    y += b * s2[i];
-    y += c * s3[i];
-    y += d * s4[i];
-    y += (1 << (SHIFT - 1));
-    de[i] = CLAMP (y >> SHIFT, 0, 65535);
-  }
-}
-
-
-void
-vs_image_scale_4tap_Y16 (const VSImage * dest, const VSImage * src,
-    uint8_t * tmpbuf)
-{
-  int yacc;
-  int y_increment;
-  int x_increment;
-  int i;
-  int j;
-  int xacc;
-  int k;
-
-  if (dest->height == 1)
-    y_increment = 0;
-  else
-    y_increment = ((src->height - 1) << 16) / (dest->height - 1);
-
-  if (dest->width == 1)
-    x_increment = 0;
-  else
-    x_increment = ((src->width - 1) << 16) / (dest->width - 1);
-
-  k = 0;
-  for (i = 0; i < 4; i++) {
-    xacc = 0;
-    vs_scanline_resample_4tap_Y16 (tmpbuf + i * dest->stride,
-        src->pixels + CLAMP (i, 0, src->height - 1) * src->stride, dest->width,
-        src->width, &xacc, x_increment);
-  }
-
-  yacc = 0;
-  for (i = 0; i < dest->height; i++) {
-    uint8_t *t0, *t1, *t2, *t3;
-
-    j = yacc >> 16;
-
-    while (j > k) {
-      k++;
-      if (k + 3 < src->height) {
-        xacc = 0;
-        vs_scanline_resample_4tap_Y16 (tmpbuf + ((k + 3) & 3) * dest->stride,
-            src->pixels + (k + 3) * src->stride,
-            dest->width, src->width, &xacc, x_increment);
-      }
-    }
-
-    t0 = tmpbuf + (CLAMP (j - 1, 0, src->height - 1) & 3) * dest->stride;
-    t1 = tmpbuf + (CLAMP (j, 0, src->height - 1) & 3) * dest->stride;
-    t2 = tmpbuf + (CLAMP (j + 1, 0, src->height - 1) & 3) * dest->stride;
-    t3 = tmpbuf + (CLAMP (j + 2, 0, src->height - 1) & 3) * dest->stride;
-    vs_scanline_merge_4tap_Y16 (dest->pixels + i * dest->stride,
-        t0, t1, t2, t3, dest->width, yacc & 0xffff);
-
-    yacc += y_increment;
-  }
-}
-
-void
-vs_scanline_resample_4tap_RGBA (uint8_t * dest, uint8_t * src,
-    int n, int src_width, int *xacc, int increment)
-{
-  int i;
-  int j;
-  int acc;
-  int x;
-  int y;
-  int off;
-
-  acc = *xacc;
-  for (i = 0; i < n; i++) {
-    j = acc >> 16;
-    x = (acc & 0xffff) >> 8;
-
-    for (off = 0; off < 4; off++) {
-      if (j - 1 >= 0 && j + 2 < src_width) {
-        y = vs_4tap_taps[x][0] * src[(j - 1) * 4 + off];
-        y += vs_4tap_taps[x][1] * src[j * 4 + off];
-        y += vs_4tap_taps[x][2] * src[(j + 1) * 4 + off];
-        y += vs_4tap_taps[x][3] * src[(j + 2) * 4 + off];
-      } else {
-        y = vs_4tap_taps[x][0] *
-            src[CLAMP ((j - 1), 0, src_width - 1) * 4 + off];
-        y += vs_4tap_taps[x][1] *
-            src[CLAMP ((j + 0), 0, src_width - 1) * 4 + off];
-        y += vs_4tap_taps[x][2] *
-            src[CLAMP ((j + 1), 0, src_width - 1) * 4 + off];
-        y += vs_4tap_taps[x][3] *
-            src[CLAMP ((j + 2), 0, src_width - 1) * 4 + off];
-      }
-      y += (1 << (SHIFT - 1));
-      dest[i * 4 + off] = CLAMP (y >> SHIFT, 0, 255);
-    }
-    acc += increment;
-  }
-  *xacc = acc;
-}
-
-void
-vs_scanline_merge_4tap_RGBA (uint8_t * dest, uint8_t * src1, uint8_t * src2,
-    uint8_t * src3, uint8_t * src4, int n, int acc)
-{
-  int i;
-  int y;
-  int off;
-  int a, b, c, d;
-
-  acc = (acc >> 8) & 0xff;
-  a = vs_4tap_taps[acc][0];
-  b = vs_4tap_taps[acc][1];
-  c = vs_4tap_taps[acc][2];
-  d = vs_4tap_taps[acc][3];
-  for (i = 0; i < n; i++) {
-    for (off = 0; off < 4; off++) {
-      y = a * src1[i * 4 + off];
-      y += b * src2[i * 4 + off];
-      y += c * src3[i * 4 + off];
-      y += d * src4[i * 4 + off];
-      y += (1 << (SHIFT - 1));
-      dest[i * 4 + off] = CLAMP (y >> SHIFT, 0, 255);
-    }
-  }
-}
-
-void
-vs_image_scale_4tap_RGBA (const VSImage * dest, const VSImage * src,
-    uint8_t * tmpbuf)
-{
-  int yacc;
-  int y_increment;
-  int x_increment;
-  int i;
-  int j;
-  int xacc;
-  int k;
-
-  if (dest->height == 1)
-    y_increment = 0;
-  else
-    y_increment = ((src->height - 1) << 16) / (dest->height - 1);
-
-  if (dest->width == 1)
-    x_increment = 0;
-  else
-    x_increment = ((src->width - 1) << 16) / (dest->width - 1);
-
-  k = 0;
-  for (i = 0; i < 4; i++) {
-    xacc = 0;
-    vs_scanline_resample_4tap_RGBA (tmpbuf + i * dest->stride,
-        src->pixels + CLAMP (i, 0, src->height) * src->stride,
-        dest->width, src->width, &xacc, x_increment);
-  }
-
-  yacc = 0;
-  for (i = 0; i < dest->height; i++) {
-    uint8_t *t0, *t1, *t2, *t3;
-
-    j = yacc >> 16;
-
-    while (j > k) {
-      k++;
-      if (k + 3 < src->height) {
-        xacc = 0;
-        vs_scanline_resample_4tap_RGBA (tmpbuf + ((k + 3) & 3) * dest->stride,
-            src->pixels + (k + 3) * src->stride,
-            dest->width, src->width, &xacc, x_increment);
-      }
-    }
-
-    t0 = tmpbuf + (CLAMP (j - 1, 0, src->height - 1) & 3) * dest->stride;
-    t1 = tmpbuf + (CLAMP (j, 0, src->height - 1) & 3) * dest->stride;
-    t2 = tmpbuf + (CLAMP (j + 1, 0, src->height - 1) & 3) * dest->stride;
-    t3 = tmpbuf + (CLAMP (j + 2, 0, src->height - 1) & 3) * dest->stride;
-    vs_scanline_merge_4tap_RGBA (dest->pixels + i * dest->stride,
-        t0, t1, t2, t3, dest->width, yacc & 0xffff);
-
-    yacc += y_increment;
-  }
-}
-
-void
-vs_scanline_resample_4tap_RGB (uint8_t * dest, uint8_t * src,
-    int n, int src_width, int *xacc, int increment)
-{
-  int i;
-  int j;
-  int acc;
-  int x;
-  int y;
-  int off;
-
-  acc = *xacc;
-  for (i = 0; i < n; i++) {
-    j = acc >> 16;
-    x = (acc & 0xffff) >> 8;
-
-    for (off = 0; off < 3; off++) {
-      if (j - 1 >= 0 && j + 2 < src_width) {
-        y = vs_4tap_taps[x][0] * src[(j - 1) * 3 + off];
-        y += vs_4tap_taps[x][1] * src[j * 3 + off];
-        y += vs_4tap_taps[x][2] * src[(j + 1) * 3 + off];
-        y += vs_4tap_taps[x][3] * src[(j + 2) * 3 + off];
-      } else {
-        y = vs_4tap_taps[x][0] * src[CLAMP ((j - 1) * 3 + off, 0,
-                3 * (src_width - 1) + off)];
-        y += vs_4tap_taps[x][1] * src[CLAMP (j * 3 + off, 0,
-                3 * (src_width - 1) + off)];
-        y += vs_4tap_taps[x][2] * src[CLAMP ((j + 1) * 3 + off, 0,
-                3 * (src_width - 1) + off)];
-        y += vs_4tap_taps[x][3] * src[CLAMP ((j + 2) * 3 + off, 0,
-                3 * (src_width - 1) + off)];
-      }
-      y += (1 << (SHIFT - 1));
-      dest[i * 3 + off] = CLAMP (y >> SHIFT, 0, 255);
-    }
-    acc += increment;
-  }
-  *xacc = acc;
-}
-
-void
-vs_scanline_merge_4tap_RGB (uint8_t * dest, uint8_t * src1, uint8_t * src2,
-    uint8_t * src3, uint8_t * src4, int n, int acc)
-{
-  int i;
-  int y;
-  int off;
-  int a, b, c, d;
-
-  acc = (acc >> 8) & 0xff;
-  a = vs_4tap_taps[acc][0];
-  b = vs_4tap_taps[acc][1];
-  c = vs_4tap_taps[acc][2];
-  d = vs_4tap_taps[acc][3];
-  for (i = 0; i < n; i++) {
-    for (off = 0; off < 3; off++) {
-      y = a * src1[i * 3 + off];
-      y += b * src2[i * 3 + off];
-      y += c * src3[i * 3 + off];
-      y += d * src4[i * 3 + off];
-      y += (1 << (SHIFT - 1));
-      dest[i * 3 + off] = CLAMP (y >> SHIFT, 0, 255);
-    }
-  }
-}
-
-void
-vs_image_scale_4tap_RGB (const VSImage * dest, const VSImage * src,
-    uint8_t * tmpbuf)
-{
-  int yacc;
-  int y_increment;
-  int x_increment;
-  int i;
-  int j;
-  int xacc;
-  int k;
-
-  if (dest->height == 1)
-    y_increment = 0;
-  else
-    y_increment = ((src->height - 1) << 16) / (dest->height - 1);
-
-  if (dest->width == 1)
-    x_increment = 0;
-  else
-    x_increment = ((src->width - 1) << 16) / (dest->width - 1);
-
-  k = 0;
-  for (i = 0; i < 4; i++) {
-    xacc = 0;
-    vs_scanline_resample_4tap_RGB (tmpbuf + i * dest->stride,
-        src->pixels + CLAMP (i, 0, src->height - 1) * src->stride, dest->width,
-        src->width, &xacc, x_increment);
-  }
-
-  yacc = 0;
-  for (i = 0; i < dest->height; i++) {
-    uint8_t *t0, *t1, *t2, *t3;
-
-    j = yacc >> 16;
-
-    while (j > k) {
-      k++;
-      if (k + 3 < src->height) {
-        xacc = 0;
-        vs_scanline_resample_4tap_RGB (tmpbuf + ((k + 3) & 3) * dest->stride,
-            src->pixels + (k + 3) * src->stride,
-            dest->width, src->width, &xacc, x_increment);
-      }
-    }
-
-    t0 = tmpbuf + (CLAMP (j - 1, 0, src->height - 1) & 3) * dest->stride;
-    t1 = tmpbuf + (CLAMP (j, 0, src->height - 1) & 3) * dest->stride;
-    t2 = tmpbuf + (CLAMP (j + 1, 0, src->height - 1) & 3) * dest->stride;
-    t3 = tmpbuf + (CLAMP (j + 2, 0, src->height - 1) & 3) * dest->stride;
-    vs_scanline_merge_4tap_RGB (dest->pixels + i * dest->stride,
-        t0, t1, t2, t3, dest->width, yacc & 0xffff);
-
-    yacc += y_increment;
-  }
-}
-
-void
-vs_scanline_resample_4tap_YUYV (uint8_t * dest, uint8_t * src,
-    int n, int src_width, int *xacc, int increment)
-{
-  int i;
-  int j;
-  int acc;
-  int x;
-  int y;
-  int quads = (n + 1) / 2;
-  int last_y = 2 * (src_width - 1);
-  int last_u =
-      MAX ((2 * (src_width - 1) % 4 ==
-          0) ? 2 * (src_width - 1) + 1 : 2 * (src_width - 1) - 1, 1);
-  int last_v =
-      MAX ((2 * (src_width - 1) % 4 ==
-          2) ? 2 * (src_width - 1) + 1 : 2 * (src_width - 1) - 1, 1);
-
-  acc = *xacc;
-  for (i = 0; i < quads; i++) {
-    j = acc >> 16;
-    x = (acc & 0xffff) >> 8;
-
-    if (j - 1 >= 0 && j + 2 < src_width) {
-      y = vs_4tap_taps[x][0] * src[j * 2 + 0 - 2];
-      y += vs_4tap_taps[x][1] * src[j * 2 + 0];
-      y += vs_4tap_taps[x][2] * src[j * 2 + 0 + 2];
-      y += vs_4tap_taps[x][3] * src[j * 2 + 0 + 4];
-    } else {
-      y = vs_4tap_taps[x][0] * src[CLAMP (j * 2 + 0 - 2, 0, last_y)];
-      y += vs_4tap_taps[x][1] * src[CLAMP (j * 2 + 0, 0, last_y)];
-      y += vs_4tap_taps[x][2] * src[CLAMP (j * 2 + 0 + 2, 0, last_y)];
-      y += vs_4tap_taps[x][3] * src[CLAMP (j * 2 + 0 + 4, 0, last_y)];
-    }
-    y += (1 << (SHIFT - 1));
-    dest[i * 4 + 0] = CLAMP (y >> SHIFT, 0, 255);
-
-    j = acc >> 17;
-    x = (acc & 0x1ffff) >> 9;
-
-    if (2 * j - 1 >= 0 && 2 * j + 4 < src_width) {
-      y = vs_4tap_taps[x][0] * src[MAX (j * 4 + 1 - 4, 1)];
-      y += vs_4tap_taps[x][1] * src[j * 4 + 1];
-      y += vs_4tap_taps[x][2] * src[j * 4 + 1 + 4];
-      y += vs_4tap_taps[x][3] * src[j * 4 + 1 + 8];
-    } else {
-      y = vs_4tap_taps[x][0] * src[CLAMP (j * 4 + 1 - 4, 1, last_u)];
-      y += vs_4tap_taps[x][1] * src[CLAMP (j * 4 + 1, 1, last_u)];
-      y += vs_4tap_taps[x][2] * src[CLAMP (j * 4 + 1 + 4, 1, last_u)];
-      y += vs_4tap_taps[x][3] * src[CLAMP (j * 4 + 1 + 8, 1, last_u)];
-    }
-    y += (1 << (SHIFT - 1));
-    dest[i * 4 + 1] = CLAMP (y >> SHIFT, 0, 255);
-
-    if (2 * i + 1 < n) {
-      if (2 * j - 1 >= 0 && 2 * j + 4 < src_width) {
-        y = vs_4tap_taps[x][0] * src[MAX (j * 4 + 3 - 4, 3)];
-        y += vs_4tap_taps[x][1] * src[j * 4 + 3];
-        y += vs_4tap_taps[x][2] * src[j * 4 + 3 + 4];
-        y += vs_4tap_taps[x][3] * src[j * 4 + 3 + 8];
-      } else {
-        y = vs_4tap_taps[x][0] * src[CLAMP (j * 4 + 3 - 4, 3, last_v)];
-        y += vs_4tap_taps[x][1] * src[CLAMP (j * 4 + 3, 3, last_v)];
-        y += vs_4tap_taps[x][2] * src[CLAMP (j * 4 + 3 + 4, 3, last_v)];
-        y += vs_4tap_taps[x][3] * src[CLAMP (j * 4 + 3 + 8, 3, last_v)];
-      }
-      y += (1 << (SHIFT - 1));
-      dest[i * 4 + 3] = CLAMP (y >> SHIFT, 0, 255);
-    }
-
-    acc += increment;
-    j = acc >> 16;
-    x = (acc & 0xffff) >> 8;
-
-    if (2 * i + 1 < n) {
-      if (j - 1 >= 0 && j + 2 < src_width) {
-        y = vs_4tap_taps[x][0] * src[j * 2 + 0 - 2];
-        y += vs_4tap_taps[x][1] * src[j * 2 + 0];
-        y += vs_4tap_taps[x][2] * src[j * 2 + 0 + 2];
-        y += vs_4tap_taps[x][3] * src[j * 2 + 0 + 4];
-      } else {
-        y = vs_4tap_taps[x][0] * src[CLAMP (j * 2 + 0 - 2, 0, last_y)];
-        y += vs_4tap_taps[x][1] * src[CLAMP (j * 2 + 0, 0, last_y)];
-        y += vs_4tap_taps[x][2] * src[CLAMP (j * 2 + 0 + 2, 0, last_y)];
-        y += vs_4tap_taps[x][3] * src[CLAMP (j * 2 + 0 + 4, 0, last_y)];
-      }
-      y += (1 << (SHIFT - 1));
-      dest[i * 4 + 2] = CLAMP (y >> SHIFT, 0, 255);
-      acc += increment;
-    }
-  }
-  *xacc = acc;
-}
-
-void
-vs_scanline_merge_4tap_YUYV (uint8_t * dest, uint8_t * src1, uint8_t * src2,
-    uint8_t * src3, uint8_t * src4, int n, int acc)
-{
-  int i;
-  int y;
-  int a, b, c, d;
-  int quads = (n + 1) / 2;
-
-  acc = (acc >> 8) & 0xff;
-  a = vs_4tap_taps[acc][0];
-  b = vs_4tap_taps[acc][1];
-  c = vs_4tap_taps[acc][2];
-  d = vs_4tap_taps[acc][3];
-  for (i = 0; i < quads; i++) {
-    y = a * src1[i * 4 + 0];
-    y += b * src2[i * 4 + 0];
-    y += c * src3[i * 4 + 0];
-    y += d * src4[i * 4 + 0];
-    y += (1 << (SHIFT - 1));
-    dest[i * 4 + 0] = CLAMP (y >> SHIFT, 0, 255);
-
-    y = a * src1[i * 4 + 1];
-    y += b * src2[i * 4 + 1];
-    y += c * src3[i * 4 + 1];
-    y += d * src4[i * 4 + 1];
-    y += (1 << (SHIFT - 1));
-    dest[i * 4 + 1] = CLAMP (y >> SHIFT, 0, 255);
-
-    if (2 * i + 1 < n) {
-      y = a * src1[i * 4 + 2];
-      y += b * src2[i * 4 + 2];
-      y += c * src3[i * 4 + 2];
-      y += d * src4[i * 4 + 2];
-      y += (1 << (SHIFT - 1));
-      dest[i * 4 + 2] = CLAMP (y >> SHIFT, 0, 255);
-
-      y = a * src1[i * 4 + 3];
-      y += b * src2[i * 4 + 3];
-      y += c * src3[i * 4 + 3];
-      y += d * src4[i * 4 + 3];
-      y += (1 << (SHIFT - 1));
-      dest[i * 4 + 3] = CLAMP (y >> SHIFT, 0, 255);
-    }
-  }
-}
-
-void
-vs_image_scale_4tap_YUYV (const VSImage * dest, const VSImage * src,
-    uint8_t * tmpbuf)
-{
-  int yacc;
-  int y_increment;
-  int x_increment;
-  int i;
-  int j;
-  int xacc;
-  int k;
-
-  if (dest->height == 1)
-    y_increment = 0;
-  else
-    y_increment = ((src->height - 1) << 16) / (dest->height - 1);
-
-  if (dest->width == 1)
-    x_increment = 0;
-  else
-    x_increment = ((src->width - 1) << 16) / (dest->width - 1);
-
-  k = 0;
-  for (i = 0; i < 4; i++) {
-    xacc = 0;
-    vs_scanline_resample_4tap_YUYV (tmpbuf + i * dest->stride,
-        src->pixels + CLAMP (i, 0, src->height - 1) * src->stride, dest->width,
-        src->width, &xacc, x_increment);
-  }
-
-  yacc = 0;
-  for (i = 0; i < dest->height; i++) {
-    uint8_t *t0, *t1, *t2, *t3;
-
-    j = yacc >> 16;
-
-    while (j > k) {
-      k++;
-      if (k + 3 < src->height) {
-        xacc = 0;
-        vs_scanline_resample_4tap_YUYV (tmpbuf + ((k + 3) & 3) * dest->stride,
-            src->pixels + (k + 3) * src->stride,
-            dest->width, src->width, &xacc, x_increment);
-      }
-    }
-
-    t0 = tmpbuf + (CLAMP (j - 1, 0, src->height - 1) & 3) * dest->stride;
-    t1 = tmpbuf + (CLAMP (j, 0, src->height - 1) & 3) * dest->stride;
-    t2 = tmpbuf + (CLAMP (j + 1, 0, src->height - 1) & 3) * dest->stride;
-    t3 = tmpbuf + (CLAMP (j + 2, 0, src->height - 1) & 3) * dest->stride;
-    vs_scanline_merge_4tap_YUYV (dest->pixels + i * dest->stride,
-        t0, t1, t2, t3, dest->width, yacc & 0xffff);
-
-    yacc += y_increment;
-  }
-}
-
-void
-vs_scanline_resample_4tap_UYVY (uint8_t * dest, uint8_t * src,
-    int n, int src_width, int *xacc, int increment)
-{
-  int i;
-  int j;
-  int acc;
-  int x;
-  int y;
-  int quads = (n + 1) / 2;
-  int last_y = 2 * (src_width - 1) + 1;
-  int last_u =
-      MAX ((2 * (src_width - 1) % 4 ==
-          0) ? 2 * (src_width - 1) : 2 * (src_width - 1) - 2, 0);
-  int last_v =
-      MAX ((2 * (src_width - 1) % 4 ==
-          2) ? 2 * (src_width - 1) : 2 * (src_width - 1) - 2, 0);
-
-  acc = *xacc;
-  for (i = 0; i < quads; i++) {
-    j = acc >> 16;
-    x = (acc & 0xffff) >> 8;
-
-    if (j - 1 >= 0 && j + 2 < src_width) {
-      y = vs_4tap_taps[x][0] * src[MAX (j * 2 + 1 - 2, 1)];
-      y += vs_4tap_taps[x][1] * src[j * 2 + 1];
-      y += vs_4tap_taps[x][2] * src[j * 2 + 1 + 2];
-      y += vs_4tap_taps[x][3] * src[j * 2 + 1 + 4];
-    } else {
-      y = vs_4tap_taps[x][0] * src[CLAMP (j * 2 + 1 - 2, 1, last_y)];
-      y += vs_4tap_taps[x][1] * src[CLAMP (j * 2 + 1, 1, last_y)];
-      y += vs_4tap_taps[x][2] * src[CLAMP (j * 2 + 1 + 2, 1, last_y)];
-      y += vs_4tap_taps[x][3] * src[CLAMP (j * 2 + 1 + 4, 1, last_y)];
-    }
-    y += (1 << (SHIFT - 1));
-    dest[i * 4 + 1] = CLAMP (y >> SHIFT, 0, 255);
-
-    j = acc >> 17;
-    x = (acc & 0x1ffff) >> 9;
-
-    if (2 * j - 2 >= 0 && 2 * j + 4 < src_width) {
-      y = vs_4tap_taps[x][0] * src[MAX (j * 4 + 0 - 4, 0)];
-      y += vs_4tap_taps[x][1] * src[j * 4 + 0];
-      y += vs_4tap_taps[x][2] * src[j * 4 + 0 + 4];
-      y += vs_4tap_taps[x][3] * src[j * 4 + 0 + 8];
-    } else {
-      y = vs_4tap_taps[x][0] * src[CLAMP (j * 4 + 0 - 4, 0, last_u)];
-      y += vs_4tap_taps[x][1] * src[CLAMP (j * 4 + 0, 0, last_u)];
-      y += vs_4tap_taps[x][2] * src[CLAMP (j * 4 + 0 + 4, 0, last_u)];
-      y += vs_4tap_taps[x][3] * src[CLAMP (j * 4 + 0 + 8, 0, last_u)];
-    }
-    y += (1 << (SHIFT - 1));
-    dest[i * 4 + 0] = CLAMP (y >> SHIFT, 0, 255);
-
-    if (2 * i + 1 < n) {
-      if (2 * j - 1 >= 0 && 2 * j + 4 < src_width) {
-        y = vs_4tap_taps[x][0] * src[MAX (j * 4 + 2 - 4, 2)];
-        y += vs_4tap_taps[x][1] * src[j * 4 + 2];
-        y += vs_4tap_taps[x][2] * src[j * 4 + 2 + 4];
-        y += vs_4tap_taps[x][3] * src[j * 4 + 2 + 8];
-      } else {
-        y = vs_4tap_taps[x][0] * src[CLAMP (j * 4 + 2 - 4, 2, last_v)];
-        y += vs_4tap_taps[x][1] * src[CLAMP (j * 4 + 2, 2, last_v)];
-        y += vs_4tap_taps[x][2] * src[CLAMP (j * 4 + 2 + 4, 2, last_v)];
-        y += vs_4tap_taps[x][3] * src[CLAMP (j * 4 + 2 + 8, 2, last_v)];
-      }
-      y += (1 << (SHIFT - 1));
-      dest[i * 4 + 2] = CLAMP (y >> SHIFT, 0, 255);
-    }
-
-    acc += increment;
-    j = acc >> 16;
-    x = (acc & 0xffff) >> 8;
-
-    if (2 * i + 1 < n) {
-      if (j - 1 >= 0 && j + 2 < src_width) {
-        y = vs_4tap_taps[x][0] * src[MAX (j * 2 + 1 - 2, 0)];
-        y += vs_4tap_taps[x][1] * src[j * 2 + 1];
-        y += vs_4tap_taps[x][2] * src[j * 2 + 1 + 2];
-        y += vs_4tap_taps[x][3] * src[j * 2 + 1 + 4];
-      } else {
-        y = vs_4tap_taps[x][0] * src[CLAMP (j * 2 + 1 - 2, 1, last_y)];
-        y += vs_4tap_taps[x][1] * src[CLAMP (j * 2 + 1, 1, last_y)];
-        y += vs_4tap_taps[x][2] * src[CLAMP (j * 2 + 1 + 2, 1, last_y)];
-        y += vs_4tap_taps[x][3] * src[CLAMP (j * 2 + 1 + 4, 1, last_y)];
-      }
-      y += (1 << (SHIFT - 1));
-      dest[i * 4 + 3] = CLAMP (y >> SHIFT, 0, 255);
-      acc += increment;
-    }
-  }
-  *xacc = acc;
-}
-
-void
-vs_scanline_merge_4tap_UYVY (uint8_t * dest, uint8_t * src1, uint8_t * src2,
-    uint8_t * src3, uint8_t * src4, int n, int acc)
-{
-  int i;
-  int y;
-  int a, b, c, d;
-  int quads = (n + 1) / 2;
-
-  acc = (acc >> 8) & 0xff;
-  a = vs_4tap_taps[acc][0];
-  b = vs_4tap_taps[acc][1];
-  c = vs_4tap_taps[acc][2];
-  d = vs_4tap_taps[acc][3];
-  for (i = 0; i < quads; i++) {
-    y = a * src1[i * 4 + 0];
-    y += b * src2[i * 4 + 0];
-    y += c * src3[i * 4 + 0];
-    y += d * src4[i * 4 + 0];
-    y += (1 << (SHIFT - 1));
-    dest[i * 4 + 0] = CLAMP (y >> SHIFT, 0, 255);
-
-    y = a * src1[i * 4 + 1];
-    y += b * src2[i * 4 + 1];
-    y += c * src3[i * 4 + 1];
-    y += d * src4[i * 4 + 1];
-    y += (1 << (SHIFT - 1));
-    dest[i * 4 + 1] = CLAMP (y >> SHIFT, 0, 255);
-
-    if (2 * i + 1 < n) {
-      y = a * src1[i * 4 + 2];
-      y += b * src2[i * 4 + 2];
-      y += c * src3[i * 4 + 2];
-      y += d * src4[i * 4 + 2];
-      y += (1 << (SHIFT - 1));
-      dest[i * 4 + 2] = CLAMP (y >> SHIFT, 0, 255);
-
-      y = a * src1[i * 4 + 3];
-      y += b * src2[i * 4 + 3];
-      y += c * src3[i * 4 + 3];
-      y += d * src4[i * 4 + 3];
-      y += (1 << (SHIFT - 1));
-      dest[i * 4 + 3] = CLAMP (y >> SHIFT, 0, 255);
-    }
-  }
-}
-
-void
-vs_image_scale_4tap_UYVY (const VSImage * dest, const VSImage * src,
-    uint8_t * tmpbuf)
-{
-  int yacc;
-  int y_increment;
-  int x_increment;
-  int i;
-  int j;
-  int xacc;
-  int k;
-
-  if (dest->height == 1)
-    y_increment = 0;
-  else
-    y_increment = ((src->height - 1) << 16) / (dest->height - 1);
-
-  if (dest->width == 1)
-    x_increment = 0;
-  else
-    x_increment = ((src->width - 1) << 16) / (dest->width - 1);
-
-  k = 0;
-  for (i = 0; i < 4; i++) {
-    xacc = 0;
-    vs_scanline_resample_4tap_UYVY (tmpbuf + i * dest->stride,
-        src->pixels + CLAMP (i, 0, src->height - 1) * src->stride, dest->width,
-        src->width, &xacc, x_increment);
-  }
-
-  yacc = 0;
-  for (i = 0; i < dest->height; i++) {
-    uint8_t *t0, *t1, *t2, *t3;
-
-    j = yacc >> 16;
-
-    while (j > k) {
-      k++;
-      if (k + 3 < src->height) {
-        xacc = 0;
-        vs_scanline_resample_4tap_UYVY (tmpbuf + ((k + 3) & 3) * dest->stride,
-            src->pixels + (k + 3) * src->stride,
-            dest->width, src->width, &xacc, x_increment);
-      }
-    }
-
-    t0 = tmpbuf + (CLAMP (j - 1, 0, src->height - 1) & 3) * dest->stride;
-    t1 = tmpbuf + (CLAMP (j, 0, src->height - 1) & 3) * dest->stride;
-    t2 = tmpbuf + (CLAMP (j + 1, 0, src->height - 1) & 3) * dest->stride;
-    t3 = tmpbuf + (CLAMP (j + 2, 0, src->height - 1) & 3) * dest->stride;
-    vs_scanline_merge_4tap_UYVY (dest->pixels + i * dest->stride,
-        t0, t1, t2, t3, dest->width, yacc & 0xffff);
-
-    yacc += y_increment;
-  }
-}
-
-/* note that src and dest are uint16_t, and thus endian dependent */
-
-#define RGB565_R(x) (((x)&0xf800)>>8 | ((x)&0xf800)>>13)
-#define RGB565_G(x) (((x)&0x07e0)>>3 | ((x)&0x07e0)>>9)
-#define RGB565_B(x) (((x)&0x001f)<<3 | ((x)&0x001f)>>2)
-
-#define RGB565(r,g,b) \
-  ((((r)<<8)&0xf800) | (((g)<<3)&0x07e0) | (((b)>>3)&0x001f))
-
-void
-vs_scanline_resample_4tap_RGB565 (uint8_t * dest_u8, uint8_t * src_u8,
-    int n, int src_width, int *xacc, int increment)
-{
-  int i;
-  int j;
-  int acc;
-  int x;
-  int y, y_r, y_b, y_g;
-  uint16_t *dest = (uint16_t *) dest_u8;
-  uint16_t *src = (uint16_t *) src_u8;
-
-  acc = *xacc;
-  for (i = 0; i < n; i++) {
-    j = acc >> 16;
-    x = (acc & 0xffff) >> 8;
-
-    if (j - 1 >= 0 && j + 2 < src_width) {
-      y = vs_4tap_taps[x][0] * RGB565_R (src[(j - 1)]);
-      y += vs_4tap_taps[x][1] * RGB565_R (src[j]);
-      y += vs_4tap_taps[x][2] * RGB565_R (src[(j + 1)]);
-      y += vs_4tap_taps[x][3] * RGB565_R (src[(j + 2)]);
-    } else {
-      y = vs_4tap_taps[x][0] * RGB565_R (src[CLAMP ((j - 1), 0,
-                  src_width - 1)]);
-      y += vs_4tap_taps[x][1] * RGB565_R (src[CLAMP (j, 0, src_width - 1)]);
-      y += vs_4tap_taps[x][2] * RGB565_R (src[CLAMP ((j + 1), 0,
-                  src_width - 1)]);
-      y += vs_4tap_taps[x][3] * RGB565_R (src[CLAMP ((j + 2), 0,
-                  src_width - 1)]);
-    }
-    y += (1 << (SHIFT - 1));
-    y_r = CLAMP (y >> SHIFT, 0, 255);
-
-    if (j - 1 >= 0 && j + 2 < src_width) {
-      y = vs_4tap_taps[x][0] * RGB565_G (src[(j - 1)]);
-      y += vs_4tap_taps[x][1] * RGB565_G (src[j]);
-      y += vs_4tap_taps[x][2] * RGB565_G (src[(j + 1)]);
-      y += vs_4tap_taps[x][3] * RGB565_G (src[(j + 2)]);
-    } else {
-      y = vs_4tap_taps[x][0] * RGB565_G (src[CLAMP ((j - 1), 0,
-                  src_width - 1)]);
-      y += vs_4tap_taps[x][1] * RGB565_G (src[CLAMP (j, 0, src_width - 1)]);
-      y += vs_4tap_taps[x][2] * RGB565_G (src[CLAMP ((j + 1), 0,
-                  src_width - 1)]);
-      y += vs_4tap_taps[x][3] * RGB565_G (src[CLAMP ((j + 2), 0,
-                  src_width - 1)]);
-    }
-    y += (1 << (SHIFT - 1));
-    y_g = CLAMP (y >> SHIFT, 0, 255);
-
-    if (j - 1 >= 0 && j + 2 < src_width) {
-      y = vs_4tap_taps[x][0] * RGB565_B (src[(j - 1)]);
-      y += vs_4tap_taps[x][1] * RGB565_B (src[j]);
-      y += vs_4tap_taps[x][2] * RGB565_B (src[(j + 1)]);
-      y += vs_4tap_taps[x][3] * RGB565_B (src[(j + 2)]);
-    } else {
-      y = vs_4tap_taps[x][0] * RGB565_B (src[CLAMP ((j - 1), 0,
-                  src_width - 1)]);
-      y += vs_4tap_taps[x][1] * RGB565_B (src[CLAMP (j, 0, src_width - 1)]);
-      y += vs_4tap_taps[x][2] * RGB565_B (src[CLAMP ((j + 1), 0,
-                  src_width - 1)]);
-      y += vs_4tap_taps[x][3] * RGB565_B (src[CLAMP ((j + 2), 0,
-                  src_width - 1)]);
-    }
-    y += (1 << (SHIFT - 1));
-    y_b = CLAMP (y >> SHIFT, 0, 255);
-
-    dest[i] = RGB565 (y_r, y_g, y_b);
-    acc += increment;
-  }
-  *xacc = acc;
-}
-
-void
-vs_scanline_merge_4tap_RGB565 (uint8_t * dest_u8, uint8_t * src1_u8,
-    uint8_t * src2_u8, uint8_t * src3_u8, uint8_t * src4_u8, int n, int acc)
-{
-  int i;
-  int y, y_r, y_b, y_g;
-  int a, b, c, d;
-  uint16_t *dest = (uint16_t *) dest_u8;
-  uint16_t *src1 = (uint16_t *) src1_u8;
-  uint16_t *src2 = (uint16_t *) src2_u8;
-  uint16_t *src3 = (uint16_t *) src3_u8;
-  uint16_t *src4 = (uint16_t *) src4_u8;
-
-  acc = (acc >> 8) & 0xff;
-  a = vs_4tap_taps[acc][0];
-  b = vs_4tap_taps[acc][1];
-  c = vs_4tap_taps[acc][2];
-  d = vs_4tap_taps[acc][3];
-
-  for (i = 0; i < n; i++) {
-    y = a * RGB565_R (src1[i]);
-    y += b * RGB565_R (src2[i]);
-    y += c * RGB565_R (src3[i]);
-    y += d * RGB565_R (src4[i]);
-    y += (1 << (SHIFT - 1));
-    y_r = CLAMP (y >> SHIFT, 0, 255);
-
-    y = a * RGB565_G (src1[i]);
-    y += b * RGB565_G (src2[i]);
-    y += c * RGB565_G (src3[i]);
-    y += d * RGB565_G (src4[i]);
-    y += (1 << (SHIFT - 1));
-    y_g = CLAMP (y >> SHIFT, 0, 255);
-
-    y = a * RGB565_B (src1[i]);
-    y += b * RGB565_B (src2[i]);
-    y += c * RGB565_B (src3[i]);
-    y += d * RGB565_B (src4[i]);
-    y += (1 << (SHIFT - 1));
-    y_b = CLAMP (y >> SHIFT, 0, 255);
-
-    dest[i] = RGB565 (y_r, y_g, y_b);
-  }
-}
-
-void
-vs_image_scale_4tap_RGB565 (const VSImage * dest, const VSImage * src,
-    uint8_t * tmpbuf)
-{
-  int yacc;
-  int y_increment;
-  int x_increment;
-  int i;
-  int j;
-  int xacc;
-  int k;
-
-  if (dest->height == 1)
-    y_increment = 0;
-  else
-    y_increment = ((src->height - 1) << 16) / (dest->height - 1);
-
-  if (dest->width == 1)
-    x_increment = 0;
-  else
-    x_increment = ((src->width - 1) << 16) / (dest->width - 1);
-
-  k = 0;
-  for (i = 0; i < 4; i++) {
-    xacc = 0;
-    vs_scanline_resample_4tap_RGB565 (tmpbuf + i * dest->stride,
-        src->pixels + CLAMP (i, 0, src->height - 1) * src->stride, dest->width,
-        src->width, &xacc, x_increment);
-  }
-
-  yacc = 0;
-  for (i = 0; i < dest->height; i++) {
-    uint8_t *t0, *t1, *t2, *t3;
-
-    j = yacc >> 16;
-
-    while (j > k) {
-      k++;
-      if (k + 3 < src->height) {
-        xacc = 0;
-        vs_scanline_resample_4tap_RGB565 (tmpbuf + ((k + 3) & 3) * dest->stride,
-            src->pixels + (k + 3) * src->stride,
-            dest->width, src->width, &xacc, x_increment);
-      }
-    }
-
-    t0 = tmpbuf + (CLAMP (j - 1, 0, src->height - 1) & 3) * dest->stride;
-    t1 = tmpbuf + (CLAMP (j, 0, src->height - 1) & 3) * dest->stride;
-    t2 = tmpbuf + (CLAMP (j + 1, 0, src->height - 1) & 3) * dest->stride;
-    t3 = tmpbuf + (CLAMP (j + 2, 0, src->height - 1) & 3) * dest->stride;
-    vs_scanline_merge_4tap_RGB565 (dest->pixels + i * dest->stride,
-        t0, t1, t2, t3, dest->width, yacc & 0xffff);
-
-    yacc += y_increment;
-  }
-}
-
-/* note that src and dest are uint16_t, and thus endian dependent */
-
-#define RGB555_R(x) (((x)&0x7c00)>>7 | ((x)&0x7c00)>>12)
-#define RGB555_G(x) (((x)&0x03e0)>>2 | ((x)&0x03e0)>>7)
-#define RGB555_B(x) (((x)&0x001f)<<3 | ((x)&0x001f)>>2)
-
-#define RGB555(r,g,b) \
-  ((((r)<<7)&0x7c00) | (((g)<<2)&0x03e0) | (((b)>>3)&0x001f))
-
-void
-vs_scanline_resample_4tap_RGB555 (uint8_t * dest_u8, uint8_t * src_u8,
-    int n, int src_width, int *xacc, int increment)
-{
-  int i;
-  int j;
-  int acc;
-  int x;
-  int y, y_r, y_b, y_g;
-  uint16_t *dest = (uint16_t *) dest_u8;
-  uint16_t *src = (uint16_t *) src_u8;
-
-  acc = *xacc;
-  for (i = 0; i < n; i++) {
-    j = acc >> 16;
-    x = (acc & 0xffff) >> 8;
-
-    if (j - 1 >= 0 && j + 2 < src_width) {
-      y = vs_4tap_taps[x][0] * RGB555_R (src[(j - 1)]);
-      y += vs_4tap_taps[x][1] * RGB555_R (src[j]);
-      y += vs_4tap_taps[x][2] * RGB555_R (src[(j + 1)]);
-      y += vs_4tap_taps[x][3] * RGB555_R (src[(j + 2)]);
-    } else {
-      y = vs_4tap_taps[x][0] * RGB555_R (src[CLAMP ((j - 1), 0,
-                  src_width - 1)]);
-      y += vs_4tap_taps[x][1] * RGB555_R (src[CLAMP (j, 0, src_width - 1)]);
-      y += vs_4tap_taps[x][2] * RGB555_R (src[CLAMP ((j + 1), 0,
-                  src_width - 1)]);
-      y += vs_4tap_taps[x][3] * RGB555_R (src[CLAMP ((j + 2), 0,
-                  src_width - 1)]);
-    }
-    y += (1 << (SHIFT - 1));
-    y_r = CLAMP (y >> SHIFT, 0, 255);
-
-    if (j - 1 >= 0 && j + 2 < src_width) {
-      y = vs_4tap_taps[x][0] * RGB555_G (src[(j - 1)]);
-      y += vs_4tap_taps[x][1] * RGB555_G (src[j]);
-      y += vs_4tap_taps[x][2] * RGB555_G (src[(j + 1)]);
-      y += vs_4tap_taps[x][3] * RGB555_G (src[(j + 2)]);
-    } else {
-      y = vs_4tap_taps[x][0] * RGB555_G (src[CLAMP ((j - 1), 0,
-                  src_width - 1)]);
-      y += vs_4tap_taps[x][1] * RGB555_G (src[CLAMP (j, 0, src_width - 1)]);
-      y += vs_4tap_taps[x][2] * RGB555_G (src[CLAMP ((j + 1), 0,
-                  src_width - 1)]);
-      y += vs_4tap_taps[x][3] * RGB555_G (src[CLAMP ((j + 2), 0,
-                  src_width - 1)]);
-    }
-    y += (1 << (SHIFT - 1));
-    y_g = CLAMP (y >> SHIFT, 0, 255);
-
-    if (j - 1 >= 0 && j + 2 < src_width) {
-      y = vs_4tap_taps[x][0] * RGB555_B (src[(j - 1)]);
-      y += vs_4tap_taps[x][1] * RGB555_B (src[j]);
-      y += vs_4tap_taps[x][2] * RGB555_B (src[(j + 1)]);
-      y += vs_4tap_taps[x][3] * RGB555_B (src[(j + 2)]);
-    } else {
-      y = vs_4tap_taps[x][0] * RGB555_B (src[CLAMP ((j - 1), 0,
-                  src_width - 1)]);
-      y += vs_4tap_taps[x][1] * RGB555_B (src[CLAMP (j, 0, src_width - 1)]);
-      y += vs_4tap_taps[x][2] * RGB555_B (src[CLAMP ((j + 1), 0,
-                  src_width - 1)]);
-      y += vs_4tap_taps[x][3] * RGB555_B (src[CLAMP ((j + 2), 0,
-                  src_width - 1)]);
-    }
-    y += (1 << (SHIFT - 1));
-    y_b = CLAMP (y >> SHIFT, 0, 255);
-
-    dest[i] = RGB555 (y_r, y_g, y_b);
-    acc += increment;
-  }
-  *xacc = acc;
-}
-
-void
-vs_scanline_merge_4tap_RGB555 (uint8_t * dest_u8, uint8_t * src1_u8,
-    uint8_t * src2_u8, uint8_t * src3_u8, uint8_t * src4_u8, int n, int acc)
-{
-  int i;
-  int y, y_r, y_b, y_g;
-  int a, b, c, d;
-  uint16_t *dest = (uint16_t *) dest_u8;
-  uint16_t *src1 = (uint16_t *) src1_u8;
-  uint16_t *src2 = (uint16_t *) src2_u8;
-  uint16_t *src3 = (uint16_t *) src3_u8;
-  uint16_t *src4 = (uint16_t *) src4_u8;
-
-  acc = (acc >> 8) & 0xff;
-  a = vs_4tap_taps[acc][0];
-  b = vs_4tap_taps[acc][1];
-  c = vs_4tap_taps[acc][2];
-  d = vs_4tap_taps[acc][3];
-
-  for (i = 0; i < n; i++) {
-    y = a * RGB555_R (src1[i]);
-    y += b * RGB555_R (src2[i]);
-    y += c * RGB555_R (src3[i]);
-    y += d * RGB555_R (src4[i]);
-    y += (1 << (SHIFT - 1));
-    y_r = CLAMP (y >> SHIFT, 0, 255);
-
-    y = a * RGB555_G (src1[i]);
-    y += b * RGB555_G (src2[i]);
-    y += c * RGB555_G (src3[i]);
-    y += d * RGB555_G (src4[i]);
-    y += (1 << (SHIFT - 1));
-    y_g = CLAMP (y >> SHIFT, 0, 255);
-
-    y = a * RGB555_B (src1[i]);
-    y += b * RGB555_B (src2[i]);
-    y += c * RGB555_B (src3[i]);
-    y += d * RGB555_B (src4[i]);
-    y += (1 << (SHIFT - 1));
-    y_b = CLAMP (y >> SHIFT, 0, 255);
-
-    dest[i] = RGB555 (y_r, y_g, y_b);
-  }
-}
-
-void
-vs_image_scale_4tap_RGB555 (const VSImage * dest, const VSImage * src,
-    uint8_t * tmpbuf)
-{
-  int yacc;
-  int y_increment;
-  int x_increment;
-  int i;
-  int j;
-  int xacc;
-  int k;
-
-  if (dest->height == 1)
-    y_increment = 0;
-  else
-    y_increment = ((src->height - 1) << 16) / (dest->height - 1);
-
-  if (dest->width == 1)
-    x_increment = 0;
-  else
-    x_increment = ((src->width - 1) << 16) / (dest->width - 1);
-
-  k = 0;
-  for (i = 0; i < 4; i++) {
-    xacc = 0;
-    vs_scanline_resample_4tap_RGB555 (tmpbuf + i * dest->stride,
-        src->pixels + CLAMP (i, 0, src->height - 1) * src->stride, dest->width,
-        src->width, &xacc, x_increment);
-  }
-
-  yacc = 0;
-  for (i = 0; i < dest->height; i++) {
-    uint8_t *t0, *t1, *t2, *t3;
-
-    j = yacc >> 16;
-
-    while (j > k) {
-      k++;
-      if (k + 3 < src->height) {
-        xacc = 0;
-        vs_scanline_resample_4tap_RGB555 (tmpbuf + ((k + 3) & 3) * dest->stride,
-            src->pixels + (k + 3) * src->stride,
-            dest->width, src->width, &xacc, x_increment);
-      }
-    }
-
-    t0 = tmpbuf + (CLAMP (j - 1, 0, src->height - 1) & 3) * dest->stride;
-    t1 = tmpbuf + (CLAMP (j, 0, src->height - 1) & 3) * dest->stride;
-    t2 = tmpbuf + (CLAMP (j + 1, 0, src->height - 1) & 3) * dest->stride;
-    t3 = tmpbuf + (CLAMP (j + 2, 0, src->height - 1) & 3) * dest->stride;
-    vs_scanline_merge_4tap_RGB555 (dest->pixels + i * dest->stride,
-        t0, t1, t2, t3, dest->width, yacc & 0xffff);
-
-    yacc += y_increment;
-  }
-}
-
-void
-vs_scanline_resample_4tap_AYUV64 (uint16_t * dest, uint16_t * src,
-    int n, int src_width, int *xacc, int increment)
-{
-  int i;
-  int j;
-  int acc;
-  int x;
-  int y;
-  int off;
-
-  acc = *xacc;
-  for (i = 0; i < n; i++) {
-    j = acc >> 16;
-    x = (acc & 0xffff) >> 8;
-
-    for (off = 0; off < 4; off++) {
-      if (j - 1 >= 0 && j + 2 < src_width) {
-        y = vs_4tap_taps[x][0] * src[(j - 1) * 4 + off];
-        y += vs_4tap_taps[x][1] * src[j * 4 + off];
-        y += vs_4tap_taps[x][2] * src[(j + 1) * 4 + off];
-        y += vs_4tap_taps[x][3] * src[(j + 2) * 4 + off];
-      } else {
-        y = vs_4tap_taps[x][0] * src[CLAMP ((j - 1) * 4 + off, 0,
-                4 * (src_width - 1) + off)];
-        y += vs_4tap_taps[x][1] * src[CLAMP (j * 4 + off, 0,
-                4 * (src_width - 1) + off)];
-        y += vs_4tap_taps[x][2] * src[CLAMP ((j + 1) * 4 + off, 0,
-                4 * (src_width - 1) + off)];
-        y += vs_4tap_taps[x][3] * src[CLAMP ((j + 2) * 4 + off, 0,
-                4 * (src_width - 1) + off)];
-      }
-      y += (1 << (SHIFT - 1));
-      dest[i * 4 + off] = CLAMP (y >> SHIFT, 0, 255);
-    }
-    acc += increment;
-  }
-  *xacc = acc;
-}
-
-void
-vs_scanline_merge_4tap_AYUV64 (uint16_t * dest, uint16_t * src1,
-    uint16_t * src2, uint16_t * src3, uint16_t * src4, int n, int acc)
-{
-  int i;
-  int y;
-  int off;
-  int a, b, c, d;
-
-  acc = (acc >> 8) & 0xff;
-  a = vs_4tap_taps[acc][0];
-  b = vs_4tap_taps[acc][1];
-  c = vs_4tap_taps[acc][2];
-  d = vs_4tap_taps[acc][3];
-  for (i = 0; i < n; i++) {
-    for (off = 0; off < 4; off++) {
-      y = a * src1[i * 4 + off];
-      y += b * src2[i * 4 + off];
-      y += c * src3[i * 4 + off];
-      y += d * src4[i * 4 + off];
-      y += (1 << (SHIFT - 1));
-      dest[i * 4 + off] = CLAMP (y >> SHIFT, 0, 65535);
-    }
-  }
-}
-
-void
-vs_image_scale_4tap_AYUV64 (const VSImage * dest, const VSImage * src,
-    uint8_t * tmpbuf8)
-{
-  int yacc;
-  int y_increment;
-  int x_increment;
-  int i;
-  int j;
-  int xacc;
-  int k;
-  guint16 *tmpbuf = (guint16 *) tmpbuf8;
-  /* destination stride in pixels for easier use with tmpbuf variable */
-  int dest_pixstride = dest->stride / sizeof (guint16);
-
-  if (dest->height == 1)
-    y_increment = 0;
-  else
-    y_increment = ((src->height - 1) << 16) / (dest->height - 1);
-
-  if (dest->width == 1)
-    x_increment = 0;
-  else
-    x_increment = ((src->width - 1) << 16) / (dest->width - 1);
-
-  k = 0;
-  for (i = 0; i < 4; i++) {
-    xacc = 0;
-    vs_scanline_resample_4tap_AYUV64 (tmpbuf + i * dest_pixstride,
-        (guint16 *) (src->pixels + CLAMP (i, 0, src->height - 1) * src->stride),
-        dest->width, src->width, &xacc, x_increment);
-  }
-
-  yacc = 0;
-  for (i = 0; i < dest->height; i++) {
-    uint16_t *t0, *t1, *t2, *t3;
-
-    j = yacc >> 16;
-
-    while (j > k) {
-      k++;
-      if (k + 3 < src->height) {
-        xacc = 0;
-        vs_scanline_resample_4tap_AYUV64 (tmpbuf + ((k +
-                    3) & 3) * dest_pixstride,
-            (guint16 *) (src->pixels + (k + 3) * src->stride), dest->width,
-            src->width, &xacc, x_increment);
-      }
-    }
-
-    t0 = tmpbuf + (CLAMP (j - 1, 0, src->height - 1) & 3) * dest_pixstride;
-    t1 = tmpbuf + (CLAMP (j, 0, src->height - 1) & 3) * dest_pixstride;
-    t2 = tmpbuf + (CLAMP (j + 1, 0, src->height - 1) & 3) * dest_pixstride;
-    t3 = tmpbuf + (CLAMP (j + 2, 0, src->height - 1) & 3) * dest_pixstride;
-    vs_scanline_merge_4tap_AYUV64 ((guint16 *) (dest->pixels +
-            i * dest->stride), t0, t1, t2, t3, dest->width, yacc & 0xffff);
-
-    yacc += y_increment;
-  }
-}
diff --git a/gst/videoscale/vs_4tap.h b/gst/videoscale/vs_4tap.h
deleted file mode 100644
index 198d045..0000000
--- a/gst/videoscale/vs_4tap.h
+++ /dev/null
@@ -1,72 +0,0 @@
-/*
- * Image Scaling Functions (4 tap)
- * Copyright (c) 2005 David A. Schleef <ds@schleef.org>
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. 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.
- * 
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 AUTHOR 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 _VS_4TAP_H_
-#define _VS_4TAP_H_
-
-#include "vs_image.h"
-
-G_GNUC_INTERNAL void vs_4tap_init (void);
-
-G_GNUC_INTERNAL void vs_image_scale_4tap_Y      (const VSImage * dest,
-                                                 const VSImage * src,
-                                                 uint8_t       * tmpbuf);
-
-G_GNUC_INTERNAL void vs_image_scale_4tap_RGBA   (const VSImage * dest,
-                                                 const VSImage * src,
-                                                 uint8_t       * tmpbuf);
-
-G_GNUC_INTERNAL void vs_image_scale_4tap_RGB    (const VSImage * dest,
-                                                 const VSImage * src,
-                                                 uint8_t       * tmpbuf);
-
-G_GNUC_INTERNAL void vs_image_scale_4tap_YUYV   (const VSImage * dest,
-                                                 const VSImage * src,
-                                                 uint8_t       * tmpbuf);
-
-G_GNUC_INTERNAL void vs_image_scale_4tap_UYVY   (const VSImage * dest,
-                                                 const VSImage * src,
-                                                 uint8_t       * tmpbuf);
-
-G_GNUC_INTERNAL void vs_image_scale_4tap_RGB565 (const VSImage * dest,
-                                                 const VSImage * src,
-                                                 uint8_t       * tmpbuf);
-
-G_GNUC_INTERNAL void vs_image_scale_4tap_RGB555 (const VSImage * dest,
-                                                 const VSImage * src,
-                                                 uint8_t       * tmpbuf);
-
-G_GNUC_INTERNAL void vs_image_scale_4tap_Y16    (const VSImage * dest,
-                                                 const VSImage * src,
-                                                 uint8_t       * tmpbuf);
-
-G_GNUC_INTERNAL void vs_image_scale_4tap_AYUV64 (const VSImage * dest,
-                                                 const VSImage * src,
-                                                 uint8_t       * tmpbuf);
-
-#endif
-
diff --git a/gst/videoscale/vs_fill_borders.c b/gst/videoscale/vs_fill_borders.c
deleted file mode 100644
index 37ae78b..0000000
--- a/gst/videoscale/vs_fill_borders.c
+++ /dev/null
@@ -1,421 +0,0 @@
-/*
- * Image Scaling Functions
- * Copyright (c) 2010 Sebastian Dröge <sebastian.droege@collabora.co.uk>
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. 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.
- * 
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 AUTHOR 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 <gst/gst.h>
-#include <string.h>
-
-#include "vs_fill_borders.h"
-#include "gstvideoscaleorc.h"
-
-#if G_BYTE_ORDER == G_LITTLE_ENDIAN
-#define READ_UINT32(ptr) GST_READ_UINT32_LE(ptr)
-#define READ_UINT16(ptr) GST_READ_UINT16_LE(ptr)
-#else
-#define READ_UINT32(ptr) GST_READ_UINT32_BE(ptr)
-#define READ_UINT16(ptr) GST_READ_UINT16_BE(ptr)
-#endif
-
-void
-vs_fill_borders_RGBA (const VSImage * dest, const uint8_t * val)
-{
-  int i;
-  int top = dest->border_top, bottom = dest->border_bottom;
-  int left = dest->border_left, right = dest->border_right;
-  int width = dest->width;
-  int height = dest->height;
-  int real_width = dest->real_width;
-  gsize stride = dest->stride;
-  int tmp, tmp2;
-  uint8_t *data;
-  uint32_t v = READ_UINT32 (val);
-
-  data = dest->real_pixels;
-  for (i = 0; i < top; i++) {
-    video_scale_orc_splat_u32 ((uint32_t *) data, v, real_width);
-    data += stride;
-  }
-
-  if (left || right) {
-    tmp = height;
-    tmp2 = (left + width) * 4;
-    for (i = 0; i < tmp; i++) {
-      video_scale_orc_splat_u32 ((uint32_t *) data, v, left);
-      video_scale_orc_splat_u32 ((uint32_t *) (data + tmp2), v, right);
-      data += stride;
-    }
-  } else {
-    data += stride * height;
-  }
-
-  for (i = 0; i < bottom; i++) {
-    video_scale_orc_splat_u32 ((uint32_t *) data, v, real_width);
-    data += stride;
-  }
-}
-
-static void
-_memset_u24 (uint8_t * data, uint8_t val1, uint8_t val2, uint8_t val3,
-    unsigned int n)
-{
-  unsigned int i;
-
-  for (i = 0; i < n; i++) {
-    data[0] = val1;
-    data[1] = val2;
-    data[2] = val3;
-    data += 3;
-  }
-}
-
-void
-vs_fill_borders_RGB (const VSImage * dest, const uint8_t * val)
-{
-  int i;
-  int top = dest->border_top, bottom = dest->border_bottom;
-  int left = dest->border_left, right = dest->border_right;
-  int width = dest->width;
-  int height = dest->height;
-  int real_width = dest->real_width;
-  gsize stride = dest->stride;
-  int tmp, tmp2;
-  uint8_t *data;
-
-  data = dest->real_pixels;
-  for (i = 0; i < top; i++) {
-    _memset_u24 (data, val[0], val[1], val[2], real_width);
-    data += stride;
-  }
-
-  if (left || right) {
-    tmp = height;
-    tmp2 = (left + width) * 3;
-    for (i = 0; i < tmp; i++) {
-      _memset_u24 (data, val[0], val[1], val[2], left);
-      _memset_u24 (data + tmp2, val[0], val[1], val[2], right);
-      data += stride;
-    }
-  } else {
-    data += stride * height;
-  }
-
-  for (i = 0; i < bottom; i++) {
-    _memset_u24 (data, val[0], val[1], val[2], real_width);
-    data += stride;
-  }
-}
-
-void
-vs_fill_borders_YUYV (const VSImage * dest, const uint8_t * val)
-{
-  int i, j;
-  int top = dest->border_top, bottom = dest->border_bottom;
-  int left = dest->border_left, right = dest->border_right;
-  int width = dest->width;
-  int height = dest->height;
-  int real_width = dest->real_width;
-  gsize stride = dest->stride;
-  int tmp, tmp2;
-  uint8_t *data;
-
-  data = dest->real_pixels;
-  for (i = 0; i < top; i++) {
-    for (j = 0; j < real_width; j++) {
-      data[2 * j] = val[0];
-      data[2 * j + 1] = (j % 2 == 0) ? val[1] : val[3];
-    }
-    data += stride;
-  }
-
-  if (left || right) {
-    tmp = height;
-    tmp2 = (left + width) * 2;
-    for (i = 0; i < tmp; i++) {
-      for (j = 0; j < left; j++) {
-        data[2 * j] = val[0];
-        data[2 * j + 1] = (j % 2 == 0) ? val[1] : val[3];
-      }
-      for (j = 0; j < right; j++) {
-        data[tmp2 + 2 * j] = val[0];
-        data[tmp2 + 2 * j + 1] = (j % 2 == 0) ? val[1] : val[3];
-      }
-      data += stride;
-    }
-  } else {
-    data += stride * height;
-  }
-
-  for (i = 0; i < bottom; i++) {
-    for (j = 0; j < real_width; j++) {
-      data[2 * j] = val[0];
-      data[2 * j + 1] = (j % 2 == 0) ? val[1] : val[3];
-    }
-    data += stride;
-  }
-}
-
-void
-vs_fill_borders_UYVY (const VSImage * dest, const uint8_t * val)
-{
-  int i, j;
-  int top = dest->border_top, bottom = dest->border_bottom;
-  int left = dest->border_left, right = dest->border_right;
-  int width = dest->width;
-  int height = dest->height;
-  int real_width = dest->real_width;
-  gsize stride = dest->stride;
-  int tmp, tmp2;
-  uint8_t *data;
-
-  data = dest->real_pixels;
-  for (i = 0; i < top; i++) {
-    for (j = 0; j < real_width; j++) {
-      data[2 * j] = (j % 2 == 0) ? val[0] : val[2];
-      data[2 * j + 1] = val[1];
-    }
-    data += stride;
-  }
-
-  if (left || right) {
-    tmp = height;
-    tmp2 = (left + width) * 2;
-    for (i = 0; i < tmp; i++) {
-      for (j = 0; j < left; j++) {
-        data[2 * j] = (j % 2 == 0) ? val[0] : val[2];
-        data[2 * j + 1] = val[1];
-      }
-      for (j = 0; j < right; j++) {
-        data[tmp2 + 2 * j] = (j % 2 == 0) ? val[0] : val[2];
-        data[tmp2 + 2 * j + 1] = val[1];
-      }
-      data += stride;
-    }
-  } else {
-    data += stride * height;
-  }
-
-  for (i = 0; i < bottom; i++) {
-    for (j = 0; j < real_width; j++) {
-      data[2 * j] = (j % 2 == 0) ? val[0] : val[2];
-      data[2 * j + 1] = val[1];
-    }
-    data += stride;
-  }
-}
-
-void
-vs_fill_borders_Y (const VSImage * dest, const uint8_t * val)
-{
-  int i;
-  int top = dest->border_top, bottom = dest->border_bottom;
-  int left = dest->border_left, right = dest->border_right;
-  int width = dest->width;
-  int height = dest->height;
-  int real_width = dest->real_width;
-  gsize stride = dest->stride;
-  int tmp, tmp2;
-  uint8_t *data;
-
-  data = dest->real_pixels;
-  for (i = 0; i < top; i++) {
-    memset (data, *val, real_width);
-    data += stride;
-  }
-
-  if (left || right) {
-    tmp = height;
-    tmp2 = left + width;
-    for (i = 0; i < tmp; i++) {
-      memset (data, *val, left);
-      memset (data + tmp2, *val, right);
-      data += stride;
-    }
-  } else {
-    data += stride * height;
-  }
-
-  for (i = 0; i < bottom; i++) {
-    memset (data, *val, real_width);
-    data += stride;
-  }
-}
-
-void
-vs_fill_borders_Y16 (const VSImage * dest, const uint16_t val)
-{
-  int i;
-  int top = dest->border_top, bottom = dest->border_bottom;
-  int left = dest->border_left, right = dest->border_right;
-  int width = dest->width;
-  int height = dest->height;
-  int real_width = dest->real_width;
-  gsize stride = dest->stride;
-  int tmp, tmp2;
-  uint8_t *data;
-
-  data = dest->real_pixels;
-  for (i = 0; i < top; i++) {
-    video_scale_orc_splat_u16 ((uint16_t *) data, val, real_width);
-    data += stride;
-  }
-
-  if (left || right) {
-    tmp = height;
-    tmp2 = (left + width) * 2;
-    for (i = 0; i < tmp; i++) {
-      video_scale_orc_splat_u16 ((uint16_t *) data, val, left);
-      video_scale_orc_splat_u16 ((uint16_t *) (data + tmp2), val, right);
-      data += stride;
-    }
-  } else {
-    data += stride * height;
-  }
-
-  for (i = 0; i < bottom; i++) {
-    video_scale_orc_splat_u16 ((uint16_t *) data, val, real_width);
-    data += stride;
-  }
-}
-
-void
-vs_fill_borders_RGB565 (const VSImage * dest, const uint8_t * val)
-{
-  int i;
-  int top = dest->border_top, bottom = dest->border_bottom;
-  int left = dest->border_left, right = dest->border_right;
-  int width = dest->width;
-  int height = dest->height;
-  int real_width = dest->real_width;
-  gsize stride = dest->stride;
-  int tmp, tmp2;
-  uint8_t *data;
-  uint16_t v = READ_UINT16 (val);
-
-  data = dest->real_pixels;
-  for (i = 0; i < top; i++) {
-    video_scale_orc_splat_u16 ((uint16_t *) data, v, real_width);
-    data += stride;
-  }
-
-  if (left || right) {
-    tmp = height;
-    tmp2 = (left + width) * 2;
-    for (i = 0; i < tmp; i++) {
-      video_scale_orc_splat_u16 ((uint16_t *) data, v, left);
-      video_scale_orc_splat_u16 ((uint16_t *) (data + tmp2), v, right);
-      data += stride;
-    }
-  } else {
-    data += stride * height;
-  }
-
-  for (i = 0; i < bottom; i++) {
-    video_scale_orc_splat_u16 ((uint16_t *) data, v, real_width);
-    data += stride;
-  }
-}
-
-void
-vs_fill_borders_RGB555 (const VSImage * dest, const uint8_t * val)
-{
-  int i;
-  int top = dest->border_top, bottom = dest->border_bottom;
-  int left = dest->border_left, right = dest->border_right;
-  int width = dest->width;
-  int height = dest->height;
-  int real_width = dest->real_width;
-  gsize stride = dest->stride;
-  int tmp, tmp2;
-  uint8_t *data;
-  uint16_t v = READ_UINT16 (val);
-
-  data = dest->real_pixels;
-  for (i = 0; i < top; i++) {
-    video_scale_orc_splat_u16 ((uint16_t *) data, v, real_width);
-    data += stride;
-  }
-
-  if (left || right) {
-    tmp = height;
-    tmp2 = (left + width) * 2;
-    for (i = 0; i < tmp; i++) {
-      video_scale_orc_splat_u16 ((uint16_t *) data, v, left);
-      video_scale_orc_splat_u16 ((uint16_t *) (data + tmp2), v, right);
-      data += stride;
-    }
-  } else {
-    data += stride * height;
-  }
-
-  for (i = 0; i < bottom; i++) {
-    video_scale_orc_splat_u16 ((uint16_t *) data, v, real_width);
-    data += stride;
-  }
-}
-
-void
-vs_fill_borders_AYUV64 (const VSImage * dest, const uint8_t * val)
-{
-  int i;
-  int top = dest->border_top, bottom = dest->border_bottom;
-  int left = dest->border_left, right = dest->border_right;
-  int width = dest->width;
-  int height = dest->height;
-  int real_width = dest->real_width;
-  gsize stride = dest->stride;
-  int tmp, tmp2;
-  uint8_t *data;
-  uint64_t v;
-
-  v = (((guint32) val[0]) << 8) | (((guint32) val[1]) << 24) |
-      (((guint64) val[2]) << 40) | (((guint64) val[3]) << 56);
-
-  data = dest->real_pixels;
-  for (i = 0; i < top; i++) {
-    video_scale_orc_splat_u64 ((uint64_t *) data, v, real_width);
-    data += stride;
-  }
-
-  if (left || right) {
-    tmp = height;
-    tmp2 = (left + width) * 8;
-    for (i = 0; i < tmp; i++) {
-      video_scale_orc_splat_u64 ((uint64_t *) data, v, left);
-      video_scale_orc_splat_u64 ((uint64_t *) (data + tmp2), v, right);
-      data += stride;
-    }
-  } else {
-    data += stride * height;
-  }
-
-  for (i = 0; i < bottom; i++) {
-    video_scale_orc_splat_u64 ((uint64_t *) data, v, real_width);
-    data += stride;
-  }
-}
diff --git a/gst/videoscale/vs_fill_borders.h b/gst/videoscale/vs_fill_borders.h
deleted file mode 100644
index 5cbb8bf..0000000
--- a/gst/videoscale/vs_fill_borders.h
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * Image Scaling Functions
- * Copyright (c) 2010 Sebastian Dröge <sebastian.droege@collabora.co.uk>
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. 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.
- * 
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 AUTHOR 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 __VS_FILL_BORDERS_H__
-#define __VS_FILL_BORDERS_H__
-
-#include <_stdint.h>
-#include "vs_image.h"
-
-G_GNUC_INTERNAL void vs_fill_borders_RGBA   (const VSImage *dest, const uint8_t *val);
-G_GNUC_INTERNAL void vs_fill_borders_RGB    (const VSImage *dest, const uint8_t *val);
-G_GNUC_INTERNAL void vs_fill_borders_YUYV   (const VSImage *dest, const uint8_t *val);
-G_GNUC_INTERNAL void vs_fill_borders_UYVY   (const VSImage *dest, const uint8_t *val);
-G_GNUC_INTERNAL void vs_fill_borders_Y      (const VSImage *dest, const uint8_t *val);
-G_GNUC_INTERNAL void vs_fill_borders_Y16    (const VSImage *dest, const uint16_t val);
-G_GNUC_INTERNAL void vs_fill_borders_RGB565 (const VSImage *dest, const uint8_t *val);
-G_GNUC_INTERNAL void vs_fill_borders_RGB555 (const VSImage *dest, const uint8_t *val);
-G_GNUC_INTERNAL void vs_fill_borders_AYUV64 (const VSImage *dest, const uint8_t *val);
-
-#endif /* __VS_FILL_BORDERS_H__ */
diff --git a/gst/videoscale/vs_image.c b/gst/videoscale/vs_image.c
deleted file mode 100644
index 00096fd..0000000
--- a/gst/videoscale/vs_image.c
+++ /dev/null
@@ -1,1282 +0,0 @@
-/*
- * Image Scaling Functions
- * Copyright (c) 2005-2012 David A. Schleef <ds@schleef.org>
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. 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.
- * 
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 AUTHOR 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 <string.h>
-
-#include "vs_scanline.h"
-#include "vs_image.h"
-
-#include "gstvideoscaleorc.h"
-#include <gst/gst.h>
-
-#define ROUND_UP_2(x)  (((x)+1)&~1)
-#define ROUND_UP_4(x)  (((x)+3)&~3)
-#define ROUND_UP_8(x)  (((x)+7)&~7)
-
-void
-vs_image_scale_nearest_RGBA (const VSImage * dest, const VSImage * src,
-    uint8_t * tmpbuf)
-{
-  int acc;
-  int y_increment;
-  int x_increment;
-  int i;
-  int j;
-  int prev_j;
-
-  if (dest->height == 1)
-    y_increment = 0;
-  else
-    y_increment = ((src->height - 1) << 16) / (dest->height - 1);
-
-  if (dest->width == 1)
-    x_increment = 0;
-  else
-    x_increment = ((src->width - 1) << 16) / (dest->width - 1);
-
-
-  acc = 0;
-  prev_j = -1;
-  for (i = 0; i < dest->height; i++) {
-    j = (acc + 0x8000) >> 16;
-
-    if (j == prev_j) {
-      memcpy (dest->pixels + i * dest->stride,
-          dest->pixels + (i - 1) * dest->stride, dest->width * 4);
-    } else {
-      video_scale_orc_resample_nearest_u32 (dest->pixels + i * dest->stride,
-          src->pixels + j * src->stride, 0, x_increment, dest->width);
-    }
-
-    prev_j = j;
-    acc += y_increment;
-  }
-}
-
-void
-vs_image_scale_linear_RGBA (const VSImage * dest, const VSImage * src,
-    uint8_t * tmpbuf)
-{
-  int acc;
-  int y_increment;
-  int x_increment;
-  int y1;
-  int i;
-  int j;
-  int x;
-  int dest_size;
-
-  if (dest->height == 1)
-    y_increment = 0;
-  else
-    y_increment = ((src->height - 1) << 16) / (dest->height - 1) - 1;
-
-  if (dest->width == 1)
-    x_increment = 0;
-  else
-    x_increment = ((src->width - 1) << 16) / (dest->width - 1) - 1;
-
-  dest_size = dest->width * 4;
-
-#define LINE(x) ((tmpbuf) + (dest_size)*((x)&1))
-
-  acc = 0;
-  video_scale_orc_resample_bilinear_u32 (LINE (0), src->pixels,
-      0, x_increment, dest->width);
-  y1 = 0;
-  for (i = 0; i < dest->height; i++) {
-    j = acc >> 16;
-    x = acc & 0xffff;
-
-    if (x == 0) {
-      memcpy (dest->pixels + i * dest->stride, LINE (j), dest_size);
-    } else {
-      if (j > y1) {
-        video_scale_orc_resample_bilinear_u32 (LINE (j),
-            src->pixels + j * src->stride, 0, x_increment, dest->width);
-        y1++;
-      }
-      if (j >= y1) {
-        video_scale_orc_resample_bilinear_u32 (LINE (j + 1),
-            src->pixels + (j + 1) * src->stride, 0, x_increment, dest->width);
-        y1++;
-      }
-      video_scale_orc_merge_linear_u8 (dest->pixels + i * dest->stride,
-          LINE (j), LINE (j + 1), (x >> 8), dest->width * 4);
-    }
-
-    acc += y_increment;
-  }
-}
-
-
-void
-vs_image_scale_nearest_RGB (const VSImage * dest, const VSImage * src,
-    uint8_t * tmpbuf)
-{
-  int acc;
-  int y_increment;
-  int x_increment;
-  int i;
-  int j;
-  int xacc;
-
-  if (dest->height == 1)
-    y_increment = 0;
-  else
-    y_increment = ((src->height - 1) << 16) / (dest->height - 1);
-
-  if (dest->width == 1)
-    x_increment = 0;
-  else
-    x_increment = ((src->width - 1) << 16) / (dest->width - 1);
-
-  acc = 0;
-  for (i = 0; i < dest->height; i++) {
-    j = (acc + 0x8000) >> 16;
-
-    xacc = 0;
-    vs_scanline_resample_nearest_RGB (dest->pixels + i * dest->stride,
-        src->pixels + j * src->stride, src->width, dest->width, &xacc,
-        x_increment);
-
-    acc += y_increment;
-  }
-}
-
-void
-vs_image_scale_linear_RGB (const VSImage * dest, const VSImage * src,
-    uint8_t * tmpbuf)
-{
-  int acc;
-  int y_increment;
-  int x_increment;
-  uint8_t *tmp1;
-  uint8_t *tmp2;
-  int y1;
-  int y2;
-  int i;
-  int j;
-  int x;
-  int dest_size;
-  int xacc;
-
-  if (dest->height == 1)
-    y_increment = 0;
-  else
-    y_increment = ((src->height - 1) << 16) / (dest->height - 1) - 1;
-
-  if (dest->width == 1)
-    x_increment = 0;
-  else
-    x_increment = ((src->width - 1) << 16) / (dest->width - 1) - 1;
-
-  dest_size = dest->width * 3;
-
-  tmp1 = tmpbuf;
-  tmp2 = tmpbuf + dest_size;
-
-  acc = 0;
-  xacc = 0;
-  y2 = -1;
-  vs_scanline_resample_linear_RGB (tmp1, src->pixels, src->width, dest->width,
-      &xacc, x_increment);
-  y1 = 0;
-  for (i = 0; i < dest->height; i++) {
-    j = acc >> 16;
-    x = acc & 0xffff;
-
-    if (x == 0) {
-      if (j == y1) {
-        memcpy (dest->pixels + i * dest->stride, tmp1, dest_size);
-      } else if (j == y2) {
-        memcpy (dest->pixels + i * dest->stride, tmp2, dest_size);
-      } else {
-        xacc = 0;
-        vs_scanline_resample_linear_RGB (tmp1, src->pixels + j * src->stride,
-            src->width, dest->width, &xacc, x_increment);
-        y1 = j;
-        memcpy (dest->pixels + i * dest->stride, tmp1, dest_size);
-      }
-    } else {
-      if (j == y1) {
-        if (j + 1 != y2) {
-          xacc = 0;
-          vs_scanline_resample_linear_RGB (tmp2,
-              src->pixels + (j + 1) * src->stride, src->width, dest->width,
-              &xacc, x_increment);
-          y2 = j + 1;
-        }
-        vs_scanline_merge_linear_RGB (dest->pixels + i * dest->stride,
-            tmp1, tmp2, dest->width, x);
-      } else if (j == y2) {
-        if (j + 1 != y1) {
-          xacc = 0;
-          vs_scanline_resample_linear_RGB (tmp1,
-              src->pixels + (j + 1) * src->stride, src->width, dest->width,
-              &xacc, x_increment);
-          y1 = j + 1;
-        }
-        vs_scanline_merge_linear_RGB (dest->pixels + i * dest->stride,
-            tmp2, tmp1, dest->width, x);
-      } else {
-        xacc = 0;
-        vs_scanline_resample_linear_RGB (tmp1, src->pixels + j * src->stride,
-            src->width, dest->width, &xacc, x_increment);
-        y1 = j;
-        xacc = 0;
-        vs_scanline_resample_linear_RGB (tmp2,
-            src->pixels + (j + 1) * src->stride, src->width, dest->width, &xacc,
-            x_increment);
-        y2 = (j + 1);
-        vs_scanline_merge_linear_RGB (dest->pixels + i * dest->stride,
-            tmp1, tmp2, dest->width, x);
-      }
-    }
-
-    acc += y_increment;
-  }
-}
-
-/* YUYV */
-
-void
-vs_image_scale_nearest_YUYV (const VSImage * dest, const VSImage * src,
-    uint8_t * tmpbuf)
-{
-  int acc;
-  int y_increment;
-  int x_increment;
-  int i;
-  int j;
-  int xacc;
-
-  if (dest->height == 1)
-    y_increment = 0;
-  else
-    y_increment = ((src->height - 1) << 16) / (dest->height - 1);
-
-  if (dest->width == 1)
-    x_increment = 0;
-  else
-    x_increment = ((src->width - 1) << 16) / (dest->width - 1);
-
-  acc = 0;
-  for (i = 0; i < dest->height; i++) {
-    j = (acc + 0x8000) >> 16;
-
-    xacc = 0;
-    vs_scanline_resample_nearest_YUYV (dest->pixels + i * dest->stride,
-        src->pixels + j * src->stride, src->width, dest->width, &xacc,
-        x_increment);
-
-    acc += y_increment;
-  }
-}
-
-void
-vs_image_scale_linear_YUYV (const VSImage * dest, const VSImage * src,
-    uint8_t * tmpbuf)
-{
-  int acc;
-  int y_increment;
-  int x_increment;
-  uint8_t *tmp1;
-  uint8_t *tmp2;
-  int y1;
-  int y2;
-  int i;
-  int j;
-  int x;
-  int dest_size;
-  int xacc;
-
-  if (dest->height == 1)
-    y_increment = 0;
-  else
-    y_increment = ((src->height - 1) << 16) / (dest->height - 1) - 1;
-
-  if (dest->width == 1)
-    x_increment = 0;
-  else
-    x_increment = ((src->width - 1) << 16) / (dest->width - 1) - 1;
-
-  dest_size = ROUND_UP_4 (dest->width * 2);
-
-  tmp1 = tmpbuf;
-  tmp2 = tmpbuf + dest_size;
-
-  acc = 0;
-  xacc = 0;
-  y2 = -1;
-  vs_scanline_resample_linear_YUYV (tmp1, src->pixels, src->width, dest->width,
-      &xacc, x_increment);
-  y1 = 0;
-  for (i = 0; i < dest->height; i++) {
-    j = acc >> 16;
-    x = acc & 0xffff;
-
-    if (x == 0) {
-      if (j == y1) {
-        memcpy (dest->pixels + i * dest->stride, tmp1, dest_size);
-      } else if (j == y2) {
-        memcpy (dest->pixels + i * dest->stride, tmp2, dest_size);
-      } else {
-        xacc = 0;
-        vs_scanline_resample_linear_YUYV (tmp1, src->pixels + j * src->stride,
-            src->width, dest->width, &xacc, x_increment);
-        y1 = j;
-        memcpy (dest->pixels + i * dest->stride, tmp1, dest_size);
-      }
-    } else {
-      if (j == y1) {
-        if (j + 1 != y2) {
-          xacc = 0;
-          vs_scanline_resample_linear_YUYV (tmp2,
-              src->pixels + (j + 1) * src->stride, src->width, dest->width,
-              &xacc, x_increment);
-          y2 = j + 1;
-        }
-        vs_scanline_merge_linear_YUYV (dest->pixels + i * dest->stride,
-            tmp1, tmp2, dest->width, x);
-      } else if (j == y2) {
-        if (j + 1 != y1) {
-          xacc = 0;
-          vs_scanline_resample_linear_YUYV (tmp1,
-              src->pixels + (j + 1) * src->stride, src->width, dest->width,
-              &xacc, x_increment);
-          y1 = j + 1;
-        }
-        vs_scanline_merge_linear_YUYV (dest->pixels + i * dest->stride,
-            tmp2, tmp1, dest->width, x);
-      } else {
-        xacc = 0;
-        vs_scanline_resample_linear_YUYV (tmp1, src->pixels + j * src->stride,
-            src->width, dest->width, &xacc, x_increment);
-        y1 = j;
-        xacc = 0;
-        vs_scanline_resample_linear_YUYV (tmp2,
-            src->pixels + (j + 1) * src->stride, src->width, dest->width,
-            &xacc, x_increment);
-        y2 = (j + 1);
-        vs_scanline_merge_linear_YUYV (dest->pixels + i * dest->stride,
-            tmp1, tmp2, dest->width, x);
-      }
-    }
-
-    acc += y_increment;
-  }
-}
-
-/* UYVY */
-
-void
-vs_image_scale_nearest_UYVY (const VSImage * dest, const VSImage * src,
-    uint8_t * tmpbuf)
-{
-  int acc;
-  int y_increment;
-  int x_increment;
-  int i;
-  int j;
-  int xacc;
-
-  if (dest->height == 1)
-    y_increment = 0;
-  else
-    y_increment = ((src->height - 1) << 16) / (dest->height - 1);
-
-  if (dest->width == 1)
-    x_increment = 0;
-  else
-    x_increment = ((src->width - 1) << 16) / (dest->width - 1);
-
-  acc = 0;
-  for (i = 0; i < dest->height; i++) {
-    j = (acc + 0x8000) >> 16;
-
-    xacc = 0;
-    vs_scanline_resample_nearest_UYVY (dest->pixels + i * dest->stride,
-        src->pixels + j * src->stride, src->width, dest->width, &xacc,
-        x_increment);
-
-    acc += y_increment;
-  }
-}
-
-void
-vs_image_scale_linear_UYVY (const VSImage * dest, const VSImage * src,
-    uint8_t * tmpbuf)
-{
-  int acc;
-  int y_increment;
-  int x_increment;
-  uint8_t *tmp1;
-  uint8_t *tmp2;
-  int y1;
-  int y2;
-  int i;
-  int j;
-  int x;
-  int dest_size;
-  int xacc;
-
-  if (dest->height == 1)
-    y_increment = 0;
-  else
-    y_increment = ((src->height - 1) << 16) / (dest->height - 1) - 1;
-
-  if (dest->width == 1)
-    x_increment = 0;
-  else
-    x_increment = ((src->width - 1) << 16) / (dest->width - 1) - 1;
-
-  dest_size = ROUND_UP_4 (dest->width * 2);
-
-  tmp1 = tmpbuf;
-  tmp2 = tmpbuf + dest_size;
-
-  acc = 0;
-  xacc = 0;
-  y2 = -1;
-  vs_scanline_resample_linear_UYVY (tmp1, src->pixels, src->width, dest->width,
-      &xacc, x_increment);
-  y1 = 0;
-  for (i = 0; i < dest->height; i++) {
-    j = acc >> 16;
-    x = acc & 0xffff;
-
-    if (x == 0) {
-      if (j == y1) {
-        memcpy (dest->pixels + i * dest->stride, tmp1, dest_size);
-      } else if (j == y2) {
-        memcpy (dest->pixels + i * dest->stride, tmp2, dest_size);
-      } else {
-        xacc = 0;
-        vs_scanline_resample_linear_UYVY (tmp1, src->pixels + j * src->stride,
-            src->width, dest->width, &xacc, x_increment);
-        y1 = j;
-        memcpy (dest->pixels + i * dest->stride, tmp1, dest_size);
-      }
-    } else {
-      if (j == y1) {
-        if (j + 1 != y2) {
-          xacc = 0;
-          vs_scanline_resample_linear_UYVY (tmp2,
-              src->pixels + (j + 1) * src->stride, src->width, dest->width,
-              &xacc, x_increment);
-          y2 = j + 1;
-        }
-        vs_scanline_merge_linear_UYVY (dest->pixels + i * dest->stride,
-            tmp1, tmp2, dest->width, x);
-      } else if (j == y2) {
-        if (j + 1 != y1) {
-          xacc = 0;
-          vs_scanline_resample_linear_UYVY (tmp1,
-              src->pixels + (j + 1) * src->stride, src->width, dest->width,
-              &xacc, x_increment);
-          y1 = j + 1;
-        }
-        vs_scanline_merge_linear_UYVY (dest->pixels + i * dest->stride,
-            tmp2, tmp1, dest->width, x);
-      } else {
-        xacc = 0;
-        vs_scanline_resample_linear_UYVY (tmp1, src->pixels + j * src->stride,
-            src->width, dest->width, &xacc, x_increment);
-        y1 = j;
-        xacc = 0;
-        vs_scanline_resample_linear_UYVY (tmp2,
-            src->pixels + (j + 1) * src->stride, src->width, dest->width,
-            &xacc, x_increment);
-        y2 = (j + 1);
-        vs_scanline_merge_linear_UYVY (dest->pixels + i * dest->stride,
-            tmp1, tmp2, dest->width, x);
-      }
-    }
-
-    acc += y_increment;
-  }
-}
-
-/* NV12 */
-
-void
-vs_image_scale_nearest_NV12 (const VSImage * dest, const VSImage * src,
-    uint8_t * tmpbuf)
-{
-  int acc;
-  int y_increment;
-  int x_increment;
-  int i;
-  int j;
-  int xacc;
-
-  if (dest->height == 1)
-    y_increment = 0;
-  else
-    y_increment = ((src->height - 1) << 16) / (dest->height - 1);
-
-  if (dest->width == 1)
-    x_increment = 0;
-  else
-    x_increment = ((src->width - 1) << 16) / (dest->width - 1);
-
-  acc = 0;
-  for (i = 0; i < dest->height; i++) {
-    j = (acc + 0x8000) >> 16;
-
-    xacc = 0;
-    vs_scanline_resample_nearest_NV12 (dest->pixels + i * dest->stride,
-        src->pixels + j * src->stride, src->width, dest->width, &xacc,
-        x_increment);
-
-    acc += y_increment;
-  }
-}
-
-void
-vs_image_scale_linear_NV12 (const VSImage * dest, const VSImage * src,
-    uint8_t * tmpbuf)
-{
-  int acc;
-  int y_increment;
-  int x_increment;
-  uint8_t *tmp1;
-  uint8_t *tmp2;
-  int y1;
-  int y2;
-  int i;
-  int j;
-  int x;
-  int dest_size;
-  int xacc;
-
-  if (dest->height == 1)
-    y_increment = 0;
-  else
-    y_increment = ((src->height - 1) << 16) / (dest->height - 1) - 1;
-
-  if (dest->width == 1)
-    x_increment = 0;
-  else
-    x_increment = ((src->width - 1) << 16) / (dest->width - 1) - 1;
-
-  dest_size = ROUND_UP_4 (dest->width * 2);
-
-  tmp1 = tmpbuf;
-  tmp2 = tmpbuf + dest_size;
-
-  acc = 0;
-  xacc = 0;
-  y2 = -1;
-  vs_scanline_resample_linear_NV12 (tmp1, src->pixels, src->width, dest->width,
-      &xacc, x_increment);
-  y1 = 0;
-  for (i = 0; i < dest->height; i++) {
-    j = acc >> 16;
-    x = acc & 0xffff;
-
-    if (x == 0) {
-      if (j == y1) {
-        memcpy (dest->pixels + i * dest->stride, tmp1, dest_size);
-      } else if (j == y2) {
-        memcpy (dest->pixels + i * dest->stride, tmp2, dest_size);
-      } else {
-        xacc = 0;
-        vs_scanline_resample_linear_NV12 (tmp1, src->pixels + j * src->stride,
-            src->width, dest->width, &xacc, x_increment);
-        y1 = j;
-        memcpy (dest->pixels + i * dest->stride, tmp1, dest_size);
-      }
-    } else {
-      if (j == y1) {
-        if (j + 1 != y2) {
-          xacc = 0;
-          vs_scanline_resample_linear_NV12 (tmp2,
-              src->pixels + (j + 1) * src->stride, src->width, dest->width,
-              &xacc, x_increment);
-          y2 = j + 1;
-        }
-        vs_scanline_merge_linear_NV12 (dest->pixels + i * dest->stride,
-            tmp1, tmp2, dest->width, x);
-      } else if (j == y2) {
-        if (j + 1 != y1) {
-          xacc = 0;
-          vs_scanline_resample_linear_NV12 (tmp1,
-              src->pixels + (j + 1) * src->stride, src->width, dest->width,
-              &xacc, x_increment);
-          y1 = j + 1;
-        }
-        vs_scanline_merge_linear_NV12 (dest->pixels + i * dest->stride,
-            tmp2, tmp1, dest->width, x);
-      } else {
-        xacc = 0;
-        vs_scanline_resample_linear_NV12 (tmp1, src->pixels + j * src->stride,
-            src->width, dest->width, &xacc, x_increment);
-        y1 = j;
-        xacc = 0;
-        vs_scanline_resample_linear_NV12 (tmp2,
-            src->pixels + (j + 1) * src->stride, src->width, dest->width,
-            &xacc, x_increment);
-        y2 = (j + 1);
-        vs_scanline_merge_linear_NV12 (dest->pixels + i * dest->stride,
-            tmp1, tmp2, dest->width, x);
-      }
-    }
-
-    acc += y_increment;
-  }
-}
-
-/* greyscale */
-
-void
-vs_image_scale_nearest_Y (const VSImage * dest, const VSImage * src,
-    uint8_t * tmpbuf)
-{
-  int acc;
-  int y_increment;
-  int x_increment;
-  int i;
-  int j;
-
-  if (dest->height == 1)
-    y_increment = 0;
-  else
-    y_increment = ((src->height - 1) << 16) / (dest->height - 1);
-
-  if (dest->width == 1)
-    x_increment = 0;
-  else
-    x_increment = ((src->width - 1) << 16) / (dest->width - 1);
-
-  acc = 0;
-  for (i = 0; i < dest->height; i++) {
-    j = (acc + 0x8000) >> 16;
-
-    video_scale_orc_resample_nearest_u8 (dest->pixels + i * dest->stride,
-        src->pixels + j * src->stride, 0, x_increment, dest->width);
-    acc += y_increment;
-  }
-}
-
-void
-vs_image_scale_linear_Y (const VSImage * dest, const VSImage * src,
-    uint8_t * tmpbuf)
-{
-  int acc;
-  int y_increment;
-  int x_increment;
-  uint8_t *tmp1;
-  uint8_t *tmp2;
-  int y1;
-  int y2;
-  int i;
-  int j;
-  int x;
-  int dest_size;
-
-  if (dest->height == 1)
-    y_increment = 0;
-  else
-    y_increment = ((src->height - 1) << 16) / (dest->height - 1) - 1;
-
-  if (dest->width == 1)
-    x_increment = 0;
-  else
-    x_increment = ((src->width - 1) << 16) / (dest->width - 1) - 1;
-
-  dest_size = dest->width;
-
-  tmp1 = tmpbuf;
-  tmp2 = tmpbuf + dest_size;
-
-  acc = 0;
-  y2 = -1;
-  video_scale_orc_resample_bilinear_u8 (tmp1, src->pixels,
-      0, x_increment, dest->width);
-  y1 = 0;
-  for (i = 0; i < dest->height; i++) {
-    j = acc >> 16;
-    x = acc & 0xffff;
-
-    if (x == 0) {
-      if (j == y1) {
-        memcpy (dest->pixels + i * dest->stride, tmp1, dest_size);
-      } else if (j == y2) {
-        memcpy (dest->pixels + i * dest->stride, tmp2, dest_size);
-      } else {
-        video_scale_orc_resample_bilinear_u8 (tmp1,
-            src->pixels + j * src->stride, 0, x_increment, dest->width);
-        y1 = j;
-        memcpy (dest->pixels + i * dest->stride, tmp1, dest_size);
-      }
-    } else {
-      if (j == y1) {
-        if (j + 1 != y2) {
-          video_scale_orc_resample_bilinear_u8 (tmp2,
-              src->pixels + (j + 1) * src->stride, 0, x_increment, dest->width);
-          y2 = j + 1;
-        }
-        if ((x >> 8) == 0) {
-          memcpy (dest->pixels + i * dest->stride, tmp1, dest->width);
-        } else {
-          video_scale_orc_merge_linear_u8 (dest->pixels + i * dest->stride,
-              tmp1, tmp2, (x >> 8), dest->width);
-        }
-      } else if (j == y2) {
-        if (j + 1 != y1) {
-          video_scale_orc_resample_bilinear_u8 (tmp1,
-              src->pixels + (j + 1) * src->stride, 0, x_increment, dest->width);
-          y1 = j + 1;
-        }
-        if ((x >> 8) == 0) {
-          memcpy (dest->pixels + i * dest->stride, tmp2, dest->width);
-        } else {
-          video_scale_orc_merge_linear_u8 (dest->pixels + i * dest->stride,
-              tmp2, tmp1, (x >> 8), dest->width);
-        }
-      } else {
-        video_scale_orc_resample_bilinear_u8 (tmp1,
-            src->pixels + j * src->stride, 0, x_increment, dest->width);
-        y1 = j;
-        video_scale_orc_resample_bilinear_u8 (tmp2,
-            src->pixels + (j + 1) * src->stride, 0, x_increment, dest->width);
-        y2 = (j + 1);
-        if ((x >> 8) == 0) {
-          memcpy (dest->pixels + i * dest->stride, tmp1, dest->width);
-        } else {
-          video_scale_orc_merge_linear_u8 (dest->pixels + i * dest->stride,
-              tmp1, tmp2, (x >> 8), dest->width);
-        }
-      }
-    }
-
-    acc += y_increment;
-  }
-}
-
-void
-vs_image_scale_nearest_Y16 (const VSImage * dest, const VSImage * src,
-    uint8_t * tmpbuf)
-{
-  int acc;
-  int y_increment;
-  int x_increment;
-  int i;
-  int j;
-  int xacc;
-
-  if (dest->height == 1)
-    y_increment = 0;
-  else
-    y_increment = ((src->height - 1) << 16) / (dest->height - 1);
-
-  if (dest->width == 1)
-    x_increment = 0;
-  else
-    x_increment = ((src->width - 1) << 16) / (dest->width - 1);
-
-  acc = 0;
-  for (i = 0; i < dest->height; i++) {
-    j = (acc + 0x8000) >> 16;
-
-    xacc = 0;
-    vs_scanline_resample_nearest_Y16 (dest->pixels + i * dest->stride,
-        src->pixels + j * src->stride, src->width, dest->width, &xacc,
-        x_increment);
-
-    acc += y_increment;
-  }
-}
-
-void
-vs_image_scale_linear_Y16 (const VSImage * dest, const VSImage * src,
-    uint8_t * tmpbuf)
-{
-  int acc;
-  int y_increment;
-  int x_increment;
-  uint8_t *tmp1;
-  uint8_t *tmp2;
-  int y1;
-  int y2;
-  int i;
-  int j;
-  int x;
-  int dest_size;
-  int xacc;
-
-  if (dest->height == 1)
-    y_increment = 0;
-  else
-    y_increment = ((src->height - 1) << 16) / (dest->height - 1) - 1;
-
-  if (dest->width == 1)
-    x_increment = 0;
-  else
-    x_increment = ((src->width - 1) << 16) / (dest->width - 1) - 1;
-
-  dest_size = 2 * dest->width;
-
-  tmp1 = tmpbuf;
-  tmp2 = tmpbuf + dest_size;
-
-  acc = 0;
-  xacc = 0;
-  y2 = -1;
-  vs_scanline_resample_linear_Y16 (tmp1, src->pixels, src->width, dest->width,
-      &xacc, x_increment);
-  y1 = 0;
-  for (i = 0; i < dest->height; i++) {
-    j = acc >> 16;
-    x = acc & 0xffff;
-
-    if (x == 0) {
-      if (j == y1) {
-        memcpy (dest->pixels + i * dest->stride, tmp1, dest_size);
-      } else if (j == y2) {
-        memcpy (dest->pixels + i * dest->stride, tmp2, dest_size);
-      } else {
-        xacc = 0;
-        vs_scanline_resample_linear_Y16 (tmp1, src->pixels + j * src->stride,
-            src->width, dest->width, &xacc, x_increment);
-        y1 = j;
-        memcpy (dest->pixels + i * dest->stride, tmp1, dest_size);
-      }
-    } else {
-      if (j == y1) {
-        if (j + 1 != y2) {
-          xacc = 0;
-          vs_scanline_resample_linear_Y16 (tmp2,
-              src->pixels + (j + 1) * src->stride, src->width, dest->width,
-              &xacc, x_increment);
-          y2 = j + 1;
-        }
-        vs_scanline_merge_linear_Y16 (dest->pixels + i * dest->stride,
-            tmp1, tmp2, dest->width, x);
-      } else if (j == y2) {
-        if (j + 1 != y1) {
-          xacc = 0;
-          vs_scanline_resample_linear_Y16 (tmp1,
-              src->pixels + (j + 1) * src->stride, src->width, dest->width,
-              &xacc, x_increment);
-          y1 = j + 1;
-        }
-        vs_scanline_merge_linear_Y16 (dest->pixels + i * dest->stride,
-            tmp2, tmp1, dest->width, x);
-      } else {
-        xacc = 0;
-        vs_scanline_resample_linear_Y16 (tmp1, src->pixels + j * src->stride,
-            src->width, dest->width, &xacc, x_increment);
-        y1 = j;
-        xacc = 0;
-        vs_scanline_resample_linear_Y16 (tmp2,
-            src->pixels + (j + 1) * src->stride, src->width, dest->width, &xacc,
-            x_increment);
-        y2 = (j + 1);
-        vs_scanline_merge_linear_Y16 (dest->pixels + i * dest->stride,
-            tmp1, tmp2, dest->width, x);
-      }
-    }
-
-    acc += y_increment;
-  }
-}
-
-/* RGB565 */
-
-void
-vs_image_scale_nearest_RGB565 (const VSImage * dest, const VSImage * src,
-    uint8_t * tmpbuf)
-{
-  int acc;
-  int y_increment;
-  int x_increment;
-  int i;
-  int j;
-  int xacc;
-
-  if (dest->height == 1)
-    y_increment = 0;
-  else
-    y_increment = ((src->height - 1) << 16) / (dest->height - 1);
-
-  if (dest->width == 1)
-    x_increment = 0;
-  else
-    x_increment = ((src->width - 1) << 16) / (dest->width - 1);
-
-  acc = 0;
-  for (i = 0; i < dest->height; i++) {
-    j = (acc + 0x8000) >> 16;
-
-    xacc = 0;
-    vs_scanline_resample_nearest_RGB565 (dest->pixels + i * dest->stride,
-        src->pixels + j * src->stride, src->width, dest->width, &xacc,
-        x_increment);
-
-    acc += y_increment;
-  }
-}
-
-void
-vs_image_scale_linear_RGB565 (const VSImage * dest, const VSImage * src,
-    uint8_t * tmpbuf)
-{
-  int acc;
-  int y_increment;
-  int x_increment;
-  uint8_t *tmp1;
-  uint8_t *tmp2;
-  int y1;
-  int y2;
-  int i;
-  int j;
-  int x;
-  int dest_size;
-  int xacc;
-
-  if (dest->height == 1)
-    y_increment = 0;
-  else
-    y_increment = ((src->height - 1) << 16) / (dest->height - 1) - 1;
-
-  if (dest->width == 1)
-    x_increment = 0;
-  else
-    x_increment = ((src->width - 1) << 16) / (dest->width - 1) - 1;
-
-  dest_size = dest->width * 2;
-
-  tmp1 = tmpbuf;
-  tmp2 = tmpbuf + dest_size;
-
-  acc = 0;
-  xacc = 0;
-  y2 = -1;
-  vs_scanline_resample_linear_RGB565 (tmp1, src->pixels, src->width,
-      dest->width, &xacc, x_increment);
-  y1 = 0;
-  for (i = 0; i < dest->height; i++) {
-    j = acc >> 16;
-    x = acc & 0xffff;
-
-    if (x == 0) {
-      if (j == y1) {
-        memcpy (dest->pixels + i * dest->stride, tmp1, dest_size);
-      } else if (j == y2) {
-        memcpy (dest->pixels + i * dest->stride, tmp2, dest_size);
-      } else {
-        xacc = 0;
-        vs_scanline_resample_linear_RGB565 (tmp1, src->pixels + j * src->stride,
-            src->width, dest->width, &xacc, x_increment);
-        y1 = j;
-        memcpy (dest->pixels + i * dest->stride, tmp1, dest_size);
-      }
-    } else {
-      if (j == y1) {
-        if (j + 1 != y2) {
-          xacc = 0;
-          vs_scanline_resample_linear_RGB565 (tmp2,
-              src->pixels + (j + 1) * src->stride, src->width, dest->width,
-              &xacc, x_increment);
-          y2 = j + 1;
-        }
-        vs_scanline_merge_linear_RGB565 (dest->pixels + i * dest->stride,
-            tmp1, tmp2, dest->width, x);
-      } else if (j == y2) {
-        if (j + 1 != y1) {
-          xacc = 0;
-          vs_scanline_resample_linear_RGB565 (tmp1,
-              src->pixels + (j + 1) * src->stride, src->width, dest->width,
-              &xacc, x_increment);
-          y1 = j + 1;
-        }
-        vs_scanline_merge_linear_RGB565 (dest->pixels + i * dest->stride,
-            tmp2, tmp1, dest->width, x);
-      } else {
-        xacc = 0;
-        vs_scanline_resample_linear_RGB565 (tmp1, src->pixels + j * src->stride,
-            src->width, dest->width, &xacc, x_increment);
-        y1 = j;
-        xacc = 0;
-        vs_scanline_resample_linear_RGB565 (tmp2,
-            src->pixels + (j + 1) * src->stride, src->width, dest->width, &xacc,
-            x_increment);
-        y2 = (j + 1);
-        vs_scanline_merge_linear_RGB565 (dest->pixels + i * dest->stride,
-            tmp1, tmp2, dest->width, x);
-      }
-    }
-
-    acc += y_increment;
-  }
-}
-
-/* RGB555 */
-
-void
-vs_image_scale_nearest_RGB555 (const VSImage * dest, const VSImage * src,
-    uint8_t * tmpbuf)
-{
-  int acc;
-  int y_increment;
-  int x_increment;
-  int i;
-  int j;
-  int xacc;
-
-  if (dest->height == 1)
-    y_increment = 0;
-  else
-    y_increment = ((src->height - 1) << 16) / (dest->height - 1);
-
-  if (dest->width == 1)
-    x_increment = 0;
-  else
-    x_increment = ((src->width - 1) << 16) / (dest->width - 1);
-
-  acc = 0;
-  for (i = 0; i < dest->height; i++) {
-    j = (acc + 0x8000) >> 16;
-
-    xacc = 0;
-    vs_scanline_resample_nearest_RGB555 (dest->pixels + i * dest->stride,
-        src->pixels + j * src->stride, src->width, dest->width, &xacc,
-        x_increment);
-
-    acc += y_increment;
-  }
-}
-
-void
-vs_image_scale_linear_RGB555 (const VSImage * dest, const VSImage * src,
-    uint8_t * tmpbuf)
-{
-  int acc;
-  int y_increment;
-  int x_increment;
-  uint8_t *tmp1;
-  uint8_t *tmp2;
-  int y1;
-  int y2;
-  int i;
-  int j;
-  int x;
-  int dest_size;
-  int xacc;
-
-  if (dest->height == 1)
-    y_increment = 0;
-  else
-    y_increment = ((src->height - 1) << 16) / (dest->height - 1) - 1;
-
-  if (dest->width == 1)
-    x_increment = 0;
-  else
-    x_increment = ((src->width - 1) << 16) / (dest->width - 1) - 1;
-
-  dest_size = dest->width * 2;
-
-  tmp1 = tmpbuf;
-  tmp2 = tmpbuf + dest_size;
-
-  acc = 0;
-  xacc = 0;
-  y2 = -1;
-  vs_scanline_resample_linear_RGB555 (tmp1, src->pixels, src->width,
-      dest->width, &xacc, x_increment);
-  y1 = 0;
-  for (i = 0; i < dest->height; i++) {
-    j = acc >> 16;
-    x = acc & 0xffff;
-
-    if (x == 0) {
-      if (j == y1) {
-        memcpy (dest->pixels + i * dest->stride, tmp1, dest_size);
-      } else if (j == y2) {
-        memcpy (dest->pixels + i * dest->stride, tmp2, dest_size);
-      } else {
-        xacc = 0;
-        vs_scanline_resample_linear_RGB555 (tmp1, src->pixels + j * src->stride,
-            src->width, dest->width, &xacc, x_increment);
-        y1 = j;
-        memcpy (dest->pixels + i * dest->stride, tmp1, dest_size);
-      }
-    } else {
-      if (j == y1) {
-        if (j + 1 != y2) {
-          xacc = 0;
-          vs_scanline_resample_linear_RGB555 (tmp2,
-              src->pixels + (j + 1) * src->stride, src->width, dest->width,
-              &xacc, x_increment);
-          y2 = j + 1;
-        }
-        vs_scanline_merge_linear_RGB555 (dest->pixels + i * dest->stride,
-            tmp1, tmp2, dest->width, x);
-      } else if (j == y2) {
-        if (j + 1 != y1) {
-          xacc = 0;
-          vs_scanline_resample_linear_RGB555 (tmp1,
-              src->pixels + (j + 1) * src->stride, src->width, dest->width,
-              &xacc, x_increment);
-          y1 = j + 1;
-        }
-        vs_scanline_merge_linear_RGB555 (dest->pixels + i * dest->stride,
-            tmp2, tmp1, dest->width, x);
-      } else {
-        xacc = 0;
-        vs_scanline_resample_linear_RGB555 (tmp1, src->pixels + j * src->stride,
-            src->width, dest->width, &xacc, x_increment);
-        y1 = j;
-        xacc = 0;
-        vs_scanline_resample_linear_RGB555 (tmp2,
-            src->pixels + (j + 1) * src->stride, src->width, dest->width, &xacc,
-            x_increment);
-        y2 = (j + 1);
-        vs_scanline_merge_linear_RGB555 (dest->pixels + i * dest->stride,
-            tmp1, tmp2, dest->width, x);
-      }
-    }
-
-    acc += y_increment;
-  }
-}
-
-void
-vs_image_scale_nearest_AYUV64 (const VSImage * dest, const VSImage * src,
-    uint8_t * tmpbuf8)
-{
-  int acc;
-  int y_increment;
-  int x_increment;
-  int i;
-  int j;
-  int prev_j;
-
-  if (dest->height == 1)
-    y_increment = 0;
-  else
-    y_increment = ((src->height - 1) << 16) / (dest->height - 1);
-
-  if (dest->width == 1)
-    x_increment = 0;
-  else
-    x_increment = ((src->width - 1) << 16) / (dest->width - 1);
-
-
-  acc = 0;
-  prev_j = -1;
-  for (i = 0; i < dest->height; i++) {
-    j = (acc + 0x8000) >> 16;
-
-    if (j == prev_j) {
-      memcpy (dest->pixels + i * dest->stride,
-          dest->pixels + (i - 1) * dest->stride, dest->width * 8);
-    } else {
-      int xacc = 0;
-      vs_scanline_resample_nearest_AYUV64 (dest->pixels + i * dest->stride,
-          src->pixels + j * src->stride, src->width, dest->width, &xacc,
-          x_increment);
-    }
-
-    prev_j = j;
-    acc += y_increment;
-  }
-}
-
-void
-vs_image_scale_linear_AYUV64 (const VSImage * dest, const VSImage * src,
-    uint8_t * tmpbuf)
-{
-  int acc;
-  int y_increment;
-  int x_increment;
-  int y1;
-  int i;
-  int j;
-  int x;
-  int dest_size;
-  int xacc;
-
-  if (dest->height == 1)
-    y_increment = 0;
-  else
-    y_increment = ((src->height - 1) << 16) / (dest->height - 1) - 1;
-
-  if (dest->width == 1)
-    x_increment = 0;
-  else
-    x_increment = ((src->width - 1) << 16) / (dest->width - 1) - 1;
-
-  dest_size = dest->width * 8;
-
-#undef LINE
-#define LINE(x) ((guint16 *)((tmpbuf) + (dest_size)*((x)&1)))
-
-  acc = 0;
-  xacc = 0;
-  vs_scanline_resample_linear_AYUV64 ((guint8 *) LINE (0),
-      src->pixels, src->width, dest->width, &xacc, x_increment);
-  y1 = 0;
-  for (i = 0; i < dest->height; i++) {
-    j = acc >> 16;
-    x = acc & 0xffff;
-
-    if (x == 0) {
-      memcpy (dest->pixels + i * dest->stride, LINE (j), dest_size);
-    } else {
-      if (j > y1) {
-        xacc = 0;
-        vs_scanline_resample_linear_AYUV64 ((guint8 *) LINE (j),
-            src->pixels + j * src->stride, src->width, dest->width, &xacc,
-            x_increment);
-        y1++;
-      }
-      if (j >= y1) {
-        xacc = 0;
-        vs_scanline_resample_linear_AYUV64 ((guint8 *) LINE (j + 1),
-            src->pixels + (j + 1) * src->stride, src->width, dest->width, &xacc,
-            x_increment);
-        video_scale_orc_merge_linear_u16 ((guint16 *) (dest->pixels +
-                i * dest->stride), LINE (j), LINE (j + 1), 65536 - x, x,
-            dest->width * 4);
-        y1++;
-      } else {
-        video_scale_orc_merge_linear_u16 ((guint16 *) (dest->pixels +
-                i * dest->stride), LINE (j), LINE (j + 1), 65536 - x, x,
-            dest->width * 4);
-      }
-    }
-
-    acc += y_increment;
-  }
-}
diff --git a/gst/videoscale/vs_image.h b/gst/videoscale/vs_image.h
deleted file mode 100644
index d0a30ec..0000000
--- a/gst/videoscale/vs_image.h
+++ /dev/null
@@ -1,174 +0,0 @@
-/*
- * Image Scaling Functions
- * Copyright (c) 2005 David A. Schleef <ds@schleef.org>
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. 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.
- * 
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 AUTHOR 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 __VS_IMAGE_H__
-#define __VS_IMAGE_H__
-
-#include <glib.h>
-#include <_stdint.h>
-
-typedef struct _VSImage VSImage;
-
-struct _VSImage {
-  uint8_t *real_pixels;
-  int real_width;
-  int real_height;
-  int border_left, border_right;
-  int border_top, border_bottom;
-  uint8_t *pixels;
-  int width;
-  int height;
-  gsize stride;
-};
-
-G_GNUC_INTERNAL void vs_image_scale_nearest_RGBA   (const VSImage * dest,
-                                                    const VSImage * src,
-                                                    uint8_t       * tmpbuf);
-G_GNUC_INTERNAL void vs_image_scale_linear_RGBA    (const VSImage * dest,
-                                                    const VSImage * src,
-                                                    uint8_t       * tmpbuf);
-
-
-G_GNUC_INTERNAL void vs_image_scale_lanczos_AYUV   (const VSImage * dest,
-                                                    const VSImage * src,
-                                                    uint8_t       * tmpbuf,
-                                                    double          sharpness,
-                                                    gboolean        dither,
-                                                    int             submethod,
-                                                    double          a,
-                                                    double          sharpen);
-
-G_GNUC_INTERNAL void vs_image_scale_lanczos_AYUV64 (const VSImage * dest,
-                                                    const VSImage * src,
-                                                    uint8_t       * tmpbuf,
-                                                    double          sharpness,
-                                                    gboolean        dither,
-                                                    int             submethod,
-                                                    double          a,
-                                                    double          sharpen);
-
-
-G_GNUC_INTERNAL void vs_image_scale_nearest_RGB    (const VSImage * dest,
-                                                    const VSImage * src,
-                                                    uint8_t       * tmpbuf);
-
-G_GNUC_INTERNAL void vs_image_scale_linear_RGB     (const VSImage * dest,
-                                                    const VSImage * src,
-                                                    uint8_t       * tmpbuf);
-
-
-G_GNUC_INTERNAL void vs_image_scale_nearest_YUYV   (const VSImage * dest,
-                                                    const VSImage * src,
-                                                    uint8_t       * tmpbuf);
-
-G_GNUC_INTERNAL void vs_image_scale_linear_YUYV    (const VSImage * dest,
-                                                    const VSImage * src,
-                                                    uint8_t       * tmpbuf);
-
-
-G_GNUC_INTERNAL void vs_image_scale_nearest_UYVY   (const VSImage * dest,
-                                                    const VSImage * src,
-                                                    uint8_t       * tmpbuf);
-
-G_GNUC_INTERNAL void vs_image_scale_linear_UYVY    (const VSImage * dest,
-                                                    const VSImage * src,
-                                                    uint8_t       * tmpbuf);
-
-
-G_GNUC_INTERNAL void vs_image_scale_nearest_NV12   (const VSImage * dest,
-                                                    const VSImage * src,
-                                                    uint8_t       * tmpbuf);
-
-G_GNUC_INTERNAL void vs_image_scale_linear_NV12    (const VSImage * dest,
-                                                    const VSImage * src,
-                                                    uint8_t       * tmpbuf);
-
-
-G_GNUC_INTERNAL void vs_image_scale_nearest_Y      (const VSImage * dest,
-                                                    const VSImage * src,
-                                                    uint8_t       * tmpbuf);
-
-G_GNUC_INTERNAL void vs_image_scale_linear_Y       (const VSImage * dest,
-                                                    const VSImage * src,
-                                                    uint8_t       * tmpbuf);
-
-G_GNUC_INTERNAL void vs_image_scale_lanczos_Y      (const VSImage * dest,
-                                                    const VSImage * src,
-                                                    uint8_t       * tmpbuf,
-                                                    double          sharpness,
-                                                    gboolean        dither,
-                                                    int             submethod,
-                                                    double          a,
-                                                    double          sharpen);
-
-
-G_GNUC_INTERNAL void vs_image_scale_nearest_RGB565 (const VSImage * dest,
-                                                    const VSImage * src,
-                                                    uint8_t       * tmpbuf);
-
-G_GNUC_INTERNAL void vs_image_scale_linear_RGB565  (const VSImage * dest,
-                                                    const VSImage * src,
-                                                    uint8_t       * tmpbuf);
-
-
-G_GNUC_INTERNAL void vs_image_scale_nearest_RGB555 (const VSImage * dest,
-                                                    const VSImage * src,
-                                                    uint8_t       * tmpbuf);
-
-G_GNUC_INTERNAL void vs_image_scale_linear_RGB555  (const VSImage * dest,
-                                                    const VSImage * src,
-                                                    uint8_t       * tmpbuf);
-
-
-G_GNUC_INTERNAL void vs_image_scale_nearest_Y16    (const VSImage * dest,
-                                                    const VSImage * src,
-                                                    uint8_t       * tmpbuf);
-
-G_GNUC_INTERNAL void vs_image_scale_linear_Y16     (const VSImage * dest,
-                                                    const VSImage * src,
-                                                    uint8_t       * tmpbuf);
-
-
-G_GNUC_INTERNAL void vs_image_scale_nearest_AYUV16 (const VSImage * dest,
-                                                    const VSImage * src,
-                                                    uint8_t       * tmpbuf);
-
-G_GNUC_INTERNAL void vs_image_scale_linear_AYUV16  (const VSImage * dest,
-                                                    const VSImage * src,
-                                                    uint8_t       * tmpbuf);
-
-
-G_GNUC_INTERNAL void vs_image_scale_nearest_AYUV64 (const VSImage * dest,
-                                                    const VSImage * src,
-                                                    uint8_t       * tmpbuf8);
-
-G_GNUC_INTERNAL void vs_image_scale_linear_AYUV64  (const VSImage * dest,
-                                                    const VSImage * src,
-                                                    uint8_t       * tmpbuf8);
-
-#endif
-
diff --git a/gst/videoscale/vs_lanczos.c b/gst/videoscale/vs_lanczos.c
deleted file mode 100644
index 929a763..0000000
--- a/gst/videoscale/vs_lanczos.c
+++ /dev/null
@@ -1,1656 +0,0 @@
-/*
- * Image Scaling Functions
- * Copyright (c) 2011 David A. Schleef <ds@schleef.org>
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. 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.
- * 
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 AUTHOR 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.
- */
-/*
- *
- * Modified Lanczos scaling algorithm
- * ==================================
- *
- * This algorithm was developed by the author.  The primary goals of
- * the algorithm are high-quality video downscaling for medium scale
- * factors (in the range of 1.3x to 5.0x) using methods that can be
- * converted to SIMD code.  Concerns with existing algorithms were
- * mainly related to either over-soft filtering (Lanczos) or aliasing
- * (bilinear or any other method with inadequate sampling).
- *
- * The problems with bilinear scaling are apparent when downscaling
- * more than a factor of 2.  For example, when downscaling by a factor
- * of 3, only two-thirds of the input pixels contribute to the output
- * pixels.  This is only considering scaling in one direction; after
- * scaling both vertically and horizontally in a 2-D image, fewer than
- * half of the input pixels contribute to the output, so it should not
- * be surprising that the output is suboptimal.
- *
- * The problems with Lanczos scaling are more subtle.  From a theoretical
- * perspective, Lanczos is an optimal algorithm for resampling equally-
- * spaced values.  This theoretical perspective is based on analysis
- * done in frequency space, thus, Lanczos works very well for audio
- * resampling, since the ear hears primarily in frequency space.  The
- * human visual system is sensitive primarily in the spatial domain,
- * therefore any resampling algorithm should take this into account.
- * This difference is immediately clear in the size of resampling
- * window or envelope that is chosen for resampling: for audio, an
- * envelope of a=64 is typical, in image scaling, the envelope is
- * usually a=2 or a=3.
- *
- * One result of the HVS being sensitive in the spatial domain (and
- * also probably due to oversampling capabilities of the retina and
- * visual cortex) is that it is less sensitive to the exact magnitude
- * of high-frequency visual signals than to the appropriate amount of
- * energy in the nearby frequency band.  A Lanczos kernel with a=2
- * or a=3 strongly decreases the amount of energy in the high frequency
- * bands.  The energy in this area can be increased by increasing a,
- * which brings in energy from different areas of the image (bad for
- * reasons mentioned above), or by oversampling the input data.  We
- * have chosen two methods for doing the latter.  Firstly, there is
- * a sharpness parameter, which increases the cutoff frequency of the
- * filter, aliasing higher frequency noise into the passband.  And
- * secondly, there is the sharpen parameter, which increases the
- * contribution of high-frequency (but in-band) components.
- *
- * An alternate explanation of the usefulness of a sharpening filter
- * is that many natural images have a roughly 1/f spectrum.  In order
- * for a downsampled image to look more "natural" when high frequencies
- * are removed, the frequencies in the pass band near the cutoff
- * frequency are amplified, causing the spectrum to be more roughly
- * 1/f.  I said "roughly", not "literally".
- *
- * This alternate explanation is useful for understanding the author's
- * secondary motivation for developing this algorithm, namely, as a
- * method of video compression.  Several recent techniques (such as
- * HTTP Live Streaming and SVC) use image scaling as a method to get
- * increased compression out of nominally non-scalable codecs such as
- * H.264.  For optimal quality, it is thusly important to consider
- * the scaler and encoder as a combined unit.  Tuning of the sharpness
- * and sharpen parameters was performed using the Toro encoder tuner,
- * where scaled and encoded video was compared to unscaled and encoded
- * video.  This tuning suggested values that were very close to the
- * values chosen by manual inspection of scaled images and video.
- *
- * The optimal values of sharpen and sharpness were slightly different
- * depending whether the comparison was still images or video.  Video
- * comparisons were more sensitive to aliasing, since the aliasing
- * artifacts tended to move or "crawl" around the video.  The default
- * values are for video; image scaling may prefer higher values.
- *
- * A number of related techniques were rejected for various reasons.
- * An early technique of selecting the sharpness factor locally based
- * on edge detection (in order to use a higher sharpness values without
- * the corresponding aliasing on edges) worked very well for still
- * images, but caused too much "crawling" on textures in video.  Also,
- * this method is slow, as it does not parallelize well.
- *
- * Non-separable techniques were rejected because the fastest would
- * have been at least 4x slower.
- *
- * It is infrequently appreciated that image scaling should ideally be
- * done in linear light space.  Converting to linear light space has
- * a similar effect to a sharpening filter.  This approach was not
- * taken because the added benefit is minor compared to the additional
- * computational cost.  Morever, the benefit is decreased by increasing
- * the strength of the sharpening filter.
- *
- */
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include <string.h>
-
-#include "vs_scanline.h"
-#include "vs_image.h"
-
-#include "gstvideoscaleorc.h"
-#include <gst/gst.h>
-#include <math.h>
-
-#define NEED_CLAMP(x,a,b) ((x) < (a) || (x) > (b))
-
-#define ROUND_UP_2(x)  (((x)+1)&~1)
-#define ROUND_UP_4(x)  (((x)+3)&~3)
-#define ROUND_UP_8(x)  (((x)+7)&~7)
-
-#define SRC_LINE(i) (scale->src->pixels + scale->src->stride * (i))
-
-#define TMP_LINE_S16(i) ((gint16 *)scale->tmpdata + (i)*(scale->dest->width))
-#define TMP_LINE_S32(i) ((gint32 *)scale->tmpdata + (i)*(scale->dest->width))
-#define TMP_LINE_FLOAT(i) ((float *)scale->tmpdata + (i)*(scale->dest->width))
-#define TMP_LINE_DOUBLE(i) ((double *)scale->tmpdata + (i)*(scale->dest->width))
-#define TMP_LINE_S16_AYUV(i) ((gint16 *)scale->tmpdata + (i)*4*(scale->dest->width))
-#define TMP_LINE_S32_AYUV(i) ((gint32 *)scale->tmpdata + (i)*4*(scale->dest->width))
-#define TMP_LINE_FLOAT_AYUV(i) ((float *)scale->tmpdata + (i)*4*(scale->dest->width))
-#define TMP_LINE_DOUBLE_AYUV(i) ((double *)scale->tmpdata + (i)*4*(scale->dest->width))
-
-#define PTR_OFFSET(a,b) ((void *)((char *)(a) + (b)))
-
-typedef void (*HorizResampleFunc) (void *dest, const gint32 * offsets,
-    const void *taps, const void *src, int n_taps, int shift, int n);
-
-typedef struct _Scale1D Scale1D;
-struct _Scale1D
-{
-  int n;
-  double offset;
-  double scale;
-
-  double fx;
-  double ex;
-  int dx;
-
-  int n_taps;
-  gint32 *offsets;
-  void *taps;
-};
-
-typedef struct _Scale Scale;
-struct _Scale
-{
-  const VSImage *dest;
-  const VSImage *src;
-
-  double sharpness;
-  gboolean dither;
-
-  void *tmpdata;
-
-  HorizResampleFunc horiz_resample_func;
-
-  Scale1D x_scale1d;
-  Scale1D y_scale1d;
-};
-
-static void
-vs_image_scale_lanczos_Y_int16 (const VSImage * dest, const VSImage * src,
-    uint8_t * tmpbuf, double sharpness, gboolean dither, double a,
-    double sharpen);
-static void vs_image_scale_lanczos_Y_int32 (const VSImage * dest,
-    const VSImage * src, uint8_t * tmpbuf, double sharpness, gboolean dither,
-    double a, double sharpen);
-static void vs_image_scale_lanczos_Y_float (const VSImage * dest,
-    const VSImage * src, uint8_t * tmpbuf, double sharpness, gboolean dither,
-    double a, double sharpen);
-static void vs_image_scale_lanczos_Y_double (const VSImage * dest,
-    const VSImage * src, uint8_t * tmpbuf, double sharpness, gboolean dither,
-    double a, double sharpen);
-static void
-vs_image_scale_lanczos_AYUV_int16 (const VSImage * dest, const VSImage * src,
-    uint8_t * tmpbuf, double sharpness, gboolean dither, double a,
-    double sharpen);
-static void vs_image_scale_lanczos_AYUV_int32 (const VSImage * dest,
-    const VSImage * src, uint8_t * tmpbuf, double sharpness, gboolean dither,
-    double a, double sharpen);
-static void vs_image_scale_lanczos_AYUV_float (const VSImage * dest,
-    const VSImage * src, uint8_t * tmpbuf, double sharpness, gboolean dither,
-    double a, double sharpen);
-static void vs_image_scale_lanczos_AYUV_double (const VSImage * dest,
-    const VSImage * src, uint8_t * tmpbuf, double sharpness, gboolean dither,
-    double a, double sharpen);
-static void vs_image_scale_lanczos_AYUV64_double (const VSImage * dest,
-    const VSImage * src, uint8_t * tmpbuf, double sharpness, gboolean dither,
-    double a, double sharpen);
-
-static double
-sinc (double x)
-{
-  if (x == 0)
-    return 1;
-  return sin (G_PI * x) / (G_PI * x);
-}
-
-static double
-envelope (double x)
-{
-  if (x <= -1 || x >= 1)
-    return 0;
-  return sinc (x);
-}
-
-static int
-scale1d_get_n_taps (int src_size, int dest_size, double a, double sharpness)
-{
-  double scale;
-  double fx;
-  int dx;
-
-  scale = src_size / (double) dest_size;
-  if (scale > 1.0) {
-    fx = (1.0 / scale) * sharpness;
-  } else {
-    fx = (1.0) * sharpness;
-  }
-  dx = ceil (a / fx);
-
-  return 2 * dx;
-}
-
-static void
-scale1d_cleanup (Scale1D * scale)
-{
-  g_free (scale->taps);
-  g_free (scale->offsets);
-}
-
-/*
- * Calculates a set of taps for each destination element in double
- * format.  Each set of taps sums to 1.0.
- *
- */
-static void
-scale1d_calculate_taps (Scale1D * scale, int src_size, int dest_size,
-    int n_taps, double a, double sharpness, double sharpen)
-{
-  int j;
-  double *tap_array;
-  gint32 *offsets;
-  double scale_offset;
-  double scale_increment;
-  int dx;
-  double fx;
-  double ex;
-
-  scale->scale = src_size / (double) dest_size;
-  scale->offset = scale->scale / 2 - 0.5;
-
-  if (scale->scale > 1.0) {
-    scale->fx = (1.0 / scale->scale) * sharpness;
-  } else {
-    scale->fx = (1.0) * sharpness;
-  }
-  scale->ex = scale->fx / a;
-  scale->dx = ceil (a / scale->fx);
-
-  g_assert (n_taps >= 2 * scale->dx);
-  scale->n_taps = n_taps;
-
-  scale->taps = g_malloc (sizeof (double) * scale->n_taps * dest_size);
-  scale->offsets = g_malloc (sizeof (gint32) * dest_size);
-  tap_array = scale->taps;
-  offsets = scale->offsets;
-
-  scale_offset = scale->offset;
-  scale_increment = scale->scale;
-  dx = scale->dx;
-  fx = scale->fx;
-  ex = scale->ex;
-
-  for (j = 0; j < dest_size; j++) {
-    double x;
-    int xi;
-    int l;
-    double weight;
-    double *taps;
-
-    x = scale_offset + scale_increment * j;
-    x = CLAMP (x, 0, src_size);
-    xi = ceil (x) - dx;
-
-    offsets[j] = xi;
-    weight = 0;
-    taps = tap_array + j * n_taps;
-
-    for (l = 0; l < n_taps; l++) {
-      int xl = xi + l;
-      taps[l] = sinc ((x - xl) * fx) * envelope ((x - xl) * ex);
-      taps[l] -= sharpen * envelope ((x - xl) * ex);
-      weight += taps[l];
-    }
-    g_assert (envelope ((x - (xi - 1)) * ex) == 0);
-    g_assert (envelope ((x - (xi + n_taps)) * ex) == 0);
-    for (l = 0; l < n_taps; l++) {
-      taps[l] /= weight;
-    }
-
-    if (xi < 0) {
-      int shift = -xi;
-
-      for (l = 0; l < shift; l++) {
-        taps[shift] += taps[l];
-      }
-      for (l = 0; l < n_taps - shift; l++) {
-        taps[l] = taps[shift + l];
-      }
-      for (; l < n_taps; l++) {
-        taps[l] = 0;
-      }
-      offsets[j] += shift;
-    }
-
-    if (xi > src_size - n_taps) {
-      int shift = xi - (src_size - n_taps);
-
-      for (l = 0; l < shift; l++) {
-        taps[n_taps - shift - 1] += taps[n_taps - shift + l];
-      }
-      for (l = 0; l < n_taps - shift; l++) {
-        taps[n_taps - 1 - l] = taps[n_taps - 1 - shift - l];
-      }
-      for (l = 0; l < shift; l++) {
-        taps[l] = 0;
-      }
-      offsets[j] -= shift;
-    }
-  }
-}
-
-/*
- * Calculates a set of taps for each destination element in float
- * format.  Each set of taps sums to 1.0.
- */
-static void
-scale1d_calculate_taps_float (Scale1D * scale, int src_size, int dest_size,
-    int n_taps, double a, double sharpness, double sharpen)
-{
-  double *taps_d;
-  float *taps_f;
-  int j;
-
-  scale1d_calculate_taps (scale, src_size, dest_size, n_taps, a, sharpness,
-      sharpen);
-
-  taps_d = scale->taps;
-  taps_f = g_malloc (sizeof (float) * scale->n_taps * dest_size);
-
-  for (j = 0; j < dest_size * n_taps; j++) {
-    taps_f[j] = taps_d[j];
-  }
-
-  g_free (taps_d);
-  scale->taps = taps_f;
-}
-
-/*
- * Calculates a set of taps for each destination element in gint32
- * format.  Each set of taps sums to (very nearly) (1<<shift).  A
- * typical value for shift is 10 to 15, so that applying the taps to
- * uint8 values and summing will fit in a (signed) int32.
- */
-static void
-scale1d_calculate_taps_int32 (Scale1D * scale, int src_size, int dest_size,
-    int n_taps, double a, double sharpness, double sharpen, int shift)
-{
-  double *taps_d;
-  gint32 *taps_i;
-  int i;
-  int j;
-  double multiplier;
-
-  scale1d_calculate_taps (scale, src_size, dest_size, n_taps, a, sharpness,
-      sharpen);
-
-  taps_d = scale->taps;
-  taps_i = g_malloc (sizeof (gint32) * scale->n_taps * dest_size);
-
-  multiplier = (1 << shift);
-
-  for (j = 0; j < dest_size; j++) {
-    for (i = 0; i < n_taps; i++) {
-      taps_i[j * n_taps + i] =
-          floor (0.5 + taps_d[j * n_taps + i] * multiplier);
-    }
-  }
-
-  g_free (taps_d);
-  scale->taps = taps_i;
-}
-
-/*
- * Calculates a set of taps for each destination element in gint16
- * format.  Each set of taps sums to (1<<shift).  A typical value
- * for shift is 7, so that applying the taps to uint8 values and
- * summing will fit in a (signed) int16.
- */
-static void
-scale1d_calculate_taps_int16 (Scale1D * scale, int src_size, int dest_size,
-    int n_taps, double a, double sharpness, double sharpen, int shift)
-{
-  double *taps_d;
-  gint16 *taps_i;
-  int i;
-  int j;
-  double multiplier;
-
-  scale1d_calculate_taps (scale, src_size, dest_size, n_taps, a, sharpness,
-      sharpen);
-
-  taps_d = scale->taps;
-  taps_i = g_malloc (sizeof (gint16) * scale->n_taps * dest_size);
-
-  multiplier = (1 << shift);
-
-  /* Various methods for converting floating point taps to integer.
-   * The dB values are the SSIM value between scaling an image via
-   * the floating point pathway vs. the integer pathway using the
-   * given code to generate the taps.  Only one image was tested,
-   * scaling from 1920x1080 to 640x360.  Several variations of the
-   * methods were also tested, with nothing appearing useful.  */
-#if 0
-  /* Standard round to integer.  This causes bad DC errors. */
-  /* 44.588 dB */
-  for (j = 0; j < dest_size; j++) {
-    for (i = 0; i < n_taps; i++) {
-      taps_i[j * n_taps + i] =
-          floor (0.5 + taps_d[j * n_taps + i] * multiplier);
-    }
-  }
-#endif
-#if 0
-  /* Dithering via error propogation.  Works pretty well, but
-   * really we want to propogate errors across rows, which would
-   * mean having several sets of tap arrays.  Possible, but more work,
-   * and it may not even be better. */
-  /* 57.0961 dB */
-  {
-    double err = 0;
-    for (j = 0; j < dest_size; j++) {
-      for (i = 0; i < n_taps; i++) {
-        err += taps_d[j * n_taps + i] * multiplier;
-        taps_i[j * n_taps + i] = floor (err);
-        err -= floor (err);
-      }
-    }
-  }
-#endif
-#if 1
-  /* Round to integer, but with an adjustable bias that we use to
-   * eliminate the DC error.  This search method is a bit crude, and
-   * could perhaps be improved somewhat. */
-  /* 60.4851 dB */
-  for (j = 0; j < dest_size; j++) {
-    int k;
-    for (k = 0; k < 100; k++) {
-      int sum = 0;
-      double offset;
-
-      offset = k * 0.01;
-      for (i = 0; i < n_taps; i++) {
-        taps_i[j * n_taps + i] =
-            floor (offset + taps_d[j * n_taps + i] * multiplier);
-        sum += taps_i[j * n_taps + i];
-      }
-
-      if (sum >= (1 << shift))
-        break;
-    }
-  }
-#endif
-#if 0
-  /* Round to integer, but adjust the multiplier.  The search method is
-   * wrong a lot, but was sufficient enough to calculate dB error. */
-  /* 58.6517 dB */
-  for (j = 0; j < dest_size; j++) {
-    int k;
-    int sum = 0;
-    for (k = 0; k < 200; k++) {
-      sum = 0;
-
-      multiplier = (1 << shift) - 1.0 + k * 0.01;
-      for (i = 0; i < n_taps; i++) {
-        taps_i[j * n_taps + i] =
-            floor (0.5 + taps_d[j * n_taps + i] * multiplier);
-        sum += taps_i[j * n_taps + i];
-      }
-
-      if (sum >= (1 << shift))
-        break;
-    }
-    if (sum != (1 << shift)) {
-      GST_ERROR ("%g %d", multiplier, sum);
-    }
-  }
-#endif
-#if 0
-  /* Round to integer, but subtract the error from the largest tap */
-  /* 58.3677 dB */
-  for (j = 0; j < dest_size; j++) {
-    int err = -multiplier;
-    for (i = 0; i < n_taps; i++) {
-      taps_i[j * n_taps + i] =
-          floor (0.5 + taps_d[j * n_taps + i] * multiplier);
-      err += taps_i[j * n_taps + i];
-    }
-    if (taps_i[j * n_taps + (n_taps / 2 - 1)] >
-        taps_i[j * n_taps + (n_taps / 2)]) {
-      taps_i[j * n_taps + (n_taps / 2 - 1)] -= err;
-    } else {
-      taps_i[j * n_taps + (n_taps / 2)] -= err;
-    }
-  }
-#endif
-
-  g_free (taps_d);
-  scale->taps = taps_i;
-}
-
-
-void
-vs_image_scale_lanczos_Y (const VSImage * dest, const VSImage * src,
-    uint8_t * tmpbuf, double sharpness, gboolean dither, int submethod,
-    double a, double sharpen)
-{
-  switch (submethod) {
-    case 0:
-    default:
-      vs_image_scale_lanczos_Y_int16 (dest, src, tmpbuf, sharpness, dither, a,
-          sharpen);
-      break;
-    case 1:
-      vs_image_scale_lanczos_Y_int32 (dest, src, tmpbuf, sharpness, dither, a,
-          sharpen);
-      break;
-    case 2:
-      vs_image_scale_lanczos_Y_float (dest, src, tmpbuf, sharpness, dither, a,
-          sharpen);
-      break;
-    case 3:
-      vs_image_scale_lanczos_Y_double (dest, src, tmpbuf, sharpness, dither, a,
-          sharpen);
-      break;
-  }
-}
-
-void
-vs_image_scale_lanczos_AYUV (const VSImage * dest, const VSImage * src,
-    uint8_t * tmpbuf, double sharpness, gboolean dither, int submethod,
-    double a, double sharpen)
-{
-  switch (submethod) {
-    case 0:
-    default:
-      vs_image_scale_lanczos_AYUV_int16 (dest, src, tmpbuf, sharpness, dither,
-          a, sharpen);
-      break;
-    case 1:
-      vs_image_scale_lanczos_AYUV_int32 (dest, src, tmpbuf, sharpness, dither,
-          a, sharpen);
-      break;
-    case 2:
-      vs_image_scale_lanczos_AYUV_float (dest, src, tmpbuf, sharpness, dither,
-          a, sharpen);
-      break;
-    case 3:
-      vs_image_scale_lanczos_AYUV_double (dest, src, tmpbuf, sharpness, dither,
-          a, sharpen);
-      break;
-  }
-}
-
-void
-vs_image_scale_lanczos_AYUV64 (const VSImage * dest, const VSImage * src,
-    uint8_t * tmpbuf, double sharpness, gboolean dither, int submethod,
-    double a, double sharpen)
-{
-  vs_image_scale_lanczos_AYUV64_double (dest, src, tmpbuf, sharpness, dither,
-      a, sharpen);
-}
-
-
-
-#define RESAMPLE_HORIZ_FLOAT(function, dest_type, tap_type, src_type, _n_taps) \
-static void \
-function (dest_type *dest, const gint32 *offsets, \
-    const tap_type *taps, const src_type *src, int n_taps, int shift, int n) \
-{ \
-  int i; \
-  int k; \
-  dest_type sum; \
-  const src_type *srcline; \
-  const tap_type *tapsline; \
-  for (i = 0; i < n; i++) { \
-    srcline = src + offsets[i]; \
-    tapsline = taps + i * _n_taps; \
-    sum = 0; \
-    for (k = 0; k < _n_taps; k++) { \
-      sum += srcline[k] * tapsline[k]; \
-    } \
-    dest[i] = sum; \
-  } \
-}
-
-#define RESAMPLE_HORIZ(function, dest_type, tap_type, src_type, _n_taps, _shift) \
-static void \
-function (dest_type *dest, const gint32 *offsets, \
-    const tap_type *taps, const src_type *src, int n_taps, int shift, int n) \
-{ \
-  int i; \
-  int k; \
-  dest_type sum; \
-  const src_type *srcline; \
-  const tap_type *tapsline; \
-  int offset; \
-  if (_shift > 0) offset = (1<<_shift)>>1; \
-  else offset = 0; \
-  for (i = 0; i < n; i++) { \
-    srcline = src + offsets[i]; \
-    tapsline = taps + i * _n_taps; \
-    sum = 0; \
-    for (k = 0; k < _n_taps; k++) { \
-      sum += srcline[k] * tapsline[k]; \
-    } \
-    dest[i] = (sum + offset) >> _shift; \
-  } \
-}
-
-#define RESAMPLE_HORIZ_AYUV_FLOAT(function, dest_type, tap_type, src_type, _n_taps) \
-static void \
-function (dest_type *dest, const gint32 *offsets, \
-    const tap_type *taps, const src_type *src, int n_taps, int shift, int n) \
-{ \
-  int i; \
-  int k; \
-  dest_type sum1; \
-  dest_type sum2; \
-  dest_type sum3; \
-  dest_type sum4; \
-  const src_type *srcline; \
-  const tap_type *tapsline; \
-  for (i = 0; i < n; i++) { \
-    srcline = src + 4*offsets[i]; \
-    tapsline = taps + i * _n_taps; \
-    sum1 = 0; \
-    sum2 = 0; \
-    sum3 = 0; \
-    sum4 = 0; \
-    for (k = 0; k < _n_taps; k++) { \
-      sum1 += srcline[k*4+0] * tapsline[k]; \
-      sum2 += srcline[k*4+1] * tapsline[k]; \
-      sum3 += srcline[k*4+2] * tapsline[k]; \
-      sum4 += srcline[k*4+3] * tapsline[k]; \
-    } \
-    dest[i*4+0] = sum1; \
-    dest[i*4+1] = sum2; \
-    dest[i*4+2] = sum3; \
-    dest[i*4+3] = sum4; \
-  } \
-}
-
-#define RESAMPLE_HORIZ_AYUV(function, dest_type, tap_type, src_type, _n_taps, _shift) \
-static void \
-function (dest_type *dest, const gint32 *offsets, \
-    const tap_type *taps, const src_type *src, int n_taps, int shift, int n) \
-{ \
-  int i; \
-  int k; \
-  dest_type sum1; \
-  dest_type sum2; \
-  dest_type sum3; \
-  dest_type sum4; \
-  const src_type *srcline; \
-  const tap_type *tapsline; \
-  int offset; \
-  if (_shift > 0) offset = (1<<_shift)>>1; \
-  else offset = 0; \
-  for (i = 0; i < n; i++) { \
-    srcline = src + 4*offsets[i]; \
-    tapsline = taps + i * _n_taps; \
-    sum1 = 0; \
-    sum2 = 0; \
-    sum3 = 0; \
-    sum4 = 0; \
-    for (k = 0; k < _n_taps; k++) { \
-      sum1 += srcline[k*4+0] * tapsline[k]; \
-      sum2 += srcline[k*4+1] * tapsline[k]; \
-      sum3 += srcline[k*4+2] * tapsline[k]; \
-      sum4 += srcline[k*4+3] * tapsline[k]; \
-    } \
-    dest[i*4+0] = (sum1 + offset) >> _shift; \
-    dest[i*4+1] = (sum2 + offset) >> _shift; \
-    dest[i*4+2] = (sum3 + offset) >> _shift; \
-    dest[i*4+3] = (sum4 + offset) >> _shift; \
-  } \
-}
-
-/* *INDENT-OFF* */
-RESAMPLE_HORIZ_FLOAT (resample_horiz_double_u8_generic, double, double,
-    guint8, n_taps)
-RESAMPLE_HORIZ_FLOAT (resample_horiz_float_u8_generic, float, float,
-    guint8, n_taps)
-RESAMPLE_HORIZ_AYUV_FLOAT (resample_horiz_double_ayuv_generic, double, double,
-    guint8, n_taps)
-RESAMPLE_HORIZ_AYUV_FLOAT (resample_horiz_float_ayuv_generic, float, float,
-    guint8, n_taps)
-
-RESAMPLE_HORIZ_AYUV_FLOAT (resample_horiz_double_ayuv_generic_s16, double, double,
-    guint16, n_taps)
-
-RESAMPLE_HORIZ (resample_horiz_int32_int32_u8_generic, gint32, gint32,
-    guint8, n_taps, shift)
-RESAMPLE_HORIZ (resample_horiz_int16_int16_u8_generic, gint16, gint16,
-    guint8, n_taps, shift)
-RESAMPLE_HORIZ_AYUV (resample_horiz_int32_int32_ayuv_generic, gint32, gint32,
-    guint8, n_taps, shift)
-RESAMPLE_HORIZ_AYUV (resample_horiz_int16_int16_ayuv_generic, gint16, gint16,
-    guint8, n_taps, shift)
-
-/* Candidates for orcification */
-RESAMPLE_HORIZ (resample_horiz_int32_int32_u8_taps16_shift0, gint32, gint32,
-    guint8, 16, 0)
-RESAMPLE_HORIZ (resample_horiz_int32_int32_u8_taps12_shift0, gint32, gint32,
-    guint8, 12, 0)
-RESAMPLE_HORIZ (resample_horiz_int32_int32_u8_taps8_shift0, gint32, gint32,
-    guint8, 8, 0)
-RESAMPLE_HORIZ (resample_horiz_int32_int32_u8_taps4_shift0, gint32, gint32,
-    guint8, 4, 0)
-RESAMPLE_HORIZ (resample_horiz_int16_int16_u8_taps16_shift0, gint16, gint16,
-    guint8, 16, 0)
-RESAMPLE_HORIZ (resample_horiz_int16_int16_u8_taps12_shift0, gint16, gint16,
-    guint8, 12, 0)
-RESAMPLE_HORIZ (resample_horiz_int16_int16_u8_taps8_shift0, gint16, gint16,
-    guint8, 8, 0)
-RESAMPLE_HORIZ (resample_horiz_int16_int16_u8_taps4_shift0, gint16, gint16,
-    guint8, 4, 0)
-
-RESAMPLE_HORIZ_AYUV (resample_horiz_int32_int32_ayuv_taps16_shift0, gint32, gint32,
-    guint8, 16, 0)
-RESAMPLE_HORIZ_AYUV (resample_horiz_int32_int32_ayuv_taps12_shift0, gint32, gint32,
-    guint8, 12, 0)
-RESAMPLE_HORIZ_AYUV (resample_horiz_int32_int32_ayuv_taps8_shift0, gint32, gint32,
-    guint8, 8, 0)
-RESAMPLE_HORIZ_AYUV (resample_horiz_int32_int32_ayuv_taps4_shift0, gint32, gint32,
-    guint8, 4, 0)
-RESAMPLE_HORIZ_AYUV (resample_horiz_int16_int16_ayuv_taps16_shift0, gint16, gint16,
-    guint8, 16, 0)
-RESAMPLE_HORIZ_AYUV (resample_horiz_int16_int16_ayuv_taps12_shift0, gint16, gint16,
-    guint8, 12, 0)
-RESAMPLE_HORIZ_AYUV (resample_horiz_int16_int16_ayuv_taps8_shift0, gint16, gint16,
-    guint8, 8, 0)
-RESAMPLE_HORIZ_AYUV (resample_horiz_int16_int16_ayuv_taps4_shift0, gint16, gint16,
-    guint8, 4, 0)
-/* *INDENT-ON* */
-
-#define RESAMPLE_VERT(function, tap_type, src_type, _n_taps, _shift) \
-static void \
-function (guint8 *dest, \
-    const tap_type *taps, const src_type *src, int stride, int n_taps, \
-    int shift, int n) \
-{ \
-  int i; \
-  int l; \
-  gint32 sum_y; \
-  gint32 offset = (1<<_shift) >> 1; \
-  for (i = 0; i < n; i++) { \
-    sum_y = 0; \
-    for (l = 0; l < n_taps; l++) { \
-      const src_type *line = PTR_OFFSET(src, stride * l); \
-      sum_y += line[i] * taps[l]; \
-    } \
-    dest[i] = CLAMP ((sum_y + offset) >> _shift, 0, 255); \
-  } \
-}
-
-#define RESAMPLE_VERT_DITHER(function, tap_type, src_type, _n_taps, _shift) \
-static void \
-function (guint8 *dest, \
-    const tap_type *taps, const src_type *src, int stride, int n_taps, \
-    int shift, int n) \
-{ \
-  int i; \
-  int l; \
-  gint32 sum_y; \
-  gint32 err_y = 0; \
-  gint32 mask = (1<<_shift) - 1; \
-  for (i = 0; i < n; i++) { \
-    sum_y = 0; \
-    for (l = 0; l < n_taps; l++) { \
-      const src_type *line = PTR_OFFSET(src, stride * l); \
-      sum_y += line[i] * taps[l]; \
-    } \
-    err_y += sum_y; \
-    dest[i] = CLAMP (err_y >> _shift, 0, 255); \
-    err_y &= mask; \
-  } \
-}
-
-/* *INDENT-OFF* */
-RESAMPLE_VERT (resample_vert_int32_generic, gint32, gint32, n_taps, shift)
-RESAMPLE_VERT_DITHER (resample_vert_dither_int32_generic, gint32, gint32,
-    n_taps, shift)
-RESAMPLE_VERT (resample_vert_int16_generic, gint16, gint16, n_taps, shift);
-RESAMPLE_VERT_DITHER (resample_vert_dither_int16_generic, gint16, gint16,
-    n_taps, shift)
-/* *INDENT-ON* */
-
-#define RESAMPLE_VERT_FLOAT(function, dest_type, clamp, tap_type, src_type, _n_taps, _shift) \
-static void \
-function (dest_type *dest, \
-    const tap_type *taps, const src_type *src, int stride, int n_taps, \
-    int shift, int n) \
-{ \
-  int i; \
-  int l; \
-  src_type sum_y; \
-  for (i = 0; i < n; i++) { \
-    sum_y = 0; \
-    for (l = 0; l < n_taps; l++) { \
-      const src_type *line = PTR_OFFSET(src, stride * l); \
-      sum_y += line[i] * taps[l]; \
-    } \
-    dest[i] = CLAMP (floor(0.5 + sum_y), 0, clamp); \
-  } \
-}
-
-#define RESAMPLE_VERT_FLOAT_DITHER(function, dest_type, clamp, tap_type, src_type, _n_taps, _shift) \
-static void \
-function (dest_type *dest, \
-    const tap_type *taps, const src_type *src, int stride, int n_taps, \
-    int shift, int n) \
-{ \
-  int i; \
-  int l; \
-  src_type sum_y; \
-  src_type err_y = 0; \
-  for (i = 0; i < n; i++) { \
-    sum_y = 0; \
-    for (l = 0; l < n_taps; l++) { \
-      const src_type *line = PTR_OFFSET(src, stride * l); \
-      sum_y += line[i] * taps[l]; \
-    } \
-    err_y += sum_y; \
-    dest[i] = CLAMP (floor (err_y), 0, clamp); \
-    err_y -= floor (err_y); \
-  } \
-}
-
-/* *INDENT-OFF* */
-RESAMPLE_VERT_FLOAT (resample_vert_double_generic, guint8, 255, double, double, n_taps,
-    shift)
-RESAMPLE_VERT_FLOAT_DITHER (resample_vert_dither_double_generic, guint8, 255, double, double,
-    n_taps, shift)
-
-RESAMPLE_VERT_FLOAT (resample_vert_double_generic_u16, guint16, 65535, double, double, n_taps,
-    shift)
-RESAMPLE_VERT_FLOAT_DITHER (resample_vert_dither_double_generic_u16, guint16, 65535, double, double,
-    n_taps, shift)
-
-RESAMPLE_VERT_FLOAT (resample_vert_float_generic, guint8, 255, float, float, n_taps, shift)
-RESAMPLE_VERT_FLOAT_DITHER (resample_vert_dither_float_generic, guint8, 255, float, float,
-    n_taps, shift)
-/* *INDENT-ON* */
-
-#define S16_SHIFT1 7
-#define S16_SHIFT2 7
-#define S16_MIDSHIFT 0
-#define S16_POSTSHIFT (S16_SHIFT1+S16_SHIFT2-S16_MIDSHIFT)
-
-static void
-vs_scale_lanczos_Y_int16 (Scale * scale)
-{
-  int j;
-  int yi;
-  int tmp_yi;
-
-  tmp_yi = 0;
-
-  for (j = 0; j < scale->dest->height; j++) {
-    guint8 *destline;
-    gint16 *taps;
-
-    destline = scale->dest->pixels + scale->dest->stride * j;
-
-    yi = scale->y_scale1d.offsets[j];
-
-    while (tmp_yi < yi + scale->y_scale1d.n_taps) {
-      scale->horiz_resample_func (TMP_LINE_S16 (tmp_yi),
-          scale->x_scale1d.offsets, scale->x_scale1d.taps, SRC_LINE (tmp_yi),
-          scale->x_scale1d.n_taps, S16_MIDSHIFT, scale->dest->width);
-      tmp_yi++;
-    }
-
-    taps = (gint16 *) scale->y_scale1d.taps + j * scale->y_scale1d.n_taps;
-    if (scale->dither) {
-      resample_vert_dither_int16_generic (destline,
-          taps, TMP_LINE_S16 (scale->y_scale1d.offsets[j]),
-          sizeof (gint16) * scale->dest->width, scale->y_scale1d.n_taps,
-          S16_POSTSHIFT, scale->dest->width);
-    } else {
-      resample_vert_int16_generic (destline,
-          taps, TMP_LINE_S16 (scale->y_scale1d.offsets[j]),
-          sizeof (gint16) * scale->dest->width, scale->y_scale1d.n_taps,
-          S16_POSTSHIFT, scale->dest->width);
-    }
-  }
-}
-
-void
-vs_image_scale_lanczos_Y_int16 (const VSImage * dest, const VSImage * src,
-    uint8_t * tmpbuf, double sharpness, gboolean dither, double a,
-    double sharpen)
-{
-  Scale s = { 0 };
-  Scale *scale = &s;
-  int n_taps;
-
-  scale->dest = dest;
-  scale->src = src;
-
-  n_taps = scale1d_get_n_taps (src->width, dest->width, a, sharpness);
-  n_taps = ROUND_UP_4 (n_taps);
-  scale1d_calculate_taps_int16 (&scale->x_scale1d,
-      src->width, dest->width, n_taps, a, sharpness, sharpen, S16_SHIFT1);
-
-  n_taps = scale1d_get_n_taps (src->height, dest->height, a, sharpness);
-  scale1d_calculate_taps_int16 (&scale->y_scale1d,
-      src->height, dest->height, n_taps, a, sharpness, sharpen, S16_SHIFT2);
-
-  scale->dither = dither;
-
-  switch (scale->x_scale1d.n_taps) {
-    case 4:
-      scale->horiz_resample_func =
-          (HorizResampleFunc) resample_horiz_int16_int16_u8_taps4_shift0;
-      break;
-    case 8:
-      scale->horiz_resample_func =
-          (HorizResampleFunc) resample_horiz_int16_int16_u8_taps8_shift0;
-      break;
-    case 12:
-      scale->horiz_resample_func =
-          (HorizResampleFunc) resample_horiz_int16_int16_u8_taps12_shift0;
-      break;
-    case 16:
-      scale->horiz_resample_func =
-          (HorizResampleFunc) resample_horiz_int16_int16_u8_taps16_shift0;
-      break;
-    default:
-      scale->horiz_resample_func =
-          (HorizResampleFunc) resample_horiz_int16_int16_u8_generic;
-      break;
-  }
-
-  scale->tmpdata =
-      g_malloc (sizeof (gint16) * scale->dest->width * scale->src->height);
-
-  vs_scale_lanczos_Y_int16 (scale);
-
-  scale1d_cleanup (&scale->x_scale1d);
-  scale1d_cleanup (&scale->y_scale1d);
-  g_free (scale->tmpdata);
-}
-
-
-#define S32_SHIFT1 11
-#define S32_SHIFT2 11
-#define S32_MIDSHIFT 0
-#define S32_POSTSHIFT (S32_SHIFT1+S32_SHIFT2-S32_MIDSHIFT)
-
-static void
-vs_scale_lanczos_Y_int32 (Scale * scale)
-{
-  int j;
-  int yi;
-  int tmp_yi;
-
-  tmp_yi = 0;
-
-  for (j = 0; j < scale->dest->height; j++) {
-    guint8 *destline;
-    gint32 *taps;
-
-    destline = scale->dest->pixels + scale->dest->stride * j;
-
-    yi = scale->y_scale1d.offsets[j];
-
-    while (tmp_yi < yi + scale->y_scale1d.n_taps) {
-      scale->horiz_resample_func (TMP_LINE_S32 (tmp_yi),
-          scale->x_scale1d.offsets, scale->x_scale1d.taps, SRC_LINE (tmp_yi),
-          scale->x_scale1d.n_taps, S32_MIDSHIFT, scale->dest->width);
-      tmp_yi++;
-    }
-
-    taps = (gint32 *) scale->y_scale1d.taps + j * scale->y_scale1d.n_taps;
-    if (scale->dither) {
-      resample_vert_dither_int32_generic (destline,
-          taps, TMP_LINE_S32 (scale->y_scale1d.offsets[j]),
-          sizeof (gint32) * scale->dest->width,
-          scale->y_scale1d.n_taps, S32_POSTSHIFT, scale->dest->width);
-    } else {
-      resample_vert_int32_generic (destline,
-          taps, TMP_LINE_S32 (scale->y_scale1d.offsets[j]),
-          sizeof (gint32) * scale->dest->width,
-          scale->y_scale1d.n_taps, S32_POSTSHIFT, scale->dest->width);
-    }
-  }
-}
-
-void
-vs_image_scale_lanczos_Y_int32 (const VSImage * dest, const VSImage * src,
-    uint8_t * tmpbuf, double sharpness, gboolean dither, double a,
-    double sharpen)
-{
-  Scale s = { 0 };
-  Scale *scale = &s;
-  int n_taps;
-
-  scale->dest = dest;
-  scale->src = src;
-
-  n_taps = scale1d_get_n_taps (src->width, dest->width, a, sharpness);
-  n_taps = ROUND_UP_4 (n_taps);
-  scale1d_calculate_taps_int32 (&scale->x_scale1d,
-      src->width, dest->width, n_taps, a, sharpness, sharpen, S32_SHIFT1);
-
-  n_taps = scale1d_get_n_taps (src->height, dest->height, a, sharpness);
-  scale1d_calculate_taps_int32 (&scale->y_scale1d,
-      src->height, dest->height, n_taps, a, sharpness, sharpen, S32_SHIFT2);
-
-  scale->dither = dither;
-
-  switch (scale->x_scale1d.n_taps) {
-    case 4:
-      scale->horiz_resample_func =
-          (HorizResampleFunc) resample_horiz_int32_int32_u8_taps4_shift0;
-      break;
-    case 8:
-      scale->horiz_resample_func =
-          (HorizResampleFunc) resample_horiz_int32_int32_u8_taps8_shift0;
-      break;
-    case 12:
-      scale->horiz_resample_func =
-          (HorizResampleFunc) resample_horiz_int32_int32_u8_taps12_shift0;
-      break;
-    case 16:
-      scale->horiz_resample_func =
-          (HorizResampleFunc) resample_horiz_int32_int32_u8_taps16_shift0;
-      break;
-    default:
-      scale->horiz_resample_func =
-          (HorizResampleFunc) resample_horiz_int32_int32_u8_generic;
-      break;
-  }
-
-  scale->tmpdata =
-      g_malloc (sizeof (int32_t) * scale->dest->width * scale->src->height);
-
-  vs_scale_lanczos_Y_int32 (scale);
-
-  scale1d_cleanup (&scale->x_scale1d);
-  scale1d_cleanup (&scale->y_scale1d);
-  g_free (scale->tmpdata);
-}
-
-static void
-vs_scale_lanczos_Y_double (Scale * scale)
-{
-  int j;
-  int yi;
-  int tmp_yi;
-
-  tmp_yi = 0;
-
-  for (j = 0; j < scale->dest->height; j++) {
-    guint8 *destline;
-    double *taps;
-
-    destline = scale->dest->pixels + scale->dest->stride * j;
-
-    yi = scale->y_scale1d.offsets[j];
-
-    while (tmp_yi < yi + scale->y_scale1d.n_taps) {
-      scale->horiz_resample_func (TMP_LINE_DOUBLE (tmp_yi),
-          scale->x_scale1d.offsets, scale->x_scale1d.taps, SRC_LINE (tmp_yi),
-          scale->x_scale1d.n_taps, 0, scale->dest->width);
-      tmp_yi++;
-    }
-
-    taps = (double *) scale->y_scale1d.taps + j * scale->y_scale1d.n_taps;
-    if (scale->dither) {
-      resample_vert_dither_double_generic (destline,
-          taps, TMP_LINE_DOUBLE (scale->y_scale1d.offsets[j]),
-          sizeof (double) * scale->dest->width,
-          scale->y_scale1d.n_taps, 0, scale->dest->width);
-    } else {
-      resample_vert_double_generic (destline,
-          taps, TMP_LINE_DOUBLE (scale->y_scale1d.offsets[j]),
-          sizeof (double) * scale->dest->width,
-          scale->y_scale1d.n_taps, 0, scale->dest->width);
-    }
-  }
-}
-
-void
-vs_image_scale_lanczos_Y_double (const VSImage * dest, const VSImage * src,
-    uint8_t * tmpbuf, double sharpness, gboolean dither, double a,
-    double sharpen)
-{
-  Scale s = { 0 };
-  Scale *scale = &s;
-  int n_taps;
-
-  scale->dest = dest;
-  scale->src = src;
-
-  n_taps = scale1d_get_n_taps (src->width, dest->width, a, sharpness);
-  scale1d_calculate_taps (&scale->x_scale1d,
-      src->width, dest->width, n_taps, a, sharpness, sharpen);
-
-  n_taps = scale1d_get_n_taps (src->height, dest->height, a, sharpness);
-  scale1d_calculate_taps (&scale->y_scale1d,
-      src->height, dest->height, n_taps, a, sharpness, sharpen);
-
-  scale->dither = dither;
-
-  scale->horiz_resample_func =
-      (HorizResampleFunc) resample_horiz_double_u8_generic;
-
-  scale->tmpdata =
-      g_malloc (sizeof (double) * scale->dest->width * scale->src->height);
-
-  vs_scale_lanczos_Y_double (scale);
-
-  scale1d_cleanup (&scale->x_scale1d);
-  scale1d_cleanup (&scale->y_scale1d);
-  g_free (scale->tmpdata);
-}
-
-static void
-vs_scale_lanczos_Y_float (Scale * scale)
-{
-  int j;
-  int yi;
-  int tmp_yi;
-
-  tmp_yi = 0;
-
-  for (j = 0; j < scale->dest->height; j++) {
-    guint8 *destline;
-    float *taps;
-
-    destline = scale->dest->pixels + scale->dest->stride * j;
-
-    yi = scale->y_scale1d.offsets[j];
-
-    while (tmp_yi < yi + scale->y_scale1d.n_taps) {
-      scale->horiz_resample_func (TMP_LINE_FLOAT (tmp_yi),
-          scale->x_scale1d.offsets, scale->x_scale1d.taps, SRC_LINE (tmp_yi),
-          scale->x_scale1d.n_taps, 0, scale->dest->width);
-      tmp_yi++;
-    }
-
-    taps = (float *) scale->y_scale1d.taps + j * scale->y_scale1d.n_taps;
-    if (scale->dither) {
-      resample_vert_dither_float_generic (destline,
-          taps, TMP_LINE_FLOAT (scale->y_scale1d.offsets[j]),
-          sizeof (float) * scale->dest->width,
-          scale->y_scale1d.n_taps, 0, scale->dest->width);
-    } else {
-      resample_vert_float_generic (destline,
-          taps, TMP_LINE_FLOAT (scale->y_scale1d.offsets[j]),
-          sizeof (float) * scale->dest->width,
-          scale->y_scale1d.n_taps, 0, scale->dest->width);
-    }
-  }
-}
-
-void
-vs_image_scale_lanczos_Y_float (const VSImage * dest, const VSImage * src,
-    uint8_t * tmpbuf, double sharpness, gboolean dither, double a,
-    double sharpen)
-{
-  Scale s = { 0 };
-  Scale *scale = &s;
-  int n_taps;
-
-  scale->dest = dest;
-  scale->src = src;
-
-  n_taps = scale1d_get_n_taps (src->width, dest->width, a, sharpness);
-  scale1d_calculate_taps_float (&scale->x_scale1d,
-      src->width, dest->width, n_taps, a, sharpness, sharpen);
-
-  n_taps = scale1d_get_n_taps (src->height, dest->height, a, sharpness);
-  scale1d_calculate_taps_float (&scale->y_scale1d,
-      src->height, dest->height, n_taps, a, sharpness, sharpen);
-
-  scale->dither = dither;
-
-  scale->horiz_resample_func =
-      (HorizResampleFunc) resample_horiz_float_u8_generic;
-
-  scale->tmpdata =
-      g_malloc (sizeof (float) * scale->dest->width * scale->src->height);
-
-  vs_scale_lanczos_Y_float (scale);
-
-  scale1d_cleanup (&scale->x_scale1d);
-  scale1d_cleanup (&scale->y_scale1d);
-  g_free (scale->tmpdata);
-}
-
-
-
-
-
-static void
-vs_scale_lanczos_AYUV_int16 (Scale * scale)
-{
-  int j;
-  int yi;
-  int tmp_yi;
-
-  tmp_yi = 0;
-
-  for (j = 0; j < scale->dest->height; j++) {
-    guint8 *destline;
-    gint16 *taps;
-
-    destline = scale->dest->pixels + scale->dest->stride * j;
-
-    yi = scale->y_scale1d.offsets[j];
-
-    while (tmp_yi < yi + scale->y_scale1d.n_taps) {
-      scale->horiz_resample_func (TMP_LINE_S16_AYUV (tmp_yi),
-          scale->x_scale1d.offsets, scale->x_scale1d.taps, SRC_LINE (tmp_yi),
-          scale->x_scale1d.n_taps, S16_MIDSHIFT, scale->dest->width);
-      tmp_yi++;
-    }
-
-    taps = (gint16 *) scale->y_scale1d.taps + j * scale->y_scale1d.n_taps;
-    if (scale->dither) {
-      resample_vert_dither_int16_generic (destline,
-          taps, TMP_LINE_S16_AYUV (scale->y_scale1d.offsets[j]),
-          sizeof (gint16) * 4 * scale->dest->width,
-          scale->y_scale1d.n_taps, S16_POSTSHIFT, scale->dest->width * 4);
-    } else {
-      resample_vert_int16_generic (destline,
-          taps, TMP_LINE_S16_AYUV (scale->y_scale1d.offsets[j]),
-          sizeof (gint16) * 4 * scale->dest->width,
-          scale->y_scale1d.n_taps, S16_POSTSHIFT, scale->dest->width * 4);
-    }
-  }
-}
-
-void
-vs_image_scale_lanczos_AYUV_int16 (const VSImage * dest, const VSImage * src,
-    uint8_t * tmpbuf, double sharpness, gboolean dither, double a,
-    double sharpen)
-{
-  Scale s = { 0 };
-  Scale *scale = &s;
-  int n_taps;
-
-  scale->dest = dest;
-  scale->src = src;
-
-  n_taps = scale1d_get_n_taps (src->width, dest->width, a, sharpness);
-  n_taps = ROUND_UP_4 (n_taps);
-  scale1d_calculate_taps_int16 (&scale->x_scale1d,
-      src->width, dest->width, n_taps, a, sharpness, sharpen, S16_SHIFT1);
-
-  n_taps = scale1d_get_n_taps (src->height, dest->height, a, sharpness);
-  scale1d_calculate_taps_int16 (&scale->y_scale1d,
-      src->height, dest->height, n_taps, a, sharpness, sharpen, S16_SHIFT2);
-
-  scale->dither = dither;
-
-  switch (scale->x_scale1d.n_taps) {
-    case 4:
-      scale->horiz_resample_func =
-          (HorizResampleFunc) resample_horiz_int16_int16_ayuv_taps4_shift0;
-      break;
-    case 8:
-      scale->horiz_resample_func =
-          (HorizResampleFunc) resample_horiz_int16_int16_ayuv_taps8_shift0;
-      break;
-    case 12:
-      scale->horiz_resample_func =
-          (HorizResampleFunc) resample_horiz_int16_int16_ayuv_taps12_shift0;
-      break;
-    case 16:
-      scale->horiz_resample_func =
-          (HorizResampleFunc) resample_horiz_int16_int16_ayuv_taps16_shift0;
-      break;
-    default:
-      scale->horiz_resample_func =
-          (HorizResampleFunc) resample_horiz_int16_int16_ayuv_generic;
-      break;
-  }
-
-  scale->tmpdata =
-      g_malloc (sizeof (gint16) * scale->dest->width * scale->src->height * 4);
-
-  vs_scale_lanczos_AYUV_int16 (scale);
-
-  scale1d_cleanup (&scale->x_scale1d);
-  scale1d_cleanup (&scale->y_scale1d);
-  g_free (scale->tmpdata);
-}
-
-
-static void
-vs_scale_lanczos_AYUV_int32 (Scale * scale)
-{
-  int j;
-  int yi;
-  int tmp_yi;
-
-  tmp_yi = 0;
-
-  for (j = 0; j < scale->dest->height; j++) {
-    guint8 *destline;
-    gint32 *taps;
-
-    destline = scale->dest->pixels + scale->dest->stride * j;
-
-    yi = scale->y_scale1d.offsets[j];
-
-    while (tmp_yi < yi + scale->y_scale1d.n_taps) {
-      scale->horiz_resample_func (TMP_LINE_S32_AYUV (tmp_yi),
-          scale->x_scale1d.offsets, scale->x_scale1d.taps, SRC_LINE (tmp_yi),
-          scale->x_scale1d.n_taps, S32_MIDSHIFT, scale->dest->width);
-      tmp_yi++;
-    }
-
-    taps = (gint32 *) scale->y_scale1d.taps + j * scale->y_scale1d.n_taps;
-    if (scale->dither) {
-      resample_vert_dither_int32_generic (destline,
-          taps, TMP_LINE_S32_AYUV (scale->y_scale1d.offsets[j]),
-          sizeof (gint32) * 4 * scale->dest->width, scale->y_scale1d.n_taps,
-          S32_POSTSHIFT, scale->dest->width * 4);
-    } else {
-      resample_vert_int32_generic (destline,
-          taps, TMP_LINE_S32_AYUV (scale->y_scale1d.offsets[j]),
-          sizeof (gint32) * 4 * scale->dest->width, scale->y_scale1d.n_taps,
-          S32_POSTSHIFT, scale->dest->width * 4);
-    }
-  }
-}
-
-void
-vs_image_scale_lanczos_AYUV_int32 (const VSImage * dest, const VSImage * src,
-    uint8_t * tmpbuf, double sharpness, gboolean dither, double a,
-    double sharpen)
-{
-  Scale s = { 0 };
-  Scale *scale = &s;
-  int n_taps;
-
-  scale->dest = dest;
-  scale->src = src;
-
-  n_taps = scale1d_get_n_taps (src->width, dest->width, a, sharpness);
-  n_taps = ROUND_UP_4 (n_taps);
-  scale1d_calculate_taps_int32 (&scale->x_scale1d,
-      src->width, dest->width, n_taps, a, sharpness, sharpen, S32_SHIFT1);
-
-  n_taps = scale1d_get_n_taps (src->height, dest->height, a, sharpness);
-  scale1d_calculate_taps_int32 (&scale->y_scale1d,
-      src->height, dest->height, n_taps, a, sharpness, sharpen, S32_SHIFT2);
-
-  scale->dither = dither;
-
-  switch (scale->x_scale1d.n_taps) {
-    case 4:
-      scale->horiz_resample_func =
-          (HorizResampleFunc) resample_horiz_int32_int32_ayuv_taps4_shift0;
-      break;
-    case 8:
-      scale->horiz_resample_func =
-          (HorizResampleFunc) resample_horiz_int32_int32_ayuv_taps8_shift0;
-      break;
-    case 12:
-      scale->horiz_resample_func =
-          (HorizResampleFunc) resample_horiz_int32_int32_ayuv_taps12_shift0;
-      break;
-    case 16:
-      scale->horiz_resample_func =
-          (HorizResampleFunc) resample_horiz_int32_int32_ayuv_taps16_shift0;
-      break;
-    default:
-      scale->horiz_resample_func =
-          (HorizResampleFunc) resample_horiz_int32_int32_ayuv_generic;
-      break;
-  }
-
-  scale->tmpdata =
-      g_malloc (sizeof (int32_t) * scale->dest->width * scale->src->height * 4);
-
-  vs_scale_lanczos_AYUV_int32 (scale);
-
-  scale1d_cleanup (&scale->x_scale1d);
-  scale1d_cleanup (&scale->y_scale1d);
-  g_free (scale->tmpdata);
-}
-
-static void
-vs_scale_lanczos_AYUV_double (Scale * scale)
-{
-  int j;
-  int yi;
-  int tmp_yi;
-
-  tmp_yi = 0;
-
-  for (j = 0; j < scale->dest->height; j++) {
-    guint8 *destline;
-    double *taps;
-
-    destline = scale->dest->pixels + scale->dest->stride * j;
-
-    yi = scale->y_scale1d.offsets[j];
-
-    while (tmp_yi < yi + scale->y_scale1d.n_taps) {
-      scale->horiz_resample_func (TMP_LINE_DOUBLE_AYUV (tmp_yi),
-          scale->x_scale1d.offsets, scale->x_scale1d.taps, SRC_LINE (tmp_yi),
-          scale->x_scale1d.n_taps, 0, scale->dest->width);
-      tmp_yi++;
-    }
-
-    taps = (double *) scale->y_scale1d.taps + j * scale->y_scale1d.n_taps;
-    if (scale->dither) {
-      resample_vert_dither_double_generic (destline,
-          taps, TMP_LINE_DOUBLE_AYUV (scale->y_scale1d.offsets[j]),
-          sizeof (double) * 4 * scale->dest->width,
-          scale->y_scale1d.n_taps, 0, scale->dest->width * 4);
-    } else {
-      resample_vert_double_generic (destline,
-          taps, TMP_LINE_DOUBLE_AYUV (scale->y_scale1d.offsets[j]),
-          sizeof (double) * 4 * scale->dest->width,
-          scale->y_scale1d.n_taps, 0, scale->dest->width * 4);
-    }
-  }
-}
-
-void
-vs_image_scale_lanczos_AYUV_double (const VSImage * dest, const VSImage * src,
-    uint8_t * tmpbuf, double sharpness, gboolean dither, double a,
-    double sharpen)
-{
-  Scale s = { 0 };
-  Scale *scale = &s;
-  int n_taps;
-
-  scale->dest = dest;
-  scale->src = src;
-
-  n_taps = scale1d_get_n_taps (src->width, dest->width, a, sharpness);
-  scale1d_calculate_taps (&scale->x_scale1d,
-      src->width, dest->width, n_taps, a, sharpness, sharpen);
-
-  n_taps = scale1d_get_n_taps (src->height, dest->height, a, sharpness);
-  scale1d_calculate_taps (&scale->y_scale1d,
-      src->height, dest->height, n_taps, a, sharpness, sharpen);
-
-  scale->dither = dither;
-
-  scale->horiz_resample_func =
-      (HorizResampleFunc) resample_horiz_double_ayuv_generic;
-
-  scale->tmpdata =
-      g_malloc (sizeof (double) * scale->dest->width * scale->src->height * 4);
-
-  vs_scale_lanczos_AYUV_double (scale);
-
-  scale1d_cleanup (&scale->x_scale1d);
-  scale1d_cleanup (&scale->y_scale1d);
-  g_free (scale->tmpdata);
-}
-
-static void
-vs_scale_lanczos_AYUV_float (Scale * scale)
-{
-  int j;
-  int yi;
-  int tmp_yi;
-
-  tmp_yi = 0;
-
-  for (j = 0; j < scale->dest->height; j++) {
-    guint8 *destline;
-    float *taps;
-
-    destline = scale->dest->pixels + scale->dest->stride * j;
-
-    yi = scale->y_scale1d.offsets[j];
-
-    while (tmp_yi < yi + scale->y_scale1d.n_taps) {
-      scale->horiz_resample_func (TMP_LINE_FLOAT_AYUV (tmp_yi),
-          scale->x_scale1d.offsets, scale->x_scale1d.taps, SRC_LINE (tmp_yi),
-          scale->x_scale1d.n_taps, 0, scale->dest->width);
-      tmp_yi++;
-    }
-
-    taps = (float *) scale->y_scale1d.taps + j * scale->y_scale1d.n_taps;
-    if (scale->dither) {
-      resample_vert_dither_float_generic (destline,
-          taps, TMP_LINE_FLOAT_AYUV (scale->y_scale1d.offsets[j]),
-          sizeof (float) * 4 * scale->dest->width, scale->y_scale1d.n_taps, 0,
-          scale->dest->width * 4);
-    } else {
-      resample_vert_float_generic (destline,
-          taps, TMP_LINE_FLOAT_AYUV (scale->y_scale1d.offsets[j]),
-          sizeof (float) * 4 * scale->dest->width, scale->y_scale1d.n_taps, 0,
-          scale->dest->width * 4);
-    }
-  }
-}
-
-void
-vs_image_scale_lanczos_AYUV_float (const VSImage * dest, const VSImage * src,
-    uint8_t * tmpbuf, double sharpness, gboolean dither, double a,
-    double sharpen)
-{
-  Scale s = { 0 };
-  Scale *scale = &s;
-  int n_taps;
-
-  scale->dest = dest;
-  scale->src = src;
-
-  n_taps = scale1d_get_n_taps (src->width, dest->width, a, sharpness);
-  scale1d_calculate_taps_float (&scale->x_scale1d,
-      src->width, dest->width, n_taps, a, sharpness, sharpen);
-
-  n_taps = scale1d_get_n_taps (src->height, dest->height, a, sharpness);
-  scale1d_calculate_taps_float (&scale->y_scale1d,
-      src->height, dest->height, n_taps, a, sharpness, sharpen);
-
-  scale->dither = dither;
-
-  scale->horiz_resample_func =
-      (HorizResampleFunc) resample_horiz_float_ayuv_generic;
-
-  scale->tmpdata =
-      g_malloc (sizeof (float) * scale->dest->width * scale->src->height * 4);
-
-  vs_scale_lanczos_AYUV_float (scale);
-
-  scale1d_cleanup (&scale->x_scale1d);
-  scale1d_cleanup (&scale->y_scale1d);
-  g_free (scale->tmpdata);
-}
-
-static void
-vs_scale_lanczos_AYUV64_double (Scale * scale)
-{
-  int j;
-  int yi;
-  int tmp_yi;
-
-  tmp_yi = 0;
-
-  for (j = 0; j < scale->dest->height; j++) {
-    guint16 *destline;
-    double *taps;
-
-    destline = (guint16 *) (scale->dest->pixels + scale->dest->stride * j);
-
-    yi = scale->y_scale1d.offsets[j];
-
-    while (tmp_yi < yi + scale->y_scale1d.n_taps) {
-      scale->horiz_resample_func (TMP_LINE_DOUBLE_AYUV (tmp_yi),
-          scale->x_scale1d.offsets, scale->x_scale1d.taps, SRC_LINE (tmp_yi),
-          scale->x_scale1d.n_taps, 0, scale->dest->width);
-      tmp_yi++;
-    }
-
-    taps = (double *) scale->y_scale1d.taps + j * scale->y_scale1d.n_taps;
-    if (scale->dither) {
-      resample_vert_dither_double_generic_u16 (destline,
-          taps, TMP_LINE_DOUBLE_AYUV (scale->y_scale1d.offsets[j]),
-          sizeof (double) * 4 * scale->dest->width,
-          scale->y_scale1d.n_taps, 0, scale->dest->width * 4);
-    } else {
-      resample_vert_double_generic_u16 (destline,
-          taps, TMP_LINE_DOUBLE_AYUV (scale->y_scale1d.offsets[j]),
-          sizeof (double) * 4 * scale->dest->width,
-          scale->y_scale1d.n_taps, 0, scale->dest->width * 4);
-    }
-  }
-}
-
-void
-vs_image_scale_lanczos_AYUV64_double (const VSImage * dest, const VSImage * src,
-    uint8_t * tmpbuf, double sharpness, gboolean dither, double a,
-    double sharpen)
-{
-  Scale s = { 0 };
-  Scale *scale = &s;
-  int n_taps;
-
-  scale->dest = dest;
-  scale->src = src;
-
-  n_taps = scale1d_get_n_taps (src->width, dest->width, a, sharpness);
-  scale1d_calculate_taps (&scale->x_scale1d,
-      src->width, dest->width, n_taps, a, sharpness, sharpen);
-
-  n_taps = scale1d_get_n_taps (src->height, dest->height, a, sharpness);
-  scale1d_calculate_taps (&scale->y_scale1d,
-      src->height, dest->height, n_taps, a, sharpness, sharpen);
-
-  scale->dither = dither;
-
-  scale->horiz_resample_func =
-      (HorizResampleFunc) resample_horiz_double_ayuv_generic_s16;
-
-  scale->tmpdata =
-      g_malloc (sizeof (double) * scale->dest->width * scale->src->height * 4);
-
-  vs_scale_lanczos_AYUV64_double (scale);
-
-  scale1d_cleanup (&scale->x_scale1d);
-  scale1d_cleanup (&scale->y_scale1d);
-  g_free (scale->tmpdata);
-}
diff --git a/gst/videoscale/vs_scanline.c b/gst/videoscale/vs_scanline.c
deleted file mode 100644
index d67ee5c..0000000
--- a/gst/videoscale/vs_scanline.c
+++ /dev/null
@@ -1,778 +0,0 @@
-/*
- * Image Scaling Functions
- * Copyright (c) 2005 David A. Schleef <ds@schleef.org>
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. 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.
- * 
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 AUTHOR 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 "vs_scanline.h"
-
-#include "gstvideoscaleorc.h"
-#include <gst/gst.h>
-
-#include <string.h>
-
-/* greyscale, i.e., single componenet */
-
-#define BLEND(a,b,x) (((a) * (65536 - (x)) + (b) * (x)) >> 16)
-#define BLEND15(a,b,x) (((a) * (32768 - (x)) + (b) * (x)) >> 15)
-
-void
-vs_scanline_downsample_Y (uint8_t * dest, uint8_t * src, int n)
-{
-  video_scale_orc_downsample_u8 (dest, src, n);
-}
-
-void
-vs_scanline_resample_nearest_Y (uint8_t * dest, uint8_t * src, int src_width,
-    int n, int *accumulator, int increment)
-{
-  video_scale_orc_resample_nearest_u8 (dest, src, *accumulator, increment, n);
-
-  *accumulator += n * increment;
-}
-
-#include <glib.h>
-void
-vs_scanline_resample_linear_Y (uint8_t * dest, uint8_t * src, int src_width,
-    int n, int *accumulator, int increment)
-{
-  video_scale_orc_resample_bilinear_u8 (dest, src, *accumulator, increment, n);
-
-  *accumulator += n * increment;
-}
-
-void
-vs_scanline_merge_linear_Y (uint8_t * dest, uint8_t * src1, uint8_t * src2,
-    int n, int x)
-{
-  uint32_t value = x >> 8;
-
-  if (value == 0) {
-    memcpy (dest, src1, n);
-  } else {
-    video_scale_orc_merge_linear_u8 (dest, src1, src2, value, n);
-  }
-}
-
-void
-vs_scanline_downsample_Y16 (uint8_t * dest, uint8_t * src, int n)
-{
-  video_scale_orc_downsample_u16 ((uint16_t *) dest, (uint16_t *) src, n);
-}
-
-void
-vs_scanline_resample_nearest_Y16 (uint8_t * dest, uint8_t * src, int src_width,
-    int n, int *accumulator, int increment)
-{
-  int acc = *accumulator;
-  int i, j;
-  uint16_t *d = (uint16_t *) dest, *s = (uint16_t *) src;
-
-  for (i = 0; i < n; i++) {
-    j = (acc + 0x8000) >> 16;
-    d[i] = s[j];
-
-    acc += increment;
-  }
-
-  *accumulator = acc;
-}
-
-void
-vs_scanline_resample_linear_Y16 (uint8_t * dest, uint8_t * src, int src_width,
-    int n, int *accumulator, int increment)
-{
-  int acc = *accumulator;
-  int i;
-  int j;
-  int x;
-  uint16_t *d = (uint16_t *) dest, *s = (uint16_t *) src;
-
-  for (i = 0; i < n; i++) {
-    j = acc >> 16;
-
-    if (j + 1 < src_width) {
-      x = acc & 0xffff;
-      d[i] = BLEND (s[j], s[j + 1], x);
-    } else
-      d[i] = s[j];
-
-    acc += increment;
-  }
-  *accumulator = acc;
-}
-
-void
-vs_scanline_merge_linear_Y16 (uint8_t * dest, uint8_t * src1, uint8_t * src2,
-    int n, int x)
-{
-  uint16_t *d = (uint16_t *) dest;
-  const uint16_t *s1 = (const uint16_t *) src1;
-  const uint16_t *s2 = (const uint16_t *) src2;
-
-  if (x == 0) {
-    memcpy (d, s1, n * 2);
-  } else {
-    video_scale_orc_merge_linear_u16 (d, s1, s2, 65536 - x, x, n);
-  }
-}
-
-/* RGBA */
-
-void
-vs_scanline_downsample_RGBA (uint8_t * dest, uint8_t * src, int n)
-{
-  video_scale_orc_downsample_u32 (dest, src, n);
-}
-
-void
-vs_scanline_resample_nearest_RGBA (uint8_t * dest, uint8_t * src, int src_width,
-    int n, int *accumulator, int increment)
-{
-  video_scale_orc_resample_nearest_u32 (dest, src, *accumulator, increment, n);
-
-  *accumulator += n * increment;
-}
-
-void
-vs_scanline_resample_linear_RGBA (uint8_t * dest, uint8_t * src, int src_width,
-    int n, int *accumulator, int increment)
-{
-  video_scale_orc_resample_bilinear_u32 (dest, src, *accumulator, increment, n);
-
-  *accumulator += n * increment;
-}
-
-void
-vs_scanline_merge_linear_RGBA (uint8_t * dest, uint8_t * src1, uint8_t * src2,
-    int n, int x)
-{
-  uint32_t value = x >> 8;
-
-  if (value == 0) {
-    memcpy (dest, src1, n * 4);
-  } else {
-    video_scale_orc_merge_linear_u8 (dest, src1, src2, value, n * 4);
-  }
-}
-
-
-/* RGB */
-
-void
-vs_scanline_downsample_RGB (uint8_t * dest, uint8_t * src, int n)
-{
-  int i;
-
-  for (i = 0; i < n; i++) {
-    dest[i * 3 + 0] = (src[i * 6 + 0] + src[i * 6 + 3]) / 2;
-    dest[i * 3 + 1] = (src[i * 6 + 1] + src[i * 6 + 4]) / 2;
-    dest[i * 3 + 2] = (src[i * 6 + 2] + src[i * 6 + 5]) / 2;
-  }
-}
-
-void
-vs_scanline_resample_nearest_RGB (uint8_t * dest, uint8_t * src, int src_width,
-    int n, int *accumulator, int increment)
-{
-  int acc = *accumulator;
-  int i;
-  int j;
-
-  for (i = 0; i < n; i++) {
-    j = (acc + 0x8000) >> 16;
-
-    dest[i * 3 + 0] = src[j * 3 + 0];
-    dest[i * 3 + 1] = src[j * 3 + 1];
-    dest[i * 3 + 2] = src[j * 3 + 2];
-
-    acc += increment;
-  }
-
-  *accumulator = acc;
-}
-
-void
-vs_scanline_resample_linear_RGB (uint8_t * dest, uint8_t * src, int src_width,
-    int n, int *accumulator, int increment)
-{
-  int acc = *accumulator;
-  int i;
-  int j;
-  int x;
-
-  for (i = 0; i < n; i++) {
-    j = acc >> 16;
-
-    if (j + 1 < src_width) {
-      x = acc & 0xffff;
-      dest[i * 3 + 0] = BLEND (src[j * 3 + 0], src[j * 3 + 3], x);
-      dest[i * 3 + 1] = BLEND (src[j * 3 + 1], src[j * 3 + 4], x);
-      dest[i * 3 + 2] = BLEND (src[j * 3 + 2], src[j * 3 + 5], x);
-    } else {
-      dest[i * 3 + 0] = src[j * 3 + 0];
-      dest[i * 3 + 1] = src[j * 3 + 1];
-      dest[i * 3 + 2] = src[j * 3 + 2];
-    }
-    acc += increment;
-  }
-
-  *accumulator = acc;
-}
-
-void
-vs_scanline_merge_linear_RGB (uint8_t * dest, uint8_t * src1, uint8_t * src2,
-    int n, int x)
-{
-  uint32_t value = x >> 8;
-
-  if (value == 0) {
-    memcpy (dest, src1, n * 3);
-  } else {
-    video_scale_orc_merge_linear_u8 (dest, src1, src2, value, n * 3);
-  }
-}
-
-
-/* YUYV */
-
-/* n is the number of pixels */
-/* increment is per Y pixel */
-
-void
-vs_scanline_downsample_YUYV (uint8_t * dest, uint8_t * src, int n)
-{
-  video_scale_orc_downsample_yuyv (dest, src, n);
-}
-
-void
-vs_scanline_resample_nearest_YUYV (uint8_t * dest, uint8_t * src, int src_width,
-    int n, int *accumulator, int increment)
-{
-  int acc = *accumulator;
-  int i, j;
-
-  for (i = 0; i < n; i += 2) {
-    j = (acc + 0x8000) >> 16;
-    dest[i * 2 + 0] = src[j * 2 + 0];
-
-    j >>= 1;
-    dest[i * 2 + 1] = src[j * 4 + 1];
-    dest[i * 2 + 3] = src[j * 4 + 3];
-
-    acc += increment;
-
-    if (i < n - 1) {
-      j = (acc + 0x8000) >> 16;
-      dest[i * 2 + 2] = src[j * 2 + 0];
-
-      acc += increment;
-    }
-  }
-
-  *accumulator = acc;
-}
-
-void
-vs_scanline_resample_linear_YUYV (uint8_t * dest, uint8_t * src, int src_width,
-    int n, int *accumulator, int increment)
-{
-  int acc = *accumulator;
-  int i, j, x;
-
-  for (i = 0; i < n; i += 2) {
-    j = acc >> 16;
-    x = acc & 0xffff;
-
-    if (j + 1 < src_width)
-      dest[i * 2 + 0] = BLEND (src[j * 2 + 0], src[j * 2 + 2], x);
-    else
-      dest[i * 2 + 0] = src[j * 2 + 0];
-
-    j >>= 1;
-    if (2 * (j + 1) < src_width) {
-      dest[i * 2 + 1] = BLEND (src[j * 4 + 1], src[j * 4 + 5], x);
-      dest[i * 2 + 3] = BLEND (src[j * 4 + 3], src[j * 4 + 7], x);
-    } else {
-      dest[i * 2 + 1] = src[j * 4 + 1];
-      dest[i * 2 + 3] = src[j * 4 + 3];
-    }
-
-    acc += increment;
-
-    if (i < n - 1) {
-      j = acc >> 16;
-
-      if (j + 1 < src_width) {
-        x = acc & 0xffff;
-        dest[i * 2 + 2] = BLEND (src[j * 2 + 0], src[j * 2 + 2], x);
-      } else
-        dest[i * 2 + 2] = src[j * 2 + 0];
-
-      acc += increment;
-    }
-  }
-  *accumulator = acc;
-}
-
-void
-vs_scanline_merge_linear_YUYV (uint8_t * dest, uint8_t * src1, uint8_t * src2,
-    int n, int x)
-{
-  int quads = (n + 1) / 2;
-  uint32_t value = x >> 8;
-
-  if (value == 0) {
-    memcpy (dest, src1, quads * 4);
-  } else {
-    video_scale_orc_merge_linear_u8 (dest, src1, src2, value, quads * 4);
-  }
-}
-
-
-/* UYVY */
-
-/* n is the number of bi-pixels */
-/* increment is per Y pixel */
-
-void
-vs_scanline_downsample_UYVY (uint8_t * dest, uint8_t * src, int n)
-{
-  int i;
-
-  for (i = 0; i < n; i++) {
-    dest[i * 4 + 0] = (src[i * 8 + 0] + src[i * 8 + 4]) / 2;
-    dest[i * 4 + 1] = (src[i * 8 + 1] + src[i * 8 + 3]) / 2;
-    dest[i * 4 + 2] = (src[i * 8 + 2] + src[i * 8 + 6]) / 2;
-    dest[i * 4 + 3] = (src[i * 8 + 5] + src[i * 8 + 7]) / 2;
-  }
-}
-
-void
-vs_scanline_resample_nearest_UYVY (uint8_t * dest, uint8_t * src, int src_width,
-    int n, int *accumulator, int increment)
-{
-  int acc = *accumulator;
-  int i, j;
-
-  for (i = 0; i < n; i += 2) {
-    j = (acc + 0x8000) >> 16;
-    dest[i * 2 + 1] = src[j * 2 + 1];
-
-    j >>= 1;
-    dest[i * 2 + 0] = src[j * 4 + 0];
-    dest[i * 2 + 2] = src[j * 4 + 2];
-
-    acc += increment;
-
-    if (i < n - 1) {
-      j = (acc + 0x8000) >> 16;
-      dest[i * 2 + 3] = src[j * 2 + 1];
-
-      acc += increment;
-    }
-  }
-
-  *accumulator = acc;
-}
-
-void
-vs_scanline_resample_linear_UYVY (uint8_t * dest, uint8_t * src, int src_width,
-    int n, int *accumulator, int increment)
-{
-  int acc = *accumulator;
-  int i, j, x;
-
-  for (i = 0; i < n; i += 2) {
-    j = acc >> 16;
-    x = acc & 0xffff;
-
-    if (j + 1 < src_width)
-      dest[i * 2 + 1] = BLEND (src[j * 2 + 1], src[j * 2 + 3], x);
-    else
-      dest[i * 2 + 1] = src[j * 2 + 1];
-
-    j >>= 1;
-    if (2 * (j + 1) < src_width) {
-      dest[i * 2 + 0] = BLEND (src[j * 4 + 0], src[j * 4 + 4], x);
-      dest[i * 2 + 2] = BLEND (src[j * 4 + 2], src[j * 4 + 6], x);
-    } else {
-      dest[i * 2 + 0] = src[j * 4 + 0];
-      dest[i * 2 + 2] = src[j * 4 + 2];
-    }
-
-    acc += increment;
-
-    if (i < n - 1) {
-      j = acc >> 16;
-
-      if (j + 1 < src_width) {
-        x = acc & 0xffff;
-        dest[i * 2 + 3] = BLEND (src[j * 2 + 1], src[j * 2 + 3], x);
-      } else
-        dest[i * 2 + 3] = src[j * 2 + 1];
-
-      acc += increment;
-    }
-  }
-}
-
-void
-vs_scanline_merge_linear_UYVY (uint8_t * dest, uint8_t * src1,
-    uint8_t * src2, int n, int x)
-{
-  int quads = (n + 1) / 2;
-  uint32_t value = x >> 8;
-
-  if (value == 0) {
-    memcpy (dest, src1, quads * 4);
-  } else {
-    video_scale_orc_merge_linear_u8 (dest, src1, src2, value, quads * 4);
-  }
-}
-
-
-/* NV12 */
-
-/* n is the number of bi-pixels */
-
-void
-vs_scanline_downsample_NV12 (uint8_t * dest, uint8_t * src, int n)
-{
-  int i;
-
-  for (i = 0; i < n; i++) {
-    dest[i * 2 + 0] = (src[i * 4 + 0] + src[i * 4 + 2]) / 2;
-    dest[i * 2 + 1] = (src[i * 4 + 1] + src[i * 4 + 3]) / 2;
-  }
-}
-
-void
-vs_scanline_resample_nearest_NV12 (uint8_t * dest, uint8_t * src, int src_width,
-    int n, int *accumulator, int increment)
-{
-  int acc = *accumulator;
-  int i, j;
-
-  for (i = 0; i < n; i++) {
-    j = (acc + 0x8000) >> 16;
-
-    dest[i * 2 + 0] = src[j * 2 + 0];
-    dest[i * 2 + 1] = src[j * 2 + 1];
-
-    acc += increment;
-  }
-
-  *accumulator = acc;
-}
-
-void
-vs_scanline_resample_linear_NV12 (uint8_t * dest, uint8_t * src, int src_width,
-    int n, int *accumulator, int increment)
-{
-  int acc = *accumulator;
-  int i;
-  int j;
-  int x;
-
-  for (i = 0; i < n; i++) {
-    j = acc >> 16;
-
-    if (j + 1 < src_width) {
-      x = acc & 0xffff;
-      dest[i * 2 + 0] = BLEND (src[j * 2 + 0], src[j * 2 + 2], x);
-      dest[i * 2 + 1] = BLEND (src[j * 2 + 1], src[j * 2 + 3], x);
-    } else {
-      dest[i * 2 + 0] = src[j * 2 + 0];
-      dest[i * 2 + 1] = src[j * 2 + 1];
-    }
-    acc += increment;
-  }
-  *accumulator = acc;
-}
-
-void
-vs_scanline_merge_linear_NV12 (uint8_t * dest, uint8_t * src1,
-    uint8_t * src2, int n, int x)
-{
-  uint32_t value = x >> 8;
-
-  if (value == 0) {
-    memcpy (dest, src1, n * 2);
-  } else {
-    video_scale_orc_merge_linear_u8 (dest, src1, src2, value, n * 2);
-  }
-}
-
-
-/* RGB565 */
-
-/* note that src and dest are uint16_t, and thus endian dependent */
-
-#define RGB565_R(x) (((x)&0xf800)>>8 | ((x)&0xf800)>>13)
-#define RGB565_G(x) (((x)&0x07e0)>>3 | ((x)&0x07e0)>>9)
-#define RGB565_B(x) (((x)&0x001f)<<3 | ((x)&0x001f)>>2)
-
-#define RGB565(r,g,b) \
-  ((((r)<<8)&0xf800) | (((g)<<3)&0x07e0) | (((b)>>3)&0x001f))
-
-
-void
-vs_scanline_downsample_RGB565 (uint8_t * dest_u8, uint8_t * src_u8, int n)
-{
-  uint16_t *dest = (uint16_t *) dest_u8;
-  uint16_t *src = (uint16_t *) src_u8;
-  int i;
-
-  for (i = 0; i < n; i++) {
-    dest[i] = RGB565 (
-        (RGB565_R (src[i * 2]) + RGB565_R (src[i * 2 + 1])) / 2,
-        (RGB565_G (src[i * 2]) + RGB565_G (src[i * 2 + 1])) / 2,
-        (RGB565_B (src[i * 2]) + RGB565_B (src[i * 2 + 1])) / 2);
-  }
-}
-
-void
-vs_scanline_resample_nearest_RGB565 (uint8_t * dest_u8, uint8_t * src_u8,
-    int src_width, int n, int *accumulator, int increment)
-{
-  uint16_t *dest = (uint16_t *) dest_u8;
-  uint16_t *src = (uint16_t *) src_u8;
-  int acc = *accumulator;
-  int i, j;
-
-  for (i = 0; i < n; i++) {
-    j = (acc + 0x8000) >> 16;
-    dest[i] = src[j];
-
-    acc += increment;
-  }
-
-  *accumulator = acc;
-}
-
-void
-vs_scanline_resample_linear_RGB565 (uint8_t * dest_u8, uint8_t * src_u8,
-    int src_width, int n, int *accumulator, int increment)
-{
-  uint16_t *dest = (uint16_t *) dest_u8;
-  uint16_t *src = (uint16_t *) src_u8;
-  int acc = *accumulator;
-  int i;
-  int j;
-  int x;
-
-  for (i = 0; i < n; i++) {
-    j = acc >> 16;
-
-    if (j + 1 < src_width) {
-      x = acc & 0xffff;
-      dest[i] = RGB565 (BLEND (RGB565_R (src[j]), RGB565_R (src[j + 1]), x),
-          BLEND (RGB565_G (src[j]), RGB565_G (src[j + 1]), x),
-          BLEND (RGB565_B (src[j]), RGB565_B (src[j + 1]), x));
-    } else {
-      dest[i] = RGB565 (RGB565_R (src[j]),
-          RGB565_G (src[j]), RGB565_B (src[j]));
-    }
-
-    acc += increment;
-  }
-
-  *accumulator = acc;
-}
-
-void
-vs_scanline_merge_linear_RGB565 (uint8_t * dest_u8, uint8_t * src1_u8,
-    uint8_t * src2_u8, int n, int x)
-{
-  uint16_t *dest = (uint16_t *) dest_u8;
-  uint16_t *src1 = (uint16_t *) src1_u8;
-  uint16_t *src2 = (uint16_t *) src2_u8;
-  int i;
-
-  if (x == 0) {
-    memcpy (dest, src1, n * 2);
-  } else {
-    for (i = 0; i < n; i++) {
-      dest[i] = RGB565 (BLEND (RGB565_R (src1[i]), RGB565_R (src2[i]), x),
-          BLEND (RGB565_G (src1[i]), RGB565_G (src2[i]), x),
-          BLEND (RGB565_B (src1[i]), RGB565_B (src2[i]), x));
-    }
-  }
-}
-
-
-/* RGB555 */
-
-/* note that src and dest are uint16_t, and thus endian dependent */
-
-#define RGB555_R(x) (((x)&0x7c00)>>7 | ((x)&0x7c00)>>12)
-#define RGB555_G(x) (((x)&0x03e0)>>2 | ((x)&0x03e0)>>7)
-#define RGB555_B(x) (((x)&0x001f)<<3 | ((x)&0x001f)>>2)
-
-#define RGB555(r,g,b) \
-  ((((r)<<7)&0x7c00) | (((g)<<2)&0x03e0) | (((b)>>3)&0x001f))
-
-void
-vs_scanline_downsample_RGB555 (uint8_t * dest_u8, uint8_t * src_u8, int n)
-{
-  uint16_t *dest = (uint16_t *) dest_u8;
-  uint16_t *src = (uint16_t *) src_u8;
-  int i;
-
-  for (i = 0; i < n; i++) {
-    dest[i] = RGB555 (
-        (RGB555_R (src[i * 2]) + RGB555_R (src[i * 2 + 1])) / 2,
-        (RGB555_G (src[i * 2]) + RGB555_G (src[i * 2 + 1])) / 2,
-        (RGB555_B (src[i * 2]) + RGB555_B (src[i * 2 + 1])) / 2);
-  }
-}
-
-void
-vs_scanline_resample_nearest_RGB555 (uint8_t * dest_u8, uint8_t * src_u8,
-    int src_width, int n, int *accumulator, int increment)
-{
-  uint16_t *dest = (uint16_t *) dest_u8;
-  uint16_t *src = (uint16_t *) src_u8;
-  int acc = *accumulator;
-  int i, j;
-
-  for (i = 0; i < n; i++) {
-    j = (acc + 0x8000) >> 16;
-
-    dest[i] = src[j];
-
-    acc += increment;
-  }
-
-  *accumulator = acc;
-}
-
-void
-vs_scanline_resample_linear_RGB555 (uint8_t * dest_u8, uint8_t * src_u8,
-    int src_width, int n, int *accumulator, int increment)
-{
-  uint16_t *dest = (uint16_t *) dest_u8;
-  uint16_t *src = (uint16_t *) src_u8;
-  int acc = *accumulator;
-  int i;
-  int j;
-  int x;
-
-  for (i = 0; i < n; i++) {
-    j = acc >> 16;
-
-    if (j + 1 < src_width) {
-      x = acc & 0xffff;
-      dest[i] = RGB555 (BLEND (RGB555_R (src[j]), RGB555_R (src[j + 1]), x),
-          BLEND (RGB555_G (src[j]), RGB555_G (src[j + 1]), x),
-          BLEND (RGB555_B (src[j]), RGB555_B (src[j + 1]), x));
-    } else {
-      dest[i] = RGB555 (RGB555_R (src[j]),
-          RGB555_G (src[j]), RGB555_B (src[j]));
-    }
-
-    acc += increment;
-  }
-
-  *accumulator = acc;
-}
-
-void
-vs_scanline_merge_linear_RGB555 (uint8_t * dest_u8, uint8_t * src1_u8,
-    uint8_t * src2_u8, int n, int x)
-{
-  uint16_t *dest = (uint16_t *) dest_u8;
-  uint16_t *src1 = (uint16_t *) src1_u8;
-  uint16_t *src2 = (uint16_t *) src2_u8;
-  int i;
-
-  if (x == 0) {
-    memcpy (dest, src1, n * 2);
-  } else {
-    for (i = 0; i < n; i++) {
-      dest[i] = RGB555 (BLEND (RGB555_R (src1[i]), RGB555_R (src2[i]), x),
-          BLEND (RGB555_G (src1[i]), RGB555_G (src2[i]), x),
-          BLEND (RGB555_B (src1[i]), RGB555_B (src2[i]), x));
-    }
-  }
-}
-
-void
-vs_scanline_resample_nearest_AYUV64 (uint8_t * dest8, uint8_t * src8,
-    int src_width, int n, int *accumulator, int increment)
-{
-  guint16 *dest = (guint16 *) dest8;
-  guint16 *src = (guint16 *) src8;
-  int acc = *accumulator;
-  int i, j;
-
-  for (i = 0; i < n; i++) {
-    j = (acc + 0x8000) >> 16;
-
-    dest[i * 4 + 0] = src[j * 4 + 0];
-    dest[i * 4 + 1] = src[j * 4 + 1];
-    dest[i * 4 + 2] = src[j * 4 + 2];
-    dest[i * 4 + 3] = src[j * 4 + 3];
-
-    acc += increment;
-  }
-
-  *accumulator = acc;
-}
-
-void
-vs_scanline_resample_linear_AYUV64 (uint8_t * dest8, uint8_t * src8,
-    int src_width, int n, int *accumulator, int increment)
-{
-  guint16 *dest = (guint16 *) dest8;
-  guint16 *src = (guint16 *) src8;
-  int acc = *accumulator;
-  int i;
-  int j;
-  int x;
-
-  for (i = 0; i < n; i++) {
-    j = acc >> 16;
-    x = (acc & 0xffff) >> 1;
-
-    if (j + 1 < src_width) {
-      dest[i * 4 + 0] = BLEND15 (src[j * 4 + 0], src[j * 4 + 4], x);
-      dest[i * 4 + 1] = BLEND15 (src[j * 4 + 1], src[j * 4 + 5], x);
-      dest[i * 4 + 2] = BLEND15 (src[j * 4 + 2], src[j * 4 + 6], x);
-      dest[i * 4 + 3] = BLEND15 (src[j * 4 + 3], src[j * 4 + 7], x);
-    } else {
-      dest[i * 4 + 0] = src[j * 4 + 0];
-      dest[i * 4 + 1] = src[j * 4 + 1];
-      dest[i * 4 + 2] = src[j * 4 + 2];
-      dest[i * 4 + 3] = src[j * 4 + 3];
-    }
-    acc += increment;
-  }
-
-  *accumulator = acc;
-}
diff --git a/gst/videoscale/vs_scanline.h b/gst/videoscale/vs_scanline.h
deleted file mode 100644
index b953e98..0000000
--- a/gst/videoscale/vs_scanline.h
+++ /dev/null
@@ -1,85 +0,0 @@
-/*
- * Image Scaling Functions
- * Copyright (c) 2005 David A. Schleef <ds@schleef.org>
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. 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.
- * 
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 AUTHOR 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 __VS_SCANLINE_H__
-#define __VS_SCANLINE_H__
-
-#include <_stdint.h>
-#include <glib.h>
-
-G_GNUC_INTERNAL void vs_scanline_downsample_Y (uint8_t *dest, uint8_t *src, int n);
-G_GNUC_INTERNAL void vs_scanline_resample_nearest_Y (uint8_t *dest, uint8_t *src, int n, int src_width, int *accumulator, int increment);
-G_GNUC_INTERNAL void vs_scanline_resample_linear_Y (uint8_t *dest, uint8_t *src, int n, int src_width, int *accumulator, int increment);
-G_GNUC_INTERNAL void vs_scanline_merge_linear_Y (uint8_t *dest, uint8_t *src1, uint8_t *src2, int n, int x);
-
-G_GNUC_INTERNAL void vs_scanline_downsample_RGBA (uint8_t *dest, uint8_t *src, int n);
-G_GNUC_INTERNAL void vs_scanline_resample_nearest_RGBA (uint8_t *dest, uint8_t *src, int src_width, int n, int *accumulator, int increment);
-G_GNUC_INTERNAL void vs_scanline_resample_linear_RGBA (uint8_t *dest, uint8_t *src, int src_width, int n, int *accumulator, int increment);
-G_GNUC_INTERNAL void vs_scanline_merge_linear_RGBA (uint8_t *dest, uint8_t *src1, uint8_t *src2, int n, int x);
-
-G_GNUC_INTERNAL void vs_scanline_downsample_RGB (uint8_t *dest, uint8_t *src, int n);
-G_GNUC_INTERNAL void vs_scanline_resample_nearest_RGB (uint8_t *dest, uint8_t *src, int src_width, int n, int *accumulator, int increment);
-G_GNUC_INTERNAL void vs_scanline_resample_linear_RGB (uint8_t *dest, uint8_t *src, int src_width, int n, int *accumulator, int increment);
-G_GNUC_INTERNAL void vs_scanline_merge_linear_RGB (uint8_t *dest, uint8_t *src1, uint8_t *src2, int n, int x);
-
-G_GNUC_INTERNAL void vs_scanline_downsample_YUYV (uint8_t *dest, uint8_t *src, int n);
-G_GNUC_INTERNAL void vs_scanline_resample_nearest_YUYV (uint8_t *dest, uint8_t *src, int src_width, int n, int *accumulator, int increment);
-G_GNUC_INTERNAL void vs_scanline_resample_linear_YUYV (uint8_t *dest, uint8_t *src, int src_width, int n, int *accumulator, int increment);
-G_GNUC_INTERNAL void vs_scanline_merge_linear_YUYV (uint8_t *dest, uint8_t *src1, uint8_t *src2, int n, int x);
-
-G_GNUC_INTERNAL void vs_scanline_downsample_UYVY (uint8_t *dest, uint8_t *src, int n);
-G_GNUC_INTERNAL void vs_scanline_resample_nearest_UYVY (uint8_t *dest, uint8_t *src, int src_width, int n, int *accumulator, int increment);
-G_GNUC_INTERNAL void vs_scanline_resample_linear_UYVY (uint8_t *dest, uint8_t *src, int src_width, int n, int *accumulator, int increment);
-G_GNUC_INTERNAL void vs_scanline_merge_linear_UYVY (uint8_t *dest, uint8_t *src1, uint8_t *src2, int n, int x);
-
-G_GNUC_INTERNAL void vs_scanline_downsample_NV12 (uint8_t *dest, uint8_t *src, int n);
-G_GNUC_INTERNAL void vs_scanline_resample_nearest_NV12 (uint8_t *dest, uint8_t *src, int src_width, int n, int *accumulator, int increment);
-G_GNUC_INTERNAL void vs_scanline_resample_linear_NV12 (uint8_t *dest, uint8_t *src, int src_width, int n, int *accumulator, int increment);
-G_GNUC_INTERNAL void vs_scanline_merge_linear_NV12 (uint8_t *dest, uint8_t *src1, uint8_t *src2, int n, int x);
-
-G_GNUC_INTERNAL void vs_scanline_downsample_RGB565 (uint8_t *dest, uint8_t *src, int n);
-G_GNUC_INTERNAL void vs_scanline_resample_nearest_RGB565 (uint8_t *dest, uint8_t *src, int src_width, int n, int *accumulator, int increment);
-G_GNUC_INTERNAL void vs_scanline_resample_linear_RGB565 (uint8_t *dest, uint8_t *src, int src_width, int n, int *accumulator, int increment);
-G_GNUC_INTERNAL void vs_scanline_merge_linear_RGB565 (uint8_t *dest, uint8_t *src1, uint8_t *src2, int n, int x);
-
-G_GNUC_INTERNAL void vs_scanline_downsample_RGB555 (uint8_t *dest, uint8_t *src, int n);
-G_GNUC_INTERNAL void vs_scanline_resample_nearest_RGB555 (uint8_t *dest, uint8_t *src, int src_width, int n, int *accumulator, int increment);
-G_GNUC_INTERNAL void vs_scanline_resample_linear_RGB555 (uint8_t *dest, uint8_t *src, int src_width, int n, int *accumulator, int increment);
-G_GNUC_INTERNAL void vs_scanline_merge_linear_RGB555 (uint8_t *dest, uint8_t *src1, uint8_t *src2, int n, int x);
-
-G_GNUC_INTERNAL void vs_scanline_downsample_Y16 (uint8_t *dest, uint8_t *src, int n);
-G_GNUC_INTERNAL void vs_scanline_resample_nearest_Y16 (uint8_t *dest, uint8_t *src, int n, int src_width, int *accumulator, int increment);
-G_GNUC_INTERNAL void vs_scanline_resample_linear_Y16 (uint8_t *dest, uint8_t *src, int n, int src_width, int *accumulator, int increment);
-G_GNUC_INTERNAL void vs_scanline_merge_linear_Y16 (uint8_t *dest, uint8_t *src1, uint8_t *src2, int n, int x);
-
-G_GNUC_INTERNAL void vs_scanline_resample_nearest_AYUV64 (uint8_t * dest, uint8_t * src,
-    int src_width, int n, int *accumulator, int increment);
-G_GNUC_INTERNAL void vs_scanline_resample_linear_AYUV64 (uint8_t * dest, uint8_t * src,
-    int src_width, int n, int *accumulator, int increment);
-
-#endif
-
diff --git a/gst/videotestsrc/Makefile.am b/gst/videotestsrc/Makefile.am
index 52230f2..6c37d1c 100644
--- a/gst/videotestsrc/Makefile.am
+++ b/gst/videotestsrc/Makefile.am
@@ -22,18 +22,3 @@
 generate_sine_table_SOURCES = generate_sine_table.c
 generate_sine_table_CFLAGS = $(GST_CFLAGS)
 generate_sine_table_LDADD = $(LIBM) $(GLIB_LIBS)
-
-Android.mk: Makefile.am $(BUILT_SOURCES)
-	androgenizer \
-	-:PROJECT libgstvideotestsrc -:SHARED libgstvideotestsrc \
-	 -:TAGS eng debug \
-         -:REL_TOP $(top_srcdir) -:ABS_TOP $(abs_top_srcdir) \
-	 -:SOURCES $(libgstvideotestsrc_la_SOURCES) \
-	 	   $(nodist_libgstvideotestsrc_la_SOURCES) \
-	 -:CFLAGS $(DEFS) $(DEFAULT_INCLUDES) $(libgstvideotestsrc_la_CFLAGS) \
-	 -:LDFLAGS $(libgstvideotestsrc_la_LDFLAGS) \
-	           $(libgstvideotestsrc_la_LIBADD) \
-	           -ldl \
-	 -:PASSTHROUGH LOCAL_ARM_MODE:=arm \
-		       LOCAL_MODULE_PATH:='$$(TARGET_OUT)/lib/gstreamer-0.10' \
-	> $@
diff --git a/gst/videotestsrc/Makefile.in b/gst/videotestsrc/Makefile.in
index 4a1b0bc..d15747a 100644
--- a/gst/videotestsrc/Makefile.in
+++ b/gst/videotestsrc/Makefile.in
@@ -1,7 +1,7 @@
-# Makefile.in generated by automake 1.14.1 from Makefile.am.
+# Makefile.in generated by automake 1.15 from Makefile.am.
 # @configure_input@
 
-# Copyright (C) 1994-2013 Free Software Foundation, Inc.
+# 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,
@@ -38,7 +38,17 @@
 
 
 VPATH = @srcdir@
-am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)'
+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 \
       ?) ;; \
@@ -102,8 +112,6 @@
 build_triplet = @build@
 host_triplet = @host@
 target_triplet = @target@
-DIST_COMMON = $(top_srcdir)/common/orc.mak $(srcdir)/Makefile.in \
-	$(srcdir)/Makefile.am $(top_srcdir)/depcomp $(noinst_HEADERS)
 EXTRA_PROGRAMS = generate_sine_table$(EXEEXT)
 subdir = gst/videotestsrc
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
@@ -126,7 +134,6 @@
 	$(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-x11.m4 \
 	$(top_srcdir)/common/m4/gst.m4 \
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
@@ -143,6 +150,8 @@
 	$(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 =
@@ -268,6 +277,8 @@
   done | $(am__uniquify_input)`
 ETAGS = etags
 CTAGS = ctags
+am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/common/orc.mak \
+	$(top_srcdir)/depcomp
 DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
 ACLOCAL = @ACLOCAL@
 ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@
@@ -328,6 +339,8 @@
 GIO_CFLAGS = @GIO_CFLAGS@
 GIO_LDFLAGS = @GIO_LDFLAGS@
 GIO_LIBS = @GIO_LIBS@
+GIO_UNIX_2_0_CFLAGS = @GIO_UNIX_2_0_CFLAGS@
+GIO_UNIX_2_0_LIBS = @GIO_UNIX_2_0_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
@@ -357,6 +370,8 @@
 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_OPTION_CFLAGS = @GST_OPTION_CFLAGS@
 GST_OPTION_CXXFLAGS = @GST_OPTION_CXXFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
@@ -384,7 +399,6 @@
 GTK_X11_CFLAGS = @GTK_X11_CFLAGS@
 GTK_X11_LIBS = @GTK_X11_LIBS@
 HAVE_CDPARANOIA = @HAVE_CDPARANOIA@
-HAVE_X = @HAVE_X@
 HAVE_XSHM = @HAVE_XSHM@
 HAVE_ZLIB = @HAVE_ZLIB@
 HTML_DIR = @HTML_DIR@
@@ -399,6 +413,7 @@
 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@
@@ -488,13 +503,12 @@
 XGETTEXT = @XGETTEXT@
 XGETTEXT_015 = @XGETTEXT_015@
 XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
-XMKMF = @XMKMF@
+XSHM_CFLAGS = @XSHM_CFLAGS@
 XSHM_LIBS = @XSHM_LIBS@
+XVIDEO_CFLAGS = @XVIDEO_CFLAGS@
 XVIDEO_LIBS = @XVIDEO_LIBS@
 X_CFLAGS = @X_CFLAGS@
-X_EXTRA_LIBS = @X_EXTRA_LIBS@
 X_LIBS = @X_LIBS@
-X_PRE_LIBS = @X_PRE_LIBS@
 ZLIB_CFLAGS = @ZLIB_CFLAGS@
 ZLIB_LIBS = @ZLIB_LIBS@
 abs_builddir = @abs_builddir@
@@ -547,6 +561,7 @@
 psdir = @psdir@
 pyexecdir = @pyexecdir@
 pythondir = @pythondir@
+runstatedir = @runstatedir@
 sbindir = @sbindir@
 sharedstatedir = @sharedstatedir@
 srcdir = @srcdir@
@@ -603,7 +618,6 @@
 	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu gst/videotestsrc/Makefile'; \
 	$(am__cd) $(top_srcdir) && \
 	  $(AUTOMAKE) --gnu gst/videotestsrc/Makefile
-.PRECIOUS: Makefile
 Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
 	@case '$?' in \
 	  *config.status*) \
@@ -612,7 +626,7 @@
 	    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/orc.mak:
+$(top_srcdir)/common/orc.mak $(am__empty):
 
 $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
 	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
@@ -955,6 +969,8 @@
 	tags tags-am uninstall uninstall-am \
 	uninstall-pluginLTLIBRARIES
 
+.PRECIOUS: Makefile
+
 
 orc-update: tmp-orc.c $(ORC_SOURCE).h
 	$(top_srcdir)/common/gst-indent tmp-orc.c
@@ -992,21 +1008,6 @@
 	cp -p tmp-orc.c $(distdir)/$(ORC_SOURCE)-dist.c
 	cp -p $(ORC_SOURCE).h $(distdir)/$(ORC_SOURCE)-dist.h
 
-Android.mk: Makefile.am $(BUILT_SOURCES)
-	androgenizer \
-	-:PROJECT libgstvideotestsrc -:SHARED libgstvideotestsrc \
-	 -:TAGS eng debug \
-         -:REL_TOP $(top_srcdir) -:ABS_TOP $(abs_top_srcdir) \
-	 -:SOURCES $(libgstvideotestsrc_la_SOURCES) \
-	 	   $(nodist_libgstvideotestsrc_la_SOURCES) \
-	 -:CFLAGS $(DEFS) $(DEFAULT_INCLUDES) $(libgstvideotestsrc_la_CFLAGS) \
-	 -:LDFLAGS $(libgstvideotestsrc_la_LDFLAGS) \
-	           $(libgstvideotestsrc_la_LIBADD) \
-	           -ldl \
-	 -:PASSTHROUGH LOCAL_ARM_MODE:=arm \
-		       LOCAL_MODULE_PATH:='$$(TARGET_OUT)/lib/gstreamer-0.10' \
-	> $@
-
 # 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/videotestsrc/gstvideotestsrc.c b/gst/videotestsrc/gstvideotestsrc.c
index 6951b3d..f646b4c 100644
--- a/gst/videotestsrc/gstvideotestsrc.c
+++ b/gst/videotestsrc/gstvideotestsrc.c
@@ -28,8 +28,8 @@
  * <refsect2>
  * <title>Example launch line</title>
  * |[
- * gst-launch -v videotestsrc pattern=snow ! ximagesink
- * ]| Shows random noise in an X window.
+ * gst-launch-1.0 -v videotestsrc pattern=snow ! video/x-raw,width=1280,height=720 ! autovideosink
+ * ]| Shows random noise in a video window.
  * </refsect2>
  */
 
@@ -74,8 +74,7 @@
   PROP_YOFFSET,
   PROP_FOREGROUND_COLOR,
   PROP_BACKGROUND_COLOR,
-  PROP_HORIZONTAL_SPEED,
-  PROP_LAST
+  PROP_HORIZONTAL_SPEED
 };
 
 
@@ -151,6 +150,8 @@
     {GST_VIDEO_TEST_SRC_BAR, "Bar", "bar"},
     {GST_VIDEO_TEST_SRC_PINWHEEL, "Pinwheel", "pinwheel"},
     {GST_VIDEO_TEST_SRC_SPOKES, "Spokes", "spokes"},
+    {GST_VIDEO_TEST_SRC_GRADIENT, "Gradient", "gradient"},
+    {GST_VIDEO_TEST_SRC_COLORS, "Colors", "colors"},
     {0, NULL, NULL}
   };
 
@@ -183,8 +184,9 @@
           DEFAULT_PATTERN, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
   g_object_class_install_property (gobject_class, PROP_TIMESTAMP_OFFSET,
       g_param_spec_int64 ("timestamp-offset", "Timestamp offset",
-          "An offset added to timestamps set on buffers (in ns)", G_MININT64,
-          G_MAXINT64, 0, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+          "An offset added to timestamps set on buffers (in ns)", 0,
+          (G_MAXLONG == G_MAXINT64) ? G_MAXINT64 : (G_MAXLONG * GST_SECOND - 1),
+          0, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
   g_object_class_install_property (gobject_class, PROP_IS_LIVE,
       g_param_spec_boolean ("is-live", "Is Live",
           "Whether to act as a live source", DEFAULT_IS_LIVE,
@@ -423,6 +425,12 @@
     case GST_VIDEO_TEST_SRC_SPOKES:
       videotestsrc->make_image = gst_video_test_src_spokes;
       break;
+    case GST_VIDEO_TEST_SRC_GRADIENT:
+      videotestsrc->make_image = gst_video_test_src_gradient;
+      break;
+    case GST_VIDEO_TEST_SRC_COLORS:
+      videotestsrc->make_image = gst_video_test_src_colors;
+      break;
     default:
       g_assert_not_reached ();
   }
@@ -776,7 +784,7 @@
 static gboolean
 gst_video_test_src_query (GstBaseSrc * bsrc, GstQuery * query)
 {
-  gboolean res;
+  gboolean res = FALSE;
   GstVideoTestSrc *src;
 
   src = GST_VIDEO_TEST_SRC (bsrc);
@@ -794,6 +802,23 @@
       gst_query_set_convert (query, src_fmt, src_val, dest_fmt, dest_val);
       break;
     }
+    case GST_QUERY_LATENCY:
+    {
+      if (src->info.fps_n > 0) {
+        GstClockTime latency;
+
+        latency =
+            gst_util_uint64_scale (GST_SECOND, src->info.fps_d,
+            src->info.fps_n);
+        gst_query_set_latency (query,
+            gst_base_src_is_live (GST_BASE_SRC_CAST (src)), latency,
+            GST_CLOCK_TIME_NONE);
+        GST_DEBUG_OBJECT (src, "Reporting latency of %" GST_TIME_FORMAT,
+            GST_TIME_ARGS (latency));
+        res = TRUE;
+      }
+      break;
+    }
     case GST_QUERY_DURATION:{
       if (bsrc->num_buffers != -1) {
         GstFormat format;
@@ -832,7 +857,7 @@
 {
   /* for live sources, sync on the timestamp of the buffer */
   if (gst_base_src_is_live (basesrc)) {
-    GstClockTime timestamp = GST_BUFFER_DTS (buffer);
+    GstClockTime timestamp = GST_BUFFER_PTS (buffer);
 
     if (GST_CLOCK_TIME_IS_VALID (timestamp)) {
       /* get duration to calculate end time */
@@ -920,11 +945,11 @@
   if (!gst_video_frame_map (&frame, &src->info, buffer, GST_MAP_WRITE))
     goto invalid_frame;
 
-  GST_BUFFER_DTS (buffer) =
+  GST_BUFFER_PTS (buffer) =
       src->accum_rtime + src->timestamp_offset + src->running_time;
-  GST_BUFFER_PTS (buffer) = GST_BUFFER_DTS (buffer);
+  GST_BUFFER_DTS (buffer) = GST_CLOCK_TIME_NONE;
 
-  gst_object_sync_values (GST_OBJECT (psrc), GST_BUFFER_DTS (buffer));
+  gst_object_sync_values (GST_OBJECT (psrc), GST_BUFFER_PTS (buffer));
 
   src->make_image (src, &frame);
 
diff --git a/gst/videotestsrc/gstvideotestsrc.h b/gst/videotestsrc/gstvideotestsrc.h
index 468aad7..90388c2 100644
--- a/gst/videotestsrc/gstvideotestsrc.h
+++ b/gst/videotestsrc/gstvideotestsrc.h
@@ -61,9 +61,13 @@
  * @GST_VIDEO_TEST_SRC_CHROMA_ZONE_PLATE: Chroma zone plate
  * @GST_VIDEO_TEST_SRC_BALL: Moving ball
  * @GST_VIDEO_TEST_SRC_SMPTE100: SMPTE test pattern (100% color bars)
+ * @GST_VIDEO_TEST_SRC_SOLID: A solid color, defined by the
+ * #GstVideoTestSrc:foreground-color property
  * @GST_VIDEO_TEST_SRC_BAR: Bar with foreground color
  * @GST_VIDEO_TEST_SRC_PINWHEEL: Pinwheel
  * @GST_VIDEO_TEST_SRC_SPOKES: Spokes
+ * @GST_VIDEO_TEST_SRC_GRADIENT: Gradient
+ * @GST_VIDEO_TEST_SRC_COLORS: All colors
  *
  * The test pattern to produce.
  *
@@ -107,7 +111,9 @@
   GST_VIDEO_TEST_SRC_SMPTE100,
   GST_VIDEO_TEST_SRC_BAR,
   GST_VIDEO_TEST_SRC_PINWHEEL,
-  GST_VIDEO_TEST_SRC_SPOKES
+  GST_VIDEO_TEST_SRC_SPOKES,
+  GST_VIDEO_TEST_SRC_GRADIENT,
+  GST_VIDEO_TEST_SRC_COLORS
 } GstVideoTestSrcPattern;
 
 typedef struct _GstVideoTestSrc GstVideoTestSrc;
@@ -134,6 +140,7 @@
   gint y_invert;
 
   /* private */
+  /* FIXME 2.0: Change type to GstClockTime */
   gint64 timestamp_offset;              /* base offset */
 
   /* running time and frames for current caps */
diff --git a/gst/videotestsrc/gstvideotestsrcorc-dist.c b/gst/videotestsrc/gstvideotestsrcorc-dist.c
index c49a1ed..87c7beb 100644
--- a/gst/videotestsrc/gstvideotestsrcorc-dist.c
+++ b/gst/videotestsrc/gstvideotestsrcorc-dist.c
@@ -150,7 +150,6 @@
   int i;
   orc_union32 *ORC_RESTRICT ptr0;
   orc_union32 var32;
-  orc_union32 var33;
 
   ptr0 = (orc_union32 *) d1;
 
@@ -158,10 +157,8 @@
   var32.i = p1;
 
   for (i = 0; i < n; i++) {
-    /* 1: copyl */
-    var33.i = var32.i;
-    /* 2: storel */
-    ptr0[i] = var33;
+    /* 1: storel */
+    ptr0[i] = var32;
   }
 
 }
@@ -174,7 +171,6 @@
   int n = ex->n;
   orc_union32 *ORC_RESTRICT ptr0;
   orc_union32 var32;
-  orc_union32 var33;
 
   ptr0 = (orc_union32 *) ex->arrays[0];
 
@@ -182,10 +178,8 @@
   var32.i = ex->params[24];
 
   for (i = 0; i < n; i++) {
-    /* 1: copyl */
-    var33.i = var32.i;
-    /* 2: storel */
-    ptr0[i] = var33;
+    /* 1: storel */
+    ptr0[i] = var32;
   }
 
 }
@@ -207,7 +201,7 @@
       static const orc_uint8 bc[] = {
         1, 9, 28, 118, 105, 100, 101, 111, 95, 116, 101, 115, 116, 95, 115, 114,
         99, 95, 111, 114, 99, 95, 115, 112, 108, 97, 116, 95, 117, 51, 50, 11,
-        4, 4, 16, 4, 112, 0, 24, 2, 0,
+        4, 4, 16, 4, 128, 0, 24, 2, 0,
       };
       p = orc_program_new_from_static_bytecode (bc);
       orc_program_set_backup_function (p, _backup_video_test_src_orc_splat_u32);
@@ -218,7 +212,7 @@
       orc_program_add_destination (p, 4, "d1");
       orc_program_add_parameter (p, 4, "p1");
 
-      orc_program_append_2 (p, "copyl", 0, ORC_VAR_D1, ORC_VAR_P1, ORC_VAR_D1,
+      orc_program_append_2 (p, "storel", 0, ORC_VAR_D1, ORC_VAR_P1, ORC_VAR_D1,
           ORC_VAR_D1);
 #endif
 
diff --git a/gst/videotestsrc/gstvideotestsrcorc.orc b/gst/videotestsrc/gstvideotestsrcorc.orc
index a75f069..d0970b3 100644
--- a/gst/videotestsrc/gstvideotestsrcorc.orc
+++ b/gst/videotestsrc/gstvideotestsrcorc.orc
@@ -3,6 +3,6 @@
 .dest 4 d1 guint8
 .param 4 p1
 
-copyl d1, p1
+storel d1, p1
 
 
diff --git a/gst/videotestsrc/videotestsrc.c b/gst/videotestsrc/videotestsrc.c
index b4adf90..ae7ede2 100644
--- a/gst/videotestsrc/videotestsrc.c
+++ b/gst/videotestsrc/videotestsrc.c
@@ -1186,8 +1186,6 @@
 
     for (i = 0; i < n_lines; i++) {
       idx = CLAMP (y + i + offset, 0, height - 1);
-
-      GST_DEBUG ("line %d, %d, idx %d", i, y + i + offset, idx);
       lines[i] = p->lines[idx % n_lines];
     }
 
@@ -1198,7 +1196,6 @@
       idx = y + i + offset;
       if (idx > height - 1)
         break;
-      GST_DEBUG ("pack line %d", idx);
       finfo->pack_func (finfo, GST_VIDEO_PACK_FLAG_NONE,
           lines[i], 0, frame->data, frame->info.stride,
           frame->info.chroma_site, idx, width);
@@ -1336,3 +1333,55 @@
     videotestsrc_convert_tmpline (p, frame, j);
   }
 }
+
+void
+gst_video_test_src_gradient (GstVideoTestSrc * v, GstVideoFrame * frame)
+{
+  int i;
+  int j;
+  paintinfo pi = PAINT_INFO_INIT;
+  paintinfo *p = &pi;
+  struct vts_color_struct color;
+  int w = frame->info.width, h = frame->info.height;
+
+  videotestsrc_setup_paintinfo (v, p, w, h);
+
+  color = p->colors[COLOR_BLACK];
+  p->color = &color;
+
+  for (j = 0; j < h; j++) {
+    int y = j * 255.0 / h;
+    for (i = 0; i < w; i++) {
+      p->tmpline_u8[i] = y;
+    }
+    videotestsrc_blend_line (v, p->tmpline, p->tmpline_u8,
+        &p->foreground_color, &p->background_color, w);
+    videotestsrc_convert_tmpline (p, frame, j);
+  }
+}
+
+void
+gst_video_test_src_colors (GstVideoTestSrc * v, GstVideoFrame * frame)
+{
+  int i;
+  int j;
+  paintinfo pi = PAINT_INFO_INIT;
+  paintinfo *p = &pi;
+  struct vts_color_struct color;
+  int w = frame->info.width, h = frame->info.height;
+
+  videotestsrc_setup_paintinfo (v, p, w, h);
+
+  color = p->colors[COLOR_BLACK];
+  p->color = &color;
+
+  for (j = 0; j < h; j++) {
+    for (i = 0; i < w; i++) {
+      p->tmpline[i * 4 + 0] = 0xff;
+      p->tmpline[i * 4 + 1] = ((i * 4096) / w) % 256;
+      p->tmpline[i * 4 + 2] = (((j * 16) / h) << 4) | ((i * 16) / w);
+      p->tmpline[i * 4 + 3] = ((j * 4096) / h) % 256;
+    }
+    videotestsrc_convert_tmpline (p, frame, j);
+  }
+}
diff --git a/gst/videotestsrc/videotestsrc.h b/gst/videotestsrc/videotestsrc.h
index c1e5e1f..977e504 100644
--- a/gst/videotestsrc/videotestsrc.h
+++ b/gst/videotestsrc/videotestsrc.h
@@ -82,5 +82,7 @@
 void    gst_video_test_src_bar          (GstVideoTestSrc * v, GstVideoFrame *frame);
 void    gst_video_test_src_pinwheel     (GstVideoTestSrc * v, GstVideoFrame * frame);
 void    gst_video_test_src_spokes       (GstVideoTestSrc * v, GstVideoFrame * frame);
+void    gst_video_test_src_gradient     (GstVideoTestSrc * v, GstVideoFrame * frame);
+void    gst_video_test_src_colors       (GstVideoTestSrc * v, GstVideoFrame * frame);
 
 #endif
diff --git a/gst/volume/Makefile.am b/gst/volume/Makefile.am
index bb83001..e1dd738 100644
--- a/gst/volume/Makefile.am
+++ b/gst/volume/Makefile.am
@@ -15,18 +15,3 @@
 libgstvolume_la_LIBTOOLFLAGS = $(GST_PLUGIN_LIBTOOLFLAGS)
 
 noinst_HEADERS = gstvolume.h
-
-Android.mk: Makefile.am $(BUILT_SOURCES)
-	androgenizer \
-	-:PROJECT libgstvolume -:SHARED libgstvolume \
-	 -:TAGS eng debug \
-         -:REL_TOP $(top_srcdir) -:ABS_TOP $(abs_top_srcdir) \
-	 -:SOURCES $(libgstvolume_la_SOURCES) \
-	  $(nodist_libgstvolume_la_SOURCES) \
-	 -:CFLAGS $(DEFS) $(DEFAULT_INCLUDES) $(libgstvolume_la_CFLAGS) \
-	 -:LDFLAGS $(libgstvolume_la_LDFLAGS) \
-	           $(libgstvolume_la_LIBADD) \
-	           -ldl \
-	 -:PASSTHROUGH LOCAL_ARM_MODE:=arm \
-		       LOCAL_MODULE_PATH:='$$(TARGET_OUT)/lib/gstreamer-0.10' \
-	> $@
diff --git a/gst/volume/Makefile.in b/gst/volume/Makefile.in
index 38c9c7e..c2d1bef 100644
--- a/gst/volume/Makefile.in
+++ b/gst/volume/Makefile.in
@@ -1,7 +1,7 @@
-# Makefile.in generated by automake 1.14.1 from Makefile.am.
+# Makefile.in generated by automake 1.15 from Makefile.am.
 # @configure_input@
 
-# Copyright (C) 1994-2013 Free Software Foundation, Inc.
+# 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,
@@ -38,7 +38,17 @@
 
 
 VPATH = @srcdir@
-am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)'
+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 \
       ?) ;; \
@@ -102,8 +112,6 @@
 build_triplet = @build@
 host_triplet = @host@
 target_triplet = @target@
-DIST_COMMON = $(top_srcdir)/common/orc.mak $(srcdir)/Makefile.in \
-	$(srcdir)/Makefile.am $(top_srcdir)/depcomp $(noinst_HEADERS)
 subdir = gst/volume
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
 am__aclocal_m4_deps = $(top_srcdir)/common/m4/as-ac-expand.m4 \
@@ -125,7 +133,6 @@
 	$(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-x11.m4 \
 	$(top_srcdir)/common/m4/gst.m4 \
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
@@ -142,6 +149,8 @@
 	$(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 =
@@ -253,6 +262,8 @@
   done | $(am__uniquify_input)`
 ETAGS = etags
 CTAGS = ctags
+am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/common/orc.mak \
+	$(top_srcdir)/depcomp
 DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
 ACLOCAL = @ACLOCAL@
 ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@
@@ -313,6 +324,8 @@
 GIO_CFLAGS = @GIO_CFLAGS@
 GIO_LDFLAGS = @GIO_LDFLAGS@
 GIO_LIBS = @GIO_LIBS@
+GIO_UNIX_2_0_CFLAGS = @GIO_UNIX_2_0_CFLAGS@
+GIO_UNIX_2_0_LIBS = @GIO_UNIX_2_0_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
@@ -342,6 +355,8 @@
 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_OPTION_CFLAGS = @GST_OPTION_CFLAGS@
 GST_OPTION_CXXFLAGS = @GST_OPTION_CXXFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
@@ -369,7 +384,6 @@
 GTK_X11_CFLAGS = @GTK_X11_CFLAGS@
 GTK_X11_LIBS = @GTK_X11_LIBS@
 HAVE_CDPARANOIA = @HAVE_CDPARANOIA@
-HAVE_X = @HAVE_X@
 HAVE_XSHM = @HAVE_XSHM@
 HAVE_ZLIB = @HAVE_ZLIB@
 HTML_DIR = @HTML_DIR@
@@ -384,6 +398,7 @@
 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@
@@ -473,13 +488,12 @@
 XGETTEXT = @XGETTEXT@
 XGETTEXT_015 = @XGETTEXT_015@
 XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
-XMKMF = @XMKMF@
+XSHM_CFLAGS = @XSHM_CFLAGS@
 XSHM_LIBS = @XSHM_LIBS@
+XVIDEO_CFLAGS = @XVIDEO_CFLAGS@
 XVIDEO_LIBS = @XVIDEO_LIBS@
 X_CFLAGS = @X_CFLAGS@
-X_EXTRA_LIBS = @X_EXTRA_LIBS@
 X_LIBS = @X_LIBS@
-X_PRE_LIBS = @X_PRE_LIBS@
 ZLIB_CFLAGS = @ZLIB_CFLAGS@
 ZLIB_LIBS = @ZLIB_LIBS@
 abs_builddir = @abs_builddir@
@@ -532,6 +546,7 @@
 psdir = @psdir@
 pyexecdir = @pyexecdir@
 pythondir = @pythondir@
+runstatedir = @runstatedir@
 sbindir = @sbindir@
 sharedstatedir = @sharedstatedir@
 srcdir = @srcdir@
@@ -584,7 +599,6 @@
 	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu gst/volume/Makefile'; \
 	$(am__cd) $(top_srcdir) && \
 	  $(AUTOMAKE) --gnu gst/volume/Makefile
-.PRECIOUS: Makefile
 Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
 	@case '$?' in \
 	  *config.status*) \
@@ -593,7 +607,7 @@
 	    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/orc.mak:
+$(top_srcdir)/common/orc.mak $(am__empty):
 
 $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
 	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
@@ -909,6 +923,8 @@
 	tags tags-am uninstall uninstall-am \
 	uninstall-pluginLTLIBRARIES
 
+.PRECIOUS: Makefile
+
 
 orc-update: tmp-orc.c $(ORC_SOURCE).h
 	$(top_srcdir)/common/gst-indent tmp-orc.c
@@ -946,21 +962,6 @@
 	cp -p tmp-orc.c $(distdir)/$(ORC_SOURCE)-dist.c
 	cp -p $(ORC_SOURCE).h $(distdir)/$(ORC_SOURCE)-dist.h
 
-Android.mk: Makefile.am $(BUILT_SOURCES)
-	androgenizer \
-	-:PROJECT libgstvolume -:SHARED libgstvolume \
-	 -:TAGS eng debug \
-         -:REL_TOP $(top_srcdir) -:ABS_TOP $(abs_top_srcdir) \
-	 -:SOURCES $(libgstvolume_la_SOURCES) \
-	  $(nodist_libgstvolume_la_SOURCES) \
-	 -:CFLAGS $(DEFS) $(DEFAULT_INCLUDES) $(libgstvolume_la_CFLAGS) \
-	 -:LDFLAGS $(libgstvolume_la_LDFLAGS) \
-	           $(libgstvolume_la_LIBADD) \
-	           -ldl \
-	 -:PASSTHROUGH LOCAL_ARM_MODE:=arm \
-		       LOCAL_MODULE_PATH:='$$(TARGET_OUT)/lib/gstreamer-0.10' \
-	> $@
-
 # 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/volume/gstvolume.c b/gst/volume/gstvolume.c
index 0f5b362..0b6482a 100644
--- a/gst/volume/gstvolume.c
+++ b/gst/volume/gstvolume.c
@@ -30,7 +30,7 @@
  * <refsect2>
  * <title>Example launch line</title>
  * |[
- * gst-launch -v -m audiotestsrc ! volume volume=0.5 ! level ! fakesink silent=TRUE
+ * gst-launch-1.0 -v -m audiotestsrc ! volume volume=0.5 ! level ! fakesink silent=TRUE
  * ]| This pipeline shows that the level of audiotestsrc has been halved
  * (peak values are around -6 dB and RMS around -9 dB) compared to
  * the same pipeline without the volume element.
@@ -250,10 +250,14 @@
     self->current_mute = FALSE;
     self->current_volume = volume;
 
-    self->current_vol_i8 = volume * VOLUME_UNITY_INT8;
-    self->current_vol_i16 = volume * VOLUME_UNITY_INT16;
-    self->current_vol_i24 = volume * VOLUME_UNITY_INT24;
-    self->current_vol_i32 = volume * VOLUME_UNITY_INT32;
+    self->current_vol_i8 =
+        (gint) ((gdouble) volume * (gdouble) VOLUME_UNITY_INT8);
+    self->current_vol_i16 =
+        (gint) ((gdouble) volume * (gdouble) VOLUME_UNITY_INT16);
+    self->current_vol_i24 =
+        (gint) ((gdouble) volume * (gdouble) VOLUME_UNITY_INT24);
+    self->current_vol_i32 =
+        (gint) ((gdouble) volume * (gdouble) VOLUME_UNITY_INT32);
 
     passthrough = (self->current_vol_i16 == VOLUME_UNITY_INT16);
   }
@@ -337,7 +341,7 @@
 static void
 gst_volume_init (GstVolume * self)
 {
-  self->mute = DEFAULT_PROP_MUTE;;
+  self->mute = DEFAULT_PROP_MUTE;
   self->volume = DEFAULT_PROP_VOLUME;
 
   self->tracklist = NULL;
diff --git a/gst/volume/gstvolumeorc-dist.c b/gst/volume/gstvolumeorc-dist.c
index d4ccde8..4b6ee6d 100644
--- a/gst/volume/gstvolumeorc-dist.c
+++ b/gst/volume/gstvolumeorc-dist.c
@@ -258,7 +258,7 @@
       static const orc_uint8 bc[] = {
         1, 9, 32, 118, 111, 108, 117, 109, 101, 95, 111, 114, 99, 95, 115, 99,
         97, 108, 97, 114, 109, 117, 108, 116, 105, 112, 108, 121, 95, 102, 54,
-            52,
+        52,
         95, 110, 115, 11, 8, 8, 18, 8, 214, 0, 0, 24, 2, 0,
       };
       p = orc_program_new_from_static_bytecode (bc);
@@ -388,7 +388,7 @@
       static const orc_uint8 bc[] = {
         1, 9, 32, 118, 111, 108, 117, 109, 101, 95, 111, 114, 99, 95, 115, 99,
         97, 108, 97, 114, 109, 117, 108, 116, 105, 112, 108, 121, 95, 102, 51,
-            50,
+        50,
         95, 110, 115, 11, 4, 4, 17, 4, 202, 0, 0, 24, 2, 0,
       };
       p = orc_program_new_from_static_bytecode (bc);
@@ -1142,7 +1142,7 @@
       static const orc_uint8 bc[] = {
         1, 9, 29, 118, 111, 108, 117, 109, 101, 95, 111, 114, 99, 95, 112, 114,
         111, 99, 101, 115, 115, 95, 105, 110, 116, 56, 95, 99, 108, 97, 109,
-            112,
+        112,
         11, 1, 1, 14, 2, 3, 0, 0, 0, 16, 1, 20, 2, 174, 32, 0,
         24, 94, 32, 32, 16, 159, 0, 32, 2, 0,
       };
@@ -1564,7 +1564,7 @@
       static const orc_uint8 bc[] = {
         1, 9, 37, 118, 111, 108, 117, 109, 101, 95, 111, 114, 99, 95, 112, 114,
         111, 99, 101, 115, 115, 95, 99, 111, 110, 116, 114, 111, 108, 108, 101,
-            100,
+        100,
         95, 102, 54, 52, 95, 49, 99, 104, 11, 8, 8, 12, 8, 8, 214, 0,
         0, 4, 2, 0,
       };
@@ -1714,7 +1714,7 @@
       static const orc_uint8 bc[] = {
         1, 9, 37, 118, 111, 108, 117, 109, 101, 95, 111, 114, 99, 95, 112, 114,
         111, 99, 101, 115, 115, 95, 99, 111, 110, 116, 114, 111, 108, 108, 101,
-            100,
+        100,
         95, 102, 51, 50, 95, 49, 99, 104, 11, 4, 4, 12, 8, 8, 20, 4,
         225, 32, 4, 202, 0, 0, 32, 2, 0,
       };
@@ -1901,7 +1901,7 @@
       static const orc_uint8 bc[] = {
         1, 9, 37, 118, 111, 108, 117, 109, 101, 95, 111, 114, 99, 95, 112, 114,
         111, 99, 101, 115, 115, 95, 99, 111, 110, 116, 114, 111, 108, 108, 101,
-            100,
+        100,
         95, 102, 51, 50, 95, 50, 99, 104, 11, 8, 8, 12, 8, 8, 20, 4,
         20, 8, 225, 32, 4, 194, 33, 32, 32, 21, 1, 202, 0, 0, 33, 2,
         0,
@@ -2064,7 +2064,7 @@
       static const orc_uint8 bc[] = {
         1, 9, 39, 118, 111, 108, 117, 109, 101, 95, 111, 114, 99, 95, 112, 114,
         111, 99, 101, 115, 115, 95, 99, 111, 110, 116, 114, 111, 108, 108, 101,
-            100,
+        100,
         95, 105, 110, 116, 51, 50, 95, 49, 99, 104, 11, 4, 4, 12, 8, 8,
         20, 8, 223, 32, 0, 214, 32, 32, 4, 222, 0, 32, 2, 0,
       };
@@ -2255,7 +2255,7 @@
       static const orc_uint8 bc[] = {
         1, 9, 39, 118, 111, 108, 117, 109, 101, 95, 111, 114, 99, 95, 112, 114,
         111, 99, 101, 115, 115, 95, 99, 111, 110, 116, 114, 111, 108, 108, 101,
-            100,
+        100,
         95, 105, 110, 116, 49, 54, 95, 49, 99, 104, 11, 2, 2, 12, 8, 8,
         20, 4, 20, 4, 153, 32, 0, 211, 32, 32, 225, 33, 4, 202, 32, 32,
         33, 210, 32, 32, 165, 0, 32, 2, 0,
@@ -2508,7 +2508,7 @@
       static const orc_uint8 bc[] = {
         1, 9, 39, 118, 111, 108, 117, 109, 101, 95, 111, 114, 99, 95, 112, 114,
         111, 99, 101, 115, 115, 95, 99, 111, 110, 116, 114, 111, 108, 108, 101,
-            100,
+        100,
         95, 105, 110, 116, 49, 54, 95, 50, 99, 104, 11, 4, 4, 12, 8, 8,
         20, 8, 20, 4, 20, 8, 21, 1, 153, 32, 0, 21, 1, 211, 32, 32,
         225, 33, 4, 194, 34, 33, 33, 21, 1, 202, 34, 34, 32, 21, 1, 210,
@@ -2723,7 +2723,7 @@
       static const orc_uint8 bc[] = {
         1, 9, 38, 118, 111, 108, 117, 109, 101, 95, 111, 114, 99, 95, 112, 114,
         111, 99, 101, 115, 115, 95, 99, 111, 110, 116, 114, 111, 108, 108, 101,
-            100,
+        100,
         95, 105, 110, 116, 56, 95, 49, 99, 104, 11, 1, 1, 12, 8, 8, 20,
         2, 20, 4, 20, 4, 149, 32, 0, 153, 33, 32, 211, 33, 33, 225, 34,
         4, 202, 33, 33, 34, 210, 33, 33, 163, 32, 33, 159, 0, 32, 2, 0,
@@ -2998,7 +2998,7 @@
       static const orc_uint8 bc[] = {
         1, 9, 38, 118, 111, 108, 117, 109, 101, 95, 111, 114, 99, 95, 112, 114,
         111, 99, 101, 115, 115, 95, 99, 111, 110, 116, 114, 111, 108, 108, 101,
-            100,
+        100,
         95, 105, 110, 116, 56, 95, 50, 99, 104, 11, 2, 2, 12, 8, 8, 20,
         4, 20, 8, 20, 8, 21, 1, 149, 32, 0, 21, 1, 153, 33, 32, 21,
         1, 211, 33, 33, 225, 32, 4, 194, 34, 32, 32, 21, 1, 202, 33, 33,
diff --git a/install-sh b/install-sh
index 377bb86..59990a1 100755
--- a/install-sh
+++ b/install-sh
@@ -1,7 +1,7 @@
 #!/bin/sh
 # install - install a program, script, or datafile
 
-scriptversion=2011-11-20.07; # UTC
+scriptversion=2014-09-12.12; # UTC
 
 # This originates from X11R5 (mit/util/scripts/install.sh), which was
 # later released in X11R6 (xc/config/util/install.sh) with the
@@ -41,19 +41,15 @@
 # This script is compatible with the BSD install script, but was written
 # from scratch.
 
+tab='	'
 nl='
 '
-IFS=" ""	$nl"
+IFS=" $tab$nl"
 
-# set DOITPROG to echo to test this script
+# Set DOITPROG to "echo" to test this script.
 
-# Don't use :- since 4.3BSD and earlier shells don't like it.
 doit=${DOITPROG-}
-if test -z "$doit"; then
-  doit_exec=exec
-else
-  doit_exec=$doit
-fi
+doit_exec=${doit:-exec}
 
 # Put in absolute file names if you don't have them in your path;
 # or use environment vars.
@@ -68,17 +64,6 @@
 rmprog=${RMPROG-rm}
 stripprog=${STRIPPROG-strip}
 
-posix_glob='?'
-initialize_posix_glob='
-  test "$posix_glob" != "?" || {
-    if (set -f) 2>/dev/null; then
-      posix_glob=
-    else
-      posix_glob=:
-    fi
-  }
-'
-
 posix_mkdir=
 
 # Desired mode of installed file.
@@ -97,7 +82,7 @@
 dst_arg=
 
 copy_on_change=false
-no_target_directory=
+is_target_a_directory=possibly
 
 usage="\
 Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE
@@ -137,46 +122,57 @@
     -d) dir_arg=true;;
 
     -g) chgrpcmd="$chgrpprog $2"
-	shift;;
+        shift;;
 
     --help) echo "$usage"; exit $?;;
 
     -m) mode=$2
-	case $mode in
-	  *' '* | *'	'* | *'
-'*	  | *'*'* | *'?'* | *'['*)
-	    echo "$0: invalid mode: $mode" >&2
-	    exit 1;;
-	esac
-	shift;;
+        case $mode in
+          *' '* | *"$tab"* | *"$nl"* | *'*'* | *'?'* | *'['*)
+            echo "$0: invalid mode: $mode" >&2
+            exit 1;;
+        esac
+        shift;;
 
     -o) chowncmd="$chownprog $2"
-	shift;;
+        shift;;
 
     -s) stripcmd=$stripprog;;
 
-    -t) dst_arg=$2
-	# Protect names problematic for 'test' and other utilities.
-	case $dst_arg in
-	  -* | [=\(\)!]) dst_arg=./$dst_arg;;
-	esac
-	shift;;
+    -t)
+        is_target_a_directory=always
+        dst_arg=$2
+        # Protect names problematic for 'test' and other utilities.
+        case $dst_arg in
+          -* | [=\(\)!]) dst_arg=./$dst_arg;;
+        esac
+        shift;;
 
-    -T) no_target_directory=true;;
+    -T) is_target_a_directory=never;;
 
     --version) echo "$0 $scriptversion"; exit $?;;
 
-    --)	shift
-	break;;
+    --) shift
+        break;;
 
-    -*)	echo "$0: invalid option: $1" >&2
-	exit 1;;
+    -*) echo "$0: invalid option: $1" >&2
+        exit 1;;
 
     *)  break;;
   esac
   shift
 done
 
+# We allow the use of options -d and -T together, by making -d
+# take the precedence; this is for compatibility with GNU install.
+
+if test -n "$dir_arg"; then
+  if test -n "$dst_arg"; then
+    echo "$0: target directory not allowed when installing a directory." >&2
+    exit 1
+  fi
+fi
+
 if test $# -ne 0 && test -z "$dir_arg$dst_arg"; then
   # When -d is used, all remaining arguments are directories to create.
   # When -t is used, the destination is already specified.
@@ -208,6 +204,15 @@
 fi
 
 if test -z "$dir_arg"; then
+  if test $# -gt 1 || test "$is_target_a_directory" = always; then
+    if test ! -d "$dst_arg"; then
+      echo "$0: $dst_arg: Is not a directory." >&2
+      exit 1
+    fi
+  fi
+fi
+
+if test -z "$dir_arg"; then
   do_exit='(exit $ret); exit $ret'
   trap "ret=129; $do_exit" 1
   trap "ret=130; $do_exit" 2
@@ -223,16 +228,16 @@
 
     *[0-7])
       if test -z "$stripcmd"; then
-	u_plus_rw=
+        u_plus_rw=
       else
-	u_plus_rw='% 200'
+        u_plus_rw='% 200'
       fi
       cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;;
     *)
       if test -z "$stripcmd"; then
-	u_plus_rw=
+        u_plus_rw=
       else
-	u_plus_rw=,u+rw
+        u_plus_rw=,u+rw
       fi
       cp_umask=$mode$u_plus_rw;;
   esac
@@ -269,41 +274,15 @@
     # If destination is a directory, append the input filename; won't work
     # if double slashes aren't ignored.
     if test -d "$dst"; then
-      if test -n "$no_target_directory"; then
-	echo "$0: $dst_arg: Is a directory" >&2
-	exit 1
+      if test "$is_target_a_directory" = never; then
+        echo "$0: $dst_arg: Is a directory" >&2
+        exit 1
       fi
       dstdir=$dst
       dst=$dstdir/`basename "$src"`
       dstdir_status=0
     else
-      # Prefer dirname, but fall back on a substitute if dirname fails.
-      dstdir=`
-	(dirname "$dst") 2>/dev/null ||
-	expr X"$dst" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
-	     X"$dst" : 'X\(//\)[^/]' \| \
-	     X"$dst" : 'X\(//\)$' \| \
-	     X"$dst" : 'X\(/\)' \| . 2>/dev/null ||
-	echo X"$dst" |
-	    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
-		   s//\1/
-		   q
-		 }
-		 /^X\(\/\/\)[^/].*/{
-		   s//\1/
-		   q
-		 }
-		 /^X\(\/\/\)$/{
-		   s//\1/
-		   q
-		 }
-		 /^X\(\/\).*/{
-		   s//\1/
-		   q
-		 }
-		 s/.*/./; q'
-      `
-
+      dstdir=`dirname "$dst"`
       test -d "$dstdir"
       dstdir_status=$?
     fi
@@ -314,74 +293,81 @@
   if test $dstdir_status != 0; then
     case $posix_mkdir in
       '')
-	# Create intermediate dirs using mode 755 as modified by the umask.
-	# This is like FreeBSD 'install' as of 1997-10-28.
-	umask=`umask`
-	case $stripcmd.$umask in
-	  # Optimize common cases.
-	  *[2367][2367]) mkdir_umask=$umask;;
-	  .*0[02][02] | .[02][02] | .[02]) mkdir_umask=22;;
+        # Create intermediate dirs using mode 755 as modified by the umask.
+        # This is like FreeBSD 'install' as of 1997-10-28.
+        umask=`umask`
+        case $stripcmd.$umask in
+          # Optimize common cases.
+          *[2367][2367]) mkdir_umask=$umask;;
+          .*0[02][02] | .[02][02] | .[02]) mkdir_umask=22;;
 
-	  *[0-7])
-	    mkdir_umask=`expr $umask + 22 \
-	      - $umask % 100 % 40 + $umask % 20 \
-	      - $umask % 10 % 4 + $umask % 2
-	    `;;
-	  *) mkdir_umask=$umask,go-w;;
-	esac
+          *[0-7])
+            mkdir_umask=`expr $umask + 22 \
+              - $umask % 100 % 40 + $umask % 20 \
+              - $umask % 10 % 4 + $umask % 2
+            `;;
+          *) mkdir_umask=$umask,go-w;;
+        esac
 
-	# With -d, create the new directory with the user-specified mode.
-	# Otherwise, rely on $mkdir_umask.
-	if test -n "$dir_arg"; then
-	  mkdir_mode=-m$mode
-	else
-	  mkdir_mode=
-	fi
+        # With -d, create the new directory with the user-specified mode.
+        # Otherwise, rely on $mkdir_umask.
+        if test -n "$dir_arg"; then
+          mkdir_mode=-m$mode
+        else
+          mkdir_mode=
+        fi
 
-	posix_mkdir=false
-	case $umask in
-	  *[123567][0-7][0-7])
-	    # POSIX mkdir -p sets u+wx bits regardless of umask, which
-	    # is incompatible with FreeBSD 'install' when (umask & 300) != 0.
-	    ;;
-	  *)
-	    tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$
-	    trap 'ret=$?; rmdir "$tmpdir/d" "$tmpdir" 2>/dev/null; exit $ret' 0
+        posix_mkdir=false
+        case $umask in
+          *[123567][0-7][0-7])
+            # POSIX mkdir -p sets u+wx bits regardless of umask, which
+            # is incompatible with FreeBSD 'install' when (umask & 300) != 0.
+            ;;
+          *)
+            # $RANDOM is not portable (e.g. dash);  use it when possible to
+            # lower collision chance
+            tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$
+            trap 'ret=$?; rmdir "$tmpdir/a/b" "$tmpdir/a" "$tmpdir" 2>/dev/null; exit $ret' 0
 
-	    if (umask $mkdir_umask &&
-		exec $mkdirprog $mkdir_mode -p -- "$tmpdir/d") >/dev/null 2>&1
-	    then
-	      if test -z "$dir_arg" || {
-		   # Check for POSIX incompatibilities with -m.
-		   # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or
-		   # other-writable bit of parent directory when it shouldn't.
-		   # FreeBSD 6.1 mkdir -m -p sets mode of existing directory.
-		   ls_ld_tmpdir=`ls -ld "$tmpdir"`
-		   case $ls_ld_tmpdir in
-		     d????-?r-*) different_mode=700;;
-		     d????-?--*) different_mode=755;;
-		     *) false;;
-		   esac &&
-		   $mkdirprog -m$different_mode -p -- "$tmpdir" && {
-		     ls_ld_tmpdir_1=`ls -ld "$tmpdir"`
-		     test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1"
-		   }
-		 }
-	      then posix_mkdir=:
-	      fi
-	      rmdir "$tmpdir/d" "$tmpdir"
-	    else
-	      # Remove any dirs left behind by ancient mkdir implementations.
-	      rmdir ./$mkdir_mode ./-p ./-- 2>/dev/null
-	    fi
-	    trap '' 0;;
-	esac;;
+            # As "mkdir -p" follows symlinks and we work in /tmp possibly;  so
+            # create the $tmpdir first (and fail if unsuccessful) to make sure
+            # that nobody tries to guess the $tmpdir name.
+            if (umask $mkdir_umask &&
+                $mkdirprog $mkdir_mode "$tmpdir" &&
+                exec $mkdirprog $mkdir_mode -p -- "$tmpdir/a/b") >/dev/null 2>&1
+            then
+              if test -z "$dir_arg" || {
+                   # Check for POSIX incompatibilities with -m.
+                   # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or
+                   # other-writable bit of parent directory when it shouldn't.
+                   # FreeBSD 6.1 mkdir -m -p sets mode of existing directory.
+                   test_tmpdir="$tmpdir/a"
+                   ls_ld_tmpdir=`ls -ld "$test_tmpdir"`
+                   case $ls_ld_tmpdir in
+                     d????-?r-*) different_mode=700;;
+                     d????-?--*) different_mode=755;;
+                     *) false;;
+                   esac &&
+                   $mkdirprog -m$different_mode -p -- "$test_tmpdir" && {
+                     ls_ld_tmpdir_1=`ls -ld "$test_tmpdir"`
+                     test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1"
+                   }
+                 }
+              then posix_mkdir=:
+              fi
+              rmdir "$tmpdir/a/b" "$tmpdir/a" "$tmpdir"
+            else
+              # Remove any dirs left behind by ancient mkdir implementations.
+              rmdir ./$mkdir_mode ./-p ./-- "$tmpdir" 2>/dev/null
+            fi
+            trap '' 0;;
+        esac;;
     esac
 
     if
       $posix_mkdir && (
-	umask $mkdir_umask &&
-	$doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir"
+        umask $mkdir_umask &&
+        $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir"
       )
     then :
     else
@@ -391,53 +377,51 @@
       # directory the slow way, step by step, checking for races as we go.
 
       case $dstdir in
-	/*) prefix='/';;
-	[-=\(\)!]*) prefix='./';;
-	*)  prefix='';;
+        /*) prefix='/';;
+        [-=\(\)!]*) prefix='./';;
+        *)  prefix='';;
       esac
 
-      eval "$initialize_posix_glob"
-
       oIFS=$IFS
       IFS=/
-      $posix_glob set -f
+      set -f
       set fnord $dstdir
       shift
-      $posix_glob set +f
+      set +f
       IFS=$oIFS
 
       prefixes=
 
       for d
       do
-	test X"$d" = X && continue
+        test X"$d" = X && continue
 
-	prefix=$prefix$d
-	if test -d "$prefix"; then
-	  prefixes=
-	else
-	  if $posix_mkdir; then
-	    (umask=$mkdir_umask &&
-	     $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break
-	    # Don't fail if two instances are running concurrently.
-	    test -d "$prefix" || exit 1
-	  else
-	    case $prefix in
-	      *\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;;
-	      *) qprefix=$prefix;;
-	    esac
-	    prefixes="$prefixes '$qprefix'"
-	  fi
-	fi
-	prefix=$prefix/
+        prefix=$prefix$d
+        if test -d "$prefix"; then
+          prefixes=
+        else
+          if $posix_mkdir; then
+            (umask=$mkdir_umask &&
+             $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break
+            # Don't fail if two instances are running concurrently.
+            test -d "$prefix" || exit 1
+          else
+            case $prefix in
+              *\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;;
+              *) qprefix=$prefix;;
+            esac
+            prefixes="$prefixes '$qprefix'"
+          fi
+        fi
+        prefix=$prefix/
       done
 
       if test -n "$prefixes"; then
-	# Don't fail if two instances are running concurrently.
-	(umask $mkdir_umask &&
-	 eval "\$doit_exec \$mkdirprog $prefixes") ||
-	  test -d "$dstdir" || exit 1
-	obsolete_mkdir_used=true
+        # Don't fail if two instances are running concurrently.
+        (umask $mkdir_umask &&
+         eval "\$doit_exec \$mkdirprog $prefixes") ||
+          test -d "$dstdir" || exit 1
+        obsolete_mkdir_used=true
       fi
     fi
   fi
@@ -472,15 +456,12 @@
 
     # If -C, don't bother to copy if it wouldn't change the file.
     if $copy_on_change &&
-       old=`LC_ALL=C ls -dlL "$dst"	2>/dev/null` &&
-       new=`LC_ALL=C ls -dlL "$dsttmp"	2>/dev/null` &&
-
-       eval "$initialize_posix_glob" &&
-       $posix_glob set -f &&
+       old=`LC_ALL=C ls -dlL "$dst"     2>/dev/null` &&
+       new=`LC_ALL=C ls -dlL "$dsttmp"  2>/dev/null` &&
+       set -f &&
        set X $old && old=:$2:$4:$5:$6 &&
        set X $new && new=:$2:$4:$5:$6 &&
-       $posix_glob set +f &&
-
+       set +f &&
        test "$old" = "$new" &&
        $cmpprog "$dst" "$dsttmp" >/dev/null 2>&1
     then
@@ -493,24 +474,24 @@
       # to itself, or perhaps because mv is so ancient that it does not
       # support -f.
       {
-	# Now remove or move aside any old file at destination location.
-	# We try this two ways since rm can't unlink itself on some
-	# systems and the destination file might be busy for other
-	# reasons.  In this case, the final cleanup might fail but the new
-	# file should still install successfully.
-	{
-	  test ! -f "$dst" ||
-	  $doit $rmcmd -f "$dst" 2>/dev/null ||
-	  { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null &&
-	    { $doit $rmcmd -f "$rmtmp" 2>/dev/null; :; }
-	  } ||
-	  { echo "$0: cannot unlink or rename $dst" >&2
-	    (exit 1); exit 1
-	  }
-	} &&
+        # Now remove or move aside any old file at destination location.
+        # We try this two ways since rm can't unlink itself on some
+        # systems and the destination file might be busy for other
+        # reasons.  In this case, the final cleanup might fail but the new
+        # file should still install successfully.
+        {
+          test ! -f "$dst" ||
+          $doit $rmcmd -f "$dst" 2>/dev/null ||
+          { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null &&
+            { $doit $rmcmd -f "$rmtmp" 2>/dev/null; :; }
+          } ||
+          { echo "$0: cannot unlink or rename $dst" >&2
+            (exit 1); exit 1
+          }
+        } &&
 
-	# Now rename the file to the real destination.
-	$doit $mvcmd "$dsttmp" "$dst"
+        # Now rename the file to the real destination.
+        $doit $mvcmd "$dsttmp" "$dst"
       }
     fi || exit 1
 
diff --git a/m4/Makefile.in b/m4/Makefile.in
index 633477e..f955731 100644
--- a/m4/Makefile.in
+++ b/m4/Makefile.in
@@ -1,7 +1,7 @@
-# Makefile.in generated by automake 1.14.1 from Makefile.am.
+# Makefile.in generated by automake 1.15 from Makefile.am.
 # @configure_input@
 
-# Copyright (C) 1994-2013 Free Software Foundation, Inc.
+# 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,
@@ -14,7 +14,17 @@
 
 @SET_MAKE@
 VPATH = @srcdir@
-am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)'
+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 \
       ?) ;; \
@@ -79,7 +89,6 @@
 host_triplet = @host@
 target_triplet = @target@
 subdir = m4
-DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am README
 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 \
@@ -100,7 +109,6 @@
 	$(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-x11.m4 \
 	$(top_srcdir)/common/m4/gst.m4 \
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
@@ -117,6 +125,7 @@
 	$(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
 mkinstalldirs = $(install_sh) -d
 CONFIG_HEADER = $(top_builddir)/config.h
 CONFIG_CLEAN_FILES =
@@ -141,6 +150,7 @@
     *) (install-info --version) >/dev/null 2>&1;; \
   esac
 am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+am__DIST_COMMON = $(srcdir)/Makefile.in README
 DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
 ACLOCAL = @ACLOCAL@
 ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@
@@ -201,6 +211,8 @@
 GIO_CFLAGS = @GIO_CFLAGS@
 GIO_LDFLAGS = @GIO_LDFLAGS@
 GIO_LIBS = @GIO_LIBS@
+GIO_UNIX_2_0_CFLAGS = @GIO_UNIX_2_0_CFLAGS@
+GIO_UNIX_2_0_LIBS = @GIO_UNIX_2_0_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
@@ -230,6 +242,8 @@
 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_OPTION_CFLAGS = @GST_OPTION_CFLAGS@
 GST_OPTION_CXXFLAGS = @GST_OPTION_CXXFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
@@ -257,7 +271,6 @@
 GTK_X11_CFLAGS = @GTK_X11_CFLAGS@
 GTK_X11_LIBS = @GTK_X11_LIBS@
 HAVE_CDPARANOIA = @HAVE_CDPARANOIA@
-HAVE_X = @HAVE_X@
 HAVE_XSHM = @HAVE_XSHM@
 HAVE_ZLIB = @HAVE_ZLIB@
 HTML_DIR = @HTML_DIR@
@@ -272,6 +285,7 @@
 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@
@@ -361,13 +375,12 @@
 XGETTEXT = @XGETTEXT@
 XGETTEXT_015 = @XGETTEXT_015@
 XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
-XMKMF = @XMKMF@
+XSHM_CFLAGS = @XSHM_CFLAGS@
 XSHM_LIBS = @XSHM_LIBS@
+XVIDEO_CFLAGS = @XVIDEO_CFLAGS@
 XVIDEO_LIBS = @XVIDEO_LIBS@
 X_CFLAGS = @X_CFLAGS@
-X_EXTRA_LIBS = @X_EXTRA_LIBS@
 X_LIBS = @X_LIBS@
-X_PRE_LIBS = @X_PRE_LIBS@
 ZLIB_CFLAGS = @ZLIB_CFLAGS@
 ZLIB_LIBS = @ZLIB_LIBS@
 abs_builddir = @abs_builddir@
@@ -420,6 +433,7 @@
 psdir = @psdir@
 pyexecdir = @pyexecdir@
 pythondir = @pythondir@
+runstatedir = @runstatedir@
 sbindir = @sbindir@
 sharedstatedir = @sharedstatedir@
 srcdir = @srcdir@
@@ -471,7 +485,6 @@
 	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu m4/Makefile'; \
 	$(am__cd) $(top_srcdir) && \
 	  $(AUTOMAKE) --gnu m4/Makefile
-.PRECIOUS: Makefile
 Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
 	@case '$?' in \
 	  *config.status*) \
@@ -646,6 +659,8 @@
 	mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
 	tags-am uninstall uninstall-am
 
+.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.
diff --git a/missing b/missing
index db98974..f62bbae 100755
--- a/missing
+++ b/missing
@@ -3,7 +3,7 @@
 
 scriptversion=2013-10-28.13; # UTC
 
-# Copyright (C) 1996-2013 Free Software Foundation, Inc.
+# Copyright (C) 1996-2014 Free Software Foundation, Inc.
 # Originally written by Fran,cois Pinard <pinard@iro.umontreal.ca>, 1996.
 
 # This program is free software; you can redistribute it and/or modify
diff --git a/pkgconfig/Makefile.in b/pkgconfig/Makefile.in
index d007392..4930dd7 100644
--- a/pkgconfig/Makefile.in
+++ b/pkgconfig/Makefile.in
@@ -1,7 +1,7 @@
-# Makefile.in generated by automake 1.14.1 from Makefile.am.
+# Makefile.in generated by automake 1.15 from Makefile.am.
 # @configure_input@
 
-# Copyright (C) 1994-2013 Free Software Foundation, Inc.
+# 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,
@@ -15,7 +15,17 @@
 @SET_MAKE@
 
 VPATH = @srcdir@
-am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)'
+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 \
       ?) ;; \
@@ -80,31 +90,6 @@
 host_triplet = @host@
 target_triplet = @target@
 subdir = pkgconfig
-DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \
-	$(srcdir)/gstreamer-allocators.pc.in \
-	$(srcdir)/gstreamer-allocators-uninstalled.pc.in \
-	$(srcdir)/gstreamer-audio.pc.in \
-	$(srcdir)/gstreamer-audio-uninstalled.pc.in \
-	$(srcdir)/gstreamer-app.pc.in \
-	$(srcdir)/gstreamer-app-uninstalled.pc.in \
-	$(srcdir)/gstreamer-fft.pc.in \
-	$(srcdir)/gstreamer-fft-uninstalled.pc.in \
-	$(srcdir)/gstreamer-pbutils.pc.in \
-	$(srcdir)/gstreamer-pbutils-uninstalled.pc.in \
-	$(srcdir)/gstreamer-riff.pc.in \
-	$(srcdir)/gstreamer-riff-uninstalled.pc.in \
-	$(srcdir)/gstreamer-rtp.pc.in \
-	$(srcdir)/gstreamer-rtp-uninstalled.pc.in \
-	$(srcdir)/gstreamer-rtsp.pc.in \
-	$(srcdir)/gstreamer-rtsp-uninstalled.pc.in \
-	$(srcdir)/gstreamer-sdp.pc.in \
-	$(srcdir)/gstreamer-sdp-uninstalled.pc.in \
-	$(srcdir)/gstreamer-tag.pc.in \
-	$(srcdir)/gstreamer-tag-uninstalled.pc.in \
-	$(srcdir)/gstreamer-video.pc.in \
-	$(srcdir)/gstreamer-video-uninstalled.pc.in \
-	$(srcdir)/gstreamer-plugins-base.pc.in \
-	$(srcdir)/gstreamer-plugins-base-uninstalled.pc.in
 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 \
@@ -125,7 +110,6 @@
 	$(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-x11.m4 \
 	$(top_srcdir)/common/m4/gst.m4 \
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
@@ -142,6 +126,7 @@
 	$(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
 mkinstalldirs = $(install_sh) -d
 CONFIG_HEADER = $(top_builddir)/config.h
 CONFIG_CLEAN_FILES = gstreamer-allocators.pc \
@@ -207,6 +192,31 @@
 am__installdirs = "$(DESTDIR)$(pkgconfigdir)"
 DATA = $(pkgconfig_DATA)
 am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+am__DIST_COMMON = $(srcdir)/Makefile.in \
+	$(srcdir)/gstreamer-allocators-uninstalled.pc.in \
+	$(srcdir)/gstreamer-allocators.pc.in \
+	$(srcdir)/gstreamer-app-uninstalled.pc.in \
+	$(srcdir)/gstreamer-app.pc.in \
+	$(srcdir)/gstreamer-audio-uninstalled.pc.in \
+	$(srcdir)/gstreamer-audio.pc.in \
+	$(srcdir)/gstreamer-fft-uninstalled.pc.in \
+	$(srcdir)/gstreamer-fft.pc.in \
+	$(srcdir)/gstreamer-pbutils-uninstalled.pc.in \
+	$(srcdir)/gstreamer-pbutils.pc.in \
+	$(srcdir)/gstreamer-plugins-base-uninstalled.pc.in \
+	$(srcdir)/gstreamer-plugins-base.pc.in \
+	$(srcdir)/gstreamer-riff-uninstalled.pc.in \
+	$(srcdir)/gstreamer-riff.pc.in \
+	$(srcdir)/gstreamer-rtp-uninstalled.pc.in \
+	$(srcdir)/gstreamer-rtp.pc.in \
+	$(srcdir)/gstreamer-rtsp-uninstalled.pc.in \
+	$(srcdir)/gstreamer-rtsp.pc.in \
+	$(srcdir)/gstreamer-sdp-uninstalled.pc.in \
+	$(srcdir)/gstreamer-sdp.pc.in \
+	$(srcdir)/gstreamer-tag-uninstalled.pc.in \
+	$(srcdir)/gstreamer-tag.pc.in \
+	$(srcdir)/gstreamer-video-uninstalled.pc.in \
+	$(srcdir)/gstreamer-video.pc.in
 DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
 ACLOCAL = @ACLOCAL@
 ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@
@@ -267,6 +277,8 @@
 GIO_CFLAGS = @GIO_CFLAGS@
 GIO_LDFLAGS = @GIO_LDFLAGS@
 GIO_LIBS = @GIO_LIBS@
+GIO_UNIX_2_0_CFLAGS = @GIO_UNIX_2_0_CFLAGS@
+GIO_UNIX_2_0_LIBS = @GIO_UNIX_2_0_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
@@ -296,6 +308,8 @@
 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_OPTION_CFLAGS = @GST_OPTION_CFLAGS@
 GST_OPTION_CXXFLAGS = @GST_OPTION_CXXFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
@@ -323,7 +337,6 @@
 GTK_X11_CFLAGS = @GTK_X11_CFLAGS@
 GTK_X11_LIBS = @GTK_X11_LIBS@
 HAVE_CDPARANOIA = @HAVE_CDPARANOIA@
-HAVE_X = @HAVE_X@
 HAVE_XSHM = @HAVE_XSHM@
 HAVE_ZLIB = @HAVE_ZLIB@
 HTML_DIR = @HTML_DIR@
@@ -338,6 +351,7 @@
 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@
@@ -427,13 +441,12 @@
 XGETTEXT = @XGETTEXT@
 XGETTEXT_015 = @XGETTEXT_015@
 XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
-XMKMF = @XMKMF@
+XSHM_CFLAGS = @XSHM_CFLAGS@
 XSHM_LIBS = @XSHM_LIBS@
+XVIDEO_CFLAGS = @XVIDEO_CFLAGS@
 XVIDEO_LIBS = @XVIDEO_LIBS@
 X_CFLAGS = @X_CFLAGS@
-X_EXTRA_LIBS = @X_EXTRA_LIBS@
 X_LIBS = @X_LIBS@
-X_PRE_LIBS = @X_PRE_LIBS@
 ZLIB_CFLAGS = @ZLIB_CFLAGS@
 ZLIB_LIBS = @ZLIB_LIBS@
 abs_builddir = @abs_builddir@
@@ -486,6 +499,7 @@
 psdir = @psdir@
 pyexecdir = @pyexecdir@
 pythondir = @pythondir@
+runstatedir = @runstatedir@
 sbindir = @sbindir@
 sharedstatedir = @sharedstatedir@
 srcdir = @srcdir@
@@ -565,7 +579,6 @@
 	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu pkgconfig/Makefile'; \
 	$(am__cd) $(top_srcdir) && \
 	  $(AUTOMAKE) --gnu pkgconfig/Makefile
-.PRECIOUS: Makefile
 Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
 	@case '$?' in \
 	  *config.status*) \
@@ -815,6 +828,8 @@
 	mostlyclean-libtool pdf pdf-am ps ps-am tags-am uninstall \
 	uninstall-am uninstall-pkgconfigDATA
 
+.PRECIOUS: Makefile
+
 
 all-local: $(pcverfiles) $(pcverfiles_uninstalled)
 
diff --git a/po/af.gmo b/po/af.gmo
index 9c12f19..b1a0110 100644
--- a/po/af.gmo
+++ b/po/af.gmo
Binary files differ
diff --git a/po/af.po b/po/af.po
index a874888..87167fe 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: 2014-12-18 12:05+0100\n"
+"POT-Creation-Date: 2015-09-18 19:09+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"
@@ -83,10 +83,6 @@
 msgid "Missing element '%s' - check your GStreamer installation."
 msgstr ""
 
-#, c-format
-msgid "A %s plugin is required to play this stream, but not installed."
-msgstr ""
-
 #, fuzzy
 msgid "Could not determine type of stream"
 msgstr "Kon nie skryf na lêer \"%s\" nie."
@@ -520,12 +516,96 @@
 "added/removed."
 msgstr ""
 
+#, fuzzy, c-format
+msgid "Volume: %.0f%%"
+msgstr "Volume"
+
 msgid "Buffering..."
 msgstr ""
 
 msgid "Clock lost, selecting a new one\n"
 msgstr ""
 
+msgid "Reached end of play list."
+msgstr ""
+
+msgid "Paused"
+msgstr ""
+
+#, c-format
+msgid "Now playing %s\n"
+msgstr ""
+
+#, c-format
+msgid "About to finish, preparing next title: %s"
+msgstr ""
+
+#, c-format
+msgid "Playback rate: %.2f"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "Could not change playback rate to %.2f"
+msgstr "Kon nie CD-toestel oopmaak om te lees nie."
+
+msgid "space"
+msgstr ""
+
+msgid "pause/unpause"
+msgstr ""
+
+msgid "q or ESC"
+msgstr ""
+
+msgid "quit"
+msgstr ""
+
+msgid "play next"
+msgstr ""
+
+msgid "play previous"
+msgstr ""
+
+msgid "seek forward"
+msgstr ""
+
+msgid "seek backward"
+msgstr ""
+
+#, fuzzy
+msgid "volume up"
+msgstr "Volume"
+
+msgid "volume down"
+msgstr ""
+
+msgid "increase playback rate"
+msgstr ""
+
+msgid "decrease playback rate"
+msgstr ""
+
+msgid "change playback direction"
+msgstr ""
+
+msgid "enable/disable trick modes"
+msgstr ""
+
+msgid "change audio track"
+msgstr ""
+
+msgid "change video track"
+msgstr ""
+
+msgid "change subtitle track"
+msgstr ""
+
+msgid "show keyboard shortcuts"
+msgstr ""
+
+msgid "Interactive mode - keyboard controls:"
+msgstr ""
+
 msgid "Video sink to use (default is autovideosink)"
 msgstr ""
 
@@ -538,7 +618,7 @@
 msgid "Shuffle playlist"
 msgstr ""
 
-msgid "Interactive control via keyboard"
+msgid "Disable interactive control via the keyboard"
 msgstr ""
 
 msgid "Volume"
@@ -547,6 +627,9 @@
 msgid "Playlist file containing input media files"
 msgstr ""
 
+msgid "Do not print any output (apart from errors)"
+msgstr ""
+
 #, c-format
 msgid "Usage: %s FILE1|URI1 [FILE2|URI2] [FILE3|URI3] ..."
 msgstr ""
@@ -554,6 +637,9 @@
 msgid "You must provide at least one filename or URI to play."
 msgstr ""
 
+msgid "Press 'k' to see a list of keyboard shortcuts.\n"
+msgstr ""
+
 #~ msgid "Bass"
 #~ msgstr "Bas"
 
diff --git a/po/az.gmo b/po/az.gmo
index f36933d..df5d8e7 100644
--- a/po/az.gmo
+++ b/po/az.gmo
Binary files differ
diff --git a/po/az.po b/po/az.po
index 023a9b5..acab6b7 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: 2014-12-18 12:05+0100\n"
+"POT-Creation-Date: 2015-09-18 19:09+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"
@@ -84,10 +84,6 @@
 msgid "Missing element '%s' - check your GStreamer installation."
 msgstr ""
 
-#, c-format
-msgid "A %s plugin is required to play this stream, but not installed."
-msgstr ""
-
 #, fuzzy
 msgid "Could not determine type of stream"
 msgstr "\"%s\" faylına yazıla bilmədi."
@@ -521,12 +517,96 @@
 "added/removed."
 msgstr ""
 
+#, fuzzy, c-format
+msgid "Volume: %.0f%%"
+msgstr "Səs"
+
 msgid "Buffering..."
 msgstr ""
 
 msgid "Clock lost, selecting a new one\n"
 msgstr ""
 
+msgid "Reached end of play list."
+msgstr ""
+
+msgid "Paused"
+msgstr ""
+
+#, c-format
+msgid "Now playing %s\n"
+msgstr ""
+
+#, c-format
+msgid "About to finish, preparing next title: %s"
+msgstr ""
+
+#, c-format
+msgid "Playback rate: %.2f"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "Could not change playback rate to %.2f"
+msgstr "CD avadanlığı oxuma üçün açıla bilmədi."
+
+msgid "space"
+msgstr ""
+
+msgid "pause/unpause"
+msgstr ""
+
+msgid "q or ESC"
+msgstr ""
+
+msgid "quit"
+msgstr ""
+
+msgid "play next"
+msgstr ""
+
+msgid "play previous"
+msgstr ""
+
+msgid "seek forward"
+msgstr ""
+
+msgid "seek backward"
+msgstr ""
+
+#, fuzzy
+msgid "volume up"
+msgstr "Səs"
+
+msgid "volume down"
+msgstr ""
+
+msgid "increase playback rate"
+msgstr ""
+
+msgid "decrease playback rate"
+msgstr ""
+
+msgid "change playback direction"
+msgstr ""
+
+msgid "enable/disable trick modes"
+msgstr ""
+
+msgid "change audio track"
+msgstr ""
+
+msgid "change video track"
+msgstr ""
+
+msgid "change subtitle track"
+msgstr ""
+
+msgid "show keyboard shortcuts"
+msgstr ""
+
+msgid "Interactive mode - keyboard controls:"
+msgstr ""
+
 msgid "Video sink to use (default is autovideosink)"
 msgstr ""
 
@@ -539,7 +619,7 @@
 msgid "Shuffle playlist"
 msgstr ""
 
-msgid "Interactive control via keyboard"
+msgid "Disable interactive control via the keyboard"
 msgstr ""
 
 msgid "Volume"
@@ -548,6 +628,9 @@
 msgid "Playlist file containing input media files"
 msgstr ""
 
+msgid "Do not print any output (apart from errors)"
+msgstr ""
+
 #, c-format
 msgid "Usage: %s FILE1|URI1 [FILE2|URI2] [FILE3|URI3] ..."
 msgstr ""
@@ -555,6 +638,9 @@
 msgid "You must provide at least one filename or URI to play."
 msgstr ""
 
+msgid "Press 'k' to see a list of keyboard shortcuts.\n"
+msgstr ""
+
 #~ msgid "Bass"
 #~ msgstr "Bas"
 
diff --git a/po/bg.gmo b/po/bg.gmo
index 9b4a4bd..d09c497 100644
--- a/po/bg.gmo
+++ b/po/bg.gmo
Binary files differ
diff --git a/po/bg.po b/po/bg.po
index 8193459..b733912 100644
--- a/po/bg.po
+++ b/po/bg.po
@@ -8,7 +8,7 @@
 msgstr ""
 "Project-Id-Version: gst-plugins-base 0.10.32.2\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2014-12-18 12:05+0100\n"
+"POT-Creation-Date: 2015-09-18 19:09+0200\n"
 "PO-Revision-Date: 2011-04-26 22:31+0300\n"
 "Last-Translator: Alexander Shopov <ash@kambanaria.org>\n"
 "Language-Team: Bulgarian <dict@fsa-bg.org>\n"
@@ -80,12 +80,6 @@
 msgid "Missing element '%s' - check your GStreamer installation."
 msgstr "Елементът „%s“ липсва — проверете инсталацията на GStreamer."
 
-#, c-format
-msgid "A %s plugin is required to play this stream, but not installed."
-msgstr ""
-"За да пуснете този поток, се нуждаете от приставка за %s. Такава не е "
-"инсталирана."
-
 msgid "Could not determine type of stream"
 msgstr "Видът на потока не може да бъде определен"
 
@@ -524,12 +518,97 @@
 "added/removed."
 msgstr ""
 
+#, c-format
+msgid "Volume: %.0f%%"
+msgstr ""
+
 msgid "Buffering..."
 msgstr ""
 
 msgid "Clock lost, selecting a new one\n"
 msgstr ""
 
+msgid "Reached end of play list."
+msgstr ""
+
+msgid "Paused"
+msgstr ""
+
+#, c-format
+msgid "Now playing %s\n"
+msgstr ""
+
+#, c-format
+msgid "About to finish, preparing next title: %s"
+msgstr ""
+
+#, c-format
+msgid "Playback rate: %.2f"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "Could not change playback rate to %.2f"
+msgstr "Устройството не може да се отвори за изпълнение в стерео режим."
+
+msgid "space"
+msgstr ""
+
+msgid "pause/unpause"
+msgstr ""
+
+msgid "q or ESC"
+msgstr ""
+
+msgid "quit"
+msgstr ""
+
+msgid "play next"
+msgstr ""
+
+msgid "play previous"
+msgstr ""
+
+msgid "seek forward"
+msgstr ""
+
+msgid "seek backward"
+msgstr ""
+
+msgid "volume up"
+msgstr ""
+
+msgid "volume down"
+msgstr ""
+
+msgid "increase playback rate"
+msgstr ""
+
+msgid "decrease playback rate"
+msgstr ""
+
+msgid "change playback direction"
+msgstr ""
+
+msgid "enable/disable trick modes"
+msgstr ""
+
+#, fuzzy
+msgid "change audio track"
+msgstr "В това CD липсва аудио"
+
+msgid "change video track"
+msgstr ""
+
+#, fuzzy
+msgid "change subtitle track"
+msgstr "Субтитри, формат Kate"
+
+msgid "show keyboard shortcuts"
+msgstr ""
+
+msgid "Interactive mode - keyboard controls:"
+msgstr ""
+
 msgid "Video sink to use (default is autovideosink)"
 msgstr ""
 
@@ -542,7 +621,7 @@
 msgid "Shuffle playlist"
 msgstr ""
 
-msgid "Interactive control via keyboard"
+msgid "Disable interactive control via the keyboard"
 msgstr ""
 
 msgid "Volume"
@@ -551,6 +630,9 @@
 msgid "Playlist file containing input media files"
 msgstr ""
 
+msgid "Do not print any output (apart from errors)"
+msgstr ""
+
 #, c-format
 msgid "Usage: %s FILE1|URI1 [FILE2|URI2] [FILE3|URI3] ..."
 msgstr ""
@@ -558,6 +640,14 @@
 msgid "You must provide at least one filename or URI to play."
 msgstr ""
 
+msgid "Press 'k' to see a list of keyboard shortcuts.\n"
+msgstr ""
+
+#~ msgid "A %s plugin is required to play this stream, but not installed."
+#~ msgstr ""
+#~ "За да пуснете този поток, се нуждаете от приставка за %s. Такава не е "
+#~ "инсталирана."
+
 #, fuzzy
 #~ msgid "Uncompressed %s YUV %s"
 #~ msgstr "Некомпресирано видео YUV"
diff --git a/po/ca.gmo b/po/ca.gmo
index 0820b49..c6499ea 100644
--- a/po/ca.gmo
+++ b/po/ca.gmo
Binary files differ
diff --git a/po/ca.po b/po/ca.po
index 2d04fc6..84460df 100644
--- a/po/ca.po
+++ b/po/ca.po
@@ -9,7 +9,7 @@
 msgstr ""
 "Project-Id-Version: gst-plugins-base 0.10.32.2\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2014-12-18 12:05+0100\n"
+"POT-Creation-Date: 2015-09-18 19:09+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"
@@ -85,12 +85,6 @@
 msgid "Missing element '%s' - check your GStreamer installation."
 msgstr "Manca l'element «%s» - comproveu la vostra instaŀlació del GStreamer."
 
-#, c-format
-msgid "A %s plugin is required to play this stream, but not installed."
-msgstr ""
-"Es requereix un connector %s per a reproduir aquest flux, però no és "
-"instaŀlat."
-
 msgid "Could not determine type of stream"
 msgstr "No s'ha pogut determinar el tipus de flux"
 
@@ -536,12 +530,98 @@
 "added/removed."
 msgstr ""
 
+#, c-format
+msgid "Volume: %.0f%%"
+msgstr ""
+
 msgid "Buffering..."
 msgstr ""
 
 msgid "Clock lost, selecting a new one\n"
 msgstr ""
 
+msgid "Reached end of play list."
+msgstr ""
+
+msgid "Paused"
+msgstr ""
+
+#, c-format
+msgid "Now playing %s\n"
+msgstr ""
+
+#, c-format
+msgid "About to finish, preparing next title: %s"
+msgstr ""
+
+#, c-format
+msgid "Playback rate: %.2f"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "Could not change playback rate to %.2f"
+msgstr ""
+"No s'ha pogut obrir el dispositiu per a la reproducció en mode estèreo."
+
+msgid "space"
+msgstr ""
+
+msgid "pause/unpause"
+msgstr ""
+
+msgid "q or ESC"
+msgstr ""
+
+msgid "quit"
+msgstr ""
+
+msgid "play next"
+msgstr ""
+
+msgid "play previous"
+msgstr ""
+
+msgid "seek forward"
+msgstr ""
+
+msgid "seek backward"
+msgstr ""
+
+msgid "volume up"
+msgstr ""
+
+msgid "volume down"
+msgstr ""
+
+msgid "increase playback rate"
+msgstr ""
+
+msgid "decrease playback rate"
+msgstr ""
+
+msgid "change playback direction"
+msgstr ""
+
+msgid "enable/disable trick modes"
+msgstr ""
+
+#, fuzzy
+msgid "change audio track"
+msgstr "Aquest CD no té pistes d'àudio"
+
+msgid "change video track"
+msgstr ""
+
+#, fuzzy
+msgid "change subtitle track"
+msgstr "Format de subtítols Kate"
+
+msgid "show keyboard shortcuts"
+msgstr ""
+
+msgid "Interactive mode - keyboard controls:"
+msgstr ""
+
 msgid "Video sink to use (default is autovideosink)"
 msgstr ""
 
@@ -554,7 +634,7 @@
 msgid "Shuffle playlist"
 msgstr ""
 
-msgid "Interactive control via keyboard"
+msgid "Disable interactive control via the keyboard"
 msgstr ""
 
 msgid "Volume"
@@ -563,6 +643,9 @@
 msgid "Playlist file containing input media files"
 msgstr ""
 
+msgid "Do not print any output (apart from errors)"
+msgstr ""
+
 #, c-format
 msgid "Usage: %s FILE1|URI1 [FILE2|URI2] [FILE3|URI3] ..."
 msgstr ""
@@ -570,6 +653,14 @@
 msgid "You must provide at least one filename or URI to play."
 msgstr ""
 
+msgid "Press 'k' to see a list of keyboard shortcuts.\n"
+msgstr ""
+
+#~ msgid "A %s plugin is required to play this stream, but not installed."
+#~ msgstr ""
+#~ "Es requereix un connector %s per a reproduir aquest flux, però no és "
+#~ "instaŀlat."
+
 #, fuzzy
 #~ msgid "Uncompressed %s YUV %s"
 #~ msgstr "YUV sense comprimir"
diff --git a/po/cs.gmo b/po/cs.gmo
index 3f5a1a8..30dc417 100644
--- a/po/cs.gmo
+++ b/po/cs.gmo
Binary files differ
diff --git a/po/cs.po b/po/cs.po
index 3c69b17..1df7378 100644
--- a/po/cs.po
+++ b/po/cs.po
@@ -4,14 +4,14 @@
 #
 # Miloslav Trmac <mitr@volny.cz>, 2004.
 # Petr Kovar <pknbe@volny.cz>, 2007, 2008, 2009, 2010, 2011.
-# Marek Černocký <marek@manet.cz>, 2013, 2014.
+# Marek Černocký <marek@manet.cz>, 2013, 2014, 2015.
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: gst-plugins-base-1.2.1\n"
+"Project-Id-Version: gst-plugins-base-1.5.2\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2014-12-18 12:05+0100\n"
-"PO-Revision-Date: 2014-03-09 12:37+0100\n"
+"POT-Creation-Date: 2015-09-18 19:09+0200\n"
+"PO-Revision-Date: 2015-06-26 08:29+0200\n"
 "Last-Translator: Marek Černocký <marek@manet.cz>\n"
 "Language-Team: Czech <translation-team-cs@lists.sourceforge.net>\n"
 "Language: cs\n"
@@ -83,12 +83,6 @@
 msgid "Missing element '%s' - check your GStreamer installation."
 msgstr "Schází prvek „%s“ – zkontrolujte prosím instalaci systému GStreamer."
 
-#, c-format
-msgid "A %s plugin is required to play this stream, but not installed."
-msgstr ""
-"K přehrání tohoto proudu je vyžadován zásuvný modul %s, ale není "
-"nainstalován."
-
 msgid "Could not determine type of stream"
 msgstr "Nezdařilo se určit typ proudu"
 
@@ -522,12 +516,97 @@
 "Don't exit after showing the initial device list, but wait for devices to "
 "added/removed."
 msgstr ""
+"Po zobrazení počátečního seznamu zařízení neskončit, ale ček na přidání/"
+"odebrání zařízení."
+
+#, c-format
+msgid "Volume: %.0f%%"
+msgstr "Hlasitost: %.0f %%"
 
 msgid "Buffering..."
 msgstr "Ukládá se do vyrovnávací paměti…"
 
 msgid "Clock lost, selecting a new one\n"
-msgstr ""
+msgstr "Bylo ztraceno časování, vybírá se nové\n"
+
+msgid "Reached end of play list."
+msgstr "Dosažen konec seznamu k přehrání"
+
+msgid "Paused"
+msgstr "Pozastaveno"
+
+#, c-format
+msgid "Now playing %s\n"
+msgstr "Nyní se přehrává %s\n"
+
+#, c-format
+msgid "About to finish, preparing next title: %s"
+msgstr "Blíží se konec, připravuje se následující titul: %s"
+
+#, c-format
+msgid "Playback rate: %.2f"
+msgstr "Rychlost přehrávání: %.2f"
+
+#, c-format
+msgid "Could not change playback rate to %.2f"
+msgstr "Nezdařilo se změnit rychlost přehrávání na %.2f"
+
+msgid "space"
+msgstr "mezerník"
+
+msgid "pause/unpause"
+msgstr "pozastavit/pokračovat"
+
+msgid "q or ESC"
+msgstr "q nebo ESC"
+
+msgid "quit"
+msgstr "ukončit"
+
+msgid "play next"
+msgstr "přehrát následující"
+
+msgid "play previous"
+msgstr "přehrát předchozí"
+
+msgid "seek forward"
+msgstr "posounout vpřed"
+
+msgid "seek backward"
+msgstr "posunout zpět"
+
+msgid "volume up"
+msgstr "zvýšit hlasitost"
+
+msgid "volume down"
+msgstr "snížit hlasitost"
+
+msgid "increase playback rate"
+msgstr "zvýšit rychlost přehrávání"
+
+msgid "decrease playback rate"
+msgstr "snížti rychlost přehrávání"
+
+msgid "change playback direction"
+msgstr "změnit směr přehrávání"
+
+msgid "enable/disable trick modes"
+msgstr "zapnout/vypnout trikový režim"
+
+msgid "change audio track"
+msgstr "změnit stopu zvuku"
+
+msgid "change video track"
+msgstr "změnit stopu videa"
+
+msgid "change subtitle track"
+msgstr "změnit stopu titulků"
+
+msgid "show keyboard shortcuts"
+msgstr "zobrazit klávesové zkratky"
+
+msgid "Interactive mode - keyboard controls:"
+msgstr "Interaktivní režim – ovládání klávesnicí:"
 
 msgid "Video sink to use (default is autovideosink)"
 msgstr "Spotřebič videa, který se má použít (výchozí je autovideosink)"
@@ -539,16 +618,19 @@
 msgstr "Zapnout přehrávání bez mezer"
 
 msgid "Shuffle playlist"
-msgstr ""
+msgstr "Náhodně zamíchat seznam k přehrání"
 
-msgid "Interactive control via keyboard"
-msgstr ""
+msgid "Disable interactive control via the keyboard"
+msgstr "Zakázat interaktivní ovládání klávesnicí"
 
 msgid "Volume"
-msgstr ""
+msgstr "Hlasitost"
 
 msgid "Playlist file containing input media files"
-msgstr ""
+msgstr "Soubor se seznamem k přehrání obsahující vstupní multimediální soubory"
+
+msgid "Do not print any output (apart from errors)"
+msgstr "Nevypisovat žádný výstup (mimo chyb)"
 
 #, c-format
 msgid "Usage: %s FILE1|URI1 [FILE2|URI2] [FILE3|URI3] ..."
@@ -556,3 +638,6 @@
 
 msgid "You must provide at least one filename or URI to play."
 msgstr "Musíte zadat minimálně jeden název souboru nebo adresu URI k přehrání."
+
+msgid "Press 'k' to see a list of keyboard shortcuts.\n"
+msgstr "Zmáčknutím „k“ si zobrazíte seznam klávesových zkratek.\n"
diff --git a/po/da.gmo b/po/da.gmo
index 2f529c5..a153013 100644
--- a/po/da.gmo
+++ b/po/da.gmo
Binary files differ
diff --git a/po/da.po b/po/da.po
index 860c4ec..32ed5d6 100644
--- a/po/da.po
+++ b/po/da.po
@@ -3,7 +3,7 @@
 # This file is distributed under the same license as the gst-plugins-base package.
 #
 # Mogens Jaeger <mogens@jaeger.tf>, 2007.
-# Joe Hansen <joedalton2@yahoo.dk>, 2009, 2010, 2011, 2013, 2014.
+# Joe Hansen <joedalton2@yahoo.dk>, 2009, 2010, 2011, 2013, 2014, 2015.
 #
 # capture -> optage
 # gain -> forstærkning
@@ -31,10 +31,10 @@
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: gst-plugins-base 1.4.1\n"
+"Project-Id-Version: gst-plugins-base 1.5.2\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2014-12-18 12:05+0100\n"
-"PO-Revision-Date: 2014-08-29 16:38+0100\n"
+"POT-Creation-Date: 2015-09-18 19:09+0200\n"
+"PO-Revision-Date: 2015-06-27 16:38+0100\n"
 "Last-Translator: Joe Hansen <joedalton2@yahoo.dk>\n"
 "Language-Team: Danish <dansk@dansk-gruppen.dk>\n"
 "Language: da\n"
@@ -103,12 +103,6 @@
 msgid "Missing element '%s' - check your GStreamer installation."
 msgstr "Elementet »%s« mangler - kontroller din GStreamer-installation."
 
-#, c-format
-msgid "A %s plugin is required to play this stream, but not installed."
-msgstr ""
-"Et %s plugin er nødvendigt ved afspilning af denne sekvens, men ikke "
-"installeret."
-
 msgid "Could not determine type of stream"
 msgstr "Kunne ikke afgøre strømtypen"
 
@@ -561,12 +555,95 @@
 "Afslut ikke efter visning af den oprindelige enhedsliste, men vent på at "
 "enheder bliver tilføjet/fjernet."
 
+#, c-format
+msgid "Volume: %.0f%%"
+msgstr "Lydstyrke: %.0f%%"
+
 msgid "Buffering..."
 msgstr "Mellemlagrer ..."
 
 msgid "Clock lost, selecting a new one\n"
 msgstr "Ur tabt, vælger et nyt ur\n"
 
+msgid "Reached end of play list."
+msgstr "Nåede slutningen af afspilningslisten."
+
+msgid "Paused"
+msgstr "På pause"
+
+#, c-format
+msgid "Now playing %s\n"
+msgstr "Afspiller %s\n"
+
+#, c-format
+msgid "About to finish, preparing next title: %s"
+msgstr "Ved at afslutte, forbereder næste titel: %s"
+
+#, c-format
+msgid "Playback rate: %.2f"
+msgstr "Afspilningshastighed: %.2f"
+
+#, c-format
+msgid "Could not change playback rate to %.2f"
+msgstr "Kunne ikke ændre afspilningshastighed til %.2f"
+
+msgid "space"
+msgstr "mellemrum"
+
+msgid "pause/unpause"
+msgstr "pause/start"
+
+msgid "q or ESC"
+msgstr "q eller ESC"
+
+msgid "quit"
+msgstr "afslut"
+
+msgid "play next"
+msgstr "afspil næste"
+
+msgid "play previous"
+msgstr "afspil forrige"
+
+msgid "seek forward"
+msgstr "søg fremad"
+
+msgid "seek backward"
+msgstr "søg baglæns"
+
+msgid "volume up"
+msgstr "lydstyrke op"
+
+msgid "volume down"
+msgstr "lydstyrke ned"
+
+msgid "increase playback rate"
+msgstr "øg afspilningshastighed"
+
+msgid "decrease playback rate"
+msgstr "sænk afspilningshastighed"
+
+msgid "change playback direction"
+msgstr "ændr afspilningsretning"
+
+msgid "enable/disable trick modes"
+msgstr "aktiver/deaktiver trick-tilstande"
+
+msgid "change audio track"
+msgstr "ændr lydspor"
+
+msgid "change video track"
+msgstr "ændr videospor"
+
+msgid "change subtitle track"
+msgstr "ændr undertekstspor"
+
+msgid "show keyboard shortcuts"
+msgstr "vis genvejstaster"
+
+msgid "Interactive mode - keyboard controls:"
+msgstr "Interaktiv tilstand - kontrol via tastatur:"
+
 msgid "Video sink to use (default is autovideosink)"
 msgstr "Brug denne videokanal (standard er autovideosink)"
 
@@ -579,8 +656,8 @@
 msgid "Shuffle playlist"
 msgstr "Bland afspilningsliste"
 
-msgid "Interactive control via keyboard"
-msgstr "Interaktiv kontrol via tastatur"
+msgid "Disable interactive control via the keyboard"
+msgstr "Deaktiver interaktiv kontrol via tastaturet"
 
 msgid "Volume"
 msgstr "Lydstyrke"
@@ -588,9 +665,15 @@
 msgid "Playlist file containing input media files"
 msgstr "Afspilningsfil der indeholder mediefiler"
 
+msgid "Do not print any output (apart from errors)"
+msgstr "Udskriv ikke noget (undtagen fejl)"
+
 #, c-format
 msgid "Usage: %s FILE1|URI1 [FILE2|URI2] [FILE3|URI3] ..."
 msgstr "Brug: %s FIL1|URI1 [FIL2|URI2] [FIL3|URI3] ..."
 
 msgid "You must provide at least one filename or URI to play."
 msgstr "Du skal angive mindst et filnavn eller en adresse for at afspille."
+
+msgid "Press 'k' to see a list of keyboard shortcuts.\n"
+msgstr "Tryk »k« for at se en liste over genvejstaster.\n"
diff --git a/po/de.gmo b/po/de.gmo
index 31650e6..f82b227 100644
--- a/po/de.gmo
+++ b/po/de.gmo
Binary files differ
diff --git a/po/de.po b/po/de.po
index 19b8163..a147449 100644
--- a/po/de.po
+++ b/po/de.po
@@ -7,10 +7,10 @@
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: gst-plugins-base 1.4.0\n"
+"Project-Id-Version: gst-plugins-base 1.5.2\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2014-12-18 12:05+0100\n"
-"PO-Revision-Date: 2014-07-24 23:58+0100\n"
+"POT-Creation-Date: 2015-09-18 19:09+0200\n"
+"PO-Revision-Date: 2015-07-12 23:00+0100\n"
 "Last-Translator: Christian Kirbach <christian.kirbach@gmail.com>\n"
 "Language-Team: German <translation-team-de@lists.sourceforge.net>\n"
 "Language: de\n"
@@ -18,7 +18,7 @@
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
-"X-Generator: Poedit 1.5.4\n"
+"X-Generator: Poedit 1.7.5\n"
 
 msgid "Could not open device for playback in mono mode."
 msgstr "Gerät konnte nicht zur Wiedergabe in Mono geöffnet werden."
@@ -83,12 +83,6 @@
 msgstr ""
 "Das Element »%s« fehlt - überprüfen Sie Ihre Installation von GStreamer."
 
-#, c-format
-msgid "A %s plugin is required to play this stream, but not installed."
-msgstr ""
-"Ein Plugin »%s« wird zum Abspielen dieses Datenstroms benötigt, ist aber "
-"nicht installiert."
-
 msgid "Could not determine type of stream"
 msgstr "Der Typ des Datenstroms konnte nicht bestimmt werden"
 
@@ -528,12 +522,95 @@
 "Nicht nach dem Anzeigen der anfänglichen Geräteliste beenden, sondern auf "
 "das Hinzufügen/Entfernen von Geräten warten."
 
+#, c-format
+msgid "Volume: %.0f%%"
+msgstr "Lautstärke: %.0f%%"
+
 msgid "Buffering..."
 msgstr "Zwischenspeichern …"
 
 msgid "Clock lost, selecting a new one\n"
 msgstr "Uhrzeit verloren, es wird eine neue gewählt\n"
 
+msgid "Reached end of play list."
+msgstr "Das Ende der Wiedergabeliste wurde erreicht."
+
+msgid "Paused"
+msgstr "Angehalten"
+
+#, c-format
+msgid "Now playing %s\n"
+msgstr "Momentan wird %s wiedergegeben\n"
+
+#, c-format
+msgid "About to finish, preparing next title: %s"
+msgstr "Kurz vor dem Abschluss. Nächster Titel wird vorbereitet: %s"
+
+#, c-format
+msgid "Playback rate: %.2f"
+msgstr "Wiedergabegeschwindigkeit: %.2f"
+
+#, c-format
+msgid "Could not change playback rate to %.2f"
+msgstr "Wiedergabegeschwindigkeit konnte nicht auf %.2f geändert werden"
+
+msgid "space"
+msgstr "Leertaste"
+
+msgid "pause/unpause"
+msgstr "Anhalten/Fortsetzen"
+
+msgid "q or ESC"
+msgstr "q oder ESC"
+
+msgid "quit"
+msgstr "Beenden"
+
+msgid "play next"
+msgstr "Nächsten wiedergeben"
+
+msgid "play previous"
+msgstr "Vorherigen wiedergeben"
+
+msgid "seek forward"
+msgstr "Vorspulen"
+
+msgid "seek backward"
+msgstr "Zurückspulen"
+
+msgid "volume up"
+msgstr "Lauter"
+
+msgid "volume down"
+msgstr "Leiser"
+
+msgid "increase playback rate"
+msgstr "Schneller wiedergeben"
+
+msgid "decrease playback rate"
+msgstr "Langsamer wiedergeben"
+
+msgid "change playback direction"
+msgstr "Wiedergaberichtung ändern"
+
+msgid "enable/disable trick modes"
+msgstr "Trickmodi einschalten/ausschalten"
+
+msgid "change audio track"
+msgstr "Audio-Titel wechseln"
+
+msgid "change video track"
+msgstr "Videl-Titel wechseln"
+
+msgid "change subtitle track"
+msgstr "Untertitel wechseln"
+
+msgid "show keyboard shortcuts"
+msgstr "Tastenkombinationen anzeigen"
+
+msgid "Interactive mode - keyboard controls:"
+msgstr "Interaktiver Modus - Tastatursteuerung:"
+
 msgid "Video sink to use (default is autovideosink)"
 msgstr "Zu verwendende Video-Ziel (Voreinstellung ist »autovideosink«)"
 
@@ -546,8 +623,8 @@
 msgid "Shuffle playlist"
 msgstr "Wiedergabeliste mischen"
 
-msgid "Interactive control via keyboard"
-msgstr "Interaktive Steuerung via Tastatur"
+msgid "Disable interactive control via the keyboard"
+msgstr "Interaktive Steuerung via Tastatur deaktivieren"
 
 msgid "Volume"
 msgstr "Lautstärke"
@@ -555,6 +632,9 @@
 msgid "Playlist file containing input media files"
 msgstr "Datei mit Wiedergabeliste enthält Eingabe-Mediendateien"
 
+msgid "Do not print any output (apart from errors)"
+msgstr "Nichts ausgeben (außer Fehlermeldungen)"
+
 #, c-format
 msgid "Usage: %s FILE1|URI1 [FILE2|URI2] [FILE3|URI3] ..."
 msgstr "Aufruf: %s DATEI1|URI1 [DATEI2|URI2] [DATEI3|URI3] ..."
@@ -564,6 +644,14 @@
 "Sie müssen mindestens einen Dateinamen oder eine Adresse zur Wiedergabe "
 "angeben."
 
+msgid "Press 'k' to see a list of keyboard shortcuts.\n"
+msgstr "Geben Sie »k« ein, um die Liste der Tastenkombinationen zu sehen.\n"
+
+#~ msgid "A %s plugin is required to play this stream, but not installed."
+#~ msgstr ""
+#~ "Ein Plugin »%s« wird zum Abspielen dieses Datenstroms benötigt, ist aber "
+#~ "nicht installiert."
+
 #~ msgid "Uncompressed %s YUV %s"
 #~ msgstr "Unkomprimiertes %s YUV %s"
 
diff --git a/po/el.gmo b/po/el.gmo
index c8dcc47..2932389 100644
--- a/po/el.gmo
+++ b/po/el.gmo
Binary files differ
diff --git a/po/el.po b/po/el.po
index b9752df..b929926 100644
--- a/po/el.po
+++ b/po/el.po
@@ -9,7 +9,7 @@
 msgstr ""
 "Project-Id-Version: gst-plugins-base 0.10.32.2\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2014-12-18 12:05+0100\n"
+"POT-Creation-Date: 2015-09-18 19:09+0200\n"
 "PO-Revision-Date: 2012-05-05 19:13+0100\n"
 "Last-Translator: Savvas Radevic <vicedar@gmail.com>\n"
 "Language-Team: Greek <team@lists.gnome.gr>\n"
@@ -83,12 +83,6 @@
 msgid "Missing element '%s' - check your GStreamer installation."
 msgstr "Λείπει το στοιχείο '%s' - ελέγξτε την εγκατάσταση του GStreamer."
 
-#, c-format
-msgid "A %s plugin is required to play this stream, but not installed."
-msgstr ""
-"Απαιτείται μια πρόσθετη λειτουργία %s για την αναπαραγωγή αυτής της ροής, "
-"αλλά δεν έχει εγκατασταθεί."
-
 msgid "Could not determine type of stream"
 msgstr "Αδυναμία προσδιορισμού τύπου ροής"
 
@@ -542,12 +536,97 @@
 "added/removed."
 msgstr ""
 
+#, c-format
+msgid "Volume: %.0f%%"
+msgstr ""
+
 msgid "Buffering..."
 msgstr ""
 
 msgid "Clock lost, selecting a new one\n"
 msgstr ""
 
+msgid "Reached end of play list."
+msgstr ""
+
+msgid "Paused"
+msgstr ""
+
+#, c-format
+msgid "Now playing %s\n"
+msgstr ""
+
+#, c-format
+msgid "About to finish, preparing next title: %s"
+msgstr ""
+
+#, c-format
+msgid "Playback rate: %.2f"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "Could not change playback rate to %.2f"
+msgstr "Αδυναμία ανοίγματος συσκευής για στερεοφωνική αναπαραγωγή."
+
+msgid "space"
+msgstr ""
+
+msgid "pause/unpause"
+msgstr ""
+
+msgid "q or ESC"
+msgstr ""
+
+msgid "quit"
+msgstr ""
+
+msgid "play next"
+msgstr ""
+
+msgid "play previous"
+msgstr ""
+
+msgid "seek forward"
+msgstr ""
+
+msgid "seek backward"
+msgstr ""
+
+msgid "volume up"
+msgstr ""
+
+msgid "volume down"
+msgstr ""
+
+msgid "increase playback rate"
+msgstr ""
+
+msgid "decrease playback rate"
+msgstr ""
+
+msgid "change playback direction"
+msgstr ""
+
+msgid "enable/disable trick modes"
+msgstr ""
+
+#, fuzzy
+msgid "change audio track"
+msgstr "Αυτό το CD δεν έχει ηχητικά κομμάτια"
+
+msgid "change video track"
+msgstr ""
+
+#, fuzzy
+msgid "change subtitle track"
+msgstr "Μορφή υποτίτλων Kate"
+
+msgid "show keyboard shortcuts"
+msgstr ""
+
+msgid "Interactive mode - keyboard controls:"
+msgstr ""
+
 msgid "Video sink to use (default is autovideosink)"
 msgstr ""
 
@@ -560,7 +639,7 @@
 msgid "Shuffle playlist"
 msgstr ""
 
-msgid "Interactive control via keyboard"
+msgid "Disable interactive control via the keyboard"
 msgstr ""
 
 msgid "Volume"
@@ -569,6 +648,9 @@
 msgid "Playlist file containing input media files"
 msgstr ""
 
+msgid "Do not print any output (apart from errors)"
+msgstr ""
+
 #, c-format
 msgid "Usage: %s FILE1|URI1 [FILE2|URI2] [FILE3|URI3] ..."
 msgstr ""
@@ -576,6 +658,14 @@
 msgid "You must provide at least one filename or URI to play."
 msgstr ""
 
+msgid "Press 'k' to see a list of keyboard shortcuts.\n"
+msgstr ""
+
+#~ msgid "A %s plugin is required to play this stream, but not installed."
+#~ msgstr ""
+#~ "Απαιτείται μια πρόσθετη λειτουργία %s για την αναπαραγωγή αυτής της ροής, "
+#~ "αλλά δεν έχει εγκατασταθεί."
+
 #, fuzzy
 #~ msgid "Uncompressed %s YUV %s"
 #~ msgstr "Ασυμπίεστο YUV"
diff --git a/po/en_GB.gmo b/po/en_GB.gmo
index 8566492..917e6d6 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 82bc2b6..004268e 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: 2014-12-18 12:05+0100\n"
+"POT-Creation-Date: 2015-09-18 19:09+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"
@@ -82,10 +82,6 @@
 msgid "Missing element '%s' - check your GStreamer installation."
 msgstr ""
 
-#, c-format
-msgid "A %s plugin is required to play this stream, but not installed."
-msgstr ""
-
 #, fuzzy
 msgid "Could not determine type of stream"
 msgstr "Could not write to file \"%s\"."
@@ -519,12 +515,96 @@
 "added/removed."
 msgstr ""
 
+#, fuzzy, c-format
+msgid "Volume: %.0f%%"
+msgstr "Volume"
+
 msgid "Buffering..."
 msgstr ""
 
 msgid "Clock lost, selecting a new one\n"
 msgstr ""
 
+msgid "Reached end of play list."
+msgstr ""
+
+msgid "Paused"
+msgstr ""
+
+#, c-format
+msgid "Now playing %s\n"
+msgstr ""
+
+#, c-format
+msgid "About to finish, preparing next title: %s"
+msgstr ""
+
+#, c-format
+msgid "Playback rate: %.2f"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "Could not change playback rate to %.2f"
+msgstr "Could not open CD device for reading."
+
+msgid "space"
+msgstr ""
+
+msgid "pause/unpause"
+msgstr ""
+
+msgid "q or ESC"
+msgstr ""
+
+msgid "quit"
+msgstr ""
+
+msgid "play next"
+msgstr ""
+
+msgid "play previous"
+msgstr ""
+
+msgid "seek forward"
+msgstr ""
+
+msgid "seek backward"
+msgstr ""
+
+#, fuzzy
+msgid "volume up"
+msgstr "Volume"
+
+msgid "volume down"
+msgstr ""
+
+msgid "increase playback rate"
+msgstr ""
+
+msgid "decrease playback rate"
+msgstr ""
+
+msgid "change playback direction"
+msgstr ""
+
+msgid "enable/disable trick modes"
+msgstr ""
+
+msgid "change audio track"
+msgstr ""
+
+msgid "change video track"
+msgstr ""
+
+msgid "change subtitle track"
+msgstr ""
+
+msgid "show keyboard shortcuts"
+msgstr ""
+
+msgid "Interactive mode - keyboard controls:"
+msgstr ""
+
 msgid "Video sink to use (default is autovideosink)"
 msgstr ""
 
@@ -537,7 +617,7 @@
 msgid "Shuffle playlist"
 msgstr ""
 
-msgid "Interactive control via keyboard"
+msgid "Disable interactive control via the keyboard"
 msgstr ""
 
 msgid "Volume"
@@ -546,6 +626,9 @@
 msgid "Playlist file containing input media files"
 msgstr ""
 
+msgid "Do not print any output (apart from errors)"
+msgstr ""
+
 #, c-format
 msgid "Usage: %s FILE1|URI1 [FILE2|URI2] [FILE3|URI3] ..."
 msgstr ""
@@ -553,6 +636,9 @@
 msgid "You must provide at least one filename or URI to play."
 msgstr ""
 
+msgid "Press 'k' to see a list of keyboard shortcuts.\n"
+msgstr ""
+
 #~ msgid "Bass"
 #~ msgstr "Bass"
 
diff --git a/po/eo.gmo b/po/eo.gmo
index 7831ee2..da4b912 100644
--- a/po/eo.gmo
+++ b/po/eo.gmo
Binary files differ
diff --git a/po/eo.po b/po/eo.po
index 1128085..a339e04 100644
--- a/po/eo.po
+++ b/po/eo.po
@@ -7,7 +7,7 @@
 msgstr ""
 "Project-Id-Version: gst-plugins-base 0.10.32.2\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2014-12-18 12:05+0100\n"
+"POT-Creation-Date: 2015-09-18 19:09+0200\n"
 "PO-Revision-Date: 2011-06-04 21:11+0100\n"
 "Last-Translator: Kristjan SCHMIDT <kristjan.schmidt@googlemail.com>\n"
 "Language-Team: Esperanto <translation-team-eo@lists.sourceforge.net>\n"
@@ -79,10 +79,6 @@
 msgid "Missing element '%s' - check your GStreamer installation."
 msgstr ""
 
-#, c-format
-msgid "A %s plugin is required to play this stream, but not installed."
-msgstr "%s-kromprogramo bezonatas, sed tia ne estas instalite."
-
 msgid "Could not determine type of stream"
 msgstr "Ne eblis rekoni la tipon de la fluo"
 
@@ -515,12 +511,95 @@
 "added/removed."
 msgstr ""
 
+#, c-format
+msgid "Volume: %.0f%%"
+msgstr ""
+
 msgid "Buffering..."
 msgstr ""
 
 msgid "Clock lost, selecting a new one\n"
 msgstr ""
 
+msgid "Reached end of play list."
+msgstr ""
+
+msgid "Paused"
+msgstr ""
+
+#, c-format
+msgid "Now playing %s\n"
+msgstr ""
+
+#, c-format
+msgid "About to finish, preparing next title: %s"
+msgstr ""
+
+#, c-format
+msgid "Playback rate: %.2f"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "Could not change playback rate to %.2f"
+msgstr "Ne eblis malfermi aparaton por reproduktado per dukanala reĝimo."
+
+msgid "space"
+msgstr ""
+
+msgid "pause/unpause"
+msgstr ""
+
+msgid "q or ESC"
+msgstr ""
+
+msgid "quit"
+msgstr ""
+
+msgid "play next"
+msgstr ""
+
+msgid "play previous"
+msgstr ""
+
+msgid "seek forward"
+msgstr ""
+
+msgid "seek backward"
+msgstr ""
+
+msgid "volume up"
+msgstr ""
+
+msgid "volume down"
+msgstr ""
+
+msgid "increase playback rate"
+msgstr ""
+
+msgid "decrease playback rate"
+msgstr ""
+
+msgid "change playback direction"
+msgstr ""
+
+msgid "enable/disable trick modes"
+msgstr ""
+
+msgid "change audio track"
+msgstr ""
+
+msgid "change video track"
+msgstr ""
+
+msgid "change subtitle track"
+msgstr ""
+
+msgid "show keyboard shortcuts"
+msgstr ""
+
+msgid "Interactive mode - keyboard controls:"
+msgstr ""
+
 msgid "Video sink to use (default is autovideosink)"
 msgstr ""
 
@@ -533,7 +612,7 @@
 msgid "Shuffle playlist"
 msgstr ""
 
-msgid "Interactive control via keyboard"
+msgid "Disable interactive control via the keyboard"
 msgstr ""
 
 msgid "Volume"
@@ -542,6 +621,9 @@
 msgid "Playlist file containing input media files"
 msgstr ""
 
+msgid "Do not print any output (apart from errors)"
+msgstr ""
+
 #, c-format
 msgid "Usage: %s FILE1|URI1 [FILE2|URI2] [FILE3|URI3] ..."
 msgstr ""
@@ -549,6 +631,12 @@
 msgid "You must provide at least one filename or URI to play."
 msgstr ""
 
+msgid "Press 'k' to see a list of keyboard shortcuts.\n"
+msgstr ""
+
+#~ msgid "A %s plugin is required to play this stream, but not installed."
+#~ msgstr "%s-kromprogramo bezonatas, sed tia ne estas instalite."
+
 #~ msgid "Master"
 #~ msgstr "Ĉefa regilo"
 
diff --git a/po/es.gmo b/po/es.gmo
index 21eabea..683779d 100644
--- a/po/es.gmo
+++ b/po/es.gmo
Binary files differ
diff --git a/po/es.po b/po/es.po
index 194d377..9df753f 100644
--- a/po/es.po
+++ b/po/es.po
@@ -7,7 +7,7 @@
 msgstr ""
 "Project-Id-Version: gst-plugins-base 0.10.32.2\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2014-12-18 12:05+0100\n"
+"POT-Creation-Date: 2015-09-18 19:09+0200\n"
 "PO-Revision-Date: 2011-10-02 15:46+0200\n"
 "Last-Translator: Jorge González González <aloriel@gmail.com>\n"
 "Language-Team: Spanish <es@li.org>\n"
@@ -79,12 +79,6 @@
 msgid "Missing element '%s' - check your GStreamer installation."
 msgstr "Falta el elemento «%s»; compruebe su instalación de GStreamer."
 
-#, c-format
-msgid "A %s plugin is required to play this stream, but not installed."
-msgstr ""
-"Se requiere un complemento de %s para reproducir este medio, pero no está "
-"instalado."
-
 msgid "Could not determine type of stream"
 msgstr "No se pudo determinar el tipo de flujo"
 
@@ -525,12 +519,97 @@
 "added/removed."
 msgstr ""
 
+#, c-format
+msgid "Volume: %.0f%%"
+msgstr ""
+
 msgid "Buffering..."
 msgstr ""
 
 msgid "Clock lost, selecting a new one\n"
 msgstr ""
 
+msgid "Reached end of play list."
+msgstr ""
+
+msgid "Paused"
+msgstr ""
+
+#, c-format
+msgid "Now playing %s\n"
+msgstr ""
+
+#, c-format
+msgid "About to finish, preparing next title: %s"
+msgstr ""
+
+#, c-format
+msgid "Playback rate: %.2f"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "Could not change playback rate to %.2f"
+msgstr "No se pudo abrir el dispositivo para la reproducir en modo estéreo."
+
+msgid "space"
+msgstr ""
+
+msgid "pause/unpause"
+msgstr ""
+
+msgid "q or ESC"
+msgstr ""
+
+msgid "quit"
+msgstr ""
+
+msgid "play next"
+msgstr ""
+
+msgid "play previous"
+msgstr ""
+
+msgid "seek forward"
+msgstr ""
+
+msgid "seek backward"
+msgstr ""
+
+msgid "volume up"
+msgstr ""
+
+msgid "volume down"
+msgstr ""
+
+msgid "increase playback rate"
+msgstr ""
+
+msgid "decrease playback rate"
+msgstr ""
+
+msgid "change playback direction"
+msgstr ""
+
+msgid "enable/disable trick modes"
+msgstr ""
+
+#, fuzzy
+msgid "change audio track"
+msgstr "Este CD no tiene pistas de sonido"
+
+msgid "change video track"
+msgstr ""
+
+#, fuzzy
+msgid "change subtitle track"
+msgstr "Formato de subtítulos kate"
+
+msgid "show keyboard shortcuts"
+msgstr ""
+
+msgid "Interactive mode - keyboard controls:"
+msgstr ""
+
 msgid "Video sink to use (default is autovideosink)"
 msgstr ""
 
@@ -543,7 +622,7 @@
 msgid "Shuffle playlist"
 msgstr ""
 
-msgid "Interactive control via keyboard"
+msgid "Disable interactive control via the keyboard"
 msgstr ""
 
 msgid "Volume"
@@ -552,6 +631,9 @@
 msgid "Playlist file containing input media files"
 msgstr ""
 
+msgid "Do not print any output (apart from errors)"
+msgstr ""
+
 #, c-format
 msgid "Usage: %s FILE1|URI1 [FILE2|URI2] [FILE3|URI3] ..."
 msgstr ""
@@ -559,6 +641,14 @@
 msgid "You must provide at least one filename or URI to play."
 msgstr ""
 
+msgid "Press 'k' to see a list of keyboard shortcuts.\n"
+msgstr ""
+
+#~ msgid "A %s plugin is required to play this stream, but not installed."
+#~ msgstr ""
+#~ "Se requiere un complemento de %s para reproducir este medio, pero no está "
+#~ "instalado."
+
 #, fuzzy
 #~ msgid "Uncompressed %s YUV %s"
 #~ msgstr "YUV sin comprimir"
diff --git a/po/eu.gmo b/po/eu.gmo
index 3d78fac..72cabb2 100644
--- a/po/eu.gmo
+++ b/po/eu.gmo
Binary files differ
diff --git a/po/eu.po b/po/eu.po
index 3ef6b7a..3ddc435 100644
--- a/po/eu.po
+++ b/po/eu.po
@@ -8,7 +8,7 @@
 msgstr ""
 "Project-Id-Version: gst-plugins-base-0.10.26.2\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2014-12-18 12:05+0100\n"
+"POT-Creation-Date: 2015-09-18 19:09+0200\n"
 "PO-Revision-Date: 2010-03-25 12:32+0100\n"
 "Last-Translator: Mikel Olasagasti Uranga <hey_neken@mundurat.net>\n"
 "Language-Team: Basque <translation-team-eu@lists.sourceforge.net>\n"
@@ -81,11 +81,6 @@
 msgid "Missing element '%s' - check your GStreamer installation."
 msgstr "'%s' elementua falta da. Begiratu GStreamer ondo instalatua dagoen."
 
-#, c-format
-msgid "A %s plugin is required to play this stream, but not installed."
-msgstr ""
-"%s plugina behar da korronte hori erreproduzitzeko, baina ez dago instalatua."
-
 msgid "Could not determine type of stream"
 msgstr "Ezin izan da korronte mota zehaztu"
 
@@ -526,12 +521,97 @@
 "added/removed."
 msgstr ""
 
+#, c-format
+msgid "Volume: %.0f%%"
+msgstr ""
+
 msgid "Buffering..."
 msgstr ""
 
 msgid "Clock lost, selecting a new one\n"
 msgstr ""
 
+msgid "Reached end of play list."
+msgstr ""
+
+msgid "Paused"
+msgstr ""
+
+#, c-format
+msgid "Now playing %s\n"
+msgstr ""
+
+#, c-format
+msgid "About to finish, preparing next title: %s"
+msgstr ""
+
+#, c-format
+msgid "Playback rate: %.2f"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "Could not change playback rate to %.2f"
+msgstr "Ezin izan da gailua ireki estereo moduan erreproduzitzeko."
+
+msgid "space"
+msgstr ""
+
+msgid "pause/unpause"
+msgstr ""
+
+msgid "q or ESC"
+msgstr ""
+
+msgid "quit"
+msgstr ""
+
+msgid "play next"
+msgstr ""
+
+msgid "play previous"
+msgstr ""
+
+msgid "seek forward"
+msgstr ""
+
+msgid "seek backward"
+msgstr ""
+
+msgid "volume up"
+msgstr ""
+
+msgid "volume down"
+msgstr ""
+
+msgid "increase playback rate"
+msgstr ""
+
+msgid "decrease playback rate"
+msgstr ""
+
+msgid "change playback direction"
+msgstr ""
+
+msgid "enable/disable trick modes"
+msgstr ""
+
+#, fuzzy
+msgid "change audio track"
+msgstr "CD honek ez du audio-pistarik"
+
+msgid "change video track"
+msgstr ""
+
+#, fuzzy
+msgid "change subtitle track"
+msgstr "'Kate' azpititulu-formatua"
+
+msgid "show keyboard shortcuts"
+msgstr ""
+
+msgid "Interactive mode - keyboard controls:"
+msgstr ""
+
 msgid "Video sink to use (default is autovideosink)"
 msgstr ""
 
@@ -544,7 +624,7 @@
 msgid "Shuffle playlist"
 msgstr ""
 
-msgid "Interactive control via keyboard"
+msgid "Disable interactive control via the keyboard"
 msgstr ""
 
 msgid "Volume"
@@ -553,6 +633,9 @@
 msgid "Playlist file containing input media files"
 msgstr ""
 
+msgid "Do not print any output (apart from errors)"
+msgstr ""
+
 #, c-format
 msgid "Usage: %s FILE1|URI1 [FILE2|URI2] [FILE3|URI3] ..."
 msgstr ""
@@ -560,6 +643,14 @@
 msgid "You must provide at least one filename or URI to play."
 msgstr ""
 
+msgid "Press 'k' to see a list of keyboard shortcuts.\n"
+msgstr ""
+
+#~ msgid "A %s plugin is required to play this stream, but not installed."
+#~ msgstr ""
+#~ "%s plugina behar da korronte hori erreproduzitzeko, baina ez dago "
+#~ "instalatua."
+
 #, fuzzy
 #~ msgid "Uncompressed %s YUV %s"
 #~ msgstr "Konprimitu gabeko YUV"
diff --git a/po/fi.gmo b/po/fi.gmo
index c3b5576..7c97585 100644
--- a/po/fi.gmo
+++ b/po/fi.gmo
Binary files differ
diff --git a/po/fi.po b/po/fi.po
index c1bc8e3..f5f10c2 100644
--- a/po/fi.po
+++ b/po/fi.po
@@ -12,7 +12,7 @@
 msgstr ""
 "Project-Id-Version: gst-plugins-base 0.10.30.3\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2014-12-18 12:05+0100\n"
+"POT-Creation-Date: 2015-09-18 19:09+0200\n"
 "PO-Revision-Date: 2010-12-31 23:21+0200\n"
 "Last-Translator: Tommi Vainikainen <Tommi.Vainikainen@iki.fi>\n"
 "Language-Team: Finnish <translation-team-fi@lists.sourceforge.net>\n"
@@ -83,11 +83,6 @@
 msgid "Missing element '%s' - check your GStreamer installation."
 msgstr "Puuttuva elementti \"%s\" - tarkista GStreamer-asennuksesi."
 
-#, c-format
-msgid "A %s plugin is required to play this stream, but not installed."
-msgstr ""
-"Virran toistamiseen tarvitaan %s-liitännäinen, mutta se ei ole asennettu."
-
 msgid "Could not determine type of stream"
 msgstr "Virran tyyppiä ei voitu määrittää"
 
@@ -528,12 +523,97 @@
 "added/removed."
 msgstr ""
 
+#, c-format
+msgid "Volume: %.0f%%"
+msgstr ""
+
 msgid "Buffering..."
 msgstr ""
 
 msgid "Clock lost, selecting a new one\n"
 msgstr ""
 
+msgid "Reached end of play list."
+msgstr ""
+
+msgid "Paused"
+msgstr ""
+
+#, c-format
+msgid "Now playing %s\n"
+msgstr ""
+
+#, c-format
+msgid "About to finish, preparing next title: %s"
+msgstr ""
+
+#, c-format
+msgid "Playback rate: %.2f"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "Could not change playback rate to %.2f"
+msgstr "Laitetta ei voitu avata toistoa varten stereona."
+
+msgid "space"
+msgstr ""
+
+msgid "pause/unpause"
+msgstr ""
+
+msgid "q or ESC"
+msgstr ""
+
+msgid "quit"
+msgstr ""
+
+msgid "play next"
+msgstr ""
+
+msgid "play previous"
+msgstr ""
+
+msgid "seek forward"
+msgstr ""
+
+msgid "seek backward"
+msgstr ""
+
+msgid "volume up"
+msgstr ""
+
+msgid "volume down"
+msgstr ""
+
+msgid "increase playback rate"
+msgstr ""
+
+msgid "decrease playback rate"
+msgstr ""
+
+msgid "change playback direction"
+msgstr ""
+
+msgid "enable/disable trick modes"
+msgstr ""
+
+#, fuzzy
+msgid "change audio track"
+msgstr "Tällä CD-levyllä ei ole ääniraitoja"
+
+msgid "change video track"
+msgstr ""
+
+#, fuzzy
+msgid "change subtitle track"
+msgstr "Kate-tekstitysmuoto"
+
+msgid "show keyboard shortcuts"
+msgstr ""
+
+msgid "Interactive mode - keyboard controls:"
+msgstr ""
+
 msgid "Video sink to use (default is autovideosink)"
 msgstr ""
 
@@ -546,7 +626,7 @@
 msgid "Shuffle playlist"
 msgstr ""
 
-msgid "Interactive control via keyboard"
+msgid "Disable interactive control via the keyboard"
 msgstr ""
 
 msgid "Volume"
@@ -555,6 +635,9 @@
 msgid "Playlist file containing input media files"
 msgstr ""
 
+msgid "Do not print any output (apart from errors)"
+msgstr ""
+
 #, c-format
 msgid "Usage: %s FILE1|URI1 [FILE2|URI2] [FILE3|URI3] ..."
 msgstr ""
@@ -562,6 +645,13 @@
 msgid "You must provide at least one filename or URI to play."
 msgstr ""
 
+msgid "Press 'k' to see a list of keyboard shortcuts.\n"
+msgstr ""
+
+#~ msgid "A %s plugin is required to play this stream, but not installed."
+#~ msgstr ""
+#~ "Virran toistamiseen tarvitaan %s-liitännäinen, mutta se ei ole asennettu."
+
 #, fuzzy
 #~ msgid "Uncompressed %s YUV %s"
 #~ msgstr "Pakkaamaton YUV"
diff --git a/po/fr.gmo b/po/fr.gmo
index 30d057a..65d9e31 100644
--- a/po/fr.gmo
+++ b/po/fr.gmo
Binary files differ
diff --git a/po/fr.po b/po/fr.po
index 56cc678..5fe5d7f 100644
--- a/po/fr.po
+++ b/po/fr.po
@@ -4,14 +4,15 @@
 #
 # Nicolas Velin <nicolas@velin.fr>, 2008.
 # Claude Paroz <claude@2xlibre.net>, 2008-2011.
+# Stéphane Aulery <lkppo@free.fr>, 2015.
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: gst-plugins-base 0.10.32.2\n"
+"Project-Id-Version: gst-plugins-base 1.4.1\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2014-12-18 12:05+0100\n"
-"PO-Revision-Date: 2011-04-28 09:19+0200\n"
-"Last-Translator: Claude Paroz <claude@2xlibre.net>\n"
+"POT-Creation-Date: 2015-09-18 19:09+0200\n"
+"PO-Revision-Date: 2015-04-26 19:42+0200\n"
+"Last-Translator: Stéphane Aulery <lkppo@free.fr>\n"
 "Language-Team: French <traduc@traduc.org>\n"
 "Language: fr\n"
 "MIME-Version: 1.0\n"
@@ -86,20 +87,14 @@
 msgid "Missing element '%s' - check your GStreamer installation."
 msgstr "Élément « %s » manquant, contrôlez votre installation de GStreamer."
 
-#, c-format
-msgid "A %s plugin is required to play this stream, but not installed."
-msgstr ""
-"Un greffon %s est requis pour lire ce flux, mais il n'est pas installé."
-
 msgid "Could not determine type of stream"
 msgstr "Impossible de déterminer le type de flux"
 
 msgid "This appears to be a text file"
 msgstr "Ce fichier semble être un fichier texte"
 
-#, fuzzy
 msgid "Could not create \"uridecodebin\" element."
-msgstr "Impossible de créer un élément « decodebin »."
+msgstr "Impossible de créer un élément « uridecodebin »."
 
 #, c-format
 msgid "Both autovideosink and %s elements are missing."
@@ -215,19 +210,16 @@
 msgstr ""
 
 msgid "Subtitle"
-msgstr ""
+msgstr "Sous-titre"
 
-#, fuzzy
 msgid "MPL2 subtitle format"
-msgstr "Format de sous-titres TMPlayer"
+msgstr "Format de sous-titres MPL2"
 
-#, fuzzy
 msgid "DKS subtitle format"
-msgstr "Format de sous-titres Sami"
+msgstr "Format de sous-titres DKS"
 
-#, fuzzy
 msgid "QTtext subtitle format"
-msgstr "Format de sous-titres Kate"
+msgstr "Format de sous-titres QTtext"
 
 msgid "Sami subtitle format"
 msgstr "Format de sous-titres Sami"
@@ -238,45 +230,42 @@
 msgid "Kate subtitle format"
 msgstr "Format de sous-titres Kate"
 
-#, fuzzy
 msgid "Uncompressed video"
-msgstr "YUV non compressé"
+msgstr "Video non compressée"
 
-#, fuzzy
 msgid "Uncompressed gray"
-msgstr "Image niveaux de gris non compressée"
+msgstr "Niveaux de gris non compressés"
 
-#, fuzzy, c-format
+#, c-format
 msgid "Uncompressed packed YUV %s"
-msgstr "YUV empaqueté 4:2:2 non compressé"
+msgstr "YUV %s empaqueté non compressé"
 
-#, fuzzy, c-format
+#, c-format
 msgid "Uncompressed semi-planar YUV %s"
-msgstr "YUV planaire 4:2:0 non compressé"
+msgstr "YUV semi-planaire %s non compressé"
 
-#, fuzzy, c-format
+#, c-format
 msgid "Uncompressed planar YUV %s"
-msgstr "YUV planaire 4:2:0 non compressé"
+msgstr "YUV planaire %s non compressé"
 
-#, fuzzy, c-format
+#, c-format
 msgid "Uncompressed palettized %d-bit %s"
 msgstr "%2$s %1$d bits en palette non compressé"
 
-#, fuzzy, c-format
+#, c-format
 msgid "Uncompressed %d-bit %s"
-msgstr "%2$s %1$d bits en palette non compressé"
+msgstr "%2$s %1$d bits non compressé"
 
 #, c-format
 msgid "DivX MPEG-4 Version %d"
 msgstr "MPEG-4 DivX version %d"
 
-#, fuzzy
 msgid "Uncompressed audio"
-msgstr "YUV non compressé"
+msgstr "Audio non compressé"
 
-#, fuzzy, c-format
+#, c-format
 msgid "Raw %d-bit %s audio"
-msgstr "Audio PCM brut %d bits"
+msgstr "Audio brut %2$s %1$d bits"
 
 msgid "Audio CD source"
 msgstr "Source CD audio"
@@ -332,7 +321,7 @@
 
 #, c-format
 msgid "%s encoder"
-msgstr "Codeur %s"
+msgstr "Encodeur %s"
 
 #, c-format
 msgid "GStreamer element %s"
@@ -417,7 +406,7 @@
 msgstr "Valeur du zoom numérique utilisé lors de la capture de l'image"
 
 msgid "capturing iso speed"
-msgstr "sensibilité iso de la capture"
+msgstr "sensibilité ISO de la capture"
 
 msgid "The ISO speed used when capturing an image"
 msgstr "La sensibilité ISO utilisée lors de la capture de l'image"
@@ -494,7 +483,7 @@
 msgstr "Le mode de flash sélectionné lors de la capture d'une image"
 
 msgid "capturing metering mode"
-msgstr "mode de msure de la capture"
+msgstr "mode de mesure de la capture"
 
 msgid ""
 "The metering mode used while determining exposure for capturing an image"
@@ -544,12 +533,98 @@
 "added/removed."
 msgstr ""
 
+#, fuzzy, c-format
+msgid "Volume: %.0f%%"
+msgstr "Volume"
+
 msgid "Buffering..."
-msgstr ""
+msgstr "Mise en cache…"
 
 msgid "Clock lost, selecting a new one\n"
 msgstr ""
 
+msgid "Reached end of play list."
+msgstr ""
+
+msgid "Paused"
+msgstr ""
+
+#, c-format
+msgid "Now playing %s\n"
+msgstr ""
+
+#, c-format
+msgid "About to finish, preparing next title: %s"
+msgstr ""
+
+#, c-format
+msgid "Playback rate: %.2f"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "Could not change playback rate to %.2f"
+msgstr "Impossible d'utiliser le périphérique pour la lecture en mode stéréo."
+
+msgid "space"
+msgstr ""
+
+msgid "pause/unpause"
+msgstr ""
+
+msgid "q or ESC"
+msgstr ""
+
+msgid "quit"
+msgstr ""
+
+msgid "play next"
+msgstr ""
+
+msgid "play previous"
+msgstr ""
+
+msgid "seek forward"
+msgstr ""
+
+msgid "seek backward"
+msgstr ""
+
+#, fuzzy
+msgid "volume up"
+msgstr "Volume"
+
+msgid "volume down"
+msgstr ""
+
+msgid "increase playback rate"
+msgstr ""
+
+msgid "decrease playback rate"
+msgstr ""
+
+msgid "change playback direction"
+msgstr ""
+
+msgid "enable/disable trick modes"
+msgstr ""
+
+#, fuzzy
+msgid "change audio track"
+msgstr "Ce CD ne contient aucune piste audio"
+
+msgid "change video track"
+msgstr ""
+
+#, fuzzy
+msgid "change subtitle track"
+msgstr "Format de sous-titres Kate"
+
+msgid "show keyboard shortcuts"
+msgstr ""
+
+msgid "Interactive mode - keyboard controls:"
+msgstr ""
+
 msgid "Video sink to use (default is autovideosink)"
 msgstr ""
 
@@ -562,157 +637,28 @@
 msgid "Shuffle playlist"
 msgstr ""
 
-msgid "Interactive control via keyboard"
+msgid "Disable interactive control via the keyboard"
 msgstr ""
 
 msgid "Volume"
-msgstr ""
+msgstr "Volume"
 
 msgid "Playlist file containing input media files"
 msgstr ""
 
+msgid "Do not print any output (apart from errors)"
+msgstr ""
+
 #, c-format
 msgid "Usage: %s FILE1|URI1 [FILE2|URI2] [FILE3|URI3] ..."
-msgstr ""
+msgstr "Usage : %s FICHIER1|URI1 [FICHIER2|URI2] [FICHIER3|URI3] …"
 
 msgid "You must provide at least one filename or URI to play."
 msgstr ""
 
-#, fuzzy
-#~ msgid "Uncompressed %s YUV %s"
-#~ msgstr "YUV non compressé"
+msgid "Press 'k' to see a list of keyboard shortcuts.\n"
+msgstr ""
 
-#~ msgid "Master"
-#~ msgstr "Volume général"
-
-#~ msgid "Bass"
-#~ msgstr "Basses"
-
-#~ msgid "Treble"
-#~ msgstr "Aiguës"
-
-#~ msgid "PCM"
-#~ msgstr "PCM"
-
-#~ msgid "Synth"
-#~ msgstr "Synth"
-
-#~ msgid "Line-in"
-#~ msgstr "Entrée ligne"
-
-#~ msgid "CD"
-#~ msgstr "CD"
-
-#~ msgid "Microphone"
-#~ msgstr "Micro"
-
-#~ msgid "PC Speaker"
-#~ msgstr "Haut-parleur PC"
-
-#~ msgid "Playback"
-#~ msgstr "Lecture"
-
-#~ msgid "Capture"
-#~ msgstr "Enregistrement"
-
-#~ msgid "Connection to %s:%d refused."
-#~ msgstr "Connexion refusée vers %s:%d."
-
-#~ msgid "Uncompressed planar YVU 4:2:0"
-#~ msgstr "YVU planaire 4:2:0 non compressé"
-
-#~ msgid "Uncompressed packed YUV 4:1:0"
-#~ msgstr "YUV empaqueté 4:1:0 non compressé"
-
-#~ msgid "Uncompressed packed YVU 4:1:0"
-#~ msgstr "YVU empaqueté 4:1:0 non compressé"
-
-#~ msgid "Uncompressed packed YUV 4:1:1"
-#~ msgstr "YUV empaqueté 4:1:1 non compressé"
-
-#~ msgid "Uncompressed packed YUV 4:4:4"
-#~ msgstr "YUV empaqueté 4:4:4 non compressé"
-
-#~ msgid "Uncompressed planar YUV 4:2:2"
-#~ msgstr "YUV planaire 4:2:2 non compressé"
-
-#~ msgid "Uncompressed planar YUV 4:1:1"
-#~ msgstr "YUV planaire 4:1:1 non compressé"
-
-#~ msgid "Uncompressed black and white Y-plane"
-#~ msgstr "Plan Y noir et blanc non compressé"
-
-#~ msgid "Raw PCM audio"
-#~ msgstr "Audio PCM brut"
-
-#~ msgid "Raw %d-bit floating-point audio"
-#~ msgstr "Audio brut virgule flottante %d bits"
-
-#~ msgid "Raw floating-point audio"
-#~ msgstr "Audio brut virgule flottante"
-
-#~ msgid "Could not open vfs file \"%s\" for writing: %s."
-#~ msgstr "Impossible d'ouvrir le fichier vfs « %s » en écriture : %s."
-
-#~ msgid "No filename given"
-#~ msgstr "Aucun nom de fichier indiqué"
-
-#~ msgid "Could not close vfs file \"%s\"."
-#~ msgstr "Impossible de fermer le fichier vfs « %s »."
-
-#~ msgid "Error while writing to file \"%s\"."
-#~ msgstr "Erreur lors de l'écriture dans le fichier « %s »."
-
-#~ msgid "Invalid subtitle URI \"%s\", subtitles disabled."
+#~ msgid "A %s plugin is required to play this stream, but not installed."
 #~ msgstr ""
-#~ "URI de sous-titres « %s » non valide, les sous-titres sont désactivés."
-
-#~ msgid "RTSP streams cannot be played yet."
-#~ msgstr "Il n'est pas encore possible de lire les flux RTSP."
-
-#~ msgid ""
-#~ "Only a subtitle stream was detected. Either you are loading a subtitle "
-#~ "file or some other type of text file, or the media file was not "
-#~ "recognized."
-#~ msgstr ""
-#~ "Seul un flux de sous-titres a été détecté. Soit vous essayez d'ouvrir un "
-#~ "fichier de sous-titres ou un autre type de fichier texte, soit le fichier "
-#~ "multimédia n'a pas été reconnu."
-
-#~ msgid ""
-#~ "You do not have a decoder installed to handle this file. You might need "
-#~ "to install the necessary plugins."
-#~ msgstr ""
-#~ "Aucun décodeur n'est installé pour gérer ce fichier. Vous devriez "
-#~ "probablement installer des greffons supplémentaires."
-
-#~ msgid "This is not a media file"
-#~ msgstr "Ceci n'est pas un fichier multimédia"
-
-#~ msgid "A subtitle stream was detected, but no video stream."
-#~ msgstr "Un flux de sous-titres a été détecté, mais pas de flux vidéo."
-
-#~ msgid "Both autovideosink and xvimagesink elements are missing."
-#~ msgstr "Les éléments autovideosink et xvimagesink sont tous deux manquants."
-
-#~ msgid "Both autoaudiosink and alsasink elements are missing."
-#~ msgstr "Les éléments autoaudiosink et alsasink sont tous deux manquants."
-
-#~ msgid "No device specified."
-#~ msgstr "Aucun périphérique indiqué."
-
-#~ msgid "Device \"%s\" does not exist."
-#~ msgstr "Le périphérique « %s » n'existe pas."
-
-#~ msgid "Device \"%s\" is already being used."
-#~ msgstr "Le périphérique « %s » est déjà en cours d'utilisation."
-
-#~ msgid "Could not open device \"%s\" for reading and writing."
-#~ msgstr "Impossible d'ouvrir le périphérique « %s » en lecture et écriture."
-
-#~ msgid "Error while sending gdp header data to \"%s:%d\"."
-#~ msgstr "Erreur lors de l'envoi de données d'en-tête gdp vers « %s:%d »."
-
-#~ msgid "Error while sending gdp payload data to \"%s:%d\"."
-#~ msgstr ""
-#~ "Erreur lors de l'envoi de données de charge utile gdp vers « %s:%d »."
+#~ "Un greffon %s est requis pour lire ce flux, mais il n'est pas installé."
diff --git a/po/gl.gmo b/po/gl.gmo
index 9efbba8..89ba5ff 100644
--- a/po/gl.gmo
+++ b/po/gl.gmo
Binary files differ
diff --git a/po/gl.po b/po/gl.po
index 44eb43a..259728c 100644
--- a/po/gl.po
+++ b/po/gl.po
@@ -8,7 +8,7 @@
 msgstr ""
 "Project-Id-Version: gst-plugins-base 1.0.3\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2014-12-18 12:05+0100\n"
+"POT-Creation-Date: 2015-09-18 19:09+0200\n"
 "PO-Revision-Date: 2012-12-15 03:40+0200\n"
 "Last-Translator: Fran Dieguez <frandieguez@ubuntu.com>\n"
 "Language-Team: Galician <proxecto@trasno.net>\n"
@@ -84,11 +84,6 @@
 msgid "Missing element '%s' - check your GStreamer installation."
 msgstr "Falta o elemento «%s» - comprobe a instalación do GStreamer."
 
-#, c-format
-msgid "A %s plugin is required to play this stream, but not installed."
-msgstr ""
-"Precísase un engadido %s que non está instalado para reproducir este fluxo."
-
 msgid "Could not determine type of stream"
 msgstr "Non foi posíbel determinar o tipo de fluxo."
 
@@ -523,12 +518,98 @@
 "added/removed."
 msgstr ""
 
+#, c-format
+msgid "Volume: %.0f%%"
+msgstr ""
+
 msgid "Buffering..."
 msgstr ""
 
 msgid "Clock lost, selecting a new one\n"
 msgstr ""
 
+msgid "Reached end of play list."
+msgstr ""
+
+msgid "Paused"
+msgstr ""
+
+#, c-format
+msgid "Now playing %s\n"
+msgstr ""
+
+#, c-format
+msgid "About to finish, preparing next title: %s"
+msgstr ""
+
+#, c-format
+msgid "Playback rate: %.2f"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "Could not change playback rate to %.2f"
+msgstr ""
+"Non foi posíbel abrir o dispositivo para a reprodución en modo estéreo."
+
+msgid "space"
+msgstr ""
+
+msgid "pause/unpause"
+msgstr ""
+
+msgid "q or ESC"
+msgstr ""
+
+msgid "quit"
+msgstr ""
+
+msgid "play next"
+msgstr ""
+
+msgid "play previous"
+msgstr ""
+
+msgid "seek forward"
+msgstr ""
+
+msgid "seek backward"
+msgstr ""
+
+msgid "volume up"
+msgstr ""
+
+msgid "volume down"
+msgstr ""
+
+msgid "increase playback rate"
+msgstr ""
+
+msgid "decrease playback rate"
+msgstr ""
+
+msgid "change playback direction"
+msgstr ""
+
+msgid "enable/disable trick modes"
+msgstr ""
+
+#, fuzzy
+msgid "change audio track"
+msgstr "Este CD non contén pistas de son"
+
+msgid "change video track"
+msgstr ""
+
+#, fuzzy
+msgid "change subtitle track"
+msgstr "Formato de subtítulos Kate"
+
+msgid "show keyboard shortcuts"
+msgstr ""
+
+msgid "Interactive mode - keyboard controls:"
+msgstr ""
+
 msgid "Video sink to use (default is autovideosink)"
 msgstr ""
 
@@ -541,7 +622,7 @@
 msgid "Shuffle playlist"
 msgstr ""
 
-msgid "Interactive control via keyboard"
+msgid "Disable interactive control via the keyboard"
 msgstr ""
 
 msgid "Volume"
@@ -550,6 +631,9 @@
 msgid "Playlist file containing input media files"
 msgstr ""
 
+msgid "Do not print any output (apart from errors)"
+msgstr ""
+
 #, c-format
 msgid "Usage: %s FILE1|URI1 [FILE2|URI2] [FILE3|URI3] ..."
 msgstr ""
@@ -557,6 +641,14 @@
 msgid "You must provide at least one filename or URI to play."
 msgstr ""
 
+msgid "Press 'k' to see a list of keyboard shortcuts.\n"
+msgstr ""
+
+#~ msgid "A %s plugin is required to play this stream, but not installed."
+#~ msgstr ""
+#~ "Precísase un engadido %s que non está instalado para reproducir este "
+#~ "fluxo."
+
 #~ msgid "Uncompressed %s YUV %s"
 #~ msgstr "%s YUV %s sen comprimir"
 
diff --git a/po/gst-plugins-base-1.0.pot b/po/gst-plugins-base-1.0.pot
index d0ad948..a60c227 100644
--- a/po/gst-plugins-base-1.0.pot
+++ b/po/gst-plugins-base-1.0.pot
@@ -5,9 +5,9 @@
 #, fuzzy
 msgid ""
 msgstr ""
-"Project-Id-Version: gst-plugins-base 1.4.5\n"
+"Project-Id-Version: gst-plugins-base 1.5.91\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2014-12-18 12:05+0100\n"
+"POT-Creation-Date: 2015-09-18 19:09+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"
@@ -39,7 +39,7 @@
 msgid "Could not open audio device for playback."
 msgstr ""
 
-#: ext/alsa/gstalsasink.c:1078
+#: ext/alsa/gstalsasink.c:1081
 msgid "Error outputting to audio device. The device has been disconnected."
 msgstr ""
 
@@ -56,13 +56,13 @@
 msgid "Could not open device for recording in %d-channel mode"
 msgstr ""
 
-#: ext/alsa/gstalsasrc.c:738
+#: ext/alsa/gstalsasrc.c:737
 msgid ""
 "Could not open audio device for recording. Device is being used by another "
 "application."
 msgstr ""
 
-#: ext/alsa/gstalsasrc.c:743
+#: ext/alsa/gstalsasrc.c:742
 msgid "Could not open audio device for recording."
 msgstr ""
 
@@ -82,40 +82,34 @@
 msgid "Could not read CD."
 msgstr ""
 
-#: ext/ogg/gstoggdemux.c:4564
+#: ext/ogg/gstoggdemux.c:4834
 msgid "Internal data stream error."
 msgstr ""
 
-#: gst/encoding/gstencodebin.c:1487 gst/playback/gstplaybin2.c:3164
+#: gst/encoding/gstencodebin.c:1571 gst/playback/gstplaybin2.c:3359
 #: gst/playback/gstplaysink.c:1483 gst/playback/gstplaysink.c:1500
 #: gst/playback/gstplaysink.c:1834 gst/playback/gstplaysink.c:1863
 #: gst/playback/gstplaysink.c:2443 gst/playback/gstplaysink.c:2492
 #: gst/playback/gstplaysink.c:2507 gst/playback/gstplaysink.c:2532
 #: gst/playback/gstplaysink.c:2564 gst/playback/gstplaysink.c:2709
-#: gst/playback/gstplaysink.c:2737 gst/playback/gstplaysink.c:3130
-#: gst/playback/gstplaysink.c:3139 gst/playback/gstplaysink.c:3148
-#: gst/playback/gstplaysink.c:3157 gst/playback/gstplaysink.c:4363
-#: gst/playback/gstplaysinkconvertbin.c:97
-#: gst/playback/gstplaysinkconvertbin.c:117
-#: gst/playback/gsturidecodebin.c:1479
+#: gst/playback/gstplaysink.c:2737 gst/playback/gstplaysink.c:3115
+#: gst/playback/gstplaysink.c:3124 gst/playback/gstplaysink.c:3133
+#: gst/playback/gstplaysink.c:3142 gst/playback/gstplaysink.c:3517
+#: gst/playback/gstplaysink.c:4387 gst/playback/gstplaysinkconvertbin.c:97
+#: gst/playback/gstplaysinkconvertbin.c:117 gst/playback/gsturidecodebin.c:1490
 #, c-format
 msgid "Missing element '%s' - check your GStreamer installation."
 msgstr ""
 
-#: gst/playback/gstdecodebin2.c:1810
-#, c-format
-msgid "A %s plugin is required to play this stream, but not installed."
-msgstr ""
-
-#: gst/playback/gstdecodebin2.c:1817
+#: gst/playback/gstdecodebin2.c:1847
 msgid "Could not determine type of stream"
 msgstr ""
 
-#: gst/playback/gstdecodebin2.c:2514
+#: gst/playback/gstdecodebin2.c:2818
 msgid "This appears to be a text file"
 msgstr ""
 
-#: gst/playback/gstplaybin2.c:5227
+#: gst/playback/gstplaybin2.c:5353
 msgid "Could not create \"uridecodebin\" element."
 msgstr ""
 
@@ -146,34 +140,34 @@
 msgid "Custom text sink element is not usable."
 msgstr ""
 
-#: gst/playback/gstplaysink.c:2862
+#: gst/playback/gstplaysink.c:2852
 msgid "No volume control found"
 msgstr ""
 
-#: gst/playback/gstplaysink.c:2892
+#: gst/playback/gstplaysink.c:2882
 #, c-format
 msgid "Both autoaudiosink and %s elements are missing."
 msgstr ""
 
-#: gst/playback/gstplaysink.c:2896
+#: gst/playback/gstplaysink.c:2886
 msgid "The autoaudiosink element is missing."
 msgstr ""
 
-#: gst/playback/gstplaysink.c:2901
+#: gst/playback/gstplaysink.c:2891
 #, c-format
 msgid "Configured audiosink %s is not working."
 msgstr ""
 
-#: gst/playback/gstplaysink.c:2905
+#: gst/playback/gstplaysink.c:2895
 #, c-format
 msgid "Both autoaudiosink and %s elements are not working."
 msgstr ""
 
-#: gst/playback/gstplaysink.c:2909
+#: gst/playback/gstplaysink.c:2899
 msgid "The autoaudiosink element is not working."
 msgstr ""
 
-#: gst/playback/gstplaysink.c:3233 gst/playback/gstplaysink.c:3238
+#: gst/playback/gstplaysink.c:3218 gst/playback/gstplaysink.c:3223
 msgid "Can't play a text file without video or visualizations."
 msgstr ""
 
@@ -182,34 +176,34 @@
 msgid "No decoder available for type '%s'."
 msgstr ""
 
-#: gst/playback/gsturidecodebin.c:1385
+#: gst/playback/gsturidecodebin.c:1396
 msgid "No URI specified to play from."
 msgstr ""
 
-#: gst/playback/gsturidecodebin.c:1391
+#: gst/playback/gsturidecodebin.c:1402
 #, c-format
 msgid "Invalid URI \"%s\"."
 msgstr ""
 
-#: gst/playback/gsturidecodebin.c:1398
+#: gst/playback/gsturidecodebin.c:1409
 msgid "This stream type cannot be played yet."
 msgstr ""
 
-#: gst/playback/gsturidecodebin.c:1416
+#: gst/playback/gsturidecodebin.c:1427
 #, c-format
 msgid "No URI handler implemented for \"%s\"."
 msgstr ""
 
-#: gst/playback/gsturidecodebin.c:2285
+#: gst/playback/gsturidecodebin.c:2300
 msgid "Source element is invalid."
 msgstr ""
 
-#: gst/tcp/gsttcpclientsink.c:214
+#: gst/tcp/gsttcpclientsink.c:215
 #, c-format
 msgid "Error while sending data to \"%s:%d\"."
 msgstr ""
 
-#: gst-libs/gst/audio/gstaudiobasesrc.c:860
+#: gst-libs/gst/audio/gstaudiobasesrc.c:863
 msgid "Can't record audio fast enough"
 msgstr ""
 
@@ -247,7 +241,7 @@
 msgid "Windows Media Speech"
 msgstr ""
 
-#: gst-libs/gst/pbutils/descriptions.c:200
+#: gst-libs/gst/pbutils/descriptions.c:201
 msgid "CYUV Lossless"
 msgstr ""
 
@@ -295,127 +289,127 @@
 msgid "Kate subtitle format"
 msgstr ""
 
-#: gst-libs/gst/pbutils/descriptions.c:354
-#: gst-libs/gst/pbutils/descriptions.c:357
-#: gst-libs/gst/pbutils/descriptions.c:407
+#: gst-libs/gst/pbutils/descriptions.c:451
+#: gst-libs/gst/pbutils/descriptions.c:454
+#: gst-libs/gst/pbutils/descriptions.c:504
 msgid "Uncompressed video"
 msgstr ""
 
-#: gst-libs/gst/pbutils/descriptions.c:362
+#: gst-libs/gst/pbutils/descriptions.c:459
 msgid "Uncompressed gray"
 msgstr ""
 
-#: gst-libs/gst/pbutils/descriptions.c:385
+#: gst-libs/gst/pbutils/descriptions.c:482
 #, c-format
 msgid "Uncompressed packed YUV %s"
 msgstr ""
 
-#: gst-libs/gst/pbutils/descriptions.c:387
+#: gst-libs/gst/pbutils/descriptions.c:484
 #, c-format
 msgid "Uncompressed semi-planar YUV %s"
 msgstr ""
 
-#: gst-libs/gst/pbutils/descriptions.c:389
+#: gst-libs/gst/pbutils/descriptions.c:486
 #, c-format
 msgid "Uncompressed planar YUV %s"
 msgstr ""
 
-#: gst-libs/gst/pbutils/descriptions.c:400
+#: gst-libs/gst/pbutils/descriptions.c:497
 #, c-format
 msgid "Uncompressed palettized %d-bit %s"
 msgstr ""
 
-#: gst-libs/gst/pbutils/descriptions.c:403
+#: gst-libs/gst/pbutils/descriptions.c:500
 #, c-format
 msgid "Uncompressed %d-bit %s"
 msgstr ""
 
-#: gst-libs/gst/pbutils/descriptions.c:460
+#: gst-libs/gst/pbutils/descriptions.c:582
 #, c-format
 msgid "DivX MPEG-4 Version %d"
 msgstr ""
 
-#: gst-libs/gst/pbutils/descriptions.c:695
+#: gst-libs/gst/pbutils/descriptions.c:829
 msgid "Uncompressed audio"
 msgstr ""
 
-#: gst-libs/gst/pbutils/descriptions.c:701
+#: gst-libs/gst/pbutils/descriptions.c:835
 #, c-format
 msgid "Raw %d-bit %s audio"
 msgstr ""
 
-#: gst-libs/gst/pbutils/descriptions.c:801
+#: gst-libs/gst/pbutils/descriptions.c:935
 msgid "Audio CD source"
 msgstr ""
 
-#: gst-libs/gst/pbutils/descriptions.c:804
+#: gst-libs/gst/pbutils/descriptions.c:938
 msgid "DVD source"
 msgstr ""
 
-#: gst-libs/gst/pbutils/descriptions.c:807
+#: gst-libs/gst/pbutils/descriptions.c:941
 msgid "Real Time Streaming Protocol (RTSP) source"
 msgstr ""
 
-#: gst-libs/gst/pbutils/descriptions.c:811
+#: gst-libs/gst/pbutils/descriptions.c:945
 msgid "Microsoft Media Server (MMS) protocol source"
 msgstr ""
 
-#: gst-libs/gst/pbutils/descriptions.c:819
-#, c-format
-msgid "%s protocol source"
-msgstr ""
-
-#: gst-libs/gst/pbutils/descriptions.c:891
-#, c-format
-msgid "%s video RTP depayloader"
-msgstr ""
-
-#: gst-libs/gst/pbutils/descriptions.c:893
-#, c-format
-msgid "%s audio RTP depayloader"
-msgstr ""
-
-#: gst-libs/gst/pbutils/descriptions.c:895
-#, c-format
-msgid "%s RTP depayloader"
-msgstr ""
-
-#: gst-libs/gst/pbutils/descriptions.c:902
-#, c-format
-msgid "%s demuxer"
-msgstr ""
-
-#: gst-libs/gst/pbutils/descriptions.c:904
-#, c-format
-msgid "%s decoder"
-msgstr ""
-
-#: gst-libs/gst/pbutils/descriptions.c:942
-#, c-format
-msgid "%s video RTP payloader"
-msgstr ""
-
-#: gst-libs/gst/pbutils/descriptions.c:944
-#, c-format
-msgid "%s audio RTP payloader"
-msgstr ""
-
-#: gst-libs/gst/pbutils/descriptions.c:946
-#, c-format
-msgid "%s RTP payloader"
-msgstr ""
-
 #: gst-libs/gst/pbutils/descriptions.c:953
 #, c-format
+msgid "%s protocol source"
+msgstr ""
+
+#: gst-libs/gst/pbutils/descriptions.c:1025
+#, c-format
+msgid "%s video RTP depayloader"
+msgstr ""
+
+#: gst-libs/gst/pbutils/descriptions.c:1027
+#, c-format
+msgid "%s audio RTP depayloader"
+msgstr ""
+
+#: gst-libs/gst/pbutils/descriptions.c:1029
+#, c-format
+msgid "%s RTP depayloader"
+msgstr ""
+
+#: gst-libs/gst/pbutils/descriptions.c:1036
+#, c-format
+msgid "%s demuxer"
+msgstr ""
+
+#: gst-libs/gst/pbutils/descriptions.c:1038
+#, c-format
+msgid "%s decoder"
+msgstr ""
+
+#: gst-libs/gst/pbutils/descriptions.c:1076
+#, c-format
+msgid "%s video RTP payloader"
+msgstr ""
+
+#: gst-libs/gst/pbutils/descriptions.c:1078
+#, c-format
+msgid "%s audio RTP payloader"
+msgstr ""
+
+#: gst-libs/gst/pbutils/descriptions.c:1080
+#, c-format
+msgid "%s RTP payloader"
+msgstr ""
+
+#: gst-libs/gst/pbutils/descriptions.c:1087
+#, c-format
 msgid "%s muxer"
 msgstr ""
 
-#: gst-libs/gst/pbutils/descriptions.c:955
+#: gst-libs/gst/pbutils/descriptions.c:1089
 #, c-format
 msgid "%s encoder"
 msgstr ""
 
-#: gst-libs/gst/pbutils/descriptions.c:987
+#: gst-libs/gst/pbutils/descriptions.c:1121
 #, c-format
 msgid "GStreamer element %s"
 msgstr ""
@@ -665,57 +659,175 @@
 msgid "Initial key in which the sound starts"
 msgstr ""
 
-#: tools/gst-device-monitor.c:123 tools/gst-play.c:665
+#: tools/gst-device-monitor.c:141 tools/gst-play.c:1105
 msgid "Print version information and exit"
 msgstr ""
 
-#: tools/gst-device-monitor.c:125
+#: tools/gst-device-monitor.c:143
 msgid ""
 "Don't exit after showing the initial device list, but wait for devices to "
 "added/removed."
 msgstr ""
 
-#: tools/gst-play.c:219
+#: tools/gst-play.c:249
+#, c-format
+msgid "Volume: %.0f%%"
+msgstr ""
+
+#: tools/gst-play.c:288
 msgid "Buffering..."
 msgstr ""
 
-#: tools/gst-play.c:240
+#: tools/gst-play.c:309
 msgid "Clock lost, selecting a new one\n"
 msgstr ""
 
-#: tools/gst-play.c:667
+#: tools/gst-play.c:339 tools/gst-play.c:385 tools/gst-play.c:737
+#: tools/gst-play.c:1019
+msgid "Reached end of play list."
+msgstr ""
+
+#: tools/gst-play.c:467
+msgid "Paused"
+msgstr ""
+
+#: tools/gst-play.c:525
+#, c-format
+msgid "Now playing %s\n"
+msgstr ""
+
+#: tools/gst-play.c:588
+#, c-format
+msgid "About to finish, preparing next title: %s"
+msgstr ""
+
+#: tools/gst-play.c:833
+#, c-format
+msgid "Playback rate: %.2f"
+msgstr ""
+
+#: tools/gst-play.c:837
+#, c-format
+msgid "Could not change playback rate to %.2f"
+msgstr ""
+
+#: tools/gst-play.c:961
+msgid "space"
+msgstr ""
+
+#: tools/gst-play.c:961
+msgid "pause/unpause"
+msgstr ""
+
+#: tools/gst-play.c:962
+msgid "q or ESC"
+msgstr ""
+
+#: tools/gst-play.c:962
+msgid "quit"
+msgstr ""
+
+#: tools/gst-play.c:963
+msgid "play next"
+msgstr ""
+
+#: tools/gst-play.c:964
+msgid "play previous"
+msgstr ""
+
+#: tools/gst-play.c:965
+msgid "seek forward"
+msgstr ""
+
+#: tools/gst-play.c:966
+msgid "seek backward"
+msgstr ""
+
+#: tools/gst-play.c:967
+msgid "volume up"
+msgstr ""
+
+#: tools/gst-play.c:968
+msgid "volume down"
+msgstr ""
+
+#: tools/gst-play.c:969
+msgid "increase playback rate"
+msgstr ""
+
+#: tools/gst-play.c:970
+msgid "decrease playback rate"
+msgstr ""
+
+#: tools/gst-play.c:971
+msgid "change playback direction"
+msgstr ""
+
+#: tools/gst-play.c:972
+msgid "enable/disable trick modes"
+msgstr ""
+
+#: tools/gst-play.c:973
+msgid "change audio track"
+msgstr ""
+
+#: tools/gst-play.c:974
+msgid "change video track"
+msgstr ""
+
+#: tools/gst-play.c:975
+msgid "change subtitle track"
+msgstr ""
+
+#: tools/gst-play.c:976
+msgid "show keyboard shortcuts"
+msgstr ""
+
+#: tools/gst-play.c:979
+msgid "Interactive mode - keyboard controls:"
+msgstr ""
+
+#: tools/gst-play.c:1107
 msgid "Video sink to use (default is autovideosink)"
 msgstr ""
 
-#: tools/gst-play.c:669
+#: tools/gst-play.c:1109
 msgid "Audio sink to use (default is autoaudiosink)"
 msgstr ""
 
-#: tools/gst-play.c:671
+#: tools/gst-play.c:1111
 msgid "Enable gapless playback"
 msgstr ""
 
-#: tools/gst-play.c:673
+#: tools/gst-play.c:1113
 msgid "Shuffle playlist"
 msgstr ""
 
-#: tools/gst-play.c:675
-msgid "Interactive control via keyboard"
+#: tools/gst-play.c:1116
+msgid "Disable interactive control via the keyboard"
 msgstr ""
 
-#: tools/gst-play.c:677
+#: tools/gst-play.c:1118
 msgid "Volume"
 msgstr ""
 
-#: tools/gst-play.c:679
+#: tools/gst-play.c:1120
 msgid "Playlist file containing input media files"
 msgstr ""
 
-#: tools/gst-play.c:748
+#: tools/gst-play.c:1122
+msgid "Do not print any output (apart from errors)"
+msgstr ""
+
+#: tools/gst-play.c:1191
 #, c-format
 msgid "Usage: %s FILE1|URI1 [FILE2|URI2] [FILE3|URI3] ..."
 msgstr ""
 
-#: tools/gst-play.c:752
+#: tools/gst-play.c:1195
 msgid "You must provide at least one filename or URI to play."
 msgstr ""
+
+#: tools/gst-play.c:1234
+msgid "Press 'k' to see a list of keyboard shortcuts.\n"
+msgstr ""
diff --git a/po/hr.gmo b/po/hr.gmo
index cdce52a..3c1406e 100644
--- a/po/hr.gmo
+++ b/po/hr.gmo
Binary files differ
diff --git a/po/hr.po b/po/hr.po
index 14c06c9..d16ff33 100644
--- a/po/hr.po
+++ b/po/hr.po
@@ -6,7 +6,7 @@
 msgstr ""
 "Project-Id-Version: gst-plugins-base 0.10.32.2\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2014-12-18 12:05+0100\n"
+"POT-Creation-Date: 2015-09-18 19:09+0200\n"
 "PO-Revision-Date: 2012-04-16 04:19+0200\n"
 "Last-Translator: Tomislav Krznar <tomislav.krznar@gmail.com>\n"
 "Language-Team: Croatian <lokalizacija@linux.hr>\n"
@@ -79,11 +79,6 @@
 msgid "Missing element '%s' - check your GStreamer installation."
 msgstr "Nedostaje element „%s” - provjerite vašu GStreamer instalaciju."
 
-#, c-format
-msgid "A %s plugin is required to play this stream, but not installed."
-msgstr ""
-"Potreban je priključak %s za reprodukciju ovog niza, ali nije instaliran."
-
 msgid "Could not determine type of stream"
 msgstr "Ne mogu odrediti vrstu niza"
 
@@ -523,12 +518,97 @@
 "added/removed."
 msgstr ""
 
+#, c-format
+msgid "Volume: %.0f%%"
+msgstr ""
+
 msgid "Buffering..."
 msgstr ""
 
 msgid "Clock lost, selecting a new one\n"
 msgstr ""
 
+msgid "Reached end of play list."
+msgstr ""
+
+msgid "Paused"
+msgstr ""
+
+#, c-format
+msgid "Now playing %s\n"
+msgstr ""
+
+#, c-format
+msgid "About to finish, preparing next title: %s"
+msgstr ""
+
+#, c-format
+msgid "Playback rate: %.2f"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "Could not change playback rate to %.2f"
+msgstr "Ne mogu otvoriti uređaj za reprodukciju u stereo načinu."
+
+msgid "space"
+msgstr ""
+
+msgid "pause/unpause"
+msgstr ""
+
+msgid "q or ESC"
+msgstr ""
+
+msgid "quit"
+msgstr ""
+
+msgid "play next"
+msgstr ""
+
+msgid "play previous"
+msgstr ""
+
+msgid "seek forward"
+msgstr ""
+
+msgid "seek backward"
+msgstr ""
+
+msgid "volume up"
+msgstr ""
+
+msgid "volume down"
+msgstr ""
+
+msgid "increase playback rate"
+msgstr ""
+
+msgid "decrease playback rate"
+msgstr ""
+
+msgid "change playback direction"
+msgstr ""
+
+msgid "enable/disable trick modes"
+msgstr ""
+
+#, fuzzy
+msgid "change audio track"
+msgstr "Ovaj CD nema zvučne pjesme"
+
+msgid "change video track"
+msgstr ""
+
+#, fuzzy
+msgid "change subtitle track"
+msgstr "Kate oblik titlova"
+
+msgid "show keyboard shortcuts"
+msgstr ""
+
+msgid "Interactive mode - keyboard controls:"
+msgstr ""
+
 msgid "Video sink to use (default is autovideosink)"
 msgstr ""
 
@@ -541,7 +621,7 @@
 msgid "Shuffle playlist"
 msgstr ""
 
-msgid "Interactive control via keyboard"
+msgid "Disable interactive control via the keyboard"
 msgstr ""
 
 msgid "Volume"
@@ -550,6 +630,9 @@
 msgid "Playlist file containing input media files"
 msgstr ""
 
+msgid "Do not print any output (apart from errors)"
+msgstr ""
+
 #, c-format
 msgid "Usage: %s FILE1|URI1 [FILE2|URI2] [FILE3|URI3] ..."
 msgstr ""
@@ -557,6 +640,13 @@
 msgid "You must provide at least one filename or URI to play."
 msgstr ""
 
+msgid "Press 'k' to see a list of keyboard shortcuts.\n"
+msgstr ""
+
+#~ msgid "A %s plugin is required to play this stream, but not installed."
+#~ msgstr ""
+#~ "Potreban je priključak %s za reprodukciju ovog niza, ali nije instaliran."
+
 #, fuzzy
 #~ msgid "Uncompressed %s YUV %s"
 #~ msgstr "Nekomprimirani YUV"
diff --git a/po/hu.gmo b/po/hu.gmo
index e4ed892..dacd445 100644
--- a/po/hu.gmo
+++ b/po/hu.gmo
Binary files differ
diff --git a/po/hu.po b/po/hu.po
index 19c366a..b10fb9b 100644
--- a/po/hu.po
+++ b/po/hu.po
@@ -4,13 +4,13 @@
 #
 # Laszlo Dvornik <dvornik@invitel.hu>, 2004.
 # Gabor Kelemen <kelemeng@gnome.hu>, 2006, 2007, 2008, 2009, 2012.
-# Balázs Úr <urbalazs@gmail.com>, 2014.
+# Balázs Úr <urbalazs@gmail.com>, 2014, 2015.
 msgid ""
 msgstr ""
-"Project-Id-Version: gst-plugins-base 1.4.0\n"
+"Project-Id-Version: gst-plugins-base 1.5.2\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2014-12-18 12:05+0100\n"
-"PO-Revision-Date: 2014-07-26 00:28+0200\n"
+"POT-Creation-Date: 2015-09-18 19:09+0200\n"
+"PO-Revision-Date: 2015-06-30 13:34+0200\n"
 "Last-Translator: Balázs Úr <urbalazs@gmail.com>\n"
 "Language-Team: Hungarian <translation-team-hu@lists.sourceforge.net>\n"
 "Language: hu\n"
@@ -83,12 +83,6 @@
 msgid "Missing element '%s' - check your GStreamer installation."
 msgstr "A(z) „%s” elem hiányzik - ellenőrizze a Gstreamer telepítését."
 
-#, c-format
-msgid "A %s plugin is required to play this stream, but not installed."
-msgstr ""
-"Az adatfolyam lejátszásához egy %s bővítmény szükséges, de az nincs "
-"telepítve."
-
 msgid "Could not determine type of stream"
 msgstr "Nem határozható meg az adatfolyam típusa"
 
@@ -522,12 +516,95 @@
 "Ne lépjen ki a kezdeti eszközlista megjelenítése után, de várjon az eszközök "
 "hozzáadására/eltávolítására."
 
+#, c-format
+msgid "Volume: %.0f%%"
+msgstr "Hangerő: %.0f%%"
+
 msgid "Buffering..."
 msgstr "Pufferelés…"
 
 msgid "Clock lost, selecting a new one\n"
 msgstr "Óra elveszítve, egy új kiválasztása\n"
 
+msgid "Reached end of play list."
+msgstr "A lejátszólista vége elérve."
+
+msgid "Paused"
+msgstr "Szüneteltetve"
+
+#, c-format
+msgid "Now playing %s\n"
+msgstr "Most játszott: %s\n"
+
+#, c-format
+msgid "About to finish, preparing next title: %s"
+msgstr "Hamarosan befejeződik, következő cím előkészítése: %s"
+
+#, c-format
+msgid "Playback rate: %.2f"
+msgstr "Lejátszási sebesség: %.2f"
+
+#, c-format
+msgid "Could not change playback rate to %.2f"
+msgstr "Nem lehet megváltoztatni a lejátszási sebességet erre: %.2f"
+
+msgid "space"
+msgstr "szóköz"
+
+msgid "pause/unpause"
+msgstr "szünet/folytatás"
+
+msgid "q or ESC"
+msgstr "q vagy ESC"
+
+msgid "quit"
+msgstr "kilépés"
+
+msgid "play next"
+msgstr "következő lejátszása"
+
+msgid "play previous"
+msgstr "előző lejátszása"
+
+msgid "seek forward"
+msgstr "tekerés előre"
+
+msgid "seek backward"
+msgstr "tekerés hátra"
+
+msgid "volume up"
+msgstr "hangerő fel"
+
+msgid "volume down"
+msgstr "hangerő le"
+
+msgid "increase playback rate"
+msgstr "lejátszási sebesség növelése"
+
+msgid "decrease playback rate"
+msgstr "lejátszási sebesség csökkentése"
+
+msgid "change playback direction"
+msgstr "lejátszási irány megváltoztatása"
+
+msgid "enable/disable trick modes"
+msgstr "trükk módok engedélyezése/letiltása"
+
+msgid "change audio track"
+msgstr "hangsáv megváltoztatása"
+
+msgid "change video track"
+msgstr "videosáv megváltoztatása"
+
+msgid "change subtitle track"
+msgstr "feliratsáv megváltoztatása"
+
+msgid "show keyboard shortcuts"
+msgstr "gyorsbillentyűk megjelenítése"
+
+msgid "Interactive mode - keyboard controls:"
+msgstr "Interaktív mód - billentyűzetvezérlők:"
+
 msgid "Video sink to use (default is autovideosink)"
 msgstr "Használandó videosüllyesztés (az alapértelmezett az autovideosink)"
 
@@ -540,8 +617,8 @@
 msgid "Shuffle playlist"
 msgstr "Lejátszólista keverése"
 
-msgid "Interactive control via keyboard"
-msgstr "Interaktív vezérlés billentyűzettel"
+msgid "Disable interactive control via the keyboard"
+msgstr "Interaktív vezérlés letiltása a billentyűzeten keresztül"
 
 msgid "Volume"
 msgstr "Hangerő"
@@ -549,6 +626,9 @@
 msgid "Playlist file containing input media files"
 msgstr "Bemeneti médiafájlokat tartalmazó lejátszólista fájl"
 
+msgid "Do not print any output (apart from errors)"
+msgstr "Ne írjon ki semmilyen kimenetet (a hibákon kívül)"
+
 #, c-format
 msgid "Usage: %s FILE1|URI1 [FILE2|URI2] [FILE3|URI3] ..."
 msgstr "Használat: %s FÁJL1|URI1 [FÁJL2|URI2] [FÁJL3|URI3] …"
@@ -556,6 +636,15 @@
 msgid "You must provide at least one filename or URI to play."
 msgstr "Meg kell adnia legalább egy fájlnevet vagy URI-t a lejátszáshoz."
 
+msgid "Press 'k' to see a list of keyboard shortcuts.\n"
+msgstr ""
+"Nyomja meg a „k” billentyűt a gyorsbillentyűk listájának megtekintéséhez.\n"
+
+#~ msgid "A %s plugin is required to play this stream, but not installed."
+#~ msgstr ""
+#~ "Az adatfolyam lejátszásához egy %s bővítmény szükséges, de az nincs "
+#~ "telepítve."
+
 #~ msgid "Uncompressed %s YUV %s"
 #~ msgstr "Tömörítetlen %s YUV %s"
 
diff --git a/po/id.gmo b/po/id.gmo
index a168067..df5dca4 100644
--- a/po/id.gmo
+++ b/po/id.gmo
Binary files differ
diff --git a/po/id.po b/po/id.po
index c7c2306..38728ca 100644
--- a/po/id.po
+++ b/po/id.po
@@ -7,7 +7,7 @@
 msgstr ""
 "Project-Id-Version: gst-plugins-base 1.4.0\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2014-12-18 12:05+0100\n"
+"POT-Creation-Date: 2015-09-18 19:09+0200\n"
 "PO-Revision-Date: 2014-07-30 09:19+0700\n"
 "Last-Translator: Andhika Padmawan <andhika.padmawan@gmail.com>\n"
 "Language-Team: Indonesian <translation-team-id@lists.sourceforge.net>\n"
@@ -78,10 +78,6 @@
 msgid "Missing element '%s' - check your GStreamer installation."
 msgstr "Elemen '%s' hilang - cek instalasi GStreamer anda."
 
-#, c-format
-msgid "A %s plugin is required to play this stream, but not installed."
-msgstr "Plugin %s dibutuhkan untuk memutar arus ini, tapi tidak diinstal."
-
 msgid "Could not determine type of stream"
 msgstr "Tak dapat menentukan tipe arus"
 
@@ -517,12 +513,99 @@
 "Jangan keluar setelah menampilkan senarai divais awal, tapi tunggu hingga "
 "divais ditambahkan/dihapus."
 
+#, fuzzy, c-format
+msgid "Volume: %.0f%%"
+msgstr "Volume"
+
 msgid "Buffering..."
 msgstr "Menyangga..."
 
 msgid "Clock lost, selecting a new one\n"
 msgstr "Jam hilang, pilih yang baru\n"
 
+msgid "Reached end of play list."
+msgstr ""
+
+msgid "Paused"
+msgstr ""
+
+#, c-format
+msgid "Now playing %s\n"
+msgstr ""
+
+#, c-format
+msgid "About to finish, preparing next title: %s"
+msgstr ""
+
+#, c-format
+msgid "Playback rate: %.2f"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "Could not change playback rate to %.2f"
+msgstr "Tak dapat membuka divais untuk putar kembali dalam mode stereo."
+
+msgid "space"
+msgstr ""
+
+msgid "pause/unpause"
+msgstr ""
+
+msgid "q or ESC"
+msgstr ""
+
+msgid "quit"
+msgstr ""
+
+msgid "play next"
+msgstr ""
+
+msgid "play previous"
+msgstr ""
+
+msgid "seek forward"
+msgstr ""
+
+msgid "seek backward"
+msgstr ""
+
+#, fuzzy
+msgid "volume up"
+msgstr "Volume"
+
+msgid "volume down"
+msgstr ""
+
+msgid "increase playback rate"
+msgstr ""
+
+msgid "decrease playback rate"
+msgstr ""
+
+msgid "change playback direction"
+msgstr ""
+
+msgid "enable/disable trick modes"
+msgstr ""
+
+#, fuzzy
+msgid "change audio track"
+msgstr "CD ini tidak memiliki jalur audio"
+
+msgid "change video track"
+msgstr ""
+
+#, fuzzy
+msgid "change subtitle track"
+msgstr "Format subjudul Kate"
+
+msgid "show keyboard shortcuts"
+msgstr ""
+
+#, fuzzy
+msgid "Interactive mode - keyboard controls:"
+msgstr "Kontrol interaktif via papan ketik"
+
 msgid "Video sink to use (default is autovideosink)"
 msgstr "Sink video yang digunakan (standar adalah autovideosink)"
 
@@ -535,7 +618,8 @@
 msgid "Shuffle playlist"
 msgstr "Acak senarai putar"
 
-msgid "Interactive control via keyboard"
+#, fuzzy
+msgid "Disable interactive control via the keyboard"
 msgstr "Kontrol interaktif via papan ketik"
 
 msgid "Volume"
@@ -544,6 +628,9 @@
 msgid "Playlist file containing input media files"
 msgstr "Berkas senarai putar berisi masukan berkas media"
 
+msgid "Do not print any output (apart from errors)"
+msgstr ""
+
 #, c-format
 msgid "Usage: %s FILE1|URI1 [FILE2|URI2] [FILE3|URI3] ..."
 msgstr "Penggunaan: %s BERKAS1|URI1 [BERKAS2|URI2] [BERKAS3|URI3] ..."
@@ -551,3 +638,9 @@
 msgid "You must provide at least one filename or URI to play."
 msgstr ""
 "Anda harus menyediakan setidaknya satu nama berkas atau URI untuk diputar."
+
+msgid "Press 'k' to see a list of keyboard shortcuts.\n"
+msgstr ""
+
+#~ msgid "A %s plugin is required to play this stream, but not installed."
+#~ msgstr "Plugin %s dibutuhkan untuk memutar arus ini, tapi tidak diinstal."
diff --git a/po/it.gmo b/po/it.gmo
index dd0bbfe..6ffbf70 100644
--- a/po/it.gmo
+++ b/po/it.gmo
Binary files differ
diff --git a/po/it.po b/po/it.po
index 0f38458..0491aa1 100644
--- a/po/it.po
+++ b/po/it.po
@@ -7,7 +7,7 @@
 msgstr ""
 "Project-Id-Version: gst-plugins-base 0.10.28.2\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2014-12-18 12:05+0100\n"
+"POT-Creation-Date: 2015-09-18 19:09+0200\n"
 "PO-Revision-Date: 2010-04-28 14:27+0200\n"
 "Last-Translator: Luca Ferretti <elle.uca@infinito.it>\n"
 "Language-Team: Italian <tp@lists.linux.it>\n"
@@ -83,12 +83,6 @@
 "Risulta mancante l'elemento «%s» - verificare la propria installazione di "
 "GStreamer."
 
-#, c-format
-msgid "A %s plugin is required to play this stream, but not installed."
-msgstr ""
-"Per riprodurre questo stream è richiesto un plugin %s, che però non risulta "
-"installato. "
-
 msgid "Could not determine type of stream"
 msgstr "Impossibile determinare il tipo di stream"
 
@@ -556,12 +550,97 @@
 "added/removed."
 msgstr ""
 
+#, c-format
+msgid "Volume: %.0f%%"
+msgstr ""
+
 msgid "Buffering..."
 msgstr ""
 
 msgid "Clock lost, selecting a new one\n"
 msgstr ""
 
+msgid "Reached end of play list."
+msgstr ""
+
+msgid "Paused"
+msgstr ""
+
+#, c-format
+msgid "Now playing %s\n"
+msgstr ""
+
+#, c-format
+msgid "About to finish, preparing next title: %s"
+msgstr ""
+
+#, c-format
+msgid "Playback rate: %.2f"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "Could not change playback rate to %.2f"
+msgstr "Impossibile aprire il device per la riproduzione in modalità stereo."
+
+msgid "space"
+msgstr ""
+
+msgid "pause/unpause"
+msgstr ""
+
+msgid "q or ESC"
+msgstr ""
+
+msgid "quit"
+msgstr ""
+
+msgid "play next"
+msgstr ""
+
+msgid "play previous"
+msgstr ""
+
+msgid "seek forward"
+msgstr ""
+
+msgid "seek backward"
+msgstr ""
+
+msgid "volume up"
+msgstr ""
+
+msgid "volume down"
+msgstr ""
+
+msgid "increase playback rate"
+msgstr ""
+
+msgid "decrease playback rate"
+msgstr ""
+
+msgid "change playback direction"
+msgstr ""
+
+msgid "enable/disable trick modes"
+msgstr ""
+
+#, fuzzy
+msgid "change audio track"
+msgstr "Questo CD non presenta alcuna traccia audio"
+
+msgid "change video track"
+msgstr ""
+
+#, fuzzy
+msgid "change subtitle track"
+msgstr "Sottotitoli formato Kate"
+
+msgid "show keyboard shortcuts"
+msgstr ""
+
+msgid "Interactive mode - keyboard controls:"
+msgstr ""
+
 msgid "Video sink to use (default is autovideosink)"
 msgstr ""
 
@@ -574,7 +653,7 @@
 msgid "Shuffle playlist"
 msgstr ""
 
-msgid "Interactive control via keyboard"
+msgid "Disable interactive control via the keyboard"
 msgstr ""
 
 msgid "Volume"
@@ -583,6 +662,9 @@
 msgid "Playlist file containing input media files"
 msgstr ""
 
+msgid "Do not print any output (apart from errors)"
+msgstr ""
+
 #, c-format
 msgid "Usage: %s FILE1|URI1 [FILE2|URI2] [FILE3|URI3] ..."
 msgstr ""
@@ -590,6 +672,14 @@
 msgid "You must provide at least one filename or URI to play."
 msgstr ""
 
+msgid "Press 'k' to see a list of keyboard shortcuts.\n"
+msgstr ""
+
+#~ msgid "A %s plugin is required to play this stream, but not installed."
+#~ msgstr ""
+#~ "Per riprodurre questo stream è richiesto un plugin %s, che però non "
+#~ "risulta installato. "
+
 #, fuzzy
 #~ msgid "Uncompressed %s YUV %s"
 #~ msgstr "YUV non compresso"
diff --git a/po/ja.gmo b/po/ja.gmo
index e702551..85762db 100644
--- a/po/ja.gmo
+++ b/po/ja.gmo
Binary files differ
diff --git a/po/ja.po b/po/ja.po
index 61b706f..6263fcc 100644
--- a/po/ja.po
+++ b/po/ja.po
@@ -6,7 +6,7 @@
 msgstr ""
 "Project-Id-Version: gst-plugins-base 0.10.30.3\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2014-12-18 12:05+0100\n"
+"POT-Creation-Date: 2015-09-18 19:09+0200\n"
 "PO-Revision-Date: 2010-10-25 10:27+0900\n"
 "Last-Translator: Makoto Kato <makoto.kt@gmail.com>\n"
 "Language-Team: Japanese <translation-team-ja@lists.sourceforge.net>\n"
@@ -81,12 +81,6 @@
 "エレメント '%s' が見つかりません - GStreamer のインストールが失敗している可能"
 "性があります"
 
-#, c-format
-msgid "A %s plugin is required to play this stream, but not installed."
-msgstr ""
-"%s プラグインはこのストリームを再生するのに必要ですが、インストールされていま"
-"せん"
-
 msgid "Could not determine type of stream"
 msgstr "ストリームの種類を判別できませんでした"
 
@@ -527,12 +521,97 @@
 "added/removed."
 msgstr ""
 
+#, c-format
+msgid "Volume: %.0f%%"
+msgstr ""
+
 msgid "Buffering..."
 msgstr ""
 
 msgid "Clock lost, selecting a new one\n"
 msgstr ""
 
+msgid "Reached end of play list."
+msgstr ""
+
+msgid "Paused"
+msgstr ""
+
+#, c-format
+msgid "Now playing %s\n"
+msgstr ""
+
+#, c-format
+msgid "About to finish, preparing next title: %s"
+msgstr ""
+
+#, c-format
+msgid "Playback rate: %.2f"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "Could not change playback rate to %.2f"
+msgstr "ステレオモードで再生用にデバイスをオープンできませんでした"
+
+msgid "space"
+msgstr ""
+
+msgid "pause/unpause"
+msgstr ""
+
+msgid "q or ESC"
+msgstr ""
+
+msgid "quit"
+msgstr ""
+
+msgid "play next"
+msgstr ""
+
+msgid "play previous"
+msgstr ""
+
+msgid "seek forward"
+msgstr ""
+
+msgid "seek backward"
+msgstr ""
+
+msgid "volume up"
+msgstr ""
+
+msgid "volume down"
+msgstr ""
+
+msgid "increase playback rate"
+msgstr ""
+
+msgid "decrease playback rate"
+msgstr ""
+
+msgid "change playback direction"
+msgstr ""
+
+msgid "enable/disable trick modes"
+msgstr ""
+
+#, fuzzy
+msgid "change audio track"
+msgstr "この CD にはオーディオトラックがありません"
+
+msgid "change video track"
+msgstr ""
+
+#, fuzzy
+msgid "change subtitle track"
+msgstr "Kate 字幕形式"
+
+msgid "show keyboard shortcuts"
+msgstr ""
+
+msgid "Interactive mode - keyboard controls:"
+msgstr ""
+
 msgid "Video sink to use (default is autovideosink)"
 msgstr ""
 
@@ -545,7 +624,7 @@
 msgid "Shuffle playlist"
 msgstr ""
 
-msgid "Interactive control via keyboard"
+msgid "Disable interactive control via the keyboard"
 msgstr ""
 
 msgid "Volume"
@@ -554,6 +633,9 @@
 msgid "Playlist file containing input media files"
 msgstr ""
 
+msgid "Do not print any output (apart from errors)"
+msgstr ""
+
 #, c-format
 msgid "Usage: %s FILE1|URI1 [FILE2|URI2] [FILE3|URI3] ..."
 msgstr ""
@@ -561,6 +643,14 @@
 msgid "You must provide at least one filename or URI to play."
 msgstr ""
 
+msgid "Press 'k' to see a list of keyboard shortcuts.\n"
+msgstr ""
+
+#~ msgid "A %s plugin is required to play this stream, but not installed."
+#~ msgstr ""
+#~ "%s プラグインはこのストリームを再生するのに必要ですが、インストールされて"
+#~ "いません"
+
 #, fuzzy
 #~ msgid "Uncompressed %s YUV %s"
 #~ msgstr "非圧縮 YUV"
diff --git a/po/lt.gmo b/po/lt.gmo
index ce3df0f..8d9f3b8 100644
--- a/po/lt.gmo
+++ b/po/lt.gmo
Binary files differ
diff --git a/po/lt.po b/po/lt.po
index 1e851ae..ec53453 100644
--- a/po/lt.po
+++ b/po/lt.po
@@ -7,7 +7,7 @@
 msgstr ""
 "Project-Id-Version: gst-plugins-base-0.10.15.2\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2014-12-18 12:05+0100\n"
+"POT-Creation-Date: 2015-09-18 19:09+0200\n"
 "PO-Revision-Date: 2008-03-07 23:43+0200\n"
 "Last-Translator: Gintautas Miliauskas <gintas@akl.lt>\n"
 "Language-Team: Lithuanian <komp_lt@konferencijos.lt>\n"
@@ -81,10 +81,6 @@
 msgid "Missing element '%s' - check your GStreamer installation."
 msgstr "Trūksta elemento „%s“ - patikrinkite GStreamer įdiegimą."
 
-#, c-format
-msgid "A %s plugin is required to play this stream, but not installed."
-msgstr "Šiam srautui groti reikalingas %s įskiepis, bet jis nėra įdiegtas."
-
 #, fuzzy
 msgid "Could not determine type of stream"
 msgstr "Nepavyko sukurti „decodebin“ elemento."
@@ -529,12 +525,97 @@
 "added/removed."
 msgstr ""
 
+#, c-format
+msgid "Volume: %.0f%%"
+msgstr ""
+
 msgid "Buffering..."
 msgstr ""
 
 msgid "Clock lost, selecting a new one\n"
 msgstr ""
 
+msgid "Reached end of play list."
+msgstr ""
+
+msgid "Paused"
+msgstr ""
+
+#, c-format
+msgid "Now playing %s\n"
+msgstr ""
+
+#, c-format
+msgid "About to finish, preparing next title: %s"
+msgstr ""
+
+#, c-format
+msgid "Playback rate: %.2f"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "Could not change playback rate to %.2f"
+msgstr "Nepavyko atverti įrenginio stereofoniniam grojimui."
+
+msgid "space"
+msgstr ""
+
+msgid "pause/unpause"
+msgstr ""
+
+msgid "q or ESC"
+msgstr ""
+
+msgid "quit"
+msgstr ""
+
+msgid "play next"
+msgstr ""
+
+msgid "play previous"
+msgstr ""
+
+msgid "seek forward"
+msgstr ""
+
+msgid "seek backward"
+msgstr ""
+
+msgid "volume up"
+msgstr ""
+
+msgid "volume down"
+msgstr ""
+
+msgid "increase playback rate"
+msgstr ""
+
+msgid "decrease playback rate"
+msgstr ""
+
+msgid "change playback direction"
+msgstr ""
+
+msgid "enable/disable trick modes"
+msgstr ""
+
+#, fuzzy
+msgid "change audio track"
+msgstr "Šiame CD nėra audio takelių"
+
+msgid "change video track"
+msgstr ""
+
+#, fuzzy
+msgid "change subtitle track"
+msgstr "Sami titrų formatas"
+
+msgid "show keyboard shortcuts"
+msgstr ""
+
+msgid "Interactive mode - keyboard controls:"
+msgstr ""
+
 msgid "Video sink to use (default is autovideosink)"
 msgstr ""
 
@@ -547,7 +628,7 @@
 msgid "Shuffle playlist"
 msgstr ""
 
-msgid "Interactive control via keyboard"
+msgid "Disable interactive control via the keyboard"
 msgstr ""
 
 msgid "Volume"
@@ -556,6 +637,9 @@
 msgid "Playlist file containing input media files"
 msgstr ""
 
+msgid "Do not print any output (apart from errors)"
+msgstr ""
+
 #, c-format
 msgid "Usage: %s FILE1|URI1 [FILE2|URI2] [FILE3|URI3] ..."
 msgstr ""
@@ -563,6 +647,12 @@
 msgid "You must provide at least one filename or URI to play."
 msgstr ""
 
+msgid "Press 'k' to see a list of keyboard shortcuts.\n"
+msgstr ""
+
+#~ msgid "A %s plugin is required to play this stream, but not installed."
+#~ msgstr "Šiam srautui groti reikalingas %s įskiepis, bet jis nėra įdiegtas."
+
 #, fuzzy
 #~ msgid "Uncompressed %s YUV %s"
 #~ msgstr "Nekompresuotas YUV"
diff --git a/po/lv.gmo b/po/lv.gmo
index 35a17a9..e0ef4dc 100644
--- a/po/lv.gmo
+++ b/po/lv.gmo
Binary files differ
diff --git a/po/lv.po b/po/lv.po
index 8aa8ba0..05304cd 100644
--- a/po/lv.po
+++ b/po/lv.po
@@ -9,7 +9,7 @@
 msgstr ""
 "Project-Id-Version: gst-plugins-base 1.2.1\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2014-12-18 12:05+0100\n"
+"POT-Creation-Date: 2015-09-18 19:09+0200\n"
 "PO-Revision-Date: 2014-04-20 16:15+0300\n"
 "Last-Translator: Rihards Prieditis <rprieditis@gmail.com>\n"
 "Language-Team: Latvian <translation-team-lv@lists.sourceforge.net>\n"
@@ -85,11 +85,6 @@
 msgid "Missing element '%s' - check your GStreamer installation."
 msgstr "Trūkst elements “%s” - pārbaudiet savu GStreamer instalāciju."
 
-#, c-format
-msgid "A %s plugin is required to play this stream, but not installed."
-msgstr ""
-"Nepieciešamas %s spraudnis, lai atskaņotu šo plūsmu, bet tas nav instalēts."
-
 msgid "Could not determine type of stream"
 msgstr "Nevarēja noteikt straumes tipu"
 
@@ -521,12 +516,97 @@
 "added/removed."
 msgstr ""
 
+#, c-format
+msgid "Volume: %.0f%%"
+msgstr ""
+
 msgid "Buffering..."
 msgstr "Buferē..."
 
 msgid "Clock lost, selecting a new one\n"
 msgstr ""
 
+msgid "Reached end of play list."
+msgstr ""
+
+msgid "Paused"
+msgstr ""
+
+#, c-format
+msgid "Now playing %s\n"
+msgstr ""
+
+#, c-format
+msgid "About to finish, preparing next title: %s"
+msgstr ""
+
+#, c-format
+msgid "Playback rate: %.2f"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "Could not change playback rate to %.2f"
+msgstr "Nevarēja atvērt ierīci atskaņošanai stereo režīmā."
+
+msgid "space"
+msgstr ""
+
+msgid "pause/unpause"
+msgstr ""
+
+msgid "q or ESC"
+msgstr ""
+
+msgid "quit"
+msgstr ""
+
+msgid "play next"
+msgstr ""
+
+msgid "play previous"
+msgstr ""
+
+msgid "seek forward"
+msgstr ""
+
+msgid "seek backward"
+msgstr ""
+
+msgid "volume up"
+msgstr ""
+
+msgid "volume down"
+msgstr ""
+
+msgid "increase playback rate"
+msgstr ""
+
+msgid "decrease playback rate"
+msgstr ""
+
+msgid "change playback direction"
+msgstr ""
+
+msgid "enable/disable trick modes"
+msgstr ""
+
+#, fuzzy
+msgid "change audio track"
+msgstr "Šajā CD nav neviena audio celiņa"
+
+msgid "change video track"
+msgstr ""
+
+#, fuzzy
+msgid "change subtitle track"
+msgstr "Kate subtitru formāts"
+
+msgid "show keyboard shortcuts"
+msgstr ""
+
+msgid "Interactive mode - keyboard controls:"
+msgstr ""
+
 msgid "Video sink to use (default is autovideosink)"
 msgstr "Izmantojamais video uztvērējs (pēc noklusējuma autovideosink)"
 
@@ -539,7 +619,7 @@
 msgid "Shuffle playlist"
 msgstr ""
 
-msgid "Interactive control via keyboard"
+msgid "Disable interactive control via the keyboard"
 msgstr ""
 
 msgid "Volume"
@@ -548,6 +628,9 @@
 msgid "Playlist file containing input media files"
 msgstr ""
 
+msgid "Do not print any output (apart from errors)"
+msgstr ""
+
 #, c-format
 msgid "Usage: %s FILE1|URI1 [FILE2|URI2] [FILE3|URI3] ..."
 msgstr "Lietojums: %s DATNE1|URI1 [DATNE2|URI2] [DATNE3|URI3] ..."
@@ -555,6 +638,14 @@
 msgid "You must provide at least one filename or URI to play."
 msgstr "Jums jānorāda vismaz viens datnes nosaukums vai atskaņojamais URI."
 
+msgid "Press 'k' to see a list of keyboard shortcuts.\n"
+msgstr ""
+
+#~ msgid "A %s plugin is required to play this stream, but not installed."
+#~ msgstr ""
+#~ "Nepieciešamas %s spraudnis, lai atskaņotu šo plūsmu, bet tas nav "
+#~ "instalēts."
+
 #~ msgid "Master"
 #~ msgstr "Galvenais"
 
diff --git a/po/nb.gmo b/po/nb.gmo
index 6c07ef8..988b8e7 100644
--- a/po/nb.gmo
+++ b/po/nb.gmo
Binary files differ
diff --git a/po/nb.po b/po/nb.po
index cab57c9..4aba31d 100644
--- a/po/nb.po
+++ b/po/nb.po
@@ -2,14 +2,14 @@
 # This file is put in the public domain.
 #
 # Kjartan Maraas <kmaraas@gnome.org>, 2004-2010.
-# Johnny A. Solbu <johnny@solbu.net>, 2012,
+# Johnny A. Solbu <johnny@solbu.net>, 2012-2015
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: gst-plugins-base 1.4.0\n"
+"Project-Id-Version: gst-plugins-base 1.5.2\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2014-12-18 12:05+0100\n"
-"PO-Revision-Date: 2014-07-22 12:38+0100\n"
+"POT-Creation-Date: 2015-09-18 19:09+0200\n"
+"PO-Revision-Date: 2015-07-11 01:33+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"
@@ -17,7 +17,7 @@
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
-"X-Generator: Poedit 1.5.4\n"
+"X-Generator: Poedit 1.5.7\n"
 
 msgid "Could not open device for playback in mono mode."
 msgstr "Kunne ikke åpne enheten for avspilling i mono-modus."
@@ -80,12 +80,6 @@
 msgid "Missing element '%s' - check your GStreamer installation."
 msgstr "Mangler elementet «%s» - kontroller GStreamer-installasjonen."
 
-#, c-format
-msgid "A %s plugin is required to play this stream, but not installed."
-msgstr ""
-"Et %s-tillegg kreves for å spille av denne strømmen, men det er ikke "
-"installert."
-
 msgid "Could not determine type of stream"
 msgstr "Kunne ikke bestemme type strøm."
 
@@ -520,12 +514,95 @@
 "Ikke avslutt etter å ha vist den første enheteslisten, men vent på at "
 "enheter blir lagt til/fjernet."
 
+#, c-format
+msgid "Volume: %.0f%%"
+msgstr "Volum: %.0f%%"
+
 msgid "Buffering..."
 msgstr "Bufrer ..."
 
 msgid "Clock lost, selecting a new one\n"
 msgstr "Klokke tapt, velger en ny\n"
 
+msgid "Reached end of play list."
+msgstr "Nådde slutten av spillelisten."
+
+msgid "Paused"
+msgstr "Pauset"
+
+#, c-format
+msgid "Now playing %s\n"
+msgstr "Spiller nå %s\n"
+
+#, c-format
+msgid "About to finish, preparing next title: %s"
+msgstr "I ferd med å fullføre, forbereder neste tittel: %s"
+
+#, c-format
+msgid "Playback rate: %.2f"
+msgstr "Avspillingshastighet: %.2f"
+
+#, c-format
+msgid "Could not change playback rate to %.2f"
+msgstr "Kunne ikke endre avspillingshastigheten til %.2f"
+
+msgid "space"
+msgstr "avstand"
+
+msgid "pause/unpause"
+msgstr "pause/opphev pause"
+
+msgid "q or ESC"
+msgstr "q eller ESC"
+
+msgid "quit"
+msgstr "Avslutt"
+
+msgid "play next"
+msgstr "spill neste"
+
+msgid "play previous"
+msgstr "spill forige"
+
+msgid "seek forward"
+msgstr "søk forover"
+
+msgid "seek backward"
+msgstr "søk bakover"
+
+msgid "volume up"
+msgstr "Volum opp"
+
+msgid "volume down"
+msgstr "volum opp"
+
+msgid "increase playback rate"
+msgstr "øk avspillingshastigheten"
+
+msgid "decrease playback rate"
+msgstr "reduser avspillingshastigheten"
+
+msgid "change playback direction"
+msgstr "endre avspillingsretningen"
+
+msgid "enable/disable trick modes"
+msgstr "aktivere/deaktivere trikse-moduser\t"
+
+msgid "change audio track"
+msgstr "endre lydspor"
+
+msgid "change video track"
+msgstr "endre videospor"
+
+msgid "change subtitle track"
+msgstr "endre undertekstspor"
+
+msgid "show keyboard shortcuts"
+msgstr "vis hurtigtaster"
+
+msgid "Interactive mode - keyboard controls:"
+msgstr "Interaktiv modus - tastaturkontroller:"
+
 msgid "Video sink to use (default is autovideosink)"
 msgstr "Video-sink som skal brukes (standard er autovideosink)"
 
@@ -538,8 +615,8 @@
 msgid "Shuffle playlist"
 msgstr "Stokke spilleliste"
 
-msgid "Interactive control via keyboard"
-msgstr "Interaktiv kontroll via tastatur"
+msgid "Disable interactive control via the keyboard"
+msgstr "Deaktiver interaktiv kontroll via tastaturet"
 
 msgid "Volume"
 msgstr "Volum"
@@ -547,6 +624,9 @@
 msgid "Playlist file containing input media files"
 msgstr "Spillelistefil som inneholder inngangsmediefiler"
 
+msgid "Do not print any output (apart from errors)"
+msgstr "Ikke skriv noe utdata (bortsett fra feil)"
+
 #, c-format
 msgid "Usage: %s FILE1|URI1 [FILE2|URI2] [FILE3|URI3] ..."
 msgstr "Bruk: %s FIL1|URI1 [FILE|URI2] [FILE|URI3] ..."
@@ -554,6 +634,14 @@
 msgid "You must provide at least one filename or URI to play."
 msgstr "Du må ha med minst ett filnavn eller nettadresse å spille."
 
+msgid "Press 'k' to see a list of keyboard shortcuts.\n"
+msgstr "Trykk «k» for å se en liste over hurtigtaster.\n"
+
+#~ msgid "A %s plugin is required to play this stream, but not installed."
+#~ msgstr ""
+#~ "Et %s-tillegg kreves for å spille av denne strømmen, men det er ikke "
+#~ "installert."
+
 #~ msgid "Uncompressed %s YUV %s"
 #~ msgstr "Ukomprimert %s YUV %s"
 
diff --git a/po/nl.gmo b/po/nl.gmo
index 99791d9..8aecd55 100644
--- a/po/nl.gmo
+++ b/po/nl.gmo
Binary files differ
diff --git a/po/nl.po b/po/nl.po
index 4311d79..b07a56e 100644
--- a/po/nl.po
+++ b/po/nl.po
@@ -1,13 +1,13 @@
-# translation of gst-plugins-base-1.4.0.po to Dutch
+# translation of gst-plugins-base-1.5.1.po to Dutch
 # This file is put in the public domain.
 #
-# Freek de Kruijf <f.de.kruijf@gmail.com>, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014.
+# Freek de Kruijf <f.de.kruijf@gmail.com>, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015.
 msgid ""
 msgstr ""
-"Project-Id-Version: gst-plugins-base 1.4.0\n"
+"Project-Id-Version: gst-plugins-base 1.5.1\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2014-12-18 12:05+0100\n"
-"PO-Revision-Date: 2014-07-22 10:50+0200\n"
+"POT-Creation-Date: 2015-09-18 19:09+0200\n"
+"PO-Revision-Date: 2015-06-13 18:23+0200\n"
 "Last-Translator: Freek de Kruijf <f.de.kruijf@gmail.com>\n"
 "Language-Team: Dutch <vertaling@vrijschrift.org>\n"
 "Language: nl\n"
@@ -81,12 +81,6 @@
 msgid "Missing element '%s' - check your GStreamer installation."
 msgstr "Ontbrekend element '%s' - controleer de instalatie van uw GStreamer."
 
-#, c-format
-msgid "A %s plugin is required to play this stream, but not installed."
-msgstr ""
-"Een %s plugin is vereist voor het afspelen van deze gegevens, echter deze is "
-"niet geïnstalleerd."
-
 msgid "Could not determine type of stream"
 msgstr "Kan het type stream niet bepalen"
 
@@ -529,12 +523,97 @@
 "Niet beëindigen na het tonen van de initiële lijst apparaten, maar wacht op "
 "toegevoegde/verwijderde apparaten."
 
+#, c-format
+msgid "Volume: %.0f%%"
+msgstr "Volume: %.0f%%"
+
 msgid "Buffering..."
 msgstr "In buffer opslaan..."
 
 msgid "Clock lost, selecting a new one\n"
 msgstr "Klok verloren, een nieuwe wordt geselecteerd\n"
 
+msgid "Reached end of play list."
+msgstr "Einde van de afspeellijst bereikt."
+
+msgid "Paused"
+msgstr ""
+
+#, c-format
+msgid "Now playing %s\n"
+msgstr "Nu aan het afspelen %s\n"
+
+#, c-format
+msgid "About to finish, preparing next title: %s"
+msgstr "Op het punt te eindigen, voorbereiden van volgende titel: %s"
+
+#, c-format
+msgid "Playback rate: %.2f"
+msgstr "Afspeelsnelheid: %.2f"
+
+#, c-format
+msgid "Could not change playback rate to %.2f"
+msgstr "Kon afspeelsnelheid niet wijzigen naar %.2f"
+
+msgid "space"
+msgstr "spatie"
+
+msgid "pause/unpause"
+msgstr "pauzeren/verder"
+
+msgid "q or ESC"
+msgstr "q of ESC"
+
+msgid "quit"
+msgstr "stoppen"
+
+msgid "play next"
+msgstr "volgende afspelen"
+
+msgid "play previous"
+msgstr "vorige afspelen"
+
+msgid "seek forward"
+msgstr "vooruit zoeken"
+
+msgid "seek backward"
+msgstr "achteruit zoeken"
+
+msgid "volume up"
+msgstr "volume omhoog"
+
+msgid "volume down"
+msgstr "volume omlaag"
+
+msgid "increase playback rate"
+msgstr "afspeelsnelheid verhogen"
+
+msgid "decrease playback rate"
+msgstr "afspeelsnelheid verlagen"
+
+msgid "change playback direction"
+msgstr "afspeelrichting wijzigen"
+
+msgid "enable/disable trick modes"
+msgstr "truc-modi in-/uitschakelen"
+
+#, fuzzy
+msgid "change audio track"
+msgstr "Deze CD heeft geen audiotracks"
+
+msgid "change video track"
+msgstr ""
+
+#, fuzzy
+msgid "change subtitle track"
+msgstr "Kate ondertitelformaat"
+
+msgid "show keyboard shortcuts"
+msgstr "sneltoetsen tonen"
+
+msgid "Interactive mode - keyboard controls:"
+msgstr "Interactieve modus - besturing op toetsenbord"
+
 msgid "Video sink to use (default is autovideosink)"
 msgstr "Te gebruiken video-sink (standaard is autovideosink)"
 
@@ -547,8 +626,8 @@
 msgid "Shuffle playlist"
 msgstr "Afspeellijst in willekeurige volgorde"
 
-msgid "Interactive control via keyboard"
-msgstr "Interactieve besturing via toetsenbord"
+msgid "Disable interactive control via the keyboard"
+msgstr "Interactieve besturing via toetsenbord uitschakelen"
 
 msgid "Volume"
 msgstr "Volume"
@@ -556,6 +635,9 @@
 msgid "Playlist file containing input media files"
 msgstr "Afspeellijstbestand met mediabestanden voor invoer"
 
+msgid "Do not print any output (apart from errors)"
+msgstr "Geen uitvoer afdrukken (los van fouten)"
+
 #, c-format
 msgid "Usage: %s FILE1|URI1 [FILE2|URI2] [FILE3|URI3] ..."
 msgstr "Gebruik: %s BESTAND1|URI1 [BESTAND2|URI2] [BESTAND3|URI3] ..."
@@ -563,6 +645,14 @@
 msgid "You must provide at least one filename or URI to play."
 msgstr "U moet minstens één bestandsnaam of URI leveren om af te spelen."
 
+msgid "Press 'k' to see a list of keyboard shortcuts.\n"
+msgstr "Druk op 'k' om een lijst met sneltoetsen te zien.\n"
+
+#~ msgid "A %s plugin is required to play this stream, but not installed."
+#~ msgstr ""
+#~ "Een %s plugin is vereist voor het afspelen van deze gegevens, echter deze "
+#~ "is niet geïnstalleerd."
+
 #~ msgid "Uncompressed %s YUV %s"
 #~ msgstr "Niet-gecomprimeerd %s YUV %s"
 
diff --git a/po/or.gmo b/po/or.gmo
index dd9e42e..ef72644 100644
--- a/po/or.gmo
+++ b/po/or.gmo
Binary files differ
diff --git a/po/or.po b/po/or.po
index 458d3c0..5c11eab 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: 2014-12-18 12:05+0100\n"
+"POT-Creation-Date: 2015-09-18 19:09+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"
@@ -84,10 +84,6 @@
 msgid "Missing element '%s' - check your GStreamer installation."
 msgstr ""
 
-#, c-format
-msgid "A %s plugin is required to play this stream, but not installed."
-msgstr ""
-
 #, fuzzy
 msgid "Could not determine type of stream"
 msgstr "\"%s\" ଫାଇଲ ଲେଖିହେଲା ନାହିଁ."
@@ -521,12 +517,96 @@
 "added/removed."
 msgstr ""
 
+#, fuzzy, c-format
+msgid "Volume: %.0f%%"
+msgstr "ପ୍ରବଳତା"
+
 msgid "Buffering..."
 msgstr ""
 
 msgid "Clock lost, selecting a new one\n"
 msgstr ""
 
+msgid "Reached end of play list."
+msgstr ""
+
+msgid "Paused"
+msgstr ""
+
+#, c-format
+msgid "Now playing %s\n"
+msgstr ""
+
+#, c-format
+msgid "About to finish, preparing next title: %s"
+msgstr ""
+
+#, c-format
+msgid "Playback rate: %.2f"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "Could not change playback rate to %.2f"
+msgstr "ସି.ଡି. ଯନ୍ତ୍ର ପଢ଼ିବା ପାଇଁ ଖୋଲିହେଲା ନାହିଁ."
+
+msgid "space"
+msgstr ""
+
+msgid "pause/unpause"
+msgstr ""
+
+msgid "q or ESC"
+msgstr ""
+
+msgid "quit"
+msgstr ""
+
+msgid "play next"
+msgstr ""
+
+msgid "play previous"
+msgstr ""
+
+msgid "seek forward"
+msgstr ""
+
+msgid "seek backward"
+msgstr ""
+
+#, fuzzy
+msgid "volume up"
+msgstr "ପ୍ରବଳତା"
+
+msgid "volume down"
+msgstr ""
+
+msgid "increase playback rate"
+msgstr ""
+
+msgid "decrease playback rate"
+msgstr ""
+
+msgid "change playback direction"
+msgstr ""
+
+msgid "enable/disable trick modes"
+msgstr ""
+
+msgid "change audio track"
+msgstr ""
+
+msgid "change video track"
+msgstr ""
+
+msgid "change subtitle track"
+msgstr ""
+
+msgid "show keyboard shortcuts"
+msgstr ""
+
+msgid "Interactive mode - keyboard controls:"
+msgstr ""
+
 msgid "Video sink to use (default is autovideosink)"
 msgstr ""
 
@@ -539,7 +619,7 @@
 msgid "Shuffle playlist"
 msgstr ""
 
-msgid "Interactive control via keyboard"
+msgid "Disable interactive control via the keyboard"
 msgstr ""
 
 msgid "Volume"
@@ -548,6 +628,9 @@
 msgid "Playlist file containing input media files"
 msgstr ""
 
+msgid "Do not print any output (apart from errors)"
+msgstr ""
+
 #, c-format
 msgid "Usage: %s FILE1|URI1 [FILE2|URI2] [FILE3|URI3] ..."
 msgstr ""
@@ -555,6 +638,9 @@
 msgid "You must provide at least one filename or URI to play."
 msgstr ""
 
+msgid "Press 'k' to see a list of keyboard shortcuts.\n"
+msgstr ""
+
 #~ msgid "Bass"
 #~ msgstr "ଅନୁଚ୍ଚ ସ୍ବର"
 
diff --git a/po/pl.gmo b/po/pl.gmo
index 941f7bb..440b1df 100644
--- a/po/pl.gmo
+++ b/po/pl.gmo
Binary files differ
diff --git a/po/pl.po b/po/pl.po
index 9bd9d33..e7a848f 100644
--- a/po/pl.po
+++ b/po/pl.po
@@ -1,13 +1,13 @@
 # Polish translation for gst-plugins-base.
 # This file is distributed under the same license as the gst-plugins-base package.
-# Jakub Bogusz <qboosh@pld-linux.org>, 2007-2014.
+# Jakub Bogusz <qboosh@pld-linux.org>, 2007-2015.
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: gst-plugins-base 1.4.0\n"
+"Project-Id-Version: gst-plugins-base 1.5.2\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2014-12-18 12:05+0100\n"
-"PO-Revision-Date: 2014-07-21 21:21+0200\n"
+"POT-Creation-Date: 2015-09-18 19:09+0200\n"
+"PO-Revision-Date: 2015-06-26 21:00+0200\n"
 "Last-Translator: Jakub Bogusz <qboosh@pld-linux.org>\n"
 "Language-Team: Polish <translation-team-pl@lists.sourceforge.net>\n"
 "Language: pl\n"
@@ -88,12 +88,6 @@
 msgid "Missing element '%s' - check your GStreamer installation."
 msgstr "Brak elementu '%s' - proszę sprawdzić instalację GStreamera."
 
-#, c-format
-msgid "A %s plugin is required to play this stream, but not installed."
-msgstr ""
-"Wtyczka %s jest wymagana do otworzenia tego strumienia, ale nie jest "
-"zainstalowana."
-
 msgid "Could not determine type of stream"
 msgstr "Nie udało się określić typu strumienia"
 
@@ -527,12 +521,95 @@
 "Bez kończenia po wyświetleniu początkowej listy urządzeń, oczekiwanie na "
 "dodanie/usunięcie urządzeń."
 
+#, c-format
+msgid "Volume: %.0f%%"
+msgstr "Głośność: %.0f%%"
+
 msgid "Buffering..."
 msgstr "Buforowanie..."
 
 msgid "Clock lost, selecting a new one\n"
 msgstr "Utracono zegar, wybieranie nowego\n"
 
+msgid "Reached end of play list."
+msgstr "Osiągnięto koniec listy odtwarzania."
+
+msgid "Paused"
+msgstr "Pauza"
+
+#, c-format
+msgid "Now playing %s\n"
+msgstr "Trwa odtwarzanie %s\n"
+
+#, c-format
+msgid "About to finish, preparing next title: %s"
+msgstr "Blisko końca, przygotowywanie następnego tytułu: %s"
+
+#, c-format
+msgid "Playback rate: %.2f"
+msgstr "Tempo odtwarzania: %.2f"
+
+#, c-format
+msgid "Could not change playback rate to %.2f"
+msgstr "Nie udało się zmienić tempa odtwarzania na %.2f"
+
+msgid "space"
+msgstr "spacja"
+
+msgid "pause/unpause"
+msgstr "pauza/wznowienie"
+
+msgid "q or ESC"
+msgstr "q lub ESC"
+
+msgid "quit"
+msgstr "wyjście"
+
+msgid "play next"
+msgstr "odtworzenie następnego"
+
+msgid "play previous"
+msgstr "odtworzenie poprzedniego"
+
+msgid "seek forward"
+msgstr "przewinięcie w przód"
+
+msgid "seek backward"
+msgstr "przewinięcie w tył"
+
+msgid "volume up"
+msgstr "większa głośność"
+
+msgid "volume down"
+msgstr "mniejsza głośność"
+
+msgid "increase playback rate"
+msgstr "większe tempo odtwarzania"
+
+msgid "decrease playback rate"
+msgstr "mniejsze tempo odtwarzania"
+
+msgid "change playback direction"
+msgstr "zmiana kierunku odtwarzania"
+
+msgid "enable/disable trick modes"
+msgstr "włączenie/wyłączenie trybów trików"
+
+msgid "change audio track"
+msgstr "zmiana ścieżki dźwiękowej"
+
+msgid "change video track"
+msgstr "zmiana ścieżki filmowej"
+
+msgid "change subtitle track"
+msgstr "zmiana ścieżki podpisów"
+
+msgid "show keyboard shortcuts"
+msgstr "wyświetlenie skrótów klawiatury"
+
+msgid "Interactive mode - keyboard controls:"
+msgstr "Tryb interaktywny - sterowanie z klawiatury:"
+
 msgid "Video sink to use (default is autovideosink)"
 msgstr "Element pochłaniający obraz (domyślny to autovideosink)"
 
@@ -545,8 +622,8 @@
 msgid "Shuffle playlist"
 msgstr "Przetasowanie listy odtwarzania"
 
-msgid "Interactive control via keyboard"
-msgstr "Interaktywne sterowanie z klawiatury"
+msgid "Disable interactive control via the keyboard"
+msgstr "Wyłączenie interaktywnego sterowania z klawiatury"
 
 msgid "Volume"
 msgstr "Głośność"
@@ -554,9 +631,15 @@
 msgid "Playlist file containing input media files"
 msgstr "Plik listy odtwarzania zawierający wejściowe pliki multimedialne"
 
+msgid "Do not print any output (apart from errors)"
+msgstr "Bez wypisywania żadnego wyjścia (poza błędami)"
+
 #, c-format
 msgid "Usage: %s FILE1|URI1 [FILE2|URI2] [FILE3|URI3] ..."
 msgstr "Składnia: %s PLIK1|URI1 [PLIK2|URI2] [PLIK3|URI3] ..."
 
 msgid "You must provide at least one filename or URI to play."
 msgstr "Trzeba podać przynajmniej jedną nazwę pliku lub URI do odtworzenia."
+
+msgid "Press 'k' to see a list of keyboard shortcuts.\n"
+msgstr "Klawisz 'k' wyświetla listę skrótów klawiatury.\n"
diff --git a/po/pt_BR.gmo b/po/pt_BR.gmo
index ee8f636..8df59a9 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 73f8bae..5f16145 100644
--- a/po/pt_BR.po
+++ b/po/pt_BR.po
@@ -1,7 +1,7 @@
 # Brazilian Portuguese translation of gst-plugins-base.
-# Copyright (C) 2008-2013 Free Software Foundation, Inc.
+# Copyright (C) 2008-2015 Free Software Foundation, Inc.
 # This file is distributed under the same license as the gst-plugins-base package.
-# Fabrício Godoy <skarllot@gmail.com>, 2008-2013.
+# Fabrício Godoy <skarllot@gmail.com>, 2008-2015.
 #
 # PCM -> PCM
 # buffering -> preenchendo buffer
@@ -9,10 +9,10 @@
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: gst-plugins-base-1.2.1\n"
+"Project-Id-Version: gst-plugins-base-1.4.1\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2014-12-18 12:05+0100\n"
-"PO-Revision-Date: 2013-12-29 17:33-0300\n"
+"POT-Creation-Date: 2015-09-18 19:09+0200\n"
+"PO-Revision-Date: 2015-02-01 19:21-0200\n"
 "Last-Translator: Fabrício Godoy <skarllot@gmail.com>\n"
 "Language-Team: Brazilian Portuguese <ldpbr-translation@lists.sourceforge."
 "net>\n"
@@ -87,11 +87,6 @@
 msgstr ""
 "O elemento \"%s\" está faltando, verifique a instalação do seu GStreamer."
 
-#, c-format
-msgid "A %s plugin is required to play this stream, but not installed."
-msgstr ""
-"O plug-in %s é necessário para reproduzir este fluxo, mas não está instalado."
-
 msgid "Could not determine type of stream"
 msgstr "Não foi possível determinar o tipo de fluxo"
 
@@ -530,13 +525,102 @@
 "Don't exit after showing the initial device list, but wait for devices to "
 "added/removed."
 msgstr ""
+"Não sair após exibir a lista inicial de dispositivos, mas sim, esperar por "
+"dispositivos serem adicionados ou removidos."
+
+#, fuzzy, c-format
+msgid "Volume: %.0f%%"
+msgstr "Volume"
 
 msgid "Buffering..."
 msgstr "Preenchendo buffer..."
 
 msgid "Clock lost, selecting a new one\n"
+msgstr "Temporizador perdido, selecionando um novo\n"
+
+msgid "Reached end of play list."
 msgstr ""
 
+msgid "Paused"
+msgstr ""
+
+#, c-format
+msgid "Now playing %s\n"
+msgstr ""
+
+#, c-format
+msgid "About to finish, preparing next title: %s"
+msgstr ""
+
+#, c-format
+msgid "Playback rate: %.2f"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "Could not change playback rate to %.2f"
+msgstr "Não foi possível abrir o dispositivo para reprodução em estéreo."
+
+msgid "space"
+msgstr ""
+
+msgid "pause/unpause"
+msgstr ""
+
+msgid "q or ESC"
+msgstr ""
+
+msgid "quit"
+msgstr ""
+
+msgid "play next"
+msgstr ""
+
+msgid "play previous"
+msgstr ""
+
+msgid "seek forward"
+msgstr ""
+
+msgid "seek backward"
+msgstr ""
+
+#, fuzzy
+msgid "volume up"
+msgstr "Volume"
+
+msgid "volume down"
+msgstr ""
+
+msgid "increase playback rate"
+msgstr ""
+
+msgid "decrease playback rate"
+msgstr ""
+
+msgid "change playback direction"
+msgstr ""
+
+msgid "enable/disable trick modes"
+msgstr ""
+
+#, fuzzy
+msgid "change audio track"
+msgstr "Este CD não tem trilhas de áudio"
+
+msgid "change video track"
+msgstr ""
+
+#, fuzzy
+msgid "change subtitle track"
+msgstr "Formato de legendas Kate"
+
+msgid "show keyboard shortcuts"
+msgstr ""
+
+#, fuzzy
+msgid "Interactive mode - keyboard controls:"
+msgstr "Controle interativo via teclado"
+
 msgid "Video sink to use (default is autovideosink)"
 msgstr ""
 "Elemento consumidor de vídeo utilizado (predefinido para autovideosink)"
@@ -549,15 +633,19 @@
 msgstr "Ativar reprodução sem intervalos"
 
 msgid "Shuffle playlist"
-msgstr ""
+msgstr "Embaralhar lista de reprodução"
 
-msgid "Interactive control via keyboard"
-msgstr ""
+#, fuzzy
+msgid "Disable interactive control via the keyboard"
+msgstr "Controle interativo via teclado"
 
 msgid "Volume"
-msgstr ""
+msgstr "Volume"
 
 msgid "Playlist file containing input media files"
+msgstr "Arquivo de lista de reprodução que contém arquivos de mídia de entrada"
+
+msgid "Do not print any output (apart from errors)"
 msgstr ""
 
 #, c-format
@@ -567,6 +655,14 @@
 msgid "You must provide at least one filename or URI to play."
 msgstr "Você deve fornecer ao menos um nome de arquivo ou URI para reproduzir."
 
+msgid "Press 'k' to see a list of keyboard shortcuts.\n"
+msgstr ""
+
+#~ msgid "A %s plugin is required to play this stream, but not installed."
+#~ msgstr ""
+#~ "O plug-in %s é necessário para reproduzir este fluxo, mas não está "
+#~ "instalado."
+
 #~ msgid "Uncompressed %s YUV %s"
 #~ msgstr "%2$s YUV %1$s sem compressão"
 
diff --git a/po/ro.gmo b/po/ro.gmo
index 07efb41..bcbe1a7 100644
--- a/po/ro.gmo
+++ b/po/ro.gmo
Binary files differ
diff --git a/po/ro.po b/po/ro.po
index e4023fd..875484b 100644
--- a/po/ro.po
+++ b/po/ro.po
@@ -5,7 +5,7 @@
 msgstr ""
 "Project-Id-Version: gst-plugins-base 0.10.29.2\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2014-12-18 12:05+0100\n"
+"POT-Creation-Date: 2015-09-18 19:09+0200\n"
 "PO-Revision-Date: 2010-08-16 01:21+0300\n"
 "Last-Translator: Lucian Adrian Grijincu <lucian.grijincu@gmail.com>\n"
 "Language-Team: Romanian <translation-team-ro@lists.sourceforge.net>\n"
@@ -80,12 +80,6 @@
 msgid "Missing element '%s' - check your GStreamer installation."
 msgstr "Element %s lipsă - verificați instalarea GStreamer."
 
-#, c-format
-msgid "A %s plugin is required to play this stream, but not installed."
-msgstr ""
-"Un modul de extensie %s este necesar pentru a reda acest flux, dar acesta nu "
-"este instalat."
-
 msgid "Could not determine type of stream"
 msgstr "Nu s-a putut determina tipul fluxului"
 
@@ -524,12 +518,97 @@
 "added/removed."
 msgstr ""
 
+#, c-format
+msgid "Volume: %.0f%%"
+msgstr ""
+
 msgid "Buffering..."
 msgstr ""
 
 msgid "Clock lost, selecting a new one\n"
 msgstr ""
 
+msgid "Reached end of play list."
+msgstr ""
+
+msgid "Paused"
+msgstr ""
+
+#, c-format
+msgid "Now playing %s\n"
+msgstr ""
+
+#, c-format
+msgid "About to finish, preparing next title: %s"
+msgstr ""
+
+#, c-format
+msgid "Playback rate: %.2f"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "Could not change playback rate to %.2f"
+msgstr "Nu s-a putut deschide dispozitivul pentru redare în modul stereo."
+
+msgid "space"
+msgstr ""
+
+msgid "pause/unpause"
+msgstr ""
+
+msgid "q or ESC"
+msgstr ""
+
+msgid "quit"
+msgstr ""
+
+msgid "play next"
+msgstr ""
+
+msgid "play previous"
+msgstr ""
+
+msgid "seek forward"
+msgstr ""
+
+msgid "seek backward"
+msgstr ""
+
+msgid "volume up"
+msgstr ""
+
+msgid "volume down"
+msgstr ""
+
+msgid "increase playback rate"
+msgstr ""
+
+msgid "decrease playback rate"
+msgstr ""
+
+msgid "change playback direction"
+msgstr ""
+
+msgid "enable/disable trick modes"
+msgstr ""
+
+#, fuzzy
+msgid "change audio track"
+msgstr "Acest CD nu conține piste audio"
+
+msgid "change video track"
+msgstr ""
+
+#, fuzzy
+msgid "change subtitle track"
+msgstr "Format subtitrare Kate"
+
+msgid "show keyboard shortcuts"
+msgstr ""
+
+msgid "Interactive mode - keyboard controls:"
+msgstr ""
+
 msgid "Video sink to use (default is autovideosink)"
 msgstr ""
 
@@ -542,7 +621,7 @@
 msgid "Shuffle playlist"
 msgstr ""
 
-msgid "Interactive control via keyboard"
+msgid "Disable interactive control via the keyboard"
 msgstr ""
 
 msgid "Volume"
@@ -551,6 +630,9 @@
 msgid "Playlist file containing input media files"
 msgstr ""
 
+msgid "Do not print any output (apart from errors)"
+msgstr ""
+
 #, c-format
 msgid "Usage: %s FILE1|URI1 [FILE2|URI2] [FILE3|URI3] ..."
 msgstr ""
@@ -558,6 +640,14 @@
 msgid "You must provide at least one filename or URI to play."
 msgstr ""
 
+msgid "Press 'k' to see a list of keyboard shortcuts.\n"
+msgstr ""
+
+#~ msgid "A %s plugin is required to play this stream, but not installed."
+#~ msgstr ""
+#~ "Un modul de extensie %s este necesar pentru a reda acest flux, dar acesta "
+#~ "nu este instalat."
+
 #, fuzzy
 #~ msgid "Uncompressed %s YUV %s"
 #~ msgstr "YUV necomprimat"
diff --git a/po/ru.gmo b/po/ru.gmo
index 9f69147..307d28b 100644
--- a/po/ru.gmo
+++ b/po/ru.gmo
Binary files differ
diff --git a/po/ru.po b/po/ru.po
index 45cd296..f4a1d1c 100644
--- a/po/ru.po
+++ b/po/ru.po
@@ -3,13 +3,13 @@
 #
 # Артём Попов <artfwo@gmail.com>, 2009.
 # Pavel Maryanov <acid_jack@ukr.net>, 2009.
-# Yuri Kozlov <yuray@komyakino.ru>, 2010, 2011, 2012, 2013, 2014.
+# Yuri Kozlov <yuray@komyakino.ru>, 2010, 2011, 2012, 2013, 2014, 2015.
 msgid ""
 msgstr ""
-"Project-Id-Version: gst-plugins-base 1.4.0\n"
+"Project-Id-Version: gst-plugins-base 1.5.2\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2014-12-18 12:05+0100\n"
-"PO-Revision-Date: 2014-07-21 19:24+0400\n"
+"POT-Creation-Date: 2015-09-18 19:09+0200\n"
+"PO-Revision-Date: 2015-06-26 09:00+0300\n"
 "Last-Translator: Yuri Kozlov <yuray@komyakino.ru>\n"
 "Language-Team: Russian <gnu@mx.ru>\n"
 "Language: ru\n"
@@ -83,11 +83,6 @@
 msgid "Missing element '%s' - check your GStreamer installation."
 msgstr "Отсутствует элемент «%s» — проверьте правильность установки GStreamer."
 
-#, c-format
-msgid "A %s plugin is required to play this stream, but not installed."
-msgstr ""
-"Для воспроизведения этого потока требуется модуль %s, но он не установлен."
-
 msgid "Could not determine type of stream"
 msgstr "Не удалось определить тип потока"
 
@@ -524,12 +519,95 @@
 "Не завершать работу после показа начального списка устройств, а ждать их "
 "добавления/удаления."
 
+#, c-format
+msgid "Volume: %.0f%%"
+msgstr "Громкость: %.0f%%"
+
 msgid "Buffering..."
 msgstr "Буферизация…"
 
 msgid "Clock lost, selecting a new one\n"
 msgstr "Часы потеряны, выбираем новые\n"
 
+msgid "Reached end of play list."
+msgstr "Достигнут конец списка воспроизведения."
+
+msgid "Paused"
+msgstr "Пауза"
+
+#, c-format
+msgid "Now playing %s\n"
+msgstr "Сейчас проигрывается %s\n"
+
+#, c-format
+msgid "About to finish, preparing next title: %s"
+msgstr "Почти закончено, подготавливается следующая часть: %s"
+
+#, c-format
+msgid "Playback rate: %.2f"
+msgstr "Скорость воспроизведения: %.2f"
+
+#, c-format
+msgid "Could not change playback rate to %.2f"
+msgstr "Не удалось изменить скорость воспроизведения на %.2f"
+
+msgid "space"
+msgstr "пробел"
+
+msgid "pause/unpause"
+msgstr "пауза/продолжение"
+
+msgid "q or ESC"
+msgstr "q или ESC"
+
+msgid "quit"
+msgstr "выход"
+
+msgid "play next"
+msgstr "воспроизвести следующее"
+
+msgid "play previous"
+msgstr "воспроизвести предыдущее"
+
+msgid "seek forward"
+msgstr "перемотать вперед"
+
+msgid "seek backward"
+msgstr "перемотать назад"
+
+msgid "volume up"
+msgstr "увеличить громкость"
+
+msgid "volume down"
+msgstr "уменьшить громкость"
+
+msgid "increase playback rate"
+msgstr "увеличить скорость воспроизведения"
+
+msgid "decrease playback rate"
+msgstr "уменьшить скорость воспроизведения"
+
+msgid "change playback direction"
+msgstr "изменить направление воспроизведения"
+
+msgid "enable/disable trick modes"
+msgstr "включить/выключить режим рекомендаций"
+
+msgid "change audio track"
+msgstr "изменить звуковую дорожку"
+
+msgid "change video track"
+msgstr "изменить видео дорожку"
+
+msgid "change subtitle track"
+msgstr "изменить дорожку субтитров"
+
+msgid "show keyboard shortcuts"
+msgstr "показать клавиатурные сокращения"
+
+msgid "Interactive mode - keyboard controls:"
+msgstr "Интерактивный режим — управление с клавиатуры:"
+
 msgid "Video sink to use (default is autovideosink)"
 msgstr "Используемый приёмник видео (по умолчанию autovideosink)"
 
@@ -542,8 +620,8 @@
 msgid "Shuffle playlist"
 msgstr "Перемешать список воспроизведения"
 
-msgid "Interactive control via keyboard"
-msgstr "Интерактивное управление с клавиатуры"
+msgid "Disable interactive control via the keyboard"
+msgstr "Отключить интерактивное управление с клавиатуры"
 
 msgid "Volume"
 msgstr "Громкость"
@@ -551,6 +629,9 @@
 msgid "Playlist file containing input media files"
 msgstr "Файл списка воспроизведения с входными медиа-файлами"
 
+msgid "Do not print any output (apart from errors)"
+msgstr "Не выводить ничего в поток стандартного вывода (кроме ошибок)"
+
 #, c-format
 msgid "Usage: %s FILE1|URI1 [FILE2|URI2] [FILE3|URI3] ..."
 msgstr "Использование: %s ФАЙЛ1|URI1 [ФАЙЛ2|URI2] [ФАЙЛ3|URI3] …"
@@ -558,6 +639,13 @@
 msgid "You must provide at least one filename or URI to play."
 msgstr "Вы должны указать не менее одного имени файла или URI."
 
+msgid "Press 'k' to see a list of keyboard shortcuts.\n"
+msgstr "Нажмите «k» для показа списка клавиатурных комбинаций.\n"
+
+#~ msgid "A %s plugin is required to play this stream, but not installed."
+#~ msgstr ""
+#~ "Для воспроизведения этого потока требуется модуль %s, но он не установлен."
+
 #~ msgid "Uncompressed %s YUV %s"
 #~ msgstr "Несжатый %s YUV %s"
 
diff --git a/po/sk.gmo b/po/sk.gmo
index 8adba4f..79a546b 100644
--- a/po/sk.gmo
+++ b/po/sk.gmo
Binary files differ
diff --git a/po/sk.po b/po/sk.po
index 8d3438d..7f04e70 100644
--- a/po/sk.po
+++ b/po/sk.po
@@ -6,7 +6,7 @@
 msgstr ""
 "Project-Id-Version: gst-plugins-base 1.2.1\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2014-12-18 12:05+0100\n"
+"POT-Creation-Date: 2015-09-18 19:09+0200\n"
 "PO-Revision-Date: 2014-01-30 10:57+0100\n"
 "Last-Translator: Peter Tuharsky <tuharsky@misbb.sk>\n"
 "Language-Team: Slovak <sk-i18n@lists.linux.sk>\n"
@@ -82,12 +82,6 @@
 msgid "Missing element '%s' - check your GStreamer installation."
 msgstr "Chýa prvok '%s' - skontrolujte svoju inštaláciu GStreamer."
 
-#, c-format
-msgid "A %s plugin is required to play this stream, but not installed."
-msgstr ""
-"Na prehratie tohto prúdu údajov je vyžadovaný zásuvný modul %s, ktorý nie je "
-"nainštalovaný."
-
 msgid "Could not determine type of stream"
 msgstr "Nepodarilo sa zistiť typ prúdu údajov"
 
@@ -519,12 +513,97 @@
 "added/removed."
 msgstr ""
 
+#, c-format
+msgid "Volume: %.0f%%"
+msgstr ""
+
 msgid "Buffering..."
 msgstr "Napĺňam vyrovnávaciu pamäť..."
 
 msgid "Clock lost, selecting a new one\n"
 msgstr ""
 
+msgid "Reached end of play list."
+msgstr ""
+
+msgid "Paused"
+msgstr ""
+
+#, c-format
+msgid "Now playing %s\n"
+msgstr ""
+
+#, c-format
+msgid "About to finish, preparing next title: %s"
+msgstr ""
+
+#, c-format
+msgid "Playback rate: %.2f"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "Could not change playback rate to %.2f"
+msgstr "Nepodarilo sa otvoriť zariadenie pre prehrávanie v režime stereo."
+
+msgid "space"
+msgstr ""
+
+msgid "pause/unpause"
+msgstr ""
+
+msgid "q or ESC"
+msgstr ""
+
+msgid "quit"
+msgstr ""
+
+msgid "play next"
+msgstr ""
+
+msgid "play previous"
+msgstr ""
+
+msgid "seek forward"
+msgstr ""
+
+msgid "seek backward"
+msgstr ""
+
+msgid "volume up"
+msgstr ""
+
+msgid "volume down"
+msgstr ""
+
+msgid "increase playback rate"
+msgstr ""
+
+msgid "decrease playback rate"
+msgstr ""
+
+msgid "change playback direction"
+msgstr ""
+
+msgid "enable/disable trick modes"
+msgstr ""
+
+#, fuzzy
+msgid "change audio track"
+msgstr "Toto CD nemá zvukové stopy"
+
+msgid "change video track"
+msgstr ""
+
+#, fuzzy
+msgid "change subtitle track"
+msgstr "Formát titulkov Kate"
+
+msgid "show keyboard shortcuts"
+msgstr ""
+
+msgid "Interactive mode - keyboard controls:"
+msgstr ""
+
 msgid "Video sink to use (default is autovideosink)"
 msgstr ""
 
@@ -537,7 +616,7 @@
 msgid "Shuffle playlist"
 msgstr ""
 
-msgid "Interactive control via keyboard"
+msgid "Disable interactive control via the keyboard"
 msgstr ""
 
 msgid "Volume"
@@ -546,6 +625,9 @@
 msgid "Playlist file containing input media files"
 msgstr ""
 
+msgid "Do not print any output (apart from errors)"
+msgstr ""
+
 #, c-format
 msgid "Usage: %s FILE1|URI1 [FILE2|URI2] [FILE3|URI3] ..."
 msgstr "Použitie: %s FILE1|URI1 [FILE2|URI2] [FILE3|URI3] ..."
@@ -553,6 +635,14 @@
 msgid "You must provide at least one filename or URI to play."
 msgstr "Ak chcete prehrávať, musíte zadať aspoň jeden názov súboru alebo URI."
 
+msgid "Press 'k' to see a list of keyboard shortcuts.\n"
+msgstr ""
+
+#~ msgid "A %s plugin is required to play this stream, but not installed."
+#~ msgstr ""
+#~ "Na prehratie tohto prúdu údajov je vyžadovaný zásuvný modul %s, ktorý nie "
+#~ "je nainštalovaný."
+
 #~ msgid "Master"
 #~ msgstr "Hlavný"
 
diff --git a/po/sl.gmo b/po/sl.gmo
index 6ccbb6d..62765bf 100644
--- a/po/sl.gmo
+++ b/po/sl.gmo
Binary files differ
diff --git a/po/sl.po b/po/sl.po
index 3e36581..6580c3d 100644
--- a/po/sl.po
+++ b/po/sl.po
@@ -10,7 +10,7 @@
 msgstr ""
 "Project-Id-Version: gst-plugins-base-1.0.3\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2014-12-18 12:05+0100\n"
+"POT-Creation-Date: 2015-09-18 19:09+0200\n"
 "PO-Revision-Date: 2013-01-05 10:10+0100\n"
 "Last-Translator: Klemen Košir <klemen913@gmail.com>\n"
 "Language-Team: Slovenian <translation-team-sl@lists.sourceforge.net>\n"
@@ -82,10 +82,6 @@
 msgid "Missing element '%s' - check your GStreamer installation."
 msgstr "Predmet '%s' manjka - preverite namestitev paketa GStreamer."
 
-#, c-format
-msgid "A %s plugin is required to play this stream, but not installed."
-msgstr "Za predvajanje tega pretoka je potreben vstavek %s, ki pa ni nameščen."
-
 msgid "Could not determine type of stream"
 msgstr "Vrste pretoka ni mogoče določiti."
 
@@ -518,12 +514,97 @@
 "added/removed."
 msgstr ""
 
+#, c-format
+msgid "Volume: %.0f%%"
+msgstr ""
+
 msgid "Buffering..."
 msgstr ""
 
 msgid "Clock lost, selecting a new one\n"
 msgstr ""
 
+msgid "Reached end of play list."
+msgstr ""
+
+msgid "Paused"
+msgstr ""
+
+#, c-format
+msgid "Now playing %s\n"
+msgstr ""
+
+#, c-format
+msgid "About to finish, preparing next title: %s"
+msgstr ""
+
+#, c-format
+msgid "Playback rate: %.2f"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "Could not change playback rate to %.2f"
+msgstr "Naprave ni mogoče odpreti za predvajanje v stereo načinu."
+
+msgid "space"
+msgstr ""
+
+msgid "pause/unpause"
+msgstr ""
+
+msgid "q or ESC"
+msgstr ""
+
+msgid "quit"
+msgstr ""
+
+msgid "play next"
+msgstr ""
+
+msgid "play previous"
+msgstr ""
+
+msgid "seek forward"
+msgstr ""
+
+msgid "seek backward"
+msgstr ""
+
+msgid "volume up"
+msgstr ""
+
+msgid "volume down"
+msgstr ""
+
+msgid "increase playback rate"
+msgstr ""
+
+msgid "decrease playback rate"
+msgstr ""
+
+msgid "change playback direction"
+msgstr ""
+
+msgid "enable/disable trick modes"
+msgstr ""
+
+#, fuzzy
+msgid "change audio track"
+msgstr "Ta CD nima zvočnih sledi"
+
+msgid "change video track"
+msgstr ""
+
+#, fuzzy
+msgid "change subtitle track"
+msgstr "Oblika podnapisov Kate"
+
+msgid "show keyboard shortcuts"
+msgstr ""
+
+msgid "Interactive mode - keyboard controls:"
+msgstr ""
+
 msgid "Video sink to use (default is autovideosink)"
 msgstr ""
 
@@ -536,7 +617,7 @@
 msgid "Shuffle playlist"
 msgstr ""
 
-msgid "Interactive control via keyboard"
+msgid "Disable interactive control via the keyboard"
 msgstr ""
 
 msgid "Volume"
@@ -545,9 +626,19 @@
 msgid "Playlist file containing input media files"
 msgstr ""
 
+msgid "Do not print any output (apart from errors)"
+msgstr ""
+
 #, c-format
 msgid "Usage: %s FILE1|URI1 [FILE2|URI2] [FILE3|URI3] ..."
 msgstr ""
 
 msgid "You must provide at least one filename or URI to play."
 msgstr ""
+
+msgid "Press 'k' to see a list of keyboard shortcuts.\n"
+msgstr ""
+
+#~ msgid "A %s plugin is required to play this stream, but not installed."
+#~ msgstr ""
+#~ "Za predvajanje tega pretoka je potreben vstavek %s, ki pa ni nameščen."
diff --git a/po/sq.gmo b/po/sq.gmo
index 9544a47..4b0fe4c 100644
--- a/po/sq.gmo
+++ b/po/sq.gmo
Binary files differ
diff --git a/po/sq.po b/po/sq.po
index f855902..98666a5 100644
--- a/po/sq.po
+++ b/po/sq.po
@@ -6,7 +6,7 @@
 msgstr ""
 "Project-Id-Version: gst-plugins 0.8.3\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2014-12-18 12:05+0100\n"
+"POT-Creation-Date: 2015-09-18 19:09+0200\n"
 "PO-Revision-Date: 2004-08-07 20:29+0200\n"
 "Last-Translator: Laurent Dhima <laurenti@alblinux.net>\n"
 "Language-Team: Albanian <begraj@hotmail.com>\n"
@@ -82,10 +82,6 @@
 msgid "Missing element '%s' - check your GStreamer installation."
 msgstr ""
 
-#, c-format
-msgid "A %s plugin is required to play this stream, but not installed."
-msgstr ""
-
 #, fuzzy
 msgid "Could not determine type of stream"
 msgstr "I pamundur shkrimi tek file \"%s\"."
@@ -519,12 +515,96 @@
 "added/removed."
 msgstr ""
 
+#, fuzzy, c-format
+msgid "Volume: %.0f%%"
+msgstr "Volumi"
+
 msgid "Buffering..."
 msgstr ""
 
 msgid "Clock lost, selecting a new one\n"
 msgstr ""
 
+msgid "Reached end of play list."
+msgstr ""
+
+msgid "Paused"
+msgstr ""
+
+#, c-format
+msgid "Now playing %s\n"
+msgstr ""
+
+#, c-format
+msgid "About to finish, preparing next title: %s"
+msgstr ""
+
+#, c-format
+msgid "Playback rate: %.2f"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "Could not change playback rate to %.2f"
+msgstr "I pamundur hapja e dispozitivit CD për lexim."
+
+msgid "space"
+msgstr ""
+
+msgid "pause/unpause"
+msgstr ""
+
+msgid "q or ESC"
+msgstr ""
+
+msgid "quit"
+msgstr ""
+
+msgid "play next"
+msgstr ""
+
+msgid "play previous"
+msgstr ""
+
+msgid "seek forward"
+msgstr ""
+
+msgid "seek backward"
+msgstr ""
+
+#, fuzzy
+msgid "volume up"
+msgstr "Volumi"
+
+msgid "volume down"
+msgstr ""
+
+msgid "increase playback rate"
+msgstr ""
+
+msgid "decrease playback rate"
+msgstr ""
+
+msgid "change playback direction"
+msgstr ""
+
+msgid "enable/disable trick modes"
+msgstr ""
+
+msgid "change audio track"
+msgstr ""
+
+msgid "change video track"
+msgstr ""
+
+msgid "change subtitle track"
+msgstr ""
+
+msgid "show keyboard shortcuts"
+msgstr ""
+
+msgid "Interactive mode - keyboard controls:"
+msgstr ""
+
 msgid "Video sink to use (default is autovideosink)"
 msgstr ""
 
@@ -537,7 +617,7 @@
 msgid "Shuffle playlist"
 msgstr ""
 
-msgid "Interactive control via keyboard"
+msgid "Disable interactive control via the keyboard"
 msgstr ""
 
 msgid "Volume"
@@ -546,6 +626,9 @@
 msgid "Playlist file containing input media files"
 msgstr ""
 
+msgid "Do not print any output (apart from errors)"
+msgstr ""
+
 #, c-format
 msgid "Usage: %s FILE1|URI1 [FILE2|URI2] [FILE3|URI3] ..."
 msgstr ""
@@ -553,6 +636,9 @@
 msgid "You must provide at least one filename or URI to play."
 msgstr ""
 
+msgid "Press 'k' to see a list of keyboard shortcuts.\n"
+msgstr ""
+
 #~ msgid "Bass"
 #~ msgstr "Bas"
 
diff --git a/po/sr.gmo b/po/sr.gmo
index 48b46bc..f5ae8b9 100644
--- a/po/sr.gmo
+++ b/po/sr.gmo
Binary files differ
diff --git a/po/sr.po b/po/sr.po
index e8637f9..0d753cb 100644
--- a/po/sr.po
+++ b/po/sr.po
@@ -7,7 +7,7 @@
 msgstr ""
 "Project-Id-Version: gst-plugins-base-1.4.1\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2014-12-18 12:05+0100\n"
+"POT-Creation-Date: 2015-09-18 19:09+0200\n"
 "PO-Revision-Date: 2014-09-13 10:45+0200\n"
 "Last-Translator: Мирослав Николић <miroslavnikolic@rocketmail.com>\n"
 "Language-Team: Serbian <(nothing)>\n"
@@ -80,10 +80,6 @@
 msgid "Missing element '%s' - check your GStreamer installation."
 msgstr "Недостаје елемент „%s“ — проверите вашу инсталацију Гстримера."
 
-#, c-format
-msgid "A %s plugin is required to play this stream, but not installed."
-msgstr "За пуштање овог тока потребан је прикључак „%s“, али није инсталиран."
-
 msgid "Could not determine type of stream"
 msgstr "Не могу да утврдим врсту тока"
 
@@ -517,12 +513,99 @@
 "Не излази након показивања почетног списка уређаја, већ чека да уређаји буду "
 "додати/уклоњени."
 
+#, fuzzy, c-format
+msgid "Volume: %.0f%%"
+msgstr "Јачина звука"
+
 msgid "Buffering..."
 msgstr "Смештам у међумеморију..."
 
 msgid "Clock lost, selecting a new one\n"
 msgstr "Сат је изгубљен, бирам нови\n"
 
+msgid "Reached end of play list."
+msgstr ""
+
+msgid "Paused"
+msgstr ""
+
+#, c-format
+msgid "Now playing %s\n"
+msgstr ""
+
+#, c-format
+msgid "About to finish, preparing next title: %s"
+msgstr ""
+
+#, c-format
+msgid "Playback rate: %.2f"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "Could not change playback rate to %.2f"
+msgstr "Не могу да отворим уређај ради пуштања у стерео режиму."
+
+msgid "space"
+msgstr ""
+
+msgid "pause/unpause"
+msgstr ""
+
+msgid "q or ESC"
+msgstr ""
+
+msgid "quit"
+msgstr ""
+
+msgid "play next"
+msgstr ""
+
+msgid "play previous"
+msgstr ""
+
+msgid "seek forward"
+msgstr ""
+
+msgid "seek backward"
+msgstr ""
+
+#, fuzzy
+msgid "volume up"
+msgstr "Јачина звука"
+
+msgid "volume down"
+msgstr ""
+
+msgid "increase playback rate"
+msgstr ""
+
+msgid "decrease playback rate"
+msgstr ""
+
+msgid "change playback direction"
+msgstr ""
+
+msgid "enable/disable trick modes"
+msgstr ""
+
+#, fuzzy
+msgid "change audio track"
+msgstr "Овај ЦД нема звучних нумера"
+
+msgid "change video track"
+msgstr ""
+
+#, fuzzy
+msgid "change subtitle track"
+msgstr "Кејт запис превода"
+
+msgid "show keyboard shortcuts"
+msgstr ""
+
+#, fuzzy
+msgid "Interactive mode - keyboard controls:"
+msgstr "Међудејствено управљање путем тастатуре"
+
 msgid "Video sink to use (default is autovideosink)"
 msgstr "Усаглашавање снимка за коришћење (основно је „autovideosink“)"
 
@@ -535,7 +618,8 @@
 msgid "Shuffle playlist"
 msgstr "Меша списак нумера"
 
-msgid "Interactive control via keyboard"
+#, fuzzy
+msgid "Disable interactive control via the keyboard"
 msgstr "Међудејствено управљање путем тастатуре"
 
 msgid "Volume"
@@ -544,6 +628,9 @@
 msgid "Playlist file containing input media files"
 msgstr "Датотека списка нумера садржи датотеке улазних медија"
 
+msgid "Do not print any output (apart from errors)"
+msgstr ""
+
 #, c-format
 msgid "Usage: %s FILE1|URI1 [FILE2|URI2] [FILE3|URI3] ..."
 msgstr ""
@@ -552,3 +639,10 @@
 msgid "You must provide at least one filename or URI to play."
 msgstr ""
 "Морате да доставите барем један назив датотеке или путању да бисте пустили."
+
+msgid "Press 'k' to see a list of keyboard shortcuts.\n"
+msgstr ""
+
+#~ msgid "A %s plugin is required to play this stream, but not installed."
+#~ msgstr ""
+#~ "За пуштање овог тока потребан је прикључак „%s“, али није инсталиран."
diff --git a/po/sv.gmo b/po/sv.gmo
index 706c268..13bd84b 100644
--- a/po/sv.gmo
+++ b/po/sv.gmo
Binary files differ
diff --git a/po/sv.po b/po/sv.po
index 3e8aa72..9e16752 100644
--- a/po/sv.po
+++ b/po/sv.po
@@ -9,7 +9,7 @@
 msgstr ""
 "Project-Id-Version: gst-plugins-base 1.4.0\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2014-12-18 12:05+0100\n"
+"POT-Creation-Date: 2015-09-18 19:09+0200\n"
 "PO-Revision-Date: 2014-07-19 16:23+0200\n"
 "Last-Translator: Sebastian Rasmussen <sebras@gmail.com>\n"
 "Language-Team: Swedish <tp-sv@listor.tp-sv.se>\n"
@@ -80,12 +80,6 @@
 msgid "Missing element '%s' - check your GStreamer installation."
 msgstr "Saknar elementet \"%s\" - kontrollera din GStreamer-installation."
 
-#, c-format
-msgid "A %s plugin is required to play this stream, but not installed."
-msgstr ""
-"En %s-insticksmodul krävs för att spela upp den här strömmen men är inte "
-"installerad."
-
 msgid "Could not determine type of stream"
 msgstr "Kunde inte fastställa typ av ström"
 
@@ -519,12 +513,99 @@
 "Avsluta inte efter att den inledande enhetslistan visats, utan vänta på att "
 "enheter läggs till/tas bort."
 
+#, fuzzy, c-format
+msgid "Volume: %.0f%%"
+msgstr "Volym"
+
 msgid "Buffering..."
 msgstr "Buffrar..."
 
 msgid "Clock lost, selecting a new one\n"
 msgstr "Klocka förlorad, väljer en ny\n"
 
+msgid "Reached end of play list."
+msgstr ""
+
+msgid "Paused"
+msgstr ""
+
+#, c-format
+msgid "Now playing %s\n"
+msgstr ""
+
+#, c-format
+msgid "About to finish, preparing next title: %s"
+msgstr ""
+
+#, c-format
+msgid "Playback rate: %.2f"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "Could not change playback rate to %.2f"
+msgstr "Kunde inte öppna enheten för uppspelning i stereoläge."
+
+msgid "space"
+msgstr ""
+
+msgid "pause/unpause"
+msgstr ""
+
+msgid "q or ESC"
+msgstr ""
+
+msgid "quit"
+msgstr ""
+
+msgid "play next"
+msgstr ""
+
+msgid "play previous"
+msgstr ""
+
+msgid "seek forward"
+msgstr ""
+
+msgid "seek backward"
+msgstr ""
+
+#, fuzzy
+msgid "volume up"
+msgstr "Volym"
+
+msgid "volume down"
+msgstr ""
+
+msgid "increase playback rate"
+msgstr ""
+
+msgid "decrease playback rate"
+msgstr ""
+
+msgid "change playback direction"
+msgstr ""
+
+msgid "enable/disable trick modes"
+msgstr ""
+
+#, fuzzy
+msgid "change audio track"
+msgstr "Den här cd-skivan saknar ljudspår"
+
+msgid "change video track"
+msgstr ""
+
+#, fuzzy
+msgid "change subtitle track"
+msgstr "Undertextformatet Kate"
+
+msgid "show keyboard shortcuts"
+msgstr ""
+
+#, fuzzy
+msgid "Interactive mode - keyboard controls:"
+msgstr "Interaktiv styrning via tangentbord"
+
 msgid "Video sink to use (default is autovideosink)"
 msgstr "Videoutgång som ska användas (standard är autovideosink)"
 
@@ -537,7 +618,8 @@
 msgid "Shuffle playlist"
 msgstr "Blanda spellista"
 
-msgid "Interactive control via keyboard"
+#, fuzzy
+msgid "Disable interactive control via the keyboard"
 msgstr "Interaktiv styrning via tangentbord"
 
 msgid "Volume"
@@ -546,9 +628,20 @@
 msgid "Playlist file containing input media files"
 msgstr "Fil med spellista innehållandes inkommande mediafiler"
 
+msgid "Do not print any output (apart from errors)"
+msgstr ""
+
 #, c-format
 msgid "Usage: %s FILE1|URI1 [FILE2|URI2] [FILE3|URI3] ..."
 msgstr "Användning: %s FIL1|URI1 [FIL2|URI2] [FIL3|URI3] ..."
 
 msgid "You must provide at least one filename or URI to play."
 msgstr "Du måste ange åtminstone ett filnamn eller en URI att spela."
+
+msgid "Press 'k' to see a list of keyboard shortcuts.\n"
+msgstr ""
+
+#~ msgid "A %s plugin is required to play this stream, but not installed."
+#~ msgstr ""
+#~ "En %s-insticksmodul krävs för att spela upp den här strömmen men är inte "
+#~ "installerad."
diff --git a/po/tr.gmo b/po/tr.gmo
index cb0face..61e6f37 100644
--- a/po/tr.gmo
+++ b/po/tr.gmo
Binary files differ
diff --git a/po/tr.po b/po/tr.po
index eeff532..bb7f872 100644
--- a/po/tr.po
+++ b/po/tr.po
@@ -1,19 +1,22 @@
 # translation of gst-plugins-base-1.0.3.po to Turkish
 # This file is put in the public domain.
+# This file is distributed under the same license as the gst-plugins-base package.
 # Server Acim <serveracim@gmail.com>, 2010.
-# Server Acim <serveracim@gmail.com>, 2013.
+# Server Acim <serveracim@gmail.com>, 2013, 2015.
 msgid ""
 msgstr ""
-"Project-Id-Version: gst-plugins-base 1.0.3\n"
+"Project-Id-Version: gst-plugins-base 1.4.1\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2014-12-18 12:05+0100\n"
-"PO-Revision-Date: 2013-03-10 12:46+0200\n"
-"Last-Translator: Server Acim <serveracim@gmail.com>\n"
+"POT-Creation-Date: 2015-09-18 19:09+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"
 "Language: tr\n"
 "MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=utf-8\n"
+"Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n > 1);\n"
+"X-Generator: Lokalize 1.5\n"
 
 msgid "Could not open device for playback in mono mode."
 msgstr "Mono kipte çalmak için aygıt açılamıyor."
@@ -36,7 +39,7 @@
 msgstr "Aygıtı çalma için açamıyor."
 
 msgid "Error outputting to audio device. The device has been disconnected."
-msgstr ""
+msgstr "Ses aygıtına çıktı gönderilirken hata. Aygıt bağlantısı kesildi."
 
 msgid "Could not open device for recording in mono mode."
 msgstr "Mono kipte kaydetmek için aygıtı açamıyor."
@@ -59,7 +62,7 @@
 msgstr "Kayıt için ses aygıtı açılamıyor."
 
 msgid "Error recording from audio device. The device has been disconnected."
-msgstr ""
+msgstr "Ses aygıtından kayıt sırasında hata. Aygıt bağlantısı kesildi."
 
 msgid "Could not open CD device for reading."
 msgstr "Okumak için CD aygıtı açılamıyor."
@@ -77,19 +80,14 @@
 msgid "Missing element '%s' - check your GStreamer installation."
 msgstr "Kayıp öğe '%s' - GStreamer kurulumunu denetleyin."
 
-#, c-format
-msgid "A %s plugin is required to play this stream, but not installed."
-msgstr "Bir %s eklenti bu akışı çalmak için gerekli, fakat kurulu değil."
-
 msgid "Could not determine type of stream"
 msgstr "Akışın türü belirlenemiyor"
 
 msgid "This appears to be a text file"
 msgstr "Bu bir metin dosyasına benziyor"
 
-#, fuzzy
 msgid "Could not create \"uridecodebin\" element."
-msgstr "\"decodebin\" öğesi oluşturulamıyor."
+msgstr "\"uridecodebin\" ögesi oluşturulamıyor."
 
 #, c-format
 msgid "Both autovideosink and %s elements are missing."
@@ -201,7 +199,7 @@
 msgstr "Çalıştırma-uzunluğu kodlaması"
 
 msgid "Timed Text"
-msgstr ""
+msgstr "Zamanlanmış Metin"
 
 msgid "Subtitle"
 msgstr "Altyazı"
@@ -230,25 +228,25 @@
 msgid "Uncompressed gray"
 msgstr "Sıkıştırılmamış gri resim"
 
-#, fuzzy, c-format
+#, c-format
 msgid "Uncompressed packed YUV %s"
-msgstr "Sıkıştırılmamış paket YUV 4:2:2"
+msgstr "Sıkıştırılmamış paket YUV %s"
 
-#, fuzzy, c-format
+#, c-format
 msgid "Uncompressed semi-planar YUV %s"
-msgstr "Sıkıştırılmamış planar YUV 4:2:0"
+msgstr "Sıkıştırılmamış yarı düzlem YUV %s"
 
-#, fuzzy, c-format
+#, c-format
 msgid "Uncompressed planar YUV %s"
-msgstr "Sıkıştırılmamış planar YUV 4:2:0"
+msgstr "Sıkıştırılmamış düzlem YUV %s"
 
-#, fuzzy, c-format
+#, c-format
 msgid "Uncompressed palettized %d-bit %s"
-msgstr "Şıkıştırılmamış ses seviyesi %s%d-bit %s"
+msgstr "Sıkıştırılmamış paletlenmiş %d-bit %s"
 
-#, fuzzy, c-format
+#, c-format
 msgid "Uncompressed %d-bit %s"
-msgstr "Şıkıştırılmamış ses seviyesi %s%d-bit %s"
+msgstr "Şıkıştırılmamış %d-bit %s"
 
 #, c-format
 msgid "DivX MPEG-4 Version %d"
@@ -500,53 +498,152 @@
 msgstr "ayrıştırılmamış id3v2 etiket çerçevesi"
 
 msgid "musical-key"
-msgstr ""
+msgstr "müzik anahtarı"
 
 msgid "Initial key in which the sound starts"
-msgstr ""
+msgstr "Sesin başladığı başlangıç anahtarı"
 
 msgid "Print version information and exit"
-msgstr ""
+msgstr "Sürüm bilgisini yaz ve çık"
 
 msgid ""
 "Don't exit after showing the initial device list, but wait for devices to "
 "added/removed."
 msgstr ""
+"Başlangıç aygıt listesini gösterdikten sonra kapanma, eklenecek/çıkartılacak "
+"aygıtları bekle."
+
+#, fuzzy, c-format
+msgid "Volume: %.0f%%"
+msgstr "Ses"
 
 msgid "Buffering..."
-msgstr ""
+msgstr "Tampon belleğe alınıyor..."
 
 msgid "Clock lost, selecting a new one\n"
+msgstr "Saat kayboldu, yenisi seçiliyor\n"
+
+msgid "Reached end of play list."
 msgstr ""
 
+msgid "Paused"
+msgstr ""
+
+#, c-format
+msgid "Now playing %s\n"
+msgstr ""
+
+#, c-format
+msgid "About to finish, preparing next title: %s"
+msgstr ""
+
+#, c-format
+msgid "Playback rate: %.2f"
+msgstr ""
+
+#, fuzzy, c-format
+msgid "Could not change playback rate to %.2f"
+msgstr "Stereo kipte çalmak için aygıt açılamıyor."
+
+msgid "space"
+msgstr ""
+
+msgid "pause/unpause"
+msgstr ""
+
+msgid "q or ESC"
+msgstr ""
+
+msgid "quit"
+msgstr ""
+
+msgid "play next"
+msgstr ""
+
+msgid "play previous"
+msgstr ""
+
+msgid "seek forward"
+msgstr ""
+
+msgid "seek backward"
+msgstr ""
+
+#, fuzzy
+msgid "volume up"
+msgstr "Ses"
+
+msgid "volume down"
+msgstr ""
+
+msgid "increase playback rate"
+msgstr ""
+
+msgid "decrease playback rate"
+msgstr ""
+
+msgid "change playback direction"
+msgstr ""
+
+msgid "enable/disable trick modes"
+msgstr ""
+
+#, fuzzy
+msgid "change audio track"
+msgstr "Bu CD hiç ses izi içermiyor"
+
+msgid "change video track"
+msgstr ""
+
+#, fuzzy
+msgid "change subtitle track"
+msgstr "Kate altyazı kipi"
+
+msgid "show keyboard shortcuts"
+msgstr ""
+
+#, fuzzy
+msgid "Interactive mode - keyboard controls:"
+msgstr "Klavye ile etkileşimli kontrol"
+
 msgid "Video sink to use (default is autovideosink)"
-msgstr ""
+msgstr "Kullanılacak video alıcı (varsayılan autovideosink)"
 
 msgid "Audio sink to use (default is autoaudiosink)"
-msgstr ""
+msgstr "Kullanılacak ses alıcı (varsayılan autoaudiosink)"
 
 msgid "Enable gapless playback"
-msgstr ""
+msgstr "Aralıksız çalmayı etkinleştir"
 
 msgid "Shuffle playlist"
-msgstr ""
+msgstr "Çalma listesini karıştır"
 
-msgid "Interactive control via keyboard"
-msgstr ""
+#, fuzzy
+msgid "Disable interactive control via the keyboard"
+msgstr "Klavye ile etkileşimli kontrol"
 
 msgid "Volume"
-msgstr ""
+msgstr "Ses"
 
 msgid "Playlist file containing input media files"
+msgstr "Çalma listesi dosyası girdi medya dosyaları içeriyor"
+
+msgid "Do not print any output (apart from errors)"
 msgstr ""
 
 #, c-format
 msgid "Usage: %s FILE1|URI1 [FILE2|URI2] [FILE3|URI3] ..."
-msgstr ""
+msgstr "Kullanım: %s FILE1|URI1 [FILE2|URI2] [FILE3|URI3] ..."
 
 msgid "You must provide at least one filename or URI to play."
+msgstr "Çalmak için en azından bir dosya adı veya URI sağlamalısınız."
+
+msgid "Press 'k' to see a list of keyboard shortcuts.\n"
 msgstr ""
 
+#~ msgid "A %s plugin is required to play this stream, but not installed."
+#~ msgstr "Bir %s eklenti bu akışı çalmak için gerekli, fakat kurulu değil."
+
 #~ msgid "Uncompressed %s YUV %s"
 #~ msgstr "Sıkıştırılmamış %s YUV %s"
 
diff --git a/po/uk.gmo b/po/uk.gmo
index 358648b..7dcc815 100644
--- a/po/uk.gmo
+++ b/po/uk.gmo
Binary files differ
diff --git a/po/uk.po b/po/uk.po
index bee18ca..49fb014 100644
--- a/po/uk.po
+++ b/po/uk.po
@@ -3,13 +3,13 @@
 # This file is distributed under the same license as the gst-plugins-base package.
 #
 # Maxim V. Dziumanenko <dziumanenko@gmail.com>, 2004-2007.
-# Yuri Chornoivan <yurchor@ukr.net>, 2010, 2011, 2012, 2013, 2014.
+# Yuri Chornoivan <yurchor@ukr.net>, 2010, 2011, 2012, 2013, 2014, 2015.
 msgid ""
 msgstr ""
-"Project-Id-Version: gst-plugins-base 1.4.0\n"
+"Project-Id-Version: gst-plugins-base 1.5.2\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2014-12-18 12:05+0100\n"
-"PO-Revision-Date: 2014-07-21 14:23+0300\n"
+"POT-Creation-Date: 2015-09-18 19:09+0200\n"
+"PO-Revision-Date: 2015-06-26 07:35+0300\n"
 "Last-Translator: Yuri Chornoivan <yurchor@ukr.net>\n"
 "Language-Team: Ukrainian <translation-team-uk@lists.sourceforge.net>\n"
 "Language: uk\n"
@@ -86,10 +86,6 @@
 msgstr ""
 "Відсутній елемент «%s». Перевірте, чи встановлено GStreamer належним чином."
 
-#, c-format
-msgid "A %s plugin is required to play this stream, but not installed."
-msgstr "Для відтворення потоку потрібен модуль %s, але він не встановлений."
-
 msgid "Could not determine type of stream"
 msgstr "Не вдалося визначити тип даних потоку"
 
@@ -535,12 +531,95 @@
 "Не завершувати роботу після показу початкового списку пристроїв, чекати на "
 "додавання або вилучення пристроїв."
 
+#, c-format
+msgid "Volume: %.0f%%"
+msgstr "Гучність: %.0f%%"
+
 msgid "Buffering..."
 msgstr "Буферизація…"
 
 msgid "Clock lost, selecting a new one\n"
 msgstr "Доступ до годинника втрачено, вибираємо новий\n"
 
+msgid "Reached end of play list."
+msgstr "Відтворення списку завершено."
+
+msgid "Paused"
+msgstr "Призупинено"
+
+#, c-format
+msgid "Now playing %s\n"
+msgstr "Відтворюється %s\n"
+
+#, c-format
+msgid "About to finish, preparing next title: %s"
+msgstr "Майже завершили, готуємо наступну композицію: %s"
+
+#, c-format
+msgid "Playback rate: %.2f"
+msgstr "Частота відтворення: %.2f"
+
+#, c-format
+msgid "Could not change playback rate to %.2f"
+msgstr "Не вдалося змінити частоту відтворення на %.2f"
+
+msgid "space"
+msgstr "пробіл"
+
+msgid "pause/unpause"
+msgstr "призупинити/поновити"
+
+msgid "q or ESC"
+msgstr "q або ESC"
+
+msgid "quit"
+msgstr "вийти"
+
+msgid "play next"
+msgstr "наступна"
+
+msgid "play previous"
+msgstr "попередня"
+
+msgid "seek forward"
+msgstr "до кінця"
+
+msgid "seek backward"
+msgstr "до початку"
+
+msgid "volume up"
+msgstr "гучніше"
+
+msgid "volume down"
+msgstr "тихіше"
+
+msgid "increase playback rate"
+msgstr "збільшити частоту відтворення"
+
+msgid "decrease playback rate"
+msgstr "зменшити частоту відтворення"
+
+msgid "change playback direction"
+msgstr "змінити напрям відтворення"
+
+msgid "enable/disable trick modes"
+msgstr "увімкнути або вимкнути особливі режими"
+
+msgid "change audio track"
+msgstr "змінити звукову доріжку"
+
+msgid "change video track"
+msgstr "змінити відеодоріжку"
+
+msgid "change subtitle track"
+msgstr "змінити доріжку субтитрів"
+
+msgid "show keyboard shortcuts"
+msgstr "показати клавіатурні скорочення"
+
+msgid "Interactive mode - keyboard controls:"
+msgstr "Інтерактивне керування за допомогою клавіатури:"
+
 msgid "Video sink to use (default is autovideosink)"
 msgstr "Приймач відеоданих, яким слід скористатися (типовим є autovideosink)"
 
@@ -553,8 +632,8 @@
 msgid "Shuffle playlist"
 msgstr "Перемішати список відтворення"
 
-msgid "Interactive control via keyboard"
-msgstr "Інтерактивне керування за допомогою клавіатури"
+msgid "Disable interactive control via the keyboard"
+msgstr "Вимкнути інтерактивне керування за допомогою клавіатури"
 
 msgid "Volume"
 msgstr "Гучність"
@@ -562,6 +641,9 @@
 msgid "Playlist file containing input media files"
 msgstr "Файл списку відтворення, що містить мультимедійні файли вхідних даних"
 
+msgid "Do not print any output (apart from errors)"
+msgstr "Не виводити повідомлень (окрім повідомлень щодо помилок)"
+
 #, c-format
 msgid "Usage: %s FILE1|URI1 [FILE2|URI2] [FILE3|URI3] ..."
 msgstr "Користування: %s ФАЙЛ1|АДРЕСА1 [ФАЙЛ2|АДРЕСА2] [ФАЙЛ3|АДРЕСА3] ..."
@@ -570,6 +652,12 @@
 msgstr ""
 "Вам слід вказати принаймні одну назву файла або адресу для відтворення."
 
+msgid "Press 'k' to see a list of keyboard shortcuts.\n"
+msgstr "Натисніть «k», щоб переглянути список клавіатурних скорочень.\n"
+
+#~ msgid "A %s plugin is required to play this stream, but not installed."
+#~ msgstr "Для відтворення потоку потрібен модуль %s, але він не встановлений."
+
 #~ msgid "Uncompressed %s YUV %s"
 #~ msgstr "Нестиснене %s, YUV %s"
 
diff --git a/po/vi.gmo b/po/vi.gmo
index 625c490..e6cc769 100644
--- a/po/vi.gmo
+++ b/po/vi.gmo
Binary files differ
diff --git a/po/vi.po b/po/vi.po
index f7e04a5..5a6581b 100644
--- a/po/vi.po
+++ b/po/vi.po
@@ -1,16 +1,16 @@
 # Vietnamese Translation for GST Plugins Base.
 # Bản dịch tiếng Việt dành cho GST Plugins Base.
-# Copyright © 2014 Free Software Foundation, Inc.
+# Copyright © 2015 Free Software Foundation, Inc.
 # This file is distributed under the same license as the gst-plugins-base package.
 # Clytie Siddall <clytie@riverland.net.au>, 2005-2010.
-# Trần Ngọc Quân <vnwildman@gmail.com>, 2012-2014.
+# Trần Ngọc Quân <vnwildman@gmail.com>, 2012-2014, 2015.
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: gst-plugins-base 1.4.0\n"
+"Project-Id-Version: gst-plugins-base 1.5.2\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2014-12-18 12:05+0100\n"
-"PO-Revision-Date: 2014-07-23 15:56+0700\n"
+"POT-Creation-Date: 2015-09-18 19:09+0200\n"
+"PO-Revision-Date: 2015-08-23 15:58+0700\n"
 "Last-Translator: Trần Ngọc Quân <vnwildman@gmail.com>\n"
 "Language-Team: Vietnamese <translation-team-vi@lists.sourceforge.net>\n"
 "Language: vi\n"
@@ -19,10 +19,7 @@
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=1; plural=0;\n"
 "X-Language-Team-Website: <http://translationproject.org/team/vi.html>\n"
-"X-Generator: LocFactoryEditor 1.8\n"
-"X-Poedit-SourceCharset: UTF-8\n"
-"X-Poedit-Language: Vietnamese\n"
-"X-Poedit-Country: VIET NAM\n"
+"X-Generator: Gtranslator 2.91.7\n"
 
 msgid "Could not open device for playback in mono mode."
 msgstr "Không thể mở thiết bị để phát lại trong chế độ đơn kênh."
@@ -85,10 +82,6 @@
 msgid "Missing element '%s' - check your GStreamer installation."
 msgstr "Thiếu phần tử “%s” — hãy kiểm tra lại phần cài đặt GStreamer."
 
-#, c-format
-msgid "A %s plugin is required to play this stream, but not installed."
-msgstr "Cần phần bổ sung %s để phát luồng này nhưng chưa cài đặt."
-
 msgid "Could not determine type of stream"
 msgstr "Không thể xác định kiểu của luồng dữ liệu"
 
@@ -208,7 +201,7 @@
 msgstr "MSZH không mất gì (Lossless MSZH)"
 
 msgid "Run-length encoding"
-msgstr "Mã hoá độ dài chạy (Run-Length Encoding: RLE)"
+msgstr "Mã hóa độ dài chạy (Run-Length Encoding: RLE)"
 
 msgid "Timed Text"
 msgstr "Chữ được định thời"
@@ -328,7 +321,7 @@
 
 #, c-format
 msgid "%s encoder"
-msgstr "bộ mã hoá %s"
+msgstr "bộ mã hóa %s"
 
 #, c-format
 msgid "GStreamer element %s"
@@ -347,7 +340,7 @@
 msgstr "Không rõ phần tử giải mã"
 
 msgid "Unknown encoder element"
-msgstr "Không rõ phần tử mã hoá"
+msgstr "Không rõ phần tử mã hóa"
 
 msgid "Plugin or element of unknown type"
 msgstr "Không rõ kiểu của phần bổ sung hay phần tử"
@@ -530,12 +523,95 @@
 "Không tồn tại sau khi hiển thị danh sách thiết bị khởi tạo, nhưng lại chờ "
 "cho thiết bị thêm/xóa."
 
+#, c-format
+msgid "Volume: %.0f%%"
+msgstr "Âm lượng: %.0f%%"
+
 msgid "Buffering..."
-msgstr "Đang đệm..."
+msgstr "Đang đệm…"
 
 msgid "Clock lost, selecting a new one\n"
 msgstr "Mất đồng hồ, chọn một cái mới\n"
 
+msgid "Reached end of play list."
+msgstr "Đã tìm đến cuối danh sách phát."
+
+msgid "Paused"
+msgstr "Đã tạm dừng"
+
+#, c-format
+msgid "Now playing %s\n"
+msgstr "Đang phát %s\n"
+
+#, c-format
+msgid "About to finish, preparing next title: %s"
+msgstr "Gần xong, đang chuẩn bị tiêu đề kế: %s"
+
+#, c-format
+msgid "Playback rate: %.2f"
+msgstr "Tốc độ phát lại: %.2f"
+
+#, c-format
+msgid "Could not change playback rate to %.2f"
+msgstr "Không thể đổi tốc độ phát lại thành %.2f"
+
+msgid "space"
+msgstr "dấu cách"
+
+msgid "pause/unpause"
+msgstr "dừng/thôi dừng"
+
+msgid "q or ESC"
+msgstr "q hay ESC"
+
+msgid "quit"
+msgstr "thoát"
+
+msgid "play next"
+msgstr "phát kế"
+
+msgid "play previous"
+msgstr "phát kế trước"
+
+msgid "seek forward"
+msgstr "di chuyển tiếp"
+
+msgid "seek backward"
+msgstr "di chuyển ngược"
+
+msgid "volume up"
+msgstr "tăng âm lượng"
+
+msgid "volume down"
+msgstr "giảm âm lượng"
+
+msgid "increase playback rate"
+msgstr "tăng tốc độ phát lại"
+
+msgid "decrease playback rate"
+msgstr "giảm tốc độ phát lại"
+
+msgid "change playback direction"
+msgstr "thay đổi hướng phát lại"
+
+msgid "enable/disable trick modes"
+msgstr "bật/tắt chế độ thủ thuật"
+
+msgid "change audio track"
+msgstr "đổi rãnh âm thanh"
+
+msgid "change video track"
+msgstr "đổi rãnh phim"
+
+msgid "change subtitle track"
+msgstr "đổi phụ đề rãnh"
+
+msgid "show keyboard shortcuts"
+msgstr "hiện phím tắt"
+
+msgid "Interactive mode - keyboard controls:"
+msgstr "Chế độ tương tác - điều khiển thông qua bàn phím:"
+
 msgid "Video sink to use (default is autovideosink)"
 msgstr "Bộ chứa video được dùng (mặc định là autovideosink)"
 
@@ -548,8 +624,8 @@
 msgid "Shuffle playlist"
 msgstr "Xáo trộn danh sách phát"
 
-msgid "Interactive control via keyboard"
-msgstr "Điều khiển tương tác thông qua bàn phím"
+msgid "Disable interactive control via the keyboard"
+msgstr "Tắt điều khiển tương tác thông qua bàn phím"
 
 msgid "Volume"
 msgstr "Âm lượng"
@@ -557,13 +633,22 @@
 msgid "Playlist file containing input media files"
 msgstr "Tập tin danh sách phát có chứa các tập tin đa phương tiện đầu vào"
 
+msgid "Do not print any output (apart from errors)"
+msgstr "Đừng in bất kỳ cái gì ra (lấy riêng từ lỗi)"
+
 #, c-format
 msgid "Usage: %s FILE1|URI1 [FILE2|URI2] [FILE3|URI3] ..."
-msgstr "Cách dùng: %s TẬP-TIN1|URI1 [TẬP-TIN2|URI2] [TẬP-TIN3|URI3] ..."
+msgstr "Cách dùng: %s TẬP-TIN1|URI1 [TẬP-TIN2|URI2] [TẬP-TIN3|URI3] …"
 
 msgid "You must provide at least one filename or URI to play."
 msgstr "Bạn phải cung cấp ít nhất là một tên tập tin hay URI để phát."
 
+msgid "Press 'k' to see a list of keyboard shortcuts.\n"
+msgstr "Nhấn phím “k” để xem toàn bộ phím tắt.\n"
+
+#~ msgid "A %s plugin is required to play this stream, but not installed."
+#~ msgstr "Cần phần bổ sung %s để phát luồng này nhưng chưa cài đặt."
+
 #~ msgid "Uncompressed %s YUV %s"
 #~ msgstr "%s YUV %s không nén"
 
diff --git a/po/zh_CN.gmo b/po/zh_CN.gmo
index b831518..a74d21f 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 1766aec..db7eeaa 100644
--- a/po/zh_CN.po
+++ b/po/zh_CN.po
@@ -2,18 +2,20 @@
 # This file is put in the public domain.
 # Funda Wang <fundawang@linux.net.cn>, 2005.
 # Ji ZhengYu <zhengyuji@gmail.com>, 2008.
+# zwpwjwtz <zwpwjwtz@126.com>, 2015.
 msgid ""
 msgstr ""
-"Project-Id-Version: gst-plugins-base 0.10.21.3\n"
+"Project-Id-Version: gst-plugins-base 1.5.2\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2014-12-18 12:05+0100\n"
-"PO-Revision-Date: 2009-01-14 12:41+0800\n"
-"Last-Translator: Ji ZhengYu <zhengyuji@gmail.com>\n"
+"POT-Creation-Date: 2015-09-18 19:09+0200\n"
+"PO-Revision-Date: 2015-09-05 13:43+0800\n"
+"Last-Translator: zwpwjwtz <zwpwjwtz@126.com>\n"
 "Language-Team: Chinese (simplified) <i18n-zh@googlegroups.com>\n"
 "Language: zh_CN\n"
 "MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=utf-8\n"
+"Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Poedit 1.8.4\n"
 
 msgid "Could not open device for playback in mono mode."
 msgstr "无法在单声道模式打开设备播放。"
@@ -34,7 +36,7 @@
 msgstr "无法打开音频设备播放。"
 
 msgid "Error outputting to audio device. The device has been disconnected."
-msgstr ""
+msgstr "输出到音频设备错误。设备已断开连接。"
 
 msgid "Could not open device for recording in mono mode."
 msgstr "无法在单声道模式打开设备录音。"
@@ -55,7 +57,7 @@
 msgstr "无法打开音频设备录音。"
 
 msgid "Error recording from audio device. The device has been disconnected."
-msgstr ""
+msgstr "从音频设备输入错误。设备已断开连接。"
 
 msgid "Could not open CD device for reading."
 msgstr "无法打开 CD 设备读取。"
@@ -73,70 +75,59 @@
 msgid "Missing element '%s' - check your GStreamer installation."
 msgstr "未找到组件‘%s’-请检查您的 GStreamer 安装情况。"
 
-#, c-format
-msgid "A %s plugin is required to play this stream, but not installed."
-msgstr "播放此数据流需要 %s 插件,但它未安装。"
-
-#, fuzzy
 msgid "Could not determine type of stream"
-msgstr "无法创建“typefind”组件。"
+msgstr "无法确定流的类型"
 
 msgid "This appears to be a text file"
 msgstr "此文件是个文本文件"
 
-#, fuzzy
 msgid "Could not create \"uridecodebin\" element."
-msgstr "无法创建“decodebin”组件。"
+msgstr "无法创建“uridecodebin”组件。"
 
-#, fuzzy, c-format
+#, c-format
 msgid "Both autovideosink and %s elements are missing."
-msgstr "autovideosink 和 xvimagesink 组件都缺少。"
+msgstr "缺少 autovideosink 和 %s 组件。"
 
-#, fuzzy
 msgid "The autovideosink element is missing."
-msgstr "autovideosink 和 xvimagesink 组件都缺少。"
+msgstr "缺少 autovideosink 组件。"
 
 #, c-format
 msgid "Configured videosink %s is not working."
-msgstr ""
+msgstr "配置后的 videosink %s 无法工作。"
 
-#, fuzzy, c-format
+#, c-format
 msgid "Both autovideosink and %s elements are not working."
-msgstr "autovideosink 和 xvimagesink 组件都缺少。"
+msgstr "autovideosink 和 %s 组件都无法工作。"
 
-#, fuzzy
 msgid "The autovideosink element is not working."
-msgstr "autovideosink 和 xvimagesink 组件都缺少。"
+msgstr "autovideosink 组件无法工作。"
 
 msgid "Custom text sink element is not usable."
-msgstr ""
+msgstr "自定义文字汇组件不可用。"
 
 msgid "No volume control found"
 msgstr "未找到音量控制"
 
-#, fuzzy, c-format
+#, c-format
 msgid "Both autoaudiosink and %s elements are missing."
-msgstr "autovideosink 和 alsasink 组件都缺少。"
+msgstr "缺少 autovideosink 和 %s 组件。"
 
-#, fuzzy
 msgid "The autoaudiosink element is missing."
-msgstr "autovideosink 和 alsasink 组件都缺少。"
+msgstr "缺少 autovideosink 组件。"
 
 #, c-format
 msgid "Configured audiosink %s is not working."
-msgstr ""
+msgstr "配置后的 audiosink %s 无法工作。"
 
-#, fuzzy, c-format
+#, c-format
 msgid "Both autoaudiosink and %s elements are not working."
-msgstr "autovideosink 和 alsasink 组件都缺少。"
+msgstr "autovideosink 和 %s 组件都无法工作。"
 
-#, fuzzy
 msgid "The autoaudiosink element is not working."
-msgstr "autovideosink 和 alsasink 组件都缺少。"
+msgstr "autovideosink 组件无法工作。"
 
-#, fuzzy
 msgid "Can't play a text file without video or visualizations."
-msgstr "无法播放不带视频的文本文件。"
+msgstr "无法播放不带视频或可视化效果的文本文件。"
 
 #, c-format
 msgid "No decoder available for type '%s'."
@@ -203,22 +194,19 @@
 msgstr "Run-length 编码"
 
 msgid "Timed Text"
-msgstr ""
+msgstr "定时文本"
 
 msgid "Subtitle"
-msgstr ""
+msgstr "字幕"
 
-#, fuzzy
 msgid "MPL2 subtitle format"
-msgstr "TMPlayer 字幕格式"
+msgstr "MPL2 字幕格式"
 
-#, fuzzy
 msgid "DKS subtitle format"
-msgstr "Sami 字幕格式"
+msgstr "DKS 字幕格式"
 
-#, fuzzy
 msgid "QTtext subtitle format"
-msgstr "Kate 字幕格式"
+msgstr "QTtext 字幕格式"
 
 msgid "Sami subtitle format"
 msgstr "Sami 字幕格式"
@@ -229,45 +217,42 @@
 msgid "Kate subtitle format"
 msgstr "Kate 字幕格式"
 
-#, fuzzy
 msgid "Uncompressed video"
-msgstr "未压缩的 YUV"
+msgstr "未压缩的视频"
 
-#, fuzzy
 msgid "Uncompressed gray"
 msgstr "未压缩的灰度图像"
 
-#, fuzzy, c-format
+#, c-format
 msgid "Uncompressed packed YUV %s"
-msgstr "未压缩的 packed YUV 4:2:2"
+msgstr "未压缩的紧缩 YUV %s"
 
-#, fuzzy, c-format
+#, c-format
 msgid "Uncompressed semi-planar YUV %s"
-msgstr "未压缩的 planar YUV 4:2:0"
+msgstr "未压缩的半平面 YUV %s"
 
-#, fuzzy, c-format
+#, c-format
 msgid "Uncompressed planar YUV %s"
-msgstr "未压缩的 planar YUV 4:2:0"
+msgstr "未压缩的平面 YUV %s"
 
-#, fuzzy, c-format
+#, c-format
 msgid "Uncompressed palettized %d-bit %s"
-msgstr "未压缩的 palettized %d-位 %s"
+msgstr "未压缩的调色板映射 %d位 %s"
 
-#, fuzzy, c-format
+#, c-format
 msgid "Uncompressed %d-bit %s"
-msgstr "未压缩的 palettized %d-位 %s"
+msgstr "未压缩的 %d位 %s"
 
 #, c-format
 msgid "DivX MPEG-4 Version %d"
-msgstr "DivX MPEG-4 版本 %d"
+msgstr "DivX MPEG-4 第 %d 版"
 
-#, fuzzy
 msgid "Uncompressed audio"
-msgstr "未压缩的 YUV"
+msgstr "未压缩的音频"
 
-#, fuzzy, c-format
+#, c-format
 msgid "Raw %d-bit %s audio"
-msgstr "原始 %d-位 PCM 音频"
+msgstr "原始 %d位 %s 音频"
 
 msgid "Audio CD source"
 msgstr "音频 CD 源"
@@ -285,15 +270,15 @@
 msgid "%s protocol source"
 msgstr "%s 协议源"
 
-#, fuzzy, c-format
+#, c-format
 msgid "%s video RTP depayloader"
 msgstr "%s 视频 RTP 去负载器"
 
-#, fuzzy, c-format
+#, c-format
 msgid "%s audio RTP depayloader"
 msgstr "%s 音频 RTP 去负载器"
 
-#, fuzzy, c-format
+#, c-format
 msgid "%s RTP depayloader"
 msgstr "%s RTP 去负载器"
 
@@ -333,7 +318,7 @@
 msgstr "未知源组件"
 
 msgid "Unknown sink element"
-msgstr "未知消音组件"
+msgstr "未知的汇组件"
 
 msgid "Unknown element"
 msgstr "未知组件"
@@ -381,179 +366,268 @@
 msgstr "MusicBrainz TRM ID"
 
 msgid "capturing shutter speed"
-msgstr ""
+msgstr "捕捉快门速度"
 
 msgid "Shutter speed used when capturing an image, in seconds"
-msgstr ""
+msgstr "用于捕捉图像的快门速度,单位为秒"
 
 msgid "capturing focal ratio"
-msgstr ""
+msgstr "捕捉焦比"
 
 msgid "Focal ratio (f-number) used when capturing the image"
-msgstr ""
+msgstr "捕捉图像时的焦比(f值)"
 
 msgid "capturing focal length"
-msgstr ""
+msgstr "捕捉焦距"
 
 msgid "Focal length of the lens used capturing the image, in mm"
-msgstr ""
+msgstr "(在mm中)捕捉图像时的焦距"
 
 msgid "capturing digital zoom ratio"
-msgstr ""
+msgstr "捕捉数码变焦比"
 
 msgid "Digital zoom ratio used when capturing an image"
-msgstr ""
+msgstr "捕捉图像时的数码变焦比"
 
 msgid "capturing iso speed"
-msgstr ""
+msgstr "捕捉ISO感光度"
 
 msgid "The ISO speed used when capturing an image"
-msgstr ""
+msgstr "捕捉图像时使用的ISO感光度"
 
 msgid "capturing exposure program"
-msgstr ""
+msgstr "捕捉曝光程序"
 
 msgid "The exposure program used when capturing an image"
-msgstr ""
+msgstr "用于捕捉图像的曝光程序"
 
 msgid "capturing exposure mode"
-msgstr ""
+msgstr "捕捉曝光模式"
 
 msgid "The exposure mode used when capturing an image"
-msgstr ""
+msgstr "捕捉图像时使用的曝光模式"
 
 msgid "capturing exposure compensation"
-msgstr ""
+msgstr "捕捉曝光补偿"
 
 msgid "The exposure compensation used when capturing an image"
-msgstr ""
+msgstr "捕捉图像时使用的曝光补偿值"
 
 msgid "capturing scene capture type"
-msgstr ""
+msgstr "捕捉场景模式"
 
 msgid "The scene capture mode used when capturing an image"
-msgstr ""
+msgstr "用于捕捉图像的场景模式"
 
 msgid "capturing gain adjustment"
-msgstr ""
+msgstr "捕捉增益调节"
 
 msgid "The overall gain adjustment applied on an image"
-msgstr ""
+msgstr "调整应用于图像的总体增益"
 
 msgid "capturing white balance"
-msgstr ""
+msgstr "捕捉白平衡"
 
 msgid "The white balance mode set when capturing an image"
-msgstr ""
+msgstr "捕捉图像时的白平衡"
 
 msgid "capturing contrast"
-msgstr ""
+msgstr "捕捉对比度"
 
 msgid "The direction of contrast processing applied when capturing an image"
-msgstr ""
+msgstr "捕捉图像时所使用的对比度"
 
 msgid "capturing saturation"
-msgstr ""
+msgstr "捕捉饱和度"
 
 msgid "The direction of saturation processing applied when capturing an image"
-msgstr ""
+msgstr "捕捉图像时所使用的饱和度"
 
 msgid "capturing sharpness"
-msgstr ""
+msgstr "捕捉锐度"
 
 msgid "The direction of sharpness processing applied when capturing an image"
-msgstr ""
+msgstr "捕捉图像时所使用的锐度"
 
 msgid "capturing flash fired"
-msgstr ""
+msgstr "捕捉闪光灯"
 
 msgid "If the flash fired while capturing an image"
-msgstr ""
+msgstr "设定在捕捉图像时是否使用闪光灯补光"
 
 msgid "capturing flash mode"
-msgstr ""
+msgstr "捕捉闪光模式"
 
 msgid "The selected flash mode while capturing an image"
-msgstr ""
+msgstr "捕捉图像时使用的闪光模式"
 
 msgid "capturing metering mode"
-msgstr ""
+msgstr "捕捉测光"
 
 msgid ""
 "The metering mode used while determining exposure for capturing an image"
-msgstr ""
+msgstr "用于确定要捕捉图像的曝光度的测光模式"
 
 msgid "capturing source"
-msgstr ""
+msgstr "捕捉源"
 
 msgid "The source or type of device used for the capture"
-msgstr ""
+msgstr "指定用于捕捉的源或设备类型"
 
 msgid "image horizontal ppi"
-msgstr ""
+msgstr "图像横向ppi"
 
 msgid "Media (image/video) intended horizontal pixel density in ppi"
-msgstr ""
+msgstr "指定媒体(图片/视频)的横向像素密度,单位是ppi"
 
 msgid "image vertical ppi"
-msgstr ""
+msgstr "图像纵向ppi"
 
 msgid "Media (image/video) intended vertical pixel density in ppi"
-msgstr ""
+msgstr "指定媒体(图片/视频)的纵向像素密度,单位是ppi"
 
 msgid "ID3v2 frame"
-msgstr ""
+msgstr "ID3v2 帧"
 
 msgid "unparsed id3v2 tag frame"
-msgstr ""
+msgstr "未被解析的 ID3v2 标识帧"
 
 msgid "musical-key"
-msgstr ""
+msgstr "音调"
 
 msgid "Initial key in which the sound starts"
-msgstr ""
+msgstr "音乐开始时的音调"
 
 msgid "Print version information and exit"
-msgstr ""
+msgstr "显示版本信息,然后退出。"
 
 msgid ""
 "Don't exit after showing the initial device list, but wait for devices to "
 "added/removed."
-msgstr ""
+msgstr "显示初始设备列表后不退出,而是等待设备被添加或移除。"
+
+#, c-format
+msgid "Volume: %.0f%%"
+msgstr "音量:%.0f%%"
 
 msgid "Buffering..."
-msgstr ""
+msgstr "缓冲中..."
 
 msgid "Clock lost, selecting a new one\n"
-msgstr ""
+msgstr "时钟已丢失,请选择一个新的\n"
+
+msgid "Reached end of play list."
+msgstr "到达播放列表结尾。"
+
+msgid "Paused"
+msgstr "已暂停"
+
+#, c-format
+msgid "Now playing %s\n"
+msgstr "正在播放 %s\n"
+
+#, c-format
+msgid "About to finish, preparing next title: %s"
+msgstr "即将结束,准备下一标题:%s"
+
+#, c-format
+msgid "Playback rate: %.2f"
+msgstr "回放速率:%.2f"
+
+#, c-format
+msgid "Could not change playback rate to %.2f"
+msgstr "无法将回放速率改变为%.2f"
+
+msgid "space"
+msgstr "空格"
+
+msgid "pause/unpause"
+msgstr "暂停/继续"
+
+msgid "q or ESC"
+msgstr "q 或 ESC"
+
+msgid "quit"
+msgstr "退出"
+
+msgid "play next"
+msgstr "下一曲"
+
+msgid "play previous"
+msgstr "上一曲"
+
+msgid "seek forward"
+msgstr "前进"
+
+msgid "seek backward"
+msgstr "后退"
+
+msgid "volume up"
+msgstr "增大音量"
+
+msgid "volume down"
+msgstr "减小音量"
+
+msgid "increase playback rate"
+msgstr "增大回放速率"
+
+msgid "decrease playback rate"
+msgstr "减小回访率"
+
+msgid "change playback direction"
+msgstr "改变回放方向"
+
+msgid "enable/disable trick modes"
+msgstr "启用/禁用特效模式"
+
+msgid "change audio track"
+msgstr "改变音频轨"
+
+msgid "change video track"
+msgstr "改变视频轨"
+
+msgid "change subtitle track"
+msgstr "改变字幕轨"
+
+msgid "show keyboard shortcuts"
+msgstr "显示键盘快捷键"
+
+msgid "Interactive mode - keyboard controls:"
+msgstr "交互模式 - 键盘控制:"
 
 msgid "Video sink to use (default is autovideosink)"
-msgstr ""
+msgstr "要使用的视频接收组件(默认为autovideosink)"
 
 msgid "Audio sink to use (default is autoaudiosink)"
-msgstr ""
+msgstr "要使用的音频接收组件(默认为autoaudiosink)"
 
 msgid "Enable gapless playback"
-msgstr ""
+msgstr "启用无缝回放"
 
 msgid "Shuffle playlist"
-msgstr ""
+msgstr "随机播放列表"
 
-msgid "Interactive control via keyboard"
-msgstr ""
+msgid "Disable interactive control via the keyboard"
+msgstr "禁用键盘交互操作"
 
 msgid "Volume"
-msgstr ""
+msgstr "音量"
 
 msgid "Playlist file containing input media files"
-msgstr ""
+msgstr "播放列表文件含有媒体文件"
+
+msgid "Do not print any output (apart from errors)"
+msgstr "不显示任何输出(除了错误信息)"
 
 #, c-format
 msgid "Usage: %s FILE1|URI1 [FILE2|URI2] [FILE3|URI3] ..."
-msgstr ""
+msgstr "用法:%s [文件1|URI1] [文件2|URI2] [文件3|URI3] ..."
 
 msgid "You must provide at least one filename or URI to play."
-msgstr ""
+msgstr "你必须提供至少一个文件名或URI来播放。"
+
+msgid "Press 'k' to see a list of keyboard shortcuts.\n"
+msgstr "按“k”键来显示键盘快捷键列表。\n"
 
 #~ msgid "Master"
 #~ msgstr "主音量"
@@ -600,6 +674,9 @@
 #~ msgid "Error while writing to file \"%s\"."
 #~ msgstr "写入文件“%s”时出错。"
 
+#~ msgid "A %s plugin is required to play this stream, but not installed."
+#~ msgstr "播放此数据流需要 %s 插件,但它未安装。"
+
 #~ msgid "Invalid subtitle URI \"%s\", subtitles disabled."
 #~ msgstr "无效的字幕 URI “%s”,不使用字幕。"
 
@@ -637,7 +714,6 @@
 #~ msgid "Could not create \"queue2\" element."
 #~ msgstr "无法创建“queue2”组件。"
 
-#, fuzzy
 #~ msgid "Error while sending gdp header data to \"%s:%d\"."
 #~ msgstr "发送 gdp 头部数据至“%s:%d”时出错。"
 
@@ -648,25 +724,25 @@
 #~ msgstr "拒绝连接至 %s:%d。"
 
 #~ msgid "Uncompressed planar YVU 4:2:0"
-#~ msgstr "未压缩的 planar YVU 4:2:0"
+#~ msgstr "未压缩的平面 YVU 4:2:0"
 
 #~ msgid "Uncompressed packed YUV 4:1:0"
-#~ msgstr "未压缩的 packed YUV 4:1:0"
+#~ msgstr "未压缩的紧缩 YUV 4:1:0"
 
 #~ msgid "Uncompressed packed YVU 4:1:0"
-#~ msgstr "未压缩的 packed YVU 4:1:0"
+#~ msgstr "未压缩的紧缩 YVU 4:1:0"
 
 #~ msgid "Uncompressed packed YUV 4:1:1"
-#~ msgstr "未压缩的 packed YUV 4:1:1"
+#~ msgstr "未压缩的紧缩 YUV 4:1:1"
 
 #~ msgid "Uncompressed packed YUV 4:4:4"
-#~ msgstr "未压缩的 packed YUV 4:4:4"
+#~ msgstr "未压缩的紧缩 YUV 4:4:4"
 
 #~ msgid "Uncompressed planar YUV 4:2:2"
-#~ msgstr "未压缩的 planar YUV 4:2:2"
+#~ msgstr "未压缩的平面 YUV 4:2:2"
 
 #~ msgid "Uncompressed planar YUV 4:1:1"
-#~ msgstr "未压缩的 planar YUV 4:1:1"
+#~ msgstr "未压缩的平面 YUV 4:1:1"
 
 #~ msgid "Uncompressed black and white Y-plane"
 #~ msgstr "未压缩的黑白 Y-plane"
@@ -675,7 +751,7 @@
 #~ msgstr "原始 PCM 音频"
 
 #~ msgid "Raw %d-bit floating-point audio"
-#~ msgstr "原始 %d-位浮点音频"
+#~ msgstr "原始 %d位浮点音频"
 
 #~ msgid "Raw floating-point audio"
 #~ msgstr "原始浮点音频"
@@ -687,7 +763,31 @@
 #~ msgstr "设备“%s”不存在。"
 
 #~ msgid "Device \"%s\" is already being used."
-#~ msgstr "设备“%s”目前已被使用了。"
+#~ msgstr "设备“%s”正被使用。"
 
 #~ msgid "Could not open device \"%s\" for reading and writing."
 #~ msgstr "无法打开设备“%s”读取。"
+
+#~ msgid "Uncompressed %s YUV %s"
+#~ msgstr "未压缩的 %s YUV %s"
+
+#~ msgid "Both autovideosink and xvimagesink elements are missing."
+#~ msgstr "缺少 autovideosink 和 xvimagesink 组件。"
+
+#~ msgid "Both autoaudiosink and alsasink elements are missing."
+#~ msgstr "缺少 autovideosink 和 alsasink 组件。"
+
+#~ msgid "Could not create \"typefind\" element."
+#~ msgstr "无法创建“typefind”组件。"
+
+#~ msgid "Can't display both text subtitles and subpictures."
+#~ msgstr "无法同时播放文本格式的子标题和子画面。"
+
+#~ msgid "No Temp directory specified."
+#~ msgstr "未指定临时设备。"
+
+#~ msgid "Could not create temp file \"%s\"."
+#~ msgstr "无法创建临时文件“%s”。"
+
+#~ msgid "Internal data flow error."
+#~ msgstr "内部数据流错误。"
diff --git a/sys/Makefile.in b/sys/Makefile.in
index 1ce622c..2b7dacf 100644
--- a/sys/Makefile.in
+++ b/sys/Makefile.in
@@ -1,7 +1,7 @@
-# Makefile.in generated by automake 1.14.1 from Makefile.am.
+# Makefile.in generated by automake 1.15 from Makefile.am.
 # @configure_input@
 
-# Copyright (C) 1994-2013 Free Software Foundation, Inc.
+# 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,
@@ -19,7 +19,17 @@
 # descending into all subdirectories a second time, but only after the first
 # (parallel) run has finished, so it should go right through the second time.
 VPATH = @srcdir@
-am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)'
+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 \
       ?) ;; \
@@ -83,8 +93,6 @@
 build_triplet = @build@
 host_triplet = @host@
 target_triplet = @target@
-DIST_COMMON = $(top_srcdir)/common/parallel-subdirs.mak \
-	$(srcdir)/Makefile.in $(srcdir)/Makefile.am
 subdir = sys
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
 am__aclocal_m4_deps = $(top_srcdir)/common/m4/as-ac-expand.m4 \
@@ -106,7 +114,6 @@
 	$(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-x11.m4 \
 	$(top_srcdir)/common/m4/gst.m4 \
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
@@ -123,6 +130,7 @@
 	$(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
 mkinstalldirs = $(install_sh) -d
 CONFIG_HEADER = $(top_builddir)/config.h
 CONFIG_CLEAN_FILES =
@@ -181,6 +189,8 @@
   done | $(am__uniquify_input)`
 ETAGS = etags
 CTAGS = ctags
+am__DIST_COMMON = $(srcdir)/Makefile.in \
+	$(top_srcdir)/common/parallel-subdirs.mak
 DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
 am__relativize = \
   dir0=`pwd`; \
@@ -266,6 +276,8 @@
 GIO_CFLAGS = @GIO_CFLAGS@
 GIO_LDFLAGS = @GIO_LDFLAGS@
 GIO_LIBS = @GIO_LIBS@
+GIO_UNIX_2_0_CFLAGS = @GIO_UNIX_2_0_CFLAGS@
+GIO_UNIX_2_0_LIBS = @GIO_UNIX_2_0_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
@@ -295,6 +307,8 @@
 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_OPTION_CFLAGS = @GST_OPTION_CFLAGS@
 GST_OPTION_CXXFLAGS = @GST_OPTION_CXXFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
@@ -322,7 +336,6 @@
 GTK_X11_CFLAGS = @GTK_X11_CFLAGS@
 GTK_X11_LIBS = @GTK_X11_LIBS@
 HAVE_CDPARANOIA = @HAVE_CDPARANOIA@
-HAVE_X = @HAVE_X@
 HAVE_XSHM = @HAVE_XSHM@
 HAVE_ZLIB = @HAVE_ZLIB@
 HTML_DIR = @HTML_DIR@
@@ -337,6 +350,7 @@
 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@
@@ -426,13 +440,12 @@
 XGETTEXT = @XGETTEXT@
 XGETTEXT_015 = @XGETTEXT_015@
 XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
-XMKMF = @XMKMF@
+XSHM_CFLAGS = @XSHM_CFLAGS@
 XSHM_LIBS = @XSHM_LIBS@
+XVIDEO_CFLAGS = @XVIDEO_CFLAGS@
 XVIDEO_LIBS = @XVIDEO_LIBS@
 X_CFLAGS = @X_CFLAGS@
-X_EXTRA_LIBS = @X_EXTRA_LIBS@
 X_LIBS = @X_LIBS@
-X_PRE_LIBS = @X_PRE_LIBS@
 ZLIB_CFLAGS = @ZLIB_CFLAGS@
 ZLIB_LIBS = @ZLIB_LIBS@
 abs_builddir = @abs_builddir@
@@ -485,6 +498,7 @@
 psdir = @psdir@
 pyexecdir = @pyexecdir@
 pythondir = @pythondir@
+runstatedir = @runstatedir@
 sbindir = @sbindir@
 sharedstatedir = @sharedstatedir@
 srcdir = @srcdir@
@@ -524,7 +538,6 @@
 	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu sys/Makefile'; \
 	$(am__cd) $(top_srcdir) && \
 	  $(AUTOMAKE) --gnu sys/Makefile
-.PRECIOUS: Makefile
 Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
 	@case '$?' in \
 	  *config.status*) \
@@ -533,7 +546,7 @@
 	    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/parallel-subdirs.mak:
+$(top_srcdir)/common/parallel-subdirs.mak $(am__empty):
 
 $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
 	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
@@ -820,6 +833,8 @@
 	mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \
 	ps ps-am tags tags-am uninstall uninstall-am
 
+.PRECIOUS: Makefile
+
 
 .PHONY: independent-subdirs $(SUBDIRS)
 
diff --git a/sys/ximage/Makefile.in b/sys/ximage/Makefile.in
index 12c8b5a..6238db3 100644
--- a/sys/ximage/Makefile.in
+++ b/sys/ximage/Makefile.in
@@ -1,7 +1,7 @@
-# Makefile.in generated by automake 1.14.1 from Makefile.am.
+# Makefile.in generated by automake 1.15 from Makefile.am.
 # @configure_input@
 
-# Copyright (C) 1994-2013 Free Software Foundation, Inc.
+# 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,
@@ -16,7 +16,17 @@
 
 
 VPATH = @srcdir@
-am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)'
+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 \
       ?) ;; \
@@ -81,8 +91,6 @@
 host_triplet = @host@
 target_triplet = @target@
 subdir = sys/ximage
-DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \
-	$(top_srcdir)/depcomp $(noinst_HEADERS)
 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 \
@@ -103,7 +111,6 @@
 	$(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-x11.m4 \
 	$(top_srcdir)/common/m4/gst.m4 \
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
@@ -120,6 +127,8 @@
 	$(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 =
@@ -227,6 +236,7 @@
   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@
@@ -287,6 +297,8 @@
 GIO_CFLAGS = @GIO_CFLAGS@
 GIO_LDFLAGS = @GIO_LDFLAGS@
 GIO_LIBS = @GIO_LIBS@
+GIO_UNIX_2_0_CFLAGS = @GIO_UNIX_2_0_CFLAGS@
+GIO_UNIX_2_0_LIBS = @GIO_UNIX_2_0_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
@@ -316,6 +328,8 @@
 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_OPTION_CFLAGS = @GST_OPTION_CFLAGS@
 GST_OPTION_CXXFLAGS = @GST_OPTION_CXXFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
@@ -343,7 +357,6 @@
 GTK_X11_CFLAGS = @GTK_X11_CFLAGS@
 GTK_X11_LIBS = @GTK_X11_LIBS@
 HAVE_CDPARANOIA = @HAVE_CDPARANOIA@
-HAVE_X = @HAVE_X@
 HAVE_XSHM = @HAVE_XSHM@
 HAVE_ZLIB = @HAVE_ZLIB@
 HTML_DIR = @HTML_DIR@
@@ -358,6 +371,7 @@
 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@
@@ -447,13 +461,12 @@
 XGETTEXT = @XGETTEXT@
 XGETTEXT_015 = @XGETTEXT_015@
 XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
-XMKMF = @XMKMF@
+XSHM_CFLAGS = @XSHM_CFLAGS@
 XSHM_LIBS = @XSHM_LIBS@
+XVIDEO_CFLAGS = @XVIDEO_CFLAGS@
 XVIDEO_LIBS = @XVIDEO_LIBS@
 X_CFLAGS = @X_CFLAGS@
-X_EXTRA_LIBS = @X_EXTRA_LIBS@
 X_LIBS = @X_LIBS@
-X_PRE_LIBS = @X_PRE_LIBS@
 ZLIB_CFLAGS = @ZLIB_CFLAGS@
 ZLIB_LIBS = @ZLIB_LIBS@
 abs_builddir = @abs_builddir@
@@ -506,6 +519,7 @@
 psdir = @psdir@
 pyexecdir = @pyexecdir@
 pythondir = @pythondir@
+runstatedir = @runstatedir@
 sbindir = @sbindir@
 sharedstatedir = @sharedstatedir@
 srcdir = @srcdir@
@@ -546,7 +560,6 @@
 	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu sys/ximage/Makefile'; \
 	$(am__cd) $(top_srcdir) && \
 	  $(AUTOMAKE) --gnu sys/ximage/Makefile
-.PRECIOUS: Makefile
 Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
 	@case '$?' in \
 	  *config.status*) \
@@ -871,6 +884,8 @@
 	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.
diff --git a/sys/ximage/ximage.c b/sys/ximage/ximage.c
index 0f4044c..7b92601 100644
--- a/sys/ximage/ximage.c
+++ b/sys/ximage/ximage.c
@@ -23,20 +23,20 @@
 
 #include "ximagesink.h"
 
-GST_DEBUG_CATEGORY (gst_debug_ximagepool);
-GST_DEBUG_CATEGORY (gst_debug_ximagesink);
+GST_DEBUG_CATEGORY (gst_debug_x_image_pool);
+GST_DEBUG_CATEGORY (gst_debug_x_image_sink);
 GST_DEBUG_CATEGORY_STATIC (GST_CAT_PERFORMANCE);
 
 static gboolean
 plugin_init (GstPlugin * plugin)
 {
   if (!gst_element_register (plugin, "ximagesink",
-          GST_RANK_SECONDARY, GST_TYPE_XIMAGESINK))
+          GST_RANK_SECONDARY, GST_TYPE_X_IMAGE_SINK))
     return FALSE;
 
-  GST_DEBUG_CATEGORY_INIT (gst_debug_ximagesink, "ximagesink", 0,
+  GST_DEBUG_CATEGORY_INIT (gst_debug_x_image_sink, "ximagesink", 0,
       "ximagesink element");
-  GST_DEBUG_CATEGORY_INIT (gst_debug_ximagepool, "ximagepool", 0,
+  GST_DEBUG_CATEGORY_INIT (gst_debug_x_image_pool, "ximagepool", 0,
       "ximagepool object");
 
   GST_DEBUG_CATEGORY_GET (GST_CAT_PERFORMANCE, "GST_PERFORMANCE");
diff --git a/sys/ximage/ximagepool.c b/sys/ximage/ximagepool.c
index b9c8340..9e55393 100644
--- a/sys/ximage/ximagepool.c
+++ b/sys/ximage/ximagepool.c
@@ -32,19 +32,8 @@
 #include <gst/video/gstvideometa.h>
 #include <gst/video/gstvideopool.h>
 
-GST_DEBUG_CATEGORY_EXTERN (gst_debug_ximagepool);
-#define GST_CAT_DEFAULT gst_debug_ximagepool
-
-struct _GstXImageBufferPoolPrivate
-{
-  GstCaps *caps;
-  GstVideoInfo info;
-  GstVideoAlignment align;
-  guint padded_width;
-  guint padded_height;
-  gboolean add_metavideo;
-  gboolean need_alignment;
-};
+GST_DEBUG_CATEGORY_EXTERN (gst_debug_x_image_pool);
+#define GST_CAT_DEFAULT gst_debug_x_image_pool
 
 /* X11 stuff */
 static gboolean error_caught = FALSE;
@@ -224,16 +213,14 @@
   int (*handler) (Display *, XErrorEvent *);
   gboolean success = FALSE;
   GstXContext *xcontext;
-  gint width, height, align = 15, offset;
-  GstXImageBufferPoolPrivate *priv;
+  gint width, height, align, offset;
   GstXImageMemory *mem;
 
-  priv = xpool->priv;
   ximagesink = xpool->sink;
   xcontext = ximagesink->xcontext;
 
-  width = priv->padded_width;
-  height = priv->padded_height;
+  width = xpool->padded_width;
+  height = xpool->padded_height;
 
   mem = g_slice_new (GstXImageMemory);
 
@@ -241,10 +228,10 @@
   mem->SHMInfo.shmaddr = ((void *) -1);
   mem->SHMInfo.shmid = -1;
 #endif
-  mem->x = priv->align.padding_left;
-  mem->y = priv->align.padding_top;
-  mem->width = GST_VIDEO_INFO_WIDTH (&priv->info);
-  mem->height = GST_VIDEO_INFO_HEIGHT (&priv->info);
+  mem->x = xpool->align.padding_left;
+  mem->y = xpool->align.padding_top;
+  mem->width = GST_VIDEO_INFO_WIDTH (&xpool->info);
+  mem->height = GST_VIDEO_INFO_HEIGHT (&xpool->info);
   mem->sink = gst_object_ref (ximagesink);
 
   GST_DEBUG_OBJECT (ximagesink, "creating image %p (%dx%d)", mem,
@@ -289,6 +276,7 @@
         mem->size, width, mem->ximage->bytes_per_line);
 
     /* get shared memory */
+    align = 0;
     mem->SHMInfo.shmid =
         shmget (IPC_PRIVATE, mem->size + align, IPC_CREAT | 0777);
     if (mem->SHMInfo.shmid == -1)
@@ -343,6 +331,8 @@
     allocsize =
         GST_ROUND_UP_4 (mem->ximage->bytes_per_line) * mem->ximage->height;
 
+    /* we want 16 byte aligned memory, g_malloc may only give 8 */
+    align = 15;
     mem->ximage->data = g_malloc (allocsize + align);
     GST_LOG_OBJECT (ximagesink,
         "non-XShm image size is %" G_GSIZE_FORMAT " (alloced: %u), width %d, "
@@ -429,7 +419,7 @@
 /* This function checks that it is actually really possible to create an image
    using XShm */
 gboolean
-gst_ximagesink_check_xshm_calls (GstXImageSink * ximagesink,
+gst_x_image_sink_check_xshm_calls (GstXImageSink * ximagesink,
     GstXContext * xcontext)
 {
   XImage *ximage;
@@ -535,9 +525,6 @@
 /* bufferpool */
 static void gst_ximage_buffer_pool_finalize (GObject * object);
 
-#define GST_XIMAGE_BUFFER_POOL_GET_PRIVATE(obj)  \
-   (G_TYPE_INSTANCE_GET_PRIVATE ((obj), GST_TYPE_XIMAGE_BUFFER_POOL, GstXImageBufferPoolPrivate))
-
 #define gst_ximage_buffer_pool_parent_class parent_class
 G_DEFINE_TYPE (GstXImageBufferPool, gst_ximage_buffer_pool,
     GST_TYPE_BUFFER_POOL);
@@ -556,7 +543,6 @@
 ximage_buffer_pool_set_config (GstBufferPool * pool, GstStructure * config)
 {
   GstXImageBufferPool *xpool = GST_XIMAGE_BUFFER_POOL_CAST (pool);
-  GstXImageBufferPoolPrivate *priv = xpool->priv;
   GstVideoInfo info;
   GstCaps *caps;
   guint size, min_buffers, max_buffers;
@@ -576,44 +562,46 @@
       caps);
 
   /* keep track of the width and height and caps */
-  if (priv->caps)
-    gst_caps_unref (priv->caps);
-  priv->caps = gst_caps_ref (caps);
+  if (xpool->caps)
+    gst_caps_unref (xpool->caps);
+  xpool->caps = gst_caps_ref (caps);
 
   /* check for the configured metadata */
-  priv->add_metavideo =
+  xpool->add_metavideo =
       gst_buffer_pool_config_has_option (config,
       GST_BUFFER_POOL_OPTION_VIDEO_META);
 
   /* parse extra alignment info */
-  priv->need_alignment = gst_buffer_pool_config_has_option (config,
+  xpool->need_alignment = gst_buffer_pool_config_has_option (config,
       GST_BUFFER_POOL_OPTION_VIDEO_ALIGNMENT);
 
-  if (priv->need_alignment) {
-    gst_buffer_pool_config_get_video_alignment (config, &priv->align);
+  if (xpool->need_alignment) {
+    gst_buffer_pool_config_get_video_alignment (config, &xpool->align);
 
-    GST_LOG_OBJECT (pool, "padding %u-%ux%u-%u", priv->align.padding_top,
-        priv->align.padding_left, priv->align.padding_left,
-        priv->align.padding_bottom);
+    GST_LOG_OBJECT (pool, "padding %u-%ux%u-%u", xpool->align.padding_top,
+        xpool->align.padding_left, xpool->align.padding_left,
+        xpool->align.padding_bottom);
 
     /* do padding and alignment */
-    gst_video_info_align (&info, &priv->align);
+    gst_video_info_align (&info, &xpool->align);
+
+    gst_buffer_pool_config_set_video_alignment (config, &xpool->align);
 
     /* we need the video metadata too now */
-    priv->add_metavideo = TRUE;
+    xpool->add_metavideo = TRUE;
   } else {
-    gst_video_alignment_reset (&priv->align);
+    gst_video_alignment_reset (&xpool->align);
   }
 
   /* add the padding */
-  priv->padded_width =
-      GST_VIDEO_INFO_WIDTH (&info) + priv->align.padding_left +
-      priv->align.padding_right;
-  priv->padded_height =
-      GST_VIDEO_INFO_HEIGHT (&info) + priv->align.padding_top +
-      priv->align.padding_bottom;
+  xpool->padded_width =
+      GST_VIDEO_INFO_WIDTH (&info) + xpool->align.padding_left +
+      xpool->align.padding_right;
+  xpool->padded_height =
+      GST_VIDEO_INFO_HEIGHT (&info) + xpool->align.padding_top +
+      xpool->align.padding_bottom;
 
-  priv->info = info;
+  xpool->info = info;
 
   gst_buffer_pool_config_set_params (config, caps, info.size, min_buffers,
       max_buffers);
@@ -645,12 +633,11 @@
     GstBufferPoolAcquireParams * params)
 {
   GstXImageBufferPool *xpool = GST_XIMAGE_BUFFER_POOL_CAST (pool);
-  GstXImageBufferPoolPrivate *priv = xpool->priv;
   GstVideoInfo *info;
   GstBuffer *ximage;
   GstMemory *mem;
 
-  info = &priv->info;
+  info = &xpool->info;
 
   ximage = gst_buffer_new ();
   mem = ximage_memory_alloc (xpool);
@@ -660,7 +647,7 @@
   }
   gst_buffer_append_memory (ximage, mem);
 
-  if (priv->add_metavideo) {
+  if (xpool->add_metavideo) {
     GST_DEBUG_OBJECT (pool, "adding GstVideoMeta");
     /* these are just the defaults for now */
     gst_buffer_add_video_meta_full (ximage, GST_VIDEO_FRAME_FLAG_NONE,
@@ -685,7 +672,7 @@
 {
   GstXImageBufferPool *pool;
 
-  g_return_val_if_fail (GST_IS_XIMAGESINK (ximagesink), NULL);
+  g_return_val_if_fail (GST_IS_X_IMAGE_SINK (ximagesink), NULL);
 
   pool = g_object_new (GST_TYPE_XIMAGE_BUFFER_POOL, NULL);
   pool->sink = gst_object_ref (ximagesink);
@@ -702,8 +689,6 @@
   GObjectClass *gobject_class = (GObjectClass *) klass;
   GstBufferPoolClass *gstbufferpool_class = (GstBufferPoolClass *) klass;
 
-  g_type_class_add_private (klass, sizeof (GstXImageBufferPoolPrivate));
-
   gobject_class->finalize = gst_ximage_buffer_pool_finalize;
 
   gstbufferpool_class->get_options = ximage_buffer_pool_get_options;
@@ -714,19 +699,18 @@
 static void
 gst_ximage_buffer_pool_init (GstXImageBufferPool * pool)
 {
-  pool->priv = GST_XIMAGE_BUFFER_POOL_GET_PRIVATE (pool);
+  /* nothing to do here */
 }
 
 static void
 gst_ximage_buffer_pool_finalize (GObject * object)
 {
   GstXImageBufferPool *pool = GST_XIMAGE_BUFFER_POOL_CAST (object);
-  GstXImageBufferPoolPrivate *priv = pool->priv;
 
   GST_LOG_OBJECT (pool, "finalize XImage buffer pool %p", pool);
 
-  if (priv->caps)
-    gst_caps_unref (priv->caps);
+  if (pool->caps)
+    gst_caps_unref (pool->caps);
   gst_object_unref (pool->sink);
   gst_object_unref (pool->allocator);
 
diff --git a/sys/ximage/ximagepool.h b/sys/ximage/ximagepool.h
index 8dfccf6..2e7e604 100644
--- a/sys/ximage/ximagepool.h
+++ b/sys/ximage/ximagepool.h
@@ -43,7 +43,6 @@
 
 typedef struct _GstXImageBufferPool GstXImageBufferPool;
 typedef struct _GstXImageBufferPoolClass GstXImageBufferPoolClass;
-typedef struct _GstXImageBufferPoolPrivate GstXImageBufferPoolPrivate;
 
 #include "ximagesink.h"
 
@@ -88,7 +87,13 @@
   GstXImageSink *sink;
   GstAllocator *allocator;
 
-  GstXImageBufferPoolPrivate *priv;
+  GstCaps *caps;
+  GstVideoInfo info;
+  GstVideoAlignment align;
+  guint    padded_width;
+  guint    padded_height;
+  gboolean add_metavideo;
+  gboolean need_alignment;
 };
 
 struct _GstXImageBufferPoolClass
@@ -100,7 +105,7 @@
 
 GstBufferPool * gst_ximage_buffer_pool_new     (GstXImageSink * ximagesink);
 
-gboolean gst_ximagesink_check_xshm_calls (GstXImageSink * ximagesink,
+gboolean gst_x_image_sink_check_xshm_calls (GstXImageSink * ximagesink,
         GstXContext * xcontext);
 
 G_END_DECLS
diff --git a/sys/ximage/ximagesink.c b/sys/ximage/ximagesink.c
index 2a1f76b..3e6e838 100644
--- a/sys/ximage/ximagesink.c
+++ b/sys/ximage/ximagesink.c
@@ -74,14 +74,14 @@
  * <refsect2>
  * <title>Examples</title>
  * |[
- * gst-launch -v videotestsrc ! queue ! ximagesink
+ * gst-launch-1.0 -v videotestsrc ! queue ! ximagesink
  * ]| A pipeline to test reverse negotiation. When the test video signal appears
  * you can resize the window and see that scaled buffers of the desired size are
  * going to arrive with a short delay. This illustrates how buffers of desired
  * size are allocated along the way. If you take away the queue, scaling will
  * happen almost immediately.
  * |[
- * gst-launch -v videotestsrc ! navigationtest ! videoconvert ! ximagesink
+ * gst-launch-1.0 -v videotestsrc ! navigationtest ! videoconvert ! ximagesink
  * ]| A pipeline to test navigation events.
  * While moving the mouse pointer over the test signal you will see a black box
  * following the mouse pointer. If you press the mouse button somewhere on the 
@@ -89,7 +89,7 @@
  * the button and a red one where you released it. (The navigationtest element
  * is part of gst-plugins-good.)
  * |[
- * gst-launch -v videotestsrc ! video/x-raw, pixel-aspect-ratio=(fraction)4/3 ! videoscale ! ximagesink
+ * gst-launch-1.0 -v videotestsrc ! video/x-raw, pixel-aspect-ratio=(fraction)4/3 ! videoscale ! ximagesink
  * ]| This is faking a 4/3 pixel aspect ratio caps on video frames produced by
  * videotestsrc, in most cases the pixel aspect ratio of the display will be
  * 1/1. This means that videoscale will have to do the scaling to convert 
@@ -118,9 +118,9 @@
 /* for XkbKeycodeToKeysym */
 #include <X11/XKBlib.h>
 
-GST_DEBUG_CATEGORY_EXTERN (gst_debug_ximagesink);
+GST_DEBUG_CATEGORY_EXTERN (gst_debug_x_image_sink);
 GST_DEBUG_CATEGORY_EXTERN (GST_CAT_PERFORMANCE);
-#define GST_CAT_DEFAULT gst_debug_ximagesink
+#define GST_CAT_DEFAULT gst_debug_x_image_sink
 
 typedef struct
 {
@@ -134,11 +134,12 @@
 
 #define MWM_HINTS_DECORATIONS   (1L << 1)
 
-static void gst_ximagesink_reset (GstXImageSink * ximagesink);
-static void gst_ximagesink_xwindow_update_geometry (GstXImageSink * ximagesink);
-static void gst_ximagesink_expose (GstVideoOverlay * overlay);
+static void gst_x_image_sink_reset (GstXImageSink * ximagesink);
+static void gst_x_image_sink_xwindow_update_geometry (GstXImageSink *
+    ximagesink);
+static void gst_x_image_sink_expose (GstVideoOverlay * overlay);
 
-static GstStaticPadTemplate gst_ximagesink_sink_template_factory =
+static GstStaticPadTemplate gst_x_image_sink_sink_template_factory =
 GST_STATIC_PAD_TEMPLATE ("sink",
     GST_PAD_SINK,
     GST_PAD_ALWAYS,
@@ -171,14 +172,15 @@
 /*          Object typing & Creation           */
 /*                                             */
 /* =========================================== */
-static void gst_ximagesink_navigation_init (GstNavigationInterface * iface);
-static void gst_ximagesink_video_overlay_init (GstVideoOverlayInterface *
+static void gst_x_image_sink_navigation_init (GstNavigationInterface * iface);
+static void gst_x_image_sink_video_overlay_init (GstVideoOverlayInterface *
     iface);
-#define gst_ximagesink_parent_class parent_class
-G_DEFINE_TYPE_WITH_CODE (GstXImageSink, gst_ximagesink, GST_TYPE_VIDEO_SINK,
-    G_IMPLEMENT_INTERFACE (GST_TYPE_NAVIGATION, gst_ximagesink_navigation_init);
+#define gst_x_image_sink_parent_class parent_class
+G_DEFINE_TYPE_WITH_CODE (GstXImageSink, gst_x_image_sink, GST_TYPE_VIDEO_SINK,
+    G_IMPLEMENT_INTERFACE (GST_TYPE_NAVIGATION,
+        gst_x_image_sink_navigation_init);
     G_IMPLEMENT_INTERFACE (GST_TYPE_VIDEO_OVERLAY,
-        gst_ximagesink_video_overlay_init));
+        gst_x_image_sink_video_overlay_init));
 
 /* ============================================================= */
 /*                                                               */
@@ -190,10 +192,10 @@
 
 /* We are called with the x_lock taken */
 static void
-gst_ximagesink_xwindow_draw_borders (GstXImageSink * ximagesink,
+gst_x_image_sink_xwindow_draw_borders (GstXImageSink * ximagesink,
     GstXWindow * xwindow, GstVideoRectangle rect)
 {
-  g_return_if_fail (GST_IS_XIMAGESINK (ximagesink));
+  g_return_if_fail (GST_IS_X_IMAGE_SINK (ximagesink));
   g_return_if_fail (xwindow != NULL);
 
   XSetForeground (ximagesink->xcontext->disp, xwindow->gc,
@@ -226,7 +228,7 @@
 
 /* This function puts a GstXImageBuffer on a GstXImageSink's window */
 static gboolean
-gst_ximagesink_ximage_put (GstXImageSink * ximagesink, GstBuffer * ximage)
+gst_x_image_sink_ximage_put (GstXImageSink * ximagesink, GstBuffer * ximage)
 {
   GstXImageMemory *mem;
   GstVideoCropMeta *crop;
@@ -295,7 +297,7 @@
   g_mutex_lock (&ximagesink->x_lock);
 
   if (draw_border) {
-    gst_ximagesink_xwindow_draw_borders (ximagesink, ximagesink->xwindow,
+    gst_x_image_sink_xwindow_draw_borders (ximagesink, ximagesink->xwindow,
         result);
     ximagesink->draw_border = FALSE;
   }
@@ -330,13 +332,13 @@
 }
 
 static gboolean
-gst_ximagesink_xwindow_decorate (GstXImageSink * ximagesink,
+gst_x_image_sink_xwindow_decorate (GstXImageSink * ximagesink,
     GstXWindow * window)
 {
   Atom hints_atom = None;
   MotifWmHints *hints;
 
-  g_return_val_if_fail (GST_IS_XIMAGESINK (ximagesink), FALSE);
+  g_return_val_if_fail (GST_IS_X_IMAGE_SINK (ximagesink), FALSE);
   g_return_val_if_fail (window != NULL, FALSE);
 
   g_mutex_lock (&ximagesink->x_lock);
@@ -367,7 +369,7 @@
 }
 
 static void
-gst_ximagesink_xwindow_set_title (GstXImageSink * ximagesink,
+gst_x_image_sink_xwindow_set_title (GstXImageSink * ximagesink,
     GstXWindow * xwindow, const gchar * media_title)
 {
   if (media_title) {
@@ -378,6 +380,7 @@
     /* we have a window */
     if (xwindow->internal) {
       XTextProperty xproperty;
+      XClassHint *hint = XAllocClassHint ();
       const gchar *app_name;
       const gchar *title = NULL;
       gchar *title_mem = NULL;
@@ -403,18 +406,26 @@
 
         g_free (title_mem);
       }
+
+      if (hint) {
+        hint->res_name = (char *) app_name;
+        hint->res_class = (char *) "GStreamer";
+        XSetClassHint (ximagesink->xcontext->disp, xwindow->win, hint);
+      }
+      XFree (hint);
     }
   }
 }
 
 /* This function handles a GstXWindow creation */
 static GstXWindow *
-gst_ximagesink_xwindow_new (GstXImageSink * ximagesink, gint width, gint height)
+gst_x_image_sink_xwindow_new (GstXImageSink * ximagesink, gint width,
+    gint height)
 {
   GstXWindow *xwindow = NULL;
   XGCValues values;
 
-  g_return_val_if_fail (GST_IS_XIMAGESINK (ximagesink), NULL);
+  g_return_val_if_fail (GST_IS_X_IMAGE_SINK (ximagesink), NULL);
 
   xwindow = g_new0 (GstXWindow, 1);
 
@@ -433,7 +444,7 @@
   XSetWindowBackgroundPixmap (ximagesink->xcontext->disp, xwindow->win, None);
 
   /* set application name as a title */
-  gst_ximagesink_xwindow_set_title (ximagesink, xwindow, NULL);
+  gst_x_image_sink_xwindow_set_title (ximagesink, xwindow, NULL);
 
   if (ximagesink->handle_events) {
     Atom wm_delete;
@@ -459,7 +470,7 @@
 
   g_mutex_unlock (&ximagesink->x_lock);
 
-  gst_ximagesink_xwindow_decorate (ximagesink, xwindow);
+  gst_x_image_sink_xwindow_decorate (ximagesink, xwindow);
 
   gst_video_overlay_got_window_handle (GST_VIDEO_OVERLAY (ximagesink),
       xwindow->win);
@@ -469,11 +480,11 @@
 
 /* This function destroys a GstXWindow */
 static void
-gst_ximagesink_xwindow_destroy (GstXImageSink * ximagesink,
+gst_x_image_sink_xwindow_destroy (GstXImageSink * ximagesink,
     GstXWindow * xwindow)
 {
   g_return_if_fail (xwindow != NULL);
-  g_return_if_fail (GST_IS_XIMAGESINK (ximagesink));
+  g_return_if_fail (GST_IS_X_IMAGE_SINK (ximagesink));
 
   g_mutex_lock (&ximagesink->x_lock);
 
@@ -493,12 +504,12 @@
 }
 
 static void
-gst_ximagesink_xwindow_update_geometry (GstXImageSink * ximagesink)
+gst_x_image_sink_xwindow_update_geometry (GstXImageSink * ximagesink)
 {
   XWindowAttributes attr;
   gboolean reconfigure;
 
-  g_return_if_fail (GST_IS_XIMAGESINK (ximagesink));
+  g_return_if_fail (GST_IS_X_IMAGE_SINK (ximagesink));
 
   /* Update the window geometry */
   g_mutex_lock (&ximagesink->x_lock);
@@ -524,10 +535,11 @@
 }
 
 static void
-gst_ximagesink_xwindow_clear (GstXImageSink * ximagesink, GstXWindow * xwindow)
+gst_x_image_sink_xwindow_clear (GstXImageSink * ximagesink,
+    GstXWindow * xwindow)
 {
   g_return_if_fail (xwindow != NULL);
-  g_return_if_fail (GST_IS_XIMAGESINK (ximagesink));
+  g_return_if_fail (GST_IS_X_IMAGE_SINK (ximagesink));
 
   g_mutex_lock (&ximagesink->x_lock);
 
@@ -546,14 +558,14 @@
    GstEvent that will be sent upstream in the pipeline to handle interactivity
    and navigation.*/
 static void
-gst_ximagesink_handle_xevents (GstXImageSink * ximagesink)
+gst_x_image_sink_handle_xevents (GstXImageSink * ximagesink)
 {
   XEvent e;
   guint pointer_x = 0, pointer_y = 0;
   gboolean pointer_moved = FALSE;
   gboolean exposed = FALSE, configured = FALSE;
 
-  g_return_if_fail (GST_IS_XIMAGESINK (ximagesink));
+  g_return_if_fail (GST_IS_X_IMAGE_SINK (ximagesink));
 
   /* Then we get all pointer motion events, only the last position is
      interesting. */
@@ -653,7 +665,7 @@
         break;
       case ConfigureNotify:
         g_mutex_unlock (&ximagesink->x_lock);
-        gst_ximagesink_xwindow_update_geometry (ximagesink);
+        gst_x_image_sink_xwindow_update_geometry (ximagesink);
         g_mutex_lock (&ximagesink->x_lock);
         configured = TRUE;
         break;
@@ -666,7 +678,7 @@
     g_mutex_unlock (&ximagesink->x_lock);
     g_mutex_unlock (&ximagesink->flow_lock);
 
-    gst_ximagesink_expose (GST_VIDEO_OVERLAY (ximagesink));
+    gst_x_image_sink_expose (GST_VIDEO_OVERLAY (ximagesink));
 
     g_mutex_lock (&ximagesink->flow_lock);
     g_mutex_lock (&ximagesink->x_lock);
@@ -688,7 +700,7 @@
               ("Output window was closed"), (NULL));
 
           g_mutex_unlock (&ximagesink->x_lock);
-          gst_ximagesink_xwindow_destroy (ximagesink, ximagesink->xwindow);
+          gst_x_image_sink_xwindow_destroy (ximagesink, ximagesink->xwindow);
           ximagesink->xwindow = NULL;
           g_mutex_lock (&ximagesink->x_lock);
         }
@@ -704,16 +716,16 @@
 }
 
 static gpointer
-gst_ximagesink_event_thread (GstXImageSink * ximagesink)
+gst_x_image_sink_event_thread (GstXImageSink * ximagesink)
 {
-  g_return_val_if_fail (GST_IS_XIMAGESINK (ximagesink), NULL);
+  g_return_val_if_fail (GST_IS_X_IMAGE_SINK (ximagesink), NULL);
 
   GST_OBJECT_LOCK (ximagesink);
   while (ximagesink->running) {
     GST_OBJECT_UNLOCK (ximagesink);
 
     if (ximagesink->xwindow) {
-      gst_ximagesink_handle_xevents (ximagesink);
+      gst_x_image_sink_handle_xevents (ximagesink);
     }
     /* FIXME: do we want to align this with the framerate or anything else? */
     g_usleep (G_USEC_PER_SEC / 20);
@@ -726,7 +738,7 @@
 }
 
 static void
-gst_ximagesink_manage_event_thread (GstXImageSink * ximagesink)
+gst_x_image_sink_manage_event_thread (GstXImageSink * ximagesink)
 {
   GThread *thread = NULL;
 
@@ -743,7 +755,7 @@
           ximagesink->handle_expose, ximagesink->handle_events);
       ximagesink->running = TRUE;
       ximagesink->event_thread = g_thread_try_new ("ximagesink-events",
-          (GThreadFunc) gst_ximagesink_event_thread, ximagesink, NULL);
+          (GThreadFunc) gst_x_image_sink_event_thread, ximagesink, NULL);
     }
   } else {
     if (ximagesink->event_thread) {
@@ -767,7 +779,7 @@
 /* This function calculates the pixel aspect ratio based on the properties
  * in the xcontext structure and stores it there. */
 static void
-gst_ximagesink_calculate_pixel_aspect_ratio (GstXContext * xcontext)
+gst_x_image_sink_calculate_pixel_aspect_ratio (GstXContext * xcontext)
 {
   static const gint par[][2] = {
     {1, 1},                     /* regular screen */
@@ -827,7 +839,7 @@
    here that caps for supported format are generated without any window or
    image creation */
 static GstXContext *
-gst_ximagesink_xcontext_get (GstXImageSink * ximagesink)
+gst_x_image_sink_xcontext_get (GstXImageSink * ximagesink)
 {
   GstXContext *xcontext = NULL;
   XPixmapFormatValues *px_formats = NULL;
@@ -836,7 +848,7 @@
   GstVideoFormat vformat;
   guint32 alpha_mask;
 
-  g_return_val_if_fail (GST_IS_XIMAGESINK (ximagesink), NULL);
+  g_return_val_if_fail (GST_IS_X_IMAGE_SINK (ximagesink), NULL);
 
   xcontext = g_new0 (GstXContext, 1);
 
@@ -868,7 +880,7 @@
   GST_DEBUG_OBJECT (ximagesink, "X reports %dx%d pixels and %d mm x %d mm",
       xcontext->width, xcontext->height, xcontext->widthmm, xcontext->heightmm);
 
-  gst_ximagesink_calculate_pixel_aspect_ratio (xcontext);
+  gst_x_image_sink_calculate_pixel_aspect_ratio (xcontext);
 
   /* We get supported pixmap formats at supported depth */
   px_formats = XListPixmapFormats (xcontext->disp, &nb_formats);
@@ -897,7 +909,7 @@
   /* Search for XShm extension support */
 #ifdef HAVE_XSHM
   if (XShmQueryExtension (xcontext->disp) &&
-      gst_ximagesink_check_xshm_calls (ximagesink, xcontext)) {
+      gst_x_image_sink_check_xshm_calls (ximagesink, xcontext)) {
     xcontext->use_xshm = TRUE;
     GST_DEBUG ("ximagesink is using XShm extension");
   } else
@@ -958,11 +970,11 @@
 /* This function cleans the X context. Closing the Display and unrefing the
    caps for supported formats. */
 static void
-gst_ximagesink_xcontext_clear (GstXImageSink * ximagesink)
+gst_x_image_sink_xcontext_clear (GstXImageSink * ximagesink)
 {
   GstXContext *xcontext;
 
-  g_return_if_fail (GST_IS_XIMAGESINK (ximagesink));
+  g_return_if_fail (GST_IS_X_IMAGE_SINK (ximagesink));
 
   GST_OBJECT_LOCK (ximagesink);
   if (ximagesink->xcontext == NULL) {
@@ -998,13 +1010,13 @@
 /* Element stuff */
 
 static GstCaps *
-gst_ximagesink_getcaps (GstBaseSink * bsink, GstCaps * filter)
+gst_x_image_sink_getcaps (GstBaseSink * bsink, GstCaps * filter)
 {
   GstXImageSink *ximagesink;
   GstCaps *caps;
   int i;
 
-  ximagesink = GST_XIMAGESINK (bsink);
+  ximagesink = GST_X_IMAGE_SINK (bsink);
 
   g_mutex_lock (&ximagesink->x_lock);
   if (ximagesink->xcontext) {
@@ -1085,18 +1097,44 @@
   return caps;
 }
 
+static GstBufferPool *
+gst_x_image_sink_create_pool (GstXImageSink * ximagesink, GstCaps * caps,
+    gsize size, gint min)
+{
+  static GstAllocationParams params = { 0, 15, 0, 0, };
+  GstBufferPool *pool;
+  GstStructure *config;
+
+  /* create a new pool for the new configuration */
+  pool = gst_ximage_buffer_pool_new (ximagesink);
+
+  config = gst_buffer_pool_get_config (pool);
+  gst_buffer_pool_config_set_params (config, caps, size, min, 0);
+  gst_buffer_pool_config_set_allocator (config, NULL, &params);
+
+  if (!gst_buffer_pool_set_config (pool, config))
+    goto config_failed;
+
+  return pool;
+
+config_failed:
+  {
+    GST_WARNING_OBJECT (ximagesink, "failed setting config");
+    gst_object_unref (pool);
+    return NULL;
+  }
+}
+
 static gboolean
-gst_ximagesink_setcaps (GstBaseSink * bsink, GstCaps * caps)
+gst_x_image_sink_setcaps (GstBaseSink * bsink, GstCaps * caps)
 {
   GstXImageSink *ximagesink;
   GstStructure *structure;
   GstVideoInfo info;
   GstBufferPool *newpool, *oldpool;
   const GValue *par;
-  gint size;
-  static GstAllocationParams params = { 0, 15, 0, 0, };
 
-  ximagesink = GST_XIMAGESINK (bsink);
+  ximagesink = GST_X_IMAGE_SINK (bsink);
 
   if (!ximagesink->xcontext)
     return FALSE;
@@ -1112,8 +1150,6 @@
   if (!gst_video_info_from_caps (&info, caps))
     goto invalid_format;
 
-  size = info.size;
-
   structure = gst_caps_get_structure (caps, 0);
   /* if the caps contain pixel-aspect-ratio, they have to match ours,
    * otherwise linking should fail */
@@ -1151,7 +1187,7 @@
 
   g_mutex_lock (&ximagesink->flow_lock);
   if (!ximagesink->xwindow) {
-    ximagesink->xwindow = gst_ximagesink_xwindow_new (ximagesink,
+    ximagesink->xwindow = gst_x_image_sink_xwindow_new (ximagesink,
         GST_VIDEO_SINK_WIDTH (ximagesink), GST_VIDEO_SINK_HEIGHT (ximagesink));
   }
 
@@ -1160,26 +1196,17 @@
   /* Remember to draw borders for next frame */
   ximagesink->draw_border = TRUE;
 
-  /* create a new pool for the new configuration */
-  newpool = gst_ximage_buffer_pool_new (ximagesink);
+  /* create a new internal pool for the new configuration */
+  newpool = gst_x_image_sink_create_pool (ximagesink, caps, info.size, 2);
 
-  structure = gst_buffer_pool_get_config (newpool);
-  gst_buffer_pool_config_set_params (structure, caps, size, 2, 0);
-  gst_buffer_pool_config_set_allocator (structure, NULL, &params);
-  if (!gst_buffer_pool_set_config (newpool, structure))
-    goto config_failed;
-
+  /* we don't activate the internal pool yet as it may not be needed */
   oldpool = ximagesink->pool;
-  /* we don't activate the pool yet, this will be done by downstream after it
-   * has configured the pool. If downstream does not want our pool we will
-   * activate it when we render into it */
   ximagesink->pool = newpool;
   g_mutex_unlock (&ximagesink->flow_lock);
 
-  /* unref the old sink */
+  /* deactivate and unref the old internal pool */
   if (oldpool) {
-    /* we don't deactivate, some elements might still be using it, it will be
-     * deactivated when the last ref is gone */
+    gst_buffer_pool_set_active (oldpool, FALSE);
     gst_object_unref (oldpool);
   }
 
@@ -1207,28 +1234,22 @@
         ("Invalid image size."));
     return FALSE;
   }
-config_failed:
-  {
-    GST_ERROR_OBJECT (ximagesink, "failed to set config.");
-    g_mutex_unlock (&ximagesink->flow_lock);
-    return FALSE;
-  }
 }
 
 static GstStateChangeReturn
-gst_ximagesink_change_state (GstElement * element, GstStateChange transition)
+gst_x_image_sink_change_state (GstElement * element, GstStateChange transition)
 {
   GstStateChangeReturn ret = GST_STATE_CHANGE_SUCCESS;
   GstXImageSink *ximagesink;
   GstXContext *xcontext = NULL;
 
-  ximagesink = GST_XIMAGESINK (element);
+  ximagesink = GST_X_IMAGE_SINK (element);
 
   switch (transition) {
     case GST_STATE_CHANGE_NULL_TO_READY:
       /* Initializing the XContext */
       if (ximagesink->xcontext == NULL) {
-        xcontext = gst_ximagesink_xcontext_get (ximagesink);
+        xcontext = gst_x_image_sink_xcontext_get (ximagesink);
         if (xcontext == NULL) {
           ret = GST_STATE_CHANGE_FAILURE;
           goto beach;
@@ -1245,12 +1266,12 @@
       g_mutex_lock (&ximagesink->x_lock);
       XSynchronize (ximagesink->xcontext->disp, ximagesink->synchronous);
       g_mutex_unlock (&ximagesink->x_lock);
-      gst_ximagesink_manage_event_thread (ximagesink);
+      gst_x_image_sink_manage_event_thread (ximagesink);
       break;
     case GST_STATE_CHANGE_READY_TO_PAUSED:
       g_mutex_lock (&ximagesink->flow_lock);
       if (ximagesink->xwindow)
-        gst_ximagesink_xwindow_clear (ximagesink, ximagesink->xwindow);
+        gst_x_image_sink_xwindow_clear (ximagesink, ximagesink->xwindow);
       g_mutex_unlock (&ximagesink->flow_lock);
       break;
     case GST_STATE_CHANGE_PAUSED_TO_PLAYING:
@@ -1275,7 +1296,7 @@
       g_mutex_unlock (&ximagesink->flow_lock);
       break;
     case GST_STATE_CHANGE_READY_TO_NULL:
-      gst_ximagesink_reset (ximagesink);
+      gst_x_image_sink_reset (ximagesink);
       break;
     default:
       break;
@@ -1286,12 +1307,12 @@
 }
 
 static void
-gst_ximagesink_get_times (GstBaseSink * bsink, GstBuffer * buf,
+gst_x_image_sink_get_times (GstBaseSink * bsink, GstBuffer * buf,
     GstClockTime * start, GstClockTime * end)
 {
   GstXImageSink *ximagesink;
 
-  ximagesink = GST_XIMAGESINK (bsink);
+  ximagesink = GST_X_IMAGE_SINK (bsink);
 
   if (GST_BUFFER_TIMESTAMP_IS_VALID (buf)) {
     *start = GST_BUFFER_TIMESTAMP (buf);
@@ -1308,14 +1329,14 @@
 }
 
 static GstFlowReturn
-gst_ximagesink_show_frame (GstVideoSink * vsink, GstBuffer * buf)
+gst_x_image_sink_show_frame (GstVideoSink * vsink, GstBuffer * buf)
 {
   GstFlowReturn res;
   GstXImageSink *ximagesink;
   GstXImageMemory *mem;
   GstBuffer *to_put = NULL;
 
-  ximagesink = GST_XIMAGESINK (vsink);
+  ximagesink = GST_X_IMAGE_SINK (vsink);
 
   if (gst_buffer_n_memory (buf) == 1
       && (mem = (GstXImageMemory *) gst_buffer_peek_memory (buf, 0))
@@ -1334,8 +1355,8 @@
     /* if we have one... */
     GST_LOG_OBJECT (ximagesink, "buffer not from our pool, copying");
 
-    /* we should have a pool, configured in setcaps */
-    if (ximagesink->pool == NULL)
+    /* an internal pool should have been created in setcaps */
+    if (G_UNLIKELY (ximagesink->pool == NULL))
       goto no_pool;
 
     if (!gst_buffer_pool_set_active (ximagesink->pool, TRUE))
@@ -1366,7 +1387,7 @@
     gst_video_frame_unmap (&src);
   }
 
-  if (!gst_ximagesink_ximage_put (ximagesink, to_put))
+  if (!gst_x_image_sink_ximage_put (ximagesink, to_put))
     goto no_window;
 
 done:
@@ -1412,9 +1433,9 @@
 }
 
 static gboolean
-gst_ximagesink_event (GstBaseSink * sink, GstEvent * event)
+gst_x_image_sink_event (GstBaseSink * sink, GstEvent * event)
 {
-  GstXImageSink *ximagesink = GST_XIMAGESINK (sink);
+  GstXImageSink *ximagesink = GST_X_IMAGE_SINK (sink);
 
   switch (GST_EVENT_TYPE (event)) {
     case GST_EVENT_TAG:{
@@ -1426,7 +1447,7 @@
 
       if (title) {
         GST_DEBUG_OBJECT (ximagesink, "got tags, title='%s'", title);
-        gst_ximagesink_xwindow_set_title (ximagesink, ximagesink->xwindow,
+        gst_x_image_sink_xwindow_set_title (ximagesink, ximagesink->xwindow,
             title);
 
         g_free (title);
@@ -1440,11 +1461,10 @@
 }
 
 static gboolean
-gst_ximagesink_propose_allocation (GstBaseSink * bsink, GstQuery * query)
+gst_x_image_sink_propose_allocation (GstBaseSink * bsink, GstQuery * query)
 {
-  GstXImageSink *ximagesink = GST_XIMAGESINK (bsink);
-  GstBufferPool *pool;
-  GstStructure *config;
+  GstXImageSink *ximagesink = GST_X_IMAGE_SINK (bsink);
+  GstBufferPool *pool = NULL;
   GstCaps *caps;
   guint size;
   gboolean need_pool;
@@ -1454,45 +1474,21 @@
   if (caps == NULL)
     goto no_caps;
 
-  g_mutex_lock (&ximagesink->flow_lock);
-  if ((pool = ximagesink->pool))
-    gst_object_ref (pool);
-  g_mutex_unlock (&ximagesink->flow_lock);
-
-  if (pool != NULL) {
-    GstCaps *pcaps;
-
-    /* we had a pool, check caps */
-    config = gst_buffer_pool_get_config (pool);
-    gst_buffer_pool_config_get_params (config, &pcaps, &size, NULL, NULL);
-
-    GST_DEBUG_OBJECT (ximagesink,
-        "we had a pool with caps %" GST_PTR_FORMAT, pcaps);
-    if (!gst_caps_is_equal (caps, pcaps)) {
-      /* different caps, we can't use this pool */
-      GST_DEBUG_OBJECT (ximagesink, "pool has different caps");
-      gst_object_unref (pool);
-      pool = NULL;
-    }
-    gst_structure_free (config);
-  }
-  if (pool == NULL && need_pool) {
+  if (need_pool) {
     GstVideoInfo info;
 
     if (!gst_video_info_from_caps (&info, caps))
       goto invalid_caps;
 
-    GST_DEBUG_OBJECT (ximagesink, "create new pool");
-    pool = gst_ximage_buffer_pool_new (ximagesink);
+    pool = gst_x_image_sink_create_pool (ximagesink, caps, info.size, 0);
 
     /* the normal size of a frame */
     size = info.size;
 
-    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))
-      goto config_failed;
+    if (pool == NULL)
+      goto no_pool;
   }
+
   if (pool) {
     /* we need at least 2 buffer because we hold on to the last one */
     gst_query_add_allocation_pool (query, pool, size, 2, 0);
@@ -1516,26 +1512,23 @@
     GST_DEBUG_OBJECT (bsink, "invalid caps specified");
     return FALSE;
   }
-config_failed:
+no_pool:
   {
-    GST_DEBUG_OBJECT (bsink, "failed setting config");
-    gst_object_unref (pool);
+    /* Already warned in create_pool */
     return FALSE;
   }
 }
 
 /* Interfaces stuff */
 static void
-gst_ximagesink_navigation_send_event (GstNavigation * navigation,
+gst_x_image_sink_navigation_send_event (GstNavigation * navigation,
     GstStructure * structure)
 {
-  GstXImageSink *ximagesink = GST_XIMAGESINK (navigation);
-  GstEvent *event;
+  GstXImageSink *ximagesink = GST_X_IMAGE_SINK (navigation);
+  GstEvent *event = NULL;
   gint x_offset, y_offset;
   gdouble x, y;
-  GstPad *pad = NULL;
-
-  event = gst_event_new_navigation (structure);
+  gboolean handled = FALSE;
 
   /* We are not converting the pointer coordinates as there's no hardware
      scaling done here. The only possible scaling is done by videoscale and
@@ -1565,26 +1558,31 @@
     gst_structure_set (structure, "pointer_y", G_TYPE_DOUBLE, y, NULL);
   }
 
-  pad = gst_pad_get_peer (GST_VIDEO_SINK_PAD (ximagesink));
+  event = gst_event_new_navigation (structure);
+  if (event) {
+    gst_event_ref (event);
+    handled = gst_pad_push_event (GST_VIDEO_SINK_PAD (ximagesink), event);
 
-  if (GST_IS_PAD (pad) && GST_IS_EVENT (event)) {
-    gst_pad_send_event (pad, event);
+    if (!handled)
+      gst_element_post_message (GST_ELEMENT_CAST (ximagesink),
+          gst_navigation_message_new_event (GST_OBJECT_CAST (ximagesink),
+              event));
 
-    gst_object_unref (pad);
+    gst_event_unref (event);
   }
 }
 
 static void
-gst_ximagesink_navigation_init (GstNavigationInterface * iface)
+gst_x_image_sink_navigation_init (GstNavigationInterface * iface)
 {
-  iface->send_event = gst_ximagesink_navigation_send_event;
+  iface->send_event = gst_x_image_sink_navigation_send_event;
 }
 
 static void
-gst_ximagesink_set_window_handle (GstVideoOverlay * overlay, guintptr id)
+gst_x_image_sink_set_window_handle (GstVideoOverlay * overlay, guintptr id)
 {
   XID xwindow_id = id;
-  GstXImageSink *ximagesink = GST_XIMAGESINK (overlay);
+  GstXImageSink *ximagesink = GST_X_IMAGE_SINK (overlay);
   GstXWindow *xwindow = NULL;
   XWindowAttributes attr;
 
@@ -1601,7 +1599,7 @@
 
   /* If the element has not initialized the X11 context try to do so */
   if (!ximagesink->xcontext &&
-      !(ximagesink->xcontext = gst_ximagesink_xcontext_get (ximagesink))) {
+      !(ximagesink->xcontext = gst_x_image_sink_xcontext_get (ximagesink))) {
     g_mutex_unlock (&ximagesink->flow_lock);
     /* we have thrown a GST_ELEMENT_ERROR now */
     return;
@@ -1609,7 +1607,7 @@
 
   /* If a window is there already we destroy it */
   if (ximagesink->xwindow) {
-    gst_ximagesink_xwindow_destroy (ximagesink, ximagesink->xwindow);
+    gst_x_image_sink_xwindow_destroy (ximagesink, ximagesink->xwindow);
     ximagesink->xwindow = NULL;
   }
 
@@ -1618,7 +1616,7 @@
     /* If no width/height caps nego did not happen window will be created
        during caps nego then */
     if (GST_VIDEO_SINK_WIDTH (ximagesink) && GST_VIDEO_SINK_HEIGHT (ximagesink)) {
-      xwindow = gst_ximagesink_xwindow_new (ximagesink,
+      xwindow = gst_x_image_sink_xwindow_new (ximagesink,
           GST_VIDEO_SINK_WIDTH (ximagesink),
           GST_VIDEO_SINK_HEIGHT (ximagesink));
     }
@@ -1651,19 +1649,19 @@
 }
 
 static void
-gst_ximagesink_expose (GstVideoOverlay * overlay)
+gst_x_image_sink_expose (GstVideoOverlay * overlay)
 {
-  GstXImageSink *ximagesink = GST_XIMAGESINK (overlay);
+  GstXImageSink *ximagesink = GST_X_IMAGE_SINK (overlay);
 
-  gst_ximagesink_xwindow_update_geometry (ximagesink);
-  gst_ximagesink_ximage_put (ximagesink, NULL);
+  gst_x_image_sink_xwindow_update_geometry (ximagesink);
+  gst_x_image_sink_ximage_put (ximagesink, NULL);
 }
 
 static void
-gst_ximagesink_set_event_handling (GstVideoOverlay * overlay,
+gst_x_image_sink_set_event_handling (GstVideoOverlay * overlay,
     gboolean handle_events)
 {
-  GstXImageSink *ximagesink = GST_XIMAGESINK (overlay);
+  GstXImageSink *ximagesink = GST_X_IMAGE_SINK (overlay);
 
   ximagesink->handle_events = handle_events;
 
@@ -1696,11 +1694,11 @@
 }
 
 static void
-gst_ximagesink_video_overlay_init (GstVideoOverlayInterface * iface)
+gst_x_image_sink_video_overlay_init (GstVideoOverlayInterface * iface)
 {
-  iface->set_window_handle = gst_ximagesink_set_window_handle;
-  iface->expose = gst_ximagesink_expose;
-  iface->handle_events = gst_ximagesink_set_event_handling;
+  iface->set_window_handle = gst_x_image_sink_set_window_handle;
+  iface->expose = gst_x_image_sink_expose;
+  iface->handle_events = gst_x_image_sink_set_event_handling;
 }
 
 /* =========================================== */
@@ -1710,14 +1708,14 @@
 /* =========================================== */
 
 static void
-gst_ximagesink_set_property (GObject * object, guint prop_id,
+gst_x_image_sink_set_property (GObject * object, guint prop_id,
     const GValue * value, GParamSpec * pspec)
 {
   GstXImageSink *ximagesink;
 
-  g_return_if_fail (GST_IS_XIMAGESINK (object));
+  g_return_if_fail (GST_IS_X_IMAGE_SINK (object));
 
-  ximagesink = GST_XIMAGESINK (object);
+  ximagesink = GST_X_IMAGE_SINK (object);
 
   switch (prop_id) {
     case PROP_DISPLAY:
@@ -1757,13 +1755,13 @@
     }
       break;
     case PROP_HANDLE_EVENTS:
-      gst_ximagesink_set_event_handling (GST_VIDEO_OVERLAY (ximagesink),
+      gst_x_image_sink_set_event_handling (GST_VIDEO_OVERLAY (ximagesink),
           g_value_get_boolean (value));
-      gst_ximagesink_manage_event_thread (ximagesink);
+      gst_x_image_sink_manage_event_thread (ximagesink);
       break;
     case PROP_HANDLE_EXPOSE:
       ximagesink->handle_expose = g_value_get_boolean (value);
-      gst_ximagesink_manage_event_thread (ximagesink);
+      gst_x_image_sink_manage_event_thread (ximagesink);
       break;
     default:
       G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
@@ -1772,14 +1770,14 @@
 }
 
 static void
-gst_ximagesink_get_property (GObject * object, guint prop_id,
+gst_x_image_sink_get_property (GObject * object, guint prop_id,
     GValue * value, GParamSpec * pspec)
 {
   GstXImageSink *ximagesink;
 
-  g_return_if_fail (GST_IS_XIMAGESINK (object));
+  g_return_if_fail (GST_IS_X_IMAGE_SINK (object));
 
-  ximagesink = GST_XIMAGESINK (object);
+  ximagesink = GST_X_IMAGE_SINK (object);
 
   switch (prop_id) {
     case PROP_DISPLAY:
@@ -1820,7 +1818,7 @@
 }
 
 static void
-gst_ximagesink_reset (GstXImageSink * ximagesink)
+gst_x_image_sink_reset (GstXImageSink * ximagesink)
 {
   GThread *thread;
 
@@ -1848,23 +1846,23 @@
   }
 
   if (ximagesink->xwindow) {
-    gst_ximagesink_xwindow_clear (ximagesink, ximagesink->xwindow);
-    gst_ximagesink_xwindow_destroy (ximagesink, ximagesink->xwindow);
+    gst_x_image_sink_xwindow_clear (ximagesink, ximagesink->xwindow);
+    gst_x_image_sink_xwindow_destroy (ximagesink, ximagesink->xwindow);
     ximagesink->xwindow = NULL;
   }
   g_mutex_unlock (&ximagesink->flow_lock);
 
-  gst_ximagesink_xcontext_clear (ximagesink);
+  gst_x_image_sink_xcontext_clear (ximagesink);
 }
 
 static void
-gst_ximagesink_finalize (GObject * object)
+gst_x_image_sink_finalize (GObject * object)
 {
   GstXImageSink *ximagesink;
 
-  ximagesink = GST_XIMAGESINK (object);
+  ximagesink = GST_X_IMAGE_SINK (object);
 
-  gst_ximagesink_reset (ximagesink);
+  gst_x_image_sink_reset (ximagesink);
 
   if (ximagesink->display_name) {
     g_free (ximagesink->display_name);
@@ -1883,7 +1881,7 @@
 }
 
 static void
-gst_ximagesink_init (GstXImageSink * ximagesink)
+gst_x_image_sink_init (GstXImageSink * ximagesink)
 {
   ximagesink->display_name = NULL;
   ximagesink->xcontext = NULL;
@@ -1910,7 +1908,7 @@
 }
 
 static void
-gst_ximagesink_class_init (GstXImageSinkClass * klass)
+gst_x_image_sink_class_init (GstXImageSinkClass * klass)
 {
   GObjectClass *gobject_class;
   GstElementClass *gstelement_class;
@@ -1922,9 +1920,9 @@
   gstbasesink_class = (GstBaseSinkClass *) klass;
   videosink_class = (GstVideoSinkClass *) klass;
 
-  gobject_class->finalize = gst_ximagesink_finalize;
-  gobject_class->set_property = gst_ximagesink_set_property;
-  gobject_class->get_property = gst_ximagesink_get_property;
+  gobject_class->finalize = gst_x_image_sink_finalize;
+  gobject_class->set_property = gst_x_image_sink_set_property;
+  gobject_class->get_property = gst_x_image_sink_get_property;
 
   g_object_class_install_property (gobject_class, PROP_DISPLAY,
       g_param_spec_string ("display", "Display", "X Display name",
@@ -1978,16 +1976,16 @@
       "A standard X based videosink", "Julien Moutte <julien@moutte.net>");
 
   gst_element_class_add_pad_template (gstelement_class,
-      gst_static_pad_template_get (&gst_ximagesink_sink_template_factory));
+      gst_static_pad_template_get (&gst_x_image_sink_sink_template_factory));
 
-  gstelement_class->change_state = gst_ximagesink_change_state;
+  gstelement_class->change_state = gst_x_image_sink_change_state;
 
-  gstbasesink_class->get_caps = GST_DEBUG_FUNCPTR (gst_ximagesink_getcaps);
-  gstbasesink_class->set_caps = GST_DEBUG_FUNCPTR (gst_ximagesink_setcaps);
-  gstbasesink_class->get_times = GST_DEBUG_FUNCPTR (gst_ximagesink_get_times);
+  gstbasesink_class->get_caps = GST_DEBUG_FUNCPTR (gst_x_image_sink_getcaps);
+  gstbasesink_class->set_caps = GST_DEBUG_FUNCPTR (gst_x_image_sink_setcaps);
+  gstbasesink_class->get_times = GST_DEBUG_FUNCPTR (gst_x_image_sink_get_times);
   gstbasesink_class->propose_allocation =
-      GST_DEBUG_FUNCPTR (gst_ximagesink_propose_allocation);
-  gstbasesink_class->event = GST_DEBUG_FUNCPTR (gst_ximagesink_event);
+      GST_DEBUG_FUNCPTR (gst_x_image_sink_propose_allocation);
+  gstbasesink_class->event = GST_DEBUG_FUNCPTR (gst_x_image_sink_event);
 
-  videosink_class->show_frame = GST_DEBUG_FUNCPTR (gst_ximagesink_show_frame);
+  videosink_class->show_frame = GST_DEBUG_FUNCPTR (gst_x_image_sink_show_frame);
 }
diff --git a/sys/ximage/ximagesink.h b/sys/ximage/ximagesink.h
index 8ca6fe9..cc9c222 100644
--- a/sys/ximage/ximagesink.h
+++ b/sys/ximage/ximagesink.h
@@ -17,8 +17,8 @@
  * Boston, MA 02110-1301, USA.
  */
 
-#ifndef __GST_XIMAGESINK_H__
-#define __GST_XIMAGESINK_H__
+#ifndef __GST_X_IMAGE_SINK_H__
+#define __GST_X_IMAGE_SINK_H__
 
 #include <gst/video/gstvideosink.h>
 
@@ -42,16 +42,16 @@
 #include <gst/video/video.h>
 
 G_BEGIN_DECLS
-#define GST_TYPE_XIMAGESINK \
-  (gst_ximagesink_get_type())
-#define GST_XIMAGESINK(obj) \
-  (G_TYPE_CHECK_INSTANCE_CAST((obj), GST_TYPE_XIMAGESINK, GstXImageSink))
-#define GST_XIMAGESINK_CLASS(klass) \
-  (G_TYPE_CHECK_CLASS_CAST((klass), GST_TYPE_XIMAGESINK, GstXImageSinkClass))
-#define GST_IS_XIMAGESINK(obj) \
-  (G_TYPE_CHECK_INSTANCE_TYPE((obj), GST_TYPE_XIMAGESINK))
-#define GST_IS_XIMAGESINK_CLASS(klass) \
-  (G_TYPE_CHECK_CLASS_TYPE((klass), GST_TYPE_XIMAGESINK))
+#define GST_TYPE_X_IMAGE_SINK \
+  (gst_x_image_sink_get_type())
+#define GST_X_IMAGE_SINK(obj) \
+  (G_TYPE_CHECK_INSTANCE_CAST((obj), GST_TYPE_X_IMAGE_SINK, GstXImageSink))
+#define GST_X_IMAGE_SINK_CLASS(klass) \
+  (G_TYPE_CHECK_CLASS_CAST((klass), GST_TYPE_X_IMAGE_SINK, GstXImageSinkClass))
+#define GST_IS_X_IMAGE_SINK(obj) \
+  (G_TYPE_CHECK_INSTANCE_TYPE((obj), GST_TYPE_X_IMAGE_SINK))
+#define GST_IS_X_IMAGE_SINK_CLASS(klass) \
+  (G_TYPE_CHECK_CLASS_TYPE((klass), GST_TYPE_X_IMAGE_SINK))
 
 typedef struct _GstXContext GstXContext;
 typedef struct _GstXWindow GstXWindow;
@@ -204,7 +204,7 @@
   GstVideoSinkClass parent_class;
 };
 
-GType gst_ximagesink_get_type (void);
+GType gst_x_image_sink_get_type (void);
 
 G_END_DECLS
-#endif /* __GST_XIMAGESINK_H__ */
+#endif /* __GST_X_IMAGE_SINK_H__ */
diff --git a/sys/xvimage/Makefile.in b/sys/xvimage/Makefile.in
index 716af13..0a0f5a4 100644
--- a/sys/xvimage/Makefile.in
+++ b/sys/xvimage/Makefile.in
@@ -1,7 +1,7 @@
-# Makefile.in generated by automake 1.14.1 from Makefile.am.
+# Makefile.in generated by automake 1.15 from Makefile.am.
 # @configure_input@
 
-# Copyright (C) 1994-2013 Free Software Foundation, Inc.
+# 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,
@@ -16,7 +16,17 @@
 
 
 VPATH = @srcdir@
-am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)'
+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 \
       ?) ;; \
@@ -81,8 +91,6 @@
 host_triplet = @host@
 target_triplet = @target@
 subdir = sys/xvimage
-DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \
-	$(top_srcdir)/depcomp $(noinst_HEADERS)
 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 \
@@ -103,7 +111,6 @@
 	$(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-x11.m4 \
 	$(top_srcdir)/common/m4/gst.m4 \
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
@@ -120,6 +127,8 @@
 	$(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 =
@@ -229,6 +238,7 @@
   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@
@@ -289,6 +299,8 @@
 GIO_CFLAGS = @GIO_CFLAGS@
 GIO_LDFLAGS = @GIO_LDFLAGS@
 GIO_LIBS = @GIO_LIBS@
+GIO_UNIX_2_0_CFLAGS = @GIO_UNIX_2_0_CFLAGS@
+GIO_UNIX_2_0_LIBS = @GIO_UNIX_2_0_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
@@ -318,6 +330,8 @@
 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_OPTION_CFLAGS = @GST_OPTION_CFLAGS@
 GST_OPTION_CXXFLAGS = @GST_OPTION_CXXFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
@@ -345,7 +359,6 @@
 GTK_X11_CFLAGS = @GTK_X11_CFLAGS@
 GTK_X11_LIBS = @GTK_X11_LIBS@
 HAVE_CDPARANOIA = @HAVE_CDPARANOIA@
-HAVE_X = @HAVE_X@
 HAVE_XSHM = @HAVE_XSHM@
 HAVE_ZLIB = @HAVE_ZLIB@
 HTML_DIR = @HTML_DIR@
@@ -360,6 +373,7 @@
 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@
@@ -449,13 +463,12 @@
 XGETTEXT = @XGETTEXT@
 XGETTEXT_015 = @XGETTEXT_015@
 XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
-XMKMF = @XMKMF@
+XSHM_CFLAGS = @XSHM_CFLAGS@
 XSHM_LIBS = @XSHM_LIBS@
+XVIDEO_CFLAGS = @XVIDEO_CFLAGS@
 XVIDEO_LIBS = @XVIDEO_LIBS@
 X_CFLAGS = @X_CFLAGS@
-X_EXTRA_LIBS = @X_EXTRA_LIBS@
 X_LIBS = @X_LIBS@
-X_PRE_LIBS = @X_PRE_LIBS@
 ZLIB_CFLAGS = @ZLIB_CFLAGS@
 ZLIB_LIBS = @ZLIB_LIBS@
 abs_builddir = @abs_builddir@
@@ -508,6 +521,7 @@
 psdir = @psdir@
 pyexecdir = @pyexecdir@
 pythondir = @pythondir@
+runstatedir = @runstatedir@
 sbindir = @sbindir@
 sharedstatedir = @sharedstatedir@
 srcdir = @srcdir@
@@ -549,7 +563,6 @@
 	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu sys/xvimage/Makefile'; \
 	$(am__cd) $(top_srcdir) && \
 	  $(AUTOMAKE) --gnu sys/xvimage/Makefile
-.PRECIOUS: Makefile
 Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
 	@case '$?' in \
 	  *config.status*) \
@@ -890,6 +903,8 @@
 	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.
diff --git a/sys/xvimage/xvcontext.c b/sys/xvimage/xvcontext.c
index 6d84e37..6994db3 100644
--- a/sys/xvimage/xvcontext.c
+++ b/sys/xvimage/xvcontext.c
@@ -33,9 +33,9 @@
 /* for XkbKeycodeToKeysym */
 #include <X11/XKBlib.h>
 
-GST_DEBUG_CATEGORY_EXTERN (gst_debug_xvcontext);
+GST_DEBUG_CATEGORY_EXTERN (gst_debug_xv_context);
 GST_DEBUG_CATEGORY_EXTERN (GST_CAT_PERFORMANCE);
-#define GST_CAT_DEFAULT gst_debug_xvcontext
+#define GST_CAT_DEFAULT gst_debug_xv_context
 
 void
 gst_xvcontext_config_clear (GstXvContextConfig * config)
@@ -1080,10 +1080,18 @@
   /* we have a window */
   if (window->internal && title) {
     XTextProperty xproperty;
+    XClassHint *hint = XAllocClassHint ();
 
     if ((XStringListToTextProperty (((char **) &title), 1, &xproperty)) != 0) {
       XSetWMName (context->disp, window->win, &xproperty);
       XFree (xproperty.value);
+
+      if (hint) {
+        hint->res_name = (char *) title;
+        hint->res_class = (char *) "GStreamer";
+        XSetClassHint (context->disp, window->win, hint);
+      }
+      XFree (hint);
     }
   }
 }
diff --git a/sys/xvimage/xvimage.c b/sys/xvimage/xvimage.c
index e8851f1..5f2e208 100644
--- a/sys/xvimage/xvimage.c
+++ b/sys/xvimage/xvimage.c
@@ -23,23 +23,23 @@
 
 #include "xvimagesink.h"
 
-GST_DEBUG_CATEGORY (gst_debug_xvcontext);
-GST_DEBUG_CATEGORY (gst_debug_xvimagepool);
-GST_DEBUG_CATEGORY (gst_debug_xvimagesink);
+GST_DEBUG_CATEGORY (gst_debug_xv_context);
+GST_DEBUG_CATEGORY (gst_debug_xv_image_pool);
+GST_DEBUG_CATEGORY (gst_debug_xv_image_sink);
 GST_DEBUG_CATEGORY_STATIC (GST_CAT_PERFORMANCE);
 
 static gboolean
 plugin_init (GstPlugin * plugin)
 {
   if (!gst_element_register (plugin, "xvimagesink",
-          GST_RANK_PRIMARY, GST_TYPE_XVIMAGESINK))
+          GST_RANK_PRIMARY, GST_TYPE_XV_IMAGE_SINK))
     return FALSE;
 
-  GST_DEBUG_CATEGORY_INIT (gst_debug_xvcontext, "xcontext", 0,
+  GST_DEBUG_CATEGORY_INIT (gst_debug_xv_context, "xcontext", 0,
       "xcontext miniobject");
-  GST_DEBUG_CATEGORY_INIT (gst_debug_xvimagesink, "xvimagesink", 0,
+  GST_DEBUG_CATEGORY_INIT (gst_debug_xv_image_sink, "xvimagesink", 0,
       "xvimagesink element");
-  GST_DEBUG_CATEGORY_INIT (gst_debug_xvimagepool, "xvimagepool", 0,
+  GST_DEBUG_CATEGORY_INIT (gst_debug_xv_image_pool, "xvimagepool", 0,
       "xvimagepool object");
 
   GST_DEBUG_CATEGORY_GET (GST_CAT_PERFORMANCE, "GST_PERFORMANCE");
diff --git a/sys/xvimage/xvimageallocator.c b/sys/xvimage/xvimageallocator.c
index 3aa1a82..3582183 100644
--- a/sys/xvimage/xvimageallocator.c
+++ b/sys/xvimage/xvimageallocator.c
@@ -346,7 +346,7 @@
   int (*handler) (Display *, XErrorEvent *);
   gboolean success = FALSE;
   GstXvContext *context;
-  gint align = 15, offset;
+  gint align, offset;
   GstXvImageMemory *mem;
 
   context = allocator->context;
@@ -453,8 +453,9 @@
     }
 
     /* get shared memory */
+    align = 0;
     mem->SHMInfo.shmid =
-        shmget (IPC_PRIVATE, mem->xvimage->data_size + align, IPC_CREAT | 0777);
+        shmget (IPC_PRIVATE, mem->xvimage->data_size, IPC_CREAT | 0777);
     if (mem->SHMInfo.shmid == -1)
       goto shmget_failed;
 
@@ -489,6 +490,7 @@
       goto create_failed;
 
     /* we have to use the returned data_size for our image size */
+    align = 15;                 /* g_malloc aligns to 8, we need 16 */
     mem->xvimage->data = g_malloc (mem->xvimage->data_size + align);
 
     XSync (context->disp, FALSE);
@@ -625,9 +627,9 @@
   }
 #ifdef HAVE_XSHM
   if (context->use_xshm) {
-    GST_LOG ("XvShmPutImage with image %dx%d and window %dx%d, from xvimage %"
-        GST_PTR_FORMAT, src_crop->w, src_crop->h,
-        window->render_rect.w, window->render_rect.h, mem);
+    GST_LOG ("XvShmPutImage with image %dx%d and window %dx%d, from xvimage %p",
+        src_crop->w, src_crop->h, window->render_rect.w, window->render_rect.h,
+        mem);
 
     XvShmPutImage (context->disp,
         context->xv_port_id,
diff --git a/sys/xvimage/xvimagepool.c b/sys/xvimage/xvimagepool.c
index db434fc..bde949c 100644
--- a/sys/xvimage/xvimagepool.c
+++ b/sys/xvimage/xvimagepool.c
@@ -34,31 +34,12 @@
 #include <gst/video/gstvideopool.h>
 
 
-GST_DEBUG_CATEGORY_EXTERN (gst_debug_xvimagepool);
-#define GST_CAT_DEFAULT gst_debug_xvimagepool
-
-
-struct _GstXvImageBufferPoolPrivate
-{
-  GstXvImageAllocator *allocator;
-
-  GstCaps *caps;
-  gint im_format;
-  GstVideoRectangle crop;
-  GstVideoInfo info;
-  GstVideoAlignment align;
-  guint padded_width;
-  guint padded_height;
-  gboolean add_metavideo;
-  gboolean need_alignment;
-};
+GST_DEBUG_CATEGORY_EXTERN (gst_debug_xv_image_pool);
+#define GST_CAT_DEFAULT gst_debug_xv_image_pool
 
 /* bufferpool */
 static void gst_xvimage_buffer_pool_finalize (GObject * object);
 
-#define GST_XVIMAGE_BUFFER_POOL_GET_PRIVATE(obj)  \
-   (G_TYPE_INSTANCE_GET_PRIVATE ((obj), GST_TYPE_XVIMAGE_BUFFER_POOL, GstXvImageBufferPoolPrivate))
-
 #define gst_xvimage_buffer_pool_parent_class parent_class
 G_DEFINE_TYPE (GstXvImageBufferPool, gst_xvimage_buffer_pool,
     GST_TYPE_BUFFER_POOL);
@@ -77,7 +58,6 @@
 xvimage_buffer_pool_set_config (GstBufferPool * pool, GstStructure * config)
 {
   GstXvImageBufferPool *xvpool = GST_XVIMAGE_BUFFER_POOL_CAST (pool);
-  GstXvImageBufferPoolPrivate *priv = xvpool->priv;
   GstVideoInfo info;
   GstCaps *caps;
   guint size, min_buffers, max_buffers;
@@ -97,54 +77,56 @@
   GST_LOG_OBJECT (pool, "%dx%d, caps %" GST_PTR_FORMAT, info.width, info.height,
       caps);
 
-  context = gst_xvimage_allocator_peek_context (priv->allocator);
+  context = gst_xvimage_allocator_peek_context (xvpool->allocator);
 
-  priv->im_format = gst_xvcontext_get_format_from_info (context, &info);
-  if (priv->im_format == -1)
+  xvpool->im_format = gst_xvcontext_get_format_from_info (context, &info);
+  if (xvpool->im_format == -1)
     goto unknown_format;
 
-  if (priv->caps)
-    gst_caps_unref (priv->caps);
-  priv->caps = gst_caps_ref (caps);
+  if (xvpool->caps)
+    gst_caps_unref (xvpool->caps);
+  xvpool->caps = gst_caps_ref (caps);
 
   /* enable metadata based on config of the pool */
-  priv->add_metavideo =
+  xvpool->add_metavideo =
       gst_buffer_pool_config_has_option (config,
       GST_BUFFER_POOL_OPTION_VIDEO_META);
 
   /* parse extra alignment info */
-  priv->need_alignment = gst_buffer_pool_config_has_option (config,
+  xvpool->need_alignment = gst_buffer_pool_config_has_option (config,
       GST_BUFFER_POOL_OPTION_VIDEO_ALIGNMENT);
 
-  if (priv->need_alignment) {
-    gst_buffer_pool_config_get_video_alignment (config, &priv->align);
+  if (xvpool->need_alignment) {
+    gst_buffer_pool_config_get_video_alignment (config, &xvpool->align);
 
-    GST_LOG_OBJECT (pool, "padding %u-%ux%u-%u", priv->align.padding_top,
-        priv->align.padding_left, priv->align.padding_left,
-        priv->align.padding_bottom);
+    GST_LOG_OBJECT (pool, "padding %u-%ux%u-%u", xvpool->align.padding_top,
+        xvpool->align.padding_left, xvpool->align.padding_left,
+        xvpool->align.padding_bottom);
 
     /* do padding and alignment */
-    gst_video_info_align (&info, &priv->align);
+    gst_video_info_align (&info, &xvpool->align);
+
+    gst_buffer_pool_config_set_video_alignment (config, &xvpool->align);
 
     /* we need the video metadata too now */
-    priv->add_metavideo = TRUE;
+    xvpool->add_metavideo = TRUE;
   } else {
-    gst_video_alignment_reset (&priv->align);
+    gst_video_alignment_reset (&xvpool->align);
   }
 
   /* add the padding */
-  priv->padded_width =
-      GST_VIDEO_INFO_WIDTH (&info) + priv->align.padding_left +
-      priv->align.padding_right;
-  priv->padded_height =
-      GST_VIDEO_INFO_HEIGHT (&info) + priv->align.padding_top +
-      priv->align.padding_bottom;
+  xvpool->padded_width =
+      GST_VIDEO_INFO_WIDTH (&info) + xvpool->align.padding_left +
+      xvpool->align.padding_right;
+  xvpool->padded_height =
+      GST_VIDEO_INFO_HEIGHT (&info) + xvpool->align.padding_top +
+      xvpool->align.padding_bottom;
 
-  priv->info = info;
-  priv->crop.x = priv->align.padding_left;
-  priv->crop.y = priv->align.padding_top;
-  priv->crop.w = priv->info.width;
-  priv->crop.h = priv->info.height;
+  xvpool->info = info;
+  xvpool->crop.x = xvpool->align.padding_left;
+  xvpool->crop.y = xvpool->align.padding_top;
+  xvpool->crop.w = xvpool->info.width;
+  xvpool->crop.h = xvpool->info.height;
 
   gst_buffer_pool_config_set_params (config, caps, info.size, min_buffers,
       max_buffers);
@@ -172,7 +154,7 @@
   {
     GST_WARNING_OBJECT (pool, "failed to get format from caps %"
         GST_PTR_FORMAT, caps);
-    return FALSE;;
+    return FALSE;
   }
 }
 
@@ -182,17 +164,16 @@
     GstBufferPoolAcquireParams * params)
 {
   GstXvImageBufferPool *xvpool = GST_XVIMAGE_BUFFER_POOL_CAST (pool);
-  GstXvImageBufferPoolPrivate *priv = xvpool->priv;
   GstVideoInfo *info;
   GstBuffer *xvimage;
   GstMemory *mem;
 
-  info = &priv->info;
+  info = &xvpool->info;
 
   xvimage = gst_buffer_new ();
 
-  mem = gst_xvimage_allocator_alloc (priv->allocator, priv->im_format,
-      priv->padded_width, priv->padded_height, &priv->crop, NULL);
+  mem = gst_xvimage_allocator_alloc (xvpool->allocator, xvpool->im_format,
+      xvpool->padded_width, xvpool->padded_height, &xvpool->crop, NULL);
 
   if (mem == NULL) {
     gst_buffer_unref (xvimage);
@@ -200,7 +181,7 @@
   }
   gst_buffer_append_memory (xvimage, mem);
 
-  if (priv->add_metavideo) {
+  if (xvpool->add_metavideo) {
     GST_DEBUG_OBJECT (pool, "adding GstVideoMeta");
     gst_buffer_add_video_meta_full (xvimage, GST_VIDEO_FRAME_FLAG_NONE,
         GST_VIDEO_INFO_FORMAT (info), GST_VIDEO_INFO_WIDTH (info),
@@ -226,7 +207,7 @@
   GstXvImageBufferPool *pool;
 
   pool = g_object_new (GST_TYPE_XVIMAGE_BUFFER_POOL, NULL);
-  pool->priv->allocator = gst_object_ref (allocator);
+  pool->allocator = gst_object_ref (allocator);
 
   GST_LOG_OBJECT (pool, "new XvImage buffer pool %p", pool);
 
@@ -239,8 +220,6 @@
   GObjectClass *gobject_class = (GObjectClass *) klass;
   GstBufferPoolClass *gstbufferpool_class = (GstBufferPoolClass *) klass;
 
-  g_type_class_add_private (klass, sizeof (GstXvImageBufferPoolPrivate));
-
   gobject_class->finalize = gst_xvimage_buffer_pool_finalize;
 
   gstbufferpool_class->get_options = xvimage_buffer_pool_get_options;
@@ -251,21 +230,20 @@
 static void
 gst_xvimage_buffer_pool_init (GstXvImageBufferPool * pool)
 {
-  pool->priv = GST_XVIMAGE_BUFFER_POOL_GET_PRIVATE (pool);
+  /* nothing to do here */
 }
 
 static void
 gst_xvimage_buffer_pool_finalize (GObject * object)
 {
   GstXvImageBufferPool *pool = GST_XVIMAGE_BUFFER_POOL_CAST (object);
-  GstXvImageBufferPoolPrivate *priv = pool->priv;
 
   GST_LOG_OBJECT (pool, "finalize XvImage buffer pool %p", pool);
 
-  if (priv->caps)
-    gst_caps_unref (priv->caps);
-  if (priv->allocator)
-    gst_object_unref (priv->allocator);
+  if (pool->caps)
+    gst_caps_unref (pool->caps);
+  if (pool->allocator)
+    gst_object_unref (pool->allocator);
 
   G_OBJECT_CLASS (gst_xvimage_buffer_pool_parent_class)->finalize (object);
 }
diff --git a/sys/xvimage/xvimagepool.h b/sys/xvimage/xvimagepool.h
index 855c224..9c788d9 100644
--- a/sys/xvimage/xvimagepool.h
+++ b/sys/xvimage/xvimagepool.h
@@ -28,7 +28,6 @@
 
 typedef struct _GstXvImageBufferPool GstXvImageBufferPool;
 typedef struct _GstXvImageBufferPoolClass GstXvImageBufferPoolClass;
-typedef struct _GstXvImageBufferPoolPrivate GstXvImageBufferPoolPrivate;
 
 /* buffer pool functions */
 #define GST_TYPE_XVIMAGE_BUFFER_POOL      (gst_xvimage_buffer_pool_get_type())
@@ -40,7 +39,17 @@
 {
   GstBufferPool bufferpool;
 
-  GstXvImageBufferPoolPrivate *priv;
+  GstXvImageAllocator *allocator;
+
+  GstCaps *caps;
+  gint im_format;
+  GstVideoRectangle crop;
+  GstVideoInfo info;
+  GstVideoAlignment align;
+  guint padded_width;
+  guint padded_height;
+  gboolean add_metavideo;
+  gboolean need_alignment;
 };
 
 struct _GstXvImageBufferPoolClass
diff --git a/sys/xvimage/xvimagesink.c b/sys/xvimage/xvimagesink.c
index a0d62a0..1f8729e 100644
--- a/sys/xvimage/xvimagesink.c
+++ b/sys/xvimage/xvimagesink.c
@@ -73,17 +73,20 @@
  * <refsect2>
  * <title>Examples</title>
  * |[
- * gst-launch -v videotestsrc ! xvimagesink
+ * gst-launch-1.0 -v videotestsrc ! xvimagesink
  * ]| A pipeline to test hardware scaling.
  * When the test video signal appears you can resize the window and see that
- * video frames are scaled through hardware (no extra CPU cost).
+ * video frames are scaled through hardware (no extra CPU cost). By default
+ * the image will never be distorted when scaled, instead black borders will
+ * be added if needed.
  * |[
- * gst-launch -v videotestsrc ! xvimagesink force-aspect-ratio=true
- * ]| Same pipeline with #GstXvImageSink:force-aspect-ratio property set to true
- * You can observe the borders drawn around the scaled image respecting aspect
- * ratio.
+ * gst-launch-1.0 -v videotestsrc ! xvimagesink force-aspect-ratio=false
+ * ]| Same pipeline with #GstXvImageSink:force-aspect-ratio property set to
+ * false. You can observe that no borders are drawn around the scaled image
+ * now and it will be distorted to fill the entire frame instead of respecting
+ * the aspect ratio.
  * |[
- * gst-launch -v videotestsrc ! navigationtest ! xvimagesink
+ * gst-launch-1.0 -v videotestsrc ! navigationtest ! xvimagesink
  * ]| A pipeline to test navigation events.
  * While moving the mouse pointer over the test signal you will see a black box
  * following the mouse pointer. If you press the mouse button somewhere on the
@@ -95,15 +98,14 @@
  * position. This also handles borders correctly, limiting coordinates to the
  * image area
  * |[
- * gst-launch -v videotestsrc ! video/x-raw, pixel-aspect-ratio=(fraction)4/3 ! xvimagesink
+ * gst-launch-1.0 -v videotestsrc ! video/x-raw, pixel-aspect-ratio=4/3 ! xvimagesink
  * ]| This is faking a 4/3 pixel aspect ratio caps on video frames produced by
  * videotestsrc, in most cases the pixel aspect ratio of the display will be
  * 1/1. This means that XvImageSink will have to do the scaling to convert
  * incoming frames to a size that will match the display pixel aspect ratio
- * (from 320x240 to 320x180 in this case). Note that you might have to escape
- * some characters for your shell like '\(fraction\)'.
+ * (from 320x240 to 320x180 in this case).
  * |[
- * gst-launch -v videotestsrc ! xvimagesink hue=100 saturation=-100 brightness=100
+ * gst-launch-1.0 -v videotestsrc ! xvimagesink hue=100 saturation=-100 brightness=100
  * ]| Demonstrates how to use the colorbalance interface.
  * </refsect2>
  */
@@ -131,9 +133,9 @@
 /* for XkbKeycodeToKeysym */
 #include <X11/XKBlib.h>
 
-GST_DEBUG_CATEGORY_EXTERN (gst_debug_xvimagesink);
+GST_DEBUG_CATEGORY_EXTERN (gst_debug_xv_image_sink);
 GST_DEBUG_CATEGORY_EXTERN (GST_CAT_PERFORMANCE);
-#define GST_CAT_DEFAULT gst_debug_xvimagesink
+#define GST_CAT_DEFAULT gst_debug_xv_image_sink
 
 typedef struct
 {
@@ -147,15 +149,15 @@
 
 #define MWM_HINTS_DECORATIONS   (1L << 1)
 
-static gboolean gst_xvimagesink_open (GstXvImageSink * xvimagesink);
-static void gst_xvimagesink_close (GstXvImageSink * xvimagesink);
-static void gst_xvimagesink_xwindow_update_geometry (GstXvImageSink *
+static gboolean gst_xv_image_sink_open (GstXvImageSink * xvimagesink);
+static void gst_xv_image_sink_close (GstXvImageSink * xvimagesink);
+static void gst_xv_image_sink_xwindow_update_geometry (GstXvImageSink *
     xvimagesink);
-static void gst_xvimagesink_expose (GstVideoOverlay * overlay);
+static void gst_xv_image_sink_expose (GstVideoOverlay * overlay);
 
 /* Default template - initiated with class struct to allow gst-register to work
    without X running */
-static GstStaticPadTemplate gst_xvimagesink_sink_template_factory =
+static GstStaticPadTemplate gst_xv_image_sink_sink_template_factory =
 GST_STATIC_PAD_TEMPLATE ("sink",
     GST_PAD_SINK,
     GST_PAD_ALWAYS,
@@ -198,19 +200,19 @@
 /*          Object typing & Creation           */
 /*                                             */
 /* =========================================== */
-static void gst_xvimagesink_navigation_init (GstNavigationInterface * iface);
-static void gst_xvimagesink_video_overlay_init (GstVideoOverlayInterface *
+static void gst_xv_image_sink_navigation_init (GstNavigationInterface * iface);
+static void gst_xv_image_sink_video_overlay_init (GstVideoOverlayInterface *
     iface);
-static void gst_xvimagesink_colorbalance_init (GstColorBalanceInterface *
+static void gst_xv_image_sink_colorbalance_init (GstColorBalanceInterface *
     iface);
-#define gst_xvimagesink_parent_class parent_class
-G_DEFINE_TYPE_WITH_CODE (GstXvImageSink, gst_xvimagesink, GST_TYPE_VIDEO_SINK,
+#define gst_xv_image_sink_parent_class parent_class
+G_DEFINE_TYPE_WITH_CODE (GstXvImageSink, gst_xv_image_sink, GST_TYPE_VIDEO_SINK,
     G_IMPLEMENT_INTERFACE (GST_TYPE_NAVIGATION,
-        gst_xvimagesink_navigation_init);
+        gst_xv_image_sink_navigation_init);
     G_IMPLEMENT_INTERFACE (GST_TYPE_VIDEO_OVERLAY,
-        gst_xvimagesink_video_overlay_init);
+        gst_xv_image_sink_video_overlay_init);
     G_IMPLEMENT_INTERFACE (GST_TYPE_COLOR_BALANCE,
-        gst_xvimagesink_colorbalance_init));
+        gst_xv_image_sink_colorbalance_init));
 
 
 /* ============================================================= */
@@ -223,7 +225,8 @@
 /* This function puts a GstXvImage on a GstXvImageSink's window. Returns FALSE
  * if no window was available  */
 static gboolean
-gst_xvimagesink_xvimage_put (GstXvImageSink * xvimagesink, GstBuffer * xvimage)
+gst_xv_image_sink_xvimage_put (GstXvImageSink * xvimagesink,
+    GstBuffer * xvimage)
 {
   GstXvImageMemory *mem;
   GstVideoCropMeta *crop;
@@ -313,7 +316,7 @@
 }
 
 static void
-gst_xvimagesink_xwindow_set_title (GstXvImageSink * xvimagesink,
+gst_xv_image_sink_xwindow_set_title (GstXvImageSink * xvimagesink,
     GstXWindow * xwindow, const gchar * media_title)
 {
   if (media_title) {
@@ -346,20 +349,20 @@
 /* This function handles a GstXWindow creation
  * The width and height are the actual pixel size on the display */
 static GstXWindow *
-gst_xvimagesink_xwindow_new (GstXvImageSink * xvimagesink,
+gst_xv_image_sink_xwindow_new (GstXvImageSink * xvimagesink,
     gint width, gint height)
 {
   GstXWindow *xwindow = NULL;
   GstXvContext *context;
 
-  g_return_val_if_fail (GST_IS_XVIMAGESINK (xvimagesink), NULL);
+  g_return_val_if_fail (GST_IS_XV_IMAGE_SINK (xvimagesink), NULL);
 
   context = xvimagesink->context;
 
   xwindow = gst_xvcontext_create_xwindow (context, width, height);
 
   /* set application name as a title */
-  gst_xvimagesink_xwindow_set_title (xvimagesink, xwindow, NULL);
+  gst_xv_image_sink_xwindow_set_title (xvimagesink, xwindow, NULL);
 
   gst_xwindow_set_event_handling (xwindow, xvimagesink->handle_events);
 
@@ -370,9 +373,9 @@
 }
 
 static void
-gst_xvimagesink_xwindow_update_geometry (GstXvImageSink * xvimagesink)
+gst_xv_image_sink_xwindow_update_geometry (GstXvImageSink * xvimagesink)
 {
-  g_return_if_fail (GST_IS_XVIMAGESINK (xvimagesink));
+  g_return_if_fail (GST_IS_XV_IMAGE_SINK (xvimagesink));
 
   /* Update the window geometry */
   g_mutex_lock (&xvimagesink->flow_lock);
@@ -384,11 +387,11 @@
 /* This function commits our internal colorbalance settings to our grabbed Xv
    port. If the context is not initialized yet it simply returns */
 static void
-gst_xvimagesink_update_colorbalance (GstXvImageSink * xvimagesink)
+gst_xv_image_sink_update_colorbalance (GstXvImageSink * xvimagesink)
 {
   GstXvContext *context;
 
-  g_return_if_fail (GST_IS_XVIMAGESINK (xvimagesink));
+  g_return_if_fail (GST_IS_XV_IMAGE_SINK (xvimagesink));
 
   /* If we haven't initialized the X context we can't update anything */
   if ((context = xvimagesink->context) == NULL)
@@ -402,14 +405,14 @@
    and navigation. It will also listen for configure events on the window to
    trigger caps renegotiation so on the fly software scaling can work. */
 static void
-gst_xvimagesink_handle_xevents (GstXvImageSink * xvimagesink)
+gst_xv_image_sink_handle_xevents (GstXvImageSink * xvimagesink)
 {
   XEvent e;
   guint pointer_x = 0, pointer_y = 0;
   gboolean pointer_moved = FALSE;
   gboolean exposed = FALSE, configured = FALSE;
 
-  g_return_if_fail (GST_IS_XVIMAGESINK (xvimagesink));
+  g_return_if_fail (GST_IS_XV_IMAGE_SINK (xvimagesink));
 
   /* Handle Interaction, produces navigation events */
 
@@ -515,7 +518,7 @@
         g_mutex_unlock (&xvimagesink->context->lock);
         g_mutex_unlock (&xvimagesink->flow_lock);
 
-        gst_xvimagesink_xwindow_update_geometry (xvimagesink);
+        gst_xv_image_sink_xwindow_update_geometry (xvimagesink);
 
         g_mutex_lock (&xvimagesink->flow_lock);
         g_mutex_lock (&xvimagesink->context->lock);
@@ -530,7 +533,7 @@
     g_mutex_unlock (&xvimagesink->context->lock);
     g_mutex_unlock (&xvimagesink->flow_lock);
 
-    gst_xvimagesink_expose (GST_VIDEO_OVERLAY (xvimagesink));
+    gst_xv_image_sink_expose (GST_VIDEO_OVERLAY (xvimagesink));
 
     g_mutex_lock (&xvimagesink->flow_lock);
     g_mutex_lock (&xvimagesink->context->lock);
@@ -568,16 +571,16 @@
 }
 
 static gpointer
-gst_xvimagesink_event_thread (GstXvImageSink * xvimagesink)
+gst_xv_image_sink_event_thread (GstXvImageSink * xvimagesink)
 {
-  g_return_val_if_fail (GST_IS_XVIMAGESINK (xvimagesink), NULL);
+  g_return_val_if_fail (GST_IS_XV_IMAGE_SINK (xvimagesink), NULL);
 
   GST_OBJECT_LOCK (xvimagesink);
   while (xvimagesink->running) {
     GST_OBJECT_UNLOCK (xvimagesink);
 
     if (xvimagesink->xwindow) {
-      gst_xvimagesink_handle_xevents (xvimagesink);
+      gst_xv_image_sink_handle_xevents (xvimagesink);
     }
     /* FIXME: do we want to align this with the framerate or anything else? */
     g_usleep (G_USEC_PER_SEC / 20);
@@ -590,7 +593,7 @@
 }
 
 static void
-gst_xvimagesink_manage_event_thread (GstXvImageSink * xvimagesink)
+gst_xv_image_sink_manage_event_thread (GstXvImageSink * xvimagesink)
 {
   GThread *thread = NULL;
 
@@ -607,7 +610,7 @@
           xvimagesink->handle_expose, xvimagesink->handle_events);
       xvimagesink->running = TRUE;
       xvimagesink->event_thread = g_thread_try_new ("xvimagesink-events",
-          (GThreadFunc) gst_xvimagesink_event_thread, xvimagesink, NULL);
+          (GThreadFunc) gst_xv_image_sink_event_thread, xvimagesink, NULL);
     }
   } else {
     if (xvimagesink->event_thread) {
@@ -630,12 +633,12 @@
 /* Element stuff */
 
 static GstCaps *
-gst_xvimagesink_getcaps (GstBaseSink * bsink, GstCaps * filter)
+gst_xv_image_sink_getcaps (GstBaseSink * bsink, GstCaps * filter)
 {
   GstXvImageSink *xvimagesink;
   GstCaps *caps;
 
-  xvimagesink = GST_XVIMAGESINK (bsink);
+  xvimagesink = GST_XV_IMAGE_SINK (bsink);
 
   if (xvimagesink->context) {
     if (filter)
@@ -657,21 +660,44 @@
   return caps;
 }
 
+static GstBufferPool *
+gst_xv_image_sink_create_pool (GstXvImageSink * xvimagesink, GstCaps * caps,
+    gsize size, gint min)
+{
+  GstBufferPool *pool;
+  GstStructure *config;
+
+  pool = gst_xvimage_buffer_pool_new (xvimagesink->allocator);
+
+  config = gst_buffer_pool_get_config (pool);
+  gst_buffer_pool_config_set_params (config, caps, size, min, 0);
+
+  if (!gst_buffer_pool_set_config (pool, config))
+    goto config_failed;
+
+  return pool;
+
+config_failed:
+  {
+    GST_ERROR_OBJECT (xvimagesink, "failed to set config.");
+    gst_object_unref (pool);
+    return NULL;
+  }
+}
+
 static gboolean
-gst_xvimagesink_setcaps (GstBaseSink * bsink, GstCaps * caps)
+gst_xv_image_sink_setcaps (GstBaseSink * bsink, GstCaps * caps)
 {
   GstXvImageSink *xvimagesink;
   GstXvContext *context;
-  GstStructure *structure;
   GstBufferPool *newpool, *oldpool;
   GstVideoInfo info;
   guint32 im_format = 0;
   gint video_par_n, video_par_d;        /* video's PAR */
   gint display_par_n, display_par_d;    /* display's PAR */
   guint num, den;
-  gint size;
 
-  xvimagesink = GST_XVIMAGESINK (bsink);
+  xvimagesink = GST_XV_IMAGE_SINK (bsink);
   context = xvimagesink->context;
 
   GST_DEBUG_OBJECT (xvimagesink,
@@ -696,8 +722,6 @@
 
   gst_xvcontext_set_colorimetry (context, &info.colorimetry);
 
-  size = info.size;
-
   /* get aspect ratio from caps if it's present, and
    * convert video width and height to a display width and height
    * using wd / hd = wv / hv * PARv / PARd */
@@ -764,7 +788,7 @@
 
   g_mutex_lock (&xvimagesink->flow_lock);
   if (!xvimagesink->xwindow) {
-    xvimagesink->xwindow = gst_xvimagesink_xwindow_new (xvimagesink,
+    xvimagesink->xwindow = gst_xv_image_sink_xwindow_new (xvimagesink,
         GST_VIDEO_SINK_WIDTH (xvimagesink),
         GST_VIDEO_SINK_HEIGHT (xvimagesink));
   }
@@ -776,24 +800,16 @@
   xvimagesink->redraw_border = TRUE;
 
   /* create a new pool for the new configuration */
-  newpool = gst_xvimage_buffer_pool_new (xvimagesink->allocator);
+  newpool = gst_xv_image_sink_create_pool (xvimagesink, caps, info.size, 2);
 
-  structure = gst_buffer_pool_get_config (newpool);
-  gst_buffer_pool_config_set_params (structure, caps, size, 2, 0);
-  if (!gst_buffer_pool_set_config (newpool, structure))
-    goto config_failed;
-
+  /* we don't activate the internal pool yet as it may not be needed */
   oldpool = xvimagesink->pool;
-  /* we don't activate the pool yet, this will be done by downstream after it
-   * has configured the pool. If downstream does not want our pool we will
-   * activate it when we render into it */
   xvimagesink->pool = newpool;
   g_mutex_unlock (&xvimagesink->flow_lock);
 
-  /* unref the old sink */
+  /* deactivate and unref the old internal pool */
   if (oldpool) {
-    /* we don't deactivate, some elements might still be using it, it will
-     * be deactivated when the last ref is gone */
+    gst_buffer_pool_set_active (oldpool, FALSE);
     gst_object_unref (oldpool);
   }
 
@@ -823,25 +839,19 @@
         ("Error calculating the output display ratio of the video."));
     return FALSE;
   }
-config_failed:
-  {
-    GST_ERROR_OBJECT (xvimagesink, "failed to set config.");
-    g_mutex_unlock (&xvimagesink->flow_lock);
-    return FALSE;
-  }
 }
 
 static GstStateChangeReturn
-gst_xvimagesink_change_state (GstElement * element, GstStateChange transition)
+gst_xv_image_sink_change_state (GstElement * element, GstStateChange transition)
 {
   GstStateChangeReturn ret = GST_STATE_CHANGE_SUCCESS;
   GstXvImageSink *xvimagesink;
 
-  xvimagesink = GST_XVIMAGESINK (element);
+  xvimagesink = GST_XV_IMAGE_SINK (element);
 
   switch (transition) {
     case GST_STATE_CHANGE_NULL_TO_READY:
-      if (!gst_xvimagesink_open (xvimagesink))
+      if (!gst_xv_image_sink_open (xvimagesink))
         goto error;
       break;
     case GST_STATE_CHANGE_READY_TO_PAUSED:
@@ -870,7 +880,7 @@
       g_mutex_unlock (&xvimagesink->flow_lock);
       break;
     case GST_STATE_CHANGE_READY_TO_NULL:
-      gst_xvimagesink_close (xvimagesink);
+      gst_xv_image_sink_close (xvimagesink);
       break;
     default:
       break;
@@ -884,12 +894,12 @@
 }
 
 static void
-gst_xvimagesink_get_times (GstBaseSink * bsink, GstBuffer * buf,
+gst_xv_image_sink_get_times (GstBaseSink * bsink, GstBuffer * buf,
     GstClockTime * start, GstClockTime * end)
 {
   GstXvImageSink *xvimagesink;
 
-  xvimagesink = GST_XVIMAGESINK (bsink);
+  xvimagesink = GST_XV_IMAGE_SINK (bsink);
 
   if (GST_BUFFER_TIMESTAMP_IS_VALID (buf)) {
     *start = GST_BUFFER_TIMESTAMP (buf);
@@ -906,14 +916,14 @@
 }
 
 static GstFlowReturn
-gst_xvimagesink_show_frame (GstVideoSink * vsink, GstBuffer * buf)
+gst_xv_image_sink_show_frame (GstVideoSink * vsink, GstBuffer * buf)
 {
   GstFlowReturn res;
   GstXvImageSink *xvimagesink;
   GstBuffer *to_put = NULL;
   GstMemory *mem;
 
-  xvimagesink = GST_XVIMAGESINK (vsink);
+  xvimagesink = GST_XV_IMAGE_SINK (vsink);
 
   if (gst_buffer_n_memory (buf) == 1 && (mem = gst_buffer_peek_memory (buf, 0))
       && gst_xvimage_memory_is_from_context (mem, xvimagesink->context)) {
@@ -963,7 +973,7 @@
     gst_video_frame_unmap (&src);
   }
 
-  if (!gst_xvimagesink_xvimage_put (xvimagesink, to_put))
+  if (!gst_xv_image_sink_xvimage_put (xvimagesink, to_put))
     goto no_window;
 
 done:
@@ -1009,9 +1019,9 @@
 }
 
 static gboolean
-gst_xvimagesink_event (GstBaseSink * sink, GstEvent * event)
+gst_xv_image_sink_event (GstBaseSink * sink, GstEvent * event)
 {
-  GstXvImageSink *xvimagesink = GST_XVIMAGESINK (sink);
+  GstXvImageSink *xvimagesink = GST_XV_IMAGE_SINK (sink);
 
   switch (GST_EVENT_TYPE (event)) {
     case GST_EVENT_TAG:{
@@ -1023,7 +1033,7 @@
 
       if (title) {
         GST_DEBUG_OBJECT (xvimagesink, "got tags, title='%s'", title);
-        gst_xvimagesink_xwindow_set_title (xvimagesink, xvimagesink->xwindow,
+        gst_xv_image_sink_xwindow_set_title (xvimagesink, xvimagesink->xwindow,
             title);
 
         g_free (title);
@@ -1037,11 +1047,10 @@
 }
 
 static gboolean
-gst_xvimagesink_propose_allocation (GstBaseSink * bsink, GstQuery * query)
+gst_xv_image_sink_propose_allocation (GstBaseSink * bsink, GstQuery * query)
 {
-  GstXvImageSink *xvimagesink = GST_XVIMAGESINK (bsink);
-  GstBufferPool *pool;
-  GstStructure *config;
+  GstXvImageSink *xvimagesink = GST_XV_IMAGE_SINK (bsink);
+  GstBufferPool *pool = NULL;
   GstCaps *caps;
   guint size;
   gboolean need_pool;
@@ -1051,44 +1060,22 @@
   if (caps == NULL)
     goto no_caps;
 
-  g_mutex_lock (&xvimagesink->flow_lock);
-  if ((pool = xvimagesink->pool))
-    gst_object_ref (pool);
-  g_mutex_unlock (&xvimagesink->flow_lock);
-
-  if (pool != NULL) {
-    GstCaps *pcaps;
-
-    /* we had a pool, check caps */
-    GST_DEBUG_OBJECT (xvimagesink, "check existing pool caps");
-    config = gst_buffer_pool_get_config (pool);
-    gst_buffer_pool_config_get_params (config, &pcaps, &size, NULL, NULL);
-
-    if (!gst_caps_is_equal (caps, pcaps)) {
-      GST_DEBUG_OBJECT (xvimagesink, "pool has different caps");
-      /* different caps, we can't use this pool */
-      gst_object_unref (pool);
-      pool = NULL;
-    }
-    gst_structure_free (config);
-  }
-  if (pool == NULL && need_pool) {
+  if (need_pool) {
     GstVideoInfo info;
 
     if (!gst_video_info_from_caps (&info, caps))
       goto invalid_caps;
 
     GST_DEBUG_OBJECT (xvimagesink, "create new pool");
-    pool = gst_xvimage_buffer_pool_new (xvimagesink->allocator);
+    pool = gst_xv_image_sink_create_pool (xvimagesink, caps, info.size, 0);
 
     /* the normal size of a frame */
     size = info.size;
 
-    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))
-      goto config_failed;
+    if (pool == NULL)
+      goto no_pool;
   }
+
   if (pool) {
     /* we need at least 2 buffer because we hold on to the last one */
     gst_query_add_allocation_pool (query, pool, size, 2, 0);
@@ -1112,96 +1099,100 @@
     GST_DEBUG_OBJECT (bsink, "invalid caps specified");
     return FALSE;
   }
-config_failed:
+no_pool:
   {
-    GST_DEBUG_OBJECT (bsink, "failed setting config");
-    gst_object_unref (pool);
+    /* Already warned in create_pool */
     return FALSE;
   }
 }
 
 /* Interfaces stuff */
 static void
-gst_xvimagesink_navigation_send_event (GstNavigation * navigation,
+gst_xv_image_sink_navigation_send_event (GstNavigation * navigation,
     GstStructure * structure)
 {
-  GstXvImageSink *xvimagesink = GST_XVIMAGESINK (navigation);
-  GstPad *peer;
+  GstXvImageSink *xvimagesink = GST_XV_IMAGE_SINK (navigation);
+  gboolean handled = FALSE;
+  GstEvent *event = NULL;
 
-  if ((peer = gst_pad_get_peer (GST_VIDEO_SINK_PAD (xvimagesink)))) {
-    GstEvent *event;
-    GstVideoRectangle src = { 0, };
-    GstVideoRectangle dst = { 0, };
-    GstVideoRectangle result;
-    gdouble x, y, xscale = 1.0, yscale = 1.0;
-    GstXWindow *xwindow;
+  GstVideoRectangle src = { 0, };
+  GstVideoRectangle dst = { 0, };
+  GstVideoRectangle result;
+  gdouble x, y, xscale = 1.0, yscale = 1.0;
+  GstXWindow *xwindow;
 
-    event = gst_event_new_navigation (structure);
+  /* We take the flow_lock while we look at the window */
+  g_mutex_lock (&xvimagesink->flow_lock);
 
-    /* We take the flow_lock while we look at the window */
-    g_mutex_lock (&xvimagesink->flow_lock);
-
-    if (!(xwindow = xvimagesink->xwindow)) {
-      g_mutex_unlock (&xvimagesink->flow_lock);
-      return;
-    }
-
-    if (xvimagesink->keep_aspect) {
-      /* We get the frame position using the calculated geometry from _setcaps
-         that respect pixel aspect ratios */
-      src.w = GST_VIDEO_SINK_WIDTH (xvimagesink);
-      src.h = GST_VIDEO_SINK_HEIGHT (xvimagesink);
-      dst.w = xwindow->render_rect.w;
-      dst.h = xwindow->render_rect.h;
-
-      gst_video_sink_center_rect (src, dst, &result, TRUE);
-      result.x += xwindow->render_rect.x;
-      result.y += xwindow->render_rect.y;
-    } else {
-      memcpy (&result, &xwindow->render_rect, sizeof (GstVideoRectangle));
-    }
-
+  if (!(xwindow = xvimagesink->xwindow)) {
     g_mutex_unlock (&xvimagesink->flow_lock);
+    return;
+  }
 
-    /* We calculate scaling using the original video frames geometry to include
-       pixel aspect ratio scaling. */
-    xscale = (gdouble) xvimagesink->video_width / result.w;
-    yscale = (gdouble) xvimagesink->video_height / result.h;
+  if (xvimagesink->keep_aspect) {
+    /* We get the frame position using the calculated geometry from _setcaps
+       that respect pixel aspect ratios */
+    src.w = GST_VIDEO_SINK_WIDTH (xvimagesink);
+    src.h = GST_VIDEO_SINK_HEIGHT (xvimagesink);
+    dst.w = xwindow->render_rect.w;
+    dst.h = xwindow->render_rect.h;
 
-    /* Converting pointer coordinates to the non scaled geometry */
-    if (gst_structure_get_double (structure, "pointer_x", &x)) {
-      x = MIN (x, result.x + result.w);
-      x = MAX (x - result.x, 0);
-      gst_structure_set (structure, "pointer_x", G_TYPE_DOUBLE,
-          (gdouble) x * xscale, NULL);
-    }
-    if (gst_structure_get_double (structure, "pointer_y", &y)) {
-      y = MIN (y, result.y + result.h);
-      y = MAX (y - result.y, 0);
-      gst_structure_set (structure, "pointer_y", G_TYPE_DOUBLE,
-          (gdouble) y * yscale, NULL);
-    }
+    gst_video_sink_center_rect (src, dst, &result, TRUE);
+    result.x += xwindow->render_rect.x;
+    result.y += xwindow->render_rect.y;
+  } else {
+    memcpy (&result, &xwindow->render_rect, sizeof (GstVideoRectangle));
+  }
 
-    gst_pad_send_event (peer, event);
-    gst_object_unref (peer);
+  g_mutex_unlock (&xvimagesink->flow_lock);
+
+  /* We calculate scaling using the original video frames geometry to include
+     pixel aspect ratio scaling. */
+  xscale = (gdouble) xvimagesink->video_width / result.w;
+  yscale = (gdouble) xvimagesink->video_height / result.h;
+
+  /* Converting pointer coordinates to the non scaled geometry */
+  if (gst_structure_get_double (structure, "pointer_x", &x)) {
+    x = MIN (x, result.x + result.w);
+    x = MAX (x - result.x, 0);
+    gst_structure_set (structure, "pointer_x", G_TYPE_DOUBLE,
+        (gdouble) x * xscale, NULL);
+  }
+  if (gst_structure_get_double (structure, "pointer_y", &y)) {
+    y = MIN (y, result.y + result.h);
+    y = MAX (y - result.y, 0);
+    gst_structure_set (structure, "pointer_y", G_TYPE_DOUBLE,
+        (gdouble) y * yscale, NULL);
+  }
+
+  event = gst_event_new_navigation (structure);
+  if (event) {
+    gst_event_ref (event);
+    handled = gst_pad_push_event (GST_VIDEO_SINK_PAD (xvimagesink), event);
+
+    if (!handled)
+      gst_element_post_message ((GstElement *) xvimagesink,
+          gst_navigation_message_new_event ((GstObject *) xvimagesink, event));
+
+    gst_event_unref (event);
   }
 }
 
 static void
-gst_xvimagesink_navigation_init (GstNavigationInterface * iface)
+gst_xv_image_sink_navigation_init (GstNavigationInterface * iface)
 {
-  iface->send_event = gst_xvimagesink_navigation_send_event;
+  iface->send_event = gst_xv_image_sink_navigation_send_event;
 }
 
 static void
-gst_xvimagesink_set_window_handle (GstVideoOverlay * overlay, guintptr id)
+gst_xv_image_sink_set_window_handle (GstVideoOverlay * overlay, guintptr id)
 {
   XID xwindow_id = id;
-  GstXvImageSink *xvimagesink = GST_XVIMAGESINK (overlay);
+  GstXvImageSink *xvimagesink = GST_XV_IMAGE_SINK (overlay);
   GstXWindow *xwindow = NULL;
   GstXvContext *context;
 
-  g_return_if_fail (GST_IS_XVIMAGESINK (xvimagesink));
+  g_return_if_fail (GST_IS_XV_IMAGE_SINK (xvimagesink));
 
   g_mutex_lock (&xvimagesink->flow_lock);
 
@@ -1222,7 +1213,7 @@
 
   context = xvimagesink->context;
 
-  gst_xvimagesink_update_colorbalance (xvimagesink);
+  gst_xv_image_sink_update_colorbalance (xvimagesink);
 
   /* If a window is there already we destroy it */
   if (xvimagesink->xwindow) {
@@ -1237,7 +1228,7 @@
     if (GST_VIDEO_SINK_WIDTH (xvimagesink)
         && GST_VIDEO_SINK_HEIGHT (xvimagesink)) {
       xwindow =
-          gst_xvimagesink_xwindow_new (xvimagesink,
+          gst_xv_image_sink_xwindow_new (xvimagesink,
           GST_VIDEO_SINK_WIDTH (xvimagesink),
           GST_VIDEO_SINK_HEIGHT (xvimagesink));
     }
@@ -1253,20 +1244,20 @@
 }
 
 static void
-gst_xvimagesink_expose (GstVideoOverlay * overlay)
+gst_xv_image_sink_expose (GstVideoOverlay * overlay)
 {
-  GstXvImageSink *xvimagesink = GST_XVIMAGESINK (overlay);
+  GstXvImageSink *xvimagesink = GST_XV_IMAGE_SINK (overlay);
 
   GST_DEBUG ("doing expose");
-  gst_xvimagesink_xwindow_update_geometry (xvimagesink);
-  gst_xvimagesink_xvimage_put (xvimagesink, NULL);
+  gst_xv_image_sink_xwindow_update_geometry (xvimagesink);
+  gst_xv_image_sink_xvimage_put (xvimagesink, NULL);
 }
 
 static void
-gst_xvimagesink_set_event_handling (GstVideoOverlay * overlay,
+gst_xv_image_sink_set_event_handling (GstVideoOverlay * overlay,
     gboolean handle_events)
 {
-  GstXvImageSink *xvimagesink = GST_XVIMAGESINK (overlay);
+  GstXvImageSink *xvimagesink = GST_XV_IMAGE_SINK (overlay);
 
   g_mutex_lock (&xvimagesink->flow_lock);
   xvimagesink->handle_events = handle_events;
@@ -1276,10 +1267,10 @@
 }
 
 static void
-gst_xvimagesink_set_render_rectangle (GstVideoOverlay * overlay, gint x, gint y,
-    gint width, gint height)
+gst_xv_image_sink_set_render_rectangle (GstVideoOverlay * overlay, gint x,
+    gint y, gint width, gint height)
 {
-  GstXvImageSink *xvimagesink = GST_XVIMAGESINK (overlay);
+  GstXvImageSink *xvimagesink = GST_XV_IMAGE_SINK (overlay);
 
   g_mutex_lock (&xvimagesink->flow_lock);
   if (G_LIKELY (xvimagesink->xwindow))
@@ -1289,20 +1280,20 @@
 }
 
 static void
-gst_xvimagesink_video_overlay_init (GstVideoOverlayInterface * iface)
+gst_xv_image_sink_video_overlay_init (GstVideoOverlayInterface * iface)
 {
-  iface->set_window_handle = gst_xvimagesink_set_window_handle;
-  iface->expose = gst_xvimagesink_expose;
-  iface->handle_events = gst_xvimagesink_set_event_handling;
-  iface->set_render_rectangle = gst_xvimagesink_set_render_rectangle;
+  iface->set_window_handle = gst_xv_image_sink_set_window_handle;
+  iface->expose = gst_xv_image_sink_expose;
+  iface->handle_events = gst_xv_image_sink_set_event_handling;
+  iface->set_render_rectangle = gst_xv_image_sink_set_render_rectangle;
 }
 
 static const GList *
-gst_xvimagesink_colorbalance_list_channels (GstColorBalance * balance)
+gst_xv_image_sink_colorbalance_list_channels (GstColorBalance * balance)
 {
-  GstXvImageSink *xvimagesink = GST_XVIMAGESINK (balance);
+  GstXvImageSink *xvimagesink = GST_XV_IMAGE_SINK (balance);
 
-  g_return_val_if_fail (GST_IS_XVIMAGESINK (xvimagesink), NULL);
+  g_return_val_if_fail (GST_IS_XV_IMAGE_SINK (xvimagesink), NULL);
 
   if (xvimagesink->context)
     return xvimagesink->context->channels_list;
@@ -1311,12 +1302,12 @@
 }
 
 static void
-gst_xvimagesink_colorbalance_set_value (GstColorBalance * balance,
+gst_xv_image_sink_colorbalance_set_value (GstColorBalance * balance,
     GstColorBalanceChannel * channel, gint value)
 {
-  GstXvImageSink *xvimagesink = GST_XVIMAGESINK (balance);
+  GstXvImageSink *xvimagesink = GST_XV_IMAGE_SINK (balance);
 
-  g_return_if_fail (GST_IS_XVIMAGESINK (xvimagesink));
+  g_return_if_fail (GST_IS_XV_IMAGE_SINK (xvimagesink));
   g_return_if_fail (channel->label != NULL);
 
   xvimagesink->config.cb_changed = TRUE;
@@ -1338,17 +1329,17 @@
     return;
   }
 
-  gst_xvimagesink_update_colorbalance (xvimagesink);
+  gst_xv_image_sink_update_colorbalance (xvimagesink);
 }
 
 static gint
-gst_xvimagesink_colorbalance_get_value (GstColorBalance * balance,
+gst_xv_image_sink_colorbalance_get_value (GstColorBalance * balance,
     GstColorBalanceChannel * channel)
 {
-  GstXvImageSink *xvimagesink = GST_XVIMAGESINK (balance);
+  GstXvImageSink *xvimagesink = GST_XV_IMAGE_SINK (balance);
   gint value = 0;
 
-  g_return_val_if_fail (GST_IS_XVIMAGESINK (xvimagesink), 0);
+  g_return_val_if_fail (GST_IS_XV_IMAGE_SINK (xvimagesink), 0);
   g_return_val_if_fail (channel->label != NULL, 0);
 
   if (g_ascii_strcasecmp (channel->label, "XV_HUE") == 0) {
@@ -1371,23 +1362,23 @@
 }
 
 static GstColorBalanceType
-gst_xvimagesink_colorbalance_get_balance_type (GstColorBalance * balance)
+gst_xv_image_sink_colorbalance_get_balance_type (GstColorBalance * balance)
 {
   return GST_COLOR_BALANCE_HARDWARE;
 }
 
 static void
-gst_xvimagesink_colorbalance_init (GstColorBalanceInterface * iface)
+gst_xv_image_sink_colorbalance_init (GstColorBalanceInterface * iface)
 {
-  iface->list_channels = gst_xvimagesink_colorbalance_list_channels;
-  iface->set_value = gst_xvimagesink_colorbalance_set_value;
-  iface->get_value = gst_xvimagesink_colorbalance_get_value;
-  iface->get_balance_type = gst_xvimagesink_colorbalance_get_balance_type;
+  iface->list_channels = gst_xv_image_sink_colorbalance_list_channels;
+  iface->set_value = gst_xv_image_sink_colorbalance_set_value;
+  iface->get_value = gst_xv_image_sink_colorbalance_get_value;
+  iface->get_balance_type = gst_xv_image_sink_colorbalance_get_balance_type;
 }
 
 #if 0
 static const GList *
-gst_xvimagesink_probe_get_properties (GstPropertyProbe * probe)
+gst_xv_image_sink_probe_get_properties (GstPropertyProbe * probe)
 {
   GObjectClass *klass = G_OBJECT_GET_CLASS (probe);
   static GList *list = NULL;
@@ -1408,10 +1399,10 @@
 }
 
 static void
-gst_xvimagesink_probe_probe_property (GstPropertyProbe * probe,
+gst_xv_image_sink_probe_probe_property (GstPropertyProbe * probe,
     guint prop_id, const GParamSpec * pspec)
 {
-  GstXvImageSink *xvimagesink = GST_XVIMAGESINK (probe);
+  GstXvImageSink *xvimagesink = GST_XV_IMAGE_SINK (probe);
 
   switch (prop_id) {
     case PROP_DEVICE:
@@ -1422,7 +1413,7 @@
           "probing device list and get capabilities");
       if (!xvimagesink->context) {
         GST_DEBUG_OBJECT (xvimagesink, "generating context");
-        xvimagesink->context = gst_xvimagesink_context_get (xvimagesink);
+        xvimagesink->context = gst_xv_image_sink_context_get (xvimagesink);
       }
       break;
     default:
@@ -1432,10 +1423,10 @@
 }
 
 static gboolean
-gst_xvimagesink_probe_needs_probe (GstPropertyProbe * probe,
+gst_xv_image_sink_probe_needs_probe (GstPropertyProbe * probe,
     guint prop_id, const GParamSpec * pspec)
 {
-  GstXvImageSink *xvimagesink = GST_XVIMAGESINK (probe);
+  GstXvImageSink *xvimagesink = GST_XV_IMAGE_SINK (probe);
   gboolean ret = FALSE;
 
   switch (prop_id) {
@@ -1458,10 +1449,10 @@
 }
 
 static GValueArray *
-gst_xvimagesink_probe_get_values (GstPropertyProbe * probe,
+gst_xv_image_sink_probe_get_values (GstPropertyProbe * probe,
     guint prop_id, const GParamSpec * pspec)
 {
-  GstXvImageSink *xvimagesink = GST_XVIMAGESINK (probe);
+  GstXvImageSink *xvimagesink = GST_XV_IMAGE_SINK (probe);
   GValueArray *array = NULL;
 
   if (G_UNLIKELY (!xvimagesink->context)) {
@@ -1536,13 +1527,13 @@
 }
 
 static void
-gst_xvimagesink_property_probe_interface_init (GstPropertyProbeInterface *
+gst_xv_image_sink_property_probe_interface_init (GstPropertyProbeInterface *
     iface)
 {
-  iface->get_properties = gst_xvimagesink_probe_get_properties;
-  iface->probe_property = gst_xvimagesink_probe_probe_property;
-  iface->needs_probe = gst_xvimagesink_probe_needs_probe;
-  iface->get_values = gst_xvimagesink_probe_get_values;
+  iface->get_properties = gst_xv_image_sink_probe_get_properties;
+  iface->probe_property = gst_xv_image_sink_probe_probe_property;
+  iface->needs_probe = gst_xv_image_sink_probe_needs_probe;
+  iface->get_values = gst_xv_image_sink_probe_get_values;
 }
 #endif
 
@@ -1553,35 +1544,35 @@
 /* =========================================== */
 
 static void
-gst_xvimagesink_set_property (GObject * object, guint prop_id,
+gst_xv_image_sink_set_property (GObject * object, guint prop_id,
     const GValue * value, GParamSpec * pspec)
 {
   GstXvImageSink *xvimagesink;
 
-  g_return_if_fail (GST_IS_XVIMAGESINK (object));
+  g_return_if_fail (GST_IS_XV_IMAGE_SINK (object));
 
-  xvimagesink = GST_XVIMAGESINK (object);
+  xvimagesink = GST_XV_IMAGE_SINK (object);
 
   switch (prop_id) {
     case PROP_HUE:
       xvimagesink->config.hue = g_value_get_int (value);
       xvimagesink->config.cb_changed = TRUE;
-      gst_xvimagesink_update_colorbalance (xvimagesink);
+      gst_xv_image_sink_update_colorbalance (xvimagesink);
       break;
     case PROP_CONTRAST:
       xvimagesink->config.contrast = g_value_get_int (value);
       xvimagesink->config.cb_changed = TRUE;
-      gst_xvimagesink_update_colorbalance (xvimagesink);
+      gst_xv_image_sink_update_colorbalance (xvimagesink);
       break;
     case PROP_BRIGHTNESS:
       xvimagesink->config.brightness = g_value_get_int (value);
       xvimagesink->config.cb_changed = TRUE;
-      gst_xvimagesink_update_colorbalance (xvimagesink);
+      gst_xv_image_sink_update_colorbalance (xvimagesink);
       break;
     case PROP_SATURATION:
       xvimagesink->config.saturation = g_value_get_int (value);
       xvimagesink->config.cb_changed = TRUE;
-      gst_xvimagesink_update_colorbalance (xvimagesink);
+      gst_xv_image_sink_update_colorbalance (xvimagesink);
       break;
     case PROP_DISPLAY:
       g_free (xvimagesink->config.display_name);
@@ -1610,16 +1601,16 @@
       xvimagesink->keep_aspect = g_value_get_boolean (value);
       break;
     case PROP_HANDLE_EVENTS:
-      gst_xvimagesink_set_event_handling (GST_VIDEO_OVERLAY (xvimagesink),
+      gst_xv_image_sink_set_event_handling (GST_VIDEO_OVERLAY (xvimagesink),
           g_value_get_boolean (value));
-      gst_xvimagesink_manage_event_thread (xvimagesink);
+      gst_xv_image_sink_manage_event_thread (xvimagesink);
       break;
     case PROP_DEVICE:
       xvimagesink->config.adaptor_nr = atoi (g_value_get_string (value));
       break;
     case PROP_HANDLE_EXPOSE:
       xvimagesink->handle_expose = g_value_get_boolean (value);
-      gst_xvimagesink_manage_event_thread (xvimagesink);
+      gst_xv_image_sink_manage_event_thread (xvimagesink);
       break;
     case PROP_DOUBLE_BUFFER:
       xvimagesink->double_buffer = g_value_get_boolean (value);
@@ -1640,14 +1631,14 @@
 }
 
 static void
-gst_xvimagesink_get_property (GObject * object, guint prop_id,
+gst_xv_image_sink_get_property (GObject * object, guint prop_id,
     GValue * value, GParamSpec * pspec)
 {
   GstXvImageSink *xvimagesink;
 
-  g_return_if_fail (GST_IS_XVIMAGESINK (object));
+  g_return_if_fail (GST_IS_XV_IMAGE_SINK (object));
 
-  xvimagesink = GST_XVIMAGESINK (object);
+  xvimagesink = GST_XV_IMAGE_SINK (object);
 
   switch (prop_id) {
     case PROP_HUE:
@@ -1729,7 +1720,7 @@
 }
 
 static gboolean
-gst_xvimagesink_open (GstXvImageSink * xvimagesink)
+gst_xv_image_sink_open (GstXvImageSink * xvimagesink)
 {
   GError *error = NULL;
 
@@ -1756,8 +1747,8 @@
   /* call XSynchronize with the current value of synchronous */
   gst_xvcontext_set_synchronous (xvimagesink->context,
       xvimagesink->synchronous);
-  gst_xvimagesink_update_colorbalance (xvimagesink);
-  gst_xvimagesink_manage_event_thread (xvimagesink);
+  gst_xv_image_sink_update_colorbalance (xvimagesink);
+  gst_xv_image_sink_manage_event_thread (xvimagesink);
 
   return TRUE;
 
@@ -1765,13 +1756,14 @@
   {
     gst_element_message_full (GST_ELEMENT (xvimagesink), GST_MESSAGE_ERROR,
         error->domain, error->code, g_strdup ("Could not initialise Xv output"),
-        error->message, __FILE__, GST_FUNCTION, __LINE__);
+        g_strdup (error->message), __FILE__, GST_FUNCTION, __LINE__);
+    g_clear_error (&error);
     return FALSE;
   }
 }
 
 static void
-gst_xvimagesink_close (GstXvImageSink * xvimagesink)
+gst_xv_image_sink_close (GstXvImageSink * xvimagesink)
 {
   GThread *thread;
   GstXvContext *context;
@@ -1825,13 +1817,13 @@
  * We use mutexes and don't reset stuff to NULL here so let's register
  * as a finalize. */
 static void
-gst_xvimagesink_finalize (GObject * object)
+gst_xv_image_sink_finalize (GObject * object)
 {
   GstXvImageSink *xvimagesink;
 
-  xvimagesink = GST_XVIMAGESINK (object);
+  xvimagesink = GST_XV_IMAGE_SINK (object);
 
-  gst_xvimagesink_close (xvimagesink);
+  gst_xv_image_sink_close (xvimagesink);
 
   gst_xvcontext_config_clear (&xvimagesink->config);
 
@@ -1846,7 +1838,7 @@
 }
 
 static void
-gst_xvimagesink_init (GstXvImageSink * xvimagesink)
+gst_xv_image_sink_init (GstXvImageSink * xvimagesink)
 {
   xvimagesink->config.display_name = NULL;
   xvimagesink->config.adaptor_nr = 0;
@@ -1884,7 +1876,7 @@
 }
 
 static void
-gst_xvimagesink_class_init (GstXvImageSinkClass * klass)
+gst_xv_image_sink_class_init (GstXvImageSinkClass * klass)
 {
   GObjectClass *gobject_class;
   GstElementClass *gstelement_class;
@@ -1898,8 +1890,8 @@
 
   parent_class = g_type_class_peek_parent (klass);
 
-  gobject_class->set_property = gst_xvimagesink_set_property;
-  gobject_class->get_property = gst_xvimagesink_get_property;
+  gobject_class->set_property = gst_xv_image_sink_set_property;
+  gobject_class->get_property = gst_xv_image_sink_get_property;
 
   g_object_class_install_property (gobject_class, PROP_CONTRAST,
       g_param_spec_int ("contrast", "Contrast", "The contrast of the video",
@@ -2014,24 +2006,26 @@
           "Height of the window", 0, G_MAXUINT64, 0,
           G_PARAM_READABLE | G_PARAM_STATIC_STRINGS));
 
-  gobject_class->finalize = gst_xvimagesink_finalize;
+  gobject_class->finalize = gst_xv_image_sink_finalize;
 
   gst_element_class_set_static_metadata (gstelement_class,
       "Video sink", "Sink/Video",
       "A Xv based videosink", "Julien Moutte <julien@moutte.net>");
 
   gst_element_class_add_pad_template (gstelement_class,
-      gst_static_pad_template_get (&gst_xvimagesink_sink_template_factory));
+      gst_static_pad_template_get (&gst_xv_image_sink_sink_template_factory));
 
   gstelement_class->change_state =
-      GST_DEBUG_FUNCPTR (gst_xvimagesink_change_state);
+      GST_DEBUG_FUNCPTR (gst_xv_image_sink_change_state);
 
-  gstbasesink_class->get_caps = GST_DEBUG_FUNCPTR (gst_xvimagesink_getcaps);
-  gstbasesink_class->set_caps = GST_DEBUG_FUNCPTR (gst_xvimagesink_setcaps);
-  gstbasesink_class->get_times = GST_DEBUG_FUNCPTR (gst_xvimagesink_get_times);
+  gstbasesink_class->get_caps = GST_DEBUG_FUNCPTR (gst_xv_image_sink_getcaps);
+  gstbasesink_class->set_caps = GST_DEBUG_FUNCPTR (gst_xv_image_sink_setcaps);
+  gstbasesink_class->get_times =
+      GST_DEBUG_FUNCPTR (gst_xv_image_sink_get_times);
   gstbasesink_class->propose_allocation =
-      GST_DEBUG_FUNCPTR (gst_xvimagesink_propose_allocation);
-  gstbasesink_class->event = GST_DEBUG_FUNCPTR (gst_xvimagesink_event);
+      GST_DEBUG_FUNCPTR (gst_xv_image_sink_propose_allocation);
+  gstbasesink_class->event = GST_DEBUG_FUNCPTR (gst_xv_image_sink_event);
 
-  videosink_class->show_frame = GST_DEBUG_FUNCPTR (gst_xvimagesink_show_frame);
+  videosink_class->show_frame =
+      GST_DEBUG_FUNCPTR (gst_xv_image_sink_show_frame);
 }
diff --git a/sys/xvimage/xvimagesink.h b/sys/xvimage/xvimagesink.h
index aefb667..1177903 100644
--- a/sys/xvimage/xvimagesink.h
+++ b/sys/xvimage/xvimagesink.h
@@ -17,8 +17,8 @@
  * Boston, MA 02110-1301, USA.
  */
 
-#ifndef __GST_XVIMAGESINK_H__
-#define __GST_XVIMAGESINK_H__
+#ifndef __GST_XV_IMAGE_SINK_H__
+#define __GST_XV_IMAGE_SINK_H__
 
 #include <gst/video/gstvideosink.h>
 
@@ -26,16 +26,16 @@
 #include <gst/video/video.h>
 
 G_BEGIN_DECLS
-#define GST_TYPE_XVIMAGESINK \
-  (gst_xvimagesink_get_type())
-#define GST_XVIMAGESINK(obj) \
-  (G_TYPE_CHECK_INSTANCE_CAST((obj), GST_TYPE_XVIMAGESINK, GstXvImageSink))
-#define GST_XVIMAGESINK_CLASS(klass) \
-  (G_TYPE_CHECK_CLASS_CAST((klass), GST_TYPE_XVIMAGESINK, GstXvImageSinkClass))
-#define GST_IS_XVIMAGESINK(obj) \
-  (G_TYPE_CHECK_INSTANCE_TYPE((obj), GST_TYPE_XVIMAGESINK))
-#define GST_IS_XVIMAGESINK_CLASS(klass) \
-  (G_TYPE_CHECK_CLASS_TYPE((klass), GST_TYPE_XVIMAGESINK))
+#define GST_TYPE_XV_IMAGE_SINK \
+  (gst_xv_image_sink_get_type())
+#define GST_XV_IMAGE_SINK(obj) \
+  (G_TYPE_CHECK_INSTANCE_CAST((obj), GST_TYPE_XV_IMAGE_SINK, GstXvImageSink))
+#define GST_XV_IMAGE_SINK_CLASS(klass) \
+  (G_TYPE_CHECK_CLASS_CAST((klass), GST_TYPE_XV_IMAGE_SINK, GstXvImageSinkClass))
+#define GST_IS_XV_IMAGE_SINK(obj) \
+  (G_TYPE_CHECK_INSTANCE_TYPE((obj), GST_TYPE_XV_IMAGE_SINK))
+#define GST_IS_XV_IMAGE_SINK_CLASS(klass) \
+  (G_TYPE_CHECK_CLASS_TYPE((klass), GST_TYPE_XV_IMAGE_SINK))
 
 typedef struct _GstXvImageSink GstXvImageSink;
 typedef struct _GstXvImageSinkClass GstXvImageSinkClass;
@@ -127,7 +127,7 @@
   GstVideoSinkClass parent_class;
 };
 
-GType gst_xvimagesink_get_type (void);
+GType gst_xv_image_sink_get_type (void);
 
 G_END_DECLS
-#endif /* __GST_XVIMAGESINK_H__ */
+#endif /* __GST_XV_IMAGE_SINK_H__ */
diff --git a/test-driver b/test-driver
index d306056..8e575b0 100755
--- a/test-driver
+++ b/test-driver
@@ -3,7 +3,7 @@
 
 scriptversion=2013-07-13.22; # UTC
 
-# Copyright (C) 2011-2013 Free Software Foundation, Inc.
+# Copyright (C) 2011-2014 Free Software Foundation, Inc.
 #
 # 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
@@ -106,11 +106,14 @@
 # Test script is run here.
 "$@" >$log_file 2>&1
 estatus=$?
+
 if test $enable_hard_errors = no && test $estatus -eq 99; then
-  estatus=1
+  tweaked_estatus=1
+else
+  tweaked_estatus=$estatus
 fi
 
-case $estatus:$expect_failure in
+case $tweaked_estatus:$expect_failure in
   0:yes) col=$red res=XPASS recheck=yes gcopy=yes;;
   0:*)   col=$grn res=PASS  recheck=no  gcopy=no;;
   77:*)  col=$blu res=SKIP  recheck=no  gcopy=yes;;
@@ -119,6 +122,12 @@
   *:*)   col=$red res=FAIL  recheck=yes gcopy=yes;;
 esac
 
+# Report the test outcome and exit status in the logs, so that one can
+# know whether the test passed or failed simply by looking at the '.log'
+# file, without the need of also peaking into the corresponding '.trs'
+# file (automake bug#11814).
+echo "$res $test_name (exit status: $estatus)" >>$log_file
+
 # Report outcome to console.
 echo "${col}${res}${std}: $test_name"
 
diff --git a/tests/Makefile.in b/tests/Makefile.in
index 6b41168..c2f51c7 100644
--- a/tests/Makefile.in
+++ b/tests/Makefile.in
@@ -1,7 +1,7 @@
-# Makefile.in generated by automake 1.14.1 from Makefile.am.
+# Makefile.in generated by automake 1.15 from Makefile.am.
 # @configure_input@
 
-# Copyright (C) 1994-2013 Free Software Foundation, Inc.
+# 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,
@@ -14,7 +14,17 @@
 
 @SET_MAKE@
 VPATH = @srcdir@
-am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)'
+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 \
       ?) ;; \
@@ -79,7 +89,6 @@
 host_triplet = @host@
 target_triplet = @target@
 subdir = tests
-DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am
 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 \
@@ -100,7 +109,6 @@
 	$(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-x11.m4 \
 	$(top_srcdir)/common/m4/gst.m4 \
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
@@ -117,6 +125,7 @@
 	$(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
 mkinstalldirs = $(install_sh) -d
 CONFIG_HEADER = $(top_builddir)/config.h
 CONFIG_CLEAN_FILES =
@@ -175,6 +184,7 @@
   done | $(am__uniquify_input)`
 ETAGS = etags
 CTAGS = ctags
+am__DIST_COMMON = $(srcdir)/Makefile.in
 DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
 am__relativize = \
   dir0=`pwd`; \
@@ -260,6 +270,8 @@
 GIO_CFLAGS = @GIO_CFLAGS@
 GIO_LDFLAGS = @GIO_LDFLAGS@
 GIO_LIBS = @GIO_LIBS@
+GIO_UNIX_2_0_CFLAGS = @GIO_UNIX_2_0_CFLAGS@
+GIO_UNIX_2_0_LIBS = @GIO_UNIX_2_0_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
@@ -289,6 +301,8 @@
 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_OPTION_CFLAGS = @GST_OPTION_CFLAGS@
 GST_OPTION_CXXFLAGS = @GST_OPTION_CXXFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
@@ -316,7 +330,6 @@
 GTK_X11_CFLAGS = @GTK_X11_CFLAGS@
 GTK_X11_LIBS = @GTK_X11_LIBS@
 HAVE_CDPARANOIA = @HAVE_CDPARANOIA@
-HAVE_X = @HAVE_X@
 HAVE_XSHM = @HAVE_XSHM@
 HAVE_ZLIB = @HAVE_ZLIB@
 HTML_DIR = @HTML_DIR@
@@ -331,6 +344,7 @@
 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@
@@ -420,13 +434,12 @@
 XGETTEXT = @XGETTEXT@
 XGETTEXT_015 = @XGETTEXT_015@
 XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
-XMKMF = @XMKMF@
+XSHM_CFLAGS = @XSHM_CFLAGS@
 XSHM_LIBS = @XSHM_LIBS@
+XVIDEO_CFLAGS = @XVIDEO_CFLAGS@
 XVIDEO_LIBS = @XVIDEO_LIBS@
 X_CFLAGS = @X_CFLAGS@
-X_EXTRA_LIBS = @X_EXTRA_LIBS@
 X_LIBS = @X_LIBS@
-X_PRE_LIBS = @X_PRE_LIBS@
 ZLIB_CFLAGS = @ZLIB_CFLAGS@
 ZLIB_LIBS = @ZLIB_LIBS@
 abs_builddir = @abs_builddir@
@@ -479,6 +492,7 @@
 psdir = @psdir@
 pyexecdir = @pyexecdir@
 pythondir = @pythondir@
+runstatedir = @runstatedir@
 sbindir = @sbindir@
 sharedstatedir = @sharedstatedir@
 srcdir = @srcdir@
@@ -523,7 +537,6 @@
 	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu tests/Makefile'; \
 	$(am__cd) $(top_srcdir) && \
 	  $(AUTOMAKE) --gnu tests/Makefile
-.PRECIOUS: Makefile
 Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
 	@case '$?' in \
 	  *config.status*) \
@@ -818,6 +831,8 @@
 	mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \
 	ps ps-am tags tags-am uninstall uninstall-am
 
+.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.
diff --git a/tests/check/Makefile.am b/tests/check/Makefile.am
index e5e60ed..e47a2ad 100644
--- a/tests/check/Makefile.am
+++ b/tests/check/Makefile.am
@@ -6,7 +6,7 @@
 REGISTRY_ENVIRONMENT = \
 	GST_REGISTRY_1_0=$(CHECK_REGISTRY)
 
-TESTS_ENVIRONMENT = \
+AM_TESTS_ENVIRONMENT = \
 	CK_DEFAULT_TIMEOUT=120                                  \
 	GST_STATE_IGNORE_ELEMENTS="$(STATE_IGNORE_ELEMENTS)"	\
 	$(REGISTRY_ENVIRONMENT)					\
@@ -20,11 +20,11 @@
 CLEANFILES = core.* test-registry.*
 
 clean-local: clean-local-check
-	
+
 distclean-local: distclean-local-orc
 
 $(CHECK_REGISTRY):
-	$(TESTS_ENVIRONMENT)
+	$(AM_TESTS_ENVIRONMENT)
 
 # elements to ignore for the state tests
 STATE_IGNORE_ELEMENTS = cdio cdparanoiasrc libvisual_ alsasrc alsasink
@@ -140,7 +140,7 @@
 endif
 
 if HAVE_ORC
-check_orc = orc/video orc/audio orc/adder orc/audioconvert orc/volume orc/videoscale orc/videotestsrc
+check_orc = orc/video orc/audio orc/adder orc/audioconvert orc/volume orc/videotestsrc
 else
 check_orc =
 endif
@@ -164,7 +164,11 @@
 endif
 
 if USE_PLUGIN_TCP
+if USE_PLUGIN_APP
+check_tcp = elements/multifdsink elements/multisocketsink pipelines/tcp
+else
 check_tcp = elements/multifdsink elements/multisocketsink
+endif
 else
 check_tcp =
 endif
@@ -185,6 +189,7 @@
 	generic/clock-selection \
 	generic/states \
 	libs/libsabi \
+	libs/allocators \
 	libs/audio \
 	libs/audiocdsrc \
 	libs/audiodecoder \
@@ -209,6 +214,7 @@
 	pipelines/simple-launch-lines \
 	pipelines/basetime \
 	pipelines/capsfilter-renegotiation \
+	pipelines/streamsynchronizer \
 	$(check_adder) \
 	$(check_app) \
 	$(check_audioconvert) \
@@ -238,8 +244,6 @@
 
 # videoconvert takes too long, so disabled for now
 VALGRIND_TO_FIX = \
-	elements/videoconvert \
-	libs/video \
 	$(check_orc)
 
 # these tests don't even pass
@@ -250,15 +254,18 @@
 	libs/struct_i386.h     \
 	libs/struct_i386_osx.h \
 	libs/struct_ppc32.h \
+	libs/struct_ppc64.h \
 	libs/struct_x86_64.h
 
 AM_CFLAGS = -I$(top_srcdir)/gst-libs -I$(top_builddir)/gst-libs \
 	$(GST_CFLAGS) $(GST_CHECK_CFLAGS) \
 	-DGST_TEST_FILES_PATH="\"$(TEST_FILES_DIRECTORY)\"" \
+	-DGST_CHECK_TEST_ENVIRONMENT_BEACON="\"GST_PLUGIN_LOADING_WHITELIST\"" \
 	-UG_DISABLE_ASSERT -UG_DISABLE_CAST_CHECKS
 AM_CXXFLAGS = -I$(top_srcdir)/gst-libs -I$(top_builddir)/gst-libs \
 	$(GST_CXXFLAGS) $(GST_CHECK_CFLAGS) \
 	-DGST_TEST_FILES_PATH="\"$(TEST_FILES_DIRECTORY)\"" \
+	-DGST_CHECK_TEST_ENVIRONMENT_BEACON="\"GST_PLUGIN_LOADING_WHITELIST\"" \
 	-UG_DISABLE_ASSERT -UG_DISABLE_CAST_CHECKS
 LDADD = $(GST_LIBS) $(GST_CHECK_LIBS)
 
@@ -284,6 +291,16 @@
 	$(GST_BASE_LIBS) \
 	$(LDADD)
 
+libs_allocators_CFLAGS = \
+	$(GST_PLUGINS_BASE_CFLAGS) \
+	$(GST_BASE_CFLAGS) \
+	$(AM_CFLAGS)
+
+libs_allocators_LDADD = \
+	$(top_builddir)/gst-libs/gst/allocators/libgstallocators-@GST_API_VERSION@.la \
+	$(GST_BASE_LIBS) \
+	$(LDADD)
+
 libs_audio_CFLAGS = \
 	$(GST_PLUGINS_BASE_CFLAGS) \
 	$(GST_BASE_CFLAGS) \
@@ -591,6 +608,14 @@
 elements_multisocketsink_CFLAGS = $(GIO_CFLAGS) $(AM_CFLAGS)
 elements_multisocketsink_LDADD = $(GIO_LIBS) $(LDADD)
 
+if USE_GIO_UNIX_2_0
+GIO_UNIX_2_0_DEFINED=-DHAVE_GIO_UNIX_2_0=1
+endif
+
+pipelines_tcp_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_NET_CFLAGS) $(GIO_CFLAGS) $(GIO_UNIX_2_0_CFLAGS) $(GIO_UNIX_2_0_DEFINED) $(AM_CFLAGS)
+pipelines_tcp_LDADD = $(GST_PLUGINS_BASE_LIBS) $(GST_NET_LIBS) $(GIO_LIBS) $(LDADD) \
+    $(GIO_UNIX_2_0_LIBS) $(top_builddir)/gst-libs/gst/app/libgstapp-@GST_API_VERSION@.la
+
 pipelines_gio_CFLAGS = $(GIO_CFLAGS) $(AM_CFLAGS)
 pipelines_gio_LDADD = $(GIO_LIBS) $(LDADD)
 
@@ -633,9 +658,6 @@
 orc_volume_CFLAGS = $(ORC_CFLAGS)
 orc_volume_LDADD = $(ORC_LIBS) -lorc-test-0.4
 nodist_orc_volume_SOURCES = orc/volume.c
-orc_videoscale_CFLAGS = $(ORC_CFLAGS)
-orc_videoscale_LDADD = $(ORC_LIBS) -lorc-test-0.4
-nodist_orc_videoscale_SOURCES = orc/videoscale.c
 orc_videotestsrc_CFLAGS = $(ORC_CFLAGS)
 orc_videotestsrc_LDADD = $(ORC_LIBS) -lorc-test-0.4
 nodist_orc_videotestsrc_SOURCES = orc/videotestsrc.c
@@ -660,10 +682,6 @@
 	$(MKDIR_P) orc/
 	$(ORCC) --test -o $@ $<
 
-orc/videoscale.c: $(top_srcdir)/gst/videoscale/gstvideoscaleorc.orc
-	$(MKDIR_P) orc/
-	$(ORCC) --test -o $@ $<
-
 orc/videotestsrc.c: $(top_srcdir)/gst/videotestsrc/gstvideotestsrcorc.orc
 	$(MKDIR_P) orc/
 	$(ORCC) --test -o $@ $<
diff --git a/tests/check/Makefile.in b/tests/check/Makefile.in
index 1e9ebfe..e86ded5 100644
--- a/tests/check/Makefile.in
+++ b/tests/check/Makefile.in
@@ -1,7 +1,7 @@
-# Makefile.in generated by automake 1.14.1 from Makefile.am.
+# Makefile.in generated by automake 1.15 from Makefile.am.
 # @configure_input@
 
-# Copyright (C) 1994-2013 Free Software Foundation, Inc.
+# 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,
@@ -16,7 +16,17 @@
 
 
 VPATH = @srcdir@
-am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)'
+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 \
       ?) ;; \
@@ -80,23 +90,22 @@
 build_triplet = @build@
 host_triplet = @host@
 target_triplet = @target@
-DIST_COMMON = $(top_srcdir)/common/check.mak $(srcdir)/Makefile.in \
-	$(srcdir)/Makefile.am $(top_srcdir)/depcomp $(noinst_HEADERS) \
-	$(top_srcdir)/test-driver
 check_PROGRAMS = generic/clock-selection$(EXEEXT) \
 	generic/states$(EXEEXT) libs/libsabi$(EXEEXT) \
-	libs/audio$(EXEEXT) libs/audiocdsrc$(EXEEXT) \
-	libs/audiodecoder$(EXEEXT) libs/audioencoder$(EXEEXT) \
-	libs/discoverer$(EXEEXT) libs/fft$(EXEEXT) \
-	libs/navigation$(EXEEXT) libs/pbutils$(EXEEXT) \
-	libs/profile$(EXEEXT) libs/mikey$(EXEEXT) libs/rtp$(EXEEXT) \
+	libs/allocators$(EXEEXT) libs/audio$(EXEEXT) \
+	libs/audiocdsrc$(EXEEXT) libs/audiodecoder$(EXEEXT) \
+	libs/audioencoder$(EXEEXT) libs/discoverer$(EXEEXT) \
+	libs/fft$(EXEEXT) libs/navigation$(EXEEXT) \
+	libs/pbutils$(EXEEXT) libs/profile$(EXEEXT) \
+	libs/mikey$(EXEEXT) libs/rtp$(EXEEXT) \
 	libs/rtpbasedepayload$(EXEEXT) libs/rtpbasepayload$(EXEEXT) \
 	libs/rtsp$(EXEEXT) libs/rtspconnection$(EXEEXT) \
 	libs/sdp$(EXEEXT) libs/tag$(EXEEXT) libs/video$(EXEEXT) \
 	libs/videodecoder$(EXEEXT) libs/videoencoder$(EXEEXT) \
 	libs/xmpwriter$(EXEEXT) pipelines/simple-launch-lines$(EXEEXT) \
 	pipelines/basetime$(EXEEXT) \
-	pipelines/capsfilter-renegotiation$(EXEEXT) $(am__EXEEXT_1) \
+	pipelines/capsfilter-renegotiation$(EXEEXT) \
+	pipelines/streamsynchronizer$(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) \
@@ -127,7 +136,6 @@
 	$(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-x11.m4 \
 	$(top_srcdir)/common/m4/gst.m4 \
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
@@ -144,6 +152,8 @@
 	$(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 =
@@ -167,8 +177,11 @@
 @USE_PLUGIN_PLAYBACK_TRUE@	elements/playbin-complex$(EXEEXT) \
 @USE_PLUGIN_PLAYBACK_TRUE@	elements/streamsynchronizer$(EXEEXT)
 @USE_PLUGIN_SUBPARSE_TRUE@am__EXEEXT_12 = elements/subparse$(EXEEXT)
-@USE_PLUGIN_TCP_TRUE@am__EXEEXT_13 = elements/multifdsink$(EXEEXT) \
-@USE_PLUGIN_TCP_TRUE@	elements/multisocketsink$(EXEEXT)
+@USE_PLUGIN_APP_FALSE@@USE_PLUGIN_TCP_TRUE@am__EXEEXT_13 = elements/multifdsink$(EXEEXT) \
+@USE_PLUGIN_APP_FALSE@@USE_PLUGIN_TCP_TRUE@	elements/multisocketsink$(EXEEXT)
+@USE_PLUGIN_APP_TRUE@@USE_PLUGIN_TCP_TRUE@am__EXEEXT_13 = elements/multifdsink$(EXEEXT) \
+@USE_PLUGIN_APP_TRUE@@USE_PLUGIN_TCP_TRUE@	elements/multisocketsink$(EXEEXT) \
+@USE_PLUGIN_APP_TRUE@@USE_PLUGIN_TCP_TRUE@	pipelines/tcp$(EXEEXT)
 @USE_THEORA_TRUE@am__EXEEXT_14 = pipelines/theoraenc$(EXEEXT)
 @USE_PLUGIN_TYPEFIND_TRUE@am__EXEEXT_15 =  \
 @USE_PLUGIN_TYPEFIND_TRUE@	gst/typefindfunctions$(EXEEXT)
@@ -188,8 +201,7 @@
 @HAVE_CXX_TRUE@am__EXEEXT_22 = libs/gstlibscpp$(EXEEXT)
 @HAVE_ORC_TRUE@am__EXEEXT_23 = orc/video$(EXEEXT) orc/audio$(EXEEXT) \
 @HAVE_ORC_TRUE@	orc/adder$(EXEEXT) orc/audioconvert$(EXEEXT) \
-@HAVE_ORC_TRUE@	orc/volume$(EXEEXT) orc/videoscale$(EXEEXT) \
-@HAVE_ORC_TRUE@	orc/videotestsrc$(EXEEXT)
+@HAVE_ORC_TRUE@	orc/volume$(EXEEXT) orc/videotestsrc$(EXEEXT)
 @USE_LIBVISUAL_TRUE@am__EXEEXT_24 = elements/libvisual$(EXEEXT)
 PROGRAMS = $(noinst_PROGRAMS)
 elements_adder_SOURCES = elements/adder.c
@@ -413,6 +425,14 @@
 	$(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
 	$(gst_typefindfunctions_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
 	$(LDFLAGS) -o $@
+libs_allocators_SOURCES = libs/allocators.c
+libs_allocators_OBJECTS = libs/libs_allocators-allocators.$(OBJEXT)
+libs_allocators_DEPENDENCIES = $(top_builddir)/gst-libs/gst/allocators/libgstallocators-@GST_API_VERSION@.la \
+	$(am__DEPENDENCIES_1) $(am__DEPENDENCIES_2)
+libs_allocators_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
+	$(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
+	$(libs_allocators_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) \
+	-o $@
 libs_audio_SOURCES = libs/audio.c
 libs_audio_OBJECTS = libs/libs_audio-audio.$(OBJEXT)
 libs_audio_DEPENDENCIES = $(top_builddir)/gst-libs/gst/audio/libgstaudio-@GST_API_VERSION@.la \
@@ -626,14 +646,6 @@
 orc_video_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
 	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(orc_video_CFLAGS) \
 	$(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
-nodist_orc_videoscale_OBJECTS =  \
-	orc/orc_videoscale-videoscale.$(OBJEXT)
-orc_videoscale_OBJECTS = $(nodist_orc_videoscale_OBJECTS)
-orc_videoscale_DEPENDENCIES = $(am__DEPENDENCIES_1)
-orc_videoscale_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
-	$(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
-	$(orc_videoscale_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o \
-	$@
 nodist_orc_videotestsrc_OBJECTS =  \
 	orc/orc_videotestsrc-videotestsrc.$(OBJEXT)
 orc_videotestsrc_OBJECTS = $(nodist_orc_videotestsrc_OBJECTS)
@@ -685,6 +697,21 @@
 	$(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
 	$(pipelines_simple_launch_lines_CFLAGS) $(CFLAGS) \
 	$(AM_LDFLAGS) $(LDFLAGS) -o $@
+pipelines_streamsynchronizer_SOURCES = pipelines/streamsynchronizer.c
+pipelines_streamsynchronizer_OBJECTS =  \
+	pipelines/streamsynchronizer.$(OBJEXT)
+pipelines_streamsynchronizer_LDADD = $(LDADD)
+pipelines_streamsynchronizer_DEPENDENCIES = $(am__DEPENDENCIES_1) \
+	$(am__DEPENDENCIES_1)
+pipelines_tcp_SOURCES = pipelines/tcp.c
+pipelines_tcp_OBJECTS = pipelines/pipelines_tcp-tcp.$(OBJEXT)
+pipelines_tcp_DEPENDENCIES = $(am__DEPENDENCIES_1) \
+	$(am__DEPENDENCIES_1) $(am__DEPENDENCIES_2) \
+	$(am__DEPENDENCIES_1) \
+	$(top_builddir)/gst-libs/gst/app/libgstapp-@GST_API_VERSION@.la
+pipelines_tcp_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(pipelines_tcp_CFLAGS) \
+	$(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
 pipelines_theoraenc_SOURCES = pipelines/theoraenc.c
 pipelines_theoraenc_OBJECTS =  \
 	pipelines/pipelines_theoraenc-theoraenc.$(OBJEXT)
@@ -777,21 +804,21 @@
 	elements/videorate.c elements/videoscale.c \
 	elements/videotestsrc.c elements/volume.c elements/vorbisdec.c \
 	elements/vorbistag.c generic/clock-selection.c \
-	generic/states.c gst/typefindfunctions.c libs/audio.c \
-	libs/audiocdsrc.c libs/audiodecoder.c libs/audioencoder.c \
-	libs/discoverer.c libs/fft.c $(libs_gstlibscpp_SOURCES) \
-	libs/libsabi.c libs/mikey.c libs/navigation.c libs/pbutils.c \
-	libs/profile.c libs/rtp.c libs/rtpbasedepayload.c \
-	libs/rtpbasepayload.c libs/rtsp.c libs/rtspconnection.c \
-	libs/sdp.c libs/tag.c libs/video.c libs/videodecoder.c \
-	libs/videoencoder.c libs/xmpwriter.c \
+	generic/states.c gst/typefindfunctions.c libs/allocators.c \
+	libs/audio.c libs/audiocdsrc.c libs/audiodecoder.c \
+	libs/audioencoder.c libs/discoverer.c libs/fft.c \
+	$(libs_gstlibscpp_SOURCES) libs/libsabi.c libs/mikey.c \
+	libs/navigation.c libs/pbutils.c libs/profile.c libs/rtp.c \
+	libs/rtpbasedepayload.c libs/rtpbasepayload.c libs/rtsp.c \
+	libs/rtspconnection.c libs/sdp.c libs/tag.c libs/video.c \
+	libs/videodecoder.c libs/videoencoder.c libs/xmpwriter.c \
 	$(nodist_orc_adder_SOURCES) $(nodist_orc_audio_SOURCES) \
 	$(nodist_orc_audioconvert_SOURCES) $(nodist_orc_video_SOURCES) \
-	$(nodist_orc_videoscale_SOURCES) \
 	$(nodist_orc_videotestsrc_SOURCES) \
 	$(nodist_orc_volume_SOURCES) pipelines/basetime.c \
 	pipelines/capsfilter-renegotiation.c pipelines/gio.c \
 	pipelines/oggmux.c pipelines/simple-launch-lines.c \
+	pipelines/streamsynchronizer.c pipelines/tcp.c \
 	pipelines/theoraenc.c pipelines/vorbisdec.c \
 	pipelines/vorbisenc.c
 DIST_SOURCES = elements/adder.c elements/appsink.c elements/appsrc.c \
@@ -805,17 +832,18 @@
 	elements/videorate.c elements/videoscale.c \
 	elements/videotestsrc.c elements/volume.c elements/vorbisdec.c \
 	elements/vorbistag.c generic/clock-selection.c \
-	generic/states.c gst/typefindfunctions.c libs/audio.c \
-	libs/audiocdsrc.c libs/audiodecoder.c libs/audioencoder.c \
-	libs/discoverer.c libs/fft.c $(libs_gstlibscpp_SOURCES) \
-	libs/libsabi.c libs/mikey.c libs/navigation.c libs/pbutils.c \
-	libs/profile.c libs/rtp.c libs/rtpbasedepayload.c \
-	libs/rtpbasepayload.c libs/rtsp.c libs/rtspconnection.c \
-	libs/sdp.c libs/tag.c libs/video.c libs/videodecoder.c \
-	libs/videoencoder.c libs/xmpwriter.c pipelines/basetime.c \
-	pipelines/capsfilter-renegotiation.c pipelines/gio.c \
-	pipelines/oggmux.c pipelines/simple-launch-lines.c \
-	pipelines/theoraenc.c pipelines/vorbisdec.c \
+	generic/states.c gst/typefindfunctions.c libs/allocators.c \
+	libs/audio.c libs/audiocdsrc.c libs/audiodecoder.c \
+	libs/audioencoder.c libs/discoverer.c libs/fft.c \
+	$(libs_gstlibscpp_SOURCES) libs/libsabi.c libs/mikey.c \
+	libs/navigation.c libs/pbutils.c libs/profile.c libs/rtp.c \
+	libs/rtpbasedepayload.c libs/rtpbasepayload.c libs/rtsp.c \
+	libs/rtspconnection.c libs/sdp.c libs/tag.c libs/video.c \
+	libs/videodecoder.c libs/videoencoder.c libs/xmpwriter.c \
+	pipelines/basetime.c pipelines/capsfilter-renegotiation.c \
+	pipelines/gio.c pipelines/oggmux.c \
+	pipelines/simple-launch-lines.c pipelines/streamsynchronizer.c \
+	pipelines/tcp.c pipelines/theoraenc.c pipelines/vorbisdec.c \
 	pipelines/vorbisenc.c
 am__can_run_installinfo = \
   case $$AM_UPDATE_INFO_DIR in \
@@ -1046,6 +1074,8 @@
 TEST_LOG_DRIVER = $(SHELL) $(top_srcdir)/test-driver
 TEST_LOG_COMPILE = $(TEST_LOG_COMPILER) $(AM_TEST_LOG_FLAGS) \
 	$(TEST_LOG_FLAGS)
+am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/common/check.mak \
+	$(top_srcdir)/depcomp $(top_srcdir)/test-driver
 DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
 ACLOCAL = @ACLOCAL@
 ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@
@@ -1106,6 +1136,8 @@
 GIO_CFLAGS = @GIO_CFLAGS@
 GIO_LDFLAGS = @GIO_LDFLAGS@
 GIO_LIBS = @GIO_LIBS@
+GIO_UNIX_2_0_CFLAGS = @GIO_UNIX_2_0_CFLAGS@
+GIO_UNIX_2_0_LIBS = @GIO_UNIX_2_0_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
@@ -1135,6 +1167,8 @@
 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_OPTION_CFLAGS = @GST_OPTION_CFLAGS@
 GST_OPTION_CXXFLAGS = @GST_OPTION_CXXFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
@@ -1162,7 +1196,6 @@
 GTK_X11_CFLAGS = @GTK_X11_CFLAGS@
 GTK_X11_LIBS = @GTK_X11_LIBS@
 HAVE_CDPARANOIA = @HAVE_CDPARANOIA@
-HAVE_X = @HAVE_X@
 HAVE_XSHM = @HAVE_XSHM@
 HAVE_ZLIB = @HAVE_ZLIB@
 HTML_DIR = @HTML_DIR@
@@ -1177,6 +1210,7 @@
 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@
@@ -1266,13 +1300,12 @@
 XGETTEXT = @XGETTEXT@
 XGETTEXT_015 = @XGETTEXT_015@
 XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
-XMKMF = @XMKMF@
+XSHM_CFLAGS = @XSHM_CFLAGS@
 XSHM_LIBS = @XSHM_LIBS@
+XVIDEO_CFLAGS = @XVIDEO_CFLAGS@
 XVIDEO_LIBS = @XVIDEO_LIBS@
 X_CFLAGS = @X_CFLAGS@
-X_EXTRA_LIBS = @X_EXTRA_LIBS@
 X_LIBS = @X_LIBS@
-X_PRE_LIBS = @X_PRE_LIBS@
 ZLIB_CFLAGS = @ZLIB_CFLAGS@
 ZLIB_LIBS = @ZLIB_LIBS@
 abs_builddir = @abs_builddir@
@@ -1325,6 +1358,7 @@
 psdir = @psdir@
 pyexecdir = @pyexecdir@
 pythondir = @pythondir@
+runstatedir = @runstatedir@
 sbindir = @sbindir@
 sharedstatedir = @sharedstatedir@
 srcdir = @srcdir@
@@ -1345,7 +1379,7 @@
 REGISTRY_ENVIRONMENT = \
 	GST_REGISTRY_1_0=$(CHECK_REGISTRY)
 
-TESTS_ENVIRONMENT = \
+AM_TESTS_ENVIRONMENT = \
 	CK_DEFAULT_TIMEOUT=120                                  \
 	GST_STATE_IGNORE_ELEMENTS="$(STATE_IGNORE_ELEMENTS)"	\
 	$(REGISTRY_ENVIRONMENT)					\
@@ -1401,15 +1435,16 @@
 @USE_PLUGIN_ADDER_FALSE@check_adder = 
 @USE_PLUGIN_ADDER_TRUE@check_adder = elements/adder
 @HAVE_ORC_FALSE@check_orc = 
-@HAVE_ORC_TRUE@check_orc = orc/video orc/audio orc/adder orc/audioconvert orc/volume orc/videoscale orc/videotestsrc
+@HAVE_ORC_TRUE@check_orc = orc/video orc/audio orc/adder orc/audioconvert orc/volume orc/videotestsrc
 @USE_PLUGIN_GIO_FALSE@check_gio = 
 @USE_PLUGIN_GIO_TRUE@check_gio = pipelines/gio
 @USE_PLUGIN_APP_FALSE@check_app = 
 @USE_PLUGIN_APP_TRUE@check_app = elements/appsink elements/appsrc
 @USE_PLUGIN_AUDIORATE_FALSE@check_audiorate = 
 @USE_PLUGIN_AUDIORATE_TRUE@check_audiorate = elements/audiorate
+@USE_PLUGIN_APP_FALSE@@USE_PLUGIN_TCP_TRUE@check_tcp = elements/multifdsink elements/multisocketsink
+@USE_PLUGIN_APP_TRUE@@USE_PLUGIN_TCP_TRUE@check_tcp = elements/multifdsink elements/multisocketsink pipelines/tcp
 @USE_PLUGIN_TCP_FALSE@check_tcp = 
-@USE_PLUGIN_TCP_TRUE@check_tcp = elements/multifdsink elements/multisocketsink
 @USE_PLUGIN_AUDIORESAMPLE_FALSE@check_audioresample = 
 @USE_PLUGIN_AUDIORESAMPLE_TRUE@check_audioresample = elements/audioresample
 @HAVE_CXX_FALSE@cxx_checks = 
@@ -1420,8 +1455,6 @@
 
 # videoconvert takes too long, so disabled for now
 VALGRIND_TO_FIX = \
-	elements/videoconvert \
-	libs/video \
 	$(check_orc)
 
 noinst_HEADERS = \
@@ -1429,16 +1462,19 @@
 	libs/struct_i386.h     \
 	libs/struct_i386_osx.h \
 	libs/struct_ppc32.h \
+	libs/struct_ppc64.h \
 	libs/struct_x86_64.h
 
 AM_CFLAGS = -I$(top_srcdir)/gst-libs -I$(top_builddir)/gst-libs \
 	$(GST_CFLAGS) $(GST_CHECK_CFLAGS) \
 	-DGST_TEST_FILES_PATH="\"$(TEST_FILES_DIRECTORY)\"" \
+	-DGST_CHECK_TEST_ENVIRONMENT_BEACON="\"GST_PLUGIN_LOADING_WHITELIST\"" \
 	-UG_DISABLE_ASSERT -UG_DISABLE_CAST_CHECKS
 
 AM_CXXFLAGS = -I$(top_srcdir)/gst-libs -I$(top_builddir)/gst-libs \
 	$(GST_CXXFLAGS) $(GST_CHECK_CFLAGS) \
 	-DGST_TEST_FILES_PATH="\"$(TEST_FILES_DIRECTORY)\"" \
+	-DGST_CHECK_TEST_ENVIRONMENT_BEACON="\"GST_PLUGIN_LOADING_WHITELIST\"" \
 	-UG_DISABLE_ASSERT -UG_DISABLE_CAST_CHECKS
 
 LDADD = $(GST_LIBS) $(GST_CHECK_LIBS)
@@ -1463,6 +1499,16 @@
 	$(GST_BASE_LIBS) \
 	$(LDADD)
 
+libs_allocators_CFLAGS = \
+	$(GST_PLUGINS_BASE_CFLAGS) \
+	$(GST_BASE_CFLAGS) \
+	$(AM_CFLAGS)
+
+libs_allocators_LDADD = \
+	$(top_builddir)/gst-libs/gst/allocators/libgstallocators-@GST_API_VERSION@.la \
+	$(GST_BASE_LIBS) \
+	$(LDADD)
+
 libs_audio_CFLAGS = \
 	$(GST_PLUGINS_BASE_CFLAGS) \
 	$(GST_BASE_CFLAGS) \
@@ -1771,6 +1817,11 @@
 
 elements_multisocketsink_CFLAGS = $(GIO_CFLAGS) $(AM_CFLAGS)
 elements_multisocketsink_LDADD = $(GIO_LIBS) $(LDADD)
+@USE_GIO_UNIX_2_0_TRUE@GIO_UNIX_2_0_DEFINED = -DHAVE_GIO_UNIX_2_0=1
+pipelines_tcp_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_NET_CFLAGS) $(GIO_CFLAGS) $(GIO_UNIX_2_0_CFLAGS) $(GIO_UNIX_2_0_DEFINED) $(AM_CFLAGS)
+pipelines_tcp_LDADD = $(GST_PLUGINS_BASE_LIBS) $(GST_NET_LIBS) $(GIO_LIBS) $(LDADD) \
+    $(GIO_UNIX_2_0_LIBS) $(top_builddir)/gst-libs/gst/app/libgstapp-@GST_API_VERSION@.la
+
 pipelines_gio_CFLAGS = $(GIO_CFLAGS) $(AM_CFLAGS)
 pipelines_gio_LDADD = $(GIO_LIBS) $(LDADD)
 pipelines_vorbisenc_CFLAGS = \
@@ -1810,9 +1861,6 @@
 orc_volume_CFLAGS = $(ORC_CFLAGS)
 orc_volume_LDADD = $(ORC_LIBS) -lorc-test-0.4
 nodist_orc_volume_SOURCES = orc/volume.c
-orc_videoscale_CFLAGS = $(ORC_CFLAGS)
-orc_videoscale_LDADD = $(ORC_LIBS) -lorc-test-0.4
-nodist_orc_videoscale_SOURCES = orc/videoscale.c
 orc_videotestsrc_CFLAGS = $(ORC_CFLAGS)
 orc_videotestsrc_LDADD = $(ORC_LIBS) -lorc-test-0.4
 nodist_orc_videotestsrc_SOURCES = orc/videotestsrc.c
@@ -1833,7 +1881,6 @@
 	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu tests/check/Makefile'; \
 	$(am__cd) $(top_srcdir) && \
 	  $(AUTOMAKE) --gnu tests/check/Makefile
-.PRECIOUS: Makefile
 Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
 	@case '$?' in \
 	  *config.status*) \
@@ -1842,7 +1889,7 @@
 	    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/check.mak:
+$(top_srcdir)/common/check.mak $(am__empty):
 
 $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
 	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
@@ -2056,6 +2103,12 @@
 libs/$(DEPDIR)/$(am__dirstamp):
 	@$(MKDIR_P) libs/$(DEPDIR)
 	@: > libs/$(DEPDIR)/$(am__dirstamp)
+libs/libs_allocators-allocators.$(OBJEXT): libs/$(am__dirstamp) \
+	libs/$(DEPDIR)/$(am__dirstamp)
+
+libs/allocators$(EXEEXT): $(libs_allocators_OBJECTS) $(libs_allocators_DEPENDENCIES) $(EXTRA_libs_allocators_DEPENDENCIES) libs/$(am__dirstamp)
+	@rm -f libs/allocators$(EXEEXT)
+	$(AM_V_CCLD)$(libs_allocators_LINK) $(libs_allocators_OBJECTS) $(libs_allocators_LDADD) $(LIBS)
 libs/libs_audio-audio.$(OBJEXT): libs/$(am__dirstamp) \
 	libs/$(DEPDIR)/$(am__dirstamp)
 
@@ -2224,12 +2277,6 @@
 orc/video$(EXEEXT): $(orc_video_OBJECTS) $(orc_video_DEPENDENCIES) $(EXTRA_orc_video_DEPENDENCIES) orc/$(am__dirstamp)
 	@rm -f orc/video$(EXEEXT)
 	$(AM_V_CCLD)$(orc_video_LINK) $(orc_video_OBJECTS) $(orc_video_LDADD) $(LIBS)
-orc/orc_videoscale-videoscale.$(OBJEXT): orc/$(am__dirstamp) \
-	orc/$(DEPDIR)/$(am__dirstamp)
-
-orc/videoscale$(EXEEXT): $(orc_videoscale_OBJECTS) $(orc_videoscale_DEPENDENCIES) $(EXTRA_orc_videoscale_DEPENDENCIES) orc/$(am__dirstamp)
-	@rm -f orc/videoscale$(EXEEXT)
-	$(AM_V_CCLD)$(orc_videoscale_LINK) $(orc_videoscale_OBJECTS) $(orc_videoscale_LDADD) $(LIBS)
 orc/orc_videotestsrc-videotestsrc.$(OBJEXT): orc/$(am__dirstamp) \
 	orc/$(DEPDIR)/$(am__dirstamp)
 
@@ -2278,6 +2325,18 @@
 pipelines/simple-launch-lines$(EXEEXT): $(pipelines_simple_launch_lines_OBJECTS) $(pipelines_simple_launch_lines_DEPENDENCIES) $(EXTRA_pipelines_simple_launch_lines_DEPENDENCIES) pipelines/$(am__dirstamp)
 	@rm -f pipelines/simple-launch-lines$(EXEEXT)
 	$(AM_V_CCLD)$(pipelines_simple_launch_lines_LINK) $(pipelines_simple_launch_lines_OBJECTS) $(pipelines_simple_launch_lines_LDADD) $(LIBS)
+pipelines/streamsynchronizer.$(OBJEXT): pipelines/$(am__dirstamp) \
+	pipelines/$(DEPDIR)/$(am__dirstamp)
+
+pipelines/streamsynchronizer$(EXEEXT): $(pipelines_streamsynchronizer_OBJECTS) $(pipelines_streamsynchronizer_DEPENDENCIES) $(EXTRA_pipelines_streamsynchronizer_DEPENDENCIES) pipelines/$(am__dirstamp)
+	@rm -f pipelines/streamsynchronizer$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(pipelines_streamsynchronizer_OBJECTS) $(pipelines_streamsynchronizer_LDADD) $(LIBS)
+pipelines/pipelines_tcp-tcp.$(OBJEXT): pipelines/$(am__dirstamp) \
+	pipelines/$(DEPDIR)/$(am__dirstamp)
+
+pipelines/tcp$(EXEEXT): $(pipelines_tcp_OBJECTS) $(pipelines_tcp_DEPENDENCIES) $(EXTRA_pipelines_tcp_DEPENDENCIES) pipelines/$(am__dirstamp)
+	@rm -f pipelines/tcp$(EXEEXT)
+	$(AM_V_CCLD)$(pipelines_tcp_LINK) $(pipelines_tcp_OBJECTS) $(pipelines_tcp_LDADD) $(LIBS)
 pipelines/pipelines_theoraenc-theoraenc.$(OBJEXT):  \
 	pipelines/$(am__dirstamp) pipelines/$(DEPDIR)/$(am__dirstamp)
 
@@ -2337,6 +2396,7 @@
 @AMDEP_TRUE@@am__include@ @am__quote@generic/$(DEPDIR)/states.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@gst/$(DEPDIR)/gst_typefindfunctions-typefindfunctions.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@libs/$(DEPDIR)/gstlibscpp.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@libs/$(DEPDIR)/libs_allocators-allocators.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@libs/$(DEPDIR)/libs_audio-audio.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@libs/$(DEPDIR)/libs_audiocdsrc-audiocdsrc.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@libs/$(DEPDIR)/libs_audiodecoder-audiodecoder.Po@am__quote@
@@ -2363,7 +2423,6 @@
 @AMDEP_TRUE@@am__include@ @am__quote@orc/$(DEPDIR)/orc_audio-audio.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@orc/$(DEPDIR)/orc_audioconvert-audioconvert.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@orc/$(DEPDIR)/orc_video-video.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@orc/$(DEPDIR)/orc_videoscale-videoscale.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@orc/$(DEPDIR)/orc_videotestsrc-videotestsrc.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@orc/$(DEPDIR)/orc_volume-volume.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@pipelines/$(DEPDIR)/basetime.Po@am__quote@
@@ -2371,9 +2430,11 @@
 @AMDEP_TRUE@@am__include@ @am__quote@pipelines/$(DEPDIR)/pipelines_gio-gio.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@pipelines/$(DEPDIR)/pipelines_oggmux-oggmux.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@pipelines/$(DEPDIR)/pipelines_simple_launch_lines-simple-launch-lines.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@pipelines/$(DEPDIR)/pipelines_tcp-tcp.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@pipelines/$(DEPDIR)/pipelines_theoraenc-theoraenc.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@pipelines/$(DEPDIR)/pipelines_vorbisdec-vorbisdec.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@pipelines/$(DEPDIR)/pipelines_vorbisenc-vorbisenc.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@pipelines/$(DEPDIR)/streamsynchronizer.Po@am__quote@
 
 .c.o:
 @am__fastdepCC_TRUE@	$(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\
@@ -2679,6 +2740,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) $(gst_typefindfunctions_CFLAGS) $(CFLAGS) -c -o gst/gst_typefindfunctions-typefindfunctions.obj `if test -f 'gst/typefindfunctions.c'; then $(CYGPATH_W) 'gst/typefindfunctions.c'; else $(CYGPATH_W) '$(srcdir)/gst/typefindfunctions.c'; fi`
 
+libs/libs_allocators-allocators.o: libs/allocators.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libs_allocators_CFLAGS) $(CFLAGS) -MT libs/libs_allocators-allocators.o -MD -MP -MF libs/$(DEPDIR)/libs_allocators-allocators.Tpo -c -o libs/libs_allocators-allocators.o `test -f 'libs/allocators.c' || echo '$(srcdir)/'`libs/allocators.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) libs/$(DEPDIR)/libs_allocators-allocators.Tpo libs/$(DEPDIR)/libs_allocators-allocators.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='libs/allocators.c' object='libs/libs_allocators-allocators.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_allocators_CFLAGS) $(CFLAGS) -c -o libs/libs_allocators-allocators.o `test -f 'libs/allocators.c' || echo '$(srcdir)/'`libs/allocators.c
+
+libs/libs_allocators-allocators.obj: libs/allocators.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libs_allocators_CFLAGS) $(CFLAGS) -MT libs/libs_allocators-allocators.obj -MD -MP -MF libs/$(DEPDIR)/libs_allocators-allocators.Tpo -c -o libs/libs_allocators-allocators.obj `if test -f 'libs/allocators.c'; then $(CYGPATH_W) 'libs/allocators.c'; else $(CYGPATH_W) '$(srcdir)/libs/allocators.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) libs/$(DEPDIR)/libs_allocators-allocators.Tpo libs/$(DEPDIR)/libs_allocators-allocators.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='libs/allocators.c' object='libs/libs_allocators-allocators.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_allocators_CFLAGS) $(CFLAGS) -c -o libs/libs_allocators-allocators.obj `if test -f 'libs/allocators.c'; then $(CYGPATH_W) 'libs/allocators.c'; else $(CYGPATH_W) '$(srcdir)/libs/allocators.c'; fi`
+
 libs/libs_audio-audio.o: libs/audio.c
 @am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libs_audio_CFLAGS) $(CFLAGS) -MT libs/libs_audio-audio.o -MD -MP -MF libs/$(DEPDIR)/libs_audio-audio.Tpo -c -o libs/libs_audio-audio.o `test -f 'libs/audio.c' || echo '$(srcdir)/'`libs/audio.c
 @am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) libs/$(DEPDIR)/libs_audio-audio.Tpo libs/$(DEPDIR)/libs_audio-audio.Po
@@ -3043,20 +3118,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) $(orc_video_CFLAGS) $(CFLAGS) -c -o orc/orc_video-video.obj `if test -f 'orc/video.c'; then $(CYGPATH_W) 'orc/video.c'; else $(CYGPATH_W) '$(srcdir)/orc/video.c'; fi`
 
-orc/orc_videoscale-videoscale.o: orc/videoscale.c
-@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(orc_videoscale_CFLAGS) $(CFLAGS) -MT orc/orc_videoscale-videoscale.o -MD -MP -MF orc/$(DEPDIR)/orc_videoscale-videoscale.Tpo -c -o orc/orc_videoscale-videoscale.o `test -f 'orc/videoscale.c' || echo '$(srcdir)/'`orc/videoscale.c
-@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) orc/$(DEPDIR)/orc_videoscale-videoscale.Tpo orc/$(DEPDIR)/orc_videoscale-videoscale.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='orc/videoscale.c' object='orc/orc_videoscale-videoscale.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) $(orc_videoscale_CFLAGS) $(CFLAGS) -c -o orc/orc_videoscale-videoscale.o `test -f 'orc/videoscale.c' || echo '$(srcdir)/'`orc/videoscale.c
-
-orc/orc_videoscale-videoscale.obj: orc/videoscale.c
-@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(orc_videoscale_CFLAGS) $(CFLAGS) -MT orc/orc_videoscale-videoscale.obj -MD -MP -MF orc/$(DEPDIR)/orc_videoscale-videoscale.Tpo -c -o orc/orc_videoscale-videoscale.obj `if test -f 'orc/videoscale.c'; then $(CYGPATH_W) 'orc/videoscale.c'; else $(CYGPATH_W) '$(srcdir)/orc/videoscale.c'; fi`
-@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) orc/$(DEPDIR)/orc_videoscale-videoscale.Tpo orc/$(DEPDIR)/orc_videoscale-videoscale.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='orc/videoscale.c' object='orc/orc_videoscale-videoscale.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) $(orc_videoscale_CFLAGS) $(CFLAGS) -c -o orc/orc_videoscale-videoscale.obj `if test -f 'orc/videoscale.c'; then $(CYGPATH_W) 'orc/videoscale.c'; else $(CYGPATH_W) '$(srcdir)/orc/videoscale.c'; fi`
-
 orc/orc_videotestsrc-videotestsrc.o: orc/videotestsrc.c
 @am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(orc_videotestsrc_CFLAGS) $(CFLAGS) -MT orc/orc_videotestsrc-videotestsrc.o -MD -MP -MF orc/$(DEPDIR)/orc_videotestsrc-videotestsrc.Tpo -c -o orc/orc_videotestsrc-videotestsrc.o `test -f 'orc/videotestsrc.c' || echo '$(srcdir)/'`orc/videotestsrc.c
 @am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) orc/$(DEPDIR)/orc_videotestsrc-videotestsrc.Tpo orc/$(DEPDIR)/orc_videotestsrc-videotestsrc.Po
@@ -3127,6 +3188,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) $(pipelines_simple_launch_lines_CFLAGS) $(CFLAGS) -c -o pipelines/pipelines_simple_launch_lines-simple-launch-lines.obj `if test -f 'pipelines/simple-launch-lines.c'; then $(CYGPATH_W) 'pipelines/simple-launch-lines.c'; else $(CYGPATH_W) '$(srcdir)/pipelines/simple-launch-lines.c'; fi`
 
+pipelines/pipelines_tcp-tcp.o: pipelines/tcp.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pipelines_tcp_CFLAGS) $(CFLAGS) -MT pipelines/pipelines_tcp-tcp.o -MD -MP -MF pipelines/$(DEPDIR)/pipelines_tcp-tcp.Tpo -c -o pipelines/pipelines_tcp-tcp.o `test -f 'pipelines/tcp.c' || echo '$(srcdir)/'`pipelines/tcp.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) pipelines/$(DEPDIR)/pipelines_tcp-tcp.Tpo pipelines/$(DEPDIR)/pipelines_tcp-tcp.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='pipelines/tcp.c' object='pipelines/pipelines_tcp-tcp.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) $(pipelines_tcp_CFLAGS) $(CFLAGS) -c -o pipelines/pipelines_tcp-tcp.o `test -f 'pipelines/tcp.c' || echo '$(srcdir)/'`pipelines/tcp.c
+
+pipelines/pipelines_tcp-tcp.obj: pipelines/tcp.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pipelines_tcp_CFLAGS) $(CFLAGS) -MT pipelines/pipelines_tcp-tcp.obj -MD -MP -MF pipelines/$(DEPDIR)/pipelines_tcp-tcp.Tpo -c -o pipelines/pipelines_tcp-tcp.obj `if test -f 'pipelines/tcp.c'; then $(CYGPATH_W) 'pipelines/tcp.c'; else $(CYGPATH_W) '$(srcdir)/pipelines/tcp.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) pipelines/$(DEPDIR)/pipelines_tcp-tcp.Tpo pipelines/$(DEPDIR)/pipelines_tcp-tcp.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='pipelines/tcp.c' object='pipelines/pipelines_tcp-tcp.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) $(pipelines_tcp_CFLAGS) $(CFLAGS) -c -o pipelines/pipelines_tcp-tcp.obj `if test -f 'pipelines/tcp.c'; then $(CYGPATH_W) 'pipelines/tcp.c'; else $(CYGPATH_W) '$(srcdir)/pipelines/tcp.c'; fi`
+
 pipelines/pipelines_theoraenc-theoraenc.o: pipelines/theoraenc.c
 @am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pipelines_theoraenc_CFLAGS) $(CFLAGS) -MT pipelines/pipelines_theoraenc-theoraenc.o -MD -MP -MF pipelines/$(DEPDIR)/pipelines_theoraenc-theoraenc.Tpo -c -o pipelines/pipelines_theoraenc-theoraenc.o `test -f 'pipelines/theoraenc.c' || echo '$(srcdir)/'`pipelines/theoraenc.c
 @am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) pipelines/$(DEPDIR)/pipelines_theoraenc-theoraenc.Tpo pipelines/$(DEPDIR)/pipelines_theoraenc-theoraenc.Po
@@ -3287,7 +3362,7 @@
 	if test -n "$$am__remaking_logs"; then \
 	  echo "fatal: making $(TEST_SUITE_LOG): possible infinite" \
 	       "recursion detected" >&2; \
-	else \
+	elif test -n "$$redo_logs"; then \
 	  am__remaking_logs=yes $(MAKE) $(AM_MAKEFLAGS) $$redo_logs; \
 	fi; \
 	if $(am__make_dryrun); then :; else \
@@ -3419,6 +3494,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)
+libs/allocators.log: libs/allocators$(EXEEXT)
+	@p='libs/allocators$(EXEEXT)'; \
+	b='libs/allocators'; \
+	$(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/audio.log: libs/audio$(EXEEXT)
 	@p='libs/audio$(EXEEXT)'; \
 	b='libs/audio'; \
@@ -3587,6 +3669,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)
+pipelines/streamsynchronizer.log: pipelines/streamsynchronizer$(EXEEXT)
+	@p='pipelines/streamsynchronizer$(EXEEXT)'; \
+	b='pipelines/streamsynchronizer'; \
+	$(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/adder.log: elements/adder$(EXEEXT)
 	@p='elements/adder$(EXEEXT)'; \
 	b='elements/adder'; \
@@ -3713,6 +3802,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)
+pipelines/tcp.log: pipelines/tcp$(EXEEXT)
+	@p='pipelines/tcp$(EXEEXT)'; \
+	b='pipelines/tcp'; \
+	$(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)
 pipelines/theoraenc.log: pipelines/theoraenc$(EXEEXT)
 	@p='pipelines/theoraenc$(EXEEXT)'; \
 	b='pipelines/theoraenc'; \
@@ -3832,13 +3928,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)
-orc/videoscale.log: orc/videoscale$(EXEEXT)
-	@p='orc/videoscale$(EXEEXT)'; \
-	b='orc/videoscale'; \
-	$(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)
 orc/videotestsrc.log: orc/videotestsrc$(EXEEXT)
 	@p='orc/videotestsrc$(EXEEXT)'; \
 	b='orc/videotestsrc'; \
@@ -4031,6 +4120,8 @@
 	mostlyclean-libtool pdf pdf-am ps ps-am recheck tags tags-am \
 	uninstall uninstall-am
 
+.PRECIOUS: Makefile
+
 
 # keep target around, since it's referenced in the modules' Makefiles
 clean-local-check:
@@ -4047,37 +4138,38 @@
 # run any given test by running make test.check
 # if the test fails, run it again at at least debug level 2
 %.check: %
-	@$(TESTS_ENVIRONMENT)					\
+	@$(AM_TESTS_ENVIRONMENT)					\
 	CK_DEFAULT_TIMEOUT=20					\
 	$* ||							\
-	$(TESTS_ENVIRONMENT)					\
+	$(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: %
-	@$(TESTS_ENVIRONMENT)					\
+	@$(AM_TESTS_ENVIRONMENT)					\
 	CK_DEFAULT_TIMEOUT=20					\
 	$*
 
 # run any given test in a loop
 %.torture: %
 	@for i in `seq 1 $(LOOPS)`; do				\
-	$(TESTS_ENVIRONMENT)					\
+	$(AM_TESTS_ENVIRONMENT)					\
 	CK_DEFAULT_TIMEOUT=20					\
 	$*; done
 
 # run any given test in an infinite loop
 %.forever: %
 	@while true; do						\
-	$(TESTS_ENVIRONMENT)					\
+	$(AM_TESTS_ENVIRONMENT)					\
 	CK_DEFAULT_TIMEOUT=20					\
 	$* || break; done
 
 # valgrind any given test by running make test.valgrind
 %.valgrind: %
-	@$(TESTS_ENVIRONMENT)					\
+	@valgrind_log=$(subst /,-,$*-valgrind.log);		\
+	$(AM_TESTS_ENVIRONMENT)					\
 	CK_DEFAULT_TIMEOUT=360					\
 	G_SLICE=always-malloc					\
 	$(LIBTOOL) --mode=execute				\
@@ -4086,16 +4178,16 @@
 	--tool=memcheck --leak-check=full --trace-children=yes	\
 	--show-possibly-lost=no                                 \
 	--leak-resolution=high --num-callers=20			\
-	./$* 2>&1 | tee valgrind.log
-	@if grep "==" valgrind.log > /dev/null 2>&1; then	\
-	    rm valgrind.log;					\
+	./$* 2>&1 | tee $$valgrind_log ;			\
+	if grep "==" $$valgrind_log > /dev/null 2>&1; then	\
+	    rm $$valgrind_log;					\
 	    exit 1;						\
-	fi
-	@rm valgrind.log
+	fi ;							\
+	rm $$valgrind_log
 
 # valgrind any given test and generate suppressions for it
 %.valgrind.gen-suppressions: %
-	@$(TESTS_ENVIRONMENT)					\
+	@$(AM_TESTS_ENVIRONMENT)					\
 	CK_DEFAULT_TIMEOUT=360					\
 	G_SLICE=always-malloc					\
 	$(LIBTOOL) --mode=execute				\
@@ -4125,7 +4217,7 @@
 
 # gdb any given test by running make test.gdb
 %.gdb: %
-	@$(TESTS_ENVIRONMENT)					\
+	@$(AM_TESTS_ENVIRONMENT)					\
 	CK_FORK=no						\
 	$(LIBTOOL) --mode=execute				\
 	gdb $*
@@ -4178,19 +4270,13 @@
 # valgrind all tests
 valgrind: $(TESTS)
 	@echo "Valgrinding tests ..."
-	@failed=0;							\
+	@failed=0; valgrind_targets="";					\
 	for t in $(filter-out $(VALGRIND_TESTS_DISABLE),$(TESTS)); do	\
-		$(MAKE) $$t.valgrind;					\
-		if test "$$?" -ne 0; then                               \
-			echo "Valgrind error for test $$t";		\
-			failed=`expr $$failed + 1`;			\
-			whicht="$$whicht $$t";				\
-		fi;							\
+	  valgrind_targets="$$valgrind_targets $$t.valgrind";		\
 	done;								\
-	if test "$$failed" -ne 0; then					\
-		echo "$$failed tests had leaks or errors under valgrind:";	\
-		echo "$$whicht";					\
-		false;							\
+	if ! $(MAKE) $$valgrind_targets ; then				\
+	  echo "Some tests had leaks or errors under valgrind";		\
+	  false;							\
 	fi
 
 # valgrind all tests until failure
@@ -4235,11 +4321,14 @@
 	fi
 inspect:
 	@echo "Inspecting features ..."
-	@for e in `$(TESTS_ENVIRONMENT) $(GST_INSPECT) | head -n -2 	\
+	@for e in `$(AM_TESTS_ENVIRONMENT) $(GST_INSPECT) | head -n -2 	\
 	  | cut -d: -f2`;						\
 	  do echo Inspecting $$e;					\
 	     $(GST_INSPECT) $$e > /dev/null 2>&1; done
 
+# build all tests
+build-checks: $(TESTS)
+
 help:
 	@echo
 	@echo "make check                         -- run all checks"
@@ -4262,6 +4351,7 @@
 	@echo "make (dir)/(test).valgrind.gen-suppressions -- generate suppressions"
 	@echo "                                               and save to suppressions.log"
 	@echo "make inspect                       -- inspect all plugin features"
+	@echo "make build-checks                  -- build all checks (but don't run them)"
 	@echo
 	@echo
 	@echo "Additionally, you can use the GST_CHECKS environment variable to"
@@ -4280,7 +4370,7 @@
 distclean-local: distclean-local-orc
 
 $(CHECK_REGISTRY):
-	$(TESTS_ENVIRONMENT)
+	$(AM_TESTS_ENVIRONMENT)
 
 orc/video.c: $(top_srcdir)/gst-libs/gst/video/video-orc.orc
 	$(MKDIR_P) orc/
@@ -4302,10 +4392,6 @@
 	$(MKDIR_P) orc/
 	$(ORCC) --test -o $@ $<
 
-orc/videoscale.c: $(top_srcdir)/gst/videoscale/gstvideoscaleorc.orc
-	$(MKDIR_P) orc/
-	$(ORCC) --test -o $@ $<
-
 orc/videotestsrc.c: $(top_srcdir)/gst/videotestsrc/gstvideotestsrcorc.orc
 	$(MKDIR_P) orc/
 	$(ORCC) --test -o $@ $<
diff --git a/tests/check/elements/adder.c b/tests/check/elements/adder.c
index 315bef4..3308a8e 100644
--- a/tests/check/elements/adder.c
+++ b/tests/check/elements/adder.c
@@ -33,6 +33,7 @@
 #include <gst/check/gstcheck.h>
 #include <gst/check/gstconsistencychecker.h>
 #include <gst/base/gstbasesrc.h>
+#include <gst/audio/audio.h>
 
 static GMainLoop *main_loop;
 
@@ -85,7 +86,7 @@
   GstPad *pad;
 
   filter_caps = gst_caps_new_simple ("audio/x-raw",
-      "format", G_TYPE_STRING, "F32LE",
+      "format", G_TYPE_STRING, GST_AUDIO_NE (F32),
       "layout", G_TYPE_STRING, "interleaved",
       "rate", G_TYPE_INT, 44100, "channels", G_TYPE_INT, 1, NULL);
 
@@ -417,7 +418,7 @@
   /* cleanup */
   g_main_loop_unref (main_loop);
   gst_consistency_checker_free (consist);
-  gst_event_ref (play_seek_event);
+  gst_event_unref (play_seek_event);
   gst_bus_remove_signal_watch (bus);
   gst_object_unref (bus);
   gst_object_unref (bin);
@@ -523,7 +524,7 @@
 
   /* cleanup */
   g_main_loop_unref (main_loop);
-  gst_event_ref (play_seek_event);
+  gst_event_unref (play_seek_event);
   gst_consistency_checker_free (consist);
   gst_bus_remove_signal_watch (bus);
   gst_object_unref (bus);
@@ -690,6 +691,7 @@
     g_main_loop_unref (main_loop);
   if (play_seek_event)
     gst_event_unref (play_seek_event);
+  gst_bus_remove_signal_watch (bus);
   gst_object_unref (bus);
   gst_object_unref (bin);
 }
diff --git a/tests/check/elements/appsink.c b/tests/check/elements/appsink.c
index 519525f..1c9feed 100644
--- a/tests/check/elements/appsink.c
+++ b/tests/check/elements/appsink.c
@@ -313,6 +313,41 @@
 
 GST_END_TEST;
 
+GST_START_TEST (test_segment)
+{
+  GstElement *sink;
+  GstSegment segment;
+  GstBuffer *buffer;
+  GstSample *pulled_preroll;
+  GstSample *pulled_sample;
+
+  sink = setup_appsink ();
+
+  gst_segment_init (&segment, GST_FORMAT_TIME);
+  segment.start = 2 * GST_SECOND;
+  fail_unless (gst_pad_push_event (mysrcpad, gst_event_new_segment (&segment)));
+
+  ASSERT_SET_STATE (sink, GST_STATE_PLAYING, GST_STATE_CHANGE_ASYNC);
+
+  buffer = gst_buffer_new_and_alloc (4);
+  fail_unless (gst_pad_push (mysrcpad, buffer) == GST_FLOW_OK);
+
+  g_signal_emit_by_name (sink, "pull-preroll", &pulled_preroll);
+  fail_unless (gst_segment_is_equal (&segment,
+          gst_sample_get_segment (pulled_preroll)));
+  gst_sample_unref (pulled_preroll);
+
+  g_signal_emit_by_name (sink, "pull-sample", &pulled_sample);
+  fail_unless (gst_segment_is_equal (&segment,
+          gst_sample_get_segment (pulled_sample)));
+  gst_sample_unref (pulled_sample);
+
+  ASSERT_SET_STATE (sink, GST_STATE_NULL, GST_STATE_CHANGE_SUCCESS);
+  cleanup_appsink (sink);
+}
+
+GST_END_TEST;
+
 static Suite *
 appsink_suite (void)
 {
@@ -326,6 +361,7 @@
   tcase_add_test (tc_chain, test_notify1);
   tcase_add_test (tc_chain, test_buffer_list_fallback);
   tcase_add_test (tc_chain, test_buffer_list_fallback_signal);
+  tcase_add_test (tc_chain, test_segment);
 
   return s;
 }
diff --git a/tests/check/elements/appsrc.c b/tests/check/elements/appsrc.c
index c31ed4c..f7f1a13 100644
--- a/tests/check/elements/appsrc.c
+++ b/tests/check/elements/appsrc.c
@@ -18,10 +18,20 @@
  * Boston, MA 02110-1301, USA.
  */
 
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
 #include <gst/check/gstcheck.h>
 #include <gst/app/gstappsrc.h>
 #include <gst/app/gstappsink.h>
 
+#ifdef HAVE_VALGRIND
+#include <valgrind/valgrind.h>
+#else
+#define RUNNING_ON_VALGRIND FALSE
+#endif
+
 #define SAMPLE_CAPS "application/x-gst-check-test"
 
 static GstPad *mysinkpad;
@@ -115,7 +125,6 @@
 
 typedef struct
 {
-  GMainLoop *loop;
   GstElement *source;
   GstElement *sink;
 } ProgramData;
@@ -137,63 +146,6 @@
   return GST_FLOW_OK;
 }
 
-/* called when we get a GstMessage from the source pipeline when we get EOS, we
- * notify the appsrc of it. */
-static gboolean
-on_source_message (GstBus * bus, GstMessage * message, ProgramData * data)
-{
-  GstElement *source;
-  gboolean ret = TRUE;
-
-  switch (GST_MESSAGE_TYPE (message)) {
-    case GST_MESSAGE_EOS:
-      source = gst_bin_get_by_name (GST_BIN (data->sink), "testsource");
-      fail_unless (gst_app_src_end_of_stream (GST_APP_SRC (source)) ==
-          GST_FLOW_OK);
-      break;
-    case GST_MESSAGE_ERROR:
-      g_main_loop_quit (data->loop);
-      ret = FALSE;
-      break;
-    default:
-      break;
-  }
-  return ret;
-}
-
-static gboolean
-on_sink_message (GstBus * bus, GstMessage * message, ProgramData * data)
-{
-  gboolean ret = TRUE;
-
-  switch (GST_MESSAGE_TYPE (message)) {
-    case GST_MESSAGE_EOS:
-      g_main_loop_quit (data->loop);
-      ret = FALSE;
-      break;
-    case GST_MESSAGE_ERROR:
-      ASSERT_SET_STATE (data->sink, GST_STATE_NULL, GST_STATE_CHANGE_SUCCESS);
-      ASSERT_SET_STATE (data->source, GST_STATE_NULL, GST_STATE_CHANGE_SUCCESS);
-      g_main_loop_quit (data->loop);
-      ret = FALSE;
-      break;
-    default:
-      break;
-  }
-  return ret;
-}
-
-static gboolean
-error_timeout (ProgramData * data)
-{
-  GstBus *bus;
-  bus = gst_element_get_bus (data->sink);
-  gst_bus_post (bus, gst_message_new_error (GST_OBJECT (data->sink), NULL,
-          "test error"));
-  gst_object_unref (bus);
-  return FALSE;
-}
-
 /*
  * appsink => appsrc pipelines executed 100 times: 
  * - appsink pipeline has sync=false
@@ -207,61 +159,260 @@
 
 GST_START_TEST (test_appsrc_block_deadlock)
 {
-  int i = 0;
-  int num_iteration = 100;
-  while (i < num_iteration) {
-    ProgramData *data = NULL;
-    GstBus *bus = NULL;
-    GstElement *testsink = NULL;
+  GstElement *testsink;
+  ProgramData *data;
 
-    data = g_new0 (ProgramData, 1);
+  GST_INFO ("iteration %d", __i__);
 
-    data->loop = g_main_loop_new (NULL, FALSE);
+  data = g_new0 (ProgramData, 1);
 
-    data->source =
-        gst_parse_launch ("videotestsrc ! appsink sync=false name=testsink",
-        NULL);
+  data->source =
+      gst_parse_launch ("videotestsrc ! video/x-raw,width=16,height=16 ! "
+      "appsink sync=false name=testsink", NULL);
 
-    fail_unless (data->source != NULL);
+  fail_unless (data->source != NULL);
 
-    bus = gst_element_get_bus (data->source);
-    gst_bus_add_watch (bus, (GstBusFunc) on_source_message, data);
-    gst_object_unref (bus);
+  app_callbacks.new_sample = on_new_sample_from_source;
+  testsink = gst_bin_get_by_name (GST_BIN (data->source), "testsink");
+  gst_app_sink_set_callbacks (GST_APP_SINK_CAST (testsink), &app_callbacks,
+      data, NULL);
 
-    app_callbacks.new_sample = on_new_sample_from_source;
-    testsink = gst_bin_get_by_name (GST_BIN (data->source), "testsink");
-    gst_app_sink_set_callbacks (GST_APP_SINK_CAST (testsink), &app_callbacks,
-        data, NULL);
+  gst_object_unref (testsink);
 
-    gst_object_unref (testsink);
+  data->sink =
+      gst_parse_launch
+      ("appsrc name=testsource block=1 max-bytes=1000 is-live=true ! "
+      "fakesink sync=true", NULL);
 
-    data->sink =
-        gst_parse_launch
-        ("appsrc name=testsource block=1 max-bytes=1000 is-live=true ! fakesink sync=true",
-        NULL);
+  fail_unless (data->sink != NULL);
 
-    fail_unless (data->sink != NULL);
+  ASSERT_SET_STATE (data->sink, GST_STATE_PLAYING, GST_STATE_CHANGE_ASYNC);
+  ASSERT_SET_STATE (data->source, GST_STATE_PLAYING, GST_STATE_CHANGE_ASYNC);
 
-    bus = gst_element_get_bus (data->sink);
-    gst_bus_add_watch (bus, (GstBusFunc) on_sink_message, data);
-    gst_object_unref (bus);
+  /* wait for preroll */
+  gst_element_get_state (data->source, NULL, NULL, GST_CLOCK_TIME_NONE);
+  gst_element_get_state (data->sink, NULL, NULL, GST_CLOCK_TIME_NONE);
 
-    g_timeout_add (150, (GSourceFunc) error_timeout, data);
+  g_usleep (50 * (G_USEC_PER_SEC / 1000));
 
-    ASSERT_SET_STATE (data->sink, GST_STATE_PLAYING, GST_STATE_CHANGE_ASYNC);
-    ASSERT_SET_STATE (data->source, GST_STATE_PLAYING, GST_STATE_CHANGE_ASYNC);
+  ASSERT_SET_STATE (data->sink, GST_STATE_NULL, GST_STATE_CHANGE_SUCCESS);
+  ASSERT_SET_STATE (data->source, GST_STATE_NULL, GST_STATE_CHANGE_SUCCESS);
 
-    g_main_loop_run (data->loop);
+  gst_object_unref (data->source);
+  gst_object_unref (data->sink);
+  g_free (data);
+}
 
-    ASSERT_SET_STATE (data->sink, GST_STATE_NULL, GST_STATE_CHANGE_SUCCESS);
-    ASSERT_SET_STATE (data->source, GST_STATE_NULL, GST_STATE_CHANGE_SUCCESS);
+GST_END_TEST;
 
-    gst_object_unref (data->source);
-    gst_object_unref (data->sink);
-    g_main_loop_unref (data->loop);
-    g_free (data);
-    i++;
-    GST_INFO ("appsrc deadlock test iteration number %d/%d", i, num_iteration);
+typedef struct
+{
+  GstCaps *caps1;
+  GstCaps *caps2;
+  GstCaps *expected_caps;
+} Helper;
+
+static void
+caps_notify_cb (GObject * obj, GObject * child, GParamSpec * pspec, Helper * h)
+{
+  GstCaps *caps = NULL;
+
+  g_object_get (child, "caps", &caps, NULL);
+  if (caps) {
+    GST_LOG_OBJECT (child, "expected caps: %" GST_PTR_FORMAT, h->expected_caps);
+    GST_LOG_OBJECT (child, "caps set to  : %" GST_PTR_FORMAT, caps);
+    fail_unless (gst_caps_is_equal (caps, h->expected_caps));
+    gst_caps_unref (caps);
+  }
+}
+
+static void
+handoff_cb (GstElement * sink, GstBuffer * buf, GstPad * pad, Helper * h)
+{
+  /* have our buffer, now the caps should change */
+  h->expected_caps = h->caps2;
+  GST_INFO ("got buffer, expect caps %" GST_PTR_FORMAT " next", h->caps2);
+}
+
+/* Make sure that if set_caps() is called twice before the source is started,
+ * the caps are just replaced and not put into the internal queue */
+GST_START_TEST (test_appsrc_set_caps_twice)
+{
+  GstElement *pipe, *src, *sink;
+  GstMessage *msg;
+  GstCaps *caps;
+  Helper h;
+
+  h.caps1 = gst_caps_new_simple ("foo/bar", "bleh", G_TYPE_INT, 2, NULL);
+  h.caps2 = gst_caps_new_simple ("bar/foo", "xyz", G_TYPE_INT, 3, NULL);
+
+  pipe = gst_pipeline_new ("pipeline");
+  src = gst_element_factory_make ("appsrc", NULL);
+  sink = gst_element_factory_make ("fakesink", NULL);
+  gst_bin_add_many (GST_BIN (pipe), src, sink, NULL);
+  gst_element_link (src, sink);
+
+  g_signal_connect (pipe, "deep-notify::caps", G_CALLBACK (caps_notify_cb), &h);
+
+  g_object_set (sink, "signal-handoffs", TRUE, NULL);
+  g_signal_connect (sink, "handoff", G_CALLBACK (handoff_cb), &h);
+
+  /* case 1: set caps to caps1, then set again to caps2, all this before
+   * appsrc is started and before any buffers are in the queue yet. We don't
+   * want to see any trace of caps1 during negotiation in this case. */
+  gst_app_src_set_caps (GST_APP_SRC (src), h.caps1);
+  caps = gst_app_src_get_caps (GST_APP_SRC (src));
+  fail_unless (gst_caps_is_equal (caps, h.caps1));
+  gst_caps_unref (caps);
+
+  gst_app_src_set_caps (GST_APP_SRC (src), h.caps2);
+  caps = gst_app_src_get_caps (GST_APP_SRC (src));
+  fail_unless (gst_caps_is_equal (caps, h.caps2));
+  gst_caps_unref (caps);
+
+  gst_app_src_end_of_stream (GST_APP_SRC (src));
+
+  h.expected_caps = h.caps2;
+
+  gst_element_set_state (pipe, GST_STATE_PLAYING);
+
+  msg =
+      gst_bus_timed_pop_filtered (GST_ELEMENT_BUS (pipe), -1, GST_MESSAGE_EOS);
+  gst_message_unref (msg);
+
+  gst_element_set_state (pipe, GST_STATE_NULL);
+  gst_object_unref (pipe);
+
+  GST_INFO ("Case #2");
+
+  /* case 2: set caps to caps1, then push a buffer and set to caps2, again
+   * before appsrc is started. In this case appsrc should negotiate to caps1
+   * first, and then caps2 after pushing the first buffer. */
+
+  /* We're creating a new pipeline/appsrc here because appsrc's behaviour
+   * change slightly after setting it to NULL/READY and then re-using it */
+  pipe = gst_pipeline_new ("pipeline");
+  src = gst_element_factory_make ("appsrc", NULL);
+  sink = gst_element_factory_make ("fakesink", NULL);
+  gst_bin_add_many (GST_BIN (pipe), src, sink, NULL);
+  gst_element_link (src, sink);
+
+  g_signal_connect (pipe, "deep-notify::caps", G_CALLBACK (caps_notify_cb), &h);
+
+  g_object_set (sink, "signal-handoffs", TRUE, NULL);
+  g_signal_connect (sink, "handoff", G_CALLBACK (handoff_cb), &h);
+
+  gst_app_src_set_caps (GST_APP_SRC (src), h.caps1);
+  caps = gst_app_src_get_caps (GST_APP_SRC (src));
+  fail_unless (gst_caps_is_equal (caps, h.caps1));
+  gst_caps_unref (caps);
+
+  /* first caps1, then buffer, then later caps2 */
+  h.expected_caps = h.caps1;
+
+  gst_element_set_state (pipe, GST_STATE_PLAYING);
+
+  gst_app_src_push_buffer (GST_APP_SRC (src), gst_buffer_new ());
+
+  gst_app_src_set_caps (GST_APP_SRC (src), h.caps2);
+  caps = gst_app_src_get_caps (GST_APP_SRC (src));
+  fail_unless (gst_caps_is_equal (caps, h.caps2));
+  gst_caps_unref (caps);
+
+  gst_app_src_end_of_stream (GST_APP_SRC (src));
+
+  msg =
+      gst_bus_timed_pop_filtered (GST_ELEMENT_BUS (pipe), -1, GST_MESSAGE_EOS);
+  gst_message_unref (msg);
+
+  gst_element_set_state (pipe, GST_STATE_NULL);
+  gst_object_unref (pipe);
+
+  gst_caps_unref (h.caps2);
+  gst_caps_unref (h.caps1);
+}
+
+GST_END_TEST;
+
+static gboolean
+seek_cb (GstAppSrc * src, guint64 offset, gpointer data)
+{
+  /* Return fake true */
+  return TRUE;
+}
+
+static void
+caps_cb (GObject * obj, GObject * child, GParamSpec * pspec,
+    GstCaps ** received_caps)
+{
+  GstCaps *caps = NULL;
+
+  /* Collect the caps */
+  g_object_get (child, "caps", &caps, NULL);
+  if (caps) {
+    GST_LOG_OBJECT (child, "caps set to  : %" GST_PTR_FORMAT, caps);
+    gst_caps_replace (received_caps, caps);
+    gst_caps_unref (caps);
+  }
+}
+
+GST_START_TEST (test_appsrc_caps_in_push_modes)
+{
+  GstElement *pipe, *src, *sink;
+  GstMessage *msg;
+  GstCaps *caps, *caps1, *received_caps;
+  gint i;
+  GstMessageType msg_types;
+  GstAppSrcCallbacks cb = { 0 };
+  GstAppStreamType modes[] = { GST_APP_STREAM_TYPE_STREAM,
+    GST_APP_STREAM_TYPE_SEEKABLE,
+    GST_APP_STREAM_TYPE_RANDOM_ACCESS
+  };
+
+  for (i = 0; i < sizeof (modes) / sizeof (modes[0]); i++) {
+    GST_INFO ("checking mode %d", modes[i]);
+    caps1 = gst_caps_new_simple ("foo/bar", "bleh", G_TYPE_INT, 2, NULL);
+    received_caps = NULL;
+
+    pipe = gst_pipeline_new ("pipeline");
+    src = gst_element_factory_make ("appsrc", NULL);
+    sink = gst_element_factory_make ("fakesink", NULL);
+    gst_bin_add_many (GST_BIN (pipe), src, sink, NULL);
+    gst_element_link (src, sink);
+
+    g_object_set (G_OBJECT (src), "stream-type", modes[i], NULL);
+    if (modes[i] != GST_APP_STREAM_TYPE_STREAM) {
+      cb.seek_data = seek_cb;
+      gst_app_src_set_callbacks (GST_APP_SRC (src), &cb, NULL, NULL);
+    }
+    g_signal_connect (pipe, "deep-notify::caps", G_CALLBACK (caps_cb),
+        &received_caps);
+
+    gst_app_src_set_caps (GST_APP_SRC (src), caps1);
+    caps = gst_app_src_get_caps (GST_APP_SRC (src));
+    fail_unless (gst_caps_is_equal (caps, caps1));
+    gst_caps_unref (caps);
+
+    gst_element_set_state (pipe, GST_STATE_PLAYING);
+
+    if (modes[i] != GST_APP_STREAM_TYPE_RANDOM_ACCESS) {
+      gst_app_src_end_of_stream (GST_APP_SRC (src));
+      msg_types = GST_MESSAGE_EOS;
+    } else {
+      gst_app_src_push_buffer (GST_APP_SRC (src), gst_buffer_new ());
+      msg_types = GST_MESSAGE_ASYNC_DONE;
+    }
+
+    msg = gst_bus_timed_pop_filtered (GST_ELEMENT_BUS (pipe), -1, msg_types);
+    gst_message_unref (msg);
+    /* The collected caps should match with one that was pushed */
+    fail_unless (received_caps && gst_caps_is_equal (received_caps, caps1));
+
+    gst_element_set_state (pipe, GST_STATE_NULL);
+    gst_object_unref (pipe);
+    gst_caps_unref (caps1);
+    if (received_caps)
+      gst_caps_unref (received_caps);
   }
 }
 
@@ -274,9 +425,14 @@
   TCase *tc_chain = tcase_create ("general");
 
   tcase_add_test (tc_chain, test_appsrc_non_null_caps);
-  tcase_add_test (tc_chain, test_appsrc_block_deadlock);
+  tcase_add_test (tc_chain, test_appsrc_set_caps_twice);
+  tcase_add_test (tc_chain, test_appsrc_caps_in_push_modes);
 
-  tcase_set_timeout (tc_chain, 20);
+  if (RUNNING_ON_VALGRIND)
+    tcase_add_loop_test (tc_chain, test_appsrc_block_deadlock, 0, 5);
+  else
+    tcase_add_loop_test (tc_chain, test_appsrc_block_deadlock, 0, 100);
+
   suite_add_tcase (s, tc_chain);
 
   return s;
diff --git a/tests/check/elements/encodebin.c b/tests/check/elements/encodebin.c
index 3fdb586..0d9fe68 100644
--- a/tests/check/elements/encodebin.c
+++ b/tests/check/elements/encodebin.c
@@ -104,13 +104,19 @@
   return prof;
 }
 
+static GstCaps *
+create_unsupported_caps (void)
+{
+  return gst_caps_new_empty_simple ("audio/x-bogus");
+}
+
 static GstEncodingProfile *
 create_unsupported_profile (void)
 {
   GstEncodingProfile *prof;
   GstCaps *caps;
 
-  caps = gst_caps_new_empty_simple ("audio/x-bogus");
+  caps = create_unsupported_caps ();
   prof =
       (GstEncodingProfile *) gst_encoding_audio_profile_new (caps, NULL, NULL,
       0);
@@ -1042,14 +1048,28 @@
   GstBus *bus = gst_pipeline_get_bus ((GstPipeline *) pipeline);
   GstElement *ebin = gst_element_factory_make ("encodebin", NULL);
   GstMessage *message;
+  GstElement *audiotestsrc;
+  GstPad *sinkpad, *srcpad;
+
+  audiotestsrc = gst_element_factory_make ("audiotestsrc", NULL);
+  g_object_set (audiotestsrc, "num-buffers", 1, NULL);
+  gst_bin_add ((GstBin *) pipeline, audiotestsrc);
 
   /* first add to bin, then set profile */
   gst_bin_add ((GstBin *) pipeline, ebin);
   set_profile (ebin, create_unsupported_profile ());
 
-  gst_element_set_state (pipeline, GST_STATE_READY);
+  srcpad = gst_element_get_static_pad (audiotestsrc, "src");
+  sinkpad = gst_element_get_static_pad (ebin, "audio_0");
+  fail_unless (gst_pad_link (srcpad, sinkpad) == GST_PAD_LINK_OK);
+  gst_object_unref (srcpad);
+  gst_object_unref (sinkpad);
 
-  message = gst_bus_pop_filtered (bus, GST_MESSAGE_ELEMENT);
+  gst_element_set_state (pipeline, GST_STATE_PLAYING);
+
+  message =
+      gst_bus_timed_pop_filtered (bus, GST_CLOCK_TIME_NONE,
+      GST_MESSAGE_ELEMENT);
   fail_if (message == NULL);
   fail_if (!gst_is_missing_plugin_message (message));
   gst_message_unref (message);
diff --git a/tests/check/elements/multisocketsink.c b/tests/check/elements/multisocketsink.c
index a62e8d3..d3a9a65 100644
--- a/tests/check/elements/multisocketsink.c
+++ b/tests/check/elements/multisocketsink.c
@@ -124,6 +124,39 @@
   return TRUE;
 }
 
+static gboolean
+read_handle_n_bytes_exactly (GSocket * srchandle, void *buf, size_t count)
+{
+  gssize total_read, read;
+  gchar *data = buf;
+
+  GST_DEBUG ("reading exactly %" G_GSIZE_FORMAT " bytes", count);
+
+  /* loop to make sure the sink has had a chance to write out all data.
+   * Depending on system load it might be written in multiple write calls,
+   * so it's possible our first read() just returns parts of the data. */
+  total_read = 0;
+  do {
+    read =
+        g_socket_receive (srchandle, data + total_read, count - total_read,
+        NULL, NULL);
+
+    if (read == 0)              /* socket was closed */
+      return FALSE;
+
+    if (read < 0)
+      fail ("read error");
+
+    total_read += read;
+
+    GST_INFO ("read %" G_GSSIZE_FORMAT " bytes, total now %" G_GSSIZE_FORMAT,
+        read, total_read);
+  }
+  while (total_read < count);
+
+  return TRUE;
+}
+
 static ssize_t
 read_handle (GSocket * srchandle, void *buf, size_t count)
 {
@@ -161,7 +194,7 @@
   GstElement *sink;
   GstBuffer *buffer;
   GstCaps *caps;
-  gchar data[4];
+  gchar data[9];
   GSocket *sinksocket, *srcsocket;
 
   sink = setup_multisocketsink ();
@@ -180,12 +213,15 @@
   gst_check_setup_events (mysrcpad, sink, caps, GST_FORMAT_BYTES);
   ASSERT_CAPS_REFCOUNT (caps, "caps", 3);
   gst_buffer_fill (buffer, 0, "dead", 4);
+  gst_buffer_append_memory (buffer,
+      gst_memory_new_wrapped (GST_MEMORY_FLAG_READONLY, (gpointer) " good", 5,
+          0, 5, NULL, NULL));
   fail_unless (gst_pad_push (mysrcpad, buffer) == GST_FLOW_OK);
 
   GST_DEBUG ("reading");
-  fail_if (read_handle (srcsocket, data, 4) < 4);
-  fail_unless (strncmp (data, "dead", 4) == 0);
-  wait_bytes_served (sink, 4);
+  fail_if (read_handle (srcsocket, data, 9) < 9);
+  fail_unless (strncmp (data, "dead good", 9) == 0);
+  wait_bytes_served (sink, 9);
 
   GST_DEBUG ("cleaning up multisocketsink");
   ASSERT_SET_STATE (sink, GST_STATE_NULL, GST_STATE_CHANGE_SUCCESS);
@@ -200,6 +236,77 @@
 
 GST_END_TEST;
 
+typedef struct
+{
+  GSocket *sinksocket, *srcsocket;
+  GstElement *sink;
+} TestSinkAndSocket;
+
+static void
+setup_sink_with_socket (TestSinkAndSocket * tsas)
+{
+  GstCaps *caps = NULL;
+
+  tsas->sink = setup_multisocketsink ();
+  fail_unless (setup_handles (&tsas->sinksocket, &tsas->srcsocket));
+
+  ASSERT_SET_STATE (tsas->sink, GST_STATE_PLAYING, GST_STATE_CHANGE_ASYNC);
+
+  /* add the client */
+  g_signal_emit_by_name (tsas->sink, "add", tsas->sinksocket);
+
+  caps = gst_caps_from_string ("application/x-gst-check");
+  gst_check_setup_events (mysrcpad, tsas->sink, caps, GST_FORMAT_BYTES);
+  gst_caps_unref (caps);
+}
+
+static void
+teardown_sink_with_socket (TestSinkAndSocket * tsas)
+{
+  if (tsas->sink != NULL) {
+    ASSERT_SET_STATE (tsas->sink, GST_STATE_NULL, GST_STATE_CHANGE_SUCCESS);
+    cleanup_multisocketsink (tsas->sink);
+    tsas->sink = 0;
+  }
+  if (tsas->sinksocket != NULL) {
+    g_object_unref (tsas->sinksocket);
+    tsas->sinksocket = 0;
+  }
+  if (tsas->srcsocket != NULL) {
+    g_object_unref (tsas->srcsocket);
+    tsas->srcsocket = 0;
+  }
+}
+
+GST_START_TEST (test_sending_buffers_with_9_gstmemories)
+{
+  TestSinkAndSocket tsas = { 0 };
+  GstBuffer *buffer;
+  int i;
+  const char *numbers[9] = { "one", "two", "three", "four", "five", "six",
+    "seven", "eight", "nine"
+  };
+  const char numbers_concat[] = "onetwothreefourfivesixseveneightnine";
+  gchar data[sizeof (numbers_concat)];
+  int len = sizeof (numbers_concat) - 1;
+
+  setup_sink_with_socket (&tsas);
+
+  buffer = gst_buffer_new ();
+  for (i = 0; i < G_N_ELEMENTS (numbers); i++)
+    gst_buffer_append_memory (buffer,
+        gst_memory_new_wrapped (GST_MEMORY_FLAG_READONLY, (gpointer) numbers[i],
+            strlen (numbers[i]), 0, strlen (numbers[i]), NULL, NULL));
+  fail_unless (gst_pad_push (mysrcpad, buffer) == GST_FLOW_OK);
+
+  fail_unless (read_handle_n_bytes_exactly (tsas.srcsocket, data, len));
+  fail_unless (strncmp (data, numbers_concat, len) == 0);
+
+  teardown_sink_with_socket (&tsas);
+}
+
+GST_END_TEST;
+
 /* from the given two data buffers, create two streamheader buffers and
  * some caps that match it, and store them in the given pointers
  * returns  one ref to each of the buffers and the caps */
@@ -874,6 +981,7 @@
   suite_add_tcase (s, tc_chain);
   tcase_add_test (tc_chain, test_no_clients);
   tcase_add_test (tc_chain, test_add_client);
+  tcase_add_test (tc_chain, test_sending_buffers_with_9_gstmemories);
   tcase_add_test (tc_chain, test_streamheader);
   tcase_add_test (tc_chain, test_change_streamheader);
   tcase_add_test (tc_chain, test_burst_client_bytes);
diff --git a/tests/check/elements/playbin-complex.c b/tests/check/elements/playbin-complex.c
index 706cb47..377bd83 100644
--- a/tests/check/elements/playbin-complex.c
+++ b/tests/check/elements/playbin-complex.c
@@ -26,7 +26,7 @@
 #include <gst/check/gstcheck.h>
 #include <gst/base/gstpushsrc.h>
 #include <gst/base/gstbasesink.h>
-#include <gst/audio/streamvolume.h>
+#include <gst/audio/audio.h>
 #include <gst/video/gstvideodecoder.h>
 
 #ifndef GST_DISABLE_REGISTRY
@@ -413,7 +413,7 @@
         " stream0 = (string)" STREAM_TYPES " ,"
         " stream1 = (string)" STREAM_TYPES)
     );
-static GstStaticPadTemplate cd_src_templ = GST_STATIC_PAD_TEMPLATE ("src_%d",
+static GstStaticPadTemplate cd_src_templ = GST_STATIC_PAD_TEMPLATE ("src_%u",
     GST_PAD_SRC, GST_PAD_SOMETIMES,
     GST_STATIC_CAPS ("audio/x-raw; audio/x-compressed; "
         "video/x-raw; video/x-compressed")
@@ -500,7 +500,7 @@
 
       templ =
           gst_element_class_get_pad_template (GST_ELEMENT_GET_CLASS (demux),
-          "src_%d");
+          "src_%u");
       if (pad == &demux->srcpad0)
         *pad = gst_pad_new_from_template (templ, "src_0");
       else
@@ -521,7 +521,7 @@
       caps = gst_caps_new_empty_simple ("video/x-compressed");
     } else if (g_str_equal (streaminfo, "raw-audio")) {
       caps = gst_caps_new_simple ("audio/x-raw",
-          "format", G_TYPE_STRING, "S16LE",
+          "format", G_TYPE_STRING, GST_AUDIO_NE (S16),
           "layout", G_TYPE_STRING, "interleaved",
           "rate", G_TYPE_INT, 48000, "channels", G_TYPE_INT, 2, NULL);
     } else {
@@ -1222,7 +1222,7 @@
   playbin =
       create_playbin
       ("caps:audio/x-raw,"
-      " format=(string)S16LE, " "layout=(string)interleaved, "
+      " format=(string)" GST_AUDIO_NE (S16) ", " "layout=(string)interleaved, "
       " rate=(int)48000, " " channels=(int)2", TRUE);
 
   fail_unless_equals_int (gst_element_set_state (playbin, GST_STATE_READY),
diff --git a/tests/check/elements/playbin.c b/tests/check/elements/playbin.c
index 369562a..cdc737e 100644
--- a/tests/check/elements/playbin.c
+++ b/tests/check/elements/playbin.c
@@ -333,8 +333,7 @@
 
   fail_unless_equals_int (gst_element_set_state (playbin, GST_STATE_READY),
       GST_STATE_CHANGE_SUCCESS);
-  fail_unless_equals_int (gst_element_set_state (playbin, GST_STATE_PAUSED),
-      GST_STATE_CHANGE_FAILURE);
+  gst_element_set_state (playbin, GST_STATE_PAUSED);
 
   /* there should be at least a missing-plugin message on the bus now and an
    * error message; the missing-plugin message should be first */
diff --git a/tests/check/elements/videorate.c b/tests/check/elements/videorate.c
index f8a9e08..5f1140d 100644
--- a/tests/check/elements/videorate.c
+++ b/tests/check/elements/videorate.c
@@ -40,6 +40,10 @@
     "framerate = (fraction) 25/1 , "    \
     "format = (string) I420"
 
+#define VIDEO_CAPS_FORCE_VARIABLE_FRAMERATE_STRING \
+    "video/x-raw, "                 \
+    "framerate = (fraction) 0/1"
+
 #define VIDEO_CAPS_NO_FRAMERATE_STRING  \
     "video/x-raw, "                 \
     "width = (int) 320, "               \
@@ -77,6 +81,13 @@
     GST_STATIC_CAPS (VIDEO_CAPS_TEMPLATE_STRING)
     );
 
+static GstStaticPadTemplate force_variable_rate_template =
+GST_STATIC_PAD_TEMPLATE ("sink",
+    GST_PAD_SINK,
+    GST_PAD_ALWAYS,
+    GST_STATIC_CAPS (VIDEO_CAPS_FORCE_VARIABLE_FRAMERATE_STRING)
+    );
+
 static void
 assert_videorate_stats (GstElement * videorate, const gchar * reason,
     guint64 xin, guint64 xout, guint64 xdropped, guint64 xduplicated)
@@ -1015,8 +1026,10 @@
   videorate = setup_videorate_full (&srctemplate, &sinktemplate);
 
   caps = gst_caps_from_string (test->caps);
+
   g_object_set_data_full (G_OBJECT (mysrcpad), "caps",
       gst_caps_ref (caps), (GDestroyNotify) gst_caps_unref);
+
   g_object_set_data_full (G_OBJECT (mysinkpad), "caps",
       gst_caps_ref (caps), (GDestroyNotify) gst_caps_unref);
   gst_caps_unref (caps);
@@ -1036,6 +1049,120 @@
 
 GST_END_TEST;
 
+static void
+videorate_send_buffers (GstElement * videorate,
+    const gchar * pre_push_caps, const gchar * post_push_caps)
+{
+  GstCaps *caps, *expected_caps;
+  GstBuffer *first;
+  GstBuffer *second;
+  GstBuffer *third;
+
+  caps = gst_pad_get_current_caps (mysinkpad);
+  expected_caps = gst_caps_from_string (pre_push_caps);
+  gst_check_caps_equal (caps, expected_caps);
+  gst_caps_unref (caps);
+  gst_caps_unref (expected_caps);
+
+  GST_DEBUG ("pushing first buffer");
+  first = gst_buffer_new_and_alloc (4);
+  gst_buffer_memset (first, 0, 0, 4);
+  GST_BUFFER_TIMESTAMP (first) = 0;
+  fail_unless (gst_pad_push (mysrcpad, first) == GST_FLOW_OK);
+
+  /* second buffer */
+  second = gst_buffer_new_and_alloc (4);
+  GST_BUFFER_TIMESTAMP (second) = GST_SECOND / 25;
+  gst_buffer_memset (second, 0, 0, 4);
+
+  fail_unless (gst_pad_push (mysrcpad, second) == GST_FLOW_OK);
+
+  /* third buffer with new size */
+  third = gst_buffer_new_and_alloc (4);
+  GST_BUFFER_TIMESTAMP (third) = 2 * GST_SECOND / 25;
+  gst_buffer_memset (third, 0, 0, 4);
+
+  fail_unless (gst_pad_push (mysrcpad, third) == GST_FLOW_OK);
+
+  caps = gst_pad_get_current_caps (mysinkpad);
+  expected_caps = gst_caps_from_string (post_push_caps);
+  gst_check_caps_equal (caps, expected_caps);
+  gst_caps_unref (caps);
+  gst_caps_unref (expected_caps);
+
+}
+
+GST_START_TEST (test_fixed_framerate)
+{
+  GstElement *videorate;
+  GstCaps *caps;
+
+  /* 1) if upstream caps contain a non-0/1 framerate, we should use that and pass
+   *    it on downstream (if possible; otherwise fixate_to_nearest)
+   */
+  videorate = setup_videorate_full (&srctemplate, &sinktemplate);
+
+  caps = gst_caps_from_string ("video/x-raw,framerate=25/1");
+  ASSERT_SET_STATE (videorate, GST_STATE_PLAYING, GST_STATE_CHANGE_SUCCESS);
+  gst_check_setup_events (mysrcpad, videorate, caps, GST_FORMAT_TIME);
+  gst_caps_unref (caps);
+  videorate_send_buffers (videorate, "video/x-raw,framerate=25/1",
+      "video/x-raw,framerate=25/1");
+  cleanup_videorate (videorate);
+
+  /* 2) if upstream framerate is 0/1 and downstream doesn't force a particular
+   *    framerate, we try to guess based on buffer intervals and use that as output
+   *    framerate */
+  videorate = setup_videorate_full (&srctemplate, &sinktemplate);
+  ASSERT_SET_STATE (videorate, GST_STATE_PLAYING, GST_STATE_CHANGE_SUCCESS);
+  caps = gst_caps_from_string ("video/x-raw,framerate=0/1");
+  gst_check_setup_events (mysrcpad, videorate, caps, GST_FORMAT_TIME);
+  gst_caps_unref (caps);
+  videorate_send_buffers (videorate, "video/x-raw,framerate=0/1",
+      "video/x-raw,framerate=25/1");
+  cleanup_videorate (videorate);
+
+  /* 3) if downstream force variable framerate, do that */
+  videorate =
+      setup_videorate_full (&srctemplate, &force_variable_rate_template);
+  ASSERT_SET_STATE (videorate, GST_STATE_PLAYING, GST_STATE_CHANGE_SUCCESS);
+  caps = gst_caps_from_string ("video/x-raw,framerate=0/1");
+  gst_check_setup_events (mysrcpad, videorate, caps, GST_FORMAT_TIME);
+  gst_caps_unref (caps);
+  videorate_send_buffers (videorate, "video/x-raw,framerate=0/1",
+      "video/x-raw,framerate=0/1");
+  cleanup_videorate (videorate);
+
+}
+
+GST_END_TEST;
+
+GST_START_TEST (test_variable_framerate_renegotiation)
+{
+  GstElement *videorate;
+  GstCaps *caps;
+  GstCaps *allowed;
+
+  videorate = setup_videorate_full (&srctemplate, &sinktemplate);
+  ASSERT_SET_STATE (videorate, GST_STATE_PLAYING, GST_STATE_CHANGE_SUCCESS);
+  caps = gst_caps_from_string ("video/x-raw,framerate=0/1");
+  gst_check_setup_events (mysrcpad, videorate, caps, GST_FORMAT_TIME);
+  videorate_send_buffers (videorate, "video/x-raw,framerate=0/1",
+      "video/x-raw,framerate=25/1");
+
+  /* framerate=0/1 must still be allowed to be configured on
+   * the upstream side of videorate */
+  allowed = gst_pad_get_allowed_caps (mysrcpad);
+  fail_unless (gst_caps_is_subset (caps, allowed) == TRUE);
+
+  gst_caps_unref (allowed);
+  gst_caps_unref (caps);
+  cleanup_videorate (videorate);
+}
+
+GST_END_TEST;
+
+
 static Suite *
 videorate_suite (void)
 {
@@ -1054,6 +1181,8 @@
   tcase_add_test (tc_chain, test_selected_caps);
   tcase_add_loop_test (tc_chain, test_caps_negotiation,
       0, G_N_ELEMENTS (caps_negotiation_tests));
+  tcase_add_test (tc_chain, test_fixed_framerate);
+  tcase_add_test (tc_chain, test_variable_framerate_renegotiation);
 
   return s;
 }
diff --git a/tests/check/generic/clock-selection.c b/tests/check/generic/clock-selection.c
index 703ffd8..cfea856 100644
--- a/tests/check/generic/clock-selection.c
+++ b/tests/check/generic/clock-selection.c
@@ -43,7 +43,7 @@
 GST_END_TEST;
 
 static Suite *
-volume_suite (void)
+clocks_suite (void)
 {
   Suite *s = suite_create ("clocks");
   TCase *tc_chain = tcase_create ("general");
@@ -54,19 +54,4 @@
   return s;
 }
 
-int
-main (int argc, char **argv)
-{
-  int nf;
-
-  Suite *s = volume_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;
-}
+GST_CHECK_MAIN (clocks);
diff --git a/tests/check/generic/states.c b/tests/check/generic/states.c
index 7f12056..bb63579 100644
--- a/tests/check/generic/states.c
+++ b/tests/check/generic/states.c
@@ -207,7 +207,7 @@
 static Suite *
 states_suite (void)
 {
-  Suite *s = suite_create ("states");
+  Suite *s = suite_create ("states_base");
   TCase *tc_chain = tcase_create ("general");
 
   suite_add_tcase (s, tc_chain);
diff --git a/tests/check/gst/typefindfunctions.c b/tests/check/gst/typefindfunctions.c
index f40d4ec..9c1dc0e 100644
--- a/tests/check/gst/typefindfunctions.c
+++ b/tests/check/gst/typefindfunctions.c
@@ -25,6 +25,28 @@
 #include <gst/check/gstcheck.h>
 #include <gst/base/gsttypefindhelper.h>
 
+static GstCaps *
+typefind_data (const guint8 * data, gsize data_size,
+    GstTypeFindProbability * prob)
+{
+  GstBuffer *buf;
+  GstCaps *caps;
+
+  GST_MEMDUMP ("typefind data", data, data_size);
+  buf = gst_buffer_new ();
+  gst_buffer_append_memory (buf,
+      gst_memory_new_wrapped (GST_MEMORY_FLAG_READONLY,
+          (guint8 *) data, data_size, 0, data_size, NULL, NULL));
+  GST_BUFFER_OFFSET (buf) = 0;
+
+  caps = gst_type_find_helper_for_buffer (NULL, buf, prob);
+  GST_INFO ("caps: %" GST_PTR_FORMAT ", probability=%u", caps, *prob);
+
+  gst_buffer_unref (buf);
+
+  return caps;
+}
+
 GST_START_TEST (test_quicktime_mpeg4video)
 {
   /* quicktime redirect file which starts with what could also be interpreted
@@ -387,6 +409,73 @@
 
 GST_END_TEST;
 
+static const gchar MANIFEST[] =
+    "<?xml version=\"1.0\" encoding=\"utf-16\"?>\n"
+    "<!--Created with Expression Encoder version 2.1.1216.0-->\n"
+    "<SmoothStreamingMedia\n"
+    "  MajorVersion=\"1\"\n"
+    "  MinorVersion=\"0\"\n"
+    "  Duration=\"5965419999\">\n"
+    "  <StreamIndex\n"
+    "    Type=\"video\"\n"
+    "    Subtype=\"WVC1\"\n"
+    "    Chunks=\"299\"\n"
+    "    Url=\"QualityLevels({bitrate})/Fragments(video={start time})\">\n"
+    "    <QualityLevel\n"
+    "      Bitrate=\"2750000\"\n"
+    "      FourCC=\"WVC1\"\n" "      Width=\"1280\"\n" "      Height=\"720\"\n";
+
+static guint8 *
+generate_utf16 (guint off_lo, guint off_hi)
+{
+  guint8 *utf16;
+  gsize len, i;
+
+  len = strlen (MANIFEST);
+  /* BOM + UTF-16 string */
+  utf16 = g_malloc (2 + len * 2);
+  utf16[off_lo] = 0xff;
+  utf16[off_hi] = 0xfe;
+  for (i = 0; i < len; ++i) {
+    utf16[2 + (2 * i) + off_lo] = MANIFEST[i];
+    utf16[2 + (2 * i) + off_hi] = 0x00;
+  }
+
+  return utf16;
+}
+
+/* Test that we can typefind UTF16-LE and UTF16-BE variants
+ * of smooth streaming manifests (even without iconv) */
+GST_START_TEST (test_manifest_typefinding)
+{
+  GstTypeFindProbability prob;
+  const gchar *media_type;
+  GstCaps *caps;
+  guint8 *utf16;
+
+  utf16 = generate_utf16 (0, 1);
+  prob = 0;
+  caps = typefind_data (utf16, 2 + strlen (MANIFEST) * 2, &prob);
+  fail_unless (caps != NULL);
+  media_type = gst_structure_get_name (gst_caps_get_structure (caps, 0));
+  fail_unless_equals_string (media_type, "application/vnd.ms-sstr+xml");
+  fail_unless_equals_int (prob, GST_TYPE_FIND_MAXIMUM);
+  gst_caps_unref (caps);
+  g_free (utf16);
+
+  utf16 = generate_utf16 (1, 0);
+  prob = 0;
+  caps = typefind_data (utf16, 2 + strlen (MANIFEST) * 2, &prob);
+  fail_unless (caps != NULL);
+  media_type = gst_structure_get_name (gst_caps_get_structure (caps, 0));
+  fail_unless_equals_string (media_type, "application/vnd.ms-sstr+xml");
+  fail_unless_equals_int (prob, GST_TYPE_FIND_MAXIMUM);
+  gst_caps_unref (caps);
+  g_free (utf16);
+}
+
+GST_END_TEST;
+
 static Suite *
 typefindfunctions_suite (void)
 {
@@ -403,6 +492,7 @@
   tcase_add_test (tc_chain, test_eac3);
   tcase_add_test (tc_chain, test_random_data);
   tcase_add_test (tc_chain, test_hls_m3u8);
+  tcase_add_test (tc_chain, test_manifest_typefinding);
 
   return s;
 }
diff --git a/tests/check/libs/allocators.c b/tests/check/libs/allocators.c
new file mode 100644
index 0000000..c96edf1
--- /dev/null
+++ b/tests/check/libs/allocators.c
@@ -0,0 +1,75 @@
+/* GStreamer unit tests for the RTSP support library
+ * Copyright (C) 2010 Andy Wingo <wingo@oblong.com>
+ * Copyright (C) 2015 Tim-Philipp Müller <tim@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/gstdio.h>
+#include <gst/check/gstcheck.h>
+
+#include <gst/allocators/gstdmabuf.h>
+#include <string.h>
+
+#define FILE_SIZE 4096
+
+
+GST_START_TEST (test_dmabuf)
+{
+  char tmpfilename[] = "/tmp/dmabuf-test.XXXXXX";
+  int fd;
+  GstMemory *mem;
+  GstAllocator *alloc;
+  GstMapInfo info;
+
+  fd = mkstemp (tmpfilename);
+  fail_unless (fd > 0);
+  fail_unless (g_unlink (tmpfilename) == 0);
+
+  alloc = gst_dmabuf_allocator_new ();
+
+  mem = gst_dmabuf_allocator_alloc (alloc, fd, FILE_SIZE);
+
+  fail_unless (gst_memory_map (mem, &info, GST_MAP_READWRITE));
+  fail_unless (info.flags == GST_MAP_READWRITE);
+  fail_unless (info.data != NULL);
+  fail_unless (info.size == FILE_SIZE);
+  fail_unless (info.maxsize == FILE_SIZE);
+  gst_memory_unmap (mem, &info);
+
+  gst_memory_unref (mem);
+  g_object_unref (alloc);
+}
+
+GST_END_TEST;
+
+static Suite *
+allocators_suite (void)
+{
+  Suite *s = suite_create ("allocators");
+  TCase *tc_chain = tcase_create ("general");
+
+  suite_add_tcase (s, tc_chain);
+  tcase_add_test (tc_chain, test_dmabuf);
+
+  return s;
+}
+
+GST_CHECK_MAIN (allocators);
diff --git a/tests/check/libs/audio.c b/tests/check/libs/audio.c
index d95923e..e19fd62 100644
--- a/tests/check/libs/audio.c
+++ b/tests/check/libs/audio.c
@@ -630,20 +630,4 @@
   return s;
 }
 
-int
-main (int argc, char **argv)
-{
-  int nf;
-
-  Suite *s = audio_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;
-}
+GST_CHECK_MAIN (audio);
diff --git a/tests/check/libs/audiodecoder.c b/tests/check/libs/audiodecoder.c
index 934b9dd..3f210b7 100644
--- a/tests/check/libs/audiodecoder.c
+++ b/tests/check/libs/audiodecoder.c
@@ -33,6 +33,37 @@
 
 #define TEST_MSECS_PER_SAMPLE 44100
 
+#define RESTRICTED_CAPS_RATE 44100
+#define RESTRICTED_CAPS_CHANNELS 6
+static GstStaticPadTemplate sinktemplate_restricted =
+GST_STATIC_PAD_TEMPLATE ("sink",
+    GST_PAD_SINK,
+    GST_PAD_ALWAYS,
+    GST_STATIC_CAPS ("audio/x-raw, rate=(int)44100, channels=(int)6")
+    );
+
+static GstStaticPadTemplate sinktemplate_with_range =
+GST_STATIC_PAD_TEMPLATE ("sink",
+    GST_PAD_SINK,
+    GST_PAD_ALWAYS,
+    GST_STATIC_CAPS ("audio/x-raw, rate=(int)[1,44100], channels=(int)[1,6]")
+    );
+
+static GstStaticPadTemplate sinktemplate_default =
+GST_STATIC_PAD_TEMPLATE ("sink",
+    GST_PAD_SINK,
+    GST_PAD_ALWAYS,
+    GST_STATIC_CAPS ("audio/x-raw, format=(string)S32LE, "
+        "rate=(int)[1, 320000], channels=(int)[1, 32],"
+        "layout=(string)interleaved")
+    );
+static GstStaticPadTemplate srctemplate_default =
+GST_STATIC_PAD_TEMPLATE ("src",
+    GST_PAD_SRC,
+    GST_PAD_ALWAYS,
+    GST_STATIC_CAPS ("audio/x-test-custom")
+    );
+
 #define GST_AUDIO_DECODER_TESTER_TYPE gst_audio_decoder_tester_get_type()
 static GType gst_audio_decoder_tester_get_type (void);
 
@@ -178,24 +209,17 @@
 }
 
 static void
-setup_audiodecodertester (void)
+setup_audiodecodertester (GstStaticPadTemplate * sinktemplate,
+    GstStaticPadTemplate * srctemplate)
 {
-  static GstStaticPadTemplate sinktemplate = GST_STATIC_PAD_TEMPLATE ("sink",
-      GST_PAD_SINK,
-      GST_PAD_ALWAYS,
-      GST_STATIC_CAPS ("audio/x-raw, format=(string)S32LE, "
-          "rate=(int)[1, 320000], channels=(int)[1, 32],"
-          "layout=(string)interleaved")
-      );
-  static GstStaticPadTemplate srctemplate = GST_STATIC_PAD_TEMPLATE ("src",
-      GST_PAD_SRC,
-      GST_PAD_ALWAYS,
-      GST_STATIC_CAPS ("audio/x-test-custom")
-      );
+  if (sinktemplate == NULL)
+    sinktemplate = &sinktemplate_default;
+  if (srctemplate == NULL)
+    srctemplate = &srctemplate_default;
 
   dec = g_object_new (GST_AUDIO_DECODER_TESTER_TYPE, NULL);
-  mysrcpad = gst_check_setup_src_pad (dec, &srctemplate);
-  mysinkpad = gst_check_setup_sink_pad (dec, &sinktemplate);
+  mysrcpad = gst_check_setup_src_pad (dec, srctemplate);
+  mysinkpad = gst_check_setup_sink_pad (dec, sinktemplate);
 
   gst_pad_set_event_function (mysinkpad, _mysinkpad_event);
 }
@@ -251,7 +275,7 @@
   GstBuffer *buffer;
   guint64 i;
 
-  setup_audiodecodertester ();
+  setup_audiodecodertester (NULL, NULL);
 
   gst_pad_set_active (mysrcpad, TRUE);
   gst_element_set_state (dec, GST_STATE_PLAYING);
@@ -335,7 +359,7 @@
   GstSegment segment;
   GstBuffer *buffer;
 
-  setup_audiodecodertester ();
+  setup_audiodecodertester (NULL, NULL);
 
   gst_pad_set_active (mysrcpad, TRUE);
   gst_element_set_state (dec, GST_STATE_PLAYING);
@@ -364,7 +388,7 @@
 {
   GstSegment segment;
 
-  setup_audiodecodertester ();
+  setup_audiodecodertester (NULL, NULL);
 
   gst_pad_set_active (mysrcpad, TRUE);
   gst_element_set_state (dec, GST_STATE_PLAYING);
@@ -393,7 +417,7 @@
 {
   GstSegment segment;
 
-  setup_audiodecodertester ();
+  setup_audiodecodertester (NULL, NULL);
 
   ((GstAudioDecoderTester *) dec)->setoutputformat_on_decoding = TRUE;
 
@@ -419,16 +443,70 @@
 
 GST_END_TEST;
 
+
+/* make sure that the segment event is pushed before the gap */
+GST_START_TEST (audiodecoder_first_data_is_gap)
+{
+  GstSegment segment;
+  GList *events_iter;
+
+  setup_audiodecodertester (NULL, NULL);
+
+  gst_pad_set_active (mysrcpad, TRUE);
+  gst_element_set_state (dec, GST_STATE_PLAYING);
+  gst_pad_set_active (mysinkpad, TRUE);
+
+  send_startup_events ();
+
+  /* push a new segment */
+  gst_segment_init (&segment, GST_FORMAT_TIME);
+  fail_unless (gst_pad_push_event (mysrcpad, gst_event_new_segment (&segment)));
+
+  /* push a gap */
+  fail_unless (gst_pad_push_event (mysrcpad, gst_event_new_gap (0,
+              GST_SECOND)));
+  events_iter = events;
+  /* make sure the usual events have been received */
+  {
+    GstEvent *sstart = events_iter->data;
+    fail_unless (GST_EVENT_TYPE (sstart) == GST_EVENT_STREAM_START);
+    events_iter = g_list_next (events_iter);
+  }
+  {
+    GstEvent *caps_event = events_iter->data;
+    fail_unless (GST_EVENT_TYPE (caps_event) == GST_EVENT_CAPS);
+    events_iter = g_list_next (events_iter);
+  }
+  {
+    GstEvent *segment_event = events_iter->data;
+    fail_unless (GST_EVENT_TYPE (segment_event) == GST_EVENT_SEGMENT);
+    events_iter = g_list_next (events_iter);
+  }
+
+  /* Make sure the gap was pushed */
+  {
+    GstEvent *gap = events_iter->data;
+    fail_unless (GST_EVENT_TYPE (gap) == GST_EVENT_GAP);
+    events_iter = g_list_next (events_iter);
+  }
+  fail_unless (events_iter == NULL);
+
+  cleanup_audiodecodertest ();
+}
+
+GST_END_TEST;
+
+
 static void
 _audiodecoder_flush_events (gboolean send_buffers)
 {
   GstSegment segment;
   GstBuffer *buffer;
-  guint64 i;
+  guint i;
   GList *events_iter;
   GstMessage *msg;
 
-  setup_audiodecodertester ();
+  setup_audiodecodertester (NULL, NULL);
 
   gst_pad_set_active (mysrcpad, TRUE);
   gst_element_set_state (dec, GST_STATE_PLAYING);
@@ -465,7 +543,7 @@
       gst_message_new_element (GST_OBJECT (mysrcpad),
       gst_structure_new_empty ("test"));
   fail_unless (gst_pad_push_event (mysrcpad,
-      gst_event_new_sink_message ("test", msg)));
+          gst_event_new_sink_message ("test", msg)));
   gst_message_unref (msg);
 
   fail_unless (gst_pad_push_event (mysrcpad, gst_event_new_eos ()));
@@ -488,15 +566,14 @@
       fail_unless (GST_EVENT_TYPE (segment_event) == GST_EVENT_SEGMENT);
       events_iter = g_list_next (events_iter);
     }
-    for (int i=0; i< NUM_BUFFERS / 10; i++)
-    {
+    for (int i = 0; i < NUM_BUFFERS / 10; i++) {
       GstEvent *tag_event = events_iter->data;
       fail_unless (GST_EVENT_TYPE (tag_event) == GST_EVENT_TAG);
       events_iter = g_list_next (events_iter);
     }
   }
   {
-    GstEvent *eos_event = g_list_last(events_iter)->data;
+    GstEvent *eos_event = g_list_last (events_iter)->data;
 
     fail_unless (GST_EVENT_TYPE (eos_event) == GST_EVENT_EOS);
     events_iter = g_list_next (events_iter);
@@ -558,7 +635,7 @@
 GST_START_TEST (audiodecoder_eos_events_no_buffers)
 {
   GstSegment segment;
-  setup_audiodecodertester ();
+  setup_audiodecodertester (NULL, NULL);
 
   gst_pad_set_active (mysrcpad, TRUE);
   gst_element_set_state (dec, GST_STATE_PLAYING);
@@ -606,7 +683,7 @@
   guint64 i;
   GstClockTime pos;
 
-  setup_audiodecodertester ();
+  setup_audiodecodertester (NULL, NULL);
 
   gst_pad_set_active (mysrcpad, TRUE);
   gst_element_set_state (dec, GST_STATE_PLAYING);
@@ -669,7 +746,7 @@
   GstBuffer *buffer;
   guint64 i;
 
-  setup_audiodecodertester ();
+  setup_audiodecodertester (NULL, NULL);
 
   ((GstAudioDecoderTester *) dec)->output_too_many_frames = TRUE;
 
@@ -719,6 +796,374 @@
 
 GST_END_TEST;
 
+GST_START_TEST (audiodecoder_query_caps_with_fixed_caps_peer)
+{
+  GstCaps *caps;
+  GstCaps *filter;
+  GstStructure *structure;
+  gint rate, channels;
+
+  setup_audiodecodertester (&sinktemplate_restricted, NULL);
+
+  gst_pad_set_active (mysrcpad, TRUE);
+  gst_element_set_state (dec, GST_STATE_PLAYING);
+  gst_pad_set_active (mysinkpad, TRUE);
+
+  caps = gst_pad_peer_query_caps (mysrcpad, NULL);
+  fail_unless (caps != NULL);
+
+  structure = gst_caps_get_structure (caps, 0);
+  fail_unless (gst_structure_get_int (structure, "rate", &rate));
+  fail_unless (gst_structure_get_int (structure, "channels", &channels));
+
+  /* match our restricted caps values */
+  fail_unless (channels == RESTRICTED_CAPS_CHANNELS);
+  fail_unless (rate == RESTRICTED_CAPS_RATE);
+  gst_caps_unref (caps);
+
+  filter = gst_caps_new_simple ("audio/x-custom-test", "rate", G_TYPE_INT,
+      10000, "channels", G_TYPE_INT, 12, NULL);
+  caps = gst_pad_peer_query_caps (mysrcpad, filter);
+  fail_unless (caps != NULL);
+  fail_unless (gst_caps_is_empty (caps));
+  gst_caps_unref (caps);
+  gst_caps_unref (filter);
+
+  cleanup_audiodecodertest ();
+}
+
+GST_END_TEST;
+
+static void
+_get_int_range (GstStructure * s, const gchar * field, gint * min_v,
+    gint * max_v)
+{
+  const GValue *value;
+
+  value = gst_structure_get_value (s, field);
+  fail_unless (value != NULL);
+  fail_unless (GST_VALUE_HOLDS_INT_RANGE (value));
+
+  *min_v = gst_value_get_int_range_min (value);
+  *max_v = gst_value_get_int_range_max (value);
+}
+
+GST_START_TEST (audiodecoder_query_caps_with_range_caps_peer)
+{
+  GstCaps *caps;
+  GstCaps *filter;
+  GstStructure *structure;
+  gint rate, channels;
+  gint rate_min, channels_min;
+  gint rate_max, channels_max;
+
+  setup_audiodecodertester (&sinktemplate_with_range, NULL);
+
+  gst_pad_set_active (mysrcpad, TRUE);
+  gst_element_set_state (dec, GST_STATE_PLAYING);
+  gst_pad_set_active (mysinkpad, TRUE);
+
+  caps = gst_pad_peer_query_caps (mysrcpad, NULL);
+  fail_unless (caps != NULL);
+
+  structure = gst_caps_get_structure (caps, 0);
+  _get_int_range (structure, "rate", &rate_min, &rate_max);
+  _get_int_range (structure, "channels", &channels_min, &channels_max);
+  fail_unless (rate_min == 1);
+  fail_unless (rate_max == RESTRICTED_CAPS_RATE);
+  fail_unless (channels_min == 1);
+  fail_unless (channels_max == RESTRICTED_CAPS_CHANNELS);
+  gst_caps_unref (caps);
+
+  /* query with a fixed filter */
+  filter = gst_caps_new_simple ("audio/x-test-custom", "rate", G_TYPE_INT,
+      RESTRICTED_CAPS_RATE, "channels", G_TYPE_INT, RESTRICTED_CAPS_CHANNELS,
+      NULL);
+  caps = gst_pad_peer_query_caps (mysrcpad, filter);
+  fail_unless (caps != NULL);
+  structure = gst_caps_get_structure (caps, 0);
+  fail_unless (gst_structure_get_int (structure, "rate", &rate));
+  fail_unless (gst_structure_get_int (structure, "channels", &channels));
+  fail_unless (rate == RESTRICTED_CAPS_RATE);
+  fail_unless (channels == RESTRICTED_CAPS_CHANNELS);
+  gst_caps_unref (caps);
+  gst_caps_unref (filter);
+
+  /* query with a fixed filter that will lead to empty result */
+  filter = gst_caps_new_simple ("audio/x-test-custom", "rate", G_TYPE_INT,
+      10000, "channels", G_TYPE_INT, 12, NULL);
+  caps = gst_pad_peer_query_caps (mysrcpad, filter);
+  fail_unless (caps != NULL);
+  fail_unless (gst_caps_is_empty (caps));
+  gst_caps_unref (caps);
+  gst_caps_unref (filter);
+
+  cleanup_audiodecodertest ();
+}
+
+GST_END_TEST;
+
+#define GETCAPS_CAPS_STR "audio/x-test-custom, somefield=(string)getcaps"
+static GstCaps *
+_custom_audio_decoder_getcaps (GstAudioDecoder * dec, GstCaps * filter)
+{
+  return gst_caps_from_string (GETCAPS_CAPS_STR);
+}
+
+GST_START_TEST (audiodecoder_query_caps_with_custom_getcaps)
+{
+  GstCaps *caps;
+  GstAudioDecoderClass *klass;
+  GstCaps *expected_caps;
+
+  setup_audiodecodertester (&sinktemplate_restricted, NULL);
+
+  klass = GST_AUDIO_DECODER_CLASS (GST_AUDIO_DECODER_GET_CLASS (dec));
+  klass->getcaps = _custom_audio_decoder_getcaps;
+
+  gst_pad_set_active (mysrcpad, TRUE);
+  gst_element_set_state (dec, GST_STATE_PLAYING);
+  gst_pad_set_active (mysinkpad, TRUE);
+
+  caps = gst_pad_peer_query_caps (mysrcpad, NULL);
+  fail_unless (caps != NULL);
+
+  expected_caps = gst_caps_from_string (GETCAPS_CAPS_STR);
+  fail_unless (gst_caps_is_equal (expected_caps, caps));
+  gst_caps_unref (expected_caps);
+  gst_caps_unref (caps);
+
+  cleanup_audiodecodertest ();
+}
+
+GST_END_TEST;
+
+static GstTagList *
+pad_get_sticky_tags (GstPad * pad, GstTagScope scope)
+{
+  GstTagList *tags = NULL;
+  GstEvent *event;
+  guint i = 0;
+
+  do {
+    event = gst_pad_get_sticky_event (pad, GST_EVENT_TAG, i++);
+    if (event == NULL)
+      break;
+    gst_event_parse_tag (event, &tags);
+    if (scope == gst_tag_list_get_scope (tags))
+      tags = gst_tag_list_ref (tags);
+    else
+      tags = NULL;
+    gst_event_unref (event);
+  }
+  while (tags == NULL);
+
+  return tags;
+}
+
+#define tag_list_peek_string(list,tag,p_s) \
+    gst_tag_list_peek_string_index(list,tag,0,p_s)
+
+/* Check tag transformations and updates */
+GST_START_TEST (audiodecoder_tag_handling)
+{
+  GstTagList *global_tags;
+  GstTagList *tags;
+  GstSegment segment;
+  const gchar *s = NULL;
+  guint u = 0;
+
+  setup_audiodecodertester (NULL, NULL);
+
+  gst_pad_set_active (mysrcpad, TRUE);
+  gst_element_set_state (dec, GST_STATE_PLAYING);
+  gst_pad_set_active (mysinkpad, TRUE);
+
+  send_startup_events ();
+
+  /* push a new segment */
+  gst_segment_init (&segment, GST_FORMAT_TIME);
+  fail_unless (gst_pad_push_event (mysrcpad, gst_event_new_segment (&segment)));
+
+  /* =======================================================================
+   * SCENARIO 0: global tags passthrough; check upstream/decoder tag merging
+   * ======================================================================= */
+
+  /* push some global tags (these should be passed through and not messed with) */
+  global_tags = gst_tag_list_new (GST_TAG_TITLE, "Global", NULL);
+  gst_tag_list_set_scope (global_tags, GST_TAG_SCOPE_GLOBAL);
+  fail_unless (gst_pad_push_event (mysrcpad,
+          gst_event_new_tag (gst_tag_list_ref (global_tags))));
+
+  /* create some (upstream) stream tags */
+  tags = gst_tag_list_new (GST_TAG_AUDIO_CODEC, "Upstream Codec",
+      GST_TAG_DESCRIPTION, "Upstream Description", NULL);
+  gst_tag_list_set_scope (tags, GST_TAG_SCOPE_STREAM);
+  fail_unless (gst_pad_push_event (mysrcpad, gst_event_new_tag (tags)));
+  tags = NULL;
+
+  /* decoder tags: override/add AUDIO_CODEC, BITRATE and MAXIMUM_BITRATE */
+  {
+    GstTagList *decoder_tags;
+
+    decoder_tags = gst_tag_list_new (GST_TAG_AUDIO_CODEC, "Decoder Codec",
+        GST_TAG_BITRATE, 250000, GST_TAG_MAXIMUM_BITRATE, 255000, NULL);
+    gst_audio_decoder_merge_tags (GST_AUDIO_DECODER (dec),
+        decoder_tags, GST_TAG_MERGE_REPLACE);
+    gst_tag_list_unref (decoder_tags);
+  }
+
+  /* push buffer (this will call gst_audio_decoder_merge_tags with the above) */
+  fail_unless (gst_pad_push (mysrcpad, create_test_buffer (0)) == GST_FLOW_OK);
+  gst_buffer_unref (buffers->data);
+  buffers = g_list_delete_link (buffers, buffers);
+
+  /* check global tags: should not have been tampered with */
+  tags = pad_get_sticky_tags (mysinkpad, GST_TAG_SCOPE_GLOBAL);
+  fail_unless (tags != NULL);
+  GST_INFO ("global tags: %" GST_PTR_FORMAT, tags);
+  fail_unless (gst_tag_list_is_equal (tags, global_tags));
+
+  /* check merged stream tags */
+  tags = pad_get_sticky_tags (mysinkpad, GST_TAG_SCOPE_STREAM);
+  fail_unless (tags != NULL);
+  GST_INFO ("stream tags: %" GST_PTR_FORMAT, tags);
+  /* upstream audio codec should've been replaced with audiodecoder one */
+  fail_unless (tag_list_peek_string (tags, GST_TAG_AUDIO_CODEC, &s));
+  fail_unless_equals_string (s, "Decoder Codec");
+  /* no upstream bitrate, so audiodecoder one should've been added */
+  fail_unless (gst_tag_list_get_uint (tags, GST_TAG_BITRATE, &u));
+  fail_unless_equals_int (u, 250000);
+  /* no upstream maximum-bitrate, so audiodecoder one should've been added */
+  fail_unless (gst_tag_list_get_uint (tags, GST_TAG_MAXIMUM_BITRATE, &u));
+  fail_unless_equals_int (u, 255000);
+  fail_unless (gst_tag_list_get_tag_size (tags, GST_TAG_AUDIO_CODEC) == 1);
+  fail_unless (gst_tag_list_get_tag_size (tags, GST_TAG_BITRATE) == 1);
+  fail_unless (gst_tag_list_get_tag_size (tags, GST_TAG_MAXIMUM_BITRATE) == 1);
+  /* upstream description should've been maintained */
+  fail_unless (gst_tag_list_get_tag_size (tags, GST_TAG_DESCRIPTION) == 1);
+  /* and that should be all: AUDIO_CODEC, DESCRIPTION, BITRATE, MAX BITRATE */
+  fail_unless_equals_int (gst_tag_list_n_tags (tags), 4);
+  gst_tag_list_unref (tags);
+  s = NULL;
+
+  /* ===================================================================
+   * SCENARIO 1: upstream sends updated tags, decoder tags stay the same
+   * =================================================================== */
+
+  /* push same upstream stream tags again */
+  tags = gst_tag_list_new (GST_TAG_AUDIO_CODEC, "Upstream Codec",
+      GST_TAG_DESCRIPTION, "Upstream Description", NULL);
+  fail_unless (gst_pad_push_event (mysrcpad, gst_event_new_tag (tags)));
+  tags = NULL;
+
+  /* decoder tags are still:
+   * audio-codec = "Decoder Codec", bitrate=250000, maximum-bitrate=255000 */
+
+  /* check possibly updated merged stream tags, should be same as before */
+  tags = pad_get_sticky_tags (mysinkpad, GST_TAG_SCOPE_STREAM);
+  fail_unless (tags != NULL);
+  GST_INFO ("stream tags: %" GST_PTR_FORMAT, tags);
+  /* upstream audio codec still be the one merge-replaced by the subclass */
+  fail_unless (tag_list_peek_string (tags, GST_TAG_AUDIO_CODEC, &s));
+  fail_unless_equals_string (s, "Decoder Codec");
+  /* no upstream bitrate, so audiodecoder one should've been added */
+  fail_unless (gst_tag_list_get_uint (tags, GST_TAG_BITRATE, &u));
+  fail_unless_equals_int (u, 250000);
+  fail_unless (gst_tag_list_get_tag_size (tags, GST_TAG_AUDIO_CODEC) == 1);
+  fail_unless (gst_tag_list_get_tag_size (tags, GST_TAG_BITRATE) == 1);
+  fail_unless (gst_tag_list_get_tag_size (tags, GST_TAG_MAXIMUM_BITRATE) == 1);
+  /* upstream description should've been maintained */
+  fail_unless (gst_tag_list_get_tag_size (tags, GST_TAG_DESCRIPTION) == 1);
+  /* and that should be all: AUDIO_CODEC, DESCRIPTION, BITRATE, MAX BITRATE */
+  fail_unless_equals_int (gst_tag_list_n_tags (tags), 4);
+  gst_tag_list_unref (tags);
+  s = NULL;
+
+  /* =============================================================
+   * SCENARIO 2: decoder updates tags, upstream tags stay the same
+   * ============================================================= */
+
+  /* new decoder tags: override AUDIO_CODEC, update/add BITRATE,
+   * no MAXIMUM_BITRATE this time (which means it should not appear
+   * any longer in the output tags now) (bitrate is a different value now) */
+  {
+    GstTagList *decoder_tags;
+
+    decoder_tags = gst_tag_list_new (GST_TAG_AUDIO_CODEC, "Decoder Codec",
+        GST_TAG_BITRATE, 275000, NULL);
+    gst_audio_decoder_merge_tags (GST_AUDIO_DECODER (dec),
+        decoder_tags, GST_TAG_MERGE_REPLACE);
+    gst_tag_list_unref (decoder_tags);
+  }
+
+  /* push another buffer to make decoder update tags */
+  fail_unless (gst_pad_push (mysrcpad, create_test_buffer (2)) == GST_FLOW_OK);
+  gst_buffer_unref (buffers->data);
+  buffers = g_list_delete_link (buffers, buffers);
+
+  /* check updated merged stream tags, the decoder bits should be different */
+  tags = pad_get_sticky_tags (mysinkpad, GST_TAG_SCOPE_STREAM);
+  fail_unless (tags != NULL);
+  GST_INFO ("stream tags: %" GST_PTR_FORMAT, tags);
+  /* upstream audio codec still replaced by the subclass's (wasn't updated) */
+  fail_unless (tag_list_peek_string (tags, GST_TAG_AUDIO_CODEC, &s));
+  fail_unless_equals_string (s, "Decoder Codec");
+  /* no upstream bitrate, so audiodecoder one should've been added, was updated */
+  fail_unless (gst_tag_list_get_uint (tags, GST_TAG_BITRATE, &u));
+  fail_unless_equals_int (u, 275000);
+  /* no upstream maximum-bitrate, and audiodecoder removed it now */
+  fail_unless (!gst_tag_list_get_uint (tags, GST_TAG_MAXIMUM_BITRATE, &u));
+  fail_unless (gst_tag_list_get_tag_size (tags, GST_TAG_AUDIO_CODEC) == 1);
+  fail_unless (gst_tag_list_get_tag_size (tags, GST_TAG_BITRATE) == 1);
+  /* upstream description should've been maintained */
+  fail_unless (gst_tag_list_get_tag_size (tags, GST_TAG_DESCRIPTION) == 1);
+  /* and that should be all, just AUDIO_CODEC, DESCRIPTION, BITRATE */
+  fail_unless_equals_int (gst_tag_list_n_tags (tags), 3);
+  gst_tag_list_unref (tags);
+  s = NULL;
+
+  /* =================================================================
+   * SCENARIO 3: stream-start event should clear upstream tags
+   * ================================================================= */
+
+  /* also tests if the stream-start event clears the upstream tags */
+  fail_unless (gst_pad_push_event (mysrcpad, gst_event_new_stream_start ("x")));
+
+  /* push another buffer to make decoder update tags */
+  fail_unless (gst_pad_push (mysrcpad, create_test_buffer (3)) == GST_FLOW_OK);
+  gst_buffer_unref (buffers->data);
+  buffers = g_list_delete_link (buffers, buffers);
+
+  /* check updated merged stream tags, should be just decoder tags now */
+  tags = pad_get_sticky_tags (mysinkpad, GST_TAG_SCOPE_STREAM);
+  fail_unless (tags != NULL);
+  GST_INFO ("stream tags: %" GST_PTR_FORMAT, tags);
+  fail_unless (tag_list_peek_string (tags, GST_TAG_AUDIO_CODEC, &s));
+  fail_unless_equals_string (s, "Decoder Codec");
+  fail_unless (gst_tag_list_get_uint (tags, GST_TAG_BITRATE, &u));
+  fail_unless_equals_int (u, 275000);
+  /* no upstream maximum-bitrate, and audiodecoder removed it now */
+  fail_unless (!gst_tag_list_get_uint (tags, GST_TAG_MAXIMUM_BITRATE, &u));
+  fail_unless (gst_tag_list_get_tag_size (tags, GST_TAG_AUDIO_CODEC) == 1);
+  fail_unless (gst_tag_list_get_tag_size (tags, GST_TAG_BITRATE) == 1);
+  /* no more description tag since no more upstream tags */
+  fail_unless (gst_tag_list_get_tag_size (tags, GST_TAG_DESCRIPTION) == 0);
+  /* and that should be all, just AUDIO_CODEC, BITRATE */
+  fail_unless_equals_int (gst_tag_list_n_tags (tags), 2);
+  gst_tag_list_unref (tags);
+  s = NULL;
+
+  /* clean up */
+  fail_unless (gst_pad_push_event (mysrcpad, gst_event_new_eos ()));
+  fail_unless (buffers == NULL);
+
+  cleanup_audiodecodertest ();
+  gst_tag_list_unref (global_tags);
+}
+
+GST_END_TEST;
+
 static Suite *
 gst_audiodecoder_suite (void)
 {
@@ -733,8 +1178,14 @@
   tcase_add_test (tc, audiodecoder_negotiation_with_buffer);
   tcase_add_test (tc, audiodecoder_negotiation_with_gap_event);
   tcase_add_test (tc, audiodecoder_delayed_negotiation_with_gap_event);
+  tcase_add_test (tc, audiodecoder_first_data_is_gap);
   tcase_add_test (tc, audiodecoder_buffer_after_segment);
   tcase_add_test (tc, audiodecoder_output_too_many_frames);
+  tcase_add_test (tc, audiodecoder_tag_handling);
+
+  tcase_add_test (tc, audiodecoder_query_caps_with_fixed_caps_peer);
+  tcase_add_test (tc, audiodecoder_query_caps_with_range_caps_peer);
+  tcase_add_test (tc, audiodecoder_query_caps_with_custom_getcaps);
 
   return s;
 }
diff --git a/tests/check/libs/audioencoder.c b/tests/check/libs/audioencoder.c
index bd65341..2ca9520 100644
--- a/tests/check/libs/audioencoder.c
+++ b/tests/check/libs/audioencoder.c
@@ -283,7 +283,7 @@
 {
   GstSegment segment;
   GstBuffer *buffer;
-  guint64 i;
+  guint i;
   GList *events_iter;
 
   setup_audioencodertester ();
diff --git a/tests/check/libs/discoverer.c b/tests/check/libs/discoverer.c
index c7d2679..8fe5ecf 100644
--- a/tests/check/libs/discoverer.c
+++ b/tests/check/libs/discoverer.c
@@ -44,6 +44,56 @@
 
 GST_END_TEST;
 
+GST_START_TEST (test_disco_serializing)
+{
+  GError *err = NULL;
+  GstDiscoverer *dc;
+  GstDiscovererInfo *info, *dinfo;
+  gchar *uri;
+  GVariant *serialized, *reserialized;
+  GList *audio_streams;
+  gchar *path =
+      g_build_filename (GST_TEST_FILES_PATH, "theora-vorbis.ogg", NULL);
+
+  /* high timeout, in case we're running under valgrind */
+  dc = gst_discoverer_new (5 * GST_SECOND, &err);
+  fail_unless (dc != NULL);
+  fail_unless (err == NULL);
+
+  uri = gst_filename_to_uri (path, &err);
+  g_free (path);
+  fail_unless (err == NULL);
+
+  info = gst_discoverer_discover_uri (dc, uri, &err);
+  fail_unless (info);
+  serialized =
+      gst_discoverer_info_to_variant (info, GST_DISCOVERER_SERIALIZE_ALL);
+
+
+  fail_unless (serialized);
+  dinfo = gst_discoverer_info_from_variant (serialized);
+
+  fail_unless (dinfo);
+  audio_streams = gst_discoverer_info_get_audio_streams (dinfo);
+  fail_unless_equals_int (g_list_length (audio_streams), 1);
+  gst_discoverer_stream_info_list_free (audio_streams);
+
+  reserialized =
+      gst_discoverer_info_to_variant (dinfo, GST_DISCOVERER_SERIALIZE_ALL);
+
+  fail_unless (g_variant_equal (serialized, reserialized));
+
+  gst_discoverer_info_unref (info);
+  gst_discoverer_info_unref (dinfo);
+  g_free (uri);
+  g_variant_unref (serialized);
+  g_variant_unref (reserialized);
+
+  g_object_unref (dc);
+}
+
+GST_END_TEST;
+
 GST_START_TEST (test_disco_sync)
 {
   GError *err = NULL;
@@ -78,7 +128,6 @@
 }
 
 GST_END_TEST;
-
 static void
 test_disco_sync_reuse (const gchar * test_fn, guint num, GstClockTime timeout)
 {
@@ -195,6 +244,7 @@
   tcase_add_test (tc_chain, test_disco_sync_reuse_mp3);
   tcase_add_test (tc_chain, test_disco_sync_reuse_timeout);
   tcase_add_test (tc_chain, test_disco_missing_plugins);
+  tcase_add_test (tc_chain, test_disco_serializing);
   return s;
 }
 
diff --git a/tests/check/libs/fft.c b/tests/check/libs/fft.c
index 8151797..dccaae5 100644
--- a/tests/check/libs/fft.c
+++ b/tests/check/libs/fft.c
@@ -545,19 +545,4 @@
   return s;
 }
 
-int
-main (int argc, char **argv)
-{
-  int nf;
-
-  Suite *s = fft_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;
-}
+GST_CHECK_MAIN (fft);
diff --git a/tests/check/libs/libsabi.c b/tests/check/libs/libsabi.c
index 330554f..508406a 100644
--- a/tests/check/libs/libsabi.c
+++ b/tests/check/libs/libsabi.c
@@ -82,24 +82,21 @@
 #   include "struct_i386.h"
 #   define HAVE_ABI_SIZES TRUE
 # endif
-#else
-#ifdef HAVE_CPU_X86_64
-#include "struct_x86_64.h"
-#define HAVE_ABI_SIZES TRUE
-#else
-#ifdef HAVE_CPU_ARM
-#include "struct_arm.h"
-#define HAVE_ABI_SIZES FALSE
-#else
-#ifdef __powerpc__
-#include "struct_ppc32.h"
-#define HAVE_ABI_SIZES TRUE
+#elif defined HAVE_CPU_X86_64
+# include "struct_x86_64.h"
+# define HAVE_ABI_SIZES TRUE
+#elif defined HAVE_CPU_ARM
+# include "struct_arm.h"
+# define HAVE_ABI_SIZES FALSE
+#elif defined HAVE_CPU_PPC
+# include "struct_ppc32.h"
+# define HAVE_ABI_SIZES TRUE
+#elif defined HAVE_CPU_PPC64
+# include "struct_ppc64.h"
+# define HAVE_ABI_SIZES TRUE
 #else /* in case someone wants to generate a new arch */
-#include "struct_i386.h"
-#define HAVE_ABI_SIZES FALSE
-#endif
-#endif
-#endif
+# include "struct_i386.h"
+# define HAVE_ABI_SIZES FALSE
 #endif
 
 GST_START_TEST (test_ABI)
diff --git a/tests/check/libs/navigation.c b/tests/check/libs/navigation.c
index b33b497..930e42a 100644
--- a/tests/check/libs/navigation.c
+++ b/tests/check/libs/navigation.c
@@ -306,19 +306,4 @@
   return s;
 }
 
-int
-main (int argc, char **argv)
-{
-  int nf;
-
-  Suite *s = navigation_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;
-}
+GST_CHECK_MAIN (navigation);
diff --git a/tests/check/libs/pbutils.c b/tests/check/libs/pbutils.c
index 45a7ef5..dda8d78 100644
--- a/tests/check/libs/pbutils.c
+++ b/tests/check/libs/pbutils.c
@@ -266,7 +266,7 @@
   "audio/x-wms", "audio/x-voxware", "audio/x-xi", "video/sp5x", "video/vivo",
   "video/x-4xm", "video/x-apple-video", "video/x-camtasia",
   "video/x-cdxa", "video/x-cinepak", "video/x-cirrus-logic-accupak",
-  "video/x-compressed-yuv", "video/x-dirac", "subpicture/x-dvd",
+  "video/x-compressed-yuv", "subpicture/x-dvd",
   "video/x-ffv", "video/x-flash-screen", "video/x-flash-video",
   "video/x-h261", "video/x-huffyuv", "video/x-intel-h263", "video/x-jpeg",
   "video/x-mjpeg", "video/x-mjpeg-b", "video/mpegts", "video/x-mng",
@@ -310,6 +310,8 @@
   "video/mpeg, mpegversion=(int)4, systemstream=(boolean)FALSE",
   "video/mpeg, mpegversion=(int)99, systemstream=(boolean)TRUE",
   "video/mpeg, mpegversion=(int)99, systemstream=(boolean)FALSE",
+  "video/mpeg, mpegversion=(int)4, systemstream=(boolean)FALSE, profile=main",
+  "video/mpeg, mpegversion=(int)4, systemstream=(boolean)FALSE, profile=adsfad",
   "video/mpeg",
   "video/x-indeo, indeoversion=(int)3",
   "video/x-indeo, indeoversion=(int)5",
@@ -324,6 +326,12 @@
   "audio/x-wma, wmaversion=(int)3",
   "audio/x-wma, wmaversion=(int)99",
   "audio/x-wma",
+  "video/x-dirac",
+  "video/x-dirac, profile=(string)vc2-low-delay",
+  "video/x-dirac, profile=(string)vc2-simple",
+  "video/x-dirac, profile=(string)vc2-main",
+  "video/x-dirac, profile=(string)main",
+  "video/x-dirac, profile=(string)czvja",
   "video/x-divx, divxversion=(int)3",
   "video/x-divx, divxversion=(int)4",
   "video/x-divx, divxversion=(int)5",
@@ -333,10 +341,16 @@
   "video/x-svq, svqversion=(int)3",
   "video/x-svq, svqversion=(int)99",
   "video/x-svq",
+  "video/x-h265, profile=(string)main",
+  "video/x-h265, profile=(string)xafasdf",
+  "video/x-h265",
   "video/x-h264, variant=(string)itu",
   "video/x-h264, variant=(string)videosoft",
   "video/x-h264, variant=(string)foobar",
   "video/x-h264",
+  "video/x-h264, profile=(string)foobar",
+  "video/x-h264, profile=(string)high-4:4:4-intra",
+  "video/x-h264, profile=(string)high",
   "video/x-h263, variant=(string)itu",
   "video/x-h263, variant=(string)lead",
   "video/x-h263, variant=(string)microsoft",
@@ -406,14 +420,17 @@
     desc = gst_pb_utils_get_codec_description (caps);
     fail_unless (desc != NULL);
     GST_LOG (" - codec   : %s", desc);
+    fail_unless (g_utf8_validate (desc, -1, NULL));
     g_free (desc);
     desc = gst_pb_utils_get_decoder_description (caps);
     fail_unless (desc != NULL);
     GST_LOG (" - decoder : %s", desc);
+    fail_unless (g_utf8_validate (desc, -1, NULL));
     g_free (desc);
     desc = gst_pb_utils_get_encoder_description (caps);
     fail_unless (desc != NULL);
     GST_LOG (" - encoder : %s", desc);
+    fail_unless (g_utf8_validate (desc, -1, NULL));
     g_free (desc);
     gst_caps_unref (caps);
   }
diff --git a/tests/check/libs/rtp.c b/tests/check/libs/rtp.c
index 2c0ffdf..77b3d19 100644
--- a/tests/check/libs/rtp.c
+++ b/tests/check/libs/rtp.c
@@ -757,11 +757,203 @@
   /* close and validate */
   gst_rtcp_buffer_unmap (&rtcp);
   fail_unless (gst_rtcp_buffer_validate (buf) == TRUE);
+  fail_unless (gst_rtcp_buffer_validate_reduced (buf) == TRUE);
   gst_buffer_unref (buf);
 }
 
 GST_END_TEST;
 
+GST_START_TEST (test_rtcp_reduced_buffer)
+{
+  GstBuffer *buf;
+  GstRTCPPacket packet;
+  GstRTCPBuffer rtcp = { NULL, };
+  gsize offset;
+  gsize maxsize;
+
+  buf = gst_rtcp_buffer_new (1400);
+  fail_unless (buf != NULL);
+  fail_unless_equals_int (gst_buffer_get_sizes (buf, &offset, &maxsize), 0);
+  fail_unless_equals_int (offset, 0);
+  fail_unless_equals_int (maxsize, 1400);
+
+  gst_rtcp_buffer_map (buf, GST_MAP_READWRITE, &rtcp);
+
+  fail_unless (gst_rtcp_buffer_validate (buf) == FALSE);
+  fail_unless (gst_rtcp_buffer_get_first_packet (&rtcp, &packet) == FALSE);
+  fail_unless (gst_rtcp_buffer_get_packet_count (&rtcp) == 0);
+
+  /* add an SR packet */
+  fail_unless (gst_rtcp_buffer_add_packet (&rtcp, GST_RTCP_TYPE_PSFB,
+          &packet) == TRUE);
+
+  /* close and validate */
+  gst_rtcp_buffer_unmap (&rtcp);
+  fail_unless (gst_rtcp_buffer_validate (buf) == FALSE);
+  fail_unless (gst_rtcp_buffer_validate_reduced (buf) == TRUE);
+  gst_buffer_unref (buf);
+}
+
+GST_END_TEST;
+
+
+GST_START_TEST (test_rtcp_validate_with_padding)
+{
+  /* Compound packet with padding in the last packet. Padding is included in
+   * the length of the last packet. */
+  guint8 rtcp_pkt[] = {
+    0x80, 0xC9, 0x00, 0x07, /* Type RR, length = 7 */
+    0x97, 0x6d, 0x21, 0x6a,
+    0x4d, 0x16, 0xaf, 0x14,
+    0x10, 0x1f, 0xd9, 0x91,
+    0x0f, 0xb7, 0x50, 0x88,
+    0x3b, 0x79, 0x31, 0x50,
+    0xbe, 0x19, 0x12, 0xa8,
+    0xbb, 0xce, 0x9e, 0x3e,
+    0xA0, 0xCA, 0x00, 0x0A, /* P=1, Type SDES, length = 10 (includes padding) */
+    0x97, 0x6d, 0x21, 0x6a,
+    0x01, 0x0F, 0x00, 0x00, /* Type 1 (CNAME), length 15 */
+    0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00,
+    0x00, 0x02, 0x09, 0x00, /* Type 2 (NAME), length 9 */
+    0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, /* Type 0 (no length, 2 unused bytes) */
+    0x00, 0x00, 0x00, 0x04  /* RTCP padding */
+  };
+
+  fail_unless (gst_rtcp_buffer_validate_data (rtcp_pkt, sizeof (rtcp_pkt)));
+}
+GST_END_TEST;
+
+GST_START_TEST (test_rtcp_validate_with_padding_wrong_padlength)
+{
+  /* Compound packet with padding in the last packet. Padding is included in
+   * the length of the last packet. */
+  guint8 rtcp_pkt[] = {
+    0x80, 0xC9, 0x00, 0x07, /* Type RR, length = 7 */
+    0x97, 0x6d, 0x21, 0x6a,
+    0x4d, 0x16, 0xaf, 0x14,
+    0x10, 0x1f, 0xd9, 0x91,
+    0x0f, 0xb7, 0x50, 0x88,
+    0x3b, 0x79, 0x31, 0x50,
+    0xbe, 0x19, 0x12, 0xa8,
+    0xbb, 0xce, 0x9e, 0x3e,
+    0xA0, 0xCA, 0x00, 0x0A, /* P=1, Type SDES, length = 10 (includes padding) */
+    0x97, 0x6d, 0x21, 0x6a,
+    0x01, 0x0F, 0x00, 0x00, /* Type 1 (CNAME), length 15 */
+    0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00,
+    0x00, 0x02, 0x09, 0x00, /* Type 2 (NAME), length 9 */
+    0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, /* Type 0 (no length, 2 unused bytes) */
+    0x00, 0x00, 0x00, 0x03  /* RTCP padding (wrong length) */
+  };
+
+  fail_if (gst_rtcp_buffer_validate_data (rtcp_pkt, sizeof (rtcp_pkt)));
+}
+GST_END_TEST;
+
+GST_START_TEST (test_rtcp_validate_with_padding_excluded_from_length)
+{
+  /* Compound packet with padding in the last packet. Padding is not included
+   * in the length. */
+  guint8 rtcp_pkt[] = {
+    0x80, 0xC9, 0x00, 0x07, /* Type RR, length = 7 */
+    0x97, 0x6d, 0x21, 0x6a,
+    0x4d, 0x16, 0xaf, 0x14,
+    0x10, 0x1f, 0xd9, 0x91,
+    0x0f, 0xb7, 0x50, 0x88,
+    0x3b, 0x79, 0x31, 0x50,
+    0xbe, 0x19, 0x12, 0xa8,
+    0xbb, 0xce, 0x9e, 0x3e,
+    0xA0, 0xCA, 0x00, 0x09, /* P=1, Type SDES, length = 9 (excludes padding) */
+    0x97, 0x6d, 0x21, 0x6a,
+    0x01, 0x0F, 0x00, 0x00, /* Type 1 (CNAME), length 15 */
+    0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00,
+    0x00, 0x02, 0x09, 0x00, /* Type 2 (NAME), length 9 */
+    0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, /* Type 0 (no length, 2 unused bytes) */
+    0x00, 0x00, 0x00, 0x04  /* RTCP padding */
+  };
+
+  fail_if (gst_rtcp_buffer_validate_data (rtcp_pkt, sizeof (rtcp_pkt)));
+}
+GST_END_TEST;
+
+GST_START_TEST (test_rtcp_validate_with_padding_set_in_first_packet)
+{
+  /* Compound packet with padding in the last packet but with the pad
+     bit set on first packet */
+  guint8 rtcp_pkt[] = {
+    0xA0, 0xC9, 0x00, 0x07, /* P=1, Type RR, length = 7 */
+    0x97, 0x6d, 0x21, 0x6a,
+    0x4d, 0x16, 0xaf, 0x14,
+    0x10, 0x1f, 0xd9, 0x91,
+    0x0f, 0xb7, 0x50, 0x88,
+    0x3b, 0x79, 0x31, 0x50,
+    0xbe, 0x19, 0x12, 0xa8,
+    0xbb, 0xce, 0x9e, 0x3e,
+    0x80, 0xCA, 0x00, 0x0a, /* Type SDES, length = 10 (include padding) */
+    0x97, 0x6d, 0x21, 0x6a,
+    0x01, 0x0F, 0x00, 0x00, /* Type 1 (CNAME), length 15 */
+    0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00,
+    0x00, 0x02, 0x09, 0x00, /* Type 2 (NAME), length 9 */
+    0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, /* Type 0 (no length, 2 unused bytes) */
+    0x00, 0x00, 0x00, 0x04  /* RTCP padding */
+  };
+
+  fail_if (gst_rtcp_buffer_validate_data (rtcp_pkt, sizeof (rtcp_pkt)));
+}
+GST_END_TEST;
+
+GST_START_TEST (test_rtcp_validate_reduced_without_padding)
+{
+  /* Reduced size packet without padding */
+  guint8 rtcp_pkt[] = {
+    0x80, 0xcd, 0x00, 0x07, /* Type FB, length = 8 */
+    0x97, 0x6d, 0x21, 0x6a,
+    0x4d, 0x16, 0xaf, 0x14,
+    0x10, 0x1f, 0xd9, 0x91,
+    0x0f, 0xb7, 0x50, 0x88,
+    0x3b, 0x79, 0x31, 0x50,
+    0xbe, 0x19, 0x12, 0xa8,
+    0xbb, 0xce, 0x9e, 0x3e,
+  };
+
+  fail_unless (gst_rtcp_buffer_validate_data_reduced (rtcp_pkt, sizeof (rtcp_pkt)));
+}
+GST_END_TEST;
+
+GST_START_TEST (test_rtcp_validate_reduced_with_padding)
+{
+  /* Reduced size packet with padding. */
+  guint8 rtcp_pkt[] = {
+    0xA0, 0xcd, 0x00, 0x08, /* P=1, Type FB, length = 8 */
+    0x97, 0x6d, 0x21, 0x6a,
+    0x4d, 0x16, 0xaf, 0x14,
+    0x10, 0x1f, 0xd9, 0x91,
+    0x0f, 0xb7, 0x50, 0x88,
+    0x3b, 0x79, 0x31, 0x50,
+    0xbe, 0x19, 0x12, 0xa8,
+    0xbb, 0xce, 0x9e, 0x3e,
+    0x00, 0x00, 0x00, 0x04  /* RTCP padding */
+  };
+
+  fail_if (gst_rtcp_buffer_validate_data_reduced (rtcp_pkt, sizeof (rtcp_pkt)));
+}
+GST_END_TEST;
+
 GST_START_TEST (test_rtp_ntp64_extension)
 {
   GstBuffer *buf;
@@ -992,6 +1184,13 @@
   tcase_add_test (tc_chain, test_rtp_seqnum_compare);
 
   tcase_add_test (tc_chain, test_rtcp_buffer);
+  tcase_add_test (tc_chain, test_rtcp_reduced_buffer);
+  tcase_add_test (tc_chain, test_rtcp_validate_with_padding);
+  tcase_add_test (tc_chain, test_rtcp_validate_with_padding_wrong_padlength);
+  tcase_add_test (tc_chain, test_rtcp_validate_with_padding_excluded_from_length);
+  tcase_add_test (tc_chain, test_rtcp_validate_with_padding_set_in_first_packet);
+  tcase_add_test (tc_chain, test_rtcp_validate_reduced_without_padding);
+  tcase_add_test (tc_chain, test_rtcp_validate_reduced_with_padding);
   tcase_add_test (tc_chain, test_rtp_ntp64_extension);
   tcase_add_test (tc_chain, test_rtp_ntp56_extension);
 
@@ -1004,19 +1203,4 @@
   return s;
 }
 
-int
-main (int argc, char **argv)
-{
-  int nf;
-
-  Suite *s = rtp_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;
-}
+GST_CHECK_MAIN (rtp);
diff --git a/tests/check/libs/rtpbasedepayload.c b/tests/check/libs/rtpbasedepayload.c
index 2794487..32d967a 100644
--- a/tests/check/libs/rtpbasedepayload.c
+++ b/tests/check/libs/rtpbasedepayload.c
@@ -59,8 +59,8 @@
 
 static GstBuffer *gst_rtp_dummy_depay_process (GstRTPBaseDepayload * depayload,
     GstBuffer * buf);
-static gboolean gst_rtp_dummy_depay_set_caps (GstRTPBaseDepayload *filter,
-    GstCaps *caps);
+static gboolean gst_rtp_dummy_depay_set_caps (GstRTPBaseDepayload * filter,
+    GstCaps * caps);
 
 static GstStaticPadTemplate gst_rtp_dummy_depay_sink_template =
 GST_STATIC_PAD_TEMPLATE ("sink",
@@ -113,8 +113,8 @@
   guint i;
 
   GST_LOG ("depayloading buffer pts=%" GST_TIME_FORMAT " offset=%"
-  G_GUINT64_FORMAT " memories=%d", GST_TIME_ARGS (GST_BUFFER_PTS(buf)),
-  GST_BUFFER_OFFSET(buf), gst_buffer_n_memory (buf));
+      G_GUINT64_FORMAT " memories=%d", GST_TIME_ARGS (GST_BUFFER_PTS (buf)),
+      GST_BUFFER_OFFSET (buf), gst_buffer_n_memory (buf));
 
   for (i = 0; i < gst_buffer_n_memory (buf); i++) {
     GstMemory *mem = gst_buffer_get_memory (buf, 0);
@@ -134,8 +134,8 @@
 
   GST_LOG ("depayloaded buffer pts=%" GST_TIME_FORMAT " offset=%"
       G_GUINT64_FORMAT " rtptime=%" G_GUINT32_FORMAT " memories=%d",
-      GST_TIME_ARGS (GST_BUFFER_PTS(outbuf)),
-      GST_BUFFER_OFFSET(outbuf), rtptime, gst_buffer_n_memory (buf));
+      GST_TIME_ARGS (GST_BUFFER_PTS (outbuf)),
+      GST_BUFFER_OFFSET (outbuf), rtptime, gst_buffer_n_memory (buf));
 
   for (i = 0; i < gst_buffer_n_memory (buf); i++) {
     GstMemory *mem = gst_buffer_get_memory (buf, 0);
@@ -149,7 +149,7 @@
 }
 
 static gboolean
-gst_rtp_dummy_depay_set_caps (GstRTPBaseDepayload *filter, GstCaps *caps)
+gst_rtp_dummy_depay_set_caps (GstRTPBaseDepayload * filter, GstCaps * caps)
 {
   GstEvent *event;
   event = gst_event_new_caps (caps);
@@ -171,7 +171,8 @@
 
 typedef struct State State;
 
-struct State {
+struct State
+{
   GstElement *element;
   GstPad *sinkpad;
   GstPad *srcpad;
@@ -186,7 +187,8 @@
   return gst_pad_event_default (pad, noparent, event);
 }
 
-static void drop_events (void)
+static void
+drop_events (void)
 {
   while (events != NULL) {
     gst_event_unref (GST_EVENT (events->data));
@@ -194,13 +196,14 @@
   }
 }
 
-static void validate_events_received (guint received)
+static void
+validate_events_received (guint received)
 {
   fail_unless_equals_int (g_list_length (events), received);
 }
 
-static void validate_event (guint index, const gchar *name,
-    const gchar *field, ...)
+static void
+validate_event (guint index, const gchar * name, const gchar * field, ...)
 {
   GstEvent *event;
   va_list var_args;
@@ -250,6 +253,11 @@
       const GstSegment *segment;
       gst_event_parse_segment (event, &segment);
       fail_unless_equals_uint64 (segment->rate, expected);
+    } else if (!g_strcmp0 (field, "base")) {
+      GstClockTime expected = va_arg (var_args, GstClockTime);
+      const GstSegment *segment;
+      gst_event_parse_segment (event, &segment);
+      fail_unless_equals_uint64 (segment->base, expected);
     } else if (!g_strcmp0 (field, "media-type")) {
       const gchar *expected = va_arg (var_args, const gchar *);
       GstCaps *caps;
@@ -262,33 +270,42 @@
       GstCaps *caps;
       GstClockTime start;
       gst_event_parse_caps (event, &caps);
-      fail_unless (gst_structure_get_clock_time (
-            gst_caps_get_structure (caps, 0), "npt-start", &start));
+      fail_unless (gst_structure_get_clock_time (gst_caps_get_structure (caps,
+                  0), "npt-start", &start));
       fail_unless_equals_uint64 (start, expected);
     } else if (!g_strcmp0 (field, "npt-stop")) {
       GstClockTime expected = va_arg (var_args, GstClockTime);
       GstCaps *caps;
       GstClockTime stop;
       gst_event_parse_caps (event, &caps);
-      fail_unless (gst_structure_get_clock_time (
-            gst_caps_get_structure (caps, 0), "npt-stop", &stop));
+      fail_unless (gst_structure_get_clock_time (gst_caps_get_structure (caps,
+                  0), "npt-stop", &stop));
       fail_unless_equals_uint64 (stop, expected);
     } else if (!g_strcmp0 (field, "play-speed")) {
       gdouble expected = va_arg (var_args, gdouble);
       GstCaps *caps;
       gdouble speed;
       gst_event_parse_caps (event, &caps);
-      fail_unless (gst_structure_get_double (
-            gst_caps_get_structure (caps, 0), "play-speed", &speed));
+      fail_unless (gst_structure_get_double (gst_caps_get_structure (caps, 0),
+              "play-speed", &speed));
       fail_unless (speed == expected);
     } else if (!g_strcmp0 (field, "play-scale")) {
       gdouble expected = va_arg (var_args, gdouble);
       GstCaps *caps;
       gdouble scale;
       gst_event_parse_caps (event, &caps);
-      fail_unless (gst_structure_get_double (
-            gst_caps_get_structure (caps, 0), "play-scale", &scale));
+      fail_unless (gst_structure_get_double (gst_caps_get_structure (caps, 0),
+              "play-scale", &scale));
       fail_unless (scale == expected);
+    } else if (!g_strcmp0 (field, "clock-base")) {
+      guint expected = va_arg (var_args, guint);
+      GstCaps *caps;
+      guint clock_base;
+      gst_event_parse_caps (event, &caps);
+      fail_unless (gst_structure_get_uint (gst_caps_get_structure (caps, 0),
+              "clock-base", &clock_base));
+      fail_unless (clock_base == expected);
+
     } else {
       fail ("test cannot validate unknown event field '%s'", field);
     }
@@ -302,8 +319,9 @@
 #define push_rtp_buffer_fails(state, error, field, ...) \
         push_rtp_buffer_full ((state), (error), (field), __VA_ARGS__)
 
-static void push_rtp_buffer_full (State *state, GstFlowReturn expected,
-    const gchar *field, ...)
+static void
+push_rtp_buffer_full (State * state, GstFlowReturn expected,
+    const gchar * field, ...)
 {
   GstBuffer *buf = gst_rtp_buffer_new_allocate (0, 0, 0);
   GstRTPBuffer rtp = { NULL };
@@ -360,8 +378,9 @@
 #define push_buffer(state, field, ...) \
 	push_buffer_full ((state), GST_FLOW_OK, (field), __VA_ARGS__)
 
-static void push_buffer_full (State *state, GstFlowReturn expected,
-    const gchar *field, ...)
+static void
+push_buffer_full (State * state, GstFlowReturn expected,
+    const gchar * field, ...)
 {
   GstBuffer *buf = gst_buffer_new_allocate (0, 0, 0);
   va_list var_args;
@@ -391,12 +410,14 @@
   fail_unless_equals_int (gst_pad_push (state->srcpad, buf), expected);
 }
 
-static void validate_buffers_received (guint received)
+static void
+validate_buffers_received (guint received)
 {
   fail_unless_equals_int (g_list_length (buffers), received);
 }
 
-static void validate_buffer (guint index, const gchar *field, ...)
+static void
+validate_buffer (guint index, const gchar * field, ...)
 {
   GstBuffer *buf;
   va_list var_args;
@@ -414,7 +435,7 @@
       fail_unless_equals_uint64 (GST_BUFFER_PTS (buf), pts);
     } else if (!g_strcmp0 (field, "offset")) {
       guint64 offset = va_arg (var_args, guint64);
-      fail_unless_equals_uint64 (GST_BUFFER_OFFSET(buf), offset);
+      fail_unless_equals_uint64 (GST_BUFFER_OFFSET (buf), offset);
     } else if (!g_strcmp0 (field, "discont")) {
       gboolean discont = va_arg (var_args, gboolean);
       if (discont) {
@@ -430,8 +451,8 @@
   va_end (var_args);
 }
 
-static State *create_depayloader (const gchar *caps_str,
-    const gchar *property, ...)
+static State *
+create_depayloader (const gchar * caps_str, const gchar * property, ...)
 {
   va_list var_args;
   GstCaps *caps;
@@ -468,14 +489,15 @@
   return state;
 }
 
-static void set_state (State *state, GstState new_state)
+static void
+set_state (State * state, GstState new_state)
 {
   fail_unless_equals_int (gst_element_set_state (state->element, new_state),
       GST_STATE_CHANGE_SUCCESS);
 }
 
-static void packet_lost (State *state, GstClockTime timestamp,
-    GstClockTime duration)
+static void
+packet_lost (State * state, GstClockTime timestamp, GstClockTime duration)
 {
   GstEvent *event;
   guint seqnum = 0x4243;
@@ -483,18 +505,17 @@
   guint retries = 42;
 
   event = gst_event_new_custom (GST_EVENT_CUSTOM_DOWNSTREAM,
-    gst_structure_new ("GstRTPPacketLost",
-      "seqnum", G_TYPE_UINT, seqnum,
-      "timestamp", G_TYPE_UINT64, timestamp,
-      "duration", G_TYPE_UINT64, duration,
-      "late", G_TYPE_BOOLEAN, late,
-      "retry", G_TYPE_UINT, retries,
-      NULL));;
+      gst_structure_new ("GstRTPPacketLost",
+          "seqnum", G_TYPE_UINT, seqnum,
+          "timestamp", G_TYPE_UINT64, timestamp,
+          "duration", G_TYPE_UINT64, duration,
+          "late", G_TYPE_BOOLEAN, late, "retry", G_TYPE_UINT, retries, NULL));
 
   fail_unless (gst_pad_push_event (state->srcpad, event));
 }
 
-static void reconfigure_caps (State *state, const gchar *caps_str)
+static void
+reconfigure_caps (State * state, const gchar * caps_str)
 {
   GstCaps *newcaps;
   GstEvent *event;
@@ -504,7 +525,8 @@
   fail_unless (gst_pad_push_event (state->srcpad, event));
 }
 
-static void flush_pipeline (State *state)
+static void
+flush_pipeline (State * state)
 {
   GstEvent *event;
   GstSegment segment;
@@ -517,7 +539,8 @@
   fail_unless (gst_pad_push_event (state->srcpad, event));
 }
 
-static void destroy_depayloader (State *state)
+static void
+destroy_depayloader (State * state)
 {
   gst_check_teardown_sink_pad (state->element);
   gst_check_teardown_src_pad (state->element);
@@ -549,50 +572,35 @@
 
   push_rtp_buffer (state,
       "pts", 0 * GST_SECOND,
-      "rtptime", G_GUINT64_CONSTANT (0x1234),
-      "seq", 0x4242,
-      NULL);
+      "rtptime", G_GUINT64_CONSTANT (0x1234), "seq", 0x4242, NULL);
 
   push_rtp_buffer (state,
       "pts", 1 * GST_SECOND,
       "rtptime", G_GUINT64_CONSTANT (0x1234) + 1 * DEFAULT_CLOCK_RATE,
-      "seq", 0x4242 + 1,
-      NULL);
+      "seq", 0x4242 + 1, NULL);
 
   set_state (state, GST_STATE_NULL);
 
   validate_buffers_received (2);
 
-  validate_buffer (0,
-      "pts", 0 * GST_SECOND,
-      "discont", FALSE,
-      NULL);
+  validate_buffer (0, "pts", 0 * GST_SECOND, "discont", FALSE, NULL);
 
-  validate_buffer (1,
-      "pts", 1 * GST_SECOND,
-      "discont", FALSE,
-      NULL);
+  validate_buffer (1, "pts", 1 * GST_SECOND, "discont", FALSE, NULL);
 
   validate_events_received (3);
 
-  validate_event (0, "stream-start",
-      NULL);
+  validate_event (0, "stream-start", NULL);
 
-  validate_event (1, "caps",
-      "media-type", "application/x-rtp",
-      NULL);
+  validate_event (1, "caps", "media-type", "application/x-rtp", NULL);
 
   validate_event (2, "segment",
       "time", G_GUINT64_CONSTANT (0),
-      "start", G_GUINT64_CONSTANT (0),
-      "stop", G_MAXUINT64,
-      NULL);
+      "start", G_GUINT64_CONSTANT (0), "stop", G_MAXUINT64, NULL);
 
   destroy_depayloader (state);
 }
 
 GST_END_TEST
-
 /* the intent with this test is to provide the depayloader with a buffer that
  * does not contain an RTP header. this makes it impossible for the depayloader
  * to depayload the incoming RTP packet, yet the stream-start and caps events
@@ -607,9 +615,7 @@
   set_state (state, GST_STATE_PLAYING);
 
   push_buffer (state,
-      "pts", 0 * GST_SECOND,
-      "offset", GST_BUFFER_OFFSET_NONE,
-      NULL);
+      "pts", 0 * GST_SECOND, "offset", GST_BUFFER_OFFSET_NONE, NULL);
 
   set_state (state, GST_STATE_NULL);
 
@@ -617,18 +623,14 @@
 
   validate_events_received (2);
 
-  validate_event (0, "stream-start",
-      NULL);
+  validate_event (0, "stream-start", NULL);
 
-  validate_event (1, "caps",
-      "media-type", "application/x-rtp",
-      NULL);
+  validate_event (1, "caps", "media-type", "application/x-rtp", NULL);
 
   destroy_depayloader (state);
 }
 
 GST_END_TEST
-
 /* validate what happens when a depayloader is provided with two RTP packets
  * sent after each other that do not have sequential sequence numbers. in this
  * case the depayloader should be able to depayload both first and the second
@@ -647,50 +649,35 @@
 
   push_rtp_buffer (state,
       "pts", 0 * GST_SECOND,
-      "rtptime", G_GUINT64_CONSTANT (0x43214321),
-      "seq", 0x4242,
-      NULL);
+      "rtptime", G_GUINT64_CONSTANT (0x43214321), "seq", 0x4242, NULL);
 
   push_rtp_buffer (state,
       "pts", 1 * GST_SECOND,
       "rtptime", G_GUINT64_CONSTANT (0x43214321) + 1 * DEFAULT_CLOCK_RATE,
-      "seq", 0x4242 + 2,
-      NULL);
+      "seq", 0x4242 + 2, NULL);
 
   set_state (state, GST_STATE_NULL);
 
   validate_buffers_received (2);
 
-  validate_buffer (0,
-      "pts", 0 * GST_SECOND,
-      "discont", FALSE,
-      NULL);
+  validate_buffer (0, "pts", 0 * GST_SECOND, "discont", FALSE, NULL);
 
-  validate_buffer (1,
-      "pts", 1 * GST_SECOND,
-      "discont", TRUE,
-      NULL);
+  validate_buffer (1, "pts", 1 * GST_SECOND, "discont", TRUE, NULL);
 
   validate_events_received (3);
 
-  validate_event (0, "stream-start",
-      NULL);
+  validate_event (0, "stream-start", NULL);
 
-  validate_event (1, "caps",
-      "media-type", "application/x-rtp",
-      NULL);
+  validate_event (1, "caps", "media-type", "application/x-rtp", NULL);
 
   validate_event (2, "segment",
       "time", G_GUINT64_CONSTANT (0),
-      "start", G_GUINT64_CONSTANT (0),
-      "stop", G_MAXUINT64,
-      NULL);
+      "start", G_GUINT64_CONSTANT (0), "stop", G_MAXUINT64, NULL);
 
   destroy_depayloader (state);
 }
 
 GST_END_TEST
-
 /* two RTP packets are pushed in this test, and while the sequence numbers are
  * sequential they are reversed. the expectation is that the depayloader will be
  * able to depayload the first RTP packet, but once the second RTP packet
@@ -707,45 +694,33 @@
 
   push_rtp_buffer (state,
       "pts", 0 * GST_SECOND,
-      "rtptime", G_GUINT64_CONSTANT (0x43214321),
-      "seq", 0x4242,
-      NULL);
+      "rtptime", G_GUINT64_CONSTANT (0x43214321), "seq", 0x4242, NULL);
 
   push_rtp_buffer (state,
       "pts", 1 * GST_SECOND,
       "rtptime", G_GUINT64_CONSTANT (0x43214321) + 1 * DEFAULT_CLOCK_RATE,
-      "seq", 0x4242 - 1,
-      NULL);
+      "seq", 0x4242 - 1, NULL);
 
   set_state (state, GST_STATE_NULL);
 
   validate_buffers_received (1);
 
-  validate_buffer (0,
-      "pts", 0 * GST_SECOND,
-      "discont", FALSE,
-      NULL);
+  validate_buffer (0, "pts", 0 * GST_SECOND, "discont", FALSE, NULL);
 
   validate_events_received (3);
 
-  validate_event (0, "stream-start",
-      NULL);
+  validate_event (0, "stream-start", NULL);
 
-  validate_event (1, "caps",
-      "media-type", "application/x-rtp",
-      NULL);
+  validate_event (1, "caps", "media-type", "application/x-rtp", NULL);
 
   validate_event (2, "segment",
       "time", G_GUINT64_CONSTANT (0),
-      "start", G_GUINT64_CONSTANT (0),
-      "stop", G_MAXUINT64,
-      NULL);
+      "start", G_GUINT64_CONSTANT (0), "stop", G_MAXUINT64, NULL);
 
   destroy_depayloader (state);
 }
 
 GST_END_TEST
-
 /* the intent of this test is to push two RTP packets that have reverse sequence
  * numbers that differ significantly. the depayloader will consider RTP packets
  * where the sequence numbers differ by more than 1000 to indicate that the
@@ -764,50 +739,35 @@
 
   push_rtp_buffer (state,
       "pts", 0 * GST_SECOND,
-      "rtptime", G_GUINT64_CONSTANT (0x43214321),
-      "seq", 0x4242,
-      NULL);
+      "rtptime", G_GUINT64_CONSTANT (0x43214321), "seq", 0x4242, NULL);
 
   push_rtp_buffer (state,
       "pts", 1 * GST_SECOND,
       "rtptime", G_GUINT64_CONSTANT (0x43214321) + 1 * DEFAULT_CLOCK_RATE,
-      "seq", 0x4242 - 1000,
-      NULL);
+      "seq", 0x4242 - 1000, NULL);
 
   set_state (state, GST_STATE_NULL);
 
   validate_buffers_received (2);
 
-  validate_buffer (0,
-      "pts", 0 * GST_SECOND,
-      "discont", FALSE,
-      NULL);
+  validate_buffer (0, "pts", 0 * GST_SECOND, "discont", FALSE, NULL);
 
-  validate_buffer (1,
-      "pts", 1 * GST_SECOND,
-      "discont", TRUE,
-      NULL);
+  validate_buffer (1, "pts", 1 * GST_SECOND, "discont", TRUE, NULL);
 
   validate_events_received (3);
 
-  validate_event (0, "stream-start",
-      NULL);
+  validate_event (0, "stream-start", NULL);
 
-  validate_event (1, "caps",
-      "media-type", "application/x-rtp",
-      NULL);
+  validate_event (1, "caps", "media-type", "application/x-rtp", NULL);
 
   validate_event (2, "segment",
       "time", G_GUINT64_CONSTANT (0),
-      "start", G_GUINT64_CONSTANT (0),
-      "stop", G_MAXUINT64,
-      NULL);
+      "start", G_GUINT64_CONSTANT (0), "stop", G_MAXUINT64, NULL);
 
   destroy_depayloader (state);
 }
 
 GST_END_TEST
-
 /* a depayloader that has not received any caps event will not be able to
  * process any incoming RTP packet. instead pushing an RTP packet should result
  * in the expected error.
@@ -822,9 +782,7 @@
 
   push_rtp_buffer_fails (state, GST_FLOW_NOT_NEGOTIATED,
       "pts", 0 * GST_SECOND,
-      "rtptime", G_GUINT64_CONSTANT (0x1234),
-      "seq", 0x4242,
-      NULL);
+      "rtptime", G_GUINT64_CONSTANT (0x1234), "seq", 0x4242, NULL);
 
   set_state (state, GST_STATE_NULL);
 
@@ -832,14 +790,12 @@
 
   validate_events_received (1);
 
-  validate_event (0, "stream-start",
-      NULL);
+  validate_event (0, "stream-start", NULL);
 
   destroy_depayloader (state);
 }
 
 GST_END_TEST
-
 /* a depayloader that receives the downstream event GstRTPPacketLost should
  * respond by emitting a gap event with the corresponding timestamp and
  * duration. the initial events are unaffected, but are succeeded by the added
@@ -855,57 +811,40 @@
 
   push_rtp_buffer (state,
       "pts", 0 * GST_SECOND,
-      "rtptime", G_GUINT64_CONSTANT (0x1234),
-      "seq", 0x4242,
-      NULL);
+      "rtptime", G_GUINT64_CONSTANT (0x1234), "seq", 0x4242, NULL);
 
   packet_lost (state, 1 * GST_SECOND, GST_SECOND);
 
   push_rtp_buffer (state,
       "pts", 2 * GST_SECOND,
       "rtptime", G_GUINT64_CONSTANT (0x1234) + 2 * DEFAULT_CLOCK_RATE,
-      "seq", 0x4242 + 2,
-      NULL);
+      "seq", 0x4242 + 2, NULL);
 
   set_state (state, GST_STATE_NULL);
 
   validate_buffers_received (2);
 
-  validate_buffer (0,
-      "pts", 0 * GST_SECOND,
-      "discont", FALSE,
-      NULL);
+  validate_buffer (0, "pts", 0 * GST_SECOND, "discont", FALSE, NULL);
 
-  validate_buffer (1,
-      "pts", 2 * GST_SECOND,
-      "discont", TRUE,
-      NULL);
+  validate_buffer (1, "pts", 2 * GST_SECOND, "discont", TRUE, NULL);
 
   validate_events_received (4);
 
-  validate_event (0, "stream-start",
-      NULL);
+  validate_event (0, "stream-start", NULL);
 
-  validate_event (1, "caps",
-      "media-type", "application/x-rtp",
-      NULL);
+  validate_event (1, "caps", "media-type", "application/x-rtp", NULL);
 
   validate_event (2, "segment",
       "time", G_GUINT64_CONSTANT (0),
-      "start", G_GUINT64_CONSTANT (0),
-      "stop", G_MAXUINT64,
-      NULL);
+      "start", G_GUINT64_CONSTANT (0), "stop", G_MAXUINT64, NULL);
 
   validate_event (3, "gap",
-      "timestamp", 1 * GST_SECOND,
-      "duration", GST_SECOND,
-      NULL);
+      "timestamp", 1 * GST_SECOND, "duration", GST_SECOND, NULL);
 
   destroy_depayloader (state);
 }
 
 GST_END_TEST
-
 /* a depayloader that receives identical caps events simply ignores the latter
  * events without propagating them downstream.
  */
@@ -919,46 +858,32 @@
 
   push_rtp_buffer (state,
       "pts", 0 * GST_SECOND,
-      "rtptime", G_GUINT64_CONSTANT (0x1234),
-      "seq", 0x4242,
-      NULL);
+      "rtptime", G_GUINT64_CONSTANT (0x1234), "seq", 0x4242, NULL);
 
   reconfigure_caps (state, "application/x-rtp");
 
   push_rtp_buffer (state,
       "pts", 1 * GST_SECOND,
       "rtptime", G_GUINT64_CONSTANT (0x1234) + 1 * DEFAULT_CLOCK_RATE,
-      "seq", 0x4242 + 1,
-      NULL);
+      "seq", 0x4242 + 1, NULL);
 
   set_state (state, GST_STATE_NULL);
 
   validate_buffers_received (2);
 
-  validate_buffer (0,
-      "pts", 0 * GST_SECOND,
-      "discont", FALSE,
-      NULL);
+  validate_buffer (0, "pts", 0 * GST_SECOND, "discont", FALSE, NULL);
 
-  validate_buffer (1,
-      "pts", 1 * GST_SECOND,
-      "discont", FALSE,
-      NULL);
+  validate_buffer (1, "pts", 1 * GST_SECOND, "discont", FALSE, NULL);
 
   validate_events_received (3);
 
-  validate_event (0, "stream-start",
-      NULL);
+  validate_event (0, "stream-start", NULL);
 
-  validate_event (1, "caps",
-      "media-type", "application/x-rtp",
-      NULL);
+  validate_event (1, "caps", "media-type", "application/x-rtp", NULL);
 
   validate_event (2, "segment",
       "time", G_GUINT64_CONSTANT (0),
-      "start", G_GUINT64_CONSTANT (0),
-      "stop", G_MAXUINT64,
-      NULL);
+      "start", G_GUINT64_CONSTANT (0), "stop", G_MAXUINT64, NULL);
 
   destroy_depayloader (state);
 }
@@ -981,9 +906,7 @@
 
   push_rtp_buffer (state,
       "pts", 0 * GST_SECOND,
-      "rtptime", G_GUINT64_CONSTANT (0x1234),
-      "seq", 0x4242,
-      NULL);
+      "rtptime", G_GUINT64_CONSTANT (0x1234), "seq", 0x4242, NULL);
 
   reconfigure_caps (state,
       "application/x-rtp, npt-start=(guint64)1234, npt-stop=(guint64)4321");
@@ -993,61 +916,44 @@
   push_rtp_buffer (state,
       "pts", 1 * GST_SECOND,
       "rtptime", G_GUINT64_CONSTANT (0x1234) + 1 * DEFAULT_CLOCK_RATE,
-      "seq", 0x4242 + 1,
-      NULL);
+      "seq", 0x4242 + 1, NULL);
 
   set_state (state, GST_STATE_NULL);
 
   validate_buffers_received (2);
 
-  validate_buffer (0,
-      "pts", 0 * GST_SECOND,
-      "discont", FALSE,
-      NULL);
+  validate_buffer (0, "pts", 0 * GST_SECOND, "discont", FALSE, NULL);
 
-  validate_buffer (1,
-      "pts", 1 * GST_SECOND,
-      "discont", FALSE,
-      NULL);
+  validate_buffer (1, "pts", 1 * GST_SECOND, "discont", FALSE, NULL);
 
   validate_events_received (7);
 
-  validate_event (0, "stream-start",
-      NULL);
+  validate_event (0, "stream-start", NULL);
 
-  validate_event (1, "caps",
-      "media-type", "application/x-rtp",
-      NULL);
+  validate_event (1, "caps", "media-type", "application/x-rtp", NULL);
 
   validate_event (2, "segment",
       "time", G_GUINT64_CONSTANT (0),
-      "start", G_GUINT64_CONSTANT (0),
-      "stop", G_MAXUINT64,
-      NULL);
+      "start", G_GUINT64_CONSTANT (0), "stop", G_MAXUINT64, NULL);
 
   validate_event (3, "caps",
       "media-type", "application/x-rtp",
       "npt-start", G_GUINT64_CONSTANT (1234),
-      "npt-stop", G_GUINT64_CONSTANT (4321),
-      NULL);
+      "npt-stop", G_GUINT64_CONSTANT (4321), NULL);
 
-  validate_event (4, "flush-start",
-      NULL);
+  validate_event (4, "flush-start", NULL);
 
-  validate_event (5, "flush-stop",
-      NULL);
+  validate_event (5, "flush-stop", NULL);
 
   validate_event (6, "segment",
       "time", G_GUINT64_CONSTANT (1234),
       "start", G_GUINT64_CONSTANT (0),
-      "stop", G_GUINT64_CONSTANT (4321 - 1234),
-      NULL);
+      "stop", G_GUINT64_CONSTANT (4321 - 1234), NULL);
 
   destroy_depayloader (state);
 }
 
 GST_END_TEST
-
 /* when a depayloader receives a new caps event with play-scale it should save
  * this rate as it should affect the next segment event being pushed by the
  * depayloader. a new segment event is not pushed by the depayloader until a
@@ -1064,74 +970,51 @@
 
   push_rtp_buffer (state,
       "pts", 0 * GST_SECOND,
-      "rtptime", G_GUINT64_CONSTANT (0x1234),
-      "seq", 0x4242,
-      NULL);
+      "rtptime", G_GUINT64_CONSTANT (0x1234), "seq", 0x4242, NULL);
 
-  reconfigure_caps (state,
-      "application/x-rtp, play-scale=(double)2.0");
+  reconfigure_caps (state, "application/x-rtp, play-scale=(double)2.0");
 
   flush_pipeline (state);
 
   push_rtp_buffer (state,
       "pts", 1 * GST_SECOND,
       "rtptime", G_GUINT64_CONSTANT (0x1234) + 1 * DEFAULT_CLOCK_RATE,
-      "seq", 0x4242 + 1,
-      NULL);
+      "seq", 0x4242 + 1, NULL);
 
   set_state (state, GST_STATE_NULL);
 
   validate_buffers_received (2);
 
-  validate_buffer (0,
-      "pts", 0 * GST_SECOND,
-      "discont", FALSE,
-      NULL);
+  validate_buffer (0, "pts", 0 * GST_SECOND, "discont", FALSE, NULL);
 
-  validate_buffer (1,
-      "pts", 1 * GST_SECOND,
-      "discont", FALSE,
-      NULL);
+  validate_buffer (1, "pts", 1 * GST_SECOND, "discont", FALSE, NULL);
 
   validate_events_received (7);
 
-  validate_event (0, "stream-start",
-      NULL);
+  validate_event (0, "stream-start", NULL);
 
-  validate_event (1, "caps",
-      "media-type", "application/x-rtp",
-      NULL);
+  validate_event (1, "caps", "media-type", "application/x-rtp", NULL);
 
   validate_event (2, "segment",
       "time", G_GUINT64_CONSTANT (0),
-      "start", G_GUINT64_CONSTANT (0),
-      "stop", G_MAXUINT64,
-      NULL);
+      "start", G_GUINT64_CONSTANT (0), "stop", G_MAXUINT64, NULL);
 
   validate_event (3, "caps",
-      "media-type", "application/x-rtp",
-      "play-scale", 2.0,
-      NULL);
+      "media-type", "application/x-rtp", "play-scale", 2.0, NULL);
 
-  validate_event (4, "flush-start",
-      NULL);
+  validate_event (4, "flush-start", NULL);
 
-  validate_event (5, "flush-stop",
-      NULL);
+  validate_event (5, "flush-stop", NULL);
 
   validate_event (6, "segment",
       "time", G_GUINT64_CONSTANT (0),
       "start", G_GUINT64_CONSTANT (0),
-      "stop", G_MAXUINT64,
-      "rate", 1.0,
-      "applied-rate", 2.0,
-      NULL);
+      "stop", G_MAXUINT64, "rate", 1.0, "applied-rate", 2.0, NULL);
 
   destroy_depayloader (state);
 }
 
 GST_END_TEST
-
 /* when a depayloader receives a new caps event with play-speed it should save
  * this rate as it should affect the next segment event being pushed by the
  * depayloader. a new segment event is not pushed by the depayloader until a
@@ -1148,75 +1031,117 @@
 
   push_rtp_buffer (state,
       "pts", 0 * GST_SECOND,
-      "rtptime", G_GUINT64_CONSTANT (0x1234),
-      "seq", 0x4242,
-      NULL);
+      "rtptime", G_GUINT64_CONSTANT (0x1234), "seq", 0x4242, NULL);
 
-  reconfigure_caps (state,
-      "application/x-rtp, play-speed=(double)2.0");
+  reconfigure_caps (state, "application/x-rtp, play-speed=(double)2.0");
 
   flush_pipeline (state);
 
   push_rtp_buffer (state,
       "pts", 1 * GST_SECOND,
       "rtptime", G_GUINT64_CONSTANT (0x1234) + 1 * DEFAULT_CLOCK_RATE,
-      "seq", 0x4242 + 1,
-      NULL);
+      "seq", 0x4242 + 1, NULL);
 
   set_state (state, GST_STATE_NULL);
 
   validate_buffers_received (2);
 
-  validate_buffer (0,
-      "pts", 0 * GST_SECOND,
-      "discont", FALSE,
-      NULL);
+  validate_buffer (0, "pts", 0 * GST_SECOND, "discont", FALSE, NULL);
 
-  validate_buffer (1,
-      "pts", 1 * GST_SECOND,
-      "discont", FALSE,
-      NULL);
+  validate_buffer (1, "pts", 1 * GST_SECOND, "discont", FALSE, NULL);
 
   validate_events_received (7);
 
-  validate_event (0, "stream-start",
-      NULL);
+  validate_event (0, "stream-start", NULL);
 
-  validate_event (1, "caps",
-      "media-type", "application/x-rtp",
-      NULL);
+  validate_event (1, "caps", "media-type", "application/x-rtp", NULL);
 
   validate_event (2, "segment",
       "time", G_GUINT64_CONSTANT (0),
-      "start", G_GUINT64_CONSTANT (0),
-      "stop", G_MAXUINT64,
-      NULL);
+      "start", G_GUINT64_CONSTANT (0), "stop", G_MAXUINT64, NULL);
 
   validate_event (3, "caps",
-      "media-type", "application/x-rtp",
-      "play-speed", 2.0,
-      NULL);
+      "media-type", "application/x-rtp", "play-speed", 2.0, NULL);
 
-  validate_event (4, "flush-start",
-      NULL);
+  validate_event (4, "flush-start", NULL);
 
-  validate_event (5, "flush-stop",
-      NULL);
+  validate_event (5, "flush-stop", NULL);
 
   validate_event (6, "segment",
       "time", G_GUINT64_CONSTANT (0),
       "start", G_GUINT64_CONSTANT (0),
-      "stop", G_MAXUINT64,
-      "rate", 2.0,
-      "applied-rate", 1.0,
-      NULL);
+      "stop", G_MAXUINT64, "rate", 2.0, "applied-rate", 1.0, NULL);
 
   destroy_depayloader (state);
 }
 
 GST_END_TEST
+/* when a depayloader receives new caps events with npt-start, npt-stop and
+ * clock-base it should save these timestamps as they should affect the next
+ * segment event being pushed by the depayloader. the produce segment should
+ * make the positon of the stream reflect the postion form clock-base instead
+ * of reflecting the running time (for RTSP).
+ */
+GST_START_TEST (rtp_base_depayload_clock_base_test)
+{
+  State *state;
 
-static Suite *
+  state = create_depayloader ("application/x-rtp", NULL);
+
+  set_state (state, GST_STATE_PLAYING);
+
+  push_rtp_buffer (state,
+      "pts", 0 * GST_SECOND,
+      "rtptime", G_GUINT64_CONSTANT (1234), "seq", 0x4242, NULL);
+
+  reconfigure_caps (state,
+      "application/x-rtp, npt-start=(guint64)1234, npt-stop=(guint64)4321, clock-base=(guint)1234");
+
+  flush_pipeline (state);
+
+  push_rtp_buffer (state,
+      "pts", 1 * GST_SECOND,
+      "rtptime", G_GUINT64_CONSTANT (1234) + 1 * DEFAULT_CLOCK_RATE,
+      "seq", 0x4242 + 1, NULL);
+
+  set_state (state, GST_STATE_NULL);
+
+  validate_buffers_received (2);
+
+  validate_buffer (0, "pts", 0 * GST_SECOND, "discont", FALSE, NULL);
+
+  validate_buffer (1, "pts", 1 * GST_SECOND, "discont", FALSE, NULL);
+
+  validate_events_received (7);
+
+  validate_event (0, "stream-start", NULL);
+
+  validate_event (1, "caps", "media-type", "application/x-rtp", NULL);
+
+  validate_event (2, "segment",
+      "time", G_GUINT64_CONSTANT (0),
+      "start", G_GUINT64_CONSTANT (0), "stop", G_MAXUINT64, NULL);
+
+  validate_event (3, "caps",
+      "media-type", "application/x-rtp",
+      "npt-start", G_GUINT64_CONSTANT (1234),
+      "npt-stop", G_GUINT64_CONSTANT (4321),
+      "clock-base", 1234, NULL);
+
+  validate_event (4, "flush-start", NULL);
+
+  validate_event (5, "flush-stop", NULL);
+
+  validate_event (6, "segment",
+      "time", G_GUINT64_CONSTANT (1234),
+      "start", GST_SECOND,
+      "stop", GST_SECOND + G_GUINT64_CONSTANT (4321 - 1234),
+      "base", GST_SECOND, NULL);
+
+  destroy_depayloader (state);
+}
+
+GST_END_TEST static Suite *
 rtp_basepayloading_suite (void)
 {
   Suite *s = suite_create ("rtp_base_depayloading_test");
@@ -1240,6 +1165,7 @@
   tcase_add_test (tc_chain, rtp_base_depayload_npt_test);
   tcase_add_test (tc_chain, rtp_base_depayload_play_scale_test);
   tcase_add_test (tc_chain, rtp_base_depayload_play_speed_test);
+  tcase_add_test (tc_chain, rtp_base_depayload_clock_base_test);
 
   return s;
 }
diff --git a/tests/check/libs/rtsp.c b/tests/check/libs/rtsp.c
index c817c3f..ba23f0c 100644
--- a/tests/check/libs/rtsp.c
+++ b/tests/check/libs/rtsp.c
@@ -1,6 +1,6 @@
 /* GStreamer unit tests for the RTSP support library
- *
  * Copyright (C) 2010 Andy Wingo <wingo@oblong.com>
+ * Copyright (C) 2015 Tim-Philipp Müller <tim@centricular.com>
  *
  * This library is free software; you can redistribute it and/or
  * modify it under the terms of the GNU Library General Public
@@ -24,8 +24,7 @@
 
 #include <gst/check/gstcheck.h>
 
-#include <gst/rtsp/gstrtspurl.h>
-#include <gst/rtsp/gstrtsprange.h>
+#include <gst/rtsp/rtsp.h>
 #include <string.h>
 
 GST_START_TEST (test_rtsp_url_basic)
@@ -539,6 +538,120 @@
 
 GST_END_TEST;
 
+GST_START_TEST (test_rtsp_message)
+{
+  GstRTSPMessage *msg;
+  GstRTSPResult res;
+  gchar *val = NULL;
+
+  res = gst_rtsp_message_new_request (&msg, GST_RTSP_PLAY,
+      "rtsp://foo.bar:8554/test");
+  fail_unless_equals_int (res, GST_RTSP_OK);
+
+  res = gst_rtsp_message_add_header (msg, GST_RTSP_HDR_CSEQ, "3");
+  fail_unless_equals_int (res, GST_RTSP_OK);
+  res = gst_rtsp_message_add_header (msg, GST_RTSP_HDR_SERVER, "GStreamer");
+  fail_unless_equals_int (res, GST_RTSP_OK);
+  res = gst_rtsp_message_add_header (msg, GST_RTSP_HDR_TRANSPORT,
+      "RTP/AVP/TCP;unicast;interleaved=0-1");
+  fail_unless_equals_int (res, GST_RTSP_OK);
+  res = gst_rtsp_message_add_header (msg, GST_RTSP_HDR_SESSION, "xnb_NpaKEc");
+  fail_unless_equals_int (res, GST_RTSP_OK);
+
+  res = gst_rtsp_message_add_header_by_name (msg, "FOO99-Version", "bar.0");
+  fail_unless_equals_int (res, GST_RTSP_OK);
+  res = gst_rtsp_message_add_header_by_name (msg, "Custom", "value");
+  fail_unless_equals_int (res, GST_RTSP_OK);
+  res = gst_rtsp_message_add_header_by_name (msg, "FOO99-Version", "bar.1");
+  fail_unless_equals_int (res, GST_RTSP_OK);
+  res = gst_rtsp_message_add_header_by_name (msg, "FOO99-Version", "bar.2");
+  fail_unless_equals_int (res, GST_RTSP_OK);
+
+  /* make sure fields added via enum work as well */
+  res = gst_rtsp_message_get_header_by_name (msg, "CSeq", &val, 0);
+  fail_unless_equals_int (res, GST_RTSP_OK);
+  fail_unless_equals_string (val, "3");
+  res = gst_rtsp_message_get_header_by_name (msg, "CSeq", &val, 1);
+  fail_unless_equals_int (res, GST_RTSP_ENOTIMPL);
+
+  res = gst_rtsp_message_get_header (msg, GST_RTSP_HDR_CSEQ, &val, 0);
+  fail_unless_equals_int (res, GST_RTSP_OK);
+  fail_unless_equals_string (val, "3");
+  res = gst_rtsp_message_get_header (msg, GST_RTSP_HDR_CSEQ, &val, 1);
+  fail_unless_equals_int (res, GST_RTSP_ENOTIMPL);
+
+  res = gst_rtsp_message_get_header_by_name (msg, "DoesNotExist", &val, 0);
+  fail_unless_equals_int (res, GST_RTSP_ENOTIMPL);
+
+  res = gst_rtsp_message_get_header_by_name (msg, "Custom", &val, 1);
+  fail_unless_equals_int (res, GST_RTSP_ENOTIMPL);
+  res = gst_rtsp_message_get_header_by_name (msg, "Custom", &val, 0);
+  fail_unless_equals_int (res, GST_RTSP_OK);
+  fail_unless_equals_string (val, "value");
+
+  res = gst_rtsp_message_get_header_by_name (msg, "FOO99-Version", &val, 3);
+  fail_unless_equals_int (res, GST_RTSP_ENOTIMPL);
+  res = gst_rtsp_message_get_header_by_name (msg, "FOO99-Version", &val, 1);
+  fail_unless_equals_int (res, GST_RTSP_OK);
+  fail_unless_equals_string (val, "bar.1");
+  res = gst_rtsp_message_get_header_by_name (msg, "FOO99-Version", &val, 2);
+  fail_unless_equals_int (res, GST_RTSP_OK);
+  fail_unless_equals_string (val, "bar.2");
+  res = gst_rtsp_message_get_header_by_name (msg, "FOO99-Version", &val, 0);
+  fail_unless_equals_int (res, GST_RTSP_OK);
+  fail_unless_equals_string (val, "bar.0");
+
+  res = gst_rtsp_message_remove_header_by_name (msg, "FOO99-Version", 3);
+  fail_unless_equals_int (res, GST_RTSP_ENOTIMPL);
+  res = gst_rtsp_message_remove_header_by_name (msg, "FOO99-Version", 1);
+  fail_unless_equals_int (res, GST_RTSP_OK);
+
+  res = gst_rtsp_message_get_header_by_name (msg, "FOO99-Version", &val, 2);
+  fail_unless_equals_int (res, GST_RTSP_ENOTIMPL);
+
+  /* 2 shifted to position 1 */
+  res = gst_rtsp_message_get_header_by_name (msg, "FOO99-Version", &val, 1);
+  fail_unless_equals_int (res, GST_RTSP_OK);
+  fail_unless_equals_string (val, "bar.2");
+  res = gst_rtsp_message_get_header_by_name (msg, "FOO99-Version", &val, 0);
+  fail_unless_equals_int (res, GST_RTSP_OK);
+  fail_unless_equals_string (val, "bar.0");
+
+  /* remove all headers for a name */
+  res = gst_rtsp_message_remove_header_by_name (msg, "FOO99-Version", -1);
+  fail_unless_equals_int (res, GST_RTSP_OK);
+  res = gst_rtsp_message_get_header_by_name (msg, "FOO99-Version", &val, 0);
+  fail_unless_equals_int (res, GST_RTSP_ENOTIMPL);
+
+  /* gst_rtsp_message_dump (msg); */
+
+  res = gst_rtsp_message_free (msg);
+  fail_unless_equals_int (res, GST_RTSP_OK);
+
+  /* === */
+
+  res = gst_rtsp_message_new_request (&msg, GST_RTSP_PLAY,
+      "rtsp://foo.bar:8554/test");
+  fail_unless_equals_int (res, GST_RTSP_OK);
+
+  res = gst_rtsp_message_add_header_by_name (msg, "CSeq", "3");
+  fail_unless_equals_int (res, GST_RTSP_OK);
+
+  res = gst_rtsp_message_get_header (msg, GST_RTSP_HDR_CSEQ, &val, 0);
+  fail_unless_equals_int (res, GST_RTSP_OK);
+  fail_unless_equals_string (val, "3");
+
+  val = NULL;
+  res = gst_rtsp_message_get_header_by_name (msg, "cseq", &val, 0);
+  fail_unless_equals_int (res, GST_RTSP_OK);
+  fail_unless_equals_string (val, "3");
+
+  res = gst_rtsp_message_free (msg);
+  fail_unless_equals_int (res, GST_RTSP_OK);
+}
+
+GST_END_TEST;
+
 static Suite *
 rtsp_suite (void)
 {
@@ -554,23 +667,9 @@
   tcase_add_test (tc_chain, test_rtsp_range_smpte);
   tcase_add_test (tc_chain, test_rtsp_range_clock);
   tcase_add_test (tc_chain, test_rtsp_range_convert);
+  tcase_add_test (tc_chain, test_rtsp_message);
 
   return s;
 }
 
-int
-main (int argc, char **argv)
-{
-  int nf;
-
-  Suite *s = rtsp_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;
-}
+GST_CHECK_MAIN (rtsp);
diff --git a/tests/check/libs/rtspconnection.c b/tests/check/libs/rtspconnection.c
index 3fc77ca..ee3c18c 100644
--- a/tests/check/libs/rtspconnection.c
+++ b/tests/check/libs/rtspconnection.c
@@ -817,19 +817,4 @@
   return s;
 }
 
-int
-main (int argc, char **argv)
-{
-  int nf;
-
-  Suite *s = rtspconnection_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;
-}
+GST_CHECK_MAIN (rtspconnection);
diff --git a/tests/check/libs/struct_ppc32.h b/tests/check/libs/struct_ppc32.h
index 1a67073..6f2a5e0 100644
--- a/tests/check/libs/struct_ppc32.h
+++ b/tests/check/libs/struct_ppc32.h
@@ -53,7 +53,7 @@
   {"GstRTSPMessage", sizeof (GstRTSPMessage), 44},
   {"GstRTSPRange", sizeof (GstRTSPRange), 8},
   {"GstRTSPTime", sizeof (GstRTSPTime), 16},
-  {"GstRTSPTimeRange", sizeof (GstRTSPTimeRange), 40},
+  {"GstRTSPTimeRange", sizeof (GstRTSPTimeRange), 88},
   {"GstRTSPTransport", sizeof (GstRTSPTransport), 92},
   {"GstRTSPUrl", sizeof (GstRTSPUrl), 32},
   {"GstRTSPWatchFuncs", sizeof (GstRTSPWatchFuncs), 48},
diff --git a/tests/check/libs/struct_ppc64.h b/tests/check/libs/struct_ppc64.h
new file mode 100644
index 0000000..e60f624
--- /dev/null
+++ b/tests/check/libs/struct_ppc64.h
@@ -0,0 +1,80 @@
+
+GstCheckABIStruct list[] = {
+  {"GstAppSinkCallbacks", sizeof (GstAppSinkCallbacks), 56},
+  {"GstAppSinkClass", sizeof (GstAppSinkClass), 864},
+  {"GstAppSink", sizeof (GstAppSink), 704},
+  {"GstAppSrcCallbacks", sizeof (GstAppSrcCallbacks), 56},
+  {"GstAppSrcClass", sizeof (GstAppSrcClass), 872},
+  {"GstAppSrc", sizeof (GstAppSrc), 688},
+  {"GstAudioCdSrcClass", sizeof (GstAudioCdSrcClass), 1040},
+  {"GstAudioCdSrc", sizeof (GstAudioCdSrc), 720},
+  {"GstAudioCdSrcTrack", sizeof (GstAudioCdSrcTrack), 48},
+  {"GstAudioClockClass", sizeof (GstAudioClockClass), 328},
+  {"GstAudioClock", sizeof (GstAudioClock), 240},
+  {"GstAudioFilterClass", sizeof (GstAudioFilterClass), 856},
+  {"GstAudioFilter", sizeof (GstAudioFilter), 928},
+  {"GstAudioSinkClass", sizeof (GstAudioSinkClass), 928},
+  {"GstAudioSink", sizeof (GstAudioSink), 792},
+  {"GstAudioSrcClass", sizeof (GstAudioSrcClass), 984},
+  {"GstAudioSrc", sizeof (GstAudioSrc), 800},
+  {"GstAudioBaseSinkClass", sizeof (GstAudioBaseSinkClass), 840},
+  {"GstAudioBaseSink", sizeof (GstAudioBaseSink), 752},
+  {"GstAudioBaseSrcClass", sizeof (GstAudioBaseSrcClass), 896},
+  {"GstAudioBaseSrc", sizeof (GstAudioBaseSrc), 760},
+  {"GstRTPBaseAudioPayloadClass", sizeof (GstRTPBaseAudioPayloadClass), 600},
+  {"GstRTPBaseAudioPayload", sizeof (GstRTPBaseAudioPayload), 600},
+  {"GstRTPBaseDepayloadClass", sizeof (GstRTPBaseDepayloadClass), 552},
+  {"GstRTPBaseDepayload", sizeof (GstRTPBaseDepayload), 456},
+  {"GstRTPBasePayloadClass", sizeof (GstRTPBasePayloadClass), 568},
+  {"GstRTPBasePayload", sizeof (GstRTPBasePayload), 536},
+  {"GstColorBalanceChannelClass", sizeof (GstColorBalanceChannelClass), 176},
+  {"GstColorBalanceChannel", sizeof (GstColorBalanceChannel), 72},
+  {"GstColorBalanceInterface", sizeof (GstColorBalanceInterface), 88},
+  {"GstDiscovererClass", sizeof (GstDiscovererClass), 200},
+  {"GstDiscoverer", sizeof (GstDiscoverer), 64},
+  {"GstFFTF32Complex", sizeof (GstFFTF32Complex), 8},
+  {"GstFFTF64Complex", sizeof (GstFFTF64Complex), 16},
+  {"GstFFTS16Complex", sizeof (GstFFTS16Complex), 4},
+  {"GstFFTS32Complex", sizeof (GstFFTS32Complex), 8},
+  {"GstNavigationInterface", sizeof (GstNavigationInterface), 24},
+  {"gst_riff_acid", sizeof (gst_riff_acid), 24},
+  {"gst_riff_dmlh", sizeof (gst_riff_dmlh), 4},
+  {"gst_riff_index_entry", sizeof (gst_riff_index_entry), 16},
+  {"gst_riff_strf_auds", sizeof (gst_riff_strf_auds), 16},
+  {"gst_riff_strf_iavs", sizeof (gst_riff_strf_iavs), 32},
+  {"gst_riff_strf_vids", sizeof (gst_riff_strf_vids), 40},
+  {"gst_riff_strh", sizeof (gst_riff_strh), 48},
+  {"GstAudioRingBufferClass", sizeof (GstAudioRingBufferClass), 312},
+  {"GstAudioRingBuffer", sizeof (GstAudioRingBuffer), 888},
+  {"GstAudioRingBufferSpec", sizeof (GstAudioRingBufferSpec), 400},
+  {"GstRTCPPacket", sizeof (GstRTCPPacket), 40},
+  {"GstRTPPayloadInfo", sizeof (GstRTPPayloadInfo), 80},
+  {"GstRTSPExtensionInterface", sizeof (GstRTSPExtensionInterface), 128},
+  {"GstRTSPMessage", sizeof (GstRTSPMessage), 88},
+  {"GstRTSPRange", sizeof (GstRTSPRange), 8},
+  {"GstRTSPTime", sizeof (GstRTSPTime), 16},
+  {"GstRTSPTimeRange", sizeof (GstRTSPTimeRange), 88},
+  {"GstRTSPTransport", sizeof (GstRTSPTransport), 120},
+  {"GstRTSPUrl", sizeof (GstRTSPUrl), 56},
+  {"GstRTSPWatchFuncs", sizeof (GstRTSPWatchFuncs), 96},
+  {"GstSDPAttribute", sizeof (GstSDPAttribute), 16},
+  {"GstSDPBandwidth", sizeof (GstSDPBandwidth), 16},
+  {"GstSDPConnection", sizeof (GstSDPConnection), 32},
+  {"GstSDPKey", sizeof (GstSDPKey), 16},
+  {"GstSDPMedia", sizeof (GstSDPMedia), 80},
+  {"GstSDPMessage", sizeof (GstSDPMessage), 184},
+  {"GstSDPOrigin", sizeof (GstSDPOrigin), 48},
+  {"GstSDPTime", sizeof (GstSDPTime), 24},
+  {"GstSDPZone", sizeof (GstSDPZone), 16},
+  {"GstStreamVolumeInterface", sizeof (GstStreamVolumeInterface), 16},
+  {"GstTagDemuxClass", sizeof (GstTagDemuxClass), 552},
+  {"GstTagDemux", sizeof (GstTagDemux), 304},
+  {"GstVideoFilterClass", sizeof (GstVideoFilterClass), 872},
+  {"GstVideoFilter", sizeof (GstVideoFilter), 920},
+  {"GstVideoOrientationInterface", sizeof (GstVideoOrientationInterface), 80},
+  {"GstVideoRectangle", sizeof (GstVideoRectangle), 16},
+  {"GstVideoSinkClass", sizeof (GstVideoSinkClass), 832},
+  {"GstVideoSink", sizeof (GstVideoSink), 712},
+  {"GstVideoOverlayInterface", sizeof (GstVideoOverlayInterface), 48},
+  {NULL, 0, 0}
+};
diff --git a/tests/check/libs/tag.c b/tests/check/libs/tag.c
index 38f18c3..16b5dcf 100644
--- a/tests/check/libs/tag.c
+++ b/tests/check/libs/tag.c
@@ -1811,19 +1811,4 @@
   return s;
 }
 
-int
-main (int argc, char **argv)
-{
-  int nf;
-
-  Suite *s = tag_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;
-}
+GST_CHECK_MAIN (tag);
diff --git a/tests/check/libs/video.c b/tests/check/libs/video.c
index d7cac06..5acf115 100644
--- a/tests/check/libs/video.c
+++ b/tests/check/libs/video.c
@@ -365,6 +365,17 @@
   return FALSE;
 }
 
+static gint
+get_num_formats (void)
+{
+  gint num_formats = 100;
+  fail_unless (gst_video_format_to_string (num_formats) == NULL);
+  while (gst_video_format_to_string (num_formats) == NULL)
+    --num_formats;
+  GST_INFO ("number of known video formats: %d", num_formats);
+  return num_formats + 1;
+}
+
 GST_START_TEST (test_video_formats_all)
 {
   GstStructure *s;
@@ -372,11 +383,7 @@
   GstCaps *caps;
   guint num, n, num_formats;
 
-  num_formats = 100;
-  fail_unless (gst_video_format_to_string (num_formats) == NULL);
-  while (gst_video_format_to_string (num_formats) == NULL)
-    --num_formats;
-  GST_INFO ("number of known video formats: %d", num_formats);
+  num_formats = get_num_formats ();
 
   caps = gst_caps_from_string ("video/x-raw, format=" GST_VIDEO_FORMATS_ALL);
   s = gst_caps_get_structure (caps, 0);
@@ -395,8 +402,8 @@
     fail_if (gst_video_format_from_string (fmt_str) ==
         GST_VIDEO_FORMAT_UNKNOWN);
   }
-  /* Take into account GST_VIDEO_FORMAT_ENCODED */
-  fail_unless_equals_int (num, num_formats - 1);
+  /* Take into account GST_VIDEO_FORMAT_ENCODED and UNKNOWN */
+  fail_unless_equals_int (num, num_formats - 2);
 
   gst_caps_unref (caps);
 }
@@ -405,16 +412,11 @@
 
 #define WIDTH 77
 #define HEIGHT 20
-
 GST_START_TEST (test_video_formats_pack_unpack)
 {
   guint n, num_formats;
 
-  num_formats = 100;
-  fail_unless (gst_video_format_to_string (num_formats) == NULL);
-  while (gst_video_format_to_string (num_formats) == NULL)
-    --num_formats;
-  GST_INFO ("number of known video formats: %d", num_formats);
+  num_formats = get_num_formats ();
 
   for (n = GST_VIDEO_FORMAT_ENCODED + 1; n < num_formats; ++n) {
     const GstVideoFormatInfo *vfinfo, *unpackinfo;
@@ -476,6 +478,8 @@
 }
 
 GST_END_TEST;
+#undef WIDTH
+#undef HEIGHT
 
 GST_START_TEST (test_video_formats)
 {
@@ -739,11 +743,15 @@
     GstCaps *caps, *caps2;
 
     caps = gst_caps_from_string (formats[i].tmpl_caps_string);
+    fail_unless (caps != NULL);
     gst_caps_set_simple (caps, "width", G_TYPE_INT, 2 * (i + 1), "height",
         G_TYPE_INT, i + 1, "framerate", GST_TYPE_FRACTION, 15, 1,
         "pixel-aspect-ratio", GST_TYPE_FRACTION, 1, 1,
         "interlace-mode", G_TYPE_STRING, "progressive",
-        "colorimetry", G_TYPE_STRING, "1:1:0:0", NULL);
+        "colorimetry", G_TYPE_STRING, "1:1:0:0",
+        "multiview-mode", G_TYPE_STRING, "mono",
+        "multiview-flags", GST_TYPE_VIDEO_MULTIVIEW_FLAGSET, 0,
+        GST_FLAG_SET_MASK_EXACT, NULL);
     g_assert (gst_caps_is_fixed (caps));
 
     GST_DEBUG ("testing caps: %" GST_PTR_FORMAT, caps);
@@ -756,10 +764,14 @@
 
     /* make sure they're serialised back correctly */
     caps2 = gst_video_info_to_caps (&vinfo);
-    fail_unless (caps != NULL);
-    fail_unless (gst_caps_is_equal (caps, caps2),
-        "caps [%" GST_PTR_FORMAT "] not equal to caps2 [%" GST_PTR_FORMAT "]",
-        caps, caps2);
+    fail_unless (caps2 != NULL);
+    if (!gst_caps_is_equal (caps, caps2)) {
+      gchar *caps1s = gst_caps_to_string (caps);
+      gchar *caps2s = gst_caps_to_string (caps2);
+      fail ("caps [%s] not equal to caps2 [%s]", caps1s, caps2s);
+      g_free (caps1s);
+      g_free (caps2s);
+    }
 
     gst_caps_unref (caps);
     gst_caps_unref (caps2);
@@ -768,6 +780,73 @@
 
 GST_END_TEST;
 
+GST_START_TEST (test_parse_caps_multiview)
+{
+  gint i, j;
+  GstVideoMultiviewMode modes[] = {
+    GST_VIDEO_MULTIVIEW_MODE_MONO,
+    GST_VIDEO_MULTIVIEW_MODE_LEFT,
+    GST_VIDEO_MULTIVIEW_MODE_RIGHT,
+    GST_VIDEO_MULTIVIEW_MODE_SIDE_BY_SIDE,
+    GST_VIDEO_MULTIVIEW_MODE_SIDE_BY_SIDE_QUINCUNX,
+    GST_VIDEO_MULTIVIEW_MODE_COLUMN_INTERLEAVED,
+    GST_VIDEO_MULTIVIEW_MODE_ROW_INTERLEAVED,
+    GST_VIDEO_MULTIVIEW_MODE_TOP_BOTTOM,
+    GST_VIDEO_MULTIVIEW_MODE_CHECKERBOARD,
+    GST_VIDEO_MULTIVIEW_MODE_FRAME_BY_FRAME,
+    GST_VIDEO_MULTIVIEW_MODE_MULTIVIEW_FRAME_BY_FRAME,
+    GST_VIDEO_MULTIVIEW_MODE_SEPARATED,
+  };
+  GstVideoMultiviewFlags flags[] = {
+    GST_VIDEO_MULTIVIEW_FLAGS_NONE,
+    GST_VIDEO_MULTIVIEW_FLAGS_RIGHT_VIEW_FIRST,
+    GST_VIDEO_MULTIVIEW_FLAGS_LEFT_FLIPPED,
+    GST_VIDEO_MULTIVIEW_FLAGS_LEFT_FLOPPED,
+    GST_VIDEO_MULTIVIEW_FLAGS_RIGHT_FLIPPED,
+    GST_VIDEO_MULTIVIEW_FLAGS_RIGHT_FLOPPED,
+    GST_VIDEO_MULTIVIEW_FLAGS_MIXED_MONO,
+    GST_VIDEO_MULTIVIEW_FLAGS_MIXED_MONO |
+        GST_VIDEO_MULTIVIEW_FLAGS_RIGHT_VIEW_FIRST,
+    GST_VIDEO_MULTIVIEW_FLAGS_MIXED_MONO |
+        GST_VIDEO_MULTIVIEW_FLAGS_LEFT_FLIPPED
+  };
+
+  for (i = 0; i < G_N_ELEMENTS (modes); i++) {
+    for (j = 0; j < G_N_ELEMENTS (flags); j++) {
+      GstVideoInfo vinfo;
+      GstCaps *caps;
+
+      gst_video_info_init (&vinfo);
+      gst_video_info_set_format (&vinfo, GST_VIDEO_FORMAT_I420, 320, 240);
+
+      GST_VIDEO_INFO_MULTIVIEW_MODE (&vinfo) = modes[i];
+      GST_VIDEO_INFO_MULTIVIEW_FLAGS (&vinfo) = flags[j];
+
+      caps = gst_video_info_to_caps (&vinfo);
+      fail_if (caps == NULL);
+      GST_LOG ("mview mode %d flags %x -> caps %" GST_PTR_FORMAT,
+          modes[i], flags[j], caps);
+
+      fail_unless (gst_video_info_from_caps (&vinfo, caps));
+
+      GST_LOG ("mview mode %d flags %x -> info mode %d flags %x",
+          modes[i], flags[j], GST_VIDEO_INFO_MULTIVIEW_MODE (&vinfo),
+          GST_VIDEO_INFO_MULTIVIEW_FLAGS (&vinfo));
+
+      fail_unless (GST_VIDEO_INFO_MULTIVIEW_MODE (&vinfo) == modes[i],
+          "Expected multiview mode %d got mode %d", modes[i],
+          GST_VIDEO_INFO_MULTIVIEW_MODE (&vinfo));
+      fail_unless (GST_VIDEO_INFO_MULTIVIEW_FLAGS (&vinfo) == flags[j],
+          "Expected multiview flags 0x%x got 0x%x", flags[j],
+          GST_VIDEO_INFO_MULTIVIEW_FLAGS (&vinfo));
+
+      gst_caps_unref (caps);
+    }
+  }
+}
+
+GST_END_TEST;
+
 GST_START_TEST (test_events)
 {
   GstEvent *e;
@@ -1693,12 +1772,877 @@
 
 GST_END_TEST;
 
+static guint8 *
+make_pixels (gint depth, gint width, gint height)
+{
+  guint32 color = 0xff000000;
+  gint i, j;
+
+  if (depth == 8) {
+    guint8 *pixels = g_malloc (width * height * 4);
+    for (i = 0; i < height; i++) {
+      for (j = 0; j < width; j++) {
+        pixels[(i * width + j) * 4 + 0] = ((color >> 24) & 0xff);
+        pixels[(i * width + j) * 4 + 1] = ((color >> 16) & 0xff);
+        pixels[(i * width + j) * 4 + 2] = ((color >> 8) & 0xff);
+        pixels[(i * width + j) * 4 + 3] = (color & 0xff);
+        color++;
+      }
+    }
+    return pixels;
+  } else {
+#define TO16(a) (((a)<<8)|(a))
+    guint16 *pixels = g_malloc (width * height * 8);
+    for (i = 0; i < height; i++) {
+      for (j = 0; j < width; j++) {
+        pixels[(i * width + j) * 4 + 0] = TO16 ((color >> 24) & 0xff);
+        pixels[(i * width + j) * 4 + 1] = TO16 ((color >> 16) & 0xff);
+        pixels[(i * width + j) * 4 + 2] = TO16 ((color >> 8) & 0xff);
+        pixels[(i * width + j) * 4 + 3] = TO16 (color & 0xff);
+        color++;
+      }
+    }
+#undef TO16
+    return (guint8 *) pixels;
+  }
+}
+
+#define HS(x,o) ((x)&hs[o])
+#define WS(x,o) ((x)&ws[o])
+#define IN(i,j,o) (in[(HS(i, o)*width + WS(j,o))*4+(o)] & mask[o])
+#define OUT(i,j,o) (out[((i)*width + (j))*4+o] & mask[o])
+static gint
+compare_frame (const GstVideoFormatInfo * finfo, gint depth, guint8 * outpixels,
+    guint8 * pixels, gint width, gint height)
+{
+  gint diff, i, j, k;
+  guint ws[4], hs[4], mask[4];
+
+  for (k = 0; k < 4; k++) {
+    hs[k] = G_MAXUINT << finfo->h_sub[(3 + k) % 4];
+    ws[k] = G_MAXUINT << finfo->w_sub[(3 + k) % 4];
+    mask[k] = G_MAXUINT << (depth - finfo->depth[(3 + k) % 4]);
+  }
+  diff = 0;
+  if (depth == 8) {
+    guint8 *in = pixels;
+    guint8 *out = outpixels;
+
+    for (i = 0; i < height; i++) {
+      for (j = 0; j < width; j++) {
+        for (k = 0; k < 4; k++) {
+          diff += IN (i, j, k) != OUT (i, j, k);
+        }
+      }
+    }
+  } else {
+    guint16 *in = (guint16 *) pixels;
+    guint16 *out = (guint16 *) outpixels;
+
+    for (i = 0; i < height; i++) {
+      for (j = 0; j < width; j++) {
+        for (k = 0; k < 4; k++) {
+          diff += IN (i, j, k) != OUT (i, j, k);
+        }
+      }
+    }
+  }
+  return diff;
+}
+
+#undef WS
+#undef HS
+#undef IN
+#undef OUT
+
+typedef struct
+{
+  GstVideoFormat infmt;
+  GstVideoFormat outfmt;
+  gint method;
+  gdouble convert_sec;
+} ConvertResult;
+
+#define SIGN(a,b) ((a) < (b) ? -1 : (a) > (b) ? 1 : 0)
+
+static gint
+compare_result (gconstpointer a, gconstpointer b)
+{
+  const ConvertResult *ap = a;
+  const ConvertResult *bp = b;
+
+  return SIGN (ap->convert_sec, bp->convert_sec);
+}
+
+#define UNPACK_FRAME(frame,dest,line,x,width)            \
+  (frame)->info.finfo->unpack_func ((frame)->info.finfo, \
+      (GST_VIDEO_FRAME_IS_INTERLACED (frame) ?           \
+        GST_VIDEO_PACK_FLAG_INTERLACED :                 \
+        GST_VIDEO_PACK_FLAG_NONE),                       \
+      dest, (frame)->data, (frame)->info.stride, x,      \
+      line, width)
+#define PACK_FRAME(frame,src,line,width)               \
+  (frame)->info.finfo->pack_func ((frame)->info.finfo, \
+      (GST_VIDEO_FRAME_IS_INTERLACED (frame) ?         \
+        GST_VIDEO_PACK_FLAG_INTERLACED :               \
+        GST_VIDEO_PACK_FLAG_NONE),                     \
+      src, 0, (frame)->data, (frame)->info.stride,     \
+      (frame)->info.chroma_site, line, width);
+
+GST_START_TEST (test_video_pack_unpack2)
+{
+  GstVideoFormat format;
+  GTimer *timer;
+  gint num_formats, i;
+  GArray *packarray, *unpackarray;
+
+#define WIDTH 320
+#define HEIGHT 240
+/* set to something larger to do benchmarks */
+#define TIME 0.01
+
+  timer = g_timer_new ();
+  packarray = g_array_new (FALSE, FALSE, sizeof (ConvertResult));
+  unpackarray = g_array_new (FALSE, FALSE, sizeof (ConvertResult));
+
+  num_formats = get_num_formats ();
+
+  GST_DEBUG ("pack/sec\t unpack/sec \tpack GB/sec\tunpack GB/sec\tformat");
+
+  for (format = GST_VIDEO_FORMAT_I420; format < num_formats; format++) {
+    GstVideoInfo info;
+    const GstVideoFormatInfo *finfo, *fuinfo;
+    GstBuffer *buffer;
+    GstVideoFrame frame;
+    gint k, stride, count, diff, depth;
+    guint8 *pixels, *outpixels;
+    gdouble elapsed;
+    gdouble unpack_sec, pack_sec;
+    ConvertResult res;
+
+    finfo = gst_video_format_get_info (format);
+    fail_unless (finfo != NULL);
+
+    if (GST_VIDEO_FORMAT_INFO_HAS_PALETTE (finfo))
+      continue;
+
+    fuinfo = gst_video_format_get_info (finfo->unpack_format);
+    fail_unless (fuinfo != NULL);
+
+    depth = GST_VIDEO_FORMAT_INFO_BITS (fuinfo);
+    fail_unless (depth == 8 || depth == 16);
+
+    pixels = make_pixels (depth, WIDTH, HEIGHT);
+    stride = WIDTH * (depth >> 1);
+
+    gst_video_info_set_format (&info, format, WIDTH, HEIGHT);
+    buffer = gst_buffer_new_and_alloc (info.size);
+    gst_video_frame_map (&frame, &info, buffer, GST_MAP_READWRITE);
+
+    /* pack the frame into the target format */
+    /* warmup */
+    PACK_FRAME (&frame, pixels, 0, WIDTH);
+
+    count = 0;
+    g_timer_start (timer);
+    while (TRUE) {
+      for (k = 0; k < HEIGHT; k += finfo->pack_lines) {
+        PACK_FRAME (&frame, pixels + k * stride, k, WIDTH);
+      }
+      count++;
+      elapsed = g_timer_elapsed (timer, NULL);
+      if (elapsed >= TIME)
+        break;
+    }
+    unpack_sec = count / elapsed;
+
+    res.infmt = format;
+    res.outfmt = finfo->unpack_format;
+    res.convert_sec = unpack_sec;
+    g_array_append_val (unpackarray, res);
+
+    outpixels = g_malloc0 (HEIGHT * stride);
+
+    /* unpack the frame */
+    /* warmup */
+    UNPACK_FRAME (&frame, outpixels, 0, 0, WIDTH);
+
+    count = 0;
+    g_timer_start (timer);
+    while (TRUE) {
+      for (k = 0; k < HEIGHT; k += finfo->pack_lines) {
+        UNPACK_FRAME (&frame, outpixels + k * stride, k, 0, WIDTH);
+      }
+      count++;
+      elapsed = g_timer_elapsed (timer, NULL);
+      if (elapsed >= TIME)
+        break;
+    }
+    pack_sec = count / elapsed;
+
+    res.outfmt = format;
+    res.infmt = finfo->unpack_format;
+    res.convert_sec = pack_sec;
+    g_array_append_val (packarray, res);
+
+    /* compare the frame */
+    diff = compare_frame (finfo, depth, outpixels, pixels, WIDTH, HEIGHT);
+
+    GST_DEBUG ("%f \t %f \t %f \t %f \t %s %d/%f", pack_sec, unpack_sec,
+        info.size * pack_sec, info.size * unpack_sec, finfo->name, count,
+        elapsed);
+
+    if (diff != 0) {
+      gst_util_dump_mem (outpixels, 128);
+      gst_util_dump_mem (pixels, 128);
+      fail_if (diff != 0);
+    }
+    gst_video_frame_unmap (&frame);
+    gst_buffer_unref (buffer);
+    g_free (pixels);
+    g_free (outpixels);
+  }
+
+  g_array_sort (packarray, compare_result);
+  for (i = 0; i < packarray->len; i++) {
+    ConvertResult *res = &g_array_index (packarray, ConvertResult, i);
+
+    GST_DEBUG ("%f pack/sec %s->%s", res->convert_sec,
+        gst_video_format_to_string (res->infmt),
+        gst_video_format_to_string (res->outfmt));
+  }
+
+  g_array_sort (unpackarray, compare_result);
+  for (i = 0; i < unpackarray->len; i++) {
+    ConvertResult *res = &g_array_index (unpackarray, ConvertResult, i);
+
+    GST_DEBUG ("%f unpack/sec %s->%s", res->convert_sec,
+        gst_video_format_to_string (res->infmt),
+        gst_video_format_to_string (res->outfmt));
+  }
+
+  g_timer_destroy (timer);
+  g_array_free (packarray, TRUE);
+  g_array_free (unpackarray, TRUE);
+}
+
+GST_END_TEST;
+#undef WIDTH
+#undef HEIGHT
+#undef TIME
+
+#define WIDTH 320
+#define HEIGHT 240
+#define TIME 0.1
+#define GET_LINE(l) (pixels + CLAMP (l, 0, HEIGHT-1) * WIDTH * 4)
+GST_START_TEST (test_video_chroma)
+{
+  guint8 *pixels;
+  guint n_lines;
+  gint i, j, k, offset, count;
+  gpointer lines[10];
+  GTimer *timer;
+  gdouble elapsed, subsample_sec;
+  GstVideoChromaSite sites[] = {
+    GST_VIDEO_CHROMA_SITE_NONE,
+    GST_VIDEO_CHROMA_SITE_H_COSITED,
+  };
+
+  timer = g_timer_new ();
+  pixels = make_pixels (8, WIDTH, HEIGHT);
+
+  for (k = 0; k < G_N_ELEMENTS (sites); k++) {
+    GstVideoChromaResample *resample;
+
+    resample = gst_video_chroma_resample_new (GST_VIDEO_CHROMA_METHOD_LINEAR,
+        sites[k], GST_VIDEO_CHROMA_FLAG_NONE, GST_VIDEO_FORMAT_AYUV, -1, -1);
+
+    gst_video_chroma_resample_get_info (resample, &n_lines, &offset);
+    fail_unless (n_lines < 10);
+
+    /* warmup */
+    for (j = 0; j < n_lines; j++)
+      lines[j] = GET_LINE (offset + j);
+    gst_video_chroma_resample (resample, lines, WIDTH);
+
+    count = 0;
+    g_timer_start (timer);
+    while (TRUE) {
+      for (i = 0; i < HEIGHT; i += n_lines) {
+        for (j = 0; j < n_lines; j++)
+          lines[j] = GET_LINE (i + offset + j);
+
+        gst_video_chroma_resample (resample, lines, WIDTH);
+      }
+      count++;
+      elapsed = g_timer_elapsed (timer, NULL);
+      if (elapsed >= TIME)
+        break;
+    }
+    subsample_sec = count / elapsed;
+    GST_DEBUG ("%f downsamples/sec  %d/%f", subsample_sec, count, elapsed);
+    gst_video_chroma_resample_free (resample);
+
+    resample = gst_video_chroma_resample_new (GST_VIDEO_CHROMA_METHOD_LINEAR,
+        sites[k], GST_VIDEO_CHROMA_FLAG_NONE, GST_VIDEO_FORMAT_AYUV, 1, 1);
+
+    gst_video_chroma_resample_get_info (resample, &n_lines, &offset);
+    fail_unless (n_lines < 10);
+
+    /* warmup */
+    for (j = 0; j < n_lines; j++)
+      lines[j] = GET_LINE (offset + j);
+    gst_video_chroma_resample (resample, lines, WIDTH);
+
+    count = 0;
+    g_timer_start (timer);
+    while (TRUE) {
+      for (i = 0; i < HEIGHT; i += n_lines) {
+        for (j = 0; j < n_lines; j++)
+          lines[j] = GET_LINE (i + offset + j);
+
+        gst_video_chroma_resample (resample, lines, WIDTH);
+      }
+      count++;
+      elapsed = g_timer_elapsed (timer, NULL);
+      if (elapsed >= TIME)
+        break;
+    }
+    subsample_sec = count / elapsed;
+    GST_DEBUG ("%f upsamples/sec  %d/%f", subsample_sec, count, elapsed);
+    gst_video_chroma_resample_free (resample);
+  }
+
+  g_free (pixels);
+  g_timer_destroy (timer);
+}
+
+GST_END_TEST;
+#undef WIDTH
+#undef HEIGHT
+#undef TIME
+
+GST_START_TEST (test_video_scaler)
+{
+  GstVideoScaler *scale;
+
+  scale = gst_video_scaler_new (GST_VIDEO_RESAMPLER_METHOD_LINEAR,
+      GST_VIDEO_SCALER_FLAG_NONE, 2, 10, 5, NULL);
+  gst_video_scaler_free (scale);
+
+  scale = gst_video_scaler_new (GST_VIDEO_RESAMPLER_METHOD_LINEAR,
+      GST_VIDEO_SCALER_FLAG_NONE, 2, 15, 5, NULL);
+  gst_video_scaler_free (scale);
+}
+
+GST_END_TEST;
+
+#define WIDTH 320
+#define HEIGHT 240
+#define TIME 0.01
+
+GST_START_TEST (test_video_color_convert)
+{
+  GstVideoFormat infmt, outfmt;
+  GTimer *timer;
+  gint num_formats, i;
+  GArray *array;
+
+  array = g_array_new (FALSE, FALSE, sizeof (ConvertResult));
+
+  timer = g_timer_new ();
+
+  num_formats = get_num_formats ();
+
+  for (infmt = GST_VIDEO_FORMAT_I420; infmt < num_formats; infmt++) {
+    GstVideoInfo ininfo;
+    GstVideoFrame inframe;
+    GstBuffer *inbuffer;
+
+    gst_video_info_set_format (&ininfo, infmt, WIDTH, HEIGHT);
+    inbuffer = gst_buffer_new_and_alloc (ininfo.size);
+    gst_buffer_memset (inbuffer, 0, 0, -1);
+    gst_video_frame_map (&inframe, &ininfo, inbuffer, GST_MAP_READ);
+
+    for (outfmt = GST_VIDEO_FORMAT_I420; outfmt < num_formats; outfmt++) {
+      GstVideoInfo outinfo;
+      GstVideoFrame outframe;
+      GstBuffer *outbuffer;
+      GstVideoConverter *convert;
+      gdouble elapsed;
+      gint count;
+      ConvertResult res;
+
+      gst_video_info_set_format (&outinfo, outfmt, WIDTH, HEIGHT);
+      outbuffer = gst_buffer_new_and_alloc (outinfo.size);
+      gst_video_frame_map (&outframe, &outinfo, outbuffer, GST_MAP_WRITE);
+
+      convert = gst_video_converter_new (&ininfo, &outinfo, NULL);
+      /* warmup */
+      gst_video_converter_frame (convert, &inframe, &outframe);
+
+      count = 0;
+      g_timer_start (timer);
+      while (TRUE) {
+        gst_video_converter_frame (convert, &inframe, &outframe);
+
+        count++;
+        elapsed = g_timer_elapsed (timer, NULL);
+        if (elapsed >= TIME)
+          break;
+      }
+
+      res.infmt = infmt;
+      res.outfmt = outfmt;
+      res.convert_sec = count / elapsed;
+
+      GST_DEBUG ("%f conversions/sec %s->%s, %d/%f", res.convert_sec,
+          gst_video_format_to_string (infmt),
+          gst_video_format_to_string (outfmt), count, elapsed);
+
+      g_array_append_val (array, res);
+
+      gst_video_converter_free (convert);
+
+      gst_video_frame_unmap (&outframe);
+      gst_buffer_unref (outbuffer);
+    }
+    gst_video_frame_unmap (&inframe);
+    gst_buffer_unref (inbuffer);
+  }
+
+  g_array_sort (array, compare_result);
+
+  for (i = 0; i < array->len; i++) {
+    ConvertResult *res = &g_array_index (array, ConvertResult, i);
+
+    GST_DEBUG ("%f conversions/sec %s->%s", res->convert_sec,
+        gst_video_format_to_string (res->infmt),
+        gst_video_format_to_string (res->outfmt));
+  }
+
+  g_array_free (array, TRUE);
+
+  g_timer_destroy (timer);
+}
+
+GST_END_TEST;
+#undef WIDTH
+#undef HEIGHT
+
+#define WIDTH_IN 320
+#define HEIGHT_IN 240
+#define WIDTH_OUT 400
+#define HEIGHT_OUT 300
+#define TIME 0.01
+
+GST_START_TEST (test_video_size_convert)
+{
+  GstVideoFormat infmt, outfmt;
+  GTimer *timer;
+  gint num_formats, i;
+  GArray *array;
+
+  array = g_array_new (FALSE, FALSE, sizeof (ConvertResult));
+
+  timer = g_timer_new ();
+
+  num_formats = get_num_formats ();
+
+  for (infmt = GST_VIDEO_FORMAT_I420; infmt < num_formats; infmt++) {
+    GstVideoInfo ininfo, outinfo;
+    GstVideoFrame inframe, outframe;
+    GstBuffer *inbuffer, *outbuffer;
+    GstVideoConverter *convert;
+    gdouble elapsed;
+    gint count, method;
+    ConvertResult res;
+
+    gst_video_info_set_format (&ininfo, infmt, WIDTH_IN, HEIGHT_IN);
+    inbuffer = gst_buffer_new_and_alloc (ininfo.size);
+    gst_buffer_memset (inbuffer, 0, 0, -1);
+    gst_video_frame_map (&inframe, &ininfo, inbuffer, GST_MAP_READ);
+
+    outfmt = infmt;
+    gst_video_info_set_format (&outinfo, outfmt, WIDTH_OUT, HEIGHT_OUT);
+    outbuffer = gst_buffer_new_and_alloc (outinfo.size);
+    gst_video_frame_map (&outframe, &outinfo, outbuffer, GST_MAP_WRITE);
+
+    for (method = 0; method < 4; method++) {
+      convert = gst_video_converter_new (&ininfo, &outinfo,
+          gst_structure_new ("options",
+              GST_VIDEO_CONVERTER_OPT_RESAMPLER_METHOD,
+              GST_TYPE_VIDEO_RESAMPLER_METHOD, method, NULL));
+
+      /* warmup */
+      gst_video_converter_frame (convert, &inframe, &outframe);
+
+      count = 0;
+      g_timer_start (timer);
+      while (TRUE) {
+        gst_video_converter_frame (convert, &inframe, &outframe);
+
+        count++;
+        elapsed = g_timer_elapsed (timer, NULL);
+        if (elapsed >= TIME)
+          break;
+      }
+
+      res.infmt = infmt;
+      res.outfmt = outfmt;
+      res.method = method;
+      res.convert_sec = count / elapsed;
+
+      GST_DEBUG ("%f resize/sec %s->%s, %d, %d/%f", res.convert_sec,
+          gst_video_format_to_string (infmt),
+          gst_video_format_to_string (outfmt), method, count, elapsed);
+
+      g_array_append_val (array, res);
+
+      gst_video_converter_free (convert);
+    }
+    gst_video_frame_unmap (&outframe);
+    gst_buffer_unref (outbuffer);
+    gst_video_frame_unmap (&inframe);
+    gst_buffer_unref (inbuffer);
+  }
+
+  g_array_sort (array, compare_result);
+
+  for (i = 0; i < array->len; i++) {
+    ConvertResult *res = &g_array_index (array, ConvertResult, i);
+
+    GST_DEBUG ("%f method %d, resize/sec %s->%s", res->convert_sec, res->method,
+        gst_video_format_to_string (res->infmt),
+        gst_video_format_to_string (res->outfmt));
+  }
+
+  g_array_free (array, TRUE);
+
+  g_timer_destroy (timer);
+}
+
+GST_END_TEST;
+#undef WIDTH
+#undef HEIGHT
+
+GST_START_TEST (test_video_convert)
+{
+  GstVideoInfo ininfo, outinfo;
+  GstVideoFrame inframe, outframe;
+  GstBuffer *inbuffer, *outbuffer;
+  GstVideoConverter *convert;
+
+  gst_video_info_set_format (&ininfo, GST_VIDEO_FORMAT_ARGB, 320, 240);
+  inbuffer = gst_buffer_new_and_alloc (ininfo.size);
+  gst_buffer_memset (inbuffer, 0, 0, -1);
+  gst_video_frame_map (&inframe, &ininfo, inbuffer, GST_MAP_READ);
+
+  gst_video_info_set_format (&outinfo, GST_VIDEO_FORMAT_BGRx, 400, 300);
+  outbuffer = gst_buffer_new_and_alloc (outinfo.size);
+  gst_video_frame_map (&outframe, &outinfo, outbuffer, GST_MAP_WRITE);
+
+  /* see that we don't reuse the source line directly because we need
+   * to add borders to it */
+  convert = gst_video_converter_new (&ininfo, &outinfo,
+      gst_structure_new ("options",
+          GST_VIDEO_CONVERTER_OPT_RESAMPLER_METHOD,
+          GST_TYPE_VIDEO_RESAMPLER_METHOD, 3,
+          GST_VIDEO_CONVERTER_OPT_SRC_X, G_TYPE_INT, 10,
+          GST_VIDEO_CONVERTER_OPT_SRC_Y, G_TYPE_INT, 0,
+          GST_VIDEO_CONVERTER_OPT_SRC_WIDTH, G_TYPE_INT, 300,
+          GST_VIDEO_CONVERTER_OPT_SRC_HEIGHT, G_TYPE_INT, 220,
+          GST_VIDEO_CONVERTER_OPT_DEST_X, G_TYPE_INT, 80,
+          GST_VIDEO_CONVERTER_OPT_DEST_Y, G_TYPE_INT, 60,
+          GST_VIDEO_CONVERTER_OPT_DEST_WIDTH, G_TYPE_INT, 300,
+          GST_VIDEO_CONVERTER_OPT_DEST_HEIGHT, G_TYPE_INT, 220, NULL));
+
+  gst_video_converter_frame (convert, &inframe, &outframe);
+  gst_video_converter_free (convert);
+
+  /* see that we reuse the source line directly because we need to scale
+   * it first */
+  convert = gst_video_converter_new (&ininfo, &outinfo,
+      gst_structure_new ("options",
+          GST_VIDEO_CONVERTER_OPT_RESAMPLER_METHOD,
+          GST_TYPE_VIDEO_RESAMPLER_METHOD, 3,
+          GST_VIDEO_CONVERTER_OPT_SRC_X, G_TYPE_INT, 10,
+          GST_VIDEO_CONVERTER_OPT_SRC_Y, G_TYPE_INT, 0,
+          GST_VIDEO_CONVERTER_OPT_SRC_WIDTH, G_TYPE_INT, 300,
+          GST_VIDEO_CONVERTER_OPT_SRC_HEIGHT, G_TYPE_INT, 220,
+          GST_VIDEO_CONVERTER_OPT_DEST_X, G_TYPE_INT, 80,
+          GST_VIDEO_CONVERTER_OPT_DEST_Y, G_TYPE_INT, 60,
+          GST_VIDEO_CONVERTER_OPT_DEST_WIDTH, G_TYPE_INT, 310,
+          GST_VIDEO_CONVERTER_OPT_DEST_HEIGHT, G_TYPE_INT, 230, NULL));
+
+  gst_video_converter_frame (convert, &inframe, &outframe);
+  gst_video_converter_free (convert);
+
+  gst_video_frame_unmap (&outframe);
+  gst_buffer_unref (outbuffer);
+  gst_video_frame_unmap (&inframe);
+  gst_buffer_unref (inbuffer);
+
+}
+
+GST_END_TEST;
+
+GST_START_TEST (test_video_transfer)
+{
+  gint i, j;
+
+  for (j = GST_VIDEO_TRANSFER_GAMMA10; j <= GST_VIDEO_TRANSFER_LOG316; j++) {
+    for (i = 0; i < 256; i++) {
+      gdouble val1, val2;
+
+      val1 = gst_video_color_transfer_encode (j, i / 255.0);
+      fail_if (val1 < 0.0 || val1 > 1.0);
+
+      val2 = gst_video_color_transfer_decode (j, val1);
+      fail_if (val2 < 0.0 || val2 > 1.0);
+
+      GST_DEBUG ("%d: %d %f->%f->%f %d", j, i, i / 255.0, val1, val2,
+          (int) lrint (val2 * 255.0));
+      if (val1 == 0.0)
+        fail_if (val2 != 0.0);
+      else
+        fail_if (lrint (val2 * 255.0) != i);
+    }
+  }
+}
+
+GST_END_TEST;
+
+GST_START_TEST (test_video_center_rect)
+{
+  GstVideoRectangle src, dest, result, expected;
+
+#define NEW_RECT(x,y,w,h) ((GstVideoRectangle) {x,y,w,h})
+#define CHECK_RECT(res, exp)			\
+  fail_unless_equals_int(exp.x, res.x);\
+  fail_unless_equals_int(exp.y, res.y);\
+  fail_unless_equals_int(exp.w, res.w);\
+  fail_unless_equals_int(exp.h, res.h);
+
+  /* 1:1 Aspect Ratio */
+  src = NEW_RECT (0, 0, 100, 100);
+  dest = NEW_RECT (0, 0, 100, 100);
+  expected = NEW_RECT (0, 0, 100, 100);
+  gst_video_sink_center_rect (src, dest, &result, TRUE);
+  CHECK_RECT (result, expected);
+
+  src = NEW_RECT (0, 0, 100, 100);
+  dest = NEW_RECT (0, 0, 50, 50);
+  expected = NEW_RECT (0, 0, 50, 50);
+  gst_video_sink_center_rect (src, dest, &result, TRUE);
+  CHECK_RECT (result, expected);
+
+  src = NEW_RECT (0, 0, 100, 100);
+  dest = NEW_RECT (50, 50, 100, 100);
+  expected = NEW_RECT (50, 50, 100, 100);
+  gst_video_sink_center_rect (src, dest, &result, TRUE);
+  CHECK_RECT (result, expected);
+
+  /* Aspect ratio scaling (tall) */
+  src = NEW_RECT (0, 0, 50, 100);
+  dest = NEW_RECT (0, 0, 50, 50);
+  expected = NEW_RECT (12, 0, 25, 50);
+  gst_video_sink_center_rect (src, dest, &result, TRUE);
+  CHECK_RECT (result, expected);
+
+  src = NEW_RECT (0, 0, 50, 100);
+  dest = NEW_RECT (50, 50, 50, 50);
+  expected = NEW_RECT (62, 50, 25, 50);
+  gst_video_sink_center_rect (src, dest, &result, TRUE);
+  CHECK_RECT (result, expected);
+
+  /* Aspect ratio scaling (wide) */
+  src = NEW_RECT (0, 0, 100, 50);
+  dest = NEW_RECT (0, 0, 50, 50);
+  expected = NEW_RECT (0, 12, 50, 25);
+  gst_video_sink_center_rect (src, dest, &result, TRUE);
+  CHECK_RECT (result, expected);
+
+  src = NEW_RECT (0, 0, 100, 50);
+  dest = NEW_RECT (50, 50, 50, 50);
+  expected = NEW_RECT (50, 62, 50, 25);
+  gst_video_sink_center_rect (src, dest, &result, TRUE);
+  CHECK_RECT (result, expected);
+}
+
+GST_END_TEST;
+
+void test_overlay_blend_rect (gint x, gint y, gint width, gint height,
+    GstVideoFrame * video_frame);
+void test_overlay_blend_rect_verify (gint x, gint y, gint width,
+    gint height, GstVideoFrame * video_frame);
+#define VIDEO_WIDTH 320
+#define VIDEO_HEIGHT 240
+
+void
+test_overlay_blend_rect_verify (gint x, gint y, gint width, gint height,
+    GstVideoFrame * video_frame)
+{
+  guint8 *data;
+  gint i = 0, prev_i = 0;
+  gint size = 0;
+  gint temp_width = 0, temp_height = 0;
+
+  data = GST_VIDEO_FRAME_PLANE_DATA (video_frame, 0);
+  size = GST_VIDEO_FRAME_SIZE (video_frame);
+
+  if (x + width < 0 || y + height < 0 || x >= VIDEO_WIDTH || y >= VIDEO_HEIGHT)
+    return;
+  if (x <= 0)
+    temp_width = width + x;
+  else if (x > 0 && (x + width) <= VIDEO_WIDTH)
+    temp_width = width;
+  else
+    temp_width = VIDEO_WIDTH - x;
+  if (y <= 0)
+    temp_height = height + y;
+  else if (y > 0 && (y + height) <= VIDEO_HEIGHT)
+    temp_height = height;
+  else
+    temp_height = VIDEO_HEIGHT - y;
+
+  if (x <= 0 && y <= 0)
+    i = 0;
+  else
+    i = (((x <= 0) ? 0 : x) + (((y <= 0) ? 0 : y) * VIDEO_WIDTH)) * 4;
+  prev_i = i;
+
+  for (; i < size - 4; i += 4) {
+#if G_BYTE_ORDER == G_LITTLE_ENDIAN
+    /* B - G - R - A */
+    fail_unless_equals_int (data[i], 0x40);
+    fail_unless_equals_int (data[i + 1], 0x40);
+    fail_unless_equals_int (data[i + 2], 0x40);
+    fail_unless_equals_int (data[i + 3], 0x00);
+#else
+    /* A - R - G - B */
+    fail_unless_equals_int (data[i], 0x00);
+    fail_unless_equals_int (data[i + 1], 0x40);
+    fail_unless_equals_int (data[i + 2], 0x40);
+    fail_unless_equals_int (data[i + 3], 0x40);
+#endif
+    if ((i + 4) == (4 * (((((y > 0) ? (y + temp_height) : temp_height) -
+                        1) * VIDEO_WIDTH) + ((x >
+                        0) ? (x + temp_width) : temp_width))))
+      break;
+    if ((i + 4 - prev_i) == ((temp_width) * 4)) {
+      i += ((VIDEO_WIDTH - (temp_width)) * 4);
+      prev_i = i + 4;
+    }
+
+  }
+}
+
+void
+test_overlay_blend_rect (gint x, gint y, gint width, gint height,
+    GstVideoFrame * video_frame)
+{
+  GstVideoOverlayComposition *comp1;
+  GstVideoOverlayRectangle *rect1;
+  GstBuffer *pix, *pix1;
+  GstVideoInfo vinfo;
+
+  memset (video_frame, 0, sizeof (GstVideoFrame));
+  pix =
+      gst_buffer_new_and_alloc (VIDEO_WIDTH * VIDEO_HEIGHT * sizeof (guint32));
+  gst_buffer_memset (pix, 0, 0, gst_buffer_get_size (pix));
+  gst_video_info_init (&vinfo);
+  gst_video_info_set_format (&vinfo, GST_VIDEO_OVERLAY_COMPOSITION_FORMAT_RGB,
+      VIDEO_WIDTH, VIDEO_HEIGHT);
+  gst_video_frame_map (video_frame, &vinfo, pix, GST_MAP_READWRITE);
+  gst_buffer_unref (pix);
+  pix = NULL;
+
+  pix1 = gst_buffer_new_and_alloc (width * height * sizeof (guint32));
+  gst_buffer_memset (pix1, 0, 0x80, gst_buffer_get_size (pix1));
+  gst_buffer_add_video_meta (pix1, GST_VIDEO_FRAME_FLAG_NONE,
+      GST_VIDEO_OVERLAY_COMPOSITION_FORMAT_RGB, width, height);
+  rect1 = gst_video_overlay_rectangle_new_raw (pix1,
+      x, y, width, height, GST_VIDEO_OVERLAY_FORMAT_FLAG_NONE);
+  gst_buffer_unref (pix1);
+  pix1 = NULL;
+
+  comp1 = gst_video_overlay_composition_new (rect1);
+  fail_unless (gst_video_overlay_composition_blend (comp1, video_frame));
+  gst_video_overlay_composition_unref (comp1);
+  gst_video_overlay_rectangle_unref (rect1);
+
+  test_overlay_blend_rect_verify (x, y, width, height, video_frame);
+  gst_video_frame_unmap (video_frame);
+}
+
+GST_START_TEST (test_overlay_blend)
+{
+  GstVideoFrame video_frame;
+
+  /* Overlay width & height smaller than video width & height */
+  /* Overlay rendered completely left of video surface
+   * x + overlay_width <= 0 */
+  test_overlay_blend_rect (-60, 50, 50, 50, &video_frame);
+  /* Overlay rendered completely right of video surface
+   * x >= video_width */
+  test_overlay_blend_rect (330, 50, 50, 50, &video_frame);
+  /* Overlay rendered completely top of video surface
+   * y + overlay_height <= 0 */
+  test_overlay_blend_rect (50, -60, 50, 50, &video_frame);
+  /* Overlay rendered completely bottom of video surface
+   * y >= video_height */
+  test_overlay_blend_rect (50, 250, 50, 50, &video_frame);
+  /* Overlay rendered partially left of video surface
+   * x < 0 && -x < overlay_width */
+  test_overlay_blend_rect (-40, 50, 50, 50, &video_frame);
+  /* Overlay rendered partially right of video surface
+   * x < video_width && (overlay_width + x) > video_width */
+  test_overlay_blend_rect (300, 50, 50, 50, &video_frame);
+  /* Overlay rendered partially top of video surface
+   * y < 0 && -y < overlay_height */
+  test_overlay_blend_rect (50, -40, 50, 50, &video_frame);
+  /* Overlay rendered partially bottom of video surface
+   * y < video_height && (overlay_height + y) > video_height */
+  test_overlay_blend_rect (50, 220, 50, 50, &video_frame);
+
+  /* Overlay width & height bigger than video width & height */
+  /* Overlay rendered completely left of video surface
+   * x + overlay_width <= 0 */
+  test_overlay_blend_rect (-360, 50, 350, 250, &video_frame);
+  /* Overlay rendered completely right of video surface
+   * x >= video_width */
+  test_overlay_blend_rect (330, 50, 350, 250, &video_frame);
+  /* Overlay rendered completely top of video surface
+   * y + overlay_height <= 0 */
+  test_overlay_blend_rect (50, -260, 350, 250, &video_frame);
+  /* Overlay rendered completely bottom of video surface
+   * y >= video_height */
+  test_overlay_blend_rect (50, 250, 350, 250, &video_frame);
+  /* Overlay rendered partially left of video surface
+   * x < 0 && -x < overlay_width */
+  test_overlay_blend_rect (-40, 50, 350, 250, &video_frame);
+  /* Overlay rendered partially right of video surface
+   * x < video_width && (overlay_width + x) > video_width */
+  test_overlay_blend_rect (300, 50, 350, 250, &video_frame);
+  /* Overlay rendered partially top of video surface
+   * y < 0 && -y < overlay_height */
+  test_overlay_blend_rect (50, -40, 350, 250, &video_frame);
+  /* Overlay rendered partially bottom of video surface
+   * y < video_height && (overlay_height + y) > video_height */
+  test_overlay_blend_rect (50, 220, 350, 250, &video_frame);
+}
+
+GST_END_TEST;
+
 static Suite *
 video_suite (void)
 {
   Suite *s = suite_create ("video support library");
   TCase *tc_chain = tcase_create ("general");
 
+  tcase_set_timeout (tc_chain, 60 * 60);
+
   suite_add_tcase (s, tc_chain);
   tcase_add_test (tc_chain, test_video_formats);
   tcase_add_test (tc_chain, test_video_formats_rgb);
@@ -1707,6 +2651,7 @@
   tcase_add_test (tc_chain, test_video_formats_pack_unpack);
   tcase_add_test (tc_chain, test_dar_calc);
   tcase_add_test (tc_chain, test_parse_caps_rgb);
+  tcase_add_test (tc_chain, test_parse_caps_multiview);
   tcase_add_test (tc_chain, test_events);
   tcase_add_test (tc_chain, test_convert_frame);
   tcase_add_test (tc_chain, test_convert_frame_async);
@@ -1714,6 +2659,15 @@
   tcase_add_test (tc_chain, test_overlay_composition);
   tcase_add_test (tc_chain, test_overlay_composition_premultiplied_alpha);
   tcase_add_test (tc_chain, test_overlay_composition_global_alpha);
+  tcase_add_test (tc_chain, test_video_pack_unpack2);
+  tcase_add_test (tc_chain, test_video_chroma);
+  tcase_add_test (tc_chain, test_video_scaler);
+  tcase_add_test (tc_chain, test_video_color_convert);
+  tcase_add_test (tc_chain, test_video_size_convert);
+  tcase_add_test (tc_chain, test_video_convert);
+  tcase_add_test (tc_chain, test_video_transfer);
+  tcase_add_test (tc_chain, test_overlay_blend);
+  tcase_add_test (tc_chain, test_video_center_rect);
 
   return s;
 }
diff --git a/tests/check/libs/videodecoder.c b/tests/check/libs/videodecoder.c
index 5e9f2c9..1fc9f36 100644
--- a/tests/check/libs/videodecoder.c
+++ b/tests/check/libs/videodecoder.c
@@ -27,6 +27,38 @@
 #include <gst/video/video.h>
 #include <gst/app/app.h>
 
+static GstStaticPadTemplate sinktemplate = GST_STATIC_PAD_TEMPLATE ("sink",
+    GST_PAD_SINK,
+    GST_PAD_ALWAYS,
+    GST_STATIC_CAPS ("video/x-raw")
+    );
+
+#define RESTRICTED_CAPS_WIDTH 800
+#define RESTRICTED_CAPS_HEIGHT 600
+#define RESTRICTED_CAPS_FPS_N 30
+#define RESTRICTED_CAPS_FPS_D 1
+static GstStaticPadTemplate sinktemplate_restricted =
+GST_STATIC_PAD_TEMPLATE ("sink",
+    GST_PAD_SINK,
+    GST_PAD_ALWAYS,
+    GST_STATIC_CAPS ("video/x-raw, width=(int)800, height=(int)600,"
+        " framerate=(fraction)30/1")
+    );
+
+static GstStaticPadTemplate sinktemplate_with_range =
+GST_STATIC_PAD_TEMPLATE ("sink",
+    GST_PAD_SINK,
+    GST_PAD_ALWAYS,
+    GST_STATIC_CAPS ("video/x-raw, width=(int)[1,800], height=(int)[1,600],"
+        " framerate=(fraction)[1/1, 30/1]")
+    );
+
+static GstStaticPadTemplate srctemplate = GST_STATIC_PAD_TEMPLATE ("src",
+    GST_PAD_SRC,
+    GST_PAD_ALWAYS,
+    GST_STATIC_CAPS ("video/x-test-custom")
+    );
+
 static GstPad *mysrcpad, *mysinkpad;
 static GstElement *dec;
 static GList *events = NULL;
@@ -181,22 +213,17 @@
 }
 
 static void
-setup_videodecodertester (void)
+setup_videodecodertester (GstStaticPadTemplate * sinktmpl,
+    GstStaticPadTemplate * srctmpl)
 {
-  static GstStaticPadTemplate sinktemplate = GST_STATIC_PAD_TEMPLATE ("sink",
-      GST_PAD_SINK,
-      GST_PAD_ALWAYS,
-      GST_STATIC_CAPS ("video/x-raw")
-      );
-  static GstStaticPadTemplate srctemplate = GST_STATIC_PAD_TEMPLATE ("src",
-      GST_PAD_SRC,
-      GST_PAD_ALWAYS,
-      GST_STATIC_CAPS ("video/x-test-custom")
-      );
+  if (sinktmpl == NULL)
+    sinktmpl = &sinktemplate;
+  if (srctmpl == NULL)
+    srctmpl = &srctemplate;
 
   dec = g_object_new (GST_VIDEO_DECODER_TESTER_TYPE, NULL);
-  mysrcpad = gst_check_setup_src_pad (dec, &srctemplate);
-  mysinkpad = gst_check_setup_sink_pad (dec, &sinktemplate);
+  mysrcpad = gst_check_setup_src_pad (dec, srctmpl);
+  mysinkpad = gst_check_setup_sink_pad (dec, sinktmpl);
 
   gst_pad_set_event_function (mysinkpad, _mysinkpad_event);
 }
@@ -259,7 +286,7 @@
   guint64 i;
   GList *iter;
 
-  setup_videodecodertester ();
+  setup_videodecodertester (NULL, NULL);
 
   gst_pad_set_active (mysrcpad, TRUE);
   gst_element_set_state (dec, GST_STATE_PLAYING);
@@ -317,11 +344,11 @@
 {
   GstSegment segment;
   GstBuffer *buffer;
-  guint64 i;
+  guint i;
   GList *iter;
   GList *events_iter;
 
-  setup_videodecodertester ();
+  setup_videodecodertester (NULL, NULL);
 
   gst_pad_set_active (mysrcpad, TRUE);
   gst_element_set_state (dec, GST_STATE_PLAYING);
@@ -426,10 +453,10 @@
 {
   GstSegment segment;
   GstBuffer *buffer;
-  guint64 i;
+  guint i;
   GList *events_iter;
 
-  setup_videodecodertester ();
+  setup_videodecodertester (NULL, NULL);
 
   gst_pad_set_active (mysrcpad, TRUE);
   gst_element_set_state (dec, GST_STATE_PLAYING);
@@ -533,7 +560,7 @@
   GstBuffer *buffer;
   guint64 i = 0;
 
-  setup_videodecodertester ();
+  setup_videodecodertester (NULL, NULL);
 
   gst_pad_set_active (mysrcpad, TRUE);
   gst_element_set_state (dec, GST_STATE_PLAYING);
@@ -592,7 +619,7 @@
   GstClockTime pos;
   GList *iter;
 
-  setup_videodecodertester ();
+  setup_videodecodertester (NULL, NULL);
 
   gst_pad_set_active (mysrcpad, TRUE);
   gst_element_set_state (dec, GST_STATE_PLAYING);
@@ -653,6 +680,57 @@
 
 GST_END_TEST;
 
+/* make sure that the segment event is pushed before the gap */
+GST_START_TEST (videodecoder_first_data_is_gap)
+{
+  GstSegment segment;
+  GList *events_iter;
+
+  setup_videodecodertester (NULL, NULL);
+
+  gst_pad_set_active (mysrcpad, TRUE);
+  gst_element_set_state (dec, GST_STATE_PLAYING);
+  gst_pad_set_active (mysinkpad, TRUE);
+
+  send_startup_events ();
+
+  /* push a new segment */
+  gst_segment_init (&segment, GST_FORMAT_TIME);
+  fail_unless (gst_pad_push_event (mysrcpad, gst_event_new_segment (&segment)));
+
+  /* push a gap */
+  fail_unless (gst_pad_push_event (mysrcpad, gst_event_new_gap (0,
+              GST_SECOND)));
+  events_iter = events;
+  /* make sure the usual events have been received */
+  {
+    GstEvent *sstart = events_iter->data;
+    fail_unless (GST_EVENT_TYPE (sstart) == GST_EVENT_STREAM_START);
+    events_iter = g_list_next (events_iter);
+  }
+  {
+    GstEvent *caps_event = events_iter->data;
+    fail_unless (GST_EVENT_TYPE (caps_event) == GST_EVENT_CAPS);
+    events_iter = g_list_next (events_iter);
+  }
+  {
+    GstEvent *segment_event = events_iter->data;
+    fail_unless (GST_EVENT_TYPE (segment_event) == GST_EVENT_SEGMENT);
+    events_iter = g_list_next (events_iter);
+  }
+
+  /* Make sure the gap was pushed */
+  {
+    GstEvent *gap = events_iter->data;
+    fail_unless (GST_EVENT_TYPE (gap) == GST_EVENT_GAP);
+    events_iter = g_list_next (events_iter);
+  }
+  fail_unless (events_iter == NULL);
+
+  cleanup_videodecodertest ();
+}
+
+GST_END_TEST;
 
 GST_START_TEST (videodecoder_backwards_playback)
 {
@@ -661,7 +739,7 @@
   guint64 i;
   GList *iter;
 
-  setup_videodecodertester ();
+  setup_videodecodertester (NULL, NULL);
 
   gst_pad_set_active (mysrcpad, TRUE);
   gst_element_set_state (dec, GST_STATE_PLAYING);
@@ -744,7 +822,7 @@
   guint64 i;
   GstClockTime pos;
 
-  setup_videodecodertester ();
+  setup_videodecodertester (NULL, NULL);
 
   gst_pad_set_active (mysrcpad, TRUE);
   gst_element_set_state (dec, GST_STATE_PLAYING);
@@ -817,6 +895,187 @@
 GST_END_TEST;
 
 
+GST_START_TEST (videodecoder_query_caps_with_fixed_caps_peer)
+{
+  GstCaps *caps;
+  GstCaps *filter;
+  GstStructure *structure;
+  gint width, height, fps_n, fps_d;
+
+  setup_videodecodertester (&sinktemplate_restricted, NULL);
+
+  gst_pad_set_active (mysrcpad, TRUE);
+  gst_element_set_state (dec, GST_STATE_PLAYING);
+  gst_pad_set_active (mysinkpad, TRUE);
+
+  caps = gst_pad_peer_query_caps (mysrcpad, NULL);
+  fail_unless (caps != NULL);
+
+  structure = gst_caps_get_structure (caps, 0);
+  fail_unless (gst_structure_get_int (structure, "width", &width));
+  fail_unless (gst_structure_get_int (structure, "height", &height));
+  fail_unless (gst_structure_get_fraction (structure, "framerate", &fps_n,
+          &fps_d));
+  /* match our restricted caps values */
+  fail_unless (width == RESTRICTED_CAPS_WIDTH);
+  fail_unless (height == RESTRICTED_CAPS_HEIGHT);
+  fail_unless (fps_n == RESTRICTED_CAPS_FPS_N);
+  fail_unless (fps_d == RESTRICTED_CAPS_FPS_D);
+  gst_caps_unref (caps);
+
+  filter = gst_caps_new_simple ("video/x-custom-test", "width", G_TYPE_INT,
+      1000, "height", G_TYPE_INT, 1000, "framerate", GST_TYPE_FRACTION,
+      1000, 1, NULL);
+  caps = gst_pad_peer_query_caps (mysrcpad, filter);
+  fail_unless (caps != NULL);
+  fail_unless (gst_caps_is_empty (caps));
+  gst_caps_unref (caps);
+  gst_caps_unref (filter);
+
+  cleanup_videodecodertest ();
+}
+
+GST_END_TEST;
+
+static void
+_get_int_range (GstStructure * s, const gchar * field, gint * min_v,
+    gint * max_v)
+{
+  const GValue *value;
+
+  value = gst_structure_get_value (s, field);
+  fail_unless (value != NULL);
+  fail_unless (GST_VALUE_HOLDS_INT_RANGE (value));
+
+  *min_v = gst_value_get_int_range_min (value);
+  *max_v = gst_value_get_int_range_max (value);
+}
+
+static void
+_get_fraction_range (GstStructure * s, const gchar * field, gint * fps_n_min,
+    gint * fps_d_min, gint * fps_n_max, gint * fps_d_max)
+{
+  const GValue *value;
+  const GValue *min_v, *max_v;
+
+  value = gst_structure_get_value (s, field);
+  fail_unless (value != NULL);
+  fail_unless (GST_VALUE_HOLDS_FRACTION_RANGE (value));
+
+  min_v = gst_value_get_fraction_range_min (value);
+  fail_unless (GST_VALUE_HOLDS_FRACTION (min_v));
+  *fps_n_min = gst_value_get_fraction_numerator (min_v);
+  *fps_d_min = gst_value_get_fraction_denominator (min_v);
+
+  max_v = gst_value_get_fraction_range_max (value);
+  fail_unless (GST_VALUE_HOLDS_FRACTION (max_v));
+  *fps_n_max = gst_value_get_fraction_numerator (max_v);
+  *fps_d_max = gst_value_get_fraction_denominator (max_v);
+}
+
+GST_START_TEST (videodecoder_query_caps_with_range_caps_peer)
+{
+  GstCaps *caps;
+  GstCaps *filter;
+  GstStructure *structure;
+  gint width, height, fps_n, fps_d;
+  gint width_min, height_min, fps_n_min, fps_d_min;
+  gint width_max, height_max, fps_n_max, fps_d_max;
+
+  setup_videodecodertester (&sinktemplate_with_range, NULL);
+
+  gst_pad_set_active (mysrcpad, TRUE);
+  gst_element_set_state (dec, GST_STATE_PLAYING);
+  gst_pad_set_active (mysinkpad, TRUE);
+
+  caps = gst_pad_peer_query_caps (mysrcpad, NULL);
+  fail_unless (caps != NULL);
+
+  structure = gst_caps_get_structure (caps, 0);
+  _get_int_range (structure, "width", &width_min, &width_max);
+  _get_int_range (structure, "height", &height_min, &height_max);
+  _get_fraction_range (structure, "framerate", &fps_n_min, &fps_d_min,
+      &fps_n_max, &fps_d_max);
+  fail_unless (width_min == 1);
+  fail_unless (width_max == RESTRICTED_CAPS_WIDTH);
+  fail_unless (height_min == 1);
+  fail_unless (height_max == RESTRICTED_CAPS_HEIGHT);
+  fail_unless (fps_n_min == 1);
+  fail_unless (fps_d_min == 1);
+  fail_unless (fps_n_max == RESTRICTED_CAPS_FPS_N);
+  fail_unless (fps_d_max == RESTRICTED_CAPS_FPS_D);
+  gst_caps_unref (caps);
+
+  /* query with a fixed filter */
+  filter = gst_caps_new_simple ("video/x-test-custom", "width", G_TYPE_INT,
+      RESTRICTED_CAPS_WIDTH, "height", G_TYPE_INT, RESTRICTED_CAPS_HEIGHT,
+      "framerate", GST_TYPE_FRACTION, RESTRICTED_CAPS_FPS_N,
+      RESTRICTED_CAPS_FPS_D, NULL);
+  caps = gst_pad_peer_query_caps (mysrcpad, filter);
+  fail_unless (caps != NULL);
+  structure = gst_caps_get_structure (caps, 0);
+  fail_unless (gst_structure_get_int (structure, "width", &width));
+  fail_unless (gst_structure_get_int (structure, "height", &height));
+  fail_unless (gst_structure_get_fraction (structure, "framerate", &fps_n,
+          &fps_d));
+  fail_unless (width == RESTRICTED_CAPS_WIDTH);
+  fail_unless (height == RESTRICTED_CAPS_HEIGHT);
+  fail_unless (fps_n == RESTRICTED_CAPS_FPS_N);
+  fail_unless (fps_d == RESTRICTED_CAPS_FPS_D);
+  gst_caps_unref (caps);
+  gst_caps_unref (filter);
+
+  /* query with a fixed filter that will lead to empty result */
+  filter = gst_caps_new_simple ("video/x-test-custom", "width", G_TYPE_INT,
+      1000, "height", G_TYPE_INT, 1000, "framerate", GST_TYPE_FRACTION,
+      1000, 1, NULL);
+  caps = gst_pad_peer_query_caps (mysrcpad, filter);
+  fail_unless (caps != NULL);
+  fail_unless (gst_caps_is_empty (caps));
+  gst_caps_unref (caps);
+  gst_caps_unref (filter);
+
+  cleanup_videodecodertest ();
+}
+
+GST_END_TEST;
+
+#define GETCAPS_CAPS_STR "video/x-test-custom, somefield=(string)getcaps"
+static GstCaps *
+_custom_video_decoder_getcaps (GstVideoDecoder * dec, GstCaps * filter)
+{
+  return gst_caps_from_string (GETCAPS_CAPS_STR);
+}
+
+GST_START_TEST (videodecoder_query_caps_with_custom_getcaps)
+{
+  GstCaps *caps;
+  GstVideoDecoderClass *klass;
+  GstCaps *expected_caps;
+
+  setup_videodecodertester (&sinktemplate_restricted, NULL);
+
+  klass = GST_VIDEO_DECODER_CLASS (GST_VIDEO_DECODER_GET_CLASS (dec));
+  klass->getcaps = _custom_video_decoder_getcaps;
+
+  gst_pad_set_active (mysrcpad, TRUE);
+  gst_element_set_state (dec, GST_STATE_PLAYING);
+  gst_pad_set_active (mysinkpad, TRUE);
+
+  caps = gst_pad_peer_query_caps (mysrcpad, NULL);
+  fail_unless (caps != NULL);
+
+  expected_caps = gst_caps_from_string (GETCAPS_CAPS_STR);
+  fail_unless (gst_caps_is_equal (expected_caps, caps));
+  gst_caps_unref (expected_caps);
+  gst_caps_unref (caps);
+
+  cleanup_videodecodertest ();
+}
+
+GST_END_TEST;
+
+
 static Suite *
 gst_videodecoder_suite (void)
 {
@@ -824,10 +1083,16 @@
   TCase *tc = tcase_create ("general");
 
   suite_add_tcase (s, tc);
+
+  tcase_add_test (tc, videodecoder_query_caps_with_fixed_caps_peer);
+  tcase_add_test (tc, videodecoder_query_caps_with_range_caps_peer);
+  tcase_add_test (tc, videodecoder_query_caps_with_custom_getcaps);
+
   tcase_add_test (tc, videodecoder_playback);
   tcase_add_test (tc, videodecoder_playback_with_events);
   tcase_add_test (tc, videodecoder_playback_first_frames_not_decoded);
   tcase_add_test (tc, videodecoder_buffer_after_segment);
+  tcase_add_test (tc, videodecoder_first_data_is_gap);
 
   tcase_add_test (tc, videodecoder_backwards_playback);
   tcase_add_test (tc, videodecoder_backwards_buffer_after_segment);
diff --git a/tests/check/libs/videoencoder.c b/tests/check/libs/videoencoder.c
index e310f82..af7e06c 100644
--- a/tests/check/libs/videoencoder.c
+++ b/tests/check/libs/videoencoder.c
@@ -396,7 +396,7 @@
 {
   GstSegment segment;
   GstBuffer *buffer;
-  guint64 i;
+  guint i;
   GList *events_iter;
 
   setup_videoencodertester ();
diff --git a/tests/check/libs/xmpwriter.c b/tests/check/libs/xmpwriter.c
index e7889d6..6a84e10 100644
--- a/tests/check/libs/xmpwriter.c
+++ b/tests/check/libs/xmpwriter.c
@@ -203,19 +203,4 @@
   return s;
 }
 
-int
-main (int argc, char **argv)
-{
-  int nf;
-
-  Suite *s = xmp_config_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;
-}
+GST_CHECK_MAIN (xmp_config);
diff --git a/tests/check/pipelines/basetime.c b/tests/check/pipelines/basetime.c
index 180935f..228e97c 100644
--- a/tests/check/pipelines/basetime.c
+++ b/tests/check/pipelines/basetime.c
@@ -24,6 +24,10 @@
 #include "config.h"
 #endif
 
+#ifdef HAVE_VALGRIND
+#include <valgrind/valgrind.h>
+#endif
+
 #include <gst/check/gstcheck.h>
 
 #ifndef GST_DISABLE_PARSE
@@ -55,7 +59,7 @@
   }
   old_ts = new_ts;
 
-  return TRUE;
+  return GST_PAD_PROBE_OK;
 }
 
 GST_START_TEST (test_basetime_calculation)
@@ -68,7 +72,7 @@
   loop = g_main_loop_new (NULL, FALSE);
 
   /* The "main" pipeline */
-  p1 = gst_parse_launch ("fakesrc ! fakesink", NULL);
+  p1 = gst_parse_launch ("fakesrc ! identity sleep-time=1 ! fakesink", NULL);
   fail_if (p1 == NULL);
 
   /* Create a sub-bin that is activated only in "certain situations" */
@@ -130,9 +134,19 @@
 {
   Suite *s = suite_create ("baseaudiosrc");
   TCase *tc_chain = tcase_create ("general");
+  guint timeout;
 
   /* timeout 6 sec */
-  tcase_set_timeout (tc_chain, 6);
+  timeout = 6;
+
+#ifdef HAVE_VALGRIND
+  {
+    if (RUNNING_ON_VALGRIND)
+      timeout *= 4;
+  }
+#endif
+
+  tcase_set_timeout (tc_chain, timeout);
   suite_add_tcase (s, tc_chain);
 
 #ifndef GST_DISABLE_PARSE
@@ -142,19 +156,4 @@
   return s;
 }
 
-int
-main (int argc, char **argv)
-{
-  int nf;
-
-  Suite *s = baseaudiosrc_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;
-}
+GST_CHECK_MAIN (baseaudiosrc);
diff --git a/tests/check/pipelines/capsfilter-renegotiation.c b/tests/check/pipelines/capsfilter-renegotiation.c
index 0ade9a2..4a3fc98 100644
--- a/tests/check/pipelines/capsfilter-renegotiation.c
+++ b/tests/check/pipelines/capsfilter-renegotiation.c
@@ -104,13 +104,13 @@
   current_caps = NULL;
 
   pipeline = gst_parse_launch (launch_line, NULL);
-  g_assert (pipeline);
+  fail_unless (pipeline != NULL);
 
   capsfilter = gst_bin_get_by_name (GST_BIN (pipeline), "cf");
-  g_assert (capsfilter);
+  fail_unless (capsfilter != NULL);
 
   sink = gst_bin_get_by_name (GST_BIN (pipeline), "sink");
-  g_assert (sink);
+  fail_unless (sink != NULL);
 
   pad = gst_element_get_static_pad (sink, "sink");
   gst_pad_add_probe (pad, GST_PAD_PROBE_TYPE_BUFFER, buffer_probe, capsfilter,
@@ -125,8 +125,8 @@
   msg = gst_bus_timed_pop_filtered (bus, GST_CLOCK_TIME_NONE,
       GST_MESSAGE_EOS | GST_MESSAGE_ERROR);
 
-  g_assert (GST_MESSAGE_TYPE (msg) == GST_MESSAGE_EOS);
-  g_assert (caps_change == 4);
+  fail_unless_equals_int (GST_MESSAGE_TYPE (msg), GST_MESSAGE_EOS);
+  fail_unless_equals_int (caps_change, 4);
 
   gst_element_set_state (pipeline, GST_STATE_NULL);
 
@@ -168,19 +168,4 @@
   return s;
 }
 
-int
-main (int argc, char **argv)
-{
-  int nf;
-
-  Suite *s = capsfilter_renegotiation_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;
-}
+GST_CHECK_MAIN (capsfilter_renegotiation);
diff --git a/tests/check/pipelines/gio.c b/tests/check/pipelines/gio.c
index 5ce6688..60b45c2 100644
--- a/tests/check/pipelines/gio.c
+++ b/tests/check/pipelines/gio.c
@@ -151,7 +151,7 @@
 GST_END_TEST;
 
 static Suite *
-gio_testsuite (void)
+gio_suite (void)
 {
   Suite *s = suite_create ("gio");
   TCase *tc_chain = tcase_create ("general");
@@ -162,19 +162,4 @@
   return s;
 }
 
-int
-main (int argc, char **argv)
-{
-  int nf;
-
-  Suite *s = gio_testsuite ();
-  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;
-}
+GST_CHECK_MAIN (gio);
diff --git a/tests/check/pipelines/simple-launch-lines.c b/tests/check/pipelines/simple-launch-lines.c
index 7a6b76c..d3e9bb7 100644
--- a/tests/check/pipelines/simple-launch-lines.c
+++ b/tests/check/pipelines/simple-launch-lines.c
@@ -222,19 +222,4 @@
   return s;
 }
 
-int
-main (int argc, char **argv)
-{
-  int nf;
-
-  Suite *s = simple_launch_lines_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;
-}
+GST_CHECK_MAIN (simple_launch_lines);
diff --git a/tests/check/pipelines/streamsynchronizer.c b/tests/check/pipelines/streamsynchronizer.c
new file mode 100644
index 0000000..59cfb7b
--- /dev/null
+++ b/tests/check/pipelines/streamsynchronizer.c
@@ -0,0 +1,166 @@
+/* GStreamer
+ * Copyright (C) 2014 Song Bing <b06498@freescale.com>
+ *
+ * streamsynchronizer.c: Unit test for streamsynchronizer
+ *
+ * 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>
+
+static gboolean have_group_id = FALSE;
+static guint group_id_pre;
+static GMutex test_mutex;
+
+static GstPadProbeReturn
+event_probe (GstPad * pad, GstPadProbeInfo * info, gpointer udata)
+{
+  GstPadProbeReturn ret = GST_PAD_PROBE_OK;
+  GstEvent *event = GST_PAD_PROBE_INFO_DATA (info);
+
+  switch (GST_EVENT_TYPE (event)) {
+    case GST_EVENT_STREAM_START:{
+      guint group_id;
+
+      g_mutex_lock (&test_mutex);
+      fail_unless (gst_event_parse_group_id (event, &group_id));
+
+      if (have_group_id) {
+        if (group_id_pre != group_id) {
+          event = gst_event_copy (event);
+          gst_event_set_group_id (event, group_id_pre);
+          gst_event_replace ((GstEvent **) & info->data, event);
+          gst_event_unref (event);
+        }
+      } else {
+        group_id_pre = group_id;
+        have_group_id = TRUE;
+      }
+      g_mutex_unlock (&test_mutex);
+      break;
+    }
+    default:
+      break;
+  }
+
+  return ret;
+}
+
+static void
+run_streamsynchronizer_handle_eos (const gchar * launch_line)
+{
+  GstElement *pipeline;
+  GstElement *audiosrc;
+  GstElement *videosrc;
+  GstMessage *msg;
+  GstPad *pad;
+  GstBus *bus;
+
+  pipeline = gst_parse_launch (launch_line, NULL);
+  fail_unless (pipeline != NULL);
+
+  videosrc = gst_bin_get_by_name (GST_BIN (pipeline), "videosrc");
+  fail_unless (videosrc != NULL);
+
+  pad = gst_element_get_static_pad (videosrc, "src");
+  gst_pad_add_probe (pad, GST_PAD_PROBE_TYPE_EVENT_DOWNSTREAM, event_probe,
+      videosrc, NULL);
+  gst_object_unref (pad);
+  gst_object_unref (videosrc);
+
+  audiosrc = gst_bin_get_by_name (GST_BIN (pipeline), "audiosrc");
+  fail_unless (audiosrc != NULL);
+
+  pad = gst_element_get_static_pad (audiosrc, "src");
+  gst_pad_add_probe (pad, GST_PAD_PROBE_TYPE_EVENT_DOWNSTREAM, event_probe,
+      audiosrc, NULL);
+  gst_object_unref (pad);
+  gst_object_unref (audiosrc);
+
+  bus = gst_pipeline_get_bus (GST_PIPELINE (pipeline));
+
+  fail_unless (gst_element_set_state (pipeline, GST_STATE_PLAYING) !=
+      GST_STATE_CHANGE_FAILURE);
+
+  msg = gst_bus_timed_pop_filtered (bus, GST_CLOCK_TIME_NONE,
+      GST_MESSAGE_ASYNC_DONE | GST_MESSAGE_ERROR);
+
+  fail_unless_equals_int (GST_MESSAGE_TYPE (msg), GST_MESSAGE_ASYNC_DONE);
+  gst_message_unref (msg);
+
+  fail_unless_equals_int (gst_element_get_state (pipeline, NULL, NULL,
+          GST_CLOCK_TIME_NONE), GST_STATE_CHANGE_SUCCESS);
+
+  fail_unless (gst_element_set_state (pipeline, GST_STATE_PAUSED) !=
+      GST_STATE_CHANGE_FAILURE);
+
+  /* can't ensure can received async-done message when call state change very quickly. */
+  fail_unless_equals_int (gst_element_get_state (pipeline, NULL, NULL,
+          GST_CLOCK_TIME_NONE), GST_STATE_CHANGE_SUCCESS);
+
+  fail_unless (gst_element_set_state (pipeline, GST_STATE_PLAYING) !=
+      GST_STATE_CHANGE_FAILURE);
+
+  fail_unless_equals_int (gst_element_get_state (pipeline, NULL, NULL,
+          GST_CLOCK_TIME_NONE), GST_STATE_CHANGE_SUCCESS);
+
+  gst_element_set_state (pipeline, GST_STATE_NULL);
+
+  gst_object_unref (bus);
+  gst_object_unref (pipeline);
+}
+
+GST_START_TEST (test_streamsynchronizer_normal)
+{
+  run_streamsynchronizer_handle_eos ("videotestsrc name=videosrc ! "
+      "streamsynchronizer name=streamsync audiotestsrc name=audiosrc ! "
+      "streamsync. streamsync. ! fakesink sync=true streamsync. ! fakesink sync=true");
+}
+
+GST_END_TEST;
+
+GST_START_TEST (test_streamsynchronizer_track_with_less_data)
+{
+  run_streamsynchronizer_handle_eos ("videotestsrc name=videosrc ! "
+      "streamsynchronizer name=streamsync audiotestsrc name=audiosrc num-buffers=1 ! "
+      "streamsync. streamsync. ! fakesink sync=true streamsync. ! fakesink sync=true");
+}
+
+GST_END_TEST;
+
+GST_START_TEST (test_streamsynchronizer_track_without_data)
+{
+  run_streamsynchronizer_handle_eos ("videotestsrc name=videosrc ! "
+      "streamsynchronizer name=streamsync audiotestsrc name=audiosrc num-buffers=0 ! "
+      "streamsync. streamsync. ! fakesink sync=true streamsync. ! fakesink sync=true");
+}
+
+GST_END_TEST;
+
+static Suite *
+streamsynchronizer_handle_eos_suite (void)
+{
+  Suite *s = suite_create ("streamsynchronizer");
+  TCase *tc_chain = tcase_create ("general");
+
+  suite_add_tcase (s, tc_chain);
+  tcase_add_test (tc_chain, test_streamsynchronizer_normal);
+  tcase_add_test (tc_chain, test_streamsynchronizer_track_with_less_data);
+  tcase_add_test (tc_chain, test_streamsynchronizer_track_without_data);
+  return s;
+}
+
+GST_CHECK_MAIN (streamsynchronizer_handle_eos);
diff --git a/tests/check/pipelines/tcp.c b/tests/check/pipelines/tcp.c
new file mode 100644
index 0000000..00bdaa3
--- /dev/null
+++ b/tests/check/pipelines/tcp.c
@@ -0,0 +1,375 @@
+/* GStreamer
+ *
+ * Copyright (C) 2014 William Manley <will@williammanley.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.
+ */
+
+#include <unistd.h>
+#include <sys/socket.h>
+
+#include <gio/gio.h>
+#include <gst/check/gstcheck.h>
+#include <gst/app/gstappsink.h>
+#include <gst/app/gstappsrc.h>
+#include <gst/net/gstnetcontrolmessagemeta.h>
+
+#ifdef HAVE_GIO_UNIX_2_0
+#include <gio/gunixfdmessage.h>
+#endif /*  HAVE_GIO_UNIX_2_0 */
+
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <unistd.h>
+
+static gboolean
+g_socketpair (GSocketFamily family, GSocketType type, GSocketProtocol protocol,
+    GSocket * gsv[2], GError ** error);
+
+typedef struct
+{
+  GstElement *sink;
+  GstElement *src;
+
+  GstPipeline *sink_pipeline;
+  GstPipeline *src_pipeline;
+  GstAppSrc *sink_src;
+  GstAppSink *src_sink;
+} SymmetryTest;
+
+static void
+symmetry_test_setup (SymmetryTest * st, GstElement * sink, GstElement * src)
+{
+  GstCaps *caps;
+  st->sink = sink;
+  g_object_set (sink, "sync", FALSE, NULL);
+  st->src = src;
+
+  st->sink_pipeline = GST_PIPELINE (gst_pipeline_new (NULL));
+  st->src_pipeline = GST_PIPELINE (gst_pipeline_new (NULL));
+
+  st->sink_src = GST_APP_SRC (gst_element_factory_make ("appsrc", NULL));
+  fail_unless (st->sink_src != NULL);
+  caps = gst_caps_from_string ("application/x-gst-check");
+  gst_app_src_set_caps (st->sink_src, caps);
+  gst_caps_unref (caps);
+
+  gst_bin_add_many (GST_BIN (st->sink_pipeline), GST_ELEMENT (st->sink_src),
+      st->sink, NULL);
+  fail_unless (gst_element_link_many (GST_ELEMENT (st->sink_src), st->sink,
+          NULL));
+
+  st->src_sink = GST_APP_SINK (gst_element_factory_make ("appsink", NULL));
+  fail_unless (st->src_sink != NULL);
+  gst_bin_add_many (GST_BIN (st->src_pipeline), st->src,
+      GST_ELEMENT (st->src_sink), NULL);
+  fail_unless (gst_element_link_many (st->src, GST_ELEMENT (st->src_sink),
+          NULL));
+
+  gst_element_set_state (GST_ELEMENT (st->sink_pipeline), GST_STATE_PLAYING);
+  gst_element_set_state (GST_ELEMENT (st->src_pipeline), GST_STATE_PLAYING);
+}
+
+static void
+symmetry_test_teardown (SymmetryTest * st)
+{
+  fail_unless (gst_element_set_state (GST_ELEMENT (st->sink_pipeline),
+          GST_STATE_NULL) != GST_STATE_CHANGE_FAILURE);
+  fail_unless (gst_element_set_state (GST_ELEMENT (st->src_pipeline),
+          GST_STATE_NULL) != GST_STATE_CHANGE_FAILURE);
+
+  gst_object_unref (st->sink_pipeline);
+  gst_object_unref (st->src_pipeline);
+
+  memset (st, 0, sizeof (*st));
+}
+
+static void
+symmetry_test_assert_passthrough (SymmetryTest * st, GstBuffer * in)
+{
+  gpointer copy;
+  gsize data_size;
+  GstSample *out;
+
+  gst_buffer_extract_dup (in, 0, -1, &copy, &data_size);
+
+  fail_unless (gst_app_src_push_buffer (st->sink_src, in) == GST_FLOW_OK);
+  in = NULL;
+  out = gst_app_sink_pull_sample (st->src_sink);
+  fail_unless (out != NULL);
+
+  fail_unless (gst_buffer_get_size (gst_sample_get_buffer (out)) == data_size);
+  fail_unless (gst_buffer_memcmp (gst_sample_get_buffer (out), 0, copy,
+          data_size) == 0);
+  g_free (copy);
+  gst_sample_unref (out);
+}
+
+static gboolean
+g_socketpair (GSocketFamily family, GSocketType type, GSocketProtocol protocol,
+    GSocket * gsv[2], GError ** error)
+{
+  int ret;
+  int sv[2];
+
+  ret = socketpair (family, type, protocol, sv);
+  if (ret != 0) {
+    g_set_error (error, G_IO_ERROR, G_IO_ERROR_FAILED, "socketpair failed: %s",
+        g_strerror (errno));
+    return FALSE;
+  }
+
+  gsv[0] = g_socket_new_from_fd (sv[0], error);
+  if (gsv[0] == NULL) {
+    close (sv[0]);
+    close (sv[1]);
+    return FALSE;
+  }
+  gsv[1] = g_socket_new_from_fd (sv[1], error);
+  if (gsv[1] == NULL) {
+    g_object_unref (gsv[0]);
+    gsv[0] = NULL;
+    close (sv[1]);
+    return FALSE;
+  }
+  return TRUE;
+}
+
+static void
+setup_multisocketsink_and_socketsrc (SymmetryTest * st)
+{
+  GSocket *sockets[2] = { NULL, NULL };
+  GError *err = NULL;
+
+  st->sink = gst_check_setup_element ("multisocketsink");
+  st->src = gst_check_setup_element ("socketsrc");
+
+  fail_unless (g_socketpair (G_SOCKET_FAMILY_UNIX,
+          G_SOCKET_TYPE_STREAM, G_SOCKET_PROTOCOL_DEFAULT, sockets, &err));
+
+  g_object_set (st->src, "socket", sockets[0], NULL);
+  g_object_unref (sockets[0]);
+  sockets[0] = NULL;
+
+  symmetry_test_setup (st, st->sink, st->src);
+
+  g_signal_emit_by_name (st->sink, "add", sockets[1], NULL);
+  g_object_unref (sockets[1]);
+  sockets[1] = NULL;
+}
+
+GST_START_TEST (test_that_socketsrc_and_multisocketsink_are_symmetrical)
+{
+  SymmetryTest st = { 0 };
+  setup_multisocketsink_and_socketsrc (&st);
+  symmetry_test_assert_passthrough (&st,
+      gst_buffer_new_wrapped (g_strdup ("hello"), 5));
+  symmetry_test_teardown (&st);
+}
+
+GST_END_TEST;
+
+
+GST_START_TEST (test_that_tcpclientsink_and_tcpserversrc_are_symmetrical)
+{
+  SymmetryTest st = { 0 };
+  GstElement *serversrc = gst_check_setup_element ("tcpserversrc");
+
+  gst_element_set_state (serversrc, GST_STATE_PAUSED);
+  symmetry_test_setup (&st, gst_check_setup_element ("tcpclientsink"),
+      serversrc);
+
+  symmetry_test_assert_passthrough (&st,
+      gst_buffer_new_wrapped (g_strdup ("hello"), 5));
+
+  symmetry_test_teardown (&st);
+}
+
+GST_END_TEST;
+
+
+GST_START_TEST (test_that_tcpserversink_and_tcpclientsrc_are_symmetrical)
+{
+  SymmetryTest st = { 0 };
+
+  symmetry_test_setup (&st, gst_check_setup_element ("tcpserversink"),
+      gst_check_setup_element ("tcpclientsrc"));
+
+  symmetry_test_assert_passthrough (&st,
+      gst_buffer_new_wrapped (g_strdup ("hello"), 5));
+  symmetry_test_teardown (&st);
+}
+
+GST_END_TEST;
+
+static void
+on_connection_closed (GstElement * socketsrc, gpointer user_data)
+{
+  GSocket *socket = (GSocket *) user_data;
+
+  g_object_set (socketsrc, "socket", socket, NULL);
+}
+
+GST_START_TEST (test_that_we_can_provide_new_socketsrc_sockets_during_signal)
+{
+  GSocket *sockets[4] = { NULL, NULL };
+
+  GstPipeline *pipeline = NULL;
+  GstAppSink *appsink = NULL;
+  GstElement *socketsrc = NULL;
+  GstSample *sample = NULL;
+
+  socketsrc = gst_check_setup_element ("socketsrc");
+
+  fail_unless (g_socketpair (G_SOCKET_FAMILY_UNIX,
+          G_SOCKET_TYPE_STREAM, G_SOCKET_PROTOCOL_DEFAULT, &sockets[0], NULL));
+
+  fail_unless (g_socket_send (sockets[0], "hello", 5, NULL, NULL) == 5);
+  fail_unless (g_socket_shutdown (sockets[0], FALSE, TRUE, NULL));
+
+  fail_unless (g_socketpair (G_SOCKET_FAMILY_UNIX,
+          G_SOCKET_TYPE_STREAM, G_SOCKET_PROTOCOL_DEFAULT, &sockets[2], NULL));
+  fail_unless (g_socket_send (sockets[2], "goodbye", 7, NULL, NULL) == 7);
+  fail_unless (g_socket_shutdown (sockets[2], FALSE, TRUE, NULL));
+
+  g_object_set (socketsrc, "socket", sockets[1], NULL);
+
+  g_signal_connect (socketsrc, "connection-closed-by-peer",
+      G_CALLBACK (on_connection_closed), sockets[3]);
+
+  pipeline = (GstPipeline *) gst_pipeline_new (NULL);
+  appsink = GST_APP_SINK (gst_check_setup_element ("appsink"));
+  gst_bin_add_many (GST_BIN (pipeline), socketsrc, GST_ELEMENT (appsink), NULL);
+  fail_unless (gst_element_link_many (socketsrc, GST_ELEMENT (appsink), NULL));
+
+  gst_element_set_state (GST_ELEMENT (pipeline), GST_STATE_PLAYING);
+
+  fail_unless ((sample = gst_app_sink_pull_sample (appsink)) != NULL);
+  gst_buffer_memcmp (gst_sample_get_buffer (sample), 0, "hello", 5);
+  gst_sample_unref (sample);
+
+  fail_unless ((sample = gst_app_sink_pull_sample (appsink)) != NULL);
+  gst_buffer_memcmp (gst_sample_get_buffer (sample), 0, "goodbye", 7);
+  gst_sample_unref (sample);
+
+  fail_unless (NULL == gst_app_sink_pull_sample (appsink));
+  fail_unless (gst_app_sink_is_eos (appsink));
+
+  gst_element_set_state (GST_ELEMENT (pipeline), GST_STATE_NULL);
+  g_clear_object (&sockets[0]);
+  g_clear_object (&sockets[1]);
+  g_clear_object (&sockets[2]);
+  g_clear_object (&sockets[3]);
+  gst_object_unref (pipeline);
+}
+
+GST_END_TEST
+#ifdef HAVE_GIO_UNIX_2_0
+static GSocketControlMessage *
+get_control_message_meta (GstBuffer * buf)
+{
+  GstMeta *meta;
+  gpointer iter_state = NULL;
+
+  while ((meta = gst_buffer_iterate_meta (buf, &iter_state)) != NULL) {
+    if (meta->info->api == GST_NET_CONTROL_MESSAGE_META_API_TYPE)
+      return ((GstNetControlMessageMeta *) meta)->message;
+  }
+  fail ("Expected GSocketControlMessage attached to buffer");
+  return NULL;
+}
+
+
+GST_START_TEST (test_that_multisocketsink_and_socketsrc_preserve_meta)
+{
+  GstBuffer *buf;
+  GSocketControlMessage *msg;
+  SymmetryTest st = { 0 };
+  char tmpfilename[] = "/tmp/tcp-test.XXXXXX";
+  GstSample *out;
+  int orig_fd, *new_fds, new_fds_len;
+  struct stat orig_stat, new_stat;
+
+  setup_multisocketsink_and_socketsrc (&st);
+
+  orig_fd = mkstemp (tmpfilename);
+  fail_unless (orig_fd > 0);
+  fail_unless (unlink (tmpfilename) == 0);
+  fstat (orig_fd, &orig_stat);
+
+  msg = g_unix_fd_message_new ();
+  fail_unless (g_unix_fd_message_append_fd ((GUnixFDMessage *) msg, orig_fd,
+          NULL));
+  close (orig_fd);
+  orig_fd = -1;
+
+  buf = gst_buffer_new_wrapped (g_strdup ("hello"), 5);
+  gst_buffer_add_net_control_message_meta (buf, msg);
+  g_clear_object (&msg);
+
+  fail_unless (gst_app_src_push_buffer (st.sink_src, buf) == GST_FLOW_OK);
+  buf = NULL;
+
+  out = gst_app_sink_pull_sample (st.src_sink);
+  fail_unless (out != NULL);
+
+  fail_unless (gst_buffer_get_size (gst_sample_get_buffer (out)) == 5);
+  fail_unless (gst_buffer_memcmp (gst_sample_get_buffer (out), 0, "hello",
+          5) == 0);
+
+  msg = get_control_message_meta (gst_sample_get_buffer (out));
+  fail_unless (g_socket_control_message_get_msg_type (msg) == SCM_RIGHTS);
+  new_fds = g_unix_fd_message_steal_fds ((GUnixFDMessage *) msg, &new_fds_len);
+  fail_unless (new_fds_len == 1);
+
+  fstat (new_fds[0], &new_stat);
+  fail_unless (orig_stat.st_ino, new_stat.st_ino);
+
+  close (new_fds[0]);
+  g_free (new_fds);
+
+  gst_sample_unref (out);
+
+  symmetry_test_teardown (&st);
+}
+
+GST_END_TEST;
+#endif /* HAVE_GIO_UNIX_2_0 */
+
+static Suite *
+socketintegrationtest_suite (void)
+{
+  Suite *s = suite_create ("socketintegrationtest");
+  TCase *tc_chain = tcase_create ("general");
+
+  suite_add_tcase (s, tc_chain);
+  tcase_add_test (tc_chain,
+      test_that_socketsrc_and_multisocketsink_are_symmetrical);
+  tcase_add_test (tc_chain,
+      test_that_tcpclientsink_and_tcpserversrc_are_symmetrical);
+  tcase_add_test (tc_chain,
+      test_that_tcpserversink_and_tcpclientsrc_are_symmetrical);
+  tcase_add_test (tc_chain,
+      test_that_we_can_provide_new_socketsrc_sockets_during_signal);
+#ifdef HAVE_GIO_UNIX_2_0
+  tcase_add_test (tc_chain,
+      test_that_multisocketsink_and_socketsrc_preserve_meta);
+#endif /* HAVE_GIO_UNIX_2_0 */
+
+  return s;
+}
+
+GST_CHECK_MAIN (socketintegrationtest);
diff --git a/tests/check/pipelines/theoraenc.c b/tests/check/pipelines/theoraenc.c
index 03750ff..ff8b6e1 100644
--- a/tests/check/pipelines/theoraenc.c
+++ b/tests/check/pipelines/theoraenc.c
@@ -328,19 +328,4 @@
   return s;
 }
 
-int
-main (int argc, char **argv)
-{
-  int nf;
-
-  Suite *s = theoraenc_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;
-}
+GST_CHECK_MAIN (theoraenc);
diff --git a/tests/check/pipelines/vorbisdec.c b/tests/check/pipelines/vorbisdec.c
index 43c673a..51b7f38 100644
--- a/tests/check/pipelines/vorbisdec.c
+++ b/tests/check/pipelines/vorbisdec.c
@@ -94,7 +94,7 @@
 #endif /* #ifndef GST_DISABLE_PARSE */
 
 static Suite *
-vorbisenc_suite (void)
+vorbisdec_suite (void)
 {
   Suite *s = suite_create ("vorbisdec");
   TCase *tc_chain = tcase_create ("general");
@@ -107,19 +107,4 @@
   return s;
 }
 
-int
-main (int argc, char **argv)
-{
-  int nf;
-
-  Suite *s = vorbisenc_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;
-}
+GST_CHECK_MAIN (vorbisdec);
diff --git a/tests/check/pipelines/vorbisenc.c b/tests/check/pipelines/vorbisenc.c
index a9bb2be..246c903 100644
--- a/tests/check/pipelines/vorbisenc.c
+++ b/tests/check/pipelines/vorbisenc.c
@@ -392,19 +392,4 @@
   return s;
 }
 
-int
-main (int argc, char **argv)
-{
-  int nf;
-
-  Suite *s = vorbisenc_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;
-}
+GST_CHECK_MAIN (vorbisenc);
diff --git a/tests/examples/Makefile.in b/tests/examples/Makefile.in
index 1a686ff..8c36388 100644
--- a/tests/examples/Makefile.in
+++ b/tests/examples/Makefile.in
@@ -1,7 +1,7 @@
-# Makefile.in generated by automake 1.14.1 from Makefile.am.
+# Makefile.in generated by automake 1.15 from Makefile.am.
 # @configure_input@
 
-# Copyright (C) 1994-2013 Free Software Foundation, Inc.
+# 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,
@@ -19,7 +19,17 @@
 # descending into all subdirectories a second time, but only after the first
 # (parallel) run has finished, so it should go right through the second time.
 VPATH = @srcdir@
-am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)'
+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 \
       ?) ;; \
@@ -83,8 +93,6 @@
 build_triplet = @build@
 host_triplet = @host@
 target_triplet = @target@
-DIST_COMMON = $(top_srcdir)/common/parallel-subdirs.mak \
-	$(srcdir)/Makefile.in $(srcdir)/Makefile.am
 subdir = tests/examples
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
 am__aclocal_m4_deps = $(top_srcdir)/common/m4/as-ac-expand.m4 \
@@ -106,7 +114,6 @@
 	$(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-x11.m4 \
 	$(top_srcdir)/common/m4/gst.m4 \
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
@@ -123,6 +130,7 @@
 	$(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
 mkinstalldirs = $(install_sh) -d
 CONFIG_HEADER = $(top_builddir)/config.h
 CONFIG_CLEAN_FILES =
@@ -181,6 +189,8 @@
   done | $(am__uniquify_input)`
 ETAGS = etags
 CTAGS = ctags
+am__DIST_COMMON = $(srcdir)/Makefile.in \
+	$(top_srcdir)/common/parallel-subdirs.mak
 DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
 am__relativize = \
   dir0=`pwd`; \
@@ -266,6 +276,8 @@
 GIO_CFLAGS = @GIO_CFLAGS@
 GIO_LDFLAGS = @GIO_LDFLAGS@
 GIO_LIBS = @GIO_LIBS@
+GIO_UNIX_2_0_CFLAGS = @GIO_UNIX_2_0_CFLAGS@
+GIO_UNIX_2_0_LIBS = @GIO_UNIX_2_0_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
@@ -295,6 +307,8 @@
 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_OPTION_CFLAGS = @GST_OPTION_CFLAGS@
 GST_OPTION_CXXFLAGS = @GST_OPTION_CXXFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
@@ -322,7 +336,6 @@
 GTK_X11_CFLAGS = @GTK_X11_CFLAGS@
 GTK_X11_LIBS = @GTK_X11_LIBS@
 HAVE_CDPARANOIA = @HAVE_CDPARANOIA@
-HAVE_X = @HAVE_X@
 HAVE_XSHM = @HAVE_XSHM@
 HAVE_ZLIB = @HAVE_ZLIB@
 HTML_DIR = @HTML_DIR@
@@ -337,6 +350,7 @@
 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@
@@ -426,13 +440,12 @@
 XGETTEXT = @XGETTEXT@
 XGETTEXT_015 = @XGETTEXT_015@
 XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
-XMKMF = @XMKMF@
+XSHM_CFLAGS = @XSHM_CFLAGS@
 XSHM_LIBS = @XSHM_LIBS@
+XVIDEO_CFLAGS = @XVIDEO_CFLAGS@
 XVIDEO_LIBS = @XVIDEO_LIBS@
 X_CFLAGS = @X_CFLAGS@
-X_EXTRA_LIBS = @X_EXTRA_LIBS@
 X_LIBS = @X_LIBS@
-X_PRE_LIBS = @X_PRE_LIBS@
 ZLIB_CFLAGS = @ZLIB_CFLAGS@
 ZLIB_LIBS = @ZLIB_LIBS@
 abs_builddir = @abs_builddir@
@@ -485,6 +498,7 @@
 psdir = @psdir@
 pyexecdir = @pyexecdir@
 pythondir = @pythondir@
+runstatedir = @runstatedir@
 sbindir = @sbindir@
 sharedstatedir = @sharedstatedir@
 srcdir = @srcdir@
@@ -517,7 +531,6 @@
 	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu tests/examples/Makefile'; \
 	$(am__cd) $(top_srcdir) && \
 	  $(AUTOMAKE) --gnu tests/examples/Makefile
-.PRECIOUS: Makefile
 Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
 	@case '$?' in \
 	  *config.status*) \
@@ -526,7 +539,7 @@
 	    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/parallel-subdirs.mak:
+$(top_srcdir)/common/parallel-subdirs.mak $(am__empty):
 
 $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
 	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
@@ -813,6 +826,8 @@
 	mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \
 	ps ps-am tags tags-am uninstall uninstall-am
 
+.PRECIOUS: Makefile
+
 
 .PHONY: independent-subdirs $(SUBDIRS)
 
diff --git a/tests/examples/app/Makefile.am b/tests/examples/app/Makefile.am
index 3679e28..689ee2f 100644
--- a/tests/examples/app/Makefile.am
+++ b/tests/examples/app/Makefile.am
@@ -1,6 +1,6 @@
 
 noinst_PROGRAMS = appsrc_ex appsrc-stream appsrc-stream2 appsrc-ra \
-		  appsrc-seekable appsink-src
+		  appsrc-seekable appsink-src appsink-src2
 
 appsrc_ex_SOURCES = appsrc_ex.c
 appsrc_ex_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_BASE_CFLAGS) $(GST_CFLAGS)
@@ -30,3 +30,8 @@
     $(top_builddir)/gst-libs/gst/app/libgstapp-@GST_API_VERSION@.la \
     $(GST_BASE_LIBS) $(GST_LIBS)
 
+appsink_src2_SOURCES = appsink-src2.c
+appsink_src2_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_BASE_CFLAGS) $(GST_CFLAGS)
+appsink_src2_LDADD = \
+    $(top_builddir)/gst-libs/gst/app/libgstapp-@GST_API_VERSION@.la \
+    $(GST_BASE_LIBS) $(GST_LIBS)
diff --git a/tests/examples/app/Makefile.in b/tests/examples/app/Makefile.in
index be519d0..73d5a3a 100644
--- a/tests/examples/app/Makefile.in
+++ b/tests/examples/app/Makefile.in
@@ -1,7 +1,7 @@
-# Makefile.in generated by automake 1.14.1 from Makefile.am.
+# Makefile.in generated by automake 1.15 from Makefile.am.
 # @configure_input@
 
-# Copyright (C) 1994-2013 Free Software Foundation, Inc.
+# 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,
@@ -15,7 +15,17 @@
 @SET_MAKE@
 
 VPATH = @srcdir@
-am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)'
+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 \
       ?) ;; \
@@ -81,10 +91,9 @@
 target_triplet = @target@
 noinst_PROGRAMS = appsrc_ex$(EXEEXT) appsrc-stream$(EXEEXT) \
 	appsrc-stream2$(EXEEXT) appsrc-ra$(EXEEXT) \
-	appsrc-seekable$(EXEEXT) appsink-src$(EXEEXT)
+	appsrc-seekable$(EXEEXT) appsink-src$(EXEEXT) \
+	appsink-src2$(EXEEXT)
 subdir = tests/examples/app
-DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \
-	$(top_srcdir)/depcomp
 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 \
@@ -105,7 +114,6 @@
 	$(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-x11.m4 \
 	$(top_srcdir)/common/m4/gst.m4 \
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
@@ -122,6 +130,7 @@
 	$(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
 mkinstalldirs = $(install_sh) -d
 CONFIG_HEADER = $(top_builddir)/config.h
 CONFIG_CLEAN_FILES =
@@ -139,6 +148,13 @@
 appsink_src_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
 	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(appsink_src_CFLAGS) \
 	$(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
+am_appsink_src2_OBJECTS = appsink_src2-appsink-src2.$(OBJEXT)
+appsink_src2_OBJECTS = $(am_appsink_src2_OBJECTS)
+appsink_src2_DEPENDENCIES = $(top_builddir)/gst-libs/gst/app/libgstapp-@GST_API_VERSION@.la \
+	$(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1)
+appsink_src2_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(appsink_src2_CFLAGS) \
+	$(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
 am_appsrc_ra_OBJECTS = appsrc_ra-appsrc-ra.$(OBJEXT)
 appsrc_ra_OBJECTS = $(am_appsrc_ra_OBJECTS)
 appsrc_ra_DEPENDENCIES = $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1)
@@ -210,12 +226,14 @@
 am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@)
 am__v_CCLD_0 = @echo "  CCLD    " $@;
 am__v_CCLD_1 = 
-SOURCES = $(appsink_src_SOURCES) $(appsrc_ra_SOURCES) \
-	$(appsrc_seekable_SOURCES) $(appsrc_stream_SOURCES) \
-	$(appsrc_stream2_SOURCES) $(appsrc_ex_SOURCES)
-DIST_SOURCES = $(appsink_src_SOURCES) $(appsrc_ra_SOURCES) \
-	$(appsrc_seekable_SOURCES) $(appsrc_stream_SOURCES) \
-	$(appsrc_stream2_SOURCES) $(appsrc_ex_SOURCES)
+SOURCES = $(appsink_src_SOURCES) $(appsink_src2_SOURCES) \
+	$(appsrc_ra_SOURCES) $(appsrc_seekable_SOURCES) \
+	$(appsrc_stream_SOURCES) $(appsrc_stream2_SOURCES) \
+	$(appsrc_ex_SOURCES)
+DIST_SOURCES = $(appsink_src_SOURCES) $(appsink_src2_SOURCES) \
+	$(appsrc_ra_SOURCES) $(appsrc_seekable_SOURCES) \
+	$(appsrc_stream_SOURCES) $(appsrc_stream2_SOURCES) \
+	$(appsrc_ex_SOURCES)
 am__can_run_installinfo = \
   case $$AM_UPDATE_INFO_DIR in \
     n|no|NO) false;; \
@@ -240,6 +258,7 @@
   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@
@@ -300,6 +319,8 @@
 GIO_CFLAGS = @GIO_CFLAGS@
 GIO_LDFLAGS = @GIO_LDFLAGS@
 GIO_LIBS = @GIO_LIBS@
+GIO_UNIX_2_0_CFLAGS = @GIO_UNIX_2_0_CFLAGS@
+GIO_UNIX_2_0_LIBS = @GIO_UNIX_2_0_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
@@ -329,6 +350,8 @@
 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_OPTION_CFLAGS = @GST_OPTION_CFLAGS@
 GST_OPTION_CXXFLAGS = @GST_OPTION_CXXFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
@@ -356,7 +379,6 @@
 GTK_X11_CFLAGS = @GTK_X11_CFLAGS@
 GTK_X11_LIBS = @GTK_X11_LIBS@
 HAVE_CDPARANOIA = @HAVE_CDPARANOIA@
-HAVE_X = @HAVE_X@
 HAVE_XSHM = @HAVE_XSHM@
 HAVE_ZLIB = @HAVE_ZLIB@
 HTML_DIR = @HTML_DIR@
@@ -371,6 +393,7 @@
 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@
@@ -460,13 +483,12 @@
 XGETTEXT = @XGETTEXT@
 XGETTEXT_015 = @XGETTEXT_015@
 XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
-XMKMF = @XMKMF@
+XSHM_CFLAGS = @XSHM_CFLAGS@
 XSHM_LIBS = @XSHM_LIBS@
+XVIDEO_CFLAGS = @XVIDEO_CFLAGS@
 XVIDEO_LIBS = @XVIDEO_LIBS@
 X_CFLAGS = @X_CFLAGS@
-X_EXTRA_LIBS = @X_EXTRA_LIBS@
 X_LIBS = @X_LIBS@
-X_PRE_LIBS = @X_PRE_LIBS@
 ZLIB_CFLAGS = @ZLIB_CFLAGS@
 ZLIB_LIBS = @ZLIB_LIBS@
 abs_builddir = @abs_builddir@
@@ -519,6 +541,7 @@
 psdir = @psdir@
 pyexecdir = @pyexecdir@
 pythondir = @pythondir@
+runstatedir = @runstatedir@
 sbindir = @sbindir@
 sharedstatedir = @sharedstatedir@
 srcdir = @srcdir@
@@ -555,6 +578,12 @@
     $(top_builddir)/gst-libs/gst/app/libgstapp-@GST_API_VERSION@.la \
     $(GST_BASE_LIBS) $(GST_LIBS)
 
+appsink_src2_SOURCES = appsink-src2.c
+appsink_src2_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_BASE_CFLAGS) $(GST_CFLAGS)
+appsink_src2_LDADD = \
+    $(top_builddir)/gst-libs/gst/app/libgstapp-@GST_API_VERSION@.la \
+    $(GST_BASE_LIBS) $(GST_LIBS)
+
 all: all-am
 
 .SUFFIXES:
@@ -571,7 +600,6 @@
 	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu tests/examples/app/Makefile'; \
 	$(am__cd) $(top_srcdir) && \
 	  $(AUTOMAKE) --gnu tests/examples/app/Makefile
-.PRECIOUS: Makefile
 Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
 	@case '$?' in \
 	  *config.status*) \
@@ -603,6 +631,10 @@
 	@rm -f appsink-src$(EXEEXT)
 	$(AM_V_CCLD)$(appsink_src_LINK) $(appsink_src_OBJECTS) $(appsink_src_LDADD) $(LIBS)
 
+appsink-src2$(EXEEXT): $(appsink_src2_OBJECTS) $(appsink_src2_DEPENDENCIES) $(EXTRA_appsink_src2_DEPENDENCIES) 
+	@rm -f appsink-src2$(EXEEXT)
+	$(AM_V_CCLD)$(appsink_src2_LINK) $(appsink_src2_OBJECTS) $(appsink_src2_LDADD) $(LIBS)
+
 appsrc-ra$(EXEEXT): $(appsrc_ra_OBJECTS) $(appsrc_ra_DEPENDENCIES) $(EXTRA_appsrc_ra_DEPENDENCIES) 
 	@rm -f appsrc-ra$(EXEEXT)
 	$(AM_V_CCLD)$(appsrc_ra_LINK) $(appsrc_ra_OBJECTS) $(appsrc_ra_LDADD) $(LIBS)
@@ -630,6 +662,7 @@
 	-rm -f *.tab.c
 
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/appsink_src-appsink-src.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/appsink_src2-appsink-src2.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/appsrc_ex-appsrc_ex.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/appsrc_ra-appsrc-ra.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/appsrc_seekable-appsrc-seekable.Po@am__quote@
@@ -674,6 +707,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) $(appsink_src_CFLAGS) $(CFLAGS) -c -o appsink_src-appsink-src.obj `if test -f 'appsink-src.c'; then $(CYGPATH_W) 'appsink-src.c'; else $(CYGPATH_W) '$(srcdir)/appsink-src.c'; fi`
 
+appsink_src2-appsink-src2.o: appsink-src2.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(appsink_src2_CFLAGS) $(CFLAGS) -MT appsink_src2-appsink-src2.o -MD -MP -MF $(DEPDIR)/appsink_src2-appsink-src2.Tpo -c -o appsink_src2-appsink-src2.o `test -f 'appsink-src2.c' || echo '$(srcdir)/'`appsink-src2.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/appsink_src2-appsink-src2.Tpo $(DEPDIR)/appsink_src2-appsink-src2.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='appsink-src2.c' object='appsink_src2-appsink-src2.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) $(appsink_src2_CFLAGS) $(CFLAGS) -c -o appsink_src2-appsink-src2.o `test -f 'appsink-src2.c' || echo '$(srcdir)/'`appsink-src2.c
+
+appsink_src2-appsink-src2.obj: appsink-src2.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(appsink_src2_CFLAGS) $(CFLAGS) -MT appsink_src2-appsink-src2.obj -MD -MP -MF $(DEPDIR)/appsink_src2-appsink-src2.Tpo -c -o appsink_src2-appsink-src2.obj `if test -f 'appsink-src2.c'; then $(CYGPATH_W) 'appsink-src2.c'; else $(CYGPATH_W) '$(srcdir)/appsink-src2.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/appsink_src2-appsink-src2.Tpo $(DEPDIR)/appsink_src2-appsink-src2.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='appsink-src2.c' object='appsink_src2-appsink-src2.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) $(appsink_src2_CFLAGS) $(CFLAGS) -c -o appsink_src2-appsink-src2.obj `if test -f 'appsink-src2.c'; then $(CYGPATH_W) 'appsink-src2.c'; else $(CYGPATH_W) '$(srcdir)/appsink-src2.c'; fi`
+
 appsrc_ra-appsrc-ra.o: appsrc-ra.c
 @am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(appsrc_ra_CFLAGS) $(CFLAGS) -MT appsrc_ra-appsrc-ra.o -MD -MP -MF $(DEPDIR)/appsrc_ra-appsrc-ra.Tpo -c -o appsrc_ra-appsrc-ra.o `test -f 'appsrc-ra.c' || echo '$(srcdir)/'`appsrc-ra.c
 @am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/appsrc_ra-appsrc-ra.Tpo $(DEPDIR)/appsrc_ra-appsrc-ra.Po
@@ -953,6 +1000,8 @@
 	mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
 	tags tags-am uninstall uninstall-am
 
+.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.
diff --git a/tests/examples/app/appsink-src.c b/tests/examples/app/appsink-src.c
index ecf7f05..b0de46b 100644
--- a/tests/examples/app/appsink-src.c
+++ b/tests/examples/app/appsink-src.c
@@ -1,3 +1,25 @@
+/* GStreamer
+ *
+ * appsink-src.c: example for using appsink and appsrc.
+ *
+ * Copyright (C) 2008 Wim Taymans <wim.taymans@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 <gst/gst.h>
 
 #include <string.h>
@@ -24,6 +46,7 @@
   GstSample *sample;
   GstBuffer *app_buffer, *buffer;
   GstElement *source;
+  GstFlowReturn ret;
 
   /* get the sample from appsink */
   sample = gst_app_sink_pull_sample (GST_APP_SINK (elt));
@@ -37,7 +60,10 @@
 
   /* get source an push new buffer */
   source = gst_bin_get_by_name (GST_BIN (data->sink), "testsource");
-  return gst_app_src_push_buffer (GST_APP_SRC (source), app_buffer);
+  ret = gst_app_src_push_buffer (GST_APP_SRC (source), app_buffer);
+  gst_object_unref (source);
+
+  return ret;
 }
 
 /* called when we get a GstMessage from the source pipeline when we get EOS, we
@@ -52,6 +78,7 @@
       g_print ("The source got dry\n");
       source = gst_bin_get_by_name (GST_BIN (data->sink), "testsource");
       gst_app_src_end_of_stream (GST_APP_SRC (source));
+      gst_object_unref (source);
       break;
     case GST_MESSAGE_ERROR:
       g_print ("Received error\n");
@@ -101,6 +128,11 @@
   else
     filename = g_strdup ("/usr/share/sounds/ekiga/ring.wav");
 
+  if (!g_file_test (filename, G_FILE_TEST_EXISTS)) {
+    g_print ("File %s does not exist\n", filename);
+    return -1;
+  }
+
   data = g_new0 (ProgramData, 1);
 
   data->loop = g_main_loop_new (NULL, FALSE);
diff --git a/tests/examples/app/appsink-src2.c b/tests/examples/app/appsink-src2.c
new file mode 100644
index 0000000..a409fa8
--- /dev/null
+++ b/tests/examples/app/appsink-src2.c
@@ -0,0 +1,197 @@
+/* GStreamer
+ *
+ * appsrc-src2.c: example for using gst_app_src_push_sample().
+ *
+ * Copyright (C) 2014 Nicola Murino <nicola.murino@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 <gst/gst.h>
+
+#include <string.h>
+
+#include <gst/app/gstappsrc.h>
+#include <gst/app/gstappsink.h>
+
+/*
+ * In this sample we show the usage of gst_app_src_push_sample in push 
+ * mode, this method set the appsrc caps based on the caps from the sample 
+ *
+ */
+
+typedef struct
+{
+  GMainLoop *loop;
+  GstElement *source;
+  GstElement *sink;
+} ProgramData;
+
+/* called when the appsink notifies us that there is a new buffer ready for
+ * processing */
+
+static GstFlowReturn
+on_new_sample_from_sink (GstElement * elt, ProgramData * data)
+{
+  GstSample *sample;
+  GstElement *source;
+  GstFlowReturn ret;
+
+  /* get the sample from appsink */
+  sample = gst_app_sink_pull_sample (GST_APP_SINK (elt));
+
+  /* get source an push new sample */
+  source = gst_bin_get_by_name (GST_BIN (data->sink), "testsource");
+  ret = gst_app_src_push_sample (GST_APP_SRC (source), sample);
+  gst_object_unref (source);
+
+  /* we don't need the appsink sample anymore */
+  gst_sample_unref (sample);
+
+  return ret;
+}
+
+/* called when we get a GstMessage from the source pipeline when we get EOS, we
+ * notify the appsrc of it. */
+static gboolean
+on_source_message (GstBus * bus, GstMessage * message, ProgramData * data)
+{
+  GstElement *source;
+
+  switch (GST_MESSAGE_TYPE (message)) {
+    case GST_MESSAGE_EOS:
+      g_print ("The source got dry\n");
+      source = gst_bin_get_by_name (GST_BIN (data->sink), "testsource");
+      gst_app_src_end_of_stream (GST_APP_SRC (source));
+      gst_object_unref (source);
+      break;
+    case GST_MESSAGE_ERROR:
+      g_print ("Received error\n");
+      g_main_loop_quit (data->loop);
+      break;
+    default:
+      break;
+  }
+  return TRUE;
+}
+
+/* called when we get a GstMessage from the sink pipeline when we get EOS, we
+ * exit the mainloop and this testapp. */
+static gboolean
+on_sink_message (GstBus * bus, GstMessage * message, ProgramData * data)
+{
+  /* nil */
+  switch (GST_MESSAGE_TYPE (message)) {
+    case GST_MESSAGE_EOS:
+      g_print ("Finished playback\n");
+      g_main_loop_quit (data->loop);
+      break;
+    case GST_MESSAGE_ERROR:
+      g_print ("Received error\n");
+      g_main_loop_quit (data->loop);
+      break;
+    default:
+      break;
+  }
+  return TRUE;
+}
+
+int
+main (int argc, char *argv[])
+{
+  ProgramData *data = NULL;
+  gchar *string = NULL;
+  GstBus *bus = NULL;
+  GstElement *testsink = NULL;
+  GstElement *testsource = NULL;
+
+  gst_init (&argc, &argv);
+
+  data = g_new0 (ProgramData, 1);
+
+  data->loop = g_main_loop_new (NULL, FALSE);
+
+  /* setting up source pipeline, we read from a file and convert to our desired
+   * caps. */
+  string =
+      g_strdup_printf
+      ("audiotestsrc num-buffers=200 ! wavenc ! wavparse ! appsink name=testsink");
+  data->source = gst_parse_launch (string, NULL);
+  g_free (string);
+
+  if (data->source == NULL) {
+    g_print ("Bad source\n");
+    return -1;
+  }
+
+  /* to be notified of messages from this pipeline, mostly EOS */
+  bus = gst_element_get_bus (data->source);
+  gst_bus_add_watch (bus, (GstBusFunc) on_source_message, data);
+  gst_object_unref (bus);
+
+  /* we use appsink in push mode, it sends us a signal when data is available
+   * and we pull out the data in the signal callback. We want the appsink to
+   * push as fast as it can, hence the sync=false */
+  testsink = gst_bin_get_by_name (GST_BIN (data->source), "testsink");
+  g_object_set (G_OBJECT (testsink), "emit-signals", TRUE, "sync", FALSE, NULL);
+  g_signal_connect (testsink, "new-sample",
+      G_CALLBACK (on_new_sample_from_sink), data);
+  gst_object_unref (testsink);
+
+  /* setting up sink pipeline, we push audio data into this pipeline that will
+   * then play it back using the default audio sink. */
+  string =
+      g_strdup_printf
+      ("appsrc name=testsource ! audioconvert ! audioresample ! autoaudiosink");
+  data->sink = gst_parse_launch (string, NULL);
+  g_free (string);
+
+  if (data->sink == NULL) {
+    g_print ("Bad sink\n");
+    return -1;
+  }
+
+  testsource = gst_bin_get_by_name (GST_BIN (data->sink), "testsource");
+  /* configure for time-based format */
+  g_object_set (testsource, "format", GST_FORMAT_TIME, NULL);
+  /* uncomment the next line to block when appsrc has buffered enough */
+  /* g_object_set (testsource, "block", TRUE, NULL); */
+  gst_object_unref (testsource);
+
+  bus = gst_element_get_bus (data->sink);
+  gst_bus_add_watch (bus, (GstBusFunc) on_sink_message, data);
+  gst_object_unref (bus);
+
+  /* launching things */
+  gst_element_set_state (data->sink, GST_STATE_PLAYING);
+  gst_element_set_state (data->source, GST_STATE_PLAYING);
+
+  /* let's run !, this loop will quit when the sink pipeline goes EOS or when an
+   * error occurs in the source or sink pipelines. */
+  g_print ("Let's run!\n");
+  g_main_loop_run (data->loop);
+  g_print ("Going out\n");
+
+  gst_element_set_state (data->source, GST_STATE_NULL);
+  gst_element_set_state (data->sink, GST_STATE_NULL);
+
+  gst_object_unref (data->source);
+  gst_object_unref (data->sink);
+  g_main_loop_unref (data->loop);
+  g_free (data);
+
+  return 0;
+}
diff --git a/tests/examples/app/appsrc_ex.c b/tests/examples/app/appsrc_ex.c
index 7490613..8919280 100644
--- a/tests/examples/app/appsrc_ex.c
+++ b/tests/examples/app/appsrc_ex.c
@@ -1,3 +1,24 @@
+/* GStreamer
+ *
+ * appsrc_ex.c: example for using appsrc and appsink linked.
+ *
+ * Copyright (C) 2007 David Schleef <ds@schleef.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.
+ */
 
 
 #ifdef HAVE_CONFIG_H
diff --git a/tests/examples/audio/Makefile.in b/tests/examples/audio/Makefile.in
index 0918816..e5f81e0 100644
--- a/tests/examples/audio/Makefile.in
+++ b/tests/examples/audio/Makefile.in
@@ -1,7 +1,7 @@
-# Makefile.in generated by automake 1.14.1 from Makefile.am.
+# Makefile.in generated by automake 1.15 from Makefile.am.
 # @configure_input@
 
-# Copyright (C) 1994-2013 Free Software Foundation, Inc.
+# 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,
@@ -15,7 +15,17 @@
 @SET_MAKE@
 
 VPATH = @srcdir@
-am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)'
+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 \
       ?) ;; \
@@ -81,8 +91,6 @@
 target_triplet = @target@
 noinst_PROGRAMS = $(am__EXEEXT_1)
 subdir = tests/examples/audio
-DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \
-	$(top_srcdir)/depcomp
 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 \
@@ -103,7 +111,6 @@
 	$(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-x11.m4 \
 	$(top_srcdir)/common/m4/gst.m4 \
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
@@ -120,6 +127,7 @@
 	$(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
 mkinstalldirs = $(install_sh) -d
 CONFIG_HEADER = $(top_builddir)/config.h
 CONFIG_CLEAN_FILES =
@@ -207,6 +215,7 @@
   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@
@@ -267,6 +276,8 @@
 GIO_CFLAGS = @GIO_CFLAGS@
 GIO_LDFLAGS = @GIO_LDFLAGS@
 GIO_LIBS = @GIO_LIBS@
+GIO_UNIX_2_0_CFLAGS = @GIO_UNIX_2_0_CFLAGS@
+GIO_UNIX_2_0_LIBS = @GIO_UNIX_2_0_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
@@ -296,6 +307,8 @@
 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_OPTION_CFLAGS = @GST_OPTION_CFLAGS@
 GST_OPTION_CXXFLAGS = @GST_OPTION_CXXFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
@@ -323,7 +336,6 @@
 GTK_X11_CFLAGS = @GTK_X11_CFLAGS@
 GTK_X11_LIBS = @GTK_X11_LIBS@
 HAVE_CDPARANOIA = @HAVE_CDPARANOIA@
-HAVE_X = @HAVE_X@
 HAVE_XSHM = @HAVE_XSHM@
 HAVE_ZLIB = @HAVE_ZLIB@
 HTML_DIR = @HTML_DIR@
@@ -338,6 +350,7 @@
 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@
@@ -427,13 +440,12 @@
 XGETTEXT = @XGETTEXT@
 XGETTEXT_015 = @XGETTEXT_015@
 XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
-XMKMF = @XMKMF@
+XSHM_CFLAGS = @XSHM_CFLAGS@
 XSHM_LIBS = @XSHM_LIBS@
+XVIDEO_CFLAGS = @XVIDEO_CFLAGS@
 XVIDEO_LIBS = @XVIDEO_LIBS@
 X_CFLAGS = @X_CFLAGS@
-X_EXTRA_LIBS = @X_EXTRA_LIBS@
 X_LIBS = @X_LIBS@
-X_PRE_LIBS = @X_PRE_LIBS@
 ZLIB_CFLAGS = @ZLIB_CFLAGS@
 ZLIB_LIBS = @ZLIB_LIBS@
 abs_builddir = @abs_builddir@
@@ -486,6 +498,7 @@
 psdir = @psdir@
 pyexecdir = @pyexecdir@
 pythondir = @pythondir@
+runstatedir = @runstatedir@
 sbindir = @sbindir@
 sharedstatedir = @sharedstatedir@
 srcdir = @srcdir@
@@ -522,7 +535,6 @@
 	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu tests/examples/audio/Makefile'; \
 	$(am__cd) $(top_srcdir) && \
 	  $(AUTOMAKE) --gnu tests/examples/audio/Makefile
-.PRECIOUS: Makefile
 Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
 	@case '$?' in \
 	  *config.status*) \
@@ -828,6 +840,8 @@
 	mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
 	tags tags-am uninstall uninstall-am
 
+.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.
diff --git a/tests/examples/audio/audiomix.c b/tests/examples/audio/audiomix.c
index dfe95c8..82eec8d 100644
--- a/tests/examples/audio/audiomix.c
+++ b/tests/examples/audio/audiomix.c
@@ -23,9 +23,6 @@
 #ifdef HAVE_CONFIG_H
 #include "config.h"
 #endif
-/* FIXME 0.11: suppress warnings for deprecated API such as GStaticRecMutex
- * with newer GTK versions (>= 3.3.0) */
-#define GDK_DISABLE_DEPRECATION_WARNINGS
 
 #include <string.h>
 #include <gst/gst.h>
@@ -55,8 +52,8 @@
   gtk_window_set_title (GTK_WINDOW (window), "audiomix");
   g_signal_connect (window, "destroy", gtk_main_quit, NULL);
 
-  layout = gtk_table_new (2, 3, FALSE);
-  gtk_table_set_col_spacings (GTK_TABLE (layout), 6);
+  layout = gtk_grid_new ();
+  g_object_set (G_OBJECT (layout), "column-spacing", 6, NULL);
   gtk_container_add (GTK_CONTAINER (window), layout);
 
   /* channel labels */
@@ -65,25 +62,25 @@
     *ext = '\0';
   label = gtk_label_new (name);
   g_free (name);
-  gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
-  gtk_table_attach_defaults (GTK_TABLE (layout), label, 0, 1, 0, 1);
+  gtk_grid_attach (GTK_GRID (layout), label, 0, 0, 1, 1);
 
-  gtk_table_attach_defaults (GTK_TABLE (layout), gtk_label_new ("|"), 1, 2, 0,
-      1);
+  gtk_grid_attach (GTK_GRID (layout), gtk_label_new ("|"), 1, 0, 1, 1);
 
   name = g_path_get_basename (file_name2);
   if ((ext = strrchr (name, '.')))
     *ext = '\0';
   label = gtk_label_new (name);
   g_free (name);
-  gtk_misc_set_alignment (GTK_MISC (label), 1.0, 0.5);
-  gtk_table_attach_defaults (GTK_TABLE (layout), label, 2, 3, 0, 1);
+  gtk_grid_attach (GTK_GRID (layout), label, 2, 0, 1, 1);
 
   /* mix slider */
-  scale = gtk_hscale_new_with_range (0.0, 1.0, 1.0 / 200.0);
+  scale =
+      gtk_scale_new_with_range (GTK_ORIENTATION_HORIZONTAL, 0.0, 1.0,
+      1.0 / 200.0);
   gtk_range_set_value (GTK_RANGE (scale), 0.0);
   gtk_widget_set_size_request (scale, 200, -1);
-  gtk_table_attach_defaults (GTK_TABLE (layout), scale, 0, 3, 1, 2);
+  gtk_widget_set_hexpand (scale, TRUE);
+  gtk_grid_attach (GTK_GRID (layout), scale, 0, 1, 3, 1);
   g_signal_connect (scale, "value-changed",
       G_CALLBACK (value_changed_callback), volume);
 
@@ -206,6 +203,7 @@
   gtk_main ();
   gst_element_set_state (pipeline, GST_STATE_NULL);
   gst_object_unref (pipeline);
+  gst_object_unref (bus);
 
   return 0;
 }
diff --git a/tests/examples/audio/volume.c b/tests/examples/audio/volume.c
index 5e0d5ef..398bc4f 100644
--- a/tests/examples/audio/volume.c
+++ b/tests/examples/audio/volume.c
@@ -23,9 +23,6 @@
 #ifdef HAVE_CONFIG_H
 #include "config.h"
 #endif
-/* FIXME 0.11: suppress warnings for deprecated API such as GStaticRecMutex
- * with newer GTK versions (>= 3.3.0) */
-#define GDK_DISABLE_DEPRECATION_WARNINGS
 
 #include <math.h>
 
@@ -62,22 +59,23 @@
   window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
   g_signal_connect (window, "destroy", gtk_main_quit, NULL);
 
-  vbox = gtk_vbox_new (TRUE, 0);
+  vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0);
   gtk_container_add (GTK_CONTAINER (window), vbox);
 
   /* elapsed widget */
-  hbox = gtk_hbox_new (TRUE, 0);
-  label = gtk_label_new ("Elapsed");
-  elapsed = gtk_label_new ("0.000");
+  hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0);
+  label = gtk_label_new ("Elapsed: ");
+  elapsed = gtk_label_new ("0.0");
   gtk_container_add (GTK_CONTAINER (hbox), label);
   gtk_container_add (GTK_CONTAINER (hbox), elapsed);
   gtk_container_add (GTK_CONTAINER (vbox), hbox);
 
   /* volume */
-  hbox = gtk_hbox_new (TRUE, 0);
+  hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0);
   label = gtk_label_new ("volume");
   gtk_container_add (GTK_CONTAINER (hbox), label);
-  scale = gtk_hscale_new_with_range (-90.0, 10.0, 0.2);
+  scale = gtk_scale_new_with_range (GTK_ORIENTATION_HORIZONTAL, -90.0, 10.0,
+      0.2);
   gtk_range_set_value (GTK_RANGE (scale), 0.0);
   gtk_widget_set_size_request (scale, 100, -1);
   gtk_container_add (GTK_CONTAINER (hbox), scale);
@@ -88,6 +86,24 @@
   gtk_widget_show_all (GTK_WIDGET (window));
 }
 
+static gboolean
+progress_update (gpointer data)
+{
+  GstElement *pipeline = (GstElement *) data;
+  gint64 position;
+  gchar *position_str;
+
+  if (gst_element_query_position (pipeline, GST_FORMAT_TIME, &position))
+    position_str = g_strdup_printf ("%.1f", (gfloat) position / GST_SECOND);
+  else
+    position_str = g_strdup_printf ("n/a");
+  gtk_label_set_text (GTK_LABEL (elapsed), position_str);
+
+  g_free (position_str);
+
+  return TRUE;
+}
+
 static void
 message_received (GstBus * bus, GstMessage * message, GstPipeline * pipeline)
 {
@@ -167,9 +183,11 @@
 
   /* go to main loop */
   gst_element_set_state (pipeline, GST_STATE_PLAYING);
+  g_timeout_add (100, progress_update, pipeline);
   gtk_main ();
   gst_element_set_state (pipeline, GST_STATE_NULL);
   gst_object_unref (pipeline);
+  gst_object_unref (bus);
 
   return 0;
 }
diff --git a/tests/examples/dynamic/Makefile.in b/tests/examples/dynamic/Makefile.in
index ee591f0..84c684d 100644
--- a/tests/examples/dynamic/Makefile.in
+++ b/tests/examples/dynamic/Makefile.in
@@ -1,7 +1,7 @@
-# Makefile.in generated by automake 1.14.1 from Makefile.am.
+# Makefile.in generated by automake 1.15 from Makefile.am.
 # @configure_input@
 
-# Copyright (C) 1994-2013 Free Software Foundation, Inc.
+# 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,
@@ -15,7 +15,17 @@
 @SET_MAKE@
 
 VPATH = @srcdir@
-am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)'
+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 \
       ?) ;; \
@@ -82,8 +92,6 @@
 noinst_PROGRAMS = addstream$(EXEEXT) codec-select$(EXEEXT) \
 	sprinkle$(EXEEXT) sprinkle2$(EXEEXT) sprinkle3$(EXEEXT)
 subdir = tests/examples/dynamic
-DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \
-	$(top_srcdir)/depcomp
 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 \
@@ -104,7 +112,6 @@
 	$(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-x11.m4 \
 	$(top_srcdir)/common/m4/gst.m4 \
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
@@ -121,6 +128,7 @@
 	$(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
 mkinstalldirs = $(install_sh) -d
 CONFIG_HEADER = $(top_builddir)/config.h
 CONFIG_CLEAN_FILES =
@@ -223,6 +231,7 @@
   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@
@@ -283,6 +292,8 @@
 GIO_CFLAGS = @GIO_CFLAGS@
 GIO_LDFLAGS = @GIO_LDFLAGS@
 GIO_LIBS = @GIO_LIBS@
+GIO_UNIX_2_0_CFLAGS = @GIO_UNIX_2_0_CFLAGS@
+GIO_UNIX_2_0_LIBS = @GIO_UNIX_2_0_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
@@ -312,6 +323,8 @@
 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_OPTION_CFLAGS = @GST_OPTION_CFLAGS@
 GST_OPTION_CXXFLAGS = @GST_OPTION_CXXFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
@@ -339,7 +352,6 @@
 GTK_X11_CFLAGS = @GTK_X11_CFLAGS@
 GTK_X11_LIBS = @GTK_X11_LIBS@
 HAVE_CDPARANOIA = @HAVE_CDPARANOIA@
-HAVE_X = @HAVE_X@
 HAVE_XSHM = @HAVE_XSHM@
 HAVE_ZLIB = @HAVE_ZLIB@
 HTML_DIR = @HTML_DIR@
@@ -354,6 +366,7 @@
 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@
@@ -443,13 +456,12 @@
 XGETTEXT = @XGETTEXT@
 XGETTEXT_015 = @XGETTEXT_015@
 XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
-XMKMF = @XMKMF@
+XSHM_CFLAGS = @XSHM_CFLAGS@
 XSHM_LIBS = @XSHM_LIBS@
+XVIDEO_CFLAGS = @XVIDEO_CFLAGS@
 XVIDEO_LIBS = @XVIDEO_LIBS@
 X_CFLAGS = @X_CFLAGS@
-X_EXTRA_LIBS = @X_EXTRA_LIBS@
 X_LIBS = @X_LIBS@
-X_PRE_LIBS = @X_PRE_LIBS@
 ZLIB_CFLAGS = @ZLIB_CFLAGS@
 ZLIB_LIBS = @ZLIB_LIBS@
 abs_builddir = @abs_builddir@
@@ -502,6 +514,7 @@
 psdir = @psdir@
 pyexecdir = @pyexecdir@
 pythondir = @pythondir@
+runstatedir = @runstatedir@
 sbindir = @sbindir@
 sharedstatedir = @sharedstatedir@
 srcdir = @srcdir@
@@ -545,7 +558,6 @@
 	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu tests/examples/dynamic/Makefile'; \
 	$(am__cd) $(top_srcdir) && \
 	  $(AUTOMAKE) --gnu tests/examples/dynamic/Makefile
-.PRECIOUS: Makefile
 Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
 	@case '$?' in \
 	  *config.status*) \
@@ -908,6 +920,8 @@
 	mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
 	tags tags-am uninstall uninstall-am
 
+.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.
diff --git a/tests/examples/dynamic/addstream.c b/tests/examples/dynamic/addstream.c
index b58b5cc..02bb8ae 100644
--- a/tests/examples/dynamic/addstream.c
+++ b/tests/examples/dynamic/addstream.c
@@ -53,7 +53,7 @@
   return bin;
 }
 
-static gboolean
+static void
 pause_play_stream (GstElement * bin, gint seconds)
 {
   gboolean punch_in;
@@ -85,9 +85,10 @@
        * this situation timestamps start from 0.  */
       punch_in = TRUE;
       break;
-    default:
     case GST_STATE_CHANGE_FAILURE:
-      return FALSE;
+      /* fall through to return */
+    default:
+      return;
   }
 
   if (seconds)
@@ -106,8 +107,6 @@
 
   /* now set the pipeline to PLAYING */
   gst_element_set_state (bin, GST_STATE_PLAYING);
-
-  return TRUE;
 }
 
 static void
@@ -151,7 +150,8 @@
           create_stream
           ("( v4l2src ! videoconvert ! timeoverlay ! queue ! xvimagesink name=v4llive )");
       pause_play_stream (bin1, 0);
-      g_timeout_add_seconds (1, (GSourceFunc) perform_step, GINT_TO_POINTER (1));
+      g_timeout_add_seconds (1, (GSourceFunc) perform_step,
+          GINT_TO_POINTER (1));
       break;
     case 1:
       /* live stream locks on to running_time, pipeline reconfigures latency
@@ -159,14 +159,16 @@
       g_print ("creating bin2\n");
       bin2 = create_stream ("( alsasrc ! queue ! alsasink name=alsalive )");
       pause_play_stream (bin2, 0);
-      g_timeout_add_seconds (1, (GSourceFunc) perform_step, GINT_TO_POINTER (2));
+      g_timeout_add_seconds (1, (GSourceFunc) perform_step,
+          GINT_TO_POINTER (2));
       break;
     case 2:
       /* non-live stream, need base_time to align with current running live sources. */
       g_print ("creating bin3\n");
       bin3 = create_stream ("( audiotestsrc ! alsasink name=atnonlive )");
       pause_play_stream (bin3, 0);
-      g_timeout_add_seconds (1, (GSourceFunc) perform_step, GINT_TO_POINTER (3));
+      g_timeout_add_seconds (1, (GSourceFunc) perform_step,
+          GINT_TO_POINTER (3));
       break;
     case 3:
       g_print ("creating bin4\n");
@@ -174,7 +176,8 @@
           create_stream
           ("( videotestsrc ! timeoverlay ! videoconvert ! ximagesink name=vtnonlive )");
       pause_play_stream (bin4, 0);
-      g_timeout_add_seconds (1, (GSourceFunc) perform_step, GINT_TO_POINTER (4));
+      g_timeout_add_seconds (1, (GSourceFunc) perform_step,
+          GINT_TO_POINTER (4));
       break;
     case 4:
       /* live stream locks on to running_time */
@@ -183,7 +186,8 @@
           create_stream
           ("( videotestsrc is-live=1 ! timeoverlay ! videoconvert ! ximagesink name=vtlive )");
       pause_play_stream (bin5, 0);
-      g_timeout_add_seconds (1, (GSourceFunc) perform_step, GINT_TO_POINTER (5));
+      g_timeout_add_seconds (1, (GSourceFunc) perform_step,
+          GINT_TO_POINTER (5));
       break;
     case 5:
       /* pause the fist live stream for 2 seconds */
@@ -196,7 +200,8 @@
       g_print ("PAUSE bin5 for 2 seconds\n");
       pause_play_stream (bin5, 2);
       g_print ("Waiting 5 seconds\n");
-      g_timeout_add_seconds (5, (GSourceFunc) perform_step, GINT_TO_POINTER (6));
+      g_timeout_add_seconds (5, (GSourceFunc) perform_step,
+          GINT_TO_POINTER (6));
       break;
     case 6:
       g_print ("quiting\n");
diff --git a/tests/examples/dynamic/codec-select.c b/tests/examples/dynamic/codec-select.c
index 0169370..b01d554 100644
--- a/tests/examples/dynamic/codec-select.c
+++ b/tests/examples/dynamic/codec-select.c
@@ -214,6 +214,7 @@
 
   /* set the active pad */
   g_object_set (select, "active-pad", pad, NULL);
+  gst_object_unref (select);
 
   return TRUE;
 }
diff --git a/tests/examples/dynamic/sprinkle.c b/tests/examples/dynamic/sprinkle.c
index da49e95..c14afb1 100644
--- a/tests/examples/dynamic/sprinkle.c
+++ b/tests/examples/dynamic/sprinkle.c
@@ -164,7 +164,12 @@
     state->count++;
   } else {
     state->infos[0] = NULL;
+
+    /* if no more sources left, quit */
+    if (!state->infos[2])
+      g_main_loop_quit (loop);
   }
+
   return TRUE;
 }
 
@@ -202,7 +207,7 @@
   GstBus *bus;
   GstElement *filter, *convert, *sink;
   GstCaps *caps;
-  gboolean res;
+  gboolean linked;
   SprinkleState *state;
 
   gst_init (&argc, &argv);
@@ -227,8 +232,8 @@
 
   gst_bin_add_many (GST_BIN (pipeline), adder, filter, convert, sink, NULL);
 
-  res = gst_element_link_many (adder, filter, convert, sink, NULL);
-  g_assert (res);
+  linked = gst_element_link_many (adder, filter, convert, sink, NULL);
+  g_assert (linked);
 
   /* setup message handling */
   bus = gst_pipeline_get_bus (GST_PIPELINE (pipeline));
diff --git a/tests/examples/encoding/Makefile.in b/tests/examples/encoding/Makefile.in
index 9250fb9..ff551d7 100644
--- a/tests/examples/encoding/Makefile.in
+++ b/tests/examples/encoding/Makefile.in
@@ -1,7 +1,7 @@
-# Makefile.in generated by automake 1.14.1 from Makefile.am.
+# Makefile.in generated by automake 1.15 from Makefile.am.
 # @configure_input@
 
-# Copyright (C) 1994-2013 Free Software Foundation, Inc.
+# 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,
@@ -15,7 +15,17 @@
 @SET_MAKE@
 
 VPATH = @srcdir@
-am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)'
+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 \
       ?) ;; \
@@ -81,8 +91,6 @@
 target_triplet = @target@
 noinst_PROGRAMS = $(am__EXEEXT_1)
 subdir = tests/examples/encoding
-DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \
-	$(top_srcdir)/depcomp
 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 \
@@ -103,7 +111,6 @@
 	$(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-x11.m4 \
 	$(top_srcdir)/common/m4/gst.m4 \
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
@@ -120,6 +127,7 @@
 	$(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
 mkinstalldirs = $(install_sh) -d
 CONFIG_HEADER = $(top_builddir)/config.h
 CONFIG_CLEAN_FILES =
@@ -199,6 +207,7 @@
   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@
@@ -259,6 +268,8 @@
 GIO_CFLAGS = @GIO_CFLAGS@
 GIO_LDFLAGS = @GIO_LDFLAGS@
 GIO_LIBS = @GIO_LIBS@
+GIO_UNIX_2_0_CFLAGS = @GIO_UNIX_2_0_CFLAGS@
+GIO_UNIX_2_0_LIBS = @GIO_UNIX_2_0_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
@@ -288,6 +299,8 @@
 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_OPTION_CFLAGS = @GST_OPTION_CFLAGS@
 GST_OPTION_CXXFLAGS = @GST_OPTION_CXXFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
@@ -315,7 +328,6 @@
 GTK_X11_CFLAGS = @GTK_X11_CFLAGS@
 GTK_X11_LIBS = @GTK_X11_LIBS@
 HAVE_CDPARANOIA = @HAVE_CDPARANOIA@
-HAVE_X = @HAVE_X@
 HAVE_XSHM = @HAVE_XSHM@
 HAVE_ZLIB = @HAVE_ZLIB@
 HTML_DIR = @HTML_DIR@
@@ -330,6 +342,7 @@
 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@
@@ -419,13 +432,12 @@
 XGETTEXT = @XGETTEXT@
 XGETTEXT_015 = @XGETTEXT_015@
 XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
-XMKMF = @XMKMF@
+XSHM_CFLAGS = @XSHM_CFLAGS@
 XSHM_LIBS = @XSHM_LIBS@
+XVIDEO_CFLAGS = @XVIDEO_CFLAGS@
 XVIDEO_LIBS = @XVIDEO_LIBS@
 X_CFLAGS = @X_CFLAGS@
-X_EXTRA_LIBS = @X_EXTRA_LIBS@
 X_LIBS = @X_LIBS@
-X_PRE_LIBS = @X_PRE_LIBS@
 ZLIB_CFLAGS = @ZLIB_CFLAGS@
 ZLIB_LIBS = @ZLIB_LIBS@
 abs_builddir = @abs_builddir@
@@ -478,6 +490,7 @@
 psdir = @psdir@
 pyexecdir = @pyexecdir@
 pythondir = @pythondir@
+runstatedir = @runstatedir@
 sbindir = @sbindir@
 sharedstatedir = @sharedstatedir@
 srcdir = @srcdir@
@@ -521,7 +534,6 @@
 	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu tests/examples/encoding/Makefile'; \
 	$(am__cd) $(top_srcdir) && \
 	  $(AUTOMAKE) --gnu tests/examples/encoding/Makefile
-.PRECIOUS: Makefile
 Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
 	@case '$?' in \
 	  *config.status*) \
@@ -795,6 +807,8 @@
 	mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
 	tags tags-am uninstall uninstall-am
 
+.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.
diff --git a/tests/examples/encoding/encoding.c b/tests/examples/encoding/encoding.c
index bde601c..1861f81 100644
--- a/tests/examples/encoding/encoding.c
+++ b/tests/examples/encoding/encoding.c
@@ -1,4 +1,7 @@
-/* Example application for using GstProfile and encodebin
+/* GStreamer
+ *
+ * encoding.c: example application for using GstProfile and encodebin
+ *
  * Copyright (C) 2009 Edward Hervey <edward.hervey@collabora.co.uk>
  *
  * This library is free software; you can redistribute it and/or
@@ -34,9 +37,10 @@
 static void
 list_codecs (void)
 {
-  GstCaps *l;
-  GstCaps *caps;
+  GstCaps *l, *caps;
+  GstStructure *st;
   guint i, len;
+  gchar *tmpstr, *desc;
 
   caps = gst_caps_new_empty ();
 
@@ -44,9 +48,7 @@
   l = gst_caps_list_container_formats (GST_RANK_NONE);
   len = gst_caps_get_size (l);
   for (i = 0; i < len; i++) {
-    GstStructure *st = gst_caps_steal_structure (l, 0);
-    gchar *tmpstr, *desc;
-
+    st = gst_caps_steal_structure (l, 0);
     gst_caps_append_structure (caps, st);
 
     tmpstr = gst_caps_to_string (caps);
@@ -64,9 +66,7 @@
   l = gst_caps_list_video_encoding_formats (GST_RANK_NONE);
   len = gst_caps_get_size (l);
   for (i = 0; i < len; i++) {
-    GstStructure *st = gst_caps_steal_structure (l, 0);
-    gchar *tmpstr, *desc;
-
+    st = gst_caps_steal_structure (l, 0);
     gst_caps_append_structure (caps, st);
 
     tmpstr = gst_caps_to_string (caps);
@@ -84,9 +84,7 @@
   l = gst_caps_list_audio_encoding_formats (GST_RANK_NONE);
   len = gst_caps_get_size (l);
   for (i = 0; i < len; i++) {
-    GstStructure *st = gst_caps_steal_structure (l, 0);
-    gchar *tmpstr, *desc;
-
+    st = gst_caps_steal_structure (l, 0);
     gst_caps_append_structure (caps, st);
 
     tmpstr = gst_caps_to_string (caps);
diff --git a/tests/examples/fft/Makefile.in b/tests/examples/fft/Makefile.in
index 4a0f7e4..1ae4f8b 100644
--- a/tests/examples/fft/Makefile.in
+++ b/tests/examples/fft/Makefile.in
@@ -1,7 +1,7 @@
-# Makefile.in generated by automake 1.14.1 from Makefile.am.
+# Makefile.in generated by automake 1.15 from Makefile.am.
 # @configure_input@
 
-# Copyright (C) 1994-2013 Free Software Foundation, Inc.
+# 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,
@@ -15,7 +15,17 @@
 @SET_MAKE@
 
 VPATH = @srcdir@
-am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)'
+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 \
       ?) ;; \
@@ -81,8 +91,6 @@
 target_triplet = @target@
 noinst_PROGRAMS = fftrange$(EXEEXT)
 subdir = tests/examples/fft
-DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \
-	$(top_srcdir)/depcomp
 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 \
@@ -103,7 +111,6 @@
 	$(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-x11.m4 \
 	$(top_srcdir)/common/m4/gst.m4 \
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
@@ -120,6 +127,7 @@
 	$(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
 mkinstalldirs = $(install_sh) -d
 CONFIG_HEADER = $(top_builddir)/config.h
 CONFIG_CLEAN_FILES =
@@ -197,6 +205,7 @@
   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@
@@ -257,6 +266,8 @@
 GIO_CFLAGS = @GIO_CFLAGS@
 GIO_LDFLAGS = @GIO_LDFLAGS@
 GIO_LIBS = @GIO_LIBS@
+GIO_UNIX_2_0_CFLAGS = @GIO_UNIX_2_0_CFLAGS@
+GIO_UNIX_2_0_LIBS = @GIO_UNIX_2_0_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
@@ -286,6 +297,8 @@
 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_OPTION_CFLAGS = @GST_OPTION_CFLAGS@
 GST_OPTION_CXXFLAGS = @GST_OPTION_CXXFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
@@ -313,7 +326,6 @@
 GTK_X11_CFLAGS = @GTK_X11_CFLAGS@
 GTK_X11_LIBS = @GTK_X11_LIBS@
 HAVE_CDPARANOIA = @HAVE_CDPARANOIA@
-HAVE_X = @HAVE_X@
 HAVE_XSHM = @HAVE_XSHM@
 HAVE_ZLIB = @HAVE_ZLIB@
 HTML_DIR = @HTML_DIR@
@@ -328,6 +340,7 @@
 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@
@@ -417,13 +430,12 @@
 XGETTEXT = @XGETTEXT@
 XGETTEXT_015 = @XGETTEXT_015@
 XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
-XMKMF = @XMKMF@
+XSHM_CFLAGS = @XSHM_CFLAGS@
 XSHM_LIBS = @XSHM_LIBS@
+XVIDEO_CFLAGS = @XVIDEO_CFLAGS@
 XVIDEO_LIBS = @XVIDEO_LIBS@
 X_CFLAGS = @X_CFLAGS@
-X_EXTRA_LIBS = @X_EXTRA_LIBS@
 X_LIBS = @X_LIBS@
-X_PRE_LIBS = @X_PRE_LIBS@
 ZLIB_CFLAGS = @ZLIB_CFLAGS@
 ZLIB_LIBS = @ZLIB_LIBS@
 abs_builddir = @abs_builddir@
@@ -476,6 +488,7 @@
 psdir = @psdir@
 pyexecdir = @pyexecdir@
 pythondir = @pythondir@
+runstatedir = @runstatedir@
 sbindir = @sbindir@
 sharedstatedir = @sharedstatedir@
 srcdir = @srcdir@
@@ -510,7 +523,6 @@
 	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu tests/examples/fft/Makefile'; \
 	$(am__cd) $(top_srcdir) && \
 	  $(AUTOMAKE) --gnu tests/examples/fft/Makefile
-.PRECIOUS: Makefile
 Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
 	@case '$?' in \
 	  *config.status*) \
@@ -797,6 +809,8 @@
 	mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
 	tags tags-am uninstall uninstall-am
 
+.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.
diff --git a/tests/examples/gio/Makefile.in b/tests/examples/gio/Makefile.in
index 58d8da40..e025474 100644
--- a/tests/examples/gio/Makefile.in
+++ b/tests/examples/gio/Makefile.in
@@ -1,7 +1,7 @@
-# Makefile.in generated by automake 1.14.1 from Makefile.am.
+# Makefile.in generated by automake 1.15 from Makefile.am.
 # @configure_input@
 
-# Copyright (C) 1994-2013 Free Software Foundation, Inc.
+# 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,
@@ -15,7 +15,17 @@
 @SET_MAKE@
 
 VPATH = @srcdir@
-am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)'
+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 \
       ?) ;; \
@@ -81,8 +91,6 @@
 target_triplet = @target@
 @HAVE_GTK_TRUE@noinst_PROGRAMS = giosrc-mounting$(EXEEXT)
 subdir = tests/examples/gio
-DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \
-	$(top_srcdir)/depcomp
 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 \
@@ -103,7 +111,6 @@
 	$(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-x11.m4 \
 	$(top_srcdir)/common/m4/gst.m4 \
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
@@ -120,6 +127,7 @@
 	$(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
 mkinstalldirs = $(install_sh) -d
 CONFIG_HEADER = $(top_builddir)/config.h
 CONFIG_CLEAN_FILES =
@@ -200,6 +208,7 @@
   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@
@@ -260,6 +269,8 @@
 GIO_CFLAGS = @GIO_CFLAGS@
 GIO_LDFLAGS = @GIO_LDFLAGS@
 GIO_LIBS = @GIO_LIBS@
+GIO_UNIX_2_0_CFLAGS = @GIO_UNIX_2_0_CFLAGS@
+GIO_UNIX_2_0_LIBS = @GIO_UNIX_2_0_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
@@ -289,6 +300,8 @@
 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_OPTION_CFLAGS = @GST_OPTION_CFLAGS@
 GST_OPTION_CXXFLAGS = @GST_OPTION_CXXFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
@@ -316,7 +329,6 @@
 GTK_X11_CFLAGS = @GTK_X11_CFLAGS@
 GTK_X11_LIBS = @GTK_X11_LIBS@
 HAVE_CDPARANOIA = @HAVE_CDPARANOIA@
-HAVE_X = @HAVE_X@
 HAVE_XSHM = @HAVE_XSHM@
 HAVE_ZLIB = @HAVE_ZLIB@
 HTML_DIR = @HTML_DIR@
@@ -331,6 +343,7 @@
 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@
@@ -420,13 +433,12 @@
 XGETTEXT = @XGETTEXT@
 XGETTEXT_015 = @XGETTEXT_015@
 XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
-XMKMF = @XMKMF@
+XSHM_CFLAGS = @XSHM_CFLAGS@
 XSHM_LIBS = @XSHM_LIBS@
+XVIDEO_CFLAGS = @XVIDEO_CFLAGS@
 XVIDEO_LIBS = @XVIDEO_LIBS@
 X_CFLAGS = @X_CFLAGS@
-X_EXTRA_LIBS = @X_EXTRA_LIBS@
 X_LIBS = @X_LIBS@
-X_PRE_LIBS = @X_PRE_LIBS@
 ZLIB_CFLAGS = @ZLIB_CFLAGS@
 ZLIB_LIBS = @ZLIB_LIBS@
 abs_builddir = @abs_builddir@
@@ -479,6 +491,7 @@
 psdir = @psdir@
 pyexecdir = @pyexecdir@
 pythondir = @pythondir@
+runstatedir = @runstatedir@
 sbindir = @sbindir@
 sharedstatedir = @sharedstatedir@
 srcdir = @srcdir@
@@ -510,7 +523,6 @@
 	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu tests/examples/gio/Makefile'; \
 	$(am__cd) $(top_srcdir) && \
 	  $(AUTOMAKE) --gnu tests/examples/gio/Makefile
-.PRECIOUS: Makefile
 Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
 	@case '$?' in \
 	  *config.status*) \
@@ -797,6 +809,8 @@
 	mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
 	tags tags-am uninstall uninstall-am
 
+.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.
diff --git a/tests/examples/gio/giosrc-mounting.c b/tests/examples/gio/giosrc-mounting.c
index 9db6263..3c6c32b 100644
--- a/tests/examples/gio/giosrc-mounting.c
+++ b/tests/examples/gio/giosrc-mounting.c
@@ -1,5 +1,8 @@
 /* GStreamer
  *
+ * giosrc-mounting: example application that shows how to handle the
+ * "not-mounted" message
+ *
  * Copyright (C) 2009 Sebastian Dröge <sebastian.droege@collabora.co.uk>
  * 
  * This library is free software; you can redistribute it and/or
@@ -48,8 +51,7 @@
 static gboolean
 message_handler (GstBus * bus, GstMessage * message, gpointer user_data)
 {
-
-  switch (message->type) {
+  switch (GST_MESSAGE_TYPE (message)) {
     case GST_MESSAGE_ELEMENT:{
       const GstStructure *s = gst_message_get_structure (message);
       const gchar *name = gst_structure_get_name (s);
diff --git a/tests/examples/overlay/Makefile.in b/tests/examples/overlay/Makefile.in
index 3bc4f6a..4f0acf1 100644
--- a/tests/examples/overlay/Makefile.in
+++ b/tests/examples/overlay/Makefile.in
@@ -1,7 +1,7 @@
-# Makefile.in generated by automake 1.14.1 from Makefile.am.
+# Makefile.in generated by automake 1.15 from Makefile.am.
 # @configure_input@
 
-# Copyright (C) 1994-2013 Free Software Foundation, Inc.
+# 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,
@@ -15,7 +15,17 @@
 @SET_MAKE@
 
 VPATH = @srcdir@
-am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)'
+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 \
       ?) ;; \
@@ -84,8 +94,6 @@
 @HAVE_QT_MOC_TRUE@@USE_X_TRUE@am__append_3 = qtgv-videooverlay
 noinst_PROGRAMS = $(am__EXEEXT_4)
 subdir = tests/examples/overlay
-DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \
-	$(top_srcdir)/depcomp
 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 \
@@ -106,7 +114,6 @@
 	$(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-x11.m4 \
 	$(top_srcdir)/common/m4/gst.m4 \
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
@@ -123,6 +130,7 @@
 	$(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
 mkinstalldirs = $(install_sh) -d
 CONFIG_HEADER = $(top_builddir)/config.h
 CONFIG_CLEAN_FILES =
@@ -260,6 +268,7 @@
   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@
@@ -320,6 +329,8 @@
 GIO_CFLAGS = @GIO_CFLAGS@
 GIO_LDFLAGS = @GIO_LDFLAGS@
 GIO_LIBS = @GIO_LIBS@
+GIO_UNIX_2_0_CFLAGS = @GIO_UNIX_2_0_CFLAGS@
+GIO_UNIX_2_0_LIBS = @GIO_UNIX_2_0_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
@@ -349,6 +360,8 @@
 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_OPTION_CFLAGS = @GST_OPTION_CFLAGS@
 GST_OPTION_CXXFLAGS = @GST_OPTION_CXXFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
@@ -376,7 +389,6 @@
 GTK_X11_CFLAGS = @GTK_X11_CFLAGS@
 GTK_X11_LIBS = @GTK_X11_LIBS@
 HAVE_CDPARANOIA = @HAVE_CDPARANOIA@
-HAVE_X = @HAVE_X@
 HAVE_XSHM = @HAVE_XSHM@
 HAVE_ZLIB = @HAVE_ZLIB@
 HTML_DIR = @HTML_DIR@
@@ -391,6 +403,7 @@
 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@
@@ -480,13 +493,12 @@
 XGETTEXT = @XGETTEXT@
 XGETTEXT_015 = @XGETTEXT_015@
 XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
-XMKMF = @XMKMF@
+XSHM_CFLAGS = @XSHM_CFLAGS@
 XSHM_LIBS = @XSHM_LIBS@
+XVIDEO_CFLAGS = @XVIDEO_CFLAGS@
 XVIDEO_LIBS = @XVIDEO_LIBS@
 X_CFLAGS = @X_CFLAGS@
-X_EXTRA_LIBS = @X_EXTRA_LIBS@
 X_LIBS = @X_LIBS@
-X_PRE_LIBS = @X_PRE_LIBS@
 ZLIB_CFLAGS = @ZLIB_CFLAGS@
 ZLIB_LIBS = @ZLIB_LIBS@
 abs_builddir = @abs_builddir@
@@ -539,6 +551,7 @@
 psdir = @psdir@
 pyexecdir = @pyexecdir@
 pythondir = @pythondir@
+runstatedir = @runstatedir@
 sbindir = @sbindir@
 sharedstatedir = @sharedstatedir@
 srcdir = @srcdir@
@@ -591,7 +604,6 @@
 	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu tests/examples/overlay/Makefile'; \
 	$(am__cd) $(top_srcdir) && \
 	  $(AUTOMAKE) --gnu tests/examples/overlay/Makefile
-.PRECIOUS: Makefile
 Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
 	@case '$?' in \
 	  *config.status*) \
@@ -956,6 +968,8 @@
 	mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
 	tags tags-am uninstall uninstall-am
 
+.PRECIOUS: Makefile
+
 
 @HAVE_QT_MOC_TRUE@@USE_X_TRUE@moc_%.cpp:%.h
 @HAVE_QT_MOC_TRUE@@USE_X_TRUE@	$(AM_V_GEN)$(QT_MOC) $< -o $@
diff --git a/tests/examples/overlay/gtk-videooverlay.c b/tests/examples/overlay/gtk-videooverlay.c
index f99baa8..929d87e 100644
--- a/tests/examples/overlay/gtk-videooverlay.c
+++ b/tests/examples/overlay/gtk-videooverlay.c
@@ -23,6 +23,8 @@
 #include "config.h"
 #endif
 
+#define GDK_VERSION_MIN_REQUIRED (GDK_VERSION_3_0)
+
 #include <glib.h>
 #include <gdk/gdkx.h>
 #include <gtk/gtk.h>
@@ -123,12 +125,10 @@
   gtk_window_set_title (GTK_WINDOW (window), "GstVideoOverlay Gtk+ demo");
 
   video_window = gtk_drawing_area_new ();
-  gtk_widget_set_double_buffered (video_window, FALSE);
   gtk_container_add (GTK_CONTAINER (window), video_window);
   gtk_container_set_border_width (GTK_CONTAINER (window), 16);
 
   gtk_widget_show_all (window);
-  gtk_widget_realize (window);
 
   video_window_xwindow = gtk_widget_get_window (video_window);
   embed_xid = GDK_WINDOW_XID (video_window_xwindow);
diff --git a/tests/examples/playback/Makefile.in b/tests/examples/playback/Makefile.in
index f38d67b..ac2d4dd 100644
--- a/tests/examples/playback/Makefile.in
+++ b/tests/examples/playback/Makefile.in
@@ -1,7 +1,7 @@
-# Makefile.in generated by automake 1.14.1 from Makefile.am.
+# Makefile.in generated by automake 1.15 from Makefile.am.
 # @configure_input@
 
-# Copyright (C) 1994-2013 Free Software Foundation, Inc.
+# 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,
@@ -15,7 +15,17 @@
 @SET_MAKE@
 
 VPATH = @srcdir@
-am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)'
+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 \
       ?) ;; \
@@ -81,8 +91,6 @@
 target_triplet = @target@
 noinst_PROGRAMS = playback-test$(EXEEXT)
 subdir = tests/examples/playback
-DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \
-	$(top_srcdir)/depcomp
 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 \
@@ -103,7 +111,6 @@
 	$(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-x11.m4 \
 	$(top_srcdir)/common/m4/gst.m4 \
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
@@ -120,6 +127,7 @@
 	$(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
 mkinstalldirs = $(install_sh) -d
 CONFIG_HEADER = $(top_builddir)/config.h
 CONFIG_CLEAN_FILES =
@@ -196,6 +204,7 @@
   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@
@@ -256,6 +265,8 @@
 GIO_CFLAGS = @GIO_CFLAGS@
 GIO_LDFLAGS = @GIO_LDFLAGS@
 GIO_LIBS = @GIO_LIBS@
+GIO_UNIX_2_0_CFLAGS = @GIO_UNIX_2_0_CFLAGS@
+GIO_UNIX_2_0_LIBS = @GIO_UNIX_2_0_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
@@ -285,6 +296,8 @@
 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_OPTION_CFLAGS = @GST_OPTION_CFLAGS@
 GST_OPTION_CXXFLAGS = @GST_OPTION_CXXFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
@@ -312,7 +325,6 @@
 GTK_X11_CFLAGS = @GTK_X11_CFLAGS@
 GTK_X11_LIBS = @GTK_X11_LIBS@
 HAVE_CDPARANOIA = @HAVE_CDPARANOIA@
-HAVE_X = @HAVE_X@
 HAVE_XSHM = @HAVE_XSHM@
 HAVE_ZLIB = @HAVE_ZLIB@
 HTML_DIR = @HTML_DIR@
@@ -327,6 +339,7 @@
 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@
@@ -416,13 +429,12 @@
 XGETTEXT = @XGETTEXT@
 XGETTEXT_015 = @XGETTEXT_015@
 XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
-XMKMF = @XMKMF@
+XSHM_CFLAGS = @XSHM_CFLAGS@
 XSHM_LIBS = @XSHM_LIBS@
+XVIDEO_CFLAGS = @XVIDEO_CFLAGS@
 XVIDEO_LIBS = @XVIDEO_LIBS@
 X_CFLAGS = @X_CFLAGS@
-X_EXTRA_LIBS = @X_EXTRA_LIBS@
 X_LIBS = @X_LIBS@
-X_PRE_LIBS = @X_PRE_LIBS@
 ZLIB_CFLAGS = @ZLIB_CFLAGS@
 ZLIB_LIBS = @ZLIB_LIBS@
 abs_builddir = @abs_builddir@
@@ -475,6 +487,7 @@
 psdir = @psdir@
 pyexecdir = @pyexecdir@
 pythondir = @pythondir@
+runstatedir = @runstatedir@
 sbindir = @sbindir@
 sharedstatedir = @sharedstatedir@
 srcdir = @srcdir@
@@ -509,7 +522,6 @@
 	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu tests/examples/playback/Makefile'; \
 	$(am__cd) $(top_srcdir) && \
 	  $(AUTOMAKE) --gnu tests/examples/playback/Makefile
-.PRECIOUS: Makefile
 Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
 	@case '$?' in \
 	  *config.status*) \
@@ -782,6 +794,8 @@
 	mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
 	tags tags-am uninstall uninstall-am
 
+.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.
diff --git a/tests/examples/playback/playback-test.c b/tests/examples/playback/playback-test.c
index 81d2824..d458c2b 100644
--- a/tests/examples/playback/playback-test.c
+++ b/tests/examples/playback/playback-test.c
@@ -26,10 +26,6 @@
 #ifdef HAVE_CONFIG_H
 #include "config.h"
 #endif
-/* FIXME 0.11: suppress warnings for deprecated API such as GStaticRecMutex
- * with newer GTK versions (>= 3.3.0) */
-#define GDK_DISABLE_DEPRECATION_WARNINGS
-#define GLIB_DISABLE_DEPRECATION_WARNINGS
 
 #include <stdlib.h>
 #include <math.h>
@@ -77,6 +73,7 @@
 //#define UPDATE_INTERVAL 500
 //#define UPDATE_INTERVAL 100
 #define UPDATE_INTERVAL 40
+#define SLOW_UPDATE_INTERVAL 500
 
 /* number of milliseconds to play for after a seek */
 #define SCRUB_TIME 100
@@ -118,6 +115,7 @@
   GtkWidget *subtitle_fontdesc_button;
 
   GtkWidget *seek_format_combo, *seek_position_label, *seek_duration_label;
+  GtkWidget *seek_start_label, *seek_stop_label;
   GtkWidget *seek_entry;
 
   GtkWidget *seek_scale, *statusbar;
@@ -151,6 +149,8 @@
   gboolean scrub;
   gboolean play_scrub;
   gboolean skip_seek;
+  gboolean skip_seek_key_only;
+  gboolean skip_seek_no_audio;
   gdouble rate;
   gboolean snap_before;
   gboolean snap_after;
@@ -174,6 +174,7 @@
   gint64 buffering_left;
   GstState state;
   guint update_id;
+  guint slow_update_id;
   guint seek_timeout_id;        /* Used for scrubbing in paused */
   gulong changed_id;
   guint fill_id;
@@ -293,13 +294,14 @@
 {
   const gchar *name;
   void (*func) (PlaybackApp * app, const gchar * location);
+  const gchar *help;
 }
 Pipeline;
 
 static const Pipeline pipelines[] = {
-  {"playbin", make_playbin_pipeline},
+  {"playbin", make_playbin_pipeline, "[URLS|FILENAMES]"},
 #ifndef GST_DISABLE_PARSE
-  {"parse-launch", make_parselaunch_pipeline},
+  {"parse-launch", make_parselaunch_pipeline, "[PARSE-LAUNCH-LINE]"},
 #endif
 };
 
@@ -427,6 +429,37 @@
 }
 
 static gboolean
+update_seek_range (PlaybackApp * app)
+{
+  GstFormat format = GST_FORMAT_TIME;
+  gint64 seek_start, seek_stop;
+  gboolean seekable;
+  GstQuery *query;
+
+  query = gst_query_new_seeking (format);
+  if (gst_element_query (app->pipeline, query)) {
+    gchar *str;
+
+    gst_query_parse_seeking (query, &format, &seekable, &seek_start,
+        &seek_stop);
+    if (!seekable) {
+      seek_start = seek_stop = -1;
+    }
+
+    str = g_strdup_printf ("%" G_GINT64_FORMAT, seek_start);
+    gtk_label_set_text (GTK_LABEL (app->seek_start_label), str);
+    g_free (str);
+
+    str = g_strdup_printf ("%" G_GINT64_FORMAT, seek_stop);
+    gtk_label_set_text (GTK_LABEL (app->seek_stop_label), str);
+    g_free (str);
+  }
+  gst_query_unref (query);
+
+  return TRUE;
+}
+
+static gboolean
 update_scale (PlaybackApp * app)
 {
   GstFormat format = GST_FORMAT_TIME;
@@ -508,7 +541,11 @@
   if (app->loop_seek)
     flags |= GST_SEEK_FLAG_SEGMENT;
   if (app->skip_seek)
-    flags |= GST_SEEK_FLAG_SKIP;
+    flags |= GST_SEEK_FLAG_TRICKMODE;
+  if (app->skip_seek_key_only)
+    flags |= GST_SEEK_FLAG_TRICKMODE_KEY_UNITS;
+  if (app->skip_seek_no_audio)
+    flags |= GST_SEEK_FLAG_TRICKMODE_NO_AUDIO;
   if (app->snap_before)
     flags |= GST_SEEK_FLAG_SNAP_BEFORE;
   if (app->snap_after)
@@ -619,11 +656,20 @@
       app->update_id =
           g_timeout_add (UPDATE_INTERVAL, (GSourceFunc) update_scale, app);
     }
+    if (app->slow_update_id == 0) {
+      app->slow_update_id =
+          g_timeout_add (SLOW_UPDATE_INTERVAL, (GSourceFunc) update_seek_range,
+          app);
+    }
   } else {
     if (app->update_id) {
       g_source_remove (app->update_id);
       app->update_id = 0;
     }
+    if (app->slow_update_id) {
+      g_source_remove (app->slow_update_id);
+      app->slow_update_id = 0;
+    }
   }
 }
 
@@ -878,9 +924,9 @@
 }
 
 static void
-skip_toggle_cb (GtkToggleButton * button, PlaybackApp * app)
+skip_toggle_common (gboolean * v, GtkToggleButton * button, PlaybackApp * app)
 {
-  app->skip_seek = gtk_toggle_button_get_active (button);
+  *v = gtk_toggle_button_get_active (button);
   if (app->state == GST_STATE_PLAYING) {
     gint64 real;
 
@@ -892,6 +938,24 @@
 }
 
 static void
+skip_toggle_cb (GtkToggleButton * button, PlaybackApp * app)
+{
+  skip_toggle_common (&app->skip_seek, button, app);
+}
+
+static void
+skip_key_toggle_cb (GtkToggleButton * button, PlaybackApp * app)
+{
+  skip_toggle_common (&app->skip_seek_key_only, button, app);
+}
+
+static void
+skip_audio_toggle_cb (GtkToggleButton * button, PlaybackApp * app)
+{
+  skip_toggle_common (&app->skip_seek_no_audio, button, app);
+}
+
+static void
 rate_spinbutton_changed_cb (GtkSpinButton * button, PlaybackApp * app)
 {
   gboolean res = FALSE;
@@ -912,7 +976,11 @@
   if (app->keyframe_seek)
     flags |= GST_SEEK_FLAG_KEY_UNIT;
   if (app->skip_seek)
-    flags |= GST_SEEK_FLAG_SKIP;
+    flags |= GST_SEEK_FLAG_TRICKMODE;
+  if (app->skip_seek_key_only)
+    flags |= GST_SEEK_FLAG_TRICKMODE_KEY_UNITS;
+  if (app->skip_seek_no_audio)
+    flags |= GST_SEEK_FLAG_TRICKMODE_NO_AUDIO;
 
   if (app->rate >= 0.0) {
     s_event = gst_event_new_seek (app->rate,
@@ -1112,6 +1180,7 @@
         str = gst_tag_list_to_string (tags);
         g_print ("video %d: %s\n", i, str);
         g_free (str);
+        gst_tag_list_unref (tags);
       }
       /* find good name for the label */
       name = g_strdup_printf ("video %d", i + 1);
@@ -1131,6 +1200,7 @@
         str = gst_tag_list_to_string (tags);
         g_print ("audio %d: %s\n", i, str);
         g_free (str);
+        gst_tag_list_unref (tags);
       }
       /* find good name for the label */
       name = g_strdup_printf ("audio %d", i + 1);
@@ -1160,6 +1230,7 @@
         if (value && G_VALUE_HOLDS_STRING (value)) {
           name = g_strdup_printf ("text %s", g_value_get_string (value));
         }
+        gst_tag_list_unref (tags);
       }
       /* find good name for the label if we didn't use a tag */
       if (name == NULL)
@@ -1249,6 +1320,7 @@
     gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT (app->vis_combo), name);
   }
   gtk_combo_box_set_active (GTK_COMBO_BOX (app->vis_combo), 0);
+  gst_plugin_feature_list_free (list);
 }
 
 static void
@@ -1827,7 +1899,11 @@
   if (app->loop_seek)
     flags |= GST_SEEK_FLAG_SEGMENT;
   if (app->skip_seek)
-    flags |= GST_SEEK_FLAG_SKIP;
+    flags |= GST_SEEK_FLAG_TRICKMODE;
+  if (app->skip_seek_key_only)
+    flags |= GST_SEEK_FLAG_TRICKMODE_KEY_UNITS;
+  if (app->skip_seek_no_audio)
+    flags |= GST_SEEK_FLAG_TRICKMODE_NO_AUDIO;
 
   s_event = gst_event_new_seek (app->rate,
       GST_FORMAT_TIME, flags, GST_SEEK_TYPE_SET, G_GINT64_CONSTANT (0),
@@ -1869,7 +1945,7 @@
     }
   } else {
     /* buffering busy */
-    if (app->buffering == FALSE && app->state == GST_STATE_PLAYING) {
+    if (!app->buffering && app->state == GST_STATE_PLAYING) {
       /* we were not buffering but PLAYING, PAUSE  the pipeline. */
       if (!app->is_live) {
         fprintf (stderr, "Buffering, setting pipeline to PAUSED ...\n");
@@ -2519,11 +2595,11 @@
 {
   gint i;
 
-  g_print ("usage: %s <type> <filename>\n", argv[0]);
+  g_print ("Usage: %s <type> <argument>\n", argv[0]);
   g_print ("   possible types:\n");
 
   for (i = 0; i < G_N_ELEMENTS (pipelines); i++) {
-    g_print ("     %d = %s\n", i, pipelines[i].name);
+    g_print ("     %d = %s %s\n", i, pipelines[i].name, pipelines[i].help);
   }
 }
 
@@ -2550,7 +2626,6 @@
   g_signal_connect (app->video_window, "motion-notify-event",
       G_CALLBACK (motion_notify_cb), app);
   gtk_widget_set_can_focus (app->video_window, TRUE);
-  gtk_widget_set_double_buffered (app->video_window, FALSE);
   gtk_widget_add_events (app->video_window,
       GDK_POINTER_MOTION_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK
       | GDK_KEY_PRESS_MASK | GDK_KEY_RELEASE_MASK);
@@ -2561,23 +2636,28 @@
       "playback-test");
   gtk_statusbar_push (GTK_STATUSBAR (app->statusbar), app->status_id,
       "Stopped");
-  hbox = gtk_hbox_new (FALSE, 0);
-  vbox = gtk_vbox_new (FALSE, 0);
+  hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0);
+  vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0);
   gtk_container_set_border_width (GTK_CONTAINER (vbox), 3);
 
   /* media controls */
-  play_button = gtk_button_new_from_stock (GTK_STOCK_MEDIA_PLAY);
-  pause_button = gtk_button_new_from_stock (GTK_STOCK_MEDIA_PAUSE);
-  stop_button = gtk_button_new_from_stock (GTK_STOCK_MEDIA_STOP);
+  play_button = gtk_button_new_from_icon_name ("media-playback-start",
+      GTK_ICON_SIZE_BUTTON);
+  pause_button = gtk_button_new_from_icon_name ("media-playback-pause",
+      GTK_ICON_SIZE_BUTTON);
+  stop_button = gtk_button_new_from_icon_name ("media-playback-stop",
+      GTK_ICON_SIZE_BUTTON);
 
   /* seek expander */
   {
     GtkWidget *accurate_checkbox, *key_checkbox, *loop_checkbox,
         *flush_checkbox, *snap_before_checkbox, *snap_after_checkbox;
     GtkWidget *scrub_checkbox, *play_scrub_checkbox, *rate_label;
-    GtkWidget *skip_checkbox, *rate_spinbutton;
+    GtkWidget *skip_checkbox, *skip_key_checkbox, *skip_audio_checkbox,
+        *rate_spinbutton;
     GtkWidget *flagtable, *advanced_seek, *advanced_seek_grid;
     GtkWidget *duration_label, *position_label, *seek_button;
+    GtkWidget *start_label, *stop_label;
 
     seek = gtk_expander_new ("seek options");
     flagtable = gtk_grid_new ();
@@ -2592,7 +2672,11 @@
     flush_checkbox = gtk_check_button_new_with_label ("Flush");
     scrub_checkbox = gtk_check_button_new_with_label ("Scrub");
     play_scrub_checkbox = gtk_check_button_new_with_label ("Play Scrub");
-    skip_checkbox = gtk_check_button_new_with_label ("Play Skip");
+    skip_checkbox = gtk_check_button_new_with_label ("Trickmode Play");
+    skip_key_checkbox =
+        gtk_check_button_new_with_label ("Trickmode - Keyframes Only");
+    skip_audio_checkbox =
+        gtk_check_button_new_with_label ("Trickmode - No Audio");
     snap_before_checkbox = gtk_check_button_new_with_label ("Snap before");
     snap_after_checkbox = gtk_check_button_new_with_label ("Snap after");
     rate_spinbutton = gtk_spin_button_new_with_range (-100, 100, 0.1);
@@ -2613,6 +2697,10 @@
         "play video while seeking");
     gtk_widget_set_tooltip_text (skip_checkbox,
         "Skip frames while playing at high frame rates");
+    gtk_widget_set_tooltip_text (skip_key_checkbox,
+        "Skip everything except keyframes while playing at high frame rates");
+    gtk_widget_set_tooltip_text (skip_audio_checkbox,
+        "Do not decode audio during trick mode playback");
     gtk_widget_set_tooltip_text (snap_before_checkbox,
         "Favor snapping to the frame before the seek target");
     gtk_widget_set_tooltip_text (snap_after_checkbox,
@@ -2637,6 +2725,10 @@
         G_CALLBACK (play_scrub_toggle_cb), app);
     g_signal_connect (G_OBJECT (skip_checkbox), "toggled",
         G_CALLBACK (skip_toggle_cb), app);
+    g_signal_connect (G_OBJECT (skip_key_checkbox), "toggled",
+        G_CALLBACK (skip_key_toggle_cb), app);
+    g_signal_connect (G_OBJECT (skip_audio_checkbox), "toggled",
+        G_CALLBACK (skip_audio_toggle_cb), app);
     g_signal_connect (G_OBJECT (rate_spinbutton), "value-changed",
         G_CALLBACK (rate_spinbutton_changed_cb), app);
     g_signal_connect (G_OBJECT (snap_before_checkbox), "toggled",
@@ -2651,6 +2743,8 @@
     gtk_grid_attach (GTK_GRID (flagtable), scrub_checkbox, 1, 1, 1, 1);
     gtk_grid_attach (GTK_GRID (flagtable), play_scrub_checkbox, 2, 1, 1, 1);
     gtk_grid_attach (GTK_GRID (flagtable), skip_checkbox, 3, 0, 1, 1);
+    gtk_grid_attach (GTK_GRID (flagtable), skip_key_checkbox, 3, 1, 1, 1);
+    gtk_grid_attach (GTK_GRID (flagtable), skip_audio_checkbox, 3, 2, 1, 1);
     gtk_grid_attach (GTK_GRID (flagtable), rate_label, 4, 0, 1, 1);
     gtk_grid_attach (GTK_GRID (flagtable), rate_spinbutton, 4, 1, 1, 1);
     gtk_grid_attach (GTK_GRID (flagtable), snap_before_checkbox, 0, 2, 1, 1);
@@ -2691,6 +2785,18 @@
     gtk_grid_attach (GTK_GRID (advanced_seek_grid), app->seek_duration_label, 3,
         1, 1, 1);
 
+    start_label = gtk_label_new ("Seek start:");
+    gtk_grid_attach (GTK_GRID (advanced_seek_grid), start_label, 4, 0, 1, 1);
+    stop_label = gtk_label_new ("Seek stop:");
+    gtk_grid_attach (GTK_GRID (advanced_seek_grid), stop_label, 4, 1, 1, 1);
+
+    app->seek_start_label = gtk_label_new ("-1");
+    gtk_grid_attach (GTK_GRID (advanced_seek_grid), app->seek_start_label, 5,
+        0, 1, 1);
+    app->seek_stop_label = gtk_label_new ("-1");
+    gtk_grid_attach (GTK_GRID (advanced_seek_grid), app->seek_stop_label, 5,
+        1, 1, 1);
+
     gtk_container_add (GTK_CONTAINER (advanced_seek), advanced_seek_grid);
     gtk_grid_attach (GTK_GRID (flagtable), advanced_seek, 0, 3, 3, 2);
     gtk_container_add (GTK_CONTAINER (seek), flagtable);
@@ -2702,7 +2808,7 @@
     GtkWidget *step_button, *shuttle_checkbox;
 
     step = gtk_expander_new ("step options");
-    hbox = gtk_hbox_new (FALSE, 0);
+    hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0);
 
     app->step_format_combo = gtk_combo_box_text_new ();
     gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT (app->step_format_combo),
@@ -2728,7 +2834,9 @@
     gtk_box_pack_start (GTK_BOX (hbox), app->step_rate_spinbutton, FALSE, FALSE,
         2);
 
-    step_button = gtk_button_new_from_stock (GTK_STOCK_MEDIA_FORWARD);
+    step_button =
+        gtk_button_new_from_icon_name ("media-seek-forward",
+        GTK_ICON_SIZE_BUTTON);
     gtk_button_set_label (GTK_BUTTON (step_button), "Step");
     gtk_box_pack_start (GTK_BOX (hbox), step_button, FALSE, FALSE, 2);
 
@@ -2744,7 +2852,7 @@
 
     adjustment =
         GTK_ADJUSTMENT (gtk_adjustment_new (0.0, -3.00, 4.0, 0.1, 1.0, 1.0));
-    app->shuttle_scale = gtk_hscale_new (adjustment);
+    app->shuttle_scale = gtk_scale_new (GTK_ORIENTATION_HORIZONTAL, adjustment);
     gtk_scale_set_digits (GTK_SCALE (app->shuttle_scale), 2);
     gtk_scale_set_value_pos (GTK_SCALE (app->shuttle_scale), GTK_POS_TOP);
     g_signal_connect (app->shuttle_scale, "value-changed",
@@ -2897,14 +3005,15 @@
     GtkWidget *vbox, *frame;
 
     colorbalance = gtk_expander_new ("color balance options");
-    vbox = gtk_vbox_new (FALSE, 0);
+    vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0);
 
     /* contrast scale */
     frame = gtk_frame_new ("Contrast");
     adjustment =
         GTK_ADJUSTMENT (gtk_adjustment_new (N_GRAD / 2.0, 0.00, N_GRAD, 0.1,
             1.0, 1.0));
-    app->contrast_scale = gtk_hscale_new (adjustment);
+    app->contrast_scale =
+        gtk_scale_new (GTK_ORIENTATION_HORIZONTAL, adjustment);
     gtk_scale_set_draw_value (GTK_SCALE (app->contrast_scale), FALSE);
     g_signal_connect (app->contrast_scale, "value-changed",
         G_CALLBACK (colorbalance_value_changed), app);
@@ -2916,7 +3025,8 @@
     adjustment =
         GTK_ADJUSTMENT (gtk_adjustment_new (N_GRAD / 2.0, 0.00, N_GRAD, 0.1,
             1.0, 1.0));
-    app->brightness_scale = gtk_hscale_new (adjustment);
+    app->brightness_scale =
+        gtk_scale_new (GTK_ORIENTATION_HORIZONTAL, adjustment);
     gtk_scale_set_draw_value (GTK_SCALE (app->brightness_scale), FALSE);
     g_signal_connect (app->brightness_scale, "value-changed",
         G_CALLBACK (colorbalance_value_changed), app);
@@ -2928,7 +3038,7 @@
     adjustment =
         GTK_ADJUSTMENT (gtk_adjustment_new (N_GRAD / 2.0, 0.00, N_GRAD, 0.1,
             1.0, 1.0));
-    app->hue_scale = gtk_hscale_new (adjustment);
+    app->hue_scale = gtk_scale_new (GTK_ORIENTATION_HORIZONTAL, adjustment);
     gtk_scale_set_draw_value (GTK_SCALE (app->hue_scale), FALSE);
     g_signal_connect (app->hue_scale, "value-changed",
         G_CALLBACK (colorbalance_value_changed), app);
@@ -2940,7 +3050,8 @@
     adjustment =
         GTK_ADJUSTMENT (gtk_adjustment_new (N_GRAD / 2.0, 0.00, N_GRAD, 0.1,
             1.0, 1.0));
-    app->saturation_scale = gtk_hscale_new (adjustment);
+    app->saturation_scale =
+        gtk_scale_new (GTK_ORIENTATION_HORIZONTAL, adjustment);
     gtk_scale_set_draw_value (GTK_SCALE (app->saturation_scale), FALSE);
     g_signal_connect (app->saturation_scale, "value-changed",
         G_CALLBACK (colorbalance_value_changed), app);
@@ -2953,7 +3064,7 @@
   /* seek bar */
   adjustment =
       GTK_ADJUSTMENT (gtk_adjustment_new (0.0, 0.00, N_GRAD, 0.1, 1.0, 1.0));
-  app->seek_scale = gtk_hscale_new (adjustment);
+  app->seek_scale = gtk_scale_new (GTK_ORIENTATION_HORIZONTAL, adjustment);
   gtk_scale_set_digits (GTK_SCALE (app->seek_scale), 2);
   gtk_scale_set_value_pos (GTK_SCALE (app->seek_scale), GTK_POS_RIGHT);
   gtk_range_set_show_fill_level (GTK_RANGE (app->seek_scale), TRUE);
@@ -2974,7 +3085,7 @@
 
     playbin = gtk_expander_new ("playbin options");
     /* the playbin panel controls for the video/audio/subtitle tracks */
-    panel = gtk_hbox_new (FALSE, 0);
+    panel = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0);
     app->video_combo = gtk_combo_box_text_new ();
     app->audio_combo = gtk_combo_box_text_new ();
     app->text_combo = gtk_combo_box_text_new ();
@@ -3083,8 +3194,9 @@
     g_signal_connect (G_OBJECT (app->volume_spinbutton), "value-changed",
         G_CALLBACK (volume_spinbutton_changed_cb), app);
     /* playbin panel for snapshot */
-    boxes2 = gtk_hbox_new (FALSE, 0);
-    shot_button = gtk_button_new_from_stock (GTK_STOCK_SAVE);
+    boxes2 = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0);
+    shot_button =
+        gtk_button_new_from_icon_name ("document-save", GTK_ICON_SIZE_BUTTON);
     gtk_widget_set_tooltip_text (shot_button,
         "save a screenshot .png in the current directory");
     g_signal_connect (G_OBJECT (shot_button), "clicked", G_CALLBACK (shot_cb),
@@ -3187,7 +3299,7 @@
     gtk_grid_attach (GTK_GRID (boxes3), app->subtitle_fontdesc_button, 1, 5, 1,
         1);
 
-    pb2vbox = gtk_vbox_new (FALSE, 0);
+    pb2vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0);
     gtk_box_pack_start (GTK_BOX (pb2vbox), panel, FALSE, FALSE, 2);
     gtk_box_pack_start (GTK_BOX (pb2vbox), boxes, FALSE, FALSE, 2);
     gtk_box_pack_start (GTK_BOX (pb2vbox), boxes2, FALSE, FALSE, 2);
@@ -3215,7 +3327,8 @@
   gtk_box_pack_start (GTK_BOX (vbox), step, FALSE, FALSE, 2);
   gtk_box_pack_start (GTK_BOX (vbox), navigation, FALSE, FALSE, 2);
   gtk_box_pack_start (GTK_BOX (vbox), colorbalance, FALSE, FALSE, 2);
-  gtk_box_pack_start (GTK_BOX (vbox), gtk_hseparator_new (), FALSE, FALSE, 2);
+  gtk_box_pack_start (GTK_BOX (vbox),
+      gtk_separator_new (GTK_ORIENTATION_HORIZONTAL), FALSE, FALSE, 2);
   gtk_box_pack_start (GTK_BOX (vbox), app->seek_scale, FALSE, FALSE, 2);
   gtk_box_pack_start (GTK_BOX (vbox), app->statusbar, FALSE, FALSE, 2);
 
@@ -3272,7 +3385,8 @@
   g_list_free (app->paths);
   g_list_foreach (app->sub_paths, (GFunc) g_free, NULL);
   g_list_free (app->sub_paths);
-
+  if (app->vis_entries)
+    g_array_free (app->vis_entries, TRUE);
   g_print ("free pipeline\n");
   gst_object_unref (app->pipeline);
 }
@@ -3302,7 +3416,7 @@
     g_print ("Error initializing: %s\n", err->message);
     exit (1);
   }
-
+  g_option_context_free (ctx);
   GST_DEBUG_CATEGORY_INIT (playback_debug, "playback-test", 0,
       "playback example");
 
@@ -3311,7 +3425,19 @@
     exit (-1);
   }
 
-  app.pipeline_type = atoi (argv[1]);
+  app.pipeline_type = -1;
+  if (g_ascii_isdigit (argv[1][0])) {
+    app.pipeline_type = atoi (argv[1]);
+  } else {
+    gint i;
+
+    for (i = 0; i < G_N_ELEMENTS (pipelines); ++i) {
+      if (strcmp (pipelines[i].name, argv[1]) == 0) {
+        app.pipeline_type = i;
+        break;
+      }
+    }
+  }
 
   if (app.pipeline_type < 0 || app.pipeline_type >= G_N_ELEMENTS (pipelines)) {
     print_usage (argc, argv);
diff --git a/tests/examples/playrec/Makefile.in b/tests/examples/playrec/Makefile.in
index c87df66..7deed79 100644
--- a/tests/examples/playrec/Makefile.in
+++ b/tests/examples/playrec/Makefile.in
@@ -1,7 +1,7 @@
-# Makefile.in generated by automake 1.14.1 from Makefile.am.
+# Makefile.in generated by automake 1.15 from Makefile.am.
 # @configure_input@
 
-# Copyright (C) 1994-2013 Free Software Foundation, Inc.
+# 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,
@@ -15,7 +15,17 @@
 @SET_MAKE@
 
 VPATH = @srcdir@
-am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)'
+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 \
       ?) ;; \
@@ -81,8 +91,6 @@
 target_triplet = @target@
 noinst_PROGRAMS = playrec$(EXEEXT)
 subdir = tests/examples/playrec
-DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \
-	$(top_srcdir)/depcomp
 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 \
@@ -103,7 +111,6 @@
 	$(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-x11.m4 \
 	$(top_srcdir)/common/m4/gst.m4 \
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
@@ -120,6 +127,7 @@
 	$(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
 mkinstalldirs = $(install_sh) -d
 CONFIG_HEADER = $(top_builddir)/config.h
 CONFIG_CLEAN_FILES =
@@ -196,6 +204,7 @@
   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@
@@ -256,6 +265,8 @@
 GIO_CFLAGS = @GIO_CFLAGS@
 GIO_LDFLAGS = @GIO_LDFLAGS@
 GIO_LIBS = @GIO_LIBS@
+GIO_UNIX_2_0_CFLAGS = @GIO_UNIX_2_0_CFLAGS@
+GIO_UNIX_2_0_LIBS = @GIO_UNIX_2_0_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
@@ -285,6 +296,8 @@
 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_OPTION_CFLAGS = @GST_OPTION_CFLAGS@
 GST_OPTION_CXXFLAGS = @GST_OPTION_CXXFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
@@ -312,7 +325,6 @@
 GTK_X11_CFLAGS = @GTK_X11_CFLAGS@
 GTK_X11_LIBS = @GTK_X11_LIBS@
 HAVE_CDPARANOIA = @HAVE_CDPARANOIA@
-HAVE_X = @HAVE_X@
 HAVE_XSHM = @HAVE_XSHM@
 HAVE_ZLIB = @HAVE_ZLIB@
 HTML_DIR = @HTML_DIR@
@@ -327,6 +339,7 @@
 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@
@@ -416,13 +429,12 @@
 XGETTEXT = @XGETTEXT@
 XGETTEXT_015 = @XGETTEXT_015@
 XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
-XMKMF = @XMKMF@
+XSHM_CFLAGS = @XSHM_CFLAGS@
 XSHM_LIBS = @XSHM_LIBS@
+XVIDEO_CFLAGS = @XVIDEO_CFLAGS@
 XVIDEO_LIBS = @XVIDEO_LIBS@
 X_CFLAGS = @X_CFLAGS@
-X_EXTRA_LIBS = @X_EXTRA_LIBS@
 X_LIBS = @X_LIBS@
-X_PRE_LIBS = @X_PRE_LIBS@
 ZLIB_CFLAGS = @ZLIB_CFLAGS@
 ZLIB_LIBS = @ZLIB_LIBS@
 abs_builddir = @abs_builddir@
@@ -475,6 +487,7 @@
 psdir = @psdir@
 pyexecdir = @pyexecdir@
 pythondir = @pythondir@
+runstatedir = @runstatedir@
 sbindir = @sbindir@
 sharedstatedir = @sharedstatedir@
 srcdir = @srcdir@
@@ -506,7 +519,6 @@
 	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu tests/examples/playrec/Makefile'; \
 	$(am__cd) $(top_srcdir) && \
 	  $(AUTOMAKE) --gnu tests/examples/playrec/Makefile
-.PRECIOUS: Makefile
 Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
 	@case '$?' in \
 	  *config.status*) \
@@ -793,6 +805,8 @@
 	mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
 	tags tags-am uninstall uninstall-am
 
+.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.
diff --git a/tests/examples/playrec/playrec.c b/tests/examples/playrec/playrec.c
index dd803a1..adc8cec 100644
--- a/tests/examples/playrec/playrec.c
+++ b/tests/examples/playrec/playrec.c
@@ -26,9 +26,8 @@
 
 #include <gst/gst.h>
 
-/* Define to run the asynchronous version. This requires 0.10.31 of the
- * GStreamer core. The async version has the benefit that it doesn't block the
- * main thread but it produces slightly less clear code. */
+/* Define to run the asynchronous version, which has the benefit that it doesn't
+ * block the main thread but it produces slightly less clear code. */
 #define ASYNC_VERSION
 
 static GMainLoop *loop;
diff --git a/tests/examples/seek/Makefile.in b/tests/examples/seek/Makefile.in
index 99a87a7..c37d355 100644
--- a/tests/examples/seek/Makefile.in
+++ b/tests/examples/seek/Makefile.in
@@ -1,7 +1,7 @@
-# Makefile.in generated by automake 1.14.1 from Makefile.am.
+# Makefile.in generated by automake 1.15 from Makefile.am.
 # @configure_input@
 
-# Copyright (C) 1994-2013 Free Software Foundation, Inc.
+# 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,
@@ -15,7 +15,17 @@
 @SET_MAKE@
 
 VPATH = @srcdir@
-am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)'
+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 \
       ?) ;; \
@@ -81,8 +91,6 @@
 target_triplet = @target@
 noinst_PROGRAMS = $(am__EXEEXT_2)
 subdir = tests/examples/seek
-DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \
-	$(top_srcdir)/depcomp
 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 \
@@ -103,7 +111,6 @@
 	$(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-x11.m4 \
 	$(top_srcdir)/common/m4/gst.m4 \
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
@@ -120,6 +127,7 @@
 	$(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
 mkinstalldirs = $(install_sh) -d
 CONFIG_HEADER = $(top_builddir)/config.h
 CONFIG_CLEAN_FILES =
@@ -218,6 +226,7 @@
   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@
@@ -278,6 +287,8 @@
 GIO_CFLAGS = @GIO_CFLAGS@
 GIO_LDFLAGS = @GIO_LDFLAGS@
 GIO_LIBS = @GIO_LIBS@
+GIO_UNIX_2_0_CFLAGS = @GIO_UNIX_2_0_CFLAGS@
+GIO_UNIX_2_0_LIBS = @GIO_UNIX_2_0_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
@@ -307,6 +318,8 @@
 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_OPTION_CFLAGS = @GST_OPTION_CFLAGS@
 GST_OPTION_CXXFLAGS = @GST_OPTION_CXXFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
@@ -334,7 +347,6 @@
 GTK_X11_CFLAGS = @GTK_X11_CFLAGS@
 GTK_X11_LIBS = @GTK_X11_LIBS@
 HAVE_CDPARANOIA = @HAVE_CDPARANOIA@
-HAVE_X = @HAVE_X@
 HAVE_XSHM = @HAVE_XSHM@
 HAVE_ZLIB = @HAVE_ZLIB@
 HTML_DIR = @HTML_DIR@
@@ -349,6 +361,7 @@
 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@
@@ -438,13 +451,12 @@
 XGETTEXT = @XGETTEXT@
 XGETTEXT_015 = @XGETTEXT_015@
 XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
-XMKMF = @XMKMF@
+XSHM_CFLAGS = @XSHM_CFLAGS@
 XSHM_LIBS = @XSHM_LIBS@
+XVIDEO_CFLAGS = @XVIDEO_CFLAGS@
 XVIDEO_LIBS = @XVIDEO_LIBS@
 X_CFLAGS = @X_CFLAGS@
-X_EXTRA_LIBS = @X_EXTRA_LIBS@
 X_LIBS = @X_LIBS@
-X_PRE_LIBS = @X_PRE_LIBS@
 ZLIB_CFLAGS = @ZLIB_CFLAGS@
 ZLIB_LIBS = @ZLIB_LIBS@
 abs_builddir = @abs_builddir@
@@ -497,6 +509,7 @@
 psdir = @psdir@
 pyexecdir = @pyexecdir@
 pythondir = @pythondir@
+runstatedir = @runstatedir@
 sbindir = @sbindir@
 sharedstatedir = @sharedstatedir@
 srcdir = @srcdir@
@@ -533,7 +546,6 @@
 	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu tests/examples/seek/Makefile'; \
 	$(am__cd) $(top_srcdir) && \
 	  $(AUTOMAKE) --gnu tests/examples/seek/Makefile
-.PRECIOUS: Makefile
 Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
 	@case '$?' in \
 	  *config.status*) \
@@ -821,6 +833,8 @@
 	mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
 	tags tags-am uninstall uninstall-am
 
+.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.
diff --git a/tests/examples/seek/jsseek.c b/tests/examples/seek/jsseek.c
index 7d8bd29..72bca95 100644
--- a/tests/examples/seek/jsseek.c
+++ b/tests/examples/seek/jsseek.c
@@ -24,9 +24,6 @@
 #ifdef HAVE_CONFIG_H
 #include "config.h"
 #endif
-/* FIXME 0.11: suppress warnings for deprecated API such as GStaticRecMutex
- * with newer GTK versions (>= 3.3.0) */
-#define GDK_DISABLE_DEPRECATION_WARNINGS
 
 #include <glib.h>
 #include <glib/gstdio.h>
@@ -1817,6 +1814,7 @@
         str = gst_tag_list_to_string (tags);
         g_print ("video %d: %s\n", i, str);
         g_free (str);
+        gst_tag_list_unref (tags);
       }
       /* find good name for the label */
       name = g_strdup_printf ("video %d", i + 1);
@@ -1834,6 +1832,7 @@
         str = gst_tag_list_to_string (tags);
         g_print ("audio %d: %s\n", i, str);
         g_free (str);
+        gst_tag_list_unref (tags);
       }
       /* find good name for the label */
       name = g_strdup_printf ("audio %d", i + 1);
@@ -1861,6 +1860,7 @@
         if (value && G_VALUE_HOLDS_STRING (value)) {
           name = g_strdup_printf ("text %s", g_value_get_string (value));
         }
+        gst_tag_list_unref (tags);
       }
       /* find good name for the label if we didn't use a tag */
       if (name == NULL)
@@ -1947,6 +1947,7 @@
     gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT (vis_combo), name);
   }
   gtk_combo_box_set_active (GTK_COMBO_BOX (vis_combo), 0);
+  gst_plugin_feature_list_free (list);
 }
 
 static void
@@ -2352,7 +2353,7 @@
     }
   } else {
     /* buffering busy */
-    if (buffering == FALSE && state == GST_STATE_PLAYING) {
+    if (!buffering && state == GST_STATE_PLAYING) {
       /* we were not buffering but PLAYING, PAUSE  the pipeline. */
       if (!is_live) {
         fprintf (stderr, "Buffering, setting pipeline to PAUSED ...\n");
@@ -2651,7 +2652,7 @@
 main (int argc, char **argv)
 {
   GtkWidget *window, *hbox, *vbox, *panel, *expander, *pb2vbox, *boxes,
-      *flagtable, *boxes2, *step;
+      *flaggrid, *boxes2, *step;
   GtkWidget *play_button, *pause_button, *stop_button, *shot_button;
   GtkWidget *accurate_checkbox, *key_checkbox, *loop_checkbox, *flush_checkbox;
   GtkWidget *scrub_checkbox, *play_scrub_checkbox;
@@ -2679,7 +2680,7 @@
     g_print ("Error initializing: %s\n", err->message);
     exit (1);
   }
-
+  g_option_context_free (ctx);
   GST_DEBUG_CATEGORY_INIT (seek_debug, "seek", 0, "seek example");
 
   if (argc != 3) {
@@ -2727,20 +2728,22 @@
   video_window = gtk_drawing_area_new ();
   g_signal_connect (video_window, "draw", G_CALLBACK (draw_cb), NULL);
   g_signal_connect (video_window, "realize", G_CALLBACK (realize_cb), NULL);
-  gtk_widget_set_double_buffered (video_window, FALSE);
 
   statusbar = gtk_statusbar_new ();
   status_id = gtk_statusbar_get_context_id (GTK_STATUSBAR (statusbar), "seek");
   gtk_statusbar_push (GTK_STATUSBAR (statusbar), status_id, "Stopped");
-  hbox = gtk_hbox_new (FALSE, 0);
-  vbox = gtk_vbox_new (FALSE, 0);
-  flagtable = gtk_table_new (4, 2, FALSE);
+  hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0);
+  vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0);
+  flaggrid = gtk_grid_new ();
   gtk_container_set_border_width (GTK_CONTAINER (vbox), 3);
 
   /* media controls */
-  play_button = gtk_button_new_from_stock (GTK_STOCK_MEDIA_PLAY);
-  pause_button = gtk_button_new_from_stock (GTK_STOCK_MEDIA_PAUSE);
-  stop_button = gtk_button_new_from_stock (GTK_STOCK_MEDIA_STOP);
+  play_button = gtk_button_new_from_icon_name ("media-playback-start",
+      GTK_ICON_SIZE_BUTTON);
+  pause_button = gtk_button_new_from_icon_name ("media-playback-pause",
+      GTK_ICON_SIZE_BUTTON);
+  stop_button = gtk_button_new_from_icon_name ("media-playback-stop",
+      GTK_ICON_SIZE_BUTTON);
 
   /* seek flags */
   accurate_checkbox = gtk_check_button_new_with_label ("Accurate Seek");
@@ -2777,7 +2780,7 @@
     GtkWidget *hbox;
 
     step = gtk_expander_new ("step options");
-    hbox = gtk_hbox_new (FALSE, 0);
+    hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0);
 
     format_combo = gtk_combo_box_text_new ();
     gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT (format_combo),
@@ -2798,7 +2801,8 @@
     gtk_spin_button_set_value (GTK_SPIN_BUTTON (step_rate_spinbutton), 1.0);
     gtk_box_pack_start (GTK_BOX (hbox), step_rate_spinbutton, FALSE, FALSE, 2);
 
-    step_button = gtk_button_new_from_stock (GTK_STOCK_MEDIA_FORWARD);
+    step_button = gtk_button_new_from_icon_name ("media-seek-forward",
+        GTK_ICON_SIZE_BUTTON);
     gtk_button_set_label (GTK_BUTTON (step_button), "Step");
     gtk_box_pack_start (GTK_BOX (hbox), step_button, FALSE, FALSE, 2);
 
@@ -2814,7 +2818,8 @@
 
     shuttle_adjustment =
         GTK_ADJUSTMENT (gtk_adjustment_new (0.0, -3.00, 4.0, 0.1, 1.0, 1.0));
-    shuttle_hscale = gtk_hscale_new (shuttle_adjustment);
+    shuttle_hscale = gtk_scale_new (GTK_ORIENTATION_HORIZONTAL,
+        shuttle_adjustment);
     gtk_scale_set_digits (GTK_SCALE (shuttle_hscale), 2);
     gtk_scale_set_value_pos (GTK_SCALE (shuttle_hscale), GTK_POS_TOP);
     g_signal_connect (shuttle_hscale, "value_changed",
@@ -2830,7 +2835,7 @@
   /* seek bar */
   adjustment =
       GTK_ADJUSTMENT (gtk_adjustment_new (0.0, 0.00, 100.0, 0.1, 1.0, 1.0));
-  hscale = gtk_hscale_new (adjustment);
+  hscale = gtk_scale_new (GTK_ORIENTATION_HORIZONTAL, adjustment);
   gtk_scale_set_digits (GTK_SCALE (hscale), 2);
   gtk_scale_set_value_pos (GTK_SCALE (hscale), GTK_POS_RIGHT);
   gtk_range_set_show_fill_level (GTK_RANGE (hscale), TRUE);
@@ -2845,7 +2850,7 @@
 
   if (pipeline_type == 16) {
     /* the playbin panel controls for the video/audio/subtitle tracks */
-    panel = gtk_hbox_new (FALSE, 0);
+    panel = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0);
     video_combo = gtk_combo_box_text_new ();
     audio_combo = gtk_combo_box_text_new ();
     text_combo = gtk_combo_box_text_new ();
@@ -2862,7 +2867,7 @@
     g_signal_connect (G_OBJECT (text_combo), "changed",
         G_CALLBACK (text_combo_cb), pipeline);
     /* playbin panel for flag checkboxes and volume/mute */
-    boxes = gtk_hbox_new (FALSE, 0);
+    boxes = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0);
     vis_checkbox = gtk_check_button_new_with_label ("Vis");
     video_checkbox = gtk_check_button_new_with_label ("Video");
     audio_checkbox = gtk_check_button_new_with_label ("Audio");
@@ -2906,8 +2911,9 @@
     g_signal_connect (G_OBJECT (volume_spinbutton), "value_changed",
         G_CALLBACK (volume_spinbutton_changed_cb), pipeline);
     /* playbin panel for snapshot */
-    boxes2 = gtk_hbox_new (FALSE, 0);
-    shot_button = gtk_button_new_from_stock (GTK_STOCK_SAVE);
+    boxes2 = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0);
+    shot_button = gtk_button_new_from_icon_name ("document-save",
+        GTK_ICON_SIZE_BUTTON);
     gtk_widget_set_tooltip_text (shot_button,
         "save a screenshot .png in the current directory");
     g_signal_connect (G_OBJECT (shot_button), "clicked", G_CALLBACK (shot_cb),
@@ -2936,22 +2942,20 @@
   gtk_box_pack_start (GTK_BOX (hbox), play_button, FALSE, FALSE, 2);
   gtk_box_pack_start (GTK_BOX (hbox), pause_button, FALSE, FALSE, 2);
   gtk_box_pack_start (GTK_BOX (hbox), stop_button, FALSE, FALSE, 2);
-  gtk_box_pack_start (GTK_BOX (hbox), flagtable, FALSE, FALSE, 2);
-  gtk_table_attach_defaults (GTK_TABLE (flagtable), accurate_checkbox, 0, 1, 0,
-      1);
-  gtk_table_attach_defaults (GTK_TABLE (flagtable), flush_checkbox, 1, 2, 0, 1);
-  gtk_table_attach_defaults (GTK_TABLE (flagtable), loop_checkbox, 2, 3, 0, 1);
-  gtk_table_attach_defaults (GTK_TABLE (flagtable), key_checkbox, 0, 1, 1, 2);
-  gtk_table_attach_defaults (GTK_TABLE (flagtable), scrub_checkbox, 1, 2, 1, 2);
-  gtk_table_attach_defaults (GTK_TABLE (flagtable), play_scrub_checkbox, 2, 3,
-      1, 2);
-  gtk_table_attach_defaults (GTK_TABLE (flagtable), skip_checkbox, 3, 4, 0, 1);
-  gtk_table_attach_defaults (GTK_TABLE (flagtable), rate_label, 4, 5, 0, 1);
-  gtk_table_attach_defaults (GTK_TABLE (flagtable), rate_spinbutton, 4, 5, 1,
-      2);
+  gtk_box_pack_start (GTK_BOX (hbox), flaggrid, FALSE, FALSE, 2);
+  gtk_grid_attach (GTK_GRID (flaggrid), accurate_checkbox, 0, 0, 1, 1);
+  gtk_grid_attach (GTK_GRID (flaggrid), flush_checkbox, 1, 0, 1, 1);
+  gtk_grid_attach (GTK_GRID (flaggrid), loop_checkbox, 2, 0, 1, 1);
+  gtk_grid_attach (GTK_GRID (flaggrid), key_checkbox, 0, 1, 1, 1);
+  gtk_grid_attach (GTK_GRID (flaggrid), scrub_checkbox, 1, 1, 1, 1);
+  gtk_grid_attach (GTK_GRID (flaggrid), play_scrub_checkbox, 2, 1, 1, 1);
+  gtk_grid_attach (GTK_GRID (flaggrid), skip_checkbox, 3, 0, 1, 1);
+  gtk_grid_attach (GTK_GRID (flaggrid), rate_label, 4, 0, 1, 1);
+  gtk_grid_attach (GTK_GRID (flaggrid), rate_spinbutton, 4, 1, 1, 1);
+
   if (panel && boxes && boxes2) {
     expander = gtk_expander_new ("playbin options");
-    pb2vbox = gtk_vbox_new (FALSE, 0);
+    pb2vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0);
     gtk_box_pack_start (GTK_BOX (pb2vbox), panel, FALSE, FALSE, 2);
     gtk_box_pack_start (GTK_BOX (pb2vbox), boxes, FALSE, FALSE, 2);
     gtk_box_pack_start (GTK_BOX (pb2vbox), boxes2, FALSE, FALSE, 2);
@@ -3019,6 +3023,7 @@
   gst_element_set_state (pipeline, GST_STATE_NULL);
 
   g_print ("free pipeline\n");
+  g_array_free (vis_entries, TRUE);
   gst_object_unref (pipeline);
 
   g_list_foreach (paths, (GFunc) g_free, NULL);
diff --git a/tests/examples/seek/scrubby.c b/tests/examples/seek/scrubby.c
index ac5b2b4..c5c8d67 100644
--- a/tests/examples/seek/scrubby.c
+++ b/tests/examples/seek/scrubby.c
@@ -1,9 +1,28 @@
+/* GStreamer
+ *
+ * scrubby.c: sample application to change the playback speed dynamically
+ *
+ * Copyright (C) 2005 Wim Taymans <wim.taymans@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
-/* FIXME 0.11: suppress warnings for deprecated API such as GStaticRecMutex
- * with newer GTK versions (>= 3.3.0) */
-#define GDK_DISABLE_DEPRECATION_WARNINGS
 #include <stdlib.h>
 #include <glib.h>
 #include <gtk/gtk.h>
@@ -28,9 +47,11 @@
 static guint schanged_id = 0;
 
 #define SOURCE "filesrc"
-#define ASINK "alsasink"
+#define ASINK   "autoaudiosink"
+//#define ASINK "alsasink"
 //#define ASINK "osssink"
-#define VSINK "xvimagesink"
+#define VSINK   "autovideosink"
+//#define VSINK "xvimagesink"
 //#define VSINK "ximagesink"
 //#define VSINK "aasink"
 //#define VSINK "cacasink"
@@ -66,34 +87,6 @@
   return element;
 }
 
-static void
-dynamic_link (GstPadTemplate * templ, GstPad * newpad, gpointer data)
-{
-  dyn_link *connect = (dyn_link *) data;
-
-  if (connect->padname == NULL ||
-      !strcmp (gst_pad_get_name (newpad), connect->padname)) {
-    if (connect->bin)
-      gst_bin_add (GST_BIN (pipeline), connect->bin);
-    gst_pad_link (newpad, connect->target);
-  }
-}
-
-static void
-setup_dynamic_link (GstElement * element, const gchar * padname,
-    GstPad * target, GstElement * bin)
-{
-  dyn_link *connect;
-
-  connect = g_new0 (dyn_link, 1);
-  connect->padname = g_strdup (padname);
-  connect->target = target;
-  connect->bin = bin;
-
-  g_signal_connect (G_OBJECT (element), "pad-added", G_CALLBACK (dynamic_link),
-      connect);
-}
-
 static GstElement *
 make_wav_pipeline (const gchar * location)
 {
@@ -108,14 +101,8 @@
 
   g_object_set (G_OBJECT (src), "location", location, NULL);
 
-  gst_bin_add (GST_BIN (pipeline), src);
-  gst_bin_add (GST_BIN (pipeline), decoder);
-  gst_bin_add (GST_BIN (pipeline), audiosink);
-
-  gst_element_link (src, decoder);
-
-  setup_dynamic_link (decoder, "src", gst_element_get_static_pad (audiosink,
-          "sink"), NULL);
+  gst_bin_add_many (GST_BIN (pipeline), src, decoder, audiosink, NULL);
+  gst_element_link_many (src, decoder, audiosink, NULL);
 
   return pipeline;
 }
@@ -124,11 +111,12 @@
 make_playerbin_pipeline (const gchar * location)
 {
   GstElement *player;
+  const gchar *uri = g_filename_to_uri (location, NULL, NULL);
 
   player = gst_element_factory_make ("playbin", "player");
   g_assert (player);
 
-  g_object_set (G_OBJECT (player), "uri", location, NULL);
+  g_object_set (G_OBJECT (player), "uri", uri, NULL);
 
   return player;
 }
@@ -198,7 +186,7 @@
     GST_DEBUG ("seek because of slider move");
 
     if (do_seek (widget, TRUE, TRUE)) {
-      g_source_remove (changed_id);
+      g_signal_handler_disconnect (hscale, changed_id);
       changed_id = 0;
     }
   }
@@ -320,7 +308,7 @@
   GST_DEBUG ("stop seek");
 
   if (changed_id) {
-    g_source_remove (changed_id);
+    g_signal_handler_disconnect (hscale, changed_id);
     changed_id = 0;
   }
 
@@ -337,8 +325,6 @@
   gst_element_get_state (pipeline, &state, NULL, GST_CLOCK_TIME_NONE);
   if (state != GST_STATE_PLAYING) {
     g_print ("PLAY pipeline\n");
-    gst_element_set_state (pipeline, GST_STATE_PAUSED);
-    gst_element_get_state (pipeline, NULL, NULL, GST_CLOCK_TIME_NONE);
     gst_element_set_state (pipeline, GST_STATE_PLAYING);
     update_id =
         g_timeout_add (UPDATE_INTERVAL, (GSourceFunc) update_scale, pipeline);
@@ -494,8 +480,8 @@
 
   /* initialize gui elements ... */
   window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
-  hbox = gtk_hbox_new (FALSE, 0);
-  vbox = gtk_vbox_new (FALSE, 0);
+  hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0);
+  vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0);
   play_button = gtk_button_new_with_label ("play");
   pause_button = gtk_button_new_with_label ("pause");
   stop_button = gtk_button_new_with_label ("stop");
@@ -503,12 +489,12 @@
   adjustment =
       GTK_ADJUSTMENT (gtk_adjustment_new (0.0, 0.0, (gdouble) RANGE_PREC, 0.1,
           1.0, 1.0));
-  hscale = gtk_hscale_new (adjustment);
+  hscale = gtk_scale_new (GTK_ORIENTATION_HORIZONTAL, adjustment);
   gtk_scale_set_digits (GTK_SCALE (hscale), 2);
 
   sadjustment =
       GTK_ADJUSTMENT (gtk_adjustment_new (1.0, 0.0, 5.0, 0.1, 1.0, 0.0));
-  shscale = gtk_hscale_new (sadjustment);
+  shscale = gtk_scale_new (GTK_ORIENTATION_HORIZONTAL, sadjustment);
   gtk_scale_set_digits (GTK_SCALE (shscale), 2);
 
   schanged_id =
@@ -559,6 +545,8 @@
   g_print ("NULL pipeline\n");
   gst_element_set_state (pipeline, GST_STATE_NULL);
 
+  gst_object_unref (bus);
+
   g_print ("free pipeline\n");
   gst_object_unref (pipeline);
 
diff --git a/tests/examples/snapshot/Makefile.in b/tests/examples/snapshot/Makefile.in
index b6e8a58..8ae8bf3 100644
--- a/tests/examples/snapshot/Makefile.in
+++ b/tests/examples/snapshot/Makefile.in
@@ -1,7 +1,7 @@
-# Makefile.in generated by automake 1.14.1 from Makefile.am.
+# Makefile.in generated by automake 1.15 from Makefile.am.
 # @configure_input@
 
-# Copyright (C) 1994-2013 Free Software Foundation, Inc.
+# 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,
@@ -15,7 +15,17 @@
 @SET_MAKE@
 
 VPATH = @srcdir@
-am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)'
+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 \
       ?) ;; \
@@ -81,8 +91,6 @@
 target_triplet = @target@
 noinst_PROGRAMS = $(am__EXEEXT_2)
 subdir = tests/examples/snapshot
-DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \
-	$(top_srcdir)/depcomp
 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 \
@@ -103,7 +111,6 @@
 	$(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-x11.m4 \
 	$(top_srcdir)/common/m4/gst.m4 \
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
@@ -120,6 +127,7 @@
 	$(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
 mkinstalldirs = $(install_sh) -d
 CONFIG_HEADER = $(top_builddir)/config.h
 CONFIG_CLEAN_FILES =
@@ -194,6 +202,7 @@
   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@
@@ -254,6 +263,8 @@
 GIO_CFLAGS = @GIO_CFLAGS@
 GIO_LDFLAGS = @GIO_LDFLAGS@
 GIO_LIBS = @GIO_LIBS@
+GIO_UNIX_2_0_CFLAGS = @GIO_UNIX_2_0_CFLAGS@
+GIO_UNIX_2_0_LIBS = @GIO_UNIX_2_0_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
@@ -283,6 +294,8 @@
 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_OPTION_CFLAGS = @GST_OPTION_CFLAGS@
 GST_OPTION_CXXFLAGS = @GST_OPTION_CXXFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
@@ -310,7 +323,6 @@
 GTK_X11_CFLAGS = @GTK_X11_CFLAGS@
 GTK_X11_LIBS = @GTK_X11_LIBS@
 HAVE_CDPARANOIA = @HAVE_CDPARANOIA@
-HAVE_X = @HAVE_X@
 HAVE_XSHM = @HAVE_XSHM@
 HAVE_ZLIB = @HAVE_ZLIB@
 HTML_DIR = @HTML_DIR@
@@ -325,6 +337,7 @@
 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@
@@ -414,13 +427,12 @@
 XGETTEXT = @XGETTEXT@
 XGETTEXT_015 = @XGETTEXT_015@
 XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
-XMKMF = @XMKMF@
+XSHM_CFLAGS = @XSHM_CFLAGS@
 XSHM_LIBS = @XSHM_LIBS@
+XVIDEO_CFLAGS = @XVIDEO_CFLAGS@
 XVIDEO_LIBS = @XVIDEO_LIBS@
 X_CFLAGS = @X_CFLAGS@
-X_EXTRA_LIBS = @X_EXTRA_LIBS@
 X_LIBS = @X_LIBS@
-X_PRE_LIBS = @X_PRE_LIBS@
 ZLIB_CFLAGS = @ZLIB_CFLAGS@
 ZLIB_LIBS = @ZLIB_LIBS@
 abs_builddir = @abs_builddir@
@@ -473,6 +485,7 @@
 psdir = @psdir@
 pyexecdir = @pyexecdir@
 pythondir = @pythondir@
+runstatedir = @runstatedir@
 sbindir = @sbindir@
 sharedstatedir = @sharedstatedir@
 srcdir = @srcdir@
@@ -504,7 +517,6 @@
 	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu tests/examples/snapshot/Makefile'; \
 	$(am__cd) $(top_srcdir) && \
 	  $(AUTOMAKE) --gnu tests/examples/snapshot/Makefile
-.PRECIOUS: Makefile
 Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
 	@case '$?' in \
 	  *config.status*) \
@@ -777,6 +789,8 @@
 	mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
 	tags tags-am uninstall uninstall-am
 
+.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.
diff --git a/tests/examples/snapshot/snapshot.c b/tests/examples/snapshot/snapshot.c
index 4ddad45..3ebdc15 100644
--- a/tests/examples/snapshot/snapshot.c
+++ b/tests/examples/snapshot/snapshot.c
@@ -104,6 +104,7 @@
   /* get the preroll buffer from appsink, this block untils appsink really
    * prerolls */
   g_signal_emit_by_name (sink, "pull-preroll", &sample, NULL);
+  gst_object_unref (sink);
 
   /* if we have a buffer now, convert it to a pixbuf. It's possible that we
    * don't have a buffer because we went EOS right away or had an error. */
diff --git a/tests/files/Makefile.in b/tests/files/Makefile.in
index 2eaadd9..46325b1 100644
--- a/tests/files/Makefile.in
+++ b/tests/files/Makefile.in
@@ -1,7 +1,7 @@
-# Makefile.in generated by automake 1.14.1 from Makefile.am.
+# Makefile.in generated by automake 1.15 from Makefile.am.
 # @configure_input@
 
-# Copyright (C) 1994-2013 Free Software Foundation, Inc.
+# 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,
@@ -14,7 +14,17 @@
 
 @SET_MAKE@
 VPATH = @srcdir@
-am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)'
+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 \
       ?) ;; \
@@ -79,7 +89,6 @@
 host_triplet = @host@
 target_triplet = @target@
 subdir = tests/files
-DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am
 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 \
@@ -100,7 +109,6 @@
 	$(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-x11.m4 \
 	$(top_srcdir)/common/m4/gst.m4 \
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
@@ -117,6 +125,7 @@
 	$(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
 mkinstalldirs = $(install_sh) -d
 CONFIG_HEADER = $(top_builddir)/config.h
 CONFIG_CLEAN_FILES =
@@ -141,6 +150,7 @@
     *) (install-info --version) >/dev/null 2>&1;; \
   esac
 am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+am__DIST_COMMON = $(srcdir)/Makefile.in
 DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
 ACLOCAL = @ACLOCAL@
 ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@
@@ -201,6 +211,8 @@
 GIO_CFLAGS = @GIO_CFLAGS@
 GIO_LDFLAGS = @GIO_LDFLAGS@
 GIO_LIBS = @GIO_LIBS@
+GIO_UNIX_2_0_CFLAGS = @GIO_UNIX_2_0_CFLAGS@
+GIO_UNIX_2_0_LIBS = @GIO_UNIX_2_0_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
@@ -230,6 +242,8 @@
 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_OPTION_CFLAGS = @GST_OPTION_CFLAGS@
 GST_OPTION_CXXFLAGS = @GST_OPTION_CXXFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
@@ -257,7 +271,6 @@
 GTK_X11_CFLAGS = @GTK_X11_CFLAGS@
 GTK_X11_LIBS = @GTK_X11_LIBS@
 HAVE_CDPARANOIA = @HAVE_CDPARANOIA@
-HAVE_X = @HAVE_X@
 HAVE_XSHM = @HAVE_XSHM@
 HAVE_ZLIB = @HAVE_ZLIB@
 HTML_DIR = @HTML_DIR@
@@ -272,6 +285,7 @@
 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@
@@ -361,13 +375,12 @@
 XGETTEXT = @XGETTEXT@
 XGETTEXT_015 = @XGETTEXT_015@
 XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
-XMKMF = @XMKMF@
+XSHM_CFLAGS = @XSHM_CFLAGS@
 XSHM_LIBS = @XSHM_LIBS@
+XVIDEO_CFLAGS = @XVIDEO_CFLAGS@
 XVIDEO_LIBS = @XVIDEO_LIBS@
 X_CFLAGS = @X_CFLAGS@
-X_EXTRA_LIBS = @X_EXTRA_LIBS@
 X_LIBS = @X_LIBS@
-X_PRE_LIBS = @X_PRE_LIBS@
 ZLIB_CFLAGS = @ZLIB_CFLAGS@
 ZLIB_LIBS = @ZLIB_LIBS@
 abs_builddir = @abs_builddir@
@@ -420,6 +433,7 @@
 psdir = @psdir@
 pyexecdir = @pyexecdir@
 pythondir = @pythondir@
+runstatedir = @runstatedir@
 sbindir = @sbindir@
 sharedstatedir = @sharedstatedir@
 srcdir = @srcdir@
@@ -456,7 +470,6 @@
 	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu tests/files/Makefile'; \
 	$(am__cd) $(top_srcdir) && \
 	  $(AUTOMAKE) --gnu tests/files/Makefile
-.PRECIOUS: Makefile
 Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
 	@case '$?' in \
 	  *config.status*) \
@@ -631,6 +644,8 @@
 	mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
 	tags-am uninstall uninstall-am
 
+.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.
diff --git a/tests/icles/Makefile.am b/tests/icles/Makefile.am
index 7b76da9..f479bb7 100644
--- a/tests/icles/Makefile.am
+++ b/tests/icles/Makefile.am
@@ -76,6 +76,14 @@
 test_effect_switch_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_CFLAGS)
 test_effect_switch_LDADD = $(GST_LIBS)
 
+test_overlay_blending_SOURCES = test-overlay-blending.c
+test_overlay_blending_CFLAGS = \
+	$(GST_PLUGINS_BASE_CFLAGS) \
+	$(GST_CFLAGS) $(GIO_CFLAGS)
+test_overlay_blending_LDADD = \
+	$(top_builddir)/gst-libs/gst/video/libgstvideo-$(GST_API_VERSION).la \
+	$(GST_LIBS) $(GIO_LIBS) $(LIBM)
+
 test_scale_SOURCES = test-scale.c
 test_scale_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_CFLAGS)
 test_scale_LDADD = $(GST_LIBS) $(LIBM)
@@ -84,6 +92,10 @@
 test_box_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_CFLAGS)
 test_box_LDADD = $(GST_LIBS) $(LIBM)
 
+test_reverseplay_SOURCES = test-reverseplay.c
+test_reverseplay_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_CFLAGS)
+test_reverseplay_LDADD = $(GST_LIBS) $(LIBM)
+
 noinst_PROGRAMS = $(X_TESTS) $(PANGO_TESTS) \
 	audio-trickplay playbin-text position-formats stress-playbin \
-	test-scale test-box test-effect-switch
+	test-scale test-box test-effect-switch test-overlay-blending test-reverseplay
diff --git a/tests/icles/Makefile.in b/tests/icles/Makefile.in
index ed47283..1ee62da 100644
--- a/tests/icles/Makefile.in
+++ b/tests/icles/Makefile.in
@@ -1,7 +1,7 @@
-# Makefile.in generated by automake 1.14.1 from Makefile.am.
+# Makefile.in generated by automake 1.15 from Makefile.am.
 # @configure_input@
 
-# Copyright (C) 1994-2013 Free Software Foundation, Inc.
+# 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,
@@ -15,7 +15,17 @@
 @SET_MAKE@
 
 VPATH = @srcdir@
-am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)'
+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 \
       ?) ;; \
@@ -84,10 +94,9 @@
 	audio-trickplay$(EXEEXT) playbin-text$(EXEEXT) \
 	position-formats$(EXEEXT) stress-playbin$(EXEEXT) \
 	test-scale$(EXEEXT) test-box$(EXEEXT) \
-	test-effect-switch$(EXEEXT)
+	test-effect-switch$(EXEEXT) test-overlay-blending$(EXEEXT) \
+	test-reverseplay$(EXEEXT)
 subdir = tests/icles
-DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \
-	$(top_srcdir)/depcomp
 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 \
@@ -108,7 +117,6 @@
 	$(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-x11.m4 \
 	$(top_srcdir)/common/m4/gst.m4 \
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
@@ -125,6 +133,7 @@
 	$(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
 mkinstalldirs = $(install_sh) -d
 CONFIG_HEADER = $(top_builddir)/config.h
 CONFIG_CLEAN_FILES =
@@ -227,6 +236,25 @@
 	$(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
 	$(test_effect_switch_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
 	$(LDFLAGS) -o $@
+am_test_overlay_blending_OBJECTS =  \
+	test_overlay_blending-test-overlay-blending.$(OBJEXT)
+test_overlay_blending_OBJECTS = $(am_test_overlay_blending_OBJECTS)
+test_overlay_blending_DEPENDENCIES = $(top_builddir)/gst-libs/gst/video/libgstvideo-$(GST_API_VERSION).la \
+	$(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
+	$(am__DEPENDENCIES_1)
+test_overlay_blending_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
+	$(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
+	$(test_overlay_blending_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
+	$(LDFLAGS) -o $@
+am_test_reverseplay_OBJECTS =  \
+	test_reverseplay-test-reverseplay.$(OBJEXT)
+test_reverseplay_OBJECTS = $(am_test_reverseplay_OBJECTS)
+test_reverseplay_DEPENDENCIES = $(am__DEPENDENCIES_1) \
+	$(am__DEPENDENCIES_1)
+test_reverseplay_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
+	$(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
+	$(test_reverseplay_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) \
+	-o $@
 am_test_scale_OBJECTS = test_scale-test-scale.$(OBJEXT)
 test_scale_OBJECTS = $(am_test_scale_OBJECTS)
 test_scale_DEPENDENCIES = $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1)
@@ -294,6 +322,7 @@
 	$(position_formats_SOURCES) $(stress_playbin_SOURCES) \
 	$(stress_videooverlay_SOURCES) $(test_box_SOURCES) \
 	$(test_colorkey_SOURCES) $(test_effect_switch_SOURCES) \
+	$(test_overlay_blending_SOURCES) $(test_reverseplay_SOURCES) \
 	$(test_scale_SOURCES) $(test_textoverlay_SOURCES) \
 	$(test_videooverlay_SOURCES)
 DIST_SOURCES = $(audio_trickplay_SOURCES) \
@@ -303,7 +332,8 @@
 	$(stress_playbin_SOURCES) \
 	$(am__stress_videooverlay_SOURCES_DIST) $(test_box_SOURCES) \
 	$(am__test_colorkey_SOURCES_DIST) \
-	$(test_effect_switch_SOURCES) $(test_scale_SOURCES) \
+	$(test_effect_switch_SOURCES) $(test_overlay_blending_SOURCES) \
+	$(test_reverseplay_SOURCES) $(test_scale_SOURCES) \
 	$(am__test_textoverlay_SOURCES_DIST) \
 	$(am__test_videooverlay_SOURCES_DIST)
 RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \
@@ -346,6 +376,7 @@
   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`; \
@@ -431,6 +462,8 @@
 GIO_CFLAGS = @GIO_CFLAGS@
 GIO_LDFLAGS = @GIO_LDFLAGS@
 GIO_LIBS = @GIO_LIBS@
+GIO_UNIX_2_0_CFLAGS = @GIO_UNIX_2_0_CFLAGS@
+GIO_UNIX_2_0_LIBS = @GIO_UNIX_2_0_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
@@ -460,6 +493,8 @@
 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_OPTION_CFLAGS = @GST_OPTION_CFLAGS@
 GST_OPTION_CXXFLAGS = @GST_OPTION_CXXFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
@@ -487,7 +522,6 @@
 GTK_X11_CFLAGS = @GTK_X11_CFLAGS@
 GTK_X11_LIBS = @GTK_X11_LIBS@
 HAVE_CDPARANOIA = @HAVE_CDPARANOIA@
-HAVE_X = @HAVE_X@
 HAVE_XSHM = @HAVE_XSHM@
 HAVE_ZLIB = @HAVE_ZLIB@
 HTML_DIR = @HTML_DIR@
@@ -502,6 +536,7 @@
 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@
@@ -591,13 +626,12 @@
 XGETTEXT = @XGETTEXT@
 XGETTEXT_015 = @XGETTEXT_015@
 XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
-XMKMF = @XMKMF@
+XSHM_CFLAGS = @XSHM_CFLAGS@
 XSHM_LIBS = @XSHM_LIBS@
+XVIDEO_CFLAGS = @XVIDEO_CFLAGS@
 XVIDEO_LIBS = @XVIDEO_LIBS@
 X_CFLAGS = @X_CFLAGS@
-X_EXTRA_LIBS = @X_EXTRA_LIBS@
 X_LIBS = @X_LIBS@
-X_PRE_LIBS = @X_PRE_LIBS@
 ZLIB_CFLAGS = @ZLIB_CFLAGS@
 ZLIB_LIBS = @ZLIB_LIBS@
 abs_builddir = @abs_builddir@
@@ -650,6 +684,7 @@
 psdir = @psdir@
 pyexecdir = @pyexecdir@
 pythondir = @pythondir@
+runstatedir = @runstatedir@
 sbindir = @sbindir@
 sharedstatedir = @sharedstatedir@
 srcdir = @srcdir@
@@ -719,12 +754,24 @@
 test_effect_switch_SOURCES = test-effect-switch.c
 test_effect_switch_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_CFLAGS)
 test_effect_switch_LDADD = $(GST_LIBS)
+test_overlay_blending_SOURCES = test-overlay-blending.c
+test_overlay_blending_CFLAGS = \
+	$(GST_PLUGINS_BASE_CFLAGS) \
+	$(GST_CFLAGS) $(GIO_CFLAGS)
+
+test_overlay_blending_LDADD = \
+	$(top_builddir)/gst-libs/gst/video/libgstvideo-$(GST_API_VERSION).la \
+	$(GST_LIBS) $(GIO_LIBS) $(LIBM)
+
 test_scale_SOURCES = test-scale.c
 test_scale_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_CFLAGS)
 test_scale_LDADD = $(GST_LIBS) $(LIBM)
 test_box_SOURCES = test-box.c
 test_box_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_CFLAGS)
 test_box_LDADD = $(GST_LIBS) $(LIBM)
+test_reverseplay_SOURCES = test-reverseplay.c
+test_reverseplay_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_CFLAGS)
+test_reverseplay_LDADD = $(GST_LIBS) $(LIBM)
 all: all-recursive
 
 .SUFFIXES:
@@ -741,7 +788,6 @@
 	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu tests/icles/Makefile'; \
 	$(am__cd) $(top_srcdir) && \
 	  $(AUTOMAKE) --gnu tests/icles/Makefile
-.PRECIOUS: Makefile
 Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
 	@case '$?' in \
 	  *config.status*) \
@@ -809,6 +855,14 @@
 	@rm -f test-effect-switch$(EXEEXT)
 	$(AM_V_CCLD)$(test_effect_switch_LINK) $(test_effect_switch_OBJECTS) $(test_effect_switch_LDADD) $(LIBS)
 
+test-overlay-blending$(EXEEXT): $(test_overlay_blending_OBJECTS) $(test_overlay_blending_DEPENDENCIES) $(EXTRA_test_overlay_blending_DEPENDENCIES) 
+	@rm -f test-overlay-blending$(EXEEXT)
+	$(AM_V_CCLD)$(test_overlay_blending_LINK) $(test_overlay_blending_OBJECTS) $(test_overlay_blending_LDADD) $(LIBS)
+
+test-reverseplay$(EXEEXT): $(test_reverseplay_OBJECTS) $(test_reverseplay_DEPENDENCIES) $(EXTRA_test_reverseplay_DEPENDENCIES) 
+	@rm -f test-reverseplay$(EXEEXT)
+	$(AM_V_CCLD)$(test_reverseplay_LINK) $(test_reverseplay_OBJECTS) $(test_reverseplay_LDADD) $(LIBS)
+
 test-scale$(EXEEXT): $(test_scale_OBJECTS) $(test_scale_DEPENDENCIES) $(EXTRA_test_scale_DEPENDENCIES) 
 	@rm -f test-scale$(EXEEXT)
 	$(AM_V_CCLD)$(test_scale_LINK) $(test_scale_OBJECTS) $(test_scale_LDADD) $(LIBS)
@@ -837,6 +891,8 @@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_box-test-box.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_colorkey-test-colorkey.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_effect_switch-test-effect-switch.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_overlay_blending-test-overlay-blending.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_reverseplay-test-reverseplay.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_scale-test-scale.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_textoverlay-test-textoverlay.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_videooverlay-test-videooverlay.Po@am__quote@
@@ -1005,6 +1061,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) $(test_effect_switch_CFLAGS) $(CFLAGS) -c -o test_effect_switch-test-effect-switch.obj `if test -f 'test-effect-switch.c'; then $(CYGPATH_W) 'test-effect-switch.c'; else $(CYGPATH_W) '$(srcdir)/test-effect-switch.c'; fi`
 
+test_overlay_blending-test-overlay-blending.o: test-overlay-blending.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_overlay_blending_CFLAGS) $(CFLAGS) -MT test_overlay_blending-test-overlay-blending.o -MD -MP -MF $(DEPDIR)/test_overlay_blending-test-overlay-blending.Tpo -c -o test_overlay_blending-test-overlay-blending.o `test -f 'test-overlay-blending.c' || echo '$(srcdir)/'`test-overlay-blending.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/test_overlay_blending-test-overlay-blending.Tpo $(DEPDIR)/test_overlay_blending-test-overlay-blending.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='test-overlay-blending.c' object='test_overlay_blending-test-overlay-blending.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) $(test_overlay_blending_CFLAGS) $(CFLAGS) -c -o test_overlay_blending-test-overlay-blending.o `test -f 'test-overlay-blending.c' || echo '$(srcdir)/'`test-overlay-blending.c
+
+test_overlay_blending-test-overlay-blending.obj: test-overlay-blending.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_overlay_blending_CFLAGS) $(CFLAGS) -MT test_overlay_blending-test-overlay-blending.obj -MD -MP -MF $(DEPDIR)/test_overlay_blending-test-overlay-blending.Tpo -c -o test_overlay_blending-test-overlay-blending.obj `if test -f 'test-overlay-blending.c'; then $(CYGPATH_W) 'test-overlay-blending.c'; else $(CYGPATH_W) '$(srcdir)/test-overlay-blending.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/test_overlay_blending-test-overlay-blending.Tpo $(DEPDIR)/test_overlay_blending-test-overlay-blending.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='test-overlay-blending.c' object='test_overlay_blending-test-overlay-blending.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) $(test_overlay_blending_CFLAGS) $(CFLAGS) -c -o test_overlay_blending-test-overlay-blending.obj `if test -f 'test-overlay-blending.c'; then $(CYGPATH_W) 'test-overlay-blending.c'; else $(CYGPATH_W) '$(srcdir)/test-overlay-blending.c'; fi`
+
+test_reverseplay-test-reverseplay.o: test-reverseplay.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_reverseplay_CFLAGS) $(CFLAGS) -MT test_reverseplay-test-reverseplay.o -MD -MP -MF $(DEPDIR)/test_reverseplay-test-reverseplay.Tpo -c -o test_reverseplay-test-reverseplay.o `test -f 'test-reverseplay.c' || echo '$(srcdir)/'`test-reverseplay.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/test_reverseplay-test-reverseplay.Tpo $(DEPDIR)/test_reverseplay-test-reverseplay.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='test-reverseplay.c' object='test_reverseplay-test-reverseplay.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) $(test_reverseplay_CFLAGS) $(CFLAGS) -c -o test_reverseplay-test-reverseplay.o `test -f 'test-reverseplay.c' || echo '$(srcdir)/'`test-reverseplay.c
+
+test_reverseplay-test-reverseplay.obj: test-reverseplay.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_reverseplay_CFLAGS) $(CFLAGS) -MT test_reverseplay-test-reverseplay.obj -MD -MP -MF $(DEPDIR)/test_reverseplay-test-reverseplay.Tpo -c -o test_reverseplay-test-reverseplay.obj `if test -f 'test-reverseplay.c'; then $(CYGPATH_W) 'test-reverseplay.c'; else $(CYGPATH_W) '$(srcdir)/test-reverseplay.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/test_reverseplay-test-reverseplay.Tpo $(DEPDIR)/test_reverseplay-test-reverseplay.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='test-reverseplay.c' object='test_reverseplay-test-reverseplay.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) $(test_reverseplay_CFLAGS) $(CFLAGS) -c -o test_reverseplay-test-reverseplay.obj `if test -f 'test-reverseplay.c'; then $(CYGPATH_W) 'test-reverseplay.c'; else $(CYGPATH_W) '$(srcdir)/test-reverseplay.c'; fi`
+
 test_scale-test-scale.o: test-scale.c
 @am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_scale_CFLAGS) $(CFLAGS) -MT test_scale-test-scale.o -MD -MP -MF $(DEPDIR)/test_scale-test-scale.Tpo -c -o test_scale-test-scale.o `test -f 'test-scale.c' || echo '$(srcdir)/'`test-scale.c
 @am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/test_scale-test-scale.Tpo $(DEPDIR)/test_scale-test-scale.Po
@@ -1330,6 +1414,8 @@
 	mostlyclean-libtool pdf pdf-am ps ps-am tags tags-am uninstall \
 	uninstall-am
 
+.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.
diff --git a/tests/icles/playback/Makefile.in b/tests/icles/playback/Makefile.in
index da25f29..5d98a22 100644
--- a/tests/icles/playback/Makefile.in
+++ b/tests/icles/playback/Makefile.in
@@ -1,7 +1,7 @@
-# Makefile.in generated by automake 1.14.1 from Makefile.am.
+# Makefile.in generated by automake 1.15 from Makefile.am.
 # @configure_input@
 
-# Copyright (C) 1994-2013 Free Software Foundation, Inc.
+# 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,
@@ -15,7 +15,17 @@
 @SET_MAKE@
 
 VPATH = @srcdir@
-am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)'
+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 \
       ?) ;; \
@@ -83,8 +93,6 @@
 	test3$(EXEEXT) test4$(EXEEXT) test5$(EXEEXT) test6$(EXEEXT) \
 	test7$(EXEEXT)
 subdir = tests/icles/playback
-DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \
-	$(top_srcdir)/depcomp
 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 \
@@ -105,7 +113,6 @@
 	$(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-x11.m4 \
 	$(top_srcdir)/common/m4/gst.m4 \
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
@@ -122,6 +129,7 @@
 	$(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
 mkinstalldirs = $(install_sh) -d
 CONFIG_HEADER = $(top_builddir)/config.h
 CONFIG_CLEAN_FILES =
@@ -242,6 +250,7 @@
   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@
@@ -302,6 +311,8 @@
 GIO_CFLAGS = @GIO_CFLAGS@
 GIO_LDFLAGS = @GIO_LDFLAGS@
 GIO_LIBS = @GIO_LIBS@
+GIO_UNIX_2_0_CFLAGS = @GIO_UNIX_2_0_CFLAGS@
+GIO_UNIX_2_0_LIBS = @GIO_UNIX_2_0_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
@@ -331,6 +342,8 @@
 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_OPTION_CFLAGS = @GST_OPTION_CFLAGS@
 GST_OPTION_CXXFLAGS = @GST_OPTION_CXXFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
@@ -358,7 +371,6 @@
 GTK_X11_CFLAGS = @GTK_X11_CFLAGS@
 GTK_X11_LIBS = @GTK_X11_LIBS@
 HAVE_CDPARANOIA = @HAVE_CDPARANOIA@
-HAVE_X = @HAVE_X@
 HAVE_XSHM = @HAVE_XSHM@
 HAVE_ZLIB = @HAVE_ZLIB@
 HTML_DIR = @HTML_DIR@
@@ -373,6 +385,7 @@
 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@
@@ -462,13 +475,12 @@
 XGETTEXT = @XGETTEXT@
 XGETTEXT_015 = @XGETTEXT_015@
 XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
-XMKMF = @XMKMF@
+XSHM_CFLAGS = @XSHM_CFLAGS@
 XSHM_LIBS = @XSHM_LIBS@
+XVIDEO_CFLAGS = @XVIDEO_CFLAGS@
 XVIDEO_LIBS = @XVIDEO_LIBS@
 X_CFLAGS = @X_CFLAGS@
-X_EXTRA_LIBS = @X_EXTRA_LIBS@
 X_LIBS = @X_LIBS@
-X_PRE_LIBS = @X_PRE_LIBS@
 ZLIB_CFLAGS = @ZLIB_CFLAGS@
 ZLIB_LIBS = @ZLIB_LIBS@
 abs_builddir = @abs_builddir@
@@ -521,6 +533,7 @@
 psdir = @psdir@
 pyexecdir = @pyexecdir@
 pythondir = @pythondir@
+runstatedir = @runstatedir@
 sbindir = @sbindir@
 sharedstatedir = @sharedstatedir@
 srcdir = @srcdir@
@@ -565,7 +578,6 @@
 	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu tests/icles/playback/Makefile'; \
 	$(am__cd) $(top_srcdir) && \
 	  $(AUTOMAKE) --gnu tests/icles/playback/Makefile
-.PRECIOUS: Makefile
 Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
 	@case '$?' in \
 	  *config.status*) \
@@ -985,6 +997,8 @@
 	mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
 	tags tags-am uninstall uninstall-am
 
+.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.
diff --git a/tests/icles/playback/decodetest.c b/tests/icles/playback/decodetest.c
index 7511fc5..c471dbf 100644
--- a/tests/icles/playback/decodetest.c
+++ b/tests/icles/playback/decodetest.c
@@ -71,8 +71,7 @@
 }
 
 static void
-new_decoded_pad_cb (GstElement * decodebin, GstPad * pad, gboolean last,
-    GstElement * pipeline)
+pad_added_cb (GstElement * decodebin, GstPad * pad, GstElement * pipeline)
 {
   GstPadLinkReturn ret;
   GstElement *fakesink;
@@ -149,8 +148,7 @@
 
   gst_element_link_pads (source, "src", decoder, "sink");
 
-  g_signal_connect (decoder, "new-decoded-pad",
-      G_CALLBACK (new_decoded_pad_cb), pipeline);
+  g_signal_connect (decoder, "pad-added", G_CALLBACK (pad_added_cb), pipeline);
 
   res = gst_element_set_state (pipeline, GST_STATE_PLAYING);
   if (res == GST_STATE_CHANGE_FAILURE) {
diff --git a/tests/icles/playback/test.c b/tests/icles/playback/test.c
index bbb28af..6a8026f 100644
--- a/tests/icles/playback/test.c
+++ b/tests/icles/playback/test.c
@@ -37,6 +37,7 @@
   element = gst_bin_new ("vbin");
   conv = gst_element_factory_make ("videoconvert", "conv");
   sink = gst_element_factory_make (DEFAULT_VIDEOSINK, "sink");
+  g_assert (sink);
 
   gst_bin_add (GST_BIN (element), conv);
   gst_bin_add (GST_BIN (element), sink);
@@ -60,6 +61,7 @@
   element = gst_bin_new ("abin");
   conv = gst_element_factory_make ("audioconvert", "conv");
   sink = gst_element_factory_make (DEFAULT_AUDIOSINK, "sink");
+  g_assert (sink);
 
   gst_bin_add (GST_BIN (element), conv);
   gst_bin_add (GST_BIN (element), sink);
@@ -73,7 +75,7 @@
 }
 
 static void
-cb_newpad (GstElement * decodebin, GstPad * pad, gboolean last, gpointer data)
+pad_added_cb (GstElement * decodebin, GstPad * pad, gpointer data)
 {
   GstCaps *caps;
   GstStructure *str;
@@ -137,11 +139,18 @@
   }
 }
 
+static void
+error_eos_cb (GstBus * bus, GstMessage * msg, GMainLoop * main_loop)
+{
+  g_main_loop_quit (main_loop);
+}
+
 gint
 main (gint argc, gchar * argv[])
 {
   GstElement *pipeline, *filesrc, *decodebin;
   GstStateChangeReturn res;
+  GstBus *bus;
 
   gst_init (&argc, &argv);
 
@@ -152,8 +161,15 @@
   decodebin = gst_element_factory_make ("decodebin", "decodebin");
   g_assert (decodebin);
 
-  g_signal_connect (G_OBJECT (decodebin), "new-decoded-pad",
-      G_CALLBACK (cb_newpad), pipeline);
+  loop = g_main_loop_new (NULL, TRUE);
+  bus = gst_pipeline_get_bus (GST_PIPELINE (pipeline));
+  gst_bus_add_signal_watch (bus);
+
+  g_signal_connect (bus, "message::eos", G_CALLBACK (error_eos_cb), loop);
+  g_signal_connect (bus, "message::error", G_CALLBACK (error_eos_cb), loop);
+
+  g_signal_connect (G_OBJECT (decodebin), "pad-added",
+      G_CALLBACK (pad_added_cb), pipeline);
 
   gst_bin_add_many (GST_BIN (pipeline), filesrc, decodebin, NULL);
   gst_element_link (filesrc, decodebin);
@@ -162,7 +178,12 @@
     g_print ("usage: %s <uri>\n", argv[0]);
     exit (-1);
   }
-  g_object_set (G_OBJECT (filesrc), "location", argv[1], NULL);
+
+  if (!g_str_has_prefix (argv[1], "file://")) {
+    g_object_set (G_OBJECT (filesrc), "location", argv[1], NULL);
+  } else {
+    g_object_set (G_OBJECT (filesrc), "location", argv[1] + 7, NULL);
+  }
 
   /* set to paused, decodebin will autoplug and signal new_pad callbacks */
   res = gst_element_set_state (pipeline, GST_STATE_PAUSED);
@@ -186,7 +207,6 @@
   }
 
   /* go in the mainloop now */
-  loop = g_main_loop_new (NULL, TRUE);
   g_main_loop_run (loop);
 
   return 0;
diff --git a/tests/icles/playback/test2.c b/tests/icles/playback/test2.c
index 28f62e5..5cf0d7e 100644
--- a/tests/icles/playback/test2.c
+++ b/tests/icles/playback/test2.c
@@ -18,11 +18,20 @@
  */
 #include <gst/gst.h>
 
+static GMainLoop *loop;
+
+static void
+error_eos_cb (GstBus * bus, GstMessage * msg, GMainLoop * main_loop)
+{
+  g_main_loop_quit (main_loop);
+}
+
 gint
 main (gint argc, gchar * argv[])
 {
   GstElement *player;
   GstStateChangeReturn res;
+  GstBus *bus;
 
   gst_init (&argc, &argv);
 
@@ -31,13 +40,20 @@
 
   g_object_set (G_OBJECT (player), "uri", argv[1], NULL);
 
+  loop = g_main_loop_new (NULL, TRUE);
+  bus = gst_pipeline_get_bus (GST_PIPELINE (player));
+  gst_bus_add_signal_watch (bus);
+
+  g_signal_connect (bus, "message::eos", G_CALLBACK (error_eos_cb), loop);
+  g_signal_connect (bus, "message::error", G_CALLBACK (error_eos_cb), loop);
+
   res = gst_element_set_state (player, GST_STATE_PLAYING);
-  if (res != GST_STATE_CHANGE_SUCCESS) {
+  if (res == GST_STATE_CHANGE_FAILURE) {
     g_print ("could not play\n");
     return -1;
   }
 
-  g_main_loop_run (g_main_loop_new (NULL, TRUE));
+  g_main_loop_run (loop);
 
   return 0;
 }
diff --git a/tests/icles/playback/test4.c b/tests/icles/playback/test4.c
index 8fdeb3f..d036d7f 100644
--- a/tests/icles/playback/test4.c
+++ b/tests/icles/playback/test4.c
@@ -28,11 +28,20 @@
 
 #include <gst/gst.h>
 
+static GMainLoop *loop;
+
+static void
+error_eos_cb (GstBus * bus, GstMessage * msg, GMainLoop * main_loop)
+{
+  g_main_loop_quit (main_loop);
+}
+
 gint
 main (gint argc, gchar * argv[])
 {
   GstElement *player;
   GstStateChangeReturn res;
+  GstBus *bus;
 
   gst_init (&argc, &argv);
 
@@ -44,11 +53,18 @@
     exit (-1);
   }
 
+  loop = g_main_loop_new (NULL, TRUE);
+  bus = gst_pipeline_get_bus (GST_PIPELINE (player));
+  gst_bus_add_signal_watch (bus);
+
+  g_signal_connect (bus, "message::eos", G_CALLBACK (error_eos_cb), loop);
+  g_signal_connect (bus, "message::error", G_CALLBACK (error_eos_cb), loop);
+
   g_object_set (G_OBJECT (player), "uri", argv[1], NULL);
 
   g_print ("play...\n");
   res = gst_element_set_state (player, GST_STATE_PLAYING);
-  if (res != GST_STATE_CHANGE_SUCCESS) {
+  if (res == GST_STATE_CHANGE_FAILURE) {
     g_print ("could not play\n");
     return -1;
   }
@@ -58,8 +74,8 @@
 
   g_print ("pause...\n");
   res = gst_element_set_state (player, GST_STATE_PAUSED);
-  if (res != GST_STATE_CHANGE_SUCCESS) {
-    g_print ("could not play\n");
+  if (res == GST_STATE_CHANGE_FAILURE) {
+    g_print ("could not pause\n");
     return -1;
   }
 
@@ -68,7 +84,7 @@
 
   g_print ("play...\n");
   res = gst_element_set_state (player, GST_STATE_PLAYING);
-  if (res != GST_STATE_CHANGE_SUCCESS) {
+  if (res == GST_STATE_CHANGE_FAILURE) {
     g_print ("could not play\n");
     return -1;
   }
@@ -88,12 +104,12 @@
 
   g_print ("play...\n");
   res = gst_element_set_state (player, GST_STATE_PLAYING);
-  if (res != GST_STATE_CHANGE_SUCCESS) {
+  if (res == GST_STATE_CHANGE_FAILURE) {
     g_print ("could not play\n");
     return -1;
   }
 
-  g_main_loop_run (g_main_loop_new (NULL, TRUE));
+  g_main_loop_run (loop);
 
   return 0;
 }
diff --git a/tests/icles/playback/test5.c b/tests/icles/playback/test5.c
index 3be15a1..b841116 100644
--- a/tests/icles/playback/test5.c
+++ b/tests/icles/playback/test5.c
@@ -30,7 +30,7 @@
 static GMainLoop *loop;
 
 static void
-new_pad (GstElement * element, GstPad * pad, gboolean last, GstElement * sink)
+pad_added_cb (GstElement * element, GstPad * pad, GstElement * sink)
 {
   g_print ("New pad...\n");
 }
@@ -108,8 +108,8 @@
   decodebin = gst_element_factory_make ("decodebin", "decodebin");
   g_assert (decodebin);
 
-  g_signal_connect (G_OBJECT (decodebin), "new-decoded-pad",
-      G_CALLBACK (new_pad), NULL);
+  g_signal_connect (G_OBJECT (decodebin), "pad-added",
+      G_CALLBACK (pad_added_cb), NULL);
   g_signal_connect (G_OBJECT (decodebin), "no-more-pads",
       G_CALLBACK (no_more_pads), NULL);
 
@@ -120,7 +120,12 @@
     g_print ("usage: %s <uri>\n", argv[0]);
     exit (-1);
   }
-  g_object_set (G_OBJECT (filesrc), "location", argv[1], NULL);
+
+  if (!g_str_has_prefix (argv[1], "file://")) {
+    g_object_set (G_OBJECT (filesrc), "location", argv[1], NULL);
+  } else {
+    g_object_set (G_OBJECT (filesrc), "location", argv[1] + 7, NULL);
+  }
 
   /* event based programming approach */
   loop = g_main_loop_new (NULL, TRUE);
diff --git a/tests/icles/stress-videooverlay.c b/tests/icles/stress-videooverlay.c
index 433aca2..c7e127c 100644
--- a/tests/icles/stress-videooverlay.c
+++ b/tests/icles/stress-videooverlay.c
@@ -242,5 +242,7 @@
 
   g_main_loop_unref (loop);
 
+  gst_object_unref (bus);
+
   return 0;
 }
diff --git a/tests/icles/test-colorkey.c b/tests/icles/test-colorkey.c
index 2e6c782..62b041d 100644
--- a/tests/icles/test-colorkey.c
+++ b/tests/icles/test-colorkey.c
@@ -23,11 +23,6 @@
 #include "config.h"
 #endif
 
-/* FIXME 0.11: suppress warnings for deprecated API such as GStaticRecMutex
- * with newer GTK versions (>= 3.3.0) */
-#define GLIB_DISABLE_DEPRECATION_WARNINGS
-#define GDK_DISABLE_DEPRECATION_WARNINGS
-
 #include <stdlib.h>
 #include <string.h>
 
@@ -41,7 +36,7 @@
 static GtkWidget *video_window = NULL;
 static GstElement *sink = NULL;
 static gulong embed_xid = 0;
-static GdkColor trans_color;
+static GdkRGBA trans_color;
 static gboolean trans_color_set = FALSE;
 
 static void
@@ -62,7 +57,7 @@
     guint x, y;
     guint h = allocation.height * 0.75;
 
-    gdk_cairo_set_source_color (cr, &trans_color);
+    gdk_cairo_set_source_rgba (cr, &trans_color);
     cairo_rectangle (cr, 0, 0, allocation.width, h);
     cairo_fill (cr);
 
@@ -242,7 +237,6 @@
   g_signal_connect (G_OBJECT (video_window), "draw",
       G_CALLBACK (draw_cb), NULL);
   g_signal_connect (video_window, "realize", G_CALLBACK (realize_cb), NULL);
-  gtk_widget_set_double_buffered (video_window, FALSE);
   gtk_container_add (GTK_CONTAINER (window), video_window);
 
   /* show the gui and play */
diff --git a/tests/icles/test-overlay-blending.c b/tests/icles/test-overlay-blending.c
new file mode 100644
index 0000000..d79b2b9
--- /dev/null
+++ b/tests/icles/test-overlay-blending.c
@@ -0,0 +1,288 @@
+/* GStreamer video overlay composition blending test app
+ * Copyright (C) 2014 Tim-Philipp Müller <tim 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 <gio/gio.h>
+#include <gst/gst.h>
+#include <gst/video/video.h>
+
+#include <math.h>
+
+#define VIDEO_WIDTH 720
+#define VIDEO_HEIGHT 480
+#define VIDEO_FPS 50
+
+/* GdkPixbuf RGBA C-Source image dump from gdk-pixbuf-csource --raw,
+ * gzipped and then base64 encoded */
+const gchar gzipped_pixdata_base64[] =
+    "H4sICPX/Z1QAA2xvZ28ucGl4AO2dsZHrNhCG+ewK2II64ClyrhmnTtSBh4kLUOLQAUuwEhSgFtiA"
+    "A7agwA2wBT5AXJ5w4P5LgKLEO97ezDf2SCAIAftjFwuQ7/c///ojy/77+8eP7Jcs+/WfLMv+t/zW"
+    "dV32pSmK3HK6sXZbFOXV9PZfWipLbWksHdHQZxVpZP+Ee7u62/d7rt0fivIqimJnOX+w/zhauq68"
+    "aWjevfdUR1h3vXq/KMqzufueFN1J1FE+stf8KfCzobZ3q/ePojyT3v8gDSyB09GFND7g/N014rpl"
+    "41xF+Wz0/i817nwFjepP+Rb0PnDwOUOehePyQq1eurlrSkXZOkVx7OblbGK43upf+zcqyldhOT22"
+    "5GvV9ynKXIriQDpKye242Ldcve2KskX6deaRWVeebnpdu32Koryc4t/iaKksmm9Vvg3W3neWk+Vs"
+    "qS2tpSOu9NmZtLG4f7R15paS7jXct1q7XxTl2ZDd157dp1A/6q9I+1Wg+QH1g8pmcb7M0szUHseV"
+    "/KTTtJg39XyudH/NASmbhfzOUtqTNHmhew1cglhT9ad8O16kv7m4eFT3/pVNQ77IX8shLgW/RnsW"
+    "Li7V5y4UJaDo9wnOT9Sjq1fzn4oSQXHft4tZ00Vpr5jI3yiKwmO1sy/63GZKzNpS+dVyLsaYneVk"
+    "Ud+rbIqi32M/kC7DtaXzn6vt9Vm95ZbS0lg64rx2nynKdyHQ3oC+A06ZxdtbkztWundpqS1fKo5j"
+    "9OfQ8+jKJNbW987eye47QGO5WE6u/BPakJP2rt4927X7JhanNaBBzQUpEMbmU2hJk66O2ftt7lrS"
+    "f8vc4yl+0P7llspyWapOl3th9Hdde4yVz4m17eMD2pP8ZBXjI0l3J7oG1Rf1DlH7dyBOpKuB2+dB"
+    "2ZzKXS3ugw9+lnKZB49oH2bL1owGH9K4vX5P7Yg+0+O1/Uj/XSRm8ep9Ws6LclrRfe+N1+xYIxjz"
+    "49Jrh6D+m68inSypPeQja7pXRZp3/z1P6M7XM+xX+7eznElHc3E63Hv2xWmoo89H4yLEnpDg+orq"
+    "DsnJFq7oWqYtLhd7sbTg3i3dL2VO2Xlt5Oo7DzY1Uc8VtOng9eMZtP0ctpnmJa787Tcm/jbUtmHc"
+    "xfmG+p0bwz0R9t1hYr33WTgj/ZEfe1R7HfnJ3NNCjIbKoP8f1SBn2w2Nq3htYI9o7uBopnRI9nmO"
+    "rM/ZveijhWulee+DFrx2xZSHe0Gmn99ix5sd96A+1E97w88pB8bX1ABubfYK4DxG+msYPbWWksqU"
+    "gu5a0u/O68PQ3t99hWF8kW9vC2gQaWTyWtD2sB5UVzOhGeRLJR2y/pB0k9RHgCqxXaP2kP5Qn9TU"
+    "n+He7rumwO/j5oSr0FanQZf/jIp33+650qXXjSj2FP2+y58AbYVrPs5PjuyOxsTvq5H+yYb8Mofg"
+    "u8rgmKb2vq/C+lPtMLj2KOjBbyPSqTS3N9T2Y/D5SbAtdt1r4uapoZ9ife+VroHzlQn2ZCf0dw7K"
+    "7rk2Cn2VMo6z15pP1KPzt5N72LT+4/Q36hv7d+R8INN/oR2zdunZEcyvANuEPj3SNlkNmvHcIY6x"
+    "4eeHWbkiSfugvBT3jeLYifKdCdaHggbC+Q7Vi+YOriznW5PG8BENAj3G5FYQTsslWvcxuqqABke6"
+    "oXzoqGyEfcC1kunnXRRvcfOm2N9mOo4szX1df/DnB4P9BbsOMmANNXf8F9TgaB1p5LlppBehfr+/"
+    "0PiwuhJ+Y+hbpXpbGsNbLtTcc66LPzP31u+rDznPesJPDnnS5Ny2oMGRnSdoEOVERjpE2qTvTmAc"
+    "pGuQ7Yg5EyP7QDY3gjQozREzNIhiNXTv1Ni1BeOCyvvxOJqzUJtzUD6MWaX1wKd4P9HbgmfdhFwL"
+    "p0FOr9x6EOngmtKHpt8TGNUxcQ2yTXGeNLL/lHz4Qxo09/0tNN8gH4zainIcyK7ZuF7Q4D6iDal1"
+    "1kE5ZD+bfD+DsB48BuXy7L7//mEvgulrKWd3iyUi7ZPzS+J6C1wz+XyFkfMWB0D02tHrl2FfMDYX"
+    "yfUvitXg2QvBrlHMyM4JEW3oqC+5/orymwbEUWtr5ck65PKidVCGy4leh71AZgwlv9JN6VDQsZSP"
+    "QddM+iUw7nM5BHWn7jWKbRf6VsrJcjEFtGug2dr7HvntOYQa5OanTT8jY//2tMcXauxCuVBOo+9n"
+    "YYRxnNIhvN7g2AnGI+iamD4w6bnwqN810QctaUM6V8LlDJFPk9a7qfllzmdVEW2Yg18vmkc/xTrw"
+    "yTqU9uDD/fgK+b9EHcK1nTDGcF0Hrok6Gyu00c33KBZlifztYY6fPbcG2poUqwl2LeWXuXv4OVEp"
+    "95XUX/6Yoj5bWx8v0F8OfN3g72rS3TFWewk6RHuHXOwkjoXhfVnsOcdFc5xUJ/Jto7gKlEX5xUlN"
+    "x/T/RNvFvhA0GDXnCfedPY9+ZUhjvu4Wfy5P0CHKoXGaEMci1TYj7sfqJbI+uBfwSNuFelPPXkp+"
+    "k823BGXQWuGh3AmYRzf9zpKMOfvyYB8uEiuC8ZXO00zuZ020G83rs8Y/xU8gmwcaRPVKa+uk/LLh"
+    "8y1NUEbKfc+aww3eP/xS73xIBez5XbKPzwuW3H4h6Ec3j6E9ba6PkR9MGgvBNmPbLeXa58TfKRqM"
+    "brtJPJuTom/vGm4dwJ2lQXmsWe/cM4l7mFtBOCcjPR+B9iMGW4LnGWLHa4bdzNqbj6wj2QYEXYX+"
+    "JPWMKlcOvpdEaIcUu0blUA1eX7Bnbx7os02/N4iLRSMY7QuacWwSc24YjhXQgxQ/sT4s0QbQs2kO"
+    "dl1o+hiYs09p/8x/7kPaqw/3GZGfkPbmka9C5wiQ30RzJdp3R2cTh3MKozk6ta1bgfYGUzU42sMX"
+    "xsP1q4ttuLxfci7Ps18/RwfPI6f2x4QOG087/m8arRlN2vN9yP+G5yiTcpETbUBxCpo7kGZzof3D"
+    "OwGG56ca7/NwDkdrwc1qUNiXT4Hrx9hn1WLOj0n7wDF7Vcka9Gw39lyL9Gz51P78ebAv1G9BfWiv"
+    "A2kQ+mKhzbP2aEz8s8DsmWGDfbxjc/+OENDfib4b3uNUejmZqGd8g/5EY3k1CWt2cz9nONR380XM"
+    "+HPvHlnivU/ce19aA96FA/TsP2984q6jcpeg/f75kTyoxwfFiSW6ZkJLHDHvt8np93Hv3xliCLT2"
+    "OIEx3OTeILMf2EztCYKYNcYG2fMQivKdYbQUpY1s/M6ZTcbpivJMMv5Zpdhn7mdpV1GUO1l/NjTU"
+    "Usx7Z8Iz3ZuM0xXlFWT8s4CsDkmzJZPD0ThUUWaSye8THZ6RqOj/uf2L1f79T0XZCpn8vJJ0Pkb9"
+    "n6IsCOVoBp/HvS+moe83+T4dRVEUZRmyn2F9swl9yAAA";
+
+static GstBuffer *logo_buf;
+
+static GMainLoop *main_loop;
+static gint count;
+
+static GstBuffer *
+create_overlay_buffer (void)
+{
+  GZlibDecompressor *decompress;
+  GConverterResult decomp_res;
+  guchar *gzipped_pixdata, *pixdata;
+  gsize gzipped_size, bytes_read, pixdata_size;
+  GstBuffer *logo_pixels;
+  guint w, h, stride;
+
+  gzipped_pixdata = g_base64_decode (gzipped_pixdata_base64, &gzipped_size);
+  g_assert (gzipped_pixdata != NULL);
+
+  pixdata = g_malloc (64 * 1024);
+
+  decompress = g_zlib_decompressor_new (G_ZLIB_COMPRESSOR_FORMAT_GZIP);
+  decomp_res = g_converter_convert (G_CONVERTER (decompress),
+      gzipped_pixdata, gzipped_size, pixdata, 64 * 1024,
+      G_CONVERTER_INPUT_AT_END, &bytes_read, &pixdata_size, NULL);
+  g_assert (decomp_res == G_CONVERTER_FINISHED);
+  g_assert (bytes_read == gzipped_size);
+  g_free (gzipped_pixdata);
+  g_object_unref (decompress);
+
+  /* 0: Pixbuf magic (0x47646b50) */
+  g_assert (GST_READ_UINT32_BE (pixdata) == 0x47646b50);
+
+  /* 4: length incl. header */
+  /* 8: pixdata_type */
+  /* 12: rowstride (900) */
+  stride = GST_READ_UINT32_BE (pixdata + 12);
+  /* 16: width (225) */
+  w = GST_READ_UINT32_BE (pixdata + 16);
+  /* 20: height (57) */
+  h = GST_READ_UINT32_BE (pixdata + 20);
+  /* 24: pixel_data */
+  GST_LOG ("%dx%d @ %d", w, h, stride);
+  /* we assume that the last line also has padding at the end */
+  g_assert (pixdata_size - 24 >= h * stride);
+
+  logo_pixels = gst_buffer_new_and_alloc (h * stride);
+  gst_buffer_fill (logo_pixels, 0, pixdata + 24, h * stride);
+  gst_buffer_add_video_meta (logo_pixels, GST_VIDEO_FRAME_FLAG_NONE,
+      GST_VIDEO_OVERLAY_COMPOSITION_FORMAT_RGB, w, h);
+
+  g_free (pixdata);
+
+  return logo_pixels;
+}
+
+static gboolean
+bus_cb (GstBus * bus, GstMessage * msg, gpointer user_data)
+{
+  GMainLoop *loop = user_data;
+
+  switch (GST_MESSAGE_TYPE (msg)) {
+    case GST_MESSAGE_ERROR:{
+      GError *err = NULL;
+      gchar *dbg;
+
+      gst_message_parse_error (msg, &err, &dbg);
+      gst_object_default_error (msg->src, err, dbg);
+      g_error_free (err);
+      g_free (dbg);
+      g_main_loop_quit (loop);
+      break;
+    }
+    default:
+      break;
+  }
+  return TRUE;
+}
+
+#define SPEED_SCALE_FACTOR (VIDEO_FPS * 4)
+
+/* nicked from videotestsrc's ball pattern renderer */
+static void
+calculate_position (gint * x, gint * y, guint logo_w, guint logo_h, guint n)
+{
+  guint r_x = logo_w / 2;
+  guint r_y = logo_h / 2;
+  guint w = VIDEO_WIDTH + logo_w;
+  guint h = VIDEO_HEIGHT + logo_h;
+
+  *x = r_x + (0.5 + 0.5 * sin (2 * G_PI * n / SPEED_SCALE_FACTOR))
+      * (w - 2 * r_x);
+  *y = r_y + (0.5 + 0.5 * sin (2 * G_PI * sqrt (2) * n / SPEED_SCALE_FACTOR))
+      * (h - 2 * r_y);
+
+  *x -= logo_w;
+  *y -= logo_h;
+}
+
+static GstPadProbeReturn
+buffer_cb (GstPad * pad, GstPadProbeInfo * info, gpointer user_data)
+{
+  GstVideoOverlayRectangle *rect;
+  GstVideoOverlayComposition *comp;
+  GstVideoFrame frame;
+  GstVideoMeta *vmeta;
+  GstVideoInfo vinfo;
+  GstCaps *caps;
+  gint x, y;
+
+  caps = gst_pad_get_current_caps (pad);
+  gst_video_info_from_caps (&vinfo, caps);
+  gst_caps_unref (caps);
+
+  info->data = gst_buffer_make_writable (info->data);
+
+  vmeta = gst_buffer_get_video_meta (logo_buf);
+
+  calculate_position (&x, &y, vmeta->width, vmeta->height, ++count);
+
+  GST_LOG ("%3d, %3d", x, y);
+
+  rect = gst_video_overlay_rectangle_new_raw (logo_buf, x, y,
+      vmeta->width, vmeta->height, GST_VIDEO_OVERLAY_FORMAT_FLAG_NONE);
+  comp = gst_video_overlay_composition_new (rect);
+  gst_video_overlay_rectangle_unref (rect);
+
+  gst_video_frame_map (&frame, &vinfo, info->data, GST_MAP_READWRITE);
+
+  if (!gst_video_overlay_composition_blend (comp, &frame))
+    g_warning ("Error blending overlay at position (%d,%d)", x, y);
+
+  gst_video_frame_unmap (&frame);
+
+  gst_video_overlay_composition_unref (comp);
+
+  return GST_PAD_PROBE_OK;
+}
+
+int
+main (int argc, char **argv)
+{
+  GOptionEntry options[] = {
+    {NULL}
+  };
+  GOptionContext *ctx;
+  GError *err = NULL;
+  GstElement *src, *q, *capsfilter, *sink;
+  GstElement *pipeline;
+  GstPad *src_pad;
+  GstCaps *filter_caps;
+
+  ctx = g_option_context_new ("");
+  g_option_context_add_main_entries (ctx, options, GETTEXT_PACKAGE);
+  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);
+    return 1;
+  }
+  g_option_context_free (ctx);
+
+  logo_buf = create_overlay_buffer ();
+
+  main_loop = g_main_loop_new (NULL, FALSE);
+
+  pipeline = gst_pipeline_new ("pipeline");
+
+  src = gst_element_factory_make ("videotestsrc", NULL);
+  gst_util_set_object_arg (G_OBJECT (src), "pattern", "white");
+
+  src_pad = gst_element_get_static_pad (src, "src");
+  gst_pad_add_probe (src_pad, GST_PAD_PROBE_TYPE_BUFFER, buffer_cb,
+      main_loop, NULL);
+  gst_object_unref (src_pad);
+
+  q = gst_element_factory_make ("queue", NULL);
+
+  capsfilter = gst_element_factory_make ("capsfilter", NULL);
+  filter_caps = gst_caps_from_string ("video/x-raw, format = "
+      GST_VIDEO_OVERLAY_COMPOSITION_BLEND_FORMATS);
+  gst_caps_set_simple (filter_caps,
+      "width", G_TYPE_INT, VIDEO_WIDTH,
+      "height", G_TYPE_INT, VIDEO_HEIGHT,
+      "framerate", GST_TYPE_FRACTION, VIDEO_FPS, 1, NULL);
+  g_object_set (capsfilter, "caps", filter_caps, NULL);
+  gst_caps_unref (filter_caps);
+
+  sink = gst_element_factory_make ("ximagesink", NULL);
+
+  gst_bin_add_many (GST_BIN (pipeline), src, q, capsfilter, sink, NULL);
+
+  gst_element_link_many (src, q, capsfilter, sink, NULL);
+
+  count = 0;
+
+  gst_element_set_state (pipeline, GST_STATE_PLAYING);
+
+  gst_bus_add_watch (GST_ELEMENT_BUS (pipeline), bus_cb, main_loop);
+
+  g_main_loop_run (main_loop);
+
+  gst_element_set_state (pipeline, GST_STATE_NULL);
+  gst_object_unref (pipeline);
+  gst_buffer_unref (logo_buf);
+
+  return 0;
+}
diff --git a/tests/icles/test-reverseplay.c b/tests/icles/test-reverseplay.c
new file mode 100644
index 0000000..e562a04
--- /dev/null
+++ b/tests/icles/test-reverseplay.c
@@ -0,0 +1,373 @@
+/* Test example which plays a given file forward, then
+ * at EOS, plays the entire file in reverse
+ * and checks that reverse playback generates the same
+ * output as forward playback but reversed
+ */
+/* 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.
+ */
+#include <gst/gst.h>
+#include <string.h>
+
+typedef struct _PlayState PlayState;
+
+typedef struct _StreamTSRange
+{
+  GstClockTime start;
+  GstClockTime end;
+} StreamTSRange;
+
+typedef struct _StreamInfo
+{
+  PlayState *state;
+  GstPad *pad;
+
+  GstSegment seg;
+
+  GArray *fwd_times;
+  GArray *bkwd_times;
+} StreamInfo;
+
+struct _PlayState
+{
+  GstElement *pipe;
+  GMainLoop *loop;
+  gboolean fwd_play;
+  gint n_sinks;
+
+  GMutex output_lock;
+};
+
+static void
+warning_cb (GstBus * bus, GstMessage * msg, gpointer foo)
+{
+  GError *err = NULL;
+  gchar *dbg = NULL;
+
+  gst_message_parse_warning (msg, &err, &dbg);
+
+  g_printerr ("WARNING: %s (%s)\n", err->message, (dbg) ? dbg : "no details");
+
+  g_error_free (err);
+  g_free (dbg);
+}
+
+static void
+error_cb (GstBus * bus, GstMessage * msg, PlayState * state)
+{
+  GError *err = NULL;
+  gchar *dbg = NULL;
+
+  gst_message_parse_error (msg, &err, &dbg);
+
+  g_printerr ("ERROR: %s (%s)\n", err->message, (dbg) ? dbg : "no details");
+
+  g_main_loop_quit (state->loop);
+
+  g_error_free (err);
+  g_free (dbg);
+}
+
+static void
+eos_cb (GstBus * bus, GstMessage * msg, PlayState * state)
+{
+  if (state->fwd_play) {
+    g_print ("EOS - finished forward play. Starting reverse\n");
+    state->fwd_play = FALSE;
+    gst_element_seek (state->pipe, -1.0, GST_FORMAT_TIME,
+        GST_SEEK_FLAG_ACCURATE | GST_SEEK_FLAG_FLUSH,
+        GST_SEEK_TYPE_SET, 0, GST_SEEK_TYPE_END, 0);
+
+    return;
+  }
+  g_print ("EOS - exiting\n");
+  g_main_loop_quit (state->loop);
+}
+
+static void
+state_cb (GstBus * bus, GstMessage * msg, PlayState * state)
+{
+  if (msg->src == GST_OBJECT (state->pipe)) {
+    GstState old_state, new_state, pending_state;
+
+    gst_message_parse_state_changed (msg, &old_state, &new_state,
+        &pending_state);
+    if (new_state == GST_STATE_PLAYING)
+      g_print ("Decoding ...\n");
+  }
+}
+
+static void
+_destroy_stream_info (StreamInfo * si)
+{
+  g_array_free (si->fwd_times, TRUE);
+  g_array_free (si->bkwd_times, TRUE);
+  g_object_unref (si->pad);
+  g_free (si);
+}
+
+static void
+extend_times (StreamInfo * si, GstClockTime start, GstClockTime end)
+{
+  PlayState *state = si->state;
+  StreamTSRange *ts = NULL;
+  StreamTSRange tsn;
+  GArray *a;
+  guint i, n;
+
+  /* Set up new entry, in case we need it */
+  tsn.start = start;
+  tsn.end = end;
+
+  if (state->fwd_play) {
+    a = si->fwd_times;
+    n = a->len;
+    /* if playing forward, see if this new time extends the last entry */
+    i = n - 1;
+  } else {
+    a = si->bkwd_times;
+    n = a->len;
+    /* if playing backward, see if this new time extends the earliest entry */
+    i = 0;
+  }
+
+  if (n > 0) {
+    ts = &g_array_index (a, StreamTSRange, i);
+    if (start > ts->start) {
+      /* This entry is after the most recent entry */
+      /* Tolerance of 1 millisecond allowed for imprecision */
+      if (ts->end + GST_MSECOND >= start) {
+        GST_LOG ("%p extending entry %d to %" GST_TIME_FORMAT,
+            si, i, GST_TIME_ARGS (end));
+        ts->end = end;
+        return;
+      }
+
+      /* new start > ts->end, so this new entry goes after the first one */
+      GST_LOG ("%p inserting new entry %d %" GST_TIME_FORMAT
+          " to %" GST_TIME_FORMAT, si, i + 1, GST_TIME_ARGS (start),
+          GST_TIME_ARGS (end));
+      g_array_insert_val (a, i + 1, tsn);
+      return;
+    } else if (end + GST_MSECOND > ts->start) {
+      /* This entry precedes the current one, but overlaps it */
+      GST_LOG ("%p pre-extending entry %d to %" GST_TIME_FORMAT,
+          si, i, GST_TIME_ARGS (start));
+      ts->start = start;
+      return;
+    }
+  } else {
+    i = 0;
+  }
+
+  /* otherwise insert a new entry before/at the start */
+  GST_LOG ("%p New entry %d - %" GST_TIME_FORMAT " to %" GST_TIME_FORMAT,
+      si, i, GST_TIME_ARGS (start), GST_TIME_ARGS (end));
+  g_array_insert_val (a, i, tsn);
+}
+
+static void
+dump_times (StreamInfo * si)
+{
+  PlayState *state = si->state;
+  guint i;
+  GArray *a;
+
+  g_mutex_lock (&state->output_lock);
+  if (state->fwd_play)
+    a = si->fwd_times;
+  else
+    a = si->bkwd_times;
+
+  g_print ("Pad %s times:\n", GST_PAD_NAME (si->pad));
+  for (i = 0; i < a->len; i++) {
+    StreamTSRange *ts = &g_array_index (a, StreamTSRange, i);
+
+    g_print ("  %u %" GST_TIME_FORMAT " to %" GST_TIME_FORMAT "\n",
+        i, GST_TIME_ARGS (ts->start), GST_TIME_ARGS (ts->end));
+  }
+  g_mutex_unlock (&state->output_lock);
+}
+
+static GstPadProbeReturn
+handle_output (GstPad * pad, GstPadProbeInfo * info, StreamInfo * si)
+{
+  GstClockTime start, end;
+  GstBuffer *buf;
+
+  GST_LOG_OBJECT (pad, "Fired probe type 0x%x\n", info->type);
+
+  if (info->type & GST_PAD_PROBE_TYPE_BUFFER_LIST) {
+    g_warning ("Buffer list handling not implemented");
+    return GST_PAD_PROBE_DROP;
+  }
+
+  if (info->type & GST_PAD_PROBE_TYPE_EVENT_DOWNSTREAM) {
+    GstEvent *event = gst_pad_probe_info_get_event (info);
+    switch (GST_EVENT_TYPE (event)) {
+      case GST_EVENT_SEGMENT:
+        gst_event_copy_segment (event, &si->seg);
+        break;
+      case GST_EVENT_EOS:
+        dump_times (si);
+        break;
+      default:
+        break;
+    }
+    return GST_PAD_PROBE_PASS;
+  }
+
+  buf = gst_pad_probe_info_get_buffer (info);
+  if (!GST_BUFFER_PTS_IS_VALID (buf))
+    goto done;
+  end = start = GST_BUFFER_PTS (buf);
+
+  if (GST_BUFFER_DURATION_IS_VALID (buf))
+    end += GST_BUFFER_DURATION (buf);
+
+  gst_segment_clip (&si->seg, GST_FORMAT_TIME, start, end, &start, &end);
+  start = gst_segment_to_stream_time (&si->seg, GST_FORMAT_TIME, start);
+  end = gst_segment_to_stream_time (&si->seg, GST_FORMAT_TIME, end);
+
+  GST_DEBUG_OBJECT (pad, "new buffer %" GST_TIME_FORMAT
+      " to %" GST_TIME_FORMAT, GST_TIME_ARGS (start), GST_TIME_ARGS (end));
+
+  /* Now extend measured time range to include new times */
+  extend_times (si, start, end);
+
+done:
+  return GST_PAD_PROBE_PASS;
+}
+
+static void
+pad_added_cb (GstElement * decodebin, GstPad * pad, PlayState * state)
+{
+  GstPadLinkReturn ret;
+  GstElement *fakesink;
+  GstPad *fakesink_pad;
+  StreamInfo *si;
+
+  fakesink = gst_element_factory_make ("fakesink", NULL);
+#if 0
+  if (state->n_sinks == 1)
+    g_object_set (fakesink, "silent", FALSE, NULL);
+#endif
+
+  si = g_new0 (StreamInfo, 1);
+  si->pad = g_object_ref (pad);
+  si->state = state;
+  si->fwd_times = g_array_new (FALSE, TRUE, sizeof (StreamTSRange));
+  si->bkwd_times = g_array_new (FALSE, TRUE, sizeof (StreamTSRange));
+
+  gst_pad_add_probe (pad, GST_PAD_PROBE_TYPE_DATA_DOWNSTREAM,
+      (GstPadProbeCallback) handle_output, si, (GDestroyNotify)
+      _destroy_stream_info);
+
+  state->n_sinks++;
+  gst_bin_add (GST_BIN (state->pipe), fakesink);
+
+  gst_element_sync_state_with_parent (fakesink);
+
+  fakesink_pad = gst_element_get_static_pad (fakesink, "sink");
+
+  ret = gst_pad_link (pad, fakesink_pad);
+  if (!GST_PAD_LINK_SUCCESSFUL (ret)) {
+    g_printerr ("Failed to link %s:%s to %s:%s (ret = %d)\n",
+        GST_DEBUG_PAD_NAME (pad), GST_DEBUG_PAD_NAME (fakesink_pad), ret);
+  } else {
+    GstCaps *caps = gst_pad_get_current_caps (pad);
+    gchar *s = gst_caps_to_string (caps);
+
+    g_print ("Linked %s:%s to %s:%s caps %s\n", GST_DEBUG_PAD_NAME (pad),
+        GST_DEBUG_PAD_NAME (fakesink_pad), s);
+    gst_caps_unref (caps);
+    g_free (s);
+  }
+
+  gst_object_unref (fakesink_pad);
+}
+
+gint
+main (gint argc, gchar * argv[])
+{
+  PlayState state;
+  GstElement *decoder;
+  GstStateChangeReturn res;
+  GstBus *bus;
+
+  gst_init (&argc, &argv);
+
+  if (argc != 2) {
+    g_printerr ("Decode file from start to end.\n");
+    g_printerr ("Usage: %s URI\n\n", argv[0]);
+    return 1;
+  }
+  /* Start with zeroed-state */
+  memset (&state, 0, sizeof (PlayState));
+
+  state.loop = g_main_loop_new (NULL, TRUE);
+  state.pipe = gst_pipeline_new ("pipeline");
+  state.fwd_play = TRUE;
+  g_mutex_init (&state.output_lock);
+
+  bus = gst_pipeline_get_bus (GST_PIPELINE (state.pipe));
+  gst_bus_add_signal_watch (bus);
+
+  g_signal_connect (bus, "message::eos", G_CALLBACK (eos_cb), &state);
+  g_signal_connect (bus, "message::error", G_CALLBACK (error_cb), &state);
+  g_signal_connect (bus, "message::warning", G_CALLBACK (warning_cb), NULL);
+  g_signal_connect (bus, "message::state-changed", G_CALLBACK (state_cb),
+      &state);
+
+#if 0
+  g_signal_connect (state.pipe, "deep-notify",
+      G_CALLBACK (gst_object_default_deep_notify), NULL);
+#endif
+
+  decoder = gst_element_factory_make ("uridecodebin", "decoder");
+  g_assert (decoder);
+  gst_bin_add (GST_BIN (state.pipe), decoder);
+
+  if (argv[1] && strstr (argv[1], "://") != NULL) {
+    g_object_set (G_OBJECT (decoder), "uri", argv[1], NULL);
+  } else if (argv[1]) {
+    gchar *uri = g_strdup_printf ("file://%s", argv[1]);
+    g_object_set (G_OBJECT (decoder), "uri", uri, NULL);
+    g_free (uri);
+  } else {
+    g_print ("Usage: %s <filename|uri>\n", argv[0]);
+    return -1;
+  }
+
+  g_signal_connect (decoder, "pad-added", G_CALLBACK (pad_added_cb), &state);
+
+  res = gst_element_set_state (state.pipe, GST_STATE_PLAYING);
+  if (res == GST_STATE_CHANGE_FAILURE) {
+    g_print ("could not play\n");
+    return -1;
+  }
+
+  g_main_loop_run (state.loop);
+
+  /* tidy up */
+  gst_element_set_state (state.pipe, GST_STATE_NULL);
+  gst_object_unref (state.pipe);
+  gst_object_unref (bus);
+
+  return 0;
+}
diff --git a/tests/icles/test-textoverlay.c b/tests/icles/test-textoverlay.c
index c1c59d5..13a2b3f 100644
--- a/tests/icles/test-textoverlay.c
+++ b/tests/icles/test-textoverlay.c
@@ -106,6 +106,7 @@
     }
   }
 
+  gst_object_unref (toverlay);
   g_free (pstr);
 }
 
diff --git a/tests/icles/test-videooverlay.c b/tests/icles/test-videooverlay.c
index 191c30d..2cd59ee 100644
--- a/tests/icles/test-videooverlay.c
+++ b/tests/icles/test-videooverlay.c
@@ -22,8 +22,8 @@
 #ifdef HAVE_CONFIG_H
 #include "config.h"
 #endif
-/* FIXME 0.11: suppress warnings for deprecated API such as GStaticRecMutex
- * with newer GTK versions (>= 3.3.0) */
+/* Disable deprecation warnings because we need to use
+ * gtk_widget_set_double_buffered () or display will flicker */
 #define GDK_DISABLE_DEPRECATION_WARNINGS
 
 #include <stdlib.h>
@@ -97,15 +97,17 @@
 handle_draw_cb (GtkWidget * widget, cairo_t * cr, gpointer user_data)
 {
   GstVideoRectangle *r = &anim_state.rect;
-  GtkStyle *style;
+  GtkStyleContext *style;
+  GdkRGBA color;
   int width, height;
 
   width = gtk_widget_get_allocated_width (widget);
   height = gtk_widget_get_allocated_height (widget);
 
-  style = gtk_widget_get_style (widget);
+  style = gtk_widget_get_style_context (widget);
 
-  gdk_cairo_set_source_color (cr, &style->bg[GTK_STATE_NORMAL]);
+  gtk_style_context_get_color (style, 0, &color);
+  gdk_cairo_set_source_rgba (cr, &color);
 
   /* we should only redraw outside of the video rect! */
   cairo_rectangle (cr, 0, 0, r->x, height);
diff --git a/tools/Makefile.am b/tools/Makefile.am
index 74d11ca..d6da6e2 100644
--- a/tools/Makefile.am
+++ b/tools/Makefile.am
@@ -28,14 +28,3 @@
 	$(GST_BASE_LIBS) $(GST_LIBS) $(LIBM)
 
 AM_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_BASE_CFLAGS) $(GST_CFLAGS)
-
-Android.mk: Makefile.am
-	androgenizer -:PROJECT gst-discoverer-@GST_API_VERSION@ \
-	 -:REL_TOP $(top_srcdir) -:ABS_TOP $(abs_top_srcdir) \
-	 -:EXECUTABLE gst-discoverer-@GST_API_VERSION@ -:TAGS eng debug \
-	 -:SOURCES $(gst_discoverer_@GST_API_VERSION@_SOURCES) \
-	 -:CFLAGS $(DEFS) $(AM_CFLAGS) \
-	 -:LDFLAGS -lgstpbutils-@GST_API_VERSION@ -lgstvideo-@GST_API_VERSION@ \
-	 	   $(GST_BASE_LIBS) $(GST_LIBS) \
-	 -:PASSTHROUGH LOCAL_ARM_MODE:=arm \
-	> $@
diff --git a/tools/Makefile.in b/tools/Makefile.in
index 9882cff..5b01792 100644
--- a/tools/Makefile.in
+++ b/tools/Makefile.in
@@ -1,7 +1,7 @@
-# Makefile.in generated by automake 1.14.1 from Makefile.am.
+# Makefile.in generated by automake 1.15 from Makefile.am.
 # @configure_input@
 
-# Copyright (C) 1994-2013 Free Software Foundation, Inc.
+# 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,
@@ -16,7 +16,17 @@
 
 
 VPATH = @srcdir@
-am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)'
+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 \
       ?) ;; \
@@ -84,8 +94,6 @@
 	gst-discoverer-@GST_API_VERSION@$(EXEEXT) \
 	gst-play-@GST_API_VERSION@$(EXEEXT)
 subdir = tools
-DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \
-	$(top_srcdir)/depcomp $(noinst_HEADERS)
 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 \
@@ -106,7 +114,6 @@
 	$(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-x11.m4 \
 	$(top_srcdir)/common/m4/gst.m4 \
 	$(top_srcdir)/common/m4/gtk-doc.m4 \
 	$(top_srcdir)/common/m4/introspection.m4 \
@@ -123,6 +130,8 @@
 	$(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 =
@@ -262,6 +271,7 @@
   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@
@@ -322,6 +332,8 @@
 GIO_CFLAGS = @GIO_CFLAGS@
 GIO_LDFLAGS = @GIO_LDFLAGS@
 GIO_LIBS = @GIO_LIBS@
+GIO_UNIX_2_0_CFLAGS = @GIO_UNIX_2_0_CFLAGS@
+GIO_UNIX_2_0_LIBS = @GIO_UNIX_2_0_LIBS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
 GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
 GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
@@ -351,6 +363,8 @@
 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_OPTION_CFLAGS = @GST_OPTION_CFLAGS@
 GST_OPTION_CXXFLAGS = @GST_OPTION_CXXFLAGS@
 GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
@@ -378,7 +392,6 @@
 GTK_X11_CFLAGS = @GTK_X11_CFLAGS@
 GTK_X11_LIBS = @GTK_X11_LIBS@
 HAVE_CDPARANOIA = @HAVE_CDPARANOIA@
-HAVE_X = @HAVE_X@
 HAVE_XSHM = @HAVE_XSHM@
 HAVE_ZLIB = @HAVE_ZLIB@
 HTML_DIR = @HTML_DIR@
@@ -393,6 +406,7 @@
 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@
@@ -482,13 +496,12 @@
 XGETTEXT = @XGETTEXT@
 XGETTEXT_015 = @XGETTEXT_015@
 XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
-XMKMF = @XMKMF@
+XSHM_CFLAGS = @XSHM_CFLAGS@
 XSHM_LIBS = @XSHM_LIBS@
+XVIDEO_CFLAGS = @XVIDEO_CFLAGS@
 XVIDEO_LIBS = @XVIDEO_LIBS@
 X_CFLAGS = @X_CFLAGS@
-X_EXTRA_LIBS = @X_EXTRA_LIBS@
 X_LIBS = @X_LIBS@
-X_PRE_LIBS = @X_PRE_LIBS@
 ZLIB_CFLAGS = @ZLIB_CFLAGS@
 ZLIB_LIBS = @ZLIB_LIBS@
 abs_builddir = @abs_builddir@
@@ -541,6 +554,7 @@
 psdir = @psdir@
 pyexecdir = @pyexecdir@
 pythondir = @pythondir@
+runstatedir = @runstatedir@
 sbindir = @sbindir@
 sharedstatedir = @sharedstatedir@
 srcdir = @srcdir@
@@ -587,7 +601,6 @@
 	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu tools/Makefile'; \
 	$(am__cd) $(top_srcdir) && \
 	  $(AUTOMAKE) --gnu tools/Makefile
-.PRECIOUS: Makefile
 Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
 	@case '$?' in \
 	  *config.status*) \
@@ -960,17 +973,8 @@
 	pdf pdf-am ps ps-am tags tags-am uninstall uninstall-am \
 	uninstall-binPROGRAMS uninstall-man uninstall-man1
 
+.PRECIOUS: Makefile
 
-Android.mk: Makefile.am
-	androgenizer -:PROJECT gst-discoverer-@GST_API_VERSION@ \
-	 -:REL_TOP $(top_srcdir) -:ABS_TOP $(abs_top_srcdir) \
-	 -:EXECUTABLE gst-discoverer-@GST_API_VERSION@ -:TAGS eng debug \
-	 -:SOURCES $(gst_discoverer_@GST_API_VERSION@_SOURCES) \
-	 -:CFLAGS $(DEFS) $(AM_CFLAGS) \
-	 -:LDFLAGS -lgstpbutils-@GST_API_VERSION@ -lgstvideo-@GST_API_VERSION@ \
-	 	   $(GST_BASE_LIBS) $(GST_LIBS) \
-	 -:PASSTHROUGH LOCAL_ARM_MODE:=arm \
-	> $@
 
 # 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/tools/gst-device-monitor.c b/tools/gst-device-monitor.c
index 3388d95..c4a1d5e 100644
--- a/tools/gst-device-monitor.c
+++ b/tools/gst-device-monitor.c
@@ -42,11 +42,23 @@
 
 static gboolean bus_msg_handler (GstBus * bus, GstMessage * msg, gpointer data);
 
+static gboolean
+print_structure_field (GQuark field_id, const GValue * value,
+    gpointer user_data)
+{
+  if (G_VALUE_HOLDS_STRING (value))
+    g_print ("\n\t\t%s = %s", g_quark_to_string (field_id),
+        g_value_get_string (value));
+
+  return TRUE;
+}
+
 static void
 device_added (GstDevice * device)
 {
-  gchar *device_class, *caps_str, *name;
+  gchar *device_class, *str, *name;
   GstCaps *caps;
+  GstStructure *props;
   guint i, size = 0;
 
   caps = gst_device_get_caps (device);
@@ -55,17 +67,23 @@
 
   name = gst_device_get_display_name (device);
   device_class = gst_device_get_device_class (device);
+  props = gst_device_get_properties (device);
 
   g_print ("\nDevice found:\n\n");
   g_print ("\tname  : %s\n", name);
   g_print ("\tclass : %s\n", device_class);
   for (i = 0; i < size; ++i) {
     GstStructure *s = gst_caps_get_structure (caps, i);
-    caps_str = gst_structure_to_string (s);
-    g_print ("\t%s %s\n", (i == 0) ? "caps  :" : "       ", caps_str);
-    g_free (caps_str);
+    str = gst_structure_to_string (s);
+    g_print ("\t%s %s\n", (i == 0) ? "caps  :" : "       ", str);
+    g_free (str);
   }
-
+  if (props) {
+    g_print ("\tproperties:");
+    gst_structure_foreach (props, print_structure_field, NULL);
+    gst_structure_free (props);
+    g_print ("\n");
+  }
   g_print ("\n");
 
   g_free (name);
diff --git a/tools/gst-discoverer.c b/tools/gst-discoverer.c
index db351b3..16468ae 100644
--- a/tools/gst-discoverer.c
+++ b/tools/gst-discoverer.c
@@ -28,6 +28,8 @@
 #include <gst/gst.h>
 #include <gst/pbutils/pbutils.h>
 
+#define MAX_INDENT 40
+
 /* *INDENT-OFF* */
 static void my_g_string_append_printf (GString * str, int depth, const gchar * format, ...) G_GNUC_PRINTF (3, 4);
 /* *INDENT-ON* */
@@ -59,7 +61,7 @@
 
 static void
 gst_stream_information_to_string (GstDiscovererStreamInfo * info, GString * s,
-    gint depth)
+    guint depth)
 {
   gchar *tmp;
   GstCaps *caps;
@@ -85,13 +87,69 @@
       gst_discoverer_stream_info_get_stream_id (info));
 }
 
+static void
+print_tag_foreach (const GstTagList * tags, const gchar * tag,
+    gpointer user_data)
+{
+  GValue val = { 0, };
+  gchar *str;
+  guint depth = GPOINTER_TO_UINT (user_data);
+
+  if (!gst_tag_list_copy_value (&val, tags, tag))
+    return;
+
+  if (G_VALUE_HOLDS_STRING (&val)) {
+    str = g_value_dup_string (&val);
+  } else if (G_VALUE_TYPE (&val) == GST_TYPE_SAMPLE) {
+    GstSample *sample = gst_value_get_sample (&val);
+    GstBuffer *img = gst_sample_get_buffer (sample);
+    GstCaps *caps = gst_sample_get_caps (sample);
+
+    if (img) {
+      if (caps) {
+        gchar *caps_str;
+
+        caps_str = gst_caps_to_string (caps);
+        str = g_strdup_printf ("buffer of %" G_GSIZE_FORMAT " bytes, "
+            "type: %s", gst_buffer_get_size (img), caps_str);
+        g_free (caps_str);
+      } else {
+        str = g_strdup_printf ("buffer of %" G_GSIZE_FORMAT " bytes",
+            gst_buffer_get_size (img));
+      }
+    } else {
+      str = g_strdup ("NULL buffer");
+    }
+  } else {
+    str = gst_value_serialize (&val);
+  }
+
+  g_print ("%*s%s: %s\n", 2 * depth, " ", gst_tag_get_nick (tag), str);
+  g_free (str);
+
+  g_value_unset (&val);
+}
+
+static void
+print_tags_topology (guint depth, const GstTagList * tags)
+{
+  g_print ("%*sTags:\n", 2 * depth, " ");
+  if (tags) {
+    gst_tag_list_foreach (tags, print_tag_foreach,
+        GUINT_TO_POINTER (depth + 1));
+  } else {
+    g_print ("%*sNone\n", 2 * (depth + 1), " ");
+  }
+  if (verbose)
+    g_print ("%*s\n", 2 * depth, " ");
+}
+
 static gchar *
 gst_stream_audio_information_to_string (GstDiscovererStreamInfo * info,
-    gint depth)
+    guint depth)
 {
   GstDiscovererAudioInfo *audio_info;
   GString *s;
-  gchar *tmp;
   const gchar *ctmp;
   int len = 400;
   const GstTagList *tags;
@@ -118,28 +176,18 @@
   my_g_string_append_printf (s, depth, "Max bitrate: %u\n",
       gst_discoverer_audio_info_get_max_bitrate (audio_info));
 
-  my_g_string_append_printf (s, depth, "Tags:\n");
   tags = gst_discoverer_stream_info_get_tags (info);
-  if (tags) {
-    tmp = gst_tag_list_to_string (tags);
-    my_g_string_append_printf (s, depth, "  %s\n", tmp);
-    g_free (tmp);
-  } else {
-    my_g_string_append_printf (s, depth, "  None\n");
-  }
-  if (verbose)
-    my_g_string_append_printf (s, depth, "\n");
+  print_tags_topology (depth, tags);
 
   return g_string_free (s, FALSE);
 }
 
 static gchar *
 gst_stream_video_information_to_string (GstDiscovererStreamInfo * info,
-    gint depth)
+    guint depth)
 {
   GstDiscovererVideoInfo *video_info;
   GString *s;
-  gchar *tmp;
   int len = 500;
   const GstTagList *tags;
 
@@ -173,28 +221,18 @@
   my_g_string_append_printf (s, depth, "Max bitrate: %u\n",
       gst_discoverer_video_info_get_max_bitrate (video_info));
 
-  my_g_string_append_printf (s, depth, "Tags:\n");
   tags = gst_discoverer_stream_info_get_tags (info);
-  if (tags) {
-    tmp = gst_tag_list_to_string (tags);
-    my_g_string_append_printf (s, depth, "  %s\n", tmp);
-    g_free (tmp);
-  } else {
-    my_g_string_append_printf (s, depth, "  None\n");
-  }
-  if (verbose)
-    my_g_string_append_printf (s, depth, "\n");
+  print_tags_topology (depth, tags);
 
   return g_string_free (s, FALSE);
 }
 
 static gchar *
 gst_stream_subtitle_information_to_string (GstDiscovererStreamInfo * info,
-    gint depth)
+    guint depth)
 {
   GstDiscovererSubtitleInfo *subtitle_info;
   GString *s;
-  gchar *tmp;
   const gchar *ctmp;
   int len = 400;
   const GstTagList *tags;
@@ -210,17 +248,8 @@
   my_g_string_append_printf (s, depth, "Language: %s\n",
       ctmp ? ctmp : "<unknown>");
 
-  my_g_string_append_printf (s, depth, "Tags:\n");
   tags = gst_discoverer_stream_info_get_tags (info);
-  if (tags) {
-    tmp = gst_tag_list_to_string (tags);
-    my_g_string_append_printf (s, depth, "  %s\n", tmp);
-    g_free (tmp);
-  } else {
-    my_g_string_append_printf (s, depth, "  None\n");
-  }
-  if (verbose)
-    my_g_string_append_printf (s, depth, "\n");
+  print_tags_topology (depth, tags);
 
   return g_string_free (s, FALSE);
 }
@@ -270,7 +299,7 @@
 }
 
 static void
-print_topology (GstDiscovererStreamInfo * info, gint depth)
+print_topology (GstDiscovererStreamInfo * info, guint depth)
 {
   GstDiscovererStreamInfo *next;
 
@@ -298,33 +327,10 @@
 }
 
 static void
-print_tag_foreach (const GstTagList * tags, const gchar * tag,
-    gpointer user_data)
-{
-  GValue val = { 0, };
-  gchar *str;
-  gint depth = GPOINTER_TO_INT (user_data);
-
-  gst_tag_list_copy_value (&val, tags, tag);
-
-  if (G_VALUE_HOLDS_STRING (&val))
-    str = g_value_dup_string (&val);
-  else
-    str = gst_value_serialize (&val);
-
-  g_print ("%*s%s: %s\n", 2 * depth, " ", gst_tag_get_nick (tag), str);
-  g_free (str);
-
-  g_value_unset (&val);
-}
-
-#define MAX_INDENT 40
-
-static void
 print_toc_entry (gpointer data, gpointer user_data)
 {
   GstTocEntry *entry = (GstTocEntry *) data;
-  gint depth = GPOINTER_TO_INT (user_data);
+  guint depth = GPOINTER_TO_UINT (user_data);
   guint indent = MIN (GPOINTER_TO_UINT (user_data), MAX_INDENT);
   GstTagList *tags;
   GList *subentries;
@@ -375,9 +381,16 @@
 static void
 print_info (GstDiscovererInfo * info, GError * err)
 {
-  GstDiscovererResult result = gst_discoverer_info_get_result (info);
+  GstDiscovererResult result;
   GstDiscovererStreamInfo *sinfo;
 
+  if (!info) {
+    g_print ("Could not discover URI\n");
+    g_print (" %s\n", err->message);
+    return;
+  }
+
+  result = gst_discoverer_info_get_result (info);
   g_print ("Done discovering %s\n", gst_discoverer_info_get_uri (info));
   switch (result) {
     case GST_DISCOVERER_OK:
@@ -481,7 +494,7 @@
     uri = g_strdup (filename);
   }
 
-  if (async == FALSE) {
+  if (!async) {
     g_print ("Analyzing %s\n", uri);
     info = gst_discoverer_discover_uri (dc, uri, &err);
     print_info (info, err);
@@ -549,6 +562,8 @@
 
   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);
   }
 
@@ -562,10 +577,11 @@
   dc = gst_discoverer_new (timeout * GST_SECOND, &err);
   if (G_UNLIKELY (dc == NULL)) {
     g_print ("Error initializing: %s\n", err->message);
+    g_clear_error (&err);
     exit (1);
   }
 
-  if (async == FALSE) {
+  if (!async) {
     gint i;
     for (i = 1; i < argc; i++)
       process_file (dc, argv[i]);
diff --git a/tools/gst-play-1.0.1 b/tools/gst-play-1.0.1
index 8c16e2f..1ccae9d 100644
--- a/tools/gst-play-1.0.1
+++ b/tools/gst-play-1.0.1
@@ -32,8 +32,8 @@
 .B  \-\-shuffle
 Shuffle playlist (play files in random order)
 .TP 8
-.B  \-\-interactive
-Enable control through keyboard interaction in terminal (see below)
+.B  \-\-no-interactive
+Disable control through keyboard interaction in terminal (see below)
 .TP 8
 .B  \-\-gapless
 Enable gapless playback
@@ -50,6 +50,24 @@
 .B  ARROW LEFT/RIGHT
 Seek back/forward
 .TP 8
+.B  +/-
+Increase/decrease playback rate
+.TP 8
+.B  d
+Reverse playback direction
+.TP 8
+.B  t
+Cycle through trick modes
+.TP 8
+.B  a
+Switch audio track
+.TP 8
+.B  s
+Switch subtitle track
+.TP 8
+.B  v
+Switch video track
+.TP 8
 .B  >
 Skip to next item in playlist
 .TP 8
diff --git a/tools/gst-play.c b/tools/gst-play.c
index cc38a61..15c9aa2 100644
--- a/tools/gst-play.c
+++ b/tools/gst-play.c
@@ -2,6 +2,7 @@
  *
  * Copyright (C) 2013-2014 Tim-Philipp Müller <tim centricular net>
  * Copyright (C) 2013 Collabora Ltd.
+ * 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
@@ -28,12 +29,16 @@
 #include <gst/gst.h>
 #include <gst/gst-i18n-app.h>
 #include <gst/audio/audio.h>
+#include <gst/video/video.h>
 #include <gst/pbutils/pbutils.h>
+#include <gst/tag/tag.h>
 #include <gst/math-compat.h>
 #include <stdlib.h>
 #include <stdio.h>
 #include <string.h>
 
+#include <glib/gprintf.h>
+
 #include "gst-play-kb.h"
 
 #define VOLUME_STEPS 20
@@ -41,6 +46,24 @@
 GST_DEBUG_CATEGORY (play_debug);
 #define GST_CAT_DEFAULT play_debug
 
+typedef enum
+{
+  GST_PLAY_TRICK_MODE_NONE = 0,
+  GST_PLAY_TRICK_MODE_DEFAULT,
+  GST_PLAY_TRICK_MODE_DEFAULT_NO_AUDIO,
+  GST_PLAY_TRICK_MODE_KEY_UNITS,
+  GST_PLAY_TRICK_MODE_KEY_UNITS_NO_AUDIO,
+  GST_PLAY_TRICK_MODE_LAST
+} GstPlayTrickMode;
+
+typedef enum
+{
+  GST_PLAY_TRACK_TYPE_INVALID = 0,
+  GST_PLAY_TRACK_TYPE_AUDIO,
+  GST_PLAY_TRACK_TYPE_VIDEO,
+  GST_PLAY_TRACK_TYPE_SUBTITLE
+} GstPlayTrackType;
+
 typedef struct
 {
   gchar **uris;
@@ -63,8 +86,13 @@
 
   /* configuration */
   gboolean gapless;
+
+  GstPlayTrickMode trick_mode;
+  gdouble rate;
 } GstPlay;
 
+static gboolean quiet = FALSE;
+
 static gboolean play_bus_msg (GstBus * bus, GstMessage * msg, gpointer data);
 static gboolean play_next (GstPlay * play);
 static gboolean play_prev (GstPlay * play);
@@ -72,21 +100,58 @@
 static void play_about_to_finish (GstElement * playbin, gpointer user_data);
 static void play_reset (GstPlay * play);
 static void play_set_relative_volume (GstPlay * play, gdouble volume_step);
+static gboolean play_do_seek (GstPlay * play, gint64 pos, gdouble rate,
+    GstPlayTrickMode mode);
+
+/* *INDENT-OFF* */
+static void gst_play_printf (const gchar * format, ...) G_GNUC_PRINTF (1, 2);
+/* *INDENT-ON* */
+
+static void keyboard_cb (const gchar * key_input, gpointer user_data);
+static void relative_seek (GstPlay * play, gdouble percent);
+
+static void
+gst_play_printf (const gchar * format, ...)
+{
+  gchar *str = NULL;
+  va_list args;
+  int len;
+
+  if (quiet)
+    return;
+
+  va_start (args, format);
+
+  len = g_vasprintf (&str, format, args);
+
+  va_end (args);
+
+  if (len > 0 && str != NULL)
+    g_print ("%s", str);
+
+  g_free (str);
+}
+
+#define g_print gst_play_printf
 
 static GstPlay *
 play_new (gchar ** uris, const gchar * audio_sink, const gchar * video_sink,
     gboolean gapless, gdouble initial_volume)
 {
-  GstElement *sink;
+  GstElement *sink, *playbin;
   GstPlay *play;
 
+  playbin = gst_element_factory_make ("playbin", "playbin");
+  if (playbin == NULL)
+    return NULL;
+
   play = g_new0 (GstPlay, 1);
 
   play->uris = uris;
   play->num_uris = g_strv_length (uris);
   play->cur_idx = -1;
 
-  play->playbin = gst_element_factory_make ("playbin", "playbin");
+  play->playbin = playbin;
 
   if (audio_sink != NULL) {
     if (strchr (audio_sink, ' ') != NULL)
@@ -134,6 +199,9 @@
   if (initial_volume != -1)
     play_set_relative_volume (play, initial_volume - 1.0);
 
+  play->rate = 1.0;
+  play->trick_mode = GST_PLAY_TRICK_MODE_NONE;
+
   return play;
 }
 
@@ -178,7 +246,8 @@
   gst_stream_volume_set_volume (GST_STREAM_VOLUME (play->playbin),
       GST_STREAM_VOLUME_FORMAT_CUBIC, volume);
 
-  g_print ("Volume: %.0f%%                  \n", volume * 100);
+  g_print (_("Volume: %.0f%%"), volume * 100);
+  g_print ("                  \n");
 }
 
 /* returns TRUE if something was installed and we should restart playback */
@@ -267,7 +336,7 @@
       g_print ("\n");
       /* and switch to next item in list */
       if (!play_next (play)) {
-        g_print ("Reached end of play list.\n");
+        g_print ("%s\n", _("Reached end of play list."));
         g_main_loop_quit (play->loop);
       }
       break;
@@ -313,11 +382,68 @@
       }
       /* try next item in list then */
       if (!play_next (play)) {
-        g_print ("Reached end of play list.\n");
+        g_print ("%s\n", _("Reached end of play list."));
         g_main_loop_quit (play->loop);
       }
       break;
     }
+    case GST_MESSAGE_ELEMENT:
+    {
+      GstNavigationMessageType mtype = gst_navigation_message_get_type (msg);
+      if (mtype == GST_NAVIGATION_MESSAGE_EVENT) {
+        GstEvent *ev = NULL;
+
+        if (gst_navigation_message_parse_event (msg, &ev)) {
+          GstNavigationEventType e_type = gst_navigation_event_get_type (ev);
+          switch (e_type) {
+            case GST_NAVIGATION_EVENT_KEY_PRESS:
+            {
+              const gchar *key;
+
+              if (gst_navigation_event_parse_key_event (ev, &key)) {
+                GST_INFO ("Key press: %s", key);
+
+                if (strcmp (key, "Left") == 0)
+                  key = GST_PLAY_KB_ARROW_LEFT;
+                else if (strcmp (key, "Right") == 0)
+                  key = GST_PLAY_KB_ARROW_RIGHT;
+                else if (strcmp (key, "Up") == 0)
+                  key = GST_PLAY_KB_ARROW_UP;
+                else if (strcmp (key, "Down") == 0)
+                  key = GST_PLAY_KB_ARROW_DOWN;
+                else if (strcmp (key, "space") == 0)
+                  key = " ";
+                else if (strlen (key) > 1)
+                  break;
+
+                keyboard_cb (key, user_data);
+              }
+              break;
+            }
+            case GST_NAVIGATION_EVENT_MOUSE_BUTTON_PRESS:
+            {
+              gint button;
+              if (gst_navigation_event_parse_mouse_button_event (ev, &button,
+                      NULL, NULL)) {
+                if (button == 4) {
+                  /* wheel up */
+                  relative_seek (play, +0.08);
+                } else if (button == 5) {
+                  /* wheel down */
+                  relative_seek (play, -0.01);
+                }
+              }
+              break;
+            }
+            default:
+              break;
+          }
+        }
+        if (ev)
+          gst_event_unref (ev);
+      }
+      break;
+    }
     default:
       if (gst_is_missing_plugin_message (msg)) {
         gchar *desc;
@@ -338,7 +464,8 @@
 {
   GstPlay *play = user_data;
   gint64 pos = -1, dur = -1;
-  gchar status[64] = { 0, };
+  const gchar *paused = _("Paused");
+  gchar *status;
 
   if (play->buffering)
     return TRUE;
@@ -346,10 +473,14 @@
   gst_element_query_position (play->playbin, GST_FORMAT_TIME, &pos);
   gst_element_query_duration (play->playbin, GST_FORMAT_TIME, &dur);
 
-  if (play->desired_state == GST_STATE_PAUSED)
-    g_snprintf (status, sizeof (status), "Paused");
-  else
-    memset (status, ' ', sizeof (status) - 1);
+  if (play->desired_state == GST_STATE_PAUSED) {
+    status = (gchar *) paused;
+  } else {
+    gint len = g_utf8_strlen (paused, -1);
+    status = g_newa (gchar, len + 1);
+    memset (status, ' ', len);
+    status[len] = '\0';
+  }
 
   if (pos >= 0 && dur > 0) {
     gchar dstr[32], pstr[32];
@@ -385,20 +516,18 @@
 static void
 play_uri (GstPlay * play, const gchar * next_uri)
 {
-  GstStateChangeReturn sret;
   gchar *loc;
 
   gst_element_set_state (play->playbin, GST_STATE_READY);
   play_reset (play);
 
   loc = play_uri_get_display_name (play, next_uri);
-  g_print ("Now playing %s\n", loc);
+  g_print (_("Now playing %s\n"), loc);
   g_free (loc);
 
   g_object_set (play->playbin, "uri", next_uri, NULL);
 
-  sret = gst_element_set_state (play->playbin, GST_STATE_PAUSED);
-  switch (sret) {
+  switch (gst_element_set_state (play->playbin, GST_STATE_PAUSED)) {
     case GST_STATE_CHANGE_FAILURE:
       /* ignore, we should get an error message posted on the bus */
       break;
@@ -412,8 +541,9 @@
     default:
       break;
   }
+
   if (play->desired_state != GST_STATE_PAUSED)
-    sret = gst_element_set_state (play->playbin, play->desired_state);
+    gst_element_set_state (play->playbin, play->desired_state);
 }
 
 /* returns FALSE if we have reached the end of the playlist */
@@ -455,7 +585,8 @@
 
   next_uri = play->uris[next_idx];
   loc = play_uri_get_display_name (play, next_uri);
-  g_print ("About to finish, preparing next title: %s\n", loc);
+  g_print (_("About to finish, preparing next title: %s"), loc);
+  g_print ("\n");
   g_free (loc);
 
   g_object_set (play->playbin, "uri", next_uri, NULL);
@@ -477,6 +608,21 @@
   g_main_loop_run (play->loop);
 }
 
+static gint
+compare (gconstpointer a, gconstpointer b)
+{
+  gchar *a1, *b1;
+  gint ret;
+
+  a1 = g_utf8_collate_key_for_filename ((gchar *) a, -1);
+  b1 = g_utf8_collate_key_for_filename ((gchar *) b, -1);
+  ret = strcmp (a1, b1);
+  g_free (a1);
+  g_free (b1);
+
+  return ret;
+}
+
 static void
 add_to_playlist (GPtrArray * playlist, const gchar * filename)
 {
@@ -490,17 +636,24 @@
 
   if ((dir = g_dir_open (filename, 0, NULL))) {
     const gchar *entry;
+    GList *l, *files = NULL;
 
-    /* FIXME: sort entries for each directory? */
     while ((entry = g_dir_read_name (dir))) {
       gchar *path;
 
-      path = g_strconcat (filename, G_DIR_SEPARATOR_S, entry, NULL);
-      add_to_playlist (playlist, path);
-      g_free (path);
+      path = g_build_filename (filename, entry, NULL);
+      files = g_list_insert_sorted (files, path, compare);
     }
 
     g_dir_close (dir);
+
+    for (l = files; l != NULL; l = l->next) {
+      gchar *path = (gchar *) l->data;
+
+      add_to_playlist (playlist, path);
+      g_free (path);
+    }
+    g_list_free (files);
     return;
   }
 
@@ -555,7 +708,7 @@
 {
   GstQuery *query;
   gboolean seekable = FALSE;
-  gint64 dur = -1, pos = -1;
+  gint64 dur = -1, pos = -1, step;
 
   g_return_if_fail (percent >= -1.0 && percent <= 1.0);
 
@@ -574,18 +727,21 @@
   if (!seekable || dur <= 0)
     goto seek_failed;
 
-  pos = pos + dur * percent;
+  step = dur * percent;
+  if (ABS (step) < GST_SECOND)
+    step = (percent < 0) ? -GST_SECOND : GST_SECOND;
+
+  pos = pos + step;
   if (pos > dur) {
     if (!play_next (play)) {
-      g_print ("\nReached end of play list.\n");
+      g_print ("\n%s\n", _("Reached end of play list."));
       g_main_loop_quit (play->loop);
     }
   } else {
     if (pos < 0)
       pos = 0;
-    if (!gst_element_seek_simple (play->playbin, GST_FORMAT_TIME,
-            GST_SEEK_FLAG_FLUSH | GST_SEEK_FLAG_KEY_UNIT, pos))
-      goto seek_failed;
+
+    play_do_seek (play, pos, play->rate, play->trick_mode);
   }
 
   return;
@@ -596,12 +752,261 @@
   }
 }
 
+static gboolean
+play_set_rate_and_trick_mode (GstPlay * play, gdouble rate,
+    GstPlayTrickMode mode)
+{
+  gint64 pos = -1;
+
+  g_return_val_if_fail (rate != 0, FALSE);
+
+  if (!gst_element_query_position (play->playbin, GST_FORMAT_TIME, &pos))
+    return FALSE;
+
+  return play_do_seek (play, pos, rate, mode);
+}
+
+static gboolean
+play_do_seek (GstPlay * play, gint64 pos, gdouble rate, GstPlayTrickMode mode)
+{
+  GstSeekFlags seek_flags;
+  GstQuery *query;
+  GstEvent *seek;
+  gboolean seekable = FALSE;
+
+  query = gst_query_new_seeking (GST_FORMAT_TIME);
+  if (!gst_element_query (play->playbin, query)) {
+    gst_query_unref (query);
+    return FALSE;
+  }
+
+  gst_query_parse_seeking (query, NULL, &seekable, NULL, NULL);
+  gst_query_unref (query);
+
+  if (!seekable)
+    return FALSE;
+
+  seek_flags = GST_SEEK_FLAG_FLUSH;
+
+  switch (mode) {
+    case GST_PLAY_TRICK_MODE_DEFAULT:
+      seek_flags |= GST_SEEK_FLAG_TRICKMODE;
+      break;
+    case GST_PLAY_TRICK_MODE_DEFAULT_NO_AUDIO:
+      seek_flags |= GST_SEEK_FLAG_TRICKMODE | GST_SEEK_FLAG_TRICKMODE_NO_AUDIO;
+      break;
+    case GST_PLAY_TRICK_MODE_KEY_UNITS:
+      seek_flags |= GST_SEEK_FLAG_TRICKMODE_KEY_UNITS;
+      break;
+    case GST_PLAY_TRICK_MODE_KEY_UNITS_NO_AUDIO:
+      seek_flags |=
+          GST_SEEK_FLAG_TRICKMODE_KEY_UNITS | GST_SEEK_FLAG_TRICKMODE_NO_AUDIO;
+      break;
+    case GST_PLAY_TRICK_MODE_NONE:
+    default:
+      break;
+  }
+
+  if (rate >= 0)
+    seek = gst_event_new_seek (rate, GST_FORMAT_TIME,
+        seek_flags | GST_SEEK_FLAG_ACCURATE,
+        /* start */ GST_SEEK_TYPE_SET, pos,
+        /* stop */ GST_SEEK_TYPE_SET, GST_CLOCK_TIME_NONE);
+  else
+    seek = gst_event_new_seek (rate, GST_FORMAT_TIME,
+        seek_flags | GST_SEEK_FLAG_ACCURATE,
+        /* start */ GST_SEEK_TYPE_SET, 0,
+        /* stop */ GST_SEEK_TYPE_SET, pos);
+
+  if (!gst_element_send_event (play->playbin, seek))
+    return FALSE;
+
+  play->rate = rate;
+  play->trick_mode = mode;
+  return TRUE;
+}
+
+static void
+play_set_playback_rate (GstPlay * play, gdouble rate)
+{
+  if (play_set_rate_and_trick_mode (play, rate, play->trick_mode)) {
+    g_print (_("Playback rate: %.2f"), rate);
+    g_print ("                               \n");
+  } else {
+    g_print ("\n");
+    g_print (_("Could not change playback rate to %.2f"), rate);
+    g_print (".\n");
+  }
+}
+
+static void
+play_set_relative_playback_rate (GstPlay * play, gdouble rate_step,
+    gboolean reverse_direction)
+{
+  gdouble new_rate = play->rate + rate_step;
+
+  if (reverse_direction)
+    new_rate *= -1.0;
+
+  play_set_playback_rate (play, new_rate);
+}
+
+static const gchar *
+trick_mode_get_description (GstPlayTrickMode mode)
+{
+  switch (mode) {
+    case GST_PLAY_TRICK_MODE_NONE:
+      return "normal playback, trick modes disabled";
+    case GST_PLAY_TRICK_MODE_DEFAULT:
+      return "trick mode: default";
+    case GST_PLAY_TRICK_MODE_DEFAULT_NO_AUDIO:
+      return "trick mode: default, no audio";
+    case GST_PLAY_TRICK_MODE_KEY_UNITS:
+      return "trick mode: key frames only";
+    case GST_PLAY_TRICK_MODE_KEY_UNITS_NO_AUDIO:
+      return "trick mode: key frames only, no audio";
+    default:
+      break;
+  }
+  return "unknown trick mode";
+}
+
+static void
+play_switch_trick_mode (GstPlay * play)
+{
+  GstPlayTrickMode new_mode = ++play->trick_mode;
+  const gchar *mode_desc;
+
+  if (new_mode == GST_PLAY_TRICK_MODE_LAST)
+    new_mode = GST_PLAY_TRICK_MODE_NONE;
+
+  mode_desc = trick_mode_get_description (new_mode);
+
+  if (play_set_rate_and_trick_mode (play, play->rate, new_mode)) {
+    g_print ("Rate: %.2f (%s)                      \n", play->rate, mode_desc);
+  } else {
+    g_print ("\nCould not change trick mode to %s.\n", mode_desc);
+  }
+}
+
+static void
+play_cycle_track_selection (GstPlay * play, GstPlayTrackType track_type)
+{
+  const gchar *prop_cur, *prop_n, *prop_get, *name;
+  gint cur = -1, n = -1;
+
+  switch (track_type) {
+    case GST_PLAY_TRACK_TYPE_AUDIO:
+      prop_get = "get-audio-tags";
+      prop_cur = "current-audio";
+      prop_n = "n-audio";
+      name = "audio";
+      break;
+    case GST_PLAY_TRACK_TYPE_VIDEO:
+      prop_get = "get-video-tags";
+      prop_cur = "current-video";
+      prop_n = "n-video";
+      name = "video";
+      break;
+    case GST_PLAY_TRACK_TYPE_SUBTITLE:
+      prop_get = "get-text-tags";
+      prop_cur = "current-text";
+      prop_n = "n-text";
+      name = "subtitle";
+      break;
+    default:
+      return;
+  }
+
+  g_object_get (play->playbin, prop_cur, &cur, prop_n, &n, NULL);
+
+  if (n < 1) {
+    g_print ("No %s tracks.\n", name);
+  } else if (n == 1) {
+    g_print ("No other %s tracks to switch to.\n", name);
+  } else {
+    gchar *lcode = NULL, *lname = NULL;
+    const gchar *lang = NULL;
+    GstTagList *tags = NULL;
+
+    cur = (cur + 1) % n;
+    g_signal_emit_by_name (play->playbin, prop_get, cur, &tags);
+    if (tags != NULL) {
+      if (gst_tag_list_get_string (tags, GST_TAG_LANGUAGE_CODE, &lcode))
+        lang = gst_tag_get_language_name (lcode);
+      else if (gst_tag_list_get_string (tags, GST_TAG_LANGUAGE_NAME, &lname))
+        lang = lname;
+      gst_tag_list_unref (tags);
+    }
+    if (lang != NULL)
+      g_print ("Switching to %s track %d of %d (%s).\n", name, cur + 1, n,
+          lang);
+    else
+      g_print ("Switching to %s track %d of %d.\n", name, cur + 1, n);
+    g_object_set (play->playbin, prop_cur, cur, NULL);
+    g_free (lcode);
+    g_free (lname);
+  }
+}
+
+static void
+print_keyboard_help (void)
+{
+  static struct
+  {
+    const gchar *key_desc;
+    const gchar *key_help;
+  } key_controls[] = {
+    {
+    N_("space"), N_("pause/unpause")}, {
+    N_("q or ESC"), N_("quit")}, {
+    ">", N_("play next")}, {
+    "<", N_("play previous")}, {
+    "\342\206\222", N_("seek forward")}, {
+    "\342\206\220", N_("seek backward")}, {
+    "\342\206\221", N_("volume up")}, {
+    "\342\206\223", N_("volume down")}, {
+    "+", N_("increase playback rate")}, {
+    "-", N_("decrease playback rate")}, {
+    "d", N_("change playback direction")}, {
+    "t", N_("enable/disable trick modes")}, {
+    "a", N_("change audio track")}, {
+    "v", N_("change video track")}, {
+    "s", N_("change subtitle track")}, {
+  "k", N_("show keyboard shortcuts")},};
+  guint i, chars_to_pad, desc_len, max_desc_len = 0;
+
+  g_print ("\n\n%s\n\n", _("Interactive mode - keyboard controls:"));
+
+  for (i = 0; i < G_N_ELEMENTS (key_controls); ++i) {
+    desc_len = g_utf8_strlen (key_controls[i].key_desc, -1);
+    max_desc_len = MAX (max_desc_len, desc_len);
+  }
+  ++max_desc_len;
+
+  for (i = 0; i < G_N_ELEMENTS (key_controls); ++i) {
+    chars_to_pad = max_desc_len - g_utf8_strlen (key_controls[i].key_desc, -1);
+    g_print ("\t%s", key_controls[i].key_desc);
+    g_print ("%-*s: ", chars_to_pad, "");
+    g_print ("%s\n", key_controls[i].key_help);
+  }
+  g_print ("\n");
+}
+
 static void
 keyboard_cb (const gchar * key_input, gpointer user_data)
 {
   GstPlay *play = (GstPlay *) user_data;
+  gchar key = '\0';
 
-  switch (g_ascii_tolower (key_input[0])) {
+  /* only want to switch/case on single char, not first char of string */
+  if (key_input[0] != '\0' && key_input[1] == '\0')
+    key = g_ascii_tolower (key_input[0]);
+
+  switch (key) {
+    case 'k':
+      print_keyboard_help ();
+      break;
     case ' ':
       toggle_paused (play);
       break;
@@ -611,18 +1016,53 @@
       break;
     case '>':
       if (!play_next (play)) {
-        g_print ("\nReached end of play list.\n");
+        g_print ("\n%s\n", _("Reached end of play list."));
         g_main_loop_quit (play->loop);
       }
       break;
     case '<':
       play_prev (play);
       break;
+    case '+':
+      if (play->rate > -0.2 && play->rate < 0.0)
+        play_set_relative_playback_rate (play, 0.0, TRUE);
+      else if (ABS (play->rate) < 2.0)
+        play_set_relative_playback_rate (play, 0.1, FALSE);
+      else if (ABS (play->rate) < 4.0)
+        play_set_relative_playback_rate (play, 0.5, FALSE);
+      else
+        play_set_relative_playback_rate (play, 1.0, FALSE);
+      break;
+    case '-':
+      if (play->rate > 0.0 && play->rate < 0.20)
+        play_set_relative_playback_rate (play, 0.0, TRUE);
+      else if (ABS (play->rate) <= 2.0)
+        play_set_relative_playback_rate (play, -0.1, FALSE);
+      else if (ABS (play->rate) <= 4.0)
+        play_set_relative_playback_rate (play, -0.5, FALSE);
+      else
+        play_set_relative_playback_rate (play, -1.0, FALSE);
+      break;
+    case 'd':
+      play_set_relative_playback_rate (play, 0.0, TRUE);
+      break;
+    case 't':
+      play_switch_trick_mode (play);
+      break;
     case 27:                   /* ESC */
       if (key_input[1] == '\0') {
         g_main_loop_quit (play->loop);
         break;
       }
+    case 'a':
+      play_cycle_track_selection (play, GST_PLAY_TRACK_TYPE_AUDIO);
+      break;
+    case 'v':
+      play_cycle_track_selection (play, GST_PLAY_TRACK_TYPE_VIDEO);
+      break;
+    case 's':
+      play_cycle_track_selection (play, GST_PLAY_TRACK_TYPE_SUBTITLE);
+      break;
       /* fall through */
     default:
       if (strcmp (key_input, GST_PLAY_KB_ARROW_RIGHT) == 0) {
@@ -648,7 +1088,7 @@
   GstPlay *play;
   GPtrArray *playlist;
   gboolean print_version = FALSE;
-  gboolean interactive = FALSE; /* FIXME: maybe enable by default? */
+  gboolean interactive = TRUE;
   gboolean gapless = FALSE;
   gboolean shuffle = FALSE;
   gdouble volume = -1;
@@ -671,12 +1111,15 @@
         N_("Enable gapless playback"), NULL},
     {"shuffle", 0, 0, G_OPTION_ARG_NONE, &shuffle,
         N_("Shuffle playlist"), NULL},
-    {"interactive", 0, 0, G_OPTION_ARG_NONE, &interactive,
-        N_("Interactive control via keyboard"), NULL},
+    {"no-interactive", 0, G_OPTION_FLAG_REVERSE, G_OPTION_ARG_NONE,
+          &interactive,
+        N_("Disable interactive control via the keyboard"), NULL},
     {"volume", 0, 0, G_OPTION_ARG_DOUBLE, &volume,
         N_("Volume"), NULL},
     {"playlist", 0, 0, G_OPTION_ARG_FILENAME, &playlist_file,
         N_("Playlist file containing input media files"), NULL},
+    {"quiet", 'q', 0, G_OPTION_ARG_NONE, &quiet,
+        N_("Do not print any output (apart from errors)"), NULL},
     {G_OPTION_REMAINING, 0, 0, G_OPTION_ARG_FILENAME_ARRAY, &filenames, NULL},
     {NULL}
   };
@@ -780,8 +1223,15 @@
   /* prepare */
   play = play_new (uris, audio_sink, video_sink, gapless, volume);
 
+  if (play == NULL) {
+    g_printerr
+        ("Failed to create 'playbin' element. Check your GStreamer installation.\n");
+    return EXIT_FAILURE;
+  }
+
   if (interactive) {
     if (gst_play_kb_set_key_handler (keyboard_cb, play)) {
+      g_print (_("Press 'k' to see a list of keyboard shortcuts.\n"));
       atexit (restore_terminal);
     } else {
       g_print ("Interactive keyboard handling in terminal not available.\n");
diff --git a/win32/common/_stdint.h b/win32/common/_stdint.h
index a751fde..eae1962 100644
--- a/win32/common/_stdint.h
+++ b/win32/common/_stdint.h
@@ -1,8 +1,8 @@
 #ifndef _GST_PLUGINS_BASE__STDINT_H
 #define _GST_PLUGINS_BASE__STDINT_H 1
 #ifndef _GENERATED_STDINT_H
-#define _GENERATED_STDINT_H "gst-plugins-base 1.4.5"
-/* generated using gnu compiler gcc (Debian 4.9.2-8) 4.9.2 */
+#define _GENERATED_STDINT_H "gst-plugins-base 1.5.91"
+/* generated using gnu compiler gcc-5 (Debian 5.2.1-17) 5.2.1 20150911 */
 #define _STDINT_HAVE_STDINT_H 1
 #include <stdint.h>
 #endif
diff --git a/win32/common/config.h b/win32/common/config.h
index f5623c0..1162aca 100644
--- a/win32/common/config.h
+++ b/win32/common/config.h
@@ -50,6 +50,9 @@
 /* The GIO modules directory. */
 #undef GIO_MODULE_DIR
 
+/* The GIO install prefix. */
+#undef GIO_PREFIX
+
 /* major/minor version */
 #define GST_API_VERSION "1.0"
 
@@ -84,7 +87,7 @@
 #define GST_PACKAGE_ORIGIN "Unknown package origin"
 
 /* GStreamer package release date/time for plugins as YYYY-MM-DD */
-#define GST_PACKAGE_RELEASE_DATETIME "2014-12-18"
+#define GST_PACKAGE_RELEASE_DATETIME "2015-09-18"
 
 /* Define if static plugins should be built */
 #undef GST_PLUGIN_BUILD_STATIC
@@ -106,9 +109,15 @@
    the CoreFoundation framework. */
 #undef HAVE_CFPREFERENCESCOPYAPPVALUE
 
+/* Define if the target CPU is AARCH64 */
+#undef HAVE_CPU_AARCH64
+
 /* Define if the target CPU is an Alpha */
 #undef HAVE_CPU_ALPHA
 
+/* Define if the target CPU is an ARC */
+#undef HAVE_CPU_ARC
+
 /* Define if the target CPU is an ARM */
 #undef HAVE_CPU_ARM
 
@@ -176,6 +185,9 @@
 /* Define if the GNU gettext() function is already present or preinstalled. */
 #undef HAVE_GETTEXT
 
+/* Define to enable glib GIO unix (used by gio-unix-2.0). */
+#undef HAVE_GIO_UNIX_2_0
+
 /* Define to 1 if you have the `gmtime_r' function. */
 #undef HAVE_GMTIME_R
 
@@ -325,7 +337,7 @@
 #define PACKAGE_NAME "GStreamer Base Plug-ins"
 
 /* Define to the full name and version of this package. */
-#define PACKAGE_STRING "GStreamer Base Plug-ins 1.4.5"
+#define PACKAGE_STRING "GStreamer Base Plug-ins 1.5.91"
 
 /* Define to the one symbol short name of this package. */
 #define PACKAGE_TARNAME "gst-plugins-base"
@@ -334,7 +346,7 @@
 #undef PACKAGE_URL
 
 /* Define to the version of this package. */
-#define PACKAGE_VERSION "1.4.5"
+#define PACKAGE_VERSION "1.5.91"
 
 /* directory where plugins are located */
 #ifdef _DEBUG
@@ -368,7 +380,7 @@
 #undef USE_TREMOLO
 
 /* Version number of package */
-#define VERSION "1.4.5"
+#define VERSION "1.5.91"
 
 /* Define WORDS_BIGENDIAN to 1 if your processor stores words with the most
    significant byte first (like Motorola and SPARC, unlike Intel). */
@@ -382,9 +394,6 @@
 # endif
 #endif
 
-/* Define to 1 if the X Window System is missing or not being used. */
-#undef X_DISPLAY_MISSING
-
 /* Enable large inode numbers on Mac OS X 10.5.  */
 #ifndef _DARWIN_USE_64_BIT_INODE
 # define _DARWIN_USE_64_BIT_INODE 1
diff --git a/win32/common/gstrtsp-enumtypes.c b/win32/common/gstrtsp-enumtypes.c
index 69ca5da..85187f9 100644
--- a/win32/common/gstrtsp-enumtypes.c
+++ b/win32/common/gstrtsp-enumtypes.c
@@ -3,7 +3,98 @@
 
 #include "gstrtsp-enumtypes.h"
 
+#include "rtsp.h"
+#include "gstrtsp.h"
+#include "gstrtsptransport.h"
+#include "gstrtspurl.h"
+#include "gstrtspmessage.h"
+#include "gstrtspconnection.h"
 #include "gstrtspdefs.h"
+#include "gstrtspextension.h"
+#include "gstrtsprange.h"
+
+/* enumerations from "gstrtsptransport.h" */
+GType
+gst_rtsp_trans_mode_get_type (void)
+{
+  static volatile gsize g_define_type_id__volatile = 0;
+  if (g_once_init_enter (&g_define_type_id__volatile)) {
+    static const GFlagsValue values[] = {
+      {GST_RTSP_TRANS_UNKNOWN, "GST_RTSP_TRANS_UNKNOWN", "unknown"},
+      {GST_RTSP_TRANS_RTP, "GST_RTSP_TRANS_RTP", "rtp"},
+      {GST_RTSP_TRANS_RDT, "GST_RTSP_TRANS_RDT", "rdt"},
+      {0, NULL, NULL}
+    };
+    GType g_define_type_id =
+        g_flags_register_static ("GstRTSPTransMode", values);
+    g_once_init_leave (&g_define_type_id__volatile, g_define_type_id);
+  }
+  return g_define_type_id__volatile;
+}
+
+GType
+gst_rtsp_profile_get_type (void)
+{
+  static volatile gsize g_define_type_id__volatile = 0;
+  if (g_once_init_enter (&g_define_type_id__volatile)) {
+    static const GFlagsValue values[] = {
+      {GST_RTSP_PROFILE_UNKNOWN, "GST_RTSP_PROFILE_UNKNOWN", "unknown"},
+      {GST_RTSP_PROFILE_AVP, "GST_RTSP_PROFILE_AVP", "avp"},
+      {GST_RTSP_PROFILE_SAVP, "GST_RTSP_PROFILE_SAVP", "savp"},
+      {GST_RTSP_PROFILE_AVPF, "GST_RTSP_PROFILE_AVPF", "avpf"},
+      {GST_RTSP_PROFILE_SAVPF, "GST_RTSP_PROFILE_SAVPF", "savpf"},
+      {0, NULL, NULL}
+    };
+    GType g_define_type_id = g_flags_register_static ("GstRTSPProfile", values);
+    g_once_init_leave (&g_define_type_id__volatile, g_define_type_id);
+  }
+  return g_define_type_id__volatile;
+}
+
+GType
+gst_rtsp_lower_trans_get_type (void)
+{
+  static volatile gsize g_define_type_id__volatile = 0;
+  if (g_once_init_enter (&g_define_type_id__volatile)) {
+    static const GFlagsValue values[] = {
+      {GST_RTSP_LOWER_TRANS_UNKNOWN, "GST_RTSP_LOWER_TRANS_UNKNOWN", "unknown"},
+      {GST_RTSP_LOWER_TRANS_UDP, "GST_RTSP_LOWER_TRANS_UDP", "udp"},
+      {GST_RTSP_LOWER_TRANS_UDP_MCAST, "GST_RTSP_LOWER_TRANS_UDP_MCAST",
+          "udp-mcast"},
+      {GST_RTSP_LOWER_TRANS_TCP, "GST_RTSP_LOWER_TRANS_TCP", "tcp"},
+      {GST_RTSP_LOWER_TRANS_HTTP, "GST_RTSP_LOWER_TRANS_HTTP", "http"},
+      {GST_RTSP_LOWER_TRANS_TLS, "GST_RTSP_LOWER_TRANS_TLS", "tls"},
+      {0, NULL, NULL}
+    };
+    GType g_define_type_id =
+        g_flags_register_static ("GstRTSPLowerTrans", values);
+    g_once_init_leave (&g_define_type_id__volatile, g_define_type_id);
+  }
+  return g_define_type_id__volatile;
+}
+
+/* enumerations from "gstrtspmessage.h" */
+GType
+gst_rtsp_msg_type_get_type (void)
+{
+  static volatile gsize g_define_type_id__volatile = 0;
+  if (g_once_init_enter (&g_define_type_id__volatile)) {
+    static const GEnumValue values[] = {
+      {GST_RTSP_MESSAGE_INVALID, "GST_RTSP_MESSAGE_INVALID", "invalid"},
+      {GST_RTSP_MESSAGE_REQUEST, "GST_RTSP_MESSAGE_REQUEST", "request"},
+      {GST_RTSP_MESSAGE_RESPONSE, "GST_RTSP_MESSAGE_RESPONSE", "response"},
+      {GST_RTSP_MESSAGE_HTTP_REQUEST, "GST_RTSP_MESSAGE_HTTP_REQUEST",
+          "http-request"},
+      {GST_RTSP_MESSAGE_HTTP_RESPONSE, "GST_RTSP_MESSAGE_HTTP_RESPONSE",
+          "http-response"},
+      {GST_RTSP_MESSAGE_DATA, "GST_RTSP_MESSAGE_DATA", "data"},
+      {0, NULL, NULL}
+    };
+    GType g_define_type_id = g_enum_register_static ("GstRTSPMsgType", values);
+    g_once_init_leave (&g_define_type_id__volatile, g_define_type_id);
+  }
+  return g_define_type_id__volatile;
+}
 
 /* enumerations from "gstrtspdefs.h" */
 GType
@@ -392,3 +483,44 @@
   }
   return g_define_type_id__volatile;
 }
+
+/* enumerations from "gstrtsprange.h" */
+GType
+gst_rtsp_range_unit_get_type (void)
+{
+  static volatile gsize g_define_type_id__volatile = 0;
+  if (g_once_init_enter (&g_define_type_id__volatile)) {
+    static const GEnumValue values[] = {
+      {GST_RTSP_RANGE_SMPTE, "GST_RTSP_RANGE_SMPTE", "smpte"},
+      {GST_RTSP_RANGE_SMPTE_30_DROP, "GST_RTSP_RANGE_SMPTE_30_DROP",
+          "smpte-30-drop"},
+      {GST_RTSP_RANGE_SMPTE_25, "GST_RTSP_RANGE_SMPTE_25", "smpte-25"},
+      {GST_RTSP_RANGE_NPT, "GST_RTSP_RANGE_NPT", "npt"},
+      {GST_RTSP_RANGE_CLOCK, "GST_RTSP_RANGE_CLOCK", "clock"},
+      {0, NULL, NULL}
+    };
+    GType g_define_type_id =
+        g_enum_register_static ("GstRTSPRangeUnit", values);
+    g_once_init_leave (&g_define_type_id__volatile, g_define_type_id);
+  }
+  return g_define_type_id__volatile;
+}
+
+GType
+gst_rtsp_time_type_get_type (void)
+{
+  static volatile gsize g_define_type_id__volatile = 0;
+  if (g_once_init_enter (&g_define_type_id__volatile)) {
+    static const GEnumValue values[] = {
+      {GST_RTSP_TIME_SECONDS, "GST_RTSP_TIME_SECONDS", "seconds"},
+      {GST_RTSP_TIME_NOW, "GST_RTSP_TIME_NOW", "now"},
+      {GST_RTSP_TIME_END, "GST_RTSP_TIME_END", "end"},
+      {GST_RTSP_TIME_FRAMES, "GST_RTSP_TIME_FRAMES", "frames"},
+      {GST_RTSP_TIME_UTC, "GST_RTSP_TIME_UTC", "utc"},
+      {0, NULL, NULL}
+    };
+    GType g_define_type_id = g_enum_register_static ("GstRTSPTimeType", values);
+    g_once_init_leave (&g_define_type_id__volatile, g_define_type_id);
+  }
+  return g_define_type_id__volatile;
+}
diff --git a/win32/common/gstrtsp-enumtypes.h b/win32/common/gstrtsp-enumtypes.h
index 3254324..c42ebdc 100644
--- a/win32/common/gstrtsp-enumtypes.h
+++ b/win32/common/gstrtsp-enumtypes.h
@@ -8,6 +8,18 @@
 
 G_BEGIN_DECLS
 
+/* enumerations from "gstrtsptransport.h" */
+GType gst_rtsp_trans_mode_get_type (void);
+#define GST_TYPE_RTSP_TRANS_MODE (gst_rtsp_trans_mode_get_type())
+GType gst_rtsp_profile_get_type (void);
+#define GST_TYPE_RTSP_PROFILE (gst_rtsp_profile_get_type())
+GType gst_rtsp_lower_trans_get_type (void);
+#define GST_TYPE_RTSP_LOWER_TRANS (gst_rtsp_lower_trans_get_type())
+
+/* enumerations from "gstrtspmessage.h" */
+GType gst_rtsp_msg_type_get_type (void);
+#define GST_TYPE_RTSP_MSG_TYPE (gst_rtsp_msg_type_get_type())
+
 /* enumerations from "gstrtspdefs.h" */
 GType gst_rtsp_result_get_type (void);
 #define GST_TYPE_RTSP_RESULT (gst_rtsp_result_get_type())
@@ -27,6 +39,12 @@
 #define GST_TYPE_RTSP_HEADER_FIELD (gst_rtsp_header_field_get_type())
 GType gst_rtsp_status_code_get_type (void);
 #define GST_TYPE_RTSP_STATUS_CODE (gst_rtsp_status_code_get_type())
+
+/* enumerations from "gstrtsprange.h" */
+GType gst_rtsp_range_unit_get_type (void);
+#define GST_TYPE_RTSP_RANGE_UNIT (gst_rtsp_range_unit_get_type())
+GType gst_rtsp_time_type_get_type (void);
+#define GST_TYPE_RTSP_TIME_TYPE (gst_rtsp_time_type_get_type())
 G_END_DECLS
 
 #endif /* __gst_rtsp_ENUM_TYPES_H__ */
diff --git a/win32/common/libgstapp.def b/win32/common/libgstapp.def
index 32b3cd1..550ca3f 100644
--- a/win32/common/libgstapp.def
+++ b/win32/common/libgstapp.def
@@ -22,6 +22,7 @@
 	gst_app_src_get_stream_type
 	gst_app_src_get_type
 	gst_app_src_push_buffer
+	gst_app_src_push_sample
 	gst_app_src_set_callbacks
 	gst_app_src_set_caps
 	gst_app_src_set_emit_signals
diff --git a/win32/common/libgstaudio.def b/win32/common/libgstaudio.def
index be4d23a..93031a0 100644
--- a/win32/common/libgstaudio.def
+++ b/win32/common/libgstaudio.def
@@ -7,7 +7,9 @@
 	gst_audio_base_sink_get_provide_clock
 	gst_audio_base_sink_get_slave_method
 	gst_audio_base_sink_get_type
+	gst_audio_base_sink_report_device_failure
 	gst_audio_base_sink_set_alignment_threshold
+	gst_audio_base_sink_set_custom_slaving_callback
 	gst_audio_base_sink_set_discont_wait
 	gst_audio_base_sink_set_drift_tolerance
 	gst_audio_base_sink_set_provide_clock
@@ -54,6 +56,7 @@
 	gst_audio_decoder_get_type
 	gst_audio_decoder_merge_tags
 	gst_audio_decoder_negotiate
+	gst_audio_decoder_proxy_getcaps
 	gst_audio_decoder_set_drainable
 	gst_audio_decoder_set_estimate_rate
 	gst_audio_decoder_set_latency
@@ -64,6 +67,7 @@
 	gst_audio_decoder_set_plc
 	gst_audio_decoder_set_plc_aware
 	gst_audio_decoder_set_tolerance
+	gst_audio_decoder_set_use_default_pad_acceptcaps
 	gst_audio_downmix_meta_api_get_type
 	gst_audio_downmix_meta_get_info
 	gst_audio_encoder_allocate_output_buffer
diff --git a/win32/common/libgstpbutils.def b/win32/common/libgstpbutils.def
index d7f365e..774b1d3 100644
--- a/win32/common/libgstpbutils.def
+++ b/win32/common/libgstpbutils.def
@@ -29,6 +29,7 @@
 	gst_discoverer_discover_uri_async
 	gst_discoverer_get_type
 	gst_discoverer_info_copy
+	gst_discoverer_info_from_variant
 	gst_discoverer_info_get_audio_streams
 	gst_discoverer_info_get_container_streams
 	gst_discoverer_info_get_duration
@@ -45,8 +46,10 @@
 	gst_discoverer_info_get_type
 	gst_discoverer_info_get_uri
 	gst_discoverer_info_get_video_streams
+	gst_discoverer_info_to_variant
 	gst_discoverer_new
 	gst_discoverer_result_get_type
+	gst_discoverer_serialize_flags_get_type
 	gst_discoverer_start
 	gst_discoverer_stop
 	gst_discoverer_stream_info_get_caps
@@ -84,6 +87,7 @@
 	gst_encoding_list_available_categories
 	gst_encoding_profile_find
 	gst_encoding_profile_from_discoverer
+	gst_encoding_profile_get_allow_dynamic_output
 	gst_encoding_profile_get_description
 	gst_encoding_profile_get_file_extension
 	gst_encoding_profile_get_format
@@ -95,8 +99,11 @@
 	gst_encoding_profile_get_restriction
 	gst_encoding_profile_get_type
 	gst_encoding_profile_get_type_nick
+	gst_encoding_profile_is_enabled
 	gst_encoding_profile_is_equal
+	gst_encoding_profile_set_allow_dynamic_output
 	gst_encoding_profile_set_description
+	gst_encoding_profile_set_enabled
 	gst_encoding_profile_set_format
 	gst_encoding_profile_set_name
 	gst_encoding_profile_set_presence
@@ -125,6 +132,9 @@
 	gst_install_plugins_context_free
 	gst_install_plugins_context_get_type
 	gst_install_plugins_context_new
+	gst_install_plugins_context_set_confirm_search
+	gst_install_plugins_context_set_desktop_id
+	gst_install_plugins_context_set_startup_notification_id
 	gst_install_plugins_context_set_xid
 	gst_install_plugins_installation_in_progress
 	gst_install_plugins_return_get_name
diff --git a/win32/common/libgstrtp.def b/win32/common/libgstrtp.def
index 0e224a9..ef9ee03 100644
--- a/win32/common/libgstrtp.def
+++ b/win32/common/libgstrtp.def
@@ -9,6 +9,8 @@
 	gst_rtcp_buffer_unmap
 	gst_rtcp_buffer_validate
 	gst_rtcp_buffer_validate_data
+	gst_rtcp_buffer_validate_data_reduced
+	gst_rtcp_buffer_validate_reduced
 	gst_rtcp_ntp_to_unix
 	gst_rtcp_packet_add_rb
 	gst_rtcp_packet_bye_add_ssrc
@@ -52,7 +54,10 @@
 	gst_rtcp_packet_sr_set_sender_info
 	gst_rtcp_sdes_name_to_type
 	gst_rtcp_sdes_type_to_name
+	gst_rtcp_type_get_type
 	gst_rtcp_unix_to_ntp
+	gst_rtcpfb_type_get_type
+	gst_rtcpsdes_type_get_type
 	gst_rtp_base_audio_payload_flush
 	gst_rtp_base_audio_payload_get_adapter
 	gst_rtp_base_audio_payload_get_type
@@ -123,5 +128,7 @@
 	gst_rtp_hdrext_get_ntp_64
 	gst_rtp_hdrext_set_ntp_56
 	gst_rtp_hdrext_set_ntp_64
+	gst_rtp_payload_get_type
 	gst_rtp_payload_info_for_name
 	gst_rtp_payload_info_for_pt
+	gst_rtp_profile_get_type
diff --git a/win32/common/libgstrtsp.def b/win32/common/libgstrtsp.def
index 3fab6de..aa307cc 100644
--- a/win32/common/libgstrtsp.def
+++ b/win32/common/libgstrtsp.def
@@ -14,6 +14,7 @@
 	gst_rtsp_connection_get_remember_session_id
 	gst_rtsp_connection_get_tls
 	gst_rtsp_connection_get_tls_database
+	gst_rtsp_connection_get_tls_interaction
 	gst_rtsp_connection_get_tls_validation_flags
 	gst_rtsp_connection_get_tunnelid
 	gst_rtsp_connection_get_url
@@ -33,6 +34,7 @@
 	gst_rtsp_connection_set_qos_dscp
 	gst_rtsp_connection_set_remember_session_id
 	gst_rtsp_connection_set_tls_database
+	gst_rtsp_connection_set_tls_interaction
 	gst_rtsp_connection_set_tls_validation_flags
 	gst_rtsp_connection_set_tunneled
 	gst_rtsp_connection_write
@@ -56,11 +58,13 @@
 	gst_rtsp_header_field_get_type
 	gst_rtsp_lower_trans_get_type
 	gst_rtsp_message_add_header
+	gst_rtsp_message_add_header_by_name
 	gst_rtsp_message_append_headers
 	gst_rtsp_message_dump
 	gst_rtsp_message_free
 	gst_rtsp_message_get_body
 	gst_rtsp_message_get_header
+	gst_rtsp_message_get_header_by_name
 	gst_rtsp_message_get_type
 	gst_rtsp_message_init
 	gst_rtsp_message_init_data
@@ -74,13 +78,16 @@
 	gst_rtsp_message_parse_request
 	gst_rtsp_message_parse_response
 	gst_rtsp_message_remove_header
+	gst_rtsp_message_remove_header_by_name
 	gst_rtsp_message_set_body
 	gst_rtsp_message_steal_body
 	gst_rtsp_message_take_body
 	gst_rtsp_message_take_header
+	gst_rtsp_message_take_header_by_name
 	gst_rtsp_message_unset
 	gst_rtsp_method_as_text
 	gst_rtsp_method_get_type
+	gst_rtsp_msg_type_get_type
 	gst_rtsp_options_as_text
 	gst_rtsp_options_from_text
 	gst_rtsp_profile_get_type
@@ -89,11 +96,14 @@
 	gst_rtsp_range_get_times
 	gst_rtsp_range_parse
 	gst_rtsp_range_to_string
+	gst_rtsp_range_unit_get_type
 	gst_rtsp_result_get_type
 	gst_rtsp_state_get_type
 	gst_rtsp_status_as_text
 	gst_rtsp_status_code_get_type
 	gst_rtsp_strresult
+	gst_rtsp_time_type_get_type
+	gst_rtsp_trans_mode_get_type
 	gst_rtsp_transport_as_text
 	gst_rtsp_transport_free
 	gst_rtsp_transport_get_manager
diff --git a/win32/common/libgstvideo.def b/win32/common/libgstvideo.def
index cdb6e9f..39b031f 100644
--- a/win32/common/libgstvideo.def
+++ b/win32/common/libgstvideo.def
@@ -6,6 +6,7 @@
 	gst_buffer_add_video_overlay_composition_meta
 	gst_buffer_add_video_region_of_interest_meta
 	gst_buffer_add_video_region_of_interest_meta_id
+	gst_buffer_get_video_meta
 	gst_buffer_get_video_meta_id
 	gst_buffer_get_video_region_of_interest_meta_id
 	gst_buffer_pool_config_get_video_alignment
@@ -30,8 +31,10 @@
 	gst_navigation_message_get_type
 	gst_navigation_message_new_angles_changed
 	gst_navigation_message_new_commands_changed
+	gst_navigation_message_new_event
 	gst_navigation_message_new_mouse_over
 	gst_navigation_message_parse_angles_changed
+	gst_navigation_message_parse_event
 	gst_navigation_message_parse_mouse_over
 	gst_navigation_message_type_get_type
 	gst_navigation_query_get_type
@@ -49,14 +52,17 @@
 	gst_navigation_send_key_event
 	gst_navigation_send_mouse_event
 	gst_video_alignment_reset
+	gst_video_alpha_mode_get_type
 	gst_video_blend
 	gst_video_blend_scale_linear_RGBA
+	gst_video_buffer_flags_get_type
 	gst_video_buffer_pool_get_type
 	gst_video_buffer_pool_new
 	gst_video_calculate_display_ratio
 	gst_video_chroma_flags_get_type
 	gst_video_chroma_from_string
 	gst_video_chroma_method_get_type
+	gst_video_chroma_mode_get_type
 	gst_video_chroma_resample
 	gst_video_chroma_resample_free
 	gst_video_chroma_resample_get_info
@@ -71,15 +77,25 @@
 	gst_video_codec_state_get_type
 	gst_video_codec_state_ref
 	gst_video_codec_state_unref
+	gst_video_color_matrix_get_Kr_Kb
 	gst_video_color_matrix_get_type
+	gst_video_color_primaries_get_info
 	gst_video_color_primaries_get_type
 	gst_video_color_range_get_type
 	gst_video_color_range_offsets
+	gst_video_color_transfer_decode
+	gst_video_color_transfer_encode
 	gst_video_colorimetry_from_string
+	gst_video_colorimetry_is_equal
 	gst_video_colorimetry_matches
 	gst_video_colorimetry_to_string
 	gst_video_convert_sample
 	gst_video_convert_sample_async
+	gst_video_converter_frame
+	gst_video_converter_free
+	gst_video_converter_get_config
+	gst_video_converter_new
+	gst_video_converter_set_config
 	gst_video_crop_meta_api_get_type
 	gst_video_crop_meta_get_info
 	gst_video_decoder_add_to_frame
@@ -105,6 +121,7 @@
 	gst_video_decoder_have_frame
 	gst_video_decoder_merge_tags
 	gst_video_decoder_negotiate
+	gst_video_decoder_proxy_getcaps
 	gst_video_decoder_release_frame
 	gst_video_decoder_set_estimate_rate
 	gst_video_decoder_set_latency
@@ -112,6 +129,12 @@
 	gst_video_decoder_set_needs_format
 	gst_video_decoder_set_output_state
 	gst_video_decoder_set_packetized
+	gst_video_decoder_set_use_default_pad_acceptcaps
+	gst_video_dither_flags_get_type
+	gst_video_dither_free
+	gst_video_dither_line
+	gst_video_dither_method_get_type
+	gst_video_dither_new
 	gst_video_encoder_allocate_output_buffer
 	gst_video_encoder_allocate_output_frame
 	gst_video_encoder_finish_frame
@@ -127,6 +150,7 @@
 	gst_video_encoder_proxy_getcaps
 	gst_video_encoder_set_headers
 	gst_video_encoder_set_latency
+	gst_video_encoder_set_min_pts
 	gst_video_encoder_set_output_state
 	gst_video_event_is_force_key_unit
 	gst_video_event_new_downstream_force_key_unit
@@ -148,25 +172,49 @@
 	gst_video_format_to_string
 	gst_video_frame_copy
 	gst_video_frame_copy_plane
+	gst_video_frame_flags_get_type
 	gst_video_frame_map
+	gst_video_frame_map_flags_get_type
 	gst_video_frame_map_id
 	gst_video_frame_unmap
+	gst_video_gamma_mode_get_type
 	gst_video_gl_texture_upload_meta_api_get_type
 	gst_video_gl_texture_upload_meta_get_info
 	gst_video_gl_texture_upload_meta_upload
+	gst_video_guess_framerate
 	gst_video_info_align
 	gst_video_info_convert
+	gst_video_info_copy
+	gst_video_info_free
 	gst_video_info_from_caps
+	gst_video_info_get_type
 	gst_video_info_init
 	gst_video_info_is_equal
+	gst_video_info_new
 	gst_video_info_set_format
 	gst_video_info_to_caps
+	gst_video_interlace_mode_from_string
 	gst_video_interlace_mode_get_type
+	gst_video_interlace_mode_to_string
+	gst_video_matrix_mode_get_type
 	gst_video_meta_api_get_type
 	gst_video_meta_get_info
 	gst_video_meta_map
 	gst_video_meta_transform_scale_get_quark
 	gst_video_meta_unmap
+	gst_video_multiview_flags_get_type
+	gst_video_multiview_flagset_get_type
+	gst_video_multiview_frame_packing_get_type
+	gst_video_multiview_get_doubled_height_modes
+	gst_video_multiview_get_doubled_size_modes
+	gst_video_multiview_get_doubled_width_modes
+	gst_video_multiview_get_mono_modes
+	gst_video_multiview_get_unpacked_modes
+	gst_video_multiview_guess_half_aspect
+	gst_video_multiview_mode_from_caps_string
+	gst_video_multiview_mode_get_type
+	gst_video_multiview_mode_to_caps_string
+	gst_video_multiview_video_info_change_mode
 	gst_video_orientation_get_hcenter
 	gst_video_orientation_get_hflip
 	gst_video_orientation_get_type
@@ -210,8 +258,22 @@
 	gst_video_overlay_set_render_rectangle
 	gst_video_overlay_set_window_handle
 	gst_video_pack_flags_get_type
+	gst_video_primaries_mode_get_type
 	gst_video_region_of_interest_meta_api_get_type
 	gst_video_region_of_interest_meta_get_info
+	gst_video_resampler_clear
+	gst_video_resampler_flags_get_type
+	gst_video_resampler_init
+	gst_video_resampler_method_get_type
+	gst_video_scaler_2d
+	gst_video_scaler_combine_packed_YUV
+	gst_video_scaler_flags_get_type
+	gst_video_scaler_free
+	gst_video_scaler_get_coeff
+	gst_video_scaler_get_max_taps
+	gst_video_scaler_horizontal
+	gst_video_scaler_new
+	gst_video_scaler_vertical
 	gst_video_sink_center_rect
 	gst_video_sink_get_type
 	gst_video_tile_get_index
diff --git a/win32/common/pbutils-enumtypes.c b/win32/common/pbutils-enumtypes.c
index 2652ec0..99a6f1d 100644
--- a/win32/common/pbutils-enumtypes.c
+++ b/win32/common/pbutils-enumtypes.c
@@ -68,3 +68,24 @@
   }
   return g_define_type_id__volatile;
 }
+
+GType
+gst_discoverer_serialize_flags_get_type (void)
+{
+  static volatile gsize g_define_type_id__volatile = 0;
+  if (g_once_init_enter (&g_define_type_id__volatile)) {
+    static const GFlagsValue values[] = {
+      {GST_DISCOVERER_SERIALIZE_BASIC, "GST_DISCOVERER_SERIALIZE_BASIC",
+          "basic"},
+      {GST_DISCOVERER_SERIALIZE_CAPS, "GST_DISCOVERER_SERIALIZE_CAPS", "caps"},
+      {GST_DISCOVERER_SERIALIZE_TAGS, "GST_DISCOVERER_SERIALIZE_TAGS", "tags"},
+      {GST_DISCOVERER_SERIALIZE_MISC, "GST_DISCOVERER_SERIALIZE_MISC", "misc"},
+      {GST_DISCOVERER_SERIALIZE_ALL, "GST_DISCOVERER_SERIALIZE_ALL", "all"},
+      {0, NULL, NULL}
+    };
+    GType g_define_type_id =
+        g_flags_register_static ("GstDiscovererSerializeFlags", values);
+    g_once_init_leave (&g_define_type_id__volatile, g_define_type_id);
+  }
+  return g_define_type_id__volatile;
+}
diff --git a/win32/common/pbutils-enumtypes.h b/win32/common/pbutils-enumtypes.h
index 30dadfd..1ca0476 100644
--- a/win32/common/pbutils-enumtypes.h
+++ b/win32/common/pbutils-enumtypes.h
@@ -15,6 +15,8 @@
 /* enumerations from "gstdiscoverer.h" */
 GType gst_discoverer_result_get_type (void);
 #define GST_TYPE_DISCOVERER_RESULT (gst_discoverer_result_get_type())
+GType gst_discoverer_serialize_flags_get_type (void);
+#define GST_TYPE_DISCOVERER_SERIALIZE_FLAGS (gst_discoverer_serialize_flags_get_type())
 G_END_DECLS
 
 #endif /* __PB_UTILS_ENUM_TYPES_H__ */
diff --git a/win32/common/video-enumtypes.c b/win32/common/video-enumtypes.c
index a1f3211..e82b178 100644
--- a/win32/common/video-enumtypes.c
+++ b/win32/common/video-enumtypes.c
@@ -7,10 +7,15 @@
 #include "video-format.h"
 #include "video-color.h"
 #include "video-info.h"
+#include "video-dither.h"
 #include "colorbalance.h"
 #include "navigation.h"
 #include "video-chroma.h"
 #include "video-tile.h"
+#include "video-converter.h"
+#include "video-resampler.h"
+#include "video-frame.h"
+#include "video-scaler.h"
 
 /* enumerations from "video-format.h" */
 GType
@@ -74,6 +79,13 @@
       {GST_VIDEO_FORMAT_NV24, "GST_VIDEO_FORMAT_NV24", "nv24"},
       {GST_VIDEO_FORMAT_NV12_64Z32, "GST_VIDEO_FORMAT_NV12_64Z32",
           "nv12-64z32"},
+      {GST_VIDEO_FORMAT_A420_10BE, "GST_VIDEO_FORMAT_A420_10BE", "a420-10be"},
+      {GST_VIDEO_FORMAT_A420_10LE, "GST_VIDEO_FORMAT_A420_10LE", "a420-10le"},
+      {GST_VIDEO_FORMAT_A422_10BE, "GST_VIDEO_FORMAT_A422_10BE", "a422-10be"},
+      {GST_VIDEO_FORMAT_A422_10LE, "GST_VIDEO_FORMAT_A422_10LE", "a422-10le"},
+      {GST_VIDEO_FORMAT_A444_10BE, "GST_VIDEO_FORMAT_A444_10BE", "a444-10be"},
+      {GST_VIDEO_FORMAT_A444_10LE, "GST_VIDEO_FORMAT_A444_10LE", "a444-10le"},
+      {GST_VIDEO_FORMAT_NV61, "GST_VIDEO_FORMAT_NV61", "nv61"},
       {0, NULL, NULL}
     };
     GType g_define_type_id = g_enum_register_static ("GstVideoFormat", values);
@@ -162,6 +174,8 @@
       {GST_VIDEO_COLOR_MATRIX_BT601, "GST_VIDEO_COLOR_MATRIX_BT601", "bt601"},
       {GST_VIDEO_COLOR_MATRIX_SMPTE240M, "GST_VIDEO_COLOR_MATRIX_SMPTE240M",
           "smpte240m"},
+      {GST_VIDEO_COLOR_MATRIX_BT2020, "GST_VIDEO_COLOR_MATRIX_BT2020",
+          "bt2020"},
       {0, NULL, NULL}
     };
     GType g_define_type_id =
@@ -189,6 +203,8 @@
       {GST_VIDEO_TRANSFER_GAMMA28, "GST_VIDEO_TRANSFER_GAMMA28", "gamma28"},
       {GST_VIDEO_TRANSFER_LOG100, "GST_VIDEO_TRANSFER_LOG100", "log100"},
       {GST_VIDEO_TRANSFER_LOG316, "GST_VIDEO_TRANSFER_LOG316", "log316"},
+      {GST_VIDEO_TRANSFER_BT2020_12, "GST_VIDEO_TRANSFER_BT2020_12",
+          "bt2020-12"},
       {0, NULL, NULL}
     };
     GType g_define_type_id =
@@ -218,6 +234,8 @@
           "GST_VIDEO_COLOR_PRIMARIES_SMPTE240M", "smpte240m"},
       {GST_VIDEO_COLOR_PRIMARIES_FILM, "GST_VIDEO_COLOR_PRIMARIES_FILM",
           "film"},
+      {GST_VIDEO_COLOR_PRIMARIES_BT2020, "GST_VIDEO_COLOR_PRIMARIES_BT2020",
+          "bt2020"},
       {0, NULL, NULL}
     };
     GType g_define_type_id =
@@ -252,6 +270,116 @@
 }
 
 GType
+gst_video_multiview_mode_get_type (void)
+{
+  static volatile gsize g_define_type_id__volatile = 0;
+  if (g_once_init_enter (&g_define_type_id__volatile)) {
+    static const GEnumValue values[] = {
+      {GST_VIDEO_MULTIVIEW_MODE_NONE, "GST_VIDEO_MULTIVIEW_MODE_NONE", "none"},
+      {GST_VIDEO_MULTIVIEW_MODE_MONO, "GST_VIDEO_MULTIVIEW_MODE_MONO", "mono"},
+      {GST_VIDEO_MULTIVIEW_MODE_LEFT, "GST_VIDEO_MULTIVIEW_MODE_LEFT", "left"},
+      {GST_VIDEO_MULTIVIEW_MODE_RIGHT, "GST_VIDEO_MULTIVIEW_MODE_RIGHT",
+          "right"},
+      {GST_VIDEO_MULTIVIEW_MODE_SIDE_BY_SIDE,
+          "GST_VIDEO_MULTIVIEW_MODE_SIDE_BY_SIDE", "side-by-side"},
+      {GST_VIDEO_MULTIVIEW_MODE_SIDE_BY_SIDE_QUINCUNX,
+            "GST_VIDEO_MULTIVIEW_MODE_SIDE_BY_SIDE_QUINCUNX",
+          "side-by-side-quincunx"},
+      {GST_VIDEO_MULTIVIEW_MODE_COLUMN_INTERLEAVED,
+            "GST_VIDEO_MULTIVIEW_MODE_COLUMN_INTERLEAVED",
+          "column-interleaved"},
+      {GST_VIDEO_MULTIVIEW_MODE_ROW_INTERLEAVED,
+          "GST_VIDEO_MULTIVIEW_MODE_ROW_INTERLEAVED", "row-interleaved"},
+      {GST_VIDEO_MULTIVIEW_MODE_TOP_BOTTOM,
+          "GST_VIDEO_MULTIVIEW_MODE_TOP_BOTTOM", "top-bottom"},
+      {GST_VIDEO_MULTIVIEW_MODE_CHECKERBOARD,
+          "GST_VIDEO_MULTIVIEW_MODE_CHECKERBOARD", "checkerboard"},
+      {GST_VIDEO_MULTIVIEW_MODE_FRAME_BY_FRAME,
+          "GST_VIDEO_MULTIVIEW_MODE_FRAME_BY_FRAME", "frame-by-frame"},
+      {GST_VIDEO_MULTIVIEW_MODE_MULTIVIEW_FRAME_BY_FRAME,
+            "GST_VIDEO_MULTIVIEW_MODE_MULTIVIEW_FRAME_BY_FRAME",
+          "multiview-frame-by-frame"},
+      {GST_VIDEO_MULTIVIEW_MODE_SEPARATED, "GST_VIDEO_MULTIVIEW_MODE_SEPARATED",
+          "separated"},
+      {0, NULL, NULL}
+    };
+    GType g_define_type_id =
+        g_enum_register_static ("GstVideoMultiviewMode", values);
+    g_once_init_leave (&g_define_type_id__volatile, g_define_type_id);
+  }
+  return g_define_type_id__volatile;
+}
+
+GType
+gst_video_multiview_frame_packing_get_type (void)
+{
+  static volatile gsize g_define_type_id__volatile = 0;
+  if (g_once_init_enter (&g_define_type_id__volatile)) {
+    static const GEnumValue values[] = {
+      {GST_VIDEO_MULTIVIEW_FRAME_PACKING_NONE,
+          "GST_VIDEO_MULTIVIEW_FRAME_PACKING_NONE", "none"},
+      {GST_VIDEO_MULTIVIEW_FRAME_PACKING_MONO,
+          "GST_VIDEO_MULTIVIEW_FRAME_PACKING_MONO", "mono"},
+      {GST_VIDEO_MULTIVIEW_FRAME_PACKING_LEFT,
+          "GST_VIDEO_MULTIVIEW_FRAME_PACKING_LEFT", "left"},
+      {GST_VIDEO_MULTIVIEW_FRAME_PACKING_RIGHT,
+          "GST_VIDEO_MULTIVIEW_FRAME_PACKING_RIGHT", "right"},
+      {GST_VIDEO_MULTIVIEW_FRAME_PACKING_SIDE_BY_SIDE,
+          "GST_VIDEO_MULTIVIEW_FRAME_PACKING_SIDE_BY_SIDE", "side-by-side"},
+      {GST_VIDEO_MULTIVIEW_FRAME_PACKING_SIDE_BY_SIDE_QUINCUNX,
+            "GST_VIDEO_MULTIVIEW_FRAME_PACKING_SIDE_BY_SIDE_QUINCUNX",
+          "side-by-side-quincunx"},
+      {GST_VIDEO_MULTIVIEW_FRAME_PACKING_COLUMN_INTERLEAVED,
+            "GST_VIDEO_MULTIVIEW_FRAME_PACKING_COLUMN_INTERLEAVED",
+          "column-interleaved"},
+      {GST_VIDEO_MULTIVIEW_FRAME_PACKING_ROW_INTERLEAVED,
+            "GST_VIDEO_MULTIVIEW_FRAME_PACKING_ROW_INTERLEAVED",
+          "row-interleaved"},
+      {GST_VIDEO_MULTIVIEW_FRAME_PACKING_TOP_BOTTOM,
+          "GST_VIDEO_MULTIVIEW_FRAME_PACKING_TOP_BOTTOM", "top-bottom"},
+      {GST_VIDEO_MULTIVIEW_FRAME_PACKING_CHECKERBOARD,
+          "GST_VIDEO_MULTIVIEW_FRAME_PACKING_CHECKERBOARD", "checkerboard"},
+      {0, NULL, NULL}
+    };
+    GType g_define_type_id =
+        g_enum_register_static ("GstVideoMultiviewFramePacking", values);
+    g_once_init_leave (&g_define_type_id__volatile, g_define_type_id);
+  }
+  return g_define_type_id__volatile;
+}
+
+GType
+gst_video_multiview_flags_get_type (void)
+{
+  static volatile gsize g_define_type_id__volatile = 0;
+  if (g_once_init_enter (&g_define_type_id__volatile)) {
+    static const GFlagsValue values[] = {
+      {GST_VIDEO_MULTIVIEW_FLAGS_NONE, "GST_VIDEO_MULTIVIEW_FLAGS_NONE",
+          "none"},
+      {GST_VIDEO_MULTIVIEW_FLAGS_RIGHT_VIEW_FIRST,
+          "GST_VIDEO_MULTIVIEW_FLAGS_RIGHT_VIEW_FIRST", "right-view-first"},
+      {GST_VIDEO_MULTIVIEW_FLAGS_LEFT_FLIPPED,
+          "GST_VIDEO_MULTIVIEW_FLAGS_LEFT_FLIPPED", "left-flipped"},
+      {GST_VIDEO_MULTIVIEW_FLAGS_LEFT_FLOPPED,
+          "GST_VIDEO_MULTIVIEW_FLAGS_LEFT_FLOPPED", "left-flopped"},
+      {GST_VIDEO_MULTIVIEW_FLAGS_RIGHT_FLIPPED,
+          "GST_VIDEO_MULTIVIEW_FLAGS_RIGHT_FLIPPED", "right-flipped"},
+      {GST_VIDEO_MULTIVIEW_FLAGS_RIGHT_FLOPPED,
+          "GST_VIDEO_MULTIVIEW_FLAGS_RIGHT_FLOPPED", "right-flopped"},
+      {GST_VIDEO_MULTIVIEW_FLAGS_HALF_ASPECT,
+          "GST_VIDEO_MULTIVIEW_FLAGS_HALF_ASPECT", "half-aspect"},
+      {GST_VIDEO_MULTIVIEW_FLAGS_MIXED_MONO,
+          "GST_VIDEO_MULTIVIEW_FLAGS_MIXED_MONO", "mixed-mono"},
+      {0, NULL, NULL}
+    };
+    GType g_define_type_id =
+        g_flags_register_static ("GstVideoMultiviewFlags", values);
+    g_once_init_leave (&g_define_type_id__volatile, g_define_type_id);
+  }
+  return g_define_type_id__volatile;
+}
+
+GType
 gst_video_flags_get_type (void)
 {
   static volatile gsize g_define_type_id__volatile = 0;
@@ -270,6 +398,49 @@
   return g_define_type_id__volatile;
 }
 
+/* enumerations from "video-dither.h" */
+GType
+gst_video_dither_method_get_type (void)
+{
+  static volatile gsize g_define_type_id__volatile = 0;
+  if (g_once_init_enter (&g_define_type_id__volatile)) {
+    static const GEnumValue values[] = {
+      {GST_VIDEO_DITHER_NONE, "GST_VIDEO_DITHER_NONE", "none"},
+      {GST_VIDEO_DITHER_VERTERR, "GST_VIDEO_DITHER_VERTERR", "verterr"},
+      {GST_VIDEO_DITHER_FLOYD_STEINBERG, "GST_VIDEO_DITHER_FLOYD_STEINBERG",
+          "floyd-steinberg"},
+      {GST_VIDEO_DITHER_SIERRA_LITE, "GST_VIDEO_DITHER_SIERRA_LITE",
+          "sierra-lite"},
+      {GST_VIDEO_DITHER_BAYER, "GST_VIDEO_DITHER_BAYER", "bayer"},
+      {0, NULL, NULL}
+    };
+    GType g_define_type_id =
+        g_enum_register_static ("GstVideoDitherMethod", values);
+    g_once_init_leave (&g_define_type_id__volatile, g_define_type_id);
+  }
+  return g_define_type_id__volatile;
+}
+
+GType
+gst_video_dither_flags_get_type (void)
+{
+  static volatile gsize g_define_type_id__volatile = 0;
+  if (g_once_init_enter (&g_define_type_id__volatile)) {
+    static const GFlagsValue values[] = {
+      {GST_VIDEO_DITHER_FLAG_NONE, "GST_VIDEO_DITHER_FLAG_NONE", "none"},
+      {GST_VIDEO_DITHER_FLAG_INTERLACED, "GST_VIDEO_DITHER_FLAG_INTERLACED",
+          "interlaced"},
+      {GST_VIDEO_DITHER_FLAG_QUANTIZE, "GST_VIDEO_DITHER_FLAG_QUANTIZE",
+          "quantize"},
+      {0, NULL, NULL}
+    };
+    GType g_define_type_id =
+        g_flags_register_static ("GstVideoDitherFlags", values);
+    g_once_init_leave (&g_define_type_id__volatile, g_define_type_id);
+  }
+  return g_define_type_id__volatile;
+}
+
 /* enumerations from "colorbalance.h" */
 GType
 gst_color_balance_type_get_type (void)
@@ -356,6 +527,7 @@
           "GST_NAVIGATION_MESSAGE_COMMANDS_CHANGED", "commands-changed"},
       {GST_NAVIGATION_MESSAGE_ANGLES_CHANGED,
           "GST_NAVIGATION_MESSAGE_ANGLES_CHANGED", "angles-changed"},
+      {GST_NAVIGATION_MESSAGE_EVENT, "GST_NAVIGATION_MESSAGE_EVENT", "event"},
       {0, NULL, NULL}
     };
     GType g_define_type_id =
@@ -494,3 +666,232 @@
   }
   return g_define_type_id__volatile;
 }
+
+/* enumerations from "video-converter.h" */
+GType
+gst_video_alpha_mode_get_type (void)
+{
+  static volatile gsize g_define_type_id__volatile = 0;
+  if (g_once_init_enter (&g_define_type_id__volatile)) {
+    static const GEnumValue values[] = {
+      {GST_VIDEO_ALPHA_MODE_COPY, "GST_VIDEO_ALPHA_MODE_COPY", "copy"},
+      {GST_VIDEO_ALPHA_MODE_SET, "GST_VIDEO_ALPHA_MODE_SET", "set"},
+      {GST_VIDEO_ALPHA_MODE_MULT, "GST_VIDEO_ALPHA_MODE_MULT", "mult"},
+      {0, NULL, NULL}
+    };
+    GType g_define_type_id =
+        g_enum_register_static ("GstVideoAlphaMode", values);
+    g_once_init_leave (&g_define_type_id__volatile, g_define_type_id);
+  }
+  return g_define_type_id__volatile;
+}
+
+GType
+gst_video_chroma_mode_get_type (void)
+{
+  static volatile gsize g_define_type_id__volatile = 0;
+  if (g_once_init_enter (&g_define_type_id__volatile)) {
+    static const GEnumValue values[] = {
+      {GST_VIDEO_CHROMA_MODE_FULL, "GST_VIDEO_CHROMA_MODE_FULL", "full"},
+      {GST_VIDEO_CHROMA_MODE_UPSAMPLE_ONLY,
+          "GST_VIDEO_CHROMA_MODE_UPSAMPLE_ONLY", "upsample-only"},
+      {GST_VIDEO_CHROMA_MODE_DOWNSAMPLE_ONLY,
+          "GST_VIDEO_CHROMA_MODE_DOWNSAMPLE_ONLY", "downsample-only"},
+      {GST_VIDEO_CHROMA_MODE_NONE, "GST_VIDEO_CHROMA_MODE_NONE", "none"},
+      {0, NULL, NULL}
+    };
+    GType g_define_type_id =
+        g_enum_register_static ("GstVideoChromaMode", values);
+    g_once_init_leave (&g_define_type_id__volatile, g_define_type_id);
+  }
+  return g_define_type_id__volatile;
+}
+
+GType
+gst_video_matrix_mode_get_type (void)
+{
+  static volatile gsize g_define_type_id__volatile = 0;
+  if (g_once_init_enter (&g_define_type_id__volatile)) {
+    static const GEnumValue values[] = {
+      {GST_VIDEO_MATRIX_MODE_FULL, "GST_VIDEO_MATRIX_MODE_FULL", "full"},
+      {GST_VIDEO_MATRIX_MODE_INPUT_ONLY, "GST_VIDEO_MATRIX_MODE_INPUT_ONLY",
+          "input-only"},
+      {GST_VIDEO_MATRIX_MODE_OUTPUT_ONLY, "GST_VIDEO_MATRIX_MODE_OUTPUT_ONLY",
+          "output-only"},
+      {GST_VIDEO_MATRIX_MODE_NONE, "GST_VIDEO_MATRIX_MODE_NONE", "none"},
+      {0, NULL, NULL}
+    };
+    GType g_define_type_id =
+        g_enum_register_static ("GstVideoMatrixMode", values);
+    g_once_init_leave (&g_define_type_id__volatile, g_define_type_id);
+  }
+  return g_define_type_id__volatile;
+}
+
+GType
+gst_video_gamma_mode_get_type (void)
+{
+  static volatile gsize g_define_type_id__volatile = 0;
+  if (g_once_init_enter (&g_define_type_id__volatile)) {
+    static const GEnumValue values[] = {
+      {GST_VIDEO_GAMMA_MODE_NONE, "GST_VIDEO_GAMMA_MODE_NONE", "none"},
+      {GST_VIDEO_GAMMA_MODE_REMAP, "GST_VIDEO_GAMMA_MODE_REMAP", "remap"},
+      {0, NULL, NULL}
+    };
+    GType g_define_type_id =
+        g_enum_register_static ("GstVideoGammaMode", values);
+    g_once_init_leave (&g_define_type_id__volatile, g_define_type_id);
+  }
+  return g_define_type_id__volatile;
+}
+
+GType
+gst_video_primaries_mode_get_type (void)
+{
+  static volatile gsize g_define_type_id__volatile = 0;
+  if (g_once_init_enter (&g_define_type_id__volatile)) {
+    static const GEnumValue values[] = {
+      {GST_VIDEO_PRIMARIES_MODE_NONE, "GST_VIDEO_PRIMARIES_MODE_NONE", "none"},
+      {GST_VIDEO_PRIMARIES_MODE_MERGE_ONLY,
+          "GST_VIDEO_PRIMARIES_MODE_MERGE_ONLY", "merge-only"},
+      {GST_VIDEO_PRIMARIES_MODE_FAST, "GST_VIDEO_PRIMARIES_MODE_FAST", "fast"},
+      {0, NULL, NULL}
+    };
+    GType g_define_type_id =
+        g_enum_register_static ("GstVideoPrimariesMode", values);
+    g_once_init_leave (&g_define_type_id__volatile, g_define_type_id);
+  }
+  return g_define_type_id__volatile;
+}
+
+/* enumerations from "video-resampler.h" */
+GType
+gst_video_resampler_method_get_type (void)
+{
+  static volatile gsize g_define_type_id__volatile = 0;
+  if (g_once_init_enter (&g_define_type_id__volatile)) {
+    static const GEnumValue values[] = {
+      {GST_VIDEO_RESAMPLER_METHOD_NEAREST, "GST_VIDEO_RESAMPLER_METHOD_NEAREST",
+          "nearest"},
+      {GST_VIDEO_RESAMPLER_METHOD_LINEAR, "GST_VIDEO_RESAMPLER_METHOD_LINEAR",
+          "linear"},
+      {GST_VIDEO_RESAMPLER_METHOD_CUBIC, "GST_VIDEO_RESAMPLER_METHOD_CUBIC",
+          "cubic"},
+      {GST_VIDEO_RESAMPLER_METHOD_SINC, "GST_VIDEO_RESAMPLER_METHOD_SINC",
+          "sinc"},
+      {GST_VIDEO_RESAMPLER_METHOD_LANCZOS, "GST_VIDEO_RESAMPLER_METHOD_LANCZOS",
+          "lanczos"},
+      {0, NULL, NULL}
+    };
+    GType g_define_type_id =
+        g_enum_register_static ("GstVideoResamplerMethod", values);
+    g_once_init_leave (&g_define_type_id__volatile, g_define_type_id);
+  }
+  return g_define_type_id__volatile;
+}
+
+GType
+gst_video_resampler_flags_get_type (void)
+{
+  static volatile gsize g_define_type_id__volatile = 0;
+  if (g_once_init_enter (&g_define_type_id__volatile)) {
+    static const GEnumValue values[] = {
+      {GST_VIDEO_RESAMPLER_FLAG_NONE, "GST_VIDEO_RESAMPLER_FLAG_NONE", "none"},
+      {0, NULL, NULL}
+    };
+    GType g_define_type_id =
+        g_enum_register_static ("GstVideoResamplerFlags", values);
+    g_once_init_leave (&g_define_type_id__volatile, g_define_type_id);
+  }
+  return g_define_type_id__volatile;
+}
+
+/* enumerations from "video-frame.h" */
+GType
+gst_video_frame_flags_get_type (void)
+{
+  static volatile gsize g_define_type_id__volatile = 0;
+  if (g_once_init_enter (&g_define_type_id__volatile)) {
+    static const GFlagsValue values[] = {
+      {GST_VIDEO_FRAME_FLAG_NONE, "GST_VIDEO_FRAME_FLAG_NONE", "none"},
+      {GST_VIDEO_FRAME_FLAG_INTERLACED, "GST_VIDEO_FRAME_FLAG_INTERLACED",
+          "interlaced"},
+      {GST_VIDEO_FRAME_FLAG_TFF, "GST_VIDEO_FRAME_FLAG_TFF", "tff"},
+      {GST_VIDEO_FRAME_FLAG_RFF, "GST_VIDEO_FRAME_FLAG_RFF", "rff"},
+      {GST_VIDEO_FRAME_FLAG_ONEFIELD, "GST_VIDEO_FRAME_FLAG_ONEFIELD",
+          "onefield"},
+      {GST_VIDEO_FRAME_FLAG_MULTIPLE_VIEW, "GST_VIDEO_FRAME_FLAG_MULTIPLE_VIEW",
+          "multiple-view"},
+      {GST_VIDEO_FRAME_FLAG_FIRST_IN_BUNDLE,
+          "GST_VIDEO_FRAME_FLAG_FIRST_IN_BUNDLE", "first-in-bundle"},
+      {0, NULL, NULL}
+    };
+    GType g_define_type_id =
+        g_flags_register_static ("GstVideoFrameFlags", values);
+    g_once_init_leave (&g_define_type_id__volatile, g_define_type_id);
+  }
+  return g_define_type_id__volatile;
+}
+
+GType
+gst_video_buffer_flags_get_type (void)
+{
+  static volatile gsize g_define_type_id__volatile = 0;
+  if (g_once_init_enter (&g_define_type_id__volatile)) {
+    static const GFlagsValue values[] = {
+      {GST_VIDEO_BUFFER_FLAG_INTERLACED, "GST_VIDEO_BUFFER_FLAG_INTERLACED",
+          "interlaced"},
+      {GST_VIDEO_BUFFER_FLAG_TFF, "GST_VIDEO_BUFFER_FLAG_TFF", "tff"},
+      {GST_VIDEO_BUFFER_FLAG_RFF, "GST_VIDEO_BUFFER_FLAG_RFF", "rff"},
+      {GST_VIDEO_BUFFER_FLAG_ONEFIELD, "GST_VIDEO_BUFFER_FLAG_ONEFIELD",
+          "onefield"},
+      {GST_VIDEO_BUFFER_FLAG_MULTIPLE_VIEW,
+          "GST_VIDEO_BUFFER_FLAG_MULTIPLE_VIEW", "multiple-view"},
+      {GST_VIDEO_BUFFER_FLAG_FIRST_IN_BUNDLE,
+          "GST_VIDEO_BUFFER_FLAG_FIRST_IN_BUNDLE", "first-in-bundle"},
+      {GST_VIDEO_BUFFER_FLAG_LAST, "GST_VIDEO_BUFFER_FLAG_LAST", "last"},
+      {0, NULL, NULL}
+    };
+    GType g_define_type_id =
+        g_flags_register_static ("GstVideoBufferFlags", values);
+    g_once_init_leave (&g_define_type_id__volatile, g_define_type_id);
+  }
+  return g_define_type_id__volatile;
+}
+
+GType
+gst_video_frame_map_flags_get_type (void)
+{
+  static volatile gsize g_define_type_id__volatile = 0;
+  if (g_once_init_enter (&g_define_type_id__volatile)) {
+    static const GFlagsValue values[] = {
+      {GST_VIDEO_FRAME_MAP_FLAG_NO_REF, "GST_VIDEO_FRAME_MAP_FLAG_NO_REF",
+          "no-ref"},
+      {GST_VIDEO_FRAME_MAP_FLAG_LAST, "GST_VIDEO_FRAME_MAP_FLAG_LAST", "last"},
+      {0, NULL, NULL}
+    };
+    GType g_define_type_id =
+        g_flags_register_static ("GstVideoFrameMapFlags", values);
+    g_once_init_leave (&g_define_type_id__volatile, g_define_type_id);
+  }
+  return g_define_type_id__volatile;
+}
+
+/* enumerations from "video-scaler.h" */
+GType
+gst_video_scaler_flags_get_type (void)
+{
+  static volatile gsize g_define_type_id__volatile = 0;
+  if (g_once_init_enter (&g_define_type_id__volatile)) {
+    static const GFlagsValue values[] = {
+      {GST_VIDEO_SCALER_FLAG_NONE, "GST_VIDEO_SCALER_FLAG_NONE", "none"},
+      {GST_VIDEO_SCALER_FLAG_INTERLACED, "GST_VIDEO_SCALER_FLAG_INTERLACED",
+          "interlaced"},
+      {0, NULL, NULL}
+    };
+    GType g_define_type_id =
+        g_flags_register_static ("GstVideoScalerFlags", values);
+    g_once_init_leave (&g_define_type_id__volatile, g_define_type_id);
+  }
+  return g_define_type_id__volatile;
+}
diff --git a/win32/common/video-enumtypes.h b/win32/common/video-enumtypes.h
index 04f1478..090e7ee 100644
--- a/win32/common/video-enumtypes.h
+++ b/win32/common/video-enumtypes.h
@@ -29,9 +29,21 @@
 /* enumerations from "video-info.h" */
 GType gst_video_interlace_mode_get_type (void);
 #define GST_TYPE_VIDEO_INTERLACE_MODE (gst_video_interlace_mode_get_type())
+GType gst_video_multiview_mode_get_type (void);
+#define GST_TYPE_VIDEO_MULTIVIEW_MODE (gst_video_multiview_mode_get_type())
+GType gst_video_multiview_frame_packing_get_type (void);
+#define GST_TYPE_VIDEO_MULTIVIEW_FRAME_PACKING (gst_video_multiview_frame_packing_get_type())
+GType gst_video_multiview_flags_get_type (void);
+#define GST_TYPE_VIDEO_MULTIVIEW_FLAGS (gst_video_multiview_flags_get_type())
 GType gst_video_flags_get_type (void);
 #define GST_TYPE_VIDEO_FLAGS (gst_video_flags_get_type())
 
+/* enumerations from "video-dither.h" */
+GType gst_video_dither_method_get_type (void);
+#define GST_TYPE_VIDEO_DITHER_METHOD (gst_video_dither_method_get_type())
+GType gst_video_dither_flags_get_type (void);
+#define GST_TYPE_VIDEO_DITHER_FLAGS (gst_video_dither_flags_get_type())
+
 /* enumerations from "colorbalance.h" */
 GType gst_color_balance_type_get_type (void);
 #define GST_TYPE_COLOR_BALANCE_TYPE (gst_color_balance_type_get_type())
@@ -59,6 +71,36 @@
 #define GST_TYPE_VIDEO_TILE_TYPE (gst_video_tile_type_get_type())
 GType gst_video_tile_mode_get_type (void);
 #define GST_TYPE_VIDEO_TILE_MODE (gst_video_tile_mode_get_type())
+
+/* enumerations from "video-converter.h" */
+GType gst_video_alpha_mode_get_type (void);
+#define GST_TYPE_VIDEO_ALPHA_MODE (gst_video_alpha_mode_get_type())
+GType gst_video_chroma_mode_get_type (void);
+#define GST_TYPE_VIDEO_CHROMA_MODE (gst_video_chroma_mode_get_type())
+GType gst_video_matrix_mode_get_type (void);
+#define GST_TYPE_VIDEO_MATRIX_MODE (gst_video_matrix_mode_get_type())
+GType gst_video_gamma_mode_get_type (void);
+#define GST_TYPE_VIDEO_GAMMA_MODE (gst_video_gamma_mode_get_type())
+GType gst_video_primaries_mode_get_type (void);
+#define GST_TYPE_VIDEO_PRIMARIES_MODE (gst_video_primaries_mode_get_type())
+
+/* enumerations from "video-resampler.h" */
+GType gst_video_resampler_method_get_type (void);
+#define GST_TYPE_VIDEO_RESAMPLER_METHOD (gst_video_resampler_method_get_type())
+GType gst_video_resampler_flags_get_type (void);
+#define GST_TYPE_VIDEO_RESAMPLER_FLAGS (gst_video_resampler_flags_get_type())
+
+/* enumerations from "video-frame.h" */
+GType gst_video_frame_flags_get_type (void);
+#define GST_TYPE_VIDEO_FRAME_FLAGS (gst_video_frame_flags_get_type())
+GType gst_video_buffer_flags_get_type (void);
+#define GST_TYPE_VIDEO_BUFFER_FLAGS (gst_video_buffer_flags_get_type())
+GType gst_video_frame_map_flags_get_type (void);
+#define GST_TYPE_VIDEO_FRAME_MAP_FLAGS (gst_video_frame_map_flags_get_type())
+
+/* enumerations from "video-scaler.h" */
+GType gst_video_scaler_flags_get_type (void);
+#define GST_TYPE_VIDEO_SCALER_FLAGS (gst_video_scaler_flags_get_type())
 G_END_DECLS
 
 #endif /* __GST_VIDEO_ENUM_TYPES_H__ */
diff --git a/win32/vs8/libgsttcp.vcproj b/win32/vs8/libgsttcp.vcproj
index 6600730..3f59b33 100644
--- a/win32/vs8/libgsttcp.vcproj
+++ b/win32/vs8/libgsttcp.vcproj
@@ -190,6 +190,10 @@
 				>
 			</File>
 			<File
+				RelativePath="..\..\gst\tcp\gstsocketsrc.c"
+				>
+			</File>
+			<File
 				RelativePath="..\..\gst\tcp\gsttcp.c"
 				>
 			</File>