Merge tag 'upstream/1.7.1' into debian-experimental

Upstream version 1.7.1
diff --git a/ChangeLog b/ChangeLog
index 50b09d8..2a5e3d9 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,128 +1,122 @@
-=== release 1.6.2 ===
+=== release 1.7.1 ===
 
-2015-12-14  Sebastian Dröge <slomo@coaxion.net>
+2015-12-24  Sebastian Dröge <slomo@coaxion.net>
 
 	* configure.ac:
-	  releasing 1.6.2
+	  releasing 1.7.1
 
-2015-12-14 19:05:35 +0100  Sebastian Dröge <sebastian@centricular.com>
+2015-12-24 12:22:04 +0100  Sebastian Dröge <sebastian@centricular.com>
 
+	* po/nl.po:
 	* po/sv.po:
+	* po/zh_CN.po:
 	  po: Update translations
 
-2015-12-11 11:01:53 +0000  Tim-Philipp Müller <tim@centricular.com>
+2015-12-11 15:38:00 +0100  Thibault Saunier <tsaunier@gnome.org>
 
-	* gst-libs/gst/rtp/gstrtpbasedepayload.c:
-	  rtpbasedepay: when setting discont flag make sure rtpbuffer is current
-	  Depayloaders will look at rtpbuffer->buffer for the discont flag.
-	  When we set the discont flag on a buffer in the rtp base depayloader
-	  and we have to make the buffer writable, make sure the rtpbuffer
-	  actually contains the newly-flagged buffer, not the original input
-	  buffer. This was introduced with the addition of the process_rtp_packet
-	  vfunc, but would only trigger if the input buffer wasn't flagged
-	  already and was not writable already.
+	* gst-libs/gst/pbutils/encoding-profile.c:
+	  encodebin: Implement an encoding profile serialization format
+	  https://bugzilla.gnome.org/show_bug.cgi?id=759356
 
-2015-12-11 10:25:00 +0000  Tim-Philipp Müller <tim@centricular.com>
+2015-12-21 00:43:49 +0100  Koop Mast <kwm@rainbow-runner.nl>
 
-	* gst-libs/gst/rtp/gstrtpbasedepayload.c:
-	  rtpbasedepay: fix possible refcounting issue when detecting a discont
-	  When we detect a discont and the input buffer isn't already flagged
-	  as discont, handle_buffer() does a gst_buffer_make_writable() on the
-	  input buffer in order to set the flag. This assumed it had ownership
-	  of the input buffer though, which it didn't. This would still work
-	  fine in most scenarios, but could lead to crashes or mini object
-	  unref criticals in some cases when a discont is detected, e.g. when
-	  using pcapparse in front of a depayloader. This problem was
-	  introduced in bc14cdf529e.
-
-2015-12-02 16:16:22 +0200  Sebastian Dröge <sebastian@centricular.com>
-
-	* gst/playback/gstdecodebin2.c:
-	  decodebin: Update buffering messages when removing an element that had buffering pending
-	  Otherwise we'll remove that element while keeping its buffering message in our
-	  list, and because of that never ever report buffering 100% as that element
-	  will always be at a lower percentage.
-	  This fixes e.g. seeking over Period boundaries in DASH and various other
-	  issues when buffering happens between group switches.
-	  Also use a new mutex for protecting the buffering messages. The object lock is
-	  already used by gst_object_has_as_ancestor() and we need to use it now for
-	  checking if the buffering message sender has the to-be-removed element as
-	  ancestor.
-
-2015-12-02 09:00:31 -0500  Evan Callaway <evan.callaway@ipconfigure.com>
-
-	* gst-libs/gst/rtsp/gstrtspdefs.c:
-	* gst-libs/gst/rtsp/gstrtspdefs.h:
-	  rtspconnection: Update capitalization of x-sessioncookie
-	  Some servers incorrectly parse header names with strict case-sensitivity.  For
-	  compatibility with these systems change X-Sessioncookie to x-sessioncookie.
-	  https://bugzilla.gnome.org/show_bug.cgi?id=758921
-
-2015-11-17 09:06:34 +0900  Vineeth TM <vineeth.tm@samsung.com>
-
-	* sys/ximage/ximagesink.c:
-	* sys/xvimage/xvimagesink.c:
-	  xvimagesink/ximagesink: Fix structure memory leak
-	  https://bugzilla.gnome.org/show_bug.cgi?id=758204
-
-2015-11-06 19:31:47 +0100  Edward Hervey <edward@centricular.com>
-
-	* gst/playback/gstdecodebin2.c:
-	  decodebin: Properly deactivate ghostpads
-	  Just setting the ghostpad as flushing wasn't enough. It needs to be
-	  consistent on the internal proxypad also, otherwise you end up in
-	  situations where:
-	  * a pending buffer on the target pad triggers the sticky event
-	  propagation
-	  * the default implementation sees that the proxypad is not flushing,
-	  so it tries to push it to the other pad (the actual ghostpad)
-	  * the ghostpad is flushing, so returns FALSE
-	  * the push_event function sees that pushing the event failed...
-	  * ... and pending buffer push returns GST_FLOW_ERROR, instead of
-	  GST_FLOW_FLUSHING
-	  By using gst_pad_set_active(FALSE), we ensure that both the ghostpad
-	  and the proxypad are flushing/deactivated. The situation above will
-	  no longer occur, and a GST_FLOW_FLUSHING will be returned.
-
-2015-11-05 11:34:07 +0100  Thibault Saunier <tsaunier@gnome.org>
-
-	* gst/volume/gstvolume.c:
-	  volume: Do not try to get binding value array if we are not processing any sample
-	  In some conditions we might process empty buffers, calling
-	  gst_control_binding_get_value_array in that case will lead
-	  to the assertion:
-	  (lt-ges-launch-1.0:18859): GStreamer-CRITICAL **: gst_control_binding_get_value_array: assertion 'values' failed
-
-2015-10-26 21:32:41 +0100  Csaba Toth <tocsanti@gmail.com>
-
-	* gst/tcp/gstmultisocketsink.c:
-	  multisocketsink: fix "client-removed" signal on 64-bit platforms and with bindings
-	  The client-removed signal used G_INT_TYPE instead of G_SOCKET_TYPE
-	  in its definition leading to problems on platforms where the size
-	  of a pointer is larger than the size of an integer, It would also
-	  not work at all with dynamic language bindings.
-	  https://bugzilla.gnome.org/show_bug.cgi?id=757155
-
-2015-10-28 18:36:41 +0100  Joan Pau Beltran <joanpau.beltran@socib.cat>
-
-	* gst/videotestsrc/gstvideotestsrc.c:
-	  videotestsrc: fix handling of Bayer format 'gbrg'
-	  Due to a typo, videotestsrc did not handle the Bayer
-	  format 'gbrg' properly and reported it as invalid,
-	  causing negotiation errors.
-	  https://bugzilla.gnome.org/show_bug.cgi?id=757264
-
-=== release 1.6.1 ===
-
-2015-10-30 16:38:48 +0200  Sebastian Dröge <sebastian@centricular.com>
-
-	* ChangeLog:
-	* NEWS:
-	* RELEASE:
 	* configure.ac:
+	  configure: Make -Bsymbolic check work with clang.
+	  Update the -Bsymbolic check with the version glib has. This version
+	  works with clang.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=759713
+
+2015-12-03 11:53:05 +0900  Kazunori Kobayashi <kkobayas@igel.co.jp>
+
+	* gst-libs/gst/app/gstappsrc.c:
+	  appsrc: Clear is_eos flag when receiving the flush-stop event
+	  The EOS event can be propagated to the downstream elements when
+	  is_eos flag remains set even after leaving the flushing state.
+	  This fix allows this element to normally restart the streaming
+	  after receiving the flush event by clearing the is_eos flag.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=759110
+
+2015-12-16 18:11:05 -0300  Thiago Santos <thiagoss@osg.samsung.com>
+
+	* tests/examples/playback/playback-test.c:
+	  examples: playback-test: remove unused variables
+	  audiosink and videosink string variables are unused
+
+2015-11-30 10:28:55 +1100  Matthew Waters <matthew@centricular.com>
+
+	* gst/playback/gstplaybin2.c:
+	  playbin: only add the template caps when the result is empty
+	  Unconditionally adding the template caps when proxying the caps query will play
+	  havoc with decoders that attempt to choose an output format based on some caps
+	  features.  Creating a sink that does not include those caps features and a
+	  decoder/parser/etc that preferentially chooses some specific caps feature when
+	  available, will always return the decoder/parser/etc template caps and choose a
+	  feature that downstream will be unable to support.
+	  Fix by limiting the addition of the template caps to when the result is actually
+	  empty.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=758212
+
+2015-12-17 13:39:01 +0100  Sebastian Dröge <sebastian@centricular.com>
+
+	* configure.ac:
+	  configure: Don't use AG_GST_CHECK_FEATURE for checking for gio-unix-2.0
+	  It's meant to be used for external plugins that can then all be disabled via
+	  --disable-external. gio-unix-2.0 however is just an optional dependency for
+	  the TCP unit test.
+	  Also when using AG_GST_CHECK_FEATURE like this, in the --disable-external part
+	  there needs to be an AM_CONDITIONAL for the feature with FALSE.
+
+2015-12-16 17:07:54 +0100  Sebastian Dröge <sebastian@centricular.com>
+
+	* gst/playback/gstdecodebin2.c:
+	  Revert "decodebin2: fix deadlock on chain shutdown"
+	  This reverts commit 77dc09c3a9a5e5e371e189f39b5557db440a8dc9.
+	  It can cause the FLUSH_START/STOP events to go to the sink elements, which
+	  then causes state changes and various other problems. We shouldn't really
+	  flush downstream here, the idea is to do *draining*.
+	  Apart from that the testcase for the original bug here works without this
+	  commit now.
+
+2015-12-16 11:12:00 +0000  Luis de Bethencourt <luisbg@osg.samsung.com>
+
+	* gst/tcp/gstmultifdsink.c:
+	  multifdsink: fix typo in GST_WARNING_OBJECT
+	  This should make easier to parse the debug logs.
+	  s/fnctl/fcntl
+
+2014-04-10 15:36:15 +0100  Vincent Penquerc'h <vincent.penquerch@collabora.co.uk>
+
+	* gst/videorate/gstvideorate.c:
+	  videorate: remove dead code
+	  Since the loops increasing count from 0 are always run at least
+	  once (if count < 1), count will always be at least one when
+	  compared to the drop/dup conditions.
+	  Coverity 1139674
+
+2015-12-16 10:45:48 +0100  Wim Taymans <wtaymans@redhat.com>
+
+	* gst-libs/gst/audio/audio-converter.c:
+	* gst-libs/gst/audio/audio-converter.h:
+	* win32/common/libgstaudio.def:
+	  audio-converter: rework the main processing loop
+	  Rework the main processing loop. We now create an audio processing
+	  chain from small core functions. This is very similar to how the
+	  video-converter core works and allows us to statically calculate an
+	  optimal allocation strategy for all possible combinations of operations.
+	  Make sure we support non-interleaved data everywhere.
+	  Add functions to calculate in and out frames and latency.
+
+2015-12-16 10:44:16 +0100  Wim Taymans <wtaymans@redhat.com>
+
+	* gst/audioconvert/gstaudioconvert.c:
+	  audioconvert: clear convert object
+
+2015-12-16 09:35:38 +0100  Sebastian Dröge <sebastian@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:
 	* docs/plugins/inspect/plugin-audioconvert.xml:
 	* docs/plugins/inspect/plugin-audiorate.xml:
@@ -147,56 +141,1038 @@
 	* 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.6.1
+	  docs: update to git
 
-2015-10-30 16:22:09 +0200  Sebastian Dröge <sebastian@centricular.com>
+2015-12-14 13:59:02 -0500  Nicolas Dufresne <nicolas.dufresne@collabora.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/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:
-	  Update .po files
+	* ext/alsa/gstalsasrc.c:
+	  Revert "alsasrc: Disable HW timestamp"
+	  This reverts commit 3642e9a3913a35c00f379034780c27298d09929c.
 
-2015-10-30 14:27:21 +0200  Sebastian Dröge <sebastian@centricular.com>
+2015-11-10 12:54:23 -0500  Xavier Claessens <xavier.claessens@collabora.com>
 
-	* po/nl.po:
-	* po/zh_CN.po:
-	  po: Update translations
+	* gst-libs/gst/allocators/gstfdmemory.h:
+	* gst-libs/gst/app/gstappsink.h:
+	* gst-libs/gst/app/gstappsrc.h:
+	* gst-libs/gst/audio/audio-info.h:
+	* gst-libs/gst/audio/gstaudiobasesink.h:
+	* gst-libs/gst/audio/gstaudiobasesrc.h:
+	* gst-libs/gst/audio/gstaudiocdsrc.h:
+	* gst-libs/gst/audio/gstaudioclock.h:
+	* gst-libs/gst/audio/gstaudiodecoder.h:
+	* gst-libs/gst/audio/gstaudioencoder.h:
+	* gst-libs/gst/audio/gstaudiofilter.h:
+	* gst-libs/gst/audio/gstaudioringbuffer.h:
+	* gst-libs/gst/audio/gstaudiosink.h:
+	* gst-libs/gst/audio/gstaudiosrc.h:
+	* gst-libs/gst/pbutils/encoding-profile.h:
+	* gst-libs/gst/pbutils/encoding-target.h:
+	* gst-libs/gst/pbutils/gstdiscoverer.h:
+	* gst-libs/gst/pbutils/install-plugins.h:
+	* gst-libs/gst/rtp/gstrtpbaseaudiopayload.h:
+	* gst-libs/gst/rtp/gstrtpbasedepayload.h:
+	* gst-libs/gst/rtp/gstrtpbasepayload.h:
+	* gst-libs/gst/rtsp/gstrtspurl.h:
+	* gst-libs/gst/sdp/gstmikey.h:
+	* gst-libs/gst/sdp/gstsdpmessage.h:
+	* gst-libs/gst/tag/gsttagdemux.h:
+	* gst-libs/gst/tag/gsttagmux.h:
+	* gst-libs/gst/video/colorbalancechannel.h:
+	* gst-libs/gst/video/gstvideodecoder.h:
+	* gst-libs/gst/video/gstvideoencoder.h:
+	* gst-libs/gst/video/gstvideofilter.h:
+	* gst-libs/gst/video/gstvideopool.h:
+	* gst-libs/gst/video/gstvideosink.h:
+	* gst-libs/gst/video/gstvideoutils.h:
+	* gst-libs/gst/video/video-info.h:
+	* gst-libs/gst/video/video-overlay-composition.h:
+	  base: Add g_autoptr() support to all types
+	  https://bugzilla.gnome.org/show_bug.cgi?id=754464
+
+2015-09-24 18:26:51 -0400  Nicolas Dufresne <nicolas.dufresne@collabora.co.uk>
+
+	* ext/alsa/gstalsasrc.c:
+	  alsasrc: Disable HW timestamp
+	  This is a workaround for broken pulse module.
+
+2015-12-14 19:03:33 +0100  Sebastian Dröge <sebastian@centricular.com>
+
+	* gst-libs/gst/rtsp/gstrtspconnection.c:
+	  rtspconnection: Properly initialize stack-allocated RTSP message to all-zeroes
+
+2015-12-14 10:57:19 -0500  Evan Callaway <evan.callaway@ipconfigure.com>
+
+	* gst-libs/gst/rtsp/gstrtspconnection.c:
+	  rtspconnection: Use relative URI for non-proxy tunneled requests
+	  Match the section 5.1.2 of the HTTP/1.0 spec by using relative URIs unless we
+	  are using a proxy server. Also, send Host header for compatability with
+	  HTTP/1.1 and some HTTP/1.0 servers.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=758922
+
+2015-12-14 09:10:16 -0500  Evan Callaway <evan.callaway@ipconfigure.com>
+
+	* docs/libs/gst-plugins-base-libs-sections.txt:
+	* gst-libs/gst/rtsp/gstrtspconnection.c:
+	* gst-libs/gst/rtsp/gstrtspconnection.h:
+	* win32/common/libgstrtsp.def:
+	  rtspconnection: Support authentication during tunneling setup
+	  gst_rtsp_connection_connect_with_response accepts a response pointer
+	  which it fills with the response from setup_tunneling if the
+	  connection is configured to be tunneled.  The motivation for this is to
+	  allow the caller to inspect the response header to determine if
+	  additional authentication is required so that the connection can be
+	  retried with the appropriate authentication headers.
+	  The function prototype of gst_rtsp_connection_connect has been
+	  preserved for compatability with existing code and wraps
+	  gst_rtsp_connection_connect_with_response.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=749596
+
+2015-12-14 13:11:21 +0100  Sebastian Dröge <sebastian@centricular.com>
+
+	* gst-libs/gst/rtp/gstrtpbasedepayload.c:
+	  rtpbasedepayload: Check if the packet loss event actually has timestamp and duration fields
+	  CID 1139615
+
+2015-12-10 17:46:26 +0100  Wim Taymans <wtaymans@redhat.com>
+
+	* gst-libs/gst/audio/audio-channel-mix.c:
+	* gst-libs/gst/audio/audio-channel-mix.h:
+	* gst-libs/gst/audio/audio-converter.c:
+	* gst-libs/gst/audio/audio-quantize.c:
+	* gst-libs/gst/audio/audio-quantize.h:
+	* gst/audioconvert/gstaudioconvert.c:
+	  audio: adapt API for non-interleaved formats
+	  Allow an array of sample blocks to be passed to the channel mix and
+	  quantizer functions to support non-interleaved formats.
+
+2015-12-10 16:26:40 +0100  Wim Taymans <wtaymans@redhat.com>
+
+	* gst-libs/gst/audio/audio-converter.c:
+	* gst-libs/gst/audio/audio-converter.h:
+	  audio-converter: improve API for non-interleaved formats
+	  Make it possible to pass an array of sample blocks when dealing with
+	  non-interleaved formats.
+
+2015-12-12 17:49:28 +0100  Luis de Bethencourt <luisbg@osg.samsung.com>
+
+	* gst-libs/gst/riff/riff-media.c:
+	  riff: add FourCC aliases
+	  Support media using the aliases defined in http://www.fourcc.org/ that are
+	  exact duplicates of already known codes.
+
+2015-12-12 17:04:21 +0100  Luis de Bethencourt <luisbg@osg.samsung.com>
+
+	* gst-libs/gst/riff/riff-media.c:
+	  riff: use defined FourCC
+	  Make gst_riff_create_video_caps() use the FourCC available in riff-ids.h,
+	  like gst_riff_create_audio_caps() does.
+
+2015-12-11 14:42:09 +0000  Julien Isorce <j.isorce@samsung.com>
+
+	* gst-libs/gst/video/gstvideodecoder.c:
+	  videodecoder: add some debug around pool negotiation
+	  It lets us know easily which pool is activated or
+	  inactivated during the negotiation.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=720597
+
+2015-12-11 21:42:00 +0800  Song Bing <b06498@freescale.com>
+
+	* gst-libs/gst/video/convertframe.c:
+	  video/convertframe: Add crop meta support via videocrop
+	  https://bugzilla.gnome.org/show_bug.cgi?id=759329
+
+2015-12-11 11:01:53 +0000  Tim-Philipp Müller <tim@centricular.com>
+
+	* gst-libs/gst/rtp/gstrtpbasedepayload.c:
+	  rtpbasedepay: when setting discont flag make sure rtpbuffer is current
+	  Depayloaders will look at rtpbuffer->buffer for the discont flag.
+	  When we set the discont flag on a buffer in the rtp base depayloader
+	  and we have to make the buffer writable, make sure the rtpbuffer
+	  actually contains the newly-flagged buffer, not the original input
+	  buffer. This was introduced with the addition of the process_rtp_packet
+	  vfunc, but would only trigger if the input buffer wasn't flagged
+	  already and was not writable already.
+
+2015-12-11 00:18:30 +0000  Tim-Philipp Müller <tim@centricular.com>
+
+	* tests/check/libs/rtpbasedepayload.c:
+	  tests: rtpbasedepayload: add test for seqnum gap discont setting
+	  The problem was triggered only when the input buffers were not
+	  writable, so add extra ref to test this code path.
+
+2015-12-11 10:25:00 +0000  Tim-Philipp Müller <tim@centricular.com>
+
+	* gst-libs/gst/rtp/gstrtpbasedepayload.c:
+	  rtpbasedepay: fix possible refcounting issue when detecting a discont
+	  When we detect a discont and the input buffer isn't already flagged
+	  as discont, handle_buffer() does a gst_buffer_make_writable() on the
+	  input buffer in order to set the flag. This assumed it had ownership
+	  of the input buffer though, which it didn't. This would still work
+	  fine in most scenarios, but could lead to crashes or mini object
+	  unref criticals in some cases when a discont is detected, e.g. when
+	  using pcapparse in front of a depayloader. This problem was
+	  introduced in bc14cdf529e.
+
+2015-12-10 12:18:04 +0100  Wim Taymans <wtaymans@redhat.com>
+
+	* gst/tcp/gstmultisocketsink.c:
+	* gst/tcp/gstmultisocketsink.h:
+	  multisocketsink: add GstNetworkMessage event
+	  Add a property and logic to send a GstNetworkMessage event containing
+	  the message that was received from a client. This can be used to
+	  implement simply bidirectional communication.
+
+2015-12-10 12:14:37 +0100  Wim Taymans <wtaymans@redhat.com>
+
+	* gst/tcp/gstmultisocketsink.c:
+	* gst/tcp/gstmultisocketsink.h:
+	  multisocketsink: add dispatched event
+	  Add a property and logic to send a GstNetworkMessageDispatched
+	  event upstream to notify that a buffer has been sent. This can be used
+	  to keep track of what client received what buffers.
+
+2015-12-04 11:17:37 +0100  Wim Taymans <wtaymans@redhat.com>
+
+	* gst/tcp/gstsocketsrc.c:
+	* gst/tcp/gstsocketsrc.h:
+	  socketsrc: handle GstNetworkMessage events
+	  Add a property to handle GstNetworkMessage events. These events contain
+	  a buffer that is sent on the socket to allow for simple bidirectional
+	  communication.
+
+2015-12-09 17:16:26 +0100  Wim Taymans <wtaymans@redhat.com>
+
+	* gst-libs/gst/audio/audio-converter.c:
+	* gst-libs/gst/audio/audio-converter.h:
+	* gst/audioconvert/gstaudioconvert.c:
+	  audio-convert: improve converter API
+	  Improve the converter API to allow for an max input and output number of
+	  samples and return the number of consumed/produced samples.
+
+2015-12-08 11:15:34 +0100  Philippe Normand <philn@igalia.com>
+
+	* gst-libs/gst/app/gstappsrc.c:
+	  appsrc: duration query support based on the size property
+	  https://bugzilla.gnome.org/show_bug.cgi?id=759126
+
+2015-12-07 09:08:05 -0500  Nicolas Dufresne <nicolas.dufresne@collabora.co.uk>
+
+	* autogen.sh:
+	* common:
+	  Automatic update of common submodule
+	  From b319909 to 86e4663
+
+2015-12-04 12:25:11 +0100  Wim Taymans <wtaymans@redhat.com>
+
+	* gst/tcp/gstmultisocketsink.c:
+	  multisocketsink: let downstream know we support metadata
+	  Let downstream know that we support GstNetControlMessage metadata API.
+
+2015-12-03 16:38:45 +0100  Edward Hervey <edward@centricular.com>
+
+	* gst-libs/gst/video/gstvideodecoder.c:
+	  videodecoder: Avoid pushing buffers before segment start
+	  In the case where the stream doesn't have a framerate set and the frames
+	  don't have a duration set, we still want to use the clipping path to
+	  make sure we don't push buffers outside of the segment.
+	  The problem was the previous iteration was setting a duration of 2s, which
+	  meant that any buffer which was less than 2s before the segment start would
+	  end up getting pushed.
+	  Instead, use a saner 40ms (25fps single frame duration) to figure out whether
+	  the frame could be within the segment or not
+
+2015-12-02 20:19:43 -0800  Reynaldo H. Verdejo Pinochet <reynaldo@osg.samsung.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/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:
+	  Drop usage of deprecated g-ir-scanner --strip-prefix flag
+
+2015-12-02 18:16:05 +0000  Tim-Philipp Müller <tim@centricular.com>
+
+	* gst/playback/gstdecodebin2.c:
+	  decodebin2: fix "Attempt to unlock mutex that was not locked"
+	  Introduced in commit ee44337f, caused the decodebin
+	  test_text_plain_streams unit test to abort.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=752651
+
+2015-11-16 14:50:58 +0100  Edward Hervey <edward@centricular.com>
+
+	* gst/playback/gstrawcaps.h:
+	  playback: Expose XSUB formats by default
+	  This is a workaround, we should remove this once we have a proper
+	  decoder
+
+2015-11-16 14:50:30 +0100  Edward Hervey <edward@centricular.com>
+
+	* gst-libs/gst/pbutils/gstdiscoverer.c:
+	  discoverer: Also consider XSUB as a subtitle format
+
+2015-11-16 14:49:55 +0100  Edward Hervey <edward@centricular.com>
+
+	* gst-libs/gst/pbutils/descriptions.c:
+	  pbutils: Add description for XSUB subpicture format
+
+2015-11-16 14:49:19 +0100  Edward Hervey <edward@centricular.com>
+
+	* gst-libs/gst/riff/riff-media.c:
+	  riff: 'DXSA' is the same as 'DXSB'
+	  Which is subpicture/x-xsub
+
+2015-07-21 09:58:56 +0200  Edward Hervey <bilboed@bilboed.com>
+
+	* gst/playback/gststreamsynchronizer.c:
+	  streamsynchronizer: Rename GstStream => GstSyncStream
+	  Avoid clashes with future GstStream from core
+
+2015-12-02 09:00:31 -0500  Evan Callaway <evan.callaway@ipconfigure.com>
+
+	* gst-libs/gst/rtsp/gstrtspdefs.c:
+	* gst-libs/gst/rtsp/gstrtspdefs.h:
+	  rtspconnection: Update capitalization of x-sessioncookie
+	  Some servers incorrectly parse header names with strict case-sensitivity.  For
+	  compatibility with these systems change X-Sessioncookie to x-sessioncookie.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=758921
+
+2015-12-02 16:16:22 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+	* gst/playback/gstdecodebin2.c:
+	  decodebin: Update buffering messages when removing an element that had buffering pending
+	  Otherwise we'll remove that element while keeping its buffering message in our
+	  list, and because of that never ever report buffering 100% as that element
+	  will always be at a lower percentage.
+	  This fixes e.g. seeking over Period boundaries in DASH and various other
+	  issues when buffering happens between group switches.
+	  Also use a new mutex for protecting the buffering messages. The object lock is
+	  already used by gst_object_has_as_ancestor() and we need to use it now for
+	  checking if the buffering message sender has the to-be-removed element as
+	  ancestor.
+
+2015-12-02 09:52:19 +0100  Wim Taymans <wtaymans@redhat.com>
+
+	* gst/tcp/gstmultisocketsink.c:
+	* gst/tcp/gstmultisocketsink.h:
+	  multisocketsink: keep on reading when we stop sending
+	  When we stop sending because we need more data, still keep a GSource
+	  around to receive data from the clients.
+	  Also handle read and write in the same go.
+
+2015-12-01 19:57:10 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+	* gst-libs/gst/audio/gstaudiobasesrc.c:
+	  audiobasesrc: Post latency message on the bus after set_caps()
+	  The latency is only known once the caps are known, and might change
+	  whenever the caps are changing.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=758911
+
+2015-09-25 14:47:48 +0200  Michael Olbrich <m.olbrich@pengutronix.de>
+
+	* gst-libs/gst/audio/gstaudiobasesink.c:
+	  audiobasesink: Post latency message on the bus after set_caps()
+	  Any latency query before this will not get the correct latency so a new
+	  latency query should be triggered once the audio sink know its own latency.
+	  Without this the initial latency query from the pipeline arrives too early
+	  sometimes and the resulting latency is too short.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=758911
+
+2015-11-06 14:21:14 +0000  Thomas Bluemel <tbluemel@control4.com>
+
+	* gst/playback/gstdecodebin2.c:
+	  [PATCH] Fix a race condition accessing the decode_chain field.
+	  Make sure that any access to the GstDecodeBin's decode_chain
+	  field is protected using the EXPOSE_LOCK.  Also add a simple
+	  reference counter to the GstDecodeChain structure so that when
+	  the type_found signal fires it can hold onto the decode chain
+	  even while the EXPOSE_LOCK is not held.  This should fix a
+	  race condition if the type_found signal fires right in the
+	  middle of a state change that messes with the same decode
+	  chain.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=755260
+
+2015-08-20 17:30:38 +0100  Vincent Penquerc'h <vincent.penquerch@collabora.co.uk>
+
+	* gst/playback/gstdecodebin2.c:
+	  decodebin: early out on pad-added when the pad is inactive
+	  The pad may be recently deactivated if the element is switched
+	  back down very quickly.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=752651
+
+2015-08-20 17:29:36 +0100  Vincent Penquerc'h <vincent.penquerch@collabora.co.uk>
+
+	* gst/playback/gstdecodebin2.c:
+	  decodebin: lock the expose lock around decode_chain use
+	  Helps with a crash in decodebin when quickly switching states.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=752651
+
+2015-11-28 14:24:55 +0000  Luis de Bethencourt <luisbg@osg.samsung.com>
+
+	* gst-libs/gst/pbutils/codec-utils.c:
+	  codec-utils: accept wrong version field in OpusHead header
+	  Some Opus files found on the wild have 0 in the version field of the
+	  OpusHead header, instead of the correct value of 1. The files still
+	  play, don't make this error fatal.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=758754
+
+2015-11-26 11:33:02 +0000  William Manley <will@williammanley.net>
+
+	* gst-libs/gst/allocators/gstfdmemory.c:
+	  allocators: add debug category for fd memory and allocator
+	  Debugging can now be viewed by setting GST_DEBUG=fdmemory:9
+	  https://bugzilla.gnome.org/show_bug.cgi?id=758744
+
+2015-11-20 20:18:34 +0000  Tim-Philipp Müller <tim@centricular.com>
+
+	* tests/check/libs/tag.c:
+	  tests: tags: add unit test for ID3v2 PRIVATE_DATA tag extraction
+	  https://bugzilla.gnome.org/show_bug.cgi?id=730926
+
+2014-09-29 14:17:39 +0530  Ravi Kiran K N <ravi.kiran@samsung.com>
+
+	* gst-libs/gst/tag/gstid3tag.c:
+	* gst-libs/gst/tag/id3v2frames.c:
+	  id3v2frames: Handle private frames
+	  Handle PRIV ID3 tag having owner information (string)
+	  and binary data, add to tag messages list.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=730926
+
+2015-11-20 19:15:22 +0000  Tim-Philipp Müller <tim@centricular.com>
+
+	* gst-libs/gst/tag/id3v2.c:
+	  tags: id3: make sure to register private-id3v2-frame tag before using it
+
+2015-11-17 17:07:37 +0100  Ognyan Tonchev <ognyan@axis.com>
+
+	* gst-libs/gst/rtsp/gstrtspconnection.c:
+	* tests/check/libs/rtspconnection.c:
+	  rtspconnection: Add support for parsing custom headers
+	  https://bugzilla.gnome.org/show_bug.cgi?id=758235
+
+2015-11-15 02:58:54 -0800  Reynaldo H. Verdejo Pinochet <reynaldo@osg.samsung.com>
+
+	* gst-libs/gst/pbutils/encoding-profile.c:
+	* gst-libs/gst/pbutils/encoding-target.c:
+	* gst-libs/gst/rtsp/gstrtspmessage.c:
+	* gst-libs/gst/sdp/gstsdpmessage.c:
+	* tests/examples/encoding/encoding.c:
+	  Remove unnecessary NULL checks before g_free()
+	  g_free() is NULL-safe
+
+2015-11-17 09:06:34 +0900  Vineeth TM <vineeth.tm@samsung.com>
+
+	* sys/ximage/ximagesink.c:
+	* sys/xvimage/xvimagesink.c:
+	  xvimagesink/ximagesink: Fix structure memory leak
+	  https://bugzilla.gnome.org/show_bug.cgi?id=758204
+
+2015-11-12 14:39:17 +0000  Luis de Bethencourt <luisbg@osg.samsung.com>
+
+	* gst-libs/gst/pbutils/codec-utils.c:
+	  codec-utils: guint8 can't hold value over 255
+	  channels is a guint8, so the max value is 255 and checking if it value is
+	  > 256 will never be false.
+	  CID 1338687, CID 1338688
+
+2015-11-12 14:18:03 +0000  Luis de Bethencourt <luisbg@osg.samsung.com>
+
+	* gst-libs/gst/audio/audio-converter.c:
+	  audio-converter: remove unneeded check for unsigned < 0
+	  Commit ff6d1a2a25b247688f38e117782a6b43d525706a changed sample's type from
+	  gint to gsize (and renamed it to in_samples). gsize is an unsigned long,
+	  which means it can never be a negative value and the check making sure that
+	  in_samples is >= 0 is never going to be false. Removing it.
+	  CID 1338689
+
+2015-11-11 14:44:55 +0900  Vineeth TM <vineeth.tm@samsung.com>
+
+	* tests/check/libs/video.c:
+	  tests:video: Fix overlay rectangle and buffer leak
+	  Created overlay rectangle is not being freed in video tests
+	  pix2 buffer is being created and not freed
+	  https://bugzilla.gnome.org/show_bug.cgi?id=757927
+
+2015-11-11 14:37:21 +0900  Vineeth TM <vineeth.tm@samsung.com>
+
+	* gst-libs/gst/pbutils/encoding-target.c:
+	  pbutils:encoding-target: Fix string memory leak
+	  https://bugzilla.gnome.org/show_bug.cgi?id=757926
+
+2015-11-11 15:02:39 +0900  Vineeth TM <vineeth.tm@samsung.com>
+
+	* gst-libs/gst/audio/audio-quantize.c:
+	  audio-quantize: Fix dither_buffer memory leak
+	  https://bugzilla.gnome.org/show_bug.cgi?id=757928
+
+2015-11-11 00:59:16 +1100  Jan Schmidt <jan@centricular.com>
+
+	* ext/vorbis/gstvorbisdec.c:
+	  vorbisdec: Re-init on new caps
+	  If we get new input caps, then reset the decoder
+	  ready for new headers and fresh data. Makes
+	  chained oggs work when reusing the decoder.
+
+2015-11-02 23:12:19 +1100  Matthew Waters <matthew@centricular.com>
+
+	* docs/libs/gst-plugins-base-libs-docs.sgml:
+	* docs/libs/gst-plugins-base-libs-sections.txt:
+	* gst-libs/gst/video/Makefile.am:
+	* gst-libs/gst/video/gstvideoaffinetransformationmeta.c:
+	* gst-libs/gst/video/gstvideoaffinetransformationmeta.h:
+	* win32/common/libgstvideo.def:
+	  videometa: add GstVideoAffineTransformationMeta
+	  Adds a simple 4x4 affine transformations meta for passing arbitrary
+	  transformations on buffers.
+	  Based on patch by Matthieu Bouron
+	  https://bugzilla.gnome.org/show_bug.cgi?id=731791
+
+2015-11-10 09:52:24 +0100  Wim Taymans <wtaymans@redhat.com>
+
+	* gst-libs/gst/audio/audio-converter.c:
+	* gst-libs/gst/audio/audio-converter.h:
+	* gst/audioconvert/gstaudioconvert.c:
+	  audio-converter: add output size argument
+	  Make it possible to have a different number of output samples than input
+	  samples when we, for example, want to add resampling later.
+
+2015-11-07 00:43:55 +0100  Thibault Saunier <tsaunier@gnome.org>
+
+	* gst-libs/gst/pbutils/gstdiscoverer.c:
+	  discoverer: Check API arguments and assert if needed
+
+2015-11-06 19:31:47 +0100  Edward Hervey <edward@centricular.com>
+
+	* gst/playback/gstdecodebin2.c:
+	  decodebin: Properly deactivate ghostpads
+	  Just setting the ghostpad as flushing wasn't enough. It needs to be
+	  consistent on the internal proxypad also, otherwise you end up in
+	  situations where:
+	  * a pending buffer on the target pad triggers the sticky event
+	  propagation
+	  * the default implementation sees that the proxypad is not flushing,
+	  so it tries to push it to the other pad (the actual ghostpad)
+	  * the ghostpad is flushing, so returns FALSE
+	  * the push_event function sees that pushing the event failed...
+	  * ... and pending buffer push returns GST_FLOW_ERROR, instead of
+	  GST_FLOW_FLUSHING
+	  By using gst_pad_set_active(FALSE), we ensure that both the ghostpad
+	  and the proxypad are flushing/deactivated. The situation above will
+	  no longer occur, and a GST_FLOW_FLUSHING will be returned.
+
+2015-11-06 18:11:41 +0000  Tim-Philipp Müller <tim@centricular.com>
+
+	* gst/audioconvert/gstaudioconvertorc-dist.c:
+	* gst/audioconvert/gstaudioconvertorc-dist.h:
+	* gst/audioconvert/gstaudioconvertorc.orc:
+	* gst/audioconvert/plugin.c:
+	  audioconvert: fix build
+	  Don't include file that is no longer generated, and remove some
+	  files that are no longer needed because they have moved into the
+	  lib. Fixes distcheck.
+
+2015-11-06 18:00:41 +0100  Wim Taymans <wtaymans@redhat.com>
+
+	* gst-libs/gst/audio/audio-converter.c:
+	  audio-converter: require interleaved samples and no resampling
+	  We can't yet do resampling or anything other than interleaved audio.
+
+2015-11-06 17:54:21 +0100  Wim Taymans <wtaymans@redhat.com>
+
+	* gst-libs/gst/audio/gstaudiopack-dist.c:
+	* gst-libs/gst/audio/gstaudiopack-dist.h:
+	  audio: update ORC dist files
+
+2015-11-06 17:49:00 +0100  Wim Taymans <wtaymans@redhat.com>
+
+	* docs/plugins/Makefile.am:
+	* gst-libs/gst/audio/Makefile.am:
+	* gst-libs/gst/audio/audio-converter.c:
+	* gst-libs/gst/audio/audio-converter.h:
+	* gst-libs/gst/audio/audio.h:
+	* gst-libs/gst/audio/gstaudiopack.orc:
+	* gst/audioconvert/Makefile.am:
+	* gst/audioconvert/audioconvert.c:
+	* gst/audioconvert/audioconvert.h:
+	* gst/audioconvert/gstaudioconvert.h:
+	* tests/check/Makefile.am:
+	* win32/common/libgstaudio.def:
+	  audio-converter: move audio converter to audio libs
+	  Move the audio-converter helper to the audio library.
+
+2015-11-06 17:39:33 +0100  Wim Taymans <wtaymans@redhat.com>
+
+	* gst-libs/gst/audio/Makefile.am:
+	* gst-libs/gst/audio/audio-channel-mix.c:
+	* gst-libs/gst/audio/audio-channel-mix.h:
+	* gst-libs/gst/audio/audio.h:
+	* gst/audioconvert/Makefile.am:
+	* gst/audioconvert/audioconvert.c:
+	* gst/audioconvert/audioconvert.h:
+	* gst/audioconvert/gstaudioconvert.c:
+	* gst/audioconvert/gstchannelmix.c:
+	* gst/audioconvert/gstchannelmix.h:
+	* win32/common/libgstaudio.def:
+	  audio-channel-mix: move channel mixer to audio libs
+	  Move the channel mixer code to the audio library
+
+2015-11-06 17:29:22 +0100  Wim Taymans <wtaymans@redhat.com>
+
+	* gst-libs/gst/audio/audio-channels.c:
+	* gst-libs/gst/audio/audio-info.c:
+	* gst-libs/gst/audio/audio.c:
+	* gst/audioconvert/audioconvert.c:
+	* gst/audioconvert/gstaudioconvert.c:
+	* gst/audioconvert/gstchannelmix.c:
+	  audio: add debug categories
+
+2015-11-06 16:42:35 +0100  Wim Taymans <wtaymans@redhat.com>
+
+	* gst/audioconvert/gstchannelmix.c:
+	* gst/audioconvert/gstchannelmix.h:
+	  channelmix: don't limit channelpositions
+	  Don't set a limit on the channel positions, just like the metadata.
+
+2015-11-06 16:03:20 +0100  Wim Taymans <wtaymans@redhat.com>
+
+	* gst/audioconvert/audioconvert.c:
+	* gst/audioconvert/gstchannelmix.c:
+	* gst/audioconvert/gstchannelmix.h:
+	  channelmix: simplify API a little
+	  Remove the format and layout from the mix_samples function and use the
+	  format when creating the channel mixer object. Also use a flag to handle
+	  the unlikely case of non-interleaved samples like we do elsewhere.
+
+2015-11-06 15:50:34 +0100  Wim Taymans <wtaymans@redhat.com>
+
+	* gst/audioconvert/audioconvert.c:
+	* gst/audioconvert/gstchannelmix.c:
+	* gst/audioconvert/gstchannelmix.h:
+	  channelmix: GstChannel -> GstAudioChannel
+	  Rename GstChannel to GstAudioChannel
+
+2015-11-06 13:02:19 +0100  Wim Taymans <wtaymans@redhat.com>
+
+	* gst-libs/gst/audio/audio-quantize.c:
+	* gst-libs/gst/audio/audio-quantize.h:
+	  audio-quantize: update docs
+	  Update docs
+	  Add another flag for the quantizer
+
+2015-11-06 12:46:36 +0100  Wim Taymans <wtaymans@redhat.com>
+
+	* gst/audioconvert/audioconvert.c:
+	* gst/audioconvert/audioconvert.h:
+	* gst/audioconvert/gstaudioconvert.c:
+	* gst/audioconvert/gstaudioconvertorc.orc:
+	* gst/audioconvert/gstchannelmix.c:
+	  audioconvert: cleanups and add some docs
+	  Add docs for the internal audioconvert object before moving it to the
+	  audio library.
+	  Remove get_sizes and implement the trivial logic in the element.
+	  Remove some unused orc functions
+
+2015-11-06 12:46:12 +0100  Wim Taymans <wtaymans@redhat.com>
+
+	* win32/common/libgstaudio.def:
+	  defs: update defs
+
+2015-11-06 12:37:14 +0100  Wim Taymans <wtaymans@redhat.com>
+
+	* gst-libs/gst/audio/gstaudiopack-dist.c:
+	* gst-libs/gst/audio/gstaudiopack-dist.h:
+	  audio: update orc files
+
+2015-11-06 12:10:48 +0100  Wim Taymans <wtaymans@redhat.com>
+
+	* gst-libs/gst/audio/Makefile.am:
+	* gst-libs/gst/audio/audio-quantize.c:
+	* gst-libs/gst/audio/audio-quantize.h:
+	* gst-libs/gst/audio/audio.h:
+	* gst-libs/gst/audio/gstaudiopack.orc:
+	* gst/audioconvert/Makefile.am:
+	* gst/audioconvert/audioconvert.c:
+	* gst/audioconvert/audioconvert.h:
+	* gst/audioconvert/gstaudioconvert.c:
+	* gst/audioconvert/gstaudioconvert.h:
+	* gst/audioconvert/gstaudioquantize.c:
+	* gst/audioconvert/gstaudioquantize.h:
+	* gst/audioconvert/gstfastrandom.h:
+	  audioconvert: move audio quantize code to libs
+	  Move the audio quantize code from audioconvert to the audio library.
+	  work on making an audio converter helper function similar to the video
+	  converter.
+	  Fold fastrandom directly into the quantizer, add some ORC code to
+	  optimize this later.
+
+2015-11-05 12:42:56 +0100  Wim Taymans <wtaymans@redhat.com>
+
+	* gst-libs/gst/audio/audio-channels.c:
+	* gst-libs/gst/audio/audio-channels.h:
+	* gst-libs/gst/audio/gstaudiodecoder.c:
+	* gst/audioconvert/gstaudioconvert.c:
+	* win32/common/libgstaudio.def:
+	  audio-channels: rename get_default_mask
+	  Rename _get_default_mask() to _get_fallback_mask() to make it more
+	  clear that the function only provides a fallback if nothing else can be
+	  done. Also clarify this in the documentation.
+	  API: gst_audio_channel_get_fallback_mask()
+
+2015-11-05 11:34:07 +0100  Thibault Saunier <tsaunier@gnome.org>
+
+	* gst/volume/gstvolume.c:
+	  volume: Do not try to get binding value array if we are not processing any sample
+	  In some conditions we might process empty buffers, calling
+	  gst_control_binding_get_value_array in that case will lead
+	  to the assertion:
+	  (lt-ges-launch-1.0:18859): GStreamer-CRITICAL **: gst_control_binding_get_value_array: assertion 'values' failed
+
+2015-11-05 10:40:18 +0100  Wim Taymans <wtaymans@redhat.com>
+
+	* gst-libs/gst/audio/audio-channels.c:
+	* gst-libs/gst/audio/audio-channels.h:
+	* gst-libs/gst/audio/gstaudiodecoder.c:
+	* gst/audioconvert/gstaudioconvert.c:
+	* win32/common/libgstaudio.def:
+	  audio-channels: make method to get default channel-mask
+	  Add a new method to get the default channel-mask.
+	  Use the new method on audiodecoder and audioconvert.
+	  API: gst_audio_channel_get_default_mask()
+
+2014-11-10 11:11:37 +0100  Andreas Frisch <fraxinas@opendreambox.org>
+
+	* tests/check/libs/video.c:
+	  tests: Add a test for video blending over transparent frames
+	  And fix the test_overlay_blend test where we blend over a
+	  transparent frame and where expecting wrong results
+	  https://bugzilla.gnome.org/show_bug.cgi?id=681447
+
+2013-11-30 01:59:55 +0100  Arnaud Vrac <avrac@freebox.fr>
+
+	* gst-libs/gst/video/video-blend.c:
+	  video: blend using OVER operation
+	  Also support all premultiplied/non-premultiplied source/destination
+	  configurations
+	  https://bugzilla.gnome.org/show_bug.cgi?id=681447
+
+2015-11-03 16:51:47 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+	* ext/ogg/gstoggstream.c:
+	  oggdemux: Create full Opus caps with all fields
+	  https://bugzilla.gnome.org/show_bug.cgi?id=757152
+
+2015-11-03 18:30:09 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+	* docs/libs/gst-plugins-base-libs-sections.txt:
+	* gst-libs/gst/pbutils/Makefile.am:
+	* gst-libs/gst/pbutils/codec-utils.c:
+	* gst-libs/gst/pbutils/codec-utils.h:
+	* win32/common/libgstpbutils.def:
+	  codec-utils: Add utilities for Opus caps and the OpusHead header
+	  https://bugzilla.gnome.org/show_bug.cgi?id=757152
+
+2015-11-03 11:11:57 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+	* ext/ogg/gstoggmux.c:
+	  oggmux: Use GstAudioClippingMeta for Opus for accurate end clipping
+	  ... instead of relying on the segment. For the clipping at the start we assume
+	  a proper value in the OpusHead, as generated by opusparse or opusenc.
+	  Transmuxing in general is not guaranteed to produce the correct values, or
+	  even have a OpusHead (e.g. when having RTP input).
+	  https://bugzilla.gnome.org/show_bug.cgi?id=757153
+
+2015-11-03 10:58:35 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+	* ext/ogg/Makefile.am:
+	* ext/ogg/gstoggdemux.c:
+	* ext/ogg/gstoggstream.c:
+	* ext/ogg/gstoggstream.h:
+	  oggdemux: Add GstAudioClippingMeta for Opus for accurate start/end clipping
+	  https://bugzilla.gnome.org/show_bug.cgi?id=757153
+
+2015-11-02 16:19:42 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+	* docs/libs/gst-plugins-base-libs-sections.txt:
+	* gst-libs/gst/audio/audio.h:
+	* gst-libs/gst/audio/gstaudiometa.c:
+	* gst-libs/gst/audio/gstaudiometa.h:
+	* win32/common/libgstaudio.def:
+	  audio: Add GstAudioClippingMeta for specifying clipping on encoded audio buffers
+	  https://bugzilla.gnome.org/show_bug.cgi?id=757153
+
+2015-11-02 11:19:23 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+	* ext/ogg/gstoggdemux.c:
+	* ext/ogg/gstoggstream.c:
+	* ext/ogg/gstoggstream.h:
+	  oggdemux: Allow start clipping for Opus
+	  The granulepos does not have the pre-skip subtracted while timestamps do,
+	  and the last granulepos will be shorter by the number of samples that should
+	  be dropped because of padding in the end.
+	  As such, extrapolating the granule of the beginning of the first frame will
+	  lead to a negative value, which is not a problem but intentional.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=757153
+
+2015-11-03 16:38:09 +0000  Tim-Philipp Müller <tim@centricular.com>
+
+	* gst-libs/gst/audio/gstaudiopack-dist.c:
+	* gst-libs/gst/audio/gstaudiopack-dist.h:
+	  audio: update disted orc backup files
+
+2015-11-03 14:08:25 +0000  Luis de Bethencourt <luisbg@osg.samsung.com>
+
+	* gst-libs/gst/audio/gstaudioclock.c:
+	  audioclock: use GST_STIME_FORMAT for GstClockTimeDiff
+	  GST_STIME_FORMAT is more appropriate for GstClockTimeDiff since it can
+	  handle negative values better.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=757480
+
+2015-11-03 13:44:39 +0000  Luis de Bethencourt <luisbg@osg.samsung.com>
+
+	* gst-libs/gst/video/gstvideodecoder.c:
+	  videodecoder: Print GstClockTimeDiff as a signed integer in debug logs
+
+2015-11-03 11:59:09 +0100  Wim Taymans <wtaymans@redhat.com>
+
+	* gst-libs/gst/audio/audio-format.c:
+	* gst-libs/gst/audio/audio-format.h:
+	* gst-libs/gst/audio/gstaudiopack.orc:
+	* gst/audioconvert/audioconvert.c:
+	  audio-format: add TRUNCATE_RANGE flag
+	  Add a TRUNCATE_RANGE flag for unpack functions to fill the least
+	  significate bits with 0 (as did the old code). Also add functions
+	  that don't truncate. Use the TRUNC flag in audioconvert for
+	  backwards compatibility for now.
+
+2015-11-03 11:57:32 +0100  Wim Taymans <wtaymans@redhat.com>
+
+	* gst-libs/gst/audio/gstaudiopack.orc:
+	  audiopack: improve pack functions
+	  Avoid shifts by using convh functions.
+
+2015-11-03 11:44:54 +0100  Wim Taymans <wtaymans@redhat.com>
+
+	* gst/audioconvert/gstaudioconvertorc.orc:
+	* tests/check/elements/audioconvert.c:
+	  audioconvert: change multiplier for int<->float conversion
+	  Use (1 << 31) as the multiplier for int<->float conversions. This makes
+	  sure that int->float conversions always end up with floats between
+	  [-1.0, 1.0].
+	  For the conversion from float to int, this multiplier will give the complete
+	  int range after we perform clipping.
+	  Change the unit test to take this into consideration.
+	  Fixes https://bugzilla.gnome.org/show_bug.cgi?id=755301
+
+2015-11-02 17:32:55 +0000  Luis de Bethencourt <luisbg@osg.samsung.com>
+
+	* gst-libs/gst/audio/gstaudiobasesink.c:
+	  audiobasesink: use GST_STIME_ARGS for GstClockTimeDiff
+	  No need to use G_GINT64_FORMAT for potentially negative values of
+	  GstClockTimeDiff. Since 1.6 these can be handled with GST_STIME_ARGS.
+	  Plus it creates more readable values in the logs.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=757480
+
+2015-11-02 16:36:35 +0000  Luis de Bethencourt <luisbg@osg.samsung.com>
+
+	* ext/ogg/gstoggmux.c:
+	  oggmux: Print GstClockTimeDiff as a signed integer in debug logs
+
+2015-11-02 16:09:52 +0000  Luis de Bethencourt <luisbg@osg.samsung.com>
+
+	* ext/ogg/gstoggdemux.c:
+	  oggdemux: Use GstClockTimeDiff and print signed integer in debug logs
+	  Use GstClockTimeDiff and Clock macros to print signed integer time
+	  differences in the debug logs.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=757480
+
+2015-11-02 14:06:39 +0000  Luis de Bethencourt <luisbg@osg.samsung.com>
+
+	* tests/examples/seek/scrubby.c:
+	  examples: use GST_STIME_FORMAT for GstClockTimeDiff
+	  GST_STIME_FORMAT is more appropriate for GstClockTimeDiff since it can
+	  handle negative values better.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=757480
+
+2015-11-02 17:14:51 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+	* gst-libs/gst/audio/gstaudiometa.h:
+	  audio: Fix parameters to gst_buffer_get_audio_downmix_meta() in macro
+
+2015-11-02 15:54:19 +0100  Wim Taymans <wtaymans@redhat.com>
+
+	* gst/audiotestsrc/gstaudiotestsrc.c:
+	  audiotestsrc: increase freq limit
+	  Raise the frequency limit and try to negotiate to a samplerate of 4*freq
+	  when larger then the default samplerate.
+	  Fixes https://bugzilla.gnome.org/show_bug.cgi?id=754450
+
+2015-11-02 15:46:22 +0100  Wim Taymans <wtaymans@redhat.com>
+
+	* gst/audiotestsrc/gstaudiotestsrc.c:
+	  audiotestsrc: add support for unlimited number of channels
+	  Raise the channel limit and set the channel-mask for > 2 channels.
+
+2015-11-02 13:19:09 +0100  Wim Taymans <wtaymans@redhat.com>
+
+	* gst/audiotestsrc/gstaudiotestsrc.c:
+	* gst/audiotestsrc/gstaudiotestsrc.h:
+	  audiotestsrc: add support for all formats
+	  Use the pack functions to also support the other audio formats we
+	  have.
+
+2015-11-02 12:09:42 +0000  Luis de Bethencourt <luisbg@osg.samsung.com>
+
+	* gst-libs/gst/video/gstvideodecoder.c:
+	  videodecoder: subtract time difference with GST_CLOCK_DIFF
+	  To ensure the subtraction of two GstClockTime values (which are guint64)
+	  can be negative. Use GST_CLOCK_DIFF which returns a gint64.
+	  CID 1338049
+
+2015-11-02 11:34:56 +0100  Thibault Saunier <tsaunier@gnome.org>
+
+	* gst-libs/gst/pbutils/encoding-profile.c:
+	  encoding-profile: Do not force user to provide an encoding profile name
+	  And use the profile called `default` if none provided.
+
+2015-11-02 11:30:07 +0100  Thibault Saunier <tsaunier@gnome.org>
+
+	* gst-libs/gst/pbutils/encoding-target.c:
+	  encoding-target: Do not unconditionally break when searching for a target
+	  Otherwise the loop is useless!
+	  Fixes CID 1338051
+
+2015-10-24 20:08:47 +0300  Sebastian Dröge <sebastian@centricular.com>
+
+	* gst/audioresample/gstaudioresample.c:
+	  audioresample: Clip input buffers to the segment before handling them
+	  https://bugzilla.gnome.org/show_bug.cgi?id=757068
+
+2015-10-24 20:05:10 +0300  Sebastian Dröge <sebastian@centricular.com>
+
+	* gst/audioconvert/gstaudioconvert.c:
+	  audioconvert: Clip input buffers to the segment before handling them
+	  https://bugzilla.gnome.org/show_bug.cgi?id=757068
+
+2015-10-24 20:02:13 +0300  Sebastian Dröge <sebastian@centricular.com>
+
+	* gst-libs/gst/audio/gstaudiofilter.c:
+	  audiofilter: Clip input buffers to the segment before handling them
+	  https://bugzilla.gnome.org/show_bug.cgi?id=757068
+
+2015-11-01 23:05:10 +0000  Tim-Philipp Müller <tim@centricular.com>
+
+	* gst/audioconvert/gstaudioconvertorc-dist.c:
+	* gst/audioconvert/gstaudioconvertorc-dist.h:
+	  audioconvert: update orc backup code to fix build without orc
+
+2015-10-26 21:32:41 +0100  Csaba Toth <tocsanti@gmail.com>
+
+	* gst/tcp/gstmultisocketsink.c:
+	  multisocketsink: fix "client-removed" signal on 64-bit platforms and with bindings
+	  The client-removed signal used G_INT_TYPE instead of G_SOCKET_TYPE
+	  in its definition leading to problems on platforms where the size
+	  of a pointer is larger than the size of an integer, It would also
+	  not work at all with dynamic language bindings.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=757155
+
+2015-10-28 18:36:41 +0100  Joan Pau Beltran <joanpau.beltran@socib.cat>
+
+	* gst/videotestsrc/gstvideotestsrc.c:
+	  videotestsrc: fix handling of Bayer format 'gbrg'
+	  Due to a typo, videotestsrc did not handle the Bayer
+	  format 'gbrg' properly and reported it as invalid,
+	  causing negotiation errors.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=757264
+
+2015-10-30 17:36:48 +0100  Wim Taymans <wtaymans@redhat.com>
+
+	* gst/audioconvert/audioconvert.c:
+	* gst/audioconvert/audioconvert.h:
+	* gst/audioconvert/gstaudioconvertorc.orc:
+	* gst/audioconvert/gstaudioquantize.c:
+	* gst/audioconvert/gstaudioquantize.h:
+	  audioconvert: rework audioconvert
+	  Rewrite audioconvert to try to make it more clear what steps are
+	  executed during conversion.
+	  Add passthrough step that just does a memcpy when possible.
+	  Add ORC optimized dither and quantization functions.
+	  Implement noise-shaping on S32 samples only and allow for arbitrary
+	  noise shaping coefficients if we want this later.
+
+2015-10-30 17:33:32 +0100  Wim Taymans <wtaymans@redhat.com>
+
+	* gst/audioconvert/gstchannelmix.c:
+	* gst/audioconvert/gstchannelmix.h:
+	  channelmix: fix up API a little
+	  don't use gpointer * for something that should be gpointer.
+
+2015-10-28 11:40:42 +0100  Wim Taymans <wtaymans@redhat.com>
+
+	* gst/audioconvert/gstaudioquantize.c:
+	  audioquantize: make helper for add with saturation
+
+2015-10-29 16:52:31 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+	* gst-libs/gst/video/gstvideodecoder.c:
+	  videodecoder: Print another time difference as a signed integer instead of a huge unsigned one
+
+2015-10-29 16:01:26 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+	* gst-libs/gst/video/gstvideodecoder.c:
+	  videodecoder: Print GstClockTimeDiff as a signed integer in debug logs
+
+2015-10-29 00:01:01 +0530  Nirbheek Chauhan <nirbheek@centricular.com>
+
+	* tools/gst-device-monitor.c:
+	  tools: gst-device-monitor: fix two memory leaks
+	  The removed GList link needs to be freed too, and
+	  the G_OPTION_REMAINING arguments need to be freed.
+
+2015-10-28 15:50:44 +0100  Thibault Saunier <tsaunier@gnome.org>
+
+	* gst-libs/gst/pbutils/encoding-target.c:
+	  encoding-target: Add a GST_ENCODING_TARGET_PATH envvar to find target files
+
+2015-10-28 15:47:00 +0100  Thibault Saunier <tsaunier@gnome.org>
+
+	* gst-libs/gst/pbutils/encoding-target.c:
+	  encoding-target: Allow having encoding target without a category set
+	  There was already some code to handle that, but the support was not
+	  complete in those code paths.
+
+2015-10-27 12:56:48 +0100  Thibault Saunier <tsaunier@gnome.org>
+
+	* gst-libs/gst/pbutils/encoding-target.c:
+	  encoding-target: Create directory before trying to save encoding targets
+
+2015-10-27 12:50:26 +0100  Thibault Saunier <tsaunier@gnome.org>
+
+	* gst-libs/gst/pbutils/encoding-profile.c:
+	  encoding-profile: Allow specifying the target category in the serialized encoding target
+
+2015-10-27 17:28:06 +0100  Wim Taymans <wtaymans@redhat.com>
+
+	* gst/audioconvert/audioconvert.c:
+	* gst/audioconvert/audioconvert.h:
+	* gst/audioconvert/gstaudioconvert.c:
+	* gst/audioconvert/gstaudioconvert.h:
+	* gst/audioconvert/gstaudioquantize.c:
+	* gst/audioconvert/gstaudioquantize.h:
+	  audioconvert: make the quantizer a reusable object
+	  Turn the quantizer into a reusable object.
+
+2015-10-27 13:24:31 +0100  Wim Taymans <wtaymans@redhat.com>
+
+	* gst/audioconvert/audioconvert.c:
+	* gst/audioconvert/audioconvert.h:
+	* gst/audioconvert/gstchannelmix.c:
+	* gst/audioconvert/gstchannelmix.h:
+	  audioconvert: make the channel mixer a separate reusable object
+	  A first attempt at making the channel mixer a separate object.
 
 2015-10-28 11:32:57 +0100  Wim Taymans <wtaymans@redhat.com>
 
@@ -224,6 +1200,28 @@
 	  validate scenario.
 	  https://bugzilla.gnome.org/show_bug.cgi?id=754459
 
+2015-10-23 19:13:05 +0300  Sebastian Dröge <sebastian@centricular.com>
+
+	* gst/audioconvert/gstaudioconvertorc-dist.c:
+	* gst/audioconvert/gstaudioconvertorc-dist.h:
+	  audioconvert: Update disted orc files
+
+2015-10-23 16:58:17 +0200  Wim Taymans <wtaymans@redhat.com>
+
+	* gst/audioconvert/audioconvert.c:
+	* gst/audioconvert/audioconvert.h:
+	* gst/audioconvert/gstaudioconvertorc.orc:
+	* gst/audioconvert/gstaudioquantize.c:
+	* gst/audioconvert/gstchannelmix.c:
+	  audioconvert: use pack/unpack functions
+	  Rework the converter to use the pack/unpack functions
+	  Because the unpack functions can only unpack to 1 format, add a separate
+	  conversion step for doubles when the unpack function produces int.
+	  Do conversion to S32 in the quantize function directly.
+	  Tweak the conversion factor for doing float->int conversion slightly to
+	  get the full range of negative samples, use clamp to make sure we don't
+	  exceed our int range on the positive axis (see also #755301)
+
 2015-10-23 12:02:28 +0300  Sebastian Dröge <sebastian@centricular.com>
 
 	* gst/playback/gstplaybin2.c:
@@ -236,6 +1234,20 @@
 	  event again, and on the second time it will fail in the majority of cases
 	  because the pipeline is still being reconfigured
 
+2015-10-23 17:25:50 +0900  Eunhae Choi <eunhae1.choi@samsung.com>
+
+	* tests/check/gst/typefindfunctions.c:
+	  tests: typefindfunctions: fix error leaks
+	  https://bugzilla.gnome.org/show_bug.cgi?id=757008
+
+2015-09-23 18:47:52 +0200  Thibault Saunier <tsaunier@gnome.org>
+
+	* gst/videotestsrc/gstvideotestsrc.c:
+	  videotestsrc: Force alpha downstream if foreground color contains alpha
+	  Otherwise the foreground color won't be fully represented in the
+	  outputted frames.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=755482
+
 2015-10-22 12:07:44 +0800  Pavel Bludov <pbludov@gmail.com>
 
 	* gst-libs/gst/video/video-overlay-composition.h:
@@ -243,11 +1255,113 @@
 	  Closing parenthesis was missing in two cases.
 	  https://bugzilla.gnome.org/show_bug.cgi?id=756893
 
+2015-10-21 14:34:56 +0100  Tim-Philipp Müller <tim@centricular.com>
+
+	* common:
+	  Automatic update of common submodule
+	  From b99800a to b319909
+
+2015-10-20 17:29:42 +0300  Sebastian Dröge <sebastian@centricular.com>
+
+	* configure.ac:
+	  Use new GST_ENABLE_EXTRA_CHECKS #define
+	  https://bugzilla.gnome.org/show_bug.cgi?id=756870
+
+2015-10-21 14:25:47 +0300  Sebastian Dröge <sebastian@centricular.com>
+
+	* README:
+	* common:
+	  Automatic update of common submodule
+	  From 9aed1d7 to b99800a
+
 2015-10-20 12:08:23 +0300  Sebastian Dröge <sebastian@centricular.com>
 
 	* gst-libs/gst/rtp/gstrtpbuffer.h:
 	  rtp: GST_RTP_BUFFER_MAP_FLAG_SKIP_PADDING is Since 1.6.1
 
+2015-10-20 03:58:26 +1100  Matthew Waters <matthew@centricular.com>
+
+	* gst/playback/gstdecodebin2.c:
+	  decodebin: track the exposable pads through connect_pad
+	  The logic introduced by
+	  [d50b713: decodebin: set the decode pad target before setting elements to PAUSED]
+	  to expose pads would only ever be able to possibly expose one (the last) pad per element.
+	  Make it so that any exposable pads are able to be exposed rather than just the
+	  last pad returned by connect_element.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=742924
+
+2015-10-20 03:52:24 +1100  Matthew Waters <matthew@centricular.com>
+
+	* gst/playback/gstdecodebin2.c:
+	  decodebin: return the possibly new chain in analyze_new_pad
+	  In the case of analyzing a demuxer chain, analyze_new_pad may create
+	  a new GstDecodeChain.  This was not propagated to the calling function which as
+	  of [d50b713f decodebin: set the decode pad target before setting elements to PAUSED]
+	  is now required to be able to expose the correct pad.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=742924
+
+2015-10-19 15:32:19 +0530  Rajat Verma <rajat.verma@st.com>
+
+	* gst/playback/gstplaysink.c:
+	  playsink: relink text_pad in case of reconfiguration
+	  In case of reconfiguration, text_pad should be re-connected with
+	  stream synchronizer sink pad. Otherwise we'll leave an unlinked pad around if
+	  there always was a streamsynchronizer text pad.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=756804
+
+2015-09-14 15:25:11 +0900  eunhae choi <eunhae1.choi@samsung.com>
+
+	* gst-libs/gst/audio/gstaudiobasesink.c:
+	  audiobasesink: fix issue about eos handling during flushing
+	  If the flush-start is arrived during _eos_wait() in basesink,
+	  the 'eos' flag is overwritten to TRUE after exiting the _eos_wait().
+	  To resolve the overwritten issue,
+	  the subclass doing the _eos_wait() call should return the right value.
+	  If the eos flag is set to TRUE again, it will cause error(enter the eos flow)
+	  of the following state changing from PAUSED to PLAYING in basesink.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=754980
+
+2015-10-17 22:25:22 +0300  Sebastian Dröge <sebastian@centricular.com>
+
+	* gst/playback/gstdecodebin2.c:
+	* gst/playback/gstplaybin2.c:
+	* gst/playback/gstplaysink.c:
+	* gst/playback/gstsubtitleoverlay.c:
+	  decodebin/playbin/playsink/subtitleoverlay: Post async-done on state change failures
+	  https://bugzilla.gnome.org/show_bug.cgi?id=756611
+
+2015-10-17 22:20:31 +0300  Sebastian Dröge <sebastian@centricular.com>
+
+	* gst/playback/gstplaysink.c:
+	  playsink: Immediately error out if state change fails
+	  Otherwise we chain up to the parent class' change_state function and might
+	  override the failure with SUCCESS.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=756611
+
+2015-10-17 21:47:07 +0300  Sebastian Dröge <sebastian@centricular.com>
+
+	* gst/playback/gstplaybin2.c:
+	* gst/playback/gsturidecodebin.c:
+	  playbin/uridecodebin: Always post async-done immediately if we're a live pipeline
+	  Not only if the base class told us, but also if one of our own elements did.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=756611
+
+2015-10-16 03:40:43 +1100  Matthew Waters <matthew@centricular.com>
+
+	* gst/playback/gstdecodebin2.c:
+	  decodebin: set the decode pad target before setting elements to PAUSED
+	  Otherwise caps and context queries will disappear into nothing and therefore
+	  fail.  With autoplug-query now actually working, users (such as playbin) can
+	  proxy these queries to the selected video sink and be able to select an
+	  more appropriate configuration.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=731204
+
+2015-10-17 20:36:27 +0300  Sebastian Dröge <sebastian@centricular.com>
+
+	* gst-libs/gst/video/video.c:
+	  video: Add out annotations to the out parameters of gst_video_calculate_display_ratio()
+	  https://bugzilla.gnome.org/show_bug.cgi?id=754567
+
 2015-10-16 10:48:50 +1100  Matthew Waters <matthew@centricular.com>
 
 	* win32/common/libgstrtp.def:
@@ -267,48 +1381,18 @@
 	  present.
 	  https://bugzilla.gnome.org/show_bug.cgi?id=752705
 
-2015-09-14 15:25:11 +0900  eunhae choi <eunhae1.choi@samsung.com>
+2015-10-15 22:40:50 +0300  Sebastian Dröge <sebastian@centricular.com>
 
-	* gst-libs/gst/audio/gstaudiobasesink.c:
-	  audiobasesink: fix issue about eos handling during flushing
-	  If the flush-start is arrived during _eos_wait() in basesink,
-	  the 'eos' flag is overwritten to TRUE after exiting the _eos_wait().
-	  To resolve the overwritten issue,
-	  the subclass doing the _eos_wait() call should return the right value.
-	  If the eos flag is set to TRUE again, it will cause error(enter the eos flow)
-	  of the following state changing from PAUSED to PLAYING in basesink.
-	  https://bugzilla.gnome.org/show_bug.cgi?id=754980
+	* gst-libs/gst/rtp/gstrtpbuffer.c:
+	  Revert "rtpbuffer: increase logging level when map fails"
+	  This reverts commit e3c8a820176ba39dfae85944fa9c6ae202ec681d.
+	  It causes too much noise in the logs.
 
-2015-10-17 21:47:07 +0300  Sebastian Dröge <sebastian@centricular.com>
+2015-10-15 15:32:58 +0200  Miguel París Díaz <mparisdiaz@gmail.com>
 
-	* gst/playback/gstplaybin2.c:
-	* gst/playback/gsturidecodebin.c:
-	  playbin/uridecodebin: Always post async-done immediately if we're a live pipeline
-	  Not only if the base class told us, but also if one of our own elements did.
-	  https://bugzilla.gnome.org/show_bug.cgi?id=756611
-
-2015-10-17 22:25:22 +0300  Sebastian Dröge <sebastian@centricular.com>
-
-	* gst/playback/gstdecodebin2.c:
-	* gst/playback/gstplaybin2.c:
-	* gst/playback/gstplaysink.c:
-	* gst/playback/gstsubtitleoverlay.c:
-	  decodebin/playbin/playsink/subtitleoverlay: Post async-done on state change failures
-	  https://bugzilla.gnome.org/show_bug.cgi?id=756611
-
-2015-10-17 22:20:31 +0300  Sebastian Dröge <sebastian@centricular.com>
-
-	* gst/playback/gstplaysink.c:
-	  playsink: Immediately error out if state change fails
-	  Otherwise we chain up to the parent class' change_state function and might
-	  override the failure with SUCCESS.
-	  https://bugzilla.gnome.org/show_bug.cgi?id=756611
-
-2015-10-17 20:36:27 +0300  Sebastian Dröge <sebastian@centricular.com>
-
-	* gst-libs/gst/video/video.c:
-	  video: Add out annotations to the out parameters of gst_video_calculate_display_ratio()
-	  https://bugzilla.gnome.org/show_bug.cgi?id=754567
+	* gst-libs/gst/rtp/gstrtpbuffer.c:
+	  rtpbuffer: increase logging level when map fails
+	  https://bugzilla.gnome.org/show_bug.cgi?id=756641
 
 2015-10-15 10:01:38 +0900  Vineeth TM <vineeth.tm@samsung.com>
 
@@ -331,11 +1415,105 @@
 	  the number of bytes to skip, same as we do in alsasink.
 	  Thanks to Lucio A. Hernandez <lucio.a.hernandez@gmail.com> for reporting.
 
+2015-10-12 14:02:58 +0300  Sebastian Dröge <sebastian@centricular.com>
+
+	* gst-libs/gst/audio/gstaudioencoder.c:
+	* tests/check/libs/audioencoder.c:
+	  Revert "audioencoder: timestamp headers same as first buffer and use duration 0"
+	  This reverts commit dd4d6d9ed54c2a63a7e45661519d9965417707c5.
+	  It breaks ogg muxing and the vorbisenc unit test.
+
+2015-08-28 11:44:19 +0200  Havard Graff <havard.graff@gmail.com>
+
+	* gst-libs/gst/audio/gstaudioencoder.c:
+	* tests/check/libs/audioencoder.c:
+	  audioencoder: timestamp headers same as first buffer and use duration 0
+	  https://bugzilla.gnome.org/show_bug.cgi?id=754224
+
+2015-08-28 11:25:22 +0200  Havard Graff <havard.graff@gmail.com>
+
+	* tests/check/libs/audioencoder.c:
+	  audioencoder-tests: port to use GstHarness
+	  https://bugzilla.gnome.org/show_bug.cgi?id=754223
+
+2015-08-27 17:28:30 +0200  Havard Graff <havard.graff@gmail.com>
+
+	* tests/check/libs/audiodecoder.c:
+	  audiodecoder-test: port to using GstHarness
+	  https://bugzilla.gnome.org/show_bug.cgi?id=754196
+
 2015-10-04 18:36:00 +0100  Sebastian Dröge <sebastian@centricular.com>
 
 	* sys/xvimage/xvimagepool.c:
 	  xvimagesink: Put error message into debug output instead of just throwing it away
 
+2015-10-02 22:19:52 +0300  Sebastian Dröge <sebastian@centricular.com>
+
+	* configure.ac:
+	* gst-libs/gst/rtsp/gstrtspconnection.c:
+	  Update GLib dependency to 2.40.0
+
+2014-03-15 17:35:56 +0100  Sebastian Rasmussen <sebras@hotmail.com>
+
+	* gst-libs/gst/rtp/gstrtpbasepayload.c:
+	* tests/check/libs/rtpbasepayload.c:
+	  rtpbasepayload: Implement video SDP attributes
+	  Fixes https://bugzilla.gnome.org/show_bug.cgi?id=726472
+
+2015-09-25 15:17:53 +0300  Vivia Nikolaidou <vivia@toolsonair.com>
+
+	* tools/gst-play.c:
+	  gst-play: Removed erroneous comment
+	  The "fall through" comment was wrong. Removed.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=755440
+
+2015-09-22 23:12:10 +0300  Vivia Nikolaidou <vivia@ahiru.eu>
+
+	* tools/gst-play.c:
+	  gst-play: Add keyboard shortcut '0' to seek to beginning
+	  https://bugzilla.gnome.org/show_bug.cgi?id=755440
+
+2015-08-25 16:24:12 +0900  Vineeth T M <vineeth.tm@samsung.com>
+
+	* gst/videorate/gstvideorate.c:
+	  videorate: remove unnecessary break statement
+	  Trivial patch to remove unncessary break statement used after
+	  goto statement.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=754054
+
+2015-08-20 15:59:15 +0900  Vineeth TM <vineeth.tm@samsung.com>
+
+	* gst-libs/gst/tag/mklicensestables.c:
+	* tests/examples/encoding/encoding.c:
+	* tests/examples/playback/playback-test.c:
+	* tests/examples/seek/jsseek.c:
+	* tests/examples/seek/scrubby.c:
+	* tests/icles/stress-playbin.c:
+	* tests/icles/test-effect-switch.c:
+	* tools/gst-device-monitor.c:
+	* tools/gst-discoverer.c:
+	* tools/gst-play.c:
+	  gstreamer: base: Fix memory leaks when context parse fails.
+	  When g_option_context_parse fails, context and error variables are not getting free'd
+	  which results in memory leaks. Free'ing the same.
+	  And replacing g_error_free with g_clear_error, which checks if the error being passed
+	  is not NULL and sets the variable to NULL on free'ing.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=753852
+
+2015-06-24 23:55:35 +0200  Mathieu Duponchelle <mathieu.duponchelle@opencreed.com>
+
+	* gst/encoding/gstencodebin.c:
+	  encodebin: Fix special case
+	  Allows to run such a command line :
+	  gst-launch-1.0 uridecodebin uri=file:///home/meh/Music/sthg.mp4 ! \
+	  encodebin profile-string="audio/x-wav|1" ! filesink location=sthg.wav
+	  Previously the code failed because wavenc is considered as a muxer.
+	  We still want encodebin to audio/x-wav as an AudioEncodingProfile,
+	  so this simple fix allows that.
+	  Ability to mux raw streams in containers such as matroskamux
+	  is a different issue.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=751470
+
 2015-09-29 10:12:28 +0530  Rajat Verma <rajat.verma@st.com>
 
 	* gst/playback/gstdecodebin2.c:
@@ -344,6 +1522,87 @@
 	  from balloning up.
 	  https://bugzilla.gnome.org/show_bug.cgi?id=755770
 
+2015-10-02 10:07:33 +0300  Sebastian Dröge <sebastian@centricular.com>
+
+	* win32/common/libgstpbutils.def:
+	  win32: Update exports for new audiovisualizer symbols
+
+2015-10-02 15:04:34 +1000  Jan Schmidt <jan@centricular.com>
+
+	* tests/check/Makefile.am:
+	* tests/check/libs/baseaudiovisualizer.c:
+	  tests: Add baseaudiovisualizer test, moved from -bad
+
+2015-10-02 15:05:26 +1000  Jan Schmidt <jan@centricular.com>
+
+	* gst/videotestsrc/gstvideotestsrc.c:
+	  videotestsrc: Don't fixate framerate if downstream didn't provide one
+	  intersection with a downstream that accepts any video/x-raw caps
+	  with no further detail won't create a framerate field. If it's
+	  not in the caps, don't fixate it, just set it to 30/1
+
+2015-10-01 21:53:20 +0200  Stefan Sauer <ensonic@users.sf.net>
+
+	* docs/plugins/gst-plugins-base-plugins-docs.sgml:
+	* docs/plugins/gst-plugins-base-plugins-sections.txt:
+	* docs/plugins/gst-plugins-base-plugins.args:
+	* docs/plugins/gst-plugins-base-plugins.hierarchy:
+	* docs/plugins/inspect/plugin-alsa.xml:
+	  docs: add alsamidisrc to docs
+
+2015-10-01 21:43:21 +0200  Antonio Ospite <ao2@ao2.it>
+
+	* ext/alsa/Makefile.am:
+	* ext/alsa/gstalsamidisrc.c:
+	* ext/alsa/gstalsamidisrc.h:
+	* ext/alsa/gstalsaplugin.c:
+	  midi: add an ALSA MIDI sequencer source
+	  The alsamidisrc element allows to get input event from ALSA MIDI
+	  sequencer devices, and possibly convert them to sound using some
+	  downstream element like fluiddec.
+	  Fixes #738687
+
+2015-10-01 15:27:55 +0100  Luis de Bethencourt <luisbg@osg.samsung.com>
+
+	* gst-libs/gst/pbutils/gstaudiovisualizer.c:
+	  visual: make private all variable subclasses don't need
+	  Subclasses don't need access to all variables. Making them private.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=742875
+
+2015-10-01 11:55:59 +0100  Luis de Bethencourt <luisbg@osg.samsung.com>
+
+	* ext/libvisual/Makefile.am:
+	* ext/libvisual/gstaudiovisualizer.c:
+	* ext/libvisual/gstaudiovisualizer.h:
+	* ext/libvisual/visual.h:
+	* gst-libs/gst/pbutils/Makefile.am:
+	* gst-libs/gst/pbutils/gstaudiovisualizer.c:
+	* gst-libs/gst/pbutils/gstaudiovisualizer.h:
+	  visual: merge audiovisalizer base classes
+	  Move the audiovisualizer base class to pbutils, so it can be used by plugins
+	  from other modules
+	  https://bugzilla.gnome.org/show_bug.cgi?id=742875
+
+2015-10-01 12:48:52 +0100  Tim-Philipp Müller <tim@centricular.com>
+
+	* gst/typefind/gsttypefindfunctions.c:
+	  typefinding: minor clean-up
+	  Remove unnecessary brackets from IS_MPEGTS_HEADER macro.
+
+2015-10-01 12:32:33 +0100  Pankaj Darak <pankajdarak@gmail.com>
+
+	* gst/typefind/gsttypefindfunctions.c:
+	  typefinding: mpeg-ts detection improvement
+	  Allow AFC to be 0 for null pid packets.
+	  https://bugzilla.gnome.org/show_bug.cgi?id=726117
+
+2015-09-30 18:18:15 +0100  Tim-Philipp Müller <tim@centricular.com>
+
+	* tests/check/elements/subparse.c:
+	  tests: subparse: add unit test for closing tag detection
+	  </ i> should be handled like </i>
+	  https://bugzilla.gnome.org/show_bug.cgi?id=755875
+
 2015-09-30 18:17:13 +0100  Tim-Philipp Müller <tim@centricular.com>
 
 	* gst/subparse/gstsubparse.c:
@@ -360,6 +1619,11 @@
 	  paths when using ./configure --with-pkg-config-path=
 	  https://bugzilla.gnome.org/show_bug.cgi?id=755494
 
+2015-09-25 23:51:06 +0200  Sebastian Dröge <sebastian@centricular.com>
+
+	* configure.ac:
+	  Back to development
+
 === release 1.6.0 ===
 
 2015-09-25 23:15:20 +0200  Sebastian Dröge <sebastian@centricular.com>
diff --git a/Makefile.in b/Makefile.in
index 1710fe7..11055b6 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -1179,6 +1179,9 @@
 	@if [ -d ../www/data/src ]; then \
 	  mv -v $(PACKAGE)-$(VERSION).tar.xz ../www/data/src/$(PACKAGE)/ ; \
 	  mv -v $(PACKAGE)-$(VERSION).tar.xz.sha256sum ../www/data/src/$(PACKAGE)/ ; \
+	elif [ -d ../../www/data/src ]; then \
+	  mv -v $(PACKAGE)-$(VERSION).tar.xz ../../www/data/src/$(PACKAGE)/ ; \
+	  mv -v $(PACKAGE)-$(VERSION).tar.xz.sha256sum ../../www/data/src/$(PACKAGE)/ ; \
 	fi
 	@echo "================================================================================================="
 
diff --git a/NEWS b/NEWS
index bfae3d8..a4bffc6 100644
--- a/NEWS
+++ b/NEWS
@@ -1,36 +1,2 @@
-This is GStreamer 1.6.2
-
-The GStreamer team is proud to announce the second bugfix release in the stable
-1.6 release series of your favourite cross-platform multimedia framework!
-
-This release only contains bugfixes and it is safe to update from 1.6.0 and
-1.6.1. For a full list of bugfixes see Bugzilla:
-  https://bugzilla.gnome.org/buglist.cgi?bug_status=RESOLVED&bug_status=VERIFIED&limit=0&list_id=83309&order=bug_id&product=GStreamer&resolution=FIXED&target_milestone=1.6.2
-
-See http://gstreamer.freedesktop.org/releases/1.6/ for the latest version of this document.
-
-Major bugfixes
-
-- Crashes in gst-libav with sinks that did not provide a buffer pool
-  but supported video metadata were fixed. This affected d3dvideosink
-  and some 3rd party sinks. Also related fixes for crashes when a downstream
-  buffer pool failed allocation.
-- Big GL performance improvement on iOS by a factor of 2 by using Apple's sync
-  extension.
-- Deadlocks in the DirectSound elements on Windows, and the behaviour of its
-  mute property were fixed.
-- The Direct3D video sink does not crash anymore when minimizing the window
-- The library soname generation on Android >= 6.0 was fixed, which previously
-  caused GStreamer to fail to load there.
-- File related elements have large-file (>2GB) support on Android now.
-- gst-libav was updated to ffmpeg 2.8.3.
-- Deserialization of custom events in the GDP depayloader was fixed.
-- Missing OpenGL context initialization in the Qt/QML video sink was fixed in
-  certain situations.
-- Interoperability with some broken RTSP servers using HTTP tunnel was
-  improved.
-- Various compilation fixes for Windows.
-- Various smaller memory leak and other fixes in different places.
-- and many, many more:
-  https://bugzilla.gnome.org/buglist.cgi?bug_status=RESOLVED&bug_status=VERIFIED&limit=0&list_id=83309&order=bug_id&product=GStreamer&resolution=FIXED&target_milestone=1.6.2
+This is GStreamer 1.7.1
 
diff --git a/README b/README
index f175b1b..fa53f95 100644
--- a/README
+++ b/README
@@ -1,4 +1,4 @@
-GStreamer 1.5.x development series
+GStreamer 1.7.x development series
 
 WHAT IT IS
 ----------
diff --git a/RELEASE b/RELEASE
index 2f5d754..4cccb28 100644
--- a/RELEASE
+++ b/RELEASE
@@ -1,19 +1,17 @@
 
-Release notes for GStreamer Base Plugins 1.6.2
+Release notes for GStreamer Base Plugins 1.7.1
 
 
-The GStreamer team is proud to announce the second bugfix release in the stable
-1.6 release series of your favourite cross-platform multimedia framework!
+The GStreamer team is pleased to announce the first release of the unstable
+1.7 release series. The 1.7 release series is adding new features on top of
+the 1.0, 1.2, 1.4 and 1.6 series and is part of the API and ABI-stable 1.x release
+series of the GStreamer multimedia framework. The unstable 1.7 release series
+will lead to the stable 1.8 release series in the next weeks. Any newly added
+API can still change until that point.
 
 
-
-This release only contains bugfixes and it is safe to update from 1.6.0 and 1.6.1. For a
-full list of bugfixes see Bugzilla.
-
-
-
-See http://gstreamer.freedesktop.org/releases/1.6/
-for the full release notes.
+Binaries for Android, iOS, Mac OS X and Windows will be provided separately
+during the unstable 1.7 release series.
 
 
 
@@ -63,10 +61,43 @@
 
 Bugs fixed in this release
      
-      * 757155 : multisocketsink: " client-removed " signal emission broken on 64-bit and with bindings
-      * 757264 : videotestsrc: Bayer format 'gbrg' not handled properly
-      * 758204 : xvimagesink/ximagesink: Fix structure memory leak
-      * 758921 : rtspsrc should use lowercase X-Sessioncookie header for compatibility with strict servers
+      * 681447 : video overlay composition: fix video blending over transparent frame
+      * 705579 : Playbin prevents plugins requesting a GstContext to work properly
+      * 726117 : typefinding: issue in MPEG-TS detection logic for streams with Null Pids
+      * 726472 : rtpbasepayload: Implement video SDP attributes
+      * 727970 : videorate: remove dead code
+      * 730926 : tags: add GST_TAG_PRIVATE_DATA and expose ID3 private frame ( " PRIV " ) data
+      * 731791 : videometa: add GstVideoAffineTransformationMeta
+      * 738687 : midi: add alsamidisrc, an ALSA MIDI sequencer source
+      * 749596 : rtsp-over-http authentication failure
+      * 751470 : encodebin: Fix special case.
+      * 752651 : decodebin: segfault on setting to NULL
+      * 753852 : gstreamer: base: Fix memory leaks when context parse fails.
+      * 754054 : videorate: remove unnecessary break statement
+      * 754196 : audiodecoder-test: port to using GstHarness
+      * 754223 : audioencoder-tests: port to use GstHarness
+      * 754450 : audiotestsrc: remove frequency and channel number limit
+      * 755260 : decodebin: Fix a race condition accessing the decode_chain field.
+      * 755301 : audioconvert: Integer- > Float conversion creates values slightly smaller than -1.0
+      * 755440 : gst-play: Add keyboard shortcut '0' to seek to beginning
+      * 755482 : videotestsrc: Force alpha downstream if foreground color contains alpha
+      * 756804 : playsink: text_sink dynamic reconnection is not working
+      * 757008 : tests: typefindfunctions: Fix error leak
+      * 757068 : audio{filter,convert,resample}: Clip input buffers to the segment before handling them
+      * 757351 : audioconvert: Latest audioconvert outputs noise
+      * 757480 : Use GST_STIME_FORMAT and GST_STIME_ARGS with GstClockTimeDiff
+      * 757926 : pbutils:encoding-target: Fix string memory leak
+      * 757927 : tests:video: Fix overlay rectangle and buffer leak
+      * 757928 : audio-quantize: Fix dither_buffer memory leak
+      * 758235 : rtspconnection: add support for parsing custom headers
+      * 758744 : allocators: Add logging category for GstFdMemory
+      * 758911 : audiobasesink/src: send latency message on setcaps
+      * 758922 : rtspconnection should optionally make HTTP requests with abs_path instead of absoluteURI
+      * 759126 : appsrc: issues with duration query handling
+      * 759329 : convertframe: Support video crop when convert frame
+      * 759356 : encodebin: Implement an encoding profile serialization format
+      * 742875 : [API] new audiovisualizer base class
+      * 758754 : oggdemux: failing to play an Opus sample file
 
 ==== Download ====
 
@@ -103,12 +134,50 @@
         
 Contributors to this release
     
+      * Andreas Frisch
+      * Antonio Ospite
+      * Arnaud Vrac
       * Csaba Toth
       * Edward Hervey
+      * Eunhae Choi
       * Evan Callaway
+      * Guillaume Desmottes
+      * Havard Graff
+      * Jan Schmidt
       * Joan Pau Beltran
+      * Julien Isorce
+      * Kazunori Kobayashi
+      * Koop Mast
+      * Luis de Bethencourt
+      * Mathieu Duponchelle
+      * Matthew Waters
+      * Michael Olbrich
+      * Miguel París Díaz
+      * Nicolas Dufresne
+      * Nirbheek Chauhan
+      * Ognyan Tonchev
+      * Pankaj Darak
+      * Pavel Bludov
+      * Perry Hung
+      * Philippe Normand
+      * Rajat Verma
+      * Ravi Kiran K N
+      * Reynaldo H. Verdejo Pinochet
       * Sebastian Dröge
+      * Sebastian Rasmussen
+      * Song Bing
+      * Stefan Sauer
+      * Stian Selnes
+      * Thiago Santos
       * Thibault Saunier
+      * Thomas Bluemel
       * Tim-Philipp Müller
+      * Vincent Penquerc'h
+      * Vineeth T M
       * Vineeth TM
+      * Vivia Nikolaidou
+      * William Manley
+      * Wim Taymans
+      * Xavier Claessens
+      * eunhae choi
  
\ No newline at end of file
diff --git a/autogen.sh b/autogen.sh
index 430ff0d..7e6e216 100755
--- a/autogen.sh
+++ b/autogen.sh
@@ -37,7 +37,11 @@
 if test ! \( -x .git/hooks/pre-commit -a -L .git/hooks/pre-commit \);
 then
     rm -f .git/hooks/pre-commit
-    ln -s ../../common/hooks/pre-commit.hook .git/hooks/pre-commit
+    if ! ln -s ../../common/hooks/pre-commit.hook .git/hooks/pre-commit 2> /dev/null
+    then
+        echo "Failed to create commit hook symlink, copying instead ..."
+        cp common/hooks/pre-commit.hook .git/hooks/pre-commit
+    fi
 fi
 
 # GNU gettext automake support doesn't get along with git.
diff --git a/common/check.mak b/common/check.mak
index 8a90b5d..25a16e6 100644
--- a/common/check.mak
+++ b/common/check.mak
@@ -57,7 +57,7 @@
 	--show-possibly-lost=no                                 \
 	--leak-resolution=high --num-callers=20			\
 	./$* 2>&1 | tee $$valgrind_log ;			\
-	if grep "==" $$valgrind_log > /dev/null 2>&1; then	\
+	if grep "^==" $$valgrind_log > /dev/null 2>&1; then	\
 	    rm $$valgrind_log;					\
 	    exit 1;						\
 	fi ;							\
diff --git a/common/gst.supp b/common/gst.supp
index 81f98a9..2740e9a 100644
--- a/common/gst.supp
+++ b/common/gst.supp
@@ -3976,7 +3976,6 @@
 {
    closures aren't valgrind friendly (bgo#739850)
    Memcheck:Leak
-   match-leak-kinds: possible
    fun:calloc
    ...
    fun:g_cclosure_new
@@ -3985,7 +3984,6 @@
 {
    closures aren't valgrind friendly (bgo#739850)
    Memcheck:Leak
-   match-leak-kinds: possible
    fun:malloc
    ...
    fun:g_closure_add_invalidate_notifier
@@ -3994,7 +3992,6 @@
 {
    closures aren't valgrind friendly (bgo#739850)
    Memcheck:Leak
-   match-leak-kinds: possible
    fun:calloc
    ...
    fun:g_closure_new_simple
@@ -4020,3 +4017,12 @@
    Memcheck:Addr8
    fun:do_lookup_x
 }
+
+{
+   <quark tables are leaked on purpose when they are expanded, observed with glib 2.46 and gst-rtsp-server tests>
+   Memcheck:Leak
+   fun:malloc
+   ...
+   fun:g_quark_init
+   fun:glib_init_ctor
+}
diff --git a/common/m4/gst-args.m4 b/common/m4/gst-args.m4
index b478c82..0628123 100644
--- a/common/m4/gst-args.m4
+++ b/common/m4/gst-args.m4
@@ -358,3 +358,29 @@
       fi
     ])
 ])
+
+dnl Enable extra checks by default only for development versions
+AC_DEFUN([AG_GST_ARG_ENABLE_EXTRA_CHECKS],
+[
+  AC_ARG_ENABLE(extra-check,
+    AC_HELP_STRING([--enable-extra-checks],
+                   [Enable extra runtime checks]),
+    [
+      case "${enableval}" in
+        yes) EXTRA_CHECKS=yes ;;
+        no)  EXTRA_CHECKS=no ;;
+        *)   AC_MSG_ERROR(bad value ${enableval} for --enable-extra-checks) ;;
+      esac
+    ],
+    [
+      if test "x`expr $PACKAGE_VERSION_MINOR % 2`" = "x1" -a "x`expr $PACKAGE_VERSION_MICRO '<' 90`" = "x1"; then
+        EXTRA_CHECKS=yes
+      else
+        EXTRA_CHECKS=no
+      fi
+    ])
+
+    if test "x$EXTRA_CHECKS" = "xyes"; then
+        AC_DEFINE(GST_ENABLE_EXTRA_CHECKS, 1, [Define if extra runtime checks should be enabled])
+    fi
+])
diff --git a/common/m4/gst-error.m4 b/common/m4/gst-error.m4
index d6487cc..0067588 100644
--- a/common/m4/gst-error.m4
+++ b/common/m4/gst-error.m4
@@ -52,31 +52,6 @@
   if test "x$1" != "xno"
   then
     AS_COMPILER_FLAG(-Werror, ERROR_CFLAGS="$ERROR_CFLAGS -Werror")
-
-    dnl if -Werror isn't suported, try -errwarn=%all (Sun Forte case)
-    if test "x$ERROR_CFLAGS" = "x"
-    then
-      AS_COMPILER_FLAG([-errwarn=%all], [
-          ERROR_CFLAGS="-errwarn=%all"
-          dnl try -errwarn=%all,no%E_EMPTY_DECLARATION,
-          dnl no%E_STATEMENT_NOT_REACHED,no%E_ARGUEMENT_MISMATCH,
-          dnl no%E_MACRO_REDEFINED (Sun Forte case)
-          dnl For Forte we need disable "empty declaration" warning produced by un-needed semicolon
-          dnl "statement not reached" disabled because there is g_assert_not_reached () in some places
-          dnl "macro redefined" because of gst/gettext.h
-          dnl FIXME: is it really supposed to be 'ARGUEMENT' and not 'ARGUMENT'?
-          for f in 'no%E_EMPTY_DECLARATION' \
-                   'no%E_STATEMENT_NOT_REACHED' \
-                   'no%E_ARGUEMENT_MISMATCH' \
-                   'no%E_MACRO_REDEFINED' \
-                   'no%E_LOOP_NOT_ENTERED_AT_TOP'
-          do
-            AS_COMPILER_FLAG([-errwarn=%all,$f], [
-              ERROR_CFLAGS="$ERROR_CFLAGS,$f"
-            ])
-          done
-      ])
-    fi
   fi
 
   if test "x$2" != "x"
@@ -142,28 +117,6 @@
 	  AS_CXX_COMPILER_FLAG([-fno-strict-aliasing],
 	    ERROR_CXXFLAGS="$ERROR_CXXFLAGS -fno-strict-aliasing")
 	  ])
-    else
-      dnl if -Werror isn't suported, try -errwarn=%all
-      AS_CXX_COMPILER_FLAG([-errwarn=%all], ERROR_CXXFLAGS="$ERROR_CXXFLAGS -errwarn=%all")
-      if test "x$ERROR_CXXFLAGS" != "x"; then
-        dnl try -errwarn=%all,no%E_EMPTY_DECLARATION,
-        dnl no%E_STATEMENT_NOT_REACHED,no%E_ARGUEMENT_MISMATCH,
-        dnl no%E_MACRO_REDEFINED (Sun Forte case)
-        dnl For Forte we need disable "empty declaration" warning produced by un-needed semicolon
-        dnl "statement not reached" disabled because there is g_assert_not_reached () in some places
-        dnl "macro redefined" because of gst/gettext.h
-        dnl FIXME: is it really supposed to be 'ARGUEMENT' and not 'ARGUMENT'?
-        dnl FIXME: do any of these work with the c++ compiler? if not, why
-        dnl do we check at all?
-        for f in 'no%E_EMPTY_DECLARATION' \
-                 'no%E_STATEMENT_NOT_REACHED' \
-                 'no%E_ARGUEMENT_MISMATCH' \
-                 'no%E_MACRO_REDEFINED' \
-                 'no%E_LOOP_NOT_ENTERED_AT_TOP'
-        do
-          AS_CXX_COMPILER_FLAG([-errwarn=%all,$f], [ERROR_CXXFLAGS="$ERROR_CXXFLAGS,$f"])
-        done
-      fi
     fi
   fi
 
@@ -227,28 +180,6 @@
 	  AS_OBJC_COMPILER_FLAG([-fno-strict-aliasing],
 	    ERROR_OBJCFLAGS="$ERROR_OBJCFLAGS -fno-strict-aliasing")
 	  ])
-    else
-      dnl if -Werror isn't suported, try -errwarn=%all
-      AS_OBJC_COMPILER_FLAG([-errwarn=%all], ERROR_OBJCFLAGS="$ERROR_OBJCFLAGS -errwarn=%all")
-      if test "x$ERROR_OBJCFLAGS" != "x"; then
-        dnl try -errwarn=%all,no%E_EMPTY_DECLARATION,
-        dnl no%E_STATEMENT_NOT_REACHED,no%E_ARGUEMENT_MISMATCH,
-        dnl no%E_MACRO_REDEFINED (Sun Forte case)
-        dnl For Forte we need disable "empty declaration" warning produced by un-needed semicolon
-        dnl "statement not reached" disabled because there is g_assert_not_reached () in some places
-        dnl "macro redefined" because of gst/gettext.h
-        dnl FIXME: is it really supposed to be 'ARGUEMENT' and not 'ARGUMENT'?
-        dnl FIXME: do any of these work with the c++ compiler? if not, why
-        dnl do we check at all?
-        for f in 'no%E_EMPTY_DECLARATION' \
-                 'no%E_STATEMENT_NOT_REACHED' \
-                 'no%E_ARGUEMENT_MISMATCH' \
-                 'no%E_MACRO_REDEFINED' \
-                 'no%E_LOOP_NOT_ENTERED_AT_TOP'
-        do
-          AS_OBJC_COMPILER_FLAG([-errwarn=%all,$f], [ERROR_OBJCFLAGS="$ERROR_OBJCFLAGS,$f"])
-        done
-      fi
     fi
   fi
 
diff --git a/common/m4/gst-glib2.m4 b/common/m4/gst-glib2.m4
index 5b9cd8b..5b72507 100644
--- a/common/m4/gst-glib2.m4
+++ b/common/m4/gst-glib2.m4
@@ -51,18 +51,9 @@
   fi
 
   AC_ARG_ENABLE(glib-asserts,
-    AS_HELP_STRING([--enable-glib-asserts[=@<:@no/auto/yes@:>@]],
+    AS_HELP_STRING([--enable-glib-asserts[=@<:@no/yes@:>@]],
       [Enable GLib assertion]),[enable_glib_assertions=$enableval],
-    [enable_glib_assertions=auto])
-
-  if test "x$enable_glib_assertions" = "xauto"; then
-    dnl Enable assertions only for development versions
-    if test "x`expr $PACKAGE_VERSION_MINOR % 2`" = "x1" -a "x`expr $PACKAGE_VERSION_MICRO '<' 90`" = "x1"; then
-      enable_glib_assertions=yes
-    else
-      enable_glib_assertions=no
-    fi
-  fi
+    [enable_glib_assertions=yes])
 
   if test "x$enable_glib_assertions" = "xno"; then
     GLIB_EXTRA_CFLAGS="$GLIB_EXTRA_CFLAGS -DG_DISABLE_ASSERT"
diff --git a/common/m4/gst-package-release-datetime.m4 b/common/m4/gst-package-release-datetime.m4
index bc885e3..4cf44e6 100644
--- a/common/m4/gst-package-release-datetime.m4
+++ b/common/m4/gst-package-release-datetime.m4
@@ -27,14 +27,16 @@
 AC_DEFUN([AG_GST_SET_PACKAGE_RELEASE_DATETIME],
 [
   dnl AG_GST_SET_PACKAGE_RELEASE_DATETIME()
-  dnl AG_GST_SET_PACKAGE_RELEASE_DATETIME([yes]...)
+  dnl AG_GST_SET_PACKAGE_RELEASE_DATETIME([no]...)
   if test "x$1" = "xno" -o "x$1" = "x"; then
     GST_PACKAGE_RELEASE_DATETIME=`date -u "+%Y-%m-%dT%H:%MZ"`
   elif test "x$1" = "xyes"; then
-    dnl AG_GST_SET_PACKAGE_RELEASE_DATETIME([no], ["YYYY-MM-DD"])
-    dnl AG_GST_SET_PACKAGE_RELEASE_DATETIME([no], [DOAP-FILE], [RELEASE-VERSION])
-    if ( echo $1 | grep '^20[1-9][0-9]-[0-1][0-9]-[0-3][0-9]' >/dev/null ) ; then
-      GST_PACKAGE_RELEASE_DATETIME=$1
+    dnl AG_GST_SET_PACKAGE_RELEASE_DATETIME([yes], [YYYY-MM-DD])
+    dnl AG_GST_SET_PACKAGE_RELEASE_DATETIME([yes], [DOAP-FILE], [RELEASE-VERSION])
+changequote(<<, >>)dnl
+    if ( echo $2 | grep '^20[1-9][0-9]-[0-1][0-9]-[0-3][0-9]' >/dev/null ) ; then
+changequote([, ])dnl
+      GST_PACKAGE_RELEASE_DATETIME=$2
     else
       dnl we assume the .doap file contains the date as YYYY-MM-DD
       YYYY_MM_DD=`sh "${srcdir}/common/extract-release-date-from-doap-file" $3 $2`;
@@ -47,7 +49,9 @@
       fi
     fi
   dnl AG_GST_SET_PACKAGE_RELEASE_DATETIME([YYYY-MM-DD])
+changequote(<<, >>)dnl
   elif ( echo $1 | grep '^20[1-9][0-9]-[0-1][0-9]-[0-3][0-9]' >/dev/null ) ; then
+changequote([, ])dnl
     GST_PACKAGE_RELEASE_DATETIME=$1
   else
     AC_MSG_WARN([SET_PACKAGE_RELEASE_DATETIME: invalid first argument])
diff --git a/common/release.mak b/common/release.mak
index 715657b..c84c2f1 100644
--- a/common/release.mak
+++ b/common/release.mak
@@ -14,6 +14,9 @@
 	@if [ -d ../www/data/src ]; then \
 	  mv -v $(PACKAGE)-$(VERSION).tar.xz ../www/data/src/$(PACKAGE)/ ; \
 	  mv -v $(PACKAGE)-$(VERSION).tar.xz.sha256sum ../www/data/src/$(PACKAGE)/ ; \
+	elif [ -d ../../www/data/src ]; then \
+	  mv -v $(PACKAGE)-$(VERSION).tar.xz ../../www/data/src/$(PACKAGE)/ ; \
+	  mv -v $(PACKAGE)-$(VERSION).tar.xz.sha256sum ../../www/data/src/$(PACKAGE)/ ; \
 	fi
 	@echo "================================================================================================="
 
diff --git a/config.h.in b/config.h.in
index 06ef48e..f496537 100644
--- a/config.h.in
+++ b/config.h.in
@@ -56,6 +56,9 @@
 /* system wide data directory */
 #undef GST_DATADIR
 
+/* Define if extra runtime checks should be enabled */
+#undef GST_ENABLE_EXTRA_CHECKS
+
 /* Extra platform specific plugin suffix */
 #undef GST_EXTRA_MODULE_SUFFIX
 
@@ -182,9 +185,6 @@
 /* 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
 
diff --git a/configure b/configure
index d64b736..a9e0676 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.6.2.
+# Generated by GNU Autoconf 2.69 for GStreamer Base Plug-ins 1.7.1.
 #
 # 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.6.2'
-PACKAGE_STRING='GStreamer Base Plug-ins 1.6.2'
+PACKAGE_VERSION='1.7.1'
+PACKAGE_STRING='GStreamer Base Plug-ins 1.7.1'
 PACKAGE_BUGREPORT='http://bugzilla.gnome.org/enter_bug.cgi?product=GStreamer'
 PACKAGE_URL=''
 
@@ -647,15 +647,15 @@
 GST_OPTION_CFLAGS
 DEPRECATED_CFLAGS
 PROFILE_CFLAGS
+USE_GIO_UNIX_2_0_FALSE
+USE_GIO_UNIX_2_0_TRUE
+GIO_UNIX_2_0_LIBS
+GIO_UNIX_2_0_CFLAGS
 HAVE_FT2_FALSE
 HAVE_FT2_TRUE
 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
@@ -1102,6 +1102,7 @@
 with_libiconv_prefix
 with_libintl_prefix
 enable_fatal_warnings
+enable_extra_check
 enable_debug
 enable_profiling
 enable_valgrind
@@ -1163,7 +1164,6 @@
 enable_pango
 enable_theora
 enable_vorbis
-enable_gio_unix_2_0
 with_ft_prefix
 with_ft_exec_prefix
 enable_freetypetest
@@ -1235,10 +1235,10 @@
 THEORA_LIBS
 VORBIS_CFLAGS
 VORBIS_LIBS
-GIO_UNIX_2_0_CFLAGS
-GIO_UNIX_2_0_LIBS
 FT2_CFLAGS
-FT2_LIBS'
+FT2_LIBS
+GIO_UNIX_2_0_CFLAGS
+GIO_UNIX_2_0_LIBS'
 
 
 # Initialize some variables set by options.
@@ -1789,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.6.2 to adapt to many kinds of systems.
+\`configure' configures GStreamer Base Plug-ins 1.7.1 to adapt to many kinds of systems.
 
 Usage: $0 [OPTION]... [VAR=VALUE]...
 
@@ -1862,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.6.2:";;
+     short | recursive ) echo "Configuration of GStreamer Base Plug-ins 1.7.1:";;
    esac
   cat <<\_ACEOF
 
@@ -1888,6 +1888,7 @@
   --disable-rpath         do not hardcode runtime library paths
   --disable-fatal-warnings
                           Don't turn compiler warnings into fatal errors
+  --enable-extra-checks   Enable extra runtime checks
   --disable-debug         disable addition of -g debugging info
   --enable-profiling      adds -pg to compiler commandline, for profiling
   --disable-valgrind      disable run-time valgrind detection
@@ -1904,7 +1905,7 @@
   --enable-gtk-doc-pdf    build documentation in pdf format [[default=no]]
   --enable-gobject-cast-checks=[no/auto/yes]
                           Enable GObject cast checks
-  --enable-glib-asserts=[no/auto/yes]
+  --enable-glib-asserts=[no/yes]
                           Enable GLib assertion
   --enable-orc            use Orc if installed
   --disable-Bsymbolic     avoid linking with -Bsymbolic
@@ -1939,7 +1940,6 @@
   --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
 
@@ -2084,12 +2084,12 @@
   VORBIS_CFLAGS
               C compiler flags for VORBIS, overriding pkg-config
   VORBIS_LIBS linker flags for VORBIS, overriding pkg-config
+  FT2_CFLAGS  C compiler flags for FT2, overriding pkg-config
+  FT2_LIBS    linker flags for FT2, 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
 
 Use these variables to override the choices made by `configure' or to help
 it to find libraries and programs with nonstandard names/locations.
@@ -2157,7 +2157,7 @@
 test -n "$ac_init_help" && exit $ac_status
 if $ac_init_version; then
   cat <<\_ACEOF
-GStreamer Base Plug-ins configure 1.6.2
+GStreamer Base Plug-ins configure 1.7.1
 generated by GNU Autoconf 2.69
 
 Copyright (C) 2012 Free Software Foundation, Inc.
@@ -2930,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.6.2, which was
+It was created by GStreamer Base Plug-ins $as_me 1.7.1, which was
 generated by GNU Autoconf 2.69.  Invocation command line was
 
   $ $0 $@
@@ -3909,7 +3909,7 @@
 
 # Define the identity of the package.
  PACKAGE='gst-plugins-base'
- VERSION='1.6.2'
+ VERSION='1.7.1'
 
 
 cat >>confdefs.h <<_ACEOF
@@ -4120,9 +4120,9 @@
 
 
 
-  PACKAGE_VERSION_MAJOR=$(echo 1.6.2 | cut -d'.' -f1)
-  PACKAGE_VERSION_MINOR=$(echo 1.6.2 | cut -d'.' -f2)
-  PACKAGE_VERSION_MICRO=$(echo 1.6.2 | cut -d'.' -f3)
+  PACKAGE_VERSION_MAJOR=$(echo 1.7.1 | cut -d'.' -f1)
+  PACKAGE_VERSION_MINOR=$(echo 1.7.1 | cut -d'.' -f2)
+  PACKAGE_VERSION_MICRO=$(echo 1.7.1 | cut -d'.' -f3)
 
 
 
@@ -4133,7 +4133,7 @@
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking nano version" >&5
 $as_echo_n "checking nano version... " >&6; }
 
-  NANO=$(echo 1.6.2 | cut -d'.' -f4)
+  NANO=$(echo 1.7.1 | cut -d'.' -f4)
 
   if test x"$NANO" = x || test "x$NANO" = "x0" ; then
     { $as_echo "$as_me:${as_lineno-$LINENO}: result: 0 (release)" >&5
@@ -8782,10 +8782,10 @@
 done
 
 
-  GST_CURRENT=602
+  GST_CURRENT=701
   GST_REVISION=0
-  GST_AGE=602
-  GST_LIBVERSION=602:0:602
+  GST_AGE=701
+  GST_LIBVERSION=701:0:701
 
 
 
@@ -13110,7 +13110,7 @@
 
 
 
-GST_REQ=1.6.2
+GST_REQ=1.7.1
 
 
 
@@ -15162,6 +15162,33 @@
 
 
 
+  # Check whether --enable-extra-check was given.
+if test "${enable_extra_check+set}" = set; then :
+  enableval=$enable_extra_check;
+      case "${enableval}" in
+        yes) EXTRA_CHECKS=yes ;;
+        no)  EXTRA_CHECKS=no ;;
+        *)   as_fn_error $? "bad value ${enableval} for --enable-extra-checks" "$LINENO" 5 ;;
+      esac
+
+else
+
+      if test "x`expr $PACKAGE_VERSION_MINOR % 2`" = "x1" -a "x`expr $PACKAGE_VERSION_MICRO '<' 90`" = "x1"; then
+        EXTRA_CHECKS=yes
+      else
+        EXTRA_CHECKS=no
+      fi
+
+fi
+
+
+    if test "x$EXTRA_CHECKS" = "xyes"; then
+
+$as_echo "#define GST_ENABLE_EXTRA_CHECKS 1" >>confdefs.h
+
+    fi
+
+
 
     # Check whether --enable-debug was given.
 if test "${enable_debug+set}" = set; then :
@@ -23246,7 +23273,7 @@
 
 
 
-GLIB_REQ=2.32
+GLIB_REQ=2.40.0
 
 
 
@@ -23387,18 +23414,10 @@
 if test "${enable_glib_asserts+set}" = set; then :
   enableval=$enable_glib_asserts; enable_glib_assertions=$enableval
 else
-  enable_glib_assertions=auto
+  enable_glib_assertions=yes
 fi
 
 
-  if test "x$enable_glib_assertions" = "xauto"; then
-        if test "x`expr $PACKAGE_VERSION_MINOR % 2`" = "x1" -a "x`expr $PACKAGE_VERSION_MICRO '<' 90`" = "x1"; then
-      enable_glib_assertions=yes
-    else
-      enable_glib_assertions=no
-    fi
-  fi
-
   if test "x$enable_glib_assertions" = "xno"; then
     GLIB_EXTRA_CFLAGS="$GLIB_EXTRA_CFLAGS -DG_DISABLE_ASSERT"
   fi
@@ -24993,35 +25012,34 @@
 if test "${enable_Bsymbolic+set}" = set; then :
   enableval=$enable_Bsymbolic;
 else
-  SAVED_LDFLAGS="${LDFLAGS}"
+  SAVED_LDFLAGS="${LDFLAGS}" SAVED_LIBS="${LIBS}"
                { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -Bsymbolic-functions linker flag" >&5
 $as_echo_n "checking for -Bsymbolic-functions linker flag... " >&6; }
                LDFLAGS=-Wl,-Bsymbolic-functions
+               LIBS=
                cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
 int
 main ()
 {
-int main (void) { return 0; }
+return 0
   ;
   return 0;
 }
 _ACEOF
 if ac_fn_c_try_link "$LINENO"; then :
-
-                           { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
 $as_echo "yes" >&6; }
                            enable_Bsymbolic=yes
 else
-
-                           { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
 $as_echo "no" >&6; }
                            enable_Bsymbolic=no
 fi
 rm -f core conftest.err conftest.$ac_objext \
     conftest$ac_exeext conftest.$ac_ext
-               LDFLAGS="${SAVED_LDFLAGS}"
+               LDFLAGS="${SAVED_LDFLAGS}" LIBS="${SAVED_LIBS}"
 fi
 
 
@@ -25082,8 +25100,8 @@
       if test "xyes" = "xno" -o "xyes" = "x"; then
     GST_PACKAGE_RELEASE_DATETIME=`date -u "+%Y-%m-%dT%H:%MZ"`
   elif test "xyes" = "xyes"; then
-            if ( echo yes | grep '^201-90-9-0-10-9-0-30-9' >/dev/null ) ; then
-      GST_PACKAGE_RELEASE_DATETIME=yes
+            if ( echo  "${srcdir}/gst-plugins-base.doap"  | grep '^20[1-9][0-9]-[0-1][0-9]-[0-3][0-9]' >/dev/null ) ; then
+      GST_PACKAGE_RELEASE_DATETIME= "${srcdir}/gst-plugins-base.doap"
     else
             YYYY_MM_DD=`sh "${srcdir}/common/extract-release-date-from-doap-file"  $PACKAGE_VERSION_MAJOR.$PACKAGE_VERSION_MINOR.$PACKAGE_VERSION_MICRO   "${srcdir}/gst-plugins-base.doap" `;
       if test "x$YYYY_MM_DD" != "x"; then
@@ -25094,7 +25112,7 @@
         GST_PACKAGE_RELEASE_DATETIME=""
       fi
     fi
-    elif ( echo yes | grep '^201-90-9-0-10-9-0-30-9' >/dev/null ) ; then
+    elif ( echo yes | grep '^20[1-9][0-9]-[0-1][0-9]-[0-3][0-9]' >/dev/null ) ; then
     GST_PACKAGE_RELEASE_DATETIME=yes
   else
     { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: SET_PACKAGE_RELEASE_DATETIME: invalid first argument" >&5
@@ -25121,8 +25139,8 @@
       if test "xno" = "xno" -o "xno" = "x"; then
     GST_PACKAGE_RELEASE_DATETIME=`date -u "+%Y-%m-%dT%H:%MZ"`
   elif test "xno" = "xyes"; then
-            if ( echo no | grep '^201-90-9-0-10-9-0-30-9' >/dev/null ) ; then
-      GST_PACKAGE_RELEASE_DATETIME=no
+            if ( echo  | grep '^20[1-9][0-9]-[0-1][0-9]-[0-3][0-9]' >/dev/null ) ; then
+      GST_PACKAGE_RELEASE_DATETIME=
     else
             YYYY_MM_DD=`sh "${srcdir}/common/extract-release-date-from-doap-file"  `;
       if test "x$YYYY_MM_DD" != "x"; then
@@ -25133,7 +25151,7 @@
         GST_PACKAGE_RELEASE_DATETIME=""
       fi
     fi
-    elif ( echo no | grep '^201-90-9-0-10-9-0-30-9' >/dev/null ) ; then
+    elif ( echo no | grep '^20[1-9][0-9]-[0-1][0-9]-[0-3][0-9]' >/dev/null ) ; then
     GST_PACKAGE_RELEASE_DATETIME=no
   else
     { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: SET_PACKAGE_RELEASE_DATETIME: invalid first argument" >&5
@@ -25437,93 +25455,6 @@
   { $as_echo "$as_me:${as_lineno-$LINENO}: result: $flag_ok" >&5
 $as_echo "$flag_ok" >&6; }
 
-
-        if test "x$ERROR_CFLAGS" = "x"
-    then
-
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking to see if compiler understands -errwarn=%all" >&5
-$as_echo_n "checking to see if compiler understands -errwarn=%all... " >&6; }
-
-  save_CFLAGS="$CFLAGS"
-  CFLAGS="$CFLAGS -errwarn=%all"
-
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  flag_ok=yes
-else
-  flag_ok=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-  CFLAGS="$save_CFLAGS"
-
-  if test "X$flag_ok" = Xyes ; then
-
-          ERROR_CFLAGS="-errwarn=%all"
-                                                                                for f in 'no%E_EMPTY_DECLARATION' \
-                   'no%E_STATEMENT_NOT_REACHED' \
-                   'no%E_ARGUEMENT_MISMATCH' \
-                   'no%E_MACRO_REDEFINED' \
-                   'no%E_LOOP_NOT_ENTERED_AT_TOP'
-          do
-
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking to see if compiler understands -errwarn=%all,$f" >&5
-$as_echo_n "checking to see if compiler understands -errwarn=%all,$f... " >&6; }
-
-  save_CFLAGS="$CFLAGS"
-  CFLAGS="$CFLAGS -errwarn=%all,$f"
-
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  flag_ok=yes
-else
-  flag_ok=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-  CFLAGS="$save_CFLAGS"
-
-  if test "X$flag_ok" = Xyes ; then
-
-              ERROR_CFLAGS="$ERROR_CFLAGS,$f"
-
-    true
-  else
-
-    true
-  fi
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $flag_ok" >&5
-$as_echo "$flag_ok" >&6; }
-
-          done
-
-    true
-  else
-
-    true
-  fi
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $flag_ok" >&5
-$as_echo "$flag_ok" >&6; }
-
-    fi
   fi
 
   if test "x
@@ -25879,122 +25810,6 @@
 
 
 fi
-    else
-
-
-
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking to see if c++ compiler understands -errwarn=%all" >&5
-$as_echo_n "checking to see if c++ compiler understands -errwarn=%all... " >&6; }
-
-  save_CPPFLAGS="$CPPFLAGS"
-  CPPFLAGS="$CPPFLAGS -errwarn=%all"
-
-  ac_ext=cpp
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-
-
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_cxx_try_compile "$LINENO"; then :
-  flag_ok=yes
-else
-  flag_ok=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-  CPPFLAGS="$save_CPPFLAGS"
-
-  if test "X$flag_ok" = Xyes ; then
-    ERROR_CXXFLAGS="$ERROR_CXXFLAGS -errwarn=%all"
-    true
-  else
-
-    true
-  fi
-
-  ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $flag_ok" >&5
-$as_echo "$flag_ok" >&6; }
-
-      if test "x$ERROR_CXXFLAGS" != "x"; then
-                                                                                for f in 'no%E_EMPTY_DECLARATION' \
-                 'no%E_STATEMENT_NOT_REACHED' \
-                 'no%E_ARGUEMENT_MISMATCH' \
-                 'no%E_MACRO_REDEFINED' \
-                 'no%E_LOOP_NOT_ENTERED_AT_TOP'
-        do
-
-
-
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking to see if c++ compiler understands -errwarn=%all,$f" >&5
-$as_echo_n "checking to see if c++ compiler understands -errwarn=%all,$f... " >&6; }
-
-  save_CPPFLAGS="$CPPFLAGS"
-  CPPFLAGS="$CPPFLAGS -errwarn=%all,$f"
-
-  ac_ext=cpp
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-
-
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_cxx_try_compile "$LINENO"; then :
-  flag_ok=yes
-else
-  flag_ok=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-  CPPFLAGS="$save_CPPFLAGS"
-
-  if test "X$flag_ok" = Xyes ; then
-    ERROR_CXXFLAGS="$ERROR_CXXFLAGS,$f"
-    true
-  else
-
-    true
-  fi
-
-  ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $flag_ok" >&5
-$as_echo "$flag_ok" >&6; }
-
-        done
-      fi
     fi
   fi
 
@@ -30321,189 +30136,6 @@
 
 
 
-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
@@ -31091,6 +30723,86 @@
 
 
 
+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 \"gio-unix-2.0 >= 2.24\""; } >&5
+  ($PKG_CONFIG --exists --print-errors "gio-unix-2.0 >= 2.24") 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 "gio-unix-2.0 >= 2.24" 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 \"gio-unix-2.0 >= 2.24\""; } >&5
+  ($PKG_CONFIG --exists --print-errors "gio-unix-2.0 >= 2.24") 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 "gio-unix-2.0 >= 2.24" 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 "gio-unix-2.0 >= 2.24"`
+        else
+	        GIO_UNIX_2_0_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "gio-unix-2.0 >= 2.24"`
+        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"
+elif test $pkg_failed = untried; then
+	HAVE_GIO_UNIX_2_0="no"
+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
+ if test "x$HAVE_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$USE_DEBUG" = xyes; then
    PROFILE_CFLAGS="-g"
@@ -31616,10 +31328,6 @@
   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
@@ -31656,6 +31364,10 @@
   as_fn_error $? "conditional \"HAVE_FT2\" 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
 
 : "${CONFIG_STATUS=./config.status}"
 ac_write_fail=0
@@ -32053,7 +31765,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.6.2, which was
+This file was extended by GStreamer Base Plug-ins $as_me 1.7.1, which was
 generated by GNU Autoconf 2.69.  Invocation command line was
 
   CONFIG_FILES    = $CONFIG_FILES
@@ -32119,7 +31831,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.6.2
+GStreamer Base Plug-ins config.status 1.7.1
 configured by $0, generated by GNU Autoconf 2.69,
   with options \\"\$ac_cs_config\\"
 
diff --git a/configure.ac b/configure.ac
index cf2780c..9c52aeb 100644
--- a/configure.ac
+++ b/configure.ac
@@ -5,7 +5,7 @@
 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.6.2],[http://bugzilla.gnome.org/enter_bug.cgi?product=GStreamer],[gst-plugins-base])
+AC_INIT([GStreamer Base Plug-ins],[1.7.1],[http://bugzilla.gnome.org/enter_bug.cgi?product=GStreamer],[gst-plugins-base])
 
 AG_GST_INIT
 
@@ -56,10 +56,10 @@
 dnl      1.10.9 (who knows) => 1009
 dnl
 dnl sets GST_LT_LDFLAGS
-AS_LIBTOOL(GST, 602, 0, 602)
+AS_LIBTOOL(GST, 701, 0, 701)
 
 dnl *** required versions of GStreamer stuff ***
-GST_REQ=1.6.2
+GST_REQ=1.7.1
 
 dnl *** autotools stuff ****
 
@@ -78,6 +78,7 @@
 dnl *** check for arguments to configure ***
 
 AG_GST_ARG_DISABLE_FATAL_WARNINGS
+AG_GST_ARG_ENABLE_EXTRA_CHECKS
 
 AG_GST_ARG_DEBUG
 AG_GST_ARG_PROFILING
@@ -247,7 +248,7 @@
 dnl *** checks for dependency libraries ***
 
 dnl GLib
-GLIB_REQ=2.32
+GLIB_REQ=2.40.0
 AG_GST_GLIB_CHECK([$GLIB_REQ])
 
 ORC_CHECK([0.4.23])
@@ -346,15 +347,16 @@
 dnl intra-library PLT jumps, if available.
 AC_ARG_ENABLE(Bsymbolic,
               [AS_HELP_STRING([--disable-Bsymbolic],[avoid linking with -Bsymbolic])],,
-              [SAVED_LDFLAGS="${LDFLAGS}"
+              [SAVED_LDFLAGS="${LDFLAGS}" SAVED_LIBS="${LIBS}"
                AC_MSG_CHECKING([for -Bsymbolic-functions linker flag])
                LDFLAGS=-Wl,-Bsymbolic-functions
-               AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[int main (void) { return 0; }]])],[
+               LIBS=
+               AC_TRY_LINK([], [return 0],
                            AC_MSG_RESULT(yes)
-                           enable_Bsymbolic=yes],[
+                           enable_Bsymbolic=yes,
                            AC_MSG_RESULT(no)
-                           enable_Bsymbolic=no])
-               LDFLAGS="${SAVED_LDFLAGS}"])
+                           enable_Bsymbolic=no)
+               LDFLAGS="${SAVED_LDFLAGS}" LIBS="${SAVED_LIBS}"])
 
 
 dnl *** set variables based on configure arguments ***
@@ -703,12 +705,6 @@
   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([
@@ -750,6 +746,12 @@
 AC_SUBST(FT2_CFLAGS)
 AC_SUBST(FT2_LIBS)
 
+dnl *** gio-unix-2.0 for tests/check/pipelines/tcp.c ***
+PKG_CHECK_MODULES(GIO_UNIX_2_0, gio-unix-2.0 >= 2.24,
+    HAVE_GIO_UNIX_2_0="yes",
+    HAVE_GIO_UNIX_2_0="no")
+AM_CONDITIONAL(USE_GIO_UNIX_2_0, test "x$HAVE_GIO_UNIX_2_0" = "xyes")
+
 dnl *** finalize CFLAGS, LDFLAGS, LIBS
 
 dnl Overview:
diff --git a/docs/libs/gst-plugins-base-libs-docs.sgml b/docs/libs/gst-plugins-base-libs-docs.sgml
index 7767abf..640fba0 100644
--- a/docs/libs/gst-plugins-base-libs-docs.sgml
+++ b/docs/libs/gst-plugins-base-libs-docs.sgml
@@ -197,6 +197,7 @@
       </para>
       <xi:include href="xml/gstvideo.xml" />
       <xi:include href="xml/gstvideometa.xml" />
+      <xi:include href="xml/gstvideoaffinetransformationmeta.xml" />
       <xi:include href="xml/gstvideooverlaycomposition.xml" />
       <xi:include href="xml/gstvideofilter.xml" />
       <xi:include href="xml/gstvideodither.xml" />
diff --git a/docs/libs/gst-plugins-base-libs-sections.txt b/docs/libs/gst-plugins-base-libs-sections.txt
index 444dc8f..fd3afdd 100644
--- a/docs/libs/gst-plugins-base-libs-sections.txt
+++ b/docs/libs/gst-plugins-base-libs-sections.txt
@@ -184,6 +184,7 @@
 GST_CLOCK_TIME_TO_FRAMES
 GST_META_TAG_AUDIO_STR
 GST_META_TAG_AUDIO_CHANNELS_STR
+GST_META_TAG_AUDIO_RATE_STR
 GST_AUDIO_NE
 GST_AUDIO_OE
 GST_AUDIO_RATE_RANGE
@@ -222,11 +223,15 @@
 gst_buffer_add_audio_downmix_meta
 gst_buffer_get_audio_downmix_meta
 gst_buffer_get_audio_downmix_meta_for_channels
+
+GstAudioClippingMeta
+gst_buffer_add_audio_clipping_meta
+gst_buffer_get_audio_clipping_meta
 <SUBSECTION Standard>
-GST_AUDIO_DOWNMIX_META_API_TYPE
-GST_AUDIO_DOWNMIX_META_INFO
-gst_audio_downmix_meta_api_get_type
-gst_audio_downmix_meta_get_info
+GST_AUDIO_CLIPPING_META_API_TYPE
+GST_AUDIO_CLIPPING_META_INFO
+gst_audio_clipping_meta_api_get_type
+gst_audio_clipping_meta_get_info
 </SECTION>
 
 <SECTION>
@@ -1486,6 +1491,7 @@
 gst_rtsp_connection_create_from_socket
 gst_rtsp_connection_accept
 gst_rtsp_connection_connect
+gst_rtsp_connection_connect_with_response
 gst_rtsp_connection_close
 gst_rtsp_connection_free
 
@@ -2175,6 +2181,12 @@
 gst_codec_utils_mpeg4video_get_profile
 gst_codec_utils_mpeg4video_get_level
 gst_codec_utils_mpeg4video_caps_set_level_and_profile
+<SUBSECTION>
+gst_codec_utils_opus_create_caps
+gst_codec_utils_opus_create_caps_from_header
+gst_codec_utils_opus_parse_caps
+gst_codec_utils_opus_create_header
+gst_codec_utils_opus_parse_header
 </SECTION>
 
 <SECTION>
@@ -2615,6 +2627,18 @@
 </SECTION>
 
 <SECTION>
+<FILE>gstvideoaffinetransformationmeta</FILE>
+<INCLUDE>gst/video/gstvideoaffinetransformationmeta.h</INCLUDE>
+GstVideoAffineTransformationMeta
+gst_buffer_add_video_affine_transformation_meta
+gst_buffer_get_video_affine_transformation_meta
+gst_video_affine_transformation_meta_apply_matrix
+<SUBSECTION Standard>
+gst_video_affine_transformation_meta_api_get_type
+gst_video_affine_transformation_meta_get_info
+</SECTION>
+
+<SECTION>
 <FILE>gstvideooverlaycomposition</FILE>
 <INCLUDE>gst/video/video-overlay-composition.h</INCLUDE>
 <SUBSECTION composition>
diff --git a/docs/libs/html/api-index-full.html b/docs/libs/html/api-index-full.html
index 3b868b4..b64f050 100644
--- a/docs/libs/html/api-index-full.html
+++ b/docs/libs/html/api-index-full.html
@@ -298,6 +298,10 @@
 </dt>
 <dd></dd>
 <dt>
+<a class="link" href="gst-plugins-base-libs-gstaudiometa.html#GstAudioClippingMeta" title="struct GstAudioClippingMeta">GstAudioClippingMeta</a>, struct in <a class="link" href="gst-plugins-base-libs-gstaudiometa.html" title="gstaudiometa">gstaudiometa</a>
+</dt>
+<dd></dd>
+<dt>
 <a class="link" href="gst-plugins-base-libs-gstaudioclock.html#GstAudioClock-struct" title="struct GstAudioClock">GstAudioClock</a>, struct in <a class="link" href="gst-plugins-base-libs-gstaudioclock.html" title="gstaudioclock">gstaudioclock</a>
 </dt>
 <dd></dd>
@@ -1211,10 +1215,18 @@
 <dd></dd>
 <a name="idxB"></a><h3 class="title">B</h3>
 <dt>
+<a class="link" href="gst-plugins-base-libs-gstaudiometa.html#gst-buffer-add-audio-clipping-meta" title="gst_buffer_add_audio_clipping_meta ()">gst_buffer_add_audio_clipping_meta</a>, function in <a class="link" href="gst-plugins-base-libs-gstaudiometa.html" title="gstaudiometa">gstaudiometa</a>
+</dt>
+<dd></dd>
+<dt>
 <a class="link" href="gst-plugins-base-libs-gstaudiometa.html#gst-buffer-add-audio-downmix-meta" title="gst_buffer_add_audio_downmix_meta ()">gst_buffer_add_audio_downmix_meta</a>, function in <a class="link" href="gst-plugins-base-libs-gstaudiometa.html" title="gstaudiometa">gstaudiometa</a>
 </dt>
 <dd></dd>
 <dt>
+<a class="link" href="gst-plugins-base-libs-gstvideoaffinetransformationmeta.html#gst-buffer-add-video-affine-transformation-meta" title="gst_buffer_add_video_affine_transformation_meta ()">gst_buffer_add_video_affine_transformation_meta</a>, function in <a class="link" href="gst-plugins-base-libs-gstvideoaffinetransformationmeta.html" title="gstvideoaffinetransformationmeta">gstvideoaffinetransformationmeta</a>
+</dt>
+<dd></dd>
+<dt>
 <a class="link" href="gst-plugins-base-libs-gstvideometa.html#gst-buffer-add-video-crop-meta" title="gst_buffer_add_video_crop_meta()">gst_buffer_add_video_crop_meta</a>, macro in <a class="link" href="gst-plugins-base-libs-gstvideometa.html" title="gstvideometa">gstvideometa</a>
 </dt>
 <dd></dd>
@@ -1243,6 +1255,10 @@
 </dt>
 <dd></dd>
 <dt>
+<a class="link" href="gst-plugins-base-libs-gstaudiometa.html#gst-buffer-get-audio-clipping-meta" title="gst_buffer_get_audio_clipping_meta()">gst_buffer_get_audio_clipping_meta</a>, macro in <a class="link" href="gst-plugins-base-libs-gstaudiometa.html" title="gstaudiometa">gstaudiometa</a>
+</dt>
+<dd></dd>
+<dt>
 <a class="link" href="gst-plugins-base-libs-gstaudiometa.html#gst-buffer-get-audio-downmix-meta" title="gst_buffer_get_audio_downmix_meta()">gst_buffer_get_audio_downmix_meta</a>, macro in <a class="link" href="gst-plugins-base-libs-gstaudiometa.html" title="gstaudiometa">gstaudiometa</a>
 </dt>
 <dd></dd>
@@ -1251,6 +1267,10 @@
 </dt>
 <dd></dd>
 <dt>
+<a class="link" href="gst-plugins-base-libs-gstvideoaffinetransformationmeta.html#gst-buffer-get-video-affine-transformation-meta" title="gst_buffer_get_video_affine_transformation_meta()">gst_buffer_get_video_affine_transformation_meta</a>, macro in <a class="link" href="gst-plugins-base-libs-gstvideoaffinetransformationmeta.html" title="gstvideoaffinetransformationmeta">gstvideoaffinetransformationmeta</a>
+</dt>
+<dd></dd>
+<dt>
 <a class="link" href="gst-plugins-base-libs-gstvideometa.html#gst-buffer-get-video-crop-meta" title="gst_buffer_get_video_crop_meta()">gst_buffer_get_video_crop_meta</a>, macro in <a class="link" href="gst-plugins-base-libs-gstvideometa.html" title="gstvideometa">gstvideometa</a>
 </dt>
 <dd></dd>
@@ -1380,6 +1400,26 @@
 </dt>
 <dd></dd>
 <dt>
+<a class="link" href="gst-plugins-base-libs-gstpbutilscodecutils.html#gst-codec-utils-opus-create-caps" title="gst_codec_utils_opus_create_caps ()">gst_codec_utils_opus_create_caps</a>, function in <a class="link" href="gst-plugins-base-libs-gstpbutilscodecutils.html" title="gstpbutilscodecutils">gstpbutilscodecutils</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstpbutilscodecutils.html#gst-codec-utils-opus-create-caps-from-header" title="gst_codec_utils_opus_create_caps_from_header ()">gst_codec_utils_opus_create_caps_from_header</a>, function in <a class="link" href="gst-plugins-base-libs-gstpbutilscodecutils.html" title="gstpbutilscodecutils">gstpbutilscodecutils</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstpbutilscodecutils.html#gst-codec-utils-opus-create-header" title="gst_codec_utils_opus_create_header ()">gst_codec_utils_opus_create_header</a>, function in <a class="link" href="gst-plugins-base-libs-gstpbutilscodecutils.html" title="gstpbutilscodecutils">gstpbutilscodecutils</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstpbutilscodecutils.html#gst-codec-utils-opus-parse-caps" title="gst_codec_utils_opus_parse_caps ()">gst_codec_utils_opus_parse_caps</a>, function in <a class="link" href="gst-plugins-base-libs-gstpbutilscodecutils.html" title="gstpbutilscodecutils">gstpbutilscodecutils</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="gst-plugins-base-libs-gstpbutilscodecutils.html#gst-codec-utils-opus-parse-header" title="gst_codec_utils_opus_parse_header ()">gst_codec_utils_opus_parse_header</a>, function in <a class="link" href="gst-plugins-base-libs-gstpbutilscodecutils.html" title="gstpbutilscodecutils">gstpbutilscodecutils</a>
+</dt>
+<dd></dd>
+<dt>
 <a class="link" href="gst-plugins-base-libs-gstcolorbalance.html#GstColorBalance-struct" title="GstColorBalance">GstColorBalance</a>, struct in <a class="link" href="gst-plugins-base-libs-gstcolorbalance.html" title="gstcolorbalance">gstcolorbalance</a>
 </dt>
 <dd></dd>
@@ -2173,6 +2213,10 @@
 </dt>
 <dd></dd>
 <dt>
+<a class="link" href="gst-plugins-base-libs-gstaudio.html#GST-META-TAG-AUDIO-RATE-STR:CAPS" title="GST_META_TAG_AUDIO_RATE_STR">GST_META_TAG_AUDIO_RATE_STR</a>, macro in <a class="link" href="gst-plugins-base-libs-gstaudio.html" title="gstaudio">gstaudio</a>
+</dt>
+<dd></dd>
+<dt>
 <a class="link" href="gst-plugins-base-libs-gstaudio.html#GST-META-TAG-AUDIO-STR:CAPS" title="GST_META_TAG_AUDIO_STR">GST_META_TAG_AUDIO_STR</a>, macro in <a class="link" href="gst-plugins-base-libs-gstaudio.html" title="gstaudio">gstaudio</a>
 </dt>
 <dd></dd>
@@ -3592,6 +3636,10 @@
 </dt>
 <dd></dd>
 <dt>
+<a class="link" href="gst-plugins-base-libs-gstrtspconnection.html#gst-rtsp-connection-connect-with-response" title="gst_rtsp_connection_connect_with_response ()">gst_rtsp_connection_connect_with_response</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-create" title="gst_rtsp_connection_create ()">gst_rtsp_connection_create</a>, function in <a class="link" href="gst-plugins-base-libs-gstrtspconnection.html" title="gstrtspconnection">gstrtspconnection</a>
 </dt>
 <dd></dd>
@@ -4919,6 +4967,10 @@
 <dd></dd>
 <a name="idxV"></a><h3 class="title">V</h3>
 <dt>
+<a class="link" href="gst-plugins-base-libs-gstvideoaffinetransformationmeta.html#GstVideoAffineTransformationMeta" title="struct GstVideoAffineTransformationMeta">GstVideoAffineTransformationMeta</a>, struct in <a class="link" href="gst-plugins-base-libs-gstvideoaffinetransformationmeta.html" title="gstvideoaffinetransformationmeta">gstvideoaffinetransformationmeta</a>
+</dt>
+<dd></dd>
+<dt>
 <a class="link" href="gst-plugins-base-libs-gstvideo.html#GstVideoAlignment" title="struct GstVideoAlignment">GstVideoAlignment</a>, struct in <a class="link" href="gst-plugins-base-libs-gstvideo.html" title="gstvideo">gstvideo</a>
 </dt>
 <dd></dd>
@@ -5183,6 +5235,10 @@
 </dt>
 <dd></dd>
 <dt>
+<a class="link" href="gst-plugins-base-libs-gstvideoaffinetransformationmeta.html#gst-video-affine-transformation-meta-apply-matrix" title="gst_video_affine_transformation_meta_apply_matrix ()">gst_video_affine_transformation_meta_apply_matrix</a>, function in <a class="link" href="gst-plugins-base-libs-gstvideoaffinetransformationmeta.html" title="gstvideoaffinetransformationmeta">gstvideoaffinetransformationmeta</a>
+</dt>
+<dd></dd>
+<dt>
 <a class="link" href="gst-plugins-base-libs-gstvideo.html#gst-video-alignment-reset" title="gst_video_alignment_reset ()">gst_video_alignment_reset</a>, function in <a class="link" href="gst-plugins-base-libs-gstvideo.html" title="gstvideo">gstvideo</a>
 </dt>
 <dd></dd>
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 73fffd3..8da2cdf 100644
--- a/docs/libs/html/gst-plugins-base-libs-1.0.devhelp2
+++ b/docs/libs/html/gst-plugins-base-libs-1.0.devhelp2
@@ -87,6 +87,7 @@
       <sub name="Video Library" link="gstreamer-video.html">
         <sub name="gstvideo" link="gst-plugins-base-libs-gstvideo.html"/>
         <sub name="gstvideometa" link="gst-plugins-base-libs-gstvideometa.html"/>
+        <sub name="gstvideoaffinetransformationmeta" link="gst-plugins-base-libs-gstvideoaffinetransformationmeta.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"/>
@@ -214,6 +215,7 @@
     <keyword type="enum" name="enum GstAudioPackFlags" link="gst-plugins-base-libs-gstaudio.html#GstAudioPackFlags"/>
     <keyword type="macro" name="GST_META_TAG_AUDIO_STR" link="gst-plugins-base-libs-gstaudio.html#GST-META-TAG-AUDIO-STR:CAPS" since="1.2"/>
     <keyword type="macro" name="GST_META_TAG_AUDIO_CHANNELS_STR" link="gst-plugins-base-libs-gstaudio.html#GST-META-TAG-AUDIO-CHANNELS-STR:CAPS" since="1.2"/>
+    <keyword type="macro" name="GST_META_TAG_AUDIO_RATE_STR" link="gst-plugins-base-libs-gstaudio.html#GST-META-TAG-AUDIO-RATE-STR:CAPS" since="1.8"/>
     <keyword type="macro" name="GST_AUDIO_RATE_RANGE" link="gst-plugins-base-libs-gstaudio.html#GST-AUDIO-RATE-RANGE:CAPS"/>
     <keyword type="macro" name="GST_AUDIO_CHANNELS_RANGE" link="gst-plugins-base-libs-gstaudio.html#GST-AUDIO-CHANNELS-RANGE:CAPS"/>
     <keyword type="macro" name="GST_AUDIO_FORMATS_ALL" link="gst-plugins-base-libs-gstaudio.html#GST-AUDIO-FORMATS-ALL:CAPS"/>
@@ -223,7 +225,10 @@
     <keyword type="function" name="gst_buffer_add_audio_downmix_meta ()" link="gst-plugins-base-libs-gstaudiometa.html#gst-buffer-add-audio-downmix-meta"/>
     <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="function" name="gst_buffer_add_audio_clipping_meta ()" link="gst-plugins-base-libs-gstaudiometa.html#gst-buffer-add-audio-clipping-meta" since="1.8"/>
+    <keyword type="macro" name="gst_buffer_get_audio_clipping_meta()" link="gst-plugins-base-libs-gstaudiometa.html#gst-buffer-get-audio-clipping-meta"/>
     <keyword type="struct" name="struct GstAudioDownmixMeta" link="gst-plugins-base-libs-gstaudiometa.html#GstAudioDownmixMeta"/>
+    <keyword type="struct" name="struct GstAudioClippingMeta" link="gst-plugins-base-libs-gstaudiometa.html#GstAudioClippingMeta" since="1.8"/>
     <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"/>
@@ -646,6 +651,7 @@
     <keyword type="function" name="gst_rtsp_connection_create_from_socket ()" link="gst-plugins-base-libs-gstrtspconnection.html#gst-rtsp-connection-create-from-socket"/>
     <keyword type="function" name="gst_rtsp_connection_accept ()" link="gst-plugins-base-libs-gstrtspconnection.html#gst-rtsp-connection-accept"/>
     <keyword type="function" name="gst_rtsp_connection_connect ()" link="gst-plugins-base-libs-gstrtspconnection.html#gst-rtsp-connection-connect"/>
+    <keyword type="function" name="gst_rtsp_connection_connect_with_response ()" link="gst-plugins-base-libs-gstrtspconnection.html#gst-rtsp-connection-connect-with-response"/>
     <keyword type="function" name="gst_rtsp_connection_close ()" link="gst-plugins-base-libs-gstrtspconnection.html#gst-rtsp-connection-close"/>
     <keyword type="function" name="gst_rtsp_connection_free ()" link="gst-plugins-base-libs-gstrtspconnection.html#gst-rtsp-connection-free"/>
     <keyword type="function" name="gst_rtsp_connection_read ()" link="gst-plugins-base-libs-gstrtspconnection.html#gst-rtsp-connection-read"/>
@@ -1090,6 +1096,11 @@
     <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="function" name="gst_codec_utils_opus_create_caps ()" link="gst-plugins-base-libs-gstpbutilscodecutils.html#gst-codec-utils-opus-create-caps" since="1.8"/>
+    <keyword type="function" name="gst_codec_utils_opus_create_caps_from_header ()" link="gst-plugins-base-libs-gstpbutilscodecutils.html#gst-codec-utils-opus-create-caps-from-header" since="1.8"/>
+    <keyword type="function" name="gst_codec_utils_opus_parse_caps ()" link="gst-plugins-base-libs-gstpbutilscodecutils.html#gst-codec-utils-opus-parse-caps" since="1.8"/>
+    <keyword type="function" name="gst_codec_utils_opus_create_header ()" link="gst-plugins-base-libs-gstpbutilscodecutils.html#gst-codec-utils-opus-create-header" since="1.8"/>
+    <keyword type="function" name="gst_codec_utils_opus_parse_header ()" link="gst-plugins-base-libs-gstpbutilscodecutils.html#gst-codec-utils-opus-parse-header" since="1.8"/>
     <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"/>
@@ -1463,6 +1474,10 @@
     <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="function" name="gst_buffer_add_video_affine_transformation_meta ()" link="gst-plugins-base-libs-gstvideoaffinetransformationmeta.html#gst-buffer-add-video-affine-transformation-meta" since="1.8"/>
+    <keyword type="macro" name="gst_buffer_get_video_affine_transformation_meta()" link="gst-plugins-base-libs-gstvideoaffinetransformationmeta.html#gst-buffer-get-video-affine-transformation-meta"/>
+    <keyword type="function" name="gst_video_affine_transformation_meta_apply_matrix ()" link="gst-plugins-base-libs-gstvideoaffinetransformationmeta.html#gst-video-affine-transformation-meta-apply-matrix" since="1.8"/>
+    <keyword type="struct" name="struct GstVideoAffineTransformationMeta" link="gst-plugins-base-libs-gstvideoaffinetransformationmeta.html#GstVideoAffineTransformationMeta"/>
     <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"/>
@@ -1777,6 +1792,7 @@
     <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_PACK_FLAG_TRUNCATE_RANGE" link="gst-plugins-base-libs-gstaudio.html#GST-AUDIO-PACK-FLAG-TRUNCATE-RANGE: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"/>
diff --git a/docs/libs/html/gst-plugins-base-libs-GstVideoChroma.html b/docs/libs/html/gst-plugins-base-libs-GstVideoChroma.html
index 7229453..ddae8f9 100644
--- a/docs/libs/html/gst-plugins-base-libs-GstVideoChroma.html
+++ b/docs/libs/html/gst-plugins-base-libs-GstVideoChroma.html
@@ -137,7 +137,7 @@
 <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>
+<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">
@@ -152,7 +152,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.15.8.7.2.6"></a><h4>Returns</h4>
+<a name="id-1.2.15.9.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>
@@ -166,7 +166,7 @@
 <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>
+<a name="id-1.2.15.9.7.3.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -181,7 +181,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.15.8.7.3.6"></a><h4>Returns</h4>
+<a name="id-1.2.15.9.7.3.6"></a><h4>Returns</h4>
 <p> a string describing <em class="parameter"><code>site</code></em>
 .</p>
 </div>
@@ -197,7 +197,7 @@
  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>
+<a name="id-1.2.15.9.7.4.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -232,7 +232,7 @@
 <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>
+<a name="id-1.2.15.9.7.5.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -259,7 +259,7 @@
 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>
+<a name="id-1.2.15.9.7.6.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -303,7 +303,7 @@
 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>
+<a name="id-1.2.15.9.7.7.6"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -345,7 +345,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.15.8.7.7.7"></a><h4>Returns</h4>
+<a name="id-1.2.15.9.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>
@@ -357,7 +357,7 @@
 <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>
+<a name="id-1.2.15.9.8.2.4"></a><h4>Members</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="300px" class="enum_members_name">
@@ -437,7 +437,7 @@
 <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>
+<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">
@@ -468,7 +468,7 @@
 <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>
+<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">
diff --git a/docs/libs/html/gst-plugins-base-libs-GstVideoDecoder.html b/docs/libs/html/gst-plugins-base-libs-GstVideoDecoder.html
index f3840ba..e3ec3c1 100644
--- a/docs/libs/html/gst-plugins-base-libs-GstVideoDecoder.html
+++ b/docs/libs/html/gst-plugins-base-libs-GstVideoDecoder.html
@@ -507,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.16.6.2.5"></a><h4>Parameters</h4>
+<a name="id-1.2.15.17.6.2.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -563,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.16.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">
@@ -585,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.16.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">
@@ -607,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.16.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">
@@ -629,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.16.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">
@@ -651,7 +651,7 @@
 </pre>
 <p>Gives the segment of the element.</p>
 <div class="refsect3">
-<a name="id-1.2.15.16.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">
@@ -673,7 +673,7 @@
 </pre>
 <p>Gives the segment of the element.</p>
 <div class="refsect3">
-<a name="id-1.2.15.16.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">
@@ -697,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.16.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">
@@ -731,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.16.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">
@@ -746,7 +746,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.15.16.6.10.7"></a><h4>Returns</h4>
+<a name="id-1.2.15.17.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>
@@ -766,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.16.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">
@@ -788,7 +788,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.15.16.6.11.7"></a><h4>Returns</h4>
+<a name="id-1.2.15.17.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>
@@ -806,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.16.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">
@@ -842,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.16.6.13.4"></a><h4>Parameters</h4>
+<a name="id-1.2.15.17.6.13.4"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -857,7 +857,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.15.16.6.13.5"></a><h4>Returns</h4>
+<a name="id-1.2.15.17.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>
@@ -874,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.16.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">
@@ -896,7 +896,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.15.16.6.14.6"></a><h4>Returns</h4>
+<a name="id-1.2.15.17.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>
 </div>
 </div>
@@ -916,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.16.6.15.6"></a><h4>Parameters</h4>
+<a name="id-1.2.15.17.6.15.6"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -938,7 +938,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.15.16.6.15.7"></a><h4>Returns</h4>
+<a name="id-1.2.15.17.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>
 </div>
 </div>
@@ -953,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.16.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">
@@ -985,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.16.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">
@@ -1000,7 +1000,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.15.16.6.17.6"></a><h4>Returns</h4>
+<a name="id-1.2.15.17.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>
 </div>
 </div>
@@ -1012,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.16.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">
@@ -1034,7 +1034,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.15.16.6.18.6"></a><h4>Returns</h4>
+<a name="id-1.2.15.17.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>
@@ -1047,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.16.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">
@@ -1062,7 +1062,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.15.16.6.19.6"></a><h4>Returns</h4>
+<a name="id-1.2.15.17.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>
@@ -1079,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.16.6.20.5"></a><h4>Parameters</h4>
+<a name="id-1.2.15.17.6.20.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1101,7 +1101,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.15.16.6.20.6"></a><h4>Returns</h4>
+<a name="id-1.2.15.17.6.20.6"></a><h4>Returns</h4>
 <p> max decoding time.</p>
 </div>
 </div>
@@ -1111,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.16.6.21.4"></a><h4>Parameters</h4>
+<a name="id-1.2.15.17.6.21.4"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1126,7 +1126,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.15.16.6.21.5"></a><h4>Returns</h4>
+<a name="id-1.2.15.17.6.21.5"></a><h4>Returns</h4>
 <p> currently configured decoder tolerated error count.</p>
 </div>
 </div>
@@ -1137,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.16.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">
@@ -1152,7 +1152,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.15.16.6.22.6"></a><h4>Returns</h4>
+<a name="id-1.2.15.17.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>
@@ -1165,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.16.6.23.5"></a><h4>Parameters</h4>
+<a name="id-1.2.15.17.6.23.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1180,7 +1180,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.15.16.6.23.6"></a><h4>Returns</h4>
+<a name="id-1.2.15.17.6.23.6"></a><h4>Returns</h4>
 <p> TRUE if input data is considered packetized.</p>
 </div>
 </div>
@@ -1193,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.16.6.24.5"></a><h4>Parameters</h4>
+<a name="id-1.2.15.17.6.24.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1208,7 +1208,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.15.16.6.24.6"></a><h4>Returns</h4>
+<a name="id-1.2.15.17.6.24.6"></a><h4>Returns</h4>
 <p> The number of bytes pending for the current frame</p>
 </div>
 <p class="since">Since: 1.4</p>
@@ -1219,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.16.6.25.4"></a><h4>Parameters</h4>
+<a name="id-1.2.15.17.6.25.4"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1235,7 +1235,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.15.16.6.25.5"></a><h4>Returns</h4>
+<a name="id-1.2.15.17.6.25.5"></a><h4>Returns</h4>
 <p> The current QoS proportion.</p>
 </div>
 <p class="since">Since: 1.0.3</p>
@@ -1249,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.16.6.26.5"></a><h4>Parameters</h4>
+<a name="id-1.2.15.17.6.26.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1264,7 +1264,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.15.16.6.26.6"></a><h4>Returns</h4>
+<a name="id-1.2.15.17.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>
 </div>
 </div>
@@ -1280,7 +1280,7 @@
  and <em class="parameter"><code>max_latency</code></em>
 .</p>
 <div class="refsect3">
-<a name="id-1.2.15.16.6.27.5"></a><h4>Parameters</h4>
+<a name="id-1.2.15.17.6.27.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1320,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.16.6.28.5"></a><h4>Parameters</h4>
+<a name="id-1.2.15.17.6.28.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1353,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.16.6.29.4"></a><h4>Parameters</h4>
+<a name="id-1.2.15.17.6.29.4"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1368,7 +1368,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.15.16.6.29.5"></a><h4>Returns</h4>
+<a name="id-1.2.15.17.6.29.5"></a><h4>Returns</h4>
 <p> currently configured byte to time conversion setting</p>
 </div>
 </div>
@@ -1379,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.16.6.30.5"></a><h4>Parameters</h4>
+<a name="id-1.2.15.17.6.30.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1394,7 +1394,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.15.16.6.30.6"></a><h4>Returns</h4>
+<a name="id-1.2.15.17.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>
@@ -1407,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.16.6.31.5"></a><h4>Parameters</h4>
+<a name="id-1.2.15.17.6.31.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1455,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.16.6.32.8"></a><h4>Parameters</h4>
+<a name="id-1.2.15.17.6.32.8"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1492,7 +1492,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.15.16.6.32.9"></a><h4>Returns</h4>
+<a name="id-1.2.15.17.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>
@@ -1509,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.16.6.33.6"></a><h4>Parameters</h4>
+<a name="id-1.2.15.17.6.33.6"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1541,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.16.6.34.5"></a><h4>Parameters</h4>
+<a name="id-1.2.15.17.6.34.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1570,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.16.6.35.5"></a><h4>Parameters</h4>
+<a name="id-1.2.15.17.6.35.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1585,7 +1585,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.15.16.6.35.6"></a><h4>Returns</h4>
+<a name="id-1.2.15.17.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>
 </div>
 <p class="since">Since: 1.4</p>
@@ -1603,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.16.6.36.5"></a><h4>Parameters</h4>
+<a name="id-1.2.15.17.6.36.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1640,7 +1640,7 @@
 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.16.6.37.7"></a><h4>Parameters</h4>
+<a name="id-1.2.15.17.6.37.7"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1681,7 +1681,7 @@
 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>
+<a name="id-1.2.15.17.6.38.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1708,7 +1708,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.15.16.6.38.6"></a><h4>Returns</h4>
+<a name="id-1.2.15.17.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>
@@ -1818,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.16.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">
diff --git a/docs/libs/html/gst-plugins-base-libs-GstVideoDither.html b/docs/libs/html/gst-plugins-base-libs-GstVideoDither.html
index 0de7ff6..91963b7 100644
--- a/docs/libs/html/gst-plugins-base-libs-GstVideoDither.html
+++ b/docs/libs/html/gst-plugins-base-libs-GstVideoDither.html
@@ -108,7 +108,7 @@
 <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>
+<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">
@@ -141,7 +141,7 @@
  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>
+<a name="id-1.2.15.8.7.3.6"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -199,7 +199,7 @@
  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>
+<a name="id-1.2.15.8.7.4.8"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -236,7 +236,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.15.7.7.4.9"></a><h4>Returns</h4>
+<a name="id-1.2.15.8.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>
@@ -252,7 +252,7 @@
 <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>
+<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">
@@ -290,7 +290,7 @@
 <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>
+<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">
diff --git a/docs/libs/html/gst-plugins-base-libs-GstVideoEncoder.html b/docs/libs/html/gst-plugins-base-libs-GstVideoEncoder.html
index 3e1e84d..f9dc018 100644
--- a/docs/libs/html/gst-plugins-base-libs-GstVideoEncoder.html
+++ b/docs/libs/html/gst-plugins-base-libs-GstVideoEncoder.html
@@ -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.17.6.3.5"></a><h4>Parameters</h4>
+<a name="id-1.2.15.18.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.17.6.4.5"></a><h4>Parameters</h4>
+<a name="id-1.2.15.18.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.17.6.5.5"></a><h4>Parameters</h4>
+<a name="id-1.2.15.18.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.17.6.6.5"></a><h4>Parameters</h4>
+<a name="id-1.2.15.18.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.17.6.7.5"></a><h4>Parameters</h4>
+<a name="id-1.2.15.18.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.17.6.8.5"></a><h4>Parameters</h4>
+<a name="id-1.2.15.18.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.17.6.9.5"></a><h4>Parameters</h4>
+<a name="id-1.2.15.18.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.17.6.9.6"></a><h4>Returns</h4>
+<a name="id-1.2.15.18.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.17.6.10.6"></a><h4>Parameters</h4>
+<a name="id-1.2.15.18.6.10.6"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -534,7 +534,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.15.17.6.10.7"></a><h4>Returns</h4>
+<a name="id-1.2.15.18.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>
@@ -552,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.17.6.11.6"></a><h4>Parameters</h4>
+<a name="id-1.2.15.18.6.11.6"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -599,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.17.6.12.6"></a><h4>Parameters</h4>
+<a name="id-1.2.15.18.6.12.6"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -621,7 +621,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.15.17.6.12.7"></a><h4>Returns</h4>
+<a name="id-1.2.15.18.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>
 </div>
 </div>
@@ -634,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.17.6.13.5"></a><h4>Parameters</h4>
+<a name="id-1.2.15.18.6.13.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -649,7 +649,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.15.17.6.13.6"></a><h4>Returns</h4>
+<a name="id-1.2.15.18.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>
 </div>
 </div>
@@ -661,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.17.6.14.5"></a><h4>Parameters</h4>
+<a name="id-1.2.15.18.6.14.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -683,7 +683,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.15.17.6.14.6"></a><h4>Returns</h4>
+<a name="id-1.2.15.18.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>
@@ -696,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.17.6.15.5"></a><h4>Parameters</h4>
+<a name="id-1.2.15.18.6.15.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -711,7 +711,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.15.17.6.15.6"></a><h4>Returns</h4>
+<a name="id-1.2.15.18.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>
@@ -723,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.17.6.16.5"></a><h4>Parameters</h4>
+<a name="id-1.2.15.18.6.16.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -738,7 +738,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.15.17.6.16.6"></a><h4>Returns</h4>
+<a name="id-1.2.15.18.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>
@@ -751,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.17.6.17.5"></a><h4>Parameters</h4>
+<a name="id-1.2.15.18.6.17.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -785,7 +785,7 @@
  and <em class="parameter"><code>max_latency</code></em>
 .</p>
 <div class="refsect3">
-<a name="id-1.2.15.17.6.18.5"></a><h4>Parameters</h4>
+<a name="id-1.2.15.18.6.18.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -823,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.17.6.19.5"></a><h4>Parameters</h4>
+<a name="id-1.2.15.18.6.19.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -875,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.17.6.20.9"></a><h4>Parameters</h4>
+<a name="id-1.2.15.18.6.20.9"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -903,7 +903,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.15.17.6.20.10"></a><h4>Returns</h4>
+<a name="id-1.2.15.18.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>
@@ -915,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.17.6.21.5"></a><h4>Parameters</h4>
+<a name="id-1.2.15.18.6.21.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -930,7 +930,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.15.17.6.21.6"></a><h4>Returns</h4>
+<a name="id-1.2.15.18.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>
@@ -948,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.17.6.22.5"></a><h4>Parameters</h4>
+<a name="id-1.2.15.18.6.22.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -975,7 +975,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.15.17.6.22.6"></a><h4>Returns</h4>
+<a name="id-1.2.15.18.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>
@@ -994,7 +994,7 @@
 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.17.6.23.7"></a><h4>Parameters</h4>
+<a name="id-1.2.15.18.6.23.7"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1122,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.17.7.7.5"></a><h4>Members</h4>
+<a name="id-1.2.15.18.7.7.5"></a><h4>Members</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="300px" class="struct_members_name">
diff --git a/docs/libs/html/gst-plugins-base-libs-GstVideoPool.html b/docs/libs/html/gst-plugins-base-libs-GstVideoPool.html
index 62da8ab..21465ab 100644
--- a/docs/libs/html/gst-plugins-base-libs-GstVideoPool.html
+++ b/docs/libs/html/gst-plugins-base-libs-GstVideoPool.html
@@ -114,7 +114,7 @@
 <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.18.7.2.5"></a><h4>Returns</h4>
+<a name="id-1.2.15.19.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>
@@ -131,7 +131,7 @@
 in <em class="parameter"><code>align</code></em>
 </p>
 <div class="refsect3">
-<a name="id-1.2.15.18.7.3.5"></a><h4>Parameters</h4>
+<a name="id-1.2.15.19.7.3.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -153,7 +153,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.15.18.7.3.6"></a><h4>Returns</h4>
+<a name="id-1.2.15.19.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>
 </div>
@@ -170,7 +170,7 @@
 <em class="parameter"><code>config</code></em>
 </p>
 <div class="refsect3">
-<a name="id-1.2.15.18.7.4.5"></a><h4>Parameters</h4>
+<a name="id-1.2.15.19.7.4.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
diff --git a/docs/libs/html/gst-plugins-base-libs-GstVideoResampler.html b/docs/libs/html/gst-plugins-base-libs-GstVideoResampler.html
index 214c3e3..8603c7f 100644
--- a/docs/libs/html/gst-plugins-base-libs-GstVideoResampler.html
+++ b/docs/libs/html/gst-plugins-base-libs-GstVideoResampler.html
@@ -124,7 +124,7 @@
 <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>
+<a name="id-1.2.15.10.7.2.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -172,7 +172,7 @@
 </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>
+<a name="id-1.2.15.10.8.2.5"></a><h4>Members</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="300px" class="struct_members_name">
@@ -230,7 +230,7 @@
 <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>
+<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">
@@ -253,7 +253,7 @@
 <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>
+<a name="id-1.2.15.10.8.4.4"></a><h4>Members</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="300px" class="enum_members_name">
diff --git a/docs/libs/html/gst-plugins-base-libs-GstVideoScaler.html b/docs/libs/html/gst-plugins-base-libs-GstVideoScaler.html
index 1a0f332..cd0f15e 100644
--- a/docs/libs/html/gst-plugins-base-libs-GstVideoScaler.html
+++ b/docs/libs/html/gst-plugins-base-libs-GstVideoScaler.html
@@ -159,7 +159,7 @@
  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>
+<a name="id-1.2.15.11.7.2.7"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -240,7 +240,7 @@
 .</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>
+<a name="id-1.2.15.11.7.3.6"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -272,7 +272,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.15.10.7.3.7"></a><h4>Returns</h4>
+<a name="id-1.2.15.11.7.3.7"></a><h4>Returns</h4>
 <p> a new horizontal videoscaler for <em class="parameter"><code>format</code></em>
 .</p>
 </div>
@@ -286,7 +286,7 @@
 <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>
+<a name="id-1.2.15.11.7.4.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -318,7 +318,7 @@
  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>
+<a name="id-1.2.15.11.7.5.6"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -350,7 +350,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.15.10.7.5.7"></a><h4>Returns</h4>
+<a name="id-1.2.15.11.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>
@@ -372,7 +372,7 @@
 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>
+<a name="id-1.2.15.11.7.6.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -440,7 +440,7 @@
 .</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>
+<a name="id-1.2.15.11.7.7.7"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -482,7 +482,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.15.10.7.7.8"></a><h4>Returns</h4>
+<a name="id-1.2.15.11.7.7.8"></a><h4>Returns</h4>
 <p> a <span class="type">GstVideoResample</span></p>
 </div>
 </div>
@@ -508,7 +508,7 @@
 , 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>
+<a name="id-1.2.15.11.7.8.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -564,7 +564,7 @@
 <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>
+<a name="id-1.2.15.11.8.3.4"></a><h4>Members</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="300px" class="enum_members_name">
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 98eacbd..0f7b0af 100644
--- a/docs/libs/html/gst-plugins-base-libs-encoding-profile.html
+++ b/docs/libs/html/gst-plugins-base-libs-encoding-profile.html
@@ -526,7 +526,148 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="id-1.2.14.10.13.3"></a><h3>Example: Creating a profile</h3>
+<a name="gst-validate-transcoding--encoding-profile"></a><h3>The encoding profile serialization format</h3>
+<p>This is the serialization format of a <a class="link" href="gst-plugins-base-libs-encoding-profile.html#GstEncodingProfile"><span class="type">GstEncodingProfile</span></a>.</p>
+<p>
+     Internally the transcoding application uses <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base/html/gst-plugins-base-plugins-encodebin.html#GstEncodeBin"><span class="type">GstEncodeBin</span></a>. <span class="command"><strong>gst-validate-transcoding-&amp;GST_API_VERSION;</strong></span> uses its own
+     serialization format to describe the <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base/html/gst-plugins-base-plugins-encodebin.html#GstEncodeBin--profile"><span class="type">GstEncodeBin.profile</span></a>
+    property of the encodebin.
+   </p>
+<p>
+       The simplest serialized profile looks 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">muxer_source_caps<span class="gtkdoc opt">:</span>videoencoder_source_caps<span class="gtkdoc opt">:</span>audioencoder_source_caps</pre></td>
+      </tr>
+    </tbody>
+  </table>
+</div>
+
+<p>
+        For example to encode a stream into a WebM container, with an OGG audio stream and a VP8 video stream,
+        the serialized <a class="link" href="gst-plugins-base-libs-encoding-profile.html#GstEncodingProfile"><span class="type">GstEncodingProfile</span></a> will look 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">video<span class="gtkdoc opt">/</span>webm<span class="gtkdoc opt">:</span>video<span class="gtkdoc opt">/</span>x<span class="gtkdoc opt">-</span>vp8<span class="gtkdoc opt">:</span>audio<span class="gtkdoc opt">/</span>x<span class="gtkdoc opt">-</span>vorbis</pre></td>
+      </tr>
+    </tbody>
+  </table>
+</div>
+
+<p>
+       You can also set the preset name of the encoding profile using the caps+preset_name syntax as in:
+   </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">video<span class="gtkdoc opt">/</span>webm<span class="gtkdoc opt">:</span>video<span class="gtkdoc opt">/</span>x<span class="gtkdoc opt">-</span>vp8<span class="gtkdoc opt">+</span>youtube<span class="gtkdoc opt">-</span>preset<span class="gtkdoc opt">:</span>audio<span class="gtkdoc opt">/</span>x<span class="gtkdoc opt">-</span>vorbis</pre></td>
+      </tr>
+    </tbody>
+  </table>
+</div>
+
+<p>
+       Moreover, you can set the <a class="link" href="gst-plugins-base-libs-encoding-profile.html#gst-encoding-profile-set-presence" title="gst_encoding_profile_set_presence ()">presence</a> property of an
+       encoding profile using the <code class="code">|presence</code> syntax as in:
+   </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">video<span class="gtkdoc opt">/</span>webm<span class="gtkdoc opt">:</span>video<span class="gtkdoc opt">/</span>x<span class="gtkdoc opt">-</span>vp8<span class="gtkdoc opt">|</span><span class="number">1</span><span class="gtkdoc opt">:</span>audio<span class="gtkdoc opt">/</span>x<span class="gtkdoc opt">-</span>vorbis</pre></td>
+      </tr>
+    </tbody>
+  </table>
+</div>
+
+<p>
+     This field allows you to specify how many times maximum a <a class="link" href="gst-plugins-base-libs-encoding-profile.html#GstEncodingProfile"><span class="type">GstEncodingProfile</span></a> can be used inside an encodebin.
+   </p>
+<p>
+     You can also use the <code class="code">restriction_caps-&gt;encoded_format_caps</code> syntax to specify the
+     restriction caps
+     to be set on a <a class="link" href="gst-plugins-base-libs-encoding-profile.html#GstEncodingProfile"><span class="type">GstEncodingProfile</span></a>. It corresponds to the
+     restriction <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstCaps.html"><span class="type">GstCaps</span></a> to apply before
+     the encoder that will be used in the profile. The fields present in restriction
+     caps are properties of the raw stream (that is, before encoding), such as height
+     and width for video and depth and sampling rate for audio. This property does not
+     make sense for muxers.
+   </p>
+<p>
+       To force a video stream to be encoded with a Full HD resolution (using WebM as the container format,
+       VP8 as the video codec and Vorbis as the audio codec), you should use:
+   </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">video<span class="gtkdoc opt">/</span>webm<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">1920</span><span class="gtkdoc opt">,</span>height<span class="gtkdoc opt">=</span><span class="number">1080</span><span class="gtkdoc opt">-&gt;</span>video<span class="gtkdoc opt">/</span>x<span class="gtkdoc opt">-</span>vp8<span class="gtkdoc opt">:</span>audio<span class="gtkdoc opt">/</span>x<span class="gtkdoc opt">-</span>vorbis</pre></td>
+      </tr>
+    </tbody>
+  </table>
+</div>
+
+<div class="refsect3">
+<a name="id-1.2.14.10.13.3.16"></a><h4>Some serialized encoding formats examples:</h4>
+<p>
+     MP3 audio and H264 in MP4:
+   </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">video<span class="gtkdoc opt">/</span>quicktime<span class="gtkdoc opt">,</span>variant<span class="gtkdoc opt">=</span>iso<span class="gtkdoc opt">:</span>video<span class="gtkdoc opt">/</span>x<span class="gtkdoc opt">-</span>h264<span class="gtkdoc opt">:</span>audio<span class="gtkdoc opt">/</span>mpeg<span class="gtkdoc opt">,</span>mpegversion<span class="gtkdoc opt">=</span><span class="number">1</span><span class="gtkdoc opt">,</span>layer<span class="gtkdoc opt">=</span><span class="number">3</span></pre></td>
+      </tr>
+    </tbody>
+  </table>
+</div>
+
+<p>
+     Vorbis and theora in OGG:
+   </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">application<span class="gtkdoc opt">/</span>ogg<span class="gtkdoc opt">:</span>video<span class="gtkdoc opt">/</span>x<span class="gtkdoc opt">-</span>theora<span class="gtkdoc opt">:</span>audio<span class="gtkdoc opt">/</span>x<span class="gtkdoc opt">-</span>vorbis</pre></td>
+      </tr>
+    </tbody>
+  </table>
+</div>
+
+<p>
+     AC3 and H264 in MPEG-TS:
+   </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">video<span class="gtkdoc opt">/</span>mpegts<span class="gtkdoc opt">:</span>video<span class="gtkdoc opt">/</span>x<span class="gtkdoc opt">-</span>h264<span class="gtkdoc opt">:</span>audio<span class="gtkdoc opt">/</span>x<span class="gtkdoc opt">-</span>ac3</pre></td>
+      </tr>
+    </tbody>
+  </table>
+</div>
+
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="id-1.2.14.10.13.4"></a><h3>Example: Creating a profile</h3>
 <p>
 </p>
 <div class="informalexample">
@@ -595,7 +736,7 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="id-1.2.14.10.13.4"></a><h3>Example: Using an encoder preset with a profile</h3>
+<a name="id-1.2.14.10.13.5"></a><h3>Example: Using an encoder preset with a profile</h3>
 <p>
 </p>
 <div class="informalexample">
@@ -684,7 +825,7 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="id-1.2.14.10.13.5"></a><h3>Example: Listing categories, targets and profiles</h3>
+<a name="id-1.2.14.10.13.6"></a><h3>Example: Listing categories, targets and profiles</h3>
 <p>
 </p>
 <div class="informalexample">
@@ -826,7 +967,8 @@
 </tr>
 <tr>
 <td class="parameter_name"><p>profilename</p></td>
-<td class="parameter_description"><p> The name of the profile. </p></td>
+<td class="parameter_description"><p> (allow-none): The name of the profile, if <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a>
+provided, it will default to the encoding profile called <code class="literal">default</code>. </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>
diff --git a/docs/libs/html/gst-plugins-base-libs-gstaudio.html b/docs/libs/html/gst-plugins-base-libs-gstaudio.html
index 14c808b..8b3e312 100644
--- a/docs/libs/html/gst-plugins-base-libs-gstaudio.html
+++ b/docs/libs/html/gst-plugins-base-libs-gstaudio.html
@@ -432,6 +432,10 @@
 </tr>
 <tr>
 <td class="define_keyword">#define</td>
+<td class="function_name"><a class="link" href="gst-plugins-base-libs-gstaudio.html#GST-META-TAG-AUDIO-RATE-STR:CAPS" title="GST_META_TAG_AUDIO_RATE_STR">GST_META_TAG_AUDIO_RATE_STR</a></td>
+</tr>
+<tr>
+<td class="define_keyword">#define</td>
 <td class="function_name"><a class="link" href="gst-plugins-base-libs-gstaudio.html#GST-AUDIO-RATE-RANGE:CAPS" title="GST_AUDIO_RATE_RANGE">GST_AUDIO_RATE_RANGE</a></td>
 </tr>
 <tr>
@@ -2006,13 +2010,26 @@
 <col class="enum_members_description">
 <col width="200px" class="enum_members_annotations">
 </colgroup>
-<tbody><tr>
+<tbody>
+<tr>
 <td class="enum_member_name"><p><a name="GST-AUDIO-PACK-FLAG-NONE:CAPS"></a>GST_AUDIO_PACK_FLAG_NONE</p></td>
 <td class="enum_member_description">
 <p>No flag</p>
 </td>
 <td class="enum_member_annotations"> </td>
-</tr></tbody>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-AUDIO-PACK-FLAG-TRUNCATE-RANGE:CAPS"></a>GST_AUDIO_PACK_FLAG_TRUNCATE_RANGE</p></td>
+<td class="enum_member_description">
+<p>When the source has a smaller depth
+  than the target format, set the least significant bits of the target
+  to 0. This is likely sightly faster but less accurate. When this flag
+  is not specified, the most significant bits of the source are duplicated
+  in the least significant bits of the destination.</p>
+</td>
+<td class="enum_member_annotations"> </td>
+</tr>
+</tbody>
 </table></div>
 </div>
 </div>
@@ -2034,6 +2051,14 @@
 </div>
 <hr>
 <div class="refsect2">
+<a name="GST-META-TAG-AUDIO-RATE-STR:CAPS"></a><h3>GST_META_TAG_AUDIO_RATE_STR</h3>
+<pre class="programlisting">#define GST_META_TAG_AUDIO_RATE_STR "rate"
+</pre>
+<p>This metadata stays relevant as long as sample rate is unchanged.</p>
+<p class="since">Since: 1.8</p>
+</div>
+<hr>
+<div class="refsect2">
 <a name="GST-AUDIO-RATE-RANGE:CAPS"></a><h3>GST_AUDIO_RATE_RANGE</h3>
 <pre class="programlisting">#define GST_AUDIO_RATE_RANGE "(int) [ 1, max ]"
 </pre>
diff --git a/docs/libs/html/gst-plugins-base-libs-gstaudiometa.html b/docs/libs/html/gst-plugins-base-libs-gstaudiometa.html
index cdb9839..04c8ac1 100644
--- a/docs/libs/html/gst-plugins-base-libs-gstaudiometa.html
+++ b/docs/libs/html/gst-plugins-base-libs-gstaudiometa.html
@@ -61,6 +61,20 @@
 <a class="link" href="gst-plugins-base-libs-gstaudiometa.html#gst-buffer-get-audio-downmix-meta-for-channels" title="gst_buffer_get_audio_downmix_meta_for_channels ()">gst_buffer_get_audio_downmix_meta_for_channels</a> <span class="c_punctuation">()</span>
 </td>
 </tr>
+<tr>
+<td class="function_type">
+<a class="link" href="gst-plugins-base-libs-gstaudiometa.html#GstAudioClippingMeta" title="struct GstAudioClippingMeta"><span class="returnvalue">GstAudioClippingMeta</span></a> *
+</td>
+<td class="function_name">
+<a class="link" href="gst-plugins-base-libs-gstaudiometa.html#gst-buffer-add-audio-clipping-meta" title="gst_buffer_add_audio_clipping_meta ()">gst_buffer_add_audio_clipping_meta</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-gstaudiometa.html#gst-buffer-get-audio-clipping-meta" title="gst_buffer_get_audio_clipping_meta()">gst_buffer_get_audio_clipping_meta</a><span class="c_punctuation">()</span>
+</td>
+</tr>
 </tbody>
 </table></div>
 </div>
@@ -71,10 +85,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-libs-gstaudiometa.html#GstAudioDownmixMeta" title="struct GstAudioDownmixMeta">GstAudioDownmixMeta</a></td>
-</tr></tbody>
+</tr>
+<tr>
+<td class="datatype_keyword">struct</td>
+<td class="function_name"><a class="link" href="gst-plugins-base-libs-gstaudiometa.html#GstAudioClippingMeta" title="struct GstAudioClippingMeta">GstAudioClippingMeta</a></td>
+</tr>
+</tbody>
 </table></div>
 </div>
 <div class="refsect1">
@@ -163,7 +183,7 @@
 <hr>
 <div class="refsect2">
 <a name="gst-buffer-get-audio-downmix-meta"></a><h3>gst_buffer_get_audio_downmix_meta()</h3>
-<pre class="programlisting">#define gst_buffer_get_audio_downmix_meta(b) ((GstAudioDownmixMeta*)gst_buffer_get_meta((b),GST_AUDIO_DOWNMIX_META_INFO))
+<pre class="programlisting">#define gst_buffer_get_audio_downmix_meta(b) ((GstAudioDownmixMeta*)gst_buffer_get_meta((b), GST_AUDIO_DOWNMIX_META_API_TYPE))
 </pre>
 </div>
 <hr>
@@ -212,6 +232,64 @@
 <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-add-audio-clipping-meta"></a><h3>gst_buffer_add_audio_clipping_meta ()</h3>
+<pre class="programlisting"><a class="link" href="gst-plugins-base-libs-gstaudiometa.html#GstAudioClippingMeta" title="struct GstAudioClippingMeta"><span class="returnvalue">GstAudioClippingMeta</span></a> *
+gst_buffer_add_audio_clipping_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>,
+                                    <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstFormat.html#GstFormat"><span class="type">GstFormat</span></a> format</code></em>,
+                                    <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#guint64"><span class="type">guint64</span></a> start</code></em>,
+                                    <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#guint64"><span class="type">guint64</span></a> end</code></em>);</pre>
+<p>Attaches <a class="link" href="gst-plugins-base-libs-gstaudiometa.html#GstAudioClippingMeta" title="struct GstAudioClippingMeta"><span class="type">GstAudioClippingMeta</span></a> metadata to <em class="parameter"><code>buffer</code></em>
+ with the given parameters.</p>
+<div class="refsect3">
+<a name="id-1.2.6.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>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>
+<tr>
+<td class="parameter_name"><p>format</p></td>
+<td class="parameter_description"><p>GstFormat of <em class="parameter"><code>start</code></em>
+and <em class="parameter"><code>stop</code></em>
+, GST_FORMAT_DEFAULT is samples</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>start</p></td>
+<td class="parameter_description"><p>Amount of audio to clip from start of buffer</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>end</p></td>
+<td class="parameter_description"><p>Amount of  to clip from end of buffer</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="id-1.2.6.4.7.5.6"></a><h4>Returns</h4>
+<p> the <a class="link" href="gst-plugins-base-libs-gstaudiometa.html#GstAudioClippingMeta" title="struct GstAudioClippingMeta"><span class="type">GstAudioClippingMeta</span></a> 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>
+<p class="since">Since: 1.8</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-buffer-get-audio-clipping-meta"></a><h3>gst_buffer_get_audio_clipping_meta()</h3>
+<pre class="programlisting">#define gst_buffer_get_audio_clipping_meta(b) ((GstAudioClippingMeta*)gst_buffer_get_meta((b), GST_AUDIO_CLIPPING_META_API_TYPE))
+</pre>
+</div>
 </div>
 <div class="refsect1">
 <a name="gst-plugins-base-libs-gstaudiometa.other_details"></a><h2>Types and Values</h2>
@@ -281,6 +359,62 @@
 </table></div>
 </div>
 </div>
+<hr>
+<div class="refsect2">
+<a name="GstAudioClippingMeta"></a><h3>struct GstAudioClippingMeta</h3>
+<pre class="programlisting">struct GstAudioClippingMeta {
+  GstMeta   meta;
+
+  GstFormat format;
+  guint64   start;
+  guint64   end;
+};
+</pre>
+<p>Extra buffer metadata describing how much audio has to be clipped from
+the start or end of a buffer. This is used for compressed formats, where
+the first frame usually has some additional samples due to encoder and
+decoder delays, and the last frame usually has some additional samples to
+be able to fill the complete last frame.</p>
+<p>This is used to ensure that decoded data in the end has the same amount of
+samples, and multiply decoded streams can be gaplessly concatenated.</p>
+<p>Note: If clipping of the start is done by adjusting the segment, this meta
+has to be dropped from buffers as otherwise clipping could happen twice.</p>
+<div class="refsect3">
+<a name="id-1.2.6.4.8.3.7"></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="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstMeta.html#GstMeta"><span class="type">GstMeta</span></a> <em class="structfield"><code><a name="GstAudioClippingMeta.meta"></a>meta</code></em>;</p></td>
+<td class="struct_member_description"><p>parent <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstMeta.html#GstMeta"><span class="type">GstMeta</span></a></p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+<tr>
+<td class="struct_member_name"><p><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstFormat.html#GstFormat"><span class="type">GstFormat</span></a> <em class="structfield"><code><a name="GstAudioClippingMeta.format"></a>format</code></em>;</p></td>
+<td class="struct_member_description"><p>GstFormat of <em class="parameter"><code>start</code></em>
+and <em class="parameter"><code>stop</code></em>
+, GST_FORMAT_DEFAULT is samples</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#guint64"><span class="type">guint64</span></a> <em class="structfield"><code><a name="GstAudioClippingMeta.start"></a>start</code></em>;</p></td>
+<td class="struct_member_description"><p>Amount of audio to clip from start of buffer</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#guint64"><span class="type">guint64</span></a> <em class="structfield"><code><a name="GstAudioClippingMeta.end"></a>end</code></em>;</p></td>
+<td class="struct_member_description"><p>Amount of  to clip from end of buffer</p></td>
+<td class="struct_member_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<p class="since">Since: 1.8</p>
+</div>
 </div>
 </div>
 <div class="footer">
diff --git a/docs/libs/html/gst-plugins-base-libs-gstcolorbalance.html b/docs/libs/html/gst-plugins-base-libs-gstcolorbalance.html
index 6e553b7..626a629 100644
--- a/docs/libs/html/gst-plugins-base-libs-gstcolorbalance.html
+++ b/docs/libs/html/gst-plugins-base-libs-gstcolorbalance.html
@@ -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.12.9.2"></a><p>
+<a name="id-1.2.15.13.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.12.10.2.5"></a><h4>Parameters</h4>
+<a name="id-1.2.15.13.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.12.10.2.6"></a><h4>Returns</h4>
+<a name="id-1.2.15.13.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.12.10.3.6"></a><h4>Parameters</h4>
+<a name="id-1.2.15.13.10.3.6"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -210,7 +210,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.15.12.10.3.7"></a><h4>Returns</h4>
+<a name="id-1.2.15.13.10.3.7"></a><h4>Returns</h4>
 <p> The current value of the channel.</p>
 </div>
 </div>
@@ -227,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.12.10.4.6"></a><h4>Parameters</h4>
+<a name="id-1.2.15.13.10.4.6"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -266,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.12.10.5.5"></a><h4>Parameters</h4>
+<a name="id-1.2.15.13.10.5.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -300,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.12.10.6.5"></a><h4>Parameters</h4>
+<a name="id-1.2.15.13.10.6.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -315,7 +315,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.15.12.10.6.6"></a><h4>Returns</h4>
+<a name="id-1.2.15.13.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>
 </div>
 </div>
@@ -350,7 +350,7 @@
 </pre>
 <p>Color-balance interface.</p>
 <div class="refsect3">
-<a name="id-1.2.15.12.11.3.5"></a><h4>Members</h4>
+<a name="id-1.2.15.13.11.3.5"></a><h4>Members</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="300px" class="struct_members_name">
@@ -400,7 +400,7 @@
 hardware implementations (such as those provided by xvimagesink) are
 preferred.</p>
 <div class="refsect3">
-<a name="id-1.2.15.12.11.4.4"></a><h4>Members</h4>
+<a name="id-1.2.15.13.11.4.4"></a><h4>Members</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="300px" class="enum_members_name">
@@ -440,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.12.12.2.5"></a><h4>Parameters</h4>
+<a name="id-1.2.15.13.12.2.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
diff --git a/docs/libs/html/gst-plugins-base-libs-gstcolorbalancechannel.html b/docs/libs/html/gst-plugins-base-libs-gstcolorbalancechannel.html
index b1f7acb..0f6b9ae 100644
--- a/docs/libs/html/gst-plugins-base-libs-gstcolorbalancechannel.html
+++ b/docs/libs/html/gst-plugins-base-libs-gstcolorbalancechannel.html
@@ -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.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
+<a name="id-1.2.15.14.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>
@@ -103,7 +103,7 @@
 };
 </pre>
 <div class="refsect3">
-<a name="id-1.2.15.13.10.2.4"></a><h4>Members</h4>
+<a name="id-1.2.15.14.10.2.4"></a><h4>Members</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="300px" class="struct_members_name">
@@ -143,7 +143,7 @@
 </pre>
 <p>Color-balance channel class.</p>
 <div class="refsect3">
-<a name="id-1.2.15.13.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">
@@ -176,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.13.11.2.5"></a><h4>Parameters</h4>
+<a name="id-1.2.15.14.11.2.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
diff --git a/docs/libs/html/gst-plugins-base-libs-gstnavigation.html b/docs/libs/html/gst-plugins-base-libs-gstnavigation.html
index e659b84..4974238 100644
--- a/docs/libs/html/gst-plugins-base-libs-gstnavigation.html
+++ b/docs/libs/html/gst-plugins-base-libs-gstnavigation.html
@@ -365,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.20.9.3.4"></a><h4>Parameters</h4>
+<a name="id-1.2.15.21.9.3.4"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -408,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.20.9.4.5"></a><h4>Parameters</h4>
+<a name="id-1.2.15.21.9.4.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -455,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.20.9.5.5"></a><h4>Parameters</h4>
+<a name="id-1.2.15.21.9.5.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -486,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.20.9.6.5"></a><h4>Parameters</h4>
+<a name="id-1.2.15.21.9.6.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -509,7 +509,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.15.20.9.6.6"></a><h4>Returns</h4>
+<a name="id-1.2.15.21.9.6.6"></a><h4>Returns</h4>
 <p> TRUE if the navigation command could be extracted, otherwise FALSE.</p>
 </div>
 </div>
@@ -520,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.20.9.7.4"></a><h4>Parameters</h4>
+<a name="id-1.2.15.21.9.7.4"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -557,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.20.9.8.5"></a><h4>Parameters</h4>
+<a name="id-1.2.15.21.9.8.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -592,7 +592,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.15.20.9.8.6"></a><h4>Returns</h4>
+<a name="id-1.2.15.21.9.8.6"></a><h4>Returns</h4>
 <p> TRUE if the button number and both coordinates could be extracted,
 otherwise FALSE.</p>
 </div>
@@ -608,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.20.9.9.5"></a><h4>Parameters</h4>
+<a name="id-1.2.15.21.9.9.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -635,7 +635,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.15.20.9.9.6"></a><h4>Returns</h4>
+<a name="id-1.2.15.21.9.9.6"></a><h4>Returns</h4>
 <p> TRUE if both coordinates could be extracted, otherwise FALSE.</p>
 </div>
 </div>
@@ -647,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.20.9.10.5"></a><h4>Parameters</h4>
+<a name="id-1.2.15.21.9.10.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -662,7 +662,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.15.20.9.10.6"></a><h4>Returns</h4>
+<a name="id-1.2.15.21.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>
@@ -681,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.20.9.11.5"></a><h4>Parameters</h4>
+<a name="id-1.2.15.21.9.11.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -708,7 +708,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.15.20.9.11.6"></a><h4>Returns</h4>
+<a name="id-1.2.15.21.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>
 </div>
 </div>
@@ -721,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.20.9.12.5"></a><h4>Parameters</h4>
+<a name="id-1.2.15.21.9.12.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -736,7 +736,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.15.20.9.12.6"></a><h4>Returns</h4>
+<a name="id-1.2.15.21.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>
 </div>
 </div>
@@ -749,7 +749,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-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>
+<a name="id-1.2.15.21.9.13.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -771,7 +771,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.15.20.9.13.6"></a><h4>Returns</h4>
+<a name="id-1.2.15.21.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>
@@ -785,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.20.9.14.5"></a><h4>Parameters</h4>
+<a name="id-1.2.15.21.9.14.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -808,7 +808,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.15.20.9.14.6"></a><h4>Returns</h4>
+<a name="id-1.2.15.21.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>
 </div>
 </div>
@@ -825,7 +825,7 @@
  and <em class="parameter"><code>n_angles</code></em>
  parameters.</p>
 <div class="refsect3">
-<a name="id-1.2.15.20.9.15.5"></a><h4>Parameters</h4>
+<a name="id-1.2.15.21.9.15.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -853,7 +853,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.15.20.9.15.6"></a><h4>Returns</h4>
+<a name="id-1.2.15.21.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>
 </div>
 </div>
@@ -868,7 +868,7 @@
  when done
 with it.</p>
 <div class="refsect3">
-<a name="id-1.2.15.20.9.16.5"></a><h4>Parameters</h4>
+<a name="id-1.2.15.21.9.16.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -891,7 +891,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.15.20.9.16.6"></a><h4>Returns</h4>
+<a name="id-1.2.15.21.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>
@@ -907,7 +907,7 @@
 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>
+<a name="id-1.2.15.21.9.17.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -930,7 +930,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.15.20.9.17.6"></a><h4>Returns</h4>
+<a name="id-1.2.15.21.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>
@@ -943,7 +943,7 @@
 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.20.9.18.5"></a><h4>Returns</h4>
+<a name="id-1.2.15.21.9.18.5"></a><h4>Returns</h4>
 <p> The new query.</p>
 </div>
 </div>
@@ -955,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.20.9.19.5"></a><h4>Parameters</h4>
+<a name="id-1.2.15.21.9.19.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -970,7 +970,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.15.20.9.19.6"></a><h4>Returns</h4>
+<a name="id-1.2.15.21.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>
 </div>
@@ -983,7 +983,7 @@
 <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.20.9.20.5"></a><h4>Returns</h4>
+<a name="id-1.2.15.21.9.20.5"></a><h4>Returns</h4>
 <p> The new query.</p>
 </div>
 </div>
@@ -1001,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.20.9.21.5"></a><h4>Parameters</h4>
+<a name="id-1.2.15.21.9.21.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1030,7 +1030,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.15.20.9.21.6"></a><h4>Returns</h4>
+<a name="id-1.2.15.21.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>
 </div>
 </div>
@@ -1044,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.20.9.22.5"></a><h4>Parameters</h4>
+<a name="id-1.2.15.21.9.22.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1066,7 +1066,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.15.20.9.22.6"></a><h4>Returns</h4>
+<a name="id-1.2.15.21.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>
 </div>
 </div>
@@ -1086,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.20.9.23.5"></a><h4>Parameters</h4>
+<a name="id-1.2.15.21.9.23.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1113,7 +1113,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.15.20.9.23.6"></a><h4>Returns</h4>
+<a name="id-1.2.15.21.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>
 </div>
 </div>
@@ -1127,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.20.9.24.5"></a><h4>Parameters</h4>
+<a name="id-1.2.15.21.9.24.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1166,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.20.9.25.5"></a><h4>Parameters</h4>
+<a name="id-1.2.15.21.9.25.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1207,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.20.9.26.5"></a><h4>Parameters</h4>
+<a name="id-1.2.15.21.9.26.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1255,7 +1255,7 @@
 </pre>
 <p>Navigation interface.</p>
 <div class="refsect3">
-<a name="id-1.2.15.20.10.3.5"></a><h4>Members</h4>
+<a name="id-1.2.15.21.10.3.5"></a><h4>Members</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="300px" class="struct_members_name">
@@ -1299,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.20.10.4.5"></a><h4>Members</h4>
+<a name="id-1.2.15.21.10.4.5"></a><h4>Members</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="300px" class="enum_members_name">
@@ -1436,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.20.10.5.4"></a><h4>Members</h4>
+<a name="id-1.2.15.21.10.5.4"></a><h4>Members</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="300px" class="enum_members_name">
@@ -1513,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.20.10.6.4"></a><h4>Members</h4>
+<a name="id-1.2.15.21.10.6.4"></a><h4>Members</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="300px" class="enum_members_name">
@@ -1572,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.20.10.7.4"></a><h4>Members</h4>
+<a name="id-1.2.15.21.10.7.4"></a><h4>Members</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="300px" class="enum_members_name">
diff --git a/docs/libs/html/gst-plugins-base-libs-gstpbutilscodecutils.html b/docs/libs/html/gst-plugins-base-libs-gstpbutilscodecutils.html
index c73ef8d..92275a1 100644
--- a/docs/libs/html/gst-plugins-base-libs-gstpbutilscodecutils.html
+++ b/docs/libs/html/gst-plugins-base-libs-gstpbutilscodecutils.html
@@ -166,6 +166,46 @@
 <a class="link" href="gst-plugins-base-libs-gstpbutilscodecutils.html#gst-codec-utils-mpeg4video-caps-set-level-and-profile" title="gst_codec_utils_mpeg4video_caps_set_level_and_profile ()">gst_codec_utils_mpeg4video_caps_set_level_and_profile</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-gstpbutilscodecutils.html#gst-codec-utils-opus-create-caps" title="gst_codec_utils_opus_create_caps ()">gst_codec_utils_opus_create_caps</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstCaps.html"><span class="returnvalue">GstCaps</span></a> *
+</td>
+<td class="function_name">
+<a class="link" href="gst-plugins-base-libs-gstpbutilscodecutils.html#gst-codec-utils-opus-create-caps-from-header" title="gst_codec_utils_opus_create_caps_from_header ()">gst_codec_utils_opus_create_caps_from_header</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-gstpbutilscodecutils.html#gst-codec-utils-opus-parse-caps" title="gst_codec_utils_opus_parse_caps ()">gst_codec_utils_opus_parse_caps</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstBuffer.html"><span class="returnvalue">GstBuffer</span></a> *
+</td>
+<td class="function_name">
+<a class="link" href="gst-plugins-base-libs-gstpbutilscodecutils.html#gst-codec-utils-opus-create-header" title="gst_codec_utils_opus_create_header ()">gst_codec_utils_opus_create_header</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-gstpbutilscodecutils.html#gst-codec-utils-opus-parse-header" title="gst_codec_utils_opus_parse_header ()">gst_codec_utils_opus_parse_header</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
 </tbody>
 </table></div>
 </div>
@@ -886,6 +926,317 @@
 <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>
 </div>
 </div>
+<hr>
+<div class="refsect2">
+<a name="gst-codec-utils-opus-create-caps"></a><h3>gst_codec_utils_opus_create_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_codec_utils_opus_create_caps (<em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32</span></a> rate</code></em>,
+                                  <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#guint8"><span class="type">guint8</span></a> channels</code></em>,
+                                  <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#guint8"><span class="type">guint8</span></a> channel_mapping_family</code></em>,
+                                  <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#guint8"><span class="type">guint8</span></a> stream_count</code></em>,
+                                  <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#guint8"><span class="type">guint8</span></a> coupled_count</code></em>,
+                                  <em class="parameter"><code>const <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#guint8"><span class="type">guint8</span></a> *channel_mapping</code></em>);</pre>
+<p>Creates Opus caps from the given parameters.</p>
+<div class="refsect3">
+<a name="id-1.2.14.5.6.19.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>rate</p></td>
+<td class="parameter_description"><p>the sample rate</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>channels</p></td>
+<td class="parameter_description"><p>the number of channels</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>channel_mapping_family</p></td>
+<td class="parameter_description"><p>the channel mapping family</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>stream_count</p></td>
+<td class="parameter_description"><p>the number of independent streams</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>coupled_count</p></td>
+<td class="parameter_description"><p>the number of stereo streams</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>channel_mapping</p></td>
+<td class="parameter_description"><p> the mapping between the streams. </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.14.5.6.19.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>.</p>
+</div>
+<p class="since">Since: 1.8</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-codec-utils-opus-create-caps-from-header"></a><h3>gst_codec_utils_opus_create_caps_from_header ()</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_codec_utils_opus_create_caps_from_header
+                               (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstBuffer.html"><span class="type">GstBuffer</span></a> *header</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> *comments</code></em>);</pre>
+<p>Creates Opus caps from the given OpusHead <em class="parameter"><code>header</code></em>
+ and comment header
+<em class="parameter"><code>comments</code></em>
+.</p>
+<div class="refsect3">
+<a name="id-1.2.14.5.6.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>header</p></td>
+<td class="parameter_description"><p>OpusHead header</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>comments</p></td>
+<td class="parameter_description"><p> Comment header 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>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="id-1.2.14.5.6.20.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>.</p>
+</div>
+<p class="since">Since: 1.8</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-codec-utils-opus-parse-caps"></a><h3>gst_codec_utils_opus_parse_caps ()</h3>
+<pre class="programlisting"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
+gst_codec_utils_opus_parse_caps (<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="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32</span></a> *rate</code></em>,
+                                 <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#guint8"><span class="type">guint8</span></a> *channels</code></em>,
+                                 <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#guint8"><span class="type">guint8</span></a> *channel_mapping_family</code></em>,
+                                 <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#guint8"><span class="type">guint8</span></a> *stream_count</code></em>,
+                                 <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#guint8"><span class="type">guint8</span></a> *coupled_count</code></em>,
+                                 <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#guint8"><span class="type">guint8</span></a> channel_mapping[256]</code></em>);</pre>
+<p>Parses Opus caps and fills the different fields with defaults if possible.</p>
+<div class="refsect3">
+<a name="id-1.2.14.5.6.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>caps</p></td>
+<td class="parameter_description"><p>the <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstCaps.html"><span class="type">GstCaps</span></a> to which the level and profile are to be added</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>rate</p></td>
+<td class="parameter_description"><p>the sample rate</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>channels</p></td>
+<td class="parameter_description"><p>the number of channels</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>channel_mapping_family</p></td>
+<td class="parameter_description"><p>the channel mapping family</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>stream_count</p></td>
+<td class="parameter_description"><p>the number of independent streams</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>coupled_count</p></td>
+<td class="parameter_description"><p>the number of stereo streams</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>channel_mapping</p></td>
+<td class="parameter_description"><p>the mapping between the streams</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="id-1.2.14.5.6.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 parsing was successful, <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.8</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-codec-utils-opus-create-header"></a><h3>gst_codec_utils_opus_create_header ()</h3>
+<pre class="programlisting"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstBuffer.html"><span class="returnvalue">GstBuffer</span></a> *
+gst_codec_utils_opus_create_header (<em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32</span></a> rate</code></em>,
+                                    <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#guint8"><span class="type">guint8</span></a> channels</code></em>,
+                                    <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#guint8"><span class="type">guint8</span></a> channel_mapping_family</code></em>,
+                                    <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#guint8"><span class="type">guint8</span></a> stream_count</code></em>,
+                                    <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#guint8"><span class="type">guint8</span></a> coupled_count</code></em>,
+                                    <em class="parameter"><code>const <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#guint8"><span class="type">guint8</span></a> *channel_mapping</code></em>,
+                                    <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#guint16"><span class="type">guint16</span></a> pre_skip</code></em>,
+                                    <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gint16"><span class="type">gint16</span></a> output_gain</code></em>);</pre>
+<p>Creates OpusHead header from the given parameters.</p>
+<div class="refsect3">
+<a name="id-1.2.14.5.6.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>rate</p></td>
+<td class="parameter_description"><p>the sample rate</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>channels</p></td>
+<td class="parameter_description"><p>the number of channels</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>channel_mapping_family</p></td>
+<td class="parameter_description"><p>the channel mapping family</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>stream_count</p></td>
+<td class="parameter_description"><p>the number of independent streams</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>coupled_count</p></td>
+<td class="parameter_description"><p>the number of stereo streams</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>channel_mapping</p></td>
+<td class="parameter_description"><p> the mapping between the streams. </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>pre_skip</p></td>
+<td class="parameter_description"><p>Pre-skip in 48kHz samples or 0</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>output_gain</p></td>
+<td class="parameter_description"><p>Output gain or 0</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="id-1.2.14.5.6.22.6"></a><h4>Returns</h4>
+<p> The <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstBuffer.html"><span class="type">GstBuffer</span></a> containing the OpusHead.</p>
+</div>
+<p class="since">Since: 1.8</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-codec-utils-opus-parse-header"></a><h3>gst_codec_utils_opus_parse_header ()</h3>
+<pre class="programlisting"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
+gst_codec_utils_opus_parse_header (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstBuffer.html"><span class="type">GstBuffer</span></a> *header</code></em>,
+                                   <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#guint32"><span class="type">guint32</span></a> *rate</code></em>,
+                                   <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#guint8"><span class="type">guint8</span></a> *channels</code></em>,
+                                   <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#guint8"><span class="type">guint8</span></a> *channel_mapping_family</code></em>,
+                                   <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#guint8"><span class="type">guint8</span></a> *stream_count</code></em>,
+                                   <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#guint8"><span class="type">guint8</span></a> *coupled_count</code></em>,
+                                   <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#guint8"><span class="type">guint8</span></a> channel_mapping[256]</code></em>,
+                                   <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#guint16"><span class="type">guint16</span></a> *pre_skip</code></em>,
+                                   <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gint16"><span class="type">gint16</span></a> *output_gain</code></em>);</pre>
+<p>Parses the OpusHead header.</p>
+<div class="refsect3">
+<a name="id-1.2.14.5.6.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>header</p></td>
+<td class="parameter_description"><p>the OpusHead <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstBuffer.html"><span class="type">GstBuffer</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>rate</p></td>
+<td class="parameter_description"><p>the sample rate</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>channels</p></td>
+<td class="parameter_description"><p>the number of channels</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>channel_mapping_family</p></td>
+<td class="parameter_description"><p>the channel mapping family</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>stream_count</p></td>
+<td class="parameter_description"><p>the number of independent streams</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>coupled_count</p></td>
+<td class="parameter_description"><p>the number of stereo streams</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>channel_mapping</p></td>
+<td class="parameter_description"><p>the mapping between the streams</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>pre_skip</p></td>
+<td class="parameter_description"><p>Pre-skip in 48kHz samples or 0</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>output_gain</p></td>
+<td class="parameter_description"><p>Output gain or 0</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="id-1.2.14.5.6.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 parsing was successful, <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.8</p>
+</div>
 </div>
 <div class="refsect1">
 <a name="gst-plugins-base-libs-gstpbutilscodecutils.other_details"></a><h2>Types and Values</h2>
diff --git a/docs/libs/html/gst-plugins-base-libs-gstpluginsbaseversion.html b/docs/libs/html/gst-plugins-base-libs-gstpluginsbaseversion.html
index 8b92609..ff84b27 100644
--- a/docs/libs/html/gst-plugins-base-libs-gstpluginsbaseversion.html
+++ b/docs/libs/html/gst-plugins-base-libs-gstpluginsbaseversion.html
@@ -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 (6)
+<pre class="programlisting">#define GST_PLUGINS_BASE_VERSION_MINOR (7)
 </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 (2)
+<pre class="programlisting">#define GST_PLUGINS_BASE_VERSION_MICRO (1)
 </pre>
 <p>The micro version of GStreamer's gst-plugins-base libraries at compile time.</p>
 </div>
diff --git a/docs/libs/html/gst-plugins-base-libs-gstrtspconnection.html b/docs/libs/html/gst-plugins-base-libs-gstrtspconnection.html
index 7ebdee4..a065d6e 100644
--- a/docs/libs/html/gst-plugins-base-libs-gstrtspconnection.html
+++ b/docs/libs/html/gst-plugins-base-libs-gstrtspconnection.html
@@ -76,6 +76,14 @@
 <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-gstrtspconnection.html#gst-rtsp-connection-connect-with-response" title="gst_rtsp_connection_connect_with_response ()">gst_rtsp_connection_connect_with_response</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-gstrtspconnection.html#gst-rtsp-connection-close" title="gst_rtsp_connection_close ()">gst_rtsp_connection_close</a> <span class="c_punctuation">()</span>
 </td>
 </tr>
@@ -630,39 +638,64 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="gst-rtsp-connection-close"></a><h3>gst_rtsp_connection_close ()</h3>
+<a name="gst-rtsp-connection-connect-with-response"></a><h3>gst_rtsp_connection_connect_with_response ()</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_connection_close (<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>Close the connected <em class="parameter"><code>conn</code></em>
-. After this call, the connection is in the same
-state as when it was first created.</p>
+gst_rtsp_connection_connect_with_response
+                               (<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/glib/unstable/glib-Date-and-Time-Functions.html#GTimeVal"><span class="type">GTimeVal</span></a> *timeout</code></em>,
+                                <em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstrtspmessage.html#GstRTSPMessage" title="struct GstRTSPMessage"><span class="type">GstRTSPMessage</span></a> *response</code></em>);</pre>
+<p>Attempt to connect to the url of <em class="parameter"><code>conn</code></em>
+ made with
+<a class="link" href="gst-plugins-base-libs-gstrtspconnection.html#gst-rtsp-connection-create" title="gst_rtsp_connection_create ()"><code class="function">gst_rtsp_connection_create()</code></a>. If <em class="parameter"><code>timeout</code></em>
+ is <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><span class="type">NULL</span></a> this function can block
+forever. If <em class="parameter"><code>timeout</code></em>
+ contains a valid timeout, this function will return
+<a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-ETIMEOUT:CAPS"><span class="type">GST_RTSP_ETIMEOUT</span></a> after the timeout expired.  If <em class="parameter"><code>conn</code></em>
+ is set to tunneled,
+<em class="parameter"><code>response</code></em>
+ will contain a response to the tunneling request messages.</p>
+<p>This function can be cancelled with <a class="link" href="gst-plugins-base-libs-gstrtspconnection.html#gst-rtsp-connection-flush" title="gst_rtsp_connection_flush ()"><code class="function">gst_rtsp_connection_flush()</code></a>.</p>
 <div class="refsect3">
-<a name="id-1.2.10.3.7.6.5"></a><h4>Parameters</h4>
+<a name="id-1.2.10.3.7.6.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>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>
+</tr>
+<tr>
+<td class="parameter_name"><p>timeout</p></td>
+<td class="parameter_description"><p>a <a href="https://developer.gnome.org/glib/unstable/glib-Date-and-Time-Functions.html#GTimeVal"><span class="type">GTimeVal</span></a> timeout</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>response</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>
+</tbody>
 </table></div>
 </div>
 <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>
+<a name="id-1.2.10.3.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> when a connection could be made.</p>
+<p>Since 1.8</p>
 </div>
 </div>
 <hr>
 <div class="refsect2">
-<a name="gst-rtsp-connection-free"></a><h3>gst_rtsp_connection_free ()</h3>
+<a name="gst-rtsp-connection-close"></a><h3>gst_rtsp_connection_close ()</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_connection_free (<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>Close and free <em class="parameter"><code>conn</code></em>
-.</p>
+gst_rtsp_connection_close (<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>Close the connected <em class="parameter"><code>conn</code></em>
+. After this call, the connection is in the same
+state as when it was first created.</p>
 <div class="refsect3">
 <a name="id-1.2.10.3.7.7.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
@@ -685,6 +718,33 @@
 </div>
 <hr>
 <div class="refsect2">
+<a name="gst-rtsp-connection-free"></a><h3>gst_rtsp_connection_free ()</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_connection_free (<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>Close and free <em class="parameter"><code>conn</code></em>
+.</p>
+<div class="refsect3">
+<a name="id-1.2.10.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>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.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> on success.</p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
 <a name="gst-rtsp-connection-read"></a><h3>gst_rtsp_connection_read ()</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_connection_read (<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>,
@@ -701,7 +761,7 @@
 might block forever.</p>
 <p>This function can be cancelled with <a class="link" href="gst-plugins-base-libs-gstrtspconnection.html#gst-rtsp-connection-flush" title="gst_rtsp_connection_flush ()"><code class="function">gst_rtsp_connection_flush()</code></a>.</p>
 <div class="refsect3">
-<a name="id-1.2.10.3.7.8.6"></a><h4>Parameters</h4>
+<a name="id-1.2.10.3.7.9.6"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -734,7 +794,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.10.3.7.8.7"></a><h4>Returns</h4>
+<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>
 </div>
 </div>
@@ -756,7 +816,7 @@
 might block forever.</p>
 <p>This function can be cancelled with <a class="link" href="gst-plugins-base-libs-gstrtspconnection.html#gst-rtsp-connection-flush" title="gst_rtsp_connection_flush ()"><code class="function">gst_rtsp_connection_flush()</code></a>.</p>
 <div class="refsect3">
-<a name="id-1.2.10.3.7.9.6"></a><h4>Parameters</h4>
+<a name="id-1.2.10.3.7.10.6"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -789,7 +849,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.10.3.7.9.7"></a><h4>Returns</h4>
+<a name="id-1.2.10.3.7.10.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>
 </div>
 </div>
@@ -813,7 +873,7 @@
  can be <a href="https://developer.gnome.org/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><span class="type">NULL</span></a>, in which case this function might block forever.</p>
 <p>This function can be cancelled with <a class="link" href="gst-plugins-base-libs-gstrtspconnection.html#gst-rtsp-connection-flush" title="gst_rtsp_connection_flush ()"><code class="function">gst_rtsp_connection_flush()</code></a>.</p>
 <div class="refsect3">
-<a name="id-1.2.10.3.7.10.7"></a><h4>Parameters</h4>
+<a name="id-1.2.10.3.7.11.7"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -845,7 +905,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.10.3.7.10.8"></a><h4>Returns</h4>
+<a name="id-1.2.10.3.7.11.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>
 </div>
 </div>
@@ -865,7 +925,7 @@
 might block forever.</p>
 <p>This function can be cancelled with <a class="link" href="gst-plugins-base-libs-gstrtspconnection.html#gst-rtsp-connection-flush" title="gst_rtsp_connection_flush ()"><code class="function">gst_rtsp_connection_flush()</code></a>.</p>
 <div class="refsect3">
-<a name="id-1.2.10.3.7.11.6"></a><h4>Parameters</h4>
+<a name="id-1.2.10.3.7.12.6"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -892,7 +952,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.10.3.7.11.7"></a><h4>Returns</h4>
+<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>
 </div>
 </div>
@@ -912,7 +972,7 @@
 might block forever.</p>
 <p>This function can be cancelled with <a class="link" href="gst-plugins-base-libs-gstrtspconnection.html#gst-rtsp-connection-flush" title="gst_rtsp_connection_flush ()"><code class="function">gst_rtsp_connection_flush()</code></a>.</p>
 <div class="refsect3">
-<a name="id-1.2.10.3.7.12.6"></a><h4>Parameters</h4>
+<a name="id-1.2.10.3.7.13.6"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -939,7 +999,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.10.3.7.12.7"></a><h4>Returns</h4>
+<a name="id-1.2.10.3.7.13.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>
 </div>
 </div>
@@ -953,7 +1013,7 @@
 , storing the result in <em class="parameter"><code>timeout</code></em>
 .</p>
 <div class="refsect3">
-<a name="id-1.2.10.3.7.13.5"></a><h4>Parameters</h4>
+<a name="id-1.2.10.3.7.14.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -975,7 +1035,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.10.3.7.13.6"></a><h4>Returns</h4>
+<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>
 </div>
 </div>
@@ -987,7 +1047,7 @@
 <p>Reset the timeout of <em class="parameter"><code>conn</code></em>
 .</p>
 <div class="refsect3">
-<a name="id-1.2.10.3.7.14.5"></a><h4>Parameters</h4>
+<a name="id-1.2.10.3.7.15.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1002,7 +1062,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.10.3.7.14.6"></a><h4>Returns</h4>
+<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>
 </div>
 </div>
@@ -1018,7 +1078,7 @@
  will return <a class="link" href="gst-plugins-base-libs-gstrtspdefs.html#GST-RTSP-EINTR:CAPS"><span class="type">GST_RTSP_EINTR</span></a> until the connection
 is set to non-flushing mode again.</p>
 <div class="refsect3">
-<a name="id-1.2.10.3.7.15.5"></a><h4>Parameters</h4>
+<a name="id-1.2.10.3.7.16.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1040,7 +1100,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.10.3.7.15.6"></a><h4>Returns</h4>
+<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>
 </div>
 </div>
@@ -1059,7 +1119,7 @@
  as the
 user and password respectively.</p>
 <div class="refsect3">
-<a name="id-1.2.10.3.7.16.5"></a><h4>Parameters</h4>
+<a name="id-1.2.10.3.7.17.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1091,7 +1151,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.10.3.7.16.6"></a><h4>Returns</h4>
+<a name="id-1.2.10.3.7.17.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>
 </div>
 </div>
@@ -1109,7 +1169,7 @@
 in the WWW-Authenticate response header and can include realm, domain,
 nonce, opaque, stale, algorithm, qop as per RFC2617.</p>
 <div class="refsect3">
-<a name="id-1.2.10.3.7.17.5"></a><h4>Parameters</h4>
+<a name="id-1.2.10.3.7.18.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1144,7 +1204,7 @@
 <p>Clear the list of authentication directives stored in <em class="parameter"><code>conn</code></em>
 .</p>
 <div class="refsect3">
-<a name="id-1.2.10.3.7.18.5"></a><h4>Parameters</h4>
+<a name="id-1.2.10.3.7.19.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1168,7 +1228,7 @@
 <p>Configure <em class="parameter"><code>conn</code></em>
  to use the specified DSCP value.</p>
 <div class="refsect3">
-<a name="id-1.2.10.3.7.19.5"></a><h4>Parameters</h4>
+<a name="id-1.2.10.3.7.20.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1190,7 +1250,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.10.3.7.19.6"></a><h4>Returns</h4>
+<a name="id-1.2.10.3.7.20.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>
 </div>
 </div>
@@ -1202,7 +1262,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> *ip</code></em>);</pre>
 <p>Set the IP address of the server.</p>
 <div class="refsect3">
-<a name="id-1.2.10.3.7.20.5"></a><h4>Parameters</h4>
+<a name="id-1.2.10.3.7.21.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1232,34 +1292,6 @@
 <p>Retrieve the IP address of the other end of <em class="parameter"><code>conn</code></em>
 .</p>
 <div class="refsect3">
-<a name="id-1.2.10.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>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.21.6"></a><h4>Returns</h4>
-<p> The IP address as a string. this value remains valid until the
-connection is closed.</p>
-</div>
-</div>
-<hr>
-<div class="refsect2">
-<a name="gst-rtsp-connection-get-url"></a><h3>gst_rtsp_connection_get_url ()</h3>
-<pre class="programlisting"><a class="link" href="gst-plugins-base-libs-gstrtspurl.html#GstRTSPUrl" title="struct GstRTSPUrl"><span class="returnvalue">GstRTSPUrl</span></a> *
-gst_rtsp_connection_get_url (<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>Retrieve the URL of the other end of <em class="parameter"><code>conn</code></em>
-.</p>
-<div class="refsect3">
 <a name="id-1.2.10.3.7.22.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
@@ -1276,6 +1308,34 @@
 </div>
 <div class="refsect3">
 <a name="id-1.2.10.3.7.22.6"></a><h4>Returns</h4>
+<p> The IP address as a string. this value remains valid until the
+connection is closed.</p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-rtsp-connection-get-url"></a><h3>gst_rtsp_connection_get_url ()</h3>
+<pre class="programlisting"><a class="link" href="gst-plugins-base-libs-gstrtspurl.html#GstRTSPUrl" title="struct GstRTSPUrl"><span class="returnvalue">GstRTSPUrl</span></a> *
+gst_rtsp_connection_get_url (<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>Retrieve the URL of the other end of <em class="parameter"><code>conn</code></em>
+.</p>
+<div class="refsect3">
+<a name="id-1.2.10.3.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>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.23.6"></a><h4>Returns</h4>
 <p> The URL. This value remains valid until the
 connection is freed.</p>
 </div>
@@ -1290,7 +1350,7 @@
 the <em class="parameter"><code>conn</code></em>
  is connected.</p>
 <div class="refsect3">
-<a name="id-1.2.10.3.7.23.5"></a><h4>Parameters</h4>
+<a name="id-1.2.10.3.7.24.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1319,33 +1379,6 @@
 gst_rtsp_connection_is_tunneled (<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 tunneling state of the connection.</p>
 <div class="refsect3">
-<a name="id-1.2.10.3.7.24.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.24.6"></a><h4>Returns</h4>
-<p> if <em class="parameter"><code>conn</code></em>
-is using HTTP tunneling.</p>
-</div>
-</div>
-<hr>
-<div class="refsect2">
-<a name="gst-rtsp-connection-get-tunnelid"></a><h3>gst_rtsp_connection_get_tunnelid ()</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_rtsp_connection_get_tunnelid (<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 tunnel session id the connection.</p>
-<div class="refsect3">
 <a name="id-1.2.10.3.7.25.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
@@ -1362,6 +1395,33 @@
 </div>
 <div class="refsect3">
 <a name="id-1.2.10.3.7.25.6"></a><h4>Returns</h4>
+<p> if <em class="parameter"><code>conn</code></em>
+is using HTTP tunneling.</p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-rtsp-connection-get-tunnelid"></a><h3>gst_rtsp_connection_get_tunnelid ()</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_rtsp_connection_get_tunnelid (<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 tunnel session id the connection.</p>
+<div class="refsect3">
+<a name="id-1.2.10.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>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.26.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>
 </div>
@@ -1386,7 +1446,7 @@
 <em class="parameter"><code>conn</code></em>
 .</p>
 <div class="refsect3">
-<a name="id-1.2.10.3.7.26.7"></a><h4>Parameters</h4>
+<a name="id-1.2.10.3.7.27.7"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1408,7 +1468,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.10.3.7.26.8"></a><h4>Returns</h4>
+<a name="id-1.2.10.3.7.27.8"></a><h4>Returns</h4>
 <p> return GST_RTSP_OK on success.</p>
 </div>
 </div>
@@ -1422,7 +1482,7 @@
 messages in addition to the RTSP messages. It will also disable the
 automatic handling of setting up an HTTP tunnel.</p>
 <div class="refsect3">
-<a name="id-1.2.10.3.7.27.5"></a><h4>Parameters</h4>
+<a name="id-1.2.10.3.7.28.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1453,7 +1513,7 @@
                                <em class="parameter"><code><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> port</code></em>);</pre>
 <p>Set the proxy host and port.</p>
 <div class="refsect3">
-<a name="id-1.2.10.3.7.28.5"></a><h4>Parameters</h4>
+<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">
@@ -1480,7 +1540,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.10.3.7.28.6"></a><h4>Returns</h4>
+<a name="id-1.2.10.3.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>
 </div>
 </div>
@@ -1491,34 +1551,6 @@
 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">
-<a name="gst-rtsp-connection-get-write-socket"></a><h3>gst_rtsp_connection_get_write_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_write_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 writing.</p>
-<div class="refsect3">
 <a name="id-1.2.10.3.7.30.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
@@ -1535,6 +1567,34 @@
 </div>
 <div class="refsect3">
 <a name="id-1.2.10.3.7.30.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">
+<a name="gst-rtsp-connection-get-write-socket"></a><h3>gst_rtsp_connection_get_write_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_write_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 writing.</p>
+<div class="refsect3">
+<a name="id-1.2.10.3.7.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>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.31.6"></a><h4>Returns</h4>
 <p> the file descriptor used for writing or NULL 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>
@@ -1554,7 +1614,7 @@
 when called the first time and will return that same connection on subsequent
 calls. The server is then responsible for configuring the TLS connection.</p>
 <div class="refsect3">
-<a name="id-1.2.10.3.7.31.7"></a><h4>Parameters</h4>
+<a name="id-1.2.10.3.7.32.7"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1576,7 +1636,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.10.3.7.31.8"></a><h4>Returns</h4>
+<a name="id-1.2.10.3.7.32.8"></a><h4>Returns</h4>
 <p> the TLS connection for <em class="parameter"><code>conn</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>
@@ -1593,7 +1653,7 @@
 <p>Sets the TLS validation flags to be used to verify the peer
 certificate when a TLS connection is established.</p>
 <div class="refsect3">
-<a name="id-1.2.10.3.7.32.5"></a><h4>Parameters</h4>
+<a name="id-1.2.10.3.7.33.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1615,7 +1675,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.10.3.7.32.6"></a><h4>Returns</h4>
+<a name="id-1.2.10.3.7.33.6"></a><h4>Returns</h4>
 <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>
@@ -1631,7 +1691,7 @@
 <p>Gets the TLS validation flags used to verify the peer certificate
 when a TLS connection is established.</p>
 <div class="refsect3">
-<a name="id-1.2.10.3.7.33.5"></a><h4>Parameters</h4>
+<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">
@@ -1646,7 +1706,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.10.3.7.33.6"></a><h4>Returns</h4>
+<a name="id-1.2.10.3.7.34.6"></a><h4>Returns</h4>
 <p> the validationg flags.</p>
 </div>
 <p class="since">Since: 1.2.1</p>
@@ -1661,7 +1721,7 @@
 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>
+<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">
@@ -1693,7 +1753,7 @@
 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>
+<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">
@@ -1708,7 +1768,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.10.3.7.35.6"></a><h4>Returns</h4>
+<a name="id-1.2.10.3.7.36.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>
@@ -1727,7 +1787,7 @@
 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>
+<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">
@@ -1760,7 +1820,7 @@
 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>
+<a name="id-1.2.10.3.7.38.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1775,7 +1835,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.10.3.7.37.6"></a><h4>Returns</h4>
+<a name="id-1.2.10.3.7.38.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>
@@ -1801,7 +1861,7 @@
  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.38.8"></a><h4>Parameters</h4>
+<a name="id-1.2.10.3.7.39.8"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1835,7 +1895,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.10.3.7.38.9"></a><h4>Returns</h4>
+<a name="id-1.2.10.3.7.39.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>
 </div>
@@ -1849,7 +1909,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.39.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">
@@ -1872,7 +1932,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.40.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">
@@ -1894,7 +1954,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.10.3.7.40.6"></a><h4>Returns</h4>
+<a name="id-1.2.10.3.7.41.6"></a><h4>Returns</h4>
 <p> the ID (greater than 0) for the watch within the GMainContext.</p>
 </div>
 </div>
@@ -1907,7 +1967,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.41.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">
@@ -1943,7 +2003,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.42.5"></a><h4>Parameters</h4>
+<a name="id-1.2.10.3.7.43.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1970,7 +2030,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.10.3.7.42.6"></a><h4>Returns</h4>
+<a name="id-1.2.10.3.7.43.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>
 </div>
 </div>
@@ -2001,7 +2061,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.43.7"></a><h4>Parameters</h4>
+<a name="id-1.2.10.3.7.44.7"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -2034,7 +2094,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.10.3.7.43.8"></a><h4>Returns</h4>
+<a name="id-1.2.10.3.7.44.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>
@@ -2051,7 +2111,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.44.5"></a><h4>Parameters</h4>
+<a name="id-1.2.10.3.7.45.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -2094,7 +2154,7 @@
  or <em class="parameter"><code>messages</code></em>
  means no limits.</p>
 <div class="refsect3">
-<a name="id-1.2.10.3.7.45.6"></a><h4>Parameters</h4>
+<a name="id-1.2.10.3.7.46.6"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -2133,7 +2193,7 @@
 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>
+<a name="id-1.2.10.3.7.47.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -2175,7 +2235,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.47.7"></a><h4>Parameters</h4>
+<a name="id-1.2.10.3.7.48.7"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -2197,7 +2257,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.10.3.7.47.8"></a><h4>Returns</h4>
+<a name="id-1.2.10.3.7.48.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.
diff --git a/docs/libs/html/gst-plugins-base-libs-gstvideoaffinetransformationmeta.html b/docs/libs/html/gst-plugins-base-libs-gstvideoaffinetransformationmeta.html
new file mode 100644
index 0000000..74471a1
--- /dev/null
+++ b/docs/libs/html/gst-plugins-base-libs-gstvideoaffinetransformationmeta.html
@@ -0,0 +1,174 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>gstvideoaffinetransformationmeta: 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-gstvideooverlaycomposition.html" title="gstvideooverlaycomposition">
+<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-gstvideoaffinetransformationmeta.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-gstvideometa.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
+<td><a accesskey="n" href="gst-plugins-base-libs-gstvideooverlaycomposition.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-gstvideoaffinetransformationmeta"></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-gstvideoaffinetransformationmeta.top_of_page"></a>gstvideoaffinetransformationmeta</span></h2>
+<p>gstvideoaffinetransformationmeta</p>
+</td>
+<td class="gallery_image" valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsect1">
+<a name="gst-plugins-base-libs-gstvideoaffinetransformationmeta.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-gstvideoaffinetransformationmeta.html#GstVideoAffineTransformationMeta" title="struct GstVideoAffineTransformationMeta"><span class="returnvalue">GstVideoAffineTransformationMeta</span></a> *
+</td>
+<td class="function_name">
+<a class="link" href="gst-plugins-base-libs-gstvideoaffinetransformationmeta.html#gst-buffer-add-video-affine-transformation-meta" title="gst_buffer_add_video_affine_transformation_meta ()">gst_buffer_add_video_affine_transformation_meta</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-gstvideoaffinetransformationmeta.html#gst-buffer-get-video-affine-transformation-meta" title="gst_buffer_get_video_affine_transformation_meta()">gst_buffer_get_video_affine_transformation_meta</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-gstvideoaffinetransformationmeta.html#gst-video-affine-transformation-meta-apply-matrix" title="gst_video_affine_transformation_meta_apply_matrix ()">gst_video_affine_transformation_meta_apply_matrix</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-libs-gstvideoaffinetransformationmeta.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-gstvideoaffinetransformationmeta.html#GstVideoAffineTransformationMeta" title="struct GstVideoAffineTransformationMeta">GstVideoAffineTransformationMeta</a></td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-libs-gstvideoaffinetransformationmeta.includes"></a><h2>Includes</h2>
+<pre class="synopsis">#include &lt;gst/video/gstvideoaffinetransformationmeta.h&gt;
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-libs-gstvideoaffinetransformationmeta.description"></a><h2>Description</h2>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-libs-gstvideoaffinetransformationmeta.functions_details"></a><h2>Functions</h2>
+<div class="refsect2">
+<a name="gst-buffer-add-video-affine-transformation-meta"></a><h3>gst_buffer_add_video_affine_transformation_meta ()</h3>
+<pre class="programlisting"><a class="link" href="gst-plugins-base-libs-gstvideoaffinetransformationmeta.html#GstVideoAffineTransformationMeta" title="struct GstVideoAffineTransformationMeta"><span class="returnvalue">GstVideoAffineTransformationMeta</span></a> *
+gst_buffer_add_video_affine_transformation_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>Attaches GstVideoAffineTransformationMeta metadata to <em class="parameter"><code>buffer</code></em>
+ with
+the given parameters.</p>
+<div class="refsect3">
+<a name="id-1.2.15.5.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>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.5.7.2.6"></a><h4>Returns</h4>
+<p> the <a class="link" href="gst-plugins-base-libs-gstvideoaffinetransformationmeta.html#GstVideoAffineTransformationMeta" title="struct GstVideoAffineTransformationMeta"><span class="type">GstVideoAffineTransformationMeta</span></a> on <em class="parameter"><code>buffer</code></em>
+.</p>
+</div>
+<p class="since">Since: 1.8</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-buffer-get-video-affine-transformation-meta"></a><h3>gst_buffer_get_video_affine_transformation_meta()</h3>
+<pre class="programlisting">#define             gst_buffer_get_video_affine_transformation_meta(b)</pre>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-video-affine-transformation-meta-apply-matrix"></a><h3>gst_video_affine_transformation_meta_apply_matrix ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+gst_video_affine_transformation_meta_apply_matrix
+                               (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstvideoaffinetransformationmeta.html#GstVideoAffineTransformationMeta" title="struct GstVideoAffineTransformationMeta"><span class="type">GstVideoAffineTransformationMeta</span></a> *meta</code></em>,
+                                <em class="parameter"><code>const <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gfloat"><span class="type">gfloat</span></a> matrix[16]</code></em>);</pre>
+<p>Apply a transformation using the given 4x4 transformation matrix</p>
+<div class="refsect3">
+<a name="id-1.2.15.5.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>meta</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gst-plugins-base-libs-gstvideoaffinetransformationmeta.html#GstVideoAffineTransformationMeta" title="struct GstVideoAffineTransformationMeta"><span class="type">GstVideoAffineTransformationMeta</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>matrix</p></td>
+<td class="parameter_description"><p>a 4x4 transformation matrix to be applied</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<p class="since">Since: 1.8</p>
+</div>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-libs-gstvideoaffinetransformationmeta.other_details"></a><h2>Types and Values</h2>
+<div class="refsect2">
+<a name="GstVideoAffineTransformationMeta"></a><h3>struct GstVideoAffineTransformationMeta</h3>
+<pre class="programlisting">struct GstVideoAffineTransformationMeta {
+  GstMeta meta;
+
+  gfloat matrix[16];
+};
+</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-gstvideofilter.html b/docs/libs/html/gst-plugins-base-libs-gstvideofilter.html
index 62654cc..9faa895 100644
--- a/docs/libs/html/gst-plugins-base-libs-gstvideofilter.html
+++ b/docs/libs/html/gst-plugins-base-libs-gstvideofilter.html
@@ -69,7 +69,7 @@
 <div class="refsect1">
 <a name="gst-plugins-base-libs-gstvideofilter.description"></a><h2>Description</h2>
 <div class="refsect2">
-<a name="id-1.2.15.6.7.2"></a><p>
+<a name="id-1.2.15.7.7.2"></a><p>
 Provides useful functions and a base class for video filters.
 </p>
 <p>
@@ -106,7 +106,7 @@
 </pre>
 <p>The video filter class structure.</p>
 <div class="refsect3">
-<a name="id-1.2.15.6.9.3.5"></a><h4>Members</h4>
+<a name="id-1.2.15.7.9.3.5"></a><h4>Members</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="300px" class="struct_members_name">
diff --git a/docs/libs/html/gst-plugins-base-libs-gstvideometa.html b/docs/libs/html/gst-plugins-base-libs-gstvideometa.html
index 5d6d8dd..06cbfe0 100644
--- a/docs/libs/html/gst-plugins-base-libs-gstvideometa.html
+++ b/docs/libs/html/gst-plugins-base-libs-gstvideometa.html
@@ -7,7 +7,7 @@
 <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">
+<link rel="next" href="gst-plugins-base-libs-gstvideoaffinetransformationmeta.html" title="gstvideoaffinetransformationmeta">
 <meta name="generator" content="GTK-Doc V1.24 (XML mode)">
 <link rel="stylesheet" href="style.css" type="text/css">
 </head>
@@ -20,7 +20,7 @@
 <td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
 <td><a accesskey="u" href="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-gstvideo.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
-<td><a accesskey="n" href="gst-plugins-base-libs-gstvideooverlaycomposition.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
+<td><a accesskey="n" href="gst-plugins-base-libs-gstvideoaffinetransformationmeta.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-gstvideometa"></a><div class="titlepage"></div>
diff --git a/docs/libs/html/gst-plugins-base-libs-gstvideoorientation.html b/docs/libs/html/gst-plugins-base-libs-gstvideoorientation.html
index 45a1ab1..6216303 100644
--- a/docs/libs/html/gst-plugins-base-libs-gstvideoorientation.html
+++ b/docs/libs/html/gst-plugins-base-libs-gstvideoorientation.html
@@ -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.14.9.2.5"></a><h4>Parameters</h4>
+<a name="id-1.2.15.15.9.2.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -174,7 +174,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.15.14.9.2.6"></a><h4>Returns</h4>
+<a name="id-1.2.15.15.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>
 </div>
 </div>
@@ -186,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.14.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">
@@ -208,7 +208,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.15.14.9.3.6"></a><h4>Returns</h4>
+<a name="id-1.2.15.15.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>
 </div>
 </div>
@@ -220,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.14.9.4.5"></a><h4>Parameters</h4>
+<a name="id-1.2.15.15.9.4.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -242,7 +242,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.15.14.9.4.6"></a><h4>Returns</h4>
+<a name="id-1.2.15.15.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>
 </div>
 </div>
@@ -254,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.14.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">
@@ -276,7 +276,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.15.14.9.5.6"></a><h4>Returns</h4>
+<a name="id-1.2.15.15.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>
 </div>
 </div>
@@ -288,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.14.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">
@@ -310,7 +310,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.15.14.9.6.6"></a><h4>Returns</h4>
+<a name="id-1.2.15.15.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>
 </div>
 </div>
@@ -322,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.14.9.7.5"></a><h4>Parameters</h4>
+<a name="id-1.2.15.15.9.7.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -344,7 +344,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.15.14.9.7.6"></a><h4>Returns</h4>
+<a name="id-1.2.15.15.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>
 </div>
 </div>
@@ -356,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.14.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">
@@ -378,7 +378,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.15.14.9.8.6"></a><h4>Returns</h4>
+<a name="id-1.2.15.15.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>
 </div>
 </div>
@@ -390,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.14.9.9.5"></a><h4>Parameters</h4>
+<a name="id-1.2.15.15.9.9.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -412,7 +412,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.15.14.9.9.6"></a><h4>Returns</h4>
+<a name="id-1.2.15.15.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>
 </div>
 </div>
@@ -448,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.14.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">
diff --git a/docs/libs/html/gst-plugins-base-libs-gstvideooverlay.html b/docs/libs/html/gst-plugins-base-libs-gstvideooverlay.html
index a2d1e32..46ef7e3 100644
--- a/docs/libs/html/gst-plugins-base-libs-gstvideooverlay.html
+++ b/docs/libs/html/gst-plugins-base-libs-gstvideooverlay.html
@@ -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.15.8.2"></a><p>
+<a name="id-1.2.15.16.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; ">
@@ -246,7 +246,7 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="id-1.2.15.15.8.3"></a><h3>Two basic usage scenarios</h3>
+<a name="id-1.2.15.16.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.15.8.4"></a><h3>GstVideoOverlay and Gtk+</h3>
+<a name="id-1.2.15.16.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.15.8.5"></a><h3>GstVideoOverlay and Qt</h3>
+<a name="id-1.2.15.16.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.15.9.2.6"></a><h4>Parameters</h4>
+<a name="id-1.2.15.16.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.15.9.3.5"></a><h4>Parameters</h4>
+<a name="id-1.2.15.16.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.15.9.4.6"></a><h4>Parameters</h4>
+<a name="id-1.2.15.16.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.15.9.5.5"></a><h4>Parameters</h4>
+<a name="id-1.2.15.16.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.15.9.6.5"></a><h4>Parameters</h4>
+<a name="id-1.2.15.16.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.15.9.7.6"></a><h4>Parameters</h4>
+<a name="id-1.2.15.16.9.7.6"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -833,7 +833,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.15.15.9.7.7"></a><h4>Returns</h4>
+<a name="id-1.2.15.16.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>
 </div>
 </div>
@@ -846,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.15.9.8.5"></a><h4>Parameters</h4>
+<a name="id-1.2.15.16.9.8.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -861,7 +861,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.15.15.9.8.6"></a><h4>Returns</h4>
+<a name="id-1.2.15.16.9.8.6"></a><h4>Returns</h4>
 <p> whether <em class="parameter"><code>msg</code></em>
 is a "prepare-window-handle" message</p>
 </div>
@@ -894,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.15.10.3.5"></a><h4>Members</h4>
+<a name="id-1.2.15.16.10.3.5"></a><h4>Members</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="300px" class="struct_members_name">
diff --git a/docs/libs/html/gst-plugins-base-libs-gstvideooverlaycomposition.html b/docs/libs/html/gst-plugins-base-libs-gstvideooverlaycomposition.html
index c09049a..1ecf3aa 100644
--- a/docs/libs/html/gst-plugins-base-libs-gstvideooverlaycomposition.html
+++ b/docs/libs/html/gst-plugins-base-libs-gstvideooverlaycomposition.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="up" href="gstreamer-video.html" title="Video Library">
-<link rel="prev" href="gst-plugins-base-libs-gstvideometa.html" title="gstvideometa">
+<link rel="prev" href="gst-plugins-base-libs-gstvideoaffinetransformationmeta.html" title="gstvideoaffinetransformationmeta">
 <link rel="next" href="gst-plugins-base-libs-gstvideofilter.html" title="gstvideofilter">
 <meta name="generator" content="GTK-Doc V1.24 (XML mode)">
 <link rel="stylesheet" href="style.css" type="text/css">
@@ -19,7 +19,7 @@
 </td>
 <td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
 <td><a accesskey="u" href="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-gstvideometa.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
+<td><a accesskey="p" href="gst-plugins-base-libs-gstvideoaffinetransformationmeta.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
 <td><a accesskey="n" href="gst-plugins-base-libs-gstvideofilter.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
 </tr></table>
 <div class="refentry">
@@ -316,7 +316,7 @@
 <div class="refsect1">
 <a name="gst-plugins-base-libs-gstvideooverlaycomposition.description"></a><h2>Description</h2>
 <div class="refsect2">
-<a name="id-1.2.15.5.6.2"></a><p>
+<a name="id-1.2.15.6.6.2"></a><p>
 Functions to create and handle overlay compositions on video buffers.
 </p>
 <p>
@@ -354,7 +354,7 @@
 <p>Creates a new video overlay composition object to hold one or more
 overlay rectangles.</p>
 <div class="refsect3">
-<a name="id-1.2.15.5.7.2.5"></a><h4>Parameters</h4>
+<a name="id-1.2.15.6.7.2.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -370,7 +370,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.15.5.7.2.6"></a><h4>Returns</h4>
+<a name="id-1.2.15.6.7.2.6"></a><h4>Returns</h4>
 <p> a new <a class="link" href="gst-plugins-base-libs-gstvideooverlaycomposition.html#GstVideoOverlayComposition" title="GstVideoOverlayComposition"><span class="type">GstVideoOverlayComposition</span></a>. Unref with
 <a class="link" href="gst-plugins-base-libs-gstvideooverlaycomposition.html#gst-video-overlay-composition-unref" title="gst_video_overlay_composition_unref ()"><code class="function">gst_video_overlay_composition_unref()</code></a> when no longer needed. </p>
 <p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p>
@@ -387,7 +387,7 @@
 , use <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> to ensure
 a composition and its rectangles can be modified.</p>
 <div class="refsect3">
-<a name="id-1.2.15.5.7.3.6"></a><h4>Parameters</h4>
+<a name="id-1.2.15.6.7.3.6"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -402,7 +402,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.15.5.7.3.7"></a><h4>Returns</h4>
+<a name="id-1.2.15.6.7.3.7"></a><h4>Returns</h4>
 <p> <em class="parameter"><code>comp</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>
@@ -416,7 +416,7 @@
 <p>Decreases the refcount of the composition. If the refcount reaches 0, the
 composition will be freed.</p>
 <div class="refsect3">
-<a name="id-1.2.15.5.7.4.5"></a><h4>Parameters</h4>
+<a name="id-1.2.15.6.7.4.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -441,7 +441,7 @@
 <p>Adds an overlay rectangle to an existing overlay composition object. This
 must be done right after creating the overlay composition.</p>
 <div class="refsect3">
-<a name="id-1.2.15.5.7.5.5"></a><h4>Parameters</h4>
+<a name="id-1.2.15.6.7.5.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -473,7 +473,7 @@
 <p>Returns the number of <a class="link" href="gst-plugins-base-libs-gstvideooverlaycomposition.html#GstVideoOverlayRectangle" title="GstVideoOverlayRectangle"><span class="type">GstVideoOverlayRectangle</span></a>s contained in <em class="parameter"><code>comp</code></em>
 .</p>
 <div class="refsect3">
-<a name="id-1.2.15.5.7.6.5"></a><h4>Parameters</h4>
+<a name="id-1.2.15.6.7.6.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -488,7 +488,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.15.5.7.6.6"></a><h4>Returns</h4>
+<a name="id-1.2.15.6.7.6.6"></a><h4>Returns</h4>
 <p> the number of rectangles</p>
 </div>
 </div>
@@ -503,7 +503,7 @@
 -th <a class="link" href="gst-plugins-base-libs-gstvideooverlaycomposition.html#GstVideoOverlayRectangle" title="GstVideoOverlayRectangle"><span class="type">GstVideoOverlayRectangle</span></a> contained in <em class="parameter"><code>comp</code></em>
 .</p>
 <div class="refsect3">
-<a name="id-1.2.15.5.7.7.5"></a><h4>Parameters</h4>
+<a name="id-1.2.15.6.7.7.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -525,7 +525,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.15.5.7.7.6"></a><h4>Returns</h4>
+<a name="id-1.2.15.6.7.7.6"></a><h4>Returns</h4>
 <p> the <em class="parameter"><code>n</code></em>
 -th rectangle, or NULL if <em class="parameter"><code>n</code></em>
 is out of
@@ -546,7 +546,7 @@
 (meaning there will never be a rectangle with the same sequence number as
 a composition).</p>
 <div class="refsect3">
-<a name="id-1.2.15.5.7.8.5"></a><h4>Parameters</h4>
+<a name="id-1.2.15.6.7.8.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -561,7 +561,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.15.5.7.8.6"></a><h4>Returns</h4>
+<a name="id-1.2.15.6.7.8.6"></a><h4>Returns</h4>
 <p> the sequence number of <em class="parameter"><code>comp</code></em>
 </p>
 </div>
@@ -578,7 +578,7 @@
 actual overlay pixel data buffers contained in the rectangles are not
 copied.</p>
 <div class="refsect3">
-<a name="id-1.2.15.5.7.9.5"></a><h4>Parameters</h4>
+<a name="id-1.2.15.6.7.9.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -593,7 +593,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.15.5.7.9.6"></a><h4>Returns</h4>
+<a name="id-1.2.15.6.7.9.6"></a><h4>Returns</h4>
 <p> a new <a class="link" href="gst-plugins-base-libs-gstvideooverlaycomposition.html#GstVideoOverlayComposition" title="GstVideoOverlayComposition"><span class="type">GstVideoOverlayComposition</span></a> equivalent
 to <em class="parameter"><code>comp</code></em>
 . </p>
@@ -617,7 +617,7 @@
 rectangles will also be copied, but the actual overlay pixel data buffers
 contained in the rectangles are not copied.</p>
 <div class="refsect3">
-<a name="id-1.2.15.5.7.10.5"></a><h4>Parameters</h4>
+<a name="id-1.2.15.6.7.10.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -632,7 +632,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.15.5.7.10.6"></a><h4>Returns</h4>
+<a name="id-1.2.15.6.7.10.6"></a><h4>Returns</h4>
 <p> a writable <a class="link" href="gst-plugins-base-libs-gstvideooverlaycomposition.html#GstVideoOverlayComposition" title="GstVideoOverlayComposition"><span class="type">GstVideoOverlayComposition</span></a>
 equivalent to <em class="parameter"><code>comp</code></em>
 . </p>
@@ -652,7 +652,7 @@
  must be writable and
 mapped appropriately.</p>
 <div class="refsect3">
-<a name="id-1.2.15.5.7.11.5"></a><h4>Parameters</h4>
+<a name="id-1.2.15.6.7.11.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -693,7 +693,7 @@
 of <em class="parameter"><code>comp</code></em>
 .</p>
 <div class="refsect3">
-<a name="id-1.2.15.5.7.13.5"></a><h4>Parameters</h4>
+<a name="id-1.2.15.6.7.13.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -715,7 +715,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.15.5.7.13.6"></a><h4>Returns</h4>
+<a name="id-1.2.15.6.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>
@@ -752,7 +752,7 @@
 and also many rendering libraries such as Cairo, for example.
 The pixel data buffer must have <a class="link" href="gst-plugins-base-libs-gstvideometa.html#GstVideoMeta" title="struct GstVideoMeta"><span class="type">GstVideoMeta</span></a> set.</p>
 <div class="refsect3">
-<a name="id-1.2.15.5.7.16.5"></a><h4>Parameters</h4>
+<a name="id-1.2.15.6.7.16.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -796,7 +796,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.15.5.7.16.6"></a><h4>Returns</h4>
+<a name="id-1.2.15.6.7.16.6"></a><h4>Returns</h4>
 <p> a new <a class="link" href="gst-plugins-base-libs-gstvideooverlaycomposition.html#GstVideoOverlayRectangle" title="GstVideoOverlayRectangle"><span class="type">GstVideoOverlayRectangle</span></a>. Unref with
 <a class="link" href="gst-plugins-base-libs-gstvideooverlaycomposition.html#gst-video-overlay-rectangle-unref" title="gst_video_overlay_rectangle_unref ()"><code class="function">gst_video_overlay_rectangle_unref()</code></a> when no longer needed. </p>
 <p><span class="annotation">[<acronym title="Free data after the code is done."><span class="acronym">transfer full</span></acronym>]</span></p>
@@ -815,7 +815,7 @@
 it is unlikely that someone will hold the single reference to the rectangle
 and not know that that's the case).</p>
 <div class="refsect3">
-<a name="id-1.2.15.5.7.17.6"></a><h4>Parameters</h4>
+<a name="id-1.2.15.6.7.17.6"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -830,7 +830,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.15.5.7.17.7"></a><h4>Returns</h4>
+<a name="id-1.2.15.6.7.17.7"></a><h4>Returns</h4>
 <p> <em class="parameter"><code>comp</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>
@@ -844,7 +844,7 @@
 <p>Decreases the refcount of the rectangle. If the refcount reaches 0, the
 rectangle will be freed.</p>
 <div class="refsect3">
-<a name="id-1.2.15.5.7.18.5"></a><h4>Parameters</h4>
+<a name="id-1.2.15.6.7.18.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -867,7 +867,7 @@
                                (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstvideooverlaycomposition.html#GstVideoOverlayRectangle" title="GstVideoOverlayRectangle"><span class="type">GstVideoOverlayRectangle</span></a> *rectangle</code></em>,
                                 <em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstvideooverlaycomposition.html#GstVideoOverlayFormatFlags" title="enum GstVideoOverlayFormatFlags"><span class="type">GstVideoOverlayFormatFlags</span></a> flags</code></em>);</pre>
 <div class="refsect3">
-<a name="id-1.2.15.5.7.19.4"></a><h4>Parameters</h4>
+<a name="id-1.2.15.6.7.19.4"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -893,7 +893,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.15.5.7.19.5"></a><h4>Returns</h4>
+<a name="id-1.2.15.6.7.19.5"></a><h4>Returns</h4>
 <p> a <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstBuffer.html"><span class="type">GstBuffer</span></a> holding the pixel data with
 format as originally provided and specified in video meta with
 width and height of the render dimensions as per
@@ -911,7 +911,7 @@
                                (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstvideooverlaycomposition.html#GstVideoOverlayRectangle" title="GstVideoOverlayRectangle"><span class="type">GstVideoOverlayRectangle</span></a> *rectangle</code></em>,
                                 <em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstvideooverlaycomposition.html#GstVideoOverlayFormatFlags" title="enum GstVideoOverlayFormatFlags"><span class="type">GstVideoOverlayFormatFlags</span></a> flags</code></em>);</pre>
 <div class="refsect3">
-<a name="id-1.2.15.5.7.20.4"></a><h4>Parameters</h4>
+<a name="id-1.2.15.6.7.20.4"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -937,7 +937,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.15.5.7.20.5"></a><h4>Returns</h4>
+<a name="id-1.2.15.6.7.20.5"></a><h4>Returns</h4>
 <p> a <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstBuffer.html"><span class="type">GstBuffer</span></a> holding the ARGB pixel data with
 width and height of the render dimensions as per
 <a class="link" href="gst-plugins-base-libs-gstvideooverlaycomposition.html#gst-video-overlay-rectangle-get-render-rectangle" title="gst_video_overlay_rectangle_get_render_rectangle ()"><code class="function">gst_video_overlay_rectangle_get_render_rectangle()</code></a>. This function does
@@ -954,7 +954,7 @@
                                (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstvideooverlaycomposition.html#GstVideoOverlayRectangle" title="GstVideoOverlayRectangle"><span class="type">GstVideoOverlayRectangle</span></a> *rectangle</code></em>,
                                 <em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstvideooverlaycomposition.html#GstVideoOverlayFormatFlags" title="enum GstVideoOverlayFormatFlags"><span class="type">GstVideoOverlayFormatFlags</span></a> flags</code></em>);</pre>
 <div class="refsect3">
-<a name="id-1.2.15.5.7.21.4"></a><h4>Parameters</h4>
+<a name="id-1.2.15.6.7.21.4"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -980,7 +980,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.15.5.7.21.5"></a><h4>Returns</h4>
+<a name="id-1.2.15.6.7.21.5"></a><h4>Returns</h4>
 <p> a <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstBuffer.html"><span class="type">GstBuffer</span></a> holding the AYUV pixel data with
 width and height of the render dimensions as per
 <a class="link" href="gst-plugins-base-libs-gstvideooverlaycomposition.html#gst-video-overlay-rectangle-get-render-rectangle" title="gst_video_overlay_rectangle_get_render_rectangle ()"><code class="function">gst_video_overlay_rectangle_get_render_rectangle()</code></a>. This function does
@@ -1001,7 +1001,7 @@
 need to be scaled to the render dimensions, which can be retrieved using
 <a class="link" href="gst-plugins-base-libs-gstvideooverlaycomposition.html#gst-video-overlay-rectangle-get-render-rectangle" title="gst_video_overlay_rectangle_get_render_rectangle ()"><code class="function">gst_video_overlay_rectangle_get_render_rectangle()</code></a>.</p>
 <div class="refsect3">
-<a name="id-1.2.15.5.7.22.5"></a><h4>Parameters</h4>
+<a name="id-1.2.15.6.7.22.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1027,7 +1027,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.15.5.7.22.6"></a><h4>Returns</h4>
+<a name="id-1.2.15.6.7.22.6"></a><h4>Returns</h4>
 <p> a <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstBuffer.html"><span class="type">GstBuffer</span></a> holding the pixel data with
 <a class="link" href="gst-plugins-base-libs-gstvideometa.html#GstVideoMeta" title="struct GstVideoMeta"><span class="type">GstVideoMeta</span></a> set. This function does not return a reference, the caller
 should obtain a reference of her own with <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstBuffer.html#gst-buffer-ref"><code class="function">gst_buffer_ref()</code></a> if needed. </p>
@@ -1046,7 +1046,7 @@
 need to be scaled to the render dimensions, which can be retrieved using
 <a class="link" href="gst-plugins-base-libs-gstvideooverlaycomposition.html#gst-video-overlay-rectangle-get-render-rectangle" title="gst_video_overlay_rectangle_get_render_rectangle ()"><code class="function">gst_video_overlay_rectangle_get_render_rectangle()</code></a>.</p>
 <div class="refsect3">
-<a name="id-1.2.15.5.7.23.5"></a><h4>Parameters</h4>
+<a name="id-1.2.15.6.7.23.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1072,7 +1072,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.15.5.7.23.6"></a><h4>Returns</h4>
+<a name="id-1.2.15.6.7.23.6"></a><h4>Returns</h4>
 <p> a <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstBuffer.html"><span class="type">GstBuffer</span></a> holding the ARGB pixel data with
 <a class="link" href="gst-plugins-base-libs-gstvideometa.html#GstVideoMeta" title="struct GstVideoMeta"><span class="type">GstVideoMeta</span></a> set. This function does not return a reference, the caller
 should obtain a reference of her own with <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstBuffer.html#gst-buffer-ref"><code class="function">gst_buffer_ref()</code></a> if needed. </p>
@@ -1091,7 +1091,7 @@
 need to be scaled to the render dimensions, which can be retrieved using
 <a class="link" href="gst-plugins-base-libs-gstvideooverlaycomposition.html#gst-video-overlay-rectangle-get-render-rectangle" title="gst_video_overlay_rectangle_get_render_rectangle ()"><code class="function">gst_video_overlay_rectangle_get_render_rectangle()</code></a>.</p>
 <div class="refsect3">
-<a name="id-1.2.15.5.7.24.5"></a><h4>Parameters</h4>
+<a name="id-1.2.15.6.7.24.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1117,7 +1117,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.15.5.7.24.6"></a><h4>Returns</h4>
+<a name="id-1.2.15.6.7.24.6"></a><h4>Returns</h4>
 <p> a <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstBuffer.html"><span class="type">GstBuffer</span></a> holding the AYUV pixel data with
 <a class="link" href="gst-plugins-base-libs-gstvideometa.html#GstVideoMeta" title="struct GstVideoMeta"><span class="type">GstVideoMeta</span></a> set. This function does not return a reference, the caller
 should obtain a reference of her own with <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstBuffer.html#gst-buffer-ref"><code class="function">gst_buffer_ref()</code></a> if needed. </p>
@@ -1137,7 +1137,7 @@
 <p>Retrieves the render position and render dimension of the overlay
 rectangle on the video.</p>
 <div class="refsect3">
-<a name="id-1.2.15.5.7.25.5"></a><h4>Parameters</h4>
+<a name="id-1.2.15.6.7.25.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1174,7 +1174,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.15.5.7.25.6"></a><h4>Returns</h4>
+<a name="id-1.2.15.6.7.25.6"></a><h4>Returns</h4>
 <p> TRUE if valid render dimensions were retrieved.</p>
 </div>
 </div>
@@ -1198,7 +1198,7 @@
 renderer could also use the GstBuffer pointers as a hint for changed
 pixel-data.</p>
 <div class="refsect3">
-<a name="id-1.2.15.5.7.26.6"></a><h4>Parameters</h4>
+<a name="id-1.2.15.6.7.26.6"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1213,7 +1213,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.15.5.7.26.7"></a><h4>Returns</h4>
+<a name="id-1.2.15.6.7.26.7"></a><h4>Returns</h4>
 <p> the sequence number of <em class="parameter"><code>rectangle</code></em>
 </p>
 </div>
@@ -1238,7 +1238,7 @@
 <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
 <a class="link" href="gst-plugins-base-libs-gstvideooverlaycomposition.html#gst-video-overlay-composition-copy" title="gst_video_overlay_composition_copy ()"><code class="function">gst_video_overlay_composition_copy()</code></a>.</p>
 <div class="refsect3">
-<a name="id-1.2.15.5.7.27.6"></a><h4>Parameters</h4>
+<a name="id-1.2.15.6.7.27.6"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1286,7 +1286,7 @@
 actual overlay pixel data buffers contained in the rectangle are not
 copied.</p>
 <div class="refsect3">
-<a name="id-1.2.15.5.7.28.5"></a><h4>Parameters</h4>
+<a name="id-1.2.15.6.7.28.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1301,7 +1301,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.15.5.7.28.6"></a><h4>Returns</h4>
+<a name="id-1.2.15.6.7.28.6"></a><h4>Returns</h4>
 <p> a new <a class="link" href="gst-plugins-base-libs-gstvideooverlaycomposition.html#GstVideoOverlayRectangle" title="GstVideoOverlayRectangle"><span class="type">GstVideoOverlayRectangle</span></a> equivalent
 to <em class="parameter"><code>rectangle</code></em>
 . </p>
@@ -1319,7 +1319,7 @@
 uses premultiplied or not, it can request the pixel data in the format
 it is stored in, to avoid unnecessary conversion.</p>
 <div class="refsect3">
-<a name="id-1.2.15.5.7.29.5"></a><h4>Parameters</h4>
+<a name="id-1.2.15.6.7.29.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1334,7 +1334,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.15.5.7.29.6"></a><h4>Returns</h4>
+<a name="id-1.2.15.6.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>
 </div>
 </div>
@@ -1346,7 +1346,7 @@
                                (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstvideooverlaycomposition.html#GstVideoOverlayRectangle" title="GstVideoOverlayRectangle"><span class="type">GstVideoOverlayRectangle</span></a> *rectangle</code></em>);</pre>
 <p>Retrieves 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>.</p>
 <div class="refsect3">
-<a name="id-1.2.15.5.7.30.5"></a><h4>Parameters</h4>
+<a name="id-1.2.15.6.7.30.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1361,7 +1361,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.15.5.7.30.6"></a><h4>Returns</h4>
+<a name="id-1.2.15.6.7.30.6"></a><h4>Returns</h4>
 <p> the global-alpha value associated with the rectangle.</p>
 </div>
 </div>
@@ -1381,7 +1381,7 @@
 <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
 <a class="link" href="gst-plugins-base-libs-gstvideooverlaycomposition.html#gst-video-overlay-composition-copy" title="gst_video_overlay_composition_copy ()"><code class="function">gst_video_overlay_composition_copy()</code></a>.</p>
 <div class="refsect3">
-<a name="id-1.2.15.5.7.31.6"></a><h4>Parameters</h4>
+<a name="id-1.2.15.6.7.31.6"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1431,7 +1431,7 @@
 </pre>
 <p>Extra buffer metadata describing image overlay data.</p>
 <div class="refsect3">
-<a name="id-1.2.15.5.8.4.5"></a><h4>Members</h4>
+<a name="id-1.2.15.6.8.4.5"></a><h4>Members</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="300px" class="struct_members_name">
@@ -1458,7 +1458,7 @@
 <a name="GstVideoOverlayFormatFlags"></a><h3>enum GstVideoOverlayFormatFlags</h3>
 <p>Overlay format flags.</p>
 <div class="refsect3">
-<a name="id-1.2.15.5.8.5.4"></a><h4>Members</h4>
+<a name="id-1.2.15.6.8.5.4"></a><h4>Members</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="300px" class="enum_members_name">
diff --git a/docs/libs/html/gst-plugins-base-libs-gstvideosink.html b/docs/libs/html/gst-plugins-base-libs-gstvideosink.html
index 5dc5dcc..ab41f82 100644
--- a/docs/libs/html/gst-plugins-base-libs-gstvideosink.html
+++ b/docs/libs/html/gst-plugins-base-libs-gstvideosink.html
@@ -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.11.9.2"></a><p>
+<a name="id-1.2.15.12.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.11.10.3.5"></a><h4>Parameters</h4>
+<a name="id-1.2.15.12.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.11.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">
@@ -236,7 +236,7 @@
  and <em class="parameter"><code>width</code></em>
  members.</p>
 <div class="refsect3">
-<a name="id-1.2.15.11.11.2.5"></a><h4>Members</h4>
+<a name="id-1.2.15.12.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.11.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">
@@ -308,7 +308,7 @@
 </pre>
 <p>Helper structure representing a rectangular area.</p>
 <div class="refsect3">
-<a name="id-1.2.15.11.11.4.5"></a><h4>Members</h4>
+<a name="id-1.2.15.12.11.4.5"></a><h4>Members</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="300px" class="struct_members_name">
diff --git a/docs/libs/html/gst-plugins-base-libs-gstvideoutils.html b/docs/libs/html/gst-plugins-base-libs-gstvideoutils.html
index 39c0b71..371e9bf 100644
--- a/docs/libs/html/gst-plugins-base-libs-gstvideoutils.html
+++ b/docs/libs/html/gst-plugins-base-libs-gstvideoutils.html
@@ -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.19.6.2.5"></a><h4>Parameters</h4>
+<a name="id-1.2.15.20.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.19.6.3.5"></a><h4>Parameters</h4>
+<a name="id-1.2.15.20.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.19.6.4.5"></a><h4>Parameters</h4>
+<a name="id-1.2.15.20.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.19.6.5.5"></a><h4>Parameters</h4>
+<a name="id-1.2.15.20.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.19.6.6.5"></a><h4>Parameters</h4>
+<a name="id-1.2.15.20.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.19.6.7.5"></a><h4>Parameters</h4>
+<a name="id-1.2.15.20.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.19.6.8.6"></a><h4>Parameters</h4>
+<a name="id-1.2.15.20.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.19.6.9.6"></a><h4>Parameters</h4>
+<a name="id-1.2.15.20.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.19.6.10.7"></a><h4>Parameters</h4>
+<a name="id-1.2.15.20.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.19.6.13.7"></a><h4>Parameters</h4>
+<a name="id-1.2.15.20.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.19.6.17.5"></a><h4>Parameters</h4>
+<a name="id-1.2.15.20.6.17.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -513,7 +513,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.15.19.6.17.6"></a><h4>Returns</h4>
+<a name="id-1.2.15.20.6.17.6"></a><h4>Returns</h4>
 <p> <em class="parameter"><code>buf</code></em>
 </p>
 </div>
@@ -526,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.19.6.18.5"></a><h4>Parameters</h4>
+<a name="id-1.2.15.20.6.18.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -557,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.19.6.19.6"></a><h4>Parameters</h4>
+<a name="id-1.2.15.20.6.19.6"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -592,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.19.6.20.5"></a><h4>Parameters</h4>
+<a name="id-1.2.15.20.6.20.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -607,7 +607,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.15.19.6.20.6"></a><h4>Returns</h4>
+<a name="id-1.2.15.20.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>
@@ -619,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.19.6.21.5"></a><h4>Parameters</h4>
+<a name="id-1.2.15.20.6.21.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -634,7 +634,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.15.19.6.21.6"></a><h4>Returns</h4>
+<a name="id-1.2.15.20.6.21.6"></a><h4>Returns</h4>
 <p> <em class="parameter"><code>buf</code></em>
 </p>
 </div>
@@ -647,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.19.6.22.5"></a><h4>Parameters</h4>
+<a name="id-1.2.15.20.6.22.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -687,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.19.7.2.5"></a><h4>Members</h4>
+<a name="id-1.2.15.20.7.2.5"></a><h4>Members</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="300px" class="struct_members_name">
@@ -766,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.19.7.3.4"></a><h4>Members</h4>
+<a name="id-1.2.15.20.7.3.4"></a><h4>Members</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="300px" class="enum_members_name">
@@ -828,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.19.7.4.7"></a><h4>Members</h4>
+<a name="id-1.2.15.20.7.4.7"></a><h4>Members</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="300px" class="struct_members_name">
diff --git a/docs/libs/html/gstreamer-plugins-base.html b/docs/libs/html/gstreamer-plugins-base.html
index b4a1069..7fd6129 100644
--- a/docs/libs/html/gstreamer-plugins-base.html
+++ b/docs/libs/html/gstreamer-plugins-base.html
@@ -252,6 +252,9 @@
 <span class="refentrytitle"><a href="gst-plugins-base-libs-gstvideometa.html">gstvideometa</a></span><span class="refpurpose"></span>
 </dt>
 <dt>
+<span class="refentrytitle"><a href="gst-plugins-base-libs-gstvideoaffinetransformationmeta.html">gstvideoaffinetransformationmeta</a></span><span class="refpurpose"></span>
+</dt>
+<dt>
 <span class="refentrytitle"><a href="gst-plugins-base-libs-gstvideooverlaycomposition.html">gstvideooverlaycomposition</a></span><span class="refpurpose"> — Video Buffer Overlay Compositions (Subtitles, Logos)</span>
 </dt>
 <dt>
diff --git a/docs/libs/html/gstreamer-video.html b/docs/libs/html/gstreamer-video.html
index 87dd069..425137e 100644
--- a/docs/libs/html/gstreamer-video.html
+++ b/docs/libs/html/gstreamer-video.html
@@ -30,6 +30,9 @@
 <span class="refentrytitle"><a href="gst-plugins-base-libs-gstvideometa.html">gstvideometa</a></span><span class="refpurpose"></span>
 </dt>
 <dt>
+<span class="refentrytitle"><a href="gst-plugins-base-libs-gstvideoaffinetransformationmeta.html">gstvideoaffinetransformationmeta</a></span><span class="refpurpose"></span>
+</dt>
+<dt>
 <span class="refentrytitle"><a href="gst-plugins-base-libs-gstvideooverlaycomposition.html">gstvideooverlaycomposition</a></span><span class="refpurpose"> — Video Buffer Overlay Compositions (Subtitles, Logos)</span>
 </dt>
 <dt>
diff --git a/docs/libs/html/index.html b/docs/libs/html/index.html
index cd3000a..a3f19af 100644
--- a/docs/libs/html/index.html
+++ b/docs/libs/html/index.html
@@ -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.6.2)
+      for GStreamer Base Library 1.0 (1.7.1)
       <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>
@@ -251,6 +251,9 @@
 <span class="refentrytitle"><a href="gst-plugins-base-libs-gstvideometa.html">gstvideometa</a></span><span class="refpurpose"></span>
 </dt>
 <dt>
+<span class="refentrytitle"><a href="gst-plugins-base-libs-gstvideoaffinetransformationmeta.html">gstvideoaffinetransformationmeta</a></span><span class="refpurpose"></span>
+</dt>
+<dt>
 <span class="refentrytitle"><a href="gst-plugins-base-libs-gstvideooverlaycomposition.html">gstvideooverlaycomposition</a></span><span class="refpurpose"> — Video Buffer Overlay Compositions (Subtitles, Logos)</span>
 </dt>
 <dt>
diff --git a/docs/libs/html/index.sgml b/docs/libs/html/index.sgml
index 2896378..8064ccc 100644
--- a/docs/libs/html/index.sgml
+++ b/docs/libs/html/index.sgml
@@ -201,8 +201,10 @@
 <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-AUDIO-PACK-FLAG-TRUNCATE-RANGE:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstaudio.html#GST-AUDIO-PACK-FLAG-TRUNCATE-RANGE: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-META-TAG-AUDIO-RATE-STR:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstaudio.html#GST-META-TAG-AUDIO-RATE-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">
 <ANCHOR id="GST-AUDIO-CHANNELS-RANGE:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstaudio.html#GST-AUDIO-CHANNELS-RANGE:CAPS">
 <ANCHOR id="GST-AUDIO-FORMATS-ALL:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstaudio.html#GST-AUDIO-FORMATS-ALL:CAPS">
@@ -218,8 +220,11 @@
 <ANCHOR id="gst-buffer-add-audio-downmix-meta" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstaudiometa.html#gst-buffer-add-audio-downmix-meta">
 <ANCHOR id="gst-buffer-get-audio-downmix-meta" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstaudiometa.html#gst-buffer-get-audio-downmix-meta">
 <ANCHOR id="gst-buffer-get-audio-downmix-meta-for-channels" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstaudiometa.html#gst-buffer-get-audio-downmix-meta-for-channels">
+<ANCHOR id="gst-buffer-add-audio-clipping-meta" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstaudiometa.html#gst-buffer-add-audio-clipping-meta">
+<ANCHOR id="gst-buffer-get-audio-clipping-meta" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstaudiometa.html#gst-buffer-get-audio-clipping-meta">
 <ANCHOR id="gst-plugins-base-libs-gstaudiometa.other_details" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstaudiometa.html#gst-plugins-base-libs-gstaudiometa.other_details">
 <ANCHOR id="GstAudioDownmixMeta" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstaudiometa.html#GstAudioDownmixMeta">
+<ANCHOR id="GstAudioClippingMeta" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstaudiometa.html#GstAudioClippingMeta">
 <ANCHOR id="gst-plugins-base-libs-gstaudiocdsrc" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstaudiocdsrc.html">
 <ANCHOR id="gst-plugins-base-libs-gstaudiocdsrc.functions" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstaudiocdsrc.html#gst-plugins-base-libs-gstaudiocdsrc.functions">
 <ANCHOR id="gst-plugins-base-libs-gstaudiocdsrc.properties" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstaudiocdsrc.html#gst-plugins-base-libs-gstaudiocdsrc.properties">
@@ -1014,6 +1019,7 @@
 <ANCHOR id="gst-rtsp-connection-create-from-socket" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtspconnection.html#gst-rtsp-connection-create-from-socket">
 <ANCHOR id="gst-rtsp-connection-accept" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtspconnection.html#gst-rtsp-connection-accept">
 <ANCHOR id="gst-rtsp-connection-connect" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtspconnection.html#gst-rtsp-connection-connect">
+<ANCHOR id="gst-rtsp-connection-connect-with-response" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtspconnection.html#gst-rtsp-connection-connect-with-response">
 <ANCHOR id="gst-rtsp-connection-close" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtspconnection.html#gst-rtsp-connection-close">
 <ANCHOR id="gst-rtsp-connection-free" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtspconnection.html#gst-rtsp-connection-free">
 <ANCHOR id="gst-rtsp-connection-read" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstrtspconnection.html#gst-rtsp-connection-read">
@@ -1902,6 +1908,11 @@
 <ANCHOR id="gst-codec-utils-mpeg4video-get-profile" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstpbutilscodecutils.html#gst-codec-utils-mpeg4video-get-profile">
 <ANCHOR id="gst-codec-utils-mpeg4video-get-level" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstpbutilscodecutils.html#gst-codec-utils-mpeg4video-get-level">
 <ANCHOR id="gst-codec-utils-mpeg4video-caps-set-level-and-profile" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstpbutilscodecutils.html#gst-codec-utils-mpeg4video-caps-set-level-and-profile">
+<ANCHOR id="gst-codec-utils-opus-create-caps" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstpbutilscodecutils.html#gst-codec-utils-opus-create-caps">
+<ANCHOR id="gst-codec-utils-opus-create-caps-from-header" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstpbutilscodecutils.html#gst-codec-utils-opus-create-caps-from-header">
+<ANCHOR id="gst-codec-utils-opus-parse-caps" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstpbutilscodecutils.html#gst-codec-utils-opus-parse-caps">
+<ANCHOR id="gst-codec-utils-opus-create-header" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstpbutilscodecutils.html#gst-codec-utils-opus-create-header">
+<ANCHOR id="gst-codec-utils-opus-parse-header" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstpbutilscodecutils.html#gst-codec-utils-opus-parse-header">
 <ANCHOR id="gst-plugins-base-libs-gstpbutilscodecutils.other_details" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstpbutilscodecutils.html#gst-plugins-base-libs-gstpbutilscodecutils.other_details">
 <ANCHOR id="gst-plugins-base-libs-gstpbutilsdescriptions" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstpbutilsdescriptions.html">
 <ANCHOR id="gst-plugins-base-libs-gstpbutilsdescriptions.functions" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstpbutilsdescriptions.html#gst-plugins-base-libs-gstpbutilsdescriptions.functions">
@@ -2072,6 +2083,7 @@
 <ANCHOR id="gst-plugins-base-libs-encoding-profile.object-hierarchy" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-encoding-profile.html#gst-plugins-base-libs-encoding-profile.object-hierarchy">
 <ANCHOR id="gst-plugins-base-libs-encoding-profile.includes" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-encoding-profile.html#gst-plugins-base-libs-encoding-profile.includes">
 <ANCHOR id="gst-plugins-base-libs-encoding-profile.description" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-encoding-profile.html#gst-plugins-base-libs-encoding-profile.description">
+<ANCHOR id="gst-validate-transcoding--encoding-profile" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-encoding-profile.html#gst-validate-transcoding--encoding-profile">
 <ANCHOR id="gst-plugins-base-libs-encoding-profile.functions_details" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-encoding-profile.html#gst-plugins-base-libs-encoding-profile.functions_details">
 <ANCHOR id="gst-encoding-profile-unref" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-encoding-profile.html#gst-encoding-profile-unref">
 <ANCHOR id="gst-encoding-profile-ref" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-encoding-profile.html#gst-encoding-profile-ref">
@@ -2518,6 +2530,17 @@
 <ANCHOR id="GstVideoRegionOfInterestMeta" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstvideometa.html#GstVideoRegionOfInterestMeta">
 <ANCHOR id="GST-BUFFER-POOL-OPTION-VIDEO-GL-TEXTURE-UPLOAD-META:CAPS" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstvideometa.html#GST-BUFFER-POOL-OPTION-VIDEO-GL-TEXTURE-UPLOAD-META:CAPS">
 <ANCHOR id="GstVideoGLTextureUploadMeta" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstvideometa.html#GstVideoGLTextureUploadMeta">
+<ANCHOR id="gst-plugins-base-libs-gstvideoaffinetransformationmeta" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstvideoaffinetransformationmeta.html">
+<ANCHOR id="gst-plugins-base-libs-gstvideoaffinetransformationmeta.functions" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstvideoaffinetransformationmeta.html#gst-plugins-base-libs-gstvideoaffinetransformationmeta.functions">
+<ANCHOR id="gst-plugins-base-libs-gstvideoaffinetransformationmeta.other" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstvideoaffinetransformationmeta.html#gst-plugins-base-libs-gstvideoaffinetransformationmeta.other">
+<ANCHOR id="gst-plugins-base-libs-gstvideoaffinetransformationmeta.includes" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstvideoaffinetransformationmeta.html#gst-plugins-base-libs-gstvideoaffinetransformationmeta.includes">
+<ANCHOR id="gst-plugins-base-libs-gstvideoaffinetransformationmeta.description" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstvideoaffinetransformationmeta.html#gst-plugins-base-libs-gstvideoaffinetransformationmeta.description">
+<ANCHOR id="gst-plugins-base-libs-gstvideoaffinetransformationmeta.functions_details" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstvideoaffinetransformationmeta.html#gst-plugins-base-libs-gstvideoaffinetransformationmeta.functions_details">
+<ANCHOR id="gst-buffer-add-video-affine-transformation-meta" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstvideoaffinetransformationmeta.html#gst-buffer-add-video-affine-transformation-meta">
+<ANCHOR id="gst-buffer-get-video-affine-transformation-meta" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstvideoaffinetransformationmeta.html#gst-buffer-get-video-affine-transformation-meta">
+<ANCHOR id="gst-video-affine-transformation-meta-apply-matrix" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstvideoaffinetransformationmeta.html#gst-video-affine-transformation-meta-apply-matrix">
+<ANCHOR id="gst-plugins-base-libs-gstvideoaffinetransformationmeta.other_details" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstvideoaffinetransformationmeta.html#gst-plugins-base-libs-gstvideoaffinetransformationmeta.other_details">
+<ANCHOR id="GstVideoAffineTransformationMeta" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstvideoaffinetransformationmeta.html#GstVideoAffineTransformationMeta">
 <ANCHOR id="gst-plugins-base-libs-gstvideooverlaycomposition" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstvideooverlaycomposition.html">
 <ANCHOR id="gst-plugins-base-libs-gstvideooverlaycomposition.functions" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstvideooverlaycomposition.html#gst-plugins-base-libs-gstvideooverlaycomposition.functions">
 <ANCHOR id="gst-plugins-base-libs-gstvideooverlaycomposition.other" href="gst-plugins-base-libs-1.0/gst-plugins-base-libs-gstvideooverlaycomposition.html#gst-plugins-base-libs-gstvideooverlaycomposition.other">
diff --git a/docs/plugins/Makefile.am b/docs/plugins/Makefile.am
index 254b9a9..5e72a67 100644
--- a/docs/plugins/Makefile.am
+++ b/docs/plugins/Makefile.am
@@ -67,7 +67,6 @@
 	$(top_srcdir)/ext/vorbis/gstvorbisparse.h \
 	$(top_srcdir)/ext/vorbis/gstvorbistag.h \
 	$(top_srcdir)/gst/adder/gstadder.h \
-	$(top_srcdir)/gst/audioconvert/audioconvert.h \
 	$(top_srcdir)/gst/audioconvert/gstaudioconvert.h \
 	$(top_srcdir)/gst/audiotestsrc/gstaudiotestsrc.h \
 	$(top_srcdir)/gst/encoding/gstencodebin.h \
diff --git a/docs/plugins/Makefile.in b/docs/plugins/Makefile.in
index 4c8e70b..3763e32 100644
--- a/docs/plugins/Makefile.in
+++ b/docs/plugins/Makefile.in
@@ -535,7 +535,6 @@
 	$(top_srcdir)/ext/vorbis/gstvorbisparse.h \
 	$(top_srcdir)/ext/vorbis/gstvorbistag.h \
 	$(top_srcdir)/gst/adder/gstadder.h \
-	$(top_srcdir)/gst/audioconvert/audioconvert.h \
 	$(top_srcdir)/gst/audioconvert/gstaudioconvert.h \
 	$(top_srcdir)/gst/audiotestsrc/gstaudiotestsrc.h \
 	$(top_srcdir)/gst/encoding/gstencodebin.h \
diff --git a/docs/plugins/gst-plugins-base-plugins-docs.sgml b/docs/plugins/gst-plugins-base-plugins-docs.sgml
index 812f73c..201b2fa 100644
--- a/docs/plugins/gst-plugins-base-plugins-docs.sgml
+++ b/docs/plugins/gst-plugins-base-plugins-docs.sgml
@@ -18,6 +18,7 @@
   <chapter>
     <title>gst-plugins-base Elements</title>
     <xi:include href="xml/element-adder.xml" />
+    <xi:include href="xml/element-alsamidisrc.xml" />
     <xi:include href="xml/element-alsasink.xml" />
     <xi:include href="xml/element-alsasrc.xml" />
     <xi:include href="xml/element-appsink.xml" />
diff --git a/docs/plugins/gst-plugins-base-plugins-sections.txt b/docs/plugins/gst-plugins-base-plugins-sections.txt
index d351ec1..190f62b 100644
--- a/docs/plugins/gst-plugins-base-plugins-sections.txt
+++ b/docs/plugins/gst-plugins-base-plugins-sections.txt
@@ -18,6 +18,21 @@
 </SECTION>
 
 <SECTION>
+<FILE>element-alsamidisrc</FILE>
+<TITLE>alsamidisrc</TITLE>
+GstAlsaMidiSrc
+<SUBSECTION Standard>
+GstAlsaMidiSrcClass
+GST_ALSA_MIDI_SRC
+GST_ALSA_MIDI_SRC_CLASS
+GST_IS_ALSA_MIDI_SRC
+GST_IS_ALSA_MIDI_SRC_CLASS
+GST_TYPE_ALSA_MIDI_SRC
+SUBSECTION Private>
+gst_alsa_midi_src_get_type
+</SECTION>
+
+<SECTION>
 <FILE>element-alsasink</FILE>
 <TITLE>alsasink</TITLE>
 GstAlsaSink
diff --git a/docs/plugins/gst-plugins-base-plugins.args b/docs/plugins/gst-plugins-base-plugins.args
index 3479582..5c01ea8 100644
--- a/docs/plugins/gst-plugins-base-plugins.args
+++ b/docs/plugins/gst-plugins-base-plugins.args
@@ -1121,10 +1121,10 @@
 <ARG>
 <NAME>GstAudioTestSrc::freq</NAME>
 <TYPE>gdouble</TYPE>
-<RANGE>[0,20000]</RANGE>
+<RANGE>[0,5.36871e+08]</RANGE>
 <FLAGS>rw</FLAGS>
 <NICK>Frequency</NICK>
-<BLURB>Frequency of test signal.</BLURB>
+<BLURB>Frequency of test signal. The sample rate needs to be at least 4 times higher.</BLURB>
 <DEFAULT>440</DEFAULT>
 </ARG>
 
@@ -1650,22 +1650,22 @@
 
 <ARG>
 <NAME>GstAudioConvert::dithering</NAME>
-<TYPE>GstAudioConvertDithering</TYPE>
+<TYPE>GstAudioDitherMethod</TYPE>
 <RANGE></RANGE>
 <FLAGS>rw</FLAGS>
 <NICK>Dithering</NICK>
 <BLURB>Selects between different dithering methods.</BLURB>
-<DEFAULT>Triangular dithering (default)</DEFAULT>
+<DEFAULT>GST_AUDIO_DITHER_TPDF</DEFAULT>
 </ARG>
 
 <ARG>
 <NAME>GstAudioConvert::noise-shaping</NAME>
-<TYPE>GstAudioConvertNoiseShaping</TYPE>
+<TYPE>GstAudioNoiseShapingMethod</TYPE>
 <RANGE></RANGE>
 <FLAGS>rw</FLAGS>
 <NICK>Noise shaping</NICK>
 <BLURB>Selects between different noise shaping methods.</BLURB>
-<DEFAULT>No noise shaping (default)</DEFAULT>
+<DEFAULT>GST_AUDIO_NOISE_SHAPING_NONE</DEFAULT>
 </ARG>
 
 <ARG>
@@ -2539,6 +2539,16 @@
 </ARG>
 
 <ARG>
+<NAME>GstSocketSrc::send-messages</NAME>
+<TYPE>gboolean</TYPE>
+<RANGE></RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Send Messages</NICK>
+<BLURB>If GstNetworkMessage events should be handled.</BLURB>
+<DEFAULT>FALSE</DEFAULT>
+</ARG>
+
+<ARG>
 <NAME>GstTimeOverlay::time-mode</NAME>
 <TYPE>GstTimeOverlayTimeLine</TYPE>
 <RANGE></RANGE>
@@ -2548,3 +2558,33 @@
 <DEFAULT>buffer-time</DEFAULT>
 </ARG>
 
+<ARG>
+<NAME>GstAlsaMidiSrc::ports</NAME>
+<TYPE>gchar*</TYPE>
+<RANGE></RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Ports</NICK>
+<BLURB>Comma separated list of sequencer ports (e.g. client:port,...).</BLURB>
+<DEFAULT>NULL</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstMultiSocketSink::send-dispatched</NAME>
+<TYPE>gboolean</TYPE>
+<RANGE></RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Send Dispatched</NICK>
+<BLURB>If GstNetworkMessageDispatched events should be pushed.</BLURB>
+<DEFAULT>FALSE</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstMultiSocketSink::send-messages</NAME>
+<TYPE>gboolean</TYPE>
+<RANGE></RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Send Messages</NICK>
+<BLURB>If GstNetworkMessage events should be pushed.</BLURB>
+<DEFAULT>FALSE</DEFAULT>
+</ARG>
+
diff --git a/docs/plugins/gst-plugins-base-plugins.hierarchy b/docs/plugins/gst-plugins-base-plugins.hierarchy
index 564f68e..95f55d5 100644
--- a/docs/plugins/gst-plugins-base-plugins.hierarchy
+++ b/docs/plugins/gst-plugins-base-plugins.hierarchy
@@ -52,6 +52,7 @@
             GstGioSrc
             GstGioStreamSrc
           GstPushSrc
+            GstAlsaMidiSrc
             GstAudioBaseSrc
               GstAudioSrc
                 GstAlsaSrc
@@ -110,6 +111,7 @@
       GstPluginFeature
         GstDeviceProviderFactory
         GstElementFactory
+        GstTracerFactory
         GstTypeFindFactory
       GstRegistry
       GstTask
diff --git a/docs/plugins/html/ch01.html b/docs/plugins/html/ch01.html
index 6651ec8..6bc663f 100644
--- a/docs/plugins/html/ch01.html
+++ b/docs/plugins/html/ch01.html
@@ -27,6 +27,9 @@
 <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-alsamidisrc.html">alsamidisrc</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"></span>
 </dt>
 <dt>
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 6749db0..268014d 100644
--- a/docs/plugins/html/gst-plugins-base-plugins-1.0.devhelp2
+++ b/docs/plugins/html/gst-plugins-base-plugins-1.0.devhelp2
@@ -3,6 +3,7 @@
   <chapters>
     <sub name="gst-plugins-base Elements" link="ch01.html">
       <sub name="adder" link="gst-plugins-base-plugins-adder.html"/>
+      <sub name="alsamidisrc" link="gst-plugins-base-plugins-alsamidisrc.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"/>
@@ -91,6 +92,8 @@
   <functions>
     <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="struct" name="struct GstAlsaMidiSrc" link="gst-plugins-base-plugins-alsamidisrc.html#GstAlsaMidiSrc-struct"/>
+    <keyword type="property" name="The “ports” property" link="gst-plugins-base-plugins-alsamidisrc.html#GstAlsaMidiSrc--ports"/>
     <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"/>
@@ -130,8 +133,6 @@
     <keyword type="signal" name="The “seek-data” signal" link="gst-plugins-base-plugins-appsrc.html#GstAppSrc-seek-data"/>
     <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="struct" name="struct GstAudioRate" link="gst-plugins-base-plugins-audiorate.html#GstAudioRate-struct"/>
@@ -223,6 +224,8 @@
     <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"/>
     <keyword type="enum" name="enum GstClientStatus" link="gst-plugins-base-plugins-multisocketsink.html#GstClientStatus"/>
+    <keyword type="property" name="The “send-dispatched” property" link="gst-plugins-base-plugins-multisocketsink.html#GstMultiSocketSink--send-dispatched"/>
+    <keyword type="property" name="The “send-messages” property" link="gst-plugins-base-plugins-multisocketsink.html#GstMultiSocketSink--send-messages"/>
     <keyword type="signal" name="The “add” signal" link="gst-plugins-base-plugins-multisocketsink.html#GstMultiSocketSink-add"/>
     <keyword type="signal" name="The “add-full” signal" link="gst-plugins-base-plugins-multisocketsink.html#GstMultiSocketSink-add-full"/>
     <keyword type="signal" name="The “client-added” signal" link="gst-plugins-base-plugins-multisocketsink.html#GstMultiSocketSink-client-added"/>
@@ -309,6 +312,7 @@
     <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="property" name="The “send-messages” property" link="gst-plugins-base-plugins-socketsrc.html#GstSocketSrc--send-messages"/>
     <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"/>
@@ -473,15 +477,6 @@
     <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"/>
diff --git a/docs/plugins/html/gst-plugins-base-plugins-adder.html b/docs/plugins/html/gst-plugins-base-plugins-adder.html
index f8c8c86..13a44c2 100644
--- a/docs/plugins/html/gst-plugins-base-plugins-adder.html
+++ b/docs/plugins/html/gst-plugins-base-plugins-adder.html
@@ -7,7 +7,7 @@
 <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-alsasink.html" title="alsasink">
+<link rel="next" href="gst-plugins-base-plugins-alsamidisrc.html" title="alsamidisrc">
 <meta name="generator" content="GTK-Doc V1.24 (XML mode)">
 <link rel="stylesheet" href="style.css" type="text/css">
 </head>
@@ -23,7 +23,7 @@
 <td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
 <td><a accesskey="u" href="ch01.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
 <td><a accesskey="p" href="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-alsasink.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
+<td><a accesskey="n" href="gst-plugins-base-plugins-alsamidisrc.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>
diff --git a/docs/plugins/html/gst-plugins-base-plugins-alsamidisrc.html b/docs/plugins/html/gst-plugins-base-plugins-alsamidisrc.html
new file mode 100644
index 0000000..1b8ecb4
--- /dev/null
+++ b/docs/plugins/html/gst-plugins-base-plugins-alsamidisrc.html
@@ -0,0 +1,160 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>alsamidisrc: 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-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">
+<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-alsamidisrc.description" class="shortcut">Description</a></span><span id="nav_hierarchy">  <span class="dim">|</span> 
+                  <a href="#gst-plugins-base-plugins-alsamidisrc.object-hierarchy" class="shortcut">Object Hierarchy</a></span><span id="nav_properties">  <span class="dim">|</span> 
+                  <a href="#gst-plugins-base-plugins-alsamidisrc.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-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-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-alsamidisrc"></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-alsamidisrc.top_of_page"></a>alsamidisrc</span></h2>
+<p>alsamidisrc</p>
+</td>
+<td class="gallery_image" valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsect1">
+<a name="gst-plugins-base-plugins-alsamidisrc.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-alsamidisrc.html#GstAlsaMidiSrc--ports" title="The “ports” property">ports</a></td>
+<td class="property_flags">Read / Write</td>
+</tr></tbody>
+</table></div>
+</div>
+<a name="GstAlsaMidiSrc"></a><div class="refsect1">
+<a name="gst-plugins-base-plugins-alsamidisrc.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-alsamidisrc.html#GstAlsaMidiSrc-struct" title="struct GstAlsaMidiSrc">GstAlsaMidiSrc</a></td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-plugins-alsamidisrc.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> GstAlsaMidiSrc
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-plugins-alsamidisrc.description"></a><h2>Description</h2>
+<div class="refsynopsisdiv">
+<h2>Synopsis</h2>
+<div class="refsect2">
+<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">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term">plugin</span></p></td>
+<td>
+            <a class="link" href="gst-plugins-base-plugins-plugin-alsa.html#plugin-alsa">alsa</a>
+          </td>
+</tr>
+<tr>
+<td><p><span class="term">author</span></p></td>
+<td>Antonio Ospite &lt;ao2@ao2.it&gt;</td>
+</tr>
+<tr>
+<td><p><span class="term">class</span></p></td>
+<td>Source</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<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">
+<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-midi-event</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-plugins-alsamidisrc.functions_details"></a><h2>Functions</h2>
+<p></p>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-plugins-alsamidisrc.other_details"></a><h2>Types and Values</h2>
+<div class="refsect2">
+<a name="GstAlsaMidiSrc-struct"></a><h3>struct GstAlsaMidiSrc</h3>
+<pre class="programlisting">struct GstAlsaMidiSrc;</pre>
+</div>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-base-plugins-alsamidisrc.property-details"></a><h2>Property Details</h2>
+<div class="refsect2">
+<a name="GstAlsaMidiSrc--ports"></a><h3>The <code class="literal">“ports”</code> property</h3>
+<pre class="programlisting">  “ports”                    <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *</pre>
+<p>Comma separated list of sequencer ports (e.g. client:port,...).</p>
+<p>Flags: Read / Write</p>
+<p>Default value: NULL</p>
+</div>
+</div>
+</div>
+<div class="footer">
+<hr>Generated by GTK-Doc V1.24</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/plugins/html/gst-plugins-base-plugins-alsasink.html b/docs/plugins/html/gst-plugins-base-plugins-alsasink.html
index 76b9ac8..a20ecc2 100644
--- a/docs/plugins/html/gst-plugins-base-plugins-alsasink.html
+++ b/docs/plugins/html/gst-plugins-base-plugins-alsasink.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="up" href="ch01.html" title="gst-plugins-base Elements">
-<link rel="prev" href="gst-plugins-base-plugins-adder.html" title="adder">
+<link rel="prev" href="gst-plugins-base-plugins-alsamidisrc.html" title="alsamidisrc">
 <link rel="next" href="gst-plugins-base-plugins-alsasrc.html" title="alsasrc">
 <meta name="generator" content="GTK-Doc V1.24 (XML mode)">
 <link rel="stylesheet" href="style.css" type="text/css">
@@ -21,7 +21,7 @@
 </td>
 <td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
 <td><a accesskey="u" href="ch01.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
-<td><a accesskey="p" href="gst-plugins-base-plugins-adder.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
+<td><a accesskey="p" href="gst-plugins-base-plugins-alsamidisrc.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">
@@ -93,7 +93,7 @@
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="id-1.2.3.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">
@@ -119,7 +119,7 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="id-1.2.3.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">
diff --git a/docs/plugins/html/gst-plugins-base-plugins-alsasrc.html b/docs/plugins/html/gst-plugins-base-plugins-alsasrc.html
index 0fea3c9..7dead7c 100644
--- a/docs/plugins/html/gst-plugins-base-plugins-alsasrc.html
+++ b/docs/plugins/html/gst-plugins-base-plugins-alsasrc.html
@@ -94,7 +94,7 @@
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="id-1.2.4.7.2.1"></a><h3>Element Information</h3>
+<a name="id-1.2.5.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.4.7.2.2"></a><h3>Element Pads</h3>
+<a name="id-1.2.5.7.2.2"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
diff --git a/docs/plugins/html/gst-plugins-base-plugins-appsink.html b/docs/plugins/html/gst-plugins-base-plugins-appsink.html
index 33b8fb6..010b920 100644
--- a/docs/plugins/html/gst-plugins-base-plugins-appsink.html
+++ b/docs/plugins/html/gst-plugins-base-plugins-appsink.html
@@ -152,7 +152,7 @@
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="id-1.2.5.9.6.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">
@@ -178,7 +178,7 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="id-1.2.5.9.6.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">
diff --git a/docs/plugins/html/gst-plugins-base-plugins-appsrc.html b/docs/plugins/html/gst-plugins-base-plugins-appsrc.html
index 75ec3ef..7218913 100644
--- a/docs/plugins/html/gst-plugins-base-plugins-appsrc.html
+++ b/docs/plugins/html/gst-plugins-base-plugins-appsrc.html
@@ -190,7 +190,7 @@
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="id-1.2.6.9.6.1"></a><h3>Element Information</h3>
+<a name="id-1.2.7.9.6.1"></a><h3>Element Information</h3>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
@@ -216,7 +216,7 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="id-1.2.6.9.6.2"></a><h3>Element Pads</h3>
+<a name="id-1.2.7.9.6.2"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
diff --git a/docs/plugins/html/gst-plugins-base-plugins-audioconvert.html b/docs/plugins/html/gst-plugins-base-plugins-audioconvert.html
index 76859aa..02c0248 100644
--- a/docs/plugins/html/gst-plugins-base-plugins-audioconvert.html
+++ b/docs/plugins/html/gst-plugins-base-plugins-audioconvert.html
@@ -43,12 +43,12 @@
 </colgroup>
 <tbody>
 <tr>
-<td class="property_type"><a class="link" href="gst-plugins-base-plugins-audioconvert.html#GstAudioConvertDithering" title="enum GstAudioConvertDithering"><span class="type">GstAudioConvertDithering</span></a></td>
+<td class="property_type"><span class="type">GstAudioDitherMethod</span></td>
 <td class="property_name"><a class="link" href="gst-plugins-base-plugins-audioconvert.html#GstAudioConvert--dithering" title="The “dithering” property">dithering</a></td>
 <td class="property_flags">Read / Write</td>
 </tr>
 <tr>
-<td class="property_type"><a class="link" href="gst-plugins-base-plugins-audioconvert.html#GstAudioConvertNoiseShaping" title="enum GstAudioConvertNoiseShaping"><span class="type">GstAudioConvertNoiseShaping</span></a></td>
+<td class="property_type"><span class="type">GstAudioNoiseShapingMethod</span></td>
 <td class="property_name"><a class="link" href="gst-plugins-base-plugins-audioconvert.html#GstAudioConvert--noise-shaping" title="The “noise-shaping” property">noise-shaping</a></td>
 <td class="property_flags">Read / Write</td>
 </tr>
@@ -62,20 +62,10 @@
 <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-audioconvert.html#GstAudioConvert-struct" title="struct GstAudioConvert">GstAudioConvert</a></td>
-</tr>
-<tr>
-<td class="datatype_keyword">enum</td>
-<td class="function_name"><a class="link" href="gst-plugins-base-plugins-audioconvert.html#GstAudioConvertDithering" title="enum GstAudioConvertDithering">GstAudioConvertDithering</a></td>
-</tr>
-<tr>
-<td class="datatype_keyword">enum</td>
-<td class="function_name"><a class="link" href="gst-plugins-base-plugins-audioconvert.html#GstAudioConvertNoiseShaping" title="enum GstAudioConvertNoiseShaping">GstAudioConvertNoiseShaping</a></td>
-</tr>
-</tbody>
+</tr></tbody>
 </table></div>
 </div>
 <div class="refsect1">
@@ -95,7 +85,7 @@
 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>
+<a name="id-1.2.8.7.3"></a><h3>Example launch line</h3>
 <div class="informalexample">
   <table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
     <tbody>
@@ -126,7 +116,7 @@
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="id-1.2.7.7.4.1"></a><h3>Element Information</h3>
+<a name="id-1.2.8.7.4.1"></a><h3>Element Information</h3>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
@@ -152,7 +142,7 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="id-1.2.7.7.4.2"></a><h3>Element Pads</h3>
+<a name="id-1.2.8.7.4.2"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
@@ -215,120 +205,23 @@
 <pre class="programlisting">struct GstAudioConvert;</pre>
 <p>The audioconvert object structure.</p>
 </div>
-<hr>
-<div class="refsect2">
-<a name="GstAudioConvertDithering"></a><h3>enum GstAudioConvertDithering</h3>
-<p>Set of available dithering methods when converting audio.</p>
-<div class="refsect3">
-<a name="id-1.2.7.9.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="DITHER-NONE:CAPS"></a>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="DITHER-RPDF:CAPS"></a>DITHER_RPDF</p></td>
-<td class="enum_member_description">
-<p>Rectangular dithering</p>
-</td>
-<td class="enum_member_annotations"> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="DITHER-TPDF:CAPS"></a>DITHER_TPDF</p></td>
-<td class="enum_member_description">
-<p>Triangular dithering (default)</p>
-</td>
-<td class="enum_member_annotations"> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="DITHER-TPDF-HF:CAPS"></a>DITHER_TPDF_HF</p></td>
-<td class="enum_member_description">
-<p>High frequency triangular dithering</p>
-</td>
-<td class="enum_member_annotations"> </td>
-</tr>
-</tbody>
-</table></div>
-</div>
-</div>
-<hr>
-<div class="refsect2">
-<a name="GstAudioConvertNoiseShaping"></a><h3>enum GstAudioConvertNoiseShaping</h3>
-<p>Set of available noise shaping methods</p>
-<div class="refsect3">
-<a name="id-1.2.7.9.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="NOISE-SHAPING-NONE:CAPS"></a>NOISE_SHAPING_NONE</p></td>
-<td class="enum_member_description">
-<p>No noise shaping (default)</p>
-</td>
-<td class="enum_member_annotations"> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="NOISE-SHAPING-ERROR-FEEDBACK:CAPS"></a>NOISE_SHAPING_ERROR_FEEDBACK</p></td>
-<td class="enum_member_description">
-<p>Error feedback</p>
-</td>
-<td class="enum_member_annotations"> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="NOISE-SHAPING-SIMPLE:CAPS"></a>NOISE_SHAPING_SIMPLE</p></td>
-<td class="enum_member_description">
-<p>Simple 2-pole noise shaping</p>
-</td>
-<td class="enum_member_annotations"> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="NOISE-SHAPING-MEDIUM:CAPS"></a>NOISE_SHAPING_MEDIUM</p></td>
-<td class="enum_member_description">
-<p>Medium 5-pole noise shaping</p>
-</td>
-<td class="enum_member_annotations"> </td>
-</tr>
-<tr>
-<td class="enum_member_name"><p><a name="NOISE-SHAPING-HIGH:CAPS"></a>NOISE_SHAPING_HIGH</p></td>
-<td class="enum_member_description">
-<p>High 8-pole noise shaping</p>
-</td>
-<td class="enum_member_annotations"> </td>
-</tr>
-</tbody>
-</table></div>
-</div>
-</div>
 </div>
 <div class="refsect1">
 <a name="gst-plugins-base-plugins-audioconvert.property-details"></a><h2>Property Details</h2>
 <div class="refsect2">
 <a name="GstAudioConvert--dithering"></a><h3>The <code class="literal">“dithering”</code> property</h3>
-<pre class="programlisting">  “dithering”                <a class="link" href="gst-plugins-base-plugins-audioconvert.html#GstAudioConvertDithering" title="enum GstAudioConvertDithering"><span class="type">GstAudioConvertDithering</span></a></pre>
+<pre class="programlisting">  “dithering”                <span class="type">GstAudioDitherMethod</span></pre>
 <p>Selects between different dithering methods.</p>
 <p>Flags: Read / Write</p>
-<p>Default value: Triangular dithering (default)</p>
+<p>Default value: GST_AUDIO_DITHER_TPDF</p>
 </div>
 <hr>
 <div class="refsect2">
 <a name="GstAudioConvert--noise-shaping"></a><h3>The <code class="literal">“noise-shaping”</code> property</h3>
-<pre class="programlisting">  “noise-shaping”            <a class="link" href="gst-plugins-base-plugins-audioconvert.html#GstAudioConvertNoiseShaping" title="enum GstAudioConvertNoiseShaping"><span class="type">GstAudioConvertNoiseShaping</span></a></pre>
+<pre class="programlisting">  “noise-shaping”            <span class="type">GstAudioNoiseShapingMethod</span></pre>
 <p>Selects between different noise shaping methods.</p>
 <p>Flags: Read / Write</p>
-<p>Default value: No noise shaping (default)</p>
+<p>Default value: GST_AUDIO_NOISE_SHAPING_NONE</p>
 </div>
 </div>
 </div>
diff --git a/docs/plugins/html/gst-plugins-base-plugins-audiorate.html b/docs/plugins/html/gst-plugins-base-plugins-audiorate.html
index 872430d..07392ef 100644
--- a/docs/plugins/html/gst-plugins-base-plugins-audiorate.html
+++ b/docs/plugins/html/gst-plugins-base-plugins-audiorate.html
@@ -127,7 +127,7 @@
 that the incoming data is then simply shifted (by less than the indicated
 tolerance) to a perfect time.</p>
 <div class="refsect2">
-<a name="id-1.2.8.7.7"></a><h3>Example pipelines</h3>
+<a name="id-1.2.9.7.7"></a><h3>Example pipelines</h3>
 <div class="informalexample">
   <table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
     <tbody>
@@ -158,7 +158,7 @@
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="id-1.2.8.7.8.1"></a><h3>Element Information</h3>
+<a name="id-1.2.9.7.8.1"></a><h3>Element Information</h3>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
@@ -184,7 +184,7 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="id-1.2.8.7.8.2"></a><h3>Element Pads</h3>
+<a name="id-1.2.9.7.8.2"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
diff --git a/docs/plugins/html/gst-plugins-base-plugins-audioresample.html b/docs/plugins/html/gst-plugins-base-plugins-audioresample.html
index 45111ab..6731c10 100644
--- a/docs/plugins/html/gst-plugins-base-plugins-audioresample.html
+++ b/docs/plugins/html/gst-plugins-base-plugins-audioresample.html
@@ -95,7 +95,7 @@
 to initialize when the element is created. A third mode exists, which uses the full table
 unless said table would become too large, in which case the interpolated one is used instead.</p>
 <div class="refsect2">
-<a name="id-1.2.9.7.4"></a><h3>Example launch line</h3>
+<a name="id-1.2.10.7.4"></a><h3>Example launch line</h3>
 <div class="informalexample">
   <table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
     <tbody>
@@ -113,7 +113,7 @@
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="id-1.2.9.7.5.1"></a><h3>Element Information</h3>
+<a name="id-1.2.10.7.5.1"></a><h3>Element Information</h3>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
@@ -139,7 +139,7 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="id-1.2.9.7.5.2"></a><h3>Element Pads</h3>
+<a name="id-1.2.10.7.5.2"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
diff --git a/docs/plugins/html/gst-plugins-base-plugins-audiotestsrc.html b/docs/plugins/html/gst-plugins-base-plugins-audiotestsrc.html
index c7e64b0..f9a530b 100644
--- a/docs/plugins/html/gst-plugins-base-plugins-audiotestsrc.html
+++ b/docs/plugins/html/gst-plugins-base-plugins-audiotestsrc.html
@@ -119,7 +119,7 @@
 <p>AudioTestSrc can be used to generate basic audio signals. It support several
 different waveforms and allows to set the base frequency and volume.</p>
 <div class="refsect2">
-<a name="id-1.2.10.7.3"></a><h3>Example launch line</h3>
+<a name="id-1.2.11.7.3"></a><h3>Example launch line</h3>
 <div class="informalexample">
   <table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
     <tbody>
@@ -149,7 +149,7 @@
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="id-1.2.10.7.4.1"></a><h3>Element Information</h3>
+<a name="id-1.2.11.7.4.1"></a><h3>Element Information</h3>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
@@ -175,7 +175,7 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="id-1.2.10.7.4.2"></a><h3>Element Pads</h3>
+<a name="id-1.2.11.7.4.2"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
@@ -196,7 +196,7 @@
 </tr>
 <tr>
 <td><p><span class="term">details</span></p></td>
-<td>audio/x-raw, format=(string){ S16LE, S32LE, F32LE, F64LE }, layout=(string)interleaved, rate=(int)[ 1, 2147483647 ], channels=(int)[ 1, 2 ]</td>
+<td>audio/x-raw, format=(string){ S16LE, S16BE, U16LE, U16BE, S24_32LE, S24_32BE, U24_32LE, U24_32BE, S32LE, S32BE, U32LE, U32BE, S24LE, S24BE, U24LE, U24BE, S20LE, S20BE, U20LE, U20BE, S18LE, S18BE, U18LE, U18BE, F32LE, F32BE, F64LE, F64BE, S8, U8 }, layout=(string)interleaved, rate=(int)[ 1, 2147483647 ], channels=(int)[ 1, 2147483647 ]</td>
 </tr>
 </tbody>
 </table></div>
@@ -219,7 +219,7 @@
 <a name="GstAudioTestSrcWave"></a><h3>enum GstAudioTestSrcWave</h3>
 <p>Different types of supported sound waves.</p>
 <div class="refsect3">
-<a name="id-1.2.10.9.3.4"></a><h4>Members</h4>
+<a name="id-1.2.11.9.3.4"></a><h4>Members</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="300px" class="enum_members_name">
@@ -344,9 +344,9 @@
 <div class="refsect2">
 <a name="GstAudioTestSrc--freq"></a><h3>The <code class="literal">“freq”</code> property</h3>
 <pre class="programlisting">  “freq”                     <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gdouble"><span class="type">gdouble</span></a></pre>
-<p>Frequency of test signal.</p>
+<p>Frequency of test signal. The sample rate needs to be at least 4 times higher.</p>
 <p>Flags: Read / Write</p>
-<p>Allowed values: [0,20000]</p>
+<p>Allowed values: [0,5.36871e+08]</p>
 <p>Default value: 440</p>
 </div>
 <hr>
diff --git a/docs/plugins/html/gst-plugins-base-plugins-cdparanoiasrc.html b/docs/plugins/html/gst-plugins-base-plugins-cdparanoiasrc.html
index a531435..c36f493 100644
--- a/docs/plugins/html/gst-plugins-base-plugins-cdparanoiasrc.html
+++ b/docs/plugins/html/gst-plugins-base-plugins-cdparanoiasrc.html
@@ -131,7 +131,7 @@
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="id-1.2.11.9.2.1"></a><h3>Element Information</h3>
+<a name="id-1.2.12.9.2.1"></a><h3>Element Information</h3>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
@@ -157,7 +157,7 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="id-1.2.11.9.2.2"></a><h3>Element Pads</h3>
+<a name="id-1.2.12.9.2.2"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
diff --git a/docs/plugins/html/gst-plugins-base-plugins-clockoverlay.html b/docs/plugins/html/gst-plugins-base-plugins-clockoverlay.html
index 55769ad..336c46c 100644
--- a/docs/plugins/html/gst-plugins-base-plugins-clockoverlay.html
+++ b/docs/plugins/html/gst-plugins-base-plugins-clockoverlay.html
@@ -77,7 +77,7 @@
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="id-1.2.12.7.2.1"></a><h3>Element Information</h3>
+<a name="id-1.2.13.7.2.1"></a><h3>Element Information</h3>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
@@ -103,7 +103,7 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="id-1.2.12.7.2.2"></a><h3>Element Pads</h3>
+<a name="id-1.2.13.7.2.2"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
diff --git a/docs/plugins/html/gst-plugins-base-plugins-decodebin.html b/docs/plugins/html/gst-plugins-base-plugins-decodebin.html
index 7407126..cf1a07a 100644
--- a/docs/plugins/html/gst-plugins-base-plugins-decodebin.html
+++ b/docs/plugins/html/gst-plugins-base-plugins-decodebin.html
@@ -198,7 +198,7 @@
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="id-1.2.13.9.4.1"></a><h3>Element Information</h3>
+<a name="id-1.2.14.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.4.2"></a><h3>Element Pads</h3>
+<a name="id-1.2.14.9.4.2"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
@@ -404,7 +404,7 @@
   connected in.
 </div>
 <div class="refsect3">
-<a name="id-1.2.13.13.2.6"></a><h4>Parameters</h4>
+<a name="id-1.2.14.13.2.6"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -436,7 +436,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.13.13.2.7"></a><h4>Returns</h4>
+<a name="id-1.2.14.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 decodebin 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
@@ -468,7 +468,7 @@
   signal, they will never be invoked!
 </div>
 <div class="refsect3">
-<a name="id-1.2.13.13.3.8"></a><h4>Parameters</h4>
+<a name="id-1.2.14.13.3.8"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -500,7 +500,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.13.13.3.9"></a><h4>Returns</h4>
+<a name="id-1.2.14.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>
@@ -521,7 +521,7 @@
 be used to tell the element about the downstream supported caps
 for example.</p>
 <div class="refsect3">
-<a name="id-1.2.13.13.4.5"></a><h4>Parameters</h4>
+<a name="id-1.2.14.13.4.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -558,7 +558,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.13.13.4.6"></a><h4>Returns</h4>
+<a name="id-1.2.14.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>
 </div>
 <p>Flags: <a href="https://developer.gnome.org/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS">Run Last</a></p>
@@ -595,7 +595,7 @@
   registered next (again, if any) can override that decision.
 </div>
 <div class="refsect3">
-<a name="id-1.2.13.13.5.10"></a><h4>Parameters</h4>
+<a name="id-1.2.14.13.5.10"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -632,7 +632,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.13.13.5.11"></a><h4>Returns</h4>
+<a name="id-1.2.14.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>
@@ -665,7 +665,7 @@
   signal, they will never be invoked!
 </div>
 <div class="refsect3">
-<a name="id-1.2.13.13.6.7"></a><h4>Parameters</h4>
+<a name="id-1.2.14.13.6.7"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -702,7 +702,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.13.13.6.8"></a><h4>Returns</h4>
+<a name="id-1.2.14.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>
 </div>
 <p>Flags: <a href="https://developer.gnome.org/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS">Run Last</a></p>
@@ -715,7 +715,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 once decodebin has finished decoding all the data.</p>
 <div class="refsect3">
-<a name="id-1.2.13.13.7.5"></a><h4>Parameters</h4>
+<a name="id-1.2.14.13.7.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -749,7 +749,7 @@
 <p>This signal is emitted when a pad for which there is no further possible
 decoding is added to the decodebin.</p>
 <div class="refsect3">
-<a name="id-1.2.13.13.8.5"></a><h4>Parameters</h4>
+<a name="id-1.2.14.13.8.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
diff --git a/docs/plugins/html/gst-plugins-base-plugins-encodebin.html b/docs/plugins/html/gst-plugins-base-plugins-encodebin.html
index 2393f24..19d5a34 100644
--- a/docs/plugins/html/gst-plugins-base-plugins-encodebin.html
+++ b/docs/plugins/html/gst-plugins-base-plugins-encodebin.html
@@ -146,7 +146,7 @@
 provide it raw or pre-encoded streams of data in input and have your
 encoded/muxed/converted stream in output.</p>
 <div class="refsect2">
-<a name="id-1.2.14.9.4"></a><h3>Features</h3>
+<a name="id-1.2.15.9.4"></a><h3>Features</h3>
 <div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
 <li class="listitem">
 Automatic encoder and muxer selection based on elements available on the
@@ -209,7 +209,7 @@
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="id-1.2.14.9.5.1"></a><h3>Element Information</h3>
+<a name="id-1.2.15.9.5.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.14.9.5.2"></a><h3>Element Pads</h3>
+<a name="id-1.2.15.9.5.2"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
@@ -416,7 +416,7 @@
  as input. You must release the pad with
 <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html#gst-element-release-request-pad"><code class="function">gst_element_release_request_pad()</code></a> when you are done with it.</p>
 <div class="refsect3">
-<a name="id-1.2.14.13.2.5"></a><h4>Parameters</h4>
+<a name="id-1.2.15.13.2.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -443,7 +443,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.14.13.2.6"></a><h4>Returns</h4>
+<a name="id-1.2.15.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>
 </div>
@@ -461,7 +461,7 @@
 . You must release the pad with
 <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html#gst-element-release-request-pad"><code class="function">gst_element_release_request_pad()</code></a> when you are done with it.</p>
 <div class="refsect3">
-<a name="id-1.2.14.13.3.5"></a><h4>Parameters</h4>
+<a name="id-1.2.15.13.3.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -488,7 +488,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.14.13.3.6"></a><h4>Returns</h4>
+<a name="id-1.2.15.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>
 </div>
diff --git a/docs/plugins/html/gst-plugins-base-plugins-giosink.html b/docs/plugins/html/gst-plugins-base-plugins-giosink.html
index d49d247..ac04787 100644
--- a/docs/plugins/html/gst-plugins-base-plugins-giosink.html
+++ b/docs/plugins/html/gst-plugins-base-plugins-giosink.html
@@ -110,7 +110,7 @@
 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.15.8.5"></a><h3>Example pipelines</h3>
+<a name="id-1.2.16.8.5"></a><h3>Example pipelines</h3>
 <div class="informalexample">
   <table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
     <tbody>
@@ -151,7 +151,7 @@
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="id-1.2.15.8.6.1"></a><h3>Element Information</h3>
+<a name="id-1.2.16.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.15.8.6.2"></a><h3>Element Pads</h3>
+<a name="id-1.2.16.8.6.2"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
diff --git a/docs/plugins/html/gst-plugins-base-plugins-giosrc.html b/docs/plugins/html/gst-plugins-base-plugins-giosrc.html
index 9dc3d0b..713ec19 100644
--- a/docs/plugins/html/gst-plugins-base-plugins-giosrc.html
+++ b/docs/plugins/html/gst-plugins-base-plugins-giosrc.html
@@ -106,7 +106,7 @@
 message was received and gst_bus_set_flushing(bus, FALSE) after the
 mounting was successful.</p>
 <div class="refsect2">
-<a name="id-1.2.16.8.4"></a><h3>Example launch lines</h3>
+<a name="id-1.2.17.8.4"></a><h3>Example launch lines</h3>
 <div class="informalexample">
   <table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
     <tbody>
@@ -148,7 +148,7 @@
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="id-1.2.16.8.5.1"></a><h3>Element Information</h3>
+<a name="id-1.2.17.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.16.8.5.2"></a><h3>Element Pads</h3>
+<a name="id-1.2.17.8.5.2"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
diff --git a/docs/plugins/html/gst-plugins-base-plugins-giostreamsink.html b/docs/plugins/html/gst-plugins-base-plugins-giostreamsink.html
index 40544e0..2ec2477 100644
--- a/docs/plugins/html/gst-plugins-base-plugins-giostreamsink.html
+++ b/docs/plugins/html/gst-plugins-base-plugins-giostreamsink.html
@@ -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.17.7.4"></a><h3>Example code</h3>
+<a name="id-1.2.18.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.17.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">
@@ -170,7 +170,7 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="id-1.2.17.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">
diff --git a/docs/plugins/html/gst-plugins-base-plugins-giostreamsrc.html b/docs/plugins/html/gst-plugins-base-plugins-giostreamsrc.html
index 9f716cc..3465049 100644
--- a/docs/plugins/html/gst-plugins-base-plugins-giostreamsrc.html
+++ b/docs/plugins/html/gst-plugins-base-plugins-giostreamsrc.html
@@ -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.18.7.4"></a><h3>Example code</h3>
+<a name="id-1.2.19.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.18.7.5.1"></a><h3>Element Information</h3>
+<a name="id-1.2.19.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.18.7.5.2"></a><h3>Element Pads</h3>
+<a name="id-1.2.19.7.5.2"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
diff --git a/docs/plugins/html/gst-plugins-base-plugins-multifdsink.html b/docs/plugins/html/gst-plugins-base-plugins-multifdsink.html
index 06048c3..d2c693f 100644
--- a/docs/plugins/html/gst-plugins-base-plugins-multifdsink.html
+++ b/docs/plugins/html/gst-plugins-base-plugins-multifdsink.html
@@ -209,7 +209,7 @@
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="id-1.2.19.8.13.1"></a><h3>Element Information</h3>
+<a name="id-1.2.20.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.19.8.13.2"></a><h3>Element Pads</h3>
+<a name="id-1.2.20.8.13.2"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
@@ -280,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.19.10.3.4"></a><h4>Members</h4>
+<a name="id-1.2.20.10.3.4"></a><h4>Members</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="300px" class="enum_members_name">
@@ -326,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.19.10.4.4"></a><h4>Members</h4>
+<a name="id-1.2.20.10.4.4"></a><h4>Members</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="300px" class="enum_members_name">
@@ -389,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.19.10.5.4"></a><h4>Members</h4>
+<a name="id-1.2.20.10.5.4"></a><h4>Members</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="300px" class="enum_members_name">
@@ -471,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.19.12.2.5"></a><h4>Parameters</h4>
+<a name="id-1.2.20.12.2.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -514,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.19.12.3.5"></a><h4>Parameters</h4>
+<a name="id-1.2.20.12.3.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -584,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.19.12.4.5"></a><h4>Parameters</h4>
+<a name="id-1.2.20.12.4.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -630,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.19.12.5.6"></a><h4>Parameters</h4>
+<a name="id-1.2.20.12.5.6"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -676,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.19.12.6.6"></a><h4>Parameters</h4>
+<a name="id-1.2.20.12.6.6"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -720,7 +720,7 @@
 . This function returns a GValueArray to ease
 automatic wrapping for bindings.</p>
 <div class="refsect3">
-<a name="id-1.2.19.12.7.5"></a><h4>Parameters</h4>
+<a name="id-1.2.20.12.7.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -747,7 +747,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.19.12.7.6"></a><h4>Returns</h4>
+<a name="id-1.2.20.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
@@ -767,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.19.12.8.5"></a><h4>Parameters</h4>
+<a name="id-1.2.20.12.8.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -805,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.19.12.9.5"></a><h4>Parameters</h4>
+<a name="id-1.2.20.12.9.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
diff --git a/docs/plugins/html/gst-plugins-base-plugins-multisocketsink.html b/docs/plugins/html/gst-plugins-base-plugins-multisocketsink.html
index 24f9324..aec71b2 100644
--- a/docs/plugins/html/gst-plugins-base-plugins-multisocketsink.html
+++ b/docs/plugins/html/gst-plugins-base-plugins-multisocketsink.html
@@ -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-multisocketsink.description" class="shortcut">Description</a></span><span id="nav_hierarchy">  <span class="dim">|</span> 
-                  <a href="#gst-plugins-base-plugins-multisocketsink.object-hierarchy" class="shortcut">Object Hierarchy</a></span><span id="nav_signals">  <span class="dim">|</span> 
+                  <a href="#gst-plugins-base-plugins-multisocketsink.object-hierarchy" class="shortcut">Object Hierarchy</a></span><span id="nav_properties">  <span class="dim">|</span> 
+                  <a href="#gst-plugins-base-plugins-multisocketsink.properties" class="shortcut">Properties</a></span><span id="nav_signals">  <span class="dim">|</span> 
                   <a href="#gst-plugins-base-plugins-multisocketsink.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>
@@ -34,6 +35,28 @@
 <td class="gallery_image" valign="top" align="right"></td>
 </tr></table></div>
 <div class="refsect1">
+<a name="gst-plugins-base-plugins-multisocketsink.properties"></a><h2>Properties</h2>
+<div class="informaltable"><table border="0">
+<colgroup>
+<col width="150px" class="properties_type">
+<col width="300px" class="properties_name">
+<col width="200px" class="properties_flags">
+</colgroup>
+<tbody>
+<tr>
+<td class="property_type"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a></td>
+<td class="property_name"><a class="link" href="gst-plugins-base-plugins-multisocketsink.html#GstMultiSocketSink--send-dispatched" title="The “send-dispatched” property">send-dispatched</a></td>
+<td class="property_flags">Read / Write</td>
+</tr>
+<tr>
+<td class="property_type"><a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a></td>
+<td class="property_name"><a class="link" href="gst-plugins-base-plugins-multisocketsink.html#GstMultiSocketSink--send-messages" title="The “send-messages” property">send-messages</a></td>
+<td class="property_flags">Read / Write</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect1">
 <a name="gst-plugins-base-plugins-multisocketsink.signals"></a><h2>Signals</h2>
 <div class="informaltable"><table border="0">
 <colgroup>
@@ -192,7 +215,7 @@
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="id-1.2.20.7.12.1"></a><h3>Element Information</h3>
+<a name="id-1.2.21.8.12.1"></a><h3>Element Information</h3>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
@@ -218,7 +241,7 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="id-1.2.20.7.12.2"></a><h3>Element Pads</h3>
+<a name="id-1.2.21.8.12.2"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
@@ -263,7 +286,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.9.3.4"></a><h4>Members</h4>
+<a name="id-1.2.21.10.3.4"></a><h4>Members</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="300px" class="enum_members_name">
@@ -309,7 +332,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.9.4.4"></a><h4>Members</h4>
+<a name="id-1.2.21.10.4.4"></a><h4>Members</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="300px" class="enum_members_name">
@@ -372,7 +395,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.9.5.4"></a><h4>Members</h4>
+<a name="id-1.2.21.10.5.4"></a><h4>Members</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="300px" class="enum_members_name">
@@ -435,6 +458,36 @@
 </div>
 </div>
 <div class="refsect1">
+<a name="gst-plugins-base-plugins-multisocketsink.property-details"></a><h2>Property Details</h2>
+<div class="refsect2">
+<a name="GstMultiSocketSink--send-dispatched"></a><h3>The <code class="literal">“send-dispatched”</code> property</h3>
+<pre class="programlisting">  “send-dispatched”          <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a></pre>
+<p>Sends a GstNetworkMessageDispatched event upstream whenever a buffer
+is sent to a client.
+The event is a CUSTOM event name GstNetworkMessageDispatched and
+contains:</p>
+<p>  "object"  G_TYPE_OBJECT     : the object identifying the client
+  "buffer"  GST_TYPE_BUFFER   : the buffer sent to the client</p>
+<p>Flags: Read / Write</p>
+<p>Default value: FALSE</p>
+<p class="since">Since: 1.8.0</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="GstMultiSocketSink--send-messages"></a><h3>The <code class="literal">“send-messages”</code> property</h3>
+<pre class="programlisting">  “send-messages”            <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a></pre>
+<p>Sends a GstNetworkMessage event upstream whenever a buffer
+is received from a client.
+The event is a CUSTOM event name GstNetworkMessage and contains:</p>
+<p>  "object"  G_TYPE_OBJECT     : the object identifying the client
+  "buffer"  GST_TYPE_BUFFER   : the buffer with data received from the
+                                client</p>
+<p>Flags: Read / Write</p>
+<p>Default value: FALSE</p>
+<p class="since">Since: 1.8.0</p>
+</div>
+</div>
+<div class="refsect1">
 <a name="gst-plugins-base-plugins-multisocketsink.signal-details"></a><h2>Signal Details</h2>
 <div class="refsect2">
 <a name="GstMultiSocketSink-add"></a><h3>The <code class="literal">“add”</code> signal</h3>
@@ -444,7 +497,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.20.10.2.5"></a><h4>Parameters</h4>
+<a name="id-1.2.21.12.2.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -487,7 +540,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.20.10.3.5"></a><h4>Parameters</h4>
+<a name="id-1.2.21.12.3.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -557,7 +610,7 @@
 be emitted from the streaming thread so application should be prepared
 for that.</p>
 <div class="refsect3">
-<a name="id-1.2.20.10.4.5"></a><h4>Parameters</h4>
+<a name="id-1.2.21.12.4.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -603,7 +656,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.20.10.5.6"></a><h4>Parameters</h4>
+<a name="id-1.2.21.12.5.6"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -654,7 +707,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.10.6.6"></a><h4>Parameters</h4>
+<a name="id-1.2.21.12.6.6"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -692,7 +745,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.20.10.7.5"></a><h4>Parameters</h4>
+<a name="id-1.2.21.12.7.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -719,7 +772,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.20.10.7.6"></a><h4>Returns</h4>
+<a name="id-1.2.21.12.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
@@ -738,7 +791,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.20.10.8.5"></a><h4>Parameters</h4>
+<a name="id-1.2.21.12.8.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -776,7 +829,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.20.10.9.5"></a><h4>Parameters</h4>
+<a name="id-1.2.21.12.9.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
diff --git a/docs/plugins/html/gst-plugins-base-plugins-oggaviparse.html b/docs/plugins/html/gst-plugins-base-plugins-oggaviparse.html
index 3e601d7..3679e4f 100644
--- a/docs/plugins/html/gst-plugins-base-plugins-oggaviparse.html
+++ b/docs/plugins/html/gst-plugins-base-plugins-oggaviparse.html
@@ -36,7 +36,7 @@
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="id-1.2.21.3.2.1"></a><h3>Element Information</h3>
+<a name="id-1.2.22.3.2.1"></a><h3>Element Information</h3>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
@@ -62,7 +62,7 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="id-1.2.21.3.2.2"></a><h3>Element Pads</h3>
+<a name="id-1.2.22.3.2.2"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
diff --git a/docs/plugins/html/gst-plugins-base-plugins-oggdemux.html b/docs/plugins/html/gst-plugins-base-plugins-oggdemux.html
index c9d5dd0..6def7c3 100644
--- a/docs/plugins/html/gst-plugins-base-plugins-oggdemux.html
+++ b/docs/plugins/html/gst-plugins-base-plugins-oggdemux.html
@@ -59,7 +59,7 @@
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="id-1.2.22.6.2.1"></a><h3>Element Information</h3>
+<a name="id-1.2.23.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.22.6.2.2"></a><h3>Element Pads</h3>
+<a name="id-1.2.23.6.2.2"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
diff --git a/docs/plugins/html/gst-plugins-base-plugins-oggmux.html b/docs/plugins/html/gst-plugins-base-plugins-oggmux.html
index cd26969..8f0c297 100644
--- a/docs/plugins/html/gst-plugins-base-plugins-oggmux.html
+++ b/docs/plugins/html/gst-plugins-base-plugins-oggmux.html
@@ -99,7 +99,7 @@
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="id-1.2.23.8.2.1"></a><h3>Element Information</h3>
+<a name="id-1.2.24.8.2.1"></a><h3>Element Information</h3>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
@@ -125,7 +125,7 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="id-1.2.23.8.2.2"></a><h3>Element Pads</h3>
+<a name="id-1.2.24.8.2.2"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
diff --git a/docs/plugins/html/gst-plugins-base-plugins-oggparse.html b/docs/plugins/html/gst-plugins-base-plugins-oggparse.html
index 236197a..d245be1 100644
--- a/docs/plugins/html/gst-plugins-base-plugins-oggparse.html
+++ b/docs/plugins/html/gst-plugins-base-plugins-oggparse.html
@@ -36,7 +36,7 @@
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="id-1.2.24.3.2.1"></a><h3>Element Information</h3>
+<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">
@@ -62,7 +62,7 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="id-1.2.24.3.2.2"></a><h3>Element Pads</h3>
+<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">
diff --git a/docs/plugins/html/gst-plugins-base-plugins-ogmaudioparse.html b/docs/plugins/html/gst-plugins-base-plugins-ogmaudioparse.html
index 23d8f31..22ddfec 100644
--- a/docs/plugins/html/gst-plugins-base-plugins-ogmaudioparse.html
+++ b/docs/plugins/html/gst-plugins-base-plugins-ogmaudioparse.html
@@ -36,7 +36,7 @@
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="id-1.2.25.3.2.1"></a><h3>Element Information</h3>
+<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">
@@ -62,7 +62,7 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="id-1.2.25.3.2.2"></a><h3>Element Pads</h3>
+<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">
diff --git a/docs/plugins/html/gst-plugins-base-plugins-ogmtextparse.html b/docs/plugins/html/gst-plugins-base-plugins-ogmtextparse.html
index cdce3ad..2c70ca5 100644
--- a/docs/plugins/html/gst-plugins-base-plugins-ogmtextparse.html
+++ b/docs/plugins/html/gst-plugins-base-plugins-ogmtextparse.html
@@ -36,7 +36,7 @@
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="id-1.2.26.3.2.1"></a><h3>Element Information</h3>
+<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">
@@ -62,7 +62,7 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="id-1.2.26.3.2.2"></a><h3>Element Pads</h3>
+<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">
diff --git a/docs/plugins/html/gst-plugins-base-plugins-ogmvideoparse.html b/docs/plugins/html/gst-plugins-base-plugins-ogmvideoparse.html
index 41e736e..325d840 100644
--- a/docs/plugins/html/gst-plugins-base-plugins-ogmvideoparse.html
+++ b/docs/plugins/html/gst-plugins-base-plugins-ogmvideoparse.html
@@ -36,7 +36,7 @@
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="id-1.2.27.3.2.1"></a><h3>Element Information</h3>
+<a name="id-1.2.28.3.2.1"></a><h3>Element Information</h3>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
@@ -62,7 +62,7 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="id-1.2.27.3.2.2"></a><h3>Element Pads</h3>
+<a name="id-1.2.28.3.2.2"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
@@ -335,10 +335,6 @@
 </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>
diff --git a/docs/plugins/html/gst-plugins-base-plugins-playbin.html b/docs/plugins/html/gst-plugins-base-plugins-playbin.html
index 1c6fda0..aabe552 100644
--- a/docs/plugins/html/gst-plugins-base-plugins-playbin.html
+++ b/docs/plugins/html/gst-plugins-base-plugins-playbin.html
@@ -398,7 +398,7 @@
 </li>
 </ul></div>
 <div class="refsect2">
-<a name="id-1.2.28.9.5"></a><h3>Usage</h3>
+<a name="id-1.2.29.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>
@@ -439,7 +439,7 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="id-1.2.28.9.6"></a><h3>Advanced Usage: specifying the audio and video sink</h3>
+<a name="id-1.2.29.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
@@ -474,7 +474,7 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="id-1.2.28.9.7"></a><h3>Retrieving Tags and Other Meta Data</h3>
+<a name="id-1.2.29.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).
@@ -486,7 +486,7 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="id-1.2.28.9.8"></a><h3>Buffering</h3>
+<a name="id-1.2.29.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
@@ -528,7 +528,7 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="id-1.2.28.9.9"></a><h3>Embedding the video window in your application</h3>
+<a name="id-1.2.29.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
@@ -536,7 +536,7 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="id-1.2.28.9.10"></a><h3>Specifying which CD/DVD device to use</h3>
+<a name="id-1.2.29.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,
@@ -550,7 +550,7 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="id-1.2.28.9.11"></a><h3>Handling redirects</h3>
+<a name="id-1.2.29.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
@@ -561,7 +561,7 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="id-1.2.28.9.12"></a><h3>Examples</h3>
+<a name="id-1.2.29.9.12"></a><h3>Examples</h3>
 <div class="informalexample">
   <table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
     <tbody>
@@ -605,7 +605,7 @@
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="id-1.2.28.9.13.1"></a><h3>Element Information</h3>
+<a name="id-1.2.29.9.13.1"></a><h3>Element Information</h3>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
@@ -631,7 +631,7 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="id-1.2.28.9.13.2"></a><h3>Element Pads</h3>
+<a name="id-1.2.29.9.13.2"></a><h3>Element Pads</h3>
 </div>
 </div>
 </div>
@@ -651,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.28.11.3.4"></a><h4>Members</h4>
+<a name="id-1.2.29.11.3.4"></a><h4>Members</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="300px" class="enum_members_name">
@@ -1050,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.28.13.2.6"></a><h4>Parameters</h4>
+<a name="id-1.2.29.13.2.6"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1086,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.28.13.3.6"></a><h4>Parameters</h4>
+<a name="id-1.2.29.13.3.6"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1122,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.28.13.4.6"></a><h4>Parameters</h4>
+<a name="id-1.2.29.13.4.6"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1164,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.28.13.5.5"></a><h4>Parameters</h4>
+<a name="id-1.2.29.13.5.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1191,7 +1191,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.28.13.5.6"></a><h4>Returns</h4>
+<a name="id-1.2.29.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
@@ -1211,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.28.13.6.5"></a><h4>Parameters</h4>
+<a name="id-1.2.29.13.6.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1238,7 +1238,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.28.13.6.6"></a><h4>Returns</h4>
+<a name="id-1.2.29.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>
 </div>
 <p>Flags: <a href="https://developer.gnome.org/gobject/unstable/gobject-Signals.html#G-SIGNAL-ACTION:CAPS">Action</a></p>
@@ -1253,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.28.13.7.5"></a><h4>Parameters</h4>
+<a name="id-1.2.29.13.7.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1280,7 +1280,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.28.13.7.6"></a><h4>Returns</h4>
+<a name="id-1.2.29.13.7.6"></a><h4>Returns</h4>
 <p> a GstTagList with tags or NULL when the stream number does not
 exist.</p>
 </div>
@@ -1298,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.28.13.8.5"></a><h4>Parameters</h4>
+<a name="id-1.2.29.13.8.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1325,7 +1325,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.28.13.8.6"></a><h4>Returns</h4>
+<a name="id-1.2.29.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>
 </div>
 <p>Flags: <a href="https://developer.gnome.org/gobject/unstable/gobject-Signals.html#G-SIGNAL-ACTION:CAPS">Action</a></p>
@@ -1340,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.28.13.9.5"></a><h4>Parameters</h4>
+<a name="id-1.2.29.13.9.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1367,7 +1367,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.28.13.9.6"></a><h4>Returns</h4>
+<a name="id-1.2.29.13.9.6"></a><h4>Returns</h4>
 <p> a GstTagList with tags or NULL when the stream number does not
 exist.</p>
 </div>
@@ -1385,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.28.13.10.5"></a><h4>Parameters</h4>
+<a name="id-1.2.29.13.10.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1412,7 +1412,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.28.13.10.6"></a><h4>Returns</h4>
+<a name="id-1.2.29.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>
 </div>
 <p>Flags: <a href="https://developer.gnome.org/gobject/unstable/gobject-Signals.html#G-SIGNAL-ACTION:CAPS">Action</a></p>
@@ -1427,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.28.13.11.5"></a><h4>Parameters</h4>
+<a name="id-1.2.29.13.11.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1454,7 +1454,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.28.13.11.6"></a><h4>Returns</h4>
+<a name="id-1.2.29.13.11.6"></a><h4>Returns</h4>
 <p> a GstTagList with tags or NULL when the stream number does not
 exist.</p>
 </div>
@@ -1475,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.28.13.12.6"></a><h4>Parameters</h4>
+<a name="id-1.2.29.13.12.6"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1516,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.28.13.13.6"></a><h4>Parameters</h4>
+<a name="id-1.2.29.13.13.6"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1552,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.28.13.14.6"></a><h4>Parameters</h4>
+<a name="id-1.2.29.13.14.6"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1593,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.28.13.15.6"></a><h4>Parameters</h4>
+<a name="id-1.2.29.13.15.6"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -1629,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.28.13.16.6"></a><h4>Parameters</h4>
+<a name="id-1.2.29.13.16.6"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
diff --git a/docs/plugins/html/gst-plugins-base-plugins-playsink.html b/docs/plugins/html/gst-plugins-base-plugins-playsink.html
index 9d8f172..272f669 100644
--- a/docs/plugins/html/gst-plugins-base-plugins-playsink.html
+++ b/docs/plugins/html/gst-plugins-base-plugins-playsink.html
@@ -188,7 +188,7 @@
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="id-1.2.29.9.2.1"></a><h3>Element Information</h3>
+<a name="id-1.2.30.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.29.9.2.2"></a><h3>Element Pads</h3>
+<a name="id-1.2.30.9.2.2"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
@@ -491,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.29.13.2.5"></a><h4>Parameters</h4>
+<a name="id-1.2.30.13.2.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -518,7 +518,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.29.13.2.6"></a><h4>Returns</h4>
+<a name="id-1.2.30.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
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 bacaf2c..6493c7d 100644
--- a/docs/plugins/html/gst-plugins-base-plugins-plugin-adder.html
+++ b/docs/plugins/html/gst-plugins-base-plugins-plugin-adder.html
@@ -42,7 +42,7 @@
 </tr>
 <tr>
 <td><p><span class="term">version</span></p></td>
-<td>1.6.2</td>
+<td>1.7.1</td>
 </tr>
 <tr>
 <td><p><span class="term">run-time license</span></p></td>
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 782c521..cce1277 100644
--- a/docs/plugins/html/gst-plugins-base-plugins-plugin-alsa.html
+++ b/docs/plugins/html/gst-plugins-base-plugins-plugin-alsa.html
@@ -42,7 +42,7 @@
 </tr>
 <tr>
 <td><p><span class="term">version</span></p></td>
-<td>1.6.2</td>
+<td>1.7.1</td>
 </tr>
 <tr>
 <td><p><span class="term">run-time license</span></p></td>
@@ -68,6 +68,10 @@
 </colgroup>
 <tbody>
 <tr>
+<td><p><span class="term"><a class="link" href="gst-plugins-base-plugins-alsamidisrc.html" title="alsamidisrc">alsamidisrc</a></span></p></td>
+<td>Push ALSA MIDI sequencer events around</td>
+</tr>
+<tr>
 <td><p><span class="term"><a class="link" href="gst-plugins-base-plugins-alsasink.html" title="alsasink">alsasink</a></span></p></td>
 <td>Output to a sound card via ALSA</td>
 </tr>
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 87b4c15..9ffefa7 100644
--- a/docs/plugins/html/gst-plugins-base-plugins-plugin-app.html
+++ b/docs/plugins/html/gst-plugins-base-plugins-plugin-app.html
@@ -42,7 +42,7 @@
 </tr>
 <tr>
 <td><p><span class="term">version</span></p></td>
-<td>1.6.2</td>
+<td>1.7.1</td>
 </tr>
 <tr>
 <td><p><span class="term">run-time license</span></p></td>
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 0db5538..031efd2 100644
--- a/docs/plugins/html/gst-plugins-base-plugins-plugin-audioconvert.html
+++ b/docs/plugins/html/gst-plugins-base-plugins-plugin-audioconvert.html
@@ -42,7 +42,7 @@
 </tr>
 <tr>
 <td><p><span class="term">version</span></p></td>
-<td>1.6.2</td>
+<td>1.7.1</td>
 </tr>
 <tr>
 <td><p><span class="term">run-time license</span></p></td>
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 23f2da8..70477ac 100644
--- a/docs/plugins/html/gst-plugins-base-plugins-plugin-audiorate.html
+++ b/docs/plugins/html/gst-plugins-base-plugins-plugin-audiorate.html
@@ -42,7 +42,7 @@
 </tr>
 <tr>
 <td><p><span class="term">version</span></p></td>
-<td>1.6.2</td>
+<td>1.7.1</td>
 </tr>
 <tr>
 <td><p><span class="term">run-time license</span></p></td>
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 171f7ba..69fdd79 100644
--- a/docs/plugins/html/gst-plugins-base-plugins-plugin-audioresample.html
+++ b/docs/plugins/html/gst-plugins-base-plugins-plugin-audioresample.html
@@ -42,7 +42,7 @@
 </tr>
 <tr>
 <td><p><span class="term">version</span></p></td>
-<td>1.6.2</td>
+<td>1.7.1</td>
 </tr>
 <tr>
 <td><p><span class="term">run-time license</span></p></td>
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 3257f10..681009f 100644
--- a/docs/plugins/html/gst-plugins-base-plugins-plugin-audiotestsrc.html
+++ b/docs/plugins/html/gst-plugins-base-plugins-plugin-audiotestsrc.html
@@ -42,7 +42,7 @@
 </tr>
 <tr>
 <td><p><span class="term">version</span></p></td>
-<td>1.6.2</td>
+<td>1.7.1</td>
 </tr>
 <tr>
 <td><p><span class="term">run-time license</span></p></td>
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 6cf6e7e..7bb2220 100644
--- a/docs/plugins/html/gst-plugins-base-plugins-plugin-cdparanoia.html
+++ b/docs/plugins/html/gst-plugins-base-plugins-plugin-cdparanoia.html
@@ -42,7 +42,7 @@
 </tr>
 <tr>
 <td><p><span class="term">version</span></p></td>
-<td>1.6.2</td>
+<td>1.7.1</td>
 </tr>
 <tr>
 <td><p><span class="term">run-time license</span></p></td>
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 ec47b99..2724627 100644
--- a/docs/plugins/html/gst-plugins-base-plugins-plugin-encoding.html
+++ b/docs/plugins/html/gst-plugins-base-plugins-plugin-encoding.html
@@ -42,7 +42,7 @@
 </tr>
 <tr>
 <td><p><span class="term">version</span></p></td>
-<td>1.6.2</td>
+<td>1.7.1</td>
 </tr>
 <tr>
 <td><p><span class="term">run-time license</span></p></td>
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 62703d9..40fa4bf 100644
--- a/docs/plugins/html/gst-plugins-base-plugins-plugin-gio.html
+++ b/docs/plugins/html/gst-plugins-base-plugins-plugin-gio.html
@@ -42,7 +42,7 @@
 </tr>
 <tr>
 <td><p><span class="term">version</span></p></td>
-<td>1.6.2</td>
+<td>1.7.1</td>
 </tr>
 <tr>
 <td><p><span class="term">run-time license</span></p></td>
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 b512b2d..1ab399e 100644
--- a/docs/plugins/html/gst-plugins-base-plugins-plugin-libvisual.html
+++ b/docs/plugins/html/gst-plugins-base-plugins-plugin-libvisual.html
@@ -42,7 +42,7 @@
 </tr>
 <tr>
 <td><p><span class="term">version</span></p></td>
-<td>1.6.2</td>
+<td>1.7.1</td>
 </tr>
 <tr>
 <td><p><span class="term">run-time license</span></p></td>
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 73ee2eb..5c0ce32 100644
--- a/docs/plugins/html/gst-plugins-base-plugins-plugin-ogg.html
+++ b/docs/plugins/html/gst-plugins-base-plugins-plugin-ogg.html
@@ -42,7 +42,7 @@
 </tr>
 <tr>
 <td><p><span class="term">version</span></p></td>
-<td>1.6.2</td>
+<td>1.7.1</td>
 </tr>
 <tr>
 <td><p><span class="term">run-time license</span></p></td>
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 ad0fde5..a03caef 100644
--- a/docs/plugins/html/gst-plugins-base-plugins-plugin-pango.html
+++ b/docs/plugins/html/gst-plugins-base-plugins-plugin-pango.html
@@ -42,7 +42,7 @@
 </tr>
 <tr>
 <td><p><span class="term">version</span></p></td>
-<td>1.6.2</td>
+<td>1.7.1</td>
 </tr>
 <tr>
 <td><p><span class="term">run-time license</span></p></td>
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 3555058..286db53 100644
--- a/docs/plugins/html/gst-plugins-base-plugins-plugin-playback.html
+++ b/docs/plugins/html/gst-plugins-base-plugins-plugin-playback.html
@@ -42,7 +42,7 @@
 </tr>
 <tr>
 <td><p><span class="term">version</span></p></td>
-<td>1.6.2</td>
+<td>1.7.1</td>
 </tr>
 <tr>
 <td><p><span class="term">run-time license</span></p></td>
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 c89e945..615529e 100644
--- a/docs/plugins/html/gst-plugins-base-plugins-plugin-subparse.html
+++ b/docs/plugins/html/gst-plugins-base-plugins-plugin-subparse.html
@@ -42,7 +42,7 @@
 </tr>
 <tr>
 <td><p><span class="term">version</span></p></td>
-<td>1.6.2</td>
+<td>1.7.1</td>
 </tr>
 <tr>
 <td><p><span class="term">run-time license</span></p></td>
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 7266f26..7a754a6 100644
--- a/docs/plugins/html/gst-plugins-base-plugins-plugin-tcp.html
+++ b/docs/plugins/html/gst-plugins-base-plugins-plugin-tcp.html
@@ -42,7 +42,7 @@
 </tr>
 <tr>
 <td><p><span class="term">version</span></p></td>
-<td>1.6.2</td>
+<td>1.7.1</td>
 </tr>
 <tr>
 <td><p><span class="term">run-time license</span></p></td>
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 21e15d8..f15f577 100644
--- a/docs/plugins/html/gst-plugins-base-plugins-plugin-theora.html
+++ b/docs/plugins/html/gst-plugins-base-plugins-plugin-theora.html
@@ -42,7 +42,7 @@
 </tr>
 <tr>
 <td><p><span class="term">version</span></p></td>
-<td>1.6.2</td>
+<td>1.7.1</td>
 </tr>
 <tr>
 <td><p><span class="term">run-time license</span></p></td>
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 34d8dd4..7323684 100644
--- a/docs/plugins/html/gst-plugins-base-plugins-plugin-typefindfunctions.html
+++ b/docs/plugins/html/gst-plugins-base-plugins-plugin-typefindfunctions.html
@@ -42,7 +42,7 @@
 </tr>
 <tr>
 <td><p><span class="term">version</span></p></td>
-<td>1.6.2</td>
+<td>1.7.1</td>
 </tr>
 <tr>
 <td><p><span class="term">run-time license</span></p></td>
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 536bc9a..3ce2a0f 100644
--- a/docs/plugins/html/gst-plugins-base-plugins-plugin-videoconvert.html
+++ b/docs/plugins/html/gst-plugins-base-plugins-plugin-videoconvert.html
@@ -42,7 +42,7 @@
 </tr>
 <tr>
 <td><p><span class="term">version</span></p></td>
-<td>1.6.2</td>
+<td>1.7.1</td>
 </tr>
 <tr>
 <td><p><span class="term">run-time license</span></p></td>
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 26864ad..d90c1b5 100644
--- a/docs/plugins/html/gst-plugins-base-plugins-plugin-videorate.html
+++ b/docs/plugins/html/gst-plugins-base-plugins-plugin-videorate.html
@@ -42,7 +42,7 @@
 </tr>
 <tr>
 <td><p><span class="term">version</span></p></td>
-<td>1.6.2</td>
+<td>1.7.1</td>
 </tr>
 <tr>
 <td><p><span class="term">run-time license</span></p></td>
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 c501c28..c94b720 100644
--- a/docs/plugins/html/gst-plugins-base-plugins-plugin-videoscale.html
+++ b/docs/plugins/html/gst-plugins-base-plugins-plugin-videoscale.html
@@ -42,7 +42,7 @@
 </tr>
 <tr>
 <td><p><span class="term">version</span></p></td>
-<td>1.6.2</td>
+<td>1.7.1</td>
 </tr>
 <tr>
 <td><p><span class="term">run-time license</span></p></td>
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 4ac03eb..8307c27 100644
--- a/docs/plugins/html/gst-plugins-base-plugins-plugin-videotestsrc.html
+++ b/docs/plugins/html/gst-plugins-base-plugins-plugin-videotestsrc.html
@@ -42,7 +42,7 @@
 </tr>
 <tr>
 <td><p><span class="term">version</span></p></td>
-<td>1.6.2</td>
+<td>1.7.1</td>
 </tr>
 <tr>
 <td><p><span class="term">run-time license</span></p></td>
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 5c077ff..c7402c1 100644
--- a/docs/plugins/html/gst-plugins-base-plugins-plugin-volume.html
+++ b/docs/plugins/html/gst-plugins-base-plugins-plugin-volume.html
@@ -42,7 +42,7 @@
 </tr>
 <tr>
 <td><p><span class="term">version</span></p></td>
-<td>1.6.2</td>
+<td>1.7.1</td>
 </tr>
 <tr>
 <td><p><span class="term">run-time license</span></p></td>
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 01cbdc8..7e34ad5 100644
--- a/docs/plugins/html/gst-plugins-base-plugins-plugin-vorbis.html
+++ b/docs/plugins/html/gst-plugins-base-plugins-plugin-vorbis.html
@@ -42,7 +42,7 @@
 </tr>
 <tr>
 <td><p><span class="term">version</span></p></td>
-<td>1.6.2</td>
+<td>1.7.1</td>
 </tr>
 <tr>
 <td><p><span class="term">run-time license</span></p></td>
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 4180f76..6835ef6 100644
--- a/docs/plugins/html/gst-plugins-base-plugins-plugin-ximagesink.html
+++ b/docs/plugins/html/gst-plugins-base-plugins-plugin-ximagesink.html
@@ -42,7 +42,7 @@
 </tr>
 <tr>
 <td><p><span class="term">version</span></p></td>
-<td>1.6.2</td>
+<td>1.7.1</td>
 </tr>
 <tr>
 <td><p><span class="term">run-time license</span></p></td>
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 b8aa482..2e80eac 100644
--- a/docs/plugins/html/gst-plugins-base-plugins-plugin-xvimagesink.html
+++ b/docs/plugins/html/gst-plugins-base-plugins-plugin-xvimagesink.html
@@ -41,7 +41,7 @@
 </tr>
 <tr>
 <td><p><span class="term">version</span></p></td>
-<td>1.6.2</td>
+<td>1.7.1</td>
 </tr>
 <tr>
 <td><p><span class="term">run-time license</span></p></td>
diff --git a/docs/plugins/html/gst-plugins-base-plugins-socketsrc.html b/docs/plugins/html/gst-plugins-base-plugins-socketsrc.html
index 8f873e3..409d8bd 100644
--- a/docs/plugins/html/gst-plugins-base-plugins-socketsrc.html
+++ b/docs/plugins/html/gst-plugins-base-plugins-socketsrc.html
@@ -55,6 +55,11 @@
 <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>
+<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-socketsrc.html#GstSocketSrc--send-messages" title="The “send-messages” property">send-messages</a></td>
+<td class="property_flags">Read / Write</td>
+</tr>
 </tbody>
 </table></div>
 </div>
@@ -116,7 +121,7 @@
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="id-1.2.30.8.8.1"></a><h3>Element Information</h3>
+<a name="id-1.2.31.8.8.1"></a><h3>Element Information</h3>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
@@ -142,7 +147,7 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="id-1.2.30.8.8.2"></a><h3>Element Pads</h3>
+<a name="id-1.2.31.8.8.2"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
@@ -196,6 +201,19 @@
 <p>The caps of the source pad.</p>
 <p>Flags: Read / Write</p>
 </div>
+<hr>
+<div class="refsect2">
+<a name="GstSocketSrc--send-messages"></a><h3>The <code class="literal">“send-messages”</code> property</h3>
+<pre class="programlisting">  “send-messages”            <a href="https://developer.gnome.org/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a></pre>
+<p>Control if the source will handle GstNetworkMessage events.
+The event is a CUSTOM event named 'GstNetworkMessage' and contains:</p>
+<p>  "buffer", GST_TYPE_BUFFER    : the buffer with data to send</p>
+<p>The buffer in the event will be sent on the socket. This allows
+for simple bidirectional communication.</p>
+<p>Flags: Read / Write</p>
+<p>Default value: FALSE</p>
+<p class="since">Since: 1.8.0</p>
+</div>
 </div>
 <div class="refsect1">
 <a name="gst-plugins-base-plugins-socketsrc.signal-details"></a><h2>Signal Details</h2>
diff --git a/docs/plugins/html/gst-plugins-base-plugins-ssaparse.html b/docs/plugins/html/gst-plugins-base-plugins-ssaparse.html
index 2d9db11..b192680 100644
--- a/docs/plugins/html/gst-plugins-base-plugins-ssaparse.html
+++ b/docs/plugins/html/gst-plugins-base-plugins-ssaparse.html
@@ -59,7 +59,7 @@
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="id-1.2.31.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.31.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">
diff --git a/docs/plugins/html/gst-plugins-base-plugins-streamsynchronizer.html b/docs/plugins/html/gst-plugins-base-plugins-streamsynchronizer.html
index ced91b3..505ac11 100644
--- a/docs/plugins/html/gst-plugins-base-plugins-streamsynchronizer.html
+++ b/docs/plugins/html/gst-plugins-base-plugins-streamsynchronizer.html
@@ -59,7 +59,7 @@
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="id-1.2.32.6.2.1"></a><h3>Element Information</h3>
+<a name="id-1.2.33.6.2.1"></a><h3>Element Information</h3>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
@@ -85,7 +85,7 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="id-1.2.32.6.2.2"></a><h3>Element Pads</h3>
+<a name="id-1.2.33.6.2.2"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
diff --git a/docs/plugins/html/gst-plugins-base-plugins-subparse.html b/docs/plugins/html/gst-plugins-base-plugins-subparse.html
index dd29e47..e980c82 100644
--- a/docs/plugins/html/gst-plugins-base-plugins-subparse.html
+++ b/docs/plugins/html/gst-plugins-base-plugins-subparse.html
@@ -83,7 +83,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.34.7.2.1"></a><h3>Element Information</h3>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
@@ -109,7 +109,7 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="id-1.2.33.7.2.2"></a><h3>Element Pads</h3>
+<a name="id-1.2.34.7.2.2"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
diff --git a/docs/plugins/html/gst-plugins-base-plugins-subtitleoverlay.html b/docs/plugins/html/gst-plugins-base-plugins-subtitleoverlay.html
index bd971ee..b3119a4 100644
--- a/docs/plugins/html/gst-plugins-base-plugins-subtitleoverlay.html
+++ b/docs/plugins/html/gst-plugins-base-plugins-subtitleoverlay.html
@@ -99,7 +99,7 @@
 <p>It supports raw, timestamped text, different textual subtitle formats and
 DVD subpicture subtitles.</p>
 <div class="refsect2">
-<a name="id-1.2.34.8.4"></a><h3>Examples</h3>
+<a name="id-1.2.35.8.4"></a><h3>Examples</h3>
 <div class="informalexample">
   <table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
     <tbody>
@@ -115,7 +115,7 @@
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="id-1.2.34.8.5.1"></a><h3>Element Information</h3>
+<a name="id-1.2.35.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.34.8.5.2"></a><h3>Element Pads</h3>
+<a name="id-1.2.35.8.5.2"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
diff --git a/docs/plugins/html/gst-plugins-base-plugins-tcpclientsink.html b/docs/plugins/html/gst-plugins-base-plugins-tcpclientsink.html
index b9616a6..2487a60 100644
--- a/docs/plugins/html/gst-plugins-base-plugins-tcpclientsink.html
+++ b/docs/plugins/html/gst-plugins-base-plugins-tcpclientsink.html
@@ -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.35.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>
@@ -105,7 +105,7 @@
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="id-1.2.35.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.35.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">
diff --git a/docs/plugins/html/gst-plugins-base-plugins-tcpclientsrc.html b/docs/plugins/html/gst-plugins-base-plugins-tcpclientsrc.html
index 72be2c0..5d07afc 100644
--- a/docs/plugins/html/gst-plugins-base-plugins-tcpclientsrc.html
+++ b/docs/plugins/html/gst-plugins-base-plugins-tcpclientsrc.html
@@ -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.36.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>
@@ -105,7 +105,7 @@
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="id-1.2.36.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">
@@ -131,7 +131,7 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="id-1.2.36.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">
diff --git a/docs/plugins/html/gst-plugins-base-plugins-tcpserversink.html b/docs/plugins/html/gst-plugins-base-plugins-tcpserversink.html
index 0e3e117..8ced08e 100644
--- a/docs/plugins/html/gst-plugins-base-plugins-tcpserversink.html
+++ b/docs/plugins/html/gst-plugins-base-plugins-tcpserversink.html
@@ -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.37.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>
@@ -111,7 +111,7 @@
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="id-1.2.37.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">
@@ -137,7 +137,7 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="id-1.2.37.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">
diff --git a/docs/plugins/html/gst-plugins-base-plugins-tcpserversrc.html b/docs/plugins/html/gst-plugins-base-plugins-tcpserversrc.html
index 4db360d..85990db 100644
--- a/docs/plugins/html/gst-plugins-base-plugins-tcpserversrc.html
+++ b/docs/plugins/html/gst-plugins-base-plugins-tcpserversrc.html
@@ -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.38.7.2"></a><h3>Example launch line</h3>
+<a name="id-1.2.39.7.2"></a><h3>Example launch line</h3>
 <div class="informalexample">
   <table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
     <tbody>
@@ -110,7 +110,7 @@
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="id-1.2.38.7.3.1"></a><h3>Element Information</h3>
+<a name="id-1.2.39.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.38.7.3.2"></a><h3>Element Pads</h3>
+<a name="id-1.2.39.7.3.2"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
diff --git a/docs/plugins/html/gst-plugins-base-plugins-textoverlay.html b/docs/plugins/html/gst-plugins-base-plugins-textoverlay.html
index 82b44e7..4e2b2b4 100644
--- a/docs/plugins/html/gst-plugins-base-plugins-textoverlay.html
+++ b/docs/plugins/html/gst-plugins-base-plugins-textoverlay.html
@@ -60,7 +60,7 @@
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="id-1.2.39.6.2.1"></a><h3>Element Information</h3>
+<a name="id-1.2.40.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.39.6.2.2"></a><h3>Element Pads</h3>
+<a name="id-1.2.40.6.2.2"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
diff --git a/docs/plugins/html/gst-plugins-base-plugins-textrender.html b/docs/plugins/html/gst-plugins-base-plugins-textrender.html
index 33697bf..1852fbc 100644
--- a/docs/plugins/html/gst-plugins-base-plugins-textrender.html
+++ b/docs/plugins/html/gst-plugins-base-plugins-textrender.html
@@ -103,7 +103,7 @@
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="id-1.2.40.7.2.1"></a><h3>Element Information</h3>
+<a name="id-1.2.41.7.2.1"></a><h3>Element Information</h3>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
@@ -129,7 +129,7 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="id-1.2.40.7.2.2"></a><h3>Element Pads</h3>
+<a name="id-1.2.41.7.2.2"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
diff --git a/docs/plugins/html/gst-plugins-base-plugins-theoradec.html b/docs/plugins/html/gst-plugins-base-plugins-theoradec.html
index fcc941a..3e02724 100644
--- a/docs/plugins/html/gst-plugins-base-plugins-theoradec.html
+++ b/docs/plugins/html/gst-plugins-base-plugins-theoradec.html
@@ -60,7 +60,7 @@
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="id-1.2.41.6.2.1"></a><h3>Element Information</h3>
+<a name="id-1.2.42.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.41.6.2.2"></a><h3>Element Pads</h3>
+<a name="id-1.2.42.6.2.2"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
diff --git a/docs/plugins/html/gst-plugins-base-plugins-theoraenc.html b/docs/plugins/html/gst-plugins-base-plugins-theoraenc.html
index 59771ee..25ca329 100644
--- a/docs/plugins/html/gst-plugins-base-plugins-theoraenc.html
+++ b/docs/plugins/html/gst-plugins-base-plugins-theoraenc.html
@@ -152,7 +152,7 @@
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="id-1.2.42.8.2.1"></a><h3>Element Information</h3>
+<a name="id-1.2.43.8.2.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.42.8.2.2"></a><h3>Element Pads</h3>
+<a name="id-1.2.43.8.2.2"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
@@ -244,7 +244,7 @@
 <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>
+<a name="id-1.2.43.10.3.3"></a><h4>Members</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="300px" class="enum_members_name">
diff --git a/docs/plugins/html/gst-plugins-base-plugins-theoraparse.html b/docs/plugins/html/gst-plugins-base-plugins-theoraparse.html
index 7796db8..86a54a8 100644
--- a/docs/plugins/html/gst-plugins-base-plugins-theoraparse.html
+++ b/docs/plugins/html/gst-plugins-base-plugins-theoraparse.html
@@ -59,7 +59,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.44.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.43.6.2.2"></a><h3>Element Pads</h3>
+<a name="id-1.2.44.6.2.2"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
diff --git a/docs/plugins/html/gst-plugins-base-plugins-timeoverlay.html b/docs/plugins/html/gst-plugins-base-plugins-timeoverlay.html
index 7fb8a4b..0735104 100644
--- a/docs/plugins/html/gst-plugins-base-plugins-timeoverlay.html
+++ b/docs/plugins/html/gst-plugins-base-plugins-timeoverlay.html
@@ -82,7 +82,7 @@
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="id-1.2.44.7.2.1"></a><h3>Element Information</h3>
+<a name="id-1.2.45.7.2.1"></a><h3>Element Information</h3>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
@@ -108,7 +108,7 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="id-1.2.44.7.2.2"></a><h3>Element Pads</h3>
+<a name="id-1.2.45.7.2.2"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
@@ -182,7 +182,7 @@
 <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>
+<a name="id-1.2.45.9.3.3"></a><h4>Members</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="300px" class="enum_members_name">
diff --git a/docs/plugins/html/gst-plugins-base-plugins-uridecodebin.html b/docs/plugins/html/gst-plugins-base-plugins-uridecodebin.html
index 1a88963..b9cad9c 100644
--- a/docs/plugins/html/gst-plugins-base-plugins-uridecodebin.html
+++ b/docs/plugins/html/gst-plugins-base-plugins-uridecodebin.html
@@ -202,7 +202,7 @@
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="id-1.2.45.9.3.1"></a><h3>Element Information</h3>
+<a name="id-1.2.46.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.45.9.3.2"></a><h3>Element Pads</h3>
+<a name="id-1.2.46.9.3.2"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
@@ -272,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.45.11.3.4"></a><h4>Members</h4>
+<a name="id-1.2.46.11.3.4"></a><h4>Members</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="300px" class="enum_members_name">
@@ -415,7 +415,7 @@
   connected in.
 </div>
 <div class="refsect3">
-<a name="id-1.2.45.13.2.6"></a><h4>Parameters</h4>
+<a name="id-1.2.46.13.2.6"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -447,7 +447,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.45.13.2.7"></a><h4>Returns</h4>
+<a name="id-1.2.46.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
@@ -479,7 +479,7 @@
   signal, they will never be invoked!
 </div>
 <div class="refsect3">
-<a name="id-1.2.45.13.3.8"></a><h4>Parameters</h4>
+<a name="id-1.2.46.13.3.8"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -511,7 +511,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.45.13.3.9"></a><h4>Returns</h4>
+<a name="id-1.2.46.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>
@@ -561,7 +561,7 @@
   registered next (again, if any) can override that decision.
 </div>
 <div class="refsect3">
-<a name="id-1.2.45.13.5.10"></a><h4>Parameters</h4>
+<a name="id-1.2.46.13.5.10"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -598,7 +598,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.45.13.5.11"></a><h4>Returns</h4>
+<a name="id-1.2.46.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>
@@ -631,7 +631,7 @@
   signal, they will never be invoked!
 </div>
 <div class="refsect3">
-<a name="id-1.2.45.13.6.7"></a><h4>Parameters</h4>
+<a name="id-1.2.46.13.6.7"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -668,7 +668,7 @@
 </table></div>
 </div>
 <div class="refsect3">
-<a name="id-1.2.45.13.6.8"></a><h4>Returns</h4>
+<a name="id-1.2.46.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>
 </div>
 <p>Flags: <a href="https://developer.gnome.org/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS">Run Last</a></p>
@@ -682,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.45.13.7.5"></a><h4>Parameters</h4>
+<a name="id-1.2.46.13.7.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -711,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.45.13.8.5"></a><h4>Parameters</h4>
+<a name="id-1.2.46.13.8.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
@@ -751,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.45.13.9.5"></a><h4>Parameters</h4>
+<a name="id-1.2.46.13.9.5"></a><h4>Parameters</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="150px" class="parameters_name">
diff --git a/docs/plugins/html/gst-plugins-base-plugins-videoconvert.html b/docs/plugins/html/gst-plugins-base-plugins-videoconvert.html
index d49e01c..029d31c 100644
--- a/docs/plugins/html/gst-plugins-base-plugins-videoconvert.html
+++ b/docs/plugins/html/gst-plugins-base-plugins-videoconvert.html
@@ -118,7 +118,7 @@
 <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.46.7.3"></a><h3>Example launch line</h3>
+<a name="id-1.2.47.7.3"></a><h3>Example launch line</h3>
 <div class="informalexample">
   <table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
     <tbody>
@@ -136,7 +136,7 @@
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="id-1.2.46.7.4.1"></a><h3>Element Information</h3>
+<a name="id-1.2.47.7.4.1"></a><h3>Element Information</h3>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
@@ -162,7 +162,7 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="id-1.2.46.7.4.2"></a><h3>Element Pads</h3>
+<a name="id-1.2.47.7.4.2"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
diff --git a/docs/plugins/html/gst-plugins-base-plugins-videorate.html b/docs/plugins/html/gst-plugins-base-plugins-videorate.html
index 8472c05..0a5585b 100644
--- a/docs/plugins/html/gst-plugins-base-plugins-videorate.html
+++ b/docs/plugins/html/gst-plugins-base-plugins-videorate.html
@@ -145,7 +145,7 @@
 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.47.7.10"></a><h3>Example pipelines</h3>
+<a name="id-1.2.48.7.10"></a><h3>Example pipelines</h3>
 <div class="informalexample">
   <table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
     <tbody>
@@ -185,7 +185,7 @@
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="id-1.2.47.7.11.1"></a><h3>Element Information</h3>
+<a name="id-1.2.48.7.11.1"></a><h3>Element Information</h3>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
@@ -211,7 +211,7 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="id-1.2.47.7.11.2"></a><h3>Element Pads</h3>
+<a name="id-1.2.48.7.11.2"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
diff --git a/docs/plugins/html/gst-plugins-base-plugins-videoscale.html b/docs/plugins/html/gst-plugins-base-plugins-videoscale.html
index 6393016..4db7949 100644
--- a/docs/plugins/html/gst-plugins-base-plugins-videoscale.html
+++ b/docs/plugins/html/gst-plugins-base-plugins-videoscale.html
@@ -120,7 +120,7 @@
 RGB formats and is therefore generally able to operate anywhere in a
 pipeline.</p>
 <div class="refsect2">
-<a name="id-1.2.48.7.4"></a><h3>Example pipelines</h3>
+<a name="id-1.2.49.7.4"></a><h3>Example pipelines</h3>
 <div class="informalexample">
   <table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
     <tbody>
@@ -150,7 +150,7 @@
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="id-1.2.48.7.5.1"></a><h3>Element Information</h3>
+<a name="id-1.2.49.7.5.1"></a><h3>Element Information</h3>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
@@ -176,7 +176,7 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="id-1.2.48.7.5.2"></a><h3>Element Pads</h3>
+<a name="id-1.2.49.7.5.2"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
@@ -252,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.48.9.3.4"></a><h4>Members</h4>
+<a name="id-1.2.49.9.3.4"></a><h4>Members</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="300px" class="enum_members_name">
diff --git a/docs/plugins/html/gst-plugins-base-plugins-videotestsrc.html b/docs/plugins/html/gst-plugins-base-plugins-videotestsrc.html
index 5482b8c..fa0516f 100644
--- a/docs/plugins/html/gst-plugins-base-plugins-videotestsrc.html
+++ b/docs/plugins/html/gst-plugins-base-plugins-videotestsrc.html
@@ -171,7 +171,7 @@
 of formats. The video test data produced can be controlled with the "pattern"
 property.</p>
 <div class="refsect2">
-<a name="id-1.2.49.7.3"></a><h3>Example launch line</h3>
+<a name="id-1.2.50.7.3"></a><h3>Example launch line</h3>
 <div class="informalexample">
   <table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
     <tbody>
@@ -187,7 +187,7 @@
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="id-1.2.49.7.4.1"></a><h3>Element Information</h3>
+<a name="id-1.2.50.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.49.7.4.2"></a><h3>Element Pads</h3>
+<a name="id-1.2.50.7.4.2"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
@@ -276,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.49.9.3.6"></a><h4>Members</h4>
+<a name="id-1.2.50.9.3.6"></a><h4>Members</h4>
 <div class="informaltable"><table width="100%" border="0">
 <colgroup>
 <col width="300px" class="enum_members_name">
diff --git a/docs/plugins/html/gst-plugins-base-plugins-volume.html b/docs/plugins/html/gst-plugins-base-plugins-volume.html
index 8d2d24f..a913e1a 100644
--- a/docs/plugins/html/gst-plugins-base-plugins-volume.html
+++ b/docs/plugins/html/gst-plugins-base-plugins-volume.html
@@ -90,7 +90,7 @@
 <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.50.8.3"></a><h3>Example launch line</h3>
+<a name="id-1.2.51.8.3"></a><h3>Example launch line</h3>
 <div class="informalexample">
   <table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
     <tbody>
@@ -108,7 +108,7 @@
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="id-1.2.50.8.4.1"></a><h3>Element Information</h3>
+<a name="id-1.2.51.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.50.8.4.2"></a><h3>Element Pads</h3>
+<a name="id-1.2.51.8.4.2"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
diff --git a/docs/plugins/html/gst-plugins-base-plugins-vorbisdec.html b/docs/plugins/html/gst-plugins-base-plugins-vorbisdec.html
index 9335c8f..7ed9157 100644
--- a/docs/plugins/html/gst-plugins-base-plugins-vorbisdec.html
+++ b/docs/plugins/html/gst-plugins-base-plugins-vorbisdec.html
@@ -60,7 +60,7 @@
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="id-1.2.51.6.2.1"></a><h3>Element Information</h3>
+<a name="id-1.2.52.6.2.1"></a><h3>Element Information</h3>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
@@ -86,7 +86,7 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="id-1.2.51.6.2.2"></a><h3>Element Pads</h3>
+<a name="id-1.2.52.6.2.2"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
diff --git a/docs/plugins/html/gst-plugins-base-plugins-vorbisenc.html b/docs/plugins/html/gst-plugins-base-plugins-vorbisenc.html
index 96b3d23..0212a1c 100644
--- a/docs/plugins/html/gst-plugins-base-plugins-vorbisenc.html
+++ b/docs/plugins/html/gst-plugins-base-plugins-vorbisenc.html
@@ -111,7 +111,7 @@
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="id-1.2.52.8.2.1"></a><h3>Element Information</h3>
+<a name="id-1.2.53.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.52.8.2.2"></a><h3>Element Pads</h3>
+<a name="id-1.2.53.8.2.2"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
diff --git a/docs/plugins/html/gst-plugins-base-plugins-vorbisparse.html b/docs/plugins/html/gst-plugins-base-plugins-vorbisparse.html
index f312629..b7e1490 100644
--- a/docs/plugins/html/gst-plugins-base-plugins-vorbisparse.html
+++ b/docs/plugins/html/gst-plugins-base-plugins-vorbisparse.html
@@ -60,7 +60,7 @@
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="id-1.2.53.6.2.1"></a><h3>Element Information</h3>
+<a name="id-1.2.54.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.53.6.2.2"></a><h3>Element Pads</h3>
+<a name="id-1.2.54.6.2.2"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
diff --git a/docs/plugins/html/gst-plugins-base-plugins-vorbistag.html b/docs/plugins/html/gst-plugins-base-plugins-vorbistag.html
index 5c14762..25e4f70 100644
--- a/docs/plugins/html/gst-plugins-base-plugins-vorbistag.html
+++ b/docs/plugins/html/gst-plugins-base-plugins-vorbistag.html
@@ -67,7 +67,7 @@
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="id-1.2.54.7.2.1"></a><h3>Element Information</h3>
+<a name="id-1.2.55.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.54.7.2.2"></a><h3>Element Pads</h3>
+<a name="id-1.2.55.7.2.2"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
diff --git a/docs/plugins/html/gst-plugins-base-plugins-ximagesink.html b/docs/plugins/html/gst-plugins-base-plugins-ximagesink.html
index c10c652..8eee090 100644
--- a/docs/plugins/html/gst-plugins-base-plugins-ximagesink.html
+++ b/docs/plugins/html/gst-plugins-base-plugins-ximagesink.html
@@ -123,7 +123,7 @@
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="id-1.2.55.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">
@@ -149,7 +149,7 @@
 </div>
 <hr>
 <div class="refsect2">
-<a name="id-1.2.55.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">
diff --git a/docs/plugins/html/gst-plugins-base-plugins-xvimagesink.html b/docs/plugins/html/gst-plugins-base-plugins-xvimagesink.html
index 3461b04..6a306b5 100644
--- a/docs/plugins/html/gst-plugins-base-plugins-xvimagesink.html
+++ b/docs/plugins/html/gst-plugins-base-plugins-xvimagesink.html
@@ -175,7 +175,7 @@
 <div class="refsynopsisdiv">
 <h2>Synopsis</h2>
 <div class="refsect2">
-<a name="id-1.2.56.8.2.1"></a><h3>Element Information</h3>
+<a name="id-1.2.57.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.56.8.2.2"></a><h3>Element Pads</h3>
+<a name="id-1.2.57.8.2.2"></a><h3>Element Pads</h3>
 <div class="variablelist"><table border="0" class="variablelist">
 <colgroup>
 <col align="left" valign="top">
diff --git a/docs/plugins/html/index.html b/docs/plugins/html/index.html
index 1a010f5..648f3b5 100644
--- a/docs/plugins/html/index.html
+++ b/docs/plugins/html/index.html
@@ -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.6.2)
+      for GStreamer Base Plugins 1.0 (1.7.1)
       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>
@@ -29,6 +29,9 @@
 <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-alsamidisrc.html">alsamidisrc</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"></span>
 </dt>
 <dt>
diff --git a/docs/plugins/html/index.sgml b/docs/plugins/html/index.sgml
index 550f1da..a507566 100644
--- a/docs/plugins/html/index.sgml
+++ b/docs/plugins/html/index.sgml
@@ -11,6 +11,17 @@
 <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-alsamidisrc" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-alsamidisrc.html">
+<ANCHOR id="gst-plugins-base-plugins-alsamidisrc.properties" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-alsamidisrc.html#gst-plugins-base-plugins-alsamidisrc.properties">
+<ANCHOR id="GstAlsaMidiSrc" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-alsamidisrc.html#GstAlsaMidiSrc">
+<ANCHOR id="gst-plugins-base-plugins-alsamidisrc.other" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-alsamidisrc.html#gst-plugins-base-plugins-alsamidisrc.other">
+<ANCHOR id="gst-plugins-base-plugins-alsamidisrc.object-hierarchy" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-alsamidisrc.html#gst-plugins-base-plugins-alsamidisrc.object-hierarchy">
+<ANCHOR id="gst-plugins-base-plugins-alsamidisrc.description" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-alsamidisrc.html#gst-plugins-base-plugins-alsamidisrc.description">
+<ANCHOR id="gst-plugins-base-plugins-alsamidisrc.functions_details" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-alsamidisrc.html#gst-plugins-base-plugins-alsamidisrc.functions_details">
+<ANCHOR id="gst-plugins-base-plugins-alsamidisrc.other_details" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-alsamidisrc.html#gst-plugins-base-plugins-alsamidisrc.other_details">
+<ANCHOR id="GstAlsaMidiSrc-struct" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-alsamidisrc.html#GstAlsaMidiSrc-struct">
+<ANCHOR id="gst-plugins-base-plugins-alsamidisrc.property-details" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-alsamidisrc.html#gst-plugins-base-plugins-alsamidisrc.property-details">
+<ANCHOR id="GstAlsaMidiSrc--ports" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-alsamidisrc.html#GstAlsaMidiSrc--ports">
 <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">
@@ -100,17 +111,6 @@
 <ANCHOR id="gst-plugins-base-plugins-audioconvert.functions_details" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-audioconvert.html#gst-plugins-base-plugins-audioconvert.functions_details">
 <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">
@@ -355,6 +355,7 @@
 <ANCHOR id="GstMultiFdSink-remove-flush" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-multifdsink.html#GstMultiFdSink-remove-flush">
 <ANCHOR id="gst-plugins-base-plugins-multifdsink.see-also" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-multifdsink.html#gst-plugins-base-plugins-multifdsink.see-also">
 <ANCHOR id="gst-plugins-base-plugins-multisocketsink" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-multisocketsink.html">
+<ANCHOR id="gst-plugins-base-plugins-multisocketsink.properties" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-multisocketsink.html#gst-plugins-base-plugins-multisocketsink.properties">
 <ANCHOR id="gst-plugins-base-plugins-multisocketsink.signals" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-multisocketsink.html#gst-plugins-base-plugins-multisocketsink.signals">
 <ANCHOR id="GstMultiSocketSink" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-multisocketsink.html#GstMultiSocketSink">
 <ANCHOR id="gst-plugins-base-plugins-multisocketsink.other" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-multisocketsink.html#gst-plugins-base-plugins-multisocketsink.other">
@@ -383,6 +384,9 @@
 <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.property-details" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-multisocketsink.html#gst-plugins-base-plugins-multisocketsink.property-details">
+<ANCHOR id="GstMultiSocketSink--send-dispatched" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-multisocketsink.html#GstMultiSocketSink--send-dispatched">
+<ANCHOR id="GstMultiSocketSink--send-messages" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-multisocketsink.html#GstMultiSocketSink--send-messages">
 <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">
@@ -554,6 +558,7 @@
 <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="GstSocketSrc--send-messages" href="gst-plugins-base-plugins-1.0/gst-plugins-base-plugins-socketsrc.html#GstSocketSrc--send-messages">
 <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">
diff --git a/docs/plugins/inspect/plugin-adder.xml b/docs/plugins/inspect/plugin-adder.xml
index 16aedf4..dfb48df 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.6.2</version>
+  <version>1.7.1</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 fd1ddc9..fd899b5 100644
--- a/docs/plugins/inspect/plugin-alsa.xml
+++ b/docs/plugins/inspect/plugin-alsa.xml
@@ -3,13 +3,28 @@
   <description>ALSA plugin library</description>
   <filename>../../ext/alsa/.libs/libgstalsa.so</filename>
   <basename>libgstalsa.so</basename>
-  <version>1.6.2</version>
+  <version>1.7.1</version>
   <license>LGPL</license>
   <source>gst-plugins-base</source>
   <package>GStreamer Base Plug-ins source release</package>
   <origin>Unknown package origin</origin>
   <elements>
     <element>
+      <name>alsamidisrc</name>
+      <longname>AlsaMidi Source</longname>
+      <class>Source</class>
+      <description>Push ALSA MIDI sequencer events around</description>
+      <author>Antonio Ospite &lt;ao2@ao2.it&gt;</author>
+      <pads>
+        <caps>
+          <name>src</name>
+          <direction>source</direction>
+          <presence>always</presence>
+          <details>audio/x-midi-event</details>
+        </caps>
+      </pads>
+    </element>
+    <element>
       <name>alsasink</name>
       <longname>Audio sink (ALSA)</longname>
       <class>Sink/Audio</class>
diff --git a/docs/plugins/inspect/plugin-app.xml b/docs/plugins/inspect/plugin-app.xml
index 7fe98c4..d0c9e32 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.6.2</version>
+  <version>1.7.1</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 f3c072c..4594f6a 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.6.2</version>
+  <version>1.7.1</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 c12afde..2dee643 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.6.2</version>
+  <version>1.7.1</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 b62e39c..635c3c6 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.6.2</version>
+  <version>1.7.1</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 57fd733..c8a585b 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.6.2</version>
+  <version>1.7.1</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>audio/x-raw, format=(string){ S16LE, S32LE, F32LE, F64LE }, layout=(string)interleaved, rate=(int)[ 1, 2147483647 ], channels=(int)[ 1, 2 ]</details>
+          <details>audio/x-raw, format=(string){ S16LE, S16BE, U16LE, U16BE, S24_32LE, S24_32BE, U24_32LE, U24_32BE, S32LE, S32BE, U32LE, U32BE, S24LE, S24BE, U24LE, U24BE, S20LE, S20BE, U20LE, U20BE, S18LE, S18BE, U18LE, U18BE, F32LE, F32BE, F64LE, F64BE, S8, U8 }, layout=(string)interleaved, rate=(int)[ 1, 2147483647 ], channels=(int)[ 1, 2147483647 ]</details>
         </caps>
       </pads>
     </element>
diff --git a/docs/plugins/inspect/plugin-cdparanoia.xml b/docs/plugins/inspect/plugin-cdparanoia.xml
index 36079cb..549b5f8 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.6.2</version>
+  <version>1.7.1</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 f723ce4..b1a69aa 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.6.2</version>
+  <version>1.7.1</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 cbf487d..4e27ece 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.6.2</version>
+  <version>1.7.1</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 d675b80..35c30ca 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.6.2</version>
+  <version>1.7.1</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 df5f847..b7b663b 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.6.2</version>
+  <version>1.7.1</version>
   <license>LGPL</license>
   <source>gst-plugins-base</source>
   <package>GStreamer Base Plug-ins source release</package>
@@ -164,7 +164,7 @@
           <name>src</name>
           <direction>source</direction>
           <presence>sometimes</presence>
-          <details>video/mpeg, mpegversion=(int)4, systemstream=(boolean)false, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-asus, asusversion=(int)1, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-asus, asusversion=(int)2, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-cirrus-logic-accupak, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-camstudio, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-compressed-yuv, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-raw, format=(string){ RGB8P, BGR, BGRx }, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-divx, divxversion=(int)3, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-divx, divxversion=(int)4, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-truemotion, trueversion=(int)1, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-dv, systemstream=(boolean)false, dvversion=(int)25, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-dv, systemstream=(boolean)false, dvversion=(int)50, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-divx, divxversion=(int)5, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/mpeg, mpegversion=(int)4, systemstream=(boolean)false, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-flash-video, flvversion=(int)1, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-vp6-flash, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-h263, variant=(string)itu, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-h263, variant=(string)lucent, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-h264, variant=(string)itu, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-huffyuv, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-intel-h263, variant=(string)intel, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-raw, format=(string)I420, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-indeo, indeoversion=(int)3, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-indeo, indeoversion=(int)4, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-indeo, indeoversion=(int)5, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-h263, variant=(string)lead, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-h264, variant=(string)lead, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-h263, variant=(string)microsoft, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/mpeg, mpegversion=(int)4, systemstream=(boolean)false, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; image/jpeg, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-msmpeg, msmpegversion=(int)42, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-msmpeg, msmpegversion=(int)43, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/mpeg, systemstream=(boolean)false, mpegversion=(int)1, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/mpeg, systemstream=(boolean)false, mpegversion=(int)2, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-msmpeg, msmpegversion=(int)41, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-mszh, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; image/png, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-rle, layout=(string)microsoft, depth=(int)[ 1, 64 ], framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-indeo, indeoversion=(int)2, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/sp5x, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-truemotion, trueversion=(int)2, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-camtasia, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-ultimotion, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-raw, format=(string)UYVY, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-ati-vcr, vcrversion=(int)1, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-ati-vcr, vcrversion=(int)2, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-h263, variant=(string)vdolive, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-h263, variant=(string)vivo, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-vmnc, version=(int)1, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-vp3, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-h264, variant=(string)videosoft, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-wmv, wmvversion=(int)1, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-wmv, wmvversion=(int)2, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-wmv, wmvversion=(int)3, format=(string)WMV3, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/mpeg, mpegversion=(int)4, systemstream=(boolean)false, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-xan, wcversion=(int)4, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-raw, format=(string)YUY2, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-raw, format=(string)YVU9, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-zlib, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-cinepak, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-h264, variant=(string)itu, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-msvideocodec, msvideoversion=(int)1, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-h263, variant=(string)xirlink, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-dirac, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-ffv, ffvversion=(int)1, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-kmvc, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-vp5, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-vp6, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-vp6-flash, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-vp7, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-vp8, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-mimic, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-apple-video, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-theora, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-fraps, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-aasc, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-raw, format=(string)YV12, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-loco, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-zmbv, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-raw, format=(string)v210, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-raw, format=(string)r210, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]</details>
+          <details>video/mpeg, mpegversion=(int)4, systemstream=(boolean)false, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-asus, asusversion=(int)1, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-asus, asusversion=(int)2, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-cirrus-logic-accupak, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-camstudio, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-compressed-yuv, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-raw, format=(string){ RGB8P, BGR, BGRx }, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-divx, divxversion=(int)3, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-divx, divxversion=(int)4, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-truemotion, trueversion=(int)1, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-dv, systemstream=(boolean)false, dvversion=(int)25, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-dv, systemstream=(boolean)false, dvversion=(int)50, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-divx, divxversion=(int)5, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/mpeg, mpegversion=(int)4, systemstream=(boolean)false, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-flash-video, flvversion=(int)1, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-vp6-flash, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-h263, variant=(string)itu, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-h263, variant=(string)lucent, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-h264, variant=(string)itu, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-huffyuv, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-intel-h263, variant=(string)intel, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-raw, format=(string)I420, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-indeo, indeoversion=(int)3, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-indeo, indeoversion=(int)4, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-indeo, indeoversion=(int)5, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-h263, variant=(string)lead, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-h264, variant=(string)lead, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-h263, variant=(string)microsoft, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/mpeg, mpegversion=(int)4, systemstream=(boolean)false, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; image/jpeg, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-msmpeg, msmpegversion=(int)42, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-msmpeg, msmpegversion=(int)43, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/mpeg, systemstream=(boolean)false, mpegversion=(int)1, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/mpeg, systemstream=(boolean)false, mpegversion=(int)2, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-msmpeg, msmpegversion=(int)41, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-mszh, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; image/png, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-rle, layout=(string)microsoft, depth=(int)[ 1, 64 ], framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-indeo, indeoversion=(int)2, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/sp5x, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-truemotion, trueversion=(int)2, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-camtasia, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-ultimotion, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-raw, format=(string)UYVY, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-ati-vcr, vcrversion=(int)1, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-ati-vcr, vcrversion=(int)2, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-h263, variant=(string)vdolive, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-h263, variant=(string)vivo, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-vmnc, version=(int)1, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-vp3, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-h264, variant=(string)videosoft, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-wmv, wmvversion=(int)1, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-wmv, wmvversion=(int)2, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-wmv, wmvversion=(int)3, format=(string)WMV3, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/mpeg, mpegversion=(int)4, systemstream=(boolean)false, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-xan, wcversion=(int)4, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-raw, format=(string)YUY2, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-zlib, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-cinepak, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-h264, variant=(string)itu, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-msvideocodec, msvideoversion=(int)1, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-h263, variant=(string)xirlink, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-dirac, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-ffv, ffvversion=(int)1, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-kmvc, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-vp5, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-vp6, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-vp6-flash, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-vp7, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-vp8, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-mimic, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-apple-video, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-theora, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-fraps, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-aasc, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-raw, format=(string)YV12, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-loco, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-zmbv, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-raw, format=(string)v210, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-raw, format=(string)r210, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]</details>
         </caps>
       </pads>
     </element>
diff --git a/docs/plugins/inspect/plugin-pango.xml b/docs/plugins/inspect/plugin-pango.xml
index 175e950..8989a99 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.6.2</version>
+  <version>1.7.1</version>
   <license>LGPL</license>
   <source>gst-plugins-base</source>
   <package>GStreamer Base Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-playback.xml b/docs/plugins/inspect/plugin-playback.xml
index 72ea60b..69a709a 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.6.2</version>
+  <version>1.7.1</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 6050091..75ed13d 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.6.2</version>
+  <version>1.7.1</version>
   <license>LGPL</license>
   <source>gst-plugins-base</source>
   <package>GStreamer Base Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-tcp.xml b/docs/plugins/inspect/plugin-tcp.xml
index 593667e..15e5517 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.6.2</version>
+  <version>1.7.1</version>
   <license>LGPL</license>
   <source>gst-plugins-base</source>
   <package>GStreamer Base Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-theora.xml b/docs/plugins/inspect/plugin-theora.xml
index 135baf9..65e7319 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.6.2</version>
+  <version>1.7.1</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 17fe233..103e1e0 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.6.2</version>
+  <version>1.7.1</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 5a634c5..071d0e0 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.6.2</version>
+  <version>1.7.1</version>
   <license>LGPL</license>
   <source>gst-plugins-base</source>
   <package>GStreamer Base Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-videorate.xml b/docs/plugins/inspect/plugin-videorate.xml
index 8045441..8ed4bba 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.6.2</version>
+  <version>1.7.1</version>
   <license>LGPL</license>
   <source>gst-plugins-base</source>
   <package>GStreamer Base Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-videoscale.xml b/docs/plugins/inspect/plugin-videoscale.xml
index da75f03..dfaf58b 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.6.2</version>
+  <version>1.7.1</version>
   <license>LGPL</license>
   <source>gst-plugins-base</source>
   <package>GStreamer Base Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-videotestsrc.xml b/docs/plugins/inspect/plugin-videotestsrc.xml
index eac5064..a559366 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.6.2</version>
+  <version>1.7.1</version>
   <license>LGPL</license>
   <source>gst-plugins-base</source>
   <package>GStreamer Base Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-volume.xml b/docs/plugins/inspect/plugin-volume.xml
index c214fcf..726cf06 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.6.2</version>
+  <version>1.7.1</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 6d1f637..ffeb076 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.6.2</version>
+  <version>1.7.1</version>
   <license>LGPL</license>
   <source>gst-plugins-base</source>
   <package>GStreamer Base Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-ximagesink.xml b/docs/plugins/inspect/plugin-ximagesink.xml
index 45fe861..e84bc89 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.6.2</version>
+  <version>1.7.1</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 0f47711..d8834d3 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.6.2</version>
+  <version>1.7.1</version>
   <license>LGPL</license>
   <source>gst-plugins-base</source>
   <package>GStreamer Base Plug-ins source release</package>
diff --git a/ext/alsa/Makefile.am b/ext/alsa/Makefile.am
index 9a22257..7f885c5 100644
--- a/ext/alsa/Makefile.am
+++ b/ext/alsa/Makefile.am
@@ -5,6 +5,7 @@
 	gstalsaplugin.c \
 	gstalsasink.c 	\
 	gstalsasrc.c \
+	gstalsamidisrc.c \
 	gstalsa.c
 
 libgstalsa_la_CFLAGS = \
@@ -24,4 +25,5 @@
 	gstalsa.h \
 	gstalsadeviceprobe.h \
 	gstalsasrc.h \
-	gstalsasink.h
+	gstalsasink.h \
+	gstalsamidisrc.h
diff --git a/ext/alsa/Makefile.in b/ext/alsa/Makefile.in
index c47fc68..d7294e3 100644
--- a/ext/alsa/Makefile.in
+++ b/ext/alsa/Makefile.in
@@ -167,7 +167,8 @@
 	$(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1)
 am_libgstalsa_la_OBJECTS = libgstalsa_la-gstalsadeviceprobe.lo \
 	libgstalsa_la-gstalsaplugin.lo libgstalsa_la-gstalsasink.lo \
-	libgstalsa_la-gstalsasrc.lo libgstalsa_la-gstalsa.lo
+	libgstalsa_la-gstalsasrc.lo libgstalsa_la-gstalsamidisrc.lo \
+	libgstalsa_la-gstalsa.lo
 libgstalsa_la_OBJECTS = $(am_libgstalsa_la_OBJECTS)
 AM_V_lt = $(am__v_lt_@AM_V@)
 am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
@@ -540,6 +541,7 @@
 	gstalsaplugin.c \
 	gstalsasink.c 	\
 	gstalsasrc.c \
+	gstalsamidisrc.c \
 	gstalsa.c
 
 libgstalsa_la_CFLAGS = \
@@ -559,7 +561,8 @@
 	gstalsa.h \
 	gstalsadeviceprobe.h \
 	gstalsasrc.h \
-	gstalsasink.h
+	gstalsasink.h \
+	gstalsamidisrc.h
 
 all: all-am
 
@@ -641,6 +644,7 @@
 
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstalsa_la-gstalsa.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstalsa_la-gstalsadeviceprobe.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstalsa_la-gstalsamidisrc.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstalsa_la-gstalsaplugin.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstalsa_la-gstalsasink.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstalsa_la-gstalsasrc.Plo@am__quote@
@@ -697,6 +701,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 $(libgstalsa_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstalsa_la_CFLAGS) $(CFLAGS) -c -o libgstalsa_la-gstalsasrc.lo `test -f 'gstalsasrc.c' || echo '$(srcdir)/'`gstalsasrc.c
 
+libgstalsa_la-gstalsamidisrc.lo: gstalsamidisrc.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstalsa_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstalsa_la_CFLAGS) $(CFLAGS) -MT libgstalsa_la-gstalsamidisrc.lo -MD -MP -MF $(DEPDIR)/libgstalsa_la-gstalsamidisrc.Tpo -c -o libgstalsa_la-gstalsamidisrc.lo `test -f 'gstalsamidisrc.c' || echo '$(srcdir)/'`gstalsamidisrc.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstalsa_la-gstalsamidisrc.Tpo $(DEPDIR)/libgstalsa_la-gstalsamidisrc.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='gstalsamidisrc.c' object='libgstalsa_la-gstalsamidisrc.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 $(libgstalsa_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstalsa_la_CFLAGS) $(CFLAGS) -c -o libgstalsa_la-gstalsamidisrc.lo `test -f 'gstalsamidisrc.c' || echo '$(srcdir)/'`gstalsamidisrc.c
+
 libgstalsa_la-gstalsa.lo: gstalsa.c
 @am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstalsa_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstalsa_la_CFLAGS) $(CFLAGS) -MT libgstalsa_la-gstalsa.lo -MD -MP -MF $(DEPDIR)/libgstalsa_la-gstalsa.Tpo -c -o libgstalsa_la-gstalsa.lo `test -f 'gstalsa.c' || echo '$(srcdir)/'`gstalsa.c
 @am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstalsa_la-gstalsa.Tpo $(DEPDIR)/libgstalsa_la-gstalsa.Plo
diff --git a/ext/alsa/gstalsamidisrc.c b/ext/alsa/gstalsamidisrc.c
new file mode 100644
index 0000000..645d0b0
--- /dev/null
+++ b/ext/alsa/gstalsamidisrc.c
@@ -0,0 +1,521 @@
+/* GStreamer
+ * Copyright (C) 2014  Antonio Ospite <ao2@ao2.it>
+ *
+ * gstalsamidisrc.c: Source element for ALSA MIDI sequencer events
+ *
+ * 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-alsamidisrc
+ * @see_also: #GstPushSrc
+ *
+ * The alsamidisrc element is an element that fetches ALSA MIDI sequencer
+ * events and makes them available to elements understanding
+ * audio/x-midi-events in their sink pads.
+ *
+ * It can be used to generate notes from a MIDI input device.
+ *
+ * <refsect2>
+ * <title>Example launch line</title>
+ * |[
+ * gst-launch -v alsamidisrc ports=129:0 ! fluiddec ! audioconvert ! autoaudiosink
+ * ]| This pipeline will listen for events from the sequencer device at port 129:0,
+ * and generate notes using the fluiddec element.
+ * </refsect2>
+ */
+
+#ifdef HAVE_CONFIG_H
+#  include "config.h"
+#endif
+
+#include "gstalsamidisrc.h"
+
+GST_DEBUG_CATEGORY_STATIC (gst_alsa_midi_src_debug);
+#define GST_CAT_DEFAULT gst_alsa_midi_src_debug
+
+/*
+ * The MIDI specification declares some status bytes undefined:
+ *
+ *  - 0xF4 System common - Undefined (Reserved)
+ *  - 0xF5 System common - Undefined (Reserved)
+ *  - 0xF9 System real-time - Undefined (Reserved)
+ *  - 0xFD System real-time - Undefined (Reserved)
+ *
+ * See: http://www.midi.org/techspecs/midimessages.php#2
+ *
+ * Some other documents define status 0xf9 as a tick message with a period of
+ * 10ms:
+ *
+ *  - http://www.blitter.com/~russtopia/MIDI/~jglatt/tech/midispec/tick.htm
+ *  - http://www.sequencer.de/synth/index.php/MIDI_Format#0xf9_-_MIDI_Tick
+ *
+ * Even if non-standard it looks like this convention is quite widespread.
+ *
+ * For instance Fluidsynth uses 0xF9 as a "midi tick" message:
+ * http://sourceforge.net/p/fluidsynth/code-git/ci/master/tree/fluidsynth/src/midi/fluid_midi.h#l62
+ *
+ * And then so does the midiparse element in order to be compatible with
+ * Fluidsynth and the fluiddec element.
+ *
+ * Do the same to behave like midiparse.
+ */
+#define MIDI_TICK 0xf9
+#define MIDI_TICK_PERIOD_MS 10
+
+/* Functions specific to the Alsa MIDI sequencer API */
+
+#define DEFAULT_BUFSIZE 65536
+#define DEFAULT_CLIENT_NAME "alsamidisrc"
+#define DEFAULT_POLL_TIMEOUT_MS (MIDI_TICK_PERIOD_MS / 2)
+
+static int
+init_seq (GstAlsaMidiSrc * alsamidisrc)
+{
+  int ret;
+
+  ret = snd_seq_open (&alsamidisrc->seq, "default", SND_SEQ_OPEN_DUPLEX, 0);
+  if (ret < 0) {
+    GST_ERROR_OBJECT (alsamidisrc, "Cannot open sequencer - %s",
+        snd_strerror (ret));
+    goto error;
+  }
+
+  ret = snd_seq_set_client_name (alsamidisrc->seq, DEFAULT_CLIENT_NAME);
+  if (ret < 0) {
+    GST_ERROR_OBJECT (alsamidisrc, "Cannot set client name - %s",
+        snd_strerror (ret));
+    goto error_seq_close;
+  }
+
+  return 0;
+
+error_seq_close:
+  snd_seq_close (alsamidisrc->seq);
+error:
+  return ret;
+}
+
+/* Parses one or more port addresses from the string */
+static int
+parse_ports (const char *arg, GstAlsaMidiSrc * alsamidisrc)
+{
+  gchar **ports_list;
+  guint i;
+  int ret = 0;
+
+  GST_DEBUG_OBJECT (alsamidisrc, "ports: %s", arg);
+
+  /*
+   * Assume that ports are separated by commas.
+   *
+   * Commas are used instead of spaces because those are valid in client
+   * names.
+   */
+  ports_list = g_strsplit (arg, ",", 0);
+
+  alsamidisrc->port_count = g_strv_length (ports_list);
+  alsamidisrc->seq_ports = g_try_new (snd_seq_addr_t, alsamidisrc->port_count);
+  if (!alsamidisrc->seq_ports) {
+    GST_ERROR_OBJECT (alsamidisrc, "Out of memory");
+    ret = -ENOMEM;
+    goto out_free_ports_list;
+  }
+
+  for (i = 0; i < alsamidisrc->port_count; i++) {
+    gchar *port_name = ports_list[i];
+
+    ret = snd_seq_parse_address (alsamidisrc->seq, &alsamidisrc->seq_ports[i],
+        port_name);
+    if (ret < 0) {
+      GST_ERROR_OBJECT (alsamidisrc, "Invalid port %s - %s", port_name,
+          snd_strerror (ret));
+      goto error_free_seq_ports;
+    }
+  }
+
+  goto out_free_ports_list;
+
+error_free_seq_ports:
+  g_free (alsamidisrc->seq_ports);
+out_free_ports_list:
+  g_strfreev (ports_list);
+  return ret;
+}
+
+static int
+create_port (GstAlsaMidiSrc * alsamidisrc)
+{
+  int ret;
+
+  ret = snd_seq_create_simple_port (alsamidisrc->seq, DEFAULT_CLIENT_NAME,
+      SND_SEQ_PORT_CAP_WRITE |
+      SND_SEQ_PORT_CAP_SUBS_WRITE,
+      SND_SEQ_PORT_TYPE_MIDI_GENERIC | SND_SEQ_PORT_TYPE_APPLICATION);
+  if (ret < 0)
+    GST_ERROR_OBJECT (alsamidisrc, "Cannot create port - %s",
+        snd_strerror (ret));
+
+  return ret;
+}
+
+static void
+connect_ports (GstAlsaMidiSrc * alsamidisrc)
+{
+  int i;
+  int ret;
+
+  for (i = 0; i < alsamidisrc->port_count; ++i) {
+    ret =
+        snd_seq_connect_from (alsamidisrc->seq, 0,
+        alsamidisrc->seq_ports[i].client, alsamidisrc->seq_ports[i].port);
+    if (ret < 0)
+      /* Issue a warning and try the other ports */
+      GST_WARNING_OBJECT (alsamidisrc, "Cannot connect from port %d:%d - %s",
+          alsamidisrc->seq_ports[i].client, alsamidisrc->seq_ports[i].port,
+          snd_strerror (ret));
+  }
+}
+
+/* GStreamer specific functions */
+
+static GstStaticPadTemplate srctemplate = GST_STATIC_PAD_TEMPLATE ("src",
+    GST_PAD_SRC,
+    GST_PAD_ALWAYS,
+    GST_STATIC_CAPS ("audio/x-midi-event"));
+
+#define DEFAULT_PORTS           NULL
+
+enum
+{
+  PROP_0,
+  PROP_PORTS,
+  PROP_LAST,
+};
+
+#define _do_init \
+    GST_DEBUG_CATEGORY_INIT (gst_alsa_midi_src_debug, "alsamidisrc", 0, "alsamidisrc element");
+#define gst_alsa_midi_src_parent_class parent_class
+G_DEFINE_TYPE_WITH_CODE (GstAlsaMidiSrc, gst_alsa_midi_src, GST_TYPE_PUSH_SRC,
+    _do_init);
+
+static void gst_alsa_midi_src_set_property (GObject * object, guint prop_id,
+    const GValue * value, GParamSpec * pspec);
+static void gst_alsa_midi_src_get_property (GObject * object, guint prop_id,
+    GValue * value, GParamSpec * pspec);
+
+static gboolean gst_alsa_midi_src_start (GstBaseSrc * basesrc);
+static gboolean gst_alsa_midi_src_stop (GstBaseSrc * basesrc);
+
+static GstFlowReturn
+gst_alsa_midi_src_create (GstPushSrc * src, GstBuffer ** buf);
+
+static void
+gst_alsa_midi_src_class_init (GstAlsaMidiSrcClass * klass)
+{
+  GObjectClass *gobject_class;
+  GstElementClass *gstelement_class;
+  GstBaseSrcClass *gstbase_src_class;
+  GstPushSrcClass *gstpush_src_class;
+
+  gobject_class = G_OBJECT_CLASS (klass);
+  gstelement_class = GST_ELEMENT_CLASS (klass);
+  gstbase_src_class = GST_BASE_SRC_CLASS (klass);
+  gstpush_src_class = GST_PUSH_SRC_CLASS (klass);
+
+  gobject_class->set_property = gst_alsa_midi_src_set_property;
+  gobject_class->get_property = gst_alsa_midi_src_get_property;
+
+  g_object_class_install_property (gobject_class, PROP_PORTS,
+      g_param_spec_string ("ports", "Ports",
+          "Comma separated list of sequencer ports (e.g. client:port,...)",
+          DEFAULT_PORTS, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+
+  gst_element_class_set_static_metadata (gstelement_class,
+      "AlsaMidi Source",
+      "Source",
+      "Push ALSA MIDI sequencer events around", "Antonio Ospite <ao2@ao2.it>");
+  gst_element_class_add_pad_template (gstelement_class,
+      gst_static_pad_template_get (&srctemplate));
+
+  gstbase_src_class->start = GST_DEBUG_FUNCPTR (gst_alsa_midi_src_start);
+  gstbase_src_class->stop = GST_DEBUG_FUNCPTR (gst_alsa_midi_src_stop);
+  gstpush_src_class->create = GST_DEBUG_FUNCPTR (gst_alsa_midi_src_create);
+}
+
+static void
+gst_alsa_midi_src_init (GstAlsaMidiSrc * alsamidisrc)
+{
+  alsamidisrc->ports = DEFAULT_PORTS;
+
+  gst_base_src_set_format (GST_BASE_SRC (alsamidisrc), GST_FORMAT_TIME);
+  gst_base_src_set_live (GST_BASE_SRC (alsamidisrc), TRUE);
+}
+
+static void
+gst_alsa_midi_src_set_property (GObject * object, guint prop_id,
+    const GValue * value, GParamSpec * pspec)
+{
+  GstAlsaMidiSrc *src;
+
+  src = GST_ALSA_MIDI_SRC (object);
+
+  switch (prop_id) {
+    case PROP_PORTS:
+      g_free (src->ports);
+      src->ports = g_value_dup_string (value);
+      break;
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      break;
+  }
+}
+
+static void
+gst_alsa_midi_src_get_property (GObject * object, guint prop_id, GValue * value,
+    GParamSpec * pspec)
+{
+  GstAlsaMidiSrc *src;
+
+  g_return_if_fail (GST_IS_ALSA_MIDI_SRC (object));
+
+  src = GST_ALSA_MIDI_SRC (object);
+
+  switch (prop_id) {
+    case PROP_PORTS:
+      g_value_set_string (value, src->ports);
+      break;
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      break;
+  }
+}
+
+static GstBuffer *
+prepare_buffer (GstAlsaMidiSrc * alsamidisrc, gpointer data, guint size)
+{
+  GstClockTime time;
+  gpointer local_data;
+  GstBuffer *buffer;
+
+  buffer = gst_buffer_new ();
+
+  time = alsamidisrc->tick * MIDI_TICK_PERIOD_MS * GST_MSECOND;
+
+  GST_BUFFER_DTS (buffer) = time;
+  GST_BUFFER_PTS (buffer) = time;
+  GST_BUFFER_OFFSET (buffer) = time;
+  GST_BUFFER_DURATION (buffer) = MIDI_TICK_PERIOD_MS * GST_MSECOND;
+
+  local_data = g_memdup (data, size);
+
+  gst_buffer_append_memory (buffer,
+      gst_memory_new_wrapped (0, local_data, size, 0, size, local_data,
+          g_free));
+
+  GST_MEMDUMP_OBJECT (alsamidisrc, "MIDI data:", local_data, size);
+
+  alsamidisrc->tick += 1;
+
+  return buffer;
+}
+
+static void
+push_buffer (GstAlsaMidiSrc * alsamidisrc, gpointer data, guint size,
+    GstBufferList * buffer_list)
+{
+  gst_buffer_list_add (buffer_list, prepare_buffer (alsamidisrc, data, size));
+}
+
+static void
+push_tick_buffer (GstAlsaMidiSrc * alsamidisrc, GstBufferList * buffer_list)
+{
+  alsamidisrc->buffer[0] = MIDI_TICK;
+  push_buffer (alsamidisrc, alsamidisrc->buffer, 1, buffer_list);
+}
+
+static GstFlowReturn
+gst_alsa_midi_src_create (GstPushSrc * src, GstBuffer ** buf)
+{
+  GstAlsaMidiSrc *alsamidisrc;
+  GstBufferList *buffer_list;
+  long size_ev = 0;
+  int err;
+  int ret;
+  guint len;
+
+  alsamidisrc = GST_ALSA_MIDI_SRC (src);
+
+  buffer_list = gst_buffer_list_new ();
+
+  snd_seq_poll_descriptors (alsamidisrc->seq, alsamidisrc->pfds,
+      alsamidisrc->npfds, POLLIN);
+
+  /*
+   * The file descriptors are polled with a timeout _less_ than 10ms (the MIDI
+   * tick period) in order not to loose events because of possible overlaps
+   * with MIDI ticks.
+   *
+   * If the polling times out (no new events) then a MIDI-tick event gets
+   * generated in order to keep the pipeline alive and progressing.
+   *
+   * If new events are present, then they are decoded and queued in
+   * a buffer_list. One buffer per event will be queued, all with different
+   * timestamps (see the prepare_buffer() function); maybe this can be
+   * optimized but a as a proof-of-concept mechanism it works OK.
+   */
+  ret = poll (alsamidisrc->pfds, alsamidisrc->npfds, DEFAULT_POLL_TIMEOUT_MS);
+  if (ret < 0) {
+    GST_ERROR_OBJECT (alsamidisrc, "ERROR in poll: %s", strerror (errno));
+  } else if (ret == 0) {
+    push_tick_buffer (alsamidisrc, buffer_list);
+  } else {
+    /* There are events available */
+    do {
+      snd_seq_event_t *event;
+      err = snd_seq_event_input (alsamidisrc->seq, &event);
+      if (err < 0)
+        break;                  /* Processed all events */
+
+      if (event) {
+        size_ev =
+            snd_midi_event_decode (alsamidisrc->parser, alsamidisrc->buffer,
+            DEFAULT_BUFSIZE, event);
+        if (size_ev < 0) {
+          /* ENOENT indicates an event that is not a MIDI message, silently skip it */
+          if (-ENOENT == size_ev) {
+            GST_WARNING_OBJECT (alsamidisrc,
+                "Warning: Received non-MIDI message");
+            push_tick_buffer (alsamidisrc, buffer_list);
+          } else {
+            GST_ERROR_OBJECT (alsamidisrc,
+                "Error decoding event from ALSA to output: %s",
+                strerror (-size_ev));
+            goto error;
+          }
+        } else {
+          push_buffer (alsamidisrc, alsamidisrc->buffer, size_ev, buffer_list);
+        }
+      }
+    } while (err > 0);
+  }
+
+  len = gst_buffer_list_length (buffer_list);
+  if (len == 0)
+    goto error;
+
+  /* Pop the _last_ buffer in the list */
+  *buf = gst_buffer_copy (gst_buffer_list_get (buffer_list, len - 1));
+  gst_buffer_list_remove (buffer_list, len - 1, 1);
+  --len;
+
+  /* 
+   * If there are no more buffers left, free the list, otherwise push all the
+   * _previous_ buffers left in the list.
+   *
+   * The one popped above will be pushed last when this function returns.
+   */
+  if (len == 0)
+    gst_buffer_list_unref (buffer_list);
+  else
+    gst_pad_push_list (GST_BASE_SRC (src)->srcpad, buffer_list);
+
+  return GST_FLOW_OK;
+
+error:
+  gst_buffer_list_unref (buffer_list);
+  return GST_FLOW_ERROR;
+}
+
+static gboolean
+gst_alsa_midi_src_start (GstBaseSrc * basesrc)
+{
+  GstAlsaMidiSrc *alsamidisrc;
+  int ret;
+
+  alsamidisrc = GST_ALSA_MIDI_SRC (basesrc);
+
+  alsamidisrc->tick = 0;
+  alsamidisrc->port_count = 0;
+
+  ret = init_seq (alsamidisrc);
+  if (ret < 0)
+    goto err;
+
+  if (alsamidisrc->ports) {
+    ret = parse_ports (alsamidisrc->ports, alsamidisrc);
+    if (ret < 0)
+      goto error_seq_close;
+  }
+
+  ret = create_port (alsamidisrc);
+  if (ret < 0)
+    goto error_free_seq_ports;
+
+  connect_ports (alsamidisrc);
+
+  ret = snd_seq_nonblock (alsamidisrc->seq, 1);
+  if (ret < 0) {
+    GST_ERROR_OBJECT (alsamidisrc, "Cannot set nonblock mode - %s",
+        snd_strerror (ret));
+    goto error_free_seq_ports;
+  }
+
+  snd_midi_event_new (DEFAULT_BUFSIZE, &alsamidisrc->parser);
+  snd_midi_event_init (alsamidisrc->parser);
+  snd_midi_event_reset_decode (alsamidisrc->parser);
+
+  snd_midi_event_no_status (alsamidisrc->parser, 1);
+
+  alsamidisrc->buffer = g_try_malloc (DEFAULT_BUFSIZE);
+  if (alsamidisrc->buffer == NULL)
+    goto error_free_parser;
+
+  alsamidisrc->npfds =
+      snd_seq_poll_descriptors_count (alsamidisrc->seq, POLLIN);
+  alsamidisrc->pfds =
+      g_try_malloc (sizeof (*alsamidisrc->pfds) * alsamidisrc->npfds);
+  if (alsamidisrc->pfds == NULL)
+    goto error_free_buffer;
+
+  return TRUE;
+
+error_free_buffer:
+  g_free (alsamidisrc->buffer);
+error_free_parser:
+  snd_midi_event_free (alsamidisrc->parser);
+error_free_seq_ports:
+  g_free (alsamidisrc->seq_ports);
+error_seq_close:
+  snd_seq_close (alsamidisrc->seq);
+err:
+  return FALSE;
+}
+
+static gboolean
+gst_alsa_midi_src_stop (GstBaseSrc * basesrc)
+{
+  GstAlsaMidiSrc *alsamidisrc;
+
+  alsamidisrc = GST_ALSA_MIDI_SRC (basesrc);
+
+  g_free (alsamidisrc->pfds);
+  g_free (alsamidisrc->buffer);
+  snd_midi_event_free (alsamidisrc->parser);
+  g_free (alsamidisrc->seq_ports);
+  snd_seq_close (alsamidisrc->seq);
+
+  return TRUE;
+}
diff --git a/ext/alsa/gstalsamidisrc.h b/ext/alsa/gstalsamidisrc.h
new file mode 100644
index 0000000..d30a0c5
--- /dev/null
+++ b/ext/alsa/gstalsamidisrc.h
@@ -0,0 +1,77 @@
+/* GStreamer
+ * Copyright (C) 2014  Antonio Ospite <ao2@ao2.it>
+ *
+ * gstalsamidisrc.h: Source element for ALSA MIDI sequencer events
+ *
+ * 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_ALSA_MIDI_SRC_H__
+#define __GST_ALSA_MIDI_SRC_H__
+
+#include <gst/gst.h>
+#include <gst/base/gstpushsrc.h>
+
+#include <alsa/asoundlib.h>
+
+G_BEGIN_DECLS
+#define GST_TYPE_ALSA_MIDI_SRC \
+  (gst_alsa_midi_src_get_type())
+#define GST_ALSA_MIDI_SRC(obj) \
+  (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_ALSA_MIDI_SRC,GstAlsaMidiSrc))
+#define GST_ALSA_MIDI_SRC_CLASS(klass) \
+  (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_ALSA_MIDI_SRC,GstAlsaMidiSrcClass))
+#define GST_IS_ALSA_MIDI_SRC(obj) \
+  (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_ALSA_MIDI_SRC))
+#define GST_IS_ALSA_MIDI_SRC_CLASS(klass) \
+  (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_ALSA_MIDI_SRC))
+
+typedef struct _GstAlsaMidiSrc GstAlsaMidiSrc;
+typedef struct _GstAlsaMidiSrcClass GstAlsaMidiSrcClass;
+
+/**
+ * GstAlsaMidiSrc:
+ *
+ * Opaque #GstAlsaMidiSrc data structure.
+ */
+struct _GstAlsaMidiSrc
+{
+  GstPushSrc element;
+
+  gchar *ports;
+
+  /*< private > */
+  snd_seq_t *seq;
+  int port_count;
+  snd_seq_addr_t *seq_ports;
+  snd_midi_event_t *parser;
+  unsigned char *buffer;
+
+  struct pollfd *pfds;
+  int npfds;
+
+  guint64 tick;
+};
+
+struct _GstAlsaMidiSrcClass
+{
+  GstPushSrcClass parent_class;
+};
+
+G_GNUC_INTERNAL GType gst_alsa_midi_src_get_type (void);
+
+G_END_DECLS
+#endif /* __GST_ALSA_MIDI_SRC_H__ */
diff --git a/ext/alsa/gstalsaplugin.c b/ext/alsa/gstalsaplugin.c
index 6a7e42b..6c1a67c 100644
--- a/ext/alsa/gstalsaplugin.c
+++ b/ext/alsa/gstalsaplugin.c
@@ -25,6 +25,7 @@
 
 #include "gstalsasink.h"
 #include "gstalsasrc.h"
+#include "gstalsamidisrc.h"
 
 #include <gst/gst-i18n-plugin.h>
 
@@ -66,6 +67,9 @@
   if (!gst_element_register (plugin, "alsasink", GST_RANK_PRIMARY,
           GST_TYPE_ALSA_SINK))
     return FALSE;
+  if (!gst_element_register (plugin, "alsamidisrc", GST_RANK_PRIMARY,
+          GST_TYPE_ALSA_MIDI_SRC))
+    return FALSE;
 
   GST_DEBUG_CATEGORY_INIT (alsa_debug, "alsa", 0, "alsa plugins");
 
diff --git a/ext/libvisual/Makefile.am b/ext/libvisual/Makefile.am
index a996b8e..73d1e20 100644
--- a/ext/libvisual/Makefile.am
+++ b/ext/libvisual/Makefile.am
@@ -1,12 +1,13 @@
 plugin_LTLIBRARIES = libgstlibvisual.la
 
-libgstlibvisual_la_SOURCES = plugin.c visual.c gstaudiovisualizer.c
+libgstlibvisual_la_SOURCES = plugin.c visual.c
 libgstlibvisual_la_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_BASE_CFLAGS) $(GST_CFLAGS) $(LIBVISUAL_CFLAGS)
 libgstlibvisual_la_LIBADD = \
 	$(top_builddir)/gst-libs/gst/audio/libgstaudio-$(GST_API_VERSION).la \
 	$(top_builddir)/gst-libs/gst/video/libgstvideo-$(GST_API_VERSION).la \
-	$(GST_BASE_LIBS) $(LIBVISUAL_LIBS)
+	$(top_builddir)/gst-libs/gst/pbutils/libgstpbutils-$(GST_API_VERSION).la \
+	$(GST_BASE_LIBS) $(GST_LIBS) $(LIBVISUAL_LIBS)
 libgstlibvisual_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS)
 libgstlibvisual_la_LIBTOOLFLAGS = $(GST_PLUGIN_LIBTOOLFLAGS)
 
-noinst_HEADERS = visual.h gstaudiovisualizer.h
+noinst_HEADERS = visual.h
diff --git a/ext/libvisual/Makefile.in b/ext/libvisual/Makefile.in
index f4c0729..1acc301 100644
--- a/ext/libvisual/Makefile.in
+++ b/ext/libvisual/Makefile.in
@@ -165,10 +165,11 @@
 am__DEPENDENCIES_1 =
 libgstlibvisual_la_DEPENDENCIES = $(top_builddir)/gst-libs/gst/audio/libgstaudio-$(GST_API_VERSION).la \
 	$(top_builddir)/gst-libs/gst/video/libgstvideo-$(GST_API_VERSION).la \
-	$(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1)
+	$(top_builddir)/gst-libs/gst/pbutils/libgstpbutils-$(GST_API_VERSION).la \
+	$(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
+	$(am__DEPENDENCIES_1)
 am_libgstlibvisual_la_OBJECTS = libgstlibvisual_la-plugin.lo \
-	libgstlibvisual_la-visual.lo \
-	libgstlibvisual_la-gstaudiovisualizer.lo
+	libgstlibvisual_la-visual.lo
 libgstlibvisual_la_OBJECTS = $(am_libgstlibvisual_la_OBJECTS)
 AM_V_lt = $(am__v_lt_@AM_V@)
 am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
@@ -536,16 +537,17 @@
 top_builddir = @top_builddir@
 top_srcdir = @top_srcdir@
 plugin_LTLIBRARIES = libgstlibvisual.la
-libgstlibvisual_la_SOURCES = plugin.c visual.c gstaudiovisualizer.c
+libgstlibvisual_la_SOURCES = plugin.c visual.c
 libgstlibvisual_la_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_BASE_CFLAGS) $(GST_CFLAGS) $(LIBVISUAL_CFLAGS)
 libgstlibvisual_la_LIBADD = \
 	$(top_builddir)/gst-libs/gst/audio/libgstaudio-$(GST_API_VERSION).la \
 	$(top_builddir)/gst-libs/gst/video/libgstvideo-$(GST_API_VERSION).la \
-	$(GST_BASE_LIBS) $(LIBVISUAL_LIBS)
+	$(top_builddir)/gst-libs/gst/pbutils/libgstpbutils-$(GST_API_VERSION).la \
+	$(GST_BASE_LIBS) $(GST_LIBS) $(LIBVISUAL_LIBS)
 
 libgstlibvisual_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS)
 libgstlibvisual_la_LIBTOOLFLAGS = $(GST_PLUGIN_LIBTOOLFLAGS)
-noinst_HEADERS = visual.h gstaudiovisualizer.h
+noinst_HEADERS = visual.h
 all: all-am
 
 .SUFFIXES:
@@ -624,7 +626,6 @@
 distclean-compile:
 	-rm -f *.tab.c
 
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstlibvisual_la-gstaudiovisualizer.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstlibvisual_la-plugin.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstlibvisual_la-visual.Plo@am__quote@
 
@@ -666,13 +667,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 $(libgstlibvisual_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstlibvisual_la_CFLAGS) $(CFLAGS) -c -o libgstlibvisual_la-visual.lo `test -f 'visual.c' || echo '$(srcdir)/'`visual.c
 
-libgstlibvisual_la-gstaudiovisualizer.lo: gstaudiovisualizer.c
-@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstlibvisual_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstlibvisual_la_CFLAGS) $(CFLAGS) -MT libgstlibvisual_la-gstaudiovisualizer.lo -MD -MP -MF $(DEPDIR)/libgstlibvisual_la-gstaudiovisualizer.Tpo -c -o libgstlibvisual_la-gstaudiovisualizer.lo `test -f 'gstaudiovisualizer.c' || echo '$(srcdir)/'`gstaudiovisualizer.c
-@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstlibvisual_la-gstaudiovisualizer.Tpo $(DEPDIR)/libgstlibvisual_la-gstaudiovisualizer.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='gstaudiovisualizer.c' object='libgstlibvisual_la-gstaudiovisualizer.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstlibvisual_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstlibvisual_la_CFLAGS) $(CFLAGS) -c -o libgstlibvisual_la-gstaudiovisualizer.lo `test -f 'gstaudiovisualizer.c' || echo '$(srcdir)/'`gstaudiovisualizer.c
-
 mostlyclean-libtool:
 	-rm -f *.lo
 
diff --git a/ext/libvisual/visual.h b/ext/libvisual/visual.h
index 5d8b51c..7ea41af 100644
--- a/ext/libvisual/visual.h
+++ b/ext/libvisual/visual.h
@@ -28,7 +28,7 @@
 #include <gst/audio/audio.h>
 #include <libvisual/libvisual.h>
 
-#include "gstaudiovisualizer.h"
+#include "gst/pbutils/gstaudiovisualizer.h"
 
 G_BEGIN_DECLS
 
diff --git a/ext/ogg/Makefile.am b/ext/ogg/Makefile.am
index 1128141..05d9063 100644
--- a/ext/ogg/Makefile.am
+++ b/ext/ogg/Makefile.am
@@ -30,6 +30,7 @@
 	$(top_builddir)/gst-libs/gst/riff/libgstriff-$(GST_API_VERSION).la \
 	$(top_builddir)/gst-libs/gst/tag/libgsttag-$(GST_API_VERSION).la \
 	$(top_builddir)/gst-libs/gst/pbutils/libgstpbutils-$(GST_API_VERSION).la \
+	$(top_builddir)/gst-libs/gst/audio/libgstaudio-$(GST_API_VERSION).la \
 	$(GST_BASE_LIBS) \
 	$(GST_LIBS) \
 	$(OGG_LIBS)
diff --git a/ext/ogg/Makefile.in b/ext/ogg/Makefile.in
index 155dfce..7c53c3b 100644
--- a/ext/ogg/Makefile.in
+++ b/ext/ogg/Makefile.in
@@ -166,6 +166,7 @@
 libgstogg_la_DEPENDENCIES = $(top_builddir)/gst-libs/gst/riff/libgstriff-$(GST_API_VERSION).la \
 	$(top_builddir)/gst-libs/gst/tag/libgsttag-$(GST_API_VERSION).la \
 	$(top_builddir)/gst-libs/gst/pbutils/libgstpbutils-$(GST_API_VERSION).la \
+	$(top_builddir)/gst-libs/gst/audio/libgstaudio-$(GST_API_VERSION).la \
 	$(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
 	$(am__DEPENDENCIES_1)
 am_libgstogg_la_OBJECTS = libgstogg_la-gstogg.lo \
@@ -570,6 +571,7 @@
 	$(top_builddir)/gst-libs/gst/riff/libgstriff-$(GST_API_VERSION).la \
 	$(top_builddir)/gst-libs/gst/tag/libgsttag-$(GST_API_VERSION).la \
 	$(top_builddir)/gst-libs/gst/pbutils/libgstpbutils-$(GST_API_VERSION).la \
+	$(top_builddir)/gst-libs/gst/audio/libgstaudio-$(GST_API_VERSION).la \
 	$(GST_BASE_LIBS) \
 	$(GST_LIBS) \
 	$(OGG_LIBS)
diff --git a/ext/ogg/gstoggdemux.c b/ext/ogg/gstoggdemux.c
index ee750b2..05cd759 100644
--- a/ext/ogg/gstoggdemux.c
+++ b/ext/ogg/gstoggdemux.c
@@ -41,6 +41,7 @@
 #include <string.h>
 #include <gst/gst-i18n-plugin.h>
 #include <gst/tag/tag.h>
+#include <gst/audio/audio.h>
 
 #include "gstoggdemux.h"
 
@@ -500,6 +501,7 @@
   guint64 out_offset, out_offset_end;
   gboolean delta_unit = FALSE;
   gboolean is_header;
+  guint64 clip_start = 0, clip_end = 0;
 
   ret = cret = GST_FLOW_OK;
   GST_DEBUG_OBJECT (pad, "Chaining %d %d %" GST_TIME_FORMAT " %d %p",
@@ -723,9 +725,29 @@
                 pad->prev_granule);
           else
             out_timestamp = 0;
+
+          if (pad->map.audio_clipping
+              && pad->current_granule < pad->prev_granule + duration) {
+            clip_end = pad->prev_granule + duration - pad->current_granule;
+          }
+          if (pad->map.audio_clipping
+              && pad->current_granule - duration < -pad->map.granule_offset) {
+            if (pad->current_granule >= -pad->map.granule_offset)
+              clip_start = -pad->map.granule_offset;
+            else
+              clip_start = pad->current_granule;
+          }
         } else {
           out_timestamp = gst_ogg_stream_granule_to_time (&pad->map,
               pad->current_granule - duration);
+
+          if (pad->map.audio_clipping
+              && pad->current_granule - duration < -pad->map.granule_offset) {
+            if (pad->current_granule >= -pad->map.granule_offset)
+              clip_start = -pad->map.granule_offset;
+            else
+              clip_start = pad->current_granule;
+          }
         }
         out_duration =
             gst_ogg_stream_granule_to_time (&pad->map,
@@ -751,6 +773,14 @@
 
   buf = gst_buffer_new_and_alloc (packet->bytes - offset - trim);
 
+  if (pad->map.audio_clipping && (clip_start || clip_end)) {
+    GST_DEBUG_OBJECT (pad,
+        "Adding audio clipping %" G_GUINT64_FORMAT " %" G_GUINT64_FORMAT,
+        clip_start, clip_end);
+    gst_buffer_add_audio_clipping_meta (buf, GST_FORMAT_DEFAULT, clip_start,
+        clip_end);
+  }
+
   /* set delta flag for OGM content */
   if (delta_unit)
     GST_BUFFER_FLAG_SET (buf, GST_BUFFER_FLAG_DELTA_UNIT);
@@ -1058,14 +1088,8 @@
 
         if (granule >= pad->map.accumulated_granule)
           start_granule = granule - pad->map.accumulated_granule;
-        else {
-          if (pad->map.forbid_start_clamping) {
-            GST_ERROR_OBJECT (ogg, "Start of stream maps to negative time");
-            return GST_FLOW_ERROR;
-          } else {
-            start_granule = 0;
-          }
-        }
+        else
+          start_granule = 0;
 
         pad->start_time = gst_ogg_stream_granule_to_time (&pad->map,
             start_granule);
@@ -1294,6 +1318,7 @@
       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;
@@ -1537,8 +1562,8 @@
 static float
 gst_ogg_demux_estimate_seek_quality (GstOggDemux * ogg)
 {
-  gint64 diff;                  /* how far from the goal we ended up */
-  gint64 dist;                  /* how far we moved this iteration */
+  GstClockTimeDiff diff;        /* how far from the goal we ended up */
+  GstClockTimeDiff dist;        /* how far we moved this iteration */
   float seek_quality;
 
   if (ogg->push_prev_seek_time == GST_CLOCK_TIME_NONE) {
@@ -1550,18 +1575,18 @@
   /* We take a guess at how good the last seek was at guessing
      the byte target by comparing the amplitude of the last
      seek to the error */
-  diff = ogg->push_seek_time_target - ogg->push_last_seek_time;
+  diff = GST_CLOCK_DIFF (ogg->push_seek_time_target, ogg->push_last_seek_time);
   if (diff < 0)
     diff = -diff;
-  dist = ogg->push_last_seek_time - ogg->push_prev_seek_time;
+  dist = GST_CLOCK_DIFF (ogg->push_last_seek_time, ogg->push_prev_seek_time);
   if (dist < 0)
     dist = -dist;
 
   seek_quality = (dist == 0) ? 0.0f : 1.0f / (1.0f + diff / (float) dist);
 
   GST_DEBUG_OBJECT (ogg,
-      "We moved %" GST_TIME_FORMAT ", we're off by %" GST_TIME_FORMAT
-      ", seek quality %f", GST_TIME_ARGS (dist), GST_TIME_ARGS (diff),
+      "We moved %" GST_STIME_FORMAT ", we're off by %" GST_STIME_FORMAT
+      ", seek quality %f", GST_STIME_ARGS (dist), GST_STIME_ARGS (diff),
       seek_quality);
   return seek_quality;
 }
diff --git a/ext/ogg/gstoggmux.c b/ext/ogg/gstoggmux.c
index b62f125..4e1ce94 100644
--- a/ext/ogg/gstoggmux.c
+++ b/ext/ogg/gstoggmux.c
@@ -39,6 +39,7 @@
 
 #include <gst/gst.h>
 #include <gst/base/gstbytewriter.h>
+#include <gst/audio/audio.h>
 #include <gst/tag/tag.h>
 
 #include "gstoggmux.h"
@@ -806,6 +807,7 @@
   GstClockTimeDiff diff;
   GstMapInfo map;
   ogg_packet packet;
+  gboolean end_clip = TRUE;
 
   /* ensure messing with metadata is ok */
   buf = gst_buffer_make_writable (buf);
@@ -853,20 +855,35 @@
   /* 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;
+  if (pad->map.audio_clipping) {
+    GstAudioClippingMeta *cmeta = gst_buffer_get_audio_clipping_meta (buf);
+
+    g_assert (!cmeta || cmeta->format == GST_FORMAT_DEFAULT);
+    if (cmeta && cmeta->end && cmeta->end < duration) {
+      GST_DEBUG_OBJECT (pad->collect.pad,
+          "Clipping %" G_GUINT64_FORMAT " samples at the end", cmeta->end);
+      duration -= cmeta->end;
+      end_clip = FALSE;
+    }
+  }
+
+  if (end_clip) {
+    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
@@ -887,9 +904,9 @@
   limit = MAX (limit, ogg_mux->max_tolerance);
 
   GST_LOG_OBJECT (pad->collect.pad, "expected granule %" G_GINT64_FORMAT " == "
-      "time %" GST_TIME_FORMAT " --> ts diff %" GST_TIME_FORMAT
+      "time %" GST_TIME_FORMAT " --> ts diff %" GST_STIME_FORMAT
       " < tolerance %" GST_TIME_FORMAT " (?)",
-      granule, GST_TIME_ARGS (next_time), GST_TIME_ARGS (ABS (diff)),
+      granule, GST_TIME_ARGS (next_time), GST_STIME_ARGS (diff),
       GST_TIME_ARGS (limit));
 
 resync:
diff --git a/ext/ogg/gstoggstream.c b/ext/ogg/gstoggstream.c
index d0d50d9..8426e46 100644
--- a/ext/ogg/gstoggstream.c
+++ b/ext/ogg/gstoggstream.c
@@ -1992,6 +1992,8 @@
 static gboolean
 setup_opus_mapper (GstOggStream * pad, ogg_packet * packet)
 {
+  GstBuffer *buffer;
+
   if (packet->bytes < 19)
     return FALSE;
 
@@ -2000,14 +2002,18 @@
   pad->granuleshift = 0;
   pad->n_header_packets = 2;
   pad->first_granpos = -1;
-  pad->forbid_start_clamping = TRUE;
+  pad->audio_clipping = TRUE;
 
   /* pre-skip is in samples at 48000 Hz, which matches granule one for one */
   pad->granule_offset = -GST_READ_UINT16_LE (packet->packet + 10);
   GST_INFO ("Opus has a pre-skip of %" G_GINT64_FORMAT " samples",
       -pad->granule_offset);
 
-  pad->caps = gst_caps_new_empty_simple ("audio/x-opus");
+  buffer =
+      gst_buffer_new_wrapped (g_memdup (packet->packet, packet->bytes),
+      packet->bytes);
+  pad->caps = gst_codec_utils_opus_create_caps_from_header (buffer, NULL);
+  gst_buffer_unref (buffer);
 
   return TRUE;
 }
diff --git a/ext/ogg/gstoggstream.h b/ext/ogg/gstoggstream.h
index 06e2907..d49527f 100644
--- a/ext/ogg/gstoggstream.h
+++ b/ext/ogg/gstoggstream.h
@@ -70,7 +70,7 @@
   gint bitrate;
   guint64 total_time;
   gboolean is_sparse;
-  gboolean forbid_start_clamping;
+  gboolean audio_clipping;
 
   GstCaps *caps;
 
diff --git a/ext/vorbis/gstvorbisdec.c b/ext/vorbis/gstvorbisdec.c
index f679d7e..bc0a20f 100644
--- a/ext/vorbis/gstvorbisdec.c
+++ b/ext/vorbis/gstvorbisdec.c
@@ -78,6 +78,7 @@
 static GstFlowReturn vorbis_dec_handle_frame (GstAudioDecoder * dec,
     GstBuffer * buffer);
 static void vorbis_dec_flush (GstAudioDecoder * dec, gboolean hard);
+static gboolean vorbis_dec_set_format (GstAudioDecoder * dec, GstCaps * caps);
 
 static void
 gst_vorbis_dec_class_init (GstVorbisDecClass * klass)
@@ -102,6 +103,7 @@
 
   base_class->start = GST_DEBUG_FUNCPTR (vorbis_dec_start);
   base_class->stop = GST_DEBUG_FUNCPTR (vorbis_dec_stop);
+  base_class->set_format = GST_DEBUG_FUNCPTR (vorbis_dec_set_format);
   base_class->handle_frame = GST_DEBUG_FUNCPTR (vorbis_dec_handle_frame);
   base_class->flush = GST_DEBUG_FUNCPTR (vorbis_dec_flush);
 }
@@ -632,3 +634,30 @@
   vorbis_synthesis_restart (&vd->vd);
 #endif
 }
+
+static gboolean
+vorbis_dec_set_format (GstAudioDecoder * dec, GstCaps * caps)
+{
+  GstVorbisDec *vd = GST_VORBIS_DEC (dec);
+
+  GST_DEBUG_OBJECT (vd, "New caps %" GST_PTR_FORMAT " - resetting", caps);
+
+  /* A set_format call implies new data with new header packets */
+  if (!vd->initialized)
+    return TRUE;
+
+  vd->initialized = FALSE;
+#ifndef USE_TREMOLO
+  vorbis_block_clear (&vd->vb);
+#endif
+  vorbis_dsp_clear (&vd->vd);
+
+  /* We need to free and re-init these,
+   * or libvorbis chokes */
+  vorbis_comment_clear (&vd->vc);
+  vorbis_info_clear (&vd->vi);
+  vorbis_info_init (&vd->vi);
+  vorbis_comment_init (&vd->vc);
+
+  return TRUE;
+}
diff --git a/gst-libs/gst/allocators/Makefile.am b/gst-libs/gst/allocators/Makefile.am
index 9361bf9..5c11b8a 100644
--- a/gst-libs/gst/allocators/Makefile.am
+++ b/gst-libs/gst/allocators/Makefile.am
@@ -29,7 +29,8 @@
 		GST_PLUGIN_SYSTEM_PATH="" GST_PLUGIN_PATH="" GST_REGISTRY_UPDATE=no \
 		$(INTROSPECTION_SCANNER) -v --namespace GstAllocators \
 		--nsversion=@GST_API_VERSION@ \
-		--strip-prefix=Gst \
+		--identifier-prefix=Gst \
+		--symbol-prefix=gst \
 		--warn-all \
 		--c-include "gst/allocators/allocators.h" \
 		-I$(top_srcdir)/gst-libs \
diff --git a/gst-libs/gst/allocators/Makefile.in b/gst-libs/gst/allocators/Makefile.in
index c08058c..4d0f9b5 100644
--- a/gst-libs/gst/allocators/Makefile.in
+++ b/gst-libs/gst/allocators/Makefile.in
@@ -916,7 +916,8 @@
 @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@ \
-@HAVE_INTROSPECTION_TRUE@		--strip-prefix=Gst \
+@HAVE_INTROSPECTION_TRUE@		--identifier-prefix=Gst \
+@HAVE_INTROSPECTION_TRUE@		--symbol-prefix=gst \
 @HAVE_INTROSPECTION_TRUE@		--warn-all \
 @HAVE_INTROSPECTION_TRUE@		--c-include "gst/allocators/allocators.h" \
 @HAVE_INTROSPECTION_TRUE@		-I$(top_srcdir)/gst-libs \
diff --git a/gst-libs/gst/allocators/gstfdmemory.c b/gst-libs/gst/allocators/gstfdmemory.c
index 3072086..7a7f05b 100644
--- a/gst-libs/gst/allocators/gstfdmemory.c
+++ b/gst-libs/gst/allocators/gstfdmemory.c
@@ -37,6 +37,9 @@
 #include <unistd.h>
 #endif
 
+GST_DEBUG_CATEGORY_STATIC (gst_fdmemory_debug);
+#define GST_CAT_DEFAULT gst_fdmemory_debug
+
 typedef struct
 {
   GstMemory mem;
@@ -197,6 +200,8 @@
   allocator_class->alloc = NULL;
   allocator_class->free = gst_fd_mem_free;
 
+  GST_DEBUG_CATEGORY_INIT (gst_fdmemory_debug, "fdmemory", 0,
+    "GstFdMemory and GstFdAllocator");
 }
 
 static void
diff --git a/gst-libs/gst/allocators/gstfdmemory.h b/gst-libs/gst/allocators/gstfdmemory.h
index e2da2d7..75efae2 100644
--- a/gst-libs/gst/allocators/gstfdmemory.h
+++ b/gst-libs/gst/allocators/gstfdmemory.h
@@ -82,6 +82,10 @@
 gboolean        gst_is_fd_memory        (GstMemory *mem);
 gint            gst_fd_memory_get_fd    (GstMemory *mem);
 
+#ifdef G_DEFINE_AUTOPTR_CLEANUP_FUNC
+G_DEFINE_AUTOPTR_CLEANUP_FUNC(GstFdAllocator, gst_object_unref)
+#endif
+
 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 6d6de8d..1555841 100644
--- a/gst-libs/gst/app/Makefile.am
+++ b/gst-libs/gst/app/Makefile.am
@@ -42,7 +42,8 @@
 		GST_PLUGIN_SYSTEM_PATH_1_0="" GST_PLUGIN_PATH_1_0="" GST_REGISTRY_UPDATE=no \
 		$(INTROSPECTION_SCANNER) -v --namespace GstApp \
 		--nsversion=@GST_API_VERSION@ \
-		--strip-prefix=Gst \
+		--identifier-prefix=Gst \
+		--symbol-prefix=gst \
 		--warn-all \
 		--c-include "gst/app/app.h" \
 		-I$(top_srcdir)/gst-libs \
diff --git a/gst-libs/gst/app/Makefile.in b/gst-libs/gst/app/Makefile.in
index 4fe596f..d7ec9f9 100644
--- a/gst-libs/gst/app/Makefile.in
+++ b/gst-libs/gst/app/Makefile.in
@@ -987,7 +987,8 @@
 @HAVE_INTROSPECTION_TRUE@		GST_PLUGIN_SYSTEM_PATH_1_0="" GST_PLUGIN_PATH_1_0="" GST_REGISTRY_UPDATE=no \
 @HAVE_INTROSPECTION_TRUE@		$(INTROSPECTION_SCANNER) -v --namespace GstApp \
 @HAVE_INTROSPECTION_TRUE@		--nsversion=@GST_API_VERSION@ \
-@HAVE_INTROSPECTION_TRUE@		--strip-prefix=Gst \
+@HAVE_INTROSPECTION_TRUE@		--identifier-prefix=Gst \
+@HAVE_INTROSPECTION_TRUE@		--symbol-prefix=gst \
 @HAVE_INTROSPECTION_TRUE@		--warn-all \
 @HAVE_INTROSPECTION_TRUE@		--c-include "gst/app/app.h" \
 @HAVE_INTROSPECTION_TRUE@		-I$(top_srcdir)/gst-libs \
diff --git a/gst-libs/gst/app/gstappsink.h b/gst-libs/gst/app/gstappsink.h
index 4e84858..05c2b13 100644
--- a/gst-libs/gst/app/gstappsink.h
+++ b/gst-libs/gst/app/gstappsink.h
@@ -123,6 +123,10 @@
                                                gpointer user_data,
                                                GDestroyNotify notify);
 
+#ifdef G_DEFINE_AUTOPTR_CLEANUP_FUNC
+G_DEFINE_AUTOPTR_CLEANUP_FUNC(GstAppSink, gst_object_unref)
+#endif
+
 G_END_DECLS
 
 #endif
diff --git a/gst-libs/gst/app/gstappsrc.c b/gst-libs/gst/app/gstappsrc.c
index e540cf4..4f15e77 100644
--- a/gst-libs/gst/app/gstappsrc.c
+++ b/gst-libs/gst/app/gstappsrc.c
@@ -237,6 +237,7 @@
 static gboolean gst_app_src_is_seekable (GstBaseSrc * src);
 static gboolean gst_app_src_do_get_size (GstBaseSrc * src, guint64 * size);
 static gboolean gst_app_src_query (GstBaseSrc * src, GstQuery * query);
+static gboolean gst_app_src_event (GstBaseSrc * src, GstEvent * event);
 
 static GstFlowReturn gst_app_src_push_buffer_action (GstAppSrc * appsrc,
     GstBuffer * buffer);
@@ -528,6 +529,7 @@
   basesrc_class->is_seekable = gst_app_src_is_seekable;
   basesrc_class->get_size = gst_app_src_do_get_size;
   basesrc_class->query = gst_app_src_query;
+  basesrc_class->event = gst_app_src_event;
 
   klass->push_buffer = gst_app_src_push_buffer_action;
   klass->push_sample = gst_app_src_push_sample_action;
@@ -926,6 +928,18 @@
       res = TRUE;
       break;
     }
+    case GST_QUERY_DURATION:
+    {
+      GstFormat format;
+      gst_query_parse_duration (query, &format, NULL);
+      if (format == GST_FORMAT_BYTES) {
+        gst_query_set_duration (query, format, priv->size);
+        res = TRUE;
+      } else {
+        res = FALSE;
+      }
+      break;
+    }
     default:
       res = GST_BASE_SRC_CLASS (parent_class)->query (src, query);
       break;
@@ -1904,3 +1918,22 @@
   iface->get_uri = gst_app_src_uri_get_uri;
   iface->set_uri = gst_app_src_uri_set_uri;
 }
+
+static gboolean
+gst_app_src_event (GstBaseSrc * src, GstEvent * event)
+{
+  GstAppSrc *appsrc = GST_APP_SRC_CAST (src);
+  GstAppSrcPrivate *priv = appsrc->priv;
+
+  switch (GST_EVENT_TYPE (event)) {
+    case GST_EVENT_FLUSH_STOP:
+      g_mutex_lock (&priv->mutex);
+      priv->is_eos = FALSE;
+      g_mutex_unlock (&priv->mutex);
+      break;
+    default:
+      break;
+  }
+
+  return GST_BASE_SRC_CLASS (parent_class)->event (src, event);
+}
diff --git a/gst-libs/gst/app/gstappsrc.h b/gst-libs/gst/app/gstappsrc.h
index 783b10c..d37edae 100644
--- a/gst-libs/gst/app/gstappsrc.h
+++ b/gst-libs/gst/app/gstappsrc.h
@@ -150,6 +150,10 @@
                                                       gpointer user_data,
                                                       GDestroyNotify notify);
 
+#ifdef G_DEFINE_AUTOPTR_CLEANUP_FUNC
+G_DEFINE_AUTOPTR_CLEANUP_FUNC(GstAppSrc, gst_object_unref)
+#endif
+
 G_END_DECLS
 
 #endif
diff --git a/gst-libs/gst/audio/Makefile.am b/gst-libs/gst/audio/Makefile.am
index 275d222..b858d6e 100644
--- a/gst-libs/gst/audio/Makefile.am
+++ b/gst-libs/gst/audio/Makefile.am
@@ -6,7 +6,10 @@
 	audio.h			\
 	audio-format.h			\
 	audio-channels.h			\
+	audio-channel-mix.h			\
+	audio-converter.h 	\
 	audio-info.h			\
+	audio-quantize.h			\
 	gstaudioringbuffer.h
 
 glib_enum_define = GST_AUDIO
@@ -26,7 +29,10 @@
 	audio.c \
 	audio-format.c \
 	audio-channels.c \
+	audio-channel-mix.c \
+	audio-converter.c \
 	audio-info.c \
+	audio-quantize.c \
 	gstaudioringbuffer.c \
 	gstaudioclock.c \
 	gstaudiocdsrc.c \
@@ -49,7 +55,10 @@
 	audio.h \
 	audio-format.h \
 	audio-channels.h \
+	audio-channel-mix.h \
+	audio-converter.h \
 	audio-info.h \
+	audio-quantize.h \
 	gstaudioringbuffer.h \
 	gstaudioclock.h \
 	gstaudiofilter.h \
@@ -92,7 +101,8 @@
 		$(INTROSPECTION_SCANNER) -v --namespace GstAudio \
 		--nsversion=@GST_API_VERSION@ \
 		--warn-all \
-		--strip-prefix=Gst \
+		--identifier-prefix=Gst \
+		--symbol-prefix=gst \
 		-I$(top_srcdir)/gst-libs \
 		-I$(top_builddir)/gst-libs \
 		--c-include "gst/audio/audio.h" \
diff --git a/gst-libs/gst/audio/Makefile.in b/gst-libs/gst/audio/Makefile.in
index 8da962c..14e8f71 100644
--- a/gst-libs/gst/audio/Makefile.in
+++ b/gst-libs/gst/audio/Makefile.in
@@ -206,7 +206,10 @@
 	libgstaudio_@GST_API_VERSION@_la-audio.lo \
 	libgstaudio_@GST_API_VERSION@_la-audio-format.lo \
 	libgstaudio_@GST_API_VERSION@_la-audio-channels.lo \
+	libgstaudio_@GST_API_VERSION@_la-audio-channel-mix.lo \
+	libgstaudio_@GST_API_VERSION@_la-audio-converter.lo \
 	libgstaudio_@GST_API_VERSION@_la-audio-info.lo \
+	libgstaudio_@GST_API_VERSION@_la-audio-quantize.lo \
 	libgstaudio_@GST_API_VERSION@_la-gstaudioringbuffer.lo \
 	libgstaudio_@GST_API_VERSION@_la-gstaudioclock.lo \
 	libgstaudio_@GST_API_VERSION@_la-gstaudiocdsrc.lo \
@@ -617,7 +620,10 @@
 	audio.h			\
 	audio-format.h			\
 	audio-channels.h			\
+	audio-channel-mix.h			\
+	audio-converter.h 	\
 	audio-info.h			\
+	audio-quantize.h			\
 	gstaudioringbuffer.h
 
 glib_enum_define = GST_AUDIO
@@ -633,7 +639,10 @@
 	audio.c \
 	audio-format.c \
 	audio-channels.c \
+	audio-channel-mix.c \
+	audio-converter.c \
 	audio-info.c \
+	audio-quantize.c \
 	gstaudioringbuffer.c \
 	gstaudioclock.c \
 	gstaudiocdsrc.c \
@@ -655,7 +664,10 @@
 	audio.h \
 	audio-format.h \
 	audio-channels.h \
+	audio-channel-mix.h \
+	audio-converter.h \
 	audio-info.h \
+	audio-quantize.h \
 	gstaudioringbuffer.h \
 	gstaudioclock.h \
 	gstaudiofilter.h \
@@ -779,10 +791,13 @@
 distclean-compile:
 	-rm -f *.tab.c
 
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstaudio_@GST_API_VERSION@_la-audio-channel-mix.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstaudio_@GST_API_VERSION@_la-audio-channels.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstaudio_@GST_API_VERSION@_la-audio-converter.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstaudio_@GST_API_VERSION@_la-audio-enumtypes.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstaudio_@GST_API_VERSION@_la-audio-format.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstaudio_@GST_API_VERSION@_la-audio-info.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstaudio_@GST_API_VERSION@_la-audio-quantize.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstaudio_@GST_API_VERSION@_la-audio.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstaudio_@GST_API_VERSION@_la-gstaudiobasesink.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstaudio_@GST_API_VERSION@_la-gstaudiobasesrc.Plo@am__quote@
@@ -845,6 +860,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) $(libgstaudio_@GST_API_VERSION@_la_CFLAGS) $(CFLAGS) -c -o libgstaudio_@GST_API_VERSION@_la-audio-channels.lo `test -f 'audio-channels.c' || echo '$(srcdir)/'`audio-channels.c
 
+libgstaudio_@GST_API_VERSION@_la-audio-channel-mix.lo: audio-channel-mix.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-audio-channel-mix.lo -MD -MP -MF $(DEPDIR)/libgstaudio_@GST_API_VERSION@_la-audio-channel-mix.Tpo -c -o libgstaudio_@GST_API_VERSION@_la-audio-channel-mix.lo `test -f 'audio-channel-mix.c' || echo '$(srcdir)/'`audio-channel-mix.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstaudio_@GST_API_VERSION@_la-audio-channel-mix.Tpo $(DEPDIR)/libgstaudio_@GST_API_VERSION@_la-audio-channel-mix.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='audio-channel-mix.c' object='libgstaudio_@GST_API_VERSION@_la-audio-channel-mix.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-audio-channel-mix.lo `test -f 'audio-channel-mix.c' || echo '$(srcdir)/'`audio-channel-mix.c
+
+libgstaudio_@GST_API_VERSION@_la-audio-converter.lo: audio-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) $(libgstaudio_@GST_API_VERSION@_la_CFLAGS) $(CFLAGS) -MT libgstaudio_@GST_API_VERSION@_la-audio-converter.lo -MD -MP -MF $(DEPDIR)/libgstaudio_@GST_API_VERSION@_la-audio-converter.Tpo -c -o libgstaudio_@GST_API_VERSION@_la-audio-converter.lo `test -f 'audio-converter.c' || echo '$(srcdir)/'`audio-converter.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstaudio_@GST_API_VERSION@_la-audio-converter.Tpo $(DEPDIR)/libgstaudio_@GST_API_VERSION@_la-audio-converter.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='audio-converter.c' object='libgstaudio_@GST_API_VERSION@_la-audio-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) $(libgstaudio_@GST_API_VERSION@_la_CFLAGS) $(CFLAGS) -c -o libgstaudio_@GST_API_VERSION@_la-audio-converter.lo `test -f 'audio-converter.c' || echo '$(srcdir)/'`audio-converter.c
+
 libgstaudio_@GST_API_VERSION@_la-audio-info.lo: audio-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) $(libgstaudio_@GST_API_VERSION@_la_CFLAGS) $(CFLAGS) -MT libgstaudio_@GST_API_VERSION@_la-audio-info.lo -MD -MP -MF $(DEPDIR)/libgstaudio_@GST_API_VERSION@_la-audio-info.Tpo -c -o libgstaudio_@GST_API_VERSION@_la-audio-info.lo `test -f 'audio-info.c' || echo '$(srcdir)/'`audio-info.c
 @am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstaudio_@GST_API_VERSION@_la-audio-info.Tpo $(DEPDIR)/libgstaudio_@GST_API_VERSION@_la-audio-info.Plo
@@ -852,6 +881,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-audio-info.lo `test -f 'audio-info.c' || echo '$(srcdir)/'`audio-info.c
 
+libgstaudio_@GST_API_VERSION@_la-audio-quantize.lo: audio-quantize.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-audio-quantize.lo -MD -MP -MF $(DEPDIR)/libgstaudio_@GST_API_VERSION@_la-audio-quantize.Tpo -c -o libgstaudio_@GST_API_VERSION@_la-audio-quantize.lo `test -f 'audio-quantize.c' || echo '$(srcdir)/'`audio-quantize.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstaudio_@GST_API_VERSION@_la-audio-quantize.Tpo $(DEPDIR)/libgstaudio_@GST_API_VERSION@_la-audio-quantize.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='audio-quantize.c' object='libgstaudio_@GST_API_VERSION@_la-audio-quantize.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-audio-quantize.lo `test -f 'audio-quantize.c' || echo '$(srcdir)/'`audio-quantize.c
+
 libgstaudio_@GST_API_VERSION@_la-gstaudioringbuffer.lo: gstaudioringbuffer.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-gstaudioringbuffer.lo -MD -MP -MF $(DEPDIR)/libgstaudio_@GST_API_VERSION@_la-gstaudioringbuffer.Tpo -c -o libgstaudio_@GST_API_VERSION@_la-gstaudioringbuffer.lo `test -f 'gstaudioringbuffer.c' || echo '$(srcdir)/'`gstaudioringbuffer.c
 @am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstaudio_@GST_API_VERSION@_la-gstaudioringbuffer.Tpo $(DEPDIR)/libgstaudio_@GST_API_VERSION@_la-gstaudioringbuffer.Plo
@@ -1363,7 +1399,8 @@
 @HAVE_INTROSPECTION_TRUE@		$(INTROSPECTION_SCANNER) -v --namespace GstAudio \
 @HAVE_INTROSPECTION_TRUE@		--nsversion=@GST_API_VERSION@ \
 @HAVE_INTROSPECTION_TRUE@		--warn-all \
-@HAVE_INTROSPECTION_TRUE@		--strip-prefix=Gst \
+@HAVE_INTROSPECTION_TRUE@		--identifier-prefix=Gst \
+@HAVE_INTROSPECTION_TRUE@		--symbol-prefix=gst \
 @HAVE_INTROSPECTION_TRUE@		-I$(top_srcdir)/gst-libs \
 @HAVE_INTROSPECTION_TRUE@		-I$(top_builddir)/gst-libs \
 @HAVE_INTROSPECTION_TRUE@		--c-include "gst/audio/audio.h" \
diff --git a/gst-libs/gst/audio/audio-channel-mix.c b/gst-libs/gst/audio/audio-channel-mix.c
new file mode 100644
index 0000000..e7a8d29
--- /dev/null
+++ b/gst-libs/gst/audio/audio-channel-mix.c
@@ -0,0 +1,906 @@
+/* GStreamer
+ * Copyright (C) 2004 Ronald Bultje <rbultje@ronald.bitfreak.net>
+ * Copyright (C) 2008 Sebastian Dröge <slomo@circular-chaos.org>
+ *
+ * audio-channel-mix.c: setup of channel conversion matrices
+ *
+ * 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 <math.h>
+#include <string.h>
+
+#include "audio-channel-mix.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 ("audio-channel-mix", 0,
+        "audio-channel-mix 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 INT_MATRIX_FACTOR_EXPONENT 10
+
+typedef void (*MixFunc) (GstAudioChannelMix * mix, const gpointer src,
+    gpointer dst, gint samples);
+
+struct _GstAudioChannelMix
+{
+  GstAudioChannelMixFlags flags;
+  GstAudioFormat format;
+
+  gint in_channels;
+  gint out_channels;
+
+  GstAudioChannelPosition in_position[64];
+  GstAudioChannelPosition out_position[64];
+
+  /* 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;
+
+  MixFunc func;
+
+  gpointer tmp;
+};
+
+/**
+ * gst_audio_channel_mix_free:
+ * @mix: a #GstAudioChannelMix
+ *
+ * Free memory allocated by @mix.
+ */
+void
+gst_audio_channel_mix_free (GstAudioChannelMix * mix)
+{
+  gint i;
+
+  /* free */
+  for (i = 0; i < mix->in_channels; i++)
+    g_free (mix->matrix[i]);
+  g_free (mix->matrix);
+  mix->matrix = NULL;
+
+  for (i = 0; i < mix->in_channels; i++)
+    g_free (mix->matrix_int[i]);
+  g_free (mix->matrix_int);
+  mix->matrix_int = NULL;
+
+  g_free (mix->tmp);
+  mix->tmp = NULL;
+
+  g_slice_free (GstAudioChannelMix, mix);
+}
+
+/*
+ * Detect and fill in identical channels. E.g.
+ * forward the left/right front channels in a
+ * 5.1 to 2.0 conversion.
+ */
+
+static void
+gst_audio_channel_mix_fill_identical (GstAudioChannelMix * mix)
+{
+  gint ci, co;
+
+  /* Apart from the compatible channel assignments, we can also have
+   * same channel assignments. This is much simpler, we simply copy
+   * the value from source to dest! */
+  for (co = 0; co < mix->out_channels; co++) {
+    /* find a channel in input with same position */
+    for (ci = 0; ci < mix->in_channels; ci++) {
+      if (mix->in_position[ci] == mix->out_position[co]) {
+        mix->matrix[ci][co] = 1.0;
+      }
+    }
+  }
+}
+
+/*
+ * Detect and fill in compatible channels. E.g.
+ * forward left/right front to mono (or the other
+ * way around) when going from 2.0 to 1.0.
+ */
+
+static void
+gst_audio_channel_mix_fill_compatible (GstAudioChannelMix * mix)
+{
+  /* Conversions from one-channel to compatible two-channel configs */
+  struct
+  {
+    GstAudioChannelPosition pos1[2];
+    GstAudioChannelPosition pos2[1];
+  } conv[] = {
+    /* front: mono <-> stereo */
+    { {
+    GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT,
+            GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT}, {
+    GST_AUDIO_CHANNEL_POSITION_MONO}},
+        /* front center: 2 <-> 1 */
+    { {
+    GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT_OF_CENTER,
+            GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT_OF_CENTER}, {
+    GST_AUDIO_CHANNEL_POSITION_FRONT_CENTER}},
+        /* rear: 2 <-> 1 */
+    { {
+    GST_AUDIO_CHANNEL_POSITION_REAR_LEFT,
+            GST_AUDIO_CHANNEL_POSITION_REAR_RIGHT}, {
+    GST_AUDIO_CHANNEL_POSITION_REAR_CENTER}}, { {
+    GST_AUDIO_CHANNEL_POSITION_INVALID}}
+  };
+  gint c;
+
+  /* conversions from compatible (but not the same) channel schemes */
+  for (c = 0; conv[c].pos1[0] != GST_AUDIO_CHANNEL_POSITION_INVALID; c++) {
+    gint pos1_0 = -1, pos1_1 = -1, pos1_2 = -1;
+    gint pos2_0 = -1, pos2_1 = -1, pos2_2 = -1;
+    gint n;
+
+    for (n = 0; n < mix->in_channels; n++) {
+      if (mix->in_position[n] == conv[c].pos1[0])
+        pos1_0 = n;
+      else if (mix->in_position[n] == conv[c].pos1[1])
+        pos1_1 = n;
+      else if (mix->in_position[n] == conv[c].pos2[0])
+        pos1_2 = n;
+    }
+    for (n = 0; n < mix->out_channels; n++) {
+      if (mix->out_position[n] == conv[c].pos1[0])
+        pos2_0 = n;
+      else if (mix->out_position[n] == conv[c].pos1[1])
+        pos2_1 = n;
+      else if (mix->out_position[n] == conv[c].pos2[0])
+        pos2_2 = n;
+    }
+
+    /* The general idea here is to fill in channels from the same position
+     * as good as possible. This means mixing left<->center and right<->center.
+     */
+
+    /* left -> center */
+    if (pos1_0 != -1 && pos1_2 == -1 && pos2_0 == -1 && pos2_2 != -1)
+      mix->matrix[pos1_0][pos2_2] = 1.0;
+    else if (pos1_0 != -1 && pos1_2 != -1 && pos2_0 == -1 && pos2_2 != -1)
+      mix->matrix[pos1_0][pos2_2] = 0.5;
+    else if (pos1_0 != -1 && pos1_2 == -1 && pos2_0 != -1 && pos2_2 != -1)
+      mix->matrix[pos1_0][pos2_2] = 1.0;
+
+    /* right -> center */
+    if (pos1_1 != -1 && pos1_2 == -1 && pos2_1 == -1 && pos2_2 != -1)
+      mix->matrix[pos1_1][pos2_2] = 1.0;
+    else if (pos1_1 != -1 && pos1_2 != -1 && pos2_1 == -1 && pos2_2 != -1)
+      mix->matrix[pos1_1][pos2_2] = 0.5;
+    else if (pos1_1 != -1 && pos1_2 == -1 && pos2_1 != -1 && pos2_2 != -1)
+      mix->matrix[pos1_1][pos2_2] = 1.0;
+
+    /* center -> left */
+    if (pos1_2 != -1 && pos1_0 == -1 && pos2_2 == -1 && pos2_0 != -1)
+      mix->matrix[pos1_2][pos2_0] = 1.0;
+    else if (pos1_2 != -1 && pos1_0 != -1 && pos2_2 == -1 && pos2_0 != -1)
+      mix->matrix[pos1_2][pos2_0] = 0.5;
+    else if (pos1_2 != -1 && pos1_0 == -1 && pos2_2 != -1 && pos2_0 != -1)
+      mix->matrix[pos1_2][pos2_0] = 1.0;
+
+    /* center -> right */
+    if (pos1_2 != -1 && pos1_1 == -1 && pos2_2 == -1 && pos2_1 != -1)
+      mix->matrix[pos1_2][pos2_1] = 1.0;
+    else if (pos1_2 != -1 && pos1_1 != -1 && pos2_2 == -1 && pos2_1 != -1)
+      mix->matrix[pos1_2][pos2_1] = 0.5;
+    else if (pos1_2 != -1 && pos1_1 == -1 && pos2_2 != -1 && pos2_1 != -1)
+      mix->matrix[pos1_2][pos2_1] = 1.0;
+  }
+}
+
+/*
+ * Detect and fill in channels not handled by the
+ * above two, e.g. center to left/right front in
+ * 5.1 to 2.0 (or the other way around).
+ *
+ * Unfortunately, limited to static conversions
+ * for now.
+ */
+
+static void
+gst_audio_channel_mix_detect_pos (gint channels,
+    GstAudioChannelPosition position[64], gint * f, gboolean * has_f, gint * c,
+    gboolean * has_c, gint * r, gboolean * has_r, gint * s, gboolean * has_s,
+    gint * b, gboolean * has_b)
+{
+  gint n;
+
+  for (n = 0; n < channels; n++) {
+    switch (position[n]) {
+      case GST_AUDIO_CHANNEL_POSITION_MONO:
+        f[1] = n;
+        *has_f = TRUE;
+        break;
+      case GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT:
+        f[0] = n;
+        *has_f = TRUE;
+        break;
+      case GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT:
+        f[2] = n;
+        *has_f = TRUE;
+        break;
+      case GST_AUDIO_CHANNEL_POSITION_FRONT_CENTER:
+        c[1] = n;
+        *has_c = TRUE;
+        break;
+      case GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT_OF_CENTER:
+        c[0] = n;
+        *has_c = TRUE;
+        break;
+      case GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT_OF_CENTER:
+        c[2] = n;
+        *has_c = TRUE;
+        break;
+      case GST_AUDIO_CHANNEL_POSITION_REAR_CENTER:
+        r[1] = n;
+        *has_r = TRUE;
+        break;
+      case GST_AUDIO_CHANNEL_POSITION_REAR_LEFT:
+        r[0] = n;
+        *has_r = TRUE;
+        break;
+      case GST_AUDIO_CHANNEL_POSITION_REAR_RIGHT:
+        r[2] = n;
+        *has_r = TRUE;
+        break;
+      case GST_AUDIO_CHANNEL_POSITION_SIDE_LEFT:
+        s[0] = n;
+        *has_s = TRUE;
+        break;
+      case GST_AUDIO_CHANNEL_POSITION_SIDE_RIGHT:
+        s[2] = n;
+        *has_s = TRUE;
+        break;
+      case GST_AUDIO_CHANNEL_POSITION_LFE1:
+        *has_b = TRUE;
+        b[1] = n;
+        break;
+      default:
+        break;
+    }
+  }
+}
+
+static void
+gst_audio_channel_mix_fill_one_other (gfloat ** matrix,
+    gint * from_idx, gint * to_idx, gfloat ratio)
+{
+
+  /* src & dst have center => passthrough */
+  if (from_idx[1] != -1 && to_idx[1] != -1) {
+    matrix[from_idx[1]][to_idx[1]] = ratio;
+  }
+
+  /* src & dst have left => passthrough */
+  if (from_idx[0] != -1 && to_idx[0] != -1) {
+    matrix[from_idx[0]][to_idx[0]] = ratio;
+  }
+
+  /* src & dst have right => passthrough */
+  if (from_idx[2] != -1 && to_idx[2] != -1) {
+    matrix[from_idx[2]][to_idx[2]] = ratio;
+  }
+
+  /* src has left & dst has center => put into center */
+  if (from_idx[0] != -1 && to_idx[1] != -1 && from_idx[1] != -1) {
+    matrix[from_idx[0]][to_idx[1]] = 0.5 * ratio;
+  } else if (from_idx[0] != -1 && to_idx[1] != -1 && from_idx[1] == -1) {
+    matrix[from_idx[0]][to_idx[1]] = ratio;
+  }
+
+  /* src has right & dst has center => put into center */
+  if (from_idx[2] != -1 && to_idx[1] != -1 && from_idx[1] != -1) {
+    matrix[from_idx[2]][to_idx[1]] = 0.5 * ratio;
+  } else if (from_idx[2] != -1 && to_idx[1] != -1 && from_idx[1] == -1) {
+    matrix[from_idx[2]][to_idx[1]] = ratio;
+  }
+
+  /* src has center & dst has left => passthrough */
+  if (from_idx[1] != -1 && to_idx[0] != -1 && from_idx[0] != -1) {
+    matrix[from_idx[1]][to_idx[0]] = 0.5 * ratio;
+  } else if (from_idx[1] != -1 && to_idx[0] != -1 && from_idx[0] == -1) {
+    matrix[from_idx[1]][to_idx[0]] = ratio;
+  }
+
+  /* src has center & dst has right => passthrough */
+  if (from_idx[1] != -1 && to_idx[2] != -1 && from_idx[2] != -1) {
+    matrix[from_idx[1]][to_idx[2]] = 0.5 * ratio;
+  } else if (from_idx[1] != -1 && to_idx[2] != -1 && from_idx[2] == -1) {
+    matrix[from_idx[1]][to_idx[2]] = ratio;
+  }
+}
+
+#define RATIO_CENTER_FRONT (1.0 / sqrt (2.0))
+#define RATIO_CENTER_SIDE (1.0 / 2.0)
+#define RATIO_CENTER_REAR (1.0 / sqrt (8.0))
+
+#define RATIO_FRONT_CENTER (1.0 / sqrt (2.0))
+#define RATIO_FRONT_SIDE (1.0 / sqrt (2.0))
+#define RATIO_FRONT_REAR (1.0 / 2.0)
+
+#define RATIO_SIDE_CENTER (1.0 / 2.0)
+#define RATIO_SIDE_FRONT (1.0 / sqrt (2.0))
+#define RATIO_SIDE_REAR (1.0 / sqrt (2.0))
+
+#define RATIO_CENTER_BASS (1.0 / sqrt (2.0))
+#define RATIO_FRONT_BASS (1.0)
+#define RATIO_SIDE_BASS (1.0 / sqrt (2.0))
+#define RATIO_REAR_BASS (1.0 / sqrt (2.0))
+
+static void
+gst_audio_channel_mix_fill_others (GstAudioChannelMix * mix)
+{
+  gboolean in_has_front = FALSE, out_has_front = FALSE,
+      in_has_center = FALSE, out_has_center = FALSE,
+      in_has_rear = FALSE, out_has_rear = FALSE,
+      in_has_side = FALSE, out_has_side = FALSE,
+      in_has_bass = FALSE, out_has_bass = FALSE;
+  /* LEFT, RIGHT, MONO */
+  gint in_f[3] = { -1, -1, -1 };
+  gint out_f[3] = { -1, -1, -1 };
+  /* LOC, ROC, CENTER */
+  gint in_c[3] = { -1, -1, -1 };
+  gint out_c[3] = { -1, -1, -1 };
+  /* RLEFT, RRIGHT, RCENTER */
+  gint in_r[3] = { -1, -1, -1 };
+  gint out_r[3] = { -1, -1, -1 };
+  /* SLEFT, INVALID, SRIGHT */
+  gint in_s[3] = { -1, -1, -1 };
+  gint out_s[3] = { -1, -1, -1 };
+  /* INVALID, LFE, INVALID */
+  gint in_b[3] = { -1, -1, -1 };
+  gint out_b[3] = { -1, -1, -1 };
+
+  /* First see where (if at all) the various channels from/to
+   * which we want to convert are located in our matrix/array. */
+  gst_audio_channel_mix_detect_pos (mix->in_channels, mix->in_position,
+      in_f, &in_has_front,
+      in_c, &in_has_center, in_r, &in_has_rear,
+      in_s, &in_has_side, in_b, &in_has_bass);
+  gst_audio_channel_mix_detect_pos (mix->out_channels, mix->out_position,
+      out_f, &out_has_front,
+      out_c, &out_has_center, out_r, &out_has_rear,
+      out_s, &out_has_side, out_b, &out_has_bass);
+
+  /* The general idea here is:
+   * - if the source has a channel that the destination doesn't have mix
+   *   it into the nearest available destination channel
+   * - if the destination has a channel that the source doesn't have mix
+   *   the nearest source channel into the destination channel
+   *
+   * The ratio for the mixing becomes lower as the distance between the
+   * channels gets larger
+   */
+
+  /* center <-> front/side/rear */
+  if (!in_has_center && in_has_front && out_has_center) {
+    gst_audio_channel_mix_fill_one_other (mix->matrix, in_f, out_c,
+        RATIO_CENTER_FRONT);
+  } else if (!in_has_center && !in_has_front && in_has_side && out_has_center) {
+    gst_audio_channel_mix_fill_one_other (mix->matrix, in_s, out_c,
+        RATIO_CENTER_SIDE);
+  } else if (!in_has_center && !in_has_front && !in_has_side && in_has_rear
+      && out_has_center) {
+    gst_audio_channel_mix_fill_one_other (mix->matrix, in_r, out_c,
+        RATIO_CENTER_REAR);
+  } else if (in_has_center && !out_has_center && out_has_front) {
+    gst_audio_channel_mix_fill_one_other (mix->matrix, in_c, out_f,
+        RATIO_CENTER_FRONT);
+  } else if (in_has_center && !out_has_center && !out_has_front && out_has_side) {
+    gst_audio_channel_mix_fill_one_other (mix->matrix, in_c, out_s,
+        RATIO_CENTER_SIDE);
+  } else if (in_has_center && !out_has_center && !out_has_front && !out_has_side
+      && out_has_rear) {
+    gst_audio_channel_mix_fill_one_other (mix->matrix, in_c, out_r,
+        RATIO_CENTER_REAR);
+  }
+
+  /* front <-> center/side/rear */
+  if (!in_has_front && in_has_center && !in_has_side && out_has_front) {
+    gst_audio_channel_mix_fill_one_other (mix->matrix, in_c, out_f,
+        RATIO_CENTER_FRONT);
+  } else if (!in_has_front && !in_has_center && in_has_side && out_has_front) {
+    gst_audio_channel_mix_fill_one_other (mix->matrix, in_s, out_f,
+        RATIO_FRONT_SIDE);
+  } else if (!in_has_front && in_has_center && in_has_side && out_has_front) {
+    gst_audio_channel_mix_fill_one_other (mix->matrix, in_c, out_f,
+        0.5 * RATIO_CENTER_FRONT);
+    gst_audio_channel_mix_fill_one_other (mix->matrix, in_s, out_f,
+        0.5 * RATIO_FRONT_SIDE);
+  } else if (!in_has_front && !in_has_center && !in_has_side && in_has_rear
+      && out_has_front) {
+    gst_audio_channel_mix_fill_one_other (mix->matrix, in_r, out_f,
+        RATIO_FRONT_REAR);
+  } else if (in_has_front && out_has_center && !out_has_side && !out_has_front) {
+    gst_audio_channel_mix_fill_one_other (mix->matrix,
+        in_f, out_c, RATIO_CENTER_FRONT);
+  } else if (in_has_front && !out_has_center && out_has_side && !out_has_front) {
+    gst_audio_channel_mix_fill_one_other (mix->matrix, in_f, out_s,
+        RATIO_FRONT_SIDE);
+  } else if (in_has_front && out_has_center && out_has_side && !out_has_front) {
+    gst_audio_channel_mix_fill_one_other (mix->matrix, in_f, out_c,
+        0.5 * RATIO_CENTER_FRONT);
+    gst_audio_channel_mix_fill_one_other (mix->matrix, in_f, out_s,
+        0.5 * RATIO_FRONT_SIDE);
+  } else if (in_has_front && !out_has_center && !out_has_side && !out_has_front
+      && out_has_rear) {
+    gst_audio_channel_mix_fill_one_other (mix->matrix, in_f, out_r,
+        RATIO_FRONT_REAR);
+  }
+
+  /* side <-> center/front/rear */
+  if (!in_has_side && in_has_front && !in_has_rear && out_has_side) {
+    gst_audio_channel_mix_fill_one_other (mix->matrix, in_f, out_s,
+        RATIO_FRONT_SIDE);
+  } else if (!in_has_side && !in_has_front && in_has_rear && out_has_side) {
+    gst_audio_channel_mix_fill_one_other (mix->matrix, in_r, out_s,
+        RATIO_SIDE_REAR);
+  } else if (!in_has_side && in_has_front && in_has_rear && out_has_side) {
+    gst_audio_channel_mix_fill_one_other (mix->matrix, in_f, out_s,
+        0.5 * RATIO_FRONT_SIDE);
+    gst_audio_channel_mix_fill_one_other (mix->matrix, in_r, out_s,
+        0.5 * RATIO_SIDE_REAR);
+  } else if (!in_has_side && !in_has_front && !in_has_rear && in_has_center
+      && out_has_side) {
+    gst_audio_channel_mix_fill_one_other (mix->matrix, in_c, out_s,
+        RATIO_CENTER_SIDE);
+  } else if (in_has_side && out_has_front && !out_has_rear && !out_has_side) {
+    gst_audio_channel_mix_fill_one_other (mix->matrix, in_s, out_f,
+        RATIO_FRONT_SIDE);
+  } else if (in_has_side && !out_has_front && out_has_rear && !out_has_side) {
+    gst_audio_channel_mix_fill_one_other (mix->matrix, in_s, out_r,
+        RATIO_SIDE_REAR);
+  } else if (in_has_side && out_has_front && out_has_rear && !out_has_side) {
+    gst_audio_channel_mix_fill_one_other (mix->matrix, in_s, out_f,
+        0.5 * RATIO_FRONT_SIDE);
+    gst_audio_channel_mix_fill_one_other (mix->matrix, in_s, out_r,
+        0.5 * RATIO_SIDE_REAR);
+  } else if (in_has_side && !out_has_front && !out_has_rear && out_has_center
+      && !out_has_side) {
+    gst_audio_channel_mix_fill_one_other (mix->matrix, in_s, out_c,
+        RATIO_CENTER_SIDE);
+  }
+
+  /* rear <-> center/front/side */
+  if (!in_has_rear && in_has_side && out_has_rear) {
+    gst_audio_channel_mix_fill_one_other (mix->matrix, in_s, out_r,
+        RATIO_SIDE_REAR);
+  } else if (!in_has_rear && !in_has_side && in_has_front && out_has_rear) {
+    gst_audio_channel_mix_fill_one_other (mix->matrix, in_f, out_r,
+        RATIO_FRONT_REAR);
+  } else if (!in_has_rear && !in_has_side && !in_has_front && in_has_center
+      && out_has_rear) {
+    gst_audio_channel_mix_fill_one_other (mix->matrix, in_c, out_r,
+        RATIO_CENTER_REAR);
+  } else if (in_has_rear && !out_has_rear && out_has_side) {
+    gst_audio_channel_mix_fill_one_other (mix->matrix, in_r, out_s,
+        RATIO_SIDE_REAR);
+  } else if (in_has_rear && !out_has_rear && !out_has_side && out_has_front) {
+    gst_audio_channel_mix_fill_one_other (mix->matrix, in_r, out_f,
+        RATIO_FRONT_REAR);
+  } else if (in_has_rear && !out_has_rear && !out_has_side && !out_has_front
+      && out_has_center) {
+    gst_audio_channel_mix_fill_one_other (mix->matrix, in_r, out_c,
+        RATIO_CENTER_REAR);
+  }
+
+  /* bass <-> any */
+  if (in_has_bass && !out_has_bass) {
+    if (out_has_center) {
+      gst_audio_channel_mix_fill_one_other (mix->matrix, in_b, out_c,
+          RATIO_CENTER_BASS);
+    }
+    if (out_has_front) {
+      gst_audio_channel_mix_fill_one_other (mix->matrix, in_b, out_f,
+          RATIO_FRONT_BASS);
+    }
+    if (out_has_side) {
+      gst_audio_channel_mix_fill_one_other (mix->matrix, in_b, out_s,
+          RATIO_SIDE_BASS);
+    }
+    if (out_has_rear) {
+      gst_audio_channel_mix_fill_one_other (mix->matrix, in_b, out_r,
+          RATIO_REAR_BASS);
+    }
+  } else if (!in_has_bass && out_has_bass) {
+    if (in_has_center) {
+      gst_audio_channel_mix_fill_one_other (mix->matrix, in_c, out_b,
+          RATIO_CENTER_BASS);
+    }
+    if (in_has_front) {
+      gst_audio_channel_mix_fill_one_other (mix->matrix, in_f, out_b,
+          RATIO_FRONT_BASS);
+    }
+    if (in_has_side) {
+      gst_audio_channel_mix_fill_one_other (mix->matrix, in_s, out_b,
+          RATIO_REAR_BASS);
+    }
+    if (in_has_rear) {
+      gst_audio_channel_mix_fill_one_other (mix->matrix, in_r, out_b,
+          RATIO_REAR_BASS);
+    }
+  }
+}
+
+/*
+ * Normalize output values.
+ */
+
+static void
+gst_audio_channel_mix_fill_normalize (GstAudioChannelMix * mix)
+{
+  gfloat sum, top = 0;
+  gint i, j;
+
+  for (j = 0; j < mix->out_channels; j++) {
+    /* calculate sum */
+    sum = 0.0;
+    for (i = 0; i < mix->in_channels; i++) {
+      sum += fabs (mix->matrix[i][j]);
+    }
+    if (sum > top) {
+      top = sum;
+    }
+  }
+
+  /* normalize to mix */
+  if (top == 0.0)
+    return;
+
+  for (j = 0; j < mix->out_channels; j++) {
+    for (i = 0; i < mix->in_channels; i++) {
+      mix->matrix[i][j] /= top;
+    }
+  }
+}
+
+static gboolean
+gst_audio_channel_mix_fill_special (GstAudioChannelMix * mix)
+{
+  /* Special, standard conversions here */
+
+  /* Mono<->Stereo, just a fast-path */
+  if (mix->in_channels == 2 && mix->out_channels == 1 &&
+      ((mix->in_position[0] == GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT &&
+              mix->in_position[1] == GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT) ||
+          (mix->in_position[0] == GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT &&
+              mix->in_position[1] == GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT)) &&
+      mix->out_position[0] == GST_AUDIO_CHANNEL_POSITION_MONO) {
+    mix->matrix[0][0] = 0.5;
+    mix->matrix[1][0] = 0.5;
+    return TRUE;
+  } else if (mix->in_channels == 1 && mix->out_channels == 2 &&
+      ((mix->out_position[0] == GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT &&
+              mix->out_position[1] == GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT) ||
+          (mix->out_position[0] == GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT &&
+              mix->out_position[1] == GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT)) &&
+      mix->in_position[0] == GST_AUDIO_CHANNEL_POSITION_MONO) {
+    mix->matrix[0][0] = 1.0;
+    mix->matrix[0][1] = 1.0;
+    return TRUE;
+  }
+
+  /* TODO: 5.1 <-> Stereo and other standard conversions */
+
+  return FALSE;
+}
+
+/*
+ * Automagically generate conversion matrix.
+ */
+
+static void
+gst_audio_channel_mix_fill_matrix (GstAudioChannelMix * mix)
+{
+  if (gst_audio_channel_mix_fill_special (mix))
+    return;
+
+  gst_audio_channel_mix_fill_identical (mix);
+
+  if (!(mix->flags & GST_AUDIO_CHANNEL_MIX_FLAGS_UNPOSITIONED_IN)) {
+    gst_audio_channel_mix_fill_compatible (mix);
+    gst_audio_channel_mix_fill_others (mix);
+    gst_audio_channel_mix_fill_normalize (mix);
+  }
+}
+
+/* only call mix after mix->matrix is fully set up and normalized */
+static void
+gst_audio_channel_mix_setup_matrix_int (GstAudioChannelMix * mix)
+{
+  gint i, j;
+  gfloat tmp;
+  gfloat factor = (1 << INT_MATRIX_FACTOR_EXPONENT);
+
+  mix->matrix_int = g_new0 (gint *, mix->in_channels);
+
+  for (i = 0; i < mix->in_channels; i++) {
+    mix->matrix_int[i] = g_new (gint, mix->out_channels);
+
+    for (j = 0; j < mix->out_channels; j++) {
+      tmp = mix->matrix[i][j] * factor;
+      mix->matrix_int[i][j] = (gint) tmp;
+    }
+  }
+}
+
+static void
+gst_audio_channel_mix_setup_matrix (GstAudioChannelMix * mix)
+{
+  gint i, j;
+
+  mix->tmp = (gpointer) g_new (gdouble, mix->out_channels);
+
+  /* allocate */
+  mix->matrix = g_new0 (gfloat *, mix->in_channels);
+  for (i = 0; i < mix->in_channels; i++) {
+    mix->matrix[i] = g_new (gfloat, mix->out_channels);
+    for (j = 0; j < mix->out_channels; j++)
+      mix->matrix[i][j] = 0.;
+  }
+
+  /* setup the matrix' internal values */
+  gst_audio_channel_mix_fill_matrix (mix);
+
+  gst_audio_channel_mix_setup_matrix_int (mix);
+
+#ifndef GST_DISABLE_GST_DEBUG
+  /* debug */
+  {
+    GString *s;
+    s = g_string_new ("Matrix for");
+    g_string_append_printf (s, " %d -> %d: ",
+        mix->in_channels, mix->out_channels);
+    g_string_append (s, "{");
+    for (i = 0; i < mix->in_channels; i++) {
+      if (i != 0)
+        g_string_append (s, ",");
+      g_string_append (s, " {");
+      for (j = 0; j < mix->out_channels; j++) {
+        if (j != 0)
+          g_string_append (s, ",");
+        g_string_append_printf (s, " %f", mix->matrix[i][j]);
+      }
+      g_string_append (s, " }");
+    }
+    g_string_append (s, " }");
+    GST_DEBUG ("%s", s->str);
+    g_string_free (s, TRUE);
+  }
+#endif
+}
+
+/* IMPORTANT: out_data == in_data is possible, make sure to not overwrite data
+ * you might need later on! */
+static void
+gst_audio_channel_mix_mix_int (GstAudioChannelMix * mix,
+    const gint32 * in_data, gint32 * out_data, gint samples)
+{
+  gint in, out, n;
+  gint64 res;
+  gboolean backwards;
+  gint inchannels, outchannels;
+  gint32 *tmp = (gint32 *) mix->tmp;
+
+  g_return_if_fail (mix->tmp != NULL);
+
+  inchannels = mix->in_channels;
+  outchannels = mix->out_channels;
+  backwards = outchannels > inchannels;
+
+  /* FIXME: use orc here? */
+  for (n = (backwards ? samples - 1 : 0); n < samples && n >= 0;
+      backwards ? n-- : n++) {
+    for (out = 0; out < outchannels; out++) {
+      /* convert */
+      res = 0;
+      for (in = 0; in < inchannels; in++) {
+        res += in_data[n * inchannels + in] * (gint64) mix->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;
+      else if (res > G_MAXINT32)
+        res = G_MAXINT32;
+      tmp[out] = res;
+    }
+    memcpy (&out_data[n * outchannels], mix->tmp,
+        sizeof (gint32) * outchannels);
+  }
+}
+
+static void
+gst_audio_channel_mix_mix_double (GstAudioChannelMix * mix,
+    const gdouble * in_data, gdouble * out_data, gint samples)
+{
+  gint in, out, n;
+  gdouble res;
+  gboolean backwards;
+  gint inchannels, outchannels;
+  gdouble *tmp = (gdouble *) mix->tmp;
+
+  g_return_if_fail (mix->tmp != NULL);
+
+  inchannels = mix->in_channels;
+  outchannels = mix->out_channels;
+  backwards = outchannels > inchannels;
+
+  /* FIXME: use orc here? */
+  for (n = (backwards ? samples - 1 : 0); n < samples && n >= 0;
+      backwards ? n-- : n++) {
+    for (out = 0; out < outchannels; out++) {
+      /* convert */
+      res = 0.0;
+      for (in = 0; in < inchannels; in++) {
+        res += in_data[n * inchannels + in] * mix->matrix[in][out];
+      }
+
+      /* clip (shouldn't we use doubles instead as intermediate format?) */
+      if (res < -1.0)
+        res = -1.0;
+      else if (res > 1.0)
+        res = 1.0;
+      tmp[out] = res;
+    }
+    memcpy (&out_data[n * outchannels], mix->tmp,
+        sizeof (gdouble) * outchannels);
+  }
+}
+
+/**
+ * gst_audio_channel_mix_new:
+ * @flags:
+ * @in_channels:
+ * @in_position:
+ * @out_channels:
+ * @out_position:
+ *
+ * Create a new channel mixer object.
+ *
+ * Returns: a new #GstAudioChannelMix object. Free with gst_audio_channel_mix_free()
+ * after usage.
+ */
+GstAudioChannelMix *
+gst_audio_channel_mix_new (GstAudioChannelMixFlags flags,
+    GstAudioFormat format,
+    gint in_channels,
+    GstAudioChannelPosition * in_position,
+    gint out_channels, GstAudioChannelPosition * out_position)
+{
+  GstAudioChannelMix *mix;
+  gint i;
+
+  g_return_val_if_fail (format == GST_AUDIO_FORMAT_S32
+      || format == GST_AUDIO_FORMAT_F64, NULL);
+  g_return_val_if_fail (in_channels > 0 && in_channels < 64, NULL);
+  g_return_val_if_fail (out_channels > 0 && out_channels < 64, NULL);
+
+  mix = g_slice_new0 (GstAudioChannelMix);
+  mix->flags = flags;
+  mix->format = format;
+  mix->in_channels = in_channels;
+  mix->out_channels = out_channels;
+
+  for (i = 0; i < in_channels; i++)
+    mix->in_position[i] = in_position[i];
+  for (i = 0; i < out_channels; i++)
+    mix->out_position[i] = out_position[i];
+
+  gst_audio_channel_mix_setup_matrix (mix);
+
+  switch (mix->format) {
+    case GST_AUDIO_FORMAT_S32:
+      mix->func = (MixFunc) gst_audio_channel_mix_mix_int;
+      break;
+    case GST_AUDIO_FORMAT_F64:
+      mix->func = (MixFunc) gst_audio_channel_mix_mix_double;
+      break;
+    default:
+      g_assert_not_reached ();
+      break;
+  }
+  return mix;
+}
+
+/**
+ * gst_audio_channel_mix_is_passthrough:
+ * @mix: a #GstAudioChannelMix
+ *
+ * Check if @mix is in passthrough.
+ *
+ * Returns: %TRUE is @mix is passthrough.
+ */
+gboolean
+gst_audio_channel_mix_is_passthrough (GstAudioChannelMix * mix)
+{
+  gint i;
+  guint64 in_mask, out_mask;
+
+  /* only NxN matrices can be identities */
+  if (mix->in_channels != mix->out_channels)
+    return FALSE;
+
+  /* passthrough for 1->1 channels (MONO and NONE position are the same here) */
+  if (mix->in_channels == 1 && mix->out_channels == 1)
+    return TRUE;
+
+  /* passthrough if both channel masks are the same */
+  in_mask = out_mask = 0;
+  for (i = 0; i < mix->in_channels; i++) {
+    in_mask |= mix->in_position[i];
+    out_mask |= mix->out_position[i];
+  }
+  return in_mask == out_mask;
+}
+
+/**
+ * gst_audio_channel_mix_samples:
+ * @mix: a #GstAudioChannelMix
+ * @format: a #GstAudioFormat
+ * @layout: a #GstAudioLayout
+ * @in: input samples
+ * @out: output samples
+ * @samples: number of samples
+ *
+ * In case the samples are interleaved, @in and @out must point to an
+ * array with a single element pointing to a block of interleaved samples.
+ *
+ * If non-interleaved samples are used, @in and @out must point to an
+ * array with pointers to memory blocks, one for each channel.
+ *
+ * Perform channel mixing on @in_data and write the result to @out_data.
+ * @in_data and @out_data need to be in @format and @layout.
+ */
+void
+gst_audio_channel_mix_samples (GstAudioChannelMix * mix,
+    const gpointer in[], gpointer out[], gint samples)
+{
+  g_return_if_fail (mix != NULL);
+  g_return_if_fail (mix->matrix != NULL);
+
+  mix->func (mix, in[0], out[0], samples);
+}
diff --git a/gst-libs/gst/audio/audio-channel-mix.h b/gst-libs/gst/audio/audio-channel-mix.h
new file mode 100644
index 0000000..5222c20
--- /dev/null
+++ b/gst-libs/gst/audio/audio-channel-mix.h
@@ -0,0 +1,68 @@
+/* GStreamer
+ * Copyright (C) 2004 Ronald Bultje <rbultje@ronald.bitfreak.net>
+ *           (C) 2015 Wim Taymans <wim.taymans@gmail.com>
+ *
+ * audio-channel-mix.h: setup of channel conversion matrices
+ *
+ * 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_CHANNEL_MIX_H__
+#define __GST_AUDIO_CHANNEL_MIX_H__
+
+#include <gst/gst.h>
+#include <gst/audio/audio.h>
+
+typedef struct _GstAudioChannelMix GstAudioChannelMix;
+
+/**
+ * GstAudioChannelMixFlags:
+ * @GST_AUDIO_CHANNEL_MIX_FLAGS_NONE: no flag
+ * @GST_AUDIO_CHANNEL_MIX_FLAGS_NON_INTERLEAVED: channels are not interleaved
+ * @GST_AUDIO_CHANNEL_MIX_FLAGS_UNPOSITIONED_IN: input channels are explicitly unpositioned
+ * @GST_AUDIO_CHANNEL_MIX_FLAGS_UNPOSITIONED_OUT: output channels are explicitly unpositioned
+ *
+ * Flags passed to gst_audio_channel_mix_new()
+ */
+typedef enum {
+  GST_AUDIO_CHANNEL_MIX_FLAGS_NONE             = 0,
+  GST_AUDIO_CHANNEL_MIX_FLAGS_NON_INTERLEAVED  = (1 << 0),
+  GST_AUDIO_CHANNEL_MIX_FLAGS_UNPOSITIONED_IN  = (1 << 1),
+  GST_AUDIO_CHANNEL_MIX_FLAGS_UNPOSITIONED_OUT = (1 << 2)
+} GstAudioChannelMixFlags;
+
+GstAudioChannelMix * gst_audio_channel_mix_new       (GstAudioChannelMixFlags flags,
+                                                      GstAudioFormat format,
+                                                      gint in_channels,
+                                                      GstAudioChannelPosition *in_position,
+                                                      gint out_channels,
+                                                      GstAudioChannelPosition *out_position);
+void                 gst_audio_channel_mix_free      (GstAudioChannelMix *mix);
+
+/*
+ * Checks for passthrough (= identity matrix).
+ */
+gboolean        gst_audio_channel_mix_is_passthrough  (GstAudioChannelMix *mix);
+
+/*
+ * Do actual mixing.
+ */
+void            gst_audio_channel_mix_samples   (GstAudioChannelMix * mix,
+                                                 const gpointer       in[],
+                                                 gpointer             out[],
+                                                 gint                 samples);
+
+#endif /* __GST_AUDIO_CHANNEL_MIX_H__ */
diff --git a/gst-libs/gst/audio/audio-channels.c b/gst-libs/gst/audio/audio-channels.c
index 515eb94..b358cc2 100644
--- a/gst-libs/gst/audio/audio-channels.c
+++ b/gst-libs/gst/audio/audio-channels.c
@@ -31,6 +31,29 @@
 
 #include "audio-channels.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 ("audio-channels", 0,
+        "audio-channels object");
+
+    g_once_init_leave (&cat_gonce, cat_done);
+  }
+
+  return (GstDebugCategory *) cat_gonce;
+}
+#else
+#define ensure_debug_category() /* NOOP */
+#endif /* GST_DISABLE_GST_DEBUG */
+
+
 static const GstAudioChannelPosition default_channel_order[64] = {
   GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT,
   GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT,
@@ -459,3 +482,59 @@
 
   return TRUE;
 }
+
+#define _P(pos) (G_GUINT64_CONSTANT (1) << GST_AUDIO_CHANNEL_POSITION_ ##pos)
+
+static const guint64 default_masks[] = {
+  /* 1 channel */
+  0,
+  /* 2 channels */
+  _P (FRONT_LEFT) | _P (FRONT_RIGHT),
+  /* 3 channels (2.1) */
+  _P (FRONT_LEFT) | _P (FRONT_RIGHT) | _P (LFE1),
+  /* 4 channels (4.0) */
+  _P (FRONT_LEFT) | _P (FRONT_RIGHT) | _P (REAR_LEFT) | _P (REAR_RIGHT),
+  /* 5 channels */
+  _P (FRONT_LEFT) | _P (FRONT_RIGHT) | _P (REAR_LEFT) | _P (REAR_RIGHT)
+      | _P (FRONT_CENTER),
+  /* 6 channels (5.1) */
+  _P (FRONT_LEFT) |
+      _P (FRONT_RIGHT) |
+      _P (REAR_LEFT) | _P (REAR_RIGHT) | _P (FRONT_CENTER) | _P (LFE1),
+  /* 7 channels (6.1) */
+  _P (FRONT_LEFT) |
+      _P (FRONT_RIGHT) |
+      _P (REAR_LEFT) |
+      _P (REAR_RIGHT) | _P (FRONT_CENTER) | _P (LFE1) | _P (REAR_CENTER),
+  /* 8 channels (7.1) */
+  _P (FRONT_LEFT) |
+      _P (FRONT_RIGHT) |
+      _P (REAR_LEFT) |
+      _P (REAR_RIGHT) |
+      _P (FRONT_CENTER) | _P (LFE1) | _P (SIDE_LEFT) | _P (SIDE_RIGHT),
+};
+
+/**
+ * gst_audio_channel_get_fallback_mask:
+ * @channels: the number of channels
+ *
+ * Get the fallback channel-mask for the given number of channels.
+ *
+ * This function returns a reasonable fallback channel-mask and should be
+ * called as a last resort when the specific channel map is unknown.
+ *
+ * Returns: a fallback channel-mask for @channels or 0 when there is no
+ * mask.
+ *
+ * Since: 1.8
+ */
+guint64
+gst_audio_channel_get_fallback_mask (gint channels)
+{
+  g_return_val_if_fail (channels > 0, 0);
+
+  if (channels > 8)
+    return 0;
+
+  return default_masks[channels - 1];
+}
diff --git a/gst-libs/gst/audio/audio-channels.h b/gst-libs/gst/audio/audio-channels.h
index 9481839..4aa00de 100644
--- a/gst-libs/gst/audio/audio-channels.h
+++ b/gst-libs/gst/audio/audio-channels.h
@@ -160,6 +160,7 @@
                                                   const GstAudioChannelPosition * from,
                                                   const GstAudioChannelPosition * to,
                                                   gint *reorder_map);
+guint64        gst_audio_channel_get_fallback_mask (gint channels);
 
 G_END_DECLS
 
diff --git a/gst-libs/gst/audio/audio-converter.c b/gst-libs/gst/audio/audio-converter.c
new file mode 100644
index 0000000..b518dcc
--- /dev/null
+++ b/gst-libs/gst/audio/audio-converter.c
@@ -0,0 +1,905 @@
+/* GStreamer
+ * Copyright (C) 2005 Wim Taymans <wim at fluendo dot com>
+ *           (C) 2015 Wim Taymans <wim.taymans@gmail.com>
+ *
+ * audioconverter.c: Convert audio to different audio formats automatically
+ *
+ * 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 <math.h>
+#include <string.h>
+
+#include "audio-converter.h"
+#include "gstaudiopack.h"
+
+/**
+ * SECTION:audioconverter
+ * @short_description: Generic audio conversion
+ *
+ * <refsect2>
+ * <para>
+ * This object is used to convert audio samples from one format to another.
+ * The object can perform conversion of:
+ * <itemizedlist>
+ *  <listitem><para>
+ *    audio format with optional dithering and noise shaping
+ *  </para></listitem>
+ *  <listitem><para>
+ *    audio samplerate
+ *  </para></listitem>
+ *  <listitem><para>
+ *    audio channels and channel layout
+ *  </para></listitem>
+ * </para>
+ * </refsect2>
+ */
+
+#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 ("audio-converter", 0,
+        "audio-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 _AudioChain AudioChain;
+
+typedef void (*AudioConvertFunc) (gpointer dst, const gpointer src, gint count);
+/*                           int/int    int/float  float/int float/float
+ *
+ *  unpack                     S32          S32         F64       F64
+ *  convert                               S32->F64
+ *  channel mix                S32          F64         F64       F64
+ *  convert                                           F64->S32
+ *  quantize                   S32                      S32
+ *  pack                       S32          F64         S32       F64
+ *
+ *
+ *  interleave
+ *  deinterleave
+ *  resample
+ */
+struct _GstAudioConverter
+{
+  GstAudioInfo in;
+  GstAudioInfo out;
+
+  GstStructure *config;
+
+  GstAudioConverterFlags flags;
+  GstAudioFormat current_format;
+  GstAudioLayout current_layout;
+  gint current_channels;
+
+  gpointer *in_data;
+  gpointer *out_data;
+
+  /* unpack */
+  gboolean in_default;
+  gboolean unpack_ip;
+  AudioChain *unpack_chain;
+
+  /* convert in */
+  AudioConvertFunc convert_in;
+  AudioChain *convert_in_chain;
+
+  /* channel mix */
+  gboolean mix_passthrough;
+  GstAudioChannelMix *mix;
+  AudioChain *mix_chain;
+
+  /* convert out */
+  AudioConvertFunc convert_out;
+  AudioChain *convert_out_chain;
+
+  /* quant */
+  GstAudioQuantize *quant;
+  AudioChain *quant_chain;
+
+  /* pack */
+  gboolean out_default;
+  AudioChain *pack_chain;
+
+  gboolean passthrough;
+};
+
+typedef gboolean (*AudioChainFunc) (AudioChain * chain, gsize samples,
+    gpointer user_data);
+typedef gpointer *(*AudioChainAllocFunc) (AudioChain * chain, gsize samples,
+    gpointer user_data);
+
+static gpointer *get_output_samples (AudioChain * chain, gsize samples,
+    gpointer user_data);
+
+struct _AudioChain
+{
+  AudioChain *prev;
+
+  AudioChainFunc make_func;
+  gpointer make_func_data;
+  GDestroyNotify make_func_notify;
+
+  gint stride;
+  gint inc;
+  gint blocks;
+
+  gboolean pass_alloc;
+  gboolean allow_ip;
+
+  AudioChainAllocFunc alloc_func;
+  gpointer alloc_data;
+
+  gpointer *tmp;
+  gsize tmpsize;
+
+  gpointer *samples;
+};
+
+static AudioChain *
+audio_chain_new (AudioChain * prev, GstAudioConverter * convert)
+{
+  AudioChain *chain;
+  const GstAudioFormatInfo *finfo;
+
+  chain = g_slice_new0 (AudioChain);
+  chain->prev = prev;
+
+  if (convert->current_layout == GST_AUDIO_LAYOUT_NON_INTERLEAVED) {
+    chain->inc = 1;
+    chain->blocks = convert->current_channels;
+  } else {
+    chain->inc = convert->current_channels;
+    chain->blocks = 1;
+  }
+  finfo = gst_audio_format_get_info (convert->current_format);
+  chain->stride = (finfo->width * chain->inc) / 8;
+
+  return chain;
+}
+
+static void
+audio_chain_set_make_func (AudioChain * chain,
+    AudioChainFunc make_func, gpointer user_data, GDestroyNotify notify)
+{
+  chain->make_func = make_func;
+  chain->make_func_data = user_data;
+  chain->make_func_notify = notify;
+}
+
+static void
+audio_chain_free (AudioChain * chain)
+{
+  GST_LOG ("free chain %p", chain);
+  if (chain->make_func_notify)
+    chain->make_func_notify (chain->make_func_data);
+  g_free (chain->tmp);
+  g_slice_free (AudioChain, chain);
+}
+
+static gpointer *
+audio_chain_alloc_samples (AudioChain * chain, guint samples)
+{
+  return chain->alloc_func (chain, samples, chain->alloc_data);
+}
+
+static gpointer *
+audio_chain_get_samples (AudioChain * chain, guint samples)
+{
+  gpointer *res;
+
+  while (!chain->samples)
+    chain->make_func (chain, samples, chain->make_func_data);
+
+  res = chain->samples;
+  chain->samples = NULL;
+
+  return res;
+}
+
+/*
+static guint
+get_opt_uint (GstAudioConverter * convert, const gchar * opt, guint def)
+{
+  guint res;
+  if (!gst_structure_get_uint (convert->config, opt, &res))
+    res = def;
+  return res;
+}
+*/
+
+static gint
+get_opt_enum (GstAudioConverter * 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_DITHER_METHOD GST_AUDIO_DITHER_NONE
+#define DEFAULT_OPT_NOISE_SHAPING_METHOD GST_AUDIO_NOISE_SHAPING_NONE
+#define DEFAULT_OPT_QUANTIZATION 1
+
+#define GET_OPT_DITHER_METHOD(c) get_opt_enum(c, \
+    GST_AUDIO_CONVERTER_OPT_DITHER_METHOD, GST_TYPE_AUDIO_DITHER_METHOD, \
+    DEFAULT_OPT_DITHER_METHOD)
+#define GET_OPT_NOISE_SHAPING_METHOD(c) get_opt_enum(c, \
+    GST_AUDIO_CONVERTER_OPT_NOISE_SHAPING_METHOD, GST_TYPE_AUDIO_NOISE_SHAPING_METHOD, \
+    DEFAULT_OPT_NOISE_SHAPING_METHOD)
+#define GET_OPT_QUANTIZATION(c) get_opt_uint(c, \
+    GST_AUDIO_CONVERTER_OPT_QUANTIZATION, DEFAULT_OPT_QUANTIZATION)
+
+static gboolean
+copy_config (GQuark field_id, const GValue * value, gpointer user_data)
+{
+  GstAudioConverter *convert = user_data;
+
+  gst_structure_id_set_value (convert->config, field_id, value);
+
+  return TRUE;
+}
+
+/**
+ * gst_audio_converter_set_config:
+ * @convert: a #GstAudioConverter
+ * @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_audio_converter_get_config().
+ *
+ * Look at the #GST_AUDIO_CONVERTER_OPT_* fields to check valid configuration
+ * option and values.
+ *
+ * Returns: %TRUE when @config could be set.
+ */
+gboolean
+gst_audio_converter_set_config (GstAudioConverter * 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_audio_converter_get_config:
+ * @convert: a #GstAudioConverter
+ *
+ * Get the current configuration of @convert.
+ *
+ * Returns: a #GstStructure that remains valid for as long as @convert is valid
+ *   or until gst_audio_converter_set_config() is called.
+ */
+const GstStructure *
+gst_audio_converter_get_config (GstAudioConverter * convert)
+{
+  g_return_val_if_fail (convert != NULL, NULL);
+
+  return convert->config;
+}
+
+static gboolean
+do_unpack (AudioChain * chain, gsize samples, gpointer user_data)
+{
+  GstAudioConverter *convert = user_data;
+  gpointer *tmp;
+  gboolean src_writable;
+
+  src_writable = (convert->flags & GST_AUDIO_CONVERTER_FLAG_SOURCE_WRITABLE);
+
+  if (!chain->allow_ip || !src_writable || !convert->in_default) {
+    gint i;
+
+    if (src_writable && chain->allow_ip)
+      tmp = convert->in_data;
+    else
+      tmp = audio_chain_alloc_samples (chain, samples);
+    GST_LOG ("unpack %p %p, %" G_GSIZE_FORMAT, tmp, convert->in_data, samples);
+
+    for (i = 0; i < chain->blocks; i++) {
+      convert->in.finfo->unpack_func (convert->in.finfo,
+          GST_AUDIO_PACK_FLAG_TRUNCATE_RANGE, tmp[i], convert->in_data[i],
+          samples * chain->inc);
+    }
+  } else {
+    tmp = convert->in_data;
+    GST_LOG ("get in samples %p", tmp);
+  }
+  chain->samples = tmp;
+
+  return TRUE;
+}
+
+static gboolean
+do_convert_in (AudioChain * chain, gsize samples, gpointer user_data)
+{
+  GstAudioConverter *convert = user_data;
+  gpointer *in, *out;
+  gint i;
+
+  in = audio_chain_get_samples (chain->prev, samples);
+  out = (chain->allow_ip ? in : audio_chain_alloc_samples (chain, samples));
+  GST_LOG ("convert in %p, %p %" G_GSIZE_FORMAT, in, out, samples);
+
+  for (i = 0; i < chain->blocks; i++)
+    convert->convert_in (out[i], in[i], samples * chain->inc);
+
+  chain->samples = out;
+
+  return TRUE;
+}
+
+static gboolean
+do_mix (AudioChain * chain, gsize samples, gpointer user_data)
+{
+  GstAudioConverter *convert = user_data;
+  gpointer *in, *out;
+
+  in = audio_chain_get_samples (chain->prev, samples);
+  out = (chain->allow_ip ? in : audio_chain_alloc_samples (chain, samples));
+  GST_LOG ("mix %p %p,%" G_GSIZE_FORMAT, in, out, samples);
+
+  gst_audio_channel_mix_samples (convert->mix, in, out, samples);
+
+  chain->samples = out;
+
+  return TRUE;
+}
+
+static gboolean
+do_convert_out (AudioChain * chain, gsize samples, gpointer user_data)
+{
+  GstAudioConverter *convert = user_data;
+  gpointer *in, *out;
+  gint i;
+
+  in = audio_chain_get_samples (chain->prev, samples);
+  out = (chain->allow_ip ? in : audio_chain_alloc_samples (chain, samples));
+  GST_LOG ("convert out %p, %p %" G_GSIZE_FORMAT, in, out, samples);
+
+  for (i = 0; i < chain->blocks; i++)
+    convert->convert_out (out[i], in[i], samples * chain->inc);
+
+  chain->samples = out;
+
+  return TRUE;
+}
+
+static gboolean
+do_quantize (AudioChain * chain, gsize samples, gpointer user_data)
+{
+  GstAudioConverter *convert = user_data;
+  gpointer *in, *out;
+
+  in = audio_chain_get_samples (chain->prev, samples);
+  out = (chain->allow_ip ? in : audio_chain_alloc_samples (chain, samples));
+  GST_LOG ("quantize %p, %p %" G_GSIZE_FORMAT, in, out, samples);
+
+  gst_audio_quantize_samples (convert->quant, in, out, samples);
+
+  chain->samples = out;
+
+  return TRUE;
+}
+
+static AudioChain *
+chain_unpack (GstAudioConverter * convert)
+{
+  AudioChain *prev;
+  GstAudioInfo *in = &convert->in;
+  const GstAudioFormatInfo *fup;
+
+  convert->current_format = in->finfo->unpack_format;
+  convert->current_layout = in->layout;
+  convert->current_channels = in->channels;
+  convert->in_default = in->finfo->unpack_format == in->finfo->format;
+
+  GST_INFO ("unpack format %s to %s",
+      gst_audio_format_to_string (in->finfo->format),
+      gst_audio_format_to_string (convert->current_format));
+
+  fup = gst_audio_format_get_info (in->finfo->unpack_format);
+
+  prev = convert->unpack_chain = audio_chain_new (NULL, convert);
+  prev->allow_ip = fup->width <= in->finfo->width;
+  prev->pass_alloc = FALSE;
+  audio_chain_set_make_func (prev, do_unpack, convert, NULL);
+
+  return prev;
+}
+
+static AudioChain *
+chain_convert_in (GstAudioConverter * convert, AudioChain * prev)
+{
+  gboolean in_int, out_int;
+  GstAudioInfo *in = &convert->in;
+  GstAudioInfo *out = &convert->out;
+
+  in_int = GST_AUDIO_FORMAT_INFO_IS_INTEGER (in->finfo);
+  out_int = GST_AUDIO_FORMAT_INFO_IS_INTEGER (out->finfo);
+
+  if (in_int && !out_int) {
+    GST_INFO ("convert S32 to F64");
+    convert->convert_in = (AudioConvertFunc) audio_orc_s32_to_double;
+    convert->current_format = GST_AUDIO_FORMAT_F64;
+
+    prev = convert->convert_in_chain = audio_chain_new (prev, convert);
+    prev->allow_ip = FALSE;
+    prev->pass_alloc = FALSE;
+    audio_chain_set_make_func (prev, do_convert_in, convert, NULL);
+  }
+  return prev;
+}
+
+static AudioChain *
+chain_mix (GstAudioConverter * convert, AudioChain * prev)
+{
+  GstAudioChannelMixFlags flags;
+  GstAudioInfo *in = &convert->in;
+  GstAudioInfo *out = &convert->out;
+  GstAudioFormat format = convert->current_format;
+
+  flags =
+      GST_AUDIO_INFO_IS_UNPOSITIONED (in) ?
+      GST_AUDIO_CHANNEL_MIX_FLAGS_UNPOSITIONED_IN : 0;
+  flags |=
+      GST_AUDIO_INFO_IS_UNPOSITIONED (out) ?
+      GST_AUDIO_CHANNEL_MIX_FLAGS_UNPOSITIONED_OUT : 0;
+
+  convert->current_channels = out->channels;
+
+  convert->mix =
+      gst_audio_channel_mix_new (flags, format, in->channels, in->position,
+      out->channels, out->position);
+  convert->mix_passthrough =
+      gst_audio_channel_mix_is_passthrough (convert->mix);
+  GST_INFO ("mix format %s, passthrough %d, in_channels %d, out_channels %d",
+      gst_audio_format_to_string (format), convert->mix_passthrough,
+      in->channels, out->channels);
+
+  if (!convert->mix_passthrough) {
+    prev = convert->mix_chain = audio_chain_new (prev, convert);
+    /* we can only do in-place when in >= out, else we don't have enough
+     * memory. */
+    prev->allow_ip = in->channels >= out->channels;
+    prev->pass_alloc = in->channels <= out->channels;
+    audio_chain_set_make_func (prev, do_mix, convert, NULL);
+  }
+  return prev;
+}
+
+static AudioChain *
+chain_convert_out (GstAudioConverter * convert, AudioChain * prev)
+{
+  gboolean in_int, out_int;
+  GstAudioInfo *in = &convert->in;
+  GstAudioInfo *out = &convert->out;
+
+  in_int = GST_AUDIO_FORMAT_INFO_IS_INTEGER (in->finfo);
+  out_int = GST_AUDIO_FORMAT_INFO_IS_INTEGER (out->finfo);
+
+  if (!in_int && out_int) {
+    convert->convert_out = (AudioConvertFunc) audio_orc_double_to_s32;
+    convert->current_format = GST_AUDIO_FORMAT_S32;
+
+    GST_INFO ("convert F64 to S32");
+    prev = convert->convert_out_chain = audio_chain_new (prev, convert);
+    prev->allow_ip = TRUE;
+    prev->pass_alloc = FALSE;
+    audio_chain_set_make_func (prev, do_convert_out, convert, NULL);
+  }
+  return prev;
+}
+
+static AudioChain *
+chain_quantize (GstAudioConverter * convert, AudioChain * prev)
+{
+  GstAudioInfo *in = &convert->in;
+  GstAudioInfo *out = &convert->out;
+  gint in_depth, out_depth;
+  gboolean in_int, out_int;
+  GstAudioDitherMethod dither;
+  GstAudioNoiseShapingMethod ns;
+
+  dither = GET_OPT_DITHER_METHOD (convert);
+  ns = GET_OPT_NOISE_SHAPING_METHOD (convert);
+
+  in_depth = GST_AUDIO_FORMAT_INFO_DEPTH (in->finfo);
+  out_depth = GST_AUDIO_FORMAT_INFO_DEPTH (out->finfo);
+  GST_INFO ("depth in %d, out %d", in_depth, out_depth);
+
+  in_int = GST_AUDIO_FORMAT_INFO_IS_INTEGER (in->finfo);
+  out_int = GST_AUDIO_FORMAT_INFO_IS_INTEGER (out->finfo);
+
+  /* Don't dither or apply noise shaping if target depth is bigger than 20 bits
+   * as DA converters only can do a SNR up to 20 bits in reality.
+   * Also don't dither or apply noise shaping if target depth is larger than
+   * source depth. */
+  if (out_depth > 20 || (in_int && out_depth >= in_depth)) {
+    dither = GST_AUDIO_DITHER_NONE;
+    ns = GST_AUDIO_NOISE_SHAPING_NONE;
+    GST_INFO ("using no dither and noise shaping");
+  } else {
+    GST_INFO ("using dither %d and noise shaping %d", dither, ns);
+    /* Use simple error feedback when output sample rate is smaller than
+     * 32000 as the other methods might move the noise to audible ranges */
+    if (ns > GST_AUDIO_NOISE_SHAPING_ERROR_FEEDBACK && out->rate < 32000)
+      ns = GST_AUDIO_NOISE_SHAPING_ERROR_FEEDBACK;
+  }
+  /* we still want to run the quantization step when reducing bits to get
+   * the rounding correct */
+  if (out_int && out_depth < 32) {
+    GST_INFO ("quantize to %d bits, dither %d, ns %d", out_depth, dither, ns);
+    convert->quant =
+        gst_audio_quantize_new (dither, ns, 0, convert->current_format,
+        out->channels, 1U << (32 - out_depth));
+
+    prev = convert->quant_chain = audio_chain_new (prev, convert);
+    prev->allow_ip = TRUE;
+    prev->pass_alloc = TRUE;
+    audio_chain_set_make_func (prev, do_quantize, convert, NULL);
+  }
+  return prev;
+}
+
+static AudioChain *
+chain_pack (GstAudioConverter * convert, AudioChain * prev)
+{
+  GstAudioInfo *out = &convert->out;
+  GstAudioFormat format = convert->current_format;
+
+  convert->current_format = out->finfo->format;
+
+  g_assert (out->finfo->unpack_format == format);
+  convert->out_default = format == out->finfo->format;
+  GST_INFO ("pack format %s to %s", gst_audio_format_to_string (format),
+      gst_audio_format_to_string (out->finfo->format));
+
+  return prev;
+}
+
+static gpointer *
+get_output_samples (AudioChain * chain, gsize samples, gpointer user_data)
+{
+  GstAudioConverter *convert = user_data;
+
+  GST_LOG ("output samples %" G_GSIZE_FORMAT, samples);
+  return convert->out_data;
+}
+
+static gpointer *
+get_temp_samples (AudioChain * chain, gsize samples, gpointer user_data)
+{
+  gsize needed;
+
+  /* first part contains the pointers, second part the data */
+  needed = (samples * chain->stride + sizeof (gpointer)) * chain->blocks;
+
+  if (needed > chain->tmpsize) {
+    gint i;
+    guint8 *s;
+
+    GST_DEBUG ("alloc samples %" G_GSIZE_FORMAT, needed);
+    chain->tmp = g_realloc (chain->tmp, needed);
+    chain->tmpsize = needed;
+
+    /* jump to the data */
+    s = (guint8 *) & chain->tmp[chain->blocks];
+
+    /* set up the pointers */
+    for (i = 0; i < chain->blocks; i++)
+      chain->tmp[i] = s + (i * samples * chain->stride);
+  }
+  return chain->tmp;
+}
+
+static void
+setup_allocators (GstAudioConverter * convert)
+{
+  AudioChain *chain;
+  AudioChainAllocFunc alloc_func;
+  gboolean allow_ip;
+
+  /* start with using dest if we can directly write into it */
+  if (convert->out_default) {
+    alloc_func = get_output_samples;
+    allow_ip = FALSE;
+  } else {
+    alloc_func = get_temp_samples;
+    allow_ip = TRUE;
+  }
+  /* now walk backwards, we try to write into the dest samples directly
+   * and keep track if the source needs to be writable */
+  for (chain = convert->pack_chain; chain; chain = chain->prev) {
+    chain->alloc_func = alloc_func;
+    chain->alloc_data = convert;
+    chain->allow_ip = allow_ip && chain->allow_ip;
+
+    if (!chain->pass_alloc) {
+      /* can't pass allocator, make new temp line allocator */
+      alloc_func = get_temp_samples;
+      allow_ip = TRUE;
+    }
+  }
+}
+
+/**
+ * gst_audio_converter_new: (skip)
+ * @in: a source #GstAudioInfo
+ * @out: a destination #GstAudioInfo
+ * @config: (transfer full): a #GstStructure with configuration options
+ *
+ * Create a new #GstAudioConverter that is able to convert between @in and @out
+ * audio formats.
+ *
+ * @config contains extra configuration options, see #GST_VIDEO_CONVERTER_OPT_*
+ * parameters for details about the options and values.
+ *
+ * Returns: a #GstAudioConverter or %NULL if conversion is not possible.
+ */
+GstAudioConverter *
+gst_audio_converter_new (GstAudioInfo * in, GstAudioInfo * out,
+    GstStructure * config)
+{
+  GstAudioConverter *convert;
+  AudioChain *prev;
+
+  g_return_val_if_fail (in != NULL, FALSE);
+  g_return_val_if_fail (out != NULL, FALSE);
+  g_return_val_if_fail (in->rate == out->rate, FALSE);
+  g_return_val_if_fail (in->layout == GST_AUDIO_LAYOUT_INTERLEAVED, FALSE);
+  g_return_val_if_fail (in->layout == out->layout, FALSE);
+
+  if ((GST_AUDIO_INFO_CHANNELS (in) != GST_AUDIO_INFO_CHANNELS (out)) &&
+      (GST_AUDIO_INFO_IS_UNPOSITIONED (in)
+          || GST_AUDIO_INFO_IS_UNPOSITIONED (out)))
+    goto unpositioned;
+
+  convert = g_slice_new0 (GstAudioConverter);
+
+  convert->in = *in;
+  convert->out = *out;
+
+  /* default config */
+  convert->config = gst_structure_new_empty ("GstAudioConverter");
+  if (config)
+    gst_audio_converter_set_config (convert, config);
+
+  GST_INFO ("unitsizes: %d -> %d", in->bpf, out->bpf);
+
+  /* step 1, unpack */
+  prev = chain_unpack (convert);
+  /* step 2, optional convert from S32 to F64 for channel mix */
+  prev = chain_convert_in (convert, prev);
+  /* step 3, channel mix */
+  prev = chain_mix (convert, prev);
+  /* step 4, optional convert for quantize */
+  prev = chain_convert_out (convert, prev);
+  /* step 5, optional quantize */
+  prev = chain_quantize (convert, prev);
+  /* step 6, pack */
+  convert->pack_chain = chain_pack (convert, prev);
+
+  /* optimize */
+  if (out->finfo->format == in->finfo->format && convert->mix_passthrough) {
+    GST_INFO ("same formats and passthrough mixing -> passthrough");
+    convert->passthrough = TRUE;
+  }
+
+  setup_allocators (convert);
+
+
+  return convert;
+
+  /* ERRORS */
+unpositioned:
+  {
+    GST_WARNING ("unpositioned channels");
+    return NULL;
+  }
+}
+
+/**
+ * gst_audio_converter_free:
+ * @convert: a #GstAudioConverter
+ *
+ * Free a previously allocated @convert instance.
+ */
+void
+gst_audio_converter_free (GstAudioConverter * convert)
+{
+  g_return_if_fail (convert != NULL);
+
+  if (convert->unpack_chain)
+    audio_chain_free (convert->unpack_chain);
+  if (convert->convert_in_chain)
+    audio_chain_free (convert->convert_in_chain);
+  if (convert->mix_chain)
+    audio_chain_free (convert->mix_chain);
+  if (convert->convert_out_chain)
+    audio_chain_free (convert->convert_out_chain);
+  if (convert->quant_chain)
+    audio_chain_free (convert->quant_chain);
+
+  if (convert->quant)
+    gst_audio_quantize_free (convert->quant);
+  if (convert->mix)
+    gst_audio_channel_mix_free (convert->mix);
+  gst_audio_info_init (&convert->in);
+  gst_audio_info_init (&convert->out);
+
+  gst_structure_free (convert->config);
+
+  g_slice_free (GstAudioConverter, convert);
+}
+
+/**
+ * gst_audio_converter_get_out_frames:
+ * @convert: a #GstAudioConverter
+ * @in_frames: number of input frames
+ *
+ * Calculate how many output frames can be produced when @in_frames input
+ * frames are given to @convert.
+ *
+ * Returns: the number of output frames
+ */
+gsize
+gst_audio_converter_get_out_frames (GstAudioConverter * convert,
+    gsize in_frames)
+{
+  return in_frames;
+}
+
+/**
+ * gst_audio_converter_get_in_frames:
+ * @convert: a #GstAudioConverter
+ * @out_frames: number of output frames
+ *
+ * Calculate how many input frames are currently needed by @convert to produce
+ * @out_frames of output frames.
+ *
+ * Returns: the number of input frames
+ */
+gsize
+gst_audio_converter_get_in_frames (GstAudioConverter * convert,
+    gsize out_frames)
+{
+  return out_frames;
+}
+
+/**
+ * gst_audio_converter_get_max_latency:
+ * @convert: a #GstAudioConverter
+ *
+ * Get the maximum number of input frames that the converter would
+ * need before producing output.
+ *
+ * Returns: the latency of @convert as expressed in the number of
+ * frames.
+ */
+gsize
+gst_audio_converter_get_max_latency (GstAudioConverter * convert)
+{
+  return 0;
+}
+
+/**
+ * gst_audio_converter_samples:
+ * @convert: a #GstAudioConverter
+ * @flags: extra #GstAudioConverterFlags
+ * @in: input samples
+ * @in_samples: number of input samples
+ * @out: output samples
+ * @out_samples: number of output samples
+ * @in_consumed: number of input samples consumed
+ * @out_produced: number of output samples produced
+ *
+ * Perform the conversion with @in_samples in @in to @out_samples in @out
+ * using @convert.
+ *
+ * In case the samples are interleaved, @in and @out must point to an
+ * array with a single element pointing to a block of interleaved samples.
+ *
+ * If non-interleaved samples are used, @in and @out must point to an
+ * array with pointers to memory blocks, one for each channel.
+ *
+ * The actual number of samples used from @in is returned in @in_consumed and
+ * can be less than @in_samples. The actual number of samples produced is
+ * returned in @out_produced and can be less than @out_samples.
+ *
+ * Returns: %TRUE is the conversion could be performed.
+ */
+gboolean
+gst_audio_converter_samples (GstAudioConverter * convert,
+    GstAudioConverterFlags flags, gpointer in[], gsize in_samples,
+    gpointer out[], gsize out_samples, gsize * in_consumed,
+    gsize * out_produced)
+{
+  AudioChain *chain;
+  gpointer *tmp;
+  gint i;
+
+  g_return_val_if_fail (convert != NULL, FALSE);
+  g_return_val_if_fail (in != NULL, FALSE);
+  g_return_val_if_fail (out != NULL, FALSE);
+  g_return_val_if_fail (in_consumed != NULL, FALSE);
+  g_return_val_if_fail (out_produced != NULL, FALSE);
+
+  in_samples = MIN (in_samples, out_samples);
+
+  if (in_samples == 0) {
+    *in_consumed = 0;
+    *out_produced = 0;
+    return TRUE;
+  }
+
+  chain = convert->pack_chain;
+
+  if (convert->passthrough) {
+    for (i = 0; i < chain->blocks; i++)
+      memcpy (out[i], in[i], in_samples * chain->inc);
+    *out_produced = in_samples;
+    *in_consumed = in_samples;
+    return TRUE;
+  }
+
+  convert->flags = flags;
+  convert->in_data = in;
+  convert->out_data = out;
+
+  /* get samples to pack */
+  tmp = audio_chain_get_samples (chain, in_samples);
+
+  if (!convert->out_default) {
+    GST_LOG ("pack %p, %p %" G_GSIZE_FORMAT, tmp, out, in_samples);
+    /* and pack if needed */
+    for (i = 0; i < chain->blocks; i++)
+      convert->out.finfo->pack_func (convert->out.finfo, 0, tmp[i], out[i],
+          in_samples * chain->inc);
+  }
+
+  *out_produced = in_samples;
+  *in_consumed = in_samples;
+
+  return TRUE;
+}
diff --git a/gst-libs/gst/audio/audio-converter.h b/gst-libs/gst/audio/audio-converter.h
new file mode 100644
index 0000000..1810293
--- /dev/null
+++ b/gst-libs/gst/audio/audio-converter.h
@@ -0,0 +1,95 @@
+/* GStreamer
+ * Copyright (C) 2004 Ronald Bultje <rbultje@ronald.bitfreak.net>
+ *           (C) 2015 Wim Taymans <wim.taymans@gmail.com>
+ *
+ * audioconverter.h: audio format conversion library
+ *
+ * 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_CONVERTER_H__
+#define __GST_AUDIO_CONVERTER_H__
+
+#include <gst/gst.h>
+#include <gst/audio/audio.h>
+
+typedef struct _GstAudioConverter GstAudioConverter;
+
+/**
+ * GST_AUDIO_CONVERTER_OPT_DITHER_METHOD:
+ *
+ * #GST_TYPE_AUDIO_DITHER_METHOD, The dither method to use when
+ * changing bit depth.
+ * Default is #GST_AUDIO_DITHER_NONE.
+ */
+#define GST_AUDIO_CONVERTER_OPT_DITHER_METHOD   "GstAudioConverter.dither-method"
+
+/**
+ * GST_AUDIO_CONVERTER_OPT_NOISE_SHAPING_METHOD:
+ *
+ * #GST_TYPE_AUDIO_NOISE_SHAPING_METHOD, The noise shaping method to use
+ * to mask noise from quantization errors.
+ * Default is #GST_AUDIO_NOISE_SHAPING_NONE.
+ */
+#define GST_AUDIO_CONVERTER_OPT_NOISE_SHAPING_METHOD   "GstAudioConverter.noise-shaping-method"
+
+/**
+ * GST_AUDIO_CONVERTER_OPT_QUANTIZATION:
+ *
+ * #G_TYPE_UINT, The quantization amount. Components will be
+ * quantized to multiples of this value.
+ * Default is 1
+ */
+#define GST_AUDIO_CONVERTER_OPT_QUANTIZATION   "GstAudioConverter.quantization"
+
+
+/**
+ * GstAudioConverterFlags:
+ * @GST_AUDIO_CONVERTER_FLAG_NONE: no flag
+ * @GST_AUDIO_CONVERTER_FLAG_SOURCE_WRITABLE: the source is writable and can be
+ *    used as temporary storage during conversion.
+ *
+ * Extra flags passed to gst_audio_converter_samples().
+ */
+typedef enum {
+  GST_AUDIO_CONVERTER_FLAG_NONE            = 0,
+  GST_AUDIO_CONVERTER_FLAG_SOURCE_WRITABLE = (1 << 0)
+} GstAudioConverterFlags;
+
+GstAudioConverter *  gst_audio_converter_new             (GstAudioInfo *in_info,
+                                                          GstAudioInfo *out_info,
+                                                          GstStructure *config);
+
+void                 gst_audio_converter_free            (GstAudioConverter * convert);
+
+gboolean             gst_audio_converter_set_config      (GstAudioConverter * convert, GstStructure *config);
+const GstStructure * gst_audio_converter_get_config      (GstAudioConverter * convert);
+
+gsize                gst_audio_converter_get_out_frames  (GstAudioConverter *convert,
+                                                          gsize in_frames);
+gsize                gst_audio_converter_get_in_frames   (GstAudioConverter *convert,
+                                                          gsize out_frames);
+
+gsize                gst_audio_converter_get_max_latency (GstAudioConverter *convert);
+
+
+gboolean             gst_audio_converter_samples         (GstAudioConverter * convert,
+                                                          GstAudioConverterFlags flags,
+                                                          gpointer in[], gsize in_samples,
+                                                          gpointer out[], gsize out_samples,
+                                                          gsize *in_consumed, gsize *out_produced);
+
+#endif /* __GST_AUDIO_CONVERTER_H__ */
diff --git a/gst-libs/gst/audio/audio-format.c b/gst-libs/gst/audio/audio-format.c
index 783f9e4..6358e32 100644
--- a/gst-libs/gst/audio/audio-format.c
+++ b/gst-libs/gst/audio/audio-format.c
@@ -35,9 +35,13 @@
 
 #if G_BYTE_ORDER == G_LITTLE_ENDIAN
 # define audio_orc_unpack_s16le audio_orc_unpack_s16
+# define audio_orc_unpack_s16le_trunc audio_orc_unpack_s16_trunc
 # define audio_orc_unpack_s16be audio_orc_unpack_s16_swap
+# define audio_orc_unpack_s16be_trunc audio_orc_unpack_s16_swap_trunc
 # define audio_orc_unpack_u16le audio_orc_unpack_u16
+# define audio_orc_unpack_u16le_trunc audio_orc_unpack_u16_trunc
 # define audio_orc_unpack_u16be audio_orc_unpack_u16_swap
+# define audio_orc_unpack_u16be_trunc audio_orc_unpack_u16_swap_trunc
 # define audio_orc_unpack_s24_32le audio_orc_unpack_s24_32
 # define audio_orc_unpack_s24_32be audio_orc_unpack_s24_32_swap
 # define audio_orc_unpack_u24_32le audio_orc_unpack_u24_32
@@ -68,9 +72,13 @@
 # define audio_orc_pack_f64be audio_orc_pack_f64_swap
 #else
 # define audio_orc_unpack_s16le audio_orc_unpack_s16_swap
+# define audio_orc_unpack_s16le_trunc audio_orc_unpack_s16_swap_trunc
 # define audio_orc_unpack_s16be audio_orc_unpack_s16
+# define audio_orc_unpack_s16be_trunc audio_orc_unpack_s16_trunc
 # define audio_orc_unpack_u16le audio_orc_unpack_u16_swap
+# define audio_orc_unpack_u16le_trunc audio_orc_unpack_u16_swap_trunc
 # define audio_orc_unpack_u16be audio_orc_unpack_u16
+# define audio_orc_unpack_u16be_trunc audio_orc_unpack_u16_trunc
 # define audio_orc_unpack_s24_32le audio_orc_unpack_s24_32_swap
 # define audio_orc_unpack_s24_32be audio_orc_unpack_s24_32
 # define audio_orc_unpack_u24_32le audio_orc_unpack_u24_32_swap
@@ -101,46 +109,49 @@
 # define audio_orc_pack_f64be audio_orc_pack_f64
 #endif
 
-#define MAKE_ORC_PACK_UNPACK(fmt) \
-static void unpack_ ##fmt (const GstAudioFormatInfo *info, \
-    GstAudioPackFlags flags, gpointer dest,                \
-    const gpointer data, gint length) {                    \
-  audio_orc_unpack_ ##fmt (dest, data, length);                  \
-}                                                          \
-static void pack_ ##fmt (const GstAudioFormatInfo *info,   \
-    GstAudioPackFlags flags, const gpointer src,           \
-    gpointer data, gint length) {                          \
-  audio_orc_pack_ ##fmt (data, src, length);                     \
+#define MAKE_ORC_PACK_UNPACK(fmt,fmt_t)                         \
+static void unpack_ ##fmt (const GstAudioFormatInfo *info,      \
+    GstAudioPackFlags flags, gpointer dest,                     \
+    const gpointer data, gint length) {                         \
+  if (flags & GST_AUDIO_PACK_FLAG_TRUNCATE_RANGE)               \
+    audio_orc_unpack_ ##fmt_t (dest, data, length);             \
+  else                                                          \
+    audio_orc_unpack_ ##fmt (dest, data, length);               \
+}                                                               \
+static void pack_ ##fmt (const GstAudioFormatInfo *info,        \
+    GstAudioPackFlags flags, const gpointer src,                \
+    gpointer data, gint length) {                               \
+  audio_orc_pack_ ##fmt (data, src, length);                    \
 }
 
 #define PACK_S8 GST_AUDIO_FORMAT_S32, unpack_s8, pack_s8
-MAKE_ORC_PACK_UNPACK (s8)
+MAKE_ORC_PACK_UNPACK (s8, s8_trunc)
 #define PACK_U8 GST_AUDIO_FORMAT_S32, unpack_u8, pack_u8
-    MAKE_ORC_PACK_UNPACK (u8)
+    MAKE_ORC_PACK_UNPACK (u8, u8_trunc)
 #define PACK_S16LE GST_AUDIO_FORMAT_S32, unpack_s16le, pack_s16le
-    MAKE_ORC_PACK_UNPACK (s16le)
+    MAKE_ORC_PACK_UNPACK (s16le, s16le_trunc)
 #define PACK_S16BE GST_AUDIO_FORMAT_S32, unpack_s16be, pack_s16be
-    MAKE_ORC_PACK_UNPACK (s16be)
+    MAKE_ORC_PACK_UNPACK (s16be, s16be_trunc)
 #define PACK_U16LE GST_AUDIO_FORMAT_S32, unpack_u16le, pack_u16le
-    MAKE_ORC_PACK_UNPACK (u16le)
+    MAKE_ORC_PACK_UNPACK (u16le, u16le_trunc)
 #define PACK_U16BE GST_AUDIO_FORMAT_S32, unpack_u16be, pack_u16be
-    MAKE_ORC_PACK_UNPACK (u16be)
+    MAKE_ORC_PACK_UNPACK (u16be, u16be_trunc)
 #define PACK_S24_32LE GST_AUDIO_FORMAT_S32, unpack_s24_32le, pack_s24_32le
-    MAKE_ORC_PACK_UNPACK (s24_32le)
+    MAKE_ORC_PACK_UNPACK (s24_32le, s24_32le)
 #define PACK_S24_32BE GST_AUDIO_FORMAT_S32, unpack_s24_32be, pack_s24_32be
-    MAKE_ORC_PACK_UNPACK (s24_32be)
+    MAKE_ORC_PACK_UNPACK (s24_32be, s24_32be)
 #define PACK_U24_32LE GST_AUDIO_FORMAT_S32, unpack_u24_32le, pack_u24_32le
-    MAKE_ORC_PACK_UNPACK (u24_32le)
+    MAKE_ORC_PACK_UNPACK (u24_32le, u24_32le)
 #define PACK_U24_32BE GST_AUDIO_FORMAT_S32, unpack_u24_32be, pack_u24_32be
-    MAKE_ORC_PACK_UNPACK (u24_32be)
+    MAKE_ORC_PACK_UNPACK (u24_32be, u24_32be)
 #define PACK_S32LE GST_AUDIO_FORMAT_S32, unpack_s32le, pack_s32le
-    MAKE_ORC_PACK_UNPACK (s32le)
+    MAKE_ORC_PACK_UNPACK (s32le, s32le)
 #define PACK_S32BE GST_AUDIO_FORMAT_S32, unpack_s32be, pack_s32be
-    MAKE_ORC_PACK_UNPACK (s32be)
+    MAKE_ORC_PACK_UNPACK (s32be, s32be)
 #define PACK_U32LE GST_AUDIO_FORMAT_S32, unpack_u32le, pack_u32le
-    MAKE_ORC_PACK_UNPACK (u32le)
+    MAKE_ORC_PACK_UNPACK (u32le, u32le)
 #define PACK_U32BE GST_AUDIO_FORMAT_S32, unpack_u32be, pack_u32be
-    MAKE_ORC_PACK_UNPACK (u32be)
+    MAKE_ORC_PACK_UNPACK (u32be, u32be)
 #define SIGNED  (1U<<31)
 /* pack from signed integer 32 to integer */
 #define WRITE24_TO_LE(p,v) p[0] = v & 0xff; p[1] = (v >> 8) & 0xff; p[2] = (v >> 16) & 0xff
@@ -197,13 +208,13 @@
 #define PACK_U18BE GST_AUDIO_FORMAT_S32, unpack_u18be, pack_u18be
     MAKE_PACK_UNPACK (u18be, 3, SIGNED, 14, READ24_FROM_BE, WRITE24_TO_BE)
 #define PACK_F32LE GST_AUDIO_FORMAT_F64, unpack_f32le, pack_f32le
-    MAKE_ORC_PACK_UNPACK (f32le)
+    MAKE_ORC_PACK_UNPACK (f32le, f32le)
 #define PACK_F32BE GST_AUDIO_FORMAT_F64, unpack_f32be, pack_f32be
-    MAKE_ORC_PACK_UNPACK (f32be)
+    MAKE_ORC_PACK_UNPACK (f32be, f32be)
 #define PACK_F64LE GST_AUDIO_FORMAT_F64, unpack_f64le, pack_f64le
-    MAKE_ORC_PACK_UNPACK (f64le)
+    MAKE_ORC_PACK_UNPACK (f64le, f64le)
 #define PACK_F64BE GST_AUDIO_FORMAT_F64, unpack_f64be, pack_f64be
-    MAKE_ORC_PACK_UNPACK (f64be)
+    MAKE_ORC_PACK_UNPACK (f64be, f64be)
 #define SINT (GST_AUDIO_FORMAT_FLAG_INTEGER | GST_AUDIO_FORMAT_FLAG_SIGNED)
 #define SINT_PACK (SINT | GST_AUDIO_FORMAT_FLAG_UNPACK)
 #define UINT (GST_AUDIO_FORMAT_FLAG_INTEGER)
diff --git a/gst-libs/gst/audio/audio-format.h b/gst-libs/gst/audio/audio-format.h
index d2d07b8..0fbc415 100644
--- a/gst-libs/gst/audio/audio-format.h
+++ b/gst-libs/gst/audio/audio-format.h
@@ -171,12 +171,18 @@
 /**
  * GstAudioPackFlags:
  * @GST_AUDIO_PACK_FLAG_NONE: No flag
+ * @GST_AUDIO_PACK_FLAG_TRUNCATE_RANGE: When the source has a smaller depth
+ *   than the target format, set the least significant bits of the target
+ *   to 0. This is likely sightly faster but less accurate. When this flag
+ *   is not specified, the most significant bits of the source are duplicated
+ *   in the least significant bits of the destination.
  *
  * The different flags that can be used when packing and unpacking.
  */
 typedef enum
 {
-  GST_AUDIO_PACK_FLAG_NONE       = 0
+  GST_AUDIO_PACK_FLAG_NONE             = 0,
+  GST_AUDIO_PACK_FLAG_TRUNCATE_RANGE   = (1 << 0)
 } GstAudioPackFlags;
 
 /**
diff --git a/gst-libs/gst/audio/audio-info.c b/gst-libs/gst/audio/audio-info.c
index e5f3341..739448c 100644
--- a/gst-libs/gst/audio/audio-info.c
+++ b/gst-libs/gst/audio/audio-info.c
@@ -27,6 +27,29 @@
 
 #include <gst/gststructure.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 ("audio-info", 0,
+        "audio-info object");
+
+    g_once_init_leave (&cat_gonce, cat_done);
+  }
+
+  return (GstDebugCategory *) cat_gonce;
+}
+#else
+#define ensure_debug_category() /* NOOP */
+#endif /* GST_DISABLE_GST_DEBUG */
+
+
 /**
  * gst_audio_info_copy:
  * @info: a #GstAudioInfo
diff --git a/gst-libs/gst/audio/audio-info.h b/gst-libs/gst/audio/audio-info.h
index 7e271af..0f7c7d8 100644
--- a/gst-libs/gst/audio/audio-info.h
+++ b/gst-libs/gst/audio/audio-info.h
@@ -131,6 +131,10 @@
 gboolean       gst_audio_info_is_equal    (const GstAudioInfo *info,
                                            const GstAudioInfo *other);
 
+#ifdef G_DEFINE_AUTOPTR_CLEANUP_FUNC
+G_DEFINE_AUTOPTR_CLEANUP_FUNC(GstAudioInfo, gst_audio_info_free)
+#endif
+
 G_END_DECLS
 
 #endif /* __GST_AUDIO_INFO_H__ */
diff --git a/gst-libs/gst/audio/audio-quantize.c b/gst-libs/gst/audio/audio-quantize.c
new file mode 100644
index 0000000..49dfb26
--- /dev/null
+++ b/gst-libs/gst/audio/audio-quantize.c
@@ -0,0 +1,516 @@
+/* GStreamer
+ * Copyright (C) 2007 Sebastian Dröge <slomo@circular-chaos.org>
+ *           (C) 2015 Wim Taymans <wim.taymans@gmail.com>
+ *
+ * gstaudioquantize.c: quantizes audio to the target format and optionally
+ *                     applies dithering and noise shaping.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+/* TODO: - Maybe drop 5-pole noise shaping and use coefficients
+ *         generated by dmaker
+ *         http://shibatch.sf.net
+ */
+
+#include <gst/gst.h>
+#include <string.h>
+#include <math.h>
+
+#include "gstaudiopack.h"
+#include "audio-quantize.h"
+
+typedef void (*QuantizeFunc) (GstAudioQuantize * quant, const gpointer src,
+    gpointer dst, gint count);
+
+struct _GstAudioQuantize
+{
+  GstAudioDitherMethod dither;
+  GstAudioNoiseShapingMethod ns;
+  GstAudioQuantizeFlags flags;
+  GstAudioFormat format;
+  guint quantizer;
+  guint stride;
+  guint blocks;
+
+  guint shift;
+  guint32 mask, bias;
+
+  /* last random number generated per channel for hifreq TPDF dither */
+  gpointer last_random;
+  /* contains the past quantization errors, error[channels][count] */
+  guint error_size;
+  gpointer error_buf;
+  /* buffer with dither values */
+  guint dither_size;
+  gpointer dither_buf;
+  /* noise shaping coefficients */
+  gpointer coeffs;
+  gint n_coeffs;
+
+  QuantizeFunc quantize;
+};
+
+#define ADDSS(res,val) \
+        if (val > 0 && res > 0 && G_MAXINT32 - res <= val){             \
+          res = G_MAXINT32;                                             \
+        } else if (val < 0 && res < 0 && G_MININT32 - res >= val){      \
+          res = G_MININT32;                                             \
+        } else                                                          \
+          res += val;
+
+static void
+gst_audio_quantize_quantize_memcpy (GstAudioQuantize * quant,
+    const gpointer src, gpointer dst, gint samples)
+{
+  if (src != dst)
+    memcpy (dst, src, samples * sizeof (gint32) * quant->stride);
+}
+
+/* Quantize functions for gint32 as intermediate format */
+static void
+gst_audio_quantize_quantize_int_none_none (GstAudioQuantize * quant,
+    const gpointer src, gpointer dst, gint samples)
+{
+  audio_orc_int_bias (dst, src, quant->bias, ~quant->mask,
+      samples * quant->stride);
+}
+
+/* This is the base function, implementing a linear congruential generator
+ * and returning a pseudo random number between 0 and 2^32 - 1.
+ */
+static inline guint32
+gst_fast_random_uint32 (void)
+{
+  static guint32 state = 0xdeadbeef;
+  return (state = state * 1103515245 + 12345);
+}
+
+static inline gint32
+gst_fast_random_int32 (void)
+{
+  return (gint32) gst_fast_random_uint32 ();
+}
+
+/* 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)))
+
+static void
+setup_dither_buf (GstAudioQuantize * quant, gint samples)
+{
+  gboolean need_init = FALSE;
+  gint stride = quant->stride;
+  gint i, len = samples * stride;
+  guint shift = quant->shift;
+  guint32 bias;
+  gint32 dither, *d;
+
+  if (quant->dither_size < len) {
+    quant->dither_size = len;
+    quant->dither_buf = g_realloc (quant->dither_buf, len * sizeof (gint32));
+    need_init = TRUE;
+  }
+
+  bias = quant->bias;
+  d = quant->dither_buf;
+
+  switch (quant->dither) {
+    case GST_AUDIO_DITHER_NONE:
+      if (need_init) {
+        for (i = 0; i < len; i++)
+          d[i] = 0;
+      }
+      break;
+
+    case GST_AUDIO_DITHER_RPDF:
+      dither = 1 << (shift);
+      for (i = 0; i < len; i++)
+        d[i] = bias + RANDOM_INT_DITHER (dither);
+      break;
+
+    case GST_AUDIO_DITHER_TPDF:
+      dither = 1 << (shift - 1);
+      for (i = 0; i < len; i++)
+        d[i] = bias + RANDOM_INT_DITHER (dither) + RANDOM_INT_DITHER (dither);
+      break;
+
+    case GST_AUDIO_DITHER_TPDF_HF:
+    {
+      gint32 tmp, *last_random = quant->last_random;
+
+      dither = 1 << (shift - 1);
+      for (i = 0; i < len; i++) {
+        tmp = RANDOM_INT_DITHER (dither);
+        d[i] = bias + tmp - last_random[i % stride];
+        last_random[i % stride] = tmp;
+      }
+      break;
+    }
+  }
+}
+
+static void
+gst_audio_quantize_quantize_int_dither_none (GstAudioQuantize * quant,
+    const gpointer src, gpointer dst, gint samples)
+{
+  setup_dither_buf (quant, samples);
+
+  audio_orc_int_dither (dst, src, quant->dither_buf, ~quant->mask,
+      samples * quant->stride);
+}
+
+static void
+setup_error_buf (GstAudioQuantize * quant, gint samples)
+{
+  gint stride = quant->stride;
+  gint len = (samples + quant->n_coeffs) * stride;
+
+  if (quant->error_size < len) {
+    quant->error_buf = g_realloc (quant->error_buf, len * sizeof (gint32));
+    if (quant->error_size == 0)
+      memset ((gint32 *) quant->error_buf, 0,
+          stride * quant->n_coeffs * sizeof (gint32));
+    quant->error_size = len;
+  }
+}
+
+static void
+gst_audio_quantize_quantize_int_dither_feedback (GstAudioQuantize * quant,
+    const gpointer src, gpointer dst, gint samples)
+{
+  guint32 mask;
+  gint i, len, stride;
+  const gint32 *s = src;
+  gint32 *dith, *d = dst, v, o, *e, err;
+
+  setup_dither_buf (quant, samples);
+  setup_error_buf (quant, samples);
+
+  stride = quant->stride;
+  len = samples * stride;
+  dith = quant->dither_buf;
+  e = quant->error_buf;
+  mask = ~quant->mask;
+
+  for (i = 0; i < len; i++) {
+    o = v = s[i];
+    /* add dither */
+    err = dith[i];
+    /* remove error */
+    err -= e[i];
+    ADDSS (v, err);
+    v &= mask;
+    /* store new error */
+    e[i + stride] = e[i] + (v - o);
+    /* store result */
+    d[i] = v;
+  }
+  memmove (e, &e[len], sizeof (gint32) * stride);
+}
+
+#define SHIFT 10
+#define REDUCE 8
+#define RROUND (1<<(REDUCE-1))
+#define SREDUCE 2
+#define SROUND (1<<(SREDUCE-1))
+
+static void
+gst_audio_quantize_quantize_int_dither_noise_shape (GstAudioQuantize * quant,
+    const gpointer src, gpointer dst, gint samples)
+{
+  guint32 mask;
+  gint i, j, k, len, stride, nc;
+  const gint32 *s = src;
+  gint32 *c, *dith, *d = dst, v, o, *e, err;
+
+  setup_dither_buf (quant, samples);
+  setup_error_buf (quant, samples);
+
+  stride = quant->stride;
+  len = samples * stride;
+  dith = quant->dither_buf;
+  e = quant->error_buf;
+  c = quant->coeffs;
+  nc = quant->n_coeffs;
+  mask = ~quant->mask;
+
+  for (i = 0; i < len; i++) {
+    v = s[i];
+    /* combine and remove error */
+    err = 0;
+    for (j = 0, k = i; j < nc; j++, k += stride)
+      err -= e[k] * c[j];
+    err = (err + SROUND) >> (SREDUCE);
+    ADDSS (v, err);
+    o = v;
+    /* add dither */
+    err = dith[i];
+    ADDSS (v, err);
+    /* quantize */
+    v &= mask;
+    /* store new error with reduced precision */
+    e[k] = (v - o + RROUND) >> REDUCE;
+    /* store result */
+    d[i] = v;
+  }
+  memmove (e, &e[len], sizeof (gint32) * stride * nc);
+}
+
+#define MAKE_QUANTIZE_FUNC_NAME(name)                                   \
+gst_audio_quantize_quantize_##name
+
+static const QuantizeFunc quantize_funcs[] = {
+  (QuantizeFunc) MAKE_QUANTIZE_FUNC_NAME (int_none_none),
+  (QuantizeFunc) MAKE_QUANTIZE_FUNC_NAME (int_dither_feedback),
+  (QuantizeFunc) MAKE_QUANTIZE_FUNC_NAME (int_dither_noise_shape),
+  (QuantizeFunc) MAKE_QUANTIZE_FUNC_NAME (int_dither_noise_shape),
+  (QuantizeFunc) MAKE_QUANTIZE_FUNC_NAME (int_dither_noise_shape),
+  (QuantizeFunc) MAKE_QUANTIZE_FUNC_NAME (int_dither_none),
+  (QuantizeFunc) MAKE_QUANTIZE_FUNC_NAME (int_dither_feedback),
+  (QuantizeFunc) MAKE_QUANTIZE_FUNC_NAME (int_dither_noise_shape),
+  (QuantizeFunc) MAKE_QUANTIZE_FUNC_NAME (int_dither_noise_shape),
+  (QuantizeFunc) MAKE_QUANTIZE_FUNC_NAME (int_dither_noise_shape),
+  (QuantizeFunc) MAKE_QUANTIZE_FUNC_NAME (int_dither_none),
+  (QuantizeFunc) MAKE_QUANTIZE_FUNC_NAME (int_dither_feedback),
+  (QuantizeFunc) MAKE_QUANTIZE_FUNC_NAME (int_dither_noise_shape),
+  (QuantizeFunc) MAKE_QUANTIZE_FUNC_NAME (int_dither_noise_shape),
+  (QuantizeFunc) MAKE_QUANTIZE_FUNC_NAME (int_dither_noise_shape),
+  (QuantizeFunc) MAKE_QUANTIZE_FUNC_NAME (int_dither_none),
+  (QuantizeFunc) MAKE_QUANTIZE_FUNC_NAME (int_dither_feedback),
+  (QuantizeFunc) MAKE_QUANTIZE_FUNC_NAME (int_dither_noise_shape),
+  (QuantizeFunc) MAKE_QUANTIZE_FUNC_NAME (int_dither_noise_shape),
+  (QuantizeFunc) MAKE_QUANTIZE_FUNC_NAME (int_dither_noise_shape),
+};
+
+/* Same as error feedback but also add 1/2 of the previous error value.
+ * This moves the noise a bit more into the higher frequencies. */
+static const gdouble ns_simple_coeffs[] = {
+  -0.5, 1.0
+};
+
+/* Noise shaping coefficients from[1], moves most power of the
+ * error noise into inaudible frequency ranges.
+ *
+ * [1]
+ * "Minimally Audible Noise Shaping", Stanley P. Lipshitz,
+ * John Vanderkooy, and Robert A. Wannamaker,
+ * J. Audio Eng. Soc., Vol. 39, No. 11, November 1991. */
+
+static const gdouble ns_medium_coeffs[] = {
+  0.6149, -1.590, 1.959, -2.165, 2.033
+};
+
+/* Noise shaping coefficients by David Schleef, moves most power of the
+ * error noise into inaudible frequency ranges */
+static const gdouble ns_high_coeffs[] = {
+  -0.340122, 0.876066, -1.72008, 2.61339, -3.31399, 3.27918, -2.92975, 2.08484,
+};
+
+
+static void
+gst_audio_quantize_setup_noise_shaping (GstAudioQuantize * quant)
+{
+  gint i, n_coeffs = 0;
+  gint32 *q;
+  const gdouble *coeffs;
+
+  switch (quant->ns) {
+    case GST_AUDIO_NOISE_SHAPING_HIGH:
+      n_coeffs = 8;
+      coeffs = ns_high_coeffs;
+      break;
+
+    case GST_AUDIO_NOISE_SHAPING_MEDIUM:
+      n_coeffs = 5;
+      coeffs = ns_medium_coeffs;
+      break;
+
+    case GST_AUDIO_NOISE_SHAPING_SIMPLE:
+      n_coeffs = 2;
+      coeffs = ns_simple_coeffs;
+      break;
+
+    case GST_AUDIO_NOISE_SHAPING_ERROR_FEEDBACK:
+      break;
+
+    case GST_AUDIO_NOISE_SHAPING_NONE:
+    default:
+      break;
+  }
+
+  if (n_coeffs) {
+    quant->n_coeffs = n_coeffs;
+    q = quant->coeffs = g_new0 (gint32, n_coeffs);
+    for (i = 0; i < n_coeffs; i++)
+      q[i] = floor (coeffs[i] * (1 << SHIFT) + 0.5);
+  }
+  return;
+}
+
+static void
+gst_audio_quantize_setup_dither (GstAudioQuantize * quant)
+{
+  switch (quant->dither) {
+    case GST_AUDIO_DITHER_TPDF_HF:
+      quant->last_random = g_new0 (gint32, quant->stride);
+      break;
+    case GST_AUDIO_DITHER_RPDF:
+    case GST_AUDIO_DITHER_TPDF:
+      quant->last_random = NULL;
+      break;
+    case GST_AUDIO_DITHER_NONE:
+    default:
+      quant->last_random = NULL;
+      break;
+  }
+  return;
+}
+
+static void
+gst_audio_quantize_setup_quantize_func (GstAudioQuantize * quant)
+{
+  gint index;
+
+  if (quant->shift == 0) {
+    quant->quantize = (QuantizeFunc) MAKE_QUANTIZE_FUNC_NAME (memcpy);
+    return;
+  }
+
+  index = 5 * quant->dither + quant->ns;
+  quant->quantize = quantize_funcs[index];
+}
+
+static gint
+count_power (guint v)
+{
+  gint res = 0;
+  while (v > 1) {
+    res++;
+    v >>= 1;
+  }
+  return res;
+}
+
+/**
+ * gst_audio_quantize_new:
+ * @dither: a #GstAudioDitherMethod
+ * @ns: a #GstAudioNoiseShapingMethod
+ * @flags: #GstAudioQuantizeFlags
+ * @format: the #GstAudioFormat of the samples
+ * @channels: the amount of channels in the samples
+ * @quantizer: the quantizer to use
+ *
+ * Create a new quantizer object with the given parameters.
+ *
+ * Output samples will be quantized to a multiple of @quantizer. Better
+ * performance is achieved when @quantizer is a power of 2.
+ *
+ * Dithering and noise-shaping can be performed during quantization with
+ * the @dither and @ns parameters.
+ *
+ * Returns: a new #GstAudioQuantize. Free with gst_audio_quantize_free().
+ */
+GstAudioQuantize *
+gst_audio_quantize_new (GstAudioDitherMethod dither,
+    GstAudioNoiseShapingMethod ns, GstAudioQuantizeFlags flags,
+    GstAudioFormat format, guint channels, guint quantizer)
+{
+  GstAudioQuantize *quant;
+
+  g_return_val_if_fail (format == GST_AUDIO_FORMAT_S32, NULL);
+  g_return_val_if_fail (channels > 0, NULL);
+
+  quant = g_slice_new0 (GstAudioQuantize);
+  quant->dither = dither;
+  quant->ns = ns;
+  quant->flags = flags;
+  quant->format = format;
+  if (flags & GST_AUDIO_QUANTIZE_FLAG_NON_INTERLEAVED) {
+    quant->stride = 1;
+    quant->blocks = channels;
+  } else {
+    quant->stride = channels;
+    quant->blocks = 1;
+  }
+  quant->quantizer = quantizer;
+
+  quant->shift = count_power (quantizer);
+  if (quant->shift > 0)
+    quant->bias = (1U << (quant->shift - 1));
+  else
+    quant->bias = 0;
+  quant->mask = (1U << quant->shift) - 1;
+
+  gst_audio_quantize_setup_dither (quant);
+  gst_audio_quantize_setup_noise_shaping (quant);
+  gst_audio_quantize_setup_quantize_func (quant);
+
+  return quant;
+}
+
+/**
+ * gst_audio_quantize_free:
+ * @quant: a #GstAudioQuantize
+ *
+ * Free a #GstAudioQuantize.
+ */
+void
+gst_audio_quantize_free (GstAudioQuantize * quant)
+{
+  g_return_if_fail (quant != NULL);
+
+  g_free (quant->error_buf);
+  g_free (quant->coeffs);
+  g_free (quant->last_random);
+  g_free (quant->dither_buf);
+
+  g_slice_free (GstAudioQuantize, quant);
+}
+
+/**
+ * gst_audio_quantize_samples:
+ * @quant: a #GstAudioQuantize
+ * @in: input samples
+ * @out: output samples
+ * @samples: number of samples
+ *
+ * Perform quantization on @samples in @in and write the result to @out.
+ *
+ * In case the samples are interleaved, @in and @out must point to an
+ * array with a single element pointing to a block of interleaved samples.
+ *
+ * If non-interleaved samples are used, @in and @out must point to an
+ * array with pointers to memory blocks, one for each channel.
+ *
+ * @in and @out may point to the same memory location, in which case samples will be
+ * modified in-place.
+ */
+void
+gst_audio_quantize_samples (GstAudioQuantize * quant,
+    const gpointer in[], gpointer out[], guint samples)
+{
+  guint i;
+
+  g_return_if_fail (quant != NULL);
+  g_return_if_fail (out != NULL || samples == 0);
+  g_return_if_fail (in != NULL || samples == 0);
+
+  for (i = 0; i < quant->blocks; i++)
+    quant->quantize (quant, in[i], out[i], samples);
+}
diff --git a/gst-libs/gst/audio/audio-quantize.h b/gst-libs/gst/audio/audio-quantize.h
new file mode 100644
index 0000000..0c70237
--- /dev/null
+++ b/gst-libs/gst/audio/audio-quantize.h
@@ -0,0 +1,97 @@
+/* GStreamer
+ * Copyright (C) 2007 Sebastian Dröge <slomo@circular-chaos.org>
+ *           (C) 2015 Wim Taymans <wim.taymans@gmail.com>
+ *
+ * gstaudioquantize.h: quantizes audio to the target format and optionally
+ *                     applies dithering and noise shaping.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#include <gst/gst.h>
+
+#include <gst/audio/audio.h>
+
+
+#ifndef __GST_AUDIO_QUANTIZE_H__
+#define __GST_AUDIO_QUANTIZE_H__
+
+/**
+ * GstAudioDitherMethod:
+ * @GST_AUDIO_DITHER_NONE: No dithering
+ * @GST_AUDIO_DITHER_RPDF: Rectangular dithering
+ * @GST_AUDIO_DITHER_TPDF: Triangular dithering (default)
+ * @GST_AUDIO_DITHER_TPDF_HF: High frequency triangular dithering
+ *
+ * Set of available dithering methods.
+ */
+typedef enum
+{
+  GST_AUDIO_DITHER_NONE = 0,
+  GST_AUDIO_DITHER_RPDF,
+  GST_AUDIO_DITHER_TPDF,
+  GST_AUDIO_DITHER_TPDF_HF
+} GstAudioDitherMethod;
+
+/**
+ * GstAudioNoiseShapingMethod:
+ * @GST_AUDIO_NOISE_SHAPING_NONE: No noise shaping (default)
+ * @GST_AUDIO_NOISE_SHAPING_ERROR_FEEDBACK: Error feedback
+ * @GST_AUDIO_NOISE_SHAPING_SIMPLE: Simple 2-pole noise shaping
+ * @GST_AUDIO_NOISE_SHAPING_MEDIUM: Medium 5-pole noise shaping
+ * @GST_AUDIO_NOISE_SHAPING_HIGH: High 8-pole noise shaping
+ *
+ * Set of available noise shaping methods
+ */
+typedef enum
+{
+  GST_AUDIO_NOISE_SHAPING_NONE = 0,
+  GST_AUDIO_NOISE_SHAPING_ERROR_FEEDBACK,
+  GST_AUDIO_NOISE_SHAPING_SIMPLE,
+  GST_AUDIO_NOISE_SHAPING_MEDIUM,
+  GST_AUDIO_NOISE_SHAPING_HIGH
+} GstAudioNoiseShapingMethod;
+
+/**
+ * GstAudioQuantizeFlags:
+ * @GST_AUDIO_QUANTIZE_FLAG_NONE: no flags
+ * @GST_AUDIO_QUANTIZE_FLAG_NON_INTERLEAVED: samples are non-interleaved
+ *
+ * Extra flags that can be passed to gst_audio_quantize_new()
+ */
+typedef enum
+{
+  GST_AUDIO_QUANTIZE_FLAG_NONE            = 0,
+  GST_AUDIO_QUANTIZE_FLAG_NON_INTERLEAVED = (1 << 0)
+} GstAudioQuantizeFlags;
+
+
+typedef struct _GstAudioQuantize GstAudioQuantize;
+
+GstAudioQuantize *  gst_audio_quantize_new      (GstAudioDitherMethod dither,
+                                                 GstAudioNoiseShapingMethod ns,
+                                                 GstAudioQuantizeFlags flags,
+                                                 GstAudioFormat format,
+                                                 guint channels,
+                                                 guint quantizer);
+
+void                gst_audio_quantize_free     (GstAudioQuantize * quant);
+
+void                gst_audio_quantize_samples  (GstAudioQuantize * quant,
+                                                 const gpointer in[],
+                                                 gpointer out[], guint samples);
+
+#endif /* __GST_AUDIO_QUANTIZE_H__ */
diff --git a/gst-libs/gst/audio/audio.c b/gst-libs/gst/audio/audio.c
index de713d7..5f3556f 100644
--- a/gst-libs/gst/audio/audio.c
+++ b/gst-libs/gst/audio/audio.c
@@ -32,6 +32,28 @@
 #include "audio.h"
 #include "audio-enumtypes.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 ("audio", 0, "audio library");
+
+    g_once_init_leave (&cat_gonce, cat_done);
+  }
+
+  return (GstDebugCategory *) cat_gonce;
+}
+#else
+#define ensure_debug_category() /* NOOP */
+#endif /* GST_DISABLE_GST_DEBUG */
+
+
 /**
  * gst_audio_buffer_clip:
  * @buffer: (transfer full): The buffer to clip.
diff --git a/gst-libs/gst/audio/audio.h b/gst-libs/gst/audio/audio.h
index 9dde1aa..a48883f 100644
--- a/gst-libs/gst/audio/audio.h
+++ b/gst-libs/gst/audio/audio.h
@@ -26,7 +26,10 @@
 #include <gst/audio/audio-enumtypes.h>
 #include <gst/audio/audio-format.h>
 #include <gst/audio/audio-channels.h>
+#include <gst/audio/audio-channel-mix.h>
 #include <gst/audio/audio-info.h>
+#include <gst/audio/audio-quantize.h>
+#include <gst/audio/audio-converter.h>
 
 G_BEGIN_DECLS
 
@@ -70,6 +73,15 @@
  */
 #define GST_META_TAG_AUDIO_CHANNELS_STR "channels"
 
+/**
+ * GST_META_TAG_AUDIO_RATE_STR:
+ *
+ * This metadata stays relevant as long as sample rate is unchanged.
+ *
+ * Since: 1.8
+ */
+#define GST_META_TAG_AUDIO_RATE_STR "rate"
+
 /*
  * this library defines and implements some helper functions for audio
  * handling
diff --git a/gst-libs/gst/audio/gstaudiobasesink.c b/gst-libs/gst/audio/gstaudiobasesink.c
index 4505022..62fab35 100644
--- a/gst-libs/gst/audio/gstaudiobasesink.c
+++ b/gst-libs/gst/audio/gstaudiobasesink.c
@@ -1006,6 +1006,9 @@
 
   gst_audio_ring_buffer_debug_spec_buff (spec);
 
+  gst_element_post_message (GST_ELEMENT_CAST (bsink),
+      gst_message_new_latency (GST_OBJECT (bsink)));
+
   return TRUE;
 
   /* ERRORS */
@@ -1311,8 +1314,8 @@
   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);
+    GST_DEBUG_OBJECT (sink, "custom slaving requested skew %" GST_STIME_FORMAT,
+        GST_STIME_ARGS (requested_skew));
   } else {
     GST_DEBUG_OBJECT (sink,
         "no custom slaving callback set - clock drift will not be compensated");
@@ -1465,8 +1468,9 @@
   }
 
   GST_DEBUG_OBJECT (sink, "internal %" GST_TIME_FORMAT " external %"
-      GST_TIME_FORMAT " skew %" G_GINT64_FORMAT " avg %" G_GINT64_FORMAT,
-      GST_TIME_ARGS (itime), GST_TIME_ARGS (etime), skew, sink->priv->avg_skew);
+      GST_TIME_FORMAT " skew %" GST_STIME_FORMAT " avg %" GST_STIME_FORMAT,
+      GST_TIME_ARGS (itime), GST_TIME_ARGS (etime), GST_STIME_ARGS (skew),
+      GST_STIME_ARGS (sink->priv->avg_skew));
 
   /* the max drift we allow */
   mdrift = sink->priv->drift_tolerance * 1000;
@@ -1476,8 +1480,8 @@
   if (sink->priv->avg_skew > mdrift2) {
     /* master is running slower, move internal time forward */
     GST_WARNING_OBJECT (sink,
-        "correct clock skew %" G_GINT64_FORMAT " > %" G_GINT64_FORMAT,
-        sink->priv->avg_skew, mdrift2);
+        "correct clock skew %" GST_STIME_FORMAT " > %" GST_STIME_FORMAT,
+        GST_STIME_ARGS (sink->priv->avg_skew), GST_STIME_ARGS (mdrift2));
 
     if (sink->priv->avg_skew > (2 * mdrift)) {
       cexternal -= sink->priv->avg_skew;
@@ -1504,8 +1508,8 @@
   } else if (sink->priv->avg_skew < -mdrift2) {
     /* master is running faster, move external time forwards */
     GST_WARNING_OBJECT (sink,
-        "correct clock skew %" G_GINT64_FORMAT " < %" G_GINT64_FORMAT,
-        sink->priv->avg_skew, -mdrift2);
+        "correct clock skew %" GST_STIME_FORMAT " < -%" GST_STIME_FORMAT,
+        GST_STIME_ARGS (sink->priv->avg_skew), GST_STIME_ARGS (mdrift2));
 
     if (sink->priv->avg_skew < (2 * -mdrift)) {
       cexternal -= sink->priv->avg_skew;
@@ -1944,9 +1948,9 @@
   sync_offset = ts_offset - render_delay + latency;
 
   GST_DEBUG_OBJECT (sink,
-      "sync-offset %" G_GINT64_FORMAT ", render-delay %" GST_TIME_FORMAT
-      ", ts-offset %" G_GINT64_FORMAT, sync_offset,
-      GST_TIME_ARGS (render_delay), ts_offset);
+      "sync-offset %" GST_STIME_FORMAT ", render-delay %" GST_TIME_FORMAT
+      ", ts-offset %" GST_STIME_FORMAT, GST_STIME_ARGS (sync_offset),
+      GST_TIME_ARGS (render_delay), GST_STIME_ARGS (ts_offset));
 
   /* compensate for ts-offset and device-delay when negative we need to
    * clip. */
diff --git a/gst-libs/gst/audio/gstaudiobasesink.h b/gst-libs/gst/audio/gstaudiobasesink.h
index fbb85e9..8c709bd 100644
--- a/gst-libs/gst/audio/gstaudiobasesink.h
+++ b/gst-libs/gst/audio/gstaudiobasesink.h
@@ -258,6 +258,10 @@
 
 void gst_audio_base_sink_report_device_failure         (GstAudioBaseSink * sink);
 
+#ifdef G_DEFINE_AUTOPTR_CLEANUP_FUNC
+G_DEFINE_AUTOPTR_CLEANUP_FUNC(GstAudioBaseSink, gst_object_unref)
+#endif
+
 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 b529b76..1f0dc76 100644
--- a/gst-libs/gst/audio/gstaudiobasesrc.c
+++ b/gst-libs/gst/audio/gstaudiobasesrc.c
@@ -583,6 +583,9 @@
   g_object_notify (G_OBJECT (src), "actual-buffer-time");
   g_object_notify (G_OBJECT (src), "actual-latency-time");
 
+  gst_element_post_message (GST_ELEMENT_CAST (bsrc),
+      gst_message_new_latency (GST_OBJECT (bsrc)));
+
   return TRUE;
 
   /* ERRORS */
diff --git a/gst-libs/gst/audio/gstaudiobasesrc.h b/gst-libs/gst/audio/gstaudiobasesrc.h
index 0c5323e..7bf2de4 100644
--- a/gst-libs/gst/audio/gstaudiobasesrc.h
+++ b/gst-libs/gst/audio/gstaudiobasesrc.h
@@ -145,6 +145,10 @@
            gst_audio_base_src_get_slave_method         (GstAudioBaseSrc *src);
 
 
+#ifdef G_DEFINE_AUTOPTR_CLEANUP_FUNC
+G_DEFINE_AUTOPTR_CLEANUP_FUNC(GstAudioBaseSrc, gst_object_unref)
+#endif
+
 G_END_DECLS
 
 #endif /* __GST_AUDIO_BASE_SRC_H__ */
diff --git a/gst-libs/gst/audio/gstaudiocdsrc.h b/gst-libs/gst/audio/gstaudiocdsrc.h
index 593926d..dcfabae 100644
--- a/gst-libs/gst/audio/gstaudiocdsrc.h
+++ b/gst-libs/gst/audio/gstaudiocdsrc.h
@@ -139,6 +139,10 @@
 gboolean gst_audio_cd_src_add_track (GstAudioCdSrc      * src,
                                      GstAudioCdSrcTrack * track);
 
+#ifdef G_DEFINE_AUTOPTR_CLEANUP_FUNC
+G_DEFINE_AUTOPTR_CLEANUP_FUNC(GstAudioCdSrc, gst_object_unref)
+#endif
+
 G_END_DECLS
 
 #endif /* __GST_AUDIO_CD_SRC_H__ */
diff --git a/gst-libs/gst/audio/gstaudioclock.c b/gst-libs/gst/audio/gstaudioclock.c
index 17709fc..9d37ad2 100644
--- a/gst-libs/gst/audio/gstaudioclock.c
+++ b/gst-libs/gst/audio/gstaudioclock.c
@@ -136,9 +136,9 @@
   clock->time_offset = time_offset;
 
   GST_DEBUG_OBJECT (clock,
-      "reset clock to %" GST_TIME_FORMAT ", last %" GST_TIME_FORMAT ", offset %"
-      GST_TIME_FORMAT, GST_TIME_ARGS (time), GST_TIME_ARGS (clock->last_time),
-      GST_TIME_ARGS (time_offset));
+      "reset clock to %" GST_TIME_FORMAT ", last %" GST_STIME_FORMAT
+      ", offset %" GST_TIME_FORMAT, GST_TIME_ARGS (time),
+      GST_TIME_ARGS (clock->last_time), GST_STIME_ARGS (time_offset));
 }
 
 static GstClockTime
diff --git a/gst-libs/gst/audio/gstaudioclock.h b/gst-libs/gst/audio/gstaudioclock.h
index d04a4cd..4956c9b 100644
--- a/gst-libs/gst/audio/gstaudioclock.h
+++ b/gst-libs/gst/audio/gstaudioclock.h
@@ -99,6 +99,10 @@
 
 void            gst_audio_clock_invalidate      (GstClock * clock);
 
+#ifdef G_DEFINE_AUTOPTR_CLEANUP_FUNC
+G_DEFINE_AUTOPTR_CLEANUP_FUNC(GstAudioClock, gst_object_unref)
+#endif
+
 G_END_DECLS
 
 #endif /* __GST_AUDIO_CLOCK_H__ */
diff --git a/gst-libs/gst/audio/gstaudiodecoder.c b/gst-libs/gst/audio/gstaudiodecoder.c
index f4c663a..7a4e3f7 100644
--- a/gst-libs/gst/audio/gstaudiodecoder.c
+++ b/gst-libs/gst/audio/gstaudiodecoder.c
@@ -290,70 +290,6 @@
   gboolean use_default_pad_acceptcaps;
 };
 
-//* Default channel layouts taken from audioconvert */
-static const GstAudioChannelPosition default_positions[8][8] = {
-  /* 1 channel */
-  {
-        GST_AUDIO_CHANNEL_POSITION_MONO,
-      },
-  /* 2 channels */
-  {
-        GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT,
-        GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT,
-      },
-  /* 3 channels (2.1) */
-  {
-        GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT,
-        GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT,
-        GST_AUDIO_CHANNEL_POSITION_LFE1,
-      },
-  /* 4 channels (4.0) */
-  {
-        GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT,
-        GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT,
-        GST_AUDIO_CHANNEL_POSITION_REAR_LEFT,
-        GST_AUDIO_CHANNEL_POSITION_REAR_RIGHT,
-      },
-  /* 5 channels */
-  {
-        GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT,
-        GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT,
-        GST_AUDIO_CHANNEL_POSITION_REAR_LEFT,
-        GST_AUDIO_CHANNEL_POSITION_REAR_RIGHT,
-        GST_AUDIO_CHANNEL_POSITION_FRONT_CENTER,
-      },
-  /* 6 channels (5.1) */
-  {
-        GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT,
-        GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT,
-        GST_AUDIO_CHANNEL_POSITION_REAR_LEFT,
-        GST_AUDIO_CHANNEL_POSITION_REAR_RIGHT,
-        GST_AUDIO_CHANNEL_POSITION_FRONT_CENTER,
-        GST_AUDIO_CHANNEL_POSITION_LFE1,
-      },
-  /* 7 channels (6.1) */
-  {
-        GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT,
-        GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT,
-        GST_AUDIO_CHANNEL_POSITION_REAR_LEFT,
-        GST_AUDIO_CHANNEL_POSITION_REAR_RIGHT,
-        GST_AUDIO_CHANNEL_POSITION_FRONT_CENTER,
-        GST_AUDIO_CHANNEL_POSITION_LFE1,
-        GST_AUDIO_CHANNEL_POSITION_REAR_CENTER,
-      },
-  /* 8 channels (7.1) */
-  {
-        GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT,
-        GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT,
-        GST_AUDIO_CHANNEL_POSITION_REAR_LEFT,
-        GST_AUDIO_CHANNEL_POSITION_REAR_RIGHT,
-        GST_AUDIO_CHANNEL_POSITION_FRONT_CENTER,
-        GST_AUDIO_CHANNEL_POSITION_LFE1,
-        GST_AUDIO_CHANNEL_POSITION_SIDE_LEFT,
-        GST_AUDIO_CHANNEL_POSITION_SIDE_RIGHT,
-      }
-};
-
 static void gst_audio_decoder_finalize (GObject * object);
 static void gst_audio_decoder_set_property (GObject * object,
     guint prop_id, const GValue * value, GParamSpec * pspec);
@@ -2069,12 +2005,8 @@
   /* Need to add a channel-mask if channels > 2 */
   gst_structure_get_int (structure, "channels", &channels);
   if (channels > 2 && !gst_structure_has_field (structure, "channel-mask")) {
-    if (channels <= 8) {
-      channel_mask = 0;
-      for (i = 0; i < channels; i++)
-        channel_mask |=
-            G_GUINT64_CONSTANT (1) << default_positions[channels - 1][i];
-
+    channel_mask = gst_audio_channel_get_fallback_mask (channels);
+    if (channel_mask != 0) {
       gst_structure_set (structure, "channel-mask",
           GST_TYPE_BITMASK, channel_mask, NULL);
     } else {
diff --git a/gst-libs/gst/audio/gstaudiodecoder.h b/gst-libs/gst/audio/gstaudiodecoder.h
index 1c498ee..f364161 100644
--- a/gst-libs/gst/audio/gstaudiodecoder.h
+++ b/gst-libs/gst/audio/gstaudiodecoder.h
@@ -397,6 +397,10 @@
 void              gst_audio_decoder_set_use_default_pad_acceptcaps (GstAudioDecoder * decoder,
                                                                    gboolean use);
 
+#ifdef G_DEFINE_AUTOPTR_CLEANUP_FUNC
+G_DEFINE_AUTOPTR_CLEANUP_FUNC(GstAudioDecoder, gst_object_unref)
+#endif
+
 G_END_DECLS
 
 #endif /* _GST_AUDIO_DECODER_H_ */
diff --git a/gst-libs/gst/audio/gstaudioencoder.h b/gst-libs/gst/audio/gstaudioencoder.h
index c9f8272..47ca340 100644
--- a/gst-libs/gst/audio/gstaudioencoder.h
+++ b/gst-libs/gst/audio/gstaudioencoder.h
@@ -334,6 +334,10 @@
 void            gst_audio_encoder_merge_tags (GstAudioEncoder * enc,
                                               const GstTagList * tags, GstTagMergeMode mode);
 
+#ifdef G_DEFINE_AUTOPTR_CLEANUP_FUNC
+G_DEFINE_AUTOPTR_CLEANUP_FUNC(GstAudioEncoder, gst_object_unref)
+#endif
+
 G_END_DECLS
 
 #endif /* __GST_AUDIO_ENCODER_H__ */
diff --git a/gst-libs/gst/audio/gstaudiofilter.c b/gst-libs/gst/audio/gstaudiofilter.c
index ab8eac2..7abd011 100644
--- a/gst-libs/gst/audio/gstaudiofilter.c
+++ b/gst-libs/gst/audio/gstaudiofilter.c
@@ -55,6 +55,8 @@
     GstCaps * incaps, GstCaps * outcaps);
 static gboolean gst_audio_filter_get_unit_size (GstBaseTransform * btrans,
     GstCaps * caps, gsize * size);
+static GstFlowReturn gst_audio_filter_submit_input_buffer (GstBaseTransform *
+    btrans, gboolean is_discont, GstBuffer * input);
 
 #define do_init G_STMT_START { \
     GST_DEBUG_CATEGORY_INIT (audiofilter_dbg, "audiofilter", 0, "audiofilter"); \
@@ -94,6 +96,7 @@
   basetrans_class->get_unit_size =
       GST_DEBUG_FUNCPTR (gst_audio_filter_get_unit_size);
   basetrans_class->transform_meta = gst_audio_filter_transform_meta;
+  basetrans_class->submit_input_buffer = gst_audio_filter_submit_input_buffer;
 }
 
 static void
@@ -164,6 +167,27 @@
   }
 }
 
+static GstFlowReturn
+gst_audio_filter_submit_input_buffer (GstBaseTransform * btrans,
+    gboolean is_discont, GstBuffer * input)
+{
+  GstAudioFilter *filter = GST_AUDIO_FILTER (btrans);
+
+  if (btrans->segment.format == GST_FORMAT_TIME) {
+    input =
+        gst_audio_buffer_clip (input, &btrans->segment, filter->info.rate,
+        filter->info.bpf);
+
+    if (!input)
+      return GST_FLOW_OK;
+  }
+
+  return
+      GST_BASE_TRANSFORM_CLASS
+      (gst_audio_filter_parent_class)->submit_input_buffer (btrans, is_discont,
+      input);
+}
+
 static gboolean
 gst_audio_filter_get_unit_size (GstBaseTransform * btrans, GstCaps * caps,
     gsize * size)
diff --git a/gst-libs/gst/audio/gstaudiofilter.h b/gst-libs/gst/audio/gstaudiofilter.h
index a2850bc..4610f3a 100644
--- a/gst-libs/gst/audio/gstaudiofilter.h
+++ b/gst-libs/gst/audio/gstaudiofilter.h
@@ -97,6 +97,10 @@
 void    gst_audio_filter_class_add_pad_templates (GstAudioFilterClass * klass,
                                                   GstCaps             * allowed_caps);
 
+#ifdef G_DEFINE_AUTOPTR_CLEANUP_FUNC
+G_DEFINE_AUTOPTR_CLEANUP_FUNC(GstAudioFilter, gst_object_unref)
+#endif
+
 G_END_DECLS
 
 #endif /* __GST_AUDIO_FILTER_H__ */
diff --git a/gst-libs/gst/audio/gstaudiometa.c b/gst-libs/gst/audio/gstaudiometa.c
index 1c5e8a3..b540166 100644
--- a/gst-libs/gst/audio/gstaudiometa.c
+++ b/gst-libs/gst/audio/gstaudiometa.c
@@ -199,3 +199,105 @@
   }
   return audio_downmix_meta_info;
 }
+
+static gboolean
+gst_audio_clipping_meta_init (GstMeta * meta, gpointer params,
+    GstBuffer * buffer)
+{
+  GstAudioClippingMeta *cmeta = (GstAudioClippingMeta *) meta;
+
+  cmeta->format = GST_FORMAT_UNDEFINED;
+  cmeta->start = cmeta->end = 0;
+
+  return TRUE;
+}
+
+static gboolean
+gst_audio_clipping_meta_transform (GstBuffer * dest, GstMeta * meta,
+    GstBuffer * buffer, GQuark type, gpointer data)
+{
+  GstAudioClippingMeta *smeta, *dmeta;
+
+  smeta = (GstAudioClippingMeta *) meta;
+
+  if (GST_META_TRANSFORM_IS_COPY (type)) {
+    GstMetaTransformCopy *copy = data;
+
+    if (copy->region)
+      return FALSE;
+
+    dmeta =
+        gst_buffer_add_audio_clipping_meta (dest, smeta->format, smeta->start,
+        smeta->end);
+    if (!dmeta)
+      return FALSE;
+  } else {
+    /* TODO: Could implement an automatic transform for resampling */
+    /* return FALSE, if transform type is not supported */
+    return FALSE;
+  }
+
+  return TRUE;
+}
+
+/**
+ * gst_buffer_add_audio_clipping_meta:
+ * @buffer: a #GstBuffer
+ * @format: GstFormat of @start and @stop, GST_FORMAT_DEFAULT is samples
+ * @start: Amount of audio to clip from start of buffer
+ * @end: Amount of  to clip from end of buffer
+ *
+ * Attaches #GstAudioClippingMeta metadata to @buffer with the given parameters.
+ *
+ * Returns: (transfer none): the #GstAudioClippingMeta on @buffer.
+ *
+ * Since: 1.8
+ */
+GstAudioClippingMeta *
+gst_buffer_add_audio_clipping_meta (GstBuffer * buffer,
+    GstFormat format, guint64 start, guint64 end)
+{
+  GstAudioClippingMeta *meta;
+
+  g_return_val_if_fail (format != GST_FORMAT_UNDEFINED, NULL);
+
+  meta =
+      (GstAudioClippingMeta *) gst_buffer_add_meta (buffer,
+      GST_AUDIO_CLIPPING_META_INFO, NULL);
+
+  meta->format = format;
+  meta->start = start;
+  meta->end = end;
+
+  return meta;
+}
+
+GType
+gst_audio_clipping_meta_api_get_type (void)
+{
+  static volatile GType type;
+  static const gchar *tags[] =
+      { GST_META_TAG_AUDIO_STR, GST_META_TAG_AUDIO_RATE_STR, NULL };
+
+  if (g_once_init_enter (&type)) {
+    GType _type = gst_meta_api_type_register ("GstAudioClippingMetaAPI", tags);
+    g_once_init_leave (&type, _type);
+  }
+  return type;
+}
+
+const GstMetaInfo *
+gst_audio_clipping_meta_get_info (void)
+{
+  static const GstMetaInfo *audio_clipping_meta_info = NULL;
+
+  if (g_once_init_enter (&audio_clipping_meta_info)) {
+    const GstMetaInfo *meta =
+        gst_meta_register (GST_AUDIO_CLIPPING_META_API_TYPE,
+        "GstAudioClippingMeta", sizeof (GstAudioClippingMeta),
+        gst_audio_clipping_meta_init, NULL,
+        gst_audio_clipping_meta_transform);
+    g_once_init_leave (&audio_clipping_meta_info, meta);
+  }
+  return audio_clipping_meta_info;
+}
diff --git a/gst-libs/gst/audio/gstaudiometa.h b/gst-libs/gst/audio/gstaudiometa.h
index d0baa5c..ca58fb1 100644
--- a/gst-libs/gst/audio/gstaudiometa.h
+++ b/gst-libs/gst/audio/gstaudiometa.h
@@ -59,7 +59,7 @@
 GType gst_audio_downmix_meta_api_get_type (void);
 const GstMetaInfo * gst_audio_downmix_meta_get_info (void);
 
-#define gst_buffer_get_audio_downmix_meta(b) ((GstAudioDownmixMeta*)gst_buffer_get_meta((b),GST_AUDIO_DOWNMIX_META_INFO))
+#define gst_buffer_get_audio_downmix_meta(b) ((GstAudioDownmixMeta*)gst_buffer_get_meta((b), GST_AUDIO_DOWNMIX_META_API_TYPE))
 GstAudioDownmixMeta * gst_buffer_get_audio_downmix_meta_for_channels    (GstBuffer *buffer,
                                                                          const GstAudioChannelPosition *to_position,
                                                                          gint                           to_channels);
@@ -71,6 +71,51 @@
                                                          gint                           to_channels,
                                                          const gfloat                 **matrix);
 
+
+#define GST_AUDIO_CLIPPING_META_API_TYPE (gst_audio_clipping_meta_api_get_type())
+#define GST_AUDIO_CLIPPING_META_INFO  (gst_audio_clipping_meta_get_info())
+
+typedef struct _GstAudioClippingMeta GstAudioClippingMeta;
+
+/**
+ * GstAudioClippingMeta:
+ * @meta: parent #GstMeta
+ * @format: GstFormat of @start and @stop, GST_FORMAT_DEFAULT is samples
+ * @start: Amount of audio to clip from start of buffer
+ * @end: Amount of  to clip from end of buffer
+ *
+ * Extra buffer metadata describing how much audio has to be clipped from
+ * the start or end of a buffer. This is used for compressed formats, where
+ * the first frame usually has some additional samples due to encoder and
+ * decoder delays, and the last frame usually has some additional samples to
+ * be able to fill the complete last frame.
+ *
+ * This is used to ensure that decoded data in the end has the same amount of
+ * samples, and multiply decoded streams can be gaplessly concatenated.
+ *
+ * Note: If clipping of the start is done by adjusting the segment, this meta
+ * has to be dropped from buffers as otherwise clipping could happen twice.
+ *
+ * Since: 1.8
+ */
+struct _GstAudioClippingMeta {
+  GstMeta   meta;
+
+  GstFormat format;
+  guint64   start;
+  guint64   end;
+};
+
+GType gst_audio_clipping_meta_api_get_type (void);
+const GstMetaInfo * gst_audio_clipping_meta_get_info (void);
+
+#define gst_buffer_get_audio_clipping_meta(b) ((GstAudioClippingMeta*)gst_buffer_get_meta((b), GST_AUDIO_CLIPPING_META_API_TYPE))
+
+GstAudioClippingMeta * gst_buffer_add_audio_clipping_meta (GstBuffer *buffer,
+                                                           GstFormat  format,
+                                                           guint64    start,
+                                                           guint64    end);
+
 G_END_DECLS
 
 #endif /* __GST_AUDIO_META_H__ */
diff --git a/gst-libs/gst/audio/gstaudiopack-dist.c b/gst-libs/gst/audio/gstaudiopack-dist.c
index 4f8c124..b8ccdb4 100644
--- a/gst-libs/gst/audio/gstaudiopack-dist.c
+++ b/gst-libs/gst/audio/gstaudiopack-dist.c
@@ -97,16 +97,28 @@
 #endif
 void audio_orc_unpack_u8 (gint32 * ORC_RESTRICT d1,
     const guint8 * ORC_RESTRICT s1, int n);
+void audio_orc_unpack_u8_trunc (gint32 * ORC_RESTRICT d1,
+    const guint8 * ORC_RESTRICT s1, int n);
 void audio_orc_unpack_s8 (gint32 * ORC_RESTRICT d1,
     const guint8 * ORC_RESTRICT s1, int n);
+void audio_orc_unpack_s8_trunc (gint32 * ORC_RESTRICT d1,
+    const guint8 * ORC_RESTRICT s1, int n);
 void audio_orc_unpack_u16 (gint32 * ORC_RESTRICT d1,
     const guint8 * ORC_RESTRICT s1, int n);
+void audio_orc_unpack_u16_trunc (gint32 * ORC_RESTRICT d1,
+    const guint8 * ORC_RESTRICT s1, int n);
 void audio_orc_unpack_s16 (gint32 * ORC_RESTRICT d1,
     const guint8 * ORC_RESTRICT s1, int n);
+void audio_orc_unpack_s16_trunc (gint32 * ORC_RESTRICT d1,
+    const guint8 * ORC_RESTRICT s1, int n);
 void audio_orc_unpack_u16_swap (gint32 * ORC_RESTRICT d1,
     const guint8 * ORC_RESTRICT s1, int n);
+void audio_orc_unpack_u16_swap_trunc (gint32 * ORC_RESTRICT d1,
+    const guint8 * ORC_RESTRICT s1, int n);
 void audio_orc_unpack_s16_swap (gint32 * ORC_RESTRICT d1,
     const guint8 * ORC_RESTRICT s1, int n);
+void audio_orc_unpack_s16_swap_trunc (gint32 * ORC_RESTRICT d1,
+    const guint8 * ORC_RESTRICT s1, int n);
 void audio_orc_unpack_u24_32 (gint32 * ORC_RESTRICT d1,
     const guint8 * ORC_RESTRICT s1, int n);
 void audio_orc_unpack_s24_32 (gint32 * ORC_RESTRICT d1,
@@ -170,6 +182,16 @@
 void audio_orc_splat_u16 (guint16 * ORC_RESTRICT d1, int p1, int n);
 void audio_orc_splat_u32 (guint32 * ORC_RESTRICT d1, int p1, int n);
 void audio_orc_splat_u64 (guint64 * ORC_RESTRICT d1, int p1, int n);
+void audio_orc_int_bias (gint32 * ORC_RESTRICT d1,
+    const gint32 * ORC_RESTRICT s1, int p1, int p2, int n);
+void audio_orc_int_dither (gint32 * ORC_RESTRICT d1,
+    const gint32 * ORC_RESTRICT s1, const gint32 * ORC_RESTRICT s2, int p1,
+    int n);
+void audio_orc_update_rand (guint32 * ORC_RESTRICT d1, int n);
+void audio_orc_s32_to_double (gdouble * ORC_RESTRICT d1,
+    const gint32 * ORC_RESTRICT s1, int n);
+void audio_orc_double_to_s32 (gint32 * ORC_RESTRICT d1,
+    const gdouble * ORC_RESTRICT s1, int n);
 
 
 /* begin Orc C target preamble */
@@ -225,36 +247,33 @@
   int i;
   orc_union32 *ORC_RESTRICT ptr0;
   const orc_int8 *ORC_RESTRICT ptr4;
-  orc_int8 var34;
+  orc_int8 var33;
 #if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
-  volatile orc_union32 var35;
+  volatile orc_union32 var34;
 #else
-  orc_union32 var35;
+  orc_union32 var34;
 #endif
+  orc_union32 var35;
   orc_union32 var36;
-  orc_union16 var37;
-  orc_union32 var38;
-  orc_union32 var39;
 
   ptr0 = (orc_union32 *) d1;
   ptr4 = (orc_int8 *) s1;
 
-  /* 4: loadpl */
-  var35.i = (int) 0x80000000;   /* -2147483648 or 1.061e-314f */
+  /* 2: loadpl */
+  var34.i = (int) 0x80000000;   /* -2147483648 or 1.061e-314f */
 
   for (i = 0; i < n; i++) {
     /* 0: loadb */
-    var34 = ptr4[i];
-    /* 1: convubw */
-    var37.i = (orc_uint8) var34;
-    /* 2: convuwl */
-    var38.i = (orc_uint16) var37.i;
-    /* 3: shll */
-    var39.i = ((orc_uint32) var38.i) << 24;
-    /* 5: xorl */
-    var36.i = var39.i ^ var35.i;
-    /* 6: storel */
-    ptr0[i] = var36;
+    var33 = ptr4[i];
+    /* 1: splatbl */
+    var36.i =
+        ((((orc_uint32) var33) & 0xff) << 24) | ((((orc_uint32) var33) & 0xff)
+        << 16) | ((((orc_uint32) var33) & 0xff) << 8) | (((orc_uint32) var33) &
+        0xff);
+    /* 3: xorl */
+    var35.i = var36.i ^ var34.i;
+    /* 4: storel */
+    ptr0[i] = var35;
   }
 
 }
@@ -267,36 +286,33 @@
   int n = ex->n;
   orc_union32 *ORC_RESTRICT ptr0;
   const orc_int8 *ORC_RESTRICT ptr4;
-  orc_int8 var34;
+  orc_int8 var33;
 #if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
-  volatile orc_union32 var35;
+  volatile orc_union32 var34;
 #else
-  orc_union32 var35;
+  orc_union32 var34;
 #endif
+  orc_union32 var35;
   orc_union32 var36;
-  orc_union16 var37;
-  orc_union32 var38;
-  orc_union32 var39;
 
   ptr0 = (orc_union32 *) ex->arrays[0];
   ptr4 = (orc_int8 *) ex->arrays[4];
 
-  /* 4: loadpl */
-  var35.i = (int) 0x80000000;   /* -2147483648 or 1.061e-314f */
+  /* 2: loadpl */
+  var34.i = (int) 0x80000000;   /* -2147483648 or 1.061e-314f */
 
   for (i = 0; i < n; i++) {
     /* 0: loadb */
-    var34 = ptr4[i];
-    /* 1: convubw */
-    var37.i = (orc_uint8) var34;
-    /* 2: convuwl */
-    var38.i = (orc_uint16) var37.i;
-    /* 3: shll */
-    var39.i = ((orc_uint32) var38.i) << 24;
-    /* 5: xorl */
-    var36.i = var39.i ^ var35.i;
-    /* 6: storel */
-    ptr0[i] = var36;
+    var33 = ptr4[i];
+    /* 1: splatbl */
+    var36.i =
+        ((((orc_uint32) var33) & 0xff) << 24) | ((((orc_uint32) var33) & 0xff)
+        << 16) | ((((orc_uint32) var33) & 0xff) << 8) | (((orc_uint32) var33) &
+        0xff);
+    /* 3: xorl */
+    var35.i = var36.i ^ var34.i;
+    /* 4: storel */
+    ptr0[i] = var35;
   }
 
 }
@@ -319,8 +335,7 @@
       static const orc_uint8 bc[] = {
         1, 9, 19, 97, 117, 100, 105, 111, 95, 111, 114, 99, 95, 117, 110, 112,
         97, 99, 107, 95, 117, 56, 11, 4, 4, 12, 1, 1, 14, 4, 0, 0,
-        0, 128, 14, 4, 24, 0, 0, 0, 20, 2, 20, 4, 150, 32, 4, 154,
-        33, 32, 124, 33, 33, 17, 132, 0, 33, 16, 2, 0,
+        0, 128, 20, 4, 152, 32, 4, 132, 0, 32, 16, 2, 0,
       };
       p = orc_program_new_from_static_bytecode (bc);
       orc_program_set_backup_function (p, _backup_audio_orc_unpack_u8);
@@ -331,17 +346,157 @@
       orc_program_add_destination (p, 4, "d1");
       orc_program_add_source (p, 1, "s1");
       orc_program_add_constant (p, 4, 0x80000000, "c1");
-      orc_program_add_constant (p, 4, 0x00000018, "c2");
-      orc_program_add_temporary (p, 2, "t1");
-      orc_program_add_temporary (p, 4, "t2");
+      orc_program_add_temporary (p, 4, "t1");
 
-      orc_program_append_2 (p, "convubw", 0, ORC_VAR_T1, ORC_VAR_S1, ORC_VAR_D1,
+      orc_program_append_2 (p, "splatbl", 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_T1, ORC_VAR_D1,
+      orc_program_append_2 (p, "xorl", 0, ORC_VAR_D1, ORC_VAR_T1, ORC_VAR_C1,
           ORC_VAR_D1);
-      orc_program_append_2 (p, "shll", 0, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_C2,
+#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
+
+
+/* audio_orc_unpack_u8_trunc */
+#ifdef DISABLE_ORC
+void
+audio_orc_unpack_u8_trunc (gint32 * ORC_RESTRICT d1,
+    const guint8 * ORC_RESTRICT s1, int n)
+{
+  int i;
+  orc_union32 *ORC_RESTRICT ptr0;
+  const orc_int8 *ORC_RESTRICT ptr4;
+  orc_int8 var33;
+#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
+  volatile orc_union32 var34;
+#else
+  orc_union32 var34;
+#endif
+  orc_union32 var35;
+  orc_union32 var36;
+  orc_union32 var37;
+
+  ptr0 = (orc_union32 *) d1;
+  ptr4 = (orc_int8 *) s1;
+
+  /* 3: loadpl */
+  var34.i = (int) 0x80000000;   /* -2147483648 or 1.061e-314f */
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadb */
+    var33 = ptr4[i];
+    /* 1: splatbl */
+    var36.i =
+        ((((orc_uint32) var33) & 0xff) << 24) | ((((orc_uint32) var33) & 0xff)
+        << 16) | ((((orc_uint32) var33) & 0xff) << 8) | (((orc_uint32) var33) &
+        0xff);
+    /* 2: shll */
+    var37.i = ((orc_uint32) var36.i) << 24;
+    /* 4: xorl */
+    var35.i = var37.i ^ var34.i;
+    /* 5: storel */
+    ptr0[i] = var35;
+  }
+
+}
+
+#else
+static void
+_backup_audio_orc_unpack_u8_trunc (OrcExecutor * ORC_RESTRICT ex)
+{
+  int i;
+  int n = ex->n;
+  orc_union32 *ORC_RESTRICT ptr0;
+  const orc_int8 *ORC_RESTRICT ptr4;
+  orc_int8 var33;
+#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
+  volatile orc_union32 var34;
+#else
+  orc_union32 var34;
+#endif
+  orc_union32 var35;
+  orc_union32 var36;
+  orc_union32 var37;
+
+  ptr0 = (orc_union32 *) ex->arrays[0];
+  ptr4 = (orc_int8 *) ex->arrays[4];
+
+  /* 3: loadpl */
+  var34.i = (int) 0x80000000;   /* -2147483648 or 1.061e-314f */
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadb */
+    var33 = ptr4[i];
+    /* 1: splatbl */
+    var36.i =
+        ((((orc_uint32) var33) & 0xff) << 24) | ((((orc_uint32) var33) & 0xff)
+        << 16) | ((((orc_uint32) var33) & 0xff) << 8) | (((orc_uint32) var33) &
+        0xff);
+    /* 2: shll */
+    var37.i = ((orc_uint32) var36.i) << 24;
+    /* 4: xorl */
+    var35.i = var37.i ^ var34.i;
+    /* 5: storel */
+    ptr0[i] = var35;
+  }
+
+}
+
+void
+audio_orc_unpack_u8_trunc (gint32 * 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, 25, 97, 117, 100, 105, 111, 95, 111, 114, 99, 95, 117, 110, 112,
+        97, 99, 107, 95, 117, 56, 95, 116, 114, 117, 110, 99, 11, 4, 4, 12,
+        1, 1, 14, 4, 0, 0, 0, 128, 14, 4, 24, 0, 0, 0, 20, 4,
+        152, 32, 4, 124, 32, 32, 17, 132, 0, 32, 16, 2, 0,
+      };
+      p = orc_program_new_from_static_bytecode (bc);
+      orc_program_set_backup_function (p, _backup_audio_orc_unpack_u8_trunc);
+#else
+      p = orc_program_new ();
+      orc_program_set_name (p, "audio_orc_unpack_u8_trunc");
+      orc_program_set_backup_function (p, _backup_audio_orc_unpack_u8_trunc);
+      orc_program_add_destination (p, 4, "d1");
+      orc_program_add_source (p, 1, "s1");
+      orc_program_add_constant (p, 4, 0x80000000, "c1");
+      orc_program_add_constant (p, 4, 0x00000018, "c2");
+      orc_program_add_temporary (p, 4, "t1");
+
+      orc_program_append_2 (p, "splatbl", 0, ORC_VAR_T1, ORC_VAR_S1, ORC_VAR_D1,
           ORC_VAR_D1);
-      orc_program_append_2 (p, "xorl", 0, ORC_VAR_D1, ORC_VAR_T2, ORC_VAR_C1,
+      orc_program_append_2 (p, "shll", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_C2,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "xorl", 0, ORC_VAR_D1, ORC_VAR_T1, ORC_VAR_C1,
           ORC_VAR_D1);
 #endif
 
@@ -375,25 +530,32 @@
   orc_union32 *ORC_RESTRICT ptr0;
   const orc_int8 *ORC_RESTRICT ptr4;
   orc_int8 var34;
+#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
+  volatile orc_union32 var35;
+#else
   orc_union32 var35;
-  orc_union16 var36;
+#endif
+  orc_union32 var36;
   orc_union32 var37;
 
   ptr0 = (orc_union32 *) d1;
   ptr4 = (orc_int8 *) s1;
 
+  /* 2: loadpl */
+  var35.i = (int) 0x00808080;   /* 8421504 or 4.16078e-317f */
 
   for (i = 0; i < n; i++) {
     /* 0: loadb */
     var34 = ptr4[i];
-    /* 1: convubw */
-    var36.i = (orc_uint8) var34;
-    /* 2: convuwl */
-    var37.i = (orc_uint16) var36.i;
-    /* 3: shll */
-    var35.i = ((orc_uint32) var37.i) << 24;
+    /* 1: splatbl */
+    var37.i =
+        ((((orc_uint32) var34) & 0xff) << 24) | ((((orc_uint32) var34) & 0xff)
+        << 16) | ((((orc_uint32) var34) & 0xff) << 8) | (((orc_uint32) var34) &
+        0xff);
+    /* 3: xorl */
+    var36.i = var37.i ^ var35.i;
     /* 4: storel */
-    ptr0[i] = var35;
+    ptr0[i] = var36;
   }
 
 }
@@ -407,25 +569,32 @@
   orc_union32 *ORC_RESTRICT ptr0;
   const orc_int8 *ORC_RESTRICT ptr4;
   orc_int8 var34;
+#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
+  volatile orc_union32 var35;
+#else
   orc_union32 var35;
-  orc_union16 var36;
+#endif
+  orc_union32 var36;
   orc_union32 var37;
 
   ptr0 = (orc_union32 *) ex->arrays[0];
   ptr4 = (orc_int8 *) ex->arrays[4];
 
+  /* 2: loadpl */
+  var35.i = (int) 0x00808080;   /* 8421504 or 4.16078e-317f */
 
   for (i = 0; i < n; i++) {
     /* 0: loadb */
     var34 = ptr4[i];
-    /* 1: convubw */
-    var36.i = (orc_uint8) var34;
-    /* 2: convuwl */
-    var37.i = (orc_uint16) var36.i;
-    /* 3: shll */
-    var35.i = ((orc_uint32) var37.i) << 24;
+    /* 1: splatbl */
+    var37.i =
+        ((((orc_uint32) var34) & 0xff) << 24) | ((((orc_uint32) var34) & 0xff)
+        << 16) | ((((orc_uint32) var34) & 0xff) << 8) | (((orc_uint32) var34) &
+        0xff);
+    /* 3: xorl */
+    var36.i = var37.i ^ var35.i;
     /* 4: storel */
-    ptr0[i] = var35;
+    ptr0[i] = var36;
   }
 
 }
@@ -447,9 +616,8 @@
 #if 1
       static const orc_uint8 bc[] = {
         1, 9, 19, 97, 117, 100, 105, 111, 95, 111, 114, 99, 95, 117, 110, 112,
-        97, 99, 107, 95, 115, 56, 11, 4, 4, 12, 1, 1, 14, 4, 24, 0,
-        0, 0, 20, 2, 20, 4, 150, 32, 4, 154, 33, 32, 124, 0, 33, 16,
-        2, 0,
+        97, 99, 107, 95, 115, 56, 11, 4, 4, 12, 1, 1, 14, 4, 128, 128,
+        128, 0, 20, 2, 20, 4, 152, 33, 4, 132, 0, 33, 16, 2, 0,
       };
       p = orc_program_new_from_static_bytecode (bc);
       orc_program_set_backup_function (p, _backup_audio_orc_unpack_s8);
@@ -459,15 +627,136 @@
       orc_program_set_backup_function (p, _backup_audio_orc_unpack_s8);
       orc_program_add_destination (p, 4, "d1");
       orc_program_add_source (p, 1, "s1");
-      orc_program_add_constant (p, 4, 0x00000018, "c1");
+      orc_program_add_constant (p, 4, 0x00808080, "c1");
       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_program_append_2 (p, "splatbl", 0, ORC_VAR_T2, ORC_VAR_S1, ORC_VAR_D1,
           ORC_VAR_D1);
-      orc_program_append_2 (p, "convuwl", 0, ORC_VAR_T2, ORC_VAR_T1, ORC_VAR_D1,
+      orc_program_append_2 (p, "xorl", 0, ORC_VAR_D1, ORC_VAR_T2, ORC_VAR_C1,
           ORC_VAR_D1);
-      orc_program_append_2 (p, "shll", 0, ORC_VAR_D1, ORC_VAR_T2, ORC_VAR_C1,
+#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
+
+
+/* audio_orc_unpack_s8_trunc */
+#ifdef DISABLE_ORC
+void
+audio_orc_unpack_s8_trunc (gint32 * ORC_RESTRICT d1,
+    const guint8 * ORC_RESTRICT s1, int n)
+{
+  int i;
+  orc_union32 *ORC_RESTRICT ptr0;
+  const orc_int8 *ORC_RESTRICT ptr4;
+  orc_int8 var33;
+  orc_union32 var34;
+  orc_union32 var35;
+
+  ptr0 = (orc_union32 *) d1;
+  ptr4 = (orc_int8 *) s1;
+
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadb */
+    var33 = ptr4[i];
+    /* 1: splatbl */
+    var35.i =
+        ((((orc_uint32) var33) & 0xff) << 24) | ((((orc_uint32) var33) & 0xff)
+        << 16) | ((((orc_uint32) var33) & 0xff) << 8) | (((orc_uint32) var33) &
+        0xff);
+    /* 2: shll */
+    var34.i = ((orc_uint32) var35.i) << 24;
+    /* 3: storel */
+    ptr0[i] = var34;
+  }
+
+}
+
+#else
+static void
+_backup_audio_orc_unpack_s8_trunc (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_union32 var34;
+  orc_union32 var35;
+
+  ptr0 = (orc_union32 *) ex->arrays[0];
+  ptr4 = (orc_int8 *) ex->arrays[4];
+
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadb */
+    var33 = ptr4[i];
+    /* 1: splatbl */
+    var35.i =
+        ((((orc_uint32) var33) & 0xff) << 24) | ((((orc_uint32) var33) & 0xff)
+        << 16) | ((((orc_uint32) var33) & 0xff) << 8) | (((orc_uint32) var33) &
+        0xff);
+    /* 2: shll */
+    var34.i = ((orc_uint32) var35.i) << 24;
+    /* 3: storel */
+    ptr0[i] = var34;
+  }
+
+}
+
+void
+audio_orc_unpack_s8_trunc (gint32 * 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, 25, 97, 117, 100, 105, 111, 95, 111, 114, 99, 95, 117, 110, 112,
+        97, 99, 107, 95, 115, 56, 95, 116, 114, 117, 110, 99, 11, 4, 4, 12,
+        1, 1, 14, 4, 24, 0, 0, 0, 20, 4, 152, 32, 4, 124, 0, 32,
+        16, 2, 0,
+      };
+      p = orc_program_new_from_static_bytecode (bc);
+      orc_program_set_backup_function (p, _backup_audio_orc_unpack_s8_trunc);
+#else
+      p = orc_program_new ();
+      orc_program_set_name (p, "audio_orc_unpack_s8_trunc");
+      orc_program_set_backup_function (p, _backup_audio_orc_unpack_s8_trunc);
+      orc_program_add_destination (p, 4, "d1");
+      orc_program_add_source (p, 1, "s1");
+      orc_program_add_constant (p, 4, 0x00000018, "c1");
+      orc_program_add_temporary (p, 4, "t1");
+
+      orc_program_append_2 (p, "splatbl", 0, ORC_VAR_T1, ORC_VAR_S1, ORC_VAR_D1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "shll", 0, ORC_VAR_D1, ORC_VAR_T1, ORC_VAR_C1,
           ORC_VAR_D1);
 #endif
 
@@ -501,12 +790,12 @@
   orc_union32 *ORC_RESTRICT ptr0;
   const orc_union16 *ORC_RESTRICT ptr4;
   orc_union16 var33;
+  orc_union16 var34;
 #if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
-  volatile orc_union32 var34;
+  volatile orc_union32 var35;
 #else
-  orc_union32 var34;
-#endif
   orc_union32 var35;
+#endif
   orc_union32 var36;
   orc_union32 var37;
 
@@ -514,19 +803,24 @@
   ptr4 = (orc_union16 *) s1;
 
   /* 3: loadpl */
-  var34.i = (int) 0x80000000;   /* -2147483648 or 1.061e-314f */
+  var35.i = (int) 0x80000000;   /* -2147483648 or 1.061e-314f */
 
   for (i = 0; i < n; i++) {
     /* 0: loadw */
     var33 = ptr4[i];
-    /* 1: convuwl */
-    var36.i = (orc_uint16) var33.i;
-    /* 2: shll */
-    var37.i = ((orc_uint32) var36.i) << 16;
+    /* 1: loadw */
+    var34 = ptr4[i];
+    /* 2: mergewl */
+    {
+      orc_union32 _dest;
+      _dest.x2[0] = var33.i;
+      _dest.x2[1] = var34.i;
+      var37.i = _dest.i;
+    }
     /* 4: xorl */
-    var35.i = var37.i ^ var34.i;
+    var36.i = var37.i ^ var35.i;
     /* 5: storel */
-    ptr0[i] = var35;
+    ptr0[i] = var36;
   }
 
 }
@@ -540,12 +834,12 @@
   orc_union32 *ORC_RESTRICT ptr0;
   const orc_union16 *ORC_RESTRICT ptr4;
   orc_union16 var33;
+  orc_union16 var34;
 #if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
-  volatile orc_union32 var34;
+  volatile orc_union32 var35;
 #else
-  orc_union32 var34;
-#endif
   orc_union32 var35;
+#endif
   orc_union32 var36;
   orc_union32 var37;
 
@@ -553,19 +847,24 @@
   ptr4 = (orc_union16 *) ex->arrays[4];
 
   /* 3: loadpl */
-  var34.i = (int) 0x80000000;   /* -2147483648 or 1.061e-314f */
+  var35.i = (int) 0x80000000;   /* -2147483648 or 1.061e-314f */
 
   for (i = 0; i < n; i++) {
     /* 0: loadw */
     var33 = ptr4[i];
-    /* 1: convuwl */
-    var36.i = (orc_uint16) var33.i;
-    /* 2: shll */
-    var37.i = ((orc_uint32) var36.i) << 16;
+    /* 1: loadw */
+    var34 = ptr4[i];
+    /* 2: mergewl */
+    {
+      orc_union32 _dest;
+      _dest.x2[0] = var33.i;
+      _dest.x2[1] = var34.i;
+      var37.i = _dest.i;
+    }
     /* 4: xorl */
-    var35.i = var37.i ^ var34.i;
+    var36.i = var37.i ^ var35.i;
     /* 5: storel */
-    ptr0[i] = var35;
+    ptr0[i] = var36;
   }
 
 }
@@ -587,9 +886,8 @@
 #if 1
       static const orc_uint8 bc[] = {
         1, 9, 20, 97, 117, 100, 105, 111, 95, 111, 114, 99, 95, 117, 110, 112,
-        97, 99, 107, 95, 117, 49, 54, 11, 4, 4, 12, 2, 2, 14, 4, 16,
-        0, 0, 0, 14, 4, 0, 0, 0, 128, 20, 4, 154, 32, 4, 124, 32,
-        32, 16, 132, 0, 32, 17, 2, 0,
+        97, 99, 107, 95, 117, 49, 54, 11, 4, 4, 12, 2, 2, 14, 4, 0,
+        0, 0, 128, 20, 4, 195, 32, 4, 4, 132, 0, 32, 16, 2, 0,
       };
       p = orc_program_new_from_static_bytecode (bc);
       orc_program_set_backup_function (p, _backup_audio_orc_unpack_u16);
@@ -599,11 +897,164 @@
       orc_program_set_backup_function (p, _backup_audio_orc_unpack_u16);
       orc_program_add_destination (p, 4, "d1");
       orc_program_add_source (p, 2, "s1");
+      orc_program_add_constant (p, 4, 0x80000000, "c1");
+      orc_program_add_temporary (p, 4, "t1");
+
+      orc_program_append_2 (p, "mergewl", 0, ORC_VAR_T1, ORC_VAR_S1, ORC_VAR_S1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "xorl", 0, ORC_VAR_D1, ORC_VAR_T1, 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;
+
+  func = c->exec;
+  func (ex);
+}
+#endif
+
+
+/* audio_orc_unpack_u16_trunc */
+#ifdef DISABLE_ORC
+void
+audio_orc_unpack_u16_trunc (gint32 * ORC_RESTRICT d1,
+    const guint8 * ORC_RESTRICT s1, int n)
+{
+  int i;
+  orc_union32 *ORC_RESTRICT ptr0;
+  const orc_union16 *ORC_RESTRICT ptr4;
+  orc_union16 var33;
+  orc_union16 var34;
+#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
+  volatile orc_union32 var35;
+#else
+  orc_union32 var35;
+#endif
+  orc_union32 var36;
+  orc_union32 var37;
+  orc_union32 var38;
+
+  ptr0 = (orc_union32 *) d1;
+  ptr4 = (orc_union16 *) s1;
+
+  /* 4: loadpl */
+  var35.i = (int) 0x80000000;   /* -2147483648 or 1.061e-314f */
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadw */
+    var33 = ptr4[i];
+    /* 1: loadw */
+    var34 = ptr4[i];
+    /* 2: mergewl */
+    {
+      orc_union32 _dest;
+      _dest.x2[0] = var33.i;
+      _dest.x2[1] = var34.i;
+      var37.i = _dest.i;
+    }
+    /* 3: shll */
+    var38.i = ((orc_uint32) var37.i) << 16;
+    /* 5: xorl */
+    var36.i = var38.i ^ var35.i;
+    /* 6: storel */
+    ptr0[i] = var36;
+  }
+
+}
+
+#else
+static void
+_backup_audio_orc_unpack_u16_trunc (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_union16 var34;
+#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
+  volatile orc_union32 var35;
+#else
+  orc_union32 var35;
+#endif
+  orc_union32 var36;
+  orc_union32 var37;
+  orc_union32 var38;
+
+  ptr0 = (orc_union32 *) ex->arrays[0];
+  ptr4 = (orc_union16 *) ex->arrays[4];
+
+  /* 4: loadpl */
+  var35.i = (int) 0x80000000;   /* -2147483648 or 1.061e-314f */
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadw */
+    var33 = ptr4[i];
+    /* 1: loadw */
+    var34 = ptr4[i];
+    /* 2: mergewl */
+    {
+      orc_union32 _dest;
+      _dest.x2[0] = var33.i;
+      _dest.x2[1] = var34.i;
+      var37.i = _dest.i;
+    }
+    /* 3: shll */
+    var38.i = ((orc_uint32) var37.i) << 16;
+    /* 5: xorl */
+    var36.i = var38.i ^ var35.i;
+    /* 6: storel */
+    ptr0[i] = var36;
+  }
+
+}
+
+void
+audio_orc_unpack_u16_trunc (gint32 * 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, 26, 97, 117, 100, 105, 111, 95, 111, 114, 99, 95, 117, 110, 112,
+        97, 99, 107, 95, 117, 49, 54, 95, 116, 114, 117, 110, 99, 11, 4, 4,
+        12, 2, 2, 14, 4, 16, 0, 0, 0, 14, 4, 0, 0, 0, 128, 20,
+        4, 195, 32, 4, 4, 124, 32, 32, 16, 132, 0, 32, 17, 2, 0,
+      };
+      p = orc_program_new_from_static_bytecode (bc);
+      orc_program_set_backup_function (p, _backup_audio_orc_unpack_u16_trunc);
+#else
+      p = orc_program_new ();
+      orc_program_set_name (p, "audio_orc_unpack_u16_trunc");
+      orc_program_set_backup_function (p, _backup_audio_orc_unpack_u16_trunc);
+      orc_program_add_destination (p, 4, "d1");
+      orc_program_add_source (p, 2, "s1");
       orc_program_add_constant (p, 4, 0x00000010, "c1");
       orc_program_add_constant (p, 4, 0x80000000, "c2");
       orc_program_add_temporary (p, 4, "t1");
 
-      orc_program_append_2 (p, "convuwl", 0, ORC_VAR_T1, ORC_VAR_S1, ORC_VAR_D1,
+      orc_program_append_2 (p, "mergewl", 0, ORC_VAR_T1, ORC_VAR_S1, ORC_VAR_S1,
           ORC_VAR_D1);
       orc_program_append_2 (p, "shll", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_C1,
           ORC_VAR_D1);
@@ -641,6 +1092,152 @@
   orc_union32 *ORC_RESTRICT ptr0;
   const orc_union16 *ORC_RESTRICT ptr4;
   orc_union16 var33;
+  orc_union16 var34;
+#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
+  volatile orc_union32 var35;
+#else
+  orc_union32 var35;
+#endif
+  orc_union32 var36;
+  orc_union32 var37;
+
+  ptr0 = (orc_union32 *) d1;
+  ptr4 = (orc_union16 *) s1;
+
+  /* 3: loadpl */
+  var35.i = (int) 0x00008000;   /* 32768 or 1.61895e-319f */
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadw */
+    var33 = ptr4[i];
+    /* 1: loadw */
+    var34 = ptr4[i];
+    /* 2: mergewl */
+    {
+      orc_union32 _dest;
+      _dest.x2[0] = var33.i;
+      _dest.x2[1] = var34.i;
+      var37.i = _dest.i;
+    }
+    /* 4: xorl */
+    var36.i = var37.i ^ var35.i;
+    /* 5: storel */
+    ptr0[i] = var36;
+  }
+
+}
+
+#else
+static void
+_backup_audio_orc_unpack_s16 (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_union16 var34;
+#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
+  volatile orc_union32 var35;
+#else
+  orc_union32 var35;
+#endif
+  orc_union32 var36;
+  orc_union32 var37;
+
+  ptr0 = (orc_union32 *) ex->arrays[0];
+  ptr4 = (orc_union16 *) ex->arrays[4];
+
+  /* 3: loadpl */
+  var35.i = (int) 0x00008000;   /* 32768 or 1.61895e-319f */
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadw */
+    var33 = ptr4[i];
+    /* 1: loadw */
+    var34 = ptr4[i];
+    /* 2: mergewl */
+    {
+      orc_union32 _dest;
+      _dest.x2[0] = var33.i;
+      _dest.x2[1] = var34.i;
+      var37.i = _dest.i;
+    }
+    /* 4: xorl */
+    var36.i = var37.i ^ var35.i;
+    /* 5: storel */
+    ptr0[i] = var36;
+  }
+
+}
+
+void
+audio_orc_unpack_s16 (gint32 * 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, 20, 97, 117, 100, 105, 111, 95, 111, 114, 99, 95, 117, 110, 112,
+        97, 99, 107, 95, 115, 49, 54, 11, 4, 4, 12, 2, 2, 14, 4, 0,
+        128, 0, 0, 20, 4, 195, 32, 4, 4, 132, 0, 32, 16, 2, 0,
+      };
+      p = orc_program_new_from_static_bytecode (bc);
+      orc_program_set_backup_function (p, _backup_audio_orc_unpack_s16);
+#else
+      p = orc_program_new ();
+      orc_program_set_name (p, "audio_orc_unpack_s16");
+      orc_program_set_backup_function (p, _backup_audio_orc_unpack_s16);
+      orc_program_add_destination (p, 4, "d1");
+      orc_program_add_source (p, 2, "s1");
+      orc_program_add_constant (p, 4, 0x00008000, "c1");
+      orc_program_add_temporary (p, 4, "t1");
+
+      orc_program_append_2 (p, "mergewl", 0, ORC_VAR_T1, ORC_VAR_S1, ORC_VAR_S1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "xorl", 0, ORC_VAR_D1, ORC_VAR_T1, 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;
+
+  func = c->exec;
+  func (ex);
+}
+#endif
+
+
+/* audio_orc_unpack_s16_trunc */
+#ifdef DISABLE_ORC
+void
+audio_orc_unpack_s16_trunc (gint32 * ORC_RESTRICT d1,
+    const guint8 * ORC_RESTRICT s1, int n)
+{
+  int i;
+  orc_union32 *ORC_RESTRICT ptr0;
+  const orc_union16 *ORC_RESTRICT ptr4;
+  orc_union16 var33;
   orc_union32 var34;
   orc_union32 var35;
 
@@ -663,7 +1260,7 @@
 
 #else
 static void
-_backup_audio_orc_unpack_s16 (OrcExecutor * ORC_RESTRICT ex)
+_backup_audio_orc_unpack_s16_trunc (OrcExecutor * ORC_RESTRICT ex)
 {
   int i;
   int n = ex->n;
@@ -691,8 +1288,8 @@
 }
 
 void
-audio_orc_unpack_s16 (gint32 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1,
-    int n)
+audio_orc_unpack_s16_trunc (gint32 * ORC_RESTRICT d1,
+    const guint8 * ORC_RESTRICT s1, int n)
 {
   OrcExecutor _ex, *ex = &_ex;
   static volatile int p_inited = 0;
@@ -706,16 +1303,17 @@
 
 #if 1
       static const orc_uint8 bc[] = {
-        1, 9, 20, 97, 117, 100, 105, 111, 95, 111, 114, 99, 95, 117, 110, 112,
-        97, 99, 107, 95, 115, 49, 54, 11, 4, 4, 12, 2, 2, 14, 4, 16,
-        0, 0, 0, 20, 4, 154, 32, 4, 124, 0, 32, 16, 2, 0,
+        1, 9, 26, 97, 117, 100, 105, 111, 95, 111, 114, 99, 95, 117, 110, 112,
+        97, 99, 107, 95, 115, 49, 54, 95, 116, 114, 117, 110, 99, 11, 4, 4,
+        12, 2, 2, 14, 4, 16, 0, 0, 0, 20, 4, 154, 32, 4, 124, 0,
+        32, 16, 2, 0,
       };
       p = orc_program_new_from_static_bytecode (bc);
-      orc_program_set_backup_function (p, _backup_audio_orc_unpack_s16);
+      orc_program_set_backup_function (p, _backup_audio_orc_unpack_s16_trunc);
 #else
       p = orc_program_new ();
-      orc_program_set_name (p, "audio_orc_unpack_s16");
-      orc_program_set_backup_function (p, _backup_audio_orc_unpack_s16);
+      orc_program_set_name (p, "audio_orc_unpack_s16_trunc");
+      orc_program_set_backup_function (p, _backup_audio_orc_unpack_s16_trunc);
       orc_program_add_destination (p, 4, "d1");
       orc_program_add_source (p, 2, "s1");
       orc_program_add_constant (p, 4, 0x00000010, "c1");
@@ -765,6 +1363,156 @@
   orc_union32 var36;
   orc_union16 var37;
   orc_union32 var38;
+
+  ptr0 = (orc_union32 *) d1;
+  ptr4 = (orc_union16 *) s1;
+
+  /* 3: loadpl */
+  var35.i = (int) 0x80000000;   /* -2147483648 or 1.061e-314f */
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadw */
+    var34 = ptr4[i];
+    /* 1: swapw */
+    var37.i = ORC_SWAP_W (var34.i);
+    /* 2: mergewl */
+    {
+      orc_union32 _dest;
+      _dest.x2[0] = var37.i;
+      _dest.x2[1] = var37.i;
+      var38.i = _dest.i;
+    }
+    /* 4: xorl */
+    var36.i = var38.i ^ var35.i;
+    /* 5: storel */
+    ptr0[i] = var36;
+  }
+
+}
+
+#else
+static void
+_backup_audio_orc_unpack_u16_swap (OrcExecutor * ORC_RESTRICT ex)
+{
+  int i;
+  int n = ex->n;
+  orc_union32 *ORC_RESTRICT ptr0;
+  const orc_union16 *ORC_RESTRICT ptr4;
+  orc_union16 var34;
+#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
+  volatile orc_union32 var35;
+#else
+  orc_union32 var35;
+#endif
+  orc_union32 var36;
+  orc_union16 var37;
+  orc_union32 var38;
+
+  ptr0 = (orc_union32 *) ex->arrays[0];
+  ptr4 = (orc_union16 *) ex->arrays[4];
+
+  /* 3: loadpl */
+  var35.i = (int) 0x80000000;   /* -2147483648 or 1.061e-314f */
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadw */
+    var34 = ptr4[i];
+    /* 1: swapw */
+    var37.i = ORC_SWAP_W (var34.i);
+    /* 2: mergewl */
+    {
+      orc_union32 _dest;
+      _dest.x2[0] = var37.i;
+      _dest.x2[1] = var37.i;
+      var38.i = _dest.i;
+    }
+    /* 4: xorl */
+    var36.i = var38.i ^ var35.i;
+    /* 5: storel */
+    ptr0[i] = var36;
+  }
+
+}
+
+void
+audio_orc_unpack_u16_swap (gint32 * 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, 25, 97, 117, 100, 105, 111, 95, 111, 114, 99, 95, 117, 110, 112,
+        97, 99, 107, 95, 117, 49, 54, 95, 115, 119, 97, 112, 11, 4, 4, 12,
+        2, 2, 14, 4, 0, 0, 0, 128, 20, 2, 20, 4, 183, 32, 4, 195,
+        33, 32, 32, 132, 0, 33, 16, 2, 0,
+      };
+      p = orc_program_new_from_static_bytecode (bc);
+      orc_program_set_backup_function (p, _backup_audio_orc_unpack_u16_swap);
+#else
+      p = orc_program_new ();
+      orc_program_set_name (p, "audio_orc_unpack_u16_swap");
+      orc_program_set_backup_function (p, _backup_audio_orc_unpack_u16_swap);
+      orc_program_add_destination (p, 4, "d1");
+      orc_program_add_source (p, 2, "s1");
+      orc_program_add_constant (p, 4, 0x80000000, "c1");
+      orc_program_add_temporary (p, 2, "t1");
+      orc_program_add_temporary (p, 4, "t2");
+
+      orc_program_append_2 (p, "swapw", 0, ORC_VAR_T1, ORC_VAR_S1, ORC_VAR_D1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "mergewl", 0, ORC_VAR_T2, ORC_VAR_T1, ORC_VAR_T1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "xorl", 0, ORC_VAR_D1, ORC_VAR_T2, 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;
+
+  func = c->exec;
+  func (ex);
+}
+#endif
+
+
+/* audio_orc_unpack_u16_swap_trunc */
+#ifdef DISABLE_ORC
+void
+audio_orc_unpack_u16_swap_trunc (gint32 * ORC_RESTRICT d1,
+    const guint8 * ORC_RESTRICT s1, int n)
+{
+  int i;
+  orc_union32 *ORC_RESTRICT ptr0;
+  const orc_union16 *ORC_RESTRICT ptr4;
+  orc_union16 var34;
+#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
+  volatile orc_union32 var35;
+#else
+  orc_union32 var35;
+#endif
+  orc_union32 var36;
+  orc_union16 var37;
+  orc_union32 var38;
   orc_union32 var39;
 
   ptr0 = (orc_union32 *) d1;
@@ -792,7 +1540,7 @@
 
 #else
 static void
-_backup_audio_orc_unpack_u16_swap (OrcExecutor * ORC_RESTRICT ex)
+_backup_audio_orc_unpack_u16_swap_trunc (OrcExecutor * ORC_RESTRICT ex)
 {
   int i;
   int n = ex->n;
@@ -833,7 +1581,7 @@
 }
 
 void
-audio_orc_unpack_u16_swap (gint32 * ORC_RESTRICT d1,
+audio_orc_unpack_u16_swap_trunc (gint32 * ORC_RESTRICT d1,
     const guint8 * ORC_RESTRICT s1, int n)
 {
   OrcExecutor _ex, *ex = &_ex;
@@ -848,18 +1596,20 @@
 
 #if 1
       static const orc_uint8 bc[] = {
-        1, 9, 25, 97, 117, 100, 105, 111, 95, 111, 114, 99, 95, 117, 110, 112,
-        97, 99, 107, 95, 117, 49, 54, 95, 115, 119, 97, 112, 11, 4, 4, 12,
-        2, 2, 14, 4, 16, 0, 0, 0, 14, 4, 0, 0, 0, 128, 20, 2,
-        20, 4, 183, 32, 4, 154, 33, 32, 124, 33, 33, 16, 132, 0, 33, 17,
-        2, 0,
+        1, 9, 31, 97, 117, 100, 105, 111, 95, 111, 114, 99, 95, 117, 110, 112,
+        97, 99, 107, 95, 117, 49, 54, 95, 115, 119, 97, 112, 95, 116, 114, 117,
+        110, 99, 11, 4, 4, 12, 2, 2, 14, 4, 16, 0, 0, 0, 14, 4,
+        0, 0, 0, 128, 20, 2, 20, 4, 183, 32, 4, 154, 33, 32, 124, 33,
+        33, 16, 132, 0, 33, 17, 2, 0,
       };
       p = orc_program_new_from_static_bytecode (bc);
-      orc_program_set_backup_function (p, _backup_audio_orc_unpack_u16_swap);
+      orc_program_set_backup_function (p,
+          _backup_audio_orc_unpack_u16_swap_trunc);
 #else
       p = orc_program_new ();
-      orc_program_set_name (p, "audio_orc_unpack_u16_swap");
-      orc_program_set_backup_function (p, _backup_audio_orc_unpack_u16_swap);
+      orc_program_set_name (p, "audio_orc_unpack_u16_swap_trunc");
+      orc_program_set_backup_function (p,
+          _backup_audio_orc_unpack_u16_swap_trunc);
       orc_program_add_destination (p, 4, "d1");
       orc_program_add_source (p, 2, "s1");
       orc_program_add_constant (p, 4, 0x00000010, "c1");
@@ -906,6 +1656,131 @@
   int i;
   orc_union32 *ORC_RESTRICT ptr0;
   const orc_union16 *ORC_RESTRICT ptr4;
+  orc_union16 var33;
+  orc_union32 var34;
+  orc_union16 var35;
+
+  ptr0 = (orc_union32 *) d1;
+  ptr4 = (orc_union16 *) s1;
+
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadw */
+    var33 = ptr4[i];
+    /* 1: swapw */
+    var35.i = ORC_SWAP_W (var33.i);
+    /* 2: mergewl */
+    {
+      orc_union32 _dest;
+      _dest.x2[0] = var35.i;
+      _dest.x2[1] = var35.i;
+      var34.i = _dest.i;
+    }
+    /* 3: storel */
+    ptr0[i] = var34;
+  }
+
+}
+
+#else
+static void
+_backup_audio_orc_unpack_s16_swap (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_union16 var35;
+
+  ptr0 = (orc_union32 *) ex->arrays[0];
+  ptr4 = (orc_union16 *) ex->arrays[4];
+
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadw */
+    var33 = ptr4[i];
+    /* 1: swapw */
+    var35.i = ORC_SWAP_W (var33.i);
+    /* 2: mergewl */
+    {
+      orc_union32 _dest;
+      _dest.x2[0] = var35.i;
+      _dest.x2[1] = var35.i;
+      var34.i = _dest.i;
+    }
+    /* 3: storel */
+    ptr0[i] = var34;
+  }
+
+}
+
+void
+audio_orc_unpack_s16_swap (gint32 * 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, 25, 97, 117, 100, 105, 111, 95, 111, 114, 99, 95, 117, 110, 112,
+        97, 99, 107, 95, 115, 49, 54, 95, 115, 119, 97, 112, 11, 4, 4, 12,
+        2, 2, 20, 2, 183, 32, 4, 195, 0, 32, 32, 2, 0,
+      };
+      p = orc_program_new_from_static_bytecode (bc);
+      orc_program_set_backup_function (p, _backup_audio_orc_unpack_s16_swap);
+#else
+      p = orc_program_new ();
+      orc_program_set_name (p, "audio_orc_unpack_s16_swap");
+      orc_program_set_backup_function (p, _backup_audio_orc_unpack_s16_swap);
+      orc_program_add_destination (p, 4, "d1");
+      orc_program_add_source (p, 2, "s1");
+      orc_program_add_temporary (p, 2, "t1");
+
+      orc_program_append_2 (p, "swapw", 0, ORC_VAR_T1, ORC_VAR_S1, ORC_VAR_D1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "mergewl", 0, 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->arrays[ORC_VAR_S1] = (void *) s1;
+
+  func = c->exec;
+  func (ex);
+}
+#endif
+
+
+/* audio_orc_unpack_s16_swap_trunc */
+#ifdef DISABLE_ORC
+void
+audio_orc_unpack_s16_swap_trunc (gint32 * ORC_RESTRICT d1,
+    const guint8 * ORC_RESTRICT s1, int n)
+{
+  int i;
+  orc_union32 *ORC_RESTRICT ptr0;
+  const orc_union16 *ORC_RESTRICT ptr4;
   orc_union16 var34;
   orc_union32 var35;
   orc_union16 var36;
@@ -932,7 +1807,7 @@
 
 #else
 static void
-_backup_audio_orc_unpack_s16_swap (OrcExecutor * ORC_RESTRICT ex)
+_backup_audio_orc_unpack_s16_swap_trunc (OrcExecutor * ORC_RESTRICT ex)
 {
   int i;
   int n = ex->n;
@@ -963,7 +1838,7 @@
 }
 
 void
-audio_orc_unpack_s16_swap (gint32 * ORC_RESTRICT d1,
+audio_orc_unpack_s16_swap_trunc (gint32 * ORC_RESTRICT d1,
     const guint8 * ORC_RESTRICT s1, int n)
 {
   OrcExecutor _ex, *ex = &_ex;
@@ -978,17 +1853,19 @@
 
 #if 1
       static const orc_uint8 bc[] = {
-        1, 9, 25, 97, 117, 100, 105, 111, 95, 111, 114, 99, 95, 117, 110, 112,
-        97, 99, 107, 95, 115, 49, 54, 95, 115, 119, 97, 112, 11, 4, 4, 12,
-        2, 2, 14, 4, 16, 0, 0, 0, 20, 2, 20, 4, 183, 32, 4, 154,
-        33, 32, 124, 0, 33, 16, 2, 0,
+        1, 9, 31, 97, 117, 100, 105, 111, 95, 111, 114, 99, 95, 117, 110, 112,
+        97, 99, 107, 95, 115, 49, 54, 95, 115, 119, 97, 112, 95, 116, 114, 117,
+        110, 99, 11, 4, 4, 12, 2, 2, 14, 4, 16, 0, 0, 0, 20, 2,
+        20, 4, 183, 32, 4, 154, 33, 32, 124, 0, 33, 16, 2, 0,
       };
       p = orc_program_new_from_static_bytecode (bc);
-      orc_program_set_backup_function (p, _backup_audio_orc_unpack_s16_swap);
+      orc_program_set_backup_function (p,
+          _backup_audio_orc_unpack_s16_swap_trunc);
 #else
       p = orc_program_new ();
-      orc_program_set_name (p, "audio_orc_unpack_s16_swap");
-      orc_program_set_backup_function (p, _backup_audio_orc_unpack_s16_swap);
+      orc_program_set_name (p, "audio_orc_unpack_s16_swap_trunc");
+      orc_program_set_backup_function (p,
+          _backup_audio_orc_unpack_s16_swap_trunc);
       orc_program_add_destination (p, 4, "d1");
       orc_program_add_source (p, 2, "s1");
       orc_program_add_constant (p, 4, 0x00000010, "c1");
@@ -2450,8 +3327,7 @@
 #endif
   orc_int8 var36;
   orc_union32 var37;
-  orc_union32 var38;
-  orc_union16 var39;
+  orc_union16 var38;
 
   ptr0 = (orc_int8 *) d1;
   ptr4 = (orc_union32 *) s1;
@@ -2464,13 +3340,11 @@
     var34 = ptr4[i];
     /* 2: xorl */
     var37.i = var34.i ^ var35.i;
-    /* 3: shrul */
-    var38.i = ((orc_uint32) var37.i) >> 24;
-    /* 4: convlw */
-    var39.i = var38.i;
-    /* 5: convwb */
-    var36 = var39.i;
-    /* 6: storeb */
+    /* 3: convhlw */
+    var38.i = ((orc_uint32) var37.i) >> 16;
+    /* 4: convhwb */
+    var36 = ((orc_uint16) var38.i) >> 8;
+    /* 5: storeb */
     ptr0[i] = var36;
   }
 
@@ -2492,8 +3366,7 @@
 #endif
   orc_int8 var36;
   orc_union32 var37;
-  orc_union32 var38;
-  orc_union16 var39;
+  orc_union16 var38;
 
   ptr0 = (orc_int8 *) ex->arrays[0];
   ptr4 = (orc_union32 *) ex->arrays[4];
@@ -2506,13 +3379,11 @@
     var34 = ptr4[i];
     /* 2: xorl */
     var37.i = var34.i ^ var35.i;
-    /* 3: shrul */
-    var38.i = ((orc_uint32) var37.i) >> 24;
-    /* 4: convlw */
-    var39.i = var38.i;
-    /* 5: convwb */
-    var36 = var39.i;
-    /* 6: storeb */
+    /* 3: convhlw */
+    var38.i = ((orc_uint32) var37.i) >> 16;
+    /* 4: convhwb */
+    var36 = ((orc_uint16) var38.i) >> 8;
+    /* 5: storeb */
     ptr0[i] = var36;
   }
 
@@ -2535,9 +3406,9 @@
 #if 1
       static const orc_uint8 bc[] = {
         1, 9, 17, 97, 117, 100, 105, 111, 95, 111, 114, 99, 95, 112, 97, 99,
-        107, 95, 117, 56, 11, 1, 1, 12, 4, 4, 14, 4, 24, 0, 0, 0,
-        14, 4, 0, 0, 0, 128, 20, 4, 20, 2, 132, 32, 4, 17, 126, 32,
-        32, 16, 163, 33, 32, 157, 0, 33, 2, 0,
+        107, 95, 117, 56, 11, 1, 1, 12, 4, 4, 14, 4, 0, 0, 0, 128,
+        20, 4, 20, 2, 132, 32, 4, 16, 164, 33, 32, 158, 0, 33, 2, 0,
+
       };
       p = orc_program_new_from_static_bytecode (bc);
       orc_program_set_backup_function (p, _backup_audio_orc_pack_u8);
@@ -2547,18 +3418,15 @@
       orc_program_set_backup_function (p, _backup_audio_orc_pack_u8);
       orc_program_add_destination (p, 1, "d1");
       orc_program_add_source (p, 4, "s1");
-      orc_program_add_constant (p, 4, 0x00000018, "c1");
-      orc_program_add_constant (p, 4, 0x80000000, "c2");
+      orc_program_add_constant (p, 4, 0x80000000, "c1");
       orc_program_add_temporary (p, 4, "t1");
       orc_program_add_temporary (p, 2, "t2");
 
-      orc_program_append_2 (p, "xorl", 0, ORC_VAR_T1, ORC_VAR_S1, ORC_VAR_C2,
+      orc_program_append_2 (p, "xorl", 0, ORC_VAR_T1, ORC_VAR_S1, ORC_VAR_C1,
           ORC_VAR_D1);
-      orc_program_append_2 (p, "shrul", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_C1,
+      orc_program_append_2 (p, "convhlw", 0, ORC_VAR_T2, ORC_VAR_T1, ORC_VAR_D1,
           ORC_VAR_D1);
-      orc_program_append_2 (p, "convlw", 0, ORC_VAR_T2, ORC_VAR_T1, ORC_VAR_D1,
-          ORC_VAR_D1);
-      orc_program_append_2 (p, "convwb", 0, ORC_VAR_D1, ORC_VAR_T2, ORC_VAR_D1,
+      orc_program_append_2 (p, "convhwb", 0, ORC_VAR_D1, ORC_VAR_T2, ORC_VAR_D1,
           ORC_VAR_D1);
 #endif
 
@@ -2591,10 +3459,9 @@
   int i;
   orc_int8 *ORC_RESTRICT ptr0;
   const orc_union32 *ORC_RESTRICT ptr4;
-  orc_union32 var34;
-  orc_int8 var35;
-  orc_union32 var36;
-  orc_union16 var37;
+  orc_union32 var33;
+  orc_int8 var34;
+  orc_union16 var35;
 
   ptr0 = (orc_int8 *) d1;
   ptr4 = (orc_union32 *) s1;
@@ -2602,15 +3469,13 @@
 
   for (i = 0; i < n; i++) {
     /* 0: loadl */
-    var34 = ptr4[i];
-    /* 1: shrsl */
-    var36.i = var34.i >> 24;
-    /* 2: convlw */
-    var37.i = var36.i;
-    /* 3: convwb */
-    var35 = var37.i;
-    /* 4: storeb */
-    ptr0[i] = var35;
+    var33 = ptr4[i];
+    /* 1: convhlw */
+    var35.i = ((orc_uint32) var33.i) >> 16;
+    /* 2: convhwb */
+    var34 = ((orc_uint16) var35.i) >> 8;
+    /* 3: storeb */
+    ptr0[i] = var34;
   }
 
 }
@@ -2623,10 +3488,9 @@
   int n = ex->n;
   orc_int8 *ORC_RESTRICT ptr0;
   const orc_union32 *ORC_RESTRICT ptr4;
-  orc_union32 var34;
-  orc_int8 var35;
-  orc_union32 var36;
-  orc_union16 var37;
+  orc_union32 var33;
+  orc_int8 var34;
+  orc_union16 var35;
 
   ptr0 = (orc_int8 *) ex->arrays[0];
   ptr4 = (orc_union32 *) ex->arrays[4];
@@ -2634,15 +3498,13 @@
 
   for (i = 0; i < n; i++) {
     /* 0: loadl */
-    var34 = ptr4[i];
-    /* 1: shrsl */
-    var36.i = var34.i >> 24;
-    /* 2: convlw */
-    var37.i = var36.i;
-    /* 3: convwb */
-    var35 = var37.i;
-    /* 4: storeb */
-    ptr0[i] = var35;
+    var33 = ptr4[i];
+    /* 1: convhlw */
+    var35.i = ((orc_uint32) var33.i) >> 16;
+    /* 2: convhwb */
+    var34 = ((orc_uint16) var35.i) >> 8;
+    /* 3: storeb */
+    ptr0[i] = var34;
   }
 
 }
@@ -2664,9 +3526,8 @@
 #if 1
       static const orc_uint8 bc[] = {
         1, 9, 17, 97, 117, 100, 105, 111, 95, 111, 114, 99, 95, 112, 97, 99,
-        107, 95, 115, 56, 11, 1, 1, 12, 4, 4, 14, 4, 24, 0, 0, 0,
-        20, 4, 20, 2, 125, 32, 4, 16, 163, 33, 32, 157, 0, 33, 2, 0,
-
+        107, 95, 115, 56, 11, 1, 1, 12, 4, 4, 20, 2, 164, 32, 4, 158,
+        0, 32, 2, 0,
       };
       p = orc_program_new_from_static_bytecode (bc);
       orc_program_set_backup_function (p, _backup_audio_orc_pack_s8);
@@ -2676,15 +3537,11 @@
       orc_program_set_backup_function (p, _backup_audio_orc_pack_s8);
       orc_program_add_destination (p, 1, "d1");
       orc_program_add_source (p, 4, "s1");
-      orc_program_add_constant (p, 4, 0x00000018, "c1");
-      orc_program_add_temporary (p, 4, "t1");
-      orc_program_add_temporary (p, 2, "t2");
+      orc_program_add_temporary (p, 2, "t1");
 
-      orc_program_append_2 (p, "shrsl", 0, ORC_VAR_T1, ORC_VAR_S1, ORC_VAR_C1,
+      orc_program_append_2 (p, "convhlw", 0, ORC_VAR_T1, ORC_VAR_S1, ORC_VAR_D1,
           ORC_VAR_D1);
-      orc_program_append_2 (p, "convlw", 0, ORC_VAR_T2, ORC_VAR_T1, ORC_VAR_D1,
-          ORC_VAR_D1);
-      orc_program_append_2 (p, "convwb", 0, ORC_VAR_D1, ORC_VAR_T2, ORC_VAR_D1,
+      orc_program_append_2 (p, "convhwb", 0, ORC_VAR_D1, ORC_VAR_T1, ORC_VAR_D1,
           ORC_VAR_D1);
 #endif
 
@@ -2725,7 +3582,6 @@
 #endif
   orc_union16 var35;
   orc_union32 var36;
-  orc_union32 var37;
 
   ptr0 = (orc_union16 *) d1;
   ptr4 = (orc_union32 *) s1;
@@ -2738,11 +3594,9 @@
     var33 = ptr4[i];
     /* 2: xorl */
     var36.i = var33.i ^ var34.i;
-    /* 3: shrul */
-    var37.i = ((orc_uint32) var36.i) >> 16;
-    /* 4: convlw */
-    var35.i = var37.i;
-    /* 5: storew */
+    /* 3: convhlw */
+    var35.i = ((orc_uint32) var36.i) >> 16;
+    /* 4: storew */
     ptr0[i] = var35;
   }
 
@@ -2764,7 +3618,6 @@
 #endif
   orc_union16 var35;
   orc_union32 var36;
-  orc_union32 var37;
 
   ptr0 = (orc_union16 *) ex->arrays[0];
   ptr4 = (orc_union32 *) ex->arrays[4];
@@ -2777,11 +3630,9 @@
     var33 = ptr4[i];
     /* 2: xorl */
     var36.i = var33.i ^ var34.i;
-    /* 3: shrul */
-    var37.i = ((orc_uint32) var36.i) >> 16;
-    /* 4: convlw */
-    var35.i = var37.i;
-    /* 5: storew */
+    /* 3: convhlw */
+    var35.i = ((orc_uint32) var36.i) >> 16;
+    /* 4: storew */
     ptr0[i] = var35;
   }
 
@@ -2804,9 +3655,8 @@
 #if 1
       static const orc_uint8 bc[] = {
         1, 9, 18, 97, 117, 100, 105, 111, 95, 111, 114, 99, 95, 112, 97, 99,
-        107, 95, 117, 49, 54, 11, 2, 2, 12, 4, 4, 14, 4, 16, 0, 0,
-        0, 14, 4, 0, 0, 0, 128, 20, 4, 132, 32, 4, 17, 126, 32, 32,
-        16, 163, 0, 32, 2, 0,
+        107, 95, 117, 49, 54, 11, 2, 2, 12, 4, 4, 14, 4, 0, 0, 0,
+        128, 20, 4, 132, 32, 4, 16, 164, 0, 32, 2, 0,
       };
       p = orc_program_new_from_static_bytecode (bc);
       orc_program_set_backup_function (p, _backup_audio_orc_pack_u16);
@@ -2816,15 +3666,12 @@
       orc_program_set_backup_function (p, _backup_audio_orc_pack_u16);
       orc_program_add_destination (p, 2, "d1");
       orc_program_add_source (p, 4, "s1");
-      orc_program_add_constant (p, 4, 0x00000010, "c1");
-      orc_program_add_constant (p, 4, 0x80000000, "c2");
+      orc_program_add_constant (p, 4, 0x80000000, "c1");
       orc_program_add_temporary (p, 4, "t1");
 
-      orc_program_append_2 (p, "xorl", 0, ORC_VAR_T1, ORC_VAR_S1, ORC_VAR_C2,
+      orc_program_append_2 (p, "xorl", 0, ORC_VAR_T1, ORC_VAR_S1, ORC_VAR_C1,
           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_program_append_2 (p, "convhlw", 0, ORC_VAR_D1, ORC_VAR_T1, ORC_VAR_D1,
           ORC_VAR_D1);
 #endif
 
@@ -2857,9 +3704,8 @@
   int i;
   orc_union16 *ORC_RESTRICT ptr0;
   const orc_union32 *ORC_RESTRICT ptr4;
-  orc_union32 var33;
-  orc_union16 var34;
-  orc_union32 var35;
+  orc_union32 var32;
+  orc_union16 var33;
 
   ptr0 = (orc_union16 *) d1;
   ptr4 = (orc_union32 *) s1;
@@ -2867,13 +3713,11 @@
 
   for (i = 0; i < n; i++) {
     /* 0: loadl */
-    var33 = ptr4[i];
-    /* 1: shrsl */
-    var35.i = var33.i >> 16;
-    /* 2: convlw */
-    var34.i = var35.i;
-    /* 3: storew */
-    ptr0[i] = var34;
+    var32 = ptr4[i];
+    /* 1: convhlw */
+    var33.i = ((orc_uint32) var32.i) >> 16;
+    /* 2: storew */
+    ptr0[i] = var33;
   }
 
 }
@@ -2886,9 +3730,8 @@
   int n = ex->n;
   orc_union16 *ORC_RESTRICT ptr0;
   const orc_union32 *ORC_RESTRICT ptr4;
-  orc_union32 var33;
-  orc_union16 var34;
-  orc_union32 var35;
+  orc_union32 var32;
+  orc_union16 var33;
 
   ptr0 = (orc_union16 *) ex->arrays[0];
   ptr4 = (orc_union32 *) ex->arrays[4];
@@ -2896,13 +3739,11 @@
 
   for (i = 0; i < n; i++) {
     /* 0: loadl */
-    var33 = ptr4[i];
-    /* 1: shrsl */
-    var35.i = var33.i >> 16;
-    /* 2: convlw */
-    var34.i = var35.i;
-    /* 3: storew */
-    ptr0[i] = var34;
+    var32 = ptr4[i];
+    /* 1: convhlw */
+    var33.i = ((orc_uint32) var32.i) >> 16;
+    /* 2: storew */
+    ptr0[i] = var33;
   }
 
 }
@@ -2924,8 +3765,8 @@
 #if 1
       static const orc_uint8 bc[] = {
         1, 9, 18, 97, 117, 100, 105, 111, 95, 111, 114, 99, 95, 112, 97, 99,
-        107, 95, 115, 49, 54, 11, 2, 2, 12, 4, 4, 14, 4, 16, 0, 0,
-        0, 20, 4, 125, 32, 4, 16, 163, 0, 32, 2, 0,
+        107, 95, 115, 49, 54, 11, 2, 2, 12, 4, 4, 164, 0, 4, 2, 0,
+
       };
       p = orc_program_new_from_static_bytecode (bc);
       orc_program_set_backup_function (p, _backup_audio_orc_pack_s16);
@@ -2935,12 +3776,8 @@
       orc_program_set_backup_function (p, _backup_audio_orc_pack_s16);
       orc_program_add_destination (p, 2, "d1");
       orc_program_add_source (p, 4, "s1");
-      orc_program_add_constant (p, 4, 0x00000010, "c1");
-      orc_program_add_temporary (p, 4, "t1");
 
-      orc_program_append_2 (p, "shrsl", 0, ORC_VAR_T1, ORC_VAR_S1, ORC_VAR_C1,
-          ORC_VAR_D1);
-      orc_program_append_2 (p, "convlw", 0, ORC_VAR_D1, ORC_VAR_T1, ORC_VAR_D1,
+      orc_program_append_2 (p, "convhlw", 0, ORC_VAR_D1, ORC_VAR_S1, ORC_VAR_D1,
           ORC_VAR_D1);
 #endif
 
@@ -2981,8 +3818,7 @@
 #endif
   orc_union16 var36;
   orc_union32 var37;
-  orc_union32 var38;
-  orc_union16 var39;
+  orc_union16 var38;
 
   ptr0 = (orc_union16 *) d1;
   ptr4 = (orc_union32 *) s1;
@@ -2995,13 +3831,11 @@
     var34 = ptr4[i];
     /* 2: xorl */
     var37.i = var34.i ^ var35.i;
-    /* 3: shrul */
+    /* 3: convhlw */
     var38.i = ((orc_uint32) var37.i) >> 16;
-    /* 4: convlw */
-    var39.i = var38.i;
-    /* 5: swapw */
-    var36.i = ORC_SWAP_W (var39.i);
-    /* 6: storew */
+    /* 4: swapw */
+    var36.i = ORC_SWAP_W (var38.i);
+    /* 5: storew */
     ptr0[i] = var36;
   }
 
@@ -3023,8 +3857,7 @@
 #endif
   orc_union16 var36;
   orc_union32 var37;
-  orc_union32 var38;
-  orc_union16 var39;
+  orc_union16 var38;
 
   ptr0 = (orc_union16 *) ex->arrays[0];
   ptr4 = (orc_union32 *) ex->arrays[4];
@@ -3037,13 +3870,11 @@
     var34 = ptr4[i];
     /* 2: xorl */
     var37.i = var34.i ^ var35.i;
-    /* 3: shrul */
+    /* 3: convhlw */
     var38.i = ((orc_uint32) var37.i) >> 16;
-    /* 4: convlw */
-    var39.i = var38.i;
-    /* 5: swapw */
-    var36.i = ORC_SWAP_W (var39.i);
-    /* 6: storew */
+    /* 4: swapw */
+    var36.i = ORC_SWAP_W (var38.i);
+    /* 5: storew */
     ptr0[i] = var36;
   }
 
@@ -3067,9 +3898,8 @@
       static const orc_uint8 bc[] = {
         1, 9, 23, 97, 117, 100, 105, 111, 95, 111, 114, 99, 95, 112, 97, 99,
         107, 95, 117, 49, 54, 95, 115, 119, 97, 112, 11, 2, 2, 12, 4, 4,
-        14, 4, 0, 0, 0, 128, 14, 4, 16, 0, 0, 0, 20, 4, 20, 2,
-        132, 32, 4, 16, 126, 32, 32, 17, 163, 33, 32, 183, 0, 33, 2, 0,
-
+        14, 4, 0, 0, 0, 128, 20, 4, 20, 2, 132, 32, 4, 16, 164, 33,
+        32, 183, 0, 33, 2, 0,
       };
       p = orc_program_new_from_static_bytecode (bc);
       orc_program_set_backup_function (p, _backup_audio_orc_pack_u16_swap);
@@ -3080,15 +3910,12 @@
       orc_program_add_destination (p, 2, "d1");
       orc_program_add_source (p, 4, "s1");
       orc_program_add_constant (p, 4, 0x80000000, "c1");
-      orc_program_add_constant (p, 4, 0x00000010, "c2");
       orc_program_add_temporary (p, 4, "t1");
       orc_program_add_temporary (p, 2, "t2");
 
       orc_program_append_2 (p, "xorl", 0, ORC_VAR_T1, ORC_VAR_S1, ORC_VAR_C1,
           ORC_VAR_D1);
-      orc_program_append_2 (p, "shrul", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_C2,
-          ORC_VAR_D1);
-      orc_program_append_2 (p, "convlw", 0, ORC_VAR_T2, ORC_VAR_T1, ORC_VAR_D1,
+      orc_program_append_2 (p, "convhlw", 0, ORC_VAR_T2, ORC_VAR_T1, ORC_VAR_D1,
           ORC_VAR_D1);
       orc_program_append_2 (p, "swapw", 0, ORC_VAR_D1, ORC_VAR_T2, ORC_VAR_D1,
           ORC_VAR_D1);
@@ -3123,10 +3950,9 @@
   int i;
   orc_union16 *ORC_RESTRICT ptr0;
   const orc_union32 *ORC_RESTRICT ptr4;
-  orc_union32 var34;
+  orc_union32 var33;
+  orc_union16 var34;
   orc_union16 var35;
-  orc_union32 var36;
-  orc_union16 var37;
 
   ptr0 = (orc_union16 *) d1;
   ptr4 = (orc_union32 *) s1;
@@ -3134,15 +3960,13 @@
 
   for (i = 0; i < n; i++) {
     /* 0: loadl */
-    var34 = ptr4[i];
-    /* 1: shrsl */
-    var36.i = var34.i >> 16;
-    /* 2: convlw */
-    var37.i = var36.i;
-    /* 3: swapw */
-    var35.i = ORC_SWAP_W (var37.i);
-    /* 4: storew */
-    ptr0[i] = var35;
+    var33 = ptr4[i];
+    /* 1: convhlw */
+    var35.i = ((orc_uint32) var33.i) >> 16;
+    /* 2: swapw */
+    var34.i = ORC_SWAP_W (var35.i);
+    /* 3: storew */
+    ptr0[i] = var34;
   }
 
 }
@@ -3155,10 +3979,9 @@
   int n = ex->n;
   orc_union16 *ORC_RESTRICT ptr0;
   const orc_union32 *ORC_RESTRICT ptr4;
-  orc_union32 var34;
+  orc_union32 var33;
+  orc_union16 var34;
   orc_union16 var35;
-  orc_union32 var36;
-  orc_union16 var37;
 
   ptr0 = (orc_union16 *) ex->arrays[0];
   ptr4 = (orc_union32 *) ex->arrays[4];
@@ -3166,15 +3989,13 @@
 
   for (i = 0; i < n; i++) {
     /* 0: loadl */
-    var34 = ptr4[i];
-    /* 1: shrsl */
-    var36.i = var34.i >> 16;
-    /* 2: convlw */
-    var37.i = var36.i;
-    /* 3: swapw */
-    var35.i = ORC_SWAP_W (var37.i);
-    /* 4: storew */
-    ptr0[i] = var35;
+    var33 = ptr4[i];
+    /* 1: convhlw */
+    var35.i = ((orc_uint32) var33.i) >> 16;
+    /* 2: swapw */
+    var34.i = ORC_SWAP_W (var35.i);
+    /* 3: storew */
+    ptr0[i] = var34;
   }
 
 }
@@ -3197,8 +4018,7 @@
       static const orc_uint8 bc[] = {
         1, 9, 23, 97, 117, 100, 105, 111, 95, 111, 114, 99, 95, 112, 97, 99,
         107, 95, 115, 49, 54, 95, 115, 119, 97, 112, 11, 2, 2, 12, 4, 4,
-        14, 4, 16, 0, 0, 0, 20, 4, 20, 2, 125, 32, 4, 16, 163, 33,
-        32, 183, 0, 33, 2, 0,
+        20, 2, 164, 32, 4, 183, 0, 32, 2, 0,
       };
       p = orc_program_new_from_static_bytecode (bc);
       orc_program_set_backup_function (p, _backup_audio_orc_pack_s16_swap);
@@ -3208,15 +4028,11 @@
       orc_program_set_backup_function (p, _backup_audio_orc_pack_s16_swap);
       orc_program_add_destination (p, 2, "d1");
       orc_program_add_source (p, 4, "s1");
-      orc_program_add_constant (p, 4, 0x00000010, "c1");
-      orc_program_add_temporary (p, 4, "t1");
-      orc_program_add_temporary (p, 2, "t2");
+      orc_program_add_temporary (p, 2, "t1");
 
-      orc_program_append_2 (p, "shrsl", 0, ORC_VAR_T1, ORC_VAR_S1, ORC_VAR_C1,
+      orc_program_append_2 (p, "convhlw", 0, ORC_VAR_T1, ORC_VAR_S1, ORC_VAR_D1,
           ORC_VAR_D1);
-      orc_program_append_2 (p, "convlw", 0, ORC_VAR_T2, ORC_VAR_T1, ORC_VAR_D1,
-          ORC_VAR_D1);
-      orc_program_append_2 (p, "swapw", 0, ORC_VAR_D1, ORC_VAR_T2, ORC_VAR_D1,
+      orc_program_append_2 (p, "swapw", 0, ORC_VAR_D1, ORC_VAR_T1, ORC_VAR_D1,
           ORC_VAR_D1);
 #endif
 
@@ -4947,3 +5763,713 @@
   func (ex);
 }
 #endif
+
+
+/* audio_orc_int_bias */
+#ifdef DISABLE_ORC
+void
+audio_orc_int_bias (gint32 * ORC_RESTRICT d1, const gint32 * ORC_RESTRICT s1,
+    int p1, int p2, int n)
+{
+  int i;
+  orc_union32 *ORC_RESTRICT ptr0;
+  const orc_union32 *ORC_RESTRICT ptr4;
+  orc_union32 var33;
+  orc_union32 var34;
+  orc_union32 var35;
+  orc_union32 var36;
+  orc_union32 var37;
+
+  ptr0 = (orc_union32 *) d1;
+  ptr4 = (orc_union32 *) s1;
+
+  /* 1: loadpl */
+  var34.i = p1;
+  /* 3: loadpl */
+  var35.i = p2;
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadl */
+    var33 = ptr4[i];
+    /* 2: addssl */
+    var37.i = ORC_CLAMP_SL ((orc_int64) var33.i + (orc_int64) var34.i);
+    /* 4: andl */
+    var36.i = var37.i & var35.i;
+    /* 5: storel */
+    ptr0[i] = var36;
+  }
+
+}
+
+#else
+static void
+_backup_audio_orc_int_bias (OrcExecutor * ORC_RESTRICT ex)
+{
+  int i;
+  int n = ex->n;
+  orc_union32 *ORC_RESTRICT ptr0;
+  const orc_union32 *ORC_RESTRICT ptr4;
+  orc_union32 var33;
+  orc_union32 var34;
+  orc_union32 var35;
+  orc_union32 var36;
+  orc_union32 var37;
+
+  ptr0 = (orc_union32 *) ex->arrays[0];
+  ptr4 = (orc_union32 *) ex->arrays[4];
+
+  /* 1: loadpl */
+  var34.i = ex->params[24];
+  /* 3: loadpl */
+  var35.i = ex->params[25];
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadl */
+    var33 = ptr4[i];
+    /* 2: addssl */
+    var37.i = ORC_CLAMP_SL ((orc_int64) var33.i + (orc_int64) var34.i);
+    /* 4: andl */
+    var36.i = var37.i & var35.i;
+    /* 5: storel */
+    ptr0[i] = var36;
+  }
+
+}
+
+void
+audio_orc_int_bias (gint32 * ORC_RESTRICT d1, const gint32 * 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, 18, 97, 117, 100, 105, 111, 95, 111, 114, 99, 95, 105, 110, 116,
+        95, 98, 105, 97, 115, 11, 4, 4, 12, 4, 4, 16, 4, 16, 4, 20,
+        4, 104, 32, 4, 24, 106, 0, 32, 25, 2, 0,
+      };
+      p = orc_program_new_from_static_bytecode (bc);
+      orc_program_set_backup_function (p, _backup_audio_orc_int_bias);
+#else
+      p = orc_program_new ();
+      orc_program_set_name (p, "audio_orc_int_bias");
+      orc_program_set_backup_function (p, _backup_audio_orc_int_bias);
+      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_add_temporary (p, 4, "t1");
+
+      orc_program_append_2 (p, "addssl", 0, ORC_VAR_T1, ORC_VAR_S1, ORC_VAR_P1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "andl", 0, ORC_VAR_D1, ORC_VAR_T1, ORC_VAR_P2,
+          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;
+  ex->params[ORC_VAR_P2] = p2;
+
+  func = c->exec;
+  func (ex);
+}
+#endif
+
+
+/* audio_orc_int_dither */
+#ifdef DISABLE_ORC
+void
+audio_orc_int_dither (gint32 * ORC_RESTRICT d1, const gint32 * ORC_RESTRICT s1,
+    const gint32 * ORC_RESTRICT s2, int p1, int n)
+{
+  int i;
+  orc_union32 *ORC_RESTRICT ptr0;
+  const orc_union32 *ORC_RESTRICT ptr4;
+  const orc_union32 *ORC_RESTRICT ptr5;
+  orc_union32 var33;
+  orc_union32 var34;
+  orc_union32 var35;
+  orc_union32 var36;
+  orc_union32 var37;
+
+  ptr0 = (orc_union32 *) d1;
+  ptr4 = (orc_union32 *) s1;
+  ptr5 = (orc_union32 *) s2;
+
+  /* 3: loadpl */
+  var35.i = p1;
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadl */
+    var33 = ptr4[i];
+    /* 1: loadl */
+    var34 = ptr5[i];
+    /* 2: addssl */
+    var37.i = ORC_CLAMP_SL ((orc_int64) var33.i + (orc_int64) var34.i);
+    /* 4: andl */
+    var36.i = var37.i & var35.i;
+    /* 5: storel */
+    ptr0[i] = var36;
+  }
+
+}
+
+#else
+static void
+_backup_audio_orc_int_dither (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 var33;
+  orc_union32 var34;
+  orc_union32 var35;
+  orc_union32 var36;
+  orc_union32 var37;
+
+  ptr0 = (orc_union32 *) ex->arrays[0];
+  ptr4 = (orc_union32 *) ex->arrays[4];
+  ptr5 = (orc_union32 *) ex->arrays[5];
+
+  /* 3: loadpl */
+  var35.i = ex->params[24];
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadl */
+    var33 = ptr4[i];
+    /* 1: loadl */
+    var34 = ptr5[i];
+    /* 2: addssl */
+    var37.i = ORC_CLAMP_SL ((orc_int64) var33.i + (orc_int64) var34.i);
+    /* 4: andl */
+    var36.i = var37.i & var35.i;
+    /* 5: storel */
+    ptr0[i] = var36;
+  }
+
+}
+
+void
+audio_orc_int_dither (gint32 * ORC_RESTRICT d1, const gint32 * ORC_RESTRICT s1,
+    const gint32 * 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, 20, 97, 117, 100, 105, 111, 95, 111, 114, 99, 95, 105, 110, 116,
+        95, 100, 105, 116, 104, 101, 114, 11, 4, 4, 12, 4, 4, 12, 4, 4,
+        16, 4, 20, 4, 104, 32, 4, 5, 106, 0, 32, 24, 2, 0,
+      };
+      p = orc_program_new_from_static_bytecode (bc);
+      orc_program_set_backup_function (p, _backup_audio_orc_int_dither);
+#else
+      p = orc_program_new ();
+      orc_program_set_name (p, "audio_orc_int_dither");
+      orc_program_set_backup_function (p, _backup_audio_orc_int_dither);
+      orc_program_add_destination (p, 4, "d1");
+      orc_program_add_source (p, 4, "s1");
+      orc_program_add_source (p, 4, "s2");
+      orc_program_add_parameter (p, 4, "p1");
+      orc_program_add_temporary (p, 4, "t1");
+
+      orc_program_append_2 (p, "addssl", 0, ORC_VAR_T1, ORC_VAR_S1, ORC_VAR_S2,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "andl", 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->arrays[ORC_VAR_S2] = (void *) s2;
+  ex->params[ORC_VAR_P1] = p1;
+
+  func = c->exec;
+  func (ex);
+}
+#endif
+
+
+/* audio_orc_update_rand */
+#ifdef DISABLE_ORC
+void
+audio_orc_update_rand (guint32 * ORC_RESTRICT d1, int n)
+{
+  int i;
+  orc_union32 *ORC_RESTRICT ptr0;
+  orc_union32 var33;
+#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
+  volatile orc_union32 var34;
+#else
+  orc_union32 var34;
+#endif
+#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
+  volatile orc_union32 var35;
+#else
+  orc_union32 var35;
+#endif
+  orc_union32 var36;
+  orc_union32 var37;
+
+  ptr0 = (orc_union32 *) d1;
+
+  /* 1: loadpl */
+  var34.i = (int) 0x41c64e6d;   /* 1103515245 or 5.45209e-315f */
+  /* 3: loadpl */
+  var35.i = (int) 0x00003039;   /* 12345 or 6.09924e-320f */
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadl */
+    var33 = ptr0[i];
+    /* 2: mulll */
+    var37.i = (((orc_uint32) var33.i) * ((orc_uint32) var34.i)) & 0xffffffff;
+    /* 4: addl */
+    var36.i = ((orc_uint32) var37.i) + ((orc_uint32) var35.i);
+    /* 5: storel */
+    ptr0[i] = var36;
+  }
+
+}
+
+#else
+static void
+_backup_audio_orc_update_rand (OrcExecutor * ORC_RESTRICT ex)
+{
+  int i;
+  int n = ex->n;
+  orc_union32 *ORC_RESTRICT ptr0;
+  orc_union32 var33;
+#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
+  volatile orc_union32 var34;
+#else
+  orc_union32 var34;
+#endif
+#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
+  volatile orc_union32 var35;
+#else
+  orc_union32 var35;
+#endif
+  orc_union32 var36;
+  orc_union32 var37;
+
+  ptr0 = (orc_union32 *) ex->arrays[0];
+
+  /* 1: loadpl */
+  var34.i = (int) 0x41c64e6d;   /* 1103515245 or 5.45209e-315f */
+  /* 3: loadpl */
+  var35.i = (int) 0x00003039;   /* 12345 or 6.09924e-320f */
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadl */
+    var33 = ptr0[i];
+    /* 2: mulll */
+    var37.i = (((orc_uint32) var33.i) * ((orc_uint32) var34.i)) & 0xffffffff;
+    /* 4: addl */
+    var36.i = ((orc_uint32) var37.i) + ((orc_uint32) var35.i);
+    /* 5: storel */
+    ptr0[i] = var36;
+  }
+
+}
+
+void
+audio_orc_update_rand (guint32 * 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, 21, 97, 117, 100, 105, 111, 95, 111, 114, 99, 95, 117, 112, 100,
+        97, 116, 101, 95, 114, 97, 110, 100, 11, 4, 4, 14, 4, 109, 78, 198,
+        65, 14, 4, 57, 48, 0, 0, 20, 4, 120, 32, 0, 16, 103, 0, 32,
+        17, 2, 0,
+      };
+      p = orc_program_new_from_static_bytecode (bc);
+      orc_program_set_backup_function (p, _backup_audio_orc_update_rand);
+#else
+      p = orc_program_new ();
+      orc_program_set_name (p, "audio_orc_update_rand");
+      orc_program_set_backup_function (p, _backup_audio_orc_update_rand);
+      orc_program_add_destination (p, 4, "d1");
+      orc_program_add_constant (p, 4, 0x41c64e6d, "c1");
+      orc_program_add_constant (p, 4, 0x00003039, "c2");
+      orc_program_add_temporary (p, 4, "t1");
+
+      orc_program_append_2 (p, "mulll", 0, ORC_VAR_T1, ORC_VAR_D1, ORC_VAR_C1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "addl", 0, ORC_VAR_D1, ORC_VAR_T1, ORC_VAR_C2,
+          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
+
+
+/* audio_orc_s32_to_double */
+#ifdef DISABLE_ORC
+void
+audio_orc_s32_to_double (gdouble * ORC_RESTRICT d1,
+    const gint32 * ORC_RESTRICT s1, int n)
+{
+  int i;
+  orc_union64 *ORC_RESTRICT ptr0;
+  const orc_union32 *ORC_RESTRICT ptr4;
+  orc_union32 var33;
+#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
+  volatile orc_union64 var34;
+#else
+  orc_union64 var34;
+#endif
+  orc_union64 var35;
+  orc_union64 var36;
+
+  ptr0 = (orc_union64 *) d1;
+  ptr4 = (orc_union32 *) s1;
+
+  /* 2: loadpq */
+  var34.i = ORC_UINT64_C (0x41e0000000000000);  /* 2.14748e+09f */
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadl */
+    var33 = ptr4[i];
+    /* 1: convld */
+    var36.f = var33.i;
+    /* 3: divd */
+    {
+      orc_union64 _src1;
+      orc_union64 _src2;
+      orc_union64 _dest1;
+      _src1.i = ORC_DENORMAL_DOUBLE (var36.i);
+      _src2.i = ORC_DENORMAL_DOUBLE (var34.i);
+      _dest1.f = _src1.f / _src2.f;
+      var35.i = ORC_DENORMAL_DOUBLE (_dest1.i);
+    }
+    /* 4: storeq */
+    ptr0[i] = var35;
+  }
+
+}
+
+#else
+static void
+_backup_audio_orc_s32_to_double (OrcExecutor * ORC_RESTRICT ex)
+{
+  int i;
+  int n = ex->n;
+  orc_union64 *ORC_RESTRICT ptr0;
+  const orc_union32 *ORC_RESTRICT ptr4;
+  orc_union32 var33;
+#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
+  volatile orc_union64 var34;
+#else
+  orc_union64 var34;
+#endif
+  orc_union64 var35;
+  orc_union64 var36;
+
+  ptr0 = (orc_union64 *) ex->arrays[0];
+  ptr4 = (orc_union32 *) ex->arrays[4];
+
+  /* 2: loadpq */
+  var34.i = ORC_UINT64_C (0x41e0000000000000);  /* 2.14748e+09f */
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadl */
+    var33 = ptr4[i];
+    /* 1: convld */
+    var36.f = var33.i;
+    /* 3: divd */
+    {
+      orc_union64 _src1;
+      orc_union64 _src2;
+      orc_union64 _dest1;
+      _src1.i = ORC_DENORMAL_DOUBLE (var36.i);
+      _src2.i = ORC_DENORMAL_DOUBLE (var34.i);
+      _dest1.f = _src1.f / _src2.f;
+      var35.i = ORC_DENORMAL_DOUBLE (_dest1.i);
+    }
+    /* 4: storeq */
+    ptr0[i] = var35;
+  }
+
+}
+
+void
+audio_orc_s32_to_double (gdouble * 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, 23, 97, 117, 100, 105, 111, 95, 111, 114, 99, 95, 115, 51, 50,
+        95, 116, 111, 95, 100, 111, 117, 98, 108, 101, 11, 8, 8, 12, 4, 4,
+        15, 8, 0, 0, 0, 0, 0, 0, 224, 65, 20, 8, 223, 32, 4, 215,
+        0, 32, 16, 2, 0,
+      };
+      p = orc_program_new_from_static_bytecode (bc);
+      orc_program_set_backup_function (p, _backup_audio_orc_s32_to_double);
+#else
+      p = orc_program_new ();
+      orc_program_set_name (p, "audio_orc_s32_to_double");
+      orc_program_set_backup_function (p, _backup_audio_orc_s32_to_double);
+      orc_program_add_destination (p, 8, "d1");
+      orc_program_add_source (p, 4, "s1");
+      orc_program_add_constant_int64 (p, 8, 0x41e0000000000000ULL, "c1");
+      orc_program_add_temporary (p, 8, "t1");
+
+      orc_program_append_2 (p, "convld", 0, ORC_VAR_T1, ORC_VAR_S1, ORC_VAR_D1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "divd", 0, ORC_VAR_D1, ORC_VAR_T1, 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;
+
+  func = c->exec;
+  func (ex);
+}
+#endif
+
+
+/* audio_orc_double_to_s32 */
+#ifdef DISABLE_ORC
+void
+audio_orc_double_to_s32 (gint32 * ORC_RESTRICT d1,
+    const gdouble * ORC_RESTRICT s1, int n)
+{
+  int i;
+  orc_union32 *ORC_RESTRICT ptr0;
+  const orc_union64 *ORC_RESTRICT ptr4;
+  orc_union64 var33;
+#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
+  volatile orc_union64 var34;
+#else
+  orc_union64 var34;
+#endif
+  orc_union32 var35;
+  orc_union64 var36;
+
+  ptr0 = (orc_union32 *) d1;
+  ptr4 = (orc_union64 *) s1;
+
+  /* 1: loadpq */
+  var34.i = ORC_UINT64_C (0x41e0000000000000);  /* 2.14748e+09f */
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadq */
+    var33 = ptr4[i];
+    /* 2: muld */
+    {
+      orc_union64 _src1;
+      orc_union64 _src2;
+      orc_union64 _dest1;
+      _src1.i = ORC_DENORMAL_DOUBLE (var33.i);
+      _src2.i = ORC_DENORMAL_DOUBLE (var34.i);
+      _dest1.f = _src1.f * _src2.f;
+      var36.i = ORC_DENORMAL_DOUBLE (_dest1.i);
+    }
+    /* 3: convdl */
+    {
+      int tmp;
+      tmp = var36.f;
+      if (tmp == 0x80000000 && !(var36.i & ORC_UINT64_C (0x8000000000000000)))
+        tmp = 0x7fffffff;
+      var35.i = tmp;
+    }
+    /* 4: storel */
+    ptr0[i] = var35;
+  }
+
+}
+
+#else
+static void
+_backup_audio_orc_double_to_s32 (OrcExecutor * ORC_RESTRICT ex)
+{
+  int i;
+  int n = ex->n;
+  orc_union32 *ORC_RESTRICT ptr0;
+  const orc_union64 *ORC_RESTRICT ptr4;
+  orc_union64 var33;
+#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
+  volatile orc_union64 var34;
+#else
+  orc_union64 var34;
+#endif
+  orc_union32 var35;
+  orc_union64 var36;
+
+  ptr0 = (orc_union32 *) ex->arrays[0];
+  ptr4 = (orc_union64 *) ex->arrays[4];
+
+  /* 1: loadpq */
+  var34.i = ORC_UINT64_C (0x41e0000000000000);  /* 2.14748e+09f */
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadq */
+    var33 = ptr4[i];
+    /* 2: muld */
+    {
+      orc_union64 _src1;
+      orc_union64 _src2;
+      orc_union64 _dest1;
+      _src1.i = ORC_DENORMAL_DOUBLE (var33.i);
+      _src2.i = ORC_DENORMAL_DOUBLE (var34.i);
+      _dest1.f = _src1.f * _src2.f;
+      var36.i = ORC_DENORMAL_DOUBLE (_dest1.i);
+    }
+    /* 3: convdl */
+    {
+      int tmp;
+      tmp = var36.f;
+      if (tmp == 0x80000000 && !(var36.i & ORC_UINT64_C (0x8000000000000000)))
+        tmp = 0x7fffffff;
+      var35.i = tmp;
+    }
+    /* 4: storel */
+    ptr0[i] = var35;
+  }
+
+}
+
+void
+audio_orc_double_to_s32 (gint32 * ORC_RESTRICT d1,
+    const gdouble * 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, 97, 117, 100, 105, 111, 95, 111, 114, 99, 95, 100, 111, 117,
+        98, 108, 101, 95, 116, 111, 95, 115, 51, 50, 11, 4, 4, 12, 8, 8,
+        15, 8, 0, 0, 0, 0, 0, 0, 224, 65, 20, 8, 214, 32, 4, 16,
+        222, 0, 32, 2, 0,
+      };
+      p = orc_program_new_from_static_bytecode (bc);
+      orc_program_set_backup_function (p, _backup_audio_orc_double_to_s32);
+#else
+      p = orc_program_new ();
+      orc_program_set_name (p, "audio_orc_double_to_s32");
+      orc_program_set_backup_function (p, _backup_audio_orc_double_to_s32);
+      orc_program_add_destination (p, 4, "d1");
+      orc_program_add_source (p, 8, "s1");
+      orc_program_add_constant_int64 (p, 8, 0x41e0000000000000ULL, "c1");
+      orc_program_add_temporary (p, 8, "t1");
+
+      orc_program_append_2 (p, "muld", 0, ORC_VAR_T1, ORC_VAR_S1, ORC_VAR_C1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "convdl", 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
diff --git a/gst-libs/gst/audio/gstaudiopack-dist.h b/gst-libs/gst/audio/gstaudiopack-dist.h
index 0866f31..16b7bb6 100644
--- a/gst-libs/gst/audio/gstaudiopack-dist.h
+++ b/gst-libs/gst/audio/gstaudiopack-dist.h
@@ -81,11 +81,17 @@
 #endif
 
 void audio_orc_unpack_u8 (gint32 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1, int n);
+void audio_orc_unpack_u8_trunc (gint32 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1, int n);
 void audio_orc_unpack_s8 (gint32 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1, int n);
+void audio_orc_unpack_s8_trunc (gint32 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1, int n);
 void audio_orc_unpack_u16 (gint32 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1, int n);
+void audio_orc_unpack_u16_trunc (gint32 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1, int n);
 void audio_orc_unpack_s16 (gint32 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1, int n);
+void audio_orc_unpack_s16_trunc (gint32 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1, int n);
 void audio_orc_unpack_u16_swap (gint32 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1, int n);
+void audio_orc_unpack_u16_swap_trunc (gint32 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1, int n);
 void audio_orc_unpack_s16_swap (gint32 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1, int n);
+void audio_orc_unpack_s16_swap_trunc (gint32 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1, int n);
 void audio_orc_unpack_u24_32 (gint32 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1, int n);
 void audio_orc_unpack_s24_32 (gint32 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1, int n);
 void audio_orc_unpack_u24_32_swap (gint32 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1, int n);
@@ -119,6 +125,11 @@
 void audio_orc_splat_u16 (guint16 * ORC_RESTRICT d1, int p1, int n);
 void audio_orc_splat_u32 (guint32 * ORC_RESTRICT d1, int p1, int n);
 void audio_orc_splat_u64 (guint64 * ORC_RESTRICT d1, int p1, int n);
+void audio_orc_int_bias (gint32 * ORC_RESTRICT d1, const gint32 * ORC_RESTRICT s1, int p1, int p2, int n);
+void audio_orc_int_dither (gint32 * ORC_RESTRICT d1, const gint32 * ORC_RESTRICT s1, const gint32 * ORC_RESTRICT s2, int p1, int n);
+void audio_orc_update_rand (guint32 * ORC_RESTRICT d1, int n);
+void audio_orc_s32_to_double (gdouble * ORC_RESTRICT d1, const gint32 * ORC_RESTRICT s1, int n);
+void audio_orc_double_to_s32 (gint32 * ORC_RESTRICT d1, const gdouble * ORC_RESTRICT s1, int n);
 
 #ifdef __cplusplus
 }
diff --git a/gst-libs/gst/audio/gstaudiopack.orc b/gst-libs/gst/audio/gstaudiopack.orc
index 9945827..c13a688 100644
--- a/gst-libs/gst/audio/gstaudiopack.orc
+++ b/gst-libs/gst/audio/gstaudiopack.orc
@@ -3,53 +3,93 @@
 .dest 4 d1 gint32
 .source 1 s1 guint8
 .const 4 c1 0x80000000
-.const 4 c2 24
-.temp 2 t2
 .temp 4 t3
 
-convubw t2, s1
-convuwl t3, t2
-shll t3, t3, c2
+splatbl t3, s1
 xorl d1, t3, c1
 
+.function audio_orc_unpack_u8_trunc
+.dest 4 d1 gint32
+.source 1 s1 guint8
+.const 4 c1 0x80000000
+.const 4 c2 24
+.temp 4 t3
+
+splatbl t3, s1
+shll t3, t3, c2
+xorl d1, t3, c1
 
 .function audio_orc_unpack_s8
 .dest 4 d1 gint32
 .source 1 s1 guint8
-.const 4 c1 24
+.const 4 c1 0x00808080
 .temp 2 t2
 .temp 4 t3
 
-convubw t2, s1
-convuwl t3, t2
+splatbl t3, s1
+xorl d1, t3, c1
+
+.function audio_orc_unpack_s8_trunc
+.dest 4 d1 gint32
+.source 1 s1 guint8
+.const 4 c1 24
+.temp 4 t3
+
+splatbl t3, s1
 shll d1, t3, c1
 
-
 .function audio_orc_unpack_u16
 .dest 4 d1 gint32
 .source 2 s1 guint8
+.const 4 c1 0x80000000
+.temp 4 t2
+
+mergewl t2, s1, s1
+xorl d1, t2, c1
+
+.function audio_orc_unpack_u16_trunc
+.dest 4 d1 gint32
+.source 2 s1 guint8
 .const 4 c2 16
 .const 4 c1 0x80000000
 .temp 4 t2
 
-convuwl t2, s1
+mergewl t2, s1, s1
 shll t2, t2, c2
 xorl d1, t2, c1
 
-
 .function audio_orc_unpack_s16
 .dest 4 d1 gint32
 .source 2 s1 guint8
+.const 4 c1 0x00008000
+.temp 4 t2
+
+mergewl t2, s1, s1
+xorl d1, t2, c1
+
+.function audio_orc_unpack_s16_trunc
+.dest 4 d1 gint32
+.source 2 s1 guint8
 .const 4 c1 16
 .temp 4 t2
 
 convuwl t2, s1
 shll d1, t2, c1
 
-
 .function audio_orc_unpack_u16_swap
 .dest 4 d1 gint32
 .source 2 s1 guint8
+.const 4 c1 0x80000000
+.temp 2 t1
+.temp 4 t2
+
+swapw t1, s1
+mergewl t2, t1, t1
+xorl d1, t2, c1
+
+.function audio_orc_unpack_u16_swap_trunc
+.dest 4 d1 gint32
+.source 2 s1 guint8
 .const 4 c2 16
 .const 4 c1 0x80000000
 .temp 2 t1
@@ -60,10 +100,17 @@
 shll t2, t2, c2
 xorl d1, t2, c1
 
-
 .function audio_orc_unpack_s16_swap
 .dest 4 d1 gint32
 .source 2 s1 guint8
+.temp 2 t1
+
+swapw t1, s1
+mergewl d1, t1, t1
+
+.function audio_orc_unpack_s16_swap_trunc
+.dest 4 d1 gint32
+.source 2 s1 guint8
 .const 4 c1 16
 .temp 2 t1
 .temp 4 t2
@@ -82,7 +129,6 @@
 shll t1, s1, c2
 xorl d1, t1, c1
 
-
 .function audio_orc_unpack_s24_32
 .dest 4 d1 gint32
 .source 4 s1 guint8
@@ -90,7 +136,6 @@
 
 shll d1, s1, c1
 
-
 .function audio_orc_unpack_u24_32_swap
 .dest 4 d1 gint32
 .source 4 s1 guint8
@@ -171,74 +216,54 @@
 .function audio_orc_pack_u8
 .dest 1 d1 guint8
 .source 4 s1 gint32
-.const 4 c2 24
 .const 4 c1 0x80000000
 .temp 4 t1
 .temp 2 t2
 
 xorl t1, s1, c1
-shrul t1, t1, c2
-convlw t2, t1
-convwb d1, t2
-
+convhlw t2, t1
+convhwb d1, t2
 
 .function audio_orc_pack_s8
 .dest 1 d1 guint8
 .source 4 s1 gint32
-.const 4 c1 24
-.temp 4 t1
 .temp 2 t2
 
-shrsl t1, s1, c1
-convlw t2, t1
-convwb d1, t2
-
+convhlw t2, s1
+convhwb d1, t2
 
 .function audio_orc_pack_u16
 .dest 2 d1 guint8
 .source 4 s1 gint32
-.const 4 c2 16
 .const 4 c1 0x80000000
 .temp 4 t1
 
 xorl t1, s1, c1
-shrul t1, t1, c2
-convlw d1, t1
-
+convhlw d1, t1
 
 .function audio_orc_pack_s16
 .dest 2 d1 guint8
 .source 4 s1 gint32
-.const 4 c1 16
-.temp 4 t1
 
-shrsl t1, s1, c1
-convlw d1, t1
-
+convhlw d1, s1
 
 .function audio_orc_pack_u16_swap
 .dest 2 d1 guint8
 .source 4 s1 gint32
 .const 4 c1 0x80000000
-.const 4 c2 16
 .temp 4 t1
 .temp 2 t2
 
 xorl t1, s1, c1
-shrul t1, t1, c2
-convlw t2, t1
+convhlw t2, t1
 swapw d1, t2
 
-
 .function audio_orc_pack_s16_swap
 .dest 2 d1 guint8
 .source 4 s1 gint32
-.const 4 c1 16
-.temp 4 t1
 .temp 2 t2
 
-shrsl t1, s1, c1
-convlw t2, t1
+convhlw t2, s1
 swapw d1, t2
 
 .function audio_orc_pack_u24_32
@@ -355,3 +380,46 @@
 
 copyq d1, p1
 
+.function audio_orc_int_bias
+.dest 4 d1 gint32
+.source 4 s1 gint32
+.param 4 bias gint32
+.param 4 mask gint32
+.temp 4 t1
+
+addssl t1, s1, bias
+andl d1, t1, mask
+
+.function audio_orc_int_dither
+.dest 4 d1 gint32
+.source 4 s1 gint32
+.source 4 dither gint32
+.param 4 mask gint32
+.temp 4 t1
+
+addssl t1, s1, dither
+andl d1, t1, mask
+
+.function audio_orc_update_rand
+.dest 4 r guint32
+.temp 4 t
+
+mulll t, r, 1103515245
+addl r, t, 12345
+
+.function audio_orc_s32_to_double
+.dest 8 d1 gdouble
+.source 4 s1 gint32
+.temp 8 t1
+
+convld t1, s1
+divd d1, t1, 2147483648.0L
+
+.function audio_orc_double_to_s32
+.dest 4 d1 gint32
+.source 8 s1 gdouble
+.temp 8 t1
+
+muld t1, s1, 2147483648.0L
+convdl d1, t1
+
diff --git a/gst-libs/gst/audio/gstaudioringbuffer.h b/gst-libs/gst/audio/gstaudioringbuffer.h
index b3c87c4..b0e3e9b 100644
--- a/gst-libs/gst/audio/gstaudioringbuffer.h
+++ b/gst-libs/gst/audio/gstaudioringbuffer.h
@@ -333,6 +333,10 @@
 
 void            gst_audio_ring_buffer_may_start       (GstAudioRingBuffer *buf, gboolean allowed);
 
+#ifdef G_DEFINE_AUTOPTR_CLEANUP_FUNC
+G_DEFINE_AUTOPTR_CLEANUP_FUNC(GstAudioRingBuffer, gst_object_unref)
+#endif
+
 G_END_DECLS
 
 #endif /* __GST_AUDIO_RING_BUFFER_H__ */
diff --git a/gst-libs/gst/audio/gstaudiosink.h b/gst-libs/gst/audio/gstaudiosink.h
index 02d5a7e..78b5bae 100644
--- a/gst-libs/gst/audio/gstaudiosink.h
+++ b/gst-libs/gst/audio/gstaudiosink.h
@@ -99,6 +99,10 @@
 
 GType gst_audio_sink_get_type(void);
 
+#ifdef G_DEFINE_AUTOPTR_CLEANUP_FUNC
+G_DEFINE_AUTOPTR_CLEANUP_FUNC(GstAudioSink, gst_object_unref)
+#endif
+
 G_END_DECLS
 
 #endif /* __GST_AUDIO_SINK_H__ */
diff --git a/gst-libs/gst/audio/gstaudiosrc.h b/gst-libs/gst/audio/gstaudiosrc.h
index 89d8af1..db2392a 100644
--- a/gst-libs/gst/audio/gstaudiosrc.h
+++ b/gst-libs/gst/audio/gstaudiosrc.h
@@ -98,6 +98,10 @@
 
 GType gst_audio_src_get_type(void);
 
+#ifdef G_DEFINE_AUTOPTR_CLEANUP_FUNC
+G_DEFINE_AUTOPTR_CLEANUP_FUNC(GstAudioSrc, gst_object_unref)
+#endif
+
 G_END_DECLS
 
 #endif /* __GST_AUDIO_SRC_H__ */
diff --git a/gst-libs/gst/fft/Makefile.am b/gst-libs/gst/fft/Makefile.am
index 09b3d68..3e24aaf 100644
--- a/gst-libs/gst/fft/Makefile.am
+++ b/gst-libs/gst/fft/Makefile.am
@@ -56,7 +56,8 @@
 		GST_PLUGIN_SYSTEM_PATH_1_0="" GST_PLUGIN_PATH_1_0="" GST_REGISTRY_UPDATE=no \
 		$(INTROSPECTION_SCANNER) -v --namespace GstFft \
 		--nsversion=@GST_API_VERSION@ \
-		--strip-prefix=Gst \
+		--identifier-prefix=Gst \
+		--symbol-prefix=gst \
 		--warn-all \
 		--c-include "gst/fft/fft.h" \
 		-I$(top_srcdir)/gst-libs \
diff --git a/gst-libs/gst/fft/Makefile.in b/gst-libs/gst/fft/Makefile.in
index 4b21b2d..a3065c0 100644
--- a/gst-libs/gst/fft/Makefile.in
+++ b/gst-libs/gst/fft/Makefile.in
@@ -1106,7 +1106,8 @@
 @HAVE_INTROSPECTION_TRUE@		GST_PLUGIN_SYSTEM_PATH_1_0="" GST_PLUGIN_PATH_1_0="" GST_REGISTRY_UPDATE=no \
 @HAVE_INTROSPECTION_TRUE@		$(INTROSPECTION_SCANNER) -v --namespace GstFft \
 @HAVE_INTROSPECTION_TRUE@		--nsversion=@GST_API_VERSION@ \
-@HAVE_INTROSPECTION_TRUE@		--strip-prefix=Gst \
+@HAVE_INTROSPECTION_TRUE@		--identifier-prefix=Gst \
+@HAVE_INTROSPECTION_TRUE@		--symbol-prefix=gst \
 @HAVE_INTROSPECTION_TRUE@		--warn-all \
 @HAVE_INTROSPECTION_TRUE@		--c-include "gst/fft/fft.h" \
 @HAVE_INTROSPECTION_TRUE@		-I$(top_srcdir)/gst-libs \
diff --git a/gst-libs/gst/pbutils/Makefile.am b/gst-libs/gst/pbutils/Makefile.am
index 64d5eb0..527b150 100644
--- a/gst-libs/gst/pbutils/Makefile.am
+++ b/gst-libs/gst/pbutils/Makefile.am
@@ -8,7 +8,8 @@
 	encoding-target.h	\
 	install-plugins.h \
 	missing-plugins.h \
-	gstdiscoverer.h
+	gstdiscoverer.h \
+	gstaudiovisualizer.h
 
 # variables used for enum/marshal generation
 glib_enum_headers = $(headers_pbutils)
@@ -29,7 +30,8 @@
 	install-plugins.c \
 	missing-plugins.c \
 	gstdiscoverer.c   \
-	gstdiscoverer-types.c
+	gstdiscoverer-types.c \
+	gstaudiovisualizer.c
 
 nodist_libgstpbutils_@GST_API_VERSION@_la_SOURCES = \
 	pbutils-enumtypes.c
@@ -46,6 +48,7 @@
 libgstpbutils_@GST_API_VERSION@_la_LIBADD = \
   $(top_builddir)/gst-libs/gst/video/libgstvideo-@GST_API_VERSION@.la \
   $(top_builddir)/gst-libs/gst/audio/libgstaudio-@GST_API_VERSION@.la \
+  $(top_builddir)/gst-libs/gst/tag/libgsttag-@GST_API_VERSION@.la \
   $(GST_LIBS)
 libgstpbutils_@GST_API_VERSION@_la_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_CFLAGS)
 libgstpbutils_@GST_API_VERSION@_la_LDFLAGS = $(GST_LIB_LDFLAGS) $(GST_ALL_LDFLAGS) $(GST_LT_LDFLAGS)
@@ -74,7 +77,8 @@
 		GST_PLUGIN_SYSTEM_PATH_1_0="" GST_PLUGIN_PATH_1_0="" GST_REGISTRY_UPDATE=no \
 		$(INTROSPECTION_SCANNER) -v --namespace GstPbutils \
 		--nsversion=@GST_API_VERSION@ \
-		--strip-prefix=Gst \
+		--identifier-prefix=Gst \
+		--symbol-prefix=gst \
 		--warn-all \
 		--c-include "gst/pbutils/pbutils.h" \
 		-I$(top_srcdir)/gst-libs \
diff --git a/gst-libs/gst/pbutils/Makefile.in b/gst-libs/gst/pbutils/Makefile.in
index 72c9fa4..f2769be 100644
--- a/gst-libs/gst/pbutils/Makefile.in
+++ b/gst-libs/gst/pbutils/Makefile.in
@@ -179,6 +179,7 @@
 am__DEPENDENCIES_1 =
 libgstpbutils_@GST_API_VERSION@_la_DEPENDENCIES = $(top_builddir)/gst-libs/gst/video/libgstvideo-@GST_API_VERSION@.la \
 	$(top_builddir)/gst-libs/gst/audio/libgstaudio-@GST_API_VERSION@.la \
+	$(top_builddir)/gst-libs/gst/tag/libgsttag-@GST_API_VERSION@.la \
 	$(am__DEPENDENCIES_1)
 am_libgstpbutils_@GST_API_VERSION@_la_OBJECTS =  \
 	libgstpbutils_@GST_API_VERSION@_la-gstpluginsbaseversion.lo \
@@ -190,7 +191,8 @@
 	libgstpbutils_@GST_API_VERSION@_la-install-plugins.lo \
 	libgstpbutils_@GST_API_VERSION@_la-missing-plugins.lo \
 	libgstpbutils_@GST_API_VERSION@_la-gstdiscoverer.lo \
-	libgstpbutils_@GST_API_VERSION@_la-gstdiscoverer-types.lo
+	libgstpbutils_@GST_API_VERSION@_la-gstdiscoverer-types.lo \
+	libgstpbutils_@GST_API_VERSION@_la-gstaudiovisualizer.lo
 nodist_libgstpbutils_@GST_API_VERSION@_la_OBJECTS =  \
 	libgstpbutils_@GST_API_VERSION@_la-pbutils-enumtypes.lo
 libgstpbutils_@GST_API_VERSION@_la_OBJECTS =  \
@@ -576,7 +578,8 @@
 	encoding-target.h	\
 	install-plugins.h \
 	missing-plugins.h \
-	gstdiscoverer.h
+	gstdiscoverer.h \
+	gstaudiovisualizer.h
 
 
 # variables used for enum/marshal generation
@@ -597,7 +600,8 @@
 	install-plugins.c \
 	missing-plugins.c \
 	gstdiscoverer.c   \
-	gstdiscoverer-types.c
+	gstdiscoverer-types.c \
+	gstaudiovisualizer.c
 
 nodist_libgstpbutils_@GST_API_VERSION@_la_SOURCES = \
 	pbutils-enumtypes.c
@@ -616,6 +620,7 @@
 libgstpbutils_@GST_API_VERSION@_la_LIBADD = \
   $(top_builddir)/gst-libs/gst/video/libgstvideo-@GST_API_VERSION@.la \
   $(top_builddir)/gst-libs/gst/audio/libgstaudio-@GST_API_VERSION@.la \
+  $(top_builddir)/gst-libs/gst/tag/libgsttag-@GST_API_VERSION@.la \
   $(GST_LIBS)
 
 libgstpbutils_@GST_API_VERSION@_la_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_CFLAGS)
@@ -731,6 +736,7 @@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstpbutils_@GST_API_VERSION@_la-descriptions.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstpbutils_@GST_API_VERSION@_la-encoding-profile.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstpbutils_@GST_API_VERSION@_la-encoding-target.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstpbutils_@GST_API_VERSION@_la-gstaudiovisualizer.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstpbutils_@GST_API_VERSION@_la-gstdiscoverer-types.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstpbutils_@GST_API_VERSION@_la-gstdiscoverer.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstpbutils_@GST_API_VERSION@_la-gstpluginsbaseversion.Plo@am__quote@
@@ -833,6 +839,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) $(libgstpbutils_@GST_API_VERSION@_la_CFLAGS) $(CFLAGS) -c -o libgstpbutils_@GST_API_VERSION@_la-gstdiscoverer-types.lo `test -f 'gstdiscoverer-types.c' || echo '$(srcdir)/'`gstdiscoverer-types.c
 
+libgstpbutils_@GST_API_VERSION@_la-gstaudiovisualizer.lo: gstaudiovisualizer.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) $(libgstpbutils_@GST_API_VERSION@_la_CFLAGS) $(CFLAGS) -MT libgstpbutils_@GST_API_VERSION@_la-gstaudiovisualizer.lo -MD -MP -MF $(DEPDIR)/libgstpbutils_@GST_API_VERSION@_la-gstaudiovisualizer.Tpo -c -o libgstpbutils_@GST_API_VERSION@_la-gstaudiovisualizer.lo `test -f 'gstaudiovisualizer.c' || echo '$(srcdir)/'`gstaudiovisualizer.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstpbutils_@GST_API_VERSION@_la-gstaudiovisualizer.Tpo $(DEPDIR)/libgstpbutils_@GST_API_VERSION@_la-gstaudiovisualizer.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='gstaudiovisualizer.c' object='libgstpbutils_@GST_API_VERSION@_la-gstaudiovisualizer.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstpbutils_@GST_API_VERSION@_la_CFLAGS) $(CFLAGS) -c -o libgstpbutils_@GST_API_VERSION@_la-gstaudiovisualizer.lo `test -f 'gstaudiovisualizer.c' || echo '$(srcdir)/'`gstaudiovisualizer.c
+
 libgstpbutils_@GST_API_VERSION@_la-pbutils-enumtypes.lo: pbutils-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) $(libgstpbutils_@GST_API_VERSION@_la_CFLAGS) $(CFLAGS) -MT libgstpbutils_@GST_API_VERSION@_la-pbutils-enumtypes.lo -MD -MP -MF $(DEPDIR)/libgstpbutils_@GST_API_VERSION@_la-pbutils-enumtypes.Tpo -c -o libgstpbutils_@GST_API_VERSION@_la-pbutils-enumtypes.lo `test -f 'pbutils-enumtypes.c' || echo '$(srcdir)/'`pbutils-enumtypes.c
 @am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstpbutils_@GST_API_VERSION@_la-pbutils-enumtypes.Tpo $(DEPDIR)/libgstpbutils_@GST_API_VERSION@_la-pbutils-enumtypes.Plo
@@ -1199,7 +1212,8 @@
 @HAVE_INTROSPECTION_TRUE@		GST_PLUGIN_SYSTEM_PATH_1_0="" GST_PLUGIN_PATH_1_0="" GST_REGISTRY_UPDATE=no \
 @HAVE_INTROSPECTION_TRUE@		$(INTROSPECTION_SCANNER) -v --namespace GstPbutils \
 @HAVE_INTROSPECTION_TRUE@		--nsversion=@GST_API_VERSION@ \
-@HAVE_INTROSPECTION_TRUE@		--strip-prefix=Gst \
+@HAVE_INTROSPECTION_TRUE@		--identifier-prefix=Gst \
+@HAVE_INTROSPECTION_TRUE@		--symbol-prefix=gst \
 @HAVE_INTROSPECTION_TRUE@		--warn-all \
 @HAVE_INTROSPECTION_TRUE@		--c-include "gst/pbutils/pbutils.h" \
 @HAVE_INTROSPECTION_TRUE@		-I$(top_srcdir)/gst-libs \
diff --git a/gst-libs/gst/pbutils/codec-utils.c b/gst-libs/gst/pbutils/codec-utils.c
index 8d98481..2c8c5a9 100644
--- a/gst-libs/gst/pbutils/codec-utils.c
+++ b/gst-libs/gst/pbutils/codec-utils.c
@@ -4,6 +4,7 @@
  *               2010 Collabora Multimedia
  *               2010 Nokia Corporation
  *               2013 Intel Corporation
+ *               2015 Sebastian Dröge <sebastian@centricular.com>
  *
  * This library is free software; you can redistribute it and/or
  * modify it under the terms of the GNU Library General Public
@@ -38,6 +39,8 @@
 #endif
 
 #include "pbutils.h"
+#include <gst/base/base.h>
+#include <gst/tag/tag.h>
 
 #include <string.h>
 
@@ -1100,3 +1103,498 @@
 
   return (profile != NULL && level != NULL);
 }
+
+/**
+ * gst_codec_utils_opus_parse_caps:
+ * @caps: the #GstCaps to which the level and profile are to be added
+ * @rate: the sample rate
+ * @channels: the number of channels
+ * @channel_mapping_family: the channel mapping family
+ * @stream_count: the number of independent streams
+ * @coupled_count: the number of stereo streams
+ * @channel_mapping: the mapping between the streams
+ *
+ * Parses Opus caps and fills the different fields with defaults if possible.
+ *
+ * Returns: %TRUE if parsing was successful, %FALSE otherwise.
+ *
+ * Since: 1.8
+ */
+gboolean
+gst_codec_utils_opus_parse_caps (GstCaps * caps,
+    guint32 * rate,
+    guint8 * channels,
+    guint8 * channel_mapping_family,
+    guint8 * stream_count, guint8 * coupled_count, guint8 channel_mapping[256])
+{
+  GstStructure *s;
+  gint c, f, sc, cc;
+  const GValue *va, *v;
+
+  g_return_val_if_fail (caps != NULL, FALSE);
+  g_return_val_if_fail (gst_caps_is_fixed (caps), FALSE);
+  g_return_val_if_fail (!gst_caps_is_empty (caps), FALSE);
+
+  s = gst_caps_get_structure (caps, 0);
+
+  g_return_val_if_fail (gst_structure_has_name (s, "audio/x-opus"), FALSE);
+  g_return_val_if_fail (gst_structure_has_field_typed (s,
+          "channel-mapping-family", G_TYPE_INT), FALSE);
+
+  if (rate) {
+    gint r;
+
+    if (gst_structure_get_int (s, "rate", &r))
+      *rate = r;
+    else
+      *rate = 48000;
+  }
+
+  gst_structure_get_int (s, "channel-mapping-family", &f);
+  if (channel_mapping_family)
+    *channel_mapping_family = f;
+
+  if (!gst_structure_get_int (s, "channels", &c)) {
+    if (f == 0)
+      c = 2;
+    else
+      return FALSE;
+  }
+
+  if (channels)
+    *channels = c;
+
+  /* RTP mapping */
+  if (f == 0) {
+    if (c > 2)
+      return FALSE;
+
+    if (stream_count)
+      *stream_count = 1;
+    if (coupled_count)
+      *coupled_count = c == 2 ? 1 : 0;
+
+    if (channel_mapping) {
+      channel_mapping[0] = 0;
+      channel_mapping[1] = 1;
+    }
+
+    return TRUE;
+  }
+
+  if (!gst_structure_get_int (s, "stream-count", &sc))
+    return FALSE;
+  if (stream_count)
+    *stream_count = sc;
+
+  if (!gst_structure_get_int (s, "coupled-count", &cc))
+    return FALSE;
+  if (coupled_count)
+    *coupled_count = cc;
+
+  va = gst_structure_get_value (s, "channel-mapping");
+  if (!va || !G_VALUE_HOLDS (va, GST_TYPE_ARRAY))
+    return FALSE;
+
+  if (gst_value_array_get_size (va) != c)
+    return FALSE;
+
+  if (channel_mapping) {
+    gint i;
+
+    for (i = 0; i < c; i++) {
+      gint cm;
+
+      v = gst_value_array_get_value (va, i);
+
+      if (!G_VALUE_HOLDS (v, G_TYPE_INT))
+        return FALSE;
+
+      cm = g_value_get_int (v);
+      if (cm < 0 || cm > 255)
+        return FALSE;
+
+      channel_mapping[i] = cm;
+    }
+  }
+
+  return TRUE;
+}
+
+/**
+ * gst_codec_utils_opus_create_caps:
+ * @rate: the sample rate
+ * @channels: the number of channels
+ * @channel_mapping_family: the channel mapping family
+ * @stream_count: the number of independent streams
+ * @coupled_count: the number of stereo streams
+ * @channel_mapping: (allow-none): the mapping between the streams
+ *
+ * Creates Opus caps from the given parameters.
+ *
+ * Returns: The #GstCaps.
+ *
+ * Since: 1.8
+ */
+GstCaps *
+gst_codec_utils_opus_create_caps (guint32 rate,
+    guint8 channels,
+    guint8 channel_mapping_family,
+    guint8 stream_count, guint8 coupled_count, const guint8 * channel_mapping)
+{
+  GstCaps *caps;
+  GValue va = G_VALUE_INIT;
+  GValue v = G_VALUE_INIT;
+  gint i;
+
+  if (rate == 0)
+    rate = 48000;
+
+  if (channel_mapping_family == 0) {
+    g_return_val_if_fail (channels <= 2, NULL);
+    if (channels == 0)
+      channels = 2;
+
+    g_return_val_if_fail (stream_count == 0 || stream_count == 1, NULL);
+    if (stream_count == 0)
+      stream_count = 1;
+
+    g_return_val_if_fail (coupled_count == 0 || coupled_count == 1, NULL);
+    if (coupled_count == 0)
+      coupled_count = channels == 2 ? 1 : 0;
+
+    return gst_caps_new_simple ("audio/x-opus",
+        "rate", G_TYPE_INT, rate,
+        "channels", G_TYPE_INT, channels,
+        "channel-mapping-family", G_TYPE_INT, channel_mapping_family,
+        "stream-count", G_TYPE_INT, stream_count,
+        "coupled-count", G_TYPE_INT, coupled_count, NULL);
+  }
+
+  g_return_val_if_fail (channels > 0, NULL);
+  g_return_val_if_fail (stream_count > 0, NULL);
+  g_return_val_if_fail (coupled_count <= stream_count, NULL);
+  g_return_val_if_fail (channel_mapping != NULL, NULL);
+
+  caps = gst_caps_new_simple ("audio/x-opus",
+      "rate", G_TYPE_INT, rate,
+      "channels", G_TYPE_INT, channels,
+      "channel-mapping-family", G_TYPE_INT, channel_mapping_family,
+      "stream-count", G_TYPE_INT, stream_count,
+      "coupled-count", G_TYPE_INT, coupled_count, NULL);
+
+  g_value_init (&va, GST_TYPE_ARRAY);
+  g_value_init (&v, G_TYPE_INT);
+  for (i = 0; i < channels; i++) {
+    g_value_set_int (&v, channel_mapping[i]);
+    gst_value_array_append_value (&va, &v);
+  }
+  gst_structure_set_value (gst_caps_get_structure (caps, 0), "channel-mapping",
+      &va);
+  g_value_unset (&va);
+  g_value_unset (&v);
+
+  return caps;
+}
+
+/*
+ * (really really) FIXME: move into core (dixit tpm)
+ */
+/*
+ * _gst_caps_set_buffer_array:
+ * @caps: (transfer full): a #GstCaps
+ * @field: field in caps to set
+ * @buf: header buffers
+ *
+ * Adds given buffers to an array of buffers set as the given @field
+ * on the given @caps.  List of buffer arguments must be NULL-terminated.
+ *
+ * Returns: (transfer full): input caps with a streamheader field added, or NULL
+ *     if some error occurred
+ */
+static GstCaps *
+_gst_caps_set_buffer_array (GstCaps * caps, const gchar * field,
+    GstBuffer * buf, ...)
+{
+  GstStructure *structure = NULL;
+  va_list va;
+  GValue array = { 0 };
+  GValue value = { 0 };
+
+  g_return_val_if_fail (caps != NULL, NULL);
+  g_return_val_if_fail (gst_caps_is_fixed (caps), NULL);
+  g_return_val_if_fail (field != NULL, NULL);
+
+  caps = gst_caps_make_writable (caps);
+  structure = gst_caps_get_structure (caps, 0);
+
+  g_value_init (&array, GST_TYPE_ARRAY);
+
+  va_start (va, buf);
+  /* put buffers in a fixed list */
+  while (buf) {
+    g_assert (gst_buffer_is_writable (buf));
+
+    /* mark buffer */
+    GST_BUFFER_FLAG_SET (buf, GST_BUFFER_FLAG_HEADER);
+
+    g_value_init (&value, GST_TYPE_BUFFER);
+    buf = gst_buffer_copy (buf);
+    GST_BUFFER_FLAG_SET (buf, GST_BUFFER_FLAG_HEADER);
+    gst_value_set_buffer (&value, buf);
+    gst_buffer_unref (buf);
+    gst_value_array_append_value (&array, &value);
+    g_value_unset (&value);
+
+    buf = va_arg (va, GstBuffer *);
+  }
+  va_end (va);
+
+  gst_structure_set_value (structure, field, &array);
+  g_value_unset (&array);
+
+  return caps;
+}
+
+/**
+ * gst_codec_utils_opus_create_caps_from_header:
+ * @header: OpusHead header
+ * @comments: (allow-none): Comment header or NULL
+ *
+ * Creates Opus caps from the given OpusHead @header and comment header
+ * @comments.
+ *
+ * Returns: The #GstCaps.
+ *
+ * Since: 1.8
+ */
+GstCaps *
+gst_codec_utils_opus_create_caps_from_header (GstBuffer * header,
+    GstBuffer * comments)
+{
+  GstCaps *caps;
+  guint32 rate;
+  guint8 channels;
+  guint8 channel_mapping_family;
+  guint8 stream_count;
+  guint8 coupled_count;
+  guint8 channel_mapping[256];
+  GstBuffer *dummy_comments = NULL;
+
+  g_return_val_if_fail (GST_IS_BUFFER (header), NULL);
+  g_return_val_if_fail (comments == NULL || GST_IS_BUFFER (comments), NULL);
+
+  if (!gst_codec_utils_opus_parse_header (header, &rate, &channels,
+          &channel_mapping_family, &stream_count, &coupled_count,
+          channel_mapping, NULL, NULL))
+    return NULL;
+
+  caps =
+      gst_codec_utils_opus_create_caps (rate, channels, channel_mapping_family,
+      stream_count, coupled_count, channel_mapping);
+
+  if (!comments) {
+    GstTagList *tags = gst_tag_list_new_empty ();
+    dummy_comments =
+        gst_tag_list_to_vorbiscomment_buffer (tags, (const guint8 *) "OpusTags",
+        8, NULL);
+    gst_tag_list_unref (tags);
+  }
+  _gst_caps_set_buffer_array (caps, "streamheader", header,
+      comments ? comments : dummy_comments, NULL);
+
+  if (dummy_comments)
+    gst_buffer_unref (dummy_comments);
+
+  return caps;
+}
+
+/**
+ * gst_codec_utils_opus_create_header:
+ * @rate: the sample rate
+ * @channels: the number of channels
+ * @channel_mapping_family: the channel mapping family
+ * @stream_count: the number of independent streams
+ * @coupled_count: the number of stereo streams
+ * @channel_mapping: (allow-none): the mapping between the streams
+ * @pre_skip: Pre-skip in 48kHz samples or 0
+ * @output_gain: Output gain or 0
+ *
+ * Creates OpusHead header from the given parameters.
+ *
+ * Returns: The #GstBuffer containing the OpusHead.
+ *
+ * Since: 1.8
+ */
+GstBuffer *
+gst_codec_utils_opus_create_header (guint32 rate,
+    guint8 channels,
+    guint8 channel_mapping_family,
+    guint8 stream_count,
+    guint8 coupled_count,
+    const guint8 * channel_mapping, guint16 pre_skip, gint16 output_gain)
+{
+  GstBuffer *buffer;
+  GstByteWriter bw;
+  gboolean hdl = TRUE;
+
+  if (rate == 0)
+    rate = 48000;
+
+  if (channel_mapping_family == 0) {
+    g_return_val_if_fail (channels <= 2, NULL);
+    if (channels == 0)
+      channels = 2;
+
+    g_return_val_if_fail (stream_count == 0 || stream_count == 1, NULL);
+    if (stream_count == 0)
+      stream_count = 1;
+
+    g_return_val_if_fail (coupled_count == 0 || coupled_count == 1, NULL);
+    if (coupled_count == 0)
+      coupled_count = channels == 2 ? 1 : 0;
+
+    channel_mapping = NULL;
+  } else {
+    g_return_val_if_fail (channels > 0, NULL);
+    g_return_val_if_fail (stream_count > 0, NULL);
+    g_return_val_if_fail (coupled_count <= stream_count, NULL);
+    g_return_val_if_fail (channel_mapping != NULL, NULL);
+  }
+
+  gst_byte_writer_init (&bw);
+  /* See http://wiki.xiph.org/OggOpus */
+  hdl &= gst_byte_writer_put_data (&bw, (const guint8 *) "OpusHead", 8);
+  hdl &= gst_byte_writer_put_uint8 (&bw, 0x01); /* version number */
+  hdl &= gst_byte_writer_put_uint8 (&bw, channels);
+  hdl &= gst_byte_writer_put_uint16_le (&bw, pre_skip);
+  hdl &= gst_byte_writer_put_uint32_le (&bw, rate);
+  hdl &= gst_byte_writer_put_uint16_le (&bw, output_gain);
+  hdl &= gst_byte_writer_put_uint8 (&bw, channel_mapping_family);
+  if (channel_mapping_family > 0) {
+    hdl &= gst_byte_writer_put_uint8 (&bw, stream_count);
+    hdl &= gst_byte_writer_put_uint8 (&bw, coupled_count);
+    hdl &= gst_byte_writer_put_data (&bw, channel_mapping, channels);
+  }
+
+  if (!hdl) {
+    GST_WARNING ("Error creating header");
+    return NULL;
+  }
+
+  buffer = gst_byte_writer_reset_and_get_buffer (&bw);
+  GST_BUFFER_OFFSET (buffer) = 0;
+  GST_BUFFER_OFFSET_END (buffer) = 0;
+
+  return buffer;
+}
+
+/**
+ * gst_codec_utils_opus_parse_header:
+ * @header: the OpusHead #GstBuffer
+ * @rate: the sample rate
+ * @channels: the number of channels
+ * @channel_mapping_family: the channel mapping family
+ * @stream_count: the number of independent streams
+ * @coupled_count: the number of stereo streams
+ * @channel_mapping: the mapping between the streams
+ * @pre_skip: Pre-skip in 48kHz samples or 0
+ * @output_gain: Output gain or 0
+ *
+ * Parses the OpusHead header.
+ *
+ * Returns: %TRUE if parsing was successful, %FALSE otherwise.
+ *
+ * Since: 1.8
+ */
+gboolean
+gst_codec_utils_opus_parse_header (GstBuffer * header,
+    guint32 * rate,
+    guint8 * channels,
+    guint8 * channel_mapping_family,
+    guint8 * stream_count,
+    guint8 * coupled_count,
+    guint8 channel_mapping[256], guint16 * pre_skip, gint16 * output_gain)
+{
+  GstByteReader br;
+  GstMapInfo map;
+  gboolean ret = TRUE;
+  guint8 c, f, version;
+
+  g_return_val_if_fail (GST_IS_BUFFER (header), FALSE);
+  g_return_val_if_fail (gst_buffer_get_size (header) >= 19, FALSE);
+
+  if (!gst_buffer_map (header, &map, GST_MAP_READ))
+    return FALSE;
+  gst_byte_reader_init (&br, map.data, map.size);
+  /* See http://wiki.xiph.org/OggOpus */
+  if (memcmp (gst_byte_reader_get_data_unchecked (&br, 8), "OpusHead", 8) != 0) {
+    ret = FALSE;
+    goto done;
+  }
+  version = gst_byte_reader_get_uint8_unchecked (&br);
+  if (version == 0x00)
+    GST_ERROR ("Opus Header version is wrong, should be 0x01 and not 0x00");
+  else if (version != 0x01) {
+    ret = FALSE;
+    goto done;
+  }
+
+  c = gst_byte_reader_get_uint8_unchecked (&br);
+  if (channels)
+    *channels = c;
+
+  if (pre_skip)
+    *pre_skip = gst_byte_reader_get_uint16_le_unchecked (&br);
+  else
+    gst_byte_reader_skip_unchecked (&br, 2);
+
+  if (rate)
+    *rate = gst_byte_reader_get_uint32_le_unchecked (&br);
+  else
+    gst_byte_reader_skip_unchecked (&br, 4);
+
+  if (output_gain)
+    *output_gain = gst_byte_reader_get_uint16_le_unchecked (&br);
+  else
+    gst_byte_reader_skip_unchecked (&br, 2);
+
+  f = gst_byte_reader_get_uint8_unchecked (&br);
+  if (channel_mapping_family)
+    *channel_mapping_family = f;
+  if (f == 0 && c <= 2) {
+    if (stream_count)
+      *stream_count = 1;
+    if (coupled_count)
+      *coupled_count = c == 2 ? 1 : 0;
+    if (channel_mapping) {
+      channel_mapping[0] = 0;
+      channel_mapping[1] = 1;
+    }
+
+    goto done;
+  }
+
+  if (gst_byte_reader_get_remaining (&br) < 2 + c) {
+    ret = FALSE;
+    goto done;
+  }
+
+  if (stream_count)
+    *stream_count = gst_byte_reader_get_uint8_unchecked (&br);
+  else
+    gst_byte_reader_skip_unchecked (&br, 1);
+
+  if (coupled_count)
+    *coupled_count = gst_byte_reader_get_uint8_unchecked (&br);
+  else
+    gst_byte_reader_skip_unchecked (&br, 1);
+
+  if (channel_mapping)
+    memcpy (channel_mapping, gst_byte_reader_get_data_unchecked (&br, c), c);
+
+done:
+  gst_buffer_unmap (header, &map);
+
+  return ret;
+}
diff --git a/gst-libs/gst/pbutils/codec-utils.h b/gst-libs/gst/pbutils/codec-utils.h
index 0ef5bbd..e1def83 100644
--- a/gst-libs/gst/pbutils/codec-utils.h
+++ b/gst-libs/gst/pbutils/codec-utils.h
@@ -77,6 +77,43 @@
                                                                      const guint8 * vis_obj_seq,
                                                                      guint          len);
 
+/* Opus */
+gboolean      gst_codec_utils_opus_parse_caps (GstCaps   * caps,
+                                               guint32   * rate,
+                                               guint8    * channels,
+                                               guint8    * channel_mapping_family,
+                                               guint8    * stream_count,
+                                               guint8    * coupled_count,
+                                               guint8      channel_mapping[256]);
+
+GstCaps *     gst_codec_utils_opus_create_caps (guint32        rate,
+                                                guint8         channels,
+                                                guint8         channel_mapping_family,
+                                                guint8         stream_count,
+                                                guint8         coupled_count,
+                                                const guint8 * channel_mapping);
+
+GstCaps *    gst_codec_utils_opus_create_caps_from_header (GstBuffer * header, GstBuffer * comments);
+
+GstBuffer *  gst_codec_utils_opus_create_header (guint32        rate,
+                                                 guint8         channels,
+                                                 guint8         channel_mapping_family,
+                                                 guint8         stream_count,
+                                                 guint8         coupled_count,
+                                                 const guint8 * channel_mapping,
+                                                 guint16        pre_skip,
+                                                 gint16         output_gain);
+
+gboolean  gst_codec_utils_opus_parse_header (GstBuffer * header,
+                                             guint32   * rate,
+                                             guint8    * channels,
+                                             guint8    * channel_mapping_family,
+                                             guint8    * stream_count,
+                                             guint8    * coupled_count,
+                                             guint8      channel_mapping[256],
+                                             guint16   * pre_skip,
+                                             gint16    * output_gain);
+
 G_END_DECLS
 
 #endif /* __GST_PB_UTILS_CODEC_UTILS_H__ */
diff --git a/gst-libs/gst/pbutils/descriptions.c b/gst-libs/gst/pbutils/descriptions.c
index 10c6c63..83aa413 100644
--- a/gst-libs/gst/pbutils/descriptions.c
+++ b/gst-libs/gst/pbutils/descriptions.c
@@ -289,6 +289,7 @@
   {"subtitle/x-kate", N_("Kate subtitle format"), FLAG_SUB, ""},
   {"subpicture/x-dvb", "DVB subtitles", FLAG_SUB, ""},
   {"subpicture/x-pgs", "PGS subtitles", FLAG_SUB, ""},
+  {"subpicture/x-xsub", "XSUB subtitles", FLAG_SUB, ""},
 
   /* non-audio/video/container formats */
   {"hdv/aux-v", "HDV AUX-V", 0, ""},
diff --git a/gst-libs/gst/pbutils/encoding-profile.c b/gst-libs/gst/pbutils/encoding-profile.c
index c1f502e..347ced4 100644
--- a/gst-libs/gst/pbutils/encoding-profile.c
+++ b/gst-libs/gst/pbutils/encoding-profile.c
@@ -49,6 +49,90 @@
  * to) file using the #GstEncodingTarget API.
  * </para>
  * </refsect2>
+ *
+ * <refsect2 id="gst-validate-transcoding--encoding-profile">
+ *    <title>The encoding profile serialization format</title>
+ *    <para>This is the serialization format of a <link linkend="GstEncodingProfile"><type>GstEncodingProfile</type></link>.</para>
+ *    <para>
+ *      Internally the transcoding application uses <link linkend="GstEncodeBin"><type>GstEncodeBin</type></link>. <command>gst-validate-transcoding-&GST_API_VERSION;</command> uses its own
+ *      serialization format to describe the <link linkend="GstEncodeBin--profile"><type>GstEncodeBin.profile</type></link>
+ *     property of the encodebin.
+ *    </para>
+ *
+ *    <para>
+ *        The simplest serialized profile looks like:
+ *    </para>
+ *    <informalexample>
+ *      <programlisting>muxer_source_caps:videoencoder_source_caps:audioencoder_source_caps</programlisting>
+ *    </informalexample>
+ *
+ *     <para>
+ *         For example to encode a stream into a WebM container, with an OGG audio stream and a VP8 video stream,
+ *         the serialized <link linkend="GstEncodingProfile"><type>GstEncodingProfile</type></link> will look like:
+ *     </para>
+ *     <informalexample>
+ *       <programlisting>video/webm:video/x-vp8:audio/x-vorbis</programlisting>
+ *     </informalexample>
+ *
+ *    <para>
+ *        You can also set the preset name of the encoding profile using the caps+preset_name syntax as in:
+ *    </para>
+ *    <informalexample>
+ *      <programlisting>video/webm:video/x-vp8+youtube-preset:audio/x-vorbis</programlisting>
+ *    </informalexample>
+ *
+ *    <para>
+ *        Moreover, you can set the <link linkend="gst-encoding-profile-set-presence">presence</link> property of an
+ *        encoding profile using the <code>|presence</code> syntax as in:
+ *    </para>
+ *    <informalexample>
+ *       <programlisting>video/webm:video/x-vp8|1:audio/x-vorbis</programlisting>
+ *    </informalexample>
+ *
+ *    <para>
+ *      This field allows you to specify how many times maximum a <link linkend="GstEncodingProfile"><type>GstEncodingProfile</type></link> can be used inside an encodebin.
+ *    </para>
+ *    <para>
+ *      You can also use the <code>restriction_caps->encoded_format_caps</code> syntax to specify the
+ *      <link linked="gst-encoding-profile-get-restriction">restriction caps</link>
+ *      to be set on a <link linkend="GstEncodingProfile"><type>GstEncodingProfile</type></link>. It corresponds to the
+ *      restriction <link linkend="GstCaps"><type>GstCaps</type></link> to apply before
+ *      the encoder that will be used in the profile. The fields present in restriction
+ *      caps are properties of the raw stream (that is, before encoding), such as height
+ *      and width for video and depth and sampling rate for audio. This property does not
+ *      make sense for muxers.
+ *    </para>
+ *    <para>
+ *        To force a video stream to be encoded with a Full HD resolution (using WebM as the container format,
+ *        VP8 as the video codec and Vorbis as the audio codec), you should use:
+ *    </para>
+ *    <informalexample>
+ *      <programlisting>video/webm:video/x-raw,width=1920,height=1080->video/x-vp8:audio/x-vorbis</programlisting>
+ *    </informalexample>
+ *  <refsect3>
+ *    <title>Some serialized encoding formats examples:</title>
+ *    <para>
+ *      MP3 audio and H264 in MP4:
+ *    </para>
+ *    <informalexample>
+ *      <programlisting>video/quicktime,variant=iso:video/x-h264:audio/mpeg,mpegversion=1,layer=3</programlisting>
+ *    </informalexample>
+ *
+ *    <para>
+ *      Vorbis and theora in OGG:
+ *    </para>
+ *    <informalexample>
+ *      <programlisting>application/ogg:video/x-theora:audio/x-vorbis</programlisting>
+ *    </informalexample>
+ *
+ *     <para>
+ *      AC3 and H264 in MPEG-TS:
+ *    </para>
+ *    <informalexample>
+ *      <programlisting>video/mpegts:video/x-h264:audio/x-ac3</programlisting>
+ *    </informalexample>
+ *  </refsect3>
+ * </refsect2>
  * <refsect2>
  * <title>Example: Creating a profile</title>
  * <para>
@@ -292,18 +376,14 @@
 gst_encoding_profile_finalize (GObject * object)
 {
   GstEncodingProfile *prof = (GstEncodingProfile *) object;
-  if (prof->name)
-    g_free (prof->name);
+  g_free (prof->name);
   if (prof->format)
     gst_caps_unref (prof->format);
-  if (prof->preset)
-    g_free (prof->preset);
-  if (prof->description)
-    g_free (prof->description);
+  g_free (prof->preset);
+  g_free (prof->description);
   if (prof->restriction)
     gst_caps_unref (prof->restriction);
-  if (prof->preset_name)
-    g_free (prof->preset_name);
+  g_free (prof->preset_name);
 }
 
 static void
@@ -443,8 +523,7 @@
 void
 gst_encoding_profile_set_name (GstEncodingProfile * profile, const gchar * name)
 {
-  if (profile->name)
-    g_free (profile->name);
+  g_free (profile->name);
   profile->name = g_strdup (name);
 }
 
@@ -460,8 +539,7 @@
 gst_encoding_profile_set_description (GstEncodingProfile * profile,
     const gchar * description)
 {
-  if (profile->description)
-    g_free (profile->description);
+  g_free (profile->description);
   profile->description = g_strdup (description);
 }
 
@@ -522,8 +600,7 @@
 gst_encoding_profile_set_preset (GstEncodingProfile * profile,
     const gchar * preset)
 {
-  if (profile->preset)
-    g_free (profile->preset);
+  g_free (profile->preset);
   profile->preset = g_strdup (preset);
 }
 
@@ -538,8 +615,7 @@
 gst_encoding_profile_set_preset_name (GstEncodingProfile * profile,
     const gchar * preset_name)
 {
-  if (profile->preset_name)
-    g_free (profile->preset_name);
+  g_free (profile->preset_name);
   profile->preset_name = g_strdup (preset_name);
 }
 
@@ -1214,7 +1290,8 @@
 /**
  * gst_encoding_profile_find:
  * @targetname: (transfer none): The name of the target
- * @profilename: (transfer none): The name of the profile
+ * @profilename: (transfer none): (allow-none): The name of the profile, if %NULL
+ * provided, it will default to the encoding profile called `default`.
  * @category: (transfer none) (allow-none): The target category. Can be %NULL
  *
  * Find the #GstEncodingProfile with the specified name and category.
@@ -1229,13 +1306,12 @@
   GstEncodingTarget *target;
 
   g_return_val_if_fail (targetname != NULL, NULL);
-  g_return_val_if_fail (profilename != NULL, NULL);
 
-  /* FIXME : how do we handle profiles named the same in several
-   * categories but of which only one has the required profile ? */
   target = gst_encoding_target_load (targetname, category, NULL);
   if (target) {
-    res = gst_encoding_target_get_profile (target, profilename);
+    res =
+        gst_encoding_target_get_profile (target,
+        profilename ? profilename : "default");
     gst_encoding_target_unref (target);
   }
 
@@ -1247,19 +1323,147 @@
 {
   GstEncodingProfile *res;
   gchar **split;
+  gint split_length;
 
   /* Splitup */
-  split = g_strsplit (pname, "/", 2);
-  if (g_strv_length (split) != 2)
+  split = g_strsplit (pname, "/", 3);
+  split_length = g_strv_length (split);
+  if (split_length != 2 && split_length != 3)
     return NULL;
 
-  res = gst_encoding_profile_find (split[0], split[1], NULL);
+  res = gst_encoding_profile_find (split[0], split[1],
+      split_length == 3 ? split[2] : NULL);
 
   g_strfreev (split);
 
   return res;
 }
 
+static GstEncodingProfile *
+parse_encoding_profile (const gchar * value)
+{
+  GstCaps *caps;
+  GstEncodingProfile *res;
+  char *preset_name = NULL;
+  gchar **restriction_format, **preset_v;
+
+  guint i, presence = 0;
+  GstCaps *restrictioncaps = NULL;
+  gchar **strpresence_v, **strcaps_v = g_strsplit (value, ":", 0);
+
+  if (strcaps_v[0] && *strcaps_v[0]) {
+    caps = gst_caps_from_string (strcaps_v[0]);
+    if (caps == NULL) {
+      GST_ERROR ("Could not parse caps %s", strcaps_v[0]);
+      return NULL;
+    }
+    res =
+        GST_ENCODING_PROFILE (gst_encoding_container_profile_new
+        ("User profile", "User profile", caps, NULL));
+    gst_caps_unref (caps);
+  } else {
+    res = NULL;
+  }
+
+  for (i = 1; strcaps_v[i] && *strcaps_v[i]; i++) {
+    GstEncodingProfile *profile = NULL;
+    gchar *strcaps, *strpresence;
+
+    restriction_format = g_strsplit (strcaps_v[i], "->", 0);
+    if (restriction_format[1]) {
+      restrictioncaps = gst_caps_from_string (restriction_format[0]);
+      strcaps = g_strdup (restriction_format[1]);
+    } else {
+      restrictioncaps = NULL;
+      strcaps = g_strdup (restriction_format[0]);
+    }
+    g_strfreev (restriction_format);
+
+    preset_v = g_strsplit (strcaps, "+", 0);
+    if (preset_v[1]) {
+      strpresence = preset_v[1];
+      g_free (strcaps);
+      strcaps = g_strdup (preset_v[0]);
+    } else {
+      strpresence = preset_v[0];
+    }
+
+    strpresence_v = g_strsplit (strpresence, "|", 0);
+    if (strpresence_v[1]) {     /* We have a presence */
+      gchar *endptr;
+
+      if (preset_v[1]) {        /* We have preset and presence */
+        preset_name = g_strdup (strpresence_v[0]);
+      } else {                  /* We have a presence but no preset */
+        g_free (strcaps);
+        strcaps = g_strdup (strpresence_v[0]);
+      }
+
+      presence = g_ascii_strtoll (strpresence_v[1], &endptr, 10);
+      if (endptr == strpresence_v[1]) {
+        g_printerr ("Wrong presence %s\n", strpresence_v[1]);
+
+        return NULL;
+      }
+    } else {                    /* We have no presence */
+      if (preset_v[1]) {        /* Not presence but preset */
+        preset_name = g_strdup (preset_v[1]);
+        g_free (strcaps);
+        strcaps = g_strdup (preset_v[0]);
+      }                         /* Else we have no presence nor preset */
+    }
+    g_strfreev (strpresence_v);
+    g_strfreev (preset_v);
+
+    GST_DEBUG ("Creating preset with restrictions: %" GST_PTR_FORMAT
+        ", caps: %s, preset %s, presence %d", restrictioncaps, strcaps,
+        preset_name ? preset_name : "none", presence);
+
+    caps = gst_caps_from_string (strcaps);
+    g_free (strcaps);
+    if (caps == NULL) {
+      g_warning ("Could not create caps for %s", strcaps_v[i]);
+
+      return NULL;
+    }
+
+    if (g_str_has_prefix (strcaps_v[i], "audio/")) {
+      profile = GST_ENCODING_PROFILE (gst_encoding_audio_profile_new (caps,
+              preset_name, restrictioncaps, presence));
+    } else if (g_str_has_prefix (strcaps_v[i], "video/") ||
+        g_str_has_prefix (strcaps_v[i], "image/")) {
+      profile = GST_ENCODING_PROFILE (gst_encoding_video_profile_new (caps,
+              preset_name, restrictioncaps, presence));
+    }
+
+    g_free (preset_name);
+    gst_caps_unref (caps);
+    if (restrictioncaps)
+      gst_caps_unref (restrictioncaps);
+
+    if (profile == NULL) {
+      g_warning ("No way to create a preset for caps: %s", strcaps_v[i]);
+
+      return NULL;
+    }
+
+    if (res) {
+      if (gst_encoding_container_profile_add_profile
+          (GST_ENCODING_CONTAINER_PROFILE (res),
+              profile) == FALSE) {
+        g_warning ("Can not create a preset for caps: %s", strcaps_v[i]);
+
+        return NULL;
+      }
+    } else {
+      res = profile;
+    }
+  }
+  g_strfreev (strcaps_v);
+
+  return res;
+}
+
 /* GValue transform function */
 static void
 string_to_profile_transform (const GValue * src_value, GValue * dest_value)
@@ -1282,6 +1486,9 @@
 
   profile = combo_search (s);
 
+  if (!profile)
+    profile = parse_encoding_profile (s);
+
   if (profile) {
     g_value_take_object (value, (GObject *) profile);
     return TRUE;
diff --git a/gst-libs/gst/pbutils/encoding-profile.h b/gst-libs/gst/pbutils/encoding-profile.h
index a667f8c..9957a5f 100644
--- a/gst-libs/gst/pbutils/encoding-profile.h
+++ b/gst-libs/gst/pbutils/encoding-profile.h
@@ -189,6 +189,22 @@
 
 GstEncodingProfile * gst_encoding_profile_from_discoverer (GstDiscovererInfo *info);
 
+#ifdef G_DEFINE_AUTOPTR_CLEANUP_FUNC
+G_DEFINE_AUTOPTR_CLEANUP_FUNC(GstEncodingAudioProfile, gst_object_unref)
+#endif
+
+#ifdef G_DEFINE_AUTOPTR_CLEANUP_FUNC
+G_DEFINE_AUTOPTR_CLEANUP_FUNC(GstEncodingContainerProfile, gst_object_unref)
+#endif
+
+#ifdef G_DEFINE_AUTOPTR_CLEANUP_FUNC
+G_DEFINE_AUTOPTR_CLEANUP_FUNC(GstEncodingProfile, gst_object_unref)
+#endif
+
+#ifdef G_DEFINE_AUTOPTR_CLEANUP_FUNC
+G_DEFINE_AUTOPTR_CLEANUP_FUNC(GstEncodingVideoProfile, gst_object_unref)
+#endif
+
 G_END_DECLS
 
 #endif /* __GST_PROFILE_H__ */
diff --git a/gst-libs/gst/pbutils/encoding-target.c b/gst-libs/gst/pbutils/encoding-target.c
index 8481587..bd5a3b3 100644
--- a/gst-libs/gst/pbutils/encoding-target.c
+++ b/gst-libs/gst/pbutils/encoding-target.c
@@ -23,6 +23,7 @@
 #endif
 
 #include <locale.h>
+#include <errno.h>
 #include <string.h>
 #include "encoding-target.h"
 
@@ -59,6 +60,9 @@
  * $GST_DATADIR/gstreamer-GST_API_VERSION/encoding-profile
  * $HOME/gstreamer-GST_API_VERSION/encoding-profile
  *
+ * There also is a GST_ENCODING_TARGET_PATH environment variable
+ * defining a list of folder containing encoding target files.
+ *
  * Naming convention
  *   $(target.category)/$(target.name).gep
  *
@@ -100,12 +104,9 @@
 
   GST_DEBUG ("Finalizing");
 
-  if (target->name)
-    g_free (target->name);
-  if (target->category)
-    g_free (target->category);
-  if (target->description)
-    g_free (target->description);
+  g_free (target->name);
+  g_free (target->category);
+  g_free (target->description);
 
   g_list_foreach (target->profiles, (GFunc) g_object_unref, NULL);
   g_list_free (target->profiles);
@@ -267,7 +268,7 @@
   /* Validate name */
   if (!validate_name (name))
     goto invalid_name;
-  if (!validate_name (category))
+  if (category && !validate_name (category))
     goto invalid_category;
 
   res = (GstEncodingTarget *) g_object_new (GST_TYPE_ENCODING_TARGET, NULL);
@@ -651,14 +652,10 @@
   if (formatcaps)
     gst_caps_unref (formatcaps);
 
-  if (pname)
-    g_free (pname);
-  if (description)
-    g_free (description);
-  if (preset)
-    g_free (preset);
-  if (proftype)
-    g_free (proftype);
+  g_free (pname);
+  g_free (description);
+  g_free (preset);
+  g_free (proftype);
 
   return sprof;
 }
@@ -686,12 +683,9 @@
 
   g_strfreev (groups);
 
-  if (targetname)
-    g_free (targetname);
-  if (categoryname)
-    g_free (categoryname);
-  if (description)
-    g_free (description);
+  g_free (targetname);
+  g_free (categoryname);
+  g_free (description);
 
   return res;
 }
@@ -788,11 +782,18 @@
   GList *res = NULL;
   GDir *topdir;
   const gchar *subdirname;
+  gchar *tmp;
 
   topdir = g_dir_open (path, 0, NULL);
   if (G_UNLIKELY (topdir == NULL))
     return NULL;
 
+  tmp = g_build_filename (path, filename, NULL);
+  if (g_file_test (tmp, G_FILE_TEST_EXISTS))
+    res = g_list_append (res, tmp);
+  else
+    g_free (tmp);
+
   while ((subdirname = g_dir_read_name (topdir))) {
     gchar *ltmp = g_build_filename (path, subdirname, NULL);
 
@@ -860,7 +861,9 @@
 gst_encoding_target_load (const gchar * name, const gchar * category,
     GError ** error)
 {
-  gchar *lfilename, *tldir;
+  gint i;
+  gchar *lfilename, *tldir, **encoding_target_dirs;
+  const gchar *envvar;
   GstEncodingTarget *target = NULL;
 
   g_return_val_if_fail (name != NULL, NULL);
@@ -873,7 +876,23 @@
 
   lfilename = g_strdup_printf ("%s" GST_ENCODING_TARGET_SUFFIX, name);
 
+  envvar = g_getenv ("GST_ENCODING_TARGET_PATH");
+  if (envvar) {
+    encoding_target_dirs = g_strsplit (envvar, G_SEARCHPATH_SEPARATOR_S, -1);
+    for (i = 0; encoding_target_dirs[i]; i++) {
+      target = gst_encoding_target_subload (encoding_target_dirs[i],
+          category, lfilename, error);
+
+      if (target)
+        break;
+    }
+    g_strfreev (encoding_target_dirs);
+    if (target)
+      goto done;
+  }
+
   /* Try from local profiles */
+
   tldir =
       g_build_filename (g_get_user_data_dir (), "gstreamer-" GST_API_VERSION,
       GST_ENCODING_TARGET_DIRECTORY, NULL);
@@ -889,6 +908,7 @@
     g_free (tldir);
   }
 
+done:
   g_free (lfilename);
 
   return target;
@@ -988,14 +1008,24 @@
 {
   gchar *filename;
   gchar *lfilename;
+  gchar *dirname;
 
   g_return_val_if_fail (GST_IS_ENCODING_TARGET (target), FALSE);
   g_return_val_if_fail (target->category != NULL, FALSE);
 
   lfilename = g_strdup_printf ("%s" GST_ENCODING_TARGET_SUFFIX, target->name);
-  filename =
+  dirname =
       g_build_filename (g_get_user_data_dir (), "gstreamer-" GST_API_VERSION,
-      GST_ENCODING_TARGET_DIRECTORY, target->category, lfilename, NULL);
+      GST_ENCODING_TARGET_DIRECTORY, target->category, NULL);
+  errno = 0;
+  if (g_mkdir_with_parents (dirname, 0755)) {
+    GST_ERROR_OBJECT (target, "Could not create directory to save %s into: %s",
+        target->name, g_strerror (errno));
+
+    return FALSE;
+  }
+  filename = g_build_filename (dirname, lfilename, NULL);
+  g_free (dirname);
   g_free (lfilename);
 
   gst_encoding_target_save_to_file (target, filename, error);
diff --git a/gst-libs/gst/pbutils/encoding-target.h b/gst-libs/gst/pbutils/encoding-target.h
index ddc60ee..0c3a39c 100644
--- a/gst-libs/gst/pbutils/encoding-target.h
+++ b/gst-libs/gst/pbutils/encoding-target.h
@@ -138,6 +138,10 @@
 GList *                 gst_encoding_list_available_categories  (void);
 GList *                 gst_encoding_list_all_targets           (const gchar * categoryname);
 
+#ifdef G_DEFINE_AUTOPTR_CLEANUP_FUNC
+G_DEFINE_AUTOPTR_CLEANUP_FUNC(GstEncodingTarget, gst_object_unref)
+#endif
+
 G_END_DECLS
 
 #endif  /* __GST_PROFILE_REGISTRY_H__ */
diff --git a/ext/libvisual/gstaudiovisualizer.c b/gst-libs/gst/pbutils/gstaudiovisualizer.c
similarity index 86%
rename from ext/libvisual/gstaudiovisualizer.c
rename to gst-libs/gst/pbutils/gstaudiovisualizer.c
index 805336d..ac2bd3c 100644
--- a/ext/libvisual/gstaudiovisualizer.c
+++ b/gst-libs/gst/pbutils/gstaudiovisualizer.c
@@ -65,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_finalize (GObject * object);
+static void gst_audio_visualizer_dispose (GObject * object);
 
 static gboolean gst_audio_visualizer_src_negotiate (GstAudioVisualizer * scope);
 static gboolean gst_audio_visualizer_src_setcaps (GstAudioVisualizer *
@@ -202,10 +202,9 @@
     GstVideoFrame * dframe)
 {
   guint i, j;
-  guint32 shade_amount = scope->priv->shade_amount;
-  guint r = (shade_amount >> 16) & 0xff;
-  guint g = (shade_amount >> 8) & 0xff;
-  guint b = (shade_amount >> 0) & 0xff;
+  guint r = (scope->priv->shade_amount >> 16) & 0xff;
+  guint g = (scope->priv->shade_amount >> 8) & 0xff;
+  guint b = (scope->priv->shade_amount >> 0) & 0xff;
   guint8 *s, *d;
   gint ss, ds, width, height;
 
@@ -231,10 +230,9 @@
     const GstVideoFrame * sframe, GstVideoFrame * dframe)
 {
   guint i, j;
-  guint32 shade_amount = scope->priv->shade_amount;
-  guint r = (shade_amount >> 16) & 0xff;
-  guint g = (shade_amount >> 8) & 0xff;
-  guint b = (shade_amount >> 0) & 0xff;
+  guint r = (scope->priv->shade_amount >> 16) & 0xff;
+  guint g = (scope->priv->shade_amount >> 8) & 0xff;
+  guint b = (scope->priv->shade_amount >> 0) & 0xff;
   guint8 *s, *d;
   gint ss, ds, width, height;
 
@@ -260,10 +258,9 @@
     const GstVideoFrame * sframe, GstVideoFrame * dframe)
 {
   guint i, j;
-  guint32 shade_amount = scope->priv->shade_amount;
-  guint r = (shade_amount >> 16) & 0xff;
-  guint g = (shade_amount >> 8) & 0xff;
-  guint b = (shade_amount >> 0) & 0xff;
+  guint r = (scope->priv->shade_amount >> 16) & 0xff;
+  guint g = (scope->priv->shade_amount >> 8) & 0xff;
+  guint b = (scope->priv->shade_amount >> 0) & 0xff;
   guint8 *s, *d;
   gint ss, ds, width, height;
 
@@ -289,10 +286,9 @@
     const GstVideoFrame * sframe, GstVideoFrame * dframe)
 {
   guint i, j;
-  guint32 shade_amount = scope->priv->shade_amount;
-  guint r = (shade_amount >> 16) & 0xff;
-  guint g = (shade_amount >> 8) & 0xff;
-  guint b = (shade_amount >> 0) & 0xff;
+  guint r = (scope->priv->shade_amount >> 16) & 0xff;
+  guint g = (scope->priv->shade_amount >> 8) & 0xff;
+  guint b = (scope->priv->shade_amount >> 0) & 0xff;
   guint8 *s, *d;
   gint ss, ds, width, height;
 
@@ -322,10 +318,9 @@
     const GstVideoFrame * sframe, GstVideoFrame * dframe)
 {
   guint i, j;
-  guint32 shade_amount = scope->priv->shade_amount;
-  guint r = (shade_amount >> 16) & 0xff;
-  guint g = (shade_amount >> 8) & 0xff;
-  guint b = (shade_amount >> 0) & 0xff;
+  guint r = (scope->priv->shade_amount >> 16) & 0xff;
+  guint g = (scope->priv->shade_amount >> 8) & 0xff;
+  guint b = (scope->priv->shade_amount >> 0) & 0xff;
   guint8 *s, *d;
   gint ss, ds, width, height;
 
@@ -355,10 +350,9 @@
     const GstVideoFrame * sframe, GstVideoFrame * dframe)
 {
   guint i, j;
-  guint32 shade_amount = scope->priv->shade_amount;
-  guint r = (shade_amount >> 16) & 0xff;
-  guint g = (shade_amount >> 8) & 0xff;
-  guint b = (shade_amount >> 0) & 0xff;
+  guint r = (scope->priv->shade_amount >> 16) & 0xff;
+  guint g = (scope->priv->shade_amount >> 8) & 0xff;
+  guint b = (scope->priv->shade_amount >> 0) & 0xff;
   guint8 *s, *d;
   gint ss, ds, width, height;
 
@@ -393,10 +387,9 @@
     const GstVideoFrame * sframe, GstVideoFrame * dframe)
 {
   guint i, j;
-  guint32 shade_amount = scope->priv->shade_amount;
-  guint r = (shade_amount >> 16) & 0xff;
-  guint g = (shade_amount >> 8) & 0xff;
-  guint b = (shade_amount >> 0) & 0xff;
+  guint r = (scope->priv->shade_amount >> 16) & 0xff;
+  guint g = (scope->priv->shade_amount >> 8) & 0xff;
+  guint b = (scope->priv->shade_amount >> 0) & 0xff;
   guint8 *s, *d;
   gint ss, ds, width, height;
 
@@ -431,10 +424,9 @@
     const GstVideoFrame * sframe, GstVideoFrame * dframe)
 {
   guint i, j;
-  guint32 shade_amount = scope->priv->shade_amount;
-  guint r = (shade_amount >> 16) & 0xff;
-  guint g = (shade_amount >> 8) & 0xff;
-  guint b = (shade_amount >> 0) & 0xff;
+  guint r = (scope->priv->shade_amount >> 16) & 0xff;
+  guint g = (scope->priv->shade_amount >> 8) & 0xff;
+  guint b = (scope->priv->shade_amount >> 0) & 0xff;
   guint8 *s, *s1, *d, *d1;
   gint ss, ds, width, height;
 
@@ -467,10 +459,9 @@
     const GstVideoFrame * sframe, GstVideoFrame * dframe)
 {
   guint i, j;
-  guint32 shade_amount = scope->priv->shade_amount;
-  guint r = (shade_amount >> 16) & 0xff;
-  guint g = (shade_amount >> 8) & 0xff;
-  guint b = (shade_amount >> 0) & 0xff;
+  guint r = (scope->priv->shade_amount >> 16) & 0xff;
+  guint g = (scope->priv->shade_amount >> 8) & 0xff;
+  guint b = (scope->priv->shade_amount >> 0) & 0xff;
   guint8 *s, *s1, *d, *d1;
   gint ss, ds, width, height;
 
@@ -501,52 +492,48 @@
 static void
 gst_audio_visualizer_change_shader (GstAudioVisualizer * scope)
 {
-  GstAudioVisualizerShaderFunc shader;
-
   switch (scope->priv->shader_type) {
     case GST_AUDIO_VISUALIZER_SHADER_NONE:
-      shader = NULL;
+      scope->priv->shader = NULL;
       break;
     case GST_AUDIO_VISUALIZER_SHADER_FADE:
-      shader = shader_fade;
+      scope->priv->shader = shader_fade;
       break;
     case GST_AUDIO_VISUALIZER_SHADER_FADE_AND_MOVE_UP:
-      shader = shader_fade_and_move_up;
+      scope->priv->shader = shader_fade_and_move_up;
       break;
     case GST_AUDIO_VISUALIZER_SHADER_FADE_AND_MOVE_DOWN:
-      shader = shader_fade_and_move_down;
+      scope->priv->shader = shader_fade_and_move_down;
       break;
     case GST_AUDIO_VISUALIZER_SHADER_FADE_AND_MOVE_LEFT:
-      shader = shader_fade_and_move_left;
+      scope->priv->shader = shader_fade_and_move_left;
       break;
     case GST_AUDIO_VISUALIZER_SHADER_FADE_AND_MOVE_RIGHT:
-      shader = shader_fade_and_move_right;
+      scope->priv->shader = shader_fade_and_move_right;
       break;
     case GST_AUDIO_VISUALIZER_SHADER_FADE_AND_MOVE_HORIZ_OUT:
-      shader = shader_fade_and_move_horiz_out;
+      scope->priv->shader = shader_fade_and_move_horiz_out;
       break;
     case GST_AUDIO_VISUALIZER_SHADER_FADE_AND_MOVE_HORIZ_IN:
-      shader = shader_fade_and_move_horiz_in;
+      scope->priv->shader = shader_fade_and_move_horiz_in;
       break;
     case GST_AUDIO_VISUALIZER_SHADER_FADE_AND_MOVE_VERT_OUT:
-      shader = shader_fade_and_move_vert_out;
+      scope->priv->shader = shader_fade_and_move_vert_out;
       break;
     case GST_AUDIO_VISUALIZER_SHADER_FADE_AND_MOVE_VERT_IN:
-      shader = shader_fade_and_move_vert_in;
+      scope->priv->shader = shader_fade_and_move_vert_in;
       break;
     default:
       GST_ERROR ("invalid shader function");
-      shader = NULL;
+      scope->priv->shader = NULL;
       break;
   }
-
-  scope->priv->shader = shader;
 }
 
 /* base class */
 
 GType
-libvisual_gst_audio_visualizer_get_type (void)
+gst_audio_visualizer_get_type (void)
 {
   static volatile gsize audio_visualizer_type = 0;
 
@@ -589,7 +576,7 @@
 
   gobject_class->set_property = gst_audio_visualizer_set_property;
   gobject_class->get_property = gst_audio_visualizer_get_property;
-  gobject_class->finalize = gst_audio_visualizer_finalize;
+  gobject_class->dispose = gst_audio_visualizer_dispose;
 
   element_class->change_state =
       GST_DEBUG_FUNCPTR (gst_audio_visualizer_change_state);
@@ -696,43 +683,41 @@
 }
 
 static void
-gst_audio_visualizer_finalize (GObject * object)
+gst_audio_visualizer_dispose (GObject * object)
 {
   GstAudioVisualizer *scope = GST_AUDIO_VISUALIZER (object);
-  GstAudioVisualizerPrivate *priv = scope->priv;
 
-  if (priv->adapter) {
-    g_object_unref (priv->adapter);
-    priv->adapter = NULL;
+  if (scope->priv->adapter) {
+    g_object_unref (scope->priv->adapter);
+    scope->priv->adapter = NULL;
   }
-  if (priv->inbuf) {
-    gst_buffer_unref (priv->inbuf);
-    priv->inbuf = NULL;
+  if (scope->priv->inbuf) {
+    gst_buffer_unref (scope->priv->inbuf);
+    scope->priv->inbuf = NULL;
   }
-  if (priv->tempbuf) {
-    gst_video_frame_unmap (&priv->tempframe);
-    gst_buffer_unref (priv->tempbuf);
-    priv->tempbuf = NULL;
+  if (scope->priv->tempbuf) {
+    gst_video_frame_unmap (&scope->priv->tempframe);
+    gst_buffer_unref (scope->priv->tempbuf);
+    scope->priv->tempbuf = NULL;
   }
-
-  g_mutex_clear (&priv->config_lock);
-
-  G_OBJECT_CLASS (parent_class)->finalize (object);
+  if (scope->priv->config_lock.p) {
+    g_mutex_clear (&scope->priv->config_lock);
+    scope->priv->config_lock.p = NULL;
+  }
+  G_OBJECT_CLASS (parent_class)->dispose (object);
 }
 
 static void
 gst_audio_visualizer_reset (GstAudioVisualizer * scope)
 {
-  GstAudioVisualizerPrivate *priv = scope->priv;
-
-  gst_adapter_clear (priv->adapter);
-  gst_segment_init (&priv->segment, GST_FORMAT_UNDEFINED);
+  gst_adapter_clear (scope->priv->adapter);
+  gst_segment_init (&scope->priv->segment, GST_FORMAT_UNDEFINED);
 
   GST_OBJECT_LOCK (scope);
-  priv->proportion = 1.0;
-  priv->earliest_time = -1;
-  priv->dropped = 0;
-  priv->processed = 0;
+  scope->priv->proportion = 1.0;
+  scope->priv->earliest_time = -1;
+  scope->priv->dropped = 0;
+  scope->priv->processed = 0;
   GST_OBJECT_UNLOCK (scope);
 }
 
@@ -773,7 +758,6 @@
 {
   GstVideoInfo info;
   GstAudioVisualizerClass *klass;
-  GstAudioVisualizerPrivate *priv;
   gboolean res;
 
   if (!gst_video_info_from_caps (&info, caps))
@@ -781,24 +765,23 @@
 
   klass = GST_AUDIO_VISUALIZER_CLASS (G_OBJECT_GET_CLASS (scope));
 
-  priv = scope->priv;
-
   scope->vinfo = info;
 
-  priv->frame_duration = gst_util_uint64_scale_int (GST_SECOND,
+  scope->priv->frame_duration = gst_util_uint64_scale_int (GST_SECOND,
       GST_VIDEO_INFO_FPS_D (&info), GST_VIDEO_INFO_FPS_N (&info));
-  priv->spf = gst_util_uint64_scale_int (GST_AUDIO_INFO_RATE (&scope->ainfo),
+  scope->priv->spf =
+      gst_util_uint64_scale_int (GST_AUDIO_INFO_RATE (&scope->ainfo),
       GST_VIDEO_INFO_FPS_D (&info), GST_VIDEO_INFO_FPS_N (&info));
-  scope->req_spf = priv->spf;
+  scope->req_spf = scope->priv->spf;
 
-  if (priv->tempbuf) {
-    gst_video_frame_unmap (&priv->tempframe);
-    gst_buffer_unref (priv->tempbuf);
+  if (scope->priv->tempbuf) {
+    gst_video_frame_unmap (&scope->priv->tempframe);
+    gst_buffer_unref (scope->priv->tempbuf);
   }
-  priv->tempbuf = gst_buffer_new_wrapped (g_malloc0 (scope->vinfo.size),
+  scope->priv->tempbuf = gst_buffer_new_wrapped (g_malloc0 (scope->vinfo.size),
       scope->vinfo.size);
-  gst_video_frame_map (&priv->tempframe, &scope->vinfo, priv->tempbuf,
-      GST_MAP_READWRITE);
+  gst_video_frame_map (&scope->priv->tempframe, &scope->vinfo,
+      scope->priv->tempbuf, GST_MAP_READWRITE);
 
   if (klass->setup && !klass->setup (scope))
     goto setup_failed;
@@ -806,10 +789,10 @@
   GST_DEBUG_OBJECT (scope, "video: dimension %dx%d, framerate %d/%d",
       GST_VIDEO_INFO_WIDTH (&info), GST_VIDEO_INFO_HEIGHT (&info),
       GST_VIDEO_INFO_FPS_N (&info), GST_VIDEO_INFO_FPS_D (&info));
-  GST_DEBUG_OBJECT (scope, "blocks: spf %u, req_spf %u", priv->spf,
-      scope->req_spf);
+  GST_DEBUG_OBJECT (scope, "blocks: spf %u, req_spf %u",
+      scope->priv->spf, scope->req_spf);
 
-  gst_pad_set_caps (priv->srcpad, caps);
+  gst_pad_set_caps (scope->priv->srcpad, caps);
 
   /* find a pool for the negotiated caps now */
   res = gst_audio_visualizer_do_bufferpool (scope, caps);
@@ -1085,7 +1068,6 @@
 {
   GstFlowReturn ret = GST_FLOW_OK;
   GstAudioVisualizer *scope;
-  GstAudioVisualizerPrivate *priv;
   GstAudioVisualizerClass *klass;
   GstBuffer *inbuf;
   guint64 dist, ts;
@@ -1094,20 +1076,19 @@
   gint bps, channels, rate;
 
   scope = GST_AUDIO_VISUALIZER (parent);
-  priv = scope->priv;
   klass = GST_AUDIO_VISUALIZER_CLASS (G_OBJECT_GET_CLASS (scope));
 
   GST_LOG_OBJECT (scope, "chainfunc called");
 
   /* resync on DISCONT */
   if (GST_BUFFER_FLAG_IS_SET (buffer, GST_BUFFER_FLAG_DISCONT)) {
-    gst_adapter_clear (priv->adapter);
+    gst_adapter_clear (scope->priv->adapter);
   }
 
   /* Make sure have an output format */
-  if (gst_pad_check_reconfigure (priv->srcpad)) {
+  if (gst_pad_check_reconfigure (scope->priv->srcpad)) {
     if (!gst_audio_visualizer_src_negotiate (scope)) {
-      gst_pad_mark_reconfigure (priv->srcpad);
+      gst_pad_mark_reconfigure (scope->priv->srcpad);
       goto not_negotiated;
     }
   }
@@ -1121,26 +1102,26 @@
     goto beach;
   }
 
-  gst_adapter_push (priv->adapter, buffer);
+  gst_adapter_push (scope->priv->adapter, buffer);
 
-  g_mutex_lock (&priv->config_lock);
+  g_mutex_lock (&scope->priv->config_lock);
 
   /* this is what we want */
   sbpf = scope->req_spf * channels * sizeof (gint16);
 
-  inbuf = priv->inbuf;
+  inbuf = scope->priv->inbuf;
   /* FIXME: the timestamp in the adapter would be different */
   gst_buffer_copy_into (inbuf, buffer, GST_BUFFER_COPY_METADATA, 0, -1);
 
   /* this is what we have */
-  avail = gst_adapter_available (priv->adapter);
+  avail = gst_adapter_available (scope->priv->adapter);
   GST_LOG_OBJECT (scope, "avail: %u, bpf: %u", avail, sbpf);
   while (avail >= sbpf) {
     GstBuffer *outbuf;
     GstVideoFrame outframe;
 
     /* get timestamp of the current adapter content */
-    ts = gst_adapter_prev_pts (priv->adapter, &dist);
+    ts = gst_adapter_prev_pts (scope->priv->adapter, &dist);
     if (GST_CLOCK_TIME_IS_VALID (ts)) {
       /* convert bytes to time */
       dist /= bps;
@@ -1154,12 +1135,12 @@
       gint64 qostime;
 
       qostime =
-          gst_segment_to_running_time (&priv->segment, GST_FORMAT_TIME,
-          ts) + priv->frame_duration;
+          gst_segment_to_running_time (&scope->priv->segment,
+          GST_FORMAT_TIME, ts) + scope->priv->frame_duration;
 
       GST_OBJECT_LOCK (scope);
-      earliest_time = priv->earliest_time;
-      proportion = priv->proportion;
+      earliest_time = scope->priv->earliest_time;
+      proportion = scope->priv->proportion;
       GST_OBJECT_UNLOCK (scope);
 
       if (GST_CLOCK_TIME_IS_VALID (earliest_time) && qostime <= earliest_time) {
@@ -1170,26 +1151,26 @@
             "QoS: skip ts: %" GST_TIME_FORMAT ", earliest: %" GST_TIME_FORMAT,
             GST_TIME_ARGS (qostime), GST_TIME_ARGS (earliest_time));
 
-        ++priv->dropped;
-        stream_time = gst_segment_to_stream_time (&priv->segment,
+        ++scope->priv->dropped;
+        stream_time = gst_segment_to_stream_time (&scope->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);
+            scope->priv->processed, scope->priv->dropped);
         gst_element_post_message (GST_ELEMENT (scope), qos_msg);
 
         goto skip;
       }
     }
 
-    ++priv->processed;
+    ++scope->priv->processed;
 
-    g_mutex_unlock (&priv->config_lock);
+    g_mutex_unlock (&scope->priv->config_lock);
     ret = default_prepare_output_buffer (scope, &outbuf);
-    g_mutex_lock (&priv->config_lock);
+    g_mutex_lock (&scope->priv->config_lock);
     /* recheck as the value could have changed */
     sbpf = scope->req_spf * channels * sizeof (gint16);
 
@@ -1202,16 +1183,16 @@
       gst_object_sync_values (GST_OBJECT (scope), ts);
 
     GST_BUFFER_TIMESTAMP (outbuf) = ts;
-    GST_BUFFER_DURATION (outbuf) = priv->frame_duration;
+    GST_BUFFER_DURATION (outbuf) = scope->priv->frame_duration;
 
     /* this can fail as the data size we need could have changed */
-    if (!(adata = (gpointer) gst_adapter_map (priv->adapter, sbpf)))
+    if (!(adata = (gpointer) gst_adapter_map (scope->priv->adapter, sbpf)))
       break;
 
     gst_video_frame_map (&outframe, &scope->vinfo, outbuf, GST_MAP_READWRITE);
 
-    if (priv->shader) {
-      gst_video_frame_copy (&outframe, &priv->tempframe);
+    if (scope->priv->shader) {
+      gst_video_frame_copy (&outframe, &scope->priv->tempframe);
     } else {
       /* gst_video_frame_clear() or is output frame already cleared */
       gint i;
@@ -1234,17 +1215,18 @@
       } else {
         /* run various post processing (shading and geometric transformation) */
         /* FIXME: SHADER assumes 32bpp */
-        if (priv->shader && GST_VIDEO_INFO_COMP_PSTRIDE (&scope->vinfo, 0) == 4) {
-          priv->shader (scope, &outframe, &priv->tempframe);
+        if (scope->priv->shader &&
+            GST_VIDEO_INFO_COMP_PSTRIDE (&scope->vinfo, 0) == 4) {
+          scope->priv->shader (scope, &outframe, &scope->priv->tempframe);
         }
       }
     }
     gst_video_frame_unmap (&outframe);
 
-    g_mutex_unlock (&priv->config_lock);
-    ret = gst_pad_push (priv->srcpad, outbuf);
+    g_mutex_unlock (&scope->priv->config_lock);
+    ret = gst_pad_push (scope->priv->srcpad, outbuf);
     outbuf = NULL;
-    g_mutex_lock (&priv->config_lock);
+    g_mutex_lock (&scope->priv->config_lock);
 
   skip:
     /* recheck as the value could have changed */
@@ -1252,21 +1234,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 (priv->adapter, sbpf);
-      gst_adapter_unmap (priv->adapter);
+      gst_adapter_flush (scope->priv->adapter, sbpf);
+      gst_adapter_unmap (scope->priv->adapter);
     } else if (avail >= sbpf) {
       /* just flush a bit and stop */
-      gst_adapter_flush (priv->adapter, (avail - sbpf));
-      gst_adapter_unmap (priv->adapter);
+      gst_adapter_flush (scope->priv->adapter, (avail - sbpf));
+      gst_adapter_unmap (scope->priv->adapter);
       break;
     }
-    avail = gst_adapter_available (priv->adapter);
+    avail = gst_adapter_available (scope->priv->adapter);
 
     if (ret != GST_FLOW_OK)
       break;
   }
 
-  g_mutex_unlock (&priv->config_lock);
+  g_mutex_unlock (&scope->priv->config_lock);
 
 beach:
   return ret;
@@ -1285,10 +1267,8 @@
 {
   gboolean res;
   GstAudioVisualizer *scope;
-  GstAudioVisualizerPrivate *priv;
 
   scope = GST_AUDIO_VISUALIZER (parent);
-  priv = scope->priv;
 
   switch (GST_EVENT_TYPE (event)) {
     case GST_EVENT_QOS:
@@ -1301,16 +1281,17 @@
 
       /* save stuff for the _chain() function */
       GST_OBJECT_LOCK (scope);
-      priv->proportion = proportion;
+      scope->priv->proportion = proportion;
       if (diff >= 0)
         /* we're late, this is a good estimate for next displayable
          * frame (see part-qos.txt) */
-        priv->earliest_time = timestamp + 2 * diff + priv->frame_duration;
+        scope->priv->earliest_time = timestamp + 2 * diff +
+            scope->priv->frame_duration;
       else
-        priv->earliest_time = timestamp + diff;
+        scope->priv->earliest_time = timestamp + diff;
       GST_OBJECT_UNLOCK (scope);
 
-      res = gst_pad_push_event (priv->sinkpad, event);
+      res = gst_pad_push_event (scope->priv->sinkpad, event);
       break;
     }
     case GST_EVENT_RECONFIGURE:
diff --git a/ext/libvisual/gstaudiovisualizer.h b/gst-libs/gst/pbutils/gstaudiovisualizer.h
similarity index 96%
rename from ext/libvisual/gstaudiovisualizer.h
rename to gst-libs/gst/pbutils/gstaudiovisualizer.h
index 9dbf0bc..71fd9b1 100644
--- a/ext/libvisual/gstaudiovisualizer.h
+++ b/gst-libs/gst/pbutils/gstaudiovisualizer.h
@@ -31,7 +31,7 @@
 #include <gst/base/gstadapter.h>
 
 G_BEGIN_DECLS
-#define GST_TYPE_AUDIO_VISUALIZER            (libvisual_gst_audio_visualizer_get_type())
+#define GST_TYPE_AUDIO_VISUALIZER            (gst_audio_visualizer_get_type())
 #define GST_AUDIO_VISUALIZER(obj)            (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_AUDIO_VISUALIZER,GstAudioVisualizer))
 #define GST_AUDIO_VISUALIZER_CLASS(klass)    (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_AUDIO_VISUALIZER,GstAudioVisualizerClass))
 #define GST_AUDIO_VISUALIZER_GET_CLASS(obj)  (G_TYPE_INSTANCE_GET_CLASS((obj),GST_TYPE_AUDIO_VISUALIZER,GstAudioVisualizerClass))
@@ -100,7 +100,7 @@
   gboolean (*decide_allocation)   (GstAudioVisualizer * scope, GstQuery *query);
 };
 
-GType libvisual_gst_audio_visualizer_get_type (void);
+GType gst_audio_visualizer_get_type (void);
 
 G_END_DECLS
 #endif /* __GST_AUDIO_VISUALIZER_H__ */
diff --git a/gst-libs/gst/pbutils/gstdiscoverer.c b/gst-libs/gst/pbutils/gstdiscoverer.c
index 2964933..af2046a 100644
--- a/gst-libs/gst/pbutils/gstdiscoverer.c
+++ b/gst-libs/gst/pbutils/gstdiscoverer.c
@@ -527,7 +527,7 @@
 static GstStaticCaps subtitle_caps = GST_STATIC_CAPS ("text/x-raw; "
     "subpicture/x-pgs; subpicture/x-dvb; subpicture/x-dvd; "
     "application/x-subtitle-unknown; application/x-ssa; application/x-ass; "
-    "subtitle/x-kate; application/x-kate");
+    "subtitle/x-kate; application/x-kate; subpicture/x-xsub");
 
 static gboolean
 is_subtitle_caps (const GstCaps * caps)
@@ -1962,6 +1962,8 @@
   GSource *source;
   GMainContext *ctx = NULL;
 
+  g_return_if_fail (GST_IS_DISCOVERER (discoverer));
+
   GST_DEBUG_OBJECT (discoverer, "Starting...");
 
   if (discoverer->priv->async) {
@@ -1999,6 +2001,8 @@
 void
 gst_discoverer_stop (GstDiscoverer * discoverer)
 {
+  g_return_if_fail (GST_IS_DISCOVERER (discoverer));
+
   GST_DEBUG_OBJECT (discoverer, "Stopping...");
 
   if (!discoverer->priv->async) {
@@ -2064,6 +2068,8 @@
 {
   gboolean can_run;
 
+  g_return_val_if_fail (GST_IS_DISCOVERER (discoverer), FALSE);
+
   GST_DEBUG_OBJECT (discoverer, "uri : %s", uri);
 
   DISCO_LOCK (discoverer);
@@ -2101,6 +2107,9 @@
   GstDiscovererResult res = 0;
   GstDiscovererInfo *info;
 
+  g_return_val_if_fail (GST_IS_DISCOVERER (discoverer), NULL);
+  g_return_val_if_fail (uri, NULL);
+
   GST_DEBUG_OBJECT (discoverer, "uri:%s", uri);
 
   DISCO_LOCK (discoverer);
@@ -2194,6 +2203,8 @@
   GstDiscovererStreamInfo *sinfo = gst_discoverer_info_get_stream_info (info);
   GVariant *wrapper;
 
+  g_return_val_if_fail (GST_IS_DISCOVERER_INFO (info), NULL);
+
   stream_variant = gst_discoverer_info_to_variant_recurse (sinfo, flags);
   variant =
       g_variant_new ("(vv)", _serialize_info (info, flags), stream_variant);
diff --git a/gst-libs/gst/pbutils/gstdiscoverer.h b/gst-libs/gst/pbutils/gstdiscoverer.h
index 553de3c..d3fdbb6 100644
--- a/gst-libs/gst/pbutils/gstdiscoverer.h
+++ b/gst-libs/gst/pbutils/gstdiscoverer.h
@@ -301,6 +301,34 @@
 			     const gchar * uri,
 			     GError ** err);
 
+#ifdef G_DEFINE_AUTOPTR_CLEANUP_FUNC
+G_DEFINE_AUTOPTR_CLEANUP_FUNC(GstDiscoverer, gst_object_unref)
+#endif
+
+#ifdef G_DEFINE_AUTOPTR_CLEANUP_FUNC
+G_DEFINE_AUTOPTR_CLEANUP_FUNC(GstDiscovererAudioInfo, gst_object_unref)
+#endif
+
+#ifdef G_DEFINE_AUTOPTR_CLEANUP_FUNC
+G_DEFINE_AUTOPTR_CLEANUP_FUNC(GstDiscovererContainerInfo, gst_object_unref)
+#endif
+
+#ifdef G_DEFINE_AUTOPTR_CLEANUP_FUNC
+G_DEFINE_AUTOPTR_CLEANUP_FUNC(GstDiscovererInfo, gst_object_unref)
+#endif
+
+#ifdef G_DEFINE_AUTOPTR_CLEANUP_FUNC
+G_DEFINE_AUTOPTR_CLEANUP_FUNC(GstDiscovererStreamInfo, gst_object_unref)
+#endif
+
+#ifdef G_DEFINE_AUTOPTR_CLEANUP_FUNC
+G_DEFINE_AUTOPTR_CLEANUP_FUNC(GstDiscovererSubtitleInfo, gst_object_unref)
+#endif
+
+#ifdef G_DEFINE_AUTOPTR_CLEANUP_FUNC
+G_DEFINE_AUTOPTR_CLEANUP_FUNC(GstDiscovererVideoInfo, gst_object_unref)
+#endif
+
 G_END_DECLS
 
 #endif /* _GST_DISCOVERER_H */
diff --git a/gst-libs/gst/pbutils/install-plugins.h b/gst-libs/gst/pbutils/install-plugins.h
index cd3eb00..a749349 100644
--- a/gst-libs/gst/pbutils/install-plugins.h
+++ b/gst-libs/gst/pbutils/install-plugins.h
@@ -141,6 +141,10 @@
 
 gboolean      gst_install_plugins_supported (void);
 
+#ifdef G_DEFINE_AUTOPTR_CLEANUP_FUNC
+G_DEFINE_AUTOPTR_CLEANUP_FUNC(GstInstallPluginsContext, gst_install_plugins_context_free)
+#endif
+
 G_END_DECLS
 
 #endif /* __GST_PB_UTILS_INSTALL_PLUGINS_H__ */
diff --git a/gst-libs/gst/riff/riff-media.c b/gst-libs/gst/riff/riff-media.c
index 8c01892..188360a 100644
--- a/gst-libs/gst/riff/riff-media.c
+++ b/gst-libs/gst/riff/riff-media.c
@@ -59,10 +59,10 @@
   GST_DEBUG ("video fourcc %" GST_FOURCC_FORMAT, GST_FOURCC_ARGS (codec_fcc));
 
   switch (codec_fcc) {
-    case GST_MAKE_FOURCC ('D', 'I', 'B', ' '): /* uncompressed RGB */
-    case GST_MAKE_FOURCC (0x00, 0x00, 0x00, 0x00):
-    case GST_MAKE_FOURCC ('R', 'G', 'B', ' '):
-    case GST_MAKE_FOURCC ('R', 'A', 'W', ' '):
+    case GST_RIFF_DIB:         /* uncompressed RGB */
+    case GST_RIFF_rgb:
+    case GST_RIFF_RGB:
+    case GST_RIFF_RAW:
     {
       gint bpp = (strf && strf->bit_cnt != 0) ? strf->bit_cnt : 8;
 
@@ -114,22 +114,26 @@
         *codec_name = g_strdup ("Uncompressed packed RGB 10-bit 4:4:4");
       break;
 
-    case GST_MAKE_FOURCC ('I', '4', '2', '0'):
+    case GST_RIFF_I420:
+    case GST_RIFF_i420:
+    case GST_RIFF_IYUV:
       caps = gst_caps_new_simple ("video/x-raw",
           "format", G_TYPE_STRING, "I420", NULL);
       if (codec_name)
         *codec_name = g_strdup ("Uncompressed planar YUV 4:2:0");
       break;
 
-    case GST_MAKE_FOURCC ('Y', 'U', 'Y', '2'):
+    case GST_RIFF_YUY2:
+    case GST_RIFF_yuy2:
     case GST_MAKE_FOURCC ('Y', 'U', 'N', 'V'):
+    case GST_MAKE_FOURCC ('Y', 'U', 'Y', 'V'):
       caps = gst_caps_new_simple ("video/x-raw",
           "format", G_TYPE_STRING, "YUY2", NULL);
       if (codec_name)
         *codec_name = g_strdup ("Uncompressed packed YUV 4:2:2");
       break;
 
-    case GST_MAKE_FOURCC ('Y', 'V', 'U', '9'):
+    case GST_RIFF_YVU9:
       caps = gst_caps_new_simple ("video/x-raw",
           "format", G_TYPE_STRING, "YVU9", NULL);
       if (codec_name)
@@ -138,13 +142,15 @@
 
     case GST_MAKE_FOURCC ('U', 'Y', 'V', 'Y'):
     case GST_MAKE_FOURCC ('2', 'v', 'u', 'y'):
+    case GST_MAKE_FOURCC ('H', 'D', 'Y', 'C'):
       caps = gst_caps_new_simple ("video/x-raw",
           "format", G_TYPE_STRING, "UYVY", NULL);
       if (codec_name)
         *codec_name = g_strdup ("Uncompressed packed YUV 4:2:2");
       break;
 
-    case GST_MAKE_FOURCC ('Y', 'V', '1', '2'):
+    case GST_RIFF_YV12:
+    case GST_RIFF_yv12:
       caps = gst_caps_new_simple ("video/x-raw",
           "format", G_TYPE_STRING, "YV12", NULL);
       if (codec_name)
@@ -157,11 +163,13 @@
         *codec_name = g_strdup ("Uncompressed packed 10-bit YUV 4:2:2");
       break;
 
-    case GST_MAKE_FOURCC ('M', 'J', 'P', 'G'): /* YUY2 MJPEG */
+    case GST_RIFF_MJPG:        /* YUY2 MJPEG */
+    case GST_RIFF_mJPG:
     case GST_MAKE_FOURCC ('A', 'V', 'R', 'n'):
-    case GST_MAKE_FOURCC ('I', 'J', 'P', 'G'):
+    case GST_RIFF_IJPG:
     case GST_MAKE_FOURCC ('i', 'j', 'p', 'g'):
-    case GST_MAKE_FOURCC ('d', 'm', 'b', '1'):
+    case GST_RIFF_DMB1:
+    case GST_RIFF_dmb1:
     case GST_MAKE_FOURCC ('A', 'C', 'D', 'V'):
     case GST_MAKE_FOURCC ('Q', 'I', 'V', 'G'):
       caps = gst_caps_new_empty_simple ("image/jpeg");
@@ -169,7 +177,8 @@
         *codec_name = g_strdup ("Motion JPEG");
       break;
 
-    case GST_MAKE_FOURCC ('J', 'P', 'E', 'G'): /* generic (mostly RGB) MJPEG */
+    case GST_RIFF_JPEG:        /* generic (mostly RGB) MJPEG */
+    case GST_RIFF_jpeg:
     case GST_MAKE_FOURCC ('j', 'p', 'e', 'g'): /* generic (mostly RGB) MJPEG */
       caps = gst_caps_new_empty_simple ("image/jpeg");
       if (codec_name)
@@ -177,7 +186,8 @@
       break;
 
     case GST_MAKE_FOURCC ('P', 'I', 'X', 'L'): /* Miro/Pinnacle fourccs */
-    case GST_MAKE_FOURCC ('V', 'I', 'X', 'L'): /* Miro/Pinnacle fourccs */
+    case GST_RIFF_VIXL:        /* Miro/Pinnacle fourccs */
+    case GST_RIFF_vixl:
       caps = gst_caps_new_empty_simple ("image/jpeg");
       if (codec_name)
         *codec_name = g_strdup ("Miro/Pinnacle Motion JPEG");
@@ -267,9 +277,9 @@
         *codec_name = g_strdup ("Lead MPEG-2 video");
       break;
 
-    case GST_MAKE_FOURCC ('H', '2', '6', '3'):
-    case GST_MAKE_FOURCC ('h', '2', '6', '3'):
-    case GST_MAKE_FOURCC ('i', '2', '6', '3'):
+    case GST_RIFF_H263:
+    case GST_RIFF_h263:
+    case GST_RIFF_i263:
     case GST_MAKE_FOURCC ('U', '2', '6', '3'):
     case GST_MAKE_FOURCC ('v', 'i', 'v', '1'):
     case GST_MAKE_FOURCC ('T', '2', '6', '3'):
@@ -279,7 +289,7 @@
         *codec_name = g_strdup ("ITU H.26n");
       break;
 
-    case GST_MAKE_FOURCC ('L', '2', '6', '3'):
+    case GST_RIFF_L263:
       /* http://www.leadcodecs.com/Codecs/LEAD-H263.htm */
       caps = gst_caps_new_simple ("video/x-h263",
           "variant", G_TYPE_STRING, "lead", NULL);
@@ -287,15 +297,15 @@
         *codec_name = g_strdup ("Lead H.263");
       break;
 
-    case GST_MAKE_FOURCC ('M', '2', '6', '3'):
-    case GST_MAKE_FOURCC ('m', '2', '6', '3'):
+    case GST_RIFF_M263:
+    case GST_RIFF_m263:
       caps = gst_caps_new_simple ("video/x-h263",
           "variant", G_TYPE_STRING, "microsoft", NULL);
       if (codec_name)
         *codec_name = g_strdup ("Microsoft H.263");
       break;
 
-    case GST_MAKE_FOURCC ('V', 'D', 'O', 'W'):
+    case GST_RIFF_VDOW:
       caps = gst_caps_new_simple ("video/x-h263",
           "variant", G_TYPE_STRING, "vdolive", NULL);
       if (codec_name)
@@ -309,7 +319,7 @@
         *codec_name = g_strdup ("Vivo H.263");
       break;
 
-    case GST_MAKE_FOURCC ('x', '2', '6', '3'):
+    case GST_RIFF_x263:
       caps = gst_caps_new_simple ("video/x-h263",
           "variant", G_TYPE_STRING, "xirlink", NULL);
       if (codec_name)
@@ -343,7 +353,7 @@
         *codec_name = g_strdup ("ITU H.264");
       break;
 
-    case GST_MAKE_FOURCC ('V', 'S', 'S', 'H'):
+    case GST_RIFF_VSSH:
       caps = gst_caps_new_simple ("video/x-h264",
           "variant", G_TYPE_STRING, "videosoft", NULL);
       if (codec_name)
@@ -374,7 +384,7 @@
         *codec_name = g_strdup ("Divio MPEG-4");
       break;
 
-    case GST_MAKE_FOURCC ('D', 'I', 'V', '3'):
+    case GST_RIFF_DIV3:
     case GST_MAKE_FOURCC ('d', 'i', 'v', '3'):
     case GST_MAKE_FOURCC ('D', 'V', 'X', '3'):
     case GST_MAKE_FOURCC ('d', 'v', 'x', '3'):
@@ -577,18 +587,19 @@
         *codec_name = g_strdup ("Microsoft Windows Media VC-1");
       break;
 
-    case GST_MAKE_FOURCC ('c', 'v', 'i', 'd'):
+    case GST_RIFF_cvid:
+    case GST_RIFF_CVID:
       caps = gst_caps_new_empty_simple ("video/x-cinepak");
       if (codec_name)
         *codec_name = g_strdup ("Cinepak video");
       break;
 
-    case GST_MAKE_FOURCC ('M', 'S', 'V', 'C'):
-    case GST_MAKE_FOURCC ('m', 's', 'v', 'c'):
-    case GST_MAKE_FOURCC ('C', 'R', 'A', 'M'):
-    case GST_MAKE_FOURCC ('c', 'r', 'a', 'm'):
-    case GST_MAKE_FOURCC ('W', 'H', 'A', 'M'):
-    case GST_MAKE_FOURCC ('w', 'h', 'a', 'm'):
+    case GST_RIFF_FCCH_MSVC:
+    case GST_RIFF_FCCH_msvc:
+    case GST_RIFF_CRAM:
+    case GST_RIFF_cram:
+    case GST_RIFF_WHAM:
+    case GST_RIFF_wham:
       caps = gst_caps_new_simple ("video/x-msvideocodec",
           "msvideoversion", G_TYPE_INT, 1, NULL);
       if (strf) {
@@ -601,7 +612,7 @@
       strf_data = NULL;
       break;
 
-    case GST_MAKE_FOURCC ('R', 'L', 'E', ' '):
+    case GST_RIFF_FCCH_RLE:
     case GST_MAKE_FOURCC ('m', 'r', 'l', 'e'):
     case GST_MAKE_FOURCC (0x1, 0x0, 0x0, 0x0): /* why, why, why? */
     case GST_MAKE_FOURCC (0x2, 0x0, 0x0, 0x0): /* why, why, why? */
@@ -632,32 +643,33 @@
         *codec_name = g_strdup ("Xan Wing Commander 4");
       break;
 
-    case GST_MAKE_FOURCC ('R', 'T', '2', '1'):
+    case GST_RIFF_RT21:
+    case GST_RIFF_rt21:
       caps = gst_caps_new_simple ("video/x-indeo",
           "indeoversion", G_TYPE_INT, 2, NULL);
       if (codec_name)
         *codec_name = g_strdup ("Intel Video 2");
       break;
 
-    case GST_MAKE_FOURCC ('I', 'V', '3', '1'):
-    case GST_MAKE_FOURCC ('I', 'V', '3', '2'):
-    case GST_MAKE_FOURCC ('i', 'v', '3', '1'):
-    case GST_MAKE_FOURCC ('i', 'v', '3', '2'):
+    case GST_RIFF_IV31:
+    case GST_RIFF_IV32:
+    case GST_RIFF_iv31:
+    case GST_RIFF_iv32:
       caps = gst_caps_new_simple ("video/x-indeo",
           "indeoversion", G_TYPE_INT, 3, NULL);
       if (codec_name)
         *codec_name = g_strdup ("Intel Video 3");
       break;
 
-    case GST_MAKE_FOURCC ('I', 'V', '4', '1'):
-    case GST_MAKE_FOURCC ('i', 'v', '4', '1'):
+    case GST_RIFF_IV41:
+    case GST_RIFF_iv41:
       caps = gst_caps_new_simple ("video/x-indeo",
           "indeoversion", G_TYPE_INT, 4, NULL);
       if (codec_name)
         *codec_name = g_strdup ("Intel Video 4");
       break;
 
-    case GST_MAKE_FOURCC ('I', 'V', '5', '0'):
+    case GST_RIFF_IV50:
       caps = gst_caps_new_simple ("video/x-indeo",
           "indeoversion", G_TYPE_INT, 5, NULL);
       if (codec_name)
@@ -683,8 +695,8 @@
         *codec_name = g_strdup ("Cirrus Logipak AccuPak");
       break;
 
-    case GST_MAKE_FOURCC ('C', 'Y', 'U', 'V'):
-    case GST_MAKE_FOURCC ('c', 'y', 'u', 'v'):
+    case GST_RIFF_CYUV:
+    case GST_RIFF_cyuv:
       caps = gst_caps_new_empty_simple ("video/x-compressed-yuv");
       if (codec_name)
         *codec_name = g_strdup ("CYUV Lossless");
@@ -715,7 +727,8 @@
         *codec_name = g_strdup ("VP3");
       break;
 
-    case GST_MAKE_FOURCC ('U', 'L', 'T', 'I'):
+    case GST_RIFF_ULTI:
+    case GST_RIFF_ulti:
       caps = gst_caps_new_empty_simple ("video/x-ultimotion");
       if (codec_name)
         *codec_name = g_strdup ("IBM UltiMotion");
@@ -904,6 +917,7 @@
       break;
 
     case GST_MAKE_FOURCC ('D', 'X', 'S', 'B'):
+    case GST_MAKE_FOURCC ('D', 'X', 'S', 'A'):
       caps = gst_caps_new_empty_simple ("subpicture/x-xsub");
       if (codec_name)
         *codec_name = g_strdup ("XSUB subpicture stream");
diff --git a/gst-libs/gst/rtp/Makefile.am b/gst-libs/gst/rtp/Makefile.am
index fdd01c1..fed44a8 100644
--- a/gst-libs/gst/rtp/Makefile.am
+++ b/gst-libs/gst/rtp/Makefile.am
@@ -54,7 +54,8 @@
 		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 \
+		--identifier-prefix=Gst \
+		--symbol-prefix=gst \
 		--warn-all \
 		--c-include "gst/rtp/rtp.h" \
 		-I$(top_builddir)/gst-libs \
diff --git a/gst-libs/gst/rtp/Makefile.in b/gst-libs/gst/rtp/Makefile.in
index 8dd4a1e..680104d 100644
--- a/gst-libs/gst/rtp/Makefile.in
+++ b/gst-libs/gst/rtp/Makefile.in
@@ -1134,7 +1134,8 @@
 @HAVE_INTROSPECTION_TRUE@		GST_PLUGIN_SYSTEM_PATH_1_0="" GST_PLUGIN_PATH_1_0="" GST_REGISTRY_UPDATE=no \
 @HAVE_INTROSPECTION_TRUE@		$(INTROSPECTION_SCANNER) -v --namespace GstRtp \
 @HAVE_INTROSPECTION_TRUE@		--nsversion=@GST_API_VERSION@ \
-@HAVE_INTROSPECTION_TRUE@		--strip-prefix=Gst \
+@HAVE_INTROSPECTION_TRUE@		--identifier-prefix=Gst \
+@HAVE_INTROSPECTION_TRUE@		--symbol-prefix=gst \
 @HAVE_INTROSPECTION_TRUE@		--warn-all \
 @HAVE_INTROSPECTION_TRUE@		--c-include "gst/rtp/rtp.h" \
 @HAVE_INTROSPECTION_TRUE@		-I$(top_builddir)/gst-libs \
diff --git a/gst-libs/gst/rtp/gstrtpbaseaudiopayload.h b/gst-libs/gst/rtp/gstrtpbaseaudiopayload.h
index ff2e13d..99e8dd6 100644
--- a/gst-libs/gst/rtp/gstrtpbaseaudiopayload.h
+++ b/gst-libs/gst/rtp/gstrtpbaseaudiopayload.h
@@ -101,6 +101,10 @@
 GstFlowReturn   gst_rtp_base_audio_payload_flush                  (GstRTPBaseAudioPayload * baseaudiopayload,
                                                                    guint payload_len, GstClockTime timestamp);
 
+#ifdef G_DEFINE_AUTOPTR_CLEANUP_FUNC
+G_DEFINE_AUTOPTR_CLEANUP_FUNC(GstRTPBaseAudioPayload, gst_object_unref)
+#endif
+
 G_END_DECLS
 
 #endif /* __GST_RTP_BASE_AUDIO_PAYLOAD_H__ */
diff --git a/gst-libs/gst/rtp/gstrtpbasedepayload.c b/gst-libs/gst/rtp/gstrtpbasedepayload.c
index 0eb8b89..8a313af 100644
--- a/gst-libs/gst/rtp/gstrtpbasedepayload.c
+++ b/gst-libs/gst/rtp/gstrtpbasedepayload.c
@@ -864,8 +864,12 @@
   timestamp = -1;
   duration = -1;
 
-  gst_structure_get_clock_time (s, "timestamp", &timestamp);
-  gst_structure_get_clock_time (s, "duration", &duration);
+  if (!gst_structure_get_clock_time (s, "timestamp", &timestamp) ||
+      !gst_structure_get_clock_time (s, "duration", &duration)) {
+    GST_ERROR_OBJECT (filter,
+        "Packet loss event without timestamp or duration");
+    return FALSE;
+  }
 
   /* send GAP event */
   sevent = gst_event_new_gap (timestamp, duration);
diff --git a/gst-libs/gst/rtp/gstrtpbasedepayload.h b/gst-libs/gst/rtp/gstrtpbasedepayload.h
index 20c0b00..4c6f31e 100644
--- a/gst-libs/gst/rtp/gstrtpbasedepayload.h
+++ b/gst-libs/gst/rtp/gstrtpbasedepayload.h
@@ -120,6 +120,10 @@
 GstFlowReturn   gst_rtp_base_depayload_push_list  (GstRTPBaseDepayload *filter, GstBufferList *out_list);
 
 
+#ifdef G_DEFINE_AUTOPTR_CLEANUP_FUNC
+G_DEFINE_AUTOPTR_CLEANUP_FUNC(GstRTPBaseDepayload, gst_object_unref)
+#endif
+
 G_END_DECLS
 
 #endif /* __GST_RTP_BASE_DEPAYLOAD_H__ */
diff --git a/gst-libs/gst/rtp/gstrtpbasepayload.c b/gst-libs/gst/rtp/gstrtpbasepayload.c
index 393d8c6..7efbf11 100644
--- a/gst-libs/gst/rtp/gstrtpbasepayload.c
+++ b/gst-libs/gst/rtp/gstrtpbasepayload.c
@@ -60,6 +60,7 @@
   GstEvent *pending_segment;
 
   GstCaps *subclass_srccaps;
+  GstCaps *sinkcaps;
 };
 
 /* RTPBasePayload signals and args */
@@ -403,6 +404,7 @@
   rtpbasepayload->encoding_name = NULL;
 
   gst_caps_replace (&rtpbasepayload->priv->subclass_srccaps, NULL);
+  gst_caps_replace (&rtpbasepayload->priv->sinkcaps, NULL);
 
   G_OBJECT_CLASS (parent_class)->finalize (object);
 }
@@ -450,6 +452,8 @@
       gst_event_parse_caps (event, &caps);
       GST_DEBUG_OBJECT (rtpbasepayload, "setting caps %" GST_PTR_FORMAT, caps);
 
+      gst_caps_replace (&rtpbasepayload->priv->sinkcaps, caps);
+
       rtpbasepayload_class = GST_RTP_BASE_PAYLOAD_GET_CLASS (rtpbasepayload);
       if (rtpbasepayload_class->set_caps)
         res = rtpbasepayload_class->set_caps (rtpbasepayload, caps);
@@ -775,6 +779,7 @@
 gst_rtp_base_payload_negotiate (GstRTPBasePayload * payload)
 {
   GstCaps *templ, *peercaps, *srccaps;
+  GstStructure *s, *d;
   gboolean res;
 
   payload->priv->caps_max_ptime = DEFAULT_MAX_PTIME;
@@ -806,7 +811,6 @@
     GST_DEBUG_OBJECT (payload, "no peer caps: %" GST_PTR_FORMAT, srccaps);
   } else {
     GstCaps *temp;
-    GstStructure *s, *d;
     const GValue *value;
     gboolean have_pt = FALSE;
     gboolean have_ts_offset = FALSE;
@@ -1029,6 +1033,35 @@
     GST_DEBUG_OBJECT (payload, "with peer caps: %" GST_PTR_FORMAT, srccaps);
   }
 
+  if (payload->priv->sinkcaps != NULL) {
+    s = gst_caps_get_structure (payload->priv->sinkcaps, 0);
+    if (g_str_has_prefix (gst_structure_get_name (s), "video")) {
+      gboolean has_framerate;
+      gint num, denom;
+
+      GST_DEBUG_OBJECT (payload, "video caps: %" GST_PTR_FORMAT,
+          payload->priv->sinkcaps);
+
+      has_framerate = gst_structure_get_fraction (s, "framerate", &num, &denom);
+      if (has_framerate && num == 0 && denom == 1) {
+        has_framerate =
+            gst_structure_get_fraction (s, "max-framerate", &num, &denom);
+      }
+
+      if (has_framerate) {
+        gchar str[G_ASCII_DTOSTR_BUF_SIZE];
+        gdouble framerate;
+
+        gst_util_fraction_to_double (num, denom, &framerate);
+        g_ascii_dtostr (str, G_ASCII_DTOSTR_BUF_SIZE, framerate);
+        d = gst_caps_get_structure (srccaps, 0);
+        gst_structure_set (d, "a-framerate", G_TYPE_STRING, str, NULL);
+      }
+
+      GST_DEBUG_OBJECT (payload, "with video caps: %" GST_PTR_FORMAT, srccaps);
+    }
+  }
+
   update_max_ptime (payload);
 
   res = gst_pad_set_caps (GST_RTP_BASE_PAYLOAD_SRCPAD (payload), srccaps);
@@ -1493,6 +1526,7 @@
       priv->base_offset = GST_BUFFER_OFFSET_NONE;
       priv->negotiated = FALSE;
       gst_caps_replace (&rtpbasepayload->priv->subclass_srccaps, NULL);
+      gst_caps_replace (&rtpbasepayload->priv->sinkcaps, NULL);
       break;
     default:
       break;
diff --git a/gst-libs/gst/rtp/gstrtpbasepayload.h b/gst-libs/gst/rtp/gstrtpbasepayload.h
index b35e211..366377a 100644
--- a/gst-libs/gst/rtp/gstrtpbasepayload.h
+++ b/gst-libs/gst/rtp/gstrtpbasepayload.h
@@ -165,6 +165,10 @@
 GstFlowReturn   gst_rtp_base_payload_push_list          (GstRTPBasePayload *payload,
                                                          GstBufferList *list);
 
+#ifdef G_DEFINE_AUTOPTR_CLEANUP_FUNC
+G_DEFINE_AUTOPTR_CLEANUP_FUNC(GstRTPBasePayload, gst_object_unref)
+#endif
+
 G_END_DECLS
 
 #endif /* __GST_RTP_BASE_PAYLOAD_H__ */
diff --git a/gst-libs/gst/rtsp/Makefile.am b/gst-libs/gst/rtsp/Makefile.am
index ede5706..1df45ea 100644
--- a/gst-libs/gst/rtsp/Makefile.am
+++ b/gst-libs/gst/rtsp/Makefile.am
@@ -60,7 +60,8 @@
 		GST_PLUGIN_SYSTEM_PATH_1_0="" GST_PLUGIN_PATH_1_0="" GST_REGISTRY_UPDATE=no \
 		$(INTROSPECTION_SCANNER) -v --namespace GstRtsp \
 		--nsversion=@GST_API_VERSION@ \
-		--strip-prefix=Gst \
+		--identifier-prefix=Gst \
+		--symbol-prefix=gst \
 		--warn-all \
 		--c-include "gst/rtsp/rtsp.h" \
 		-I$(top_builddir)/gst-libs \
diff --git a/gst-libs/gst/rtsp/Makefile.in b/gst-libs/gst/rtsp/Makefile.in
index bd948cb..9b600e0 100644
--- a/gst-libs/gst/rtsp/Makefile.in
+++ b/gst-libs/gst/rtsp/Makefile.in
@@ -1139,7 +1139,8 @@
 @HAVE_INTROSPECTION_TRUE@		GST_PLUGIN_SYSTEM_PATH_1_0="" GST_PLUGIN_PATH_1_0="" GST_REGISTRY_UPDATE=no \
 @HAVE_INTROSPECTION_TRUE@		$(INTROSPECTION_SCANNER) -v --namespace GstRtsp \
 @HAVE_INTROSPECTION_TRUE@		--nsversion=@GST_API_VERSION@ \
-@HAVE_INTROSPECTION_TRUE@		--strip-prefix=Gst \
+@HAVE_INTROSPECTION_TRUE@		--identifier-prefix=Gst \
+@HAVE_INTROSPECTION_TRUE@		--symbol-prefix=gst \
 @HAVE_INTROSPECTION_TRUE@		--warn-all \
 @HAVE_INTROSPECTION_TRUE@		--c-include "gst/rtsp/rtsp.h" \
 @HAVE_INTROSPECTION_TRUE@		-I$(top_builddir)/gst-libs \
diff --git a/gst-libs/gst/rtsp/gstrtspconnection.c b/gst-libs/gst/rtsp/gstrtspconnection.c
index 2063767..3e5add4 100644
--- a/gst-libs/gst/rtsp/gstrtspconnection.c
+++ b/gst-libs/gst/rtsp/gstrtspconnection.c
@@ -64,9 +64,7 @@
 #include <gst/gst.h>
 
 /* necessary for IP_TOS define */
-#if GLIB_CHECK_VERSION(2, 36, 0)
 #include <gio/gnetworking.h>
-#endif
 
 #include "gstrtspconnection.h"
 
@@ -198,6 +196,10 @@
   glong body_len;
 } GstRTSPBuilder;
 
+/* function prototypes */
+static void add_auth_header (GstRTSPConnection * conn,
+    GstRTSPMessage * message);
+
 static void
 build_reset (GstRTSPBuilder * builder)
 {
@@ -683,26 +685,28 @@
 }
 
 static GstRTSPResult
-setup_tunneling (GstRTSPConnection * conn, GTimeVal * timeout, gchar * uri)
+setup_tunneling (GstRTSPConnection * conn, GTimeVal * timeout, gchar * uri,
+    GstRTSPMessage * response)
 {
   gint i;
   GstRTSPResult res;
   gchar *value;
   guint16 url_port;
   GstRTSPMessage *msg;
-  GstRTSPMessage response;
   gboolean old_http;
   GstRTSPUrl *url;
   GError *error = NULL;
   GSocketConnection *connection;
   GSocket *socket;
-  gchar *luri = NULL;
-
-  memset (&response, 0, sizeof (response));
-  gst_rtsp_message_init (&response);
+  gchar *connection_uri = NULL;
+  gchar *request_uri = NULL;
+  gchar *host = NULL;
 
   url = conn->url;
 
+  gst_rtsp_url_get_port (url, &url_port);
+  host = g_strdup_printf ("%s:%d", url->host, url_port);
+
   /* create a random sessionid */
   for (i = 0; i < TUNNELID_LEN; i++)
     conn->tunnelid[i] = g_random_int_range ('a', 'z');
@@ -719,6 +723,8 @@
       "application/x-rtsp-tunnelled");
   gst_rtsp_message_add_header (msg, GST_RTSP_HDR_CACHE_CONTROL, "no-cache");
   gst_rtsp_message_add_header (msg, GST_RTSP_HDR_PRAGMA, "no-cache");
+  gst_rtsp_message_add_header (msg, GST_RTSP_HDR_HOST, host);
+  add_auth_header (conn, msg);
 
   /* we need to temporarily set conn->tunneled to FALSE to prevent the HTTP
    * request from being base64 encoded */
@@ -733,15 +739,15 @@
    * failure otherwise */
   old_http = conn->manual_http;
   conn->manual_http = TRUE;
-  GST_RTSP_CHECK (gst_rtsp_connection_receive (conn, &response, timeout),
+  GST_RTSP_CHECK (gst_rtsp_connection_receive (conn, response, timeout),
       read_failed);
   conn->manual_http = old_http;
 
-  if (response.type != GST_RTSP_MESSAGE_HTTP_RESPONSE ||
-      response.type_data.response.code != GST_RTSP_STS_OK)
+  if (response->type != GST_RTSP_MESSAGE_HTTP_RESPONSE ||
+      response->type_data.response.code != GST_RTSP_STS_OK)
     goto wrong_result;
 
-  if (gst_rtsp_message_get_header (&response, GST_RTSP_HDR_X_SERVER_IP_ADDRESS,
+  if (gst_rtsp_message_get_header (response, GST_RTSP_HDR_X_SERVER_IP_ADDRESS,
           &value, 0) == GST_RTSP_OK) {
     g_free (url->host);
     url->host = g_strdup (value);
@@ -749,17 +755,20 @@
     conn->remote_ip = g_strdup (value);
   }
 
-  gst_rtsp_url_get_port (url, &url_port);
-  luri = g_strdup_printf ("http://%s:%d%s%s%s", url->host, url_port,
+  connection_uri = g_strdup_printf ("http://%s:%d%s%s%s", url->host, url_port,
       url->abspath, url->query ? "?" : "", url->query ? url->query : "");
 
   /* connect to the host/port */
   if (conn->proxy_host) {
     connection = g_socket_client_connect_to_host (conn->client,
         conn->proxy_host, conn->proxy_port, conn->cancellable, &error);
+    request_uri = g_strdup (connection_uri);
   } else {
     connection = g_socket_client_connect_to_uri (conn->client,
-        luri, 0, conn->cancellable, &error);
+        connection_uri, 0, conn->cancellable, &error);
+    request_uri =
+        g_strdup_printf ("%s%s%s", url->abspath,
+        url->query ? "?" : "", url->query ? url->query : "");
   }
   if (connection == NULL)
     goto connect_failed;
@@ -781,8 +790,8 @@
   conn->control_stream = NULL;
 
   /* create the POST request for the write connection */
-  GST_RTSP_CHECK (gst_rtsp_message_new_request (&msg, GST_RTSP_POST, luri),
-      no_message);
+  GST_RTSP_CHECK (gst_rtsp_message_new_request (&msg, GST_RTSP_POST,
+          request_uri), no_message);
   msg->type = GST_RTSP_MESSAGE_HTTP_REQUEST;
 
   gst_rtsp_message_add_header (msg, GST_RTSP_HDR_X_SESSIONCOOKIE,
@@ -794,6 +803,8 @@
   gst_rtsp_message_add_header (msg, GST_RTSP_HDR_EXPIRES,
       "Sun, 9 Jan 1972 00:00:00 GMT");
   gst_rtsp_message_add_header (msg, GST_RTSP_HDR_CONTENT_LENGTH, "32767");
+  gst_rtsp_message_add_header (msg, GST_RTSP_HDR_HOST, host);
+  add_auth_header (conn, msg);
 
   /* we need to temporarily set conn->tunneled to FALSE to prevent the HTTP
    * request from being base64 encoded */
@@ -803,8 +814,9 @@
   conn->tunneled = TRUE;
 
 exit:
-  gst_rtsp_message_unset (&response);
-  g_free (luri);
+  g_free (connection_uri);
+  g_free (request_uri);
+  g_free (host);
 
   return res;
 
@@ -829,8 +841,8 @@
   }
 wrong_result:
   {
-    GST_ERROR ("got failure response %d %s", response.type_data.response.code,
-        response.type_data.response.reason);
+    GST_ERROR ("got failure response %d %s",
+        response->type_data.response.code, response->type_data.response.reason);
     res = GST_RTSP_ERROR;
     goto exit;
   }
@@ -851,27 +863,32 @@
 }
 
 /**
- * gst_rtsp_connection_connect:
+ * gst_rtsp_connection_connect_with_response:
  * @conn: a #GstRTSPConnection
  * @timeout: a #GTimeVal timeout
+ * @response: a #GstRTSPMessage
  *
  * Attempt to connect to the url of @conn made with
  * gst_rtsp_connection_create(). If @timeout is #NULL this function can block
  * forever. If @timeout contains a valid timeout, this function will return
- * #GST_RTSP_ETIMEOUT after the timeout expired.
+ * #GST_RTSP_ETIMEOUT after the timeout expired.  If @conn is set to tunneled,
+ * @response will contain a response to the tunneling request messages.
  *
  * This function can be cancelled with gst_rtsp_connection_flush().
  *
  * Returns: #GST_RTSP_OK when a connection could be made.
+ *
+ * Since 1.8
  */
 GstRTSPResult
-gst_rtsp_connection_connect (GstRTSPConnection * conn, GTimeVal * timeout)
+gst_rtsp_connection_connect_with_response (GstRTSPConnection * conn,
+    GTimeVal * timeout, GstRTSPMessage * response)
 {
   GstRTSPResult res;
   GSocketConnection *connection;
   GSocket *socket;
   GError *error = NULL;
-  gchar *uri, *remote_ip;
+  gchar *connection_uri, *request_uri, *remote_ip;
   GstClockTime to;
   guint16 url_port;
   GstRTSPUrl *url;
@@ -889,18 +906,23 @@
   gst_rtsp_url_get_port (url, &url_port);
 
   if (conn->tunneled) {
-    uri = g_strdup_printf ("http://%s:%d%s%s%s", url->host, url_port,
+    connection_uri = g_strdup_printf ("http://%s:%d%s%s%s", url->host, url_port,
         url->abspath, url->query ? "?" : "", url->query ? url->query : "");
   } else {
-    uri = gst_rtsp_url_get_request_uri (url);
+    connection_uri = gst_rtsp_url_get_request_uri (url);
   }
 
   if (conn->proxy_host) {
     connection = g_socket_client_connect_to_host (conn->client,
         conn->proxy_host, conn->proxy_port, conn->cancellable, &error);
+    request_uri = g_strdup (connection_uri);
   } else {
     connection = g_socket_client_connect_to_uri (conn->client,
-        uri, url_port, conn->cancellable, &error);
+        connection_uri, url_port, conn->cancellable, &error);
+
+    /* use the relative component of the uri for non-proxy connections */
+    request_uri = g_strdup_printf ("%s%s%s", url->abspath,
+        url->query ? "?" : "", url->query ? url->query : "");
   }
   if (connection == NULL)
     goto connect_failed;
@@ -923,11 +945,12 @@
   conn->control_stream = NULL;
 
   if (conn->tunneled) {
-    res = setup_tunneling (conn, timeout, uri);
+    res = setup_tunneling (conn, timeout, request_uri, response);
     if (res != GST_RTSP_OK)
       goto tunneling_failed;
   }
-  g_free (uri);
+  g_free (connection_uri);
+  g_free (request_uri);
 
   return GST_RTSP_OK;
 
@@ -936,7 +959,8 @@
   {
     GST_ERROR ("failed to connect: %s", error->message);
     g_clear_error (&error);
-    g_free (uri);
+    g_free (connection_uri);
+    g_free (request_uri);
     return GST_RTSP_ERROR;
   }
 remote_address_failed:
@@ -944,13 +968,15 @@
     GST_ERROR ("failed to connect: %s", error->message);
     g_object_unref (connection);
     g_clear_error (&error);
-    g_free (uri);
+    g_free (connection_uri);
+    g_free (request_uri);
     return GST_RTSP_ERROR;
   }
 tunneling_failed:
   {
     GST_ERROR ("failed to setup tunneling");
-    g_free (uri);
+    g_free (connection_uri);
+    g_free (request_uri);
     return res;
   }
 }
@@ -1079,6 +1105,36 @@
   }
 }
 
+/**
+ * gst_rtsp_connection_connect:
+ * @conn: a #GstRTSPConnection
+ * @timeout: a #GTimeVal timeout
+ *
+ * Attempt to connect to the url of @conn made with
+ * gst_rtsp_connection_create(). If @timeout is #NULL this function can block
+ * forever. If @timeout contains a valid timeout, this function will return
+ * #GST_RTSP_ETIMEOUT after the timeout expired.
+ *
+ * This function can be cancelled with gst_rtsp_connection_flush().
+ *
+ * Returns: #GST_RTSP_OK when a connection could be made.
+ */
+GstRTSPResult
+gst_rtsp_connection_connect (GstRTSPConnection * conn, GTimeVal * timeout)
+{
+  GstRTSPResult result;
+  GstRTSPMessage response;
+
+  memset (&response, 0, sizeof (response));
+  gst_rtsp_message_init (&response);
+
+  result = gst_rtsp_connection_connect_with_response (conn, timeout, &response);
+
+  gst_rtsp_message_unset (&response);
+
+  return result;
+}
+
 static void
 gen_date_string (gchar * date_string, guint len)
 {
@@ -1760,6 +1816,7 @@
 {
   GstRTSPHeaderField field;
   gchar *line = (gchar *) buffer;
+  gchar *field_name = NULL;
   gchar *value;
 
   if ((value = strchr (line, ':')) == NULL || value == line)
@@ -1774,8 +1831,9 @@
 
   /* find the header */
   field = gst_rtsp_find_header_field (line);
+  /* custom header not present in the list of pre-defined headers */
   if (field == GST_RTSP_HDR_INVALID)
-    goto done;
+    field_name = line;
 
   /* split up the value in multiple key:value pairs if it contains comma(s) */
   while (*value != '\0') {
@@ -1863,13 +1921,16 @@
       *next_value++ = '\0';
 
     /* add the key:value pair */
-    if (*value != '\0')
-      gst_rtsp_message_add_header (msg, field, value);
+    if (*value != '\0') {
+      if (field != GST_RTSP_HDR_INVALID)
+        gst_rtsp_message_add_header (msg, field, value);
+      else
+        gst_rtsp_message_add_header_by_name (msg, field_name, value);
+    }
 
     value = next_value;
   }
 
-done:
   return GST_RTSP_OK;
 
   /* ERRORS */
diff --git a/gst-libs/gst/rtsp/gstrtspconnection.h b/gst-libs/gst/rtsp/gstrtspconnection.h
index 464764b..43479ae 100644
--- a/gst-libs/gst/rtsp/gstrtspconnection.h
+++ b/gst-libs/gst/rtsp/gstrtspconnection.h
@@ -67,10 +67,12 @@
                                                        guint16 port,
                                                        const gchar * initial_buffer,
                                                        GstRTSPConnection ** conn);
-GstRTSPResult      gst_rtsp_connection_accept         (GSocket *socket, GstRTSPConnection **conn, GCancellable *cancellable);
-GstRTSPResult      gst_rtsp_connection_connect        (GstRTSPConnection *conn, GTimeVal *timeout);
-GstRTSPResult      gst_rtsp_connection_close          (GstRTSPConnection *conn);
-GstRTSPResult      gst_rtsp_connection_free           (GstRTSPConnection *conn);
+
+GstRTSPResult      gst_rtsp_connection_accept                 (GSocket * socket, GstRTSPConnection ** conn, GCancellable * cancellable);
+GstRTSPResult      gst_rtsp_connection_connect                (GstRTSPConnection * conn, GTimeVal * timeout);
+GstRTSPResult      gst_rtsp_connection_connect_with_response  (GstRTSPConnection * conn, GTimeVal * timeout, GstRTSPMessage * response);
+GstRTSPResult      gst_rtsp_connection_close                  (GstRTSPConnection *conn);
+GstRTSPResult      gst_rtsp_connection_free                   (GstRTSPConnection *conn);
 
 /* TLS connections */
 GTlsConnection *     gst_rtsp_connection_get_tls                  (GstRTSPConnection * conn, GError ** error);
diff --git a/gst-libs/gst/rtsp/gstrtspmessage.c b/gst-libs/gst/rtsp/gstrtspmessage.c
index a326e5a..99eec2e 100644
--- a/gst-libs/gst/rtsp/gstrtspmessage.c
+++ b/gst-libs/gst/rtsp/gstrtspmessage.c
@@ -863,8 +863,7 @@
   g_return_val_if_fail (msg != NULL, GST_RTSP_EINVAL);
   g_return_val_if_fail (data != NULL || size == 0, GST_RTSP_EINVAL);
 
-  if (msg->body)
-    g_free (msg->body);
+  g_free (msg->body);
 
   msg->body = data;
   msg->body_size = size;
diff --git a/gst-libs/gst/rtsp/gstrtspurl.h b/gst-libs/gst/rtsp/gstrtspurl.h
index 59700b5..7647c77 100644
--- a/gst-libs/gst/rtsp/gstrtspurl.h
+++ b/gst-libs/gst/rtsp/gstrtspurl.h
@@ -98,6 +98,10 @@
 GstRTSPResult      gst_rtsp_url_set_port        (GstRTSPUrl *url, guint16 port);
 GstRTSPResult      gst_rtsp_url_get_port        (const GstRTSPUrl *url, guint16 *port);
 
+#ifdef G_DEFINE_AUTOPTR_CLEANUP_FUNC
+G_DEFINE_AUTOPTR_CLEANUP_FUNC(GstRTSPUrl, gst_rtsp_url_free)
+#endif
+
 G_END_DECLS
 
 #endif /* __GST_RTSP_URL_H__ */
diff --git a/gst-libs/gst/sdp/Makefile.am b/gst-libs/gst/sdp/Makefile.am
index a90f30b..f4f4137 100644
--- a/gst-libs/gst/sdp/Makefile.am
+++ b/gst-libs/gst/sdp/Makefile.am
@@ -24,7 +24,8 @@
 		GST_PLUGIN_SYSTEM_PATH_1_0="" GST_PLUGIN_PATH_1_0="" GST_REGISTRY_UPDATE=no \
 		$(INTROSPECTION_SCANNER) -v --namespace GstSdp \
 		--nsversion=@GST_API_VERSION@ \
-		--strip-prefix=Gst \
+		--identifier-prefix=Gst \
+		--symbol-prefix=gst \
 		--warn-all \
 		--c-include "gst/sdp/sdp.h" \
 		-I$(top_srcdir)/gst-libs \
diff --git a/gst-libs/gst/sdp/Makefile.in b/gst-libs/gst/sdp/Makefile.in
index e786a81..670153e 100644
--- a/gst-libs/gst/sdp/Makefile.in
+++ b/gst-libs/gst/sdp/Makefile.in
@@ -968,7 +968,8 @@
 @HAVE_INTROSPECTION_TRUE@		GST_PLUGIN_SYSTEM_PATH_1_0="" GST_PLUGIN_PATH_1_0="" GST_REGISTRY_UPDATE=no \
 @HAVE_INTROSPECTION_TRUE@		$(INTROSPECTION_SCANNER) -v --namespace GstSdp \
 @HAVE_INTROSPECTION_TRUE@		--nsversion=@GST_API_VERSION@ \
-@HAVE_INTROSPECTION_TRUE@		--strip-prefix=Gst \
+@HAVE_INTROSPECTION_TRUE@		--identifier-prefix=Gst \
+@HAVE_INTROSPECTION_TRUE@		--symbol-prefix=gst \
 @HAVE_INTROSPECTION_TRUE@		--warn-all \
 @HAVE_INTROSPECTION_TRUE@		--c-include "gst/sdp/sdp.h" \
 @HAVE_INTROSPECTION_TRUE@		-I$(top_srcdir)/gst-libs \
diff --git a/gst-libs/gst/sdp/gstmikey.h b/gst-libs/gst/sdp/gstmikey.h
index 02635af..bbd06b3 100644
--- a/gst-libs/gst/sdp/gstmikey.h
+++ b/gst-libs/gst/sdp/gstmikey.h
@@ -675,6 +675,14 @@
 /* General Extension Payload */
 
 
+#ifdef G_DEFINE_AUTOPTR_CLEANUP_FUNC
+G_DEFINE_AUTOPTR_CLEANUP_FUNC(GstMIKEYMessage, gst_mikey_message_unref)
+#endif
+
+#ifdef G_DEFINE_AUTOPTR_CLEANUP_FUNC
+G_DEFINE_AUTOPTR_CLEANUP_FUNC(GstMIKEYPayload, gst_mikey_payload_unref)
+#endif
+
 G_END_DECLS
 
 #endif /* __GST_MIKEY_H__ */
diff --git a/gst-libs/gst/sdp/gstsdpmessage.c b/gst-libs/gst/sdp/gstsdpmessage.c
index 1259459..0bd235c 100644
--- a/gst-libs/gst/sdp/gstsdpmessage.c
+++ b/gst-libs/gst/sdp/gstsdpmessage.c
@@ -3016,8 +3016,7 @@
 #undef SIZE_CHECK_GUARD
 
 out:
-  if (buffer)
-    g_free (buffer);
+  g_free (buffer);
 
   return GST_SDP_OK;
 }
diff --git a/gst-libs/gst/sdp/gstsdpmessage.h b/gst-libs/gst/sdp/gstsdpmessage.h
index 62f5a03..ea9aed8 100644
--- a/gst-libs/gst/sdp/gstsdpmessage.h
+++ b/gst-libs/gst/sdp/gstsdpmessage.h
@@ -502,6 +502,10 @@
 GstSDPResult            gst_sdp_media_add_attribute         (GstSDPMedia *media, const gchar *key,
                                                              const gchar *value);
 
+#ifdef G_DEFINE_AUTOPTR_CLEANUP_FUNC
+G_DEFINE_AUTOPTR_CLEANUP_FUNC(GstSDPMessage, gst_sdp_message_free)
+#endif
+
 G_END_DECLS
 
 #endif /* __GST_SDP_MESSAGE_H__ */
diff --git a/gst-libs/gst/tag/Makefile.am b/gst-libs/gst/tag/Makefile.am
index c534a4d..a26bbde 100644
--- a/gst-libs/gst/tag/Makefile.am
+++ b/gst-libs/gst/tag/Makefile.am
@@ -34,7 +34,8 @@
 		GST_PLUGIN_SYSTEM_PATH_1_0="" GST_PLUGIN_PATH_1_0="" GST_REGISTRY_UPDATE=no \
 		$(INTROSPECTION_SCANNER) -v --namespace GstTag \
 		--nsversion=@GST_API_VERSION@ \
-		--strip-prefix=Gst \
+		--identifier-prefix=Gst \
+		--symbol-prefix=gst \
 		--warn-all \
 		--c-include "gst/tag/tag.h" \
 		-I$(top_srcdir)/gst-libs \
diff --git a/gst-libs/gst/tag/Makefile.in b/gst-libs/gst/tag/Makefile.in
index eab2674..47278e8 100644
--- a/gst-libs/gst/tag/Makefile.in
+++ b/gst-libs/gst/tag/Makefile.in
@@ -1177,7 +1177,8 @@
 @HAVE_INTROSPECTION_TRUE@		GST_PLUGIN_SYSTEM_PATH_1_0="" GST_PLUGIN_PATH_1_0="" GST_REGISTRY_UPDATE=no \
 @HAVE_INTROSPECTION_TRUE@		$(INTROSPECTION_SCANNER) -v --namespace GstTag \
 @HAVE_INTROSPECTION_TRUE@		--nsversion=@GST_API_VERSION@ \
-@HAVE_INTROSPECTION_TRUE@		--strip-prefix=Gst \
+@HAVE_INTROSPECTION_TRUE@		--identifier-prefix=Gst \
+@HAVE_INTROSPECTION_TRUE@		--symbol-prefix=gst \
 @HAVE_INTROSPECTION_TRUE@		--warn-all \
 @HAVE_INTROSPECTION_TRUE@		--c-include "gst/tag/tag.h" \
 @HAVE_INTROSPECTION_TRUE@		-I$(top_srcdir)/gst-libs \
diff --git a/gst-libs/gst/tag/gstid3tag.c b/gst-libs/gst/tag/gstid3tag.c
index 95d6df8..383e411 100644
--- a/gst-libs/gst/tag/gstid3tag.c
+++ b/gst-libs/gst/tag/gstid3tag.c
@@ -113,6 +113,7 @@
   {GST_TAG_PUBLISHER, "TPUB"},
   {GST_TAG_INTERPRETED_BY, "TPE4"},
   {GST_TAG_MUSICAL_KEY, "TKEY"},
+  {GST_TAG_PRIVATE_DATA, "PRIV"},
   {NULL, NULL}
 };
 
diff --git a/gst-libs/gst/tag/gsttagdemux.h b/gst-libs/gst/tag/gsttagdemux.h
index 5903674..aaf953d 100644
--- a/gst-libs/gst/tag/gsttagdemux.h
+++ b/gst-libs/gst/tag/gsttagdemux.h
@@ -132,6 +132,10 @@
 
 GType     gst_tag_demux_get_type (void);
 
+#ifdef G_DEFINE_AUTOPTR_CLEANUP_FUNC
+G_DEFINE_AUTOPTR_CLEANUP_FUNC(GstTagDemux, gst_object_unref)
+#endif
+
 G_END_DECLS
 
 #endif /* __GST_TAG_DEMUX_H__ */
diff --git a/gst-libs/gst/tag/gsttagmux.h b/gst-libs/gst/tag/gsttagmux.h
index ebb8b04..d19ea4c 100644
--- a/gst-libs/gst/tag/gsttagmux.h
+++ b/gst-libs/gst/tag/gsttagmux.h
@@ -80,6 +80,10 @@
 
 GType gst_tag_mux_get_type (void);
 
+#ifdef G_DEFINE_AUTOPTR_CLEANUP_FUNC
+G_DEFINE_AUTOPTR_CLEANUP_FUNC(GstTagMux, gst_object_unref)
+#endif
+
 G_END_DECLS
 
 #endif
diff --git a/gst-libs/gst/tag/id3v2.c b/gst-libs/gst/tag/id3v2.c
index 2af9486..4579d25 100644
--- a/gst-libs/gst/tag/id3v2.c
+++ b/gst-libs/gst/tag/id3v2.c
@@ -195,6 +195,8 @@
   guint8 flags;
   guint16 version;
 
+  gst_tag_register_musicbrainz_tags ();
+
   read_size = gst_tag_get_id3v2_tag_size (buffer);
 
   /* Ignore tag if it has no frames attached, but skip the header then */
diff --git a/gst-libs/gst/tag/id3v2frames.c b/gst-libs/gst/tag/id3v2frames.c
index 4784238..15b1a27 100644
--- a/gst-libs/gst/tag/id3v2frames.c
+++ b/gst-libs/gst/tag/id3v2frames.c
@@ -59,6 +59,7 @@
 id3v2_genre_fields_to_taglist (ID3TagsWorking * work, const gchar * tag_name,
     GArray * tag_fields);
 static gboolean parse_picture_frame (ID3TagsWorking * work);
+static gboolean parse_private_frame_data (ID3TagsWorking * work);
 
 #define ID3V2_ENCODING_ISO8859 0x00
 #define ID3V2_ENCODING_UTF16   0x01
@@ -201,6 +202,9 @@
   } else if (!strcmp (work->frame_id, "UFID")) {
     /* Unique file identifier */
     tag_str = parse_unique_file_identifier (work, &tag_name);
+  } else if (!strcmp (work->frame_id, "PRIV")) {
+    /* private frame */
+    result = parse_private_frame_data (work);
   }
 #ifdef HAVE_ZLIB
   if (work->frame_flags & ID3V2_FRAME_FORMAT_COMPRESSION) {
@@ -462,6 +466,49 @@
   return TRUE;
 }
 
+static gboolean
+parse_private_frame_data (ID3TagsWorking * work)
+{
+  GstBuffer *binary_data = NULL;
+  GstStructure *owner_info = NULL;
+  guint8 *owner_str = NULL;
+  gsize owner_len;
+  GstSample *priv_frame = NULL;
+
+  if (work->parse_size == 0) {
+    /* private frame data not available */
+    return FALSE;
+  }
+
+  owner_str =
+      (guint8 *) memchr ((guint8 *) work->parse_data, 0, work->parse_size);
+
+  if (owner_str == NULL) {
+    GST_WARNING ("Invalid PRIV frame received");
+    return FALSE;
+  }
+
+  owner_len = (gsize) (owner_str - work->parse_data) + 1;
+
+  owner_info =
+      gst_structure_new ("ID3PrivateFrame", "owner", G_TYPE_STRING,
+      work->parse_data, NULL);
+
+  binary_data = gst_buffer_new_and_alloc (work->parse_size - owner_len);
+  gst_buffer_fill (binary_data, 0, work->parse_data + owner_len,
+      work->parse_size - owner_len);
+
+  priv_frame = gst_sample_new (binary_data, NULL, NULL, owner_info);
+
+  gst_tag_list_add (work->tags, GST_TAG_MERGE_APPEND,
+      GST_TAG_PRIVATE_DATA, priv_frame, NULL);
+
+  gst_sample_unref (priv_frame);
+  gst_buffer_unref (binary_data);
+
+  return TRUE;
+}
+
 static gchar *
 parse_unique_file_identifier (ID3TagsWorking * work, const gchar ** tag_name)
 {
diff --git a/gst-libs/gst/tag/mklicensestables.c b/gst-libs/gst/tag/mklicensestables.c
index 03abc58..87d1205 100644
--- a/gst-libs/gst/tag/mklicensestables.c
+++ b/gst-libs/gst/tag/mklicensestables.c
@@ -415,6 +415,7 @@
 
   if (!g_markup_parse_context_parse (ctx, rdf, -1, &err)) {
     g_error ("Error parsing file %s: %s\n", fn, err->message);
+    g_clear_error (&err);
   }
 
   licenses = g_list_append (licenses, license);
@@ -433,6 +434,7 @@
 
   if (dir == NULL)
     g_error ("Failed to g_dir_open('%s'): %s", licenses_dir, err->message);
+  g_clear_error (&err);
 
   while ((name = g_dir_read_name (dir))) {
     gchar *fn, *rdf;
@@ -443,7 +445,7 @@
       g_free (rdf);
     } else {
       g_printerr ("Could not read file '%s': %s\n", fn, err->message);
-      g_error_free (err);
+      g_clear_error (&err);
       err = NULL;
     }
     g_free (fn);
@@ -722,6 +724,8 @@
   g_option_context_add_main_entries (ctx, options, NULL);
   if (!g_option_context_parse (ctx, &argc, &argv, &err)) {
     g_printerr ("Error initializing: %s\n", err->message);
+    g_option_context_free (ctx);
+    g_clear_error (&err);
     exit (1);
   }
   g_option_context_free (ctx);
diff --git a/gst-libs/gst/video/Makefile.am b/gst-libs/gst/video/Makefile.am
index 5d31fa1..91b72ff 100644
--- a/gst-libs/gst/video/Makefile.am
+++ b/gst-libs/gst/video/Makefile.am
@@ -35,6 +35,7 @@
 	gstvideosink.c   	\
 	gstvideofilter.c 	\
 	convertframe.c   	\
+	gstvideoaffinetransformationmeta.c \
 	gstvideometa.c   	\
 	gstvideopool.c		\
 	videoorientation.c	\
@@ -69,6 +70,7 @@
 	gstvideosink.h 		\
 	gstvideofilter.h	\
 	gstvideometa.h		\
+	gstvideoaffinetransformationmeta.h \
 	gstvideopool.h		\
 	videoorientation.h 	\
 	videooverlay.h          \
@@ -103,7 +105,8 @@
 		GST_PLUGIN_SYSTEM_PATH_1_0="" GST_PLUGIN_PATH_1_0="" GST_REGISTRY_UPDATE=no \
 		$(INTROSPECTION_SCANNER) -v --namespace GstVideo \
 		--nsversion=@GST_API_VERSION@ \
-		--strip-prefix=Gst \
+		--identifier-prefix=Gst \
+		--symbol-prefix=gst \
 		--warn-all \
 		--c-include "gst/video/video.h" \
 		-I$(top_srcdir)/gst-libs \
diff --git a/gst-libs/gst/video/Makefile.in b/gst-libs/gst/video/Makefile.in
index 4117f35..6be755f 100644
--- a/gst-libs/gst/video/Makefile.in
+++ b/gst-libs/gst/video/Makefile.in
@@ -220,6 +220,7 @@
 	libgstvideo_@GST_API_VERSION@_la-gstvideosink.lo \
 	libgstvideo_@GST_API_VERSION@_la-gstvideofilter.lo \
 	libgstvideo_@GST_API_VERSION@_la-convertframe.lo \
+	libgstvideo_@GST_API_VERSION@_la-gstvideoaffinetransformationmeta.lo \
 	libgstvideo_@GST_API_VERSION@_la-gstvideometa.lo \
 	libgstvideo_@GST_API_VERSION@_la-gstvideopool.lo \
 	libgstvideo_@GST_API_VERSION@_la-videoorientation.lo \
@@ -653,6 +654,7 @@
 	gstvideosink.c   	\
 	gstvideofilter.c 	\
 	convertframe.c   	\
+	gstvideoaffinetransformationmeta.c \
 	gstvideometa.c   	\
 	gstvideopool.c		\
 	videoorientation.c	\
@@ -686,6 +688,7 @@
 	gstvideosink.h 		\
 	gstvideofilter.h	\
 	gstvideometa.h		\
+	gstvideoaffinetransformationmeta.h \
 	gstvideopool.h		\
 	videoorientation.h 	\
 	videooverlay.h          \
@@ -804,6 +807,7 @@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstvideo_@GST_API_VERSION@_la-colorbalance.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstvideo_@GST_API_VERSION@_la-colorbalancechannel.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstvideo_@GST_API_VERSION@_la-convertframe.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstvideo_@GST_API_VERSION@_la-gstvideoaffinetransformationmeta.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstvideo_@GST_API_VERSION@_la-gstvideodecoder.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstvideo_@GST_API_VERSION@_la-gstvideoencoder.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstvideo_@GST_API_VERSION@_la-gstvideofilter.Plo@am__quote@
@@ -976,6 +980,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-convertframe.lo `test -f 'convertframe.c' || echo '$(srcdir)/'`convertframe.c
 
+libgstvideo_@GST_API_VERSION@_la-gstvideoaffinetransformationmeta.lo: gstvideoaffinetransformationmeta.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-gstvideoaffinetransformationmeta.lo -MD -MP -MF $(DEPDIR)/libgstvideo_@GST_API_VERSION@_la-gstvideoaffinetransformationmeta.Tpo -c -o libgstvideo_@GST_API_VERSION@_la-gstvideoaffinetransformationmeta.lo `test -f 'gstvideoaffinetransformationmeta.c' || echo '$(srcdir)/'`gstvideoaffinetransformationmeta.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstvideo_@GST_API_VERSION@_la-gstvideoaffinetransformationmeta.Tpo $(DEPDIR)/libgstvideo_@GST_API_VERSION@_la-gstvideoaffinetransformationmeta.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='gstvideoaffinetransformationmeta.c' object='libgstvideo_@GST_API_VERSION@_la-gstvideoaffinetransformationmeta.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-gstvideoaffinetransformationmeta.lo `test -f 'gstvideoaffinetransformationmeta.c' || echo '$(srcdir)/'`gstvideoaffinetransformationmeta.c
+
 libgstvideo_@GST_API_VERSION@_la-gstvideometa.lo: gstvideometa.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-gstvideometa.lo -MD -MP -MF $(DEPDIR)/libgstvideo_@GST_API_VERSION@_la-gstvideometa.Tpo -c -o libgstvideo_@GST_API_VERSION@_la-gstvideometa.lo `test -f 'gstvideometa.c' || echo '$(srcdir)/'`gstvideometa.c
 @am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstvideo_@GST_API_VERSION@_la-gstvideometa.Tpo $(DEPDIR)/libgstvideo_@GST_API_VERSION@_la-gstvideometa.Plo
@@ -1472,7 +1483,8 @@
 @HAVE_INTROSPECTION_TRUE@		GST_PLUGIN_SYSTEM_PATH_1_0="" GST_PLUGIN_PATH_1_0="" GST_REGISTRY_UPDATE=no \
 @HAVE_INTROSPECTION_TRUE@		$(INTROSPECTION_SCANNER) -v --namespace GstVideo \
 @HAVE_INTROSPECTION_TRUE@		--nsversion=@GST_API_VERSION@ \
-@HAVE_INTROSPECTION_TRUE@		--strip-prefix=Gst \
+@HAVE_INTROSPECTION_TRUE@		--identifier-prefix=Gst \
+@HAVE_INTROSPECTION_TRUE@		--symbol-prefix=gst \
 @HAVE_INTROSPECTION_TRUE@		--warn-all \
 @HAVE_INTROSPECTION_TRUE@		--c-include "gst/video/video.h" \
 @HAVE_INTROSPECTION_TRUE@		-I$(top_srcdir)/gst-libs \
diff --git a/gst-libs/gst/video/colorbalancechannel.h b/gst-libs/gst/video/colorbalancechannel.h
index 431d083..b124f4e 100644
--- a/gst-libs/gst/video/colorbalancechannel.h
+++ b/gst-libs/gst/video/colorbalancechannel.h
@@ -80,6 +80,10 @@
 
 GType   gst_color_balance_channel_get_type (void);
 
+#ifdef G_DEFINE_AUTOPTR_CLEANUP_FUNC
+G_DEFINE_AUTOPTR_CLEANUP_FUNC(GstColorBalanceChannel, gst_object_unref)
+#endif
+
 G_END_DECLS
 
 #endif /* __GST_COLOR_BALANCE_CHANNEL_H__ */
diff --git a/gst-libs/gst/video/convertframe.c b/gst-libs/gst/video/convertframe.c
index aa9c3d3..942a51e 100644
--- a/gst-libs/gst/video/convertframe.c
+++ b/gst-libs/gst/video/convertframe.c
@@ -110,12 +110,23 @@
 static GstElement *
 build_convert_frame_pipeline (GstElement ** src_element,
     GstElement ** sink_element, const GstCaps * from_caps,
-    const GstCaps * to_caps, GError ** err)
+    GstVideoCropMeta * cmeta, const GstCaps * to_caps, GError ** err)
 {
-  GstElement *src = NULL, *csp = NULL, *vscale = NULL;
-  GstElement *sink = NULL, *encoder = NULL, *pipeline;
+  GstElement *vcrop = NULL, *csp = NULL, *csp2 = NULL, *vscale = NULL;
+  GstElement *src = NULL, *sink = NULL, *encoder = NULL, *pipeline;
+  GstVideoInfo info;
   GError *error = NULL;
 
+  if (cmeta) {
+    if (!create_element ("videocrop", &vcrop, &error)) {
+      g_warning
+          ("build_convert_frame_pipeline: Buffer has crop metadata but videocrop element is not found. Cropping will be disabled");
+    } else {
+      if (!create_element ("videoconvert", &csp2, &error))
+        goto no_elements;
+    }
+  }
+
   /* videoscale is here to correct for the pixel-aspect-ratio for us */
   GST_DEBUG ("creating elements");
   if (!create_element ("appsrc", &src, &error) ||
@@ -133,15 +144,42 @@
 
   GST_DEBUG ("adding elements");
   gst_bin_add_many (GST_BIN (pipeline), src, csp, vscale, sink, NULL);
+  if (vcrop)
+    gst_bin_add_many (GST_BIN (pipeline), vcrop, csp2, NULL);
 
   /* set caps */
   g_object_set (src, "caps", from_caps, NULL);
+  if (vcrop) {
+    gst_video_info_from_caps (&info, from_caps);
+    g_object_set (vcrop, "left", cmeta->x, NULL);
+    g_object_set (vcrop, "top", cmeta->y, NULL);
+    g_object_set (vcrop, "right", GST_VIDEO_INFO_WIDTH (&info) - cmeta->width,
+        NULL);
+    g_object_set (vcrop, "bottom",
+        GST_VIDEO_INFO_HEIGHT (&info) - cmeta->height, NULL);
+    GST_DEBUG ("crop meta [x,y,width,height]: %d %d %d %d", cmeta->x, cmeta->y,
+        cmeta->width, cmeta->height);
+  }
   g_object_set (sink, "caps", to_caps, NULL);
 
   /* FIXME: linking is still way too expensive, profile this properly */
-  GST_DEBUG ("linking src->csp");
-  if (!gst_element_link_pads (src, "src", csp, "sink"))
-    goto link_failed;
+  if (vcrop) {
+    GST_DEBUG ("linking src->csp2");
+    if (!gst_element_link_pads (src, "src", csp2, "sink"))
+      goto link_failed;
+
+    GST_DEBUG ("linking csp2->vcrop");
+    if (!gst_element_link_pads (csp2, "src", vcrop, "sink"))
+      goto link_failed;
+
+    GST_DEBUG ("linking vcrop->csp");
+    if (!gst_element_link_pads (vcrop, "src", csp, "sink"))
+      goto link_failed;
+  } else {
+    GST_DEBUG ("linking src->csp");
+    if (!gst_element_link_pads (src, "src", csp, "sink"))
+      goto link_failed;
+  }
 
   GST_DEBUG ("linking csp->vscale");
   if (!gst_element_link_pads_full (csp, "src", vscale, "sink",
@@ -193,8 +231,12 @@
   {
     if (src)
       gst_object_unref (src);
+    if (vcrop)
+      gst_object_unref (vcrop);
     if (csp)
       gst_object_unref (csp);
+    if (csp2)
+      gst_object_unref (csp2);
     if (vscale)
       gst_object_unref (vscale);
     if (sink)
@@ -209,7 +251,11 @@
 no_pipeline:
   {
     gst_object_unref (src);
+    if (vcrop)
+      gst_object_unref (vcrop);
     gst_object_unref (csp);
+    if (csp2)
+      gst_object_unref (csp2);
     gst_object_unref (vscale);
     gst_object_unref (sink);
 
@@ -282,7 +328,8 @@
   }
 
   pipeline =
-      build_convert_frame_pipeline (&src, &sink, from_caps, to_caps_copy, &err);
+      build_convert_frame_pipeline (&src, &sink, from_caps,
+      gst_buffer_get_video_crop_meta (buf), to_caps_copy, &err);
   if (!pipeline)
     goto no_pipeline;
 
@@ -646,8 +693,8 @@
   }
 
   pipeline =
-      build_convert_frame_pipeline (&src, &sink, from_caps, to_caps_copy,
-      &error);
+      build_convert_frame_pipeline (&src, &sink, from_caps,
+      gst_buffer_get_video_crop_meta (buf), to_caps_copy, &error);
   if (!pipeline)
     goto no_pipeline;
 
diff --git a/gst-libs/gst/video/gstvideoaffinetransformationmeta.c b/gst-libs/gst/video/gstvideoaffinetransformationmeta.c
new file mode 100644
index 0000000..c485310
--- /dev/null
+++ b/gst-libs/gst/video/gstvideoaffinetransformationmeta.c
@@ -0,0 +1,152 @@
+/* GStreamer
+ * Copyright (C) <2014> Collabora Ltd.
+ *   Author: Matthieu Bouron <matthieu.bouron@gmail.com>
+ * Copyright (C) 2015, Matthew Waters <matthew@centricular.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#include "gstvideoaffinetransformationmeta.h"
+
+#include <string.h>
+
+GType
+gst_video_affine_transformation_meta_api_get_type (void)
+{
+  static volatile GType type = 0;
+  static const gchar *tags[] =
+      { GST_META_TAG_VIDEO_STR, GST_META_TAG_VIDEO_ORIENTATION_STR,
+    GST_META_TAG_VIDEO_ORIENTATION_STR, NULL
+  };
+
+  if (g_once_init_enter (&type)) {
+    GType _type =
+        gst_meta_api_type_register ("GstVideoAffineTransformationAPI", tags);
+    g_once_init_leave (&type, _type);
+  }
+  return type;
+}
+
+static gboolean
+gst_video_affine_transformation_meta_transform (GstBuffer * dest,
+    GstMeta * meta, GstBuffer * buffer, GQuark type, gpointer data)
+{
+  GstVideoAffineTransformationMeta *dmeta, *smeta;
+
+  smeta = (GstVideoAffineTransformationMeta *) meta;
+
+  if (GST_META_TRANSFORM_IS_COPY (type)) {
+    dmeta =
+        (GstVideoAffineTransformationMeta *) gst_buffer_add_meta (dest,
+        GST_VIDEO_AFFINE_TRANSFORMATION_META_INFO, NULL);
+
+    if (!dmeta)
+      return FALSE;
+
+    memcpy (dmeta->matrix, smeta->matrix, sizeof (dmeta->matrix[0]) * 16);
+  }
+  return TRUE;
+}
+
+static gboolean
+gst_video_affine_transformation_meta_init (GstMeta * meta, gpointer params,
+    GstBuffer * buffer)
+{
+  GstVideoAffineTransformationMeta *af_meta =
+      (GstVideoAffineTransformationMeta *) meta;
+  gfloat matrix[] = {
+    1.0f, 0.0f, 0.0f, 0.0f,
+    0.0f, 1.0f, 0.0f, 0.0f,
+    0.0f, 0.0f, 1.0f, 0.0f,
+    0.0f, 0.0f, 0.0f, 1.0f
+  };
+
+  memcpy (af_meta->matrix, matrix, sizeof (matrix[0]) * 16);
+
+  return TRUE;
+}
+
+const GstMetaInfo *
+gst_video_affine_transformation_meta_get_info (void)
+{
+  static const GstMetaInfo *info = NULL;
+
+  if (g_once_init_enter (&info)) {
+    const GstMetaInfo *meta =
+        gst_meta_register (GST_VIDEO_AFFINE_TRANSFORMATION_META_API_TYPE,
+        "GstVideoAffineTransformationMeta",
+        sizeof (GstVideoAffineTransformationMeta),
+        gst_video_affine_transformation_meta_init,
+        NULL,
+        gst_video_affine_transformation_meta_transform);
+    g_once_init_leave (&info, meta);
+  }
+  return info;
+}
+
+/**
+ * gst_buffer_add_video_affine_transformation_meta
+ * @buffer: a #GstBuffer
+ *
+ * Attaches GstVideoAffineTransformationMeta metadata to @buffer with
+ * the given parameters.
+ *
+ * Returns: the #GstVideoAffineTransformationMeta on @buffer.
+ *
+ * Since: 1.8
+ */
+GstVideoAffineTransformationMeta *
+gst_buffer_add_video_affine_transformation_meta (GstBuffer * buffer)
+{
+  GstVideoAffineTransformationMeta *meta;
+
+  g_return_val_if_fail (buffer != NULL, NULL);
+
+  meta =
+      (GstVideoAffineTransformationMeta *) gst_buffer_add_meta (buffer,
+      GST_VIDEO_AFFINE_TRANSFORMATION_META_INFO, NULL);
+
+  if (!meta)
+    return NULL;
+
+  return meta;
+}
+
+/**
+ * gst_video_affine_transformation_meta_apply_matrix:
+ * @meta: a #GstVideoAffineTransformationMeta
+ * @matrix: a 4x4 transformation matrix to be applied
+ *
+ * Apply a transformation using the given 4x4 transformation matrix
+ *
+ * Since: 1.8
+ */
+void gst_video_affine_transformation_meta_apply_matrix
+    (GstVideoAffineTransformationMeta * meta, const gfloat matrix[16])
+{
+  gfloat res[16] = { 0.0f };
+  int i, j, k;
+
+  for (i = 0; i < 4; i++) {
+    for (j = 0; j < 4; j++) {
+      for (k = 0; k < 4; k++) {
+        res[i + (j * 4)] += meta->matrix[i + (k * 4)] * matrix[k + (j * 4)];
+      }
+    }
+  }
+
+  memcpy (meta->matrix, res, sizeof (meta->matrix[0]) * 16);
+}
diff --git a/gst-libs/gst/video/gstvideoaffinetransformationmeta.h b/gst-libs/gst/video/gstvideoaffinetransformationmeta.h
new file mode 100644
index 0000000..3838a01
--- /dev/null
+++ b/gst-libs/gst/video/gstvideoaffinetransformationmeta.h
@@ -0,0 +1,70 @@
+/* GStreamer
+ * Copyright (C) Collabora Ltd.
+ *   Author: Matthieu Bouron <matthieu.bouron@collabora.com>
+ * Copyright (C) 2015, Matthew Waters <matthew@centricular.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifndef __GST_VIDEO_AFFINE_TRANSFORMATION_META_H__
+#define __GST_VIDEO_AFFINE_TRANSFORMATION_META_H__
+
+#include <gst/gst.h>
+#include <gst/video/video.h>
+
+G_BEGIN_DECLS
+
+#define GST_VIDEO_AFFINE_TRANSFORMATION_META_API_TYPE (gst_video_affine_transformation_meta_api_get_type())
+#define GST_VIDEO_AFFINE_TRANSFORMATION_META_INFO  (gst_video_affine_transformation_meta_get_info())
+
+typedef struct _GstVideoAffineTransformationMeta GstVideoAffineTransformationMeta;
+typedef gboolean (*GstVideoAffineTransformationGetMatrix) (GstVideoAffineTransformationMeta * meta, gfloat * matrix);
+
+#define GST_CAPS_FEATURE_META_GST_VIDEO_AFFINE_TRANSFORMATION_META "meta:GstVideoAffineTransformation"
+#define GST_BUFFER_POOL_OPTION_VIDEO_AFFINE_TRANSFORMATION_META "GstBufferPoolOptionVideoAffineTransformation"
+
+/**
+ * GstVideoAffineTransformation:
+ * @meta: parent #GstMeta
+ * @matrix: the column-major 4x4 transformation matrix
+ *
+ * Extra buffer metadata for performing an affine transformation using a 4x4
+ * matrix. The transformation matrix can be composed with
+ * gst_video_affine_transformation_meta_apply_matrix().
+ *
+ * Since: 1.8
+ */
+
+struct _GstVideoAffineTransformationMeta
+{
+  GstMeta meta;
+
+  gfloat matrix[16];
+};
+
+GType gst_video_affine_transformation_meta_api_get_type          (void);
+const GstMetaInfo *gst_video_affine_transformation_meta_get_info (void);
+
+#define gst_buffer_get_video_affine_transformation_meta(b) \
+    ((GstVideoAffineTransformationMeta *)gst_buffer_get_meta((b),GST_VIDEO_AFFINE_TRANSFORMATION_META_API_TYPE))
+GstVideoAffineTransformationMeta *gst_buffer_add_video_affine_transformation_meta (GstBuffer * buffer);
+
+void gst_video_affine_transformation_meta_apply_matrix                           (GstVideoAffineTransformationMeta * meta,
+                                                                                  const gfloat matrix[16]);
+
+G_END_DECLS
+
+#endif /* __GST_VIDEO_AFFINE_TRANSFORMATION_META_H__ */
diff --git a/gst-libs/gst/video/gstvideodecoder.c b/gst-libs/gst/video/gstvideodecoder.c
index f8a5869..ff8a58d 100644
--- a/gst-libs/gst/video/gstvideodecoder.c
+++ b/gst-libs/gst/video/gstvideodecoder.c
@@ -1630,8 +1630,8 @@
       GST_OBJECT_UNLOCK (decoder);
 
       GST_DEBUG_OBJECT (decoder,
-          "got QoS %" GST_TIME_FORMAT ", %" G_GINT64_FORMAT ", %g",
-          GST_TIME_ARGS (timestamp), diff, proportion);
+          "got QoS %" GST_TIME_FORMAT ", %" GST_STIME_FORMAT ", %g",
+          GST_TIME_ARGS (timestamp), GST_STIME_ARGS (diff), proportion);
 
       res = gst_pad_push_event (decoder->sinkpad, event);
       break;
@@ -2125,6 +2125,8 @@
     priv->base_picture_number = 0;
 
     if (priv->pool) {
+      GST_DEBUG_OBJECT (decoder, "deactivate pool %" GST_PTR_FORMAT,
+          priv->pool);
       gst_buffer_pool_set_active (priv->pool, FALSE);
       gst_object_unref (priv->pool);
       priv->pool = NULL;
@@ -2697,9 +2699,10 @@
   if (GST_CLOCK_TIME_IS_VALID (frame->pts)) {
     if (frame->pts != priv->base_timestamp) {
       GST_DEBUG_OBJECT (decoder,
-          "sync timestamp %" GST_TIME_FORMAT " diff %" GST_TIME_FORMAT,
+          "sync timestamp %" GST_TIME_FORMAT " diff %" GST_STIME_FORMAT,
           GST_TIME_ARGS (frame->pts),
-          GST_TIME_ARGS (frame->pts - decoder->output_segment.start));
+          GST_STIME_ARGS (GST_CLOCK_DIFF (frame->pts,
+                  decoder->output_segment.start)));
       priv->base_timestamp = frame->pts;
       priv->base_picture_number = frame->decode_frame_number;
     }
@@ -3127,16 +3130,16 @@
     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.
+    /* 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;
+     * framerate is lower than 25fps */
+    stop = start + 40 * GST_MSECOND;
   }
 
   segment = &decoder->output_segment;
@@ -3622,6 +3625,9 @@
   gst_buffer_pool_config_set_params (config, outcaps, size, min, max);
   gst_buffer_pool_config_set_allocator (config, allocator, &params);
 
+  GST_DEBUG_OBJECT (decoder,
+      "setting config %" GST_PTR_FORMAT " in pool %" GST_PTR_FORMAT, config,
+      pool);
   if (!gst_buffer_pool_set_config (pool, config)) {
     config = gst_buffer_pool_get_config (pool);
 
@@ -3689,6 +3695,8 @@
 
   query = gst_query_new_allocation (caps, TRUE);
 
+  GST_DEBUG_OBJECT (decoder, "do query ALLOCATION");
+
   if (!gst_pad_peer_query (decoder->srcpad, query)) {
     GST_DEBUG_OBJECT (decoder, "didn't get downstream ALLOCATION hints");
   }
@@ -3732,11 +3740,14 @@
      * same bufferpool and deactivating it will make it fail.
      * Happens when a downstream element changes from passthrough to
      * non-passthrough and gets this same bufferpool to use */
+    GST_DEBUG_OBJECT (decoder, "unref pool %" GST_PTR_FORMAT,
+        decoder->priv->pool);
     gst_object_unref (decoder->priv->pool);
   }
   decoder->priv->pool = pool;
 
   /* and activate */
+  GST_DEBUG_OBJECT (decoder, "activate pool %" GST_PTR_FORMAT, pool);
   gst_buffer_pool_set_active (pool, TRUE);
 
 done:
@@ -3808,10 +3819,16 @@
   }
 
   prevcaps = gst_pad_get_current_caps (decoder->srcpad);
-  if (!prevcaps || !gst_caps_is_equal (prevcaps, state->caps))
+  if (!prevcaps || !gst_caps_is_equal (prevcaps, state->caps)) {
+    if (!prevcaps) {
+      GST_DEBUG_OBJECT (decoder, "decoder src pad has currently NULL caps");
+    }
     ret = gst_pad_set_caps (decoder->srcpad, state->caps);
-  else
+  } else {
     ret = TRUE;
+    GST_DEBUG_OBJECT (decoder,
+        "current src pad and output state caps are the same");
+  }
   if (prevcaps)
     gst_caps_unref (prevcaps);
 
@@ -4024,9 +4041,9 @@
     deadline = G_MAXINT64;
 
   GST_LOG_OBJECT (decoder, "earliest %" GST_TIME_FORMAT
-      ", frame deadline %" GST_TIME_FORMAT ", deadline %" GST_TIME_FORMAT,
+      ", frame deadline %" GST_TIME_FORMAT ", deadline %" GST_STIME_FORMAT,
       GST_TIME_ARGS (earliest_time), GST_TIME_ARGS (frame->deadline),
-      GST_TIME_ARGS (deadline));
+      GST_STIME_ARGS (deadline));
 
   GST_OBJECT_UNLOCK (decoder);
 
diff --git a/gst-libs/gst/video/gstvideodecoder.h b/gst-libs/gst/video/gstvideodecoder.h
index 7622477..34fa113 100644
--- a/gst-libs/gst/video/gstvideodecoder.h
+++ b/gst-libs/gst/video/gstvideodecoder.h
@@ -427,6 +427,10 @@
 void             gst_video_decoder_set_use_default_pad_acceptcaps (GstVideoDecoder * decoder,
                                                                    gboolean use);
 
+#ifdef G_DEFINE_AUTOPTR_CLEANUP_FUNC
+G_DEFINE_AUTOPTR_CLEANUP_FUNC(GstVideoDecoder, gst_object_unref)
+#endif
+
 G_END_DECLS
 
 #endif
diff --git a/gst-libs/gst/video/gstvideoencoder.h b/gst-libs/gst/video/gstvideoencoder.h
index ea70552..f01afc6 100644
--- a/gst-libs/gst/video/gstvideoencoder.h
+++ b/gst-libs/gst/video/gstvideoencoder.h
@@ -344,6 +344,10 @@
 
 void                 gst_video_encoder_set_min_pts(GstVideoEncoder *encoder, GstClockTime min_pts);
 
+#ifdef G_DEFINE_AUTOPTR_CLEANUP_FUNC
+G_DEFINE_AUTOPTR_CLEANUP_FUNC(GstVideoEncoder, gst_object_unref)
+#endif
+
 G_END_DECLS
 
 #endif
diff --git a/gst-libs/gst/video/gstvideofilter.h b/gst-libs/gst/video/gstvideofilter.h
index 11ca44f..e64d533 100644
--- a/gst-libs/gst/video/gstvideofilter.h
+++ b/gst-libs/gst/video/gstvideofilter.h
@@ -81,6 +81,10 @@
 
 GType gst_video_filter_get_type (void);
 
+#ifdef G_DEFINE_AUTOPTR_CLEANUP_FUNC
+G_DEFINE_AUTOPTR_CLEANUP_FUNC(GstVideoFilter, gst_object_unref)
+#endif
+
 G_END_DECLS
 
 #endif /* __GST_VIDEO_FILTER_H__ */
diff --git a/gst-libs/gst/video/gstvideopool.h b/gst-libs/gst/video/gstvideopool.h
index 99f0863..d5a9de4 100644
--- a/gst-libs/gst/video/gstvideopool.h
+++ b/gst-libs/gst/video/gstvideopool.h
@@ -75,6 +75,10 @@
 
 GstBufferPool *   gst_video_buffer_pool_new           (void);
 
+#ifdef G_DEFINE_AUTOPTR_CLEANUP_FUNC
+G_DEFINE_AUTOPTR_CLEANUP_FUNC(GstVideoBufferPool, gst_object_unref)
+#endif
+
 G_END_DECLS
 
 #endif /* __GST_VIDEO_POOL_H__ */
diff --git a/gst-libs/gst/video/gstvideosink.h b/gst-libs/gst/video/gstvideosink.h
index 23b97db..cc57be9 100644
--- a/gst-libs/gst/video/gstvideosink.h
+++ b/gst-libs/gst/video/gstvideosink.h
@@ -125,6 +125,10 @@
 void gst_video_sink_center_rect (GstVideoRectangle src, GstVideoRectangle dst,
                                  GstVideoRectangle *result, gboolean scaling);
 
+#ifdef G_DEFINE_AUTOPTR_CLEANUP_FUNC
+G_DEFINE_AUTOPTR_CLEANUP_FUNC(GstVideoSink, gst_object_unref)
+#endif
+
 G_END_DECLS
 
 #endif  /* __GST_VIDEO_SINK_H__ */
diff --git a/gst-libs/gst/video/gstvideoutils.h b/gst-libs/gst/video/gstvideoutils.h
index 84399d4..deea0ee 100644
--- a/gst-libs/gst/video/gstvideoutils.h
+++ b/gst-libs/gst/video/gstvideoutils.h
@@ -277,6 +277,14 @@
 				                          GDestroyNotify notify);
 gpointer             gst_video_codec_frame_get_user_data (GstVideoCodecFrame *frame);
 
+#ifdef G_DEFINE_AUTOPTR_CLEANUP_FUNC
+G_DEFINE_AUTOPTR_CLEANUP_FUNC(GstVideoCodecFrame, gst_video_codec_frame_unref)
+#endif
+
+#ifdef G_DEFINE_AUTOPTR_CLEANUP_FUNC
+G_DEFINE_AUTOPTR_CLEANUP_FUNC(GstVideoCodecState, gst_video_codec_state_unref)
+#endif
+
 G_END_DECLS
 
 #endif
diff --git a/gst-libs/gst/video/video-blend.c b/gst-libs/gst/video/video-blend.c
index 7a1380b..8dc65c5 100644
--- a/gst-libs/gst/video/video-blend.c
+++ b/gst-libs/gst/video/video-blend.c
@@ -136,16 +136,6 @@
   }
 }
 
-#define BLEND00(ret, alpha, v0, v1) \
-G_STMT_START { \
-  ret = (v0 * alpha + v1 * (255 - alpha)) / 255; \
-} G_STMT_END
-
-#define BLEND10(ret, alpha, v0, v1) \
-G_STMT_START { \
-  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
@@ -248,6 +238,41 @@
   g_free (tmpbuf);
 }
 
+/*
+ * A OVER B alpha compositing operation, with:
+ *  alphaG: global alpha to apply on the source color
+ *     -> only needed for premultiplied source
+ *  alphaA: source pixel alpha
+ *  colorA: source pixel color
+ *  alphaB: destination pixel alpha
+ *  colorB: destination pixel color
+ *  alphaD: blended pixel alpha
+ *     -> only needed for premultiplied destination
+ */
+
+/* Source non-premultiplied, Destination non-premultiplied */
+#define OVER00(alphaG, alphaA, colorA, alphaB, colorB, alphaD) \
+  ((colorA * alphaA + colorB * alphaB * (255 - alphaA) / 255) / alphaD)
+
+/* Source premultiplied, Destination non-premultiplied */
+#define OVER10(alphaG, alphaA, colorA, alphaB, colorB, alphaD) \
+  ((colorA * alphaG + colorB * alphaB * (255 - alphaA) / 255) / alphaD)
+
+/* Source non-premultiplied, Destination premultiplied */
+#define OVER01(alphaG, alphaA, colorA, alphaB, colorB, alphaD) \
+  ((colorA * alphaA + colorB * (255 - alphaA)) / 255)
+
+/* Source premultiplied, Destination premultiplied */
+#define OVER11(alphaG, alphaA, colorA, alphaB, colorB, alphaD) \
+  ((colorA * alphaG + colorB * (255 - alphaA)) / 255)
+
+#define BLENDC(op, global_alpha, aa, ca, ab, cb, dest_alpha) \
+G_STMT_START { \
+  int c = op(global_alpha, aa, ca, ab, cb, dest_alpha); \
+  cb = MIN(c, 255); \
+} G_STMT_END
+
+
 /**
  * gst_video_blend:
  * @dest: The #GstVideoFrame where to blend @src in
@@ -273,17 +298,13 @@
   g_assert (dest != NULL);
   g_assert (src != NULL);
 
-  global_alpha_val = 256.0 * global_alpha;
+  global_alpha_val = 255.0 * global_alpha;
 
   dest_premultiplied_alpha =
       GST_VIDEO_INFO_FLAGS (&dest->info) & GST_VIDEO_FLAG_PREMULTIPLIED_ALPHA;
   src_premultiplied_alpha =
       GST_VIDEO_INFO_FLAGS (&src->info) & GST_VIDEO_FLAG_PREMULTIPLIED_ALPHA;
 
-  /* we do no support writing to premultiplied alpha, though that should
-     just be a matter of adding blenders below (BLEND01 and BLEND11) */
-  g_return_val_if_fail (!dest_premultiplied_alpha, FALSE);
-
   src_width = GST_VIDEO_FRAME_WIDTH (src);
   src_height = GST_VIDEO_FRAME_HEIGHT (src);
 
@@ -372,40 +393,47 @@
 
     matrix (tmpsrcline, src_width);
 
-    /* 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)                                  \
-  do {                                                                            \
-    for (j = 0; j < src_width * 4; j += 4) {                                      \
-      guint8 alpha;                                                               \
-                                                                                  \
-      alpha = (tmpsrcline[j] * alpha_val) / alpha_scale;                          \
-                                                                                  \
-      blender (tmpdestline[j + 1], alpha, tmpsrcline[j + 1], tmpdestline[j + 1]); \
-      blender (tmpdestline[j + 2], alpha, tmpsrcline[j + 2], tmpdestline[j + 2]); \
-      blender (tmpdestline[j + 3], alpha, tmpsrcline[j + 3], tmpdestline[j + 3]); \
-    }                                                                             \
-  } while(0)
+#define BLENDLOOP(op, alpha_val)                                                              \
+  G_STMT_START {                                                                              \
+    for (j = 0; j < src_width * 4; j += 4) {                                                  \
+      guint8 asrc, adst;                                                                      \
+      gint final_alpha;                                                                       \
+                                                                                              \
+      asrc = tmpsrcline[j] * alpha_val / 255;                                                 \
+      if (!asrc)                                                                              \
+        continue;                                                                             \
+                                                                                              \
+      adst = tmpdestline[j];                                                                  \
+      final_alpha = asrc + adst * (255 - asrc) / 255;                                         \
+      tmpdestline[j] = final_alpha;                                                           \
+      if (final_alpha == 0)                                                                   \
+        final_alpha = 1;                                                                      \
+                                                                                              \
+      BLENDC (op, alpha_val, asrc, tmpsrcline[j + 1], adst, tmpdestline[j + 1], final_alpha); \
+      BLENDC (op, alpha_val, asrc, tmpsrcline[j + 2], adst, tmpdestline[j + 2], final_alpha); \
+      BLENDC (op, alpha_val, asrc, tmpsrcline[j + 3], adst, tmpdestline[j + 3], final_alpha); \
+    }                                                                                         \
+  } G_STMT_END
 
     if (G_LIKELY (global_alpha == 1.0)) {
       if (src_premultiplied_alpha && dest_premultiplied_alpha) {
-        /* BLENDLOOP (BLEND11, 1, 1); */
+        BLENDLOOP (OVER11, 255);
       } else if (!src_premultiplied_alpha && dest_premultiplied_alpha) {
-        /* BLENDLOOP (BLEND01, 1, 1); */
+        BLENDLOOP (OVER01, 255);
       } else if (src_premultiplied_alpha && !dest_premultiplied_alpha) {
-        BLENDLOOP (BLEND10, 1, 1);
+        BLENDLOOP (OVER10, 255);
       } else {
-        BLENDLOOP (BLEND00, 1, 1);
+        BLENDLOOP (OVER00, 255);
       }
     } else {
       if (src_premultiplied_alpha && dest_premultiplied_alpha) {
-        /* BLENDLOOP (BLEND11, global_alpha_val, 256); */
+        BLENDLOOP (OVER11, global_alpha_val);
       } else if (!src_premultiplied_alpha && dest_premultiplied_alpha) {
-        /* BLENDLOOP (BLEND01, global_alpha_val, 256); */
+        BLENDLOOP (OVER01, global_alpha_val);
       } else if (src_premultiplied_alpha && !dest_premultiplied_alpha) {
-        BLENDLOOP (BLEND10, global_alpha_val, 256);
+        BLENDLOOP (OVER10, global_alpha_val);
       } else {
-        BLENDLOOP (BLEND00, global_alpha_val, 256);
+        BLENDLOOP (OVER00, global_alpha_val);
       }
     }
 
diff --git a/gst-libs/gst/video/video-info.h b/gst-libs/gst/video/video-info.h
index 102328f..aaddea7 100644
--- a/gst-libs/gst/video/video-info.h
+++ b/gst-libs/gst/video/video-info.h
@@ -363,6 +363,10 @@
 void           gst_video_info_align       (GstVideoInfo * info, GstVideoAlignment * align);
 
 
+#ifdef G_DEFINE_AUTOPTR_CLEANUP_FUNC
+G_DEFINE_AUTOPTR_CLEANUP_FUNC(GstVideoInfo, gst_video_info_free)
+#endif
+
 G_END_DECLS
 
 #endif /* __GST_VIDEO_INFO_H__ */
diff --git a/gst-libs/gst/video/video-overlay-composition.h b/gst-libs/gst/video/video-overlay-composition.h
index 3b3e381..9e75538 100644
--- a/gst-libs/gst/video/video-overlay-composition.h
+++ b/gst-libs/gst/video/video-overlay-composition.h
@@ -295,6 +295,14 @@
 #define gst_buffer_remove_video_overlay_composition_meta(b,m) \
   gst_buffer_remove_meta((b),((GstMeta *) m))
 
+#ifdef G_DEFINE_AUTOPTR_CLEANUP_FUNC
+G_DEFINE_AUTOPTR_CLEANUP_FUNC(GstVideoOverlayComposition, gst_video_overlay_composition_unref)
+#endif
+
+#ifdef G_DEFINE_AUTOPTR_CLEANUP_FUNC
+G_DEFINE_AUTOPTR_CLEANUP_FUNC(GstVideoOverlayRectangle, gst_video_overlay_rectangle_unref)
+#endif
+
 G_END_DECLS
 
 #endif /* __GST_VIDEO_OVERLAY_COMPOSITION_H__ */
diff --git a/gst-plugins-base.doap b/gst-plugins-base.doap
index 8ec58f8..4ca4ae2 100644
--- a/gst-plugins-base.doap
+++ b/gst-plugins-base.doap
@@ -36,6 +36,16 @@
 
  <release>
   <Version>
+   <revision>1.7.1</revision>
+   <branch>master</branch>
+   <name></name>
+   <created>2015-12-24</created>
+   <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-base/gst-plugins-base-1.7.1.tar.xz" />
+  </Version>
+ </release>
+
+ <release>
+  <Version>
    <revision>1.6.2</revision>
    <branch>1.6</branch>
    <name></name>
diff --git a/gst-plugins-base.spec b/gst-plugins-base.spec
index 602c316..129c8ec 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.6.2
+Version: 	1.7.1
 Release: 	1.gst
 Summary: 	GStreamer streaming media framework plug-ins
 
diff --git a/gst/audioconvert/Makefile.am b/gst/audioconvert/Makefile.am
index 1e2672b..baca314 100644
--- a/gst/audioconvert/Makefile.am
+++ b/gst/audioconvert/Makefile.am
@@ -1,27 +1,16 @@
 plugin_LTLIBRARIES = libgstaudioconvert.la
 
-ORC_SOURCE=gstaudioconvertorc
-include $(top_srcdir)/common/orc.mak
-
 libgstaudioconvert_la_SOURCES = \
 	gstaudioconvert.c \
-	audioconvert.c \
-	gstchannelmix.c \
-	gstaudioquantize.c \
 	plugin.c
-nodist_libgstaudioconvert_la_SOURCES = $(ORC_NODIST_SOURCES)
 
-libgstaudioconvert_la_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_BASE_CFLAGS) $(GST_CFLAGS) $(ORC_CFLAGS)
+libgstaudioconvert_la_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_BASE_CFLAGS) $(GST_CFLAGS)
 libgstaudioconvert_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS)
 libgstaudioconvert_la_LIBADD = \
 	$(top_builddir)/gst-libs/gst/audio/libgstaudio-@GST_API_VERSION@.la \
-	$(GST_BASE_LIBS) $(GST_LIBS) $(ORC_LIBS) $(LIBM)
+	$(GST_BASE_LIBS) $(GST_LIBS) $(LIBM)
 libgstaudioconvert_la_LIBTOOLFLAGS = $(GST_PLUGIN_LIBTOOLFLAGS)
 
 noinst_HEADERS = \
 	gstaudioconvert.h \
-	audioconvert.h \
-	gstchannelmix.h \
-	gstaudioquantize.h \
-	gstfastrandom.h \
 	plugin.h
diff --git a/gst/audioconvert/Makefile.in b/gst/audioconvert/Makefile.in
index 518d4e8..3a5854a 100644
--- a/gst/audioconvert/Makefile.in
+++ b/gst/audioconvert/Makefile.in
@@ -14,28 +14,6 @@
 
 @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 = { \
@@ -187,17 +165,11 @@
 am__DEPENDENCIES_1 =
 libgstaudioconvert_la_DEPENDENCIES = $(top_builddir)/gst-libs/gst/audio/libgstaudio-@GST_API_VERSION@.la \
 	$(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
-	$(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1)
+	$(am__DEPENDENCIES_1)
 am_libgstaudioconvert_la_OBJECTS =  \
 	libgstaudioconvert_la-gstaudioconvert.lo \
-	libgstaudioconvert_la-audioconvert.lo \
-	libgstaudioconvert_la-gstchannelmix.lo \
-	libgstaudioconvert_la-gstaudioquantize.lo \
 	libgstaudioconvert_la-plugin.lo
-am__objects_1 = libgstaudioconvert_la-tmp-orc.lo
-nodist_libgstaudioconvert_la_OBJECTS = $(am__objects_1)
-libgstaudioconvert_la_OBJECTS = $(am_libgstaudioconvert_la_OBJECTS) \
-	$(nodist_libgstaudioconvert_la_OBJECTS)
+libgstaudioconvert_la_OBJECTS = $(am_libgstaudioconvert_la_OBJECTS)
 AM_V_lt = $(am__v_lt_@AM_V@)
 am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
 am__v_lt_0 = --silent
@@ -240,8 +212,7 @@
 am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@)
 am__v_CCLD_0 = @echo "  CCLD    " $@;
 am__v_CCLD_1 = 
-SOURCES = $(libgstaudioconvert_la_SOURCES) \
-	$(nodist_libgstaudioconvert_la_SOURCES)
+SOURCES = $(libgstaudioconvert_la_SOURCES)
 DIST_SOURCES = $(libgstaudioconvert_la_SOURCES)
 am__can_run_installinfo = \
   case $$AM_UPDATE_INFO_DIR in \
@@ -268,8 +239,7 @@
   done | $(am__uniquify_input)`
 ETAGS = etags
 CTAGS = ctags
-am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/common/orc.mak \
-	$(top_srcdir)/depcomp
+am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp
 DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
 ACLOCAL = @ACLOCAL@
 ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@
@@ -566,45 +536,26 @@
 top_builddir = @top_builddir@
 top_srcdir = @top_srcdir@
 plugin_LTLIBRARIES = libgstaudioconvert.la
-ORC_SOURCE = gstaudioconvertorc
-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     $@";
 libgstaudioconvert_la_SOURCES = \
 	gstaudioconvert.c \
-	audioconvert.c \
-	gstchannelmix.c \
-	gstaudioquantize.c \
 	plugin.c
 
-nodist_libgstaudioconvert_la_SOURCES = $(ORC_NODIST_SOURCES)
-libgstaudioconvert_la_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_BASE_CFLAGS) $(GST_CFLAGS) $(ORC_CFLAGS)
+libgstaudioconvert_la_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_BASE_CFLAGS) $(GST_CFLAGS)
 libgstaudioconvert_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS)
 libgstaudioconvert_la_LIBADD = \
 	$(top_builddir)/gst-libs/gst/audio/libgstaudio-@GST_API_VERSION@.la \
-	$(GST_BASE_LIBS) $(GST_LIBS) $(ORC_LIBS) $(LIBM)
+	$(GST_BASE_LIBS) $(GST_LIBS) $(LIBM)
 
 libgstaudioconvert_la_LIBTOOLFLAGS = $(GST_PLUGIN_LIBTOOLFLAGS)
 noinst_HEADERS = \
 	gstaudioconvert.h \
-	audioconvert.h \
-	gstchannelmix.h \
-	gstaudioquantize.h \
-	gstfastrandom.h \
 	plugin.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*) \
@@ -624,7 +575,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 $(am__empty):
 
 $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
 	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
@@ -679,12 +629,8 @@
 distclean-compile:
 	-rm -f *.tab.c
 
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstaudioconvert_la-audioconvert.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstaudioconvert_la-gstaudioconvert.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstaudioconvert_la-gstaudioquantize.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstaudioconvert_la-gstchannelmix.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstaudioconvert_la-plugin.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstaudioconvert_la-tmp-orc.Plo@am__quote@
 
 .c.o:
 @am__fastdepCC_TRUE@	$(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\
@@ -717,27 +663,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 $(libgstaudioconvert_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstaudioconvert_la_CFLAGS) $(CFLAGS) -c -o libgstaudioconvert_la-gstaudioconvert.lo `test -f 'gstaudioconvert.c' || echo '$(srcdir)/'`gstaudioconvert.c
 
-libgstaudioconvert_la-audioconvert.lo: audioconvert.c
-@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstaudioconvert_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstaudioconvert_la_CFLAGS) $(CFLAGS) -MT libgstaudioconvert_la-audioconvert.lo -MD -MP -MF $(DEPDIR)/libgstaudioconvert_la-audioconvert.Tpo -c -o libgstaudioconvert_la-audioconvert.lo `test -f 'audioconvert.c' || echo '$(srcdir)/'`audioconvert.c
-@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstaudioconvert_la-audioconvert.Tpo $(DEPDIR)/libgstaudioconvert_la-audioconvert.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='audioconvert.c' object='libgstaudioconvert_la-audioconvert.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 $(libgstaudioconvert_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstaudioconvert_la_CFLAGS) $(CFLAGS) -c -o libgstaudioconvert_la-audioconvert.lo `test -f 'audioconvert.c' || echo '$(srcdir)/'`audioconvert.c
-
-libgstaudioconvert_la-gstchannelmix.lo: gstchannelmix.c
-@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstaudioconvert_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstaudioconvert_la_CFLAGS) $(CFLAGS) -MT libgstaudioconvert_la-gstchannelmix.lo -MD -MP -MF $(DEPDIR)/libgstaudioconvert_la-gstchannelmix.Tpo -c -o libgstaudioconvert_la-gstchannelmix.lo `test -f 'gstchannelmix.c' || echo '$(srcdir)/'`gstchannelmix.c
-@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstaudioconvert_la-gstchannelmix.Tpo $(DEPDIR)/libgstaudioconvert_la-gstchannelmix.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='gstchannelmix.c' object='libgstaudioconvert_la-gstchannelmix.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 $(libgstaudioconvert_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstaudioconvert_la_CFLAGS) $(CFLAGS) -c -o libgstaudioconvert_la-gstchannelmix.lo `test -f 'gstchannelmix.c' || echo '$(srcdir)/'`gstchannelmix.c
-
-libgstaudioconvert_la-gstaudioquantize.lo: gstaudioquantize.c
-@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstaudioconvert_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstaudioconvert_la_CFLAGS) $(CFLAGS) -MT libgstaudioconvert_la-gstaudioquantize.lo -MD -MP -MF $(DEPDIR)/libgstaudioconvert_la-gstaudioquantize.Tpo -c -o libgstaudioconvert_la-gstaudioquantize.lo `test -f 'gstaudioquantize.c' || echo '$(srcdir)/'`gstaudioquantize.c
-@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstaudioconvert_la-gstaudioquantize.Tpo $(DEPDIR)/libgstaudioconvert_la-gstaudioquantize.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='gstaudioquantize.c' object='libgstaudioconvert_la-gstaudioquantize.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 $(libgstaudioconvert_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstaudioconvert_la_CFLAGS) $(CFLAGS) -c -o libgstaudioconvert_la-gstaudioquantize.lo `test -f 'gstaudioquantize.c' || echo '$(srcdir)/'`gstaudioquantize.c
-
 libgstaudioconvert_la-plugin.lo: plugin.c
 @am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstaudioconvert_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstaudioconvert_la_CFLAGS) $(CFLAGS) -MT libgstaudioconvert_la-plugin.lo -MD -MP -MF $(DEPDIR)/libgstaudioconvert_la-plugin.Tpo -c -o libgstaudioconvert_la-plugin.lo `test -f 'plugin.c' || echo '$(srcdir)/'`plugin.c
 @am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstaudioconvert_la-plugin.Tpo $(DEPDIR)/libgstaudioconvert_la-plugin.Plo
@@ -745,13 +670,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 $(libgstaudioconvert_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstaudioconvert_la_CFLAGS) $(CFLAGS) -c -o libgstaudioconvert_la-plugin.lo `test -f 'plugin.c' || echo '$(srcdir)/'`plugin.c
 
-libgstaudioconvert_la-tmp-orc.lo: tmp-orc.c
-@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstaudioconvert_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstaudioconvert_la_CFLAGS) $(CFLAGS) -MT libgstaudioconvert_la-tmp-orc.lo -MD -MP -MF $(DEPDIR)/libgstaudioconvert_la-tmp-orc.Tpo -c -o libgstaudioconvert_la-tmp-orc.lo `test -f 'tmp-orc.c' || echo '$(srcdir)/'`tmp-orc.c
-@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libgstaudioconvert_la-tmp-orc.Tpo $(DEPDIR)/libgstaudioconvert_la-tmp-orc.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='tmp-orc.c' object='libgstaudioconvert_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 $(libgstaudioconvert_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstaudioconvert_la_CFLAGS) $(CFLAGS) -c -o libgstaudioconvert_la-tmp-orc.lo `test -f 'tmp-orc.c' || echo '$(srcdir)/'`tmp-orc.c
-
 mostlyclean-libtool:
 	-rm -f *.lo
 
@@ -840,19 +758,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
@@ -882,11 +795,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)
@@ -954,63 +866,26 @@
 
 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
-
 # 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
deleted file mode 100644
index f1a30fd..0000000
--- a/gst/audioconvert/audioconvert.c
+++ /dev/null
@@ -1,811 +0,0 @@
-/* GStreamer
- * Copyright (C) 2005 Wim Taymans <wim at fluendo dot com>
- *
- * audioconvert.c: Convert audio to different audio formats automatically
- *
- * 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 <math.h>
-#include <string.h>
-
-#include "gstchannelmix.h"
-#include "gstaudioquantize.h"
-#include "audioconvert.h"
-#include "gstaudioconvertorc.h"
-
-#if G_BYTE_ORDER == G_LITTLE_ENDIAN
-#define audio_convert_orc_unpack_u16_le audio_convert_orc_unpack_u16
-#define audio_convert_orc_unpack_u16_be audio_convert_orc_unpack_u16_swap
-#define audio_convert_orc_unpack_s16_le audio_convert_orc_unpack_s16
-#define audio_convert_orc_unpack_s16_be audio_convert_orc_unpack_s16_swap
-#define audio_convert_orc_unpack_u32_le audio_convert_orc_unpack_u32
-#define audio_convert_orc_unpack_u32_be audio_convert_orc_unpack_u32_swap
-#define audio_convert_orc_unpack_s32_le audio_convert_orc_unpack_s32
-#define audio_convert_orc_unpack_s32_be audio_convert_orc_unpack_s32_swap
-#define audio_convert_orc_unpack_float_le audio_convert_orc_unpack_float_s32
-#define audio_convert_orc_unpack_float_be audio_convert_orc_unpack_float_s32_swap
-#define audio_convert_orc_unpack_double_le audio_convert_orc_unpack_double_s32
-#define audio_convert_orc_unpack_double_be audio_convert_orc_unpack_double_s32_swap
-#define audio_convert_orc_unpack_float_hq_le audio_convert_orc_unpack_float_double
-#define audio_convert_orc_unpack_float_hq_be audio_convert_orc_unpack_float_double_swap
-#define audio_convert_orc_unpack_double_hq_le audio_convert_orc_unpack_double_double
-#define audio_convert_orc_unpack_double_hq_be audio_convert_orc_unpack_double_double_swap
-#define audio_convert_orc_unpack_u8_float audio_convert_orc_unpack_u8_double
-#define audio_convert_orc_unpack_u16_le_float audio_convert_orc_unpack_u16_double
-#define audio_convert_orc_unpack_u16_be_float audio_convert_orc_unpack_u16_double_swap
-#define audio_convert_orc_unpack_u32_le_float audio_convert_orc_unpack_u32_double
-#define audio_convert_orc_unpack_u32_be_float audio_convert_orc_unpack_u32_double_swap
-#define audio_convert_orc_unpack_s8_float audio_convert_orc_unpack_s8_double
-#define audio_convert_orc_unpack_s16_le_float audio_convert_orc_unpack_s16_double
-#define audio_convert_orc_unpack_s16_be_float audio_convert_orc_unpack_s16_double_swap
-#define audio_convert_orc_unpack_s32_le_float audio_convert_orc_unpack_s32_double
-#define audio_convert_orc_unpack_s32_be_float audio_convert_orc_unpack_s32_double_swap
-#define audio_convert_orc_pack_u8 audio_convert_orc_pack_u8
-#define audio_convert_orc_pack_u16_le audio_convert_orc_pack_u16
-#define audio_convert_orc_pack_u16_be audio_convert_orc_pack_u16_swap
-#define audio_convert_orc_pack_s16_le audio_convert_orc_pack_s16
-#define audio_convert_orc_pack_s16_be audio_convert_orc_pack_s16_swap
-#define audio_convert_orc_pack_u32_le audio_convert_orc_pack_u32
-#define audio_convert_orc_pack_u32_be audio_convert_orc_pack_u32_swap
-#define audio_convert_orc_pack_s32_le audio_convert_orc_pack_s32
-#define audio_convert_orc_pack_s32_be audio_convert_orc_pack_s32_swap
-#define audio_convert_orc_pack_float_le audio_convert_orc_pack_s32_float
-#define audio_convert_orc_pack_float_be audio_convert_orc_pack_s32_float_swap
-#define audio_convert_orc_pack_double_le audio_convert_orc_pack_s32_double
-#define audio_convert_orc_pack_double_be audio_convert_orc_pack_s32_double_swap
-#define audio_convert_orc_pack_float_hq_le audio_convert_orc_pack_double_float
-#define audio_convert_orc_pack_float_hq_be audio_convert_orc_pack_double_float_swap
-#define audio_convert_orc_pack_s8_float audio_convert_orc_pack_double_s8
-#define audio_convert_orc_pack_s16_le_float audio_convert_orc_pack_double_s16
-#define audio_convert_orc_pack_s16_be_float audio_convert_orc_pack_double_s16_swap
-#define audio_convert_orc_pack_s32_le_float audio_convert_orc_pack_double_s32
-#define audio_convert_orc_pack_s32_be_float audio_convert_orc_pack_double_s32_swap
-#define audio_convert_orc_pack_u8_float audio_convert_orc_pack_double_u8
-#define audio_convert_orc_pack_u16_le_float audio_convert_orc_pack_double_u16
-#define audio_convert_orc_pack_u16_be_float audio_convert_orc_pack_double_u16_swap
-#define audio_convert_orc_pack_u32_le_float audio_convert_orc_pack_double_u32
-#define audio_convert_orc_pack_u32_be_float audio_convert_orc_pack_double_u32_swap
-#else
-#define audio_convert_orc_unpack_u16_be audio_convert_orc_unpack_u16
-#define audio_convert_orc_unpack_u16_le audio_convert_orc_unpack_u16_swap
-#define audio_convert_orc_unpack_s16_be audio_convert_orc_unpack_s16
-#define audio_convert_orc_unpack_s16_le audio_convert_orc_unpack_s16_swap
-#define audio_convert_orc_unpack_u32_be audio_convert_orc_unpack_u32
-#define audio_convert_orc_unpack_u32_le audio_convert_orc_unpack_u32_swap
-#define audio_convert_orc_unpack_s32_be audio_convert_orc_unpack_s32
-#define audio_convert_orc_unpack_s32_le audio_convert_orc_unpack_s32_swap
-#define audio_convert_orc_unpack_float_be audio_convert_orc_unpack_float_s32
-#define audio_convert_orc_unpack_float_le audio_convert_orc_unpack_float_s32_swap
-#define audio_convert_orc_unpack_double_be audio_convert_orc_unpack_double_s32
-#define audio_convert_orc_unpack_double_le audio_convert_orc_unpack_double_s32_swap
-#define audio_convert_orc_unpack_float_hq_be audio_convert_orc_unpack_float_double
-#define audio_convert_orc_unpack_float_hq_le audio_convert_orc_unpack_float_double_swap
-#define audio_convert_orc_unpack_double_hq_be audio_convert_orc_unpack_double_double
-#define audio_convert_orc_unpack_double_hq_le audio_convert_orc_unpack_double_double_swap
-#define audio_convert_orc_unpack_u8_float audio_convert_orc_unpack_u8_double
-#define audio_convert_orc_unpack_u16_be_float audio_convert_orc_unpack_u16_double
-#define audio_convert_orc_unpack_u16_le_float audio_convert_orc_unpack_u16_double_swap
-#define audio_convert_orc_unpack_u32_be_float audio_convert_orc_unpack_u32_double
-#define audio_convert_orc_unpack_u32_le_float audio_convert_orc_unpack_u32_double_swap
-#define audio_convert_orc_unpack_s8_float audio_convert_orc_unpack_s8_double
-#define audio_convert_orc_unpack_s16_be_float audio_convert_orc_unpack_s16_double
-#define audio_convert_orc_unpack_s16_le_float audio_convert_orc_unpack_s16_double_swap
-#define audio_convert_orc_unpack_s32_be_float audio_convert_orc_unpack_s32_double
-#define audio_convert_orc_unpack_s32_le_float audio_convert_orc_unpack_s32_double_swap
-#define audio_convert_orc_pack_u8 audio_convert_orc_pack_u8
-#define audio_convert_orc_pack_u16_be audio_convert_orc_pack_u16
-#define audio_convert_orc_pack_u16_le audio_convert_orc_pack_u16_swap
-#define audio_convert_orc_pack_s16_be audio_convert_orc_pack_s16
-#define audio_convert_orc_pack_s16_le audio_convert_orc_pack_s16_swap
-#define audio_convert_orc_pack_u32_be audio_convert_orc_pack_u32
-#define audio_convert_orc_pack_u32_le audio_convert_orc_pack_u32_swap
-#define audio_convert_orc_pack_s32_be audio_convert_orc_pack_s32
-#define audio_convert_orc_pack_s32_le audio_convert_orc_pack_s32_swap
-#define audio_convert_orc_pack_float_be audio_convert_orc_pack_s32_float
-#define audio_convert_orc_pack_float_le audio_convert_orc_pack_s32_float_swap
-#define audio_convert_orc_pack_double_be audio_convert_orc_pack_s32_double
-#define audio_convert_orc_pack_double_le audio_convert_orc_pack_s32_double_swap
-#define audio_convert_orc_pack_float_hq_be audio_convert_orc_pack_double_float
-#define audio_convert_orc_pack_float_hq_le audio_convert_orc_pack_double_float_swap
-#define audio_convert_orc_pack_s8_float audio_convert_orc_pack_double_s8
-#define audio_convert_orc_pack_s16_be_float audio_convert_orc_pack_double_s16
-#define audio_convert_orc_pack_s16_le_float audio_convert_orc_pack_double_s16_swap
-#define audio_convert_orc_pack_s32_be_float audio_convert_orc_pack_double_s32
-#define audio_convert_orc_pack_s32_le_float audio_convert_orc_pack_double_s32_swap
-#define audio_convert_orc_pack_u8_float audio_convert_orc_pack_double_u8
-#define audio_convert_orc_pack_u16_be_float audio_convert_orc_pack_double_u16
-#define audio_convert_orc_pack_u16_le_float audio_convert_orc_pack_double_u16_swap
-#define audio_convert_orc_pack_u32_be_float audio_convert_orc_pack_double_u32
-#define audio_convert_orc_pack_u32_le_float audio_convert_orc_pack_double_u32_swap
-#endif
-
-/* sign bit in the intermediate format */
-#define SIGNED  (1U<<31)
-
-/*** 
- * unpack code
- */
-#define MAKE_UNPACK_FUNC_NAME(name)                                     \
-audio_convert_unpack_##name
-#define MAKE_ORC_UNPACK_FUNC_NAME(name)                                 \
-audio_convert_orc_unpack_##name
-
-/* unpack from integer to signed integer 32 */
-#define MAKE_UNPACK_FUNC_II(name, stride, sign, READ_FUNC)              \
-static void                                                             \
-MAKE_UNPACK_FUNC_NAME (name) (guint8 *src, gint32 *dst,                 \
-        gint scale, gint count)                                         \
-{                                                                       \
-  for (;count; count--) {                                               \
-    *dst++ = (((gint32) READ_FUNC (src)) << scale) ^ (sign);            \
-    src+=stride;                                                        \
-  }                                                                     \
-}
-
-/* unpack from integer to signed integer 32 with orc */
-#define MAKE_UNPACK_FUNC_ORC_II(name, stride, sign, READ_FUNC)             \
-static void                                                             \
-MAKE_UNPACK_FUNC_NAME (name) (guint8 *src, gint32 *dst,                 \
-        gint scale, gint count)                                         \
-{                                                                       \
-  MAKE_ORC_UNPACK_FUNC_NAME (name) (dst, src, scale, count);            \
-}
-
-/* unpack from float to signed integer 32 */
-#define MAKE_UNPACK_FUNC_FI(name, type, READ_FUNC)                            \
-static void                                                                   \
-MAKE_UNPACK_FUNC_NAME (name) (type * src, gint32 * dst, gint s, gint count)   \
-{                                                                             \
-  gdouble temp;                                                               \
-                                                                              \
-  for (; count; count--) {                                                    \
-    /* blow up to 32 bit */                                                   \
-    temp = floor ((READ_FUNC (*src++) * 2147483647.0) + 0.5);                 \
-    *dst++ = (gint32) CLAMP (temp, G_MININT32, G_MAXINT32);                   \
-  }                                                                           \
-}
-
-/* unpack from float to signed integer 32 with orc */
-#define MAKE_UNPACK_FUNC_ORC_FI(name, type, READ_FUNC)                        \
-static void                                                                   \
-MAKE_UNPACK_FUNC_NAME (name) (type * src, gint32 * dst, gint s, gint count)   \
-{                                                                             \
-  MAKE_ORC_UNPACK_FUNC_NAME (name) ((guint32 *) dst, src, count);                         \
-}
-
-/* unpack from float to float 64 (double) */
-#define MAKE_UNPACK_FUNC_FF(name, type, FUNC)                                 \
-static void                                                                   \
-MAKE_UNPACK_FUNC_NAME (name) (type * src, gdouble * dst, gint s,              \
-    gint count)                                                               \
-{                                                                             \
-  for (; count; count--)                                                      \
-    *dst++ = (gdouble) FUNC (*src++);                                         \
-}
-
-/* unpack from float to float 64 (double) with orc */
-#define MAKE_UNPACK_FUNC_ORC_FF(name, type, FUNC)                                 \
-static void                                                                   \
-MAKE_UNPACK_FUNC_NAME (name) (type * src, gdouble * dst, gint s,              \
-    gint count)                                                               \
-{                                                                             \
-  MAKE_ORC_UNPACK_FUNC_NAME (name) ((gdouble *) dst, src, count);             \
-}
-
-/* unpack from int to float 64 (double) */
-#define MAKE_UNPACK_FUNC_IF(name, stride, sign, READ_FUNC)                    \
-static void                                                                   \
-MAKE_UNPACK_FUNC_NAME (name) (guint8 * src, gdouble * dst, gint scale,        \
-    gint count)                                                               \
-{                                                                             \
-  gdouble tmp;                                                                \
-  for (; count; count--) {                                                    \
-    tmp = (gdouble) ((((gint32) READ_FUNC (src)) << scale) ^ (sign));         \
-    *dst++ = tmp * (1.0 / 2147483647.0);                                      \
-    src += stride;                                                            \
-  }                                                                           \
-}
-
-#define MAKE_UNPACK_FUNC_ORC_IF(name, stride, sign, READ_FUNC)          \
-static void                                                             \
-MAKE_UNPACK_FUNC_NAME (name) (guint8 *src, gdouble *dst,                \
-        gint scale, gint count)                                         \
-{                                                                       \
-  MAKE_ORC_UNPACK_FUNC_NAME (name) (dst, src, scale, count);            \
-}
-
-#define READ8(p)          GST_READ_UINT8(p)
-#define READ16_FROM_LE(p) GST_READ_UINT16_LE (p)
-#define READ16_FROM_BE(p) GST_READ_UINT16_BE (p)
-#define READ24_FROM_LE(p) (p[0] | (p[1] << 8) | (p[2] << 16))
-#define READ24_FROM_BE(p) (p[2] | (p[1] << 8) | (p[0] << 16))
-#define READ32_FROM_LE(p) GST_READ_UINT32_LE (p)
-#define READ32_FROM_BE(p) GST_READ_UINT32_BE (p)
-
-
-
-MAKE_UNPACK_FUNC_ORC_II (u8, 1, SIGNED, READ8);
-MAKE_UNPACK_FUNC_ORC_II (s8, 1, 0, READ8);
-MAKE_UNPACK_FUNC_ORC_II (u16_le, 2, SIGNED, READ16_FROM_LE);
-MAKE_UNPACK_FUNC_ORC_II (s16_le, 2, 0, READ16_FROM_LE);
-MAKE_UNPACK_FUNC_ORC_II (u16_be, 2, SIGNED, READ16_FROM_BE);
-MAKE_UNPACK_FUNC_ORC_II (s16_be, 2, 0, READ16_FROM_BE);
-MAKE_UNPACK_FUNC_II (u24_le, 3, SIGNED, READ24_FROM_LE);
-MAKE_UNPACK_FUNC_II (s24_le, 3, 0, READ24_FROM_LE);
-MAKE_UNPACK_FUNC_II (u24_be, 3, SIGNED, READ24_FROM_BE);
-MAKE_UNPACK_FUNC_II (s24_be, 3, 0, READ24_FROM_BE);
-MAKE_UNPACK_FUNC_ORC_II (u32_le, 4, SIGNED, READ32_FROM_LE);
-MAKE_UNPACK_FUNC_ORC_II (s32_le, 4, 0, READ32_FROM_LE);
-MAKE_UNPACK_FUNC_ORC_II (u32_be, 4, SIGNED, READ32_FROM_BE);
-MAKE_UNPACK_FUNC_ORC_II (s32_be, 4, 0, READ32_FROM_BE);
-MAKE_UNPACK_FUNC_ORC_FI (float_le, gfloat, GFLOAT_FROM_LE);
-MAKE_UNPACK_FUNC_ORC_FI (float_be, gfloat, GFLOAT_FROM_BE);
-MAKE_UNPACK_FUNC_ORC_FI (double_le, gdouble, GDOUBLE_FROM_LE);
-MAKE_UNPACK_FUNC_ORC_FI (double_be, gdouble, GDOUBLE_FROM_BE);
-MAKE_UNPACK_FUNC_ORC_FF (float_hq_le, gfloat, GFLOAT_FROM_LE);
-MAKE_UNPACK_FUNC_ORC_FF (float_hq_be, gfloat, GFLOAT_FROM_BE);
-MAKE_UNPACK_FUNC_ORC_FF (double_hq_le, gdouble, GDOUBLE_FROM_LE);
-MAKE_UNPACK_FUNC_ORC_FF (double_hq_be, gdouble, GDOUBLE_FROM_BE);
-MAKE_UNPACK_FUNC_ORC_IF (u8_float, 1, SIGNED, READ8);
-MAKE_UNPACK_FUNC_ORC_IF (s8_float, 1, 0, READ8);
-MAKE_UNPACK_FUNC_ORC_IF (u16_le_float, 2, SIGNED, READ16_FROM_LE);
-MAKE_UNPACK_FUNC_ORC_IF (s16_le_float, 2, 0, READ16_FROM_LE);
-MAKE_UNPACK_FUNC_ORC_IF (u16_be_float, 2, SIGNED, READ16_FROM_BE);
-MAKE_UNPACK_FUNC_ORC_IF (s16_be_float, 2, 0, READ16_FROM_BE);
-MAKE_UNPACK_FUNC_IF (u24_le_float, 3, SIGNED, READ24_FROM_LE);
-MAKE_UNPACK_FUNC_IF (s24_le_float, 3, 0, READ24_FROM_LE);
-MAKE_UNPACK_FUNC_IF (u24_be_float, 3, SIGNED, READ24_FROM_BE);
-MAKE_UNPACK_FUNC_IF (s24_be_float, 3, 0, READ24_FROM_BE);
-MAKE_UNPACK_FUNC_ORC_IF (u32_le_float, 4, SIGNED, READ32_FROM_LE);
-MAKE_UNPACK_FUNC_ORC_IF (s32_le_float, 4, 0, READ32_FROM_LE);
-MAKE_UNPACK_FUNC_ORC_IF (u32_be_float, 4, SIGNED, READ32_FROM_BE);
-MAKE_UNPACK_FUNC_ORC_IF (s32_be_float, 4, 0, READ32_FROM_BE);
-
-/* One of the double_hq_* functions generated above is inefficient, but it's
- * never used anyway.  The same is true for one of the s32_* functions. */
-
-/*** 
- * packing code
- */
-#define MAKE_PACK_FUNC_NAME(name)                                       \
-audio_convert_pack_##name
-#define MAKE_PACK_FUNC_NAME_ORC(name)                                       \
-audio_convert_orc_pack_##name
-
-/*
- * These functions convert the signed 32 bit integers to the
- * target format. For this to work the following steps are done:
- *
- * 1) If the output format is unsigned we will XOR the sign bit. This
- *    will do the same as if we add 1<<31.
- * 2) Afterwards we shift to the target depth. It's necessary to left-shift
- *    on signed values here to get arithmetical shifting.
- * 3) This is then written into our target array by the corresponding write
- *    function for the target width.
- */
-
-/* pack from signed integer 32 to integer using Orc */
-#define MAKE_PACK_FUNC_ORC_II(name, stride, sign, WRITE_FUNC)           \
-static void                                                             \
-MAKE_PACK_FUNC_NAME (name) (gint32 *src, guint8 * dst,                  \
-        gint scale, gint count)                                         \
-{                                                                       \
-  MAKE_PACK_FUNC_NAME_ORC (name) (dst, src, scale, count);              \
-}
-
-/* pack from signed integer 32 to integer */
-#define MAKE_PACK_FUNC_II(name, stride, sign, WRITE_FUNC)               \
-static void                                                             \
-MAKE_PACK_FUNC_NAME (name) (gint32 *src, guint8 * dst,                  \
-        gint scale, gint count)                                         \
-{                                                                       \
-  gint32 tmp;                                                           \
-  for (;count; count--) {                                               \
-    tmp = (*src++ ^ (sign)) >> scale;                                   \
-    WRITE_FUNC (dst, tmp);                                              \
-    dst += stride;                                                      \
-  }                                                                     \
-}
-
-/* pack from signed integer 32 to float using orc */
-#define MAKE_PACK_FUNC_ORC_IF(name, type, FUNC)                         \
-static void                                                             \
-MAKE_PACK_FUNC_NAME (name) (gint32 * src, type * dst, gint scale,       \
-    gint count)                                                         \
-{                                                                       \
-  MAKE_PACK_FUNC_NAME_ORC (name) (dst, src, count);                     \
-}
-
-/* pack from signed integer 32 to float */
-#define MAKE_PACK_FUNC_IF(name, type, FUNC)                             \
-static void                                                             \
-MAKE_PACK_FUNC_NAME (name) (gint32 * src, type * dst, gint scale,       \
-    gint count)                                                         \
-{                                                                       \
-  for (; count; count--)                                                \
-    *dst++ = FUNC ((type) ((*src++) * (1.0 / 2147483647.0)));           \
-}
-
-/* pack from float 64 (double) to float */
-#define MAKE_PACK_FUNC_FF(name, type, FUNC)                             \
-static void                                                             \
-MAKE_PACK_FUNC_NAME (name) (gdouble * src, type * dst, gint s,          \
-    gint count)                                                         \
-{                                                                       \
-  for (; count; count--)                                                \
-    *dst++ = FUNC ((type) (*src++));                                    \
-}
-
-/* pack from float 64 (double) to float with orc */
-#define MAKE_PACK_FUNC_ORC_FF(name, type, FUNC)                             \
-static void                                                             \
-MAKE_PACK_FUNC_NAME (name) (gdouble * src, type * dst, gint s,          \
-    gint count)                                                         \
-{                                                                       \
-  MAKE_PACK_FUNC_NAME_ORC (name) (dst, src, count);                     \
-}
-
-/* pack from float 64 (double) to signed int.
- * the floats are already in the correct range. Only a cast is needed.
- */
-#define MAKE_PACK_FUNC_FI_S(name, stride, WRITE_FUNC)                   \
-static void                                                             \
-MAKE_PACK_FUNC_NAME (name) (gdouble * src, guint8 * dst, gint scale,    \
-    gint count)                                                         \
-{                                                                       \
-  gint32 tmp;                                                           \
-  for (; count; count--) {                                              \
-    tmp = (gint32) (*src);                                              \
-    WRITE_FUNC (dst, tmp);                                              \
-    src++;                                                              \
-    dst += stride;                                                      \
-  }                                                                     \
-}
-
-/* pack from float 64 (double) to unsigned int.
- * the floats are already in the correct range. Only a cast is needed
- * and an addition of 2^(target_depth-1) to get in the correct unsigned
- * range. */
-#define MAKE_PACK_FUNC_FI_U(name, stride, WRITE_FUNC)                   \
-static void                                                             \
-MAKE_PACK_FUNC_NAME (name) (gdouble * src, guint8 * dst, gint scale,    \
-    gint count)                                                         \
-{                                                                       \
-  guint32 tmp;                                                          \
-  gdouble limit = (1U<<(32-scale-1));                                   \
-  for (; count; count--) {                                              \
-    tmp = (guint32) (*src + limit);                                     \
-    WRITE_FUNC (dst, tmp);                                              \
-    src++;                                                              \
-    dst += stride;                                                      \
-  }                                                                     \
-}
-
-/* pack from float 64 (double) to signed int with orc.
- * the floats are already in the correct range. Only a cast is needed.
- */
-#define MAKE_PACK_FUNC_ORC_FI_S(name, stride, WRITE_FUNC)               \
-static void                                                             \
-MAKE_PACK_FUNC_NAME (name) (gdouble * src, guint8 * dst, gint scale,    \
-    gint count)                                                         \
-{                                                                       \
-  MAKE_PACK_FUNC_NAME_ORC (name) (dst, src, scale, count);              \
-}
-
-/* pack from float 64 (double) to unsigned int with orc.
- * the floats are already in the correct range. Only a cast is needed.
- */
-#define MAKE_PACK_FUNC_ORC_FI_U(name, stride, WRITE_FUNC)               \
-static void                                                             \
-MAKE_PACK_FUNC_NAME (name) (gdouble * src, guint8 * dst, gint scale,    \
-    gint count)                                                         \
-{                                                                       \
-  MAKE_PACK_FUNC_NAME_ORC (name) (dst, src, scale, count);              \
-}
-
-#define WRITE8(p, v)       GST_WRITE_UINT8 (p, v)
-#define WRITE16_TO_LE(p,v) GST_WRITE_UINT16_LE (p, (guint16)(v))
-#define WRITE16_TO_BE(p,v) GST_WRITE_UINT16_BE (p, (guint16)(v))
-#define WRITE24_TO_LE(p,v) p[0] = v & 0xff; p[1] = (v >> 8) & 0xff; p[2] = (v >> 16) & 0xff
-#define WRITE24_TO_BE(p,v) p[2] = v & 0xff; p[1] = (v >> 8) & 0xff; p[0] = (v >> 16) & 0xff
-#define WRITE32_TO_LE(p,v) GST_WRITE_UINT32_LE (p, (guint32)(v))
-#define WRITE32_TO_BE(p,v) GST_WRITE_UINT32_BE (p, (guint32)(v))
-
-MAKE_PACK_FUNC_ORC_II (u8, 1, SIGNED, WRITE8);
-MAKE_PACK_FUNC_ORC_II (s8, 1, 0, WRITE8);
-MAKE_PACK_FUNC_ORC_II (u16_le, 2, SIGNED, WRITE16_TO_LE);
-MAKE_PACK_FUNC_ORC_II (s16_le, 2, 0, WRITE16_TO_LE);
-MAKE_PACK_FUNC_ORC_II (u16_be, 2, SIGNED, WRITE16_TO_BE);
-MAKE_PACK_FUNC_ORC_II (s16_be, 2, 0, WRITE16_TO_BE);
-MAKE_PACK_FUNC_II (u24_le, 3, SIGNED, WRITE24_TO_LE);
-MAKE_PACK_FUNC_II (s24_le, 3, 0, WRITE24_TO_LE);
-MAKE_PACK_FUNC_II (u24_be, 3, SIGNED, WRITE24_TO_BE);
-MAKE_PACK_FUNC_II (s24_be, 3, 0, WRITE24_TO_BE);
-MAKE_PACK_FUNC_ORC_II (u32_le, 4, SIGNED, WRITE32_TO_LE);
-MAKE_PACK_FUNC_ORC_II (s32_le, 4, 0, WRITE32_TO_LE);
-MAKE_PACK_FUNC_ORC_II (u32_be, 4, SIGNED, WRITE32_TO_BE);
-MAKE_PACK_FUNC_ORC_II (s32_be, 4, 0, WRITE32_TO_BE);
-MAKE_PACK_FUNC_ORC_IF (float_le, gfloat, GFLOAT_TO_LE);
-MAKE_PACK_FUNC_ORC_IF (float_be, gfloat, GFLOAT_TO_BE);
-MAKE_PACK_FUNC_ORC_IF (double_le, gdouble, GDOUBLE_TO_LE);
-MAKE_PACK_FUNC_ORC_IF (double_be, gdouble, GDOUBLE_TO_BE);
-MAKE_PACK_FUNC_ORC_FF (float_hq_le, gfloat, GFLOAT_TO_LE);
-MAKE_PACK_FUNC_ORC_FF (float_hq_be, gfloat, GFLOAT_TO_BE);
-MAKE_PACK_FUNC_ORC_FI_U (u8_float, 1, WRITE8);
-MAKE_PACK_FUNC_ORC_FI_S (s8_float, 1, WRITE8);
-MAKE_PACK_FUNC_ORC_FI_U (u16_le_float, 2, WRITE16_TO_LE);
-MAKE_PACK_FUNC_ORC_FI_S (s16_le_float, 2, WRITE16_TO_LE);
-MAKE_PACK_FUNC_ORC_FI_U (u16_be_float, 2, WRITE16_TO_BE);
-MAKE_PACK_FUNC_ORC_FI_S (s16_be_float, 2, WRITE16_TO_BE);
-MAKE_PACK_FUNC_FI_U (u24_le_float, 3, WRITE24_TO_LE);
-MAKE_PACK_FUNC_FI_S (s24_le_float, 3, WRITE24_TO_LE);
-MAKE_PACK_FUNC_FI_U (u24_be_float, 3, WRITE24_TO_BE);
-MAKE_PACK_FUNC_FI_S (s24_be_float, 3, WRITE24_TO_BE);
-MAKE_PACK_FUNC_ORC_FI_U (u32_le_float, 4, WRITE32_TO_LE);
-MAKE_PACK_FUNC_ORC_FI_S (s32_le_float, 4, WRITE32_TO_LE);
-MAKE_PACK_FUNC_ORC_FI_U (u32_be_float, 4, WRITE32_TO_BE);
-MAKE_PACK_FUNC_ORC_FI_S (s32_be_float, 4, WRITE32_TO_BE);
-
-/* For double_hq, packing and unpacking is the same, so we reuse the unpacking
- * functions here. */
-#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 const AudioConvertUnpack unpack_funcs[] = {
-  (AudioConvertUnpack) MAKE_UNPACK_FUNC_NAME (u8),
-  (AudioConvertUnpack) MAKE_UNPACK_FUNC_NAME (s8),
-  (AudioConvertUnpack) MAKE_UNPACK_FUNC_NAME (u8),
-  (AudioConvertUnpack) MAKE_UNPACK_FUNC_NAME (s8),
-  (AudioConvertUnpack) MAKE_UNPACK_FUNC_NAME (u16_le),
-  (AudioConvertUnpack) MAKE_UNPACK_FUNC_NAME (s16_le),
-  (AudioConvertUnpack) MAKE_UNPACK_FUNC_NAME (u16_be),
-  (AudioConvertUnpack) MAKE_UNPACK_FUNC_NAME (s16_be),
-  (AudioConvertUnpack) MAKE_UNPACK_FUNC_NAME (u24_le),
-  (AudioConvertUnpack) MAKE_UNPACK_FUNC_NAME (s24_le),
-  (AudioConvertUnpack) MAKE_UNPACK_FUNC_NAME (u24_be),
-  (AudioConvertUnpack) MAKE_UNPACK_FUNC_NAME (s24_be),
-  (AudioConvertUnpack) MAKE_UNPACK_FUNC_NAME (u32_le),
-  (AudioConvertUnpack) MAKE_UNPACK_FUNC_NAME (s32_le),
-  (AudioConvertUnpack) MAKE_UNPACK_FUNC_NAME (u32_be),
-  (AudioConvertUnpack) MAKE_UNPACK_FUNC_NAME (s32_be),
-  (AudioConvertUnpack) MAKE_UNPACK_FUNC_NAME (float_le),
-  (AudioConvertUnpack) MAKE_UNPACK_FUNC_NAME (float_be),
-  (AudioConvertUnpack) MAKE_UNPACK_FUNC_NAME (double_le),
-  (AudioConvertUnpack) MAKE_UNPACK_FUNC_NAME (double_be),
-  (AudioConvertUnpack) MAKE_UNPACK_FUNC_NAME (float_hq_le),
-  (AudioConvertUnpack) MAKE_UNPACK_FUNC_NAME (float_hq_be),
-  (AudioConvertUnpack) MAKE_UNPACK_FUNC_NAME (double_hq_le),
-  (AudioConvertUnpack) MAKE_UNPACK_FUNC_NAME (double_hq_be),
-  (AudioConvertUnpack) MAKE_UNPACK_FUNC_NAME (u8_float),
-  (AudioConvertUnpack) MAKE_UNPACK_FUNC_NAME (s8_float),
-  (AudioConvertUnpack) MAKE_UNPACK_FUNC_NAME (u8_float),
-  (AudioConvertUnpack) MAKE_UNPACK_FUNC_NAME (s8_float),
-  (AudioConvertUnpack) MAKE_UNPACK_FUNC_NAME (u16_le_float),
-  (AudioConvertUnpack) MAKE_UNPACK_FUNC_NAME (s16_le_float),
-  (AudioConvertUnpack) MAKE_UNPACK_FUNC_NAME (u16_be_float),
-  (AudioConvertUnpack) MAKE_UNPACK_FUNC_NAME (s16_be_float),
-  (AudioConvertUnpack) MAKE_UNPACK_FUNC_NAME (u24_le_float),
-  (AudioConvertUnpack) MAKE_UNPACK_FUNC_NAME (s24_le_float),
-  (AudioConvertUnpack) MAKE_UNPACK_FUNC_NAME (u24_be_float),
-  (AudioConvertUnpack) MAKE_UNPACK_FUNC_NAME (s24_be_float),
-  (AudioConvertUnpack) MAKE_UNPACK_FUNC_NAME (u32_le_float),
-  (AudioConvertUnpack) MAKE_UNPACK_FUNC_NAME (s32_le_float),
-  (AudioConvertUnpack) MAKE_UNPACK_FUNC_NAME (u32_be_float),
-  (AudioConvertUnpack) MAKE_UNPACK_FUNC_NAME (s32_be_float),
-};
-
-static const AudioConvertPack pack_funcs[] = {
-  (AudioConvertPack) MAKE_PACK_FUNC_NAME (u8),
-  (AudioConvertPack) MAKE_PACK_FUNC_NAME (s8),
-  (AudioConvertPack) MAKE_PACK_FUNC_NAME (u8),
-  (AudioConvertPack) MAKE_PACK_FUNC_NAME (s8),
-  (AudioConvertPack) MAKE_PACK_FUNC_NAME (u16_le),
-  (AudioConvertPack) MAKE_PACK_FUNC_NAME (s16_le),
-  (AudioConvertPack) MAKE_PACK_FUNC_NAME (u16_be),
-  (AudioConvertPack) MAKE_PACK_FUNC_NAME (s16_be),
-  (AudioConvertPack) MAKE_PACK_FUNC_NAME (u24_le),
-  (AudioConvertPack) MAKE_PACK_FUNC_NAME (s24_le),
-  (AudioConvertPack) MAKE_PACK_FUNC_NAME (u24_be),
-  (AudioConvertPack) MAKE_PACK_FUNC_NAME (s24_be),
-  (AudioConvertPack) MAKE_PACK_FUNC_NAME (u32_le),
-  (AudioConvertPack) MAKE_PACK_FUNC_NAME (s32_le),
-  (AudioConvertPack) MAKE_PACK_FUNC_NAME (u32_be),
-  (AudioConvertPack) MAKE_PACK_FUNC_NAME (s32_be),
-  (AudioConvertPack) MAKE_PACK_FUNC_NAME (float_le),
-  (AudioConvertPack) MAKE_PACK_FUNC_NAME (float_be),
-  (AudioConvertPack) MAKE_PACK_FUNC_NAME (double_le),
-  (AudioConvertPack) MAKE_PACK_FUNC_NAME (double_be),
-  (AudioConvertPack) MAKE_PACK_FUNC_NAME (float_hq_le),
-  (AudioConvertPack) MAKE_PACK_FUNC_NAME (float_hq_be),
-  (AudioConvertPack) MAKE_PACK_FUNC_NAME (double_hq_le),
-  (AudioConvertPack) MAKE_PACK_FUNC_NAME (double_hq_be),
-  (AudioConvertPack) MAKE_PACK_FUNC_NAME (u8_float),
-  (AudioConvertPack) MAKE_PACK_FUNC_NAME (s8_float),
-  (AudioConvertPack) MAKE_PACK_FUNC_NAME (u8_float),
-  (AudioConvertPack) MAKE_PACK_FUNC_NAME (s8_float),
-  (AudioConvertPack) MAKE_PACK_FUNC_NAME (u16_le_float),
-  (AudioConvertPack) MAKE_PACK_FUNC_NAME (s16_le_float),
-  (AudioConvertPack) MAKE_PACK_FUNC_NAME (u16_be_float),
-  (AudioConvertPack) MAKE_PACK_FUNC_NAME (s16_be_float),
-  (AudioConvertPack) MAKE_PACK_FUNC_NAME (u24_le_float),
-  (AudioConvertPack) MAKE_PACK_FUNC_NAME (s24_le_float),
-  (AudioConvertPack) MAKE_PACK_FUNC_NAME (u24_be_float),
-  (AudioConvertPack) MAKE_PACK_FUNC_NAME (s24_be_float),
-  (AudioConvertPack) MAKE_PACK_FUNC_NAME (u32_le_float),
-  (AudioConvertPack) MAKE_PACK_FUNC_NAME (s32_le_float),
-  (AudioConvertPack) MAKE_PACK_FUNC_NAME (u32_be_float),
-  (AudioConvertPack) MAKE_PACK_FUNC_NAME (s32_be_float),
-};
-
-#define DOUBLE_INTERMEDIATE_FORMAT(ctx)                   \
-    ((!GST_AUDIO_FORMAT_INFO_IS_INTEGER (ctx->in.finfo) &&    \
-      !GST_AUDIO_FORMAT_INFO_IS_INTEGER (ctx->out.finfo)) ||  \
-     (ctx->ns != NOISE_SHAPING_NONE))
-
-static gint
-audio_convert_get_func_index (AudioConvertCtx * ctx,
-    const GstAudioFormatInfo * fmt)
-{
-  gint index = 0;
-
-  if (GST_AUDIO_FORMAT_INFO_IS_INTEGER (fmt)) {
-    index += (GST_AUDIO_FORMAT_INFO_WIDTH (fmt) / 8 - 1) * 4;
-    index += GST_AUDIO_FORMAT_INFO_IS_LITTLE_ENDIAN (fmt) ? 0 : 2;
-    index += GST_AUDIO_FORMAT_INFO_IS_SIGNED (fmt) ? 1 : 0;
-    index += (ctx->ns == NOISE_SHAPING_NONE) ? 0 : 24;
-  } else {
-    /* this is float/double */
-    index = 16;
-    index += (GST_AUDIO_FORMAT_INFO_WIDTH (fmt) == 32) ? 0 : 2;
-    index += GST_AUDIO_FORMAT_INFO_IS_LITTLE_ENDIAN (fmt) ? 0 : 1;
-    index += (DOUBLE_INTERMEDIATE_FORMAT (ctx)) ? 4 : 0;
-  }
-
-  return index;
-}
-
-static inline gboolean
-check_default (AudioConvertCtx * ctx, const GstAudioFormatInfo * fmt)
-{
-  if (!DOUBLE_INTERMEDIATE_FORMAT (ctx)) {
-    return GST_AUDIO_FORMAT_INFO_FORMAT (fmt) == GST_AUDIO_FORMAT_S32;
-  } else {
-    return GST_AUDIO_FORMAT_INFO_FORMAT (fmt) == GST_AUDIO_FORMAT_F64;
-  }
-}
-
-gboolean
-audio_convert_prepare_context (AudioConvertCtx * ctx, GstAudioInfo * in,
-    GstAudioInfo * out, GstAudioConvertDithering dither,
-    GstAudioConvertNoiseShaping ns)
-{
-  gint idx_in, idx_out;
-  gint in_depth, out_depth;
-
-  g_return_val_if_fail (ctx != NULL, FALSE);
-  g_return_val_if_fail (in != NULL, FALSE);
-  g_return_val_if_fail (out != NULL, FALSE);
-
-  /* first clean the existing context */
-  audio_convert_clean_context (ctx);
-  if ((GST_AUDIO_INFO_CHANNELS (in) != GST_AUDIO_INFO_CHANNELS (out)) &&
-      (GST_AUDIO_INFO_IS_UNPOSITIONED (in)
-          || GST_AUDIO_INFO_IS_UNPOSITIONED (out)))
-    goto unpositioned;
-
-  ctx->in = *in;
-  ctx->out = *out;
-
-  in_depth = GST_AUDIO_FORMAT_INFO_DEPTH (in->finfo);
-  out_depth = GST_AUDIO_FORMAT_INFO_DEPTH (out->finfo);
-
-  GST_INFO ("depth in %d, out %d", in_depth, out_depth);
-
-  /* Don't dither or apply noise shaping if target depth is bigger than 20 bits
-   * as DA converters only can do a SNR up to 20 bits in reality.
-   * Also don't dither or apply noise shaping if target depth is larger than
-   * source depth. */
-  if (out_depth <= 20 && (!GST_AUDIO_FORMAT_INFO_IS_INTEGER (in->finfo)
-          || in_depth >= out_depth)) {
-    ctx->dither = dither;
-    ctx->ns = ns;
-    GST_INFO ("using dither %d and noise shaping %d", dither, ns);
-  } else {
-    ctx->dither = DITHER_NONE;
-    ctx->ns = NOISE_SHAPING_NONE;
-    GST_INFO ("using no dither and noise shaping");
-  }
-
-  /* Use simple error feedback when output sample rate is smaller than
-   * 32000 as the other methods might move the noise to audible ranges */
-  if (ctx->ns > NOISE_SHAPING_ERROR_FEEDBACK && out->rate < 32000)
-    ctx->ns = NOISE_SHAPING_ERROR_FEEDBACK;
-
-  gst_channel_mix_setup_matrix (ctx);
-
-  idx_in = audio_convert_get_func_index (ctx, in->finfo);
-  ctx->unpack = unpack_funcs[idx_in];
-
-  idx_out = audio_convert_get_func_index (ctx, out->finfo);
-  ctx->pack = pack_funcs[idx_out];
-
-  GST_INFO ("func index in %d, out %d", idx_in, idx_out);
-
-  /* if both formats are float/double or we use noise shaping use double as
-   * intermediate format and switch mixing */
-  if (!DOUBLE_INTERMEDIATE_FORMAT (ctx)) {
-    GST_INFO ("use int mixing");
-    ctx->channel_mix = (AudioConvertMix) gst_channel_mix_mix_int;
-  } else {
-    GST_INFO ("use float mixing");
-    ctx->channel_mix = (AudioConvertMix) gst_channel_mix_mix_float;
-  }
-  GST_INFO ("unitsizes: %d -> %d", in->bpf, out->bpf);
-
-  /* check if input is in default format */
-  ctx->in_default = check_default (ctx, in->finfo);
-  /* check if channel mixer is passthrough */
-  ctx->mix_passthrough = gst_channel_mix_passthrough (ctx);
-  /* check if output is in default format */
-  ctx->out_default = check_default (ctx, out->finfo);
-
-  GST_INFO ("in default %d, mix passthrough %d, out default %d",
-      ctx->in_default, ctx->mix_passthrough, ctx->out_default);
-
-  ctx->in_scale =
-      GST_AUDIO_FORMAT_INFO_IS_INTEGER (in->finfo) ? (32 - in_depth) : 0;
-  ctx->out_scale =
-      GST_AUDIO_FORMAT_INFO_IS_INTEGER (out->finfo) ? (32 - out_depth) : 0;
-
-  GST_INFO ("scale in %d, out %d", ctx->in_scale, ctx->out_scale);
-
-  gst_audio_quantize_setup (ctx);
-
-  return TRUE;
-
-  /* ERRORS */
-unpositioned:
-  {
-    GST_WARNING ("unpositioned channels");
-    return FALSE;
-  }
-}
-
-gboolean
-audio_convert_clean_context (AudioConvertCtx * ctx)
-{
-  g_return_val_if_fail (ctx != NULL, FALSE);
-
-  gst_audio_quantize_free (ctx);
-  gst_channel_mix_unset_matrix (ctx);
-  gst_audio_info_init (&ctx->in);
-  gst_audio_info_init (&ctx->out);
-
-  g_free (ctx->tmpbuf);
-  ctx->tmpbuf = NULL;
-  ctx->tmpbufsize = 0;
-
-  return TRUE;
-}
-
-gboolean
-audio_convert_get_sizes (AudioConvertCtx * ctx, gint samples, gint * srcsize,
-    gint * dstsize)
-{
-  g_return_val_if_fail (ctx != NULL, FALSE);
-
-  if (srcsize)
-    *srcsize = samples * ctx->in.bpf;
-  if (dstsize)
-    *dstsize = samples * ctx->out.bpf;
-
-  return TRUE;
-}
-
-gboolean
-audio_convert_convert (AudioConvertCtx * ctx, gpointer src,
-    gpointer dst, gint samples, gboolean src_writable)
-{
-  guint insize, outsize, size;
-  gpointer outbuf, tmpbuf;
-  guint intemp = 0, outtemp = 0, biggest;
-  gint in_width, out_width;
-
-  g_return_val_if_fail (ctx != NULL, FALSE);
-  g_return_val_if_fail (src != NULL, FALSE);
-  g_return_val_if_fail (dst != NULL, FALSE);
-  g_return_val_if_fail (samples >= 0, FALSE);
-
-  if (samples == 0)
-    return TRUE;
-
-  insize = ctx->in.bpf * samples;
-  outsize = ctx->out.bpf * samples;
-
-  in_width = GST_AUDIO_FORMAT_INFO_WIDTH (ctx->in.finfo);
-  out_width = GST_AUDIO_FORMAT_INFO_WIDTH (ctx->out.finfo);
-
-  /* find biggest temp buffer size */
-  size = (DOUBLE_INTERMEDIATE_FORMAT (ctx)) ? sizeof (gdouble)
-      : sizeof (gint32);
-
-  if (!ctx->in_default)
-    intemp = gst_util_uint64_scale (insize, size * 8, in_width);
-  if (!ctx->mix_passthrough || !ctx->out_default)
-    outtemp = gst_util_uint64_scale (outsize, size * 8, out_width);
-  biggest = MAX (intemp, outtemp);
-
-  /* see if one of the buffers can be used as temp */
-  if ((outsize >= biggest) && (ctx->out.bpf <= size))
-    tmpbuf = dst;
-  else if ((insize >= biggest) && src_writable && (ctx->in.bpf >= size))
-    tmpbuf = src;
-  else {
-    if (biggest > ctx->tmpbufsize) {
-      ctx->tmpbuf = g_realloc (ctx->tmpbuf, biggest);
-      ctx->tmpbufsize = biggest;
-    }
-    tmpbuf = ctx->tmpbuf;
-  }
-
-  /* start conversion */
-  if (!ctx->in_default) {
-    /* check if final conversion */
-    if (!(ctx->out_default && ctx->mix_passthrough))
-      outbuf = tmpbuf;
-    else
-      outbuf = dst;
-
-    /* unpack to default format */
-    ctx->unpack (src, outbuf, ctx->in_scale, samples * ctx->in.channels);
-
-    src = outbuf;
-  }
-
-  if (!ctx->mix_passthrough) {
-    /* check if final conversion */
-    if (!ctx->out_default)
-      outbuf = tmpbuf;
-    else
-      outbuf = dst;
-
-    /* convert channels */
-    ctx->channel_mix (ctx, src, outbuf, samples);
-
-    src = outbuf;
-  }
-
-  /* we only need to quantize if output format is int */
-  if (GST_AUDIO_FORMAT_INFO_IS_INTEGER (ctx->out.finfo)) {
-    if (ctx->out_default)
-      outbuf = dst;
-    else
-      outbuf = tmpbuf;
-    ctx->quantize (ctx, src, outbuf, samples);
-  }
-
-  if (!ctx->out_default) {
-    /* pack default format into dst */
-    ctx->pack (src, dst, ctx->out_scale, samples * ctx->out.channels);
-  }
-
-  return TRUE;
-}
diff --git a/gst/audioconvert/audioconvert.h b/gst/audioconvert/audioconvert.h
deleted file mode 100644
index 56080cc..0000000
--- a/gst/audioconvert/audioconvert.h
+++ /dev/null
@@ -1,151 +0,0 @@
-/* GStreamer
- * Copyright (C) 2004 Ronald Bultje <rbultje@ronald.bitfreak.net>
- *
- * audioconvert.h: audio format conversion library
- *
- * 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 __AUDIO_CONVERT_H__
-#define __AUDIO_CONVERT_H__
-
-#include <gst/gst.h>
-#include <gst/audio/audio.h>
-
-GST_DEBUG_CATEGORY_EXTERN (audio_convert_debug);
-#define GST_CAT_DEFAULT (audio_convert_debug)
-
-/**
- * GstAudioConvertDithering:
- * @DITHER_NONE: No dithering
- * @DITHER_RPDF: Rectangular dithering
- * @DITHER_TPDF: Triangular dithering (default)
- * @DITHER_TPDF_HF: High frequency triangular dithering
- *
- * Set of available dithering methods when converting audio.
- */
-typedef enum
-{
-  DITHER_NONE = 0,
-  DITHER_RPDF,
-  DITHER_TPDF,
-  DITHER_TPDF_HF
-} GstAudioConvertDithering;
-
-/**
- * GstAudioConvertNoiseShaping:
- * @NOISE_SHAPING_NONE: No noise shaping (default)
- * @NOISE_SHAPING_ERROR_FEEDBACK: Error feedback
- * @NOISE_SHAPING_SIMPLE: Simple 2-pole noise shaping
- * @NOISE_SHAPING_MEDIUM: Medium 5-pole noise shaping
- * @NOISE_SHAPING_HIGH: High 8-pole noise shaping
- *
- * Set of available noise shaping methods
- */
-typedef enum
-{
-  NOISE_SHAPING_NONE = 0,
-  NOISE_SHAPING_ERROR_FEEDBACK,
-  NOISE_SHAPING_SIMPLE,
-  NOISE_SHAPING_MEDIUM,
-  NOISE_SHAPING_HIGH
-} GstAudioConvertNoiseShaping;
-
-typedef struct _AudioConvertCtx AudioConvertCtx;
-#if 0
-typedef struct _AudioConvertFmt AudioConvertFmt;
-
-struct _AudioConvertFmt
-{
-  /* general caps */
-  gboolean is_int;
-  gint endianness;
-  gint width;
-  gint rate;
-  gint channels;
-  GstAudioChannelPosition *pos;
-  gboolean unpositioned_layout;
-
-  /* int audio caps */
-  gboolean sign;
-  gint depth;
-
-  gint unit_size;
-};
-#endif
-
-typedef void (*AudioConvertUnpack) (gpointer src, gpointer dst, gint scale,
-    gint count);
-typedef void (*AudioConvertPack) (gpointer src, gpointer dst, gint scale,
-    gint count);
-
-typedef void (*AudioConvertMix) (AudioConvertCtx *, gpointer, gpointer, gint);
-typedef void (*AudioConvertQuantize) (AudioConvertCtx * ctx, gpointer src,
-    gpointer dst, gint count);
-
-struct _AudioConvertCtx
-{
-  GstAudioInfo in;
-  GstAudioInfo out;
-
-  AudioConvertUnpack unpack;
-  AudioConvertPack pack;
-
-  /* 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;
-
-  gboolean in_default;
-  gboolean mix_passthrough;
-  gboolean out_default;
-
-  gpointer tmpbuf;
-  gint tmpbufsize;
-
-  gint in_scale;
-  gint out_scale;
-
-  AudioConvertMix channel_mix;
-
-  AudioConvertQuantize quantize;
-
-  GstAudioConvertDithering dither;
-  GstAudioConvertNoiseShaping ns;
-  /* last random number generated per channel for hifreq TPDF dither */
-  gpointer last_random;
-  /* contains the past quantization errors, error[out_channels][count] */
-  gdouble *error_buf;
-};
-
-gboolean audio_convert_prepare_context (AudioConvertCtx * ctx,
-    GstAudioInfo * in, GstAudioInfo * out,
-    GstAudioConvertDithering dither, GstAudioConvertNoiseShaping ns);
-gboolean audio_convert_get_sizes (AudioConvertCtx * ctx, gint samples,
-    gint * srcsize, gint * dstsize);
-
-gboolean audio_convert_clean_context (AudioConvertCtx * ctx);
-
-gboolean audio_convert_convert (AudioConvertCtx * ctx, gpointer src,
-    gpointer dst, gint samples, gboolean src_writable);
-
-#endif /* __AUDIO_CONVERT_H__ */
diff --git a/gst/audioconvert/gstaudioconvert.c b/gst/audioconvert/gstaudioconvert.c
index 634fd46..fc002d9 100644
--- a/gst/audioconvert/gstaudioconvert.c
+++ b/gst/audioconvert/gstaudioconvert.c
@@ -63,12 +63,11 @@
 #include <string.h>
 
 #include "gstaudioconvert.h"
-#include "gstchannelmix.h"
-#include "gstaudioquantize.h"
 #include "plugin.h"
 
 GST_DEBUG_CATEGORY (audio_convert_debug);
 GST_DEBUG_CATEGORY_STATIC (GST_CAT_PERFORMANCE);
+#define GST_CAT_DEFAULT (audio_convert_debug)
 
 /*** DEFINITIONS **************************************************************/
 
@@ -88,6 +87,8 @@
     GstBuffer * inbuf, GstBuffer * outbuf);
 static gboolean gst_audio_convert_transform_meta (GstBaseTransform * trans,
     GstBuffer * outbuf, GstMeta * meta, GstBuffer * inbuf);
+static GstFlowReturn gst_audio_convert_submit_input_buffer (GstBaseTransform *
+    base, gboolean is_discont, GstBuffer * input);
 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,
@@ -132,49 +133,6 @@
     GST_PAD_ALWAYS,
     STATIC_CAPS);
 
-#define GST_TYPE_AUDIO_CONVERT_DITHERING (gst_audio_convert_dithering_get_type ())
-static GType
-gst_audio_convert_dithering_get_type (void)
-{
-  static GType gtype = 0;
-
-  if (gtype == 0) {
-    static const GEnumValue values[] = {
-      {DITHER_NONE, "No dithering",
-          "none"},
-      {DITHER_RPDF, "Rectangular dithering", "rpdf"},
-      {DITHER_TPDF, "Triangular dithering (default)", "tpdf"},
-      {DITHER_TPDF_HF, "High frequency triangular dithering", "tpdf-hf"},
-      {0, NULL, NULL}
-    };
-
-    gtype = g_enum_register_static ("GstAudioConvertDithering", values);
-  }
-  return gtype;
-}
-
-#define GST_TYPE_AUDIO_CONVERT_NOISE_SHAPING (gst_audio_convert_ns_get_type ())
-static GType
-gst_audio_convert_ns_get_type (void)
-{
-  static GType gtype = 0;
-
-  if (gtype == 0) {
-    static const GEnumValue values[] = {
-      {NOISE_SHAPING_NONE, "No noise shaping (default)",
-          "none"},
-      {NOISE_SHAPING_ERROR_FEEDBACK, "Error feedback", "error-feedback"},
-      {NOISE_SHAPING_SIMPLE, "Simple 2-pole noise shaping", "simple"},
-      {NOISE_SHAPING_MEDIUM, "Medium 5-pole noise shaping", "medium"},
-      {NOISE_SHAPING_HIGH, "High 8-pole noise shaping", "high"},
-      {0, NULL, NULL}
-    };
-
-    gtype = g_enum_register_static ("GstAudioConvertNoiseShaping", values);
-  }
-  return gtype;
-}
-
 
 /*** TYPE FUNCTIONS ***********************************************************/
 static void
@@ -191,13 +149,13 @@
   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,
+          GST_TYPE_AUDIO_DITHER_METHOD, GST_AUDIO_DITHER_TPDF,
           G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
 
   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,
+          GST_TYPE_AUDIO_NOISE_SHAPING_METHOD, GST_AUDIO_NOISE_SHAPING_NONE,
           G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
 
   gst_element_class_add_pad_template (element_class,
@@ -220,6 +178,8 @@
       GST_DEBUG_FUNCPTR (gst_audio_convert_transform);
   basetransform_class->transform_meta =
       GST_DEBUG_FUNCPTR (gst_audio_convert_transform_meta);
+  basetransform_class->submit_input_buffer =
+      GST_DEBUG_FUNCPTR (gst_audio_convert_submit_input_buffer);
 
   basetransform_class->passthrough_on_same_caps = TRUE;
 }
@@ -227,9 +187,8 @@
 static void
 gst_audio_convert_init (GstAudioConvert * this)
 {
-  this->dither = DITHER_TPDF;
-  this->ns = NOISE_SHAPING_NONE;
-  memset (&this->ctx, 0, sizeof (AudioConvertCtx));
+  this->dither = GST_AUDIO_DITHER_TPDF;
+  this->ns = GST_AUDIO_NOISE_SHAPING_NONE;
 
   gst_base_transform_set_gap_aware (GST_BASE_TRANSFORM (this), TRUE);
 }
@@ -239,7 +198,10 @@
 {
   GstAudioConvert *this = GST_AUDIO_CONVERT (obj);
 
-  audio_convert_clean_context (&this->ctx);
+  if (this->convert) {
+    gst_audio_converter_free (this->convert);
+    this->convert = NULL;
+  }
 
   G_OBJECT_CLASS (parent_class)->dispose (obj);
 }
@@ -340,69 +302,6 @@
   return result;
 }
 
-static const GstAudioChannelPosition default_positions[8][8] = {
-  /* 1 channel */
-  {
-        GST_AUDIO_CHANNEL_POSITION_MONO,
-      },
-  /* 2 channels */
-  {
-        GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT,
-        GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT,
-      },
-  /* 3 channels (2.1) */
-  {
-        GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT,
-        GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT,
-        GST_AUDIO_CHANNEL_POSITION_LFE1,
-      },
-  /* 4 channels (4.0) */
-  {
-        GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT,
-        GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT,
-        GST_AUDIO_CHANNEL_POSITION_REAR_LEFT,
-        GST_AUDIO_CHANNEL_POSITION_REAR_RIGHT,
-      },
-  /* 5 channels */
-  {
-        GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT,
-        GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT,
-        GST_AUDIO_CHANNEL_POSITION_REAR_LEFT,
-        GST_AUDIO_CHANNEL_POSITION_REAR_RIGHT,
-        GST_AUDIO_CHANNEL_POSITION_FRONT_CENTER,
-      },
-  /* 6 channels (5.1) */
-  {
-        GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT,
-        GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT,
-        GST_AUDIO_CHANNEL_POSITION_REAR_LEFT,
-        GST_AUDIO_CHANNEL_POSITION_REAR_RIGHT,
-        GST_AUDIO_CHANNEL_POSITION_FRONT_CENTER,
-        GST_AUDIO_CHANNEL_POSITION_LFE1,
-      },
-  /* 7 channels (6.1) */
-  {
-        GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT,
-        GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT,
-        GST_AUDIO_CHANNEL_POSITION_REAR_LEFT,
-        GST_AUDIO_CHANNEL_POSITION_REAR_RIGHT,
-        GST_AUDIO_CHANNEL_POSITION_FRONT_CENTER,
-        GST_AUDIO_CHANNEL_POSITION_LFE1,
-        GST_AUDIO_CHANNEL_POSITION_REAR_CENTER,
-      },
-  /* 8 channels (7.1) */
-  {
-        GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT,
-        GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT,
-        GST_AUDIO_CHANNEL_POSITION_REAR_LEFT,
-        GST_AUDIO_CHANNEL_POSITION_REAR_RIGHT,
-        GST_AUDIO_CHANNEL_POSITION_FRONT_CENTER,
-        GST_AUDIO_CHANNEL_POSITION_LFE1,
-        GST_AUDIO_CHANNEL_POSITION_SIDE_LEFT,
-        GST_AUDIO_CHANNEL_POSITION_SIDE_RIGHT,
-      }
-};
-
 static gint
 n_bits_set (guint64 x)
 {
@@ -677,15 +576,9 @@
    * and try to add/remove channels from the input layout, or pick a default
    * layout based on LFE-presence in input layout, but let's save that for
    * another day) */
-  if (out_chans > 0 && out_chans <= G_N_ELEMENTS (default_positions[0])) {
-    gint i;
-
+  if (out_chans > 0
+      && (out_mask = gst_audio_channel_get_fallback_mask (out_chans))) {
     GST_DEBUG_OBJECT (base, "using default channel layout as fallback");
-
-    out_mask = 0;
-    for (i = 0; i < out_chans; i++)
-      out_mask |= G_GUINT64_CONSTANT (1) << default_positions[out_chans - 1][i];
-
     gst_structure_set (outs, "channel-mask", GST_TYPE_BITMASK, out_mask, NULL);
   } else {
     GST_ERROR_OBJECT (base, "Have no default layout for %d channels",
@@ -757,15 +650,29 @@
   GST_DEBUG_OBJECT (base, "incaps %" GST_PTR_FORMAT ", outcaps %"
       GST_PTR_FORMAT, incaps, outcaps);
 
+  if (this->convert) {
+    gst_audio_converter_free (this->convert);
+    this->convert = NULL;
+  }
+
   if (!gst_audio_info_from_caps (&in_info, incaps))
     goto invalid_in;
   if (!gst_audio_info_from_caps (&out_info, outcaps))
     goto invalid_out;
 
-  if (!audio_convert_prepare_context (&this->ctx, &in_info, &out_info,
-          this->dither, this->ns))
+  this->convert = gst_audio_converter_new (&in_info, &out_info,
+      gst_structure_new ("GstAudioConverterConfig",
+          GST_AUDIO_CONVERTER_OPT_DITHER_METHOD, GST_TYPE_AUDIO_DITHER_METHOD,
+          this->dither,
+          GST_AUDIO_CONVERTER_OPT_NOISE_SHAPING_METHOD,
+          GST_TYPE_AUDIO_NOISE_SHAPING_METHOD, this->ns, NULL));
+
+  if (this->convert == NULL)
     goto no_converter;
 
+  this->in_info = in_info;
+  this->out_info = out_info;
+
   return TRUE;
 
   /* ERRORS */
@@ -781,7 +688,7 @@
   }
 no_converter:
   {
-    GST_ERROR_OBJECT (base, "could not find converter");
+    GST_ERROR_OBJECT (base, "could not make converter");
     return FALSE;
   }
 }
@@ -795,16 +702,16 @@
   GstMapInfo srcmap, dstmap;
   gint insize, outsize;
   gboolean inbuf_writable;
-
-  gint samples;
+  GstAudioConverterFlags flags;
+  gsize samples, consumed, produced;
 
   /* get amount of samples to convert. */
-  samples = gst_buffer_get_size (inbuf) / this->ctx.in.bpf;
+  samples = gst_buffer_get_size (inbuf) / this->in_info.bpf;
 
   /* get in/output sizes, to see if the buffers we got are of correct
    * sizes */
-  if (!audio_convert_get_sizes (&this->ctx, samples, &insize, &outsize))
-    goto error;
+  insize = samples * this->in_info.bpf;
+  outsize = samples * this->out_info.bpf;
 
   if (insize == 0 || outsize == 0)
     return GST_FLOW_OK;
@@ -825,13 +732,18 @@
     goto wrong_size;
 
   /* and convert the samples */
+  flags = 0;
+  if (inbuf_writable)
+    flags |= GST_AUDIO_CONVERTER_FLAG_SOURCE_WRITABLE;
+
   if (!GST_BUFFER_FLAG_IS_SET (inbuf, GST_BUFFER_FLAG_GAP)) {
-    if (!audio_convert_convert (&this->ctx, srcmap.data, dstmap.data,
-            samples, inbuf_writable))
+    if (!gst_audio_converter_samples (this->convert, flags,
+            (gpointer *) & srcmap.data, samples, (gpointer *) & dstmap.data,
+            samples, &consumed, &produced))
       goto convert_error;
   } else {
     /* Create silence buffer */
-    gst_audio_format_fill_silence (this->ctx.out.finfo, dstmap.data, outsize);
+    gst_audio_format_fill_silence (this->out_info.finfo, dstmap.data, outsize);
   }
   ret = GST_FLOW_OK;
 
@@ -842,12 +754,6 @@
   return ret;
 
   /* ERRORS */
-error:
-  {
-    GST_ELEMENT_ERROR (this, STREAM, FORMAT,
-        (NULL), ("cannot get input/output sizes for %d samples", samples));
-    return GST_FLOW_ERROR;
-  }
 wrong_size:
   {
     GST_ELEMENT_ERROR (this, STREAM, FORMAT,
@@ -884,6 +790,25 @@
   return FALSE;
 }
 
+static GstFlowReturn
+gst_audio_convert_submit_input_buffer (GstBaseTransform * base,
+    gboolean is_discont, GstBuffer * input)
+{
+  GstAudioConvert *this = GST_AUDIO_CONVERT (base);
+
+  if (base->segment.format == GST_FORMAT_TIME) {
+    input =
+        gst_audio_buffer_clip (input, &base->segment, this->in_info.rate,
+        this->in_info.bpf);
+
+    if (!input)
+      return GST_FLOW_OK;
+  }
+
+  return GST_BASE_TRANSFORM_CLASS (parent_class)->submit_input_buffer (base,
+      is_discont, input);
+}
+
 static void
 gst_audio_convert_set_property (GObject * object, guint prop_id,
     const GValue * value, GParamSpec * pspec)
diff --git a/gst/audioconvert/gstaudioconvert.h b/gst/audioconvert/gstaudioconvert.h
index 6ff4374..7de172a 100644
--- a/gst/audioconvert/gstaudioconvert.h
+++ b/gst/audioconvert/gstaudioconvert.h
@@ -26,8 +26,6 @@
 #include <gst/base/gstbasetransform.h>
 #include <gst/audio/audio.h>
 
-#include "audioconvert.h"
-
 #define GST_TYPE_AUDIO_CONVERT            (gst_audio_convert_get_type())
 #define GST_AUDIO_CONVERT(obj)            (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_AUDIO_CONVERT,GstAudioConvert))
 #define GST_AUDIO_CONVERT_CLASS(klass)    (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_AUDIO_CONVERT,GstAudioConvertClass))
@@ -46,10 +44,13 @@
 {
   GstBaseTransform element;
 
-  AudioConvertCtx ctx;
+  /* properties */
+  GstAudioDitherMethod dither;
+  GstAudioNoiseShapingMethod ns;
 
-  GstAudioConvertDithering dither;
-  GstAudioConvertNoiseShaping ns;
+  GstAudioInfo in_info;
+  GstAudioInfo out_info;
+  GstAudioConverter *convert;
 };
 
 struct _GstAudioConvertClass
diff --git a/gst/audioconvert/gstaudioconvertorc-dist.c b/gst/audioconvert/gstaudioconvertorc-dist.c
deleted file mode 100644
index a694cfb..0000000
--- a/gst/audioconvert/gstaudioconvertorc-dist.c
+++ /dev/null
@@ -1,8019 +0,0 @@
-
-/* autogenerated from gstaudioconvertorc.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 audio_convert_orc_unpack_u8 (gint32 * ORC_RESTRICT d1,
-    const guint8 * ORC_RESTRICT s1, int p1, int n);
-void audio_convert_orc_unpack_s8 (gint32 * ORC_RESTRICT d1,
-    const guint8 * ORC_RESTRICT s1, int p1, int n);
-void audio_convert_orc_unpack_u16 (gint32 * ORC_RESTRICT d1,
-    const guint8 * ORC_RESTRICT s1, int p1, int n);
-void audio_convert_orc_unpack_s16 (gint32 * ORC_RESTRICT d1,
-    const guint8 * ORC_RESTRICT s1, int p1, int n);
-void audio_convert_orc_unpack_u16_swap (gint32 * ORC_RESTRICT d1,
-    const guint8 * ORC_RESTRICT s1, int p1, int n);
-void audio_convert_orc_unpack_s16_swap (gint32 * ORC_RESTRICT d1,
-    const guint8 * ORC_RESTRICT s1, int p1, int n);
-void audio_convert_orc_unpack_u32 (gint32 * ORC_RESTRICT d1,
-    const guint8 * ORC_RESTRICT s1, int p1, int n);
-void audio_convert_orc_unpack_s32 (gint32 * ORC_RESTRICT d1,
-    const guint8 * ORC_RESTRICT s1, int p1, int n);
-void audio_convert_orc_unpack_u32_swap (gint32 * ORC_RESTRICT d1,
-    const guint8 * ORC_RESTRICT s1, int p1, int n);
-void audio_convert_orc_unpack_s32_swap (gint32 * ORC_RESTRICT d1,
-    const guint8 * ORC_RESTRICT s1, int p1, int n);
-void audio_convert_orc_unpack_float_s32 (guint32 * ORC_RESTRICT d1,
-    const gfloat * ORC_RESTRICT s1, int n);
-void audio_convert_orc_unpack_float_s32_swap (guint32 * ORC_RESTRICT d1,
-    const gfloat * ORC_RESTRICT s1, int n);
-void audio_convert_orc_unpack_double_s32 (guint32 * ORC_RESTRICT d1,
-    const gdouble * ORC_RESTRICT s1, int n);
-void audio_convert_orc_unpack_double_s32_swap (guint32 * ORC_RESTRICT d1,
-    const gdouble * ORC_RESTRICT s1, int n);
-void audio_convert_orc_unpack_float_double (gdouble * ORC_RESTRICT d1,
-    const gfloat * ORC_RESTRICT s1, int n);
-void audio_convert_orc_unpack_float_double_swap (gdouble * ORC_RESTRICT d1,
-    const gfloat * ORC_RESTRICT s1, int n);
-void audio_convert_orc_unpack_double_double (gdouble * ORC_RESTRICT d1,
-    const gdouble * ORC_RESTRICT s1, int n);
-void audio_convert_orc_unpack_double_double_swap (gdouble * ORC_RESTRICT d1,
-    const gdouble * ORC_RESTRICT s1, int n);
-void audio_convert_orc_unpack_u8_double (gdouble * ORC_RESTRICT d1,
-    const guint8 * ORC_RESTRICT s1, int p1, int n);
-void audio_convert_orc_unpack_s8_double (gdouble * ORC_RESTRICT d1,
-    const guint8 * ORC_RESTRICT s1, int p1, int n);
-void audio_convert_orc_unpack_u16_double (gdouble * ORC_RESTRICT d1,
-    const guint8 * ORC_RESTRICT s1, int p1, int n);
-void audio_convert_orc_unpack_s16_double (gdouble * ORC_RESTRICT d1,
-    const guint8 * ORC_RESTRICT s1, int p1, int n);
-void audio_convert_orc_unpack_u16_double_swap (gdouble * ORC_RESTRICT d1,
-    const guint8 * ORC_RESTRICT s1, int p1, int n);
-void audio_convert_orc_unpack_s16_double_swap (gdouble * ORC_RESTRICT d1,
-    const guint8 * ORC_RESTRICT s1, int p1, int n);
-void audio_convert_orc_unpack_u32_double (gdouble * ORC_RESTRICT d1,
-    const guint8 * ORC_RESTRICT s1, int p1, int n);
-void audio_convert_orc_unpack_s32_double (gdouble * ORC_RESTRICT d1,
-    const guint8 * ORC_RESTRICT s1, int p1, int n);
-void audio_convert_orc_unpack_u32_double_swap (gdouble * ORC_RESTRICT d1,
-    const guint8 * ORC_RESTRICT s1, int p1, int n);
-void audio_convert_orc_unpack_s32_double_swap (gdouble * ORC_RESTRICT d1,
-    const guint8 * ORC_RESTRICT s1, int p1, int n);
-void audio_convert_orc_pack_u8 (guint8 * ORC_RESTRICT d1,
-    const gint32 * ORC_RESTRICT s1, int p1, int n);
-void audio_convert_orc_pack_s8 (guint8 * ORC_RESTRICT d1,
-    const gint32 * ORC_RESTRICT s1, int p1, int n);
-void audio_convert_orc_pack_u16 (guint8 * ORC_RESTRICT d1,
-    const gint32 * ORC_RESTRICT s1, int p1, int n);
-void audio_convert_orc_pack_s16 (guint8 * ORC_RESTRICT d1,
-    const gint32 * ORC_RESTRICT s1, int p1, int n);
-void audio_convert_orc_pack_u16_swap (guint8 * ORC_RESTRICT d1,
-    const gint32 * ORC_RESTRICT s1, int p1, int n);
-void audio_convert_orc_pack_s16_swap (guint8 * ORC_RESTRICT d1,
-    const gint32 * ORC_RESTRICT s1, int p1, int n);
-void audio_convert_orc_pack_u32 (guint8 * ORC_RESTRICT d1,
-    const gint32 * ORC_RESTRICT s1, int p1, int n);
-void audio_convert_orc_pack_s32 (guint8 * ORC_RESTRICT d1,
-    const gint32 * ORC_RESTRICT s1, int p1, int n);
-void audio_convert_orc_pack_u32_swap (guint8 * ORC_RESTRICT d1,
-    const gint32 * ORC_RESTRICT s1, int p1, int n);
-void audio_convert_orc_pack_s32_swap (guint8 * ORC_RESTRICT d1,
-    const gint32 * ORC_RESTRICT s1, int p1, int n);
-void audio_convert_orc_pack_s32_float (gfloat * ORC_RESTRICT d1,
-    const gint32 * ORC_RESTRICT s1, int n);
-void audio_convert_orc_pack_s32_float_swap (gfloat * ORC_RESTRICT d1,
-    const gint32 * ORC_RESTRICT s1, int n);
-void audio_convert_orc_pack_s32_double (gdouble * ORC_RESTRICT d1,
-    const gint32 * ORC_RESTRICT s1, int n);
-void audio_convert_orc_pack_s32_double_swap (gdouble * ORC_RESTRICT d1,
-    const gint32 * ORC_RESTRICT s1, int n);
-void audio_convert_orc_pack_double_float (gfloat * ORC_RESTRICT d1,
-    const gdouble * ORC_RESTRICT s1, int n);
-void audio_convert_orc_pack_double_float_swap (gfloat * ORC_RESTRICT d1,
-    const gdouble * ORC_RESTRICT s1, int n);
-void audio_convert_orc_pack_double_u8 (guint8 * ORC_RESTRICT d1,
-    const gdouble * ORC_RESTRICT s1, int p1, int n);
-void audio_convert_orc_pack_double_s8 (guint8 * ORC_RESTRICT d1,
-    const gdouble * ORC_RESTRICT s1, int p1, int n);
-void audio_convert_orc_pack_double_u16 (guint8 * ORC_RESTRICT d1,
-    const gdouble * ORC_RESTRICT s1, int p1, int n);
-void audio_convert_orc_pack_double_s16 (guint8 * ORC_RESTRICT d1,
-    const gdouble * ORC_RESTRICT s1, int p1, int n);
-void audio_convert_orc_pack_double_u16_swap (guint8 * ORC_RESTRICT d1,
-    const gdouble * ORC_RESTRICT s1, int p1, int n);
-void audio_convert_orc_pack_double_s16_swap (guint8 * ORC_RESTRICT d1,
-    const gdouble * ORC_RESTRICT s1, int p1, int n);
-void audio_convert_orc_pack_double_u32 (guint8 * ORC_RESTRICT d1,
-    const gdouble * ORC_RESTRICT s1, int p1, int n);
-void audio_convert_orc_pack_double_s32 (guint8 * ORC_RESTRICT d1,
-    const gdouble * ORC_RESTRICT s1, int p1, int n);
-void audio_convert_orc_pack_double_u32_swap (guint8 * ORC_RESTRICT d1,
-    const gdouble * ORC_RESTRICT s1, int p1, int n);
-void audio_convert_orc_pack_double_s32_swap (guint8 * ORC_RESTRICT d1,
-    const gdouble * ORC_RESTRICT s1, int p1, 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 */
-
-
-
-/* audio_convert_orc_unpack_u8 */
-#ifdef DISABLE_ORC
-void
-audio_convert_orc_unpack_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;
-#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
-  volatile orc_union32 var35;
-#else
-  orc_union32 var35;
-#endif
-  orc_union32 var36;
-  orc_union16 var37;
-  orc_union32 var38;
-  orc_union32 var39;
-
-  ptr0 = (orc_union32 *) d1;
-  ptr4 = (orc_int8 *) s1;
-
-  /* 4: loadpl */
-  var35.i = (int) 0x80000000;   /* -2147483648 or 1.061e-314f */
-
-  for (i = 0; i < n; i++) {
-    /* 0: loadb */
-    var34 = ptr4[i];
-    /* 1: convubw */
-    var37.i = (orc_uint8) var34;
-    /* 2: convuwl */
-    var38.i = (orc_uint16) var37.i;
-    /* 3: shll */
-    var39.i = ((orc_uint32) var38.i) << p1;
-    /* 5: xorl */
-    var36.i = var39.i ^ var35.i;
-    /* 6: storel */
-    ptr0[i] = var36;
-  }
-
-}
-
-#else
-static void
-_backup_audio_convert_orc_unpack_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;
-#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
-  volatile orc_union32 var35;
-#else
-  orc_union32 var35;
-#endif
-  orc_union32 var36;
-  orc_union16 var37;
-  orc_union32 var38;
-  orc_union32 var39;
-
-  ptr0 = (orc_union32 *) ex->arrays[0];
-  ptr4 = (orc_int8 *) ex->arrays[4];
-
-  /* 4: loadpl */
-  var35.i = (int) 0x80000000;   /* -2147483648 or 1.061e-314f */
-
-  for (i = 0; i < n; i++) {
-    /* 0: loadb */
-    var34 = ptr4[i];
-    /* 1: convubw */
-    var37.i = (orc_uint8) var34;
-    /* 2: convuwl */
-    var38.i = (orc_uint16) var37.i;
-    /* 3: shll */
-    var39.i = ((orc_uint32) var38.i) << ex->params[24];
-    /* 5: xorl */
-    var36.i = var39.i ^ var35.i;
-    /* 6: storel */
-    ptr0[i] = var36;
-  }
-
-}
-
-void
-audio_convert_orc_unpack_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, 27, 97, 117, 100, 105, 111, 95, 99, 111, 110, 118, 101, 114, 116,
-        95, 111, 114, 99, 95, 117, 110, 112, 97, 99, 107, 95, 117, 56, 11, 4,
-        4, 12, 1, 1, 14, 4, 0, 0, 0, 128, 16, 4, 20, 2, 20, 4,
-        150, 32, 4, 154, 33, 32, 124, 33, 33, 24, 132, 0, 33, 16, 2, 0,
-
-      };
-      p = orc_program_new_from_static_bytecode (bc);
-      orc_program_set_backup_function (p, _backup_audio_convert_orc_unpack_u8);
-#else
-      p = orc_program_new ();
-      orc_program_set_name (p, "audio_convert_orc_unpack_u8");
-      orc_program_set_backup_function (p, _backup_audio_convert_orc_unpack_u8);
-      orc_program_add_destination (p, 4, "d1");
-      orc_program_add_source (p, 1, "s1");
-      orc_program_add_constant (p, 4, 0x80000000, "c1");
-      orc_program_add_parameter (p, 4, "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, "convuwl", 0, ORC_VAR_T2, ORC_VAR_T1, ORC_VAR_D1,
-          ORC_VAR_D1);
-      orc_program_append_2 (p, "shll", 0, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_P1,
-          ORC_VAR_D1);
-      orc_program_append_2 (p, "xorl", 0, ORC_VAR_D1, ORC_VAR_T2, 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->params[ORC_VAR_P1] = p1;
-
-  func = c->exec;
-  func (ex);
-}
-#endif
-
-
-/* audio_convert_orc_unpack_s8 */
-#ifdef DISABLE_ORC
-void
-audio_convert_orc_unpack_s8 (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_union32 var35;
-  orc_union16 var36;
-  orc_union32 var37;
-
-  ptr0 = (orc_union32 *) d1;
-  ptr4 = (orc_int8 *) s1;
-
-
-  for (i = 0; i < n; i++) {
-    /* 0: loadb */
-    var34 = ptr4[i];
-    /* 1: convubw */
-    var36.i = (orc_uint8) var34;
-    /* 2: convuwl */
-    var37.i = (orc_uint16) var36.i;
-    /* 3: shll */
-    var35.i = ((orc_uint32) var37.i) << p1;
-    /* 4: storel */
-    ptr0[i] = var35;
-  }
-
-}
-
-#else
-static void
-_backup_audio_convert_orc_unpack_s8 (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_union32 var35;
-  orc_union16 var36;
-  orc_union32 var37;
-
-  ptr0 = (orc_union32 *) ex->arrays[0];
-  ptr4 = (orc_int8 *) ex->arrays[4];
-
-
-  for (i = 0; i < n; i++) {
-    /* 0: loadb */
-    var34 = ptr4[i];
-    /* 1: convubw */
-    var36.i = (orc_uint8) var34;
-    /* 2: convuwl */
-    var37.i = (orc_uint16) var36.i;
-    /* 3: shll */
-    var35.i = ((orc_uint32) var37.i) << ex->params[24];
-    /* 4: storel */
-    ptr0[i] = var35;
-  }
-
-}
-
-void
-audio_convert_orc_unpack_s8 (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, 27, 97, 117, 100, 105, 111, 95, 99, 111, 110, 118, 101, 114, 116,
-        95, 111, 114, 99, 95, 117, 110, 112, 97, 99, 107, 95, 115, 56, 11, 4,
-        4, 12, 1, 1, 16, 4, 20, 2, 20, 4, 150, 32, 4, 154, 33, 32,
-        124, 0, 33, 24, 2, 0,
-      };
-      p = orc_program_new_from_static_bytecode (bc);
-      orc_program_set_backup_function (p, _backup_audio_convert_orc_unpack_s8);
-#else
-      p = orc_program_new ();
-      orc_program_set_name (p, "audio_convert_orc_unpack_s8");
-      orc_program_set_backup_function (p, _backup_audio_convert_orc_unpack_s8);
-      orc_program_add_destination (p, 4, "d1");
-      orc_program_add_source (p, 1, "s1");
-      orc_program_add_parameter (p, 4, "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, "convuwl", 0, ORC_VAR_T2, ORC_VAR_T1, ORC_VAR_D1,
-          ORC_VAR_D1);
-      orc_program_append_2 (p, "shll", 0, ORC_VAR_D1, ORC_VAR_T2, 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
-
-
-/* audio_convert_orc_unpack_u16 */
-#ifdef DISABLE_ORC
-void
-audio_convert_orc_unpack_u16 (gint32 * ORC_RESTRICT d1,
-    const guint8 * ORC_RESTRICT s1, int p1, int n)
-{
-  int i;
-  orc_union32 *ORC_RESTRICT ptr0;
-  const orc_union16 *ORC_RESTRICT ptr4;
-  orc_union16 var33;
-#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
-  volatile orc_union32 var34;
-#else
-  orc_union32 var34;
-#endif
-  orc_union32 var35;
-  orc_union32 var36;
-  orc_union32 var37;
-
-  ptr0 = (orc_union32 *) d1;
-  ptr4 = (orc_union16 *) s1;
-
-  /* 3: loadpl */
-  var34.i = (int) 0x80000000;   /* -2147483648 or 1.061e-314f */
-
-  for (i = 0; i < n; i++) {
-    /* 0: loadw */
-    var33 = ptr4[i];
-    /* 1: convuwl */
-    var36.i = (orc_uint16) var33.i;
-    /* 2: shll */
-    var37.i = ((orc_uint32) var36.i) << p1;
-    /* 4: xorl */
-    var35.i = var37.i ^ var34.i;
-    /* 5: storel */
-    ptr0[i] = var35;
-  }
-
-}
-
-#else
-static void
-_backup_audio_convert_orc_unpack_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;
-#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
-  volatile orc_union32 var34;
-#else
-  orc_union32 var34;
-#endif
-  orc_union32 var35;
-  orc_union32 var36;
-  orc_union32 var37;
-
-  ptr0 = (orc_union32 *) ex->arrays[0];
-  ptr4 = (orc_union16 *) ex->arrays[4];
-
-  /* 3: loadpl */
-  var34.i = (int) 0x80000000;   /* -2147483648 or 1.061e-314f */
-
-  for (i = 0; i < n; i++) {
-    /* 0: loadw */
-    var33 = ptr4[i];
-    /* 1: convuwl */
-    var36.i = (orc_uint16) var33.i;
-    /* 2: shll */
-    var37.i = ((orc_uint32) var36.i) << ex->params[24];
-    /* 4: xorl */
-    var35.i = var37.i ^ var34.i;
-    /* 5: storel */
-    ptr0[i] = var35;
-  }
-
-}
-
-void
-audio_convert_orc_unpack_u16 (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, 28, 97, 117, 100, 105, 111, 95, 99, 111, 110, 118, 101, 114, 116,
-        95, 111, 114, 99, 95, 117, 110, 112, 97, 99, 107, 95, 117, 49, 54, 11,
-        4, 4, 12, 2, 2, 14, 4, 0, 0, 0, 128, 16, 4, 20, 4, 154,
-        32, 4, 124, 32, 32, 24, 132, 0, 32, 16, 2, 0,
-      };
-      p = orc_program_new_from_static_bytecode (bc);
-      orc_program_set_backup_function (p, _backup_audio_convert_orc_unpack_u16);
-#else
-      p = orc_program_new ();
-      orc_program_set_name (p, "audio_convert_orc_unpack_u16");
-      orc_program_set_backup_function (p, _backup_audio_convert_orc_unpack_u16);
-      orc_program_add_destination (p, 4, "d1");
-      orc_program_add_source (p, 2, "s1");
-      orc_program_add_constant (p, 4, 0x80000000, "c1");
-      orc_program_add_parameter (p, 4, "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, "shll", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_P1,
-          ORC_VAR_D1);
-      orc_program_append_2 (p, "xorl", 0, ORC_VAR_D1, ORC_VAR_T1, 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->params[ORC_VAR_P1] = p1;
-
-  func = c->exec;
-  func (ex);
-}
-#endif
-
-
-/* audio_convert_orc_unpack_s16 */
-#ifdef DISABLE_ORC
-void
-audio_convert_orc_unpack_s16 (gint32 * ORC_RESTRICT d1,
-    const guint8 * 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;
-
-  ptr0 = (orc_union32 *) d1;
-  ptr4 = (orc_union16 *) s1;
-
-
-  for (i = 0; i < n; i++) {
-    /* 0: loadw */
-    var33 = ptr4[i];
-    /* 1: convuwl */
-    var35.i = (orc_uint16) var33.i;
-    /* 2: shll */
-    var34.i = ((orc_uint32) var35.i) << p1;
-    /* 3: storel */
-    ptr0[i] = var34;
-  }
-
-}
-
-#else
-static void
-_backup_audio_convert_orc_unpack_s16 (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;
-
-  ptr0 = (orc_union32 *) ex->arrays[0];
-  ptr4 = (orc_union16 *) ex->arrays[4];
-
-
-  for (i = 0; i < n; i++) {
-    /* 0: loadw */
-    var33 = ptr4[i];
-    /* 1: convuwl */
-    var35.i = (orc_uint16) var33.i;
-    /* 2: shll */
-    var34.i = ((orc_uint32) var35.i) << ex->params[24];
-    /* 3: storel */
-    ptr0[i] = var34;
-  }
-
-}
-
-void
-audio_convert_orc_unpack_s16 (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, 28, 97, 117, 100, 105, 111, 95, 99, 111, 110, 118, 101, 114, 116,
-        95, 111, 114, 99, 95, 117, 110, 112, 97, 99, 107, 95, 115, 49, 54, 11,
-        4, 4, 12, 2, 2, 16, 4, 20, 4, 154, 32, 4, 124, 0, 32, 24,
-        2, 0,
-      };
-      p = orc_program_new_from_static_bytecode (bc);
-      orc_program_set_backup_function (p, _backup_audio_convert_orc_unpack_s16);
-#else
-      p = orc_program_new ();
-      orc_program_set_name (p, "audio_convert_orc_unpack_s16");
-      orc_program_set_backup_function (p, _backup_audio_convert_orc_unpack_s16);
-      orc_program_add_destination (p, 4, "d1");
-      orc_program_add_source (p, 2, "s1");
-      orc_program_add_parameter (p, 4, "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, "shll", 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
-
-
-/* audio_convert_orc_unpack_u16_swap */
-#ifdef DISABLE_ORC
-void
-audio_convert_orc_unpack_u16_swap (gint32 * ORC_RESTRICT d1,
-    const guint8 * ORC_RESTRICT s1, int p1, int n)
-{
-  int i;
-  orc_union32 *ORC_RESTRICT ptr0;
-  const orc_union16 *ORC_RESTRICT ptr4;
-  orc_union16 var34;
-#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
-  volatile orc_union32 var35;
-#else
-  orc_union32 var35;
-#endif
-  orc_union32 var36;
-  orc_union16 var37;
-  orc_union32 var38;
-  orc_union32 var39;
-
-  ptr0 = (orc_union32 *) d1;
-  ptr4 = (orc_union16 *) s1;
-
-  /* 4: loadpl */
-  var35.i = (int) 0x80000000;   /* -2147483648 or 1.061e-314f */
-
-  for (i = 0; i < n; i++) {
-    /* 0: loadw */
-    var34 = ptr4[i];
-    /* 1: swapw */
-    var37.i = ORC_SWAP_W (var34.i);
-    /* 2: convuwl */
-    var38.i = (orc_uint16) var37.i;
-    /* 3: shll */
-    var39.i = ((orc_uint32) var38.i) << p1;
-    /* 5: xorl */
-    var36.i = var39.i ^ var35.i;
-    /* 6: storel */
-    ptr0[i] = var36;
-  }
-
-}
-
-#else
-static void
-_backup_audio_convert_orc_unpack_u16_swap (OrcExecutor * ORC_RESTRICT ex)
-{
-  int i;
-  int n = ex->n;
-  orc_union32 *ORC_RESTRICT ptr0;
-  const orc_union16 *ORC_RESTRICT ptr4;
-  orc_union16 var34;
-#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
-  volatile orc_union32 var35;
-#else
-  orc_union32 var35;
-#endif
-  orc_union32 var36;
-  orc_union16 var37;
-  orc_union32 var38;
-  orc_union32 var39;
-
-  ptr0 = (orc_union32 *) ex->arrays[0];
-  ptr4 = (orc_union16 *) ex->arrays[4];
-
-  /* 4: loadpl */
-  var35.i = (int) 0x80000000;   /* -2147483648 or 1.061e-314f */
-
-  for (i = 0; i < n; i++) {
-    /* 0: loadw */
-    var34 = ptr4[i];
-    /* 1: swapw */
-    var37.i = ORC_SWAP_W (var34.i);
-    /* 2: convuwl */
-    var38.i = (orc_uint16) var37.i;
-    /* 3: shll */
-    var39.i = ((orc_uint32) var38.i) << ex->params[24];
-    /* 5: xorl */
-    var36.i = var39.i ^ var35.i;
-    /* 6: storel */
-    ptr0[i] = var36;
-  }
-
-}
-
-void
-audio_convert_orc_unpack_u16_swap (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, 33, 97, 117, 100, 105, 111, 95, 99, 111, 110, 118, 101, 114, 116,
-        95, 111, 114, 99, 95, 117, 110, 112, 97, 99, 107, 95, 117, 49, 54, 95,
-        115, 119, 97, 112, 11, 4, 4, 12, 2, 2, 14, 4, 0, 0, 0, 128,
-        16, 4, 20, 2, 20, 4, 183, 32, 4, 154, 33, 32, 124, 33, 33, 24,
-        132, 0, 33, 16, 2, 0,
-      };
-      p = orc_program_new_from_static_bytecode (bc);
-      orc_program_set_backup_function (p,
-          _backup_audio_convert_orc_unpack_u16_swap);
-#else
-      p = orc_program_new ();
-      orc_program_set_name (p, "audio_convert_orc_unpack_u16_swap");
-      orc_program_set_backup_function (p,
-          _backup_audio_convert_orc_unpack_u16_swap);
-      orc_program_add_destination (p, 4, "d1");
-      orc_program_add_source (p, 2, "s1");
-      orc_program_add_constant (p, 4, 0x80000000, "c1");
-      orc_program_add_parameter (p, 4, "p1");
-      orc_program_add_temporary (p, 2, "t1");
-      orc_program_add_temporary (p, 4, "t2");
-
-      orc_program_append_2 (p, "swapw", 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_T1, ORC_VAR_D1,
-          ORC_VAR_D1);
-      orc_program_append_2 (p, "shll", 0, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_P1,
-          ORC_VAR_D1);
-      orc_program_append_2 (p, "xorl", 0, ORC_VAR_D1, ORC_VAR_T2, 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->params[ORC_VAR_P1] = p1;
-
-  func = c->exec;
-  func (ex);
-}
-#endif
-
-
-/* audio_convert_orc_unpack_s16_swap */
-#ifdef DISABLE_ORC
-void
-audio_convert_orc_unpack_s16_swap (gint32 * ORC_RESTRICT d1,
-    const guint8 * ORC_RESTRICT s1, int p1, int n)
-{
-  int i;
-  orc_union32 *ORC_RESTRICT ptr0;
-  const orc_union16 *ORC_RESTRICT ptr4;
-  orc_union16 var34;
-  orc_union32 var35;
-  orc_union16 var36;
-  orc_union32 var37;
-
-  ptr0 = (orc_union32 *) d1;
-  ptr4 = (orc_union16 *) s1;
-
-
-  for (i = 0; i < n; i++) {
-    /* 0: loadw */
-    var34 = ptr4[i];
-    /* 1: swapw */
-    var36.i = ORC_SWAP_W (var34.i);
-    /* 2: convuwl */
-    var37.i = (orc_uint16) var36.i;
-    /* 3: shll */
-    var35.i = ((orc_uint32) var37.i) << p1;
-    /* 4: storel */
-    ptr0[i] = var35;
-  }
-
-}
-
-#else
-static void
-_backup_audio_convert_orc_unpack_s16_swap (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_union32 var35;
-  orc_union16 var36;
-  orc_union32 var37;
-
-  ptr0 = (orc_union32 *) ex->arrays[0];
-  ptr4 = (orc_union16 *) ex->arrays[4];
-
-
-  for (i = 0; i < n; i++) {
-    /* 0: loadw */
-    var34 = ptr4[i];
-    /* 1: swapw */
-    var36.i = ORC_SWAP_W (var34.i);
-    /* 2: convuwl */
-    var37.i = (orc_uint16) var36.i;
-    /* 3: shll */
-    var35.i = ((orc_uint32) var37.i) << ex->params[24];
-    /* 4: storel */
-    ptr0[i] = var35;
-  }
-
-}
-
-void
-audio_convert_orc_unpack_s16_swap (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, 33, 97, 117, 100, 105, 111, 95, 99, 111, 110, 118, 101, 114, 116,
-        95, 111, 114, 99, 95, 117, 110, 112, 97, 99, 107, 95, 115, 49, 54, 95,
-        115, 119, 97, 112, 11, 4, 4, 12, 2, 2, 16, 4, 20, 2, 20, 4,
-        183, 32, 4, 154, 33, 32, 124, 0, 33, 24, 2, 0,
-      };
-      p = orc_program_new_from_static_bytecode (bc);
-      orc_program_set_backup_function (p,
-          _backup_audio_convert_orc_unpack_s16_swap);
-#else
-      p = orc_program_new ();
-      orc_program_set_name (p, "audio_convert_orc_unpack_s16_swap");
-      orc_program_set_backup_function (p,
-          _backup_audio_convert_orc_unpack_s16_swap);
-      orc_program_add_destination (p, 4, "d1");
-      orc_program_add_source (p, 2, "s1");
-      orc_program_add_parameter (p, 4, "p1");
-      orc_program_add_temporary (p, 2, "t1");
-      orc_program_add_temporary (p, 4, "t2");
-
-      orc_program_append_2 (p, "swapw", 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_T1, ORC_VAR_D1,
-          ORC_VAR_D1);
-      orc_program_append_2 (p, "shll", 0, ORC_VAR_D1, ORC_VAR_T2, 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
-
-
-/* audio_convert_orc_unpack_u32 */
-#ifdef DISABLE_ORC
-void
-audio_convert_orc_unpack_u32 (gint32 * ORC_RESTRICT d1,
-    const guint8 * ORC_RESTRICT s1, int p1, int n)
-{
-  int i;
-  orc_union32 *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_union32 var35;
-  orc_union32 var36;
-
-  ptr0 = (orc_union32 *) d1;
-  ptr4 = (orc_union32 *) s1;
-
-  /* 2: loadpl */
-  var34.i = (int) 0x80000000;   /* -2147483648 or 1.061e-314f */
-
-  for (i = 0; i < n; i++) {
-    /* 0: loadl */
-    var33 = ptr4[i];
-    /* 1: shll */
-    var36.i = ((orc_uint32) var33.i) << p1;
-    /* 3: xorl */
-    var35.i = var36.i ^ var34.i;
-    /* 4: storel */
-    ptr0[i] = var35;
-  }
-
-}
-
-#else
-static void
-_backup_audio_convert_orc_unpack_u32 (OrcExecutor * ORC_RESTRICT ex)
-{
-  int i;
-  int n = ex->n;
-  orc_union32 *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_union32 var35;
-  orc_union32 var36;
-
-  ptr0 = (orc_union32 *) ex->arrays[0];
-  ptr4 = (orc_union32 *) ex->arrays[4];
-
-  /* 2: loadpl */
-  var34.i = (int) 0x80000000;   /* -2147483648 or 1.061e-314f */
-
-  for (i = 0; i < n; i++) {
-    /* 0: loadl */
-    var33 = ptr4[i];
-    /* 1: shll */
-    var36.i = ((orc_uint32) var33.i) << ex->params[24];
-    /* 3: xorl */
-    var35.i = var36.i ^ var34.i;
-    /* 4: storel */
-    ptr0[i] = var35;
-  }
-
-}
-
-void
-audio_convert_orc_unpack_u32 (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, 28, 97, 117, 100, 105, 111, 95, 99, 111, 110, 118, 101, 114, 116,
-        95, 111, 114, 99, 95, 117, 110, 112, 97, 99, 107, 95, 117, 51, 50, 11,
-        4, 4, 12, 4, 4, 14, 4, 0, 0, 0, 128, 16, 4, 20, 4, 124,
-        32, 4, 24, 132, 0, 32, 16, 2, 0,
-      };
-      p = orc_program_new_from_static_bytecode (bc);
-      orc_program_set_backup_function (p, _backup_audio_convert_orc_unpack_u32);
-#else
-      p = orc_program_new ();
-      orc_program_set_name (p, "audio_convert_orc_unpack_u32");
-      orc_program_set_backup_function (p, _backup_audio_convert_orc_unpack_u32);
-      orc_program_add_destination (p, 4, "d1");
-      orc_program_add_source (p, 4, "s1");
-      orc_program_add_constant (p, 4, 0x80000000, "c1");
-      orc_program_add_parameter (p, 4, "p1");
-      orc_program_add_temporary (p, 4, "t1");
-
-      orc_program_append_2 (p, "shll", 0, ORC_VAR_T1, ORC_VAR_S1, ORC_VAR_P1,
-          ORC_VAR_D1);
-      orc_program_append_2 (p, "xorl", 0, ORC_VAR_D1, ORC_VAR_T1, 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->params[ORC_VAR_P1] = p1;
-
-  func = c->exec;
-  func (ex);
-}
-#endif
-
-
-/* audio_convert_orc_unpack_s32 */
-#ifdef DISABLE_ORC
-void
-audio_convert_orc_unpack_s32 (gint32 * ORC_RESTRICT d1,
-    const guint8 * ORC_RESTRICT s1, int p1, int n)
-{
-  int i;
-  orc_union32 *ORC_RESTRICT ptr0;
-  const orc_union32 *ORC_RESTRICT ptr4;
-  orc_union32 var32;
-  orc_union32 var33;
-
-  ptr0 = (orc_union32 *) d1;
-  ptr4 = (orc_union32 *) s1;
-
-
-  for (i = 0; i < n; i++) {
-    /* 0: loadl */
-    var32 = ptr4[i];
-    /* 1: shll */
-    var33.i = ((orc_uint32) var32.i) << p1;
-    /* 2: storel */
-    ptr0[i] = var33;
-  }
-
-}
-
-#else
-static void
-_backup_audio_convert_orc_unpack_s32 (OrcExecutor * ORC_RESTRICT ex)
-{
-  int i;
-  int n = ex->n;
-  orc_union32 *ORC_RESTRICT ptr0;
-  const orc_union32 *ORC_RESTRICT ptr4;
-  orc_union32 var32;
-  orc_union32 var33;
-
-  ptr0 = (orc_union32 *) ex->arrays[0];
-  ptr4 = (orc_union32 *) ex->arrays[4];
-
-
-  for (i = 0; i < n; i++) {
-    /* 0: loadl */
-    var32 = ptr4[i];
-    /* 1: shll */
-    var33.i = ((orc_uint32) var32.i) << ex->params[24];
-    /* 2: storel */
-    ptr0[i] = var33;
-  }
-
-}
-
-void
-audio_convert_orc_unpack_s32 (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, 28, 97, 117, 100, 105, 111, 95, 99, 111, 110, 118, 101, 114, 116,
-        95, 111, 114, 99, 95, 117, 110, 112, 97, 99, 107, 95, 115, 51, 50, 11,
-        4, 4, 12, 4, 4, 16, 4, 124, 0, 4, 24, 2, 0,
-      };
-      p = orc_program_new_from_static_bytecode (bc);
-      orc_program_set_backup_function (p, _backup_audio_convert_orc_unpack_s32);
-#else
-      p = orc_program_new ();
-      orc_program_set_name (p, "audio_convert_orc_unpack_s32");
-      orc_program_set_backup_function (p, _backup_audio_convert_orc_unpack_s32);
-      orc_program_add_destination (p, 4, "d1");
-      orc_program_add_source (p, 4, "s1");
-      orc_program_add_parameter (p, 4, "p1");
-
-      orc_program_append_2 (p, "shll", 0, ORC_VAR_D1, ORC_VAR_S1, 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
-
-
-/* audio_convert_orc_unpack_u32_swap */
-#ifdef DISABLE_ORC
-void
-audio_convert_orc_unpack_u32_swap (gint32 * ORC_RESTRICT d1,
-    const guint8 * ORC_RESTRICT s1, int p1, int n)
-{
-  int i;
-  orc_union32 *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_union32 var35;
-  orc_union32 var36;
-  orc_union32 var37;
-
-  ptr0 = (orc_union32 *) d1;
-  ptr4 = (orc_union32 *) s1;
-
-  /* 3: loadpl */
-  var34.i = (int) 0x80000000;   /* -2147483648 or 1.061e-314f */
-
-  for (i = 0; i < n; i++) {
-    /* 0: loadl */
-    var33 = ptr4[i];
-    /* 1: swapl */
-    var36.i = ORC_SWAP_L (var33.i);
-    /* 2: shll */
-    var37.i = ((orc_uint32) var36.i) << p1;
-    /* 4: xorl */
-    var35.i = var37.i ^ var34.i;
-    /* 5: storel */
-    ptr0[i] = var35;
-  }
-
-}
-
-#else
-static void
-_backup_audio_convert_orc_unpack_u32_swap (OrcExecutor * ORC_RESTRICT ex)
-{
-  int i;
-  int n = ex->n;
-  orc_union32 *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_union32 var35;
-  orc_union32 var36;
-  orc_union32 var37;
-
-  ptr0 = (orc_union32 *) ex->arrays[0];
-  ptr4 = (orc_union32 *) ex->arrays[4];
-
-  /* 3: loadpl */
-  var34.i = (int) 0x80000000;   /* -2147483648 or 1.061e-314f */
-
-  for (i = 0; i < n; i++) {
-    /* 0: loadl */
-    var33 = ptr4[i];
-    /* 1: swapl */
-    var36.i = ORC_SWAP_L (var33.i);
-    /* 2: shll */
-    var37.i = ((orc_uint32) var36.i) << ex->params[24];
-    /* 4: xorl */
-    var35.i = var37.i ^ var34.i;
-    /* 5: storel */
-    ptr0[i] = var35;
-  }
-
-}
-
-void
-audio_convert_orc_unpack_u32_swap (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, 33, 97, 117, 100, 105, 111, 95, 99, 111, 110, 118, 101, 114, 116,
-        95, 111, 114, 99, 95, 117, 110, 112, 97, 99, 107, 95, 117, 51, 50, 95,
-        115, 119, 97, 112, 11, 4, 4, 12, 4, 4, 14, 4, 0, 0, 0, 128,
-        16, 4, 20, 4, 184, 32, 4, 124, 32, 32, 24, 132, 0, 32, 16, 2,
-        0,
-      };
-      p = orc_program_new_from_static_bytecode (bc);
-      orc_program_set_backup_function (p,
-          _backup_audio_convert_orc_unpack_u32_swap);
-#else
-      p = orc_program_new ();
-      orc_program_set_name (p, "audio_convert_orc_unpack_u32_swap");
-      orc_program_set_backup_function (p,
-          _backup_audio_convert_orc_unpack_u32_swap);
-      orc_program_add_destination (p, 4, "d1");
-      orc_program_add_source (p, 4, "s1");
-      orc_program_add_constant (p, 4, 0x80000000, "c1");
-      orc_program_add_parameter (p, 4, "p1");
-      orc_program_add_temporary (p, 4, "t1");
-
-      orc_program_append_2 (p, "swapl", 0, ORC_VAR_T1, ORC_VAR_S1, ORC_VAR_D1,
-          ORC_VAR_D1);
-      orc_program_append_2 (p, "shll", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_P1,
-          ORC_VAR_D1);
-      orc_program_append_2 (p, "xorl", 0, ORC_VAR_D1, ORC_VAR_T1, 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->params[ORC_VAR_P1] = p1;
-
-  func = c->exec;
-  func (ex);
-}
-#endif
-
-
-/* audio_convert_orc_unpack_s32_swap */
-#ifdef DISABLE_ORC
-void
-audio_convert_orc_unpack_s32_swap (gint32 * ORC_RESTRICT d1,
-    const guint8 * ORC_RESTRICT s1, int p1, int n)
-{
-  int i;
-  orc_union32 *ORC_RESTRICT ptr0;
-  const orc_union32 *ORC_RESTRICT ptr4;
-  orc_union32 var33;
-  orc_union32 var34;
-  orc_union32 var35;
-
-  ptr0 = (orc_union32 *) d1;
-  ptr4 = (orc_union32 *) s1;
-
-
-  for (i = 0; i < n; i++) {
-    /* 0: loadl */
-    var33 = ptr4[i];
-    /* 1: swapl */
-    var35.i = ORC_SWAP_L (var33.i);
-    /* 2: shll */
-    var34.i = ((orc_uint32) var35.i) << p1;
-    /* 3: storel */
-    ptr0[i] = var34;
-  }
-
-}
-
-#else
-static void
-_backup_audio_convert_orc_unpack_s32_swap (OrcExecutor * ORC_RESTRICT ex)
-{
-  int i;
-  int n = ex->n;
-  orc_union32 *ORC_RESTRICT ptr0;
-  const orc_union32 *ORC_RESTRICT ptr4;
-  orc_union32 var33;
-  orc_union32 var34;
-  orc_union32 var35;
-
-  ptr0 = (orc_union32 *) ex->arrays[0];
-  ptr4 = (orc_union32 *) ex->arrays[4];
-
-
-  for (i = 0; i < n; i++) {
-    /* 0: loadl */
-    var33 = ptr4[i];
-    /* 1: swapl */
-    var35.i = ORC_SWAP_L (var33.i);
-    /* 2: shll */
-    var34.i = ((orc_uint32) var35.i) << ex->params[24];
-    /* 3: storel */
-    ptr0[i] = var34;
-  }
-
-}
-
-void
-audio_convert_orc_unpack_s32_swap (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, 33, 97, 117, 100, 105, 111, 95, 99, 111, 110, 118, 101, 114, 116,
-        95, 111, 114, 99, 95, 117, 110, 112, 97, 99, 107, 95, 115, 51, 50, 95,
-        115, 119, 97, 112, 11, 4, 4, 12, 4, 4, 16, 4, 20, 4, 184, 32,
-        4, 124, 0, 32, 24, 2, 0,
-      };
-      p = orc_program_new_from_static_bytecode (bc);
-      orc_program_set_backup_function (p,
-          _backup_audio_convert_orc_unpack_s32_swap);
-#else
-      p = orc_program_new ();
-      orc_program_set_name (p, "audio_convert_orc_unpack_s32_swap");
-      orc_program_set_backup_function (p,
-          _backup_audio_convert_orc_unpack_s32_swap);
-      orc_program_add_destination (p, 4, "d1");
-      orc_program_add_source (p, 4, "s1");
-      orc_program_add_parameter (p, 4, "p1");
-      orc_program_add_temporary (p, 4, "t1");
-
-      orc_program_append_2 (p, "swapl", 0, ORC_VAR_T1, ORC_VAR_S1, ORC_VAR_D1,
-          ORC_VAR_D1);
-      orc_program_append_2 (p, "shll", 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
-
-
-/* audio_convert_orc_unpack_float_s32 */
-#ifdef DISABLE_ORC
-void
-audio_convert_orc_unpack_float_s32 (guint32 * ORC_RESTRICT d1,
-    const gfloat * ORC_RESTRICT s1, int n)
-{
-  int i;
-  orc_union32 *ORC_RESTRICT ptr0;
-  const orc_union32 *ORC_RESTRICT ptr4;
-#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
-  volatile orc_union32 var33;
-#else
-  orc_union32 var33;
-#endif
-#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
-  volatile orc_union32 var34;
-#else
-  orc_union32 var34;
-#endif
-  orc_union32 var35;
-  orc_union32 var36;
-  orc_union32 var37;
-  orc_union32 var38;
-
-  ptr0 = (orc_union32 *) d1;
-  ptr4 = (orc_union32 *) s1;
-
-  /* 1: loadpl */
-  var33.i = (int) 0x4f000000;   /* 1325400064 or 6.54835e-315f */
-  /* 3: loadpl */
-  var34.i = (int) 0x3f000000;   /* 1056964608 or 5.2221e-315f */
-
-  for (i = 0; i < n; i++) {
-    /* 0: loadl */
-    var36 = ptr4[i];
-    /* 2: mulf */
-    {
-      orc_union32 _src1;
-      orc_union32 _src2;
-      orc_union32 _dest1;
-      _src1.i = ORC_DENORMAL (var36.i);
-      _src2.i = ORC_DENORMAL (var33.i);
-      _dest1.f = _src1.f * _src2.f;
-      var37.i = ORC_DENORMAL (_dest1.i);
-    }
-    /* 4: addf */
-    {
-      orc_union32 _src1;
-      orc_union32 _src2;
-      orc_union32 _dest1;
-      _src1.i = ORC_DENORMAL (var37.i);
-      _src2.i = ORC_DENORMAL (var34.i);
-      _dest1.f = _src1.f + _src2.f;
-      var38.i = ORC_DENORMAL (_dest1.i);
-    }
-    /* 5: convfl */
-    {
-      int tmp;
-      tmp = (int) var38.f;
-      if (tmp == 0x80000000 && !(var38.i & 0x80000000))
-        tmp = 0x7fffffff;
-      var35.i = tmp;
-    }
-    /* 6: storel */
-    ptr0[i] = var35;
-  }
-
-}
-
-#else
-static void
-_backup_audio_convert_orc_unpack_float_s32 (OrcExecutor * ORC_RESTRICT ex)
-{
-  int i;
-  int n = ex->n;
-  orc_union32 *ORC_RESTRICT ptr0;
-  const orc_union32 *ORC_RESTRICT ptr4;
-#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
-  volatile orc_union32 var33;
-#else
-  orc_union32 var33;
-#endif
-#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
-  volatile orc_union32 var34;
-#else
-  orc_union32 var34;
-#endif
-  orc_union32 var35;
-  orc_union32 var36;
-  orc_union32 var37;
-  orc_union32 var38;
-
-  ptr0 = (orc_union32 *) ex->arrays[0];
-  ptr4 = (orc_union32 *) ex->arrays[4];
-
-  /* 1: loadpl */
-  var33.i = (int) 0x4f000000;   /* 1325400064 or 6.54835e-315f */
-  /* 3: loadpl */
-  var34.i = (int) 0x3f000000;   /* 1056964608 or 5.2221e-315f */
-
-  for (i = 0; i < n; i++) {
-    /* 0: loadl */
-    var36 = ptr4[i];
-    /* 2: mulf */
-    {
-      orc_union32 _src1;
-      orc_union32 _src2;
-      orc_union32 _dest1;
-      _src1.i = ORC_DENORMAL (var36.i);
-      _src2.i = ORC_DENORMAL (var33.i);
-      _dest1.f = _src1.f * _src2.f;
-      var37.i = ORC_DENORMAL (_dest1.i);
-    }
-    /* 4: addf */
-    {
-      orc_union32 _src1;
-      orc_union32 _src2;
-      orc_union32 _dest1;
-      _src1.i = ORC_DENORMAL (var37.i);
-      _src2.i = ORC_DENORMAL (var34.i);
-      _dest1.f = _src1.f + _src2.f;
-      var38.i = ORC_DENORMAL (_dest1.i);
-    }
-    /* 5: convfl */
-    {
-      int tmp;
-      tmp = (int) var38.f;
-      if (tmp == 0x80000000 && !(var38.i & 0x80000000))
-        tmp = 0x7fffffff;
-      var35.i = tmp;
-    }
-    /* 6: storel */
-    ptr0[i] = var35;
-  }
-
-}
-
-void
-audio_convert_orc_unpack_float_s32 (guint32 * ORC_RESTRICT d1,
-    const gfloat * 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, 97, 117, 100, 105, 111, 95, 99, 111, 110, 118, 101, 114, 116,
-        95, 111, 114, 99, 95, 117, 110, 112, 97, 99, 107, 95, 102, 108, 111, 97,
-        116, 95, 115, 51, 50, 11, 4, 4, 12, 4, 4, 14, 4, 0, 0, 0,
-        79, 14, 4, 0, 0, 0, 63, 20, 4, 113, 32, 4, 202, 32, 32, 16,
-        200, 32, 32, 17, 210, 0, 32, 2, 0,
-      };
-      p = orc_program_new_from_static_bytecode (bc);
-      orc_program_set_backup_function (p,
-          _backup_audio_convert_orc_unpack_float_s32);
-#else
-      p = orc_program_new ();
-      orc_program_set_name (p, "audio_convert_orc_unpack_float_s32");
-      orc_program_set_backup_function (p,
-          _backup_audio_convert_orc_unpack_float_s32);
-      orc_program_add_destination (p, 4, "d1");
-      orc_program_add_source (p, 4, "s1");
-      orc_program_add_constant (p, 4, 0x4f000000, "c1");
-      orc_program_add_constant (p, 4, 0x3f000000, "c2");
-      orc_program_add_temporary (p, 4, "t1");
-
-      orc_program_append_2 (p, "loadl", 0, ORC_VAR_T1, ORC_VAR_S1, ORC_VAR_D1,
-          ORC_VAR_D1);
-      orc_program_append_2 (p, "mulf", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_C1,
-          ORC_VAR_D1);
-      orc_program_append_2 (p, "addf", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_C2,
-          ORC_VAR_D1);
-      orc_program_append_2 (p, "convfl", 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
-
-
-/* audio_convert_orc_unpack_float_s32_swap */
-#ifdef DISABLE_ORC
-void
-audio_convert_orc_unpack_float_s32_swap (guint32 * ORC_RESTRICT d1,
-    const gfloat * ORC_RESTRICT s1, int n)
-{
-  int i;
-  orc_union32 *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
-#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
-  volatile orc_union32 var35;
-#else
-  orc_union32 var35;
-#endif
-  orc_union32 var36;
-  orc_union32 var37;
-  orc_union32 var38;
-  orc_union32 var39;
-
-  ptr0 = (orc_union32 *) d1;
-  ptr4 = (orc_union32 *) s1;
-
-  /* 2: loadpl */
-  var34.i = (int) 0x4f000000;   /* 1325400064 or 6.54835e-315f */
-  /* 4: loadpl */
-  var35.i = (int) 0x3f000000;   /* 1056964608 or 5.2221e-315f */
-
-  for (i = 0; i < n; i++) {
-    /* 0: loadl */
-    var33 = ptr4[i];
-    /* 1: swapl */
-    var37.i = ORC_SWAP_L (var33.i);
-    /* 3: mulf */
-    {
-      orc_union32 _src1;
-      orc_union32 _src2;
-      orc_union32 _dest1;
-      _src1.i = ORC_DENORMAL (var37.i);
-      _src2.i = ORC_DENORMAL (var34.i);
-      _dest1.f = _src1.f * _src2.f;
-      var38.i = ORC_DENORMAL (_dest1.i);
-    }
-    /* 5: addf */
-    {
-      orc_union32 _src1;
-      orc_union32 _src2;
-      orc_union32 _dest1;
-      _src1.i = ORC_DENORMAL (var38.i);
-      _src2.i = ORC_DENORMAL (var35.i);
-      _dest1.f = _src1.f + _src2.f;
-      var39.i = ORC_DENORMAL (_dest1.i);
-    }
-    /* 6: convfl */
-    {
-      int tmp;
-      tmp = (int) var39.f;
-      if (tmp == 0x80000000 && !(var39.i & 0x80000000))
-        tmp = 0x7fffffff;
-      var36.i = tmp;
-    }
-    /* 7: storel */
-    ptr0[i] = var36;
-  }
-
-}
-
-#else
-static void
-_backup_audio_convert_orc_unpack_float_s32_swap (OrcExecutor * ORC_RESTRICT ex)
-{
-  int i;
-  int n = ex->n;
-  orc_union32 *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
-#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
-  volatile orc_union32 var35;
-#else
-  orc_union32 var35;
-#endif
-  orc_union32 var36;
-  orc_union32 var37;
-  orc_union32 var38;
-  orc_union32 var39;
-
-  ptr0 = (orc_union32 *) ex->arrays[0];
-  ptr4 = (orc_union32 *) ex->arrays[4];
-
-  /* 2: loadpl */
-  var34.i = (int) 0x4f000000;   /* 1325400064 or 6.54835e-315f */
-  /* 4: loadpl */
-  var35.i = (int) 0x3f000000;   /* 1056964608 or 5.2221e-315f */
-
-  for (i = 0; i < n; i++) {
-    /* 0: loadl */
-    var33 = ptr4[i];
-    /* 1: swapl */
-    var37.i = ORC_SWAP_L (var33.i);
-    /* 3: mulf */
-    {
-      orc_union32 _src1;
-      orc_union32 _src2;
-      orc_union32 _dest1;
-      _src1.i = ORC_DENORMAL (var37.i);
-      _src2.i = ORC_DENORMAL (var34.i);
-      _dest1.f = _src1.f * _src2.f;
-      var38.i = ORC_DENORMAL (_dest1.i);
-    }
-    /* 5: addf */
-    {
-      orc_union32 _src1;
-      orc_union32 _src2;
-      orc_union32 _dest1;
-      _src1.i = ORC_DENORMAL (var38.i);
-      _src2.i = ORC_DENORMAL (var35.i);
-      _dest1.f = _src1.f + _src2.f;
-      var39.i = ORC_DENORMAL (_dest1.i);
-    }
-    /* 6: convfl */
-    {
-      int tmp;
-      tmp = (int) var39.f;
-      if (tmp == 0x80000000 && !(var39.i & 0x80000000))
-        tmp = 0x7fffffff;
-      var36.i = tmp;
-    }
-    /* 7: storel */
-    ptr0[i] = var36;
-  }
-
-}
-
-void
-audio_convert_orc_unpack_float_s32_swap (guint32 * ORC_RESTRICT d1,
-    const gfloat * 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, 39, 97, 117, 100, 105, 111, 95, 99, 111, 110, 118, 101, 114, 116,
-        95, 111, 114, 99, 95, 117, 110, 112, 97, 99, 107, 95, 102, 108, 111, 97,
-        116, 95, 115, 51, 50, 95, 115, 119, 97, 112, 11, 4, 4, 12, 4, 4,
-        14, 4, 0, 0, 0, 79, 14, 4, 0, 0, 0, 63, 20, 4, 184, 32,
-        4, 202, 32, 32, 16, 200, 32, 32, 17, 210, 0, 32, 2, 0,
-      };
-      p = orc_program_new_from_static_bytecode (bc);
-      orc_program_set_backup_function (p,
-          _backup_audio_convert_orc_unpack_float_s32_swap);
-#else
-      p = orc_program_new ();
-      orc_program_set_name (p, "audio_convert_orc_unpack_float_s32_swap");
-      orc_program_set_backup_function (p,
-          _backup_audio_convert_orc_unpack_float_s32_swap);
-      orc_program_add_destination (p, 4, "d1");
-      orc_program_add_source (p, 4, "s1");
-      orc_program_add_constant (p, 4, 0x4f000000, "c1");
-      orc_program_add_constant (p, 4, 0x3f000000, "c2");
-      orc_program_add_temporary (p, 4, "t1");
-
-      orc_program_append_2 (p, "swapl", 0, ORC_VAR_T1, ORC_VAR_S1, ORC_VAR_D1,
-          ORC_VAR_D1);
-      orc_program_append_2 (p, "mulf", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_C1,
-          ORC_VAR_D1);
-      orc_program_append_2 (p, "addf", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_C2,
-          ORC_VAR_D1);
-      orc_program_append_2 (p, "convfl", 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
-
-
-/* audio_convert_orc_unpack_double_s32 */
-#ifdef DISABLE_ORC
-void
-audio_convert_orc_unpack_double_s32 (guint32 * ORC_RESTRICT d1,
-    const gdouble * ORC_RESTRICT s1, int n)
-{
-  int i;
-  orc_union32 *ORC_RESTRICT ptr0;
-  const orc_union64 *ORC_RESTRICT ptr4;
-#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
-  volatile orc_union64 var33;
-#else
-  orc_union64 var33;
-#endif
-#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
-  volatile orc_union64 var34;
-#else
-  orc_union64 var34;
-#endif
-  orc_union32 var35;
-  orc_union64 var36;
-  orc_union64 var37;
-  orc_union64 var38;
-
-  ptr0 = (orc_union32 *) d1;
-  ptr4 = (orc_union64 *) s1;
-
-  /* 1: loadpq */
-  var33.i = ORC_UINT64_C (0x41dfffffffc00000);  /* 2.14748e+09f */
-  /* 3: loadpq */
-  var34.i = ORC_UINT64_C (0x3fe0000000000000);  /* 0.5f */
-
-  for (i = 0; i < n; i++) {
-    /* 0: loadq */
-    var36 = ptr4[i];
-    /* 2: muld */
-    {
-      orc_union64 _src1;
-      orc_union64 _src2;
-      orc_union64 _dest1;
-      _src1.i = ORC_DENORMAL_DOUBLE (var36.i);
-      _src2.i = ORC_DENORMAL_DOUBLE (var33.i);
-      _dest1.f = _src1.f * _src2.f;
-      var37.i = ORC_DENORMAL_DOUBLE (_dest1.i);
-    }
-    /* 4: addd */
-    {
-      orc_union64 _src1;
-      orc_union64 _src2;
-      orc_union64 _dest1;
-      _src1.i = ORC_DENORMAL_DOUBLE (var37.i);
-      _src2.i = ORC_DENORMAL_DOUBLE (var34.i);
-      _dest1.f = _src1.f + _src2.f;
-      var38.i = ORC_DENORMAL_DOUBLE (_dest1.i);
-    }
-    /* 5: convdl */
-    {
-      int tmp;
-      tmp = var38.f;
-      if (tmp == 0x80000000 && !(var38.i & ORC_UINT64_C (0x8000000000000000)))
-        tmp = 0x7fffffff;
-      var35.i = tmp;
-    }
-    /* 6: storel */
-    ptr0[i] = var35;
-  }
-
-}
-
-#else
-static void
-_backup_audio_convert_orc_unpack_double_s32 (OrcExecutor * ORC_RESTRICT ex)
-{
-  int i;
-  int n = ex->n;
-  orc_union32 *ORC_RESTRICT ptr0;
-  const orc_union64 *ORC_RESTRICT ptr4;
-#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
-  volatile orc_union64 var33;
-#else
-  orc_union64 var33;
-#endif
-#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
-  volatile orc_union64 var34;
-#else
-  orc_union64 var34;
-#endif
-  orc_union32 var35;
-  orc_union64 var36;
-  orc_union64 var37;
-  orc_union64 var38;
-
-  ptr0 = (orc_union32 *) ex->arrays[0];
-  ptr4 = (orc_union64 *) ex->arrays[4];
-
-  /* 1: loadpq */
-  var33.i = ORC_UINT64_C (0x41dfffffffc00000);  /* 2.14748e+09f */
-  /* 3: loadpq */
-  var34.i = ORC_UINT64_C (0x3fe0000000000000);  /* 0.5f */
-
-  for (i = 0; i < n; i++) {
-    /* 0: loadq */
-    var36 = ptr4[i];
-    /* 2: muld */
-    {
-      orc_union64 _src1;
-      orc_union64 _src2;
-      orc_union64 _dest1;
-      _src1.i = ORC_DENORMAL_DOUBLE (var36.i);
-      _src2.i = ORC_DENORMAL_DOUBLE (var33.i);
-      _dest1.f = _src1.f * _src2.f;
-      var37.i = ORC_DENORMAL_DOUBLE (_dest1.i);
-    }
-    /* 4: addd */
-    {
-      orc_union64 _src1;
-      orc_union64 _src2;
-      orc_union64 _dest1;
-      _src1.i = ORC_DENORMAL_DOUBLE (var37.i);
-      _src2.i = ORC_DENORMAL_DOUBLE (var34.i);
-      _dest1.f = _src1.f + _src2.f;
-      var38.i = ORC_DENORMAL_DOUBLE (_dest1.i);
-    }
-    /* 5: convdl */
-    {
-      int tmp;
-      tmp = var38.f;
-      if (tmp == 0x80000000 && !(var38.i & ORC_UINT64_C (0x8000000000000000)))
-        tmp = 0x7fffffff;
-      var35.i = tmp;
-    }
-    /* 6: storel */
-    ptr0[i] = var35;
-  }
-
-}
-
-void
-audio_convert_orc_unpack_double_s32 (guint32 * ORC_RESTRICT d1,
-    const gdouble * 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, 35, 97, 117, 100, 105, 111, 95, 99, 111, 110, 118, 101, 114, 116,
-        95, 111, 114, 99, 95, 117, 110, 112, 97, 99, 107, 95, 100, 111, 117, 98,
-        108, 101, 95, 115, 51, 50, 11, 4, 4, 12, 8, 8, 15, 8, 0, 0,
-        192, 255, 255, 255, 223, 65, 15, 8, 0, 0, 0, 0, 0, 0, 224, 63,
-        20, 8, 133, 32, 4, 214, 32, 32, 16, 212, 32, 32, 17, 222, 0, 32,
-        2, 0,
-      };
-      p = orc_program_new_from_static_bytecode (bc);
-      orc_program_set_backup_function (p,
-          _backup_audio_convert_orc_unpack_double_s32);
-#else
-      p = orc_program_new ();
-      orc_program_set_name (p, "audio_convert_orc_unpack_double_s32");
-      orc_program_set_backup_function (p,
-          _backup_audio_convert_orc_unpack_double_s32);
-      orc_program_add_destination (p, 4, "d1");
-      orc_program_add_source (p, 8, "s1");
-      orc_program_add_constant_int64 (p, 8, 0x41dfffffffc00000ULL, "c1");
-      orc_program_add_constant_int64 (p, 8, 0x3fe0000000000000ULL, "c2");
-      orc_program_add_temporary (p, 8, "t1");
-
-      orc_program_append_2 (p, "loadq", 0, ORC_VAR_T1, ORC_VAR_S1, ORC_VAR_D1,
-          ORC_VAR_D1);
-      orc_program_append_2 (p, "muld", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_C1,
-          ORC_VAR_D1);
-      orc_program_append_2 (p, "addd", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_C2,
-          ORC_VAR_D1);
-      orc_program_append_2 (p, "convdl", 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
-
-
-/* audio_convert_orc_unpack_double_s32_swap */
-#ifdef DISABLE_ORC
-void
-audio_convert_orc_unpack_double_s32_swap (guint32 * ORC_RESTRICT d1,
-    const gdouble * ORC_RESTRICT s1, int n)
-{
-  int i;
-  orc_union32 *ORC_RESTRICT ptr0;
-  const orc_union64 *ORC_RESTRICT ptr4;
-  orc_union64 var33;
-#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
-  volatile orc_union64 var34;
-#else
-  orc_union64 var34;
-#endif
-#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
-  volatile orc_union64 var35;
-#else
-  orc_union64 var35;
-#endif
-  orc_union32 var36;
-  orc_union64 var37;
-  orc_union64 var38;
-  orc_union64 var39;
-
-  ptr0 = (orc_union32 *) d1;
-  ptr4 = (orc_union64 *) s1;
-
-  /* 2: loadpq */
-  var34.i = ORC_UINT64_C (0x41dfffffffc00000);  /* 2.14748e+09f */
-  /* 4: loadpq */
-  var35.i = ORC_UINT64_C (0x3fe0000000000000);  /* 0.5f */
-
-  for (i = 0; i < n; i++) {
-    /* 0: loadq */
-    var33 = ptr4[i];
-    /* 1: swapq */
-    var37.i = ORC_SWAP_Q (var33.i);
-    /* 3: muld */
-    {
-      orc_union64 _src1;
-      orc_union64 _src2;
-      orc_union64 _dest1;
-      _src1.i = ORC_DENORMAL_DOUBLE (var37.i);
-      _src2.i = ORC_DENORMAL_DOUBLE (var34.i);
-      _dest1.f = _src1.f * _src2.f;
-      var38.i = ORC_DENORMAL_DOUBLE (_dest1.i);
-    }
-    /* 5: addd */
-    {
-      orc_union64 _src1;
-      orc_union64 _src2;
-      orc_union64 _dest1;
-      _src1.i = ORC_DENORMAL_DOUBLE (var38.i);
-      _src2.i = ORC_DENORMAL_DOUBLE (var35.i);
-      _dest1.f = _src1.f + _src2.f;
-      var39.i = ORC_DENORMAL_DOUBLE (_dest1.i);
-    }
-    /* 6: convdl */
-    {
-      int tmp;
-      tmp = var39.f;
-      if (tmp == 0x80000000 && !(var39.i & ORC_UINT64_C (0x8000000000000000)))
-        tmp = 0x7fffffff;
-      var36.i = tmp;
-    }
-    /* 7: storel */
-    ptr0[i] = var36;
-  }
-
-}
-
-#else
-static void
-_backup_audio_convert_orc_unpack_double_s32_swap (OrcExecutor * ORC_RESTRICT ex)
-{
-  int i;
-  int n = ex->n;
-  orc_union32 *ORC_RESTRICT ptr0;
-  const orc_union64 *ORC_RESTRICT ptr4;
-  orc_union64 var33;
-#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
-  volatile orc_union64 var34;
-#else
-  orc_union64 var34;
-#endif
-#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
-  volatile orc_union64 var35;
-#else
-  orc_union64 var35;
-#endif
-  orc_union32 var36;
-  orc_union64 var37;
-  orc_union64 var38;
-  orc_union64 var39;
-
-  ptr0 = (orc_union32 *) ex->arrays[0];
-  ptr4 = (orc_union64 *) ex->arrays[4];
-
-  /* 2: loadpq */
-  var34.i = ORC_UINT64_C (0x41dfffffffc00000);  /* 2.14748e+09f */
-  /* 4: loadpq */
-  var35.i = ORC_UINT64_C (0x3fe0000000000000);  /* 0.5f */
-
-  for (i = 0; i < n; i++) {
-    /* 0: loadq */
-    var33 = ptr4[i];
-    /* 1: swapq */
-    var37.i = ORC_SWAP_Q (var33.i);
-    /* 3: muld */
-    {
-      orc_union64 _src1;
-      orc_union64 _src2;
-      orc_union64 _dest1;
-      _src1.i = ORC_DENORMAL_DOUBLE (var37.i);
-      _src2.i = ORC_DENORMAL_DOUBLE (var34.i);
-      _dest1.f = _src1.f * _src2.f;
-      var38.i = ORC_DENORMAL_DOUBLE (_dest1.i);
-    }
-    /* 5: addd */
-    {
-      orc_union64 _src1;
-      orc_union64 _src2;
-      orc_union64 _dest1;
-      _src1.i = ORC_DENORMAL_DOUBLE (var38.i);
-      _src2.i = ORC_DENORMAL_DOUBLE (var35.i);
-      _dest1.f = _src1.f + _src2.f;
-      var39.i = ORC_DENORMAL_DOUBLE (_dest1.i);
-    }
-    /* 6: convdl */
-    {
-      int tmp;
-      tmp = var39.f;
-      if (tmp == 0x80000000 && !(var39.i & ORC_UINT64_C (0x8000000000000000)))
-        tmp = 0x7fffffff;
-      var36.i = tmp;
-    }
-    /* 7: storel */
-    ptr0[i] = var36;
-  }
-
-}
-
-void
-audio_convert_orc_unpack_double_s32_swap (guint32 * ORC_RESTRICT d1,
-    const gdouble * 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, 40, 97, 117, 100, 105, 111, 95, 99, 111, 110, 118, 101, 114, 116,
-        95, 111, 114, 99, 95, 117, 110, 112, 97, 99, 107, 95, 100, 111, 117, 98,
-        108, 101, 95, 115, 51, 50, 95, 115, 119, 97, 112, 11, 4, 4, 12, 8,
-        8, 15, 8, 0, 0, 192, 255, 255, 255, 223, 65, 15, 8, 0, 0, 0,
-        0, 0, 0, 224, 63, 20, 8, 186, 32, 4, 214, 32, 32, 16, 212, 32,
-        32, 17, 222, 0, 32, 2, 0,
-      };
-      p = orc_program_new_from_static_bytecode (bc);
-      orc_program_set_backup_function (p,
-          _backup_audio_convert_orc_unpack_double_s32_swap);
-#else
-      p = orc_program_new ();
-      orc_program_set_name (p, "audio_convert_orc_unpack_double_s32_swap");
-      orc_program_set_backup_function (p,
-          _backup_audio_convert_orc_unpack_double_s32_swap);
-      orc_program_add_destination (p, 4, "d1");
-      orc_program_add_source (p, 8, "s1");
-      orc_program_add_constant_int64 (p, 8, 0x41dfffffffc00000ULL, "c1");
-      orc_program_add_constant_int64 (p, 8, 0x3fe0000000000000ULL, "c2");
-      orc_program_add_temporary (p, 8, "t1");
-
-      orc_program_append_2 (p, "swapq", 0, ORC_VAR_T1, ORC_VAR_S1, ORC_VAR_D1,
-          ORC_VAR_D1);
-      orc_program_append_2 (p, "muld", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_C1,
-          ORC_VAR_D1);
-      orc_program_append_2 (p, "addd", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_C2,
-          ORC_VAR_D1);
-      orc_program_append_2 (p, "convdl", 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
-
-
-/* audio_convert_orc_unpack_float_double */
-#ifdef DISABLE_ORC
-void
-audio_convert_orc_unpack_float_double (gdouble * ORC_RESTRICT d1,
-    const gfloat * ORC_RESTRICT s1, int n)
-{
-  int i;
-  orc_union64 *ORC_RESTRICT ptr0;
-  const orc_union32 *ORC_RESTRICT ptr4;
-  orc_union32 var32;
-  orc_union64 var33;
-
-  ptr0 = (orc_union64 *) d1;
-  ptr4 = (orc_union32 *) s1;
-
-
-  for (i = 0; i < n; i++) {
-    /* 0: loadl */
-    var32 = ptr4[i];
-    /* 1: convfd */
-    {
-      orc_union32 _src1;
-      _src1.i = ORC_DENORMAL (var32.i);
-      var33.f = _src1.f;
-    }
-    /* 2: storeq */
-    ptr0[i] = var33;
-  }
-
-}
-
-#else
-static void
-_backup_audio_convert_orc_unpack_float_double (OrcExecutor * ORC_RESTRICT ex)
-{
-  int i;
-  int n = ex->n;
-  orc_union64 *ORC_RESTRICT ptr0;
-  const orc_union32 *ORC_RESTRICT ptr4;
-  orc_union32 var32;
-  orc_union64 var33;
-
-  ptr0 = (orc_union64 *) ex->arrays[0];
-  ptr4 = (orc_union32 *) ex->arrays[4];
-
-
-  for (i = 0; i < n; i++) {
-    /* 0: loadl */
-    var32 = ptr4[i];
-    /* 1: convfd */
-    {
-      orc_union32 _src1;
-      _src1.i = ORC_DENORMAL (var32.i);
-      var33.f = _src1.f;
-    }
-    /* 2: storeq */
-    ptr0[i] = var33;
-  }
-
-}
-
-void
-audio_convert_orc_unpack_float_double (gdouble * ORC_RESTRICT d1,
-    const gfloat * 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, 37, 97, 117, 100, 105, 111, 95, 99, 111, 110, 118, 101, 114, 116,
-        95, 111, 114, 99, 95, 117, 110, 112, 97, 99, 107, 95, 102, 108, 111, 97,
-        116, 95, 100, 111, 117, 98, 108, 101, 11, 8, 8, 12, 4, 4, 224, 0,
-        4, 2, 0,
-      };
-      p = orc_program_new_from_static_bytecode (bc);
-      orc_program_set_backup_function (p,
-          _backup_audio_convert_orc_unpack_float_double);
-#else
-      p = orc_program_new ();
-      orc_program_set_name (p, "audio_convert_orc_unpack_float_double");
-      orc_program_set_backup_function (p,
-          _backup_audio_convert_orc_unpack_float_double);
-      orc_program_add_destination (p, 8, "d1");
-      orc_program_add_source (p, 4, "s1");
-
-      orc_program_append_2 (p, "convfd", 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
-
-
-/* audio_convert_orc_unpack_float_double_swap */
-#ifdef DISABLE_ORC
-void
-audio_convert_orc_unpack_float_double_swap (gdouble * ORC_RESTRICT d1,
-    const gfloat * ORC_RESTRICT s1, int n)
-{
-  int i;
-  orc_union64 *ORC_RESTRICT ptr0;
-  const orc_union32 *ORC_RESTRICT ptr4;
-  orc_union32 var33;
-  orc_union64 var34;
-  orc_union32 var35;
-
-  ptr0 = (orc_union64 *) d1;
-  ptr4 = (orc_union32 *) s1;
-
-
-  for (i = 0; i < n; i++) {
-    /* 0: loadl */
-    var33 = ptr4[i];
-    /* 1: swapl */
-    var35.i = ORC_SWAP_L (var33.i);
-    /* 2: convfd */
-    {
-      orc_union32 _src1;
-      _src1.i = ORC_DENORMAL (var35.i);
-      var34.f = _src1.f;
-    }
-    /* 3: storeq */
-    ptr0[i] = var34;
-  }
-
-}
-
-#else
-static void
-_backup_audio_convert_orc_unpack_float_double_swap (OrcExecutor *
-    ORC_RESTRICT ex)
-{
-  int i;
-  int n = ex->n;
-  orc_union64 *ORC_RESTRICT ptr0;
-  const orc_union32 *ORC_RESTRICT ptr4;
-  orc_union32 var33;
-  orc_union64 var34;
-  orc_union32 var35;
-
-  ptr0 = (orc_union64 *) ex->arrays[0];
-  ptr4 = (orc_union32 *) ex->arrays[4];
-
-
-  for (i = 0; i < n; i++) {
-    /* 0: loadl */
-    var33 = ptr4[i];
-    /* 1: swapl */
-    var35.i = ORC_SWAP_L (var33.i);
-    /* 2: convfd */
-    {
-      orc_union32 _src1;
-      _src1.i = ORC_DENORMAL (var35.i);
-      var34.f = _src1.f;
-    }
-    /* 3: storeq */
-    ptr0[i] = var34;
-  }
-
-}
-
-void
-audio_convert_orc_unpack_float_double_swap (gdouble * ORC_RESTRICT d1,
-    const gfloat * 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, 42, 97, 117, 100, 105, 111, 95, 99, 111, 110, 118, 101, 114, 116,
-        95, 111, 114, 99, 95, 117, 110, 112, 97, 99, 107, 95, 102, 108, 111, 97,
-        116, 95, 100, 111, 117, 98, 108, 101, 95, 115, 119, 97, 112, 11, 8, 8,
-        12, 4, 4, 20, 4, 184, 32, 4, 224, 0, 32, 2, 0,
-      };
-      p = orc_program_new_from_static_bytecode (bc);
-      orc_program_set_backup_function (p,
-          _backup_audio_convert_orc_unpack_float_double_swap);
-#else
-      p = orc_program_new ();
-      orc_program_set_name (p, "audio_convert_orc_unpack_float_double_swap");
-      orc_program_set_backup_function (p,
-          _backup_audio_convert_orc_unpack_float_double_swap);
-      orc_program_add_destination (p, 8, "d1");
-      orc_program_add_source (p, 4, "s1");
-      orc_program_add_temporary (p, 4, "t1");
-
-      orc_program_append_2 (p, "swapl", 0, ORC_VAR_T1, ORC_VAR_S1, ORC_VAR_D1,
-          ORC_VAR_D1);
-      orc_program_append_2 (p, "convfd", 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
-
-
-/* audio_convert_orc_unpack_double_double */
-#ifdef DISABLE_ORC
-void
-audio_convert_orc_unpack_double_double (gdouble * ORC_RESTRICT d1,
-    const gdouble * ORC_RESTRICT s1, int n)
-{
-  int i;
-  orc_union64 *ORC_RESTRICT ptr0;
-  const orc_union64 *ORC_RESTRICT ptr4;
-  orc_union64 var32;
-  orc_union64 var33;
-
-  ptr0 = (orc_union64 *) d1;
-  ptr4 = (orc_union64 *) s1;
-
-
-  for (i = 0; i < n; i++) {
-    /* 0: loadq */
-    var32 = ptr4[i];
-    /* 1: copyq */
-    var33.i = var32.i;
-    /* 2: storeq */
-    ptr0[i] = var33;
-  }
-
-}
-
-#else
-static void
-_backup_audio_convert_orc_unpack_double_double (OrcExecutor * ORC_RESTRICT ex)
-{
-  int i;
-  int n = ex->n;
-  orc_union64 *ORC_RESTRICT ptr0;
-  const orc_union64 *ORC_RESTRICT ptr4;
-  orc_union64 var32;
-  orc_union64 var33;
-
-  ptr0 = (orc_union64 *) ex->arrays[0];
-  ptr4 = (orc_union64 *) ex->arrays[4];
-
-
-  for (i = 0; i < n; i++) {
-    /* 0: loadq */
-    var32 = ptr4[i];
-    /* 1: copyq */
-    var33.i = var32.i;
-    /* 2: storeq */
-    ptr0[i] = var33;
-  }
-
-}
-
-void
-audio_convert_orc_unpack_double_double (gdouble * ORC_RESTRICT d1,
-    const gdouble * 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, 38, 97, 117, 100, 105, 111, 95, 99, 111, 110, 118, 101, 114, 116,
-        95, 111, 114, 99, 95, 117, 110, 112, 97, 99, 107, 95, 100, 111, 117, 98,
-        108, 101, 95, 100, 111, 117, 98, 108, 101, 11, 8, 8, 12, 8, 8, 137,
-        0, 4, 2, 0,
-      };
-      p = orc_program_new_from_static_bytecode (bc);
-      orc_program_set_backup_function (p,
-          _backup_audio_convert_orc_unpack_double_double);
-#else
-      p = orc_program_new ();
-      orc_program_set_name (p, "audio_convert_orc_unpack_double_double");
-      orc_program_set_backup_function (p,
-          _backup_audio_convert_orc_unpack_double_double);
-      orc_program_add_destination (p, 8, "d1");
-      orc_program_add_source (p, 8, "s1");
-
-      orc_program_append_2 (p, "copyq", 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
-
-
-/* audio_convert_orc_unpack_double_double_swap */
-#ifdef DISABLE_ORC
-void
-audio_convert_orc_unpack_double_double_swap (gdouble * ORC_RESTRICT d1,
-    const gdouble * ORC_RESTRICT s1, int n)
-{
-  int i;
-  orc_union64 *ORC_RESTRICT ptr0;
-  const orc_union64 *ORC_RESTRICT ptr4;
-  orc_union64 var32;
-  orc_union64 var33;
-
-  ptr0 = (orc_union64 *) d1;
-  ptr4 = (orc_union64 *) s1;
-
-
-  for (i = 0; i < n; i++) {
-    /* 0: loadq */
-    var32 = ptr4[i];
-    /* 1: swapq */
-    var33.i = ORC_SWAP_Q (var32.i);
-    /* 2: storeq */
-    ptr0[i] = var33;
-  }
-
-}
-
-#else
-static void
-_backup_audio_convert_orc_unpack_double_double_swap (OrcExecutor *
-    ORC_RESTRICT ex)
-{
-  int i;
-  int n = ex->n;
-  orc_union64 *ORC_RESTRICT ptr0;
-  const orc_union64 *ORC_RESTRICT ptr4;
-  orc_union64 var32;
-  orc_union64 var33;
-
-  ptr0 = (orc_union64 *) ex->arrays[0];
-  ptr4 = (orc_union64 *) ex->arrays[4];
-
-
-  for (i = 0; i < n; i++) {
-    /* 0: loadq */
-    var32 = ptr4[i];
-    /* 1: swapq */
-    var33.i = ORC_SWAP_Q (var32.i);
-    /* 2: storeq */
-    ptr0[i] = var33;
-  }
-
-}
-
-void
-audio_convert_orc_unpack_double_double_swap (gdouble * ORC_RESTRICT d1,
-    const gdouble * 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, 43, 97, 117, 100, 105, 111, 95, 99, 111, 110, 118, 101, 114, 116,
-        95, 111, 114, 99, 95, 117, 110, 112, 97, 99, 107, 95, 100, 111, 117, 98,
-        108, 101, 95, 100, 111, 117, 98, 108, 101, 95, 115, 119, 97, 112, 11, 8,
-        8, 12, 8, 8, 186, 0, 4, 2, 0,
-      };
-      p = orc_program_new_from_static_bytecode (bc);
-      orc_program_set_backup_function (p,
-          _backup_audio_convert_orc_unpack_double_double_swap);
-#else
-      p = orc_program_new ();
-      orc_program_set_name (p, "audio_convert_orc_unpack_double_double_swap");
-      orc_program_set_backup_function (p,
-          _backup_audio_convert_orc_unpack_double_double_swap);
-      orc_program_add_destination (p, 8, "d1");
-      orc_program_add_source (p, 8, "s1");
-
-      orc_program_append_2 (p, "swapq", 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
-
-
-/* audio_convert_orc_unpack_u8_double */
-#ifdef DISABLE_ORC
-void
-audio_convert_orc_unpack_u8_double (gdouble * ORC_RESTRICT d1,
-    const guint8 * ORC_RESTRICT s1, int p1, int n)
-{
-  int i;
-  orc_union64 *ORC_RESTRICT ptr0;
-  const orc_int8 *ORC_RESTRICT ptr4;
-  orc_int8 var34;
-#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
-  volatile orc_union32 var35;
-#else
-  orc_union32 var35;
-#endif
-  orc_union64 var36;
-  orc_union16 var37;
-  orc_union32 var38;
-  orc_union32 var39;
-  orc_union32 var40;
-
-  ptr0 = (orc_union64 *) d1;
-  ptr4 = (orc_int8 *) s1;
-
-  /* 4: loadpl */
-  var35.i = (int) 0x80000000;   /* -2147483648 or 1.061e-314f */
-
-  for (i = 0; i < n; i++) {
-    /* 0: loadb */
-    var34 = ptr4[i];
-    /* 1: convubw */
-    var37.i = (orc_uint8) var34;
-    /* 2: convuwl */
-    var38.i = (orc_uint16) var37.i;
-    /* 3: shll */
-    var39.i = ((orc_uint32) var38.i) << p1;
-    /* 5: xorl */
-    var40.i = var39.i ^ var35.i;
-    /* 6: convld */
-    var36.f = var40.i;
-    /* 7: storeq */
-    ptr0[i] = var36;
-  }
-
-}
-
-#else
-static void
-_backup_audio_convert_orc_unpack_u8_double (OrcExecutor * ORC_RESTRICT ex)
-{
-  int i;
-  int n = ex->n;
-  orc_union64 *ORC_RESTRICT ptr0;
-  const orc_int8 *ORC_RESTRICT ptr4;
-  orc_int8 var34;
-#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
-  volatile orc_union32 var35;
-#else
-  orc_union32 var35;
-#endif
-  orc_union64 var36;
-  orc_union16 var37;
-  orc_union32 var38;
-  orc_union32 var39;
-  orc_union32 var40;
-
-  ptr0 = (orc_union64 *) ex->arrays[0];
-  ptr4 = (orc_int8 *) ex->arrays[4];
-
-  /* 4: loadpl */
-  var35.i = (int) 0x80000000;   /* -2147483648 or 1.061e-314f */
-
-  for (i = 0; i < n; i++) {
-    /* 0: loadb */
-    var34 = ptr4[i];
-    /* 1: convubw */
-    var37.i = (orc_uint8) var34;
-    /* 2: convuwl */
-    var38.i = (orc_uint16) var37.i;
-    /* 3: shll */
-    var39.i = ((orc_uint32) var38.i) << ex->params[24];
-    /* 5: xorl */
-    var40.i = var39.i ^ var35.i;
-    /* 6: convld */
-    var36.f = var40.i;
-    /* 7: storeq */
-    ptr0[i] = var36;
-  }
-
-}
-
-void
-audio_convert_orc_unpack_u8_double (gdouble * 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, 97, 117, 100, 105, 111, 95, 99, 111, 110, 118, 101, 114, 116,
-        95, 111, 114, 99, 95, 117, 110, 112, 97, 99, 107, 95, 117, 56, 95, 100,
-        111, 117, 98, 108, 101, 11, 8, 8, 12, 1, 1, 14, 4, 0, 0, 0,
-        128, 16, 4, 20, 2, 20, 4, 150, 32, 4, 154, 33, 32, 124, 33, 33,
-        24, 132, 33, 33, 16, 223, 0, 33, 2, 0,
-      };
-      p = orc_program_new_from_static_bytecode (bc);
-      orc_program_set_backup_function (p,
-          _backup_audio_convert_orc_unpack_u8_double);
-#else
-      p = orc_program_new ();
-      orc_program_set_name (p, "audio_convert_orc_unpack_u8_double");
-      orc_program_set_backup_function (p,
-          _backup_audio_convert_orc_unpack_u8_double);
-      orc_program_add_destination (p, 8, "d1");
-      orc_program_add_source (p, 1, "s1");
-      orc_program_add_constant (p, 4, 0x80000000, "c1");
-      orc_program_add_parameter (p, 4, "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, "convuwl", 0, ORC_VAR_T2, ORC_VAR_T1, ORC_VAR_D1,
-          ORC_VAR_D1);
-      orc_program_append_2 (p, "shll", 0, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_P1,
-          ORC_VAR_D1);
-      orc_program_append_2 (p, "xorl", 0, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_C1,
-          ORC_VAR_D1);
-      orc_program_append_2 (p, "convld", 0, 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_S1] = (void *) s1;
-  ex->params[ORC_VAR_P1] = p1;
-
-  func = c->exec;
-  func (ex);
-}
-#endif
-
-
-/* audio_convert_orc_unpack_s8_double */
-#ifdef DISABLE_ORC
-void
-audio_convert_orc_unpack_s8_double (gdouble * ORC_RESTRICT d1,
-    const guint8 * ORC_RESTRICT s1, int p1, int n)
-{
-  int i;
-  orc_union64 *ORC_RESTRICT ptr0;
-  const orc_int8 *ORC_RESTRICT ptr4;
-  orc_int8 var34;
-  orc_union64 var35;
-  orc_union16 var36;
-  orc_union32 var37;
-  orc_union32 var38;
-
-  ptr0 = (orc_union64 *) d1;
-  ptr4 = (orc_int8 *) s1;
-
-
-  for (i = 0; i < n; i++) {
-    /* 0: loadb */
-    var34 = ptr4[i];
-    /* 1: convubw */
-    var36.i = (orc_uint8) var34;
-    /* 2: convuwl */
-    var37.i = (orc_uint16) var36.i;
-    /* 3: shll */
-    var38.i = ((orc_uint32) var37.i) << p1;
-    /* 4: convld */
-    var35.f = var38.i;
-    /* 5: storeq */
-    ptr0[i] = var35;
-  }
-
-}
-
-#else
-static void
-_backup_audio_convert_orc_unpack_s8_double (OrcExecutor * ORC_RESTRICT ex)
-{
-  int i;
-  int n = ex->n;
-  orc_union64 *ORC_RESTRICT ptr0;
-  const orc_int8 *ORC_RESTRICT ptr4;
-  orc_int8 var34;
-  orc_union64 var35;
-  orc_union16 var36;
-  orc_union32 var37;
-  orc_union32 var38;
-
-  ptr0 = (orc_union64 *) ex->arrays[0];
-  ptr4 = (orc_int8 *) ex->arrays[4];
-
-
-  for (i = 0; i < n; i++) {
-    /* 0: loadb */
-    var34 = ptr4[i];
-    /* 1: convubw */
-    var36.i = (orc_uint8) var34;
-    /* 2: convuwl */
-    var37.i = (orc_uint16) var36.i;
-    /* 3: shll */
-    var38.i = ((orc_uint32) var37.i) << ex->params[24];
-    /* 4: convld */
-    var35.f = var38.i;
-    /* 5: storeq */
-    ptr0[i] = var35;
-  }
-
-}
-
-void
-audio_convert_orc_unpack_s8_double (gdouble * 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, 97, 117, 100, 105, 111, 95, 99, 111, 110, 118, 101, 114, 116,
-        95, 111, 114, 99, 95, 117, 110, 112, 97, 99, 107, 95, 115, 56, 95, 100,
-        111, 117, 98, 108, 101, 11, 8, 8, 12, 1, 1, 16, 4, 20, 2, 20,
-        4, 150, 32, 4, 154, 33, 32, 124, 33, 33, 24, 223, 0, 33, 2, 0,
-
-      };
-      p = orc_program_new_from_static_bytecode (bc);
-      orc_program_set_backup_function (p,
-          _backup_audio_convert_orc_unpack_s8_double);
-#else
-      p = orc_program_new ();
-      orc_program_set_name (p, "audio_convert_orc_unpack_s8_double");
-      orc_program_set_backup_function (p,
-          _backup_audio_convert_orc_unpack_s8_double);
-      orc_program_add_destination (p, 8, "d1");
-      orc_program_add_source (p, 1, "s1");
-      orc_program_add_parameter (p, 4, "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, "convuwl", 0, ORC_VAR_T2, ORC_VAR_T1, ORC_VAR_D1,
-          ORC_VAR_D1);
-      orc_program_append_2 (p, "shll", 0, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_P1,
-          ORC_VAR_D1);
-      orc_program_append_2 (p, "convld", 0, 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_S1] = (void *) s1;
-  ex->params[ORC_VAR_P1] = p1;
-
-  func = c->exec;
-  func (ex);
-}
-#endif
-
-
-/* audio_convert_orc_unpack_u16_double */
-#ifdef DISABLE_ORC
-void
-audio_convert_orc_unpack_u16_double (gdouble * ORC_RESTRICT d1,
-    const guint8 * ORC_RESTRICT s1, int p1, int n)
-{
-  int i;
-  orc_union64 *ORC_RESTRICT ptr0;
-  const orc_union16 *ORC_RESTRICT ptr4;
-  orc_union16 var33;
-#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
-  volatile orc_union32 var34;
-#else
-  orc_union32 var34;
-#endif
-  orc_union64 var35;
-  orc_union32 var36;
-  orc_union32 var37;
-  orc_union32 var38;
-
-  ptr0 = (orc_union64 *) d1;
-  ptr4 = (orc_union16 *) s1;
-
-  /* 3: loadpl */
-  var34.i = (int) 0x80000000;   /* -2147483648 or 1.061e-314f */
-
-  for (i = 0; i < n; i++) {
-    /* 0: loadw */
-    var33 = ptr4[i];
-    /* 1: convuwl */
-    var36.i = (orc_uint16) var33.i;
-    /* 2: shll */
-    var37.i = ((orc_uint32) var36.i) << p1;
-    /* 4: xorl */
-    var38.i = var37.i ^ var34.i;
-    /* 5: convld */
-    var35.f = var38.i;
-    /* 6: storeq */
-    ptr0[i] = var35;
-  }
-
-}
-
-#else
-static void
-_backup_audio_convert_orc_unpack_u16_double (OrcExecutor * ORC_RESTRICT ex)
-{
-  int i;
-  int n = ex->n;
-  orc_union64 *ORC_RESTRICT ptr0;
-  const orc_union16 *ORC_RESTRICT ptr4;
-  orc_union16 var33;
-#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
-  volatile orc_union32 var34;
-#else
-  orc_union32 var34;
-#endif
-  orc_union64 var35;
-  orc_union32 var36;
-  orc_union32 var37;
-  orc_union32 var38;
-
-  ptr0 = (orc_union64 *) ex->arrays[0];
-  ptr4 = (orc_union16 *) ex->arrays[4];
-
-  /* 3: loadpl */
-  var34.i = (int) 0x80000000;   /* -2147483648 or 1.061e-314f */
-
-  for (i = 0; i < n; i++) {
-    /* 0: loadw */
-    var33 = ptr4[i];
-    /* 1: convuwl */
-    var36.i = (orc_uint16) var33.i;
-    /* 2: shll */
-    var37.i = ((orc_uint32) var36.i) << ex->params[24];
-    /* 4: xorl */
-    var38.i = var37.i ^ var34.i;
-    /* 5: convld */
-    var35.f = var38.i;
-    /* 6: storeq */
-    ptr0[i] = var35;
-  }
-
-}
-
-void
-audio_convert_orc_unpack_u16_double (gdouble * 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, 35, 97, 117, 100, 105, 111, 95, 99, 111, 110, 118, 101, 114, 116,
-        95, 111, 114, 99, 95, 117, 110, 112, 97, 99, 107, 95, 117, 49, 54, 95,
-        100, 111, 117, 98, 108, 101, 11, 8, 8, 12, 2, 2, 14, 4, 0, 0,
-        0, 128, 16, 4, 20, 4, 154, 32, 4, 124, 32, 32, 24, 132, 32, 32,
-        16, 223, 0, 32, 2, 0,
-      };
-      p = orc_program_new_from_static_bytecode (bc);
-      orc_program_set_backup_function (p,
-          _backup_audio_convert_orc_unpack_u16_double);
-#else
-      p = orc_program_new ();
-      orc_program_set_name (p, "audio_convert_orc_unpack_u16_double");
-      orc_program_set_backup_function (p,
-          _backup_audio_convert_orc_unpack_u16_double);
-      orc_program_add_destination (p, 8, "d1");
-      orc_program_add_source (p, 2, "s1");
-      orc_program_add_constant (p, 4, 0x80000000, "c1");
-      orc_program_add_parameter (p, 4, "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, "shll", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_P1,
-          ORC_VAR_D1);
-      orc_program_append_2 (p, "xorl", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_C1,
-          ORC_VAR_D1);
-      orc_program_append_2 (p, "convld", 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->params[ORC_VAR_P1] = p1;
-
-  func = c->exec;
-  func (ex);
-}
-#endif
-
-
-/* audio_convert_orc_unpack_s16_double */
-#ifdef DISABLE_ORC
-void
-audio_convert_orc_unpack_s16_double (gdouble * ORC_RESTRICT d1,
-    const guint8 * ORC_RESTRICT s1, int p1, int n)
-{
-  int i;
-  orc_union64 *ORC_RESTRICT ptr0;
-  const orc_union16 *ORC_RESTRICT ptr4;
-  orc_union16 var33;
-  orc_union64 var34;
-  orc_union32 var35;
-  orc_union32 var36;
-
-  ptr0 = (orc_union64 *) d1;
-  ptr4 = (orc_union16 *) s1;
-
-
-  for (i = 0; i < n; i++) {
-    /* 0: loadw */
-    var33 = ptr4[i];
-    /* 1: convuwl */
-    var35.i = (orc_uint16) var33.i;
-    /* 2: shll */
-    var36.i = ((orc_uint32) var35.i) << p1;
-    /* 3: convld */
-    var34.f = var36.i;
-    /* 4: storeq */
-    ptr0[i] = var34;
-  }
-
-}
-
-#else
-static void
-_backup_audio_convert_orc_unpack_s16_double (OrcExecutor * ORC_RESTRICT ex)
-{
-  int i;
-  int n = ex->n;
-  orc_union64 *ORC_RESTRICT ptr0;
-  const orc_union16 *ORC_RESTRICT ptr4;
-  orc_union16 var33;
-  orc_union64 var34;
-  orc_union32 var35;
-  orc_union32 var36;
-
-  ptr0 = (orc_union64 *) ex->arrays[0];
-  ptr4 = (orc_union16 *) ex->arrays[4];
-
-
-  for (i = 0; i < n; i++) {
-    /* 0: loadw */
-    var33 = ptr4[i];
-    /* 1: convuwl */
-    var35.i = (orc_uint16) var33.i;
-    /* 2: shll */
-    var36.i = ((orc_uint32) var35.i) << ex->params[24];
-    /* 3: convld */
-    var34.f = var36.i;
-    /* 4: storeq */
-    ptr0[i] = var34;
-  }
-
-}
-
-void
-audio_convert_orc_unpack_s16_double (gdouble * 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, 35, 97, 117, 100, 105, 111, 95, 99, 111, 110, 118, 101, 114, 116,
-        95, 111, 114, 99, 95, 117, 110, 112, 97, 99, 107, 95, 115, 49, 54, 95,
-        100, 111, 117, 98, 108, 101, 11, 8, 8, 12, 2, 2, 16, 4, 20, 4,
-        154, 32, 4, 124, 32, 32, 24, 223, 0, 32, 2, 0,
-      };
-      p = orc_program_new_from_static_bytecode (bc);
-      orc_program_set_backup_function (p,
-          _backup_audio_convert_orc_unpack_s16_double);
-#else
-      p = orc_program_new ();
-      orc_program_set_name (p, "audio_convert_orc_unpack_s16_double");
-      orc_program_set_backup_function (p,
-          _backup_audio_convert_orc_unpack_s16_double);
-      orc_program_add_destination (p, 8, "d1");
-      orc_program_add_source (p, 2, "s1");
-      orc_program_add_parameter (p, 4, "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, "shll", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_P1,
-          ORC_VAR_D1);
-      orc_program_append_2 (p, "convld", 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->params[ORC_VAR_P1] = p1;
-
-  func = c->exec;
-  func (ex);
-}
-#endif
-
-
-/* audio_convert_orc_unpack_u16_double_swap */
-#ifdef DISABLE_ORC
-void
-audio_convert_orc_unpack_u16_double_swap (gdouble * ORC_RESTRICT d1,
-    const guint8 * ORC_RESTRICT s1, int p1, int n)
-{
-  int i;
-  orc_union64 *ORC_RESTRICT ptr0;
-  const orc_union16 *ORC_RESTRICT ptr4;
-  orc_union16 var34;
-#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
-  volatile orc_union32 var35;
-#else
-  orc_union32 var35;
-#endif
-  orc_union64 var36;
-  orc_union16 var37;
-  orc_union32 var38;
-  orc_union32 var39;
-  orc_union32 var40;
-
-  ptr0 = (orc_union64 *) d1;
-  ptr4 = (orc_union16 *) s1;
-
-  /* 4: loadpl */
-  var35.i = (int) 0x80000000;   /* -2147483648 or 1.061e-314f */
-
-  for (i = 0; i < n; i++) {
-    /* 0: loadw */
-    var34 = ptr4[i];
-    /* 1: swapw */
-    var37.i = ORC_SWAP_W (var34.i);
-    /* 2: convuwl */
-    var38.i = (orc_uint16) var37.i;
-    /* 3: shll */
-    var39.i = ((orc_uint32) var38.i) << p1;
-    /* 5: xorl */
-    var40.i = var39.i ^ var35.i;
-    /* 6: convld */
-    var36.f = var40.i;
-    /* 7: storeq */
-    ptr0[i] = var36;
-  }
-
-}
-
-#else
-static void
-_backup_audio_convert_orc_unpack_u16_double_swap (OrcExecutor * ORC_RESTRICT ex)
-{
-  int i;
-  int n = ex->n;
-  orc_union64 *ORC_RESTRICT ptr0;
-  const orc_union16 *ORC_RESTRICT ptr4;
-  orc_union16 var34;
-#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
-  volatile orc_union32 var35;
-#else
-  orc_union32 var35;
-#endif
-  orc_union64 var36;
-  orc_union16 var37;
-  orc_union32 var38;
-  orc_union32 var39;
-  orc_union32 var40;
-
-  ptr0 = (orc_union64 *) ex->arrays[0];
-  ptr4 = (orc_union16 *) ex->arrays[4];
-
-  /* 4: loadpl */
-  var35.i = (int) 0x80000000;   /* -2147483648 or 1.061e-314f */
-
-  for (i = 0; i < n; i++) {
-    /* 0: loadw */
-    var34 = ptr4[i];
-    /* 1: swapw */
-    var37.i = ORC_SWAP_W (var34.i);
-    /* 2: convuwl */
-    var38.i = (orc_uint16) var37.i;
-    /* 3: shll */
-    var39.i = ((orc_uint32) var38.i) << ex->params[24];
-    /* 5: xorl */
-    var40.i = var39.i ^ var35.i;
-    /* 6: convld */
-    var36.f = var40.i;
-    /* 7: storeq */
-    ptr0[i] = var36;
-  }
-
-}
-
-void
-audio_convert_orc_unpack_u16_double_swap (gdouble * 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, 40, 97, 117, 100, 105, 111, 95, 99, 111, 110, 118, 101, 114, 116,
-        95, 111, 114, 99, 95, 117, 110, 112, 97, 99, 107, 95, 117, 49, 54, 95,
-        100, 111, 117, 98, 108, 101, 95, 115, 119, 97, 112, 11, 8, 8, 12, 2,
-        2, 14, 4, 0, 0, 0, 128, 16, 4, 20, 2, 20, 4, 183, 32, 4,
-        154, 33, 32, 124, 33, 33, 24, 132, 33, 33, 16, 223, 0, 33, 2, 0,
-
-      };
-      p = orc_program_new_from_static_bytecode (bc);
-      orc_program_set_backup_function (p,
-          _backup_audio_convert_orc_unpack_u16_double_swap);
-#else
-      p = orc_program_new ();
-      orc_program_set_name (p, "audio_convert_orc_unpack_u16_double_swap");
-      orc_program_set_backup_function (p,
-          _backup_audio_convert_orc_unpack_u16_double_swap);
-      orc_program_add_destination (p, 8, "d1");
-      orc_program_add_source (p, 2, "s1");
-      orc_program_add_constant (p, 4, 0x80000000, "c1");
-      orc_program_add_parameter (p, 4, "p1");
-      orc_program_add_temporary (p, 2, "t1");
-      orc_program_add_temporary (p, 4, "t2");
-
-      orc_program_append_2 (p, "swapw", 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_T1, ORC_VAR_D1,
-          ORC_VAR_D1);
-      orc_program_append_2 (p, "shll", 0, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_P1,
-          ORC_VAR_D1);
-      orc_program_append_2 (p, "xorl", 0, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_C1,
-          ORC_VAR_D1);
-      orc_program_append_2 (p, "convld", 0, 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_S1] = (void *) s1;
-  ex->params[ORC_VAR_P1] = p1;
-
-  func = c->exec;
-  func (ex);
-}
-#endif
-
-
-/* audio_convert_orc_unpack_s16_double_swap */
-#ifdef DISABLE_ORC
-void
-audio_convert_orc_unpack_s16_double_swap (gdouble * ORC_RESTRICT d1,
-    const guint8 * ORC_RESTRICT s1, int p1, int n)
-{
-  int i;
-  orc_union64 *ORC_RESTRICT ptr0;
-  const orc_union16 *ORC_RESTRICT ptr4;
-  orc_union16 var34;
-  orc_union64 var35;
-  orc_union16 var36;
-  orc_union32 var37;
-  orc_union32 var38;
-
-  ptr0 = (orc_union64 *) d1;
-  ptr4 = (orc_union16 *) s1;
-
-
-  for (i = 0; i < n; i++) {
-    /* 0: loadw */
-    var34 = ptr4[i];
-    /* 1: swapw */
-    var36.i = ORC_SWAP_W (var34.i);
-    /* 2: convuwl */
-    var37.i = (orc_uint16) var36.i;
-    /* 3: shll */
-    var38.i = ((orc_uint32) var37.i) << p1;
-    /* 4: convld */
-    var35.f = var38.i;
-    /* 5: storeq */
-    ptr0[i] = var35;
-  }
-
-}
-
-#else
-static void
-_backup_audio_convert_orc_unpack_s16_double_swap (OrcExecutor * ORC_RESTRICT ex)
-{
-  int i;
-  int n = ex->n;
-  orc_union64 *ORC_RESTRICT ptr0;
-  const orc_union16 *ORC_RESTRICT ptr4;
-  orc_union16 var34;
-  orc_union64 var35;
-  orc_union16 var36;
-  orc_union32 var37;
-  orc_union32 var38;
-
-  ptr0 = (orc_union64 *) ex->arrays[0];
-  ptr4 = (orc_union16 *) ex->arrays[4];
-
-
-  for (i = 0; i < n; i++) {
-    /* 0: loadw */
-    var34 = ptr4[i];
-    /* 1: swapw */
-    var36.i = ORC_SWAP_W (var34.i);
-    /* 2: convuwl */
-    var37.i = (orc_uint16) var36.i;
-    /* 3: shll */
-    var38.i = ((orc_uint32) var37.i) << ex->params[24];
-    /* 4: convld */
-    var35.f = var38.i;
-    /* 5: storeq */
-    ptr0[i] = var35;
-  }
-
-}
-
-void
-audio_convert_orc_unpack_s16_double_swap (gdouble * 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, 40, 97, 117, 100, 105, 111, 95, 99, 111, 110, 118, 101, 114, 116,
-        95, 111, 114, 99, 95, 117, 110, 112, 97, 99, 107, 95, 115, 49, 54, 95,
-        100, 111, 117, 98, 108, 101, 95, 115, 119, 97, 112, 11, 8, 8, 12, 2,
-        2, 16, 4, 20, 2, 20, 4, 183, 32, 4, 154, 33, 32, 124, 33, 33,
-        24, 223, 0, 33, 2, 0,
-      };
-      p = orc_program_new_from_static_bytecode (bc);
-      orc_program_set_backup_function (p,
-          _backup_audio_convert_orc_unpack_s16_double_swap);
-#else
-      p = orc_program_new ();
-      orc_program_set_name (p, "audio_convert_orc_unpack_s16_double_swap");
-      orc_program_set_backup_function (p,
-          _backup_audio_convert_orc_unpack_s16_double_swap);
-      orc_program_add_destination (p, 8, "d1");
-      orc_program_add_source (p, 2, "s1");
-      orc_program_add_parameter (p, 4, "p1");
-      orc_program_add_temporary (p, 2, "t1");
-      orc_program_add_temporary (p, 4, "t2");
-
-      orc_program_append_2 (p, "swapw", 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_T1, ORC_VAR_D1,
-          ORC_VAR_D1);
-      orc_program_append_2 (p, "shll", 0, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_P1,
-          ORC_VAR_D1);
-      orc_program_append_2 (p, "convld", 0, 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_S1] = (void *) s1;
-  ex->params[ORC_VAR_P1] = p1;
-
-  func = c->exec;
-  func (ex);
-}
-#endif
-
-
-/* audio_convert_orc_unpack_u32_double */
-#ifdef DISABLE_ORC
-void
-audio_convert_orc_unpack_u32_double (gdouble * ORC_RESTRICT d1,
-    const guint8 * ORC_RESTRICT s1, int p1, int n)
-{
-  int i;
-  orc_union64 *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_union64 var35;
-  orc_union32 var36;
-  orc_union32 var37;
-
-  ptr0 = (orc_union64 *) d1;
-  ptr4 = (orc_union32 *) s1;
-
-  /* 2: loadpl */
-  var34.i = (int) 0x80000000;   /* -2147483648 or 1.061e-314f */
-
-  for (i = 0; i < n; i++) {
-    /* 0: loadl */
-    var33 = ptr4[i];
-    /* 1: shll */
-    var36.i = ((orc_uint32) var33.i) << p1;
-    /* 3: xorl */
-    var37.i = var36.i ^ var34.i;
-    /* 4: convld */
-    var35.f = var37.i;
-    /* 5: storeq */
-    ptr0[i] = var35;
-  }
-
-}
-
-#else
-static void
-_backup_audio_convert_orc_unpack_u32_double (OrcExecutor * ORC_RESTRICT ex)
-{
-  int i;
-  int n = ex->n;
-  orc_union64 *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_union64 var35;
-  orc_union32 var36;
-  orc_union32 var37;
-
-  ptr0 = (orc_union64 *) ex->arrays[0];
-  ptr4 = (orc_union32 *) ex->arrays[4];
-
-  /* 2: loadpl */
-  var34.i = (int) 0x80000000;   /* -2147483648 or 1.061e-314f */
-
-  for (i = 0; i < n; i++) {
-    /* 0: loadl */
-    var33 = ptr4[i];
-    /* 1: shll */
-    var36.i = ((orc_uint32) var33.i) << ex->params[24];
-    /* 3: xorl */
-    var37.i = var36.i ^ var34.i;
-    /* 4: convld */
-    var35.f = var37.i;
-    /* 5: storeq */
-    ptr0[i] = var35;
-  }
-
-}
-
-void
-audio_convert_orc_unpack_u32_double (gdouble * 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, 35, 97, 117, 100, 105, 111, 95, 99, 111, 110, 118, 101, 114, 116,
-        95, 111, 114, 99, 95, 117, 110, 112, 97, 99, 107, 95, 117, 51, 50, 95,
-        100, 111, 117, 98, 108, 101, 11, 8, 8, 12, 4, 4, 14, 4, 0, 0,
-        0, 128, 16, 4, 20, 4, 124, 32, 4, 24, 132, 32, 32, 16, 223, 0,
-        32, 2, 0,
-      };
-      p = orc_program_new_from_static_bytecode (bc);
-      orc_program_set_backup_function (p,
-          _backup_audio_convert_orc_unpack_u32_double);
-#else
-      p = orc_program_new ();
-      orc_program_set_name (p, "audio_convert_orc_unpack_u32_double");
-      orc_program_set_backup_function (p,
-          _backup_audio_convert_orc_unpack_u32_double);
-      orc_program_add_destination (p, 8, "d1");
-      orc_program_add_source (p, 4, "s1");
-      orc_program_add_constant (p, 4, 0x80000000, "c1");
-      orc_program_add_parameter (p, 4, "p1");
-      orc_program_add_temporary (p, 4, "t1");
-
-      orc_program_append_2 (p, "shll", 0, ORC_VAR_T1, ORC_VAR_S1, ORC_VAR_P1,
-          ORC_VAR_D1);
-      orc_program_append_2 (p, "xorl", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_C1,
-          ORC_VAR_D1);
-      orc_program_append_2 (p, "convld", 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->params[ORC_VAR_P1] = p1;
-
-  func = c->exec;
-  func (ex);
-}
-#endif
-
-
-/* audio_convert_orc_unpack_s32_double */
-#ifdef DISABLE_ORC
-void
-audio_convert_orc_unpack_s32_double (gdouble * ORC_RESTRICT d1,
-    const guint8 * ORC_RESTRICT s1, int p1, int n)
-{
-  int i;
-  orc_union64 *ORC_RESTRICT ptr0;
-  const orc_union32 *ORC_RESTRICT ptr4;
-  orc_union32 var33;
-  orc_union64 var34;
-  orc_union32 var35;
-
-  ptr0 = (orc_union64 *) d1;
-  ptr4 = (orc_union32 *) s1;
-
-
-  for (i = 0; i < n; i++) {
-    /* 0: loadl */
-    var33 = ptr4[i];
-    /* 1: shll */
-    var35.i = ((orc_uint32) var33.i) << p1;
-    /* 2: convld */
-    var34.f = var35.i;
-    /* 3: storeq */
-    ptr0[i] = var34;
-  }
-
-}
-
-#else
-static void
-_backup_audio_convert_orc_unpack_s32_double (OrcExecutor * ORC_RESTRICT ex)
-{
-  int i;
-  int n = ex->n;
-  orc_union64 *ORC_RESTRICT ptr0;
-  const orc_union32 *ORC_RESTRICT ptr4;
-  orc_union32 var33;
-  orc_union64 var34;
-  orc_union32 var35;
-
-  ptr0 = (orc_union64 *) ex->arrays[0];
-  ptr4 = (orc_union32 *) ex->arrays[4];
-
-
-  for (i = 0; i < n; i++) {
-    /* 0: loadl */
-    var33 = ptr4[i];
-    /* 1: shll */
-    var35.i = ((orc_uint32) var33.i) << ex->params[24];
-    /* 2: convld */
-    var34.f = var35.i;
-    /* 3: storeq */
-    ptr0[i] = var34;
-  }
-
-}
-
-void
-audio_convert_orc_unpack_s32_double (gdouble * 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, 35, 97, 117, 100, 105, 111, 95, 99, 111, 110, 118, 101, 114, 116,
-        95, 111, 114, 99, 95, 117, 110, 112, 97, 99, 107, 95, 115, 51, 50, 95,
-        100, 111, 117, 98, 108, 101, 11, 8, 8, 12, 4, 4, 16, 4, 20, 4,
-        124, 32, 4, 24, 223, 0, 32, 2, 0,
-      };
-      p = orc_program_new_from_static_bytecode (bc);
-      orc_program_set_backup_function (p,
-          _backup_audio_convert_orc_unpack_s32_double);
-#else
-      p = orc_program_new ();
-      orc_program_set_name (p, "audio_convert_orc_unpack_s32_double");
-      orc_program_set_backup_function (p,
-          _backup_audio_convert_orc_unpack_s32_double);
-      orc_program_add_destination (p, 8, "d1");
-      orc_program_add_source (p, 4, "s1");
-      orc_program_add_parameter (p, 4, "p1");
-      orc_program_add_temporary (p, 4, "t1");
-
-      orc_program_append_2 (p, "shll", 0, ORC_VAR_T1, ORC_VAR_S1, ORC_VAR_P1,
-          ORC_VAR_D1);
-      orc_program_append_2 (p, "convld", 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->params[ORC_VAR_P1] = p1;
-
-  func = c->exec;
-  func (ex);
-}
-#endif
-
-
-/* audio_convert_orc_unpack_u32_double_swap */
-#ifdef DISABLE_ORC
-void
-audio_convert_orc_unpack_u32_double_swap (gdouble * ORC_RESTRICT d1,
-    const guint8 * ORC_RESTRICT s1, int p1, int n)
-{
-  int i;
-  orc_union64 *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_union64 var35;
-  orc_union32 var36;
-  orc_union32 var37;
-  orc_union32 var38;
-
-  ptr0 = (orc_union64 *) d1;
-  ptr4 = (orc_union32 *) s1;
-
-  /* 3: loadpl */
-  var34.i = (int) 0x80000000;   /* -2147483648 or 1.061e-314f */
-
-  for (i = 0; i < n; i++) {
-    /* 0: loadl */
-    var33 = ptr4[i];
-    /* 1: swapl */
-    var36.i = ORC_SWAP_L (var33.i);
-    /* 2: shll */
-    var37.i = ((orc_uint32) var36.i) << p1;
-    /* 4: xorl */
-    var38.i = var37.i ^ var34.i;
-    /* 5: convld */
-    var35.f = var38.i;
-    /* 6: storeq */
-    ptr0[i] = var35;
-  }
-
-}
-
-#else
-static void
-_backup_audio_convert_orc_unpack_u32_double_swap (OrcExecutor * ORC_RESTRICT ex)
-{
-  int i;
-  int n = ex->n;
-  orc_union64 *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_union64 var35;
-  orc_union32 var36;
-  orc_union32 var37;
-  orc_union32 var38;
-
-  ptr0 = (orc_union64 *) ex->arrays[0];
-  ptr4 = (orc_union32 *) ex->arrays[4];
-
-  /* 3: loadpl */
-  var34.i = (int) 0x80000000;   /* -2147483648 or 1.061e-314f */
-
-  for (i = 0; i < n; i++) {
-    /* 0: loadl */
-    var33 = ptr4[i];
-    /* 1: swapl */
-    var36.i = ORC_SWAP_L (var33.i);
-    /* 2: shll */
-    var37.i = ((orc_uint32) var36.i) << ex->params[24];
-    /* 4: xorl */
-    var38.i = var37.i ^ var34.i;
-    /* 5: convld */
-    var35.f = var38.i;
-    /* 6: storeq */
-    ptr0[i] = var35;
-  }
-
-}
-
-void
-audio_convert_orc_unpack_u32_double_swap (gdouble * 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, 40, 97, 117, 100, 105, 111, 95, 99, 111, 110, 118, 101, 114, 116,
-        95, 111, 114, 99, 95, 117, 110, 112, 97, 99, 107, 95, 117, 51, 50, 95,
-        100, 111, 117, 98, 108, 101, 95, 115, 119, 97, 112, 11, 8, 8, 12, 4,
-        4, 14, 4, 0, 0, 0, 128, 16, 4, 20, 4, 184, 32, 4, 124, 32,
-        32, 24, 132, 32, 32, 16, 223, 0, 32, 2, 0,
-      };
-      p = orc_program_new_from_static_bytecode (bc);
-      orc_program_set_backup_function (p,
-          _backup_audio_convert_orc_unpack_u32_double_swap);
-#else
-      p = orc_program_new ();
-      orc_program_set_name (p, "audio_convert_orc_unpack_u32_double_swap");
-      orc_program_set_backup_function (p,
-          _backup_audio_convert_orc_unpack_u32_double_swap);
-      orc_program_add_destination (p, 8, "d1");
-      orc_program_add_source (p, 4, "s1");
-      orc_program_add_constant (p, 4, 0x80000000, "c1");
-      orc_program_add_parameter (p, 4, "p1");
-      orc_program_add_temporary (p, 4, "t1");
-
-      orc_program_append_2 (p, "swapl", 0, ORC_VAR_T1, ORC_VAR_S1, ORC_VAR_D1,
-          ORC_VAR_D1);
-      orc_program_append_2 (p, "shll", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_P1,
-          ORC_VAR_D1);
-      orc_program_append_2 (p, "xorl", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_C1,
-          ORC_VAR_D1);
-      orc_program_append_2 (p, "convld", 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->params[ORC_VAR_P1] = p1;
-
-  func = c->exec;
-  func (ex);
-}
-#endif
-
-
-/* audio_convert_orc_unpack_s32_double_swap */
-#ifdef DISABLE_ORC
-void
-audio_convert_orc_unpack_s32_double_swap (gdouble * ORC_RESTRICT d1,
-    const guint8 * ORC_RESTRICT s1, int p1, int n)
-{
-  int i;
-  orc_union64 *ORC_RESTRICT ptr0;
-  const orc_union32 *ORC_RESTRICT ptr4;
-  orc_union32 var33;
-  orc_union64 var34;
-  orc_union32 var35;
-  orc_union32 var36;
-
-  ptr0 = (orc_union64 *) d1;
-  ptr4 = (orc_union32 *) s1;
-
-
-  for (i = 0; i < n; i++) {
-    /* 0: loadl */
-    var33 = ptr4[i];
-    /* 1: swapl */
-    var35.i = ORC_SWAP_L (var33.i);
-    /* 2: shll */
-    var36.i = ((orc_uint32) var35.i) << p1;
-    /* 3: convld */
-    var34.f = var36.i;
-    /* 4: storeq */
-    ptr0[i] = var34;
-  }
-
-}
-
-#else
-static void
-_backup_audio_convert_orc_unpack_s32_double_swap (OrcExecutor * ORC_RESTRICT ex)
-{
-  int i;
-  int n = ex->n;
-  orc_union64 *ORC_RESTRICT ptr0;
-  const orc_union32 *ORC_RESTRICT ptr4;
-  orc_union32 var33;
-  orc_union64 var34;
-  orc_union32 var35;
-  orc_union32 var36;
-
-  ptr0 = (orc_union64 *) ex->arrays[0];
-  ptr4 = (orc_union32 *) ex->arrays[4];
-
-
-  for (i = 0; i < n; i++) {
-    /* 0: loadl */
-    var33 = ptr4[i];
-    /* 1: swapl */
-    var35.i = ORC_SWAP_L (var33.i);
-    /* 2: shll */
-    var36.i = ((orc_uint32) var35.i) << ex->params[24];
-    /* 3: convld */
-    var34.f = var36.i;
-    /* 4: storeq */
-    ptr0[i] = var34;
-  }
-
-}
-
-void
-audio_convert_orc_unpack_s32_double_swap (gdouble * 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, 40, 97, 117, 100, 105, 111, 95, 99, 111, 110, 118, 101, 114, 116,
-        95, 111, 114, 99, 95, 117, 110, 112, 97, 99, 107, 95, 115, 51, 50, 95,
-        100, 111, 117, 98, 108, 101, 95, 115, 119, 97, 112, 11, 8, 8, 12, 4,
-        4, 16, 4, 20, 4, 184, 32, 4, 124, 32, 32, 24, 223, 0, 32, 2,
-        0,
-      };
-      p = orc_program_new_from_static_bytecode (bc);
-      orc_program_set_backup_function (p,
-          _backup_audio_convert_orc_unpack_s32_double_swap);
-#else
-      p = orc_program_new ();
-      orc_program_set_name (p, "audio_convert_orc_unpack_s32_double_swap");
-      orc_program_set_backup_function (p,
-          _backup_audio_convert_orc_unpack_s32_double_swap);
-      orc_program_add_destination (p, 8, "d1");
-      orc_program_add_source (p, 4, "s1");
-      orc_program_add_parameter (p, 4, "p1");
-      orc_program_add_temporary (p, 4, "t1");
-
-      orc_program_append_2 (p, "swapl", 0, ORC_VAR_T1, ORC_VAR_S1, ORC_VAR_D1,
-          ORC_VAR_D1);
-      orc_program_append_2 (p, "shll", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_P1,
-          ORC_VAR_D1);
-      orc_program_append_2 (p, "convld", 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->params[ORC_VAR_P1] = p1;
-
-  func = c->exec;
-  func (ex);
-}
-#endif
-
-
-/* audio_convert_orc_pack_u8 */
-#ifdef DISABLE_ORC
-void
-audio_convert_orc_pack_u8 (guint8 * ORC_RESTRICT d1,
-    const gint32 * ORC_RESTRICT s1, int p1, 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) 0x80000000;   /* -2147483648 or 1.061e-314f */
-
-  for (i = 0; i < n; i++) {
-    /* 0: loadl */
-    var34 = ptr4[i];
-    /* 2: xorl */
-    var37.i = var34.i ^ var35.i;
-    /* 3: shrul */
-    var38.i = ((orc_uint32) var37.i) >> p1;
-    /* 4: convlw */
-    var39.i = var38.i;
-    /* 5: convwb */
-    var36 = var39.i;
-    /* 6: storeb */
-    ptr0[i] = var36;
-  }
-
-}
-
-#else
-static void
-_backup_audio_convert_orc_pack_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) 0x80000000;   /* -2147483648 or 1.061e-314f */
-
-  for (i = 0; i < n; i++) {
-    /* 0: loadl */
-    var34 = ptr4[i];
-    /* 2: xorl */
-    var37.i = var34.i ^ var35.i;
-    /* 3: shrul */
-    var38.i = ((orc_uint32) var37.i) >> ex->params[24];
-    /* 4: convlw */
-    var39.i = var38.i;
-    /* 5: convwb */
-    var36 = var39.i;
-    /* 6: storeb */
-    ptr0[i] = var36;
-  }
-
-}
-
-void
-audio_convert_orc_pack_u8 (guint8 * ORC_RESTRICT d1,
-    const gint32 * 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, 25, 97, 117, 100, 105, 111, 95, 99, 111, 110, 118, 101, 114, 116,
-        95, 111, 114, 99, 95, 112, 97, 99, 107, 95, 117, 56, 11, 1, 1, 12,
-        4, 4, 14, 4, 0, 0, 0, 128, 16, 4, 20, 4, 20, 2, 132, 32,
-        4, 16, 126, 32, 32, 24, 163, 33, 32, 157, 0, 33, 2, 0,
-      };
-      p = orc_program_new_from_static_bytecode (bc);
-      orc_program_set_backup_function (p, _backup_audio_convert_orc_pack_u8);
-#else
-      p = orc_program_new ();
-      orc_program_set_name (p, "audio_convert_orc_pack_u8");
-      orc_program_set_backup_function (p, _backup_audio_convert_orc_pack_u8);
-      orc_program_add_destination (p, 1, "d1");
-      orc_program_add_source (p, 4, "s1");
-      orc_program_add_constant (p, 4, 0x80000000, "c1");
-      orc_program_add_parameter (p, 4, "p1");
-      orc_program_add_temporary (p, 4, "t1");
-      orc_program_add_temporary (p, 2, "t2");
-
-      orc_program_append_2 (p, "xorl", 0, ORC_VAR_T1, ORC_VAR_S1, ORC_VAR_C1,
-          ORC_VAR_D1);
-      orc_program_append_2 (p, "shrul", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_P1,
-          ORC_VAR_D1);
-      orc_program_append_2 (p, "convlw", 0, ORC_VAR_T2, ORC_VAR_T1, ORC_VAR_D1,
-          ORC_VAR_D1);
-      orc_program_append_2 (p, "convwb", 0, 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_S1] = (void *) s1;
-  ex->params[ORC_VAR_P1] = p1;
-
-  func = c->exec;
-  func (ex);
-}
-#endif
-
-
-/* audio_convert_orc_pack_s8 */
-#ifdef DISABLE_ORC
-void
-audio_convert_orc_pack_s8 (guint8 * ORC_RESTRICT d1,
-    const gint32 * ORC_RESTRICT s1, int p1, int n)
-{
-  int i;
-  orc_int8 *ORC_RESTRICT ptr0;
-  const orc_union32 *ORC_RESTRICT ptr4;
-  orc_union32 var34;
-  orc_int8 var35;
-  orc_union32 var36;
-  orc_union16 var37;
-
-  ptr0 = (orc_int8 *) d1;
-  ptr4 = (orc_union32 *) s1;
-
-
-  for (i = 0; i < n; i++) {
-    /* 0: loadl */
-    var34 = ptr4[i];
-    /* 1: shrsl */
-    var36.i = var34.i >> p1;
-    /* 2: convlw */
-    var37.i = var36.i;
-    /* 3: convwb */
-    var35 = var37.i;
-    /* 4: storeb */
-    ptr0[i] = var35;
-  }
-
-}
-
-#else
-static void
-_backup_audio_convert_orc_pack_s8 (OrcExecutor * ORC_RESTRICT ex)
-{
-  int i;
-  int n = ex->n;
-  orc_int8 *ORC_RESTRICT ptr0;
-  const orc_union32 *ORC_RESTRICT ptr4;
-  orc_union32 var34;
-  orc_int8 var35;
-  orc_union32 var36;
-  orc_union16 var37;
-
-  ptr0 = (orc_int8 *) ex->arrays[0];
-  ptr4 = (orc_union32 *) ex->arrays[4];
-
-
-  for (i = 0; i < n; i++) {
-    /* 0: loadl */
-    var34 = ptr4[i];
-    /* 1: shrsl */
-    var36.i = var34.i >> ex->params[24];
-    /* 2: convlw */
-    var37.i = var36.i;
-    /* 3: convwb */
-    var35 = var37.i;
-    /* 4: storeb */
-    ptr0[i] = var35;
-  }
-
-}
-
-void
-audio_convert_orc_pack_s8 (guint8 * ORC_RESTRICT d1,
-    const gint32 * 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, 25, 97, 117, 100, 105, 111, 95, 99, 111, 110, 118, 101, 114, 116,
-        95, 111, 114, 99, 95, 112, 97, 99, 107, 95, 115, 56, 11, 1, 1, 12,
-        4, 4, 16, 4, 20, 4, 20, 2, 125, 32, 4, 24, 163, 33, 32, 157,
-        0, 33, 2, 0,
-      };
-      p = orc_program_new_from_static_bytecode (bc);
-      orc_program_set_backup_function (p, _backup_audio_convert_orc_pack_s8);
-#else
-      p = orc_program_new ();
-      orc_program_set_name (p, "audio_convert_orc_pack_s8");
-      orc_program_set_backup_function (p, _backup_audio_convert_orc_pack_s8);
-      orc_program_add_destination (p, 1, "d1");
-      orc_program_add_source (p, 4, "s1");
-      orc_program_add_parameter (p, 4, "p1");
-      orc_program_add_temporary (p, 4, "t1");
-      orc_program_add_temporary (p, 2, "t2");
-
-      orc_program_append_2 (p, "shrsl", 0, ORC_VAR_T1, ORC_VAR_S1, ORC_VAR_P1,
-          ORC_VAR_D1);
-      orc_program_append_2 (p, "convlw", 0, ORC_VAR_T2, ORC_VAR_T1, ORC_VAR_D1,
-          ORC_VAR_D1);
-      orc_program_append_2 (p, "convwb", 0, 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_S1] = (void *) s1;
-  ex->params[ORC_VAR_P1] = p1;
-
-  func = c->exec;
-  func (ex);
-}
-#endif
-
-
-/* audio_convert_orc_pack_u16 */
-#ifdef DISABLE_ORC
-void
-audio_convert_orc_pack_u16 (guint8 * ORC_RESTRICT d1,
-    const gint32 * ORC_RESTRICT s1, int p1, 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) 0x80000000;   /* -2147483648 or 1.061e-314f */
-
-  for (i = 0; i < n; i++) {
-    /* 0: loadl */
-    var33 = ptr4[i];
-    /* 2: xorl */
-    var36.i = var33.i ^ var34.i;
-    /* 3: shrul */
-    var37.i = ((orc_uint32) var36.i) >> p1;
-    /* 4: convlw */
-    var35.i = var37.i;
-    /* 5: storew */
-    ptr0[i] = var35;
-  }
-
-}
-
-#else
-static void
-_backup_audio_convert_orc_pack_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) 0x80000000;   /* -2147483648 or 1.061e-314f */
-
-  for (i = 0; i < n; i++) {
-    /* 0: loadl */
-    var33 = ptr4[i];
-    /* 2: xorl */
-    var36.i = var33.i ^ var34.i;
-    /* 3: shrul */
-    var37.i = ((orc_uint32) var36.i) >> ex->params[24];
-    /* 4: convlw */
-    var35.i = var37.i;
-    /* 5: storew */
-    ptr0[i] = var35;
-  }
-
-}
-
-void
-audio_convert_orc_pack_u16 (guint8 * ORC_RESTRICT d1,
-    const gint32 * 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, 26, 97, 117, 100, 105, 111, 95, 99, 111, 110, 118, 101, 114, 116,
-        95, 111, 114, 99, 95, 112, 97, 99, 107, 95, 117, 49, 54, 11, 2, 2,
-        12, 4, 4, 14, 4, 0, 0, 0, 128, 16, 4, 20, 4, 132, 32, 4,
-        16, 126, 32, 32, 24, 163, 0, 32, 2, 0,
-      };
-      p = orc_program_new_from_static_bytecode (bc);
-      orc_program_set_backup_function (p, _backup_audio_convert_orc_pack_u16);
-#else
-      p = orc_program_new ();
-      orc_program_set_name (p, "audio_convert_orc_pack_u16");
-      orc_program_set_backup_function (p, _backup_audio_convert_orc_pack_u16);
-      orc_program_add_destination (p, 2, "d1");
-      orc_program_add_source (p, 4, "s1");
-      orc_program_add_constant (p, 4, 0x80000000, "c1");
-      orc_program_add_parameter (p, 4, "p1");
-      orc_program_add_temporary (p, 4, "t1");
-
-      orc_program_append_2 (p, "xorl", 0, ORC_VAR_T1, ORC_VAR_S1, ORC_VAR_C1,
-          ORC_VAR_D1);
-      orc_program_append_2 (p, "shrul", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_P1,
-          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->params[ORC_VAR_P1] = p1;
-
-  func = c->exec;
-  func (ex);
-}
-#endif
-
-
-/* audio_convert_orc_pack_s16 */
-#ifdef DISABLE_ORC
-void
-audio_convert_orc_pack_s16 (guint8 * ORC_RESTRICT d1,
-    const gint32 * ORC_RESTRICT s1, int p1, int n)
-{
-  int i;
-  orc_union16 *ORC_RESTRICT ptr0;
-  const orc_union32 *ORC_RESTRICT ptr4;
-  orc_union32 var33;
-  orc_union16 var34;
-  orc_union32 var35;
-
-  ptr0 = (orc_union16 *) d1;
-  ptr4 = (orc_union32 *) s1;
-
-
-  for (i = 0; i < n; i++) {
-    /* 0: loadl */
-    var33 = ptr4[i];
-    /* 1: shrsl */
-    var35.i = var33.i >> p1;
-    /* 2: convlw */
-    var34.i = var35.i;
-    /* 3: storew */
-    ptr0[i] = var34;
-  }
-
-}
-
-#else
-static void
-_backup_audio_convert_orc_pack_s16 (OrcExecutor * ORC_RESTRICT ex)
-{
-  int i;
-  int n = ex->n;
-  orc_union16 *ORC_RESTRICT ptr0;
-  const orc_union32 *ORC_RESTRICT ptr4;
-  orc_union32 var33;
-  orc_union16 var34;
-  orc_union32 var35;
-
-  ptr0 = (orc_union16 *) ex->arrays[0];
-  ptr4 = (orc_union32 *) ex->arrays[4];
-
-
-  for (i = 0; i < n; i++) {
-    /* 0: loadl */
-    var33 = ptr4[i];
-    /* 1: shrsl */
-    var35.i = var33.i >> ex->params[24];
-    /* 2: convlw */
-    var34.i = var35.i;
-    /* 3: storew */
-    ptr0[i] = var34;
-  }
-
-}
-
-void
-audio_convert_orc_pack_s16 (guint8 * ORC_RESTRICT d1,
-    const gint32 * 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, 26, 97, 117, 100, 105, 111, 95, 99, 111, 110, 118, 101, 114, 116,
-        95, 111, 114, 99, 95, 112, 97, 99, 107, 95, 115, 49, 54, 11, 2, 2,
-        12, 4, 4, 16, 4, 20, 4, 125, 32, 4, 24, 163, 0, 32, 2, 0,
-
-      };
-      p = orc_program_new_from_static_bytecode (bc);
-      orc_program_set_backup_function (p, _backup_audio_convert_orc_pack_s16);
-#else
-      p = orc_program_new ();
-      orc_program_set_name (p, "audio_convert_orc_pack_s16");
-      orc_program_set_backup_function (p, _backup_audio_convert_orc_pack_s16);
-      orc_program_add_destination (p, 2, "d1");
-      orc_program_add_source (p, 4, "s1");
-      orc_program_add_parameter (p, 4, "p1");
-      orc_program_add_temporary (p, 4, "t1");
-
-      orc_program_append_2 (p, "shrsl", 0, ORC_VAR_T1, ORC_VAR_S1, ORC_VAR_P1,
-          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->params[ORC_VAR_P1] = p1;
-
-  func = c->exec;
-  func (ex);
-}
-#endif
-
-
-/* audio_convert_orc_pack_u16_swap */
-#ifdef DISABLE_ORC
-void
-audio_convert_orc_pack_u16_swap (guint8 * ORC_RESTRICT d1,
-    const gint32 * ORC_RESTRICT s1, int p1, int n)
-{
-  int i;
-  orc_union16 *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_union16 var36;
-  orc_union32 var37;
-  orc_union32 var38;
-  orc_union16 var39;
-
-  ptr0 = (orc_union16 *) d1;
-  ptr4 = (orc_union32 *) s1;
-
-  /* 1: loadpl */
-  var35.i = (int) 0x80000000;   /* -2147483648 or 1.061e-314f */
-
-  for (i = 0; i < n; i++) {
-    /* 0: loadl */
-    var34 = ptr4[i];
-    /* 2: xorl */
-    var37.i = var34.i ^ var35.i;
-    /* 3: shrul */
-    var38.i = ((orc_uint32) var37.i) >> p1;
-    /* 4: convlw */
-    var39.i = var38.i;
-    /* 5: swapw */
-    var36.i = ORC_SWAP_W (var39.i);
-    /* 6: storew */
-    ptr0[i] = var36;
-  }
-
-}
-
-#else
-static void
-_backup_audio_convert_orc_pack_u16_swap (OrcExecutor * ORC_RESTRICT ex)
-{
-  int i;
-  int n = ex->n;
-  orc_union16 *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_union16 var36;
-  orc_union32 var37;
-  orc_union32 var38;
-  orc_union16 var39;
-
-  ptr0 = (orc_union16 *) ex->arrays[0];
-  ptr4 = (orc_union32 *) ex->arrays[4];
-
-  /* 1: loadpl */
-  var35.i = (int) 0x80000000;   /* -2147483648 or 1.061e-314f */
-
-  for (i = 0; i < n; i++) {
-    /* 0: loadl */
-    var34 = ptr4[i];
-    /* 2: xorl */
-    var37.i = var34.i ^ var35.i;
-    /* 3: shrul */
-    var38.i = ((orc_uint32) var37.i) >> ex->params[24];
-    /* 4: convlw */
-    var39.i = var38.i;
-    /* 5: swapw */
-    var36.i = ORC_SWAP_W (var39.i);
-    /* 6: storew */
-    ptr0[i] = var36;
-  }
-
-}
-
-void
-audio_convert_orc_pack_u16_swap (guint8 * ORC_RESTRICT d1,
-    const gint32 * 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, 97, 117, 100, 105, 111, 95, 99, 111, 110, 118, 101, 114, 116,
-        95, 111, 114, 99, 95, 112, 97, 99, 107, 95, 117, 49, 54, 95, 115, 119,
-        97, 112, 11, 2, 2, 12, 4, 4, 14, 4, 0, 0, 0, 128, 16, 4,
-        20, 4, 20, 2, 132, 32, 4, 16, 126, 32, 32, 24, 163, 33, 32, 183,
-        0, 33, 2, 0,
-      };
-      p = orc_program_new_from_static_bytecode (bc);
-      orc_program_set_backup_function (p,
-          _backup_audio_convert_orc_pack_u16_swap);
-#else
-      p = orc_program_new ();
-      orc_program_set_name (p, "audio_convert_orc_pack_u16_swap");
-      orc_program_set_backup_function (p,
-          _backup_audio_convert_orc_pack_u16_swap);
-      orc_program_add_destination (p, 2, "d1");
-      orc_program_add_source (p, 4, "s1");
-      orc_program_add_constant (p, 4, 0x80000000, "c1");
-      orc_program_add_parameter (p, 4, "p1");
-      orc_program_add_temporary (p, 4, "t1");
-      orc_program_add_temporary (p, 2, "t2");
-
-      orc_program_append_2 (p, "xorl", 0, ORC_VAR_T1, ORC_VAR_S1, ORC_VAR_C1,
-          ORC_VAR_D1);
-      orc_program_append_2 (p, "shrul", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_P1,
-          ORC_VAR_D1);
-      orc_program_append_2 (p, "convlw", 0, ORC_VAR_T2, ORC_VAR_T1, ORC_VAR_D1,
-          ORC_VAR_D1);
-      orc_program_append_2 (p, "swapw", 0, 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_S1] = (void *) s1;
-  ex->params[ORC_VAR_P1] = p1;
-
-  func = c->exec;
-  func (ex);
-}
-#endif
-
-
-/* audio_convert_orc_pack_s16_swap */
-#ifdef DISABLE_ORC
-void
-audio_convert_orc_pack_s16_swap (guint8 * ORC_RESTRICT d1,
-    const gint32 * ORC_RESTRICT s1, int p1, int n)
-{
-  int i;
-  orc_union16 *ORC_RESTRICT ptr0;
-  const orc_union32 *ORC_RESTRICT ptr4;
-  orc_union32 var34;
-  orc_union16 var35;
-  orc_union32 var36;
-  orc_union16 var37;
-
-  ptr0 = (orc_union16 *) d1;
-  ptr4 = (orc_union32 *) s1;
-
-
-  for (i = 0; i < n; i++) {
-    /* 0: loadl */
-    var34 = ptr4[i];
-    /* 1: shrsl */
-    var36.i = var34.i >> p1;
-    /* 2: convlw */
-    var37.i = var36.i;
-    /* 3: swapw */
-    var35.i = ORC_SWAP_W (var37.i);
-    /* 4: storew */
-    ptr0[i] = var35;
-  }
-
-}
-
-#else
-static void
-_backup_audio_convert_orc_pack_s16_swap (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_union32 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: shrsl */
-    var36.i = var34.i >> ex->params[24];
-    /* 2: convlw */
-    var37.i = var36.i;
-    /* 3: swapw */
-    var35.i = ORC_SWAP_W (var37.i);
-    /* 4: storew */
-    ptr0[i] = var35;
-  }
-
-}
-
-void
-audio_convert_orc_pack_s16_swap (guint8 * ORC_RESTRICT d1,
-    const gint32 * 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, 97, 117, 100, 105, 111, 95, 99, 111, 110, 118, 101, 114, 116,
-        95, 111, 114, 99, 95, 112, 97, 99, 107, 95, 115, 49, 54, 95, 115, 119,
-        97, 112, 11, 2, 2, 12, 4, 4, 16, 4, 20, 4, 20, 2, 125, 32,
-        4, 24, 163, 33, 32, 183, 0, 33, 2, 0,
-      };
-      p = orc_program_new_from_static_bytecode (bc);
-      orc_program_set_backup_function (p,
-          _backup_audio_convert_orc_pack_s16_swap);
-#else
-      p = orc_program_new ();
-      orc_program_set_name (p, "audio_convert_orc_pack_s16_swap");
-      orc_program_set_backup_function (p,
-          _backup_audio_convert_orc_pack_s16_swap);
-      orc_program_add_destination (p, 2, "d1");
-      orc_program_add_source (p, 4, "s1");
-      orc_program_add_parameter (p, 4, "p1");
-      orc_program_add_temporary (p, 4, "t1");
-      orc_program_add_temporary (p, 2, "t2");
-
-      orc_program_append_2 (p, "shrsl", 0, ORC_VAR_T1, ORC_VAR_S1, ORC_VAR_P1,
-          ORC_VAR_D1);
-      orc_program_append_2 (p, "convlw", 0, ORC_VAR_T2, ORC_VAR_T1, ORC_VAR_D1,
-          ORC_VAR_D1);
-      orc_program_append_2 (p, "swapw", 0, 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_S1] = (void *) s1;
-  ex->params[ORC_VAR_P1] = p1;
-
-  func = c->exec;
-  func (ex);
-}
-#endif
-
-
-/* audio_convert_orc_pack_u32 */
-#ifdef DISABLE_ORC
-void
-audio_convert_orc_pack_u32 (guint8 * ORC_RESTRICT d1,
-    const gint32 * ORC_RESTRICT s1, int p1, int n)
-{
-  int i;
-  orc_union32 *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_union32 var35;
-  orc_union32 var36;
-
-  ptr0 = (orc_union32 *) d1;
-  ptr4 = (orc_union32 *) s1;
-
-  /* 1: loadpl */
-  var34.i = (int) 0x80000000;   /* -2147483648 or 1.061e-314f */
-
-  for (i = 0; i < n; i++) {
-    /* 0: loadl */
-    var33 = ptr4[i];
-    /* 2: xorl */
-    var36.i = var33.i ^ var34.i;
-    /* 3: shrul */
-    var35.i = ((orc_uint32) var36.i) >> p1;
-    /* 4: storel */
-    ptr0[i] = var35;
-  }
-
-}
-
-#else
-static void
-_backup_audio_convert_orc_pack_u32 (OrcExecutor * ORC_RESTRICT ex)
-{
-  int i;
-  int n = ex->n;
-  orc_union32 *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_union32 var35;
-  orc_union32 var36;
-
-  ptr0 = (orc_union32 *) ex->arrays[0];
-  ptr4 = (orc_union32 *) ex->arrays[4];
-
-  /* 1: loadpl */
-  var34.i = (int) 0x80000000;   /* -2147483648 or 1.061e-314f */
-
-  for (i = 0; i < n; i++) {
-    /* 0: loadl */
-    var33 = ptr4[i];
-    /* 2: xorl */
-    var36.i = var33.i ^ var34.i;
-    /* 3: shrul */
-    var35.i = ((orc_uint32) var36.i) >> ex->params[24];
-    /* 4: storel */
-    ptr0[i] = var35;
-  }
-
-}
-
-void
-audio_convert_orc_pack_u32 (guint8 * ORC_RESTRICT d1,
-    const gint32 * 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, 26, 97, 117, 100, 105, 111, 95, 99, 111, 110, 118, 101, 114, 116,
-        95, 111, 114, 99, 95, 112, 97, 99, 107, 95, 117, 51, 50, 11, 4, 4,
-        12, 4, 4, 14, 4, 0, 0, 0, 128, 16, 4, 20, 4, 132, 32, 4,
-        16, 126, 0, 32, 24, 2, 0,
-      };
-      p = orc_program_new_from_static_bytecode (bc);
-      orc_program_set_backup_function (p, _backup_audio_convert_orc_pack_u32);
-#else
-      p = orc_program_new ();
-      orc_program_set_name (p, "audio_convert_orc_pack_u32");
-      orc_program_set_backup_function (p, _backup_audio_convert_orc_pack_u32);
-      orc_program_add_destination (p, 4, "d1");
-      orc_program_add_source (p, 4, "s1");
-      orc_program_add_constant (p, 4, 0x80000000, "c1");
-      orc_program_add_parameter (p, 4, "p1");
-      orc_program_add_temporary (p, 4, "t1");
-
-      orc_program_append_2 (p, "xorl", 0, ORC_VAR_T1, ORC_VAR_S1, ORC_VAR_C1,
-          ORC_VAR_D1);
-      orc_program_append_2 (p, "shrul", 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
-
-
-/* audio_convert_orc_pack_s32 */
-#ifdef DISABLE_ORC
-void
-audio_convert_orc_pack_s32 (guint8 * ORC_RESTRICT d1,
-    const gint32 * ORC_RESTRICT s1, int p1, int n)
-{
-  int i;
-  orc_union32 *ORC_RESTRICT ptr0;
-  const orc_union32 *ORC_RESTRICT ptr4;
-  orc_union32 var32;
-  orc_union32 var33;
-
-  ptr0 = (orc_union32 *) d1;
-  ptr4 = (orc_union32 *) s1;
-
-
-  for (i = 0; i < n; i++) {
-    /* 0: loadl */
-    var32 = ptr4[i];
-    /* 1: shrsl */
-    var33.i = var32.i >> p1;
-    /* 2: storel */
-    ptr0[i] = var33;
-  }
-
-}
-
-#else
-static void
-_backup_audio_convert_orc_pack_s32 (OrcExecutor * ORC_RESTRICT ex)
-{
-  int i;
-  int n = ex->n;
-  orc_union32 *ORC_RESTRICT ptr0;
-  const orc_union32 *ORC_RESTRICT ptr4;
-  orc_union32 var32;
-  orc_union32 var33;
-
-  ptr0 = (orc_union32 *) ex->arrays[0];
-  ptr4 = (orc_union32 *) ex->arrays[4];
-
-
-  for (i = 0; i < n; i++) {
-    /* 0: loadl */
-    var32 = ptr4[i];
-    /* 1: shrsl */
-    var33.i = var32.i >> ex->params[24];
-    /* 2: storel */
-    ptr0[i] = var33;
-  }
-
-}
-
-void
-audio_convert_orc_pack_s32 (guint8 * ORC_RESTRICT d1,
-    const gint32 * 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, 26, 97, 117, 100, 105, 111, 95, 99, 111, 110, 118, 101, 114, 116,
-        95, 111, 114, 99, 95, 112, 97, 99, 107, 95, 115, 51, 50, 11, 4, 4,
-        12, 4, 4, 16, 4, 125, 0, 4, 24, 2, 0,
-      };
-      p = orc_program_new_from_static_bytecode (bc);
-      orc_program_set_backup_function (p, _backup_audio_convert_orc_pack_s32);
-#else
-      p = orc_program_new ();
-      orc_program_set_name (p, "audio_convert_orc_pack_s32");
-      orc_program_set_backup_function (p, _backup_audio_convert_orc_pack_s32);
-      orc_program_add_destination (p, 4, "d1");
-      orc_program_add_source (p, 4, "s1");
-      orc_program_add_parameter (p, 4, "p1");
-
-      orc_program_append_2 (p, "shrsl", 0, ORC_VAR_D1, ORC_VAR_S1, 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
-
-
-/* audio_convert_orc_pack_u32_swap */
-#ifdef DISABLE_ORC
-void
-audio_convert_orc_pack_u32_swap (guint8 * ORC_RESTRICT d1,
-    const gint32 * ORC_RESTRICT s1, int p1, int n)
-{
-  int i;
-  orc_union32 *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_union32 var35;
-  orc_union32 var36;
-  orc_union32 var37;
-
-  ptr0 = (orc_union32 *) d1;
-  ptr4 = (orc_union32 *) s1;
-
-  /* 1: loadpl */
-  var34.i = (int) 0x80000000;   /* -2147483648 or 1.061e-314f */
-
-  for (i = 0; i < n; i++) {
-    /* 0: loadl */
-    var33 = ptr4[i];
-    /* 2: xorl */
-    var36.i = var33.i ^ var34.i;
-    /* 3: shrul */
-    var37.i = ((orc_uint32) var36.i) >> p1;
-    /* 4: swapl */
-    var35.i = ORC_SWAP_L (var37.i);
-    /* 5: storel */
-    ptr0[i] = var35;
-  }
-
-}
-
-#else
-static void
-_backup_audio_convert_orc_pack_u32_swap (OrcExecutor * ORC_RESTRICT ex)
-{
-  int i;
-  int n = ex->n;
-  orc_union32 *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_union32 var35;
-  orc_union32 var36;
-  orc_union32 var37;
-
-  ptr0 = (orc_union32 *) ex->arrays[0];
-  ptr4 = (orc_union32 *) ex->arrays[4];
-
-  /* 1: loadpl */
-  var34.i = (int) 0x80000000;   /* -2147483648 or 1.061e-314f */
-
-  for (i = 0; i < n; i++) {
-    /* 0: loadl */
-    var33 = ptr4[i];
-    /* 2: xorl */
-    var36.i = var33.i ^ var34.i;
-    /* 3: shrul */
-    var37.i = ((orc_uint32) var36.i) >> ex->params[24];
-    /* 4: swapl */
-    var35.i = ORC_SWAP_L (var37.i);
-    /* 5: storel */
-    ptr0[i] = var35;
-  }
-
-}
-
-void
-audio_convert_orc_pack_u32_swap (guint8 * ORC_RESTRICT d1,
-    const gint32 * 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, 97, 117, 100, 105, 111, 95, 99, 111, 110, 118, 101, 114, 116,
-        95, 111, 114, 99, 95, 112, 97, 99, 107, 95, 117, 51, 50, 95, 115, 119,
-        97, 112, 11, 4, 4, 12, 4, 4, 14, 4, 0, 0, 0, 128, 16, 4,
-        20, 4, 132, 32, 4, 16, 126, 32, 32, 24, 184, 0, 32, 2, 0,
-      };
-      p = orc_program_new_from_static_bytecode (bc);
-      orc_program_set_backup_function (p,
-          _backup_audio_convert_orc_pack_u32_swap);
-#else
-      p = orc_program_new ();
-      orc_program_set_name (p, "audio_convert_orc_pack_u32_swap");
-      orc_program_set_backup_function (p,
-          _backup_audio_convert_orc_pack_u32_swap);
-      orc_program_add_destination (p, 4, "d1");
-      orc_program_add_source (p, 4, "s1");
-      orc_program_add_constant (p, 4, 0x80000000, "c1");
-      orc_program_add_parameter (p, 4, "p1");
-      orc_program_add_temporary (p, 4, "t1");
-
-      orc_program_append_2 (p, "xorl", 0, ORC_VAR_T1, ORC_VAR_S1, ORC_VAR_C1,
-          ORC_VAR_D1);
-      orc_program_append_2 (p, "shrul", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_P1,
-          ORC_VAR_D1);
-      orc_program_append_2 (p, "swapl", 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->params[ORC_VAR_P1] = p1;
-
-  func = c->exec;
-  func (ex);
-}
-#endif
-
-
-/* audio_convert_orc_pack_s32_swap */
-#ifdef DISABLE_ORC
-void
-audio_convert_orc_pack_s32_swap (guint8 * ORC_RESTRICT d1,
-    const gint32 * ORC_RESTRICT s1, int p1, int n)
-{
-  int i;
-  orc_union32 *ORC_RESTRICT ptr0;
-  const orc_union32 *ORC_RESTRICT ptr4;
-  orc_union32 var33;
-  orc_union32 var34;
-  orc_union32 var35;
-
-  ptr0 = (orc_union32 *) d1;
-  ptr4 = (orc_union32 *) s1;
-
-
-  for (i = 0; i < n; i++) {
-    /* 0: loadl */
-    var33 = ptr4[i];
-    /* 1: shrsl */
-    var35.i = var33.i >> p1;
-    /* 2: swapl */
-    var34.i = ORC_SWAP_L (var35.i);
-    /* 3: storel */
-    ptr0[i] = var34;
-  }
-
-}
-
-#else
-static void
-_backup_audio_convert_orc_pack_s32_swap (OrcExecutor * ORC_RESTRICT ex)
-{
-  int i;
-  int n = ex->n;
-  orc_union32 *ORC_RESTRICT ptr0;
-  const orc_union32 *ORC_RESTRICT ptr4;
-  orc_union32 var33;
-  orc_union32 var34;
-  orc_union32 var35;
-
-  ptr0 = (orc_union32 *) ex->arrays[0];
-  ptr4 = (orc_union32 *) ex->arrays[4];
-
-
-  for (i = 0; i < n; i++) {
-    /* 0: loadl */
-    var33 = ptr4[i];
-    /* 1: shrsl */
-    var35.i = var33.i >> ex->params[24];
-    /* 2: swapl */
-    var34.i = ORC_SWAP_L (var35.i);
-    /* 3: storel */
-    ptr0[i] = var34;
-  }
-
-}
-
-void
-audio_convert_orc_pack_s32_swap (guint8 * ORC_RESTRICT d1,
-    const gint32 * 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, 97, 117, 100, 105, 111, 95, 99, 111, 110, 118, 101, 114, 116,
-        95, 111, 114, 99, 95, 112, 97, 99, 107, 95, 115, 51, 50, 95, 115, 119,
-        97, 112, 11, 4, 4, 12, 4, 4, 16, 4, 20, 4, 125, 32, 4, 24,
-        184, 0, 32, 2, 0,
-      };
-      p = orc_program_new_from_static_bytecode (bc);
-      orc_program_set_backup_function (p,
-          _backup_audio_convert_orc_pack_s32_swap);
-#else
-      p = orc_program_new ();
-      orc_program_set_name (p, "audio_convert_orc_pack_s32_swap");
-      orc_program_set_backup_function (p,
-          _backup_audio_convert_orc_pack_s32_swap);
-      orc_program_add_destination (p, 4, "d1");
-      orc_program_add_source (p, 4, "s1");
-      orc_program_add_parameter (p, 4, "p1");
-      orc_program_add_temporary (p, 4, "t1");
-
-      orc_program_append_2 (p, "shrsl", 0, ORC_VAR_T1, ORC_VAR_S1, ORC_VAR_P1,
-          ORC_VAR_D1);
-      orc_program_append_2 (p, "swapl", 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->params[ORC_VAR_P1] = p1;
-
-  func = c->exec;
-  func (ex);
-}
-#endif
-
-
-/* audio_convert_orc_pack_s32_float */
-#ifdef DISABLE_ORC
-void
-audio_convert_orc_pack_s32_float (gfloat * ORC_RESTRICT d1,
-    const gint32 * ORC_RESTRICT s1, int n)
-{
-  int i;
-  orc_union32 *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_union32 var35;
-  orc_union32 var36;
-
-  ptr0 = (orc_union32 *) d1;
-  ptr4 = (orc_union32 *) s1;
-
-  /* 2: loadpl */
-  var34.i = (int) 0x4f000000;   /* 1325400064 or 6.54835e-315f */
-
-  for (i = 0; i < n; i++) {
-    /* 0: loadl */
-    var33 = ptr4[i];
-    /* 1: convlf */
-    var35.f = var33.i;
-    /* 3: divf */
-    {
-      orc_union32 _src1;
-      orc_union32 _src2;
-      orc_union32 _dest1;
-      _src1.i = ORC_DENORMAL (var35.i);
-      _src2.i = ORC_DENORMAL (var34.i);
-      _dest1.f = _src1.f / _src2.f;
-      var36.i = ORC_DENORMAL (_dest1.i);
-    }
-    /* 4: storel */
-    ptr0[i] = var36;
-  }
-
-}
-
-#else
-static void
-_backup_audio_convert_orc_pack_s32_float (OrcExecutor * ORC_RESTRICT ex)
-{
-  int i;
-  int n = ex->n;
-  orc_union32 *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_union32 var35;
-  orc_union32 var36;
-
-  ptr0 = (orc_union32 *) ex->arrays[0];
-  ptr4 = (orc_union32 *) ex->arrays[4];
-
-  /* 2: loadpl */
-  var34.i = (int) 0x4f000000;   /* 1325400064 or 6.54835e-315f */
-
-  for (i = 0; i < n; i++) {
-    /* 0: loadl */
-    var33 = ptr4[i];
-    /* 1: convlf */
-    var35.f = var33.i;
-    /* 3: divf */
-    {
-      orc_union32 _src1;
-      orc_union32 _src2;
-      orc_union32 _dest1;
-      _src1.i = ORC_DENORMAL (var35.i);
-      _src2.i = ORC_DENORMAL (var34.i);
-      _dest1.f = _src1.f / _src2.f;
-      var36.i = ORC_DENORMAL (_dest1.i);
-    }
-    /* 4: storel */
-    ptr0[i] = var36;
-  }
-
-}
-
-void
-audio_convert_orc_pack_s32_float (gfloat * 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, 97, 117, 100, 105, 111, 95, 99, 111, 110, 118, 101, 114, 116,
-        95, 111, 114, 99, 95, 112, 97, 99, 107, 95, 115, 51, 50, 95, 102, 108,
-        111, 97, 116, 11, 4, 4, 12, 4, 4, 14, 4, 0, 0, 0, 79, 20,
-        4, 211, 32, 4, 203, 32, 32, 16, 128, 0, 32, 2, 0,
-      };
-      p = orc_program_new_from_static_bytecode (bc);
-      orc_program_set_backup_function (p,
-          _backup_audio_convert_orc_pack_s32_float);
-#else
-      p = orc_program_new ();
-      orc_program_set_name (p, "audio_convert_orc_pack_s32_float");
-      orc_program_set_backup_function (p,
-          _backup_audio_convert_orc_pack_s32_float);
-      orc_program_add_destination (p, 4, "d1");
-      orc_program_add_source (p, 4, "s1");
-      orc_program_add_constant (p, 4, 0x4f000000, "c1");
-      orc_program_add_temporary (p, 4, "t1");
-
-      orc_program_append_2 (p, "convlf", 0, ORC_VAR_T1, ORC_VAR_S1, ORC_VAR_D1,
-          ORC_VAR_D1);
-      orc_program_append_2 (p, "divf", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_C1,
-          ORC_VAR_D1);
-      orc_program_append_2 (p, "storel", 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
-
-
-/* audio_convert_orc_pack_s32_float_swap */
-#ifdef DISABLE_ORC
-void
-audio_convert_orc_pack_s32_float_swap (gfloat * ORC_RESTRICT d1,
-    const gint32 * ORC_RESTRICT s1, int n)
-{
-  int i;
-  orc_union32 *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_union32 var35;
-  orc_union32 var36;
-  orc_union32 var37;
-
-  ptr0 = (orc_union32 *) d1;
-  ptr4 = (orc_union32 *) s1;
-
-  /* 2: loadpl */
-  var34.i = (int) 0x4f000000;   /* 1325400064 or 6.54835e-315f */
-
-  for (i = 0; i < n; i++) {
-    /* 0: loadl */
-    var33 = ptr4[i];
-    /* 1: convlf */
-    var36.f = var33.i;
-    /* 3: divf */
-    {
-      orc_union32 _src1;
-      orc_union32 _src2;
-      orc_union32 _dest1;
-      _src1.i = ORC_DENORMAL (var36.i);
-      _src2.i = ORC_DENORMAL (var34.i);
-      _dest1.f = _src1.f / _src2.f;
-      var37.i = ORC_DENORMAL (_dest1.i);
-    }
-    /* 4: swapl */
-    var35.i = ORC_SWAP_L (var37.i);
-    /* 5: storel */
-    ptr0[i] = var35;
-  }
-
-}
-
-#else
-static void
-_backup_audio_convert_orc_pack_s32_float_swap (OrcExecutor * ORC_RESTRICT ex)
-{
-  int i;
-  int n = ex->n;
-  orc_union32 *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_union32 var35;
-  orc_union32 var36;
-  orc_union32 var37;
-
-  ptr0 = (orc_union32 *) ex->arrays[0];
-  ptr4 = (orc_union32 *) ex->arrays[4];
-
-  /* 2: loadpl */
-  var34.i = (int) 0x4f000000;   /* 1325400064 or 6.54835e-315f */
-
-  for (i = 0; i < n; i++) {
-    /* 0: loadl */
-    var33 = ptr4[i];
-    /* 1: convlf */
-    var36.f = var33.i;
-    /* 3: divf */
-    {
-      orc_union32 _src1;
-      orc_union32 _src2;
-      orc_union32 _dest1;
-      _src1.i = ORC_DENORMAL (var36.i);
-      _src2.i = ORC_DENORMAL (var34.i);
-      _dest1.f = _src1.f / _src2.f;
-      var37.i = ORC_DENORMAL (_dest1.i);
-    }
-    /* 4: swapl */
-    var35.i = ORC_SWAP_L (var37.i);
-    /* 5: storel */
-    ptr0[i] = var35;
-  }
-
-}
-
-void
-audio_convert_orc_pack_s32_float_swap (gfloat * 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, 37, 97, 117, 100, 105, 111, 95, 99, 111, 110, 118, 101, 114, 116,
-        95, 111, 114, 99, 95, 112, 97, 99, 107, 95, 115, 51, 50, 95, 102, 108,
-        111, 97, 116, 95, 115, 119, 97, 112, 11, 4, 4, 12, 4, 4, 14, 4,
-        0, 0, 0, 79, 20, 4, 211, 32, 4, 203, 32, 32, 16, 184, 0, 32,
-        2, 0,
-      };
-      p = orc_program_new_from_static_bytecode (bc);
-      orc_program_set_backup_function (p,
-          _backup_audio_convert_orc_pack_s32_float_swap);
-#else
-      p = orc_program_new ();
-      orc_program_set_name (p, "audio_convert_orc_pack_s32_float_swap");
-      orc_program_set_backup_function (p,
-          _backup_audio_convert_orc_pack_s32_float_swap);
-      orc_program_add_destination (p, 4, "d1");
-      orc_program_add_source (p, 4, "s1");
-      orc_program_add_constant (p, 4, 0x4f000000, "c1");
-      orc_program_add_temporary (p, 4, "t1");
-
-      orc_program_append_2 (p, "convlf", 0, ORC_VAR_T1, ORC_VAR_S1, ORC_VAR_D1,
-          ORC_VAR_D1);
-      orc_program_append_2 (p, "divf", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_C1,
-          ORC_VAR_D1);
-      orc_program_append_2 (p, "swapl", 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
-
-
-/* audio_convert_orc_pack_s32_double */
-#ifdef DISABLE_ORC
-void
-audio_convert_orc_pack_s32_double (gdouble * ORC_RESTRICT d1,
-    const gint32 * ORC_RESTRICT s1, int n)
-{
-  int i;
-  orc_union64 *ORC_RESTRICT ptr0;
-  const orc_union32 *ORC_RESTRICT ptr4;
-  orc_union32 var33;
-#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
-  volatile orc_union64 var34;
-#else
-  orc_union64 var34;
-#endif
-  orc_union64 var35;
-  orc_union64 var36;
-
-  ptr0 = (orc_union64 *) d1;
-  ptr4 = (orc_union32 *) s1;
-
-  /* 2: loadpq */
-  var34.i = ORC_UINT64_C (0x41dfffffffc00000);  /* 2.14748e+09f */
-
-  for (i = 0; i < n; i++) {
-    /* 0: loadl */
-    var33 = ptr4[i];
-    /* 1: convld */
-    var35.f = var33.i;
-    /* 3: divd */
-    {
-      orc_union64 _src1;
-      orc_union64 _src2;
-      orc_union64 _dest1;
-      _src1.i = ORC_DENORMAL_DOUBLE (var35.i);
-      _src2.i = ORC_DENORMAL_DOUBLE (var34.i);
-      _dest1.f = _src1.f / _src2.f;
-      var36.i = ORC_DENORMAL_DOUBLE (_dest1.i);
-    }
-    /* 4: storeq */
-    ptr0[i] = var36;
-  }
-
-}
-
-#else
-static void
-_backup_audio_convert_orc_pack_s32_double (OrcExecutor * ORC_RESTRICT ex)
-{
-  int i;
-  int n = ex->n;
-  orc_union64 *ORC_RESTRICT ptr0;
-  const orc_union32 *ORC_RESTRICT ptr4;
-  orc_union32 var33;
-#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
-  volatile orc_union64 var34;
-#else
-  orc_union64 var34;
-#endif
-  orc_union64 var35;
-  orc_union64 var36;
-
-  ptr0 = (orc_union64 *) ex->arrays[0];
-  ptr4 = (orc_union32 *) ex->arrays[4];
-
-  /* 2: loadpq */
-  var34.i = ORC_UINT64_C (0x41dfffffffc00000);  /* 2.14748e+09f */
-
-  for (i = 0; i < n; i++) {
-    /* 0: loadl */
-    var33 = ptr4[i];
-    /* 1: convld */
-    var35.f = var33.i;
-    /* 3: divd */
-    {
-      orc_union64 _src1;
-      orc_union64 _src2;
-      orc_union64 _dest1;
-      _src1.i = ORC_DENORMAL_DOUBLE (var35.i);
-      _src2.i = ORC_DENORMAL_DOUBLE (var34.i);
-      _dest1.f = _src1.f / _src2.f;
-      var36.i = ORC_DENORMAL_DOUBLE (_dest1.i);
-    }
-    /* 4: storeq */
-    ptr0[i] = var36;
-  }
-
-}
-
-void
-audio_convert_orc_pack_s32_double (gdouble * 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, 33, 97, 117, 100, 105, 111, 95, 99, 111, 110, 118, 101, 114, 116,
-        95, 111, 114, 99, 95, 112, 97, 99, 107, 95, 115, 51, 50, 95, 100, 111,
-        117, 98, 108, 101, 11, 8, 8, 12, 4, 4, 15, 8, 0, 0, 192, 255,
-        255, 255, 223, 65, 20, 8, 223, 32, 4, 215, 32, 32, 16, 135, 0, 32,
-        2, 0,
-      };
-      p = orc_program_new_from_static_bytecode (bc);
-      orc_program_set_backup_function (p,
-          _backup_audio_convert_orc_pack_s32_double);
-#else
-      p = orc_program_new ();
-      orc_program_set_name (p, "audio_convert_orc_pack_s32_double");
-      orc_program_set_backup_function (p,
-          _backup_audio_convert_orc_pack_s32_double);
-      orc_program_add_destination (p, 8, "d1");
-      orc_program_add_source (p, 4, "s1");
-      orc_program_add_constant_int64 (p, 8, 0x41dfffffffc00000ULL, "c1");
-      orc_program_add_temporary (p, 8, "t1");
-
-      orc_program_append_2 (p, "convld", 0, ORC_VAR_T1, ORC_VAR_S1, ORC_VAR_D1,
-          ORC_VAR_D1);
-      orc_program_append_2 (p, "divd", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_C1,
-          ORC_VAR_D1);
-      orc_program_append_2 (p, "storeq", 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
-
-
-/* audio_convert_orc_pack_s32_double_swap */
-#ifdef DISABLE_ORC
-void
-audio_convert_orc_pack_s32_double_swap (gdouble * ORC_RESTRICT d1,
-    const gint32 * ORC_RESTRICT s1, int n)
-{
-  int i;
-  orc_union64 *ORC_RESTRICT ptr0;
-  const orc_union32 *ORC_RESTRICT ptr4;
-  orc_union32 var33;
-#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
-  volatile orc_union64 var34;
-#else
-  orc_union64 var34;
-#endif
-  orc_union64 var35;
-  orc_union64 var36;
-  orc_union64 var37;
-
-  ptr0 = (orc_union64 *) d1;
-  ptr4 = (orc_union32 *) s1;
-
-  /* 2: loadpq */
-  var34.i = ORC_UINT64_C (0x41dfffffffc00000);  /* 2.14748e+09f */
-
-  for (i = 0; i < n; i++) {
-    /* 0: loadl */
-    var33 = ptr4[i];
-    /* 1: convld */
-    var36.f = var33.i;
-    /* 3: divd */
-    {
-      orc_union64 _src1;
-      orc_union64 _src2;
-      orc_union64 _dest1;
-      _src1.i = ORC_DENORMAL_DOUBLE (var36.i);
-      _src2.i = ORC_DENORMAL_DOUBLE (var34.i);
-      _dest1.f = _src1.f / _src2.f;
-      var37.i = ORC_DENORMAL_DOUBLE (_dest1.i);
-    }
-    /* 4: swapq */
-    var35.i = ORC_SWAP_Q (var37.i);
-    /* 5: storeq */
-    ptr0[i] = var35;
-  }
-
-}
-
-#else
-static void
-_backup_audio_convert_orc_pack_s32_double_swap (OrcExecutor * ORC_RESTRICT ex)
-{
-  int i;
-  int n = ex->n;
-  orc_union64 *ORC_RESTRICT ptr0;
-  const orc_union32 *ORC_RESTRICT ptr4;
-  orc_union32 var33;
-#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
-  volatile orc_union64 var34;
-#else
-  orc_union64 var34;
-#endif
-  orc_union64 var35;
-  orc_union64 var36;
-  orc_union64 var37;
-
-  ptr0 = (orc_union64 *) ex->arrays[0];
-  ptr4 = (orc_union32 *) ex->arrays[4];
-
-  /* 2: loadpq */
-  var34.i = ORC_UINT64_C (0x41dfffffffc00000);  /* 2.14748e+09f */
-
-  for (i = 0; i < n; i++) {
-    /* 0: loadl */
-    var33 = ptr4[i];
-    /* 1: convld */
-    var36.f = var33.i;
-    /* 3: divd */
-    {
-      orc_union64 _src1;
-      orc_union64 _src2;
-      orc_union64 _dest1;
-      _src1.i = ORC_DENORMAL_DOUBLE (var36.i);
-      _src2.i = ORC_DENORMAL_DOUBLE (var34.i);
-      _dest1.f = _src1.f / _src2.f;
-      var37.i = ORC_DENORMAL_DOUBLE (_dest1.i);
-    }
-    /* 4: swapq */
-    var35.i = ORC_SWAP_Q (var37.i);
-    /* 5: storeq */
-    ptr0[i] = var35;
-  }
-
-}
-
-void
-audio_convert_orc_pack_s32_double_swap (gdouble * 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, 38, 97, 117, 100, 105, 111, 95, 99, 111, 110, 118, 101, 114, 116,
-        95, 111, 114, 99, 95, 112, 97, 99, 107, 95, 115, 51, 50, 95, 100, 111,
-        117, 98, 108, 101, 95, 115, 119, 97, 112, 11, 8, 8, 12, 4, 4, 15,
-        8, 0, 0, 192, 255, 255, 255, 223, 65, 20, 8, 223, 32, 4, 215, 32,
-        32, 16, 186, 0, 32, 2, 0,
-      };
-      p = orc_program_new_from_static_bytecode (bc);
-      orc_program_set_backup_function (p,
-          _backup_audio_convert_orc_pack_s32_double_swap);
-#else
-      p = orc_program_new ();
-      orc_program_set_name (p, "audio_convert_orc_pack_s32_double_swap");
-      orc_program_set_backup_function (p,
-          _backup_audio_convert_orc_pack_s32_double_swap);
-      orc_program_add_destination (p, 8, "d1");
-      orc_program_add_source (p, 4, "s1");
-      orc_program_add_constant_int64 (p, 8, 0x41dfffffffc00000ULL, "c1");
-      orc_program_add_temporary (p, 8, "t1");
-
-      orc_program_append_2 (p, "convld", 0, ORC_VAR_T1, ORC_VAR_S1, ORC_VAR_D1,
-          ORC_VAR_D1);
-      orc_program_append_2 (p, "divd", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_C1,
-          ORC_VAR_D1);
-      orc_program_append_2 (p, "swapq", 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
-
-
-/* audio_convert_orc_pack_double_float */
-#ifdef DISABLE_ORC
-void
-audio_convert_orc_pack_double_float (gfloat * ORC_RESTRICT d1,
-    const gdouble * ORC_RESTRICT s1, int n)
-{
-  int i;
-  orc_union32 *ORC_RESTRICT ptr0;
-  const orc_union64 *ORC_RESTRICT ptr4;
-  orc_union64 var32;
-  orc_union32 var33;
-
-  ptr0 = (orc_union32 *) d1;
-  ptr4 = (orc_union64 *) s1;
-
-
-  for (i = 0; i < n; i++) {
-    /* 0: loadq */
-    var32 = ptr4[i];
-    /* 1: convdf */
-    {
-      orc_union64 _src1;
-      orc_union32 _dest;
-      _src1.i = ORC_DENORMAL_DOUBLE (var32.i);
-      _dest.f = _src1.f;
-      var33.i = ORC_DENORMAL (_dest.i);
-    }
-    /* 2: storel */
-    ptr0[i] = var33;
-  }
-
-}
-
-#else
-static void
-_backup_audio_convert_orc_pack_double_float (OrcExecutor * ORC_RESTRICT ex)
-{
-  int i;
-  int n = ex->n;
-  orc_union32 *ORC_RESTRICT ptr0;
-  const orc_union64 *ORC_RESTRICT ptr4;
-  orc_union64 var32;
-  orc_union32 var33;
-
-  ptr0 = (orc_union32 *) ex->arrays[0];
-  ptr4 = (orc_union64 *) ex->arrays[4];
-
-
-  for (i = 0; i < n; i++) {
-    /* 0: loadq */
-    var32 = ptr4[i];
-    /* 1: convdf */
-    {
-      orc_union64 _src1;
-      orc_union32 _dest;
-      _src1.i = ORC_DENORMAL_DOUBLE (var32.i);
-      _dest.f = _src1.f;
-      var33.i = ORC_DENORMAL (_dest.i);
-    }
-    /* 2: storel */
-    ptr0[i] = var33;
-  }
-
-}
-
-void
-audio_convert_orc_pack_double_float (gfloat * ORC_RESTRICT d1,
-    const gdouble * 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, 35, 97, 117, 100, 105, 111, 95, 99, 111, 110, 118, 101, 114, 116,
-        95, 111, 114, 99, 95, 112, 97, 99, 107, 95, 100, 111, 117, 98, 108, 101,
-        95, 102, 108, 111, 97, 116, 11, 4, 4, 12, 8, 8, 225, 0, 4, 2,
-        0,
-      };
-      p = orc_program_new_from_static_bytecode (bc);
-      orc_program_set_backup_function (p,
-          _backup_audio_convert_orc_pack_double_float);
-#else
-      p = orc_program_new ();
-      orc_program_set_name (p, "audio_convert_orc_pack_double_float");
-      orc_program_set_backup_function (p,
-          _backup_audio_convert_orc_pack_double_float);
-      orc_program_add_destination (p, 4, "d1");
-      orc_program_add_source (p, 8, "s1");
-
-      orc_program_append_2 (p, "convdf", 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
-
-
-/* audio_convert_orc_pack_double_float_swap */
-#ifdef DISABLE_ORC
-void
-audio_convert_orc_pack_double_float_swap (gfloat * ORC_RESTRICT d1,
-    const gdouble * ORC_RESTRICT s1, int n)
-{
-  int i;
-  orc_union32 *ORC_RESTRICT ptr0;
-  const orc_union64 *ORC_RESTRICT ptr4;
-  orc_union64 var33;
-  orc_union32 var34;
-  orc_union32 var35;
-
-  ptr0 = (orc_union32 *) d1;
-  ptr4 = (orc_union64 *) s1;
-
-
-  for (i = 0; i < n; i++) {
-    /* 0: loadq */
-    var33 = ptr4[i];
-    /* 1: convdf */
-    {
-      orc_union64 _src1;
-      orc_union32 _dest;
-      _src1.i = ORC_DENORMAL_DOUBLE (var33.i);
-      _dest.f = _src1.f;
-      var35.i = ORC_DENORMAL (_dest.i);
-    }
-    /* 2: swapl */
-    var34.i = ORC_SWAP_L (var35.i);
-    /* 3: storel */
-    ptr0[i] = var34;
-  }
-
-}
-
-#else
-static void
-_backup_audio_convert_orc_pack_double_float_swap (OrcExecutor * ORC_RESTRICT ex)
-{
-  int i;
-  int n = ex->n;
-  orc_union32 *ORC_RESTRICT ptr0;
-  const orc_union64 *ORC_RESTRICT ptr4;
-  orc_union64 var33;
-  orc_union32 var34;
-  orc_union32 var35;
-
-  ptr0 = (orc_union32 *) ex->arrays[0];
-  ptr4 = (orc_union64 *) ex->arrays[4];
-
-
-  for (i = 0; i < n; i++) {
-    /* 0: loadq */
-    var33 = ptr4[i];
-    /* 1: convdf */
-    {
-      orc_union64 _src1;
-      orc_union32 _dest;
-      _src1.i = ORC_DENORMAL_DOUBLE (var33.i);
-      _dest.f = _src1.f;
-      var35.i = ORC_DENORMAL (_dest.i);
-    }
-    /* 2: swapl */
-    var34.i = ORC_SWAP_L (var35.i);
-    /* 3: storel */
-    ptr0[i] = var34;
-  }
-
-}
-
-void
-audio_convert_orc_pack_double_float_swap (gfloat * ORC_RESTRICT d1,
-    const gdouble * 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, 40, 97, 117, 100, 105, 111, 95, 99, 111, 110, 118, 101, 114, 116,
-        95, 111, 114, 99, 95, 112, 97, 99, 107, 95, 100, 111, 117, 98, 108, 101,
-        95, 102, 108, 111, 97, 116, 95, 115, 119, 97, 112, 11, 4, 4, 12, 8,
-        8, 20, 4, 225, 32, 4, 184, 0, 32, 2, 0,
-      };
-      p = orc_program_new_from_static_bytecode (bc);
-      orc_program_set_backup_function (p,
-          _backup_audio_convert_orc_pack_double_float_swap);
-#else
-      p = orc_program_new ();
-      orc_program_set_name (p, "audio_convert_orc_pack_double_float_swap");
-      orc_program_set_backup_function (p,
-          _backup_audio_convert_orc_pack_double_float_swap);
-      orc_program_add_destination (p, 4, "d1");
-      orc_program_add_source (p, 8, "s1");
-      orc_program_add_temporary (p, 4, "t1");
-
-      orc_program_append_2 (p, "convdf", 0, ORC_VAR_T1, ORC_VAR_S1, ORC_VAR_D1,
-          ORC_VAR_D1);
-      orc_program_append_2 (p, "swapl", 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
-
-
-/* audio_convert_orc_pack_double_u8 */
-#ifdef DISABLE_ORC
-void
-audio_convert_orc_pack_double_u8 (guint8 * ORC_RESTRICT d1,
-    const gdouble * ORC_RESTRICT s1, int p1, int n)
-{
-  int i;
-  orc_int8 *ORC_RESTRICT ptr0;
-  const orc_union64 *ORC_RESTRICT ptr4;
-  orc_union64 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_union32 var39;
-  orc_union16 var40;
-
-  ptr0 = (orc_int8 *) d1;
-  ptr4 = (orc_union64 *) s1;
-
-  /* 2: loadpl */
-  var35.i = (int) 0x80000000;   /* -2147483648 or 1.061e-314f */
-
-  for (i = 0; i < n; i++) {
-    /* 0: loadq */
-    var34 = ptr4[i];
-    /* 1: convdl */
-    {
-      int tmp;
-      tmp = var34.f;
-      if (tmp == 0x80000000 && !(var34.i & ORC_UINT64_C (0x8000000000000000)))
-        tmp = 0x7fffffff;
-      var37.i = tmp;
-    }
-    /* 3: xorl */
-    var38.i = var37.i ^ var35.i;
-    /* 4: shrul */
-    var39.i = ((orc_uint32) var38.i) >> p1;
-    /* 5: convlw */
-    var40.i = var39.i;
-    /* 6: convwb */
-    var36 = var40.i;
-    /* 7: storeb */
-    ptr0[i] = var36;
-  }
-
-}
-
-#else
-static void
-_backup_audio_convert_orc_pack_double_u8 (OrcExecutor * ORC_RESTRICT ex)
-{
-  int i;
-  int n = ex->n;
-  orc_int8 *ORC_RESTRICT ptr0;
-  const orc_union64 *ORC_RESTRICT ptr4;
-  orc_union64 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_union32 var39;
-  orc_union16 var40;
-
-  ptr0 = (orc_int8 *) ex->arrays[0];
-  ptr4 = (orc_union64 *) ex->arrays[4];
-
-  /* 2: loadpl */
-  var35.i = (int) 0x80000000;   /* -2147483648 or 1.061e-314f */
-
-  for (i = 0; i < n; i++) {
-    /* 0: loadq */
-    var34 = ptr4[i];
-    /* 1: convdl */
-    {
-      int tmp;
-      tmp = var34.f;
-      if (tmp == 0x80000000 && !(var34.i & ORC_UINT64_C (0x8000000000000000)))
-        tmp = 0x7fffffff;
-      var37.i = tmp;
-    }
-    /* 3: xorl */
-    var38.i = var37.i ^ var35.i;
-    /* 4: shrul */
-    var39.i = ((orc_uint32) var38.i) >> ex->params[24];
-    /* 5: convlw */
-    var40.i = var39.i;
-    /* 6: convwb */
-    var36 = var40.i;
-    /* 7: storeb */
-    ptr0[i] = var36;
-  }
-
-}
-
-void
-audio_convert_orc_pack_double_u8 (guint8 * ORC_RESTRICT d1,
-    const gdouble * 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, 97, 117, 100, 105, 111, 95, 99, 111, 110, 118, 101, 114, 116,
-        95, 111, 114, 99, 95, 112, 97, 99, 107, 95, 100, 111, 117, 98, 108, 101,
-        95, 117, 56, 11, 1, 1, 12, 8, 8, 14, 4, 0, 0, 0, 128, 16,
-        4, 20, 4, 20, 2, 222, 32, 4, 132, 32, 32, 16, 126, 32, 32, 24,
-        163, 33, 32, 157, 0, 33, 2, 0,
-      };
-      p = orc_program_new_from_static_bytecode (bc);
-      orc_program_set_backup_function (p,
-          _backup_audio_convert_orc_pack_double_u8);
-#else
-      p = orc_program_new ();
-      orc_program_set_name (p, "audio_convert_orc_pack_double_u8");
-      orc_program_set_backup_function (p,
-          _backup_audio_convert_orc_pack_double_u8);
-      orc_program_add_destination (p, 1, "d1");
-      orc_program_add_source (p, 8, "s1");
-      orc_program_add_constant (p, 4, 0x80000000, "c1");
-      orc_program_add_parameter (p, 4, "p1");
-      orc_program_add_temporary (p, 4, "t1");
-      orc_program_add_temporary (p, 2, "t2");
-
-      orc_program_append_2 (p, "convdl", 0, ORC_VAR_T1, ORC_VAR_S1, ORC_VAR_D1,
-          ORC_VAR_D1);
-      orc_program_append_2 (p, "xorl", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_C1,
-          ORC_VAR_D1);
-      orc_program_append_2 (p, "shrul", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_P1,
-          ORC_VAR_D1);
-      orc_program_append_2 (p, "convlw", 0, ORC_VAR_T2, ORC_VAR_T1, ORC_VAR_D1,
-          ORC_VAR_D1);
-      orc_program_append_2 (p, "convwb", 0, 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_S1] = (void *) s1;
-  ex->params[ORC_VAR_P1] = p1;
-
-  func = c->exec;
-  func (ex);
-}
-#endif
-
-
-/* audio_convert_orc_pack_double_s8 */
-#ifdef DISABLE_ORC
-void
-audio_convert_orc_pack_double_s8 (guint8 * ORC_RESTRICT d1,
-    const gdouble * ORC_RESTRICT s1, int p1, int n)
-{
-  int i;
-  orc_int8 *ORC_RESTRICT ptr0;
-  const orc_union64 *ORC_RESTRICT ptr4;
-  orc_union64 var34;
-  orc_int8 var35;
-  orc_union32 var36;
-  orc_union32 var37;
-  orc_union16 var38;
-
-  ptr0 = (orc_int8 *) d1;
-  ptr4 = (orc_union64 *) s1;
-
-
-  for (i = 0; i < n; i++) {
-    /* 0: loadq */
-    var34 = ptr4[i];
-    /* 1: convdl */
-    {
-      int tmp;
-      tmp = var34.f;
-      if (tmp == 0x80000000 && !(var34.i & ORC_UINT64_C (0x8000000000000000)))
-        tmp = 0x7fffffff;
-      var36.i = tmp;
-    }
-    /* 2: shrsl */
-    var37.i = var36.i >> p1;
-    /* 3: convlw */
-    var38.i = var37.i;
-    /* 4: convwb */
-    var35 = var38.i;
-    /* 5: storeb */
-    ptr0[i] = var35;
-  }
-
-}
-
-#else
-static void
-_backup_audio_convert_orc_pack_double_s8 (OrcExecutor * ORC_RESTRICT ex)
-{
-  int i;
-  int n = ex->n;
-  orc_int8 *ORC_RESTRICT ptr0;
-  const orc_union64 *ORC_RESTRICT ptr4;
-  orc_union64 var34;
-  orc_int8 var35;
-  orc_union32 var36;
-  orc_union32 var37;
-  orc_union16 var38;
-
-  ptr0 = (orc_int8 *) ex->arrays[0];
-  ptr4 = (orc_union64 *) ex->arrays[4];
-
-
-  for (i = 0; i < n; i++) {
-    /* 0: loadq */
-    var34 = ptr4[i];
-    /* 1: convdl */
-    {
-      int tmp;
-      tmp = var34.f;
-      if (tmp == 0x80000000 && !(var34.i & ORC_UINT64_C (0x8000000000000000)))
-        tmp = 0x7fffffff;
-      var36.i = tmp;
-    }
-    /* 2: shrsl */
-    var37.i = var36.i >> ex->params[24];
-    /* 3: convlw */
-    var38.i = var37.i;
-    /* 4: convwb */
-    var35 = var38.i;
-    /* 5: storeb */
-    ptr0[i] = var35;
-  }
-
-}
-
-void
-audio_convert_orc_pack_double_s8 (guint8 * ORC_RESTRICT d1,
-    const gdouble * 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, 97, 117, 100, 105, 111, 95, 99, 111, 110, 118, 101, 114, 116,
-        95, 111, 114, 99, 95, 112, 97, 99, 107, 95, 100, 111, 117, 98, 108, 101,
-        95, 115, 56, 11, 1, 1, 12, 8, 8, 16, 4, 20, 4, 20, 2, 222,
-        32, 4, 125, 32, 32, 24, 163, 33, 32, 157, 0, 33, 2, 0,
-      };
-      p = orc_program_new_from_static_bytecode (bc);
-      orc_program_set_backup_function (p,
-          _backup_audio_convert_orc_pack_double_s8);
-#else
-      p = orc_program_new ();
-      orc_program_set_name (p, "audio_convert_orc_pack_double_s8");
-      orc_program_set_backup_function (p,
-          _backup_audio_convert_orc_pack_double_s8);
-      orc_program_add_destination (p, 1, "d1");
-      orc_program_add_source (p, 8, "s1");
-      orc_program_add_parameter (p, 4, "p1");
-      orc_program_add_temporary (p, 4, "t1");
-      orc_program_add_temporary (p, 2, "t2");
-
-      orc_program_append_2 (p, "convdl", 0, ORC_VAR_T1, ORC_VAR_S1, ORC_VAR_D1,
-          ORC_VAR_D1);
-      orc_program_append_2 (p, "shrsl", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_P1,
-          ORC_VAR_D1);
-      orc_program_append_2 (p, "convlw", 0, ORC_VAR_T2, ORC_VAR_T1, ORC_VAR_D1,
-          ORC_VAR_D1);
-      orc_program_append_2 (p, "convwb", 0, 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_S1] = (void *) s1;
-  ex->params[ORC_VAR_P1] = p1;
-
-  func = c->exec;
-  func (ex);
-}
-#endif
-
-
-/* audio_convert_orc_pack_double_u16 */
-#ifdef DISABLE_ORC
-void
-audio_convert_orc_pack_double_u16 (guint8 * ORC_RESTRICT d1,
-    const gdouble * ORC_RESTRICT s1, int p1, int n)
-{
-  int i;
-  orc_union16 *ORC_RESTRICT ptr0;
-  const orc_union64 *ORC_RESTRICT ptr4;
-  orc_union64 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;
-  orc_union32 var38;
-
-  ptr0 = (orc_union16 *) d1;
-  ptr4 = (orc_union64 *) s1;
-
-  /* 2: loadpl */
-  var34.i = (int) 0x80000000;   /* -2147483648 or 1.061e-314f */
-
-  for (i = 0; i < n; i++) {
-    /* 0: loadq */
-    var33 = ptr4[i];
-    /* 1: convdl */
-    {
-      int tmp;
-      tmp = var33.f;
-      if (tmp == 0x80000000 && !(var33.i & ORC_UINT64_C (0x8000000000000000)))
-        tmp = 0x7fffffff;
-      var36.i = tmp;
-    }
-    /* 3: xorl */
-    var37.i = var36.i ^ var34.i;
-    /* 4: shrul */
-    var38.i = ((orc_uint32) var37.i) >> p1;
-    /* 5: convlw */
-    var35.i = var38.i;
-    /* 6: storew */
-    ptr0[i] = var35;
-  }
-
-}
-
-#else
-static void
-_backup_audio_convert_orc_pack_double_u16 (OrcExecutor * ORC_RESTRICT ex)
-{
-  int i;
-  int n = ex->n;
-  orc_union16 *ORC_RESTRICT ptr0;
-  const orc_union64 *ORC_RESTRICT ptr4;
-  orc_union64 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;
-  orc_union32 var38;
-
-  ptr0 = (orc_union16 *) ex->arrays[0];
-  ptr4 = (orc_union64 *) ex->arrays[4];
-
-  /* 2: loadpl */
-  var34.i = (int) 0x80000000;   /* -2147483648 or 1.061e-314f */
-
-  for (i = 0; i < n; i++) {
-    /* 0: loadq */
-    var33 = ptr4[i];
-    /* 1: convdl */
-    {
-      int tmp;
-      tmp = var33.f;
-      if (tmp == 0x80000000 && !(var33.i & ORC_UINT64_C (0x8000000000000000)))
-        tmp = 0x7fffffff;
-      var36.i = tmp;
-    }
-    /* 3: xorl */
-    var37.i = var36.i ^ var34.i;
-    /* 4: shrul */
-    var38.i = ((orc_uint32) var37.i) >> ex->params[24];
-    /* 5: convlw */
-    var35.i = var38.i;
-    /* 6: storew */
-    ptr0[i] = var35;
-  }
-
-}
-
-void
-audio_convert_orc_pack_double_u16 (guint8 * ORC_RESTRICT d1,
-    const gdouble * 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, 33, 97, 117, 100, 105, 111, 95, 99, 111, 110, 118, 101, 114, 116,
-        95, 111, 114, 99, 95, 112, 97, 99, 107, 95, 100, 111, 117, 98, 108, 101,
-        95, 117, 49, 54, 11, 2, 2, 12, 8, 8, 14, 4, 0, 0, 0, 128,
-        16, 4, 20, 4, 222, 32, 4, 132, 32, 32, 16, 126, 32, 32, 24, 163,
-        0, 32, 2, 0,
-      };
-      p = orc_program_new_from_static_bytecode (bc);
-      orc_program_set_backup_function (p,
-          _backup_audio_convert_orc_pack_double_u16);
-#else
-      p = orc_program_new ();
-      orc_program_set_name (p, "audio_convert_orc_pack_double_u16");
-      orc_program_set_backup_function (p,
-          _backup_audio_convert_orc_pack_double_u16);
-      orc_program_add_destination (p, 2, "d1");
-      orc_program_add_source (p, 8, "s1");
-      orc_program_add_constant (p, 4, 0x80000000, "c1");
-      orc_program_add_parameter (p, 4, "p1");
-      orc_program_add_temporary (p, 4, "t1");
-
-      orc_program_append_2 (p, "convdl", 0, ORC_VAR_T1, ORC_VAR_S1, ORC_VAR_D1,
-          ORC_VAR_D1);
-      orc_program_append_2 (p, "xorl", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_C1,
-          ORC_VAR_D1);
-      orc_program_append_2 (p, "shrul", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_P1,
-          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->params[ORC_VAR_P1] = p1;
-
-  func = c->exec;
-  func (ex);
-}
-#endif
-
-
-/* audio_convert_orc_pack_double_s16 */
-#ifdef DISABLE_ORC
-void
-audio_convert_orc_pack_double_s16 (guint8 * ORC_RESTRICT d1,
-    const gdouble * ORC_RESTRICT s1, int p1, int n)
-{
-  int i;
-  orc_union16 *ORC_RESTRICT ptr0;
-  const orc_union64 *ORC_RESTRICT ptr4;
-  orc_union64 var33;
-  orc_union16 var34;
-  orc_union32 var35;
-  orc_union32 var36;
-
-  ptr0 = (orc_union16 *) d1;
-  ptr4 = (orc_union64 *) s1;
-
-
-  for (i = 0; i < n; i++) {
-    /* 0: loadq */
-    var33 = ptr4[i];
-    /* 1: convdl */
-    {
-      int tmp;
-      tmp = var33.f;
-      if (tmp == 0x80000000 && !(var33.i & ORC_UINT64_C (0x8000000000000000)))
-        tmp = 0x7fffffff;
-      var35.i = tmp;
-    }
-    /* 2: shrsl */
-    var36.i = var35.i >> p1;
-    /* 3: convlw */
-    var34.i = var36.i;
-    /* 4: storew */
-    ptr0[i] = var34;
-  }
-
-}
-
-#else
-static void
-_backup_audio_convert_orc_pack_double_s16 (OrcExecutor * ORC_RESTRICT ex)
-{
-  int i;
-  int n = ex->n;
-  orc_union16 *ORC_RESTRICT ptr0;
-  const orc_union64 *ORC_RESTRICT ptr4;
-  orc_union64 var33;
-  orc_union16 var34;
-  orc_union32 var35;
-  orc_union32 var36;
-
-  ptr0 = (orc_union16 *) ex->arrays[0];
-  ptr4 = (orc_union64 *) ex->arrays[4];
-
-
-  for (i = 0; i < n; i++) {
-    /* 0: loadq */
-    var33 = ptr4[i];
-    /* 1: convdl */
-    {
-      int tmp;
-      tmp = var33.f;
-      if (tmp == 0x80000000 && !(var33.i & ORC_UINT64_C (0x8000000000000000)))
-        tmp = 0x7fffffff;
-      var35.i = tmp;
-    }
-    /* 2: shrsl */
-    var36.i = var35.i >> ex->params[24];
-    /* 3: convlw */
-    var34.i = var36.i;
-    /* 4: storew */
-    ptr0[i] = var34;
-  }
-
-}
-
-void
-audio_convert_orc_pack_double_s16 (guint8 * ORC_RESTRICT d1,
-    const gdouble * 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, 33, 97, 117, 100, 105, 111, 95, 99, 111, 110, 118, 101, 114, 116,
-        95, 111, 114, 99, 95, 112, 97, 99, 107, 95, 100, 111, 117, 98, 108, 101,
-        95, 115, 49, 54, 11, 2, 2, 12, 8, 8, 16, 4, 20, 4, 222, 32,
-        4, 125, 32, 32, 24, 163, 0, 32, 2, 0,
-      };
-      p = orc_program_new_from_static_bytecode (bc);
-      orc_program_set_backup_function (p,
-          _backup_audio_convert_orc_pack_double_s16);
-#else
-      p = orc_program_new ();
-      orc_program_set_name (p, "audio_convert_orc_pack_double_s16");
-      orc_program_set_backup_function (p,
-          _backup_audio_convert_orc_pack_double_s16);
-      orc_program_add_destination (p, 2, "d1");
-      orc_program_add_source (p, 8, "s1");
-      orc_program_add_parameter (p, 4, "p1");
-      orc_program_add_temporary (p, 4, "t1");
-
-      orc_program_append_2 (p, "convdl", 0, ORC_VAR_T1, ORC_VAR_S1, ORC_VAR_D1,
-          ORC_VAR_D1);
-      orc_program_append_2 (p, "shrsl", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_P1,
-          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->params[ORC_VAR_P1] = p1;
-
-  func = c->exec;
-  func (ex);
-}
-#endif
-
-
-/* audio_convert_orc_pack_double_u16_swap */
-#ifdef DISABLE_ORC
-void
-audio_convert_orc_pack_double_u16_swap (guint8 * ORC_RESTRICT d1,
-    const gdouble * ORC_RESTRICT s1, int p1, int n)
-{
-  int i;
-  orc_union16 *ORC_RESTRICT ptr0;
-  const orc_union64 *ORC_RESTRICT ptr4;
-  orc_union64 var34;
-#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
-  volatile orc_union32 var35;
-#else
-  orc_union32 var35;
-#endif
-  orc_union16 var36;
-  orc_union32 var37;
-  orc_union32 var38;
-  orc_union32 var39;
-  orc_union16 var40;
-
-  ptr0 = (orc_union16 *) d1;
-  ptr4 = (orc_union64 *) s1;
-
-  /* 2: loadpl */
-  var35.i = (int) 0x80000000;   /* -2147483648 or 1.061e-314f */
-
-  for (i = 0; i < n; i++) {
-    /* 0: loadq */
-    var34 = ptr4[i];
-    /* 1: convdl */
-    {
-      int tmp;
-      tmp = var34.f;
-      if (tmp == 0x80000000 && !(var34.i & ORC_UINT64_C (0x8000000000000000)))
-        tmp = 0x7fffffff;
-      var37.i = tmp;
-    }
-    /* 3: xorl */
-    var38.i = var37.i ^ var35.i;
-    /* 4: shrul */
-    var39.i = ((orc_uint32) var38.i) >> p1;
-    /* 5: convlw */
-    var40.i = var39.i;
-    /* 6: swapw */
-    var36.i = ORC_SWAP_W (var40.i);
-    /* 7: storew */
-    ptr0[i] = var36;
-  }
-
-}
-
-#else
-static void
-_backup_audio_convert_orc_pack_double_u16_swap (OrcExecutor * ORC_RESTRICT ex)
-{
-  int i;
-  int n = ex->n;
-  orc_union16 *ORC_RESTRICT ptr0;
-  const orc_union64 *ORC_RESTRICT ptr4;
-  orc_union64 var34;
-#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
-  volatile orc_union32 var35;
-#else
-  orc_union32 var35;
-#endif
-  orc_union16 var36;
-  orc_union32 var37;
-  orc_union32 var38;
-  orc_union32 var39;
-  orc_union16 var40;
-
-  ptr0 = (orc_union16 *) ex->arrays[0];
-  ptr4 = (orc_union64 *) ex->arrays[4];
-
-  /* 2: loadpl */
-  var35.i = (int) 0x80000000;   /* -2147483648 or 1.061e-314f */
-
-  for (i = 0; i < n; i++) {
-    /* 0: loadq */
-    var34 = ptr4[i];
-    /* 1: convdl */
-    {
-      int tmp;
-      tmp = var34.f;
-      if (tmp == 0x80000000 && !(var34.i & ORC_UINT64_C (0x8000000000000000)))
-        tmp = 0x7fffffff;
-      var37.i = tmp;
-    }
-    /* 3: xorl */
-    var38.i = var37.i ^ var35.i;
-    /* 4: shrul */
-    var39.i = ((orc_uint32) var38.i) >> ex->params[24];
-    /* 5: convlw */
-    var40.i = var39.i;
-    /* 6: swapw */
-    var36.i = ORC_SWAP_W (var40.i);
-    /* 7: storew */
-    ptr0[i] = var36;
-  }
-
-}
-
-void
-audio_convert_orc_pack_double_u16_swap (guint8 * ORC_RESTRICT d1,
-    const gdouble * 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, 38, 97, 117, 100, 105, 111, 95, 99, 111, 110, 118, 101, 114, 116,
-        95, 111, 114, 99, 95, 112, 97, 99, 107, 95, 100, 111, 117, 98, 108, 101,
-        95, 117, 49, 54, 95, 115, 119, 97, 112, 11, 2, 2, 12, 8, 8, 14,
-        4, 0, 0, 0, 128, 16, 4, 20, 4, 20, 2, 222, 32, 4, 132, 32,
-        32, 16, 126, 32, 32, 24, 163, 33, 32, 183, 0, 33, 2, 0,
-      };
-      p = orc_program_new_from_static_bytecode (bc);
-      orc_program_set_backup_function (p,
-          _backup_audio_convert_orc_pack_double_u16_swap);
-#else
-      p = orc_program_new ();
-      orc_program_set_name (p, "audio_convert_orc_pack_double_u16_swap");
-      orc_program_set_backup_function (p,
-          _backup_audio_convert_orc_pack_double_u16_swap);
-      orc_program_add_destination (p, 2, "d1");
-      orc_program_add_source (p, 8, "s1");
-      orc_program_add_constant (p, 4, 0x80000000, "c1");
-      orc_program_add_parameter (p, 4, "p1");
-      orc_program_add_temporary (p, 4, "t1");
-      orc_program_add_temporary (p, 2, "t2");
-
-      orc_program_append_2 (p, "convdl", 0, ORC_VAR_T1, ORC_VAR_S1, ORC_VAR_D1,
-          ORC_VAR_D1);
-      orc_program_append_2 (p, "xorl", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_C1,
-          ORC_VAR_D1);
-      orc_program_append_2 (p, "shrul", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_P1,
-          ORC_VAR_D1);
-      orc_program_append_2 (p, "convlw", 0, ORC_VAR_T2, ORC_VAR_T1, ORC_VAR_D1,
-          ORC_VAR_D1);
-      orc_program_append_2 (p, "swapw", 0, 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_S1] = (void *) s1;
-  ex->params[ORC_VAR_P1] = p1;
-
-  func = c->exec;
-  func (ex);
-}
-#endif
-
-
-/* audio_convert_orc_pack_double_s16_swap */
-#ifdef DISABLE_ORC
-void
-audio_convert_orc_pack_double_s16_swap (guint8 * ORC_RESTRICT d1,
-    const gdouble * ORC_RESTRICT s1, int p1, int n)
-{
-  int i;
-  orc_union16 *ORC_RESTRICT ptr0;
-  const orc_union64 *ORC_RESTRICT ptr4;
-  orc_union64 var34;
-  orc_union16 var35;
-  orc_union32 var36;
-  orc_union32 var37;
-  orc_union16 var38;
-
-  ptr0 = (orc_union16 *) d1;
-  ptr4 = (orc_union64 *) s1;
-
-
-  for (i = 0; i < n; i++) {
-    /* 0: loadq */
-    var34 = ptr4[i];
-    /* 1: convdl */
-    {
-      int tmp;
-      tmp = var34.f;
-      if (tmp == 0x80000000 && !(var34.i & ORC_UINT64_C (0x8000000000000000)))
-        tmp = 0x7fffffff;
-      var36.i = tmp;
-    }
-    /* 2: shrsl */
-    var37.i = var36.i >> p1;
-    /* 3: convlw */
-    var38.i = var37.i;
-    /* 4: swapw */
-    var35.i = ORC_SWAP_W (var38.i);
-    /* 5: storew */
-    ptr0[i] = var35;
-  }
-
-}
-
-#else
-static void
-_backup_audio_convert_orc_pack_double_s16_swap (OrcExecutor * ORC_RESTRICT ex)
-{
-  int i;
-  int n = ex->n;
-  orc_union16 *ORC_RESTRICT ptr0;
-  const orc_union64 *ORC_RESTRICT ptr4;
-  orc_union64 var34;
-  orc_union16 var35;
-  orc_union32 var36;
-  orc_union32 var37;
-  orc_union16 var38;
-
-  ptr0 = (orc_union16 *) ex->arrays[0];
-  ptr4 = (orc_union64 *) ex->arrays[4];
-
-
-  for (i = 0; i < n; i++) {
-    /* 0: loadq */
-    var34 = ptr4[i];
-    /* 1: convdl */
-    {
-      int tmp;
-      tmp = var34.f;
-      if (tmp == 0x80000000 && !(var34.i & ORC_UINT64_C (0x8000000000000000)))
-        tmp = 0x7fffffff;
-      var36.i = tmp;
-    }
-    /* 2: shrsl */
-    var37.i = var36.i >> ex->params[24];
-    /* 3: convlw */
-    var38.i = var37.i;
-    /* 4: swapw */
-    var35.i = ORC_SWAP_W (var38.i);
-    /* 5: storew */
-    ptr0[i] = var35;
-  }
-
-}
-
-void
-audio_convert_orc_pack_double_s16_swap (guint8 * ORC_RESTRICT d1,
-    const gdouble * 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, 38, 97, 117, 100, 105, 111, 95, 99, 111, 110, 118, 101, 114, 116,
-        95, 111, 114, 99, 95, 112, 97, 99, 107, 95, 100, 111, 117, 98, 108, 101,
-        95, 115, 49, 54, 95, 115, 119, 97, 112, 11, 2, 2, 12, 8, 8, 16,
-        4, 20, 4, 20, 2, 222, 32, 4, 125, 32, 32, 24, 163, 33, 32, 183,
-        0, 33, 2, 0,
-      };
-      p = orc_program_new_from_static_bytecode (bc);
-      orc_program_set_backup_function (p,
-          _backup_audio_convert_orc_pack_double_s16_swap);
-#else
-      p = orc_program_new ();
-      orc_program_set_name (p, "audio_convert_orc_pack_double_s16_swap");
-      orc_program_set_backup_function (p,
-          _backup_audio_convert_orc_pack_double_s16_swap);
-      orc_program_add_destination (p, 2, "d1");
-      orc_program_add_source (p, 8, "s1");
-      orc_program_add_parameter (p, 4, "p1");
-      orc_program_add_temporary (p, 4, "t1");
-      orc_program_add_temporary (p, 2, "t2");
-
-      orc_program_append_2 (p, "convdl", 0, ORC_VAR_T1, ORC_VAR_S1, ORC_VAR_D1,
-          ORC_VAR_D1);
-      orc_program_append_2 (p, "shrsl", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_P1,
-          ORC_VAR_D1);
-      orc_program_append_2 (p, "convlw", 0, ORC_VAR_T2, ORC_VAR_T1, ORC_VAR_D1,
-          ORC_VAR_D1);
-      orc_program_append_2 (p, "swapw", 0, 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_S1] = (void *) s1;
-  ex->params[ORC_VAR_P1] = p1;
-
-  func = c->exec;
-  func (ex);
-}
-#endif
-
-
-/* audio_convert_orc_pack_double_u32 */
-#ifdef DISABLE_ORC
-void
-audio_convert_orc_pack_double_u32 (guint8 * ORC_RESTRICT d1,
-    const gdouble * ORC_RESTRICT s1, int p1, int n)
-{
-  int i;
-  orc_union32 *ORC_RESTRICT ptr0;
-  const orc_union64 *ORC_RESTRICT ptr4;
-  orc_union64 var33;
-#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
-  volatile orc_union32 var34;
-#else
-  orc_union32 var34;
-#endif
-  orc_union32 var35;
-  orc_union32 var36;
-  orc_union32 var37;
-
-  ptr0 = (orc_union32 *) d1;
-  ptr4 = (orc_union64 *) s1;
-
-  /* 2: loadpl */
-  var34.i = (int) 0x80000000;   /* -2147483648 or 1.061e-314f */
-
-  for (i = 0; i < n; i++) {
-    /* 0: loadq */
-    var33 = ptr4[i];
-    /* 1: convdl */
-    {
-      int tmp;
-      tmp = var33.f;
-      if (tmp == 0x80000000 && !(var33.i & ORC_UINT64_C (0x8000000000000000)))
-        tmp = 0x7fffffff;
-      var36.i = tmp;
-    }
-    /* 3: xorl */
-    var37.i = var36.i ^ var34.i;
-    /* 4: shrul */
-    var35.i = ((orc_uint32) var37.i) >> p1;
-    /* 5: storel */
-    ptr0[i] = var35;
-  }
-
-}
-
-#else
-static void
-_backup_audio_convert_orc_pack_double_u32 (OrcExecutor * ORC_RESTRICT ex)
-{
-  int i;
-  int n = ex->n;
-  orc_union32 *ORC_RESTRICT ptr0;
-  const orc_union64 *ORC_RESTRICT ptr4;
-  orc_union64 var33;
-#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
-  volatile orc_union32 var34;
-#else
-  orc_union32 var34;
-#endif
-  orc_union32 var35;
-  orc_union32 var36;
-  orc_union32 var37;
-
-  ptr0 = (orc_union32 *) ex->arrays[0];
-  ptr4 = (orc_union64 *) ex->arrays[4];
-
-  /* 2: loadpl */
-  var34.i = (int) 0x80000000;   /* -2147483648 or 1.061e-314f */
-
-  for (i = 0; i < n; i++) {
-    /* 0: loadq */
-    var33 = ptr4[i];
-    /* 1: convdl */
-    {
-      int tmp;
-      tmp = var33.f;
-      if (tmp == 0x80000000 && !(var33.i & ORC_UINT64_C (0x8000000000000000)))
-        tmp = 0x7fffffff;
-      var36.i = tmp;
-    }
-    /* 3: xorl */
-    var37.i = var36.i ^ var34.i;
-    /* 4: shrul */
-    var35.i = ((orc_uint32) var37.i) >> ex->params[24];
-    /* 5: storel */
-    ptr0[i] = var35;
-  }
-
-}
-
-void
-audio_convert_orc_pack_double_u32 (guint8 * ORC_RESTRICT d1,
-    const gdouble * 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, 33, 97, 117, 100, 105, 111, 95, 99, 111, 110, 118, 101, 114, 116,
-        95, 111, 114, 99, 95, 112, 97, 99, 107, 95, 100, 111, 117, 98, 108, 101,
-        95, 117, 51, 50, 11, 4, 4, 12, 8, 8, 14, 4, 0, 0, 0, 128,
-        16, 4, 20, 4, 222, 32, 4, 132, 32, 32, 16, 126, 0, 32, 24, 2,
-        0,
-      };
-      p = orc_program_new_from_static_bytecode (bc);
-      orc_program_set_backup_function (p,
-          _backup_audio_convert_orc_pack_double_u32);
-#else
-      p = orc_program_new ();
-      orc_program_set_name (p, "audio_convert_orc_pack_double_u32");
-      orc_program_set_backup_function (p,
-          _backup_audio_convert_orc_pack_double_u32);
-      orc_program_add_destination (p, 4, "d1");
-      orc_program_add_source (p, 8, "s1");
-      orc_program_add_constant (p, 4, 0x80000000, "c1");
-      orc_program_add_parameter (p, 4, "p1");
-      orc_program_add_temporary (p, 4, "t1");
-
-      orc_program_append_2 (p, "convdl", 0, ORC_VAR_T1, ORC_VAR_S1, ORC_VAR_D1,
-          ORC_VAR_D1);
-      orc_program_append_2 (p, "xorl", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_C1,
-          ORC_VAR_D1);
-      orc_program_append_2 (p, "shrul", 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
-
-
-/* audio_convert_orc_pack_double_s32 */
-#ifdef DISABLE_ORC
-void
-audio_convert_orc_pack_double_s32 (guint8 * ORC_RESTRICT d1,
-    const gdouble * ORC_RESTRICT s1, int p1, int n)
-{
-  int i;
-  orc_union32 *ORC_RESTRICT ptr0;
-  const orc_union64 *ORC_RESTRICT ptr4;
-  orc_union64 var33;
-  orc_union32 var34;
-  orc_union32 var35;
-
-  ptr0 = (orc_union32 *) d1;
-  ptr4 = (orc_union64 *) s1;
-
-
-  for (i = 0; i < n; i++) {
-    /* 0: loadq */
-    var33 = ptr4[i];
-    /* 1: convdl */
-    {
-      int tmp;
-      tmp = var33.f;
-      if (tmp == 0x80000000 && !(var33.i & ORC_UINT64_C (0x8000000000000000)))
-        tmp = 0x7fffffff;
-      var35.i = tmp;
-    }
-    /* 2: shrsl */
-    var34.i = var35.i >> p1;
-    /* 3: storel */
-    ptr0[i] = var34;
-  }
-
-}
-
-#else
-static void
-_backup_audio_convert_orc_pack_double_s32 (OrcExecutor * ORC_RESTRICT ex)
-{
-  int i;
-  int n = ex->n;
-  orc_union32 *ORC_RESTRICT ptr0;
-  const orc_union64 *ORC_RESTRICT ptr4;
-  orc_union64 var33;
-  orc_union32 var34;
-  orc_union32 var35;
-
-  ptr0 = (orc_union32 *) ex->arrays[0];
-  ptr4 = (orc_union64 *) ex->arrays[4];
-
-
-  for (i = 0; i < n; i++) {
-    /* 0: loadq */
-    var33 = ptr4[i];
-    /* 1: convdl */
-    {
-      int tmp;
-      tmp = var33.f;
-      if (tmp == 0x80000000 && !(var33.i & ORC_UINT64_C (0x8000000000000000)))
-        tmp = 0x7fffffff;
-      var35.i = tmp;
-    }
-    /* 2: shrsl */
-    var34.i = var35.i >> ex->params[24];
-    /* 3: storel */
-    ptr0[i] = var34;
-  }
-
-}
-
-void
-audio_convert_orc_pack_double_s32 (guint8 * ORC_RESTRICT d1,
-    const gdouble * 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, 33, 97, 117, 100, 105, 111, 95, 99, 111, 110, 118, 101, 114, 116,
-        95, 111, 114, 99, 95, 112, 97, 99, 107, 95, 100, 111, 117, 98, 108, 101,
-        95, 115, 51, 50, 11, 4, 4, 12, 8, 8, 16, 4, 20, 4, 222, 32,
-        4, 125, 0, 32, 24, 2, 0,
-      };
-      p = orc_program_new_from_static_bytecode (bc);
-      orc_program_set_backup_function (p,
-          _backup_audio_convert_orc_pack_double_s32);
-#else
-      p = orc_program_new ();
-      orc_program_set_name (p, "audio_convert_orc_pack_double_s32");
-      orc_program_set_backup_function (p,
-          _backup_audio_convert_orc_pack_double_s32);
-      orc_program_add_destination (p, 4, "d1");
-      orc_program_add_source (p, 8, "s1");
-      orc_program_add_parameter (p, 4, "p1");
-      orc_program_add_temporary (p, 4, "t1");
-
-      orc_program_append_2 (p, "convdl", 0, ORC_VAR_T1, ORC_VAR_S1, ORC_VAR_D1,
-          ORC_VAR_D1);
-      orc_program_append_2 (p, "shrsl", 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
-
-
-/* audio_convert_orc_pack_double_u32_swap */
-#ifdef DISABLE_ORC
-void
-audio_convert_orc_pack_double_u32_swap (guint8 * ORC_RESTRICT d1,
-    const gdouble * ORC_RESTRICT s1, int p1, int n)
-{
-  int i;
-  orc_union32 *ORC_RESTRICT ptr0;
-  const orc_union64 *ORC_RESTRICT ptr4;
-  orc_union64 var33;
-#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
-  volatile orc_union32 var34;
-#else
-  orc_union32 var34;
-#endif
-  orc_union32 var35;
-  orc_union32 var36;
-  orc_union32 var37;
-  orc_union32 var38;
-
-  ptr0 = (orc_union32 *) d1;
-  ptr4 = (orc_union64 *) s1;
-
-  /* 2: loadpl */
-  var34.i = (int) 0x80000000;   /* -2147483648 or 1.061e-314f */
-
-  for (i = 0; i < n; i++) {
-    /* 0: loadq */
-    var33 = ptr4[i];
-    /* 1: convdl */
-    {
-      int tmp;
-      tmp = var33.f;
-      if (tmp == 0x80000000 && !(var33.i & ORC_UINT64_C (0x8000000000000000)))
-        tmp = 0x7fffffff;
-      var36.i = tmp;
-    }
-    /* 3: xorl */
-    var37.i = var36.i ^ var34.i;
-    /* 4: shrul */
-    var38.i = ((orc_uint32) var37.i) >> p1;
-    /* 5: swapl */
-    var35.i = ORC_SWAP_L (var38.i);
-    /* 6: storel */
-    ptr0[i] = var35;
-  }
-
-}
-
-#else
-static void
-_backup_audio_convert_orc_pack_double_u32_swap (OrcExecutor * ORC_RESTRICT ex)
-{
-  int i;
-  int n = ex->n;
-  orc_union32 *ORC_RESTRICT ptr0;
-  const orc_union64 *ORC_RESTRICT ptr4;
-  orc_union64 var33;
-#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
-  volatile orc_union32 var34;
-#else
-  orc_union32 var34;
-#endif
-  orc_union32 var35;
-  orc_union32 var36;
-  orc_union32 var37;
-  orc_union32 var38;
-
-  ptr0 = (orc_union32 *) ex->arrays[0];
-  ptr4 = (orc_union64 *) ex->arrays[4];
-
-  /* 2: loadpl */
-  var34.i = (int) 0x80000000;   /* -2147483648 or 1.061e-314f */
-
-  for (i = 0; i < n; i++) {
-    /* 0: loadq */
-    var33 = ptr4[i];
-    /* 1: convdl */
-    {
-      int tmp;
-      tmp = var33.f;
-      if (tmp == 0x80000000 && !(var33.i & ORC_UINT64_C (0x8000000000000000)))
-        tmp = 0x7fffffff;
-      var36.i = tmp;
-    }
-    /* 3: xorl */
-    var37.i = var36.i ^ var34.i;
-    /* 4: shrul */
-    var38.i = ((orc_uint32) var37.i) >> ex->params[24];
-    /* 5: swapl */
-    var35.i = ORC_SWAP_L (var38.i);
-    /* 6: storel */
-    ptr0[i] = var35;
-  }
-
-}
-
-void
-audio_convert_orc_pack_double_u32_swap (guint8 * ORC_RESTRICT d1,
-    const gdouble * 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, 38, 97, 117, 100, 105, 111, 95, 99, 111, 110, 118, 101, 114, 116,
-        95, 111, 114, 99, 95, 112, 97, 99, 107, 95, 100, 111, 117, 98, 108, 101,
-        95, 117, 51, 50, 95, 115, 119, 97, 112, 11, 4, 4, 12, 8, 8, 14,
-        4, 0, 0, 0, 128, 16, 4, 20, 4, 222, 32, 4, 132, 32, 32, 16,
-        126, 32, 32, 24, 184, 0, 32, 2, 0,
-      };
-      p = orc_program_new_from_static_bytecode (bc);
-      orc_program_set_backup_function (p,
-          _backup_audio_convert_orc_pack_double_u32_swap);
-#else
-      p = orc_program_new ();
-      orc_program_set_name (p, "audio_convert_orc_pack_double_u32_swap");
-      orc_program_set_backup_function (p,
-          _backup_audio_convert_orc_pack_double_u32_swap);
-      orc_program_add_destination (p, 4, "d1");
-      orc_program_add_source (p, 8, "s1");
-      orc_program_add_constant (p, 4, 0x80000000, "c1");
-      orc_program_add_parameter (p, 4, "p1");
-      orc_program_add_temporary (p, 4, "t1");
-
-      orc_program_append_2 (p, "convdl", 0, ORC_VAR_T1, ORC_VAR_S1, ORC_VAR_D1,
-          ORC_VAR_D1);
-      orc_program_append_2 (p, "xorl", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_C1,
-          ORC_VAR_D1);
-      orc_program_append_2 (p, "shrul", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_P1,
-          ORC_VAR_D1);
-      orc_program_append_2 (p, "swapl", 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->params[ORC_VAR_P1] = p1;
-
-  func = c->exec;
-  func (ex);
-}
-#endif
-
-
-/* audio_convert_orc_pack_double_s32_swap */
-#ifdef DISABLE_ORC
-void
-audio_convert_orc_pack_double_s32_swap (guint8 * ORC_RESTRICT d1,
-    const gdouble * ORC_RESTRICT s1, int p1, int n)
-{
-  int i;
-  orc_union32 *ORC_RESTRICT ptr0;
-  const orc_union64 *ORC_RESTRICT ptr4;
-  orc_union64 var33;
-  orc_union32 var34;
-  orc_union32 var35;
-  orc_union32 var36;
-
-  ptr0 = (orc_union32 *) d1;
-  ptr4 = (orc_union64 *) s1;
-
-
-  for (i = 0; i < n; i++) {
-    /* 0: loadq */
-    var33 = ptr4[i];
-    /* 1: convdl */
-    {
-      int tmp;
-      tmp = var33.f;
-      if (tmp == 0x80000000 && !(var33.i & ORC_UINT64_C (0x8000000000000000)))
-        tmp = 0x7fffffff;
-      var35.i = tmp;
-    }
-    /* 2: shrsl */
-    var36.i = var35.i >> p1;
-    /* 3: swapl */
-    var34.i = ORC_SWAP_L (var36.i);
-    /* 4: storel */
-    ptr0[i] = var34;
-  }
-
-}
-
-#else
-static void
-_backup_audio_convert_orc_pack_double_s32_swap (OrcExecutor * ORC_RESTRICT ex)
-{
-  int i;
-  int n = ex->n;
-  orc_union32 *ORC_RESTRICT ptr0;
-  const orc_union64 *ORC_RESTRICT ptr4;
-  orc_union64 var33;
-  orc_union32 var34;
-  orc_union32 var35;
-  orc_union32 var36;
-
-  ptr0 = (orc_union32 *) ex->arrays[0];
-  ptr4 = (orc_union64 *) ex->arrays[4];
-
-
-  for (i = 0; i < n; i++) {
-    /* 0: loadq */
-    var33 = ptr4[i];
-    /* 1: convdl */
-    {
-      int tmp;
-      tmp = var33.f;
-      if (tmp == 0x80000000 && !(var33.i & ORC_UINT64_C (0x8000000000000000)))
-        tmp = 0x7fffffff;
-      var35.i = tmp;
-    }
-    /* 2: shrsl */
-    var36.i = var35.i >> ex->params[24];
-    /* 3: swapl */
-    var34.i = ORC_SWAP_L (var36.i);
-    /* 4: storel */
-    ptr0[i] = var34;
-  }
-
-}
-
-void
-audio_convert_orc_pack_double_s32_swap (guint8 * ORC_RESTRICT d1,
-    const gdouble * 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, 38, 97, 117, 100, 105, 111, 95, 99, 111, 110, 118, 101, 114, 116,
-        95, 111, 114, 99, 95, 112, 97, 99, 107, 95, 100, 111, 117, 98, 108, 101,
-        95, 115, 51, 50, 95, 115, 119, 97, 112, 11, 4, 4, 12, 8, 8, 16,
-        4, 20, 4, 222, 32, 4, 125, 32, 32, 24, 184, 0, 32, 2, 0,
-      };
-      p = orc_program_new_from_static_bytecode (bc);
-      orc_program_set_backup_function (p,
-          _backup_audio_convert_orc_pack_double_s32_swap);
-#else
-      p = orc_program_new ();
-      orc_program_set_name (p, "audio_convert_orc_pack_double_s32_swap");
-      orc_program_set_backup_function (p,
-          _backup_audio_convert_orc_pack_double_s32_swap);
-      orc_program_add_destination (p, 4, "d1");
-      orc_program_add_source (p, 8, "s1");
-      orc_program_add_parameter (p, 4, "p1");
-      orc_program_add_temporary (p, 4, "t1");
-
-      orc_program_append_2 (p, "convdl", 0, ORC_VAR_T1, ORC_VAR_S1, ORC_VAR_D1,
-          ORC_VAR_D1);
-      orc_program_append_2 (p, "shrsl", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_P1,
-          ORC_VAR_D1);
-      orc_program_append_2 (p, "swapl", 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->params[ORC_VAR_P1] = p1;
-
-  func = c->exec;
-  func (ex);
-}
-#endif
diff --git a/gst/audioconvert/gstaudioconvertorc-dist.h b/gst/audioconvert/gstaudioconvertorc-dist.h
deleted file mode 100644
index 5fd0053..0000000
--- a/gst/audioconvert/gstaudioconvertorc-dist.h
+++ /dev/null
@@ -1,143 +0,0 @@
-
-/* autogenerated from gstaudioconvertorc.orc */
-
-#ifndef _GSTAUDIOCONVERTORC_H_
-#define _GSTAUDIOCONVERTORC_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 audio_convert_orc_unpack_u8 (gint32 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1, int p1, int n);
-void audio_convert_orc_unpack_s8 (gint32 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1, int p1, int n);
-void audio_convert_orc_unpack_u16 (gint32 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1, int p1, int n);
-void audio_convert_orc_unpack_s16 (gint32 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1, int p1, int n);
-void audio_convert_orc_unpack_u16_swap (gint32 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1, int p1, int n);
-void audio_convert_orc_unpack_s16_swap (gint32 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1, int p1, int n);
-void audio_convert_orc_unpack_u32 (gint32 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1, int p1, int n);
-void audio_convert_orc_unpack_s32 (gint32 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1, int p1, int n);
-void audio_convert_orc_unpack_u32_swap (gint32 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1, int p1, int n);
-void audio_convert_orc_unpack_s32_swap (gint32 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1, int p1, int n);
-void audio_convert_orc_unpack_float_s32 (guint32 * ORC_RESTRICT d1, const gfloat * ORC_RESTRICT s1, int n);
-void audio_convert_orc_unpack_float_s32_swap (guint32 * ORC_RESTRICT d1, const gfloat * ORC_RESTRICT s1, int n);
-void audio_convert_orc_unpack_double_s32 (guint32 * ORC_RESTRICT d1, const gdouble * ORC_RESTRICT s1, int n);
-void audio_convert_orc_unpack_double_s32_swap (guint32 * ORC_RESTRICT d1, const gdouble * ORC_RESTRICT s1, int n);
-void audio_convert_orc_unpack_float_double (gdouble * ORC_RESTRICT d1, const gfloat * ORC_RESTRICT s1, int n);
-void audio_convert_orc_unpack_float_double_swap (gdouble * ORC_RESTRICT d1, const gfloat * ORC_RESTRICT s1, int n);
-void audio_convert_orc_unpack_double_double (gdouble * ORC_RESTRICT d1, const gdouble * ORC_RESTRICT s1, int n);
-void audio_convert_orc_unpack_double_double_swap (gdouble * ORC_RESTRICT d1, const gdouble * ORC_RESTRICT s1, int n);
-void audio_convert_orc_unpack_u8_double (gdouble * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1, int p1, int n);
-void audio_convert_orc_unpack_s8_double (gdouble * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1, int p1, int n);
-void audio_convert_orc_unpack_u16_double (gdouble * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1, int p1, int n);
-void audio_convert_orc_unpack_s16_double (gdouble * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1, int p1, int n);
-void audio_convert_orc_unpack_u16_double_swap (gdouble * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1, int p1, int n);
-void audio_convert_orc_unpack_s16_double_swap (gdouble * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1, int p1, int n);
-void audio_convert_orc_unpack_u32_double (gdouble * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1, int p1, int n);
-void audio_convert_orc_unpack_s32_double (gdouble * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1, int p1, int n);
-void audio_convert_orc_unpack_u32_double_swap (gdouble * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1, int p1, int n);
-void audio_convert_orc_unpack_s32_double_swap (gdouble * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1, int p1, int n);
-void audio_convert_orc_pack_u8 (guint8 * ORC_RESTRICT d1, const gint32 * ORC_RESTRICT s1, int p1, int n);
-void audio_convert_orc_pack_s8 (guint8 * ORC_RESTRICT d1, const gint32 * ORC_RESTRICT s1, int p1, int n);
-void audio_convert_orc_pack_u16 (guint8 * ORC_RESTRICT d1, const gint32 * ORC_RESTRICT s1, int p1, int n);
-void audio_convert_orc_pack_s16 (guint8 * ORC_RESTRICT d1, const gint32 * ORC_RESTRICT s1, int p1, int n);
-void audio_convert_orc_pack_u16_swap (guint8 * ORC_RESTRICT d1, const gint32 * ORC_RESTRICT s1, int p1, int n);
-void audio_convert_orc_pack_s16_swap (guint8 * ORC_RESTRICT d1, const gint32 * ORC_RESTRICT s1, int p1, int n);
-void audio_convert_orc_pack_u32 (guint8 * ORC_RESTRICT d1, const gint32 * ORC_RESTRICT s1, int p1, int n);
-void audio_convert_orc_pack_s32 (guint8 * ORC_RESTRICT d1, const gint32 * ORC_RESTRICT s1, int p1, int n);
-void audio_convert_orc_pack_u32_swap (guint8 * ORC_RESTRICT d1, const gint32 * ORC_RESTRICT s1, int p1, int n);
-void audio_convert_orc_pack_s32_swap (guint8 * ORC_RESTRICT d1, const gint32 * ORC_RESTRICT s1, int p1, int n);
-void audio_convert_orc_pack_s32_float (gfloat * ORC_RESTRICT d1, const gint32 * ORC_RESTRICT s1, int n);
-void audio_convert_orc_pack_s32_float_swap (gfloat * ORC_RESTRICT d1, const gint32 * ORC_RESTRICT s1, int n);
-void audio_convert_orc_pack_s32_double (gdouble * ORC_RESTRICT d1, const gint32 * ORC_RESTRICT s1, int n);
-void audio_convert_orc_pack_s32_double_swap (gdouble * ORC_RESTRICT d1, const gint32 * ORC_RESTRICT s1, int n);
-void audio_convert_orc_pack_double_float (gfloat * ORC_RESTRICT d1, const gdouble * ORC_RESTRICT s1, int n);
-void audio_convert_orc_pack_double_float_swap (gfloat * ORC_RESTRICT d1, const gdouble * ORC_RESTRICT s1, int n);
-void audio_convert_orc_pack_double_u8 (guint8 * ORC_RESTRICT d1, const gdouble * ORC_RESTRICT s1, int p1, int n);
-void audio_convert_orc_pack_double_s8 (guint8 * ORC_RESTRICT d1, const gdouble * ORC_RESTRICT s1, int p1, int n);
-void audio_convert_orc_pack_double_u16 (guint8 * ORC_RESTRICT d1, const gdouble * ORC_RESTRICT s1, int p1, int n);
-void audio_convert_orc_pack_double_s16 (guint8 * ORC_RESTRICT d1, const gdouble * ORC_RESTRICT s1, int p1, int n);
-void audio_convert_orc_pack_double_u16_swap (guint8 * ORC_RESTRICT d1, const gdouble * ORC_RESTRICT s1, int p1, int n);
-void audio_convert_orc_pack_double_s16_swap (guint8 * ORC_RESTRICT d1, const gdouble * ORC_RESTRICT s1, int p1, int n);
-void audio_convert_orc_pack_double_u32 (guint8 * ORC_RESTRICT d1, const gdouble * ORC_RESTRICT s1, int p1, int n);
-void audio_convert_orc_pack_double_s32 (guint8 * ORC_RESTRICT d1, const gdouble * ORC_RESTRICT s1, int p1, int n);
-void audio_convert_orc_pack_double_u32_swap (guint8 * ORC_RESTRICT d1, const gdouble * ORC_RESTRICT s1, int p1, int n);
-void audio_convert_orc_pack_double_s32_swap (guint8 * ORC_RESTRICT d1, const gdouble * ORC_RESTRICT s1, int p1, int n);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
-
diff --git a/gst/audioconvert/gstaudioconvertorc.orc b/gst/audioconvert/gstaudioconvertorc.orc
deleted file mode 100644
index 8d57a35..0000000
--- a/gst/audioconvert/gstaudioconvertorc.orc
+++ /dev/null
@@ -1,591 +0,0 @@
-
-.function audio_convert_orc_unpack_u8
-.dest 4 d1 gint32
-.source 1 s1 guint8
-.param 4 p1
-.const 4 c1 0x80000000
-.temp 2 t2
-.temp 4 t3
-
-convubw t2, s1
-convuwl t3, t2
-shll t3, t3, p1
-xorl d1, t3, c1
-
-
-.function audio_convert_orc_unpack_s8
-.dest 4 d1 gint32
-.source 1 s1 guint8
-.param 4 p1
-.temp 2 t2
-.temp 4 t3
-
-convubw t2, s1
-convuwl t3, t2
-shll d1, t3, p1
-
-
-.function audio_convert_orc_unpack_u16
-.dest 4 d1 gint32
-.source 2 s1 guint8
-.param 4 p1
-.const 4 c1 0x80000000
-.temp 4 t2
-
-convuwl t2, s1
-shll t2, t2, p1
-xorl d1, t2, c1
-
-
-.function audio_convert_orc_unpack_s16
-.dest 4 d1 gint32
-.source 2 s1 guint8
-.param 4 p1
-.temp 4 t2
-
-convuwl t2, s1
-shll d1, t2, p1
-
-
-.function audio_convert_orc_unpack_u16_swap
-.dest 4 d1 gint32
-.source 2 s1 guint8
-.param 4 p1
-.const 4 c1 0x80000000
-.temp 2 t1
-.temp 4 t2
-
-swapw t1, s1
-convuwl t2, t1
-shll t2, t2, p1
-xorl d1, t2, c1
-
-
-.function audio_convert_orc_unpack_s16_swap
-.dest 4 d1 gint32
-.source 2 s1 guint8
-.param 4 p1
-.temp 2 t1
-.temp 4 t2
-
-swapw t1, s1
-convuwl t2, t1
-shll d1, t2, p1
-
-
-.function audio_convert_orc_unpack_u32
-.dest 4 d1 gint32
-.source 4 s1 guint8
-.param 4 p1
-.const 4 c1 0x80000000
-.temp 4 t1
-
-shll t1, s1, p1
-xorl d1, t1, c1
-
-
-.function audio_convert_orc_unpack_s32
-.dest 4 d1 gint32
-.source 4 s1 guint8
-.param 4 p1
-
-shll d1, s1, p1
-
-
-.function audio_convert_orc_unpack_u32_swap
-.dest 4 d1 gint32
-.source 4 s1 guint8
-.param 4 p1
-.const 4 c1 0x80000000
-.temp 4 t1
-
-swapl t1, s1
-shll t1, t1, p1
-xorl d1, t1, c1
-
-
-.function audio_convert_orc_unpack_s32_swap
-.dest 4 d1 gint32
-.source 4 s1 guint8
-.param 4 p1
-.temp 4 t1
-
-swapl t1, s1
-shll d1, t1, p1
-
-.function audio_convert_orc_unpack_float_s32
-.source 4 s1 gfloat
-.dest 4 d1 guint32
-.temp 4 t1
-
-loadl t1, s1
-# multiply with 2147483647.0
-mulf t1, t1, 0x4F000000
-# add 0.5 for rounding
-addf t1, t1, 0x3F000000
-convfl d1, t1
-
-.function audio_convert_orc_unpack_float_s32_swap
-.source 4 s1 gfloat
-.dest 4 d1 guint32
-.temp 4 t1
-
-swapl t1, s1
-# multiply with 2147483647.0
-mulf t1, t1, 0x4F000000
-# add 0.5 for rounding
-addf t1, t1, 0x3F000000
-convfl d1, t1
-
-.function audio_convert_orc_unpack_double_s32
-.source 8 s1 gdouble
-.dest 4 d1 guint32
-.temp 8 t1
-
-loadq t1, s1
-# multiply with 2147483647.0
-muld t1, t1, 0x41DFFFFFFFC00000L
-# add 0.5 for rounding
-addd t1, t1, 0x3FE0000000000000L
-convdl d1, t1
-
-.function audio_convert_orc_unpack_double_s32_swap
-.source 8 s1 gdouble
-.dest 4 d1 guint32
-.temp 8 t1
-
-swapq t1, s1
-# multiply with 2147483647.0
-muld t1, t1, 0x41DFFFFFFFC00000L
-# add 0.5 for rounding
-addd t1, t1, 0x3FE0000000000000L
-convdl d1, t1
-
-.function audio_convert_orc_unpack_float_double
-.dest 8 d1 gdouble
-.source 4 s1 gfloat
-
-convfd d1, s1
-
-.function audio_convert_orc_unpack_float_double_swap
-.dest 8 d1 gdouble
-.source 4 s1 gfloat
-.temp 4 t1
-
-swapl t1, s1
-convfd d1, t1
-
-.function audio_convert_orc_unpack_double_double
-.dest 8 d1 gdouble
-.source 8 s1 gdouble
-
-copyq d1, s1
-
-.function audio_convert_orc_unpack_double_double_swap
-.dest 8 d1 gdouble
-.source 8 s1 gdouble
-
-swapq d1, s1
-
-.function audio_convert_orc_unpack_u8_double
-.dest 8 d1 gdouble
-.source 1 s1 guint8
-.param 4 p1
-.const 4 c1 0x80000000
-.temp 2 t2
-.temp 4 t3
-
-convubw t2, s1
-convuwl t3, t2
-shll t3, t3, p1
-xorl t3, t3, c1
-convld d1, t3
-
-.function audio_convert_orc_unpack_s8_double
-.dest 8 d1 gdouble
-.source 1 s1 guint8
-.param 4 p1
-.temp 2 t2
-.temp 4 t3
-
-convubw t2, s1
-convuwl t3, t2
-shll t3, t3, p1
-convld d1, t3
-
-.function audio_convert_orc_unpack_u16_double
-.dest 8 d1 gdouble
-.source 2 s1 guint8
-.param 4 p1
-.const 4 c1 0x80000000
-.temp 4 t2
-
-convuwl t2, s1
-shll t2, t2, p1
-xorl t2, t2, c1
-convld d1, t2
-
-.function audio_convert_orc_unpack_s16_double
-.dest 8 d1 gdouble
-.source 2 s1 guint8
-.param 4 p1
-.temp 4 t2
-
-convuwl t2, s1
-shll t2, t2, p1
-convld d1, t2
-
-.function audio_convert_orc_unpack_u16_double_swap
-.dest 8 d1 gdouble
-.source 2 s1 guint8
-.param 4 p1
-.const 4 c1 0x80000000
-.temp 2 t1
-.temp 4 t2
-
-swapw t1, s1
-convuwl t2, t1
-shll t2, t2, p1
-xorl t2, t2, c1
-convld d1, t2
-
-.function audio_convert_orc_unpack_s16_double_swap
-.dest 8 d1 gdouble
-.source 2 s1 guint8
-.param 4 p1
-.temp 2 t1
-.temp 4 t2
-
-swapw t1, s1
-convuwl t2, t1
-shll t2, t2, p1
-convld d1, t2
-
-.function audio_convert_orc_unpack_u32_double
-.dest 8 d1 gdouble
-.source 4 s1 guint8
-.param 4 p1
-.const 4 c1 0x80000000
-.temp 4 t1
-
-shll t1, s1, p1
-xorl t1, t1, c1
-convld d1, t1
-
-.function audio_convert_orc_unpack_s32_double
-.dest 8 d1 gdouble
-.source 4 s1 guint8
-.param 4 p1
-.temp 4 t1
-
-shll t1, s1, p1
-convld d1, t1
-
-.function audio_convert_orc_unpack_u32_double_swap
-.dest 8 d1 gdouble
-.source 4 s1 guint8
-.param 4 p1
-.const 4 c1 0x80000000
-.temp 4 t1
-
-swapl t1, s1
-shll t1, t1, p1
-xorl t1, t1, c1
-convld d1, t1
-
-.function audio_convert_orc_unpack_s32_double_swap
-.dest 8 d1 gdouble
-.source 4 s1 guint8
-.param 4 p1
-.temp 4 t1
-
-swapl t1, s1
-shll t1, t1, p1
-convld d1, t1
-
-.function audio_convert_orc_pack_u8
-.dest 1 d1 guint8
-.source 4 s1 gint32
-.param 4 p1
-.const 4 c1 0x80000000
-.temp 4 t1
-.temp 2 t2
-
-xorl t1, s1, c1
-shrul t1, t1, p1
-convlw t2, t1
-convwb d1, t2
-
-
-.function audio_convert_orc_pack_s8
-.dest 1 d1 guint8
-.source 4 s1 gint32
-.param 4 p1
-.temp 4 t1
-.temp 2 t2
-
-shrsl t1, s1, p1
-convlw t2, t1
-convwb d1, t2
-
-
-
-.function audio_convert_orc_pack_u16
-.dest 2 d1 guint8
-.source 4 s1 gint32
-.param 4 p1
-.const 4 c1 0x80000000
-.temp 4 t1
-
-xorl t1, s1, c1
-shrul t1, t1, p1
-convlw d1, t1
-
-
-.function audio_convert_orc_pack_s16
-.dest 2 d1 guint8
-.source 4 s1 gint32
-.param 4 p1
-.temp 4 t1
-
-shrsl t1, s1, p1
-convlw d1, t1
-
-
-.function audio_convert_orc_pack_u16_swap
-.dest 2 d1 guint8
-.source 4 s1 gint32
-.param 4 p1
-.const 4 c1 0x80000000
-.temp 4 t1
-.temp 2 t2
-
-xorl t1, s1, c1
-shrul t1, t1, p1
-convlw t2, t1
-swapw d1, t2
-
-
-.function audio_convert_orc_pack_s16_swap
-.dest 2 d1 guint8
-.source 4 s1 gint32
-.param 4 p1
-.temp 4 t1
-.temp 2 t2
-
-shrsl t1, s1, p1
-convlw t2, t1
-swapw d1, t2
-
-
-
-.function audio_convert_orc_pack_u32
-.dest 4 d1 guint8
-.source 4 s1 gint32
-.param 4 p1
-.const 4 c1 0x80000000
-.temp 4 t1
-
-xorl t1, s1, c1
-shrul d1, t1, p1
-
-
-.function audio_convert_orc_pack_s32
-.dest 4 d1 guint8
-.source 4 s1 gint32
-.param 4 p1
-
-shrsl d1, s1, p1
-
-
-.function audio_convert_orc_pack_u32_swap
-.dest 4 d1 guint8
-.source 4 s1 gint32
-.param 4 p1
-.const 4 c1 0x80000000
-.temp 4 t1
-
-xorl t1, s1, c1
-shrul t1, t1, p1
-swapl d1, t1
-
-
-.function audio_convert_orc_pack_s32_swap
-.dest 4 d1 guint8
-.source 4 s1 gint32
-.param 4 p1
-.temp 4 t1
-
-shrsl t1, s1, p1
-swapl d1, t1
-
-.function audio_convert_orc_pack_s32_float
-.dest 4 d1 gfloat
-.source 4 s1 gint32
-.temp 4 t1
-
-convlf t1, s1
-# divide by 2147483647.0
-divf t1, t1, 0x4F000000
-storel d1, t1
-
-.function audio_convert_orc_pack_s32_float_swap
-.dest 4 d1 gfloat
-.source 4 s1 gint32
-.temp 4 t1
-
-convlf t1, s1
-# divide by 2147483647.0
-divf t1, t1, 0x4F000000
-swapl d1, t1
-
-.function audio_convert_orc_pack_s32_double
-.dest 8 d1 gdouble
-.source 4 s1 gint32
-.temp 8 t1
-
-convld t1, s1
-# divide by 2147483647.0
-divd t1, t1, 0x41DFFFFFFFC00000L
-storeq d1, t1
-
-.function audio_convert_orc_pack_s32_double_swap
-.dest 8 d1 gdouble
-.source 4 s1 gint32
-.temp 8 t1
-
-convld t1, s1
-# divide by 2147483647.0
-divd t1, t1, 0x41DFFFFFFFC00000L
-swapq d1, t1
-
-.function audio_convert_orc_pack_double_float
-.dest 4 d1 gfloat
-.source 8 s1 gdouble
-
-convdf d1, s1
-
-.function audio_convert_orc_pack_double_float_swap
-.dest 4 d1 gfloat
-.source 8 s1 gdouble
-.temp 4 t1
-
-convdf t1, s1
-swapl d1, t1
-
-.function audio_convert_orc_pack_double_u8
-.dest 1 d1 guint8
-.source 8 s1 gdouble
-.param 4 p1
-.const 4 c1 0x80000000
-.temp 4 t1
-.temp 2 t2
-
-convdl t1, s1
-xorl t1, t1, c1
-shrul t1, t1, p1
-convlw t2, t1
-convwb d1, t2
-
-.function audio_convert_orc_pack_double_s8
-.dest 1 d1 guint8
-.source 8 s1 gdouble
-.param 4 p1
-.temp 4 t1
-.temp 2 t2
-
-convdl t1, s1
-shrsl t1, t1, p1
-convlw t2, t1
-convwb d1, t2
-
-.function audio_convert_orc_pack_double_u16
-.dest 2 d1 guint8
-.source 8 s1 gdouble
-.param 4 p1
-.const 4 c1 0x80000000
-.temp 4 t1
-
-convdl t1, s1
-xorl t1, t1, c1
-shrul t1, t1, p1
-convlw d1, t1
-
-.function audio_convert_orc_pack_double_s16
-.dest 2 d1 guint8
-.source 8 s1 gdouble
-.param 4 p1
-.temp 4 t1
-
-convdl t1, s1
-shrsl t1, t1, p1
-convlw d1, t1
-
-.function audio_convert_orc_pack_double_u16_swap
-.dest 2 d1 guint8
-.source 8 s1 gdouble
-.param 4 p1
-.const 4 c1 0x80000000
-.temp 4 t1
-.temp 2 t2
-
-convdl t1, s1
-xorl t1, t1, c1
-shrul t1, t1, p1
-convlw t2, t1
-swapw d1, t2
-
-.function audio_convert_orc_pack_double_s16_swap
-.dest 2 d1 guint8
-.source 8 s1 gdouble
-.param 4 p1
-.temp 4 t1
-.temp 2 t2
-
-convdl t1, s1
-shrsl t1, t1, p1
-convlw t2, t1
-swapw d1, t2
-
-.function audio_convert_orc_pack_double_u32
-.dest 4 d1 guint8
-.source 8 s1 gdouble
-.param 4 p1
-.const 4 c1 0x80000000
-.temp 4 t1
-
-convdl t1, s1
-xorl t1, t1, c1
-shrul d1, t1, p1
-
-.function audio_convert_orc_pack_double_s32
-.dest 4 d1 guint8
-.source 8 s1 gdouble
-.param 4 p1
-.temp 4 t1
-
-convdl t1, s1
-shrsl d1, t1, p1
-
-.function audio_convert_orc_pack_double_u32_swap
-.dest 4 d1 guint8
-.source 8 s1 gdouble
-.param 4 p1
-.const 4 c1 0x80000000
-.temp 4 t1
-
-convdl t1, s1
-xorl t1, t1, c1
-shrul t1, t1, p1
-swapl d1, t1
-
-.function audio_convert_orc_pack_double_s32_swap
-.dest 4 d1 guint8
-.source 8 s1 gdouble
-.param 4 p1
-.temp 4 t1
-
-convdl t1, s1
-shrsl t1, t1, p1
-swapl d1, t1
-
diff --git a/gst/audioconvert/gstaudioquantize.c b/gst/audioconvert/gstaudioquantize.c
deleted file mode 100644
index d3df42c..0000000
--- a/gst/audioconvert/gstaudioquantize.c
+++ /dev/null
@@ -1,489 +0,0 @@
-/* GStreamer
- * Copyright (C) 2007 Sebastian Dröge <slomo@circular-chaos.org>
- *
- * gstaudioquantize.c: quantizes audio to the target format and optionally
- *                     applies dithering and noise shaping.
- *
- * 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.
- */
-
-/*
- * FIXME: When doing dithering with int as intermediate format
- *        one gets audible harmonics while the noise floor is
- *        constant for double as intermediate format!
- */
-
-/* TODO: - Maybe drop 5-pole noise shaping and use coefficients
- *         generated by dmaker
- *         http://shibatch.sf.net
- */
-
-#include <gst/gst.h>
-#include <string.h>
-#include <math.h>
-#include "audioconvert.h"
-#include "gstaudioquantize.h"
-
-#include "gstfastrandom.h"
-
-#define MAKE_QUANTIZE_FUNC_NAME(name)                                   \
-gst_audio_quantize_quantize_##name
-
-/* Quantize functions for gint32 as intermediate format */
-
-#define MAKE_QUANTIZE_FUNC_I(name, DITHER_INIT_FUNC, ADD_DITHER_FUNC,   \
-                             ROUND_FUNC)                                \
-static void                                                             \
-MAKE_QUANTIZE_FUNC_NAME (name) (AudioConvertCtx *ctx, gint32 *src,      \
-                                gint32 *dst, gint count)                \
-{                                                                       \
-  gint scale = ctx->out_scale;                                          \
-  gint channels = ctx->out.channels;                                    \
-  gint chan_pos;                                                        \
-                                                                        \
-  if (scale > 0) {                                                      \
-    gint32 tmp;                                                         \
-    guint32 mask = 0xffffffff & (0xffffffff << scale);                  \
-    guint32 bias = 1U << (scale - 1);                                   \
-    DITHER_INIT_FUNC()                                                  \
-                                                                        \
-    for (;count;count--) {                                              \
-      for (chan_pos = 0; chan_pos < channels; chan_pos++) {             \
-        tmp = *src++;                                                   \
-        ADD_DITHER_FUNC()                                               \
-        ROUND_FUNC()                                                    \
-        *dst = tmp & mask;                                              \
-        dst++;                                                          \
-      }                                                                 \
-    }                                                                   \
-  } else {                                                              \
-    for (;count;count--) {                                              \
-      for (chan_pos = 0; chan_pos < channels; chan_pos++) {             \
-        *dst = *src++;                                                  \
-        dst++;                                                          \
-      }                                                                 \
-    }                                                                   \
-  }                                                                     \
-}
-
-
-/* Quantize functions for gdouble as intermediate format with
- * int as target */
-
-#define MAKE_QUANTIZE_FUNC_F(name, DITHER_INIT_FUNC, NS_INIT_FUNC,      \
-                             ADD_NS_FUNC, ADD_DITHER_FUNC,              \
-                             UPDATE_ERROR_FUNC)                         \
-static void                                                             \
-MAKE_QUANTIZE_FUNC_NAME (name) (AudioConvertCtx *ctx, gdouble *src,     \
-                                gdouble *dst, gint count)               \
-{                                                                       \
-  gint scale = ctx->out_scale;                                          \
-  gint channels = ctx->out.channels;                                    \
-  gint chan_pos;                                                        \
-  gdouble factor = (1U<<(32-scale-1)) - 1;                              \
-                                                                        \
-  if (scale > 0) {                                                      \
-    gdouble tmp;                                                        \
-    DITHER_INIT_FUNC()                                                  \
-    NS_INIT_FUNC()                                                      \
-                                                                        \
-    for (;count;count--) {                                              \
-      for (chan_pos = 0; chan_pos < channels; chan_pos++) {             \
-        tmp = *src++;                                                   \
-        ADD_NS_FUNC()                                                   \
-        ADD_DITHER_FUNC()                                               \
-        tmp = floor(tmp * factor + 0.5);                                \
-        *dst = CLAMP (tmp, -factor - 1, factor);                        \
-        UPDATE_ERROR_FUNC()                                             \
-        dst++;                                                          \
-      }                                                                 \
-    }                                                                   \
-  } else {                                                              \
-    for (;count;count--) {                                              \
-      for (chan_pos = 0; chan_pos < channels; chan_pos++) {             \
-        *dst = *src++ * 2147483647.0;                                   \
-        dst++;                                                          \
-      }                                                                 \
-    }                                                                   \
-  }                                                                     \
-}
-
-/* Rounding functions for int as intermediate format, only used when
- * not using dithering. With dithering we include this offset in our
- * dither noise instead. */
-
-#define ROUND()                                                         \
-        if (tmp > 0 && G_MAXINT32 - tmp <= bias)                        \
-          tmp = G_MAXINT32;                                             \
-        else                                                            \
-          tmp += bias;
-
-
-#define NONE_FUNC()
-
-/* Dithering definitions
- * See http://en.wikipedia.org/wiki/Dithering or
- * 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. */
-
-#define INIT_DITHER_RPDF_I()                                            \
-  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 = 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)       \
-                tmp = G_MININT32;                                       \
-        else                                                            \
-                tmp += rand;
-
-#define INIT_DITHER_RPDF_F()                                            \
-  gdouble dither = 1.0/(1U<<(32 - scale - 1));
-
-#define ADD_DITHER_RPDF_F()                                             \
-        tmp += gst_fast_random_double_range (- dither, dither);
-
-#define INIT_DITHER_TPDF_I()                                            \
-  gint32 rand;                                                          \
-  gint32 dither = (1<<(scale - 1));
-
-#define ADD_DITHER_TPDF_I()                                             \
-        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)       \
-                tmp = G_MININT32;                                       \
-        else                                                            \
-                tmp += rand;
-
-#define INIT_DITHER_TPDF_F()                                            \
-  gdouble dither = 1.0/(1U<<(32 - scale));
-
-#define ADD_DITHER_TPDF_F()                                             \
-        tmp += gst_fast_random_double_range (- dither, dither)          \
-               + gst_fast_random_double_range (- dither, dither);
-
-#define INIT_DITHER_TPDF_HF_I()                                         \
-  gint32 rand;                                                          \
-  gint32 dither = (1<<(scale-1));                                       \
-  gint32 *last_random = (gint32 *) ctx->last_random, tmp_rand;
-
-#define ADD_DITHER_TPDF_HF_I()                                          \
-        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;                                       \
-        else if (rand < 0 && tmp < 0 && G_MININT32 - tmp >= rand)       \
-                tmp = G_MININT32;                                       \
-        else                                                            \
-                tmp += rand;
-
-/* Like TPDF dither but the dither noise is oriented more to the
- * higher frequencies */
-
-#define INIT_DITHER_TPDF_HF_F()                                         \
-  gdouble rand;                                                         \
-  gdouble dither = 1.0/(1U<<(32 - scale));                              \
-  gdouble *last_random = (gdouble *) ctx->last_random, tmp_rand;
-
-#define ADD_DITHER_TPDF_HF_F()                                          \
-        tmp_rand = gst_fast_random_double_range (- dither, dither);     \
-        rand = tmp_rand - last_random[chan_pos];                        \
-        last_random[chan_pos] = tmp_rand;                               \
-        tmp += rand;
-
-/* Noise shaping definitions.
- * See http://en.wikipedia.org/wiki/Noise_shaping for explanations. */
-
-
-/* Simple error feedback: Just accumulate the dithering and quantization
- * error and remove it from each sample. */
-
-#define INIT_NS_ERROR_FEEDBACK()                                        \
-  gdouble orig;                                                         \
-  gdouble *errors = ctx->error_buf;
-
-#define ADD_NS_ERROR_FEEDBACK()                                         \
-        orig = tmp;                                                     \
-        tmp -= errors[chan_pos];
-
-#define UPDATE_ERROR_ERROR_FEEDBACK()                                   \
-        errors[chan_pos] += (*dst)/factor - orig;
-
-/* Same as error feedback but also add 1/2 of the previous error value.
- * This moves the noise a bit more into the higher frequencies. */
-
-#define INIT_NS_SIMPLE()                                                \
-  gdouble orig;                                                         \
-  gdouble *errors = ctx->error_buf, cur_error;
-
-#define ADD_NS_SIMPLE()                                                 \
-        cur_error = errors[chan_pos*2] - 0.5 * errors[chan_pos*2 + 1];  \
-        tmp -= cur_error;                                               \
-        orig = tmp;
-
-#define UPDATE_ERROR_SIMPLE()                                           \
-        errors[chan_pos*2 + 1] = errors[chan_pos*2];                    \
-        errors[chan_pos*2] = (*dst)/factor - orig;
-
-
-/* Noise shaping coefficients from[1], moves most power of the
- * error noise into inaudible frequency ranges.
- *
- * [1]
- * "Minimally Audible Noise Shaping", Stanley P. Lipshitz,
- * John Vanderkooy, and Robert A. Wannamaker,
- * J. Audio Eng. Soc., Vol. 39, No. 11, November 1991. */
-
-static const gdouble ns_medium_coeffs[] = {
-  2.033, -2.165, 1.959, -1.590, 0.6149
-};
-
-#define INIT_NS_MEDIUM()                                                \
-  gdouble orig;                                                         \
-  gdouble *errors = ctx->error_buf, cur_error;                          \
-  int j;
-
-#define ADD_NS_MEDIUM()                                                 \
-        cur_error = 0.0;                                                \
-        for (j = 0; j < 5; j++)                                         \
-          cur_error += errors[chan_pos*5 + j] * ns_medium_coeffs[j];    \
-        tmp -= cur_error;                                               \
-        orig = tmp;
-
-#define UPDATE_ERROR_MEDIUM()                                           \
-        for (j = 4; j > 0; j--)                                         \
-          errors[chan_pos*5 + j] = errors[chan_pos*5 + j-1];            \
-        errors[chan_pos*5] = (*dst)/factor - orig;
-
-/* Noise shaping coefficients by David Schleef, moves most power of the
- * error noise into inaudible frequency ranges */
-
-static const gdouble ns_high_coeffs[] = {
-  2.08484, -2.92975, 3.27918, -3.31399, 2.61339, -1.72008, 0.876066, -0.340122
-};
-
-#define INIT_NS_HIGH()                                                  \
-  gdouble orig;                                                         \
-  gdouble *errors = ctx->error_buf, cur_error;                          \
-  int j;
-
-#define ADD_NS_HIGH()                                                   \
-        cur_error = 0.0;                                                \
-        for (j = 0; j < 8; j++)                                         \
-          cur_error += errors[chan_pos*8 + j] * ns_high_coeffs[j];      \
-        tmp -= cur_error;                                               \
-        orig = tmp;
-
-#define UPDATE_ERROR_HIGH()                                             \
-        for (j = 7; j > 0; j--)                                         \
-          errors[chan_pos*8 + j] = errors[chan_pos*8 + j-1];            \
-        errors[chan_pos*8] = (*dst)/factor - orig;
-
-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 (int_tpdf_none, INIT_DITHER_TPDF_I, ADD_DITHER_TPDF_I,
-    NONE_FUNC);
-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,
-    INIT_NS_ERROR_FEEDBACK, ADD_NS_ERROR_FEEDBACK, NONE_FUNC,
-    UPDATE_ERROR_ERROR_FEEDBACK);
-MAKE_QUANTIZE_FUNC_F (float_none_simple, NONE_FUNC, INIT_NS_SIMPLE,
-    ADD_NS_SIMPLE, NONE_FUNC, UPDATE_ERROR_SIMPLE);
-MAKE_QUANTIZE_FUNC_F (float_none_medium, NONE_FUNC, INIT_NS_MEDIUM,
-    ADD_NS_MEDIUM, NONE_FUNC, UPDATE_ERROR_MEDIUM);
-MAKE_QUANTIZE_FUNC_F (float_none_high, NONE_FUNC, INIT_NS_HIGH, ADD_NS_HIGH,
-    NONE_FUNC, UPDATE_ERROR_HIGH);
-
-MAKE_QUANTIZE_FUNC_F (float_rpdf_error_feedback, INIT_DITHER_RPDF_F,
-    INIT_NS_ERROR_FEEDBACK, ADD_NS_ERROR_FEEDBACK, ADD_DITHER_RPDF_F,
-    UPDATE_ERROR_ERROR_FEEDBACK);
-MAKE_QUANTIZE_FUNC_F (float_rpdf_simple, INIT_DITHER_RPDF_F, INIT_NS_SIMPLE,
-    ADD_NS_SIMPLE, ADD_DITHER_RPDF_F, UPDATE_ERROR_SIMPLE);
-MAKE_QUANTIZE_FUNC_F (float_rpdf_medium, INIT_DITHER_RPDF_F, INIT_NS_MEDIUM,
-    ADD_NS_MEDIUM, ADD_DITHER_RPDF_F, UPDATE_ERROR_MEDIUM);
-MAKE_QUANTIZE_FUNC_F (float_rpdf_high, INIT_DITHER_RPDF_F, INIT_NS_HIGH,
-    ADD_NS_HIGH, ADD_DITHER_RPDF_F, UPDATE_ERROR_HIGH);
-
-MAKE_QUANTIZE_FUNC_F (float_tpdf_error_feedback, INIT_DITHER_TPDF_F,
-    INIT_NS_ERROR_FEEDBACK, ADD_NS_ERROR_FEEDBACK, ADD_DITHER_TPDF_F,
-    UPDATE_ERROR_ERROR_FEEDBACK);
-MAKE_QUANTIZE_FUNC_F (float_tpdf_simple, INIT_DITHER_TPDF_F, INIT_NS_SIMPLE,
-    ADD_NS_SIMPLE, ADD_DITHER_TPDF_F, UPDATE_ERROR_SIMPLE);
-MAKE_QUANTIZE_FUNC_F (float_tpdf_medium, INIT_DITHER_TPDF_F, INIT_NS_MEDIUM,
-    ADD_NS_MEDIUM, ADD_DITHER_TPDF_F, UPDATE_ERROR_MEDIUM);
-MAKE_QUANTIZE_FUNC_F (float_tpdf_high, INIT_DITHER_TPDF_F, INIT_NS_HIGH,
-    ADD_NS_HIGH, ADD_DITHER_TPDF_F, UPDATE_ERROR_HIGH);
-
-MAKE_QUANTIZE_FUNC_F (float_tpdf_hf_error_feedback, INIT_DITHER_TPDF_HF_F,
-    INIT_NS_ERROR_FEEDBACK, ADD_NS_ERROR_FEEDBACK, ADD_DITHER_TPDF_HF_F,
-    UPDATE_ERROR_ERROR_FEEDBACK);
-MAKE_QUANTIZE_FUNC_F (float_tpdf_hf_simple, INIT_DITHER_TPDF_HF_F,
-    INIT_NS_SIMPLE, ADD_NS_SIMPLE, ADD_DITHER_TPDF_HF_F, UPDATE_ERROR_SIMPLE);
-MAKE_QUANTIZE_FUNC_F (float_tpdf_hf_medium, INIT_DITHER_TPDF_HF_F,
-    INIT_NS_MEDIUM, ADD_NS_MEDIUM, ADD_DITHER_TPDF_HF_F, UPDATE_ERROR_MEDIUM);
-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 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),
-  (AudioConvertQuantize) MAKE_QUANTIZE_FUNC_NAME (float_none_high),
-  (AudioConvertQuantize) MAKE_QUANTIZE_FUNC_NAME (float_rpdf_error_feedback),
-  (AudioConvertQuantize) MAKE_QUANTIZE_FUNC_NAME (float_rpdf_simple),
-  (AudioConvertQuantize) MAKE_QUANTIZE_FUNC_NAME (float_rpdf_medium),
-  (AudioConvertQuantize) MAKE_QUANTIZE_FUNC_NAME (float_rpdf_high),
-  (AudioConvertQuantize) MAKE_QUANTIZE_FUNC_NAME (float_tpdf_error_feedback),
-  (AudioConvertQuantize) MAKE_QUANTIZE_FUNC_NAME (float_tpdf_simple),
-  (AudioConvertQuantize) MAKE_QUANTIZE_FUNC_NAME (float_tpdf_medium),
-  (AudioConvertQuantize) MAKE_QUANTIZE_FUNC_NAME (float_tpdf_high),
-  (AudioConvertQuantize) MAKE_QUANTIZE_FUNC_NAME (float_tpdf_hf_error_feedback),
-  (AudioConvertQuantize) MAKE_QUANTIZE_FUNC_NAME (float_tpdf_hf_simple),
-  (AudioConvertQuantize) MAKE_QUANTIZE_FUNC_NAME (float_tpdf_hf_medium),
-  (AudioConvertQuantize) MAKE_QUANTIZE_FUNC_NAME (float_tpdf_hf_high)
-};
-
-static void
-gst_audio_quantize_setup_noise_shaping (AudioConvertCtx * ctx)
-{
-  switch (ctx->ns) {
-    case NOISE_SHAPING_HIGH:{
-      ctx->error_buf = g_new0 (gdouble, ctx->out.channels * 8);
-      break;
-    }
-    case NOISE_SHAPING_MEDIUM:{
-      ctx->error_buf = g_new0 (gdouble, ctx->out.channels * 5);
-      break;
-    }
-    case NOISE_SHAPING_SIMPLE:{
-      ctx->error_buf = g_new0 (gdouble, ctx->out.channels * 2);
-      break;
-    }
-    case NOISE_SHAPING_ERROR_FEEDBACK:
-      ctx->error_buf = g_new0 (gdouble, ctx->out.channels);
-      break;
-    case NOISE_SHAPING_NONE:
-    default:
-      ctx->error_buf = NULL;
-      break;
-  }
-  return;
-}
-
-static void
-gst_audio_quantize_free_noise_shaping (AudioConvertCtx * ctx)
-{
-  switch (ctx->ns) {
-    case NOISE_SHAPING_HIGH:
-    case NOISE_SHAPING_MEDIUM:
-    case NOISE_SHAPING_SIMPLE:
-    case NOISE_SHAPING_ERROR_FEEDBACK:
-    case NOISE_SHAPING_NONE:
-    default:
-      break;
-  }
-
-  g_free (ctx->error_buf);
-  ctx->error_buf = NULL;
-  return;
-}
-
-static void
-gst_audio_quantize_setup_dither (AudioConvertCtx * ctx)
-{
-  switch (ctx->dither) {
-    case DITHER_TPDF_HF:
-      if (GST_AUDIO_FORMAT_INFO_IS_INTEGER (ctx->out.finfo))
-        ctx->last_random = g_new0 (gint32, ctx->out.channels);
-      else
-        ctx->last_random = g_new0 (gdouble, ctx->out.channels);
-      break;
-    case DITHER_RPDF:
-    case DITHER_TPDF:
-      ctx->last_random = NULL;
-      break;
-    case DITHER_NONE:
-    default:
-      ctx->last_random = NULL;
-      break;
-  }
-  return;
-}
-
-static void
-gst_audio_quantize_free_dither (AudioConvertCtx * ctx)
-{
-  g_free (ctx->last_random);
-
-  return;
-}
-
-static void
-gst_audio_quantize_setup_quantize_func (AudioConvertCtx * ctx)
-{
-  gint index = 0;
-
-  if (!GST_AUDIO_FORMAT_INFO_IS_INTEGER (ctx->out.finfo)) {
-    ctx->quantize = NULL;
-    return;
-  }
-
-  if (ctx->ns == NOISE_SHAPING_NONE) {
-    index += ctx->dither;
-  } else {
-    index += 4 + (4 * ctx->dither);
-    index += ctx->ns - 1;
-  }
-
-  ctx->quantize = quantize_funcs[index];
-}
-
-gboolean
-gst_audio_quantize_setup (AudioConvertCtx * ctx)
-{
-  gst_audio_quantize_setup_dither (ctx);
-  gst_audio_quantize_setup_noise_shaping (ctx);
-  gst_audio_quantize_setup_quantize_func (ctx);
-
-  return TRUE;
-}
-
-void
-gst_audio_quantize_free (AudioConvertCtx * ctx)
-{
-  gst_audio_quantize_free_dither (ctx);
-  gst_audio_quantize_free_noise_shaping (ctx);
-}
diff --git a/gst/audioconvert/gstaudioquantize.h b/gst/audioconvert/gstaudioquantize.h
deleted file mode 100644
index e5d0708..0000000
--- a/gst/audioconvert/gstaudioquantize.h
+++ /dev/null
@@ -1,34 +0,0 @@
-/* GStreamer
- * Copyright (C) 2007 Sebastian Dröge <slomo@circular-chaos.org>
- *
- * gstaudioquantize.h: quantizes audio to the target format and optionally
- *                     applies dithering and noise shaping.
- *
- * 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 "audioconvert.h"
-
-#ifndef __GST_AUDIO_QUANTIZE_H__
-#define __GST_AUDIO_QUANTIZE_H__
-
-gboolean gst_audio_quantize_setup (AudioConvertCtx * ctx);
-void gst_audio_quantize_reset (AudioConvertCtx * ctx);
-void gst_audio_quantize_free (AudioConvertCtx * ctx);
-
-
-#endif /* __GST_AUDIO_QUANTIZE_H__ */
diff --git a/gst/audioconvert/gstchannelmix.c b/gst/audioconvert/gstchannelmix.c
deleted file mode 100644
index f144c20..0000000
--- a/gst/audioconvert/gstchannelmix.c
+++ /dev/null
@@ -1,783 +0,0 @@
-/* GStreamer
- * Copyright (C) 2004 Ronald Bultje <rbultje@ronald.bitfreak.net>
- * Copyright (C) 2008 Sebastian Dröge <slomo@circular-chaos.org>
- *
- * gstchannelmix.c: setup of channel conversion matrices
- *
- * 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 <math.h>
-#include <string.h>
-
-#include "gstchannelmix.h"
-
-#define INT_MATRIX_FACTOR_EXPONENT 10
-
-/*
- * Channel matrix functions.
- */
-
-void
-gst_channel_mix_unset_matrix (AudioConvertCtx * this)
-{
-  gint i;
-
-  /* don't access if nothing there */
-  if (!this->matrix)
-    return;
-
-  /* free */
-  for (i = 0; i < this->in.channels; i++)
-    g_free (this->matrix[i]);
-  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;
-}
-
-/*
- * Detect and fill in identical channels. E.g.
- * forward the left/right front channels in a
- * 5.1 to 2.0 conversion.
- */
-
-static void
-gst_channel_mix_fill_identical (AudioConvertCtx * this)
-{
-  gint ci, co;
-
-  /* Apart from the compatible channel assignments, we can also have
-   * same channel assignments. This is much simpler, we simply copy
-   * the value from source to dest! */
-  for (co = 0; co < this->out.channels; co++) {
-    /* find a channel in input with same position */
-    for (ci = 0; ci < this->in.channels; ci++) {
-      if (this->in.position[ci] == this->out.position[co]) {
-        this->matrix[ci][co] = 1.0;
-      }
-    }
-  }
-}
-
-/*
- * Detect and fill in compatible channels. E.g.
- * forward left/right front to mono (or the other
- * way around) when going from 2.0 to 1.0.
- */
-
-static void
-gst_channel_mix_fill_compatible (AudioConvertCtx * this)
-{
-  /* Conversions from one-channel to compatible two-channel configs */
-  struct
-  {
-    GstAudioChannelPosition pos1[2];
-    GstAudioChannelPosition pos2[1];
-  } conv[] = {
-    /* front: mono <-> stereo */
-    { {
-    GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT,
-            GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT}, {
-    GST_AUDIO_CHANNEL_POSITION_MONO}},
-        /* front center: 2 <-> 1 */
-    { {
-    GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT_OF_CENTER,
-            GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT_OF_CENTER}, {
-    GST_AUDIO_CHANNEL_POSITION_FRONT_CENTER}},
-        /* rear: 2 <-> 1 */
-    { {
-    GST_AUDIO_CHANNEL_POSITION_REAR_LEFT,
-            GST_AUDIO_CHANNEL_POSITION_REAR_RIGHT}, {
-    GST_AUDIO_CHANNEL_POSITION_REAR_CENTER}}, { {
-    GST_AUDIO_CHANNEL_POSITION_INVALID}}
-  };
-  gint c;
-
-  /* conversions from compatible (but not the same) channel schemes */
-  for (c = 0; conv[c].pos1[0] != GST_AUDIO_CHANNEL_POSITION_INVALID; c++) {
-    gint pos1_0 = -1, pos1_1 = -1, pos1_2 = -1;
-    gint pos2_0 = -1, pos2_1 = -1, pos2_2 = -1;
-    gint n;
-
-    for (n = 0; n < this->in.channels; n++) {
-      if (this->in.position[n] == conv[c].pos1[0])
-        pos1_0 = n;
-      else if (this->in.position[n] == conv[c].pos1[1])
-        pos1_1 = n;
-      else if (this->in.position[n] == conv[c].pos2[0])
-        pos1_2 = n;
-    }
-    for (n = 0; n < this->out.channels; n++) {
-      if (this->out.position[n] == conv[c].pos1[0])
-        pos2_0 = n;
-      else if (this->out.position[n] == conv[c].pos1[1])
-        pos2_1 = n;
-      else if (this->out.position[n] == conv[c].pos2[0])
-        pos2_2 = n;
-    }
-
-    /* The general idea here is to fill in channels from the same position
-     * as good as possible. This means mixing left<->center and right<->center.
-     */
-
-    /* left -> center */
-    if (pos1_0 != -1 && pos1_2 == -1 && pos2_0 == -1 && pos2_2 != -1)
-      this->matrix[pos1_0][pos2_2] = 1.0;
-    else if (pos1_0 != -1 && pos1_2 != -1 && pos2_0 == -1 && pos2_2 != -1)
-      this->matrix[pos1_0][pos2_2] = 0.5;
-    else if (pos1_0 != -1 && pos1_2 == -1 && pos2_0 != -1 && pos2_2 != -1)
-      this->matrix[pos1_0][pos2_2] = 1.0;
-
-    /* right -> center */
-    if (pos1_1 != -1 && pos1_2 == -1 && pos2_1 == -1 && pos2_2 != -1)
-      this->matrix[pos1_1][pos2_2] = 1.0;
-    else if (pos1_1 != -1 && pos1_2 != -1 && pos2_1 == -1 && pos2_2 != -1)
-      this->matrix[pos1_1][pos2_2] = 0.5;
-    else if (pos1_1 != -1 && pos1_2 == -1 && pos2_1 != -1 && pos2_2 != -1)
-      this->matrix[pos1_1][pos2_2] = 1.0;
-
-    /* center -> left */
-    if (pos1_2 != -1 && pos1_0 == -1 && pos2_2 == -1 && pos2_0 != -1)
-      this->matrix[pos1_2][pos2_0] = 1.0;
-    else if (pos1_2 != -1 && pos1_0 != -1 && pos2_2 == -1 && pos2_0 != -1)
-      this->matrix[pos1_2][pos2_0] = 0.5;
-    else if (pos1_2 != -1 && pos1_0 == -1 && pos2_2 != -1 && pos2_0 != -1)
-      this->matrix[pos1_2][pos2_0] = 1.0;
-
-    /* center -> right */
-    if (pos1_2 != -1 && pos1_1 == -1 && pos2_2 == -1 && pos2_1 != -1)
-      this->matrix[pos1_2][pos2_1] = 1.0;
-    else if (pos1_2 != -1 && pos1_1 != -1 && pos2_2 == -1 && pos2_1 != -1)
-      this->matrix[pos1_2][pos2_1] = 0.5;
-    else if (pos1_2 != -1 && pos1_1 == -1 && pos2_2 != -1 && pos2_1 != -1)
-      this->matrix[pos1_2][pos2_1] = 1.0;
-  }
-}
-
-/*
- * Detect and fill in channels not handled by the
- * above two, e.g. center to left/right front in
- * 5.1 to 2.0 (or the other way around).
- *
- * Unfortunately, limited to static conversions
- * for now.
- */
-
-static void
-gst_channel_mix_detect_pos (GstAudioInfo * info,
-    gint * f, gboolean * has_f,
-    gint * c, gboolean * has_c, gint * r, gboolean * has_r,
-    gint * s, gboolean * has_s, gint * b, gboolean * has_b)
-{
-  gint n;
-
-  for (n = 0; n < info->channels; n++) {
-    switch (info->position[n]) {
-      case GST_AUDIO_CHANNEL_POSITION_MONO:
-        f[1] = n;
-        *has_f = TRUE;
-        break;
-      case GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT:
-        f[0] = n;
-        *has_f = TRUE;
-        break;
-      case GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT:
-        f[2] = n;
-        *has_f = TRUE;
-        break;
-      case GST_AUDIO_CHANNEL_POSITION_FRONT_CENTER:
-        c[1] = n;
-        *has_c = TRUE;
-        break;
-      case GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT_OF_CENTER:
-        c[0] = n;
-        *has_c = TRUE;
-        break;
-      case GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT_OF_CENTER:
-        c[2] = n;
-        *has_c = TRUE;
-        break;
-      case GST_AUDIO_CHANNEL_POSITION_REAR_CENTER:
-        r[1] = n;
-        *has_r = TRUE;
-        break;
-      case GST_AUDIO_CHANNEL_POSITION_REAR_LEFT:
-        r[0] = n;
-        *has_r = TRUE;
-        break;
-      case GST_AUDIO_CHANNEL_POSITION_REAR_RIGHT:
-        r[2] = n;
-        *has_r = TRUE;
-        break;
-      case GST_AUDIO_CHANNEL_POSITION_SIDE_LEFT:
-        s[0] = n;
-        *has_s = TRUE;
-        break;
-      case GST_AUDIO_CHANNEL_POSITION_SIDE_RIGHT:
-        s[2] = n;
-        *has_s = TRUE;
-        break;
-      case GST_AUDIO_CHANNEL_POSITION_LFE1:
-        *has_b = TRUE;
-        b[1] = n;
-        break;
-      default:
-        break;
-    }
-  }
-}
-
-static void
-gst_channel_mix_fill_one_other (gfloat ** matrix,
-    GstAudioInfo * from_info, gint * from_idx,
-    GstAudioInfo * to_info, gint * to_idx, gfloat ratio)
-{
-
-  /* src & dst have center => passthrough */
-  if (from_idx[1] != -1 && to_idx[1] != -1) {
-    matrix[from_idx[1]][to_idx[1]] = ratio;
-  }
-
-  /* src & dst have left => passthrough */
-  if (from_idx[0] != -1 && to_idx[0] != -1) {
-    matrix[from_idx[0]][to_idx[0]] = ratio;
-  }
-
-  /* src & dst have right => passthrough */
-  if (from_idx[2] != -1 && to_idx[2] != -1) {
-    matrix[from_idx[2]][to_idx[2]] = ratio;
-  }
-
-  /* src has left & dst has center => put into center */
-  if (from_idx[0] != -1 && to_idx[1] != -1 && from_idx[1] != -1) {
-    matrix[from_idx[0]][to_idx[1]] = 0.5 * ratio;
-  } else if (from_idx[0] != -1 && to_idx[1] != -1 && from_idx[1] == -1) {
-    matrix[from_idx[0]][to_idx[1]] = ratio;
-  }
-
-  /* src has right & dst has center => put into center */
-  if (from_idx[2] != -1 && to_idx[1] != -1 && from_idx[1] != -1) {
-    matrix[from_idx[2]][to_idx[1]] = 0.5 * ratio;
-  } else if (from_idx[2] != -1 && to_idx[1] != -1 && from_idx[1] == -1) {
-    matrix[from_idx[2]][to_idx[1]] = ratio;
-  }
-
-  /* src has center & dst has left => passthrough */
-  if (from_idx[1] != -1 && to_idx[0] != -1 && from_idx[0] != -1) {
-    matrix[from_idx[1]][to_idx[0]] = 0.5 * ratio;
-  } else if (from_idx[1] != -1 && to_idx[0] != -1 && from_idx[0] == -1) {
-    matrix[from_idx[1]][to_idx[0]] = ratio;
-  }
-
-  /* src has center & dst has right => passthrough */
-  if (from_idx[1] != -1 && to_idx[2] != -1 && from_idx[2] != -1) {
-    matrix[from_idx[1]][to_idx[2]] = 0.5 * ratio;
-  } else if (from_idx[1] != -1 && to_idx[2] != -1 && from_idx[2] == -1) {
-    matrix[from_idx[1]][to_idx[2]] = ratio;
-  }
-}
-
-#define RATIO_CENTER_FRONT (1.0 / sqrt (2.0))
-#define RATIO_CENTER_SIDE (1.0 / 2.0)
-#define RATIO_CENTER_REAR (1.0 / sqrt (8.0))
-
-#define RATIO_FRONT_CENTER (1.0 / sqrt (2.0))
-#define RATIO_FRONT_SIDE (1.0 / sqrt (2.0))
-#define RATIO_FRONT_REAR (1.0 / 2.0)
-
-#define RATIO_SIDE_CENTER (1.0 / 2.0)
-#define RATIO_SIDE_FRONT (1.0 / sqrt (2.0))
-#define RATIO_SIDE_REAR (1.0 / sqrt (2.0))
-
-#define RATIO_CENTER_BASS (1.0 / sqrt (2.0))
-#define RATIO_FRONT_BASS (1.0)
-#define RATIO_SIDE_BASS (1.0 / sqrt (2.0))
-#define RATIO_REAR_BASS (1.0 / sqrt (2.0))
-
-static void
-gst_channel_mix_fill_others (AudioConvertCtx * this)
-{
-  gboolean in_has_front = FALSE, out_has_front = FALSE,
-      in_has_center = FALSE, out_has_center = FALSE,
-      in_has_rear = FALSE, out_has_rear = FALSE,
-      in_has_side = FALSE, out_has_side = FALSE,
-      in_has_bass = FALSE, out_has_bass = FALSE;
-  /* LEFT, RIGHT, MONO */
-  gint in_f[3] = { -1, -1, -1 };
-  gint out_f[3] = { -1, -1, -1 };
-  /* LOC, ROC, CENTER */
-  gint in_c[3] = { -1, -1, -1 };
-  gint out_c[3] = { -1, -1, -1 };
-  /* RLEFT, RRIGHT, RCENTER */
-  gint in_r[3] = { -1, -1, -1 };
-  gint out_r[3] = { -1, -1, -1 };
-  /* SLEFT, INVALID, SRIGHT */
-  gint in_s[3] = { -1, -1, -1 };
-  gint out_s[3] = { -1, -1, -1 };
-  /* INVALID, LFE, INVALID */
-  gint in_b[3] = { -1, -1, -1 };
-  gint out_b[3] = { -1, -1, -1 };
-
-  /* First see where (if at all) the various channels from/to
-   * which we want to convert are located in our matrix/array. */
-  gst_channel_mix_detect_pos (&this->in,
-      in_f, &in_has_front,
-      in_c, &in_has_center, in_r, &in_has_rear,
-      in_s, &in_has_side, in_b, &in_has_bass);
-  gst_channel_mix_detect_pos (&this->out,
-      out_f, &out_has_front,
-      out_c, &out_has_center, out_r, &out_has_rear,
-      out_s, &out_has_side, out_b, &out_has_bass);
-
-  /* The general idea here is:
-   * - if the source has a channel that the destination doesn't have mix
-   *   it into the nearest available destination channel
-   * - if the destination has a channel that the source doesn't have mix
-   *   the nearest source channel into the destination channel
-   *
-   * The ratio for the mixing becomes lower as the distance between the
-   * channels gets larger
-   */
-
-  /* center <-> front/side/rear */
-  if (!in_has_center && in_has_front && out_has_center) {
-    gst_channel_mix_fill_one_other (this->matrix,
-        &this->in, in_f, &this->out, out_c, RATIO_CENTER_FRONT);
-  } else if (!in_has_center && !in_has_front && in_has_side && out_has_center) {
-    gst_channel_mix_fill_one_other (this->matrix,
-        &this->in, in_s, &this->out, out_c, RATIO_CENTER_SIDE);
-  } else if (!in_has_center && !in_has_front && !in_has_side && in_has_rear
-      && out_has_center) {
-    gst_channel_mix_fill_one_other (this->matrix, &this->in, in_r, &this->out,
-        out_c, RATIO_CENTER_REAR);
-  } else if (in_has_center && !out_has_center && out_has_front) {
-    gst_channel_mix_fill_one_other (this->matrix,
-        &this->in, in_c, &this->out, out_f, RATIO_CENTER_FRONT);
-  } else if (in_has_center && !out_has_center && !out_has_front && out_has_side) {
-    gst_channel_mix_fill_one_other (this->matrix,
-        &this->in, in_c, &this->out, out_s, RATIO_CENTER_SIDE);
-  } else if (in_has_center && !out_has_center && !out_has_front && !out_has_side
-      && out_has_rear) {
-    gst_channel_mix_fill_one_other (this->matrix, &this->in, in_c, &this->out,
-        out_r, RATIO_CENTER_REAR);
-  }
-
-  /* front <-> center/side/rear */
-  if (!in_has_front && in_has_center && !in_has_side && out_has_front) {
-    gst_channel_mix_fill_one_other (this->matrix,
-        &this->in, in_c, &this->out, out_f, RATIO_CENTER_FRONT);
-  } else if (!in_has_front && !in_has_center && in_has_side && out_has_front) {
-    gst_channel_mix_fill_one_other (this->matrix,
-        &this->in, in_s, &this->out, out_f, RATIO_FRONT_SIDE);
-  } else if (!in_has_front && in_has_center && in_has_side && out_has_front) {
-    gst_channel_mix_fill_one_other (this->matrix,
-        &this->in, in_c, &this->out, out_f, 0.5 * RATIO_CENTER_FRONT);
-    gst_channel_mix_fill_one_other (this->matrix,
-        &this->in, in_s, &this->out, out_f, 0.5 * RATIO_FRONT_SIDE);
-  } else if (!in_has_front && !in_has_center && !in_has_side && in_has_rear
-      && out_has_front) {
-    gst_channel_mix_fill_one_other (this->matrix, &this->in, in_r, &this->out,
-        out_f, RATIO_FRONT_REAR);
-  } else if (in_has_front && out_has_center && !out_has_side && !out_has_front) {
-    gst_channel_mix_fill_one_other (this->matrix,
-        &this->in, in_f, &this->out, out_c, RATIO_CENTER_FRONT);
-  } else if (in_has_front && !out_has_center && out_has_side && !out_has_front) {
-    gst_channel_mix_fill_one_other (this->matrix,
-        &this->in, in_f, &this->out, out_s, RATIO_FRONT_SIDE);
-  } else if (in_has_front && out_has_center && out_has_side && !out_has_front) {
-    gst_channel_mix_fill_one_other (this->matrix,
-        &this->in, in_f, &this->out, out_c, 0.5 * RATIO_CENTER_FRONT);
-    gst_channel_mix_fill_one_other (this->matrix,
-        &this->in, in_f, &this->out, out_s, 0.5 * RATIO_FRONT_SIDE);
-  } else if (in_has_front && !out_has_center && !out_has_side && !out_has_front
-      && out_has_rear) {
-    gst_channel_mix_fill_one_other (this->matrix, &this->in, in_f, &this->out,
-        out_r, RATIO_FRONT_REAR);
-  }
-
-  /* side <-> center/front/rear */
-  if (!in_has_side && in_has_front && !in_has_rear && out_has_side) {
-    gst_channel_mix_fill_one_other (this->matrix,
-        &this->in, in_f, &this->out, out_s, RATIO_FRONT_SIDE);
-  } else if (!in_has_side && !in_has_front && in_has_rear && out_has_side) {
-    gst_channel_mix_fill_one_other (this->matrix,
-        &this->in, in_r, &this->out, out_s, RATIO_SIDE_REAR);
-  } else if (!in_has_side && in_has_front && in_has_rear && out_has_side) {
-    gst_channel_mix_fill_one_other (this->matrix,
-        &this->in, in_f, &this->out, out_s, 0.5 * RATIO_FRONT_SIDE);
-    gst_channel_mix_fill_one_other (this->matrix,
-        &this->in, in_r, &this->out, out_s, 0.5 * RATIO_SIDE_REAR);
-  } else if (!in_has_side && !in_has_front && !in_has_rear && in_has_center
-      && out_has_side) {
-    gst_channel_mix_fill_one_other (this->matrix, &this->in, in_c, &this->out,
-        out_s, RATIO_CENTER_SIDE);
-  } else if (in_has_side && out_has_front && !out_has_rear && !out_has_side) {
-    gst_channel_mix_fill_one_other (this->matrix,
-        &this->in, in_s, &this->out, out_f, RATIO_FRONT_SIDE);
-  } else if (in_has_side && !out_has_front && out_has_rear && !out_has_side) {
-    gst_channel_mix_fill_one_other (this->matrix,
-        &this->in, in_s, &this->out, out_r, RATIO_SIDE_REAR);
-  } else if (in_has_side && out_has_front && out_has_rear && !out_has_side) {
-    gst_channel_mix_fill_one_other (this->matrix,
-        &this->in, in_s, &this->out, out_f, 0.5 * RATIO_FRONT_SIDE);
-    gst_channel_mix_fill_one_other (this->matrix,
-        &this->in, in_s, &this->out, out_r, 0.5 * RATIO_SIDE_REAR);
-  } else if (in_has_side && !out_has_front && !out_has_rear && out_has_center
-      && !out_has_side) {
-    gst_channel_mix_fill_one_other (this->matrix, &this->in, in_s, &this->out,
-        out_c, RATIO_CENTER_SIDE);
-  }
-
-  /* rear <-> center/front/side */
-  if (!in_has_rear && in_has_side && out_has_rear) {
-    gst_channel_mix_fill_one_other (this->matrix,
-        &this->in, in_s, &this->out, out_r, RATIO_SIDE_REAR);
-  } else if (!in_has_rear && !in_has_side && in_has_front && out_has_rear) {
-    gst_channel_mix_fill_one_other (this->matrix,
-        &this->in, in_f, &this->out, out_r, RATIO_FRONT_REAR);
-  } else if (!in_has_rear && !in_has_side && !in_has_front && in_has_center
-      && out_has_rear) {
-    gst_channel_mix_fill_one_other (this->matrix, &this->in, in_c, &this->out,
-        out_r, RATIO_CENTER_REAR);
-  } else if (in_has_rear && !out_has_rear && out_has_side) {
-    gst_channel_mix_fill_one_other (this->matrix,
-        &this->in, in_r, &this->out, out_s, RATIO_SIDE_REAR);
-  } else if (in_has_rear && !out_has_rear && !out_has_side && out_has_front) {
-    gst_channel_mix_fill_one_other (this->matrix,
-        &this->in, in_r, &this->out, out_f, RATIO_FRONT_REAR);
-  } else if (in_has_rear && !out_has_rear && !out_has_side && !out_has_front
-      && out_has_center) {
-    gst_channel_mix_fill_one_other (this->matrix, &this->in, in_r, &this->out,
-        out_c, RATIO_CENTER_REAR);
-  }
-
-  /* bass <-> any */
-  if (in_has_bass && !out_has_bass) {
-    if (out_has_center) {
-      gst_channel_mix_fill_one_other (this->matrix,
-          &this->in, in_b, &this->out, out_c, RATIO_CENTER_BASS);
-    }
-    if (out_has_front) {
-      gst_channel_mix_fill_one_other (this->matrix,
-          &this->in, in_b, &this->out, out_f, RATIO_FRONT_BASS);
-    }
-    if (out_has_side) {
-      gst_channel_mix_fill_one_other (this->matrix,
-          &this->in, in_b, &this->out, out_s, RATIO_SIDE_BASS);
-    }
-    if (out_has_rear) {
-      gst_channel_mix_fill_one_other (this->matrix,
-          &this->in, in_b, &this->out, out_r, RATIO_REAR_BASS);
-    }
-  } else if (!in_has_bass && out_has_bass) {
-    if (in_has_center) {
-      gst_channel_mix_fill_one_other (this->matrix,
-          &this->in, in_c, &this->out, out_b, RATIO_CENTER_BASS);
-    }
-    if (in_has_front) {
-      gst_channel_mix_fill_one_other (this->matrix,
-          &this->in, in_f, &this->out, out_b, RATIO_FRONT_BASS);
-    }
-    if (in_has_side) {
-      gst_channel_mix_fill_one_other (this->matrix,
-          &this->in, in_s, &this->out, out_b, RATIO_REAR_BASS);
-    }
-    if (in_has_rear) {
-      gst_channel_mix_fill_one_other (this->matrix,
-          &this->in, in_r, &this->out, out_b, RATIO_REAR_BASS);
-    }
-  }
-}
-
-/*
- * Normalize output values.
- */
-
-static void
-gst_channel_mix_fill_normalize (AudioConvertCtx * this)
-{
-  gfloat sum, top = 0;
-  gint i, j;
-
-  for (j = 0; j < this->out.channels; j++) {
-    /* calculate sum */
-    sum = 0.0;
-    for (i = 0; i < this->in.channels; i++) {
-      sum += fabs (this->matrix[i][j]);
-    }
-    if (sum > top) {
-      top = sum;
-    }
-  }
-
-  /* normalize to this */
-  if (top == 0.0)
-    return;
-
-  for (j = 0; j < this->out.channels; j++) {
-    for (i = 0; i < this->in.channels; i++) {
-      this->matrix[i][j] /= top;
-    }
-  }
-}
-
-static gboolean
-gst_channel_mix_fill_special (AudioConvertCtx * this)
-{
-  GstAudioInfo *in = &this->in, *out = &this->out;
-
-  /* Special, standard conversions here */
-
-  /* Mono<->Stereo, just a fast-path */
-  if (in->channels == 2 && out->channels == 1 &&
-      ((in->position[0] == GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT &&
-              in->position[1] == GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT) ||
-          (in->position[0] == GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT &&
-              in->position[1] == GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT)) &&
-      out->position[0] == GST_AUDIO_CHANNEL_POSITION_MONO) {
-    this->matrix[0][0] = 0.5;
-    this->matrix[1][0] = 0.5;
-    return TRUE;
-  } else if (in->channels == 1 && out->channels == 2 &&
-      ((out->position[0] == GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT &&
-              out->position[1] == GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT) ||
-          (out->position[0] == GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT &&
-              out->position[1] == GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT)) &&
-      in->position[0] == GST_AUDIO_CHANNEL_POSITION_MONO) {
-    this->matrix[0][0] = 1.0;
-    this->matrix[0][1] = 1.0;
-    return TRUE;
-  }
-
-  /* TODO: 5.1 <-> Stereo and other standard conversions */
-
-  return FALSE;
-}
-
-/*
- * Automagically generate conversion matrix.
- */
-
-static void
-gst_channel_mix_fill_matrix (AudioConvertCtx * this)
-{
-  if (gst_channel_mix_fill_special (this))
-    return;
-
-  gst_channel_mix_fill_identical (this);
-
-  if (!GST_AUDIO_INFO_IS_UNPOSITIONED (&this->in)) {
-    gst_channel_mix_fill_compatible (this);
-    gst_channel_mix_fill_others (this);
-    gst_channel_mix_fill_normalize (this);
-  }
-}
-
-/* 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)
-{
-  gint i, j;
-
-  /* don't lose memory */
-  gst_channel_mix_unset_matrix (this);
-
-  /* temp storage */
-  if (GST_AUDIO_FORMAT_INFO_IS_INTEGER (this->in.finfo) ||
-      GST_AUDIO_FORMAT_INFO_IS_INTEGER (this->out.finfo)) {
-    this->tmp = (gpointer) g_new (gint32, this->out.channels);
-  } else {
-    this->tmp = (gpointer) g_new (gdouble, this->out.channels);
-  }
-
-  /* allocate */
-  this->matrix = g_new0 (gfloat *, this->in.channels);
-  for (i = 0; i < this->in.channels; i++) {
-    this->matrix[i] = g_new (gfloat, this->out.channels);
-    for (j = 0; j < this->out.channels; j++)
-      this->matrix[i][j] = 0.;
-  }
-
-  /* setup the matrix' internal values */
-  gst_channel_mix_fill_matrix (this);
-
-  gst_channel_mix_setup_matrix_int(this);
-
-#ifndef GST_DISABLE_GST_DEBUG
-  /* debug */
-  {
-    GString *s;
-    s = g_string_new ("Matrix for");
-    g_string_append_printf (s, " %d -> %d: ",
-        this->in.channels, this->out.channels);
-    g_string_append (s, "{");
-    for (i = 0; i < this->in.channels; i++) {
-      if (i != 0)
-        g_string_append (s, ",");
-      g_string_append (s, " {");
-      for (j = 0; j < this->out.channels; j++) {
-        if (j != 0)
-          g_string_append (s, ",");
-        g_string_append_printf (s, " %f", this->matrix[i][j]);
-      }
-      g_string_append (s, " }");
-    }
-    g_string_append (s, " }");
-    GST_DEBUG ("%s", s->str);
-    g_string_free (s, TRUE);
-  }
-#endif
-}
-
-gboolean
-gst_channel_mix_passthrough (AudioConvertCtx * this)
-{
-  gint i;
-  guint64 in_mask, out_mask;
-
-  /* only NxN matrices can be identities */
-  if (this->in.channels != this->out.channels)
-    return FALSE;
-
-  /* passthrough for 1->1 channels (MONO and NONE position are the same here) */
-  if (this->in.channels == 1 && this->out.channels == 1)
-    return TRUE;
-
-  /* passthrough if both channel masks are the same */
-  in_mask = out_mask = 0;
-  for (i = 0; i < this->in.channels; i++) {
-    in_mask |= this->in.position[i];
-    out_mask |= this->out.position[i];
-  }
-
-  return in_mask == out_mask;
-}
-
-/* IMPORTANT: out_data == in_data is possible, make sure to not overwrite data
- * you might need later on! */
-void
-gst_channel_mix_mix_int (AudioConvertCtx * this,
-    gint32 * in_data, gint32 * out_data, gint samples)
-{
-  gint in, out, n;
-  gint64 res;
-  gboolean backwards;
-  gint inchannels, outchannels;
-  gint32 *tmp = (gint32 *) this->tmp;
-
-  g_return_if_fail (this->matrix != NULL);
-  g_return_if_fail (this->tmp != NULL);
-
-  inchannels = this->in.channels;
-  outchannels = this->out.channels;
-  backwards = outchannels > inchannels;
-
-  /* FIXME: use orc here? */
-  for (n = (backwards ? samples - 1 : 0); n < samples && n >= 0;
-      backwards ? n-- : n++) {
-    for (out = 0; out < outchannels; out++) {
-      /* convert */
-      res = 0;
-      for (in = 0; in < inchannels; in++) {
-        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;
-      else if (res > G_MAXINT32)
-        res = G_MAXINT32;
-      tmp[out] = res;
-    }
-    memcpy (&out_data[n * outchannels], this->tmp,
-        sizeof (gint32) * outchannels);
-  }
-}
-
-void
-gst_channel_mix_mix_float (AudioConvertCtx * this,
-    gdouble * in_data, gdouble * out_data, gint samples)
-{
-  gint in, out, n;
-  gdouble res;
-  gboolean backwards;
-  gint inchannels, outchannels;
-  gdouble *tmp = (gdouble *) this->tmp;
-
-  g_return_if_fail (this->matrix != NULL);
-  g_return_if_fail (this->tmp != NULL);
-
-  inchannels = this->in.channels;
-  outchannels = this->out.channels;
-  backwards = outchannels > inchannels;
-
-  /* FIXME: use liboil here? */
-  for (n = (backwards ? samples - 1 : 0); n < samples && n >= 0;
-      backwards ? n-- : n++) {
-    for (out = 0; out < outchannels; out++) {
-      /* convert */
-      res = 0.0;
-      for (in = 0; in < inchannels; in++) {
-        res += in_data[n * inchannels + in] * this->matrix[in][out];
-      }
-
-      /* clip (shouldn't we use doubles instead as intermediate format?) */
-      if (res < -1.0)
-        res = -1.0;
-      else if (res > 1.0)
-        res = 1.0;
-      tmp[out] = res;
-    }
-    memcpy (&out_data[n * outchannels], this->tmp,
-        sizeof (gdouble) * outchannels);
-  }
-}
diff --git a/gst/audioconvert/gstchannelmix.h b/gst/audioconvert/gstchannelmix.h
deleted file mode 100644
index 804203c..0000000
--- a/gst/audioconvert/gstchannelmix.h
+++ /dev/null
@@ -1,56 +0,0 @@
-/* GStreamer
- * Copyright (C) 2004 Ronald Bultje <rbultje@ronald.bitfreak.net>
- *
- * gstchannelmix.h: setup of channel conversion matrices
- *
- * 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_CHANNEL_MIX_H__
-#define __GST_CHANNEL_MIX_H__
-
-#include <gst/gst.h>
-#include "audioconvert.h"
-
-/*
- * Delete channel mixer matrix.
- */
-void            gst_channel_mix_unset_matrix    (AudioConvertCtx * this);
-
-/*
- * Setup channel mixer matrix.
- */
-void            gst_channel_mix_setup_matrix    (AudioConvertCtx * this);
-
-/*
- * Checks for passthrough (= identity matrix).
- */
-gboolean        gst_channel_mix_passthrough     (AudioConvertCtx * this);
-
-/*
- * Do actual mixing.
- */
-void            gst_channel_mix_mix_int         (AudioConvertCtx * this,
-                                                 gint32          * in_data,
-                                                 gint32          * out_data,
-                                                 gint              samples);
-
-void            gst_channel_mix_mix_float       (AudioConvertCtx * this,
-                                                 gdouble         * in_data,
-                                                 gdouble         * out_data,
-                                                 gint              samples);
-
-#endif /* __GST_CHANNEL_MIX_H__ */
diff --git a/gst/audioconvert/gstfastrandom.h b/gst/audioconvert/gstfastrandom.h
deleted file mode 100644
index deaa129..0000000
--- a/gst/audioconvert/gstfastrandom.h
+++ /dev/null
@@ -1,70 +0,0 @@
-/* GStreamer
- * Copyright (C) 2008 Sebastian Dröge <sebastian.droege@collabora.co.uk>
- *
- * gstfastrandom.h: Fast, bad PNRG
- *
- * 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 <glib.h>
-
-#ifndef __GST_FAST_RANDOM__
-#define __GST_FAST_RANDOM__
-
-/* transform [0..2^32] -> [0..1] */
-#define GST_RAND_DOUBLE_TRANSFORM 2.3283064365386962890625e-10
-
-/* This is the base function, implementing a linear congruential generator
- * and returning a pseudo random number between 0 and 2^32 - 1.
- */
-static inline guint32
-gst_fast_random_uint32 (void)
-{
-  static guint32 state = 0xdeadbeef;
-
-  return (state = state * 1103515245 + 12345);
-}
-
-static inline gint32
-gst_fast_random_int32 (void)
-{
-  return (gint32) gst_fast_random_uint32 ();
-}
-
-static inline gdouble
-gst_fast_random_double (void)
-{
-  gdouble ret;
-
-  ret = gst_fast_random_uint32 () * GST_RAND_DOUBLE_TRANSFORM;
-  ret = (ret + gst_fast_random_uint32 ()) * GST_RAND_DOUBLE_TRANSFORM;
-
-  if (ret >= 1.0)
-    return gst_fast_random_double ();
-
-  return ret;
-}
-
-static inline gdouble
-gst_fast_random_double_range (gdouble start, gdouble end)
-{
-  return gst_fast_random_double () * (end - start) + start;
-}
-
-#undef GST_RAND_DOUBLE_TRANSFORM
-
-#endif /* __GST_FAST_RANDOM__ */
-
diff --git a/gst/audioconvert/plugin.c b/gst/audioconvert/plugin.c
index 2a4ba9d..08b516d 100644
--- a/gst/audioconvert/plugin.c
+++ b/gst/audioconvert/plugin.c
@@ -25,8 +25,6 @@
 
 #include "plugin.h"
 
-#include "gstaudioconvertorc.h"
-
 static gboolean
 plugin_init (GstPlugin * plugin)
 {
diff --git a/gst/audioresample/gstaudioresample.c b/gst/audioresample/gstaudioresample.c
index 30825a6..7155c3c 100644
--- a/gst/audioresample/gstaudioresample.c
+++ b/gst/audioresample/gstaudioresample.c
@@ -135,6 +135,8 @@
     GstBuffer * inbuf, GstBuffer * outbuf);
 static gboolean gst_audio_resample_transform_meta (GstBaseTransform * trans,
     GstBuffer * outbuf, GstMeta * meta, GstBuffer * inbuf);
+static GstFlowReturn gst_audio_resample_submit_input_buffer (GstBaseTransform *
+    base, gboolean is_discont, GstBuffer * input);
 static gboolean gst_audio_resample_sink_event (GstBaseTransform * base,
     GstEvent * event);
 static gboolean gst_audio_resample_start (GstBaseTransform * base);
@@ -205,6 +207,8 @@
       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)->submit_input_buffer =
+      GST_DEBUG_FUNCPTR (gst_audio_resample_submit_input_buffer);
 
   GST_BASE_TRANSFORM_CLASS (klass)->passthrough_on_same_caps = TRUE;
 }
@@ -1267,6 +1271,25 @@
   return FALSE;
 }
 
+static GstFlowReturn
+gst_audio_resample_submit_input_buffer (GstBaseTransform * base,
+    gboolean is_discont, GstBuffer * input)
+{
+  GstAudioResample *resample = GST_AUDIO_RESAMPLE (base);
+
+  if (base->segment.format == GST_FORMAT_TIME) {
+    input =
+        gst_audio_buffer_clip (input, &base->segment, resample->inrate,
+        resample->channels * resample->width);
+
+    if (!input)
+      return GST_FLOW_OK;
+  }
+
+  return GST_BASE_TRANSFORM_CLASS (parent_class)->submit_input_buffer (base,
+      is_discont, input);
+}
+
 static gboolean
 gst_audio_resample_query (GstPad * pad, GstObject * parent, GstQuery * query)
 {
diff --git a/gst/audiotestsrc/gstaudiotestsrc.c b/gst/audiotestsrc/gstaudiotestsrc.c
index 894fa16..15cb4a3 100644
--- a/gst/audiotestsrc/gstaudiotestsrc.c
+++ b/gst/audiotestsrc/gstaudiotestsrc.c
@@ -74,13 +74,16 @@
   PROP_CAN_ACTIVATE_PULL
 };
 
-#if G_BYTE_ORDER == G_LITTLE_ENDIAN
-#define FORMAT_STR "{ S16LE, S32LE, F32LE, F64LE }"
-#define DEFAULT_FORMAT_STR "S16LE"
-#else
-#define FORMAT_STR "{ S16BE, S32BE, F32BE, F64BE }"
-#define DEFAULT_FORMAT_STR "S16BE"
-#endif
+#define FORMAT_STR  " { S16LE, S16BE, U16LE, U16BE, " \
+    "S24_32LE, S24_32BE, U24_32LE, U24_32BE, " \
+    "S32LE, S32BE, U32LE, U32BE, " \
+    "S24LE, S24BE, U24LE, U24BE, " \
+    "S20LE, S20BE, U20LE, U20BE, " \
+    "S18LE, S18BE, U18LE, U18BE, " \
+    "F32LE, F32BE, F64LE, F64BE, " \
+    "S8, U8 }"
+
+#define DEFAULT_FORMAT_STR GST_AUDIO_NE ("S16")
 
 static GstStaticPadTemplate gst_audio_test_src_src_template =
 GST_STATIC_PAD_TEMPLATE ("src",
@@ -89,7 +92,8 @@
     GST_STATIC_CAPS ("audio/x-raw, "
         "format = (string) " FORMAT_STR ", "
         "layout = (string) interleaved, "
-        "rate = (int) [ 1, MAX ], " "channels = (int) [ 1, 2]")
+        "rate = " GST_AUDIO_RATE_RANGE ", "
+        "channels = " GST_AUDIO_CHANNELS_RANGE)
     );
 
 #define gst_audio_test_src_parent_class parent_class
@@ -176,8 +180,9 @@
           GST_TYPE_AUDIO_TEST_SRC_WAVE, GST_AUDIO_TEST_SRC_WAVE_SINE,
           G_PARAM_READWRITE | GST_PARAM_CONTROLLABLE | G_PARAM_STATIC_STRINGS));
   g_object_class_install_property (gobject_class, PROP_FREQ,
-      g_param_spec_double ("freq", "Frequency", "Frequency of test signal",
-          0.0, 20000.0, DEFAULT_FREQ,
+      g_param_spec_double ("freq", "Frequency", "Frequency of test signal. "
+          "The sample rate needs to be at least 4 times higher.",
+          0.0, (gdouble) G_MAXINT / 4, DEFAULT_FREQ,
           G_PARAM_READWRITE | GST_PARAM_CONTROLLABLE | G_PARAM_STATIC_STRINGS));
   g_object_class_install_property (gobject_class, PROP_VOLUME,
       g_param_spec_double ("volume", "Volume", "Volume of test signal", 0.0,
@@ -251,6 +256,9 @@
   if (src->gen)
     g_rand_free (src->gen);
   src->gen = NULL;
+  g_free (src->tmp);
+  src->tmp = NULL;
+  src->tmpsize = 0;
 
   G_OBJECT_CLASS (parent_class)->finalize (object);
 }
@@ -260,6 +268,7 @@
 {
   GstAudioTestSrc *src = GST_AUDIO_TEST_SRC (bsrc);
   GstStructure *structure;
+  gint channels, rate;
 
   caps = gst_caps_make_writable (caps);
 
@@ -267,14 +276,21 @@
 
   GST_DEBUG_OBJECT (src, "fixating samplerate to %d", GST_AUDIO_DEF_RATE);
 
-  gst_structure_fixate_field_nearest_int (structure, "rate",
-      GST_AUDIO_DEF_RATE);
+  rate = MAX (GST_AUDIO_DEF_RATE, src->freq * 4);
+  gst_structure_fixate_field_nearest_int (structure, "rate", rate);
 
   gst_structure_fixate_field_string (structure, "format", DEFAULT_FORMAT_STR);
 
   /* fixate to mono unless downstream requires stereo, for backwards compat */
   gst_structure_fixate_field_nearest_int (structure, "channels", 1);
 
+  if (gst_structure_get_int (structure, "channels", &channels) && channels > 2) {
+    if (!gst_structure_has_field_typed (structure, "channel-mask",
+            GST_TYPE_BITMASK))
+      gst_structure_set (structure, "channel-mask", GST_TYPE_BITMASK, 0ULL,
+          NULL);
+  }
+
   caps = GST_BASE_SRC_CLASS (parent_class)->fixate (bsrc, caps);
 
   return caps;
@@ -908,11 +924,12 @@
 {
   gint idx;
 
+  src->pack_func = NULL;
+  src->process = NULL;
+
   /* not negotiated yet? */
-  if (src->info.finfo == NULL) {
-    src->process = NULL;
+  if (src->info.finfo == NULL)
     return;
-  }
 
   switch (GST_AUDIO_FORMAT_INFO_FORMAT (src->info.finfo)) {
     case GST_AUDIO_FORMAT_S16:
@@ -928,8 +945,22 @@
       idx = 3;
       break;
     default:
-      src->process = NULL;
-      return;
+      /* special format */
+      switch (src->info.finfo->unpack_format) {
+        case GST_AUDIO_FORMAT_S32:
+          idx = 1;
+          src->pack_func = src->info.finfo->pack_func;
+          src->pack_size = sizeof (gint32);
+          break;
+        case GST_AUDIO_FORMAT_F64:
+          idx = 3;
+          src->pack_func = src->info.finfo->pack_func;
+          src->pack_size = sizeof (gdouble);
+          break;
+        default:
+          g_assert_not_reached ();
+          return;
+      }
   }
 
   switch (src->wave) {
@@ -1227,7 +1258,24 @@
       GST_TIME_ARGS (GST_BUFFER_TIMESTAMP (buffer)));
 
   gst_buffer_map (buffer, &map, GST_MAP_WRITE);
-  src->process (src, map.data);
+  if (src->pack_func) {
+    gsize tmpsize;
+
+    tmpsize =
+        src->generate_samples_per_buffer * GST_AUDIO_INFO_CHANNELS (&src->info)
+        * src->pack_size;
+
+    if (tmpsize > src->tmpsize) {
+      src->tmp = g_realloc (src->tmp, tmpsize);
+      src->tmpsize = tmpsize;
+    }
+    src->process (src, src->tmp);
+    src->pack_func (src->info.finfo, 0, src->tmp, map.data,
+        src->generate_samples_per_buffer *
+        GST_AUDIO_INFO_CHANNELS (&src->info));
+  } else {
+    src->process (src, map.data);
+  }
   gst_buffer_unmap (buffer, &map);
 
   if (G_UNLIKELY ((src->wave == GST_AUDIO_TEST_SRC_WAVE_SILENCE)
diff --git a/gst/audiotestsrc/gstaudiotestsrc.h b/gst/audiotestsrc/gstaudiotestsrc.h
index 7372079..254927d 100644
--- a/gst/audiotestsrc/gstaudiotestsrc.h
+++ b/gst/audiotestsrc/gstaudiotestsrc.h
@@ -104,6 +104,10 @@
   GstBaseSrc parent;
 
   ProcessFunc process;
+  GstAudioFormatPack pack_func;
+  gint pack_size;
+  gpointer tmp;
+  gsize tmpsize;
 
   /* parameters */
   GstAudioTestSrcWave wave;
diff --git a/gst/encoding/gstencodebin.c b/gst/encoding/gstencodebin.c
index 8895208..69d37ea 100644
--- a/gst/encoding/gstencodebin.c
+++ b/gst/encoding/gstencodebin.c
@@ -950,6 +950,14 @@
       gst_element_factory_list_filter (ebin->encoders, format,
       GST_PAD_SRC, FALSE);
 
+  if (G_UNLIKELY (encoders == NULL) && sprof == ebin->profile) {
+    /* Special case: if the top-level profile is an encoder,
+     * it could be listed in our muxers (for example wavenc)
+     */
+    encoders = gst_element_factory_list_filter (ebin->muxers, format,
+        GST_PAD_SRC, FALSE);
+  }
+
   if (G_UNLIKELY (encoders == NULL)) {
     GST_DEBUG ("Couldn't find any compatible encoders");
     goto beach;
diff --git a/gst/playback/gstdecodebin2.c b/gst/playback/gstdecodebin2.c
index 90276df..9668849 100644
--- a/gst/playback/gstdecodebin2.c
+++ b/gst/playback/gstdecodebin2.c
@@ -439,6 +439,8 @@
   GstDecodeGroup *parent;
   GstDecodeBin *dbin;
 
+  gint refs;                    /* Number of references to this object */
+
   GMutex lock;                  /* Protects this chain and its groups */
 
   GstPad *pad;                  /* srcpad that caused creation of this chain */
@@ -479,6 +481,8 @@
   GList *old_groups;            /* Groups that should be freed later */
 };
 
+static GstDecodeChain *gst_decode_chain_ref (GstDecodeChain * chain);
+static void gst_decode_chain_unref (GstDecodeChain * chain);
 static void gst_decode_chain_free (GstDecodeChain * chain);
 static GstDecodeChain *gst_decode_chain_new (GstDecodeBin * dbin,
     GstDecodeGroup * group, GstPad * pad);
@@ -1455,7 +1459,8 @@
 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);
+    GstDecodePad * dpad, GstPad * pad, GstCaps * caps, GstDecodeChain * chain,
+    gboolean lock);
 
 static void pad_added_cb (GstElement * element, GstPad * pad,
     GstDecodeChain * chain);
@@ -1509,9 +1514,10 @@
  *  - get list of factories to autoplug.
  *  - continue autoplugging to one of the factories.
  */
-static void
+/* returns whether to expose the pad */
+static gboolean
 analyze_new_pad (GstDecodeBin * dbin, GstElement * src, GstPad * pad,
-    GstCaps * caps, GstDecodeChain * chain)
+    GstCaps * caps, GstDecodeChain * chain, GstDecodeChain ** new_chain)
 {
   gboolean apcontinue = TRUE;
   GValueArray *factories = NULL, *result = NULL;
@@ -1525,16 +1531,19 @@
   GST_DEBUG_OBJECT (dbin, "Pad %s:%s caps:%" GST_PTR_FORMAT,
       GST_DEBUG_PAD_NAME (pad), caps);
 
+  if (new_chain)
+    *new_chain = chain;
+
   if (chain->elements
       && src != ((GstDecodeElement *) chain->elements->data)->element
       && src != ((GstDecodeElement *) chain->elements->data)->capsfilter) {
     GST_ERROR_OBJECT (dbin, "New pad from not the last element in this chain");
-    return;
+    return FALSE;
   }
 
   if (chain->endpad) {
     GST_ERROR_OBJECT (dbin, "New pad in a chain that is already complete");
-    return;
+    return FALSE;
   }
 
   if (chain->demuxer) {
@@ -1551,13 +1560,14 @@
     CHAIN_MUTEX_LOCK (oldchain);
     group = gst_decode_chain_get_current_group (chain);
     if (group && !g_list_find (group->children, chain)) {
-      chain = gst_decode_chain_new (dbin, group, pad);
+      g_assert (new_chain != NULL);
+      *new_chain = chain = gst_decode_chain_new (dbin, group, pad);
       group->children = g_list_prepend (group->children, chain);
     }
     CHAIN_MUTEX_UNLOCK (oldchain);
     if (!group) {
       GST_WARNING_OBJECT (dbin, "No current group");
-      return;
+      return FALSE;
     }
 
     /* If this is not a dynamic pad demuxer, we're no-more-pads
@@ -1811,15 +1821,15 @@
 
   gst_caps_unref (caps);
 
-  return;
+  return FALSE;
 
 expose_pad:
   {
-    GST_LOG_OBJECT (dbin, "Pad is final. autoplug-continue:%d", apcontinue);
-    expose_pad (dbin, src, dpad, pad, caps, chain);
+    GST_LOG_OBJECT (dbin, "Pad is final and should expose the pad. "
+        "autoplug-continue:%d", apcontinue);
     gst_object_unref (dpad);
     gst_caps_unref (caps);
-    return;
+    return TRUE;
   }
 
 discarded_type:
@@ -1839,7 +1849,7 @@
     EXPOSE_UNLOCK (dbin);
     do_async_done (dbin);
 
-    return;
+    return FALSE;
   }
 
 unknown_type:
@@ -1873,7 +1883,7 @@
       }
       do_async_done (dbin);
     }
-    return;
+    return FALSE;
   }
 non_fixed:
   {
@@ -1912,7 +1922,7 @@
     if (caps)
       gst_caps_unref (caps);
 
-    return;
+    return FALSE;
   }
 }
 
@@ -2009,39 +2019,6 @@
   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)
@@ -2147,7 +2124,7 @@
     GParamSpec *pspec;
     gboolean subtitle;
     GList *to_connect = NULL;
-    gboolean is_parser_converter = FALSE, is_simple_demuxer = FALSE;
+    gboolean is_parser_converter = FALSE;
 
     /* Set dpad target to pad again, it might've been unset
      * below but we came back here because something failed
@@ -2215,7 +2192,6 @@
      */
     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;
@@ -2262,7 +2238,7 @@
       case GST_AUTOPLUG_SELECT_EXPOSE:
         GST_DEBUG_OBJECT (dbin, "autoplug select requested expose");
         /* expose the pad, we don't have the source element */
-        expose_pad (dbin, src, dpad, pad, caps, chain);
+        expose_pad (dbin, src, dpad, pad, caps, chain, TRUE);
         res = TRUE;
         goto beach;
       case GST_AUTOPLUG_SELECT_SKIP:
@@ -2472,21 +2448,33 @@
     /* 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)) {
+      for (l = to_connect; l;) {
         GstPad *opad = GST_PAD_CAST (l->data);
+        gboolean to_expose = FALSE;
         GstCaps *ocaps;
 
         ocaps = get_pad_caps (opad);
-        analyze_new_pad (dbin, delem->element, opad, ocaps, chain);
+        to_expose =
+            analyze_new_pad (dbin, delem->element, opad, ocaps, chain, &chain);
+
         if (ocaps)
           gst_caps_unref (ocaps);
 
-        gst_object_unref (opad);
+        if (!to_expose) {
+          GList *l2 = l;
+
+          gst_object_unref (opad);
+
+          l2 = g_list_next (l);
+          to_connect = g_list_delete_link (to_connect, l);
+          l = l2;
+        } else {
+          l = g_list_next (l);
+        }
       }
-      g_list_free (to_connect);
-      to_connect = NULL;
+      /* any pads left in to_connect are to be exposed */
     }
 
     /* Bring the element to the state of the parent */
@@ -2598,14 +2586,15 @@
       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);
+        expose_pad (dbin, delem->element, dpad, opad, ocaps, chain, TRUE);
+
         if (ocaps)
           gst_caps_unref (ocaps);
 
@@ -2746,7 +2735,7 @@
  */
 static void
 expose_pad (GstDecodeBin * dbin, GstElement * src, GstDecodePad * dpad,
-    GstPad * pad, GstCaps * caps, GstDecodeChain * chain)
+    GstPad * pad, GstCaps * caps, GstDecodeChain * chain, gboolean lock)
 {
   GstPad *mqpad = NULL;
 
@@ -2773,13 +2762,15 @@
   chain->endpad = gst_object_ref (dpad);
   chain->endcaps = gst_caps_ref (caps);
 
-  EXPOSE_LOCK (dbin);
+  if (lock)
+    EXPOSE_LOCK (dbin);
   if (dbin->decode_chain) {
     if (gst_decode_chain_is_complete (dbin->decode_chain)) {
       gst_decode_bin_expose (dbin);
     }
   }
-  EXPOSE_UNLOCK (dbin);
+  if (lock)
+    EXPOSE_UNLOCK (dbin);
 
   if (mqpad)
     gst_object_unref (mqpad);
@@ -2832,6 +2823,7 @@
     GstCaps * caps, GstDecodeBin * decode_bin)
 {
   GstPad *pad, *sink_pad;
+  GstDecodeChain *chain;
 
   GST_DEBUG_OBJECT (decode_bin, "typefind found caps %" GST_PTR_FORMAT, caps);
 
@@ -2845,13 +2837,7 @@
     goto exit;
   }
 
-  /* FIXME: we can only deal with one type, we don't yet support dynamically changing
-   * caps from the typefind element */
-  if (decode_bin->have_type || decode_bin->decode_chain)
-    goto exit;
-
-  decode_bin->have_type = TRUE;
-
+  EXPOSE_LOCK (decode_bin);
   pad = gst_element_get_static_pad (typefind, "src");
   sink_pad = gst_element_get_static_pad (typefind, "sink");
 
@@ -2860,13 +2846,29 @@
    * In typical cases, STREAM_LOCK is held and handles that, it need not
    * be held (if called from a proxied setcaps), so grab it anyway */
   GST_PAD_STREAM_LOCK (sink_pad);
-  decode_bin->decode_chain = gst_decode_chain_new (decode_bin, NULL, pad);
-  analyze_new_pad (decode_bin, typefind, pad, caps, decode_bin->decode_chain);
+  /* FIXME: we can only deal with one type, we don't yet support dynamically changing
+   * caps from the typefind element */
+  if (decode_bin->have_type || decode_bin->decode_chain) {
+  } else {
+    decode_bin->have_type = TRUE;
+
+    decode_bin->decode_chain = gst_decode_chain_new (decode_bin, NULL, pad);
+    chain = gst_decode_chain_ref (decode_bin->decode_chain);
+
+    if (analyze_new_pad (decode_bin, typefind, pad, caps,
+            decode_bin->decode_chain, NULL))
+      expose_pad (decode_bin, typefind, decode_bin->decode_chain->current_pad,
+          pad, caps, decode_bin->decode_chain, FALSE);
+    gst_decode_chain_unref (chain);
+  }
+
   GST_PAD_STREAM_UNLOCK (sink_pad);
 
   gst_object_unref (sink_pad);
   gst_object_unref (pad);
 
+  EXPOSE_UNLOCK (decode_bin);
+
 exit:
   return;
 }
@@ -2908,13 +2910,22 @@
 {
   GstCaps *caps;
   GstDecodeBin *dbin;
+  GstDecodeChain *new_chain;
 
   dbin = chain->dbin;
 
   GST_DEBUG_OBJECT (pad, "pad added, chain:%p", chain);
+  GST_PAD_STREAM_LOCK (pad);
+  if (!gst_pad_is_active (pad)) {
+    GST_PAD_STREAM_UNLOCK (pad);
+    GST_DEBUG_OBJECT (pad, "Ignoring pad-added from a deactivated pad");
+    return;
+  }
 
   caps = get_pad_caps (pad);
-  analyze_new_pad (dbin, element, pad, caps, chain);
+  if (analyze_new_pad (dbin, element, pad, caps, chain, &new_chain))
+    expose_pad (dbin, element, new_chain->current_pad, pad, caps, new_chain,
+        TRUE);
   if (caps)
     gst_caps_unref (caps);
 
@@ -2930,6 +2941,7 @@
     GST_DEBUG_OBJECT (dbin, "No decode chain, new pad ignored");
   }
   EXPOSE_UNLOCK (dbin);
+  GST_PAD_STREAM_UNLOCK (pad);
 }
 
 static GstPadProbeReturn
@@ -3307,6 +3319,22 @@
     gboolean hide);
 
 static void
+gst_decode_chain_unref (GstDecodeChain * chain)
+{
+  if (g_atomic_int_dec_and_test (&chain->refs)) {
+    g_mutex_clear (&chain->lock);
+    g_slice_free (GstDecodeChain, chain);
+  }
+}
+
+static GstDecodeChain *
+gst_decode_chain_ref (GstDecodeChain * chain)
+{
+  g_atomic_int_inc (&chain->refs);
+  return chain;
+}
+
+static void
 gst_decode_chain_free_internal (GstDecodeChain * chain, gboolean hide)
 {
   GList *l, *set_to_null = NULL;
@@ -3404,10 +3432,8 @@
 
   if (chain->endpad) {
     if (chain->endpad->exposed) {
-      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);
+      gst_element_remove_pad (GST_ELEMENT_CAST (chain->dbin),
+          GST_PAD_CAST (chain->endpad));
     }
 
     decode_pad_set_target (chain->endpad, NULL);
@@ -3446,10 +3472,8 @@
     gst_object_unref (element);
   }
 
-  if (!hide) {
-    g_mutex_clear (&chain->lock);
-    g_slice_free (GstDecodeChain, chain);
-  }
+  if (!hide)
+    gst_decode_chain_unref (chain);
 }
 
 /* gst_decode_chain_free:
@@ -3484,6 +3508,7 @@
 
   chain->dbin = dbin;
   chain->parent = parent;
+  chain->refs = 1;
   g_mutex_init (&chain->lock);
   chain->pad = gst_object_ref (pad);
 
diff --git a/gst/playback/gstplaybin2.c b/gst/playback/gstplaybin2.c
index 4a056a0..acdcf6c 100644
--- a/gst/playback/gstplaybin2.c
+++ b/gst/playback/gstplaybin2.c
@@ -4987,7 +4987,7 @@
    * if a parser asks us but a decoder is required after it
    * because no sink can handle the format directly.
    */
-  {
+  if (gst_caps_is_empty (result)) {
     GstPad *target = gst_ghost_pad_get_target (GST_GHOST_PAD (pad));
 
     if (target) {
diff --git a/gst/playback/gstplaysink.c b/gst/playback/gstplaysink.c
index 1685692..6512493 100644
--- a/gst/playback/gstplaysink.c
+++ b/gst/playback/gstplaysink.c
@@ -3700,13 +3700,13 @@
         g_value_unset (&item);
         g_assert (playsink->text_srcpad_stream_synchronizer);
         gst_iterator_free (it);
-
-        gst_ghost_pad_set_target (GST_GHOST_PAD_CAST (playsink->text_pad),
-            playsink->text_sinkpad_stream_synchronizer);
-        gst_pad_link_full (playsink->text_srcpad_stream_synchronizer,
-            playsink->textchain->textsinkpad, GST_PAD_LINK_CHECK_NOTHING);
       }
 
+      gst_ghost_pad_set_target (GST_GHOST_PAD_CAST (playsink->text_pad),
+          playsink->text_sinkpad_stream_synchronizer);
+      gst_pad_link_full (playsink->text_srcpad_stream_synchronizer,
+          playsink->textchain->textsinkpad, GST_PAD_LINK_CHECK_NOTHING);
+
       if (need_vis || need_video) {
         if (need_vis) {
           GstPad *srcpad;
diff --git a/gst/playback/gstrawcaps.h b/gst/playback/gstrawcaps.h
index 278c907..a1e73d7 100644
--- a/gst/playback/gstrawcaps.h
+++ b/gst/playback/gstrawcaps.h
@@ -31,6 +31,7 @@
     "text/x-raw; " \
     "subpicture/x-dvd; " \
     "subpicture/x-dvb; " \
+    "subpicture/x-xsub; " \
     "subpicture/x-pgs"
 
 G_END_DECLS
diff --git a/gst/playback/gststreamsynchronizer.c b/gst/playback/gststreamsynchronizer.c
index b55e328..cc7c97f 100644
--- a/gst/playback/gststreamsynchronizer.c
+++ b/gst/playback/gststreamsynchronizer.c
@@ -80,11 +80,11 @@
   guint32 stream_start_seqnum;
   guint32 segment_seqnum;
   guint group_id;
-} GstStream;
+} GstSyncStream;
 
 /* Must be called with lock! */
 static inline GstPad *
-gst_stream_get_other_pad (GstStream * stream, GstPad * pad)
+gst_stream_get_other_pad (GstSyncStream * stream, GstPad * pad)
 {
   if (stream->sinkpad == pad)
     return gst_object_ref (stream->srcpad);
@@ -97,7 +97,7 @@
 static GstPad *
 gst_stream_get_other_pad_from_pad (GstStreamSynchronizer * self, GstPad * pad)
 {
-  GstStream *stream;
+  GstSyncStream *stream;
   GstPad *opad = NULL;
 
   GST_STREAM_SYNCHRONIZER_LOCK (self);
@@ -156,7 +156,7 @@
       GstClockTimeDiff diff;
       GstClockTime timestamp;
       gint64 running_time_diff = -1;
-      GstStream *stream;
+      GstSyncStream *stream;
 
       gst_event_parse_qos (event, NULL, &proportion, &diff, &timestamp);
       gst_event_unref (event);
@@ -211,7 +211,7 @@
 gst_stream_synchronizer_wait (GstStreamSynchronizer * self, GstPad * pad)
 {
   gboolean ret = FALSE;
-  GstStream *stream;
+  GstSyncStream *stream;
 
   while (!self->eos && !self->flushing) {
     stream = gst_pad_get_element_private (pad);
@@ -278,7 +278,7 @@
   switch (GST_EVENT_TYPE (event)) {
     case GST_EVENT_STREAM_START:
     {
-      GstStream *stream, *ostream;
+      GstSyncStream *stream, *ostream;
       guint32 seqnum = gst_event_get_seqnum (event);
       guint group_id;
       gboolean have_group_id;
@@ -344,7 +344,7 @@
         stream->wait = TRUE;
 
         for (l = self->streams; l; l = l->next) {
-          GstStream *ostream = l->data;
+          GstSyncStream *ostream = l->data;
 
           all_wait = all_wait && ((ostream->flags & GST_STREAM_FLAG_SPARSE)
               || (ostream->wait && (!have_group_id
@@ -366,7 +366,7 @@
           self->group_id = group_id;
 
           for (l = self->streams; l; l = l->next) {
-            GstStream *ostream = l->data;
+            GstSyncStream *ostream = l->data;
             gint64 stop_running_time;
             gint64 position_running_time;
 
@@ -397,7 +397,7 @@
               GST_TIME_ARGS (self->group_start_time));
 
           for (l = self->streams; l; l = l->next) {
-            GstStream *ostream = l->data;
+            GstSyncStream *ostream = l->data;
             ostream->wait = FALSE;
             g_cond_broadcast (&ostream->stream_finish_cond);
           }
@@ -408,7 +408,7 @@
       break;
     }
     case GST_EVENT_SEGMENT:{
-      GstStream *stream;
+      GstSyncStream *stream;
       GstSegment segment;
 
       gst_event_copy_segment (event, &segment);
@@ -457,7 +457,7 @@
       break;
     }
     case GST_EVENT_FLUSH_START:{
-      GstStream *stream;
+      GstSyncStream *stream;
 
       GST_STREAM_SYNCHRONIZER_LOCK (self);
       stream = gst_pad_get_element_private (pad);
@@ -471,7 +471,7 @@
       break;
     }
     case GST_EVENT_FLUSH_STOP:{
-      GstStream *stream;
+      GstSyncStream *stream;
       GList *l;
       GstClockTime new_group_start_time = 0;
 
@@ -490,7 +490,7 @@
       }
 
       for (l = self->streams; l; l = l->next) {
-        GstStream *ostream = l->data;
+        GstSyncStream *ostream = l->data;
         GstClockTime start_running_time;
 
         if (ostream == stream)
@@ -518,7 +518,7 @@
       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;
+        GstSyncStream *stream;
 
         GST_STREAM_SYNCHRONIZER_LOCK (self);
         stream = gst_pad_get_element_private (pad);
@@ -533,7 +533,7 @@
       break;
     }
     case GST_EVENT_EOS:{
-      GstStream *stream;
+      GstSyncStream *stream;
       GList *l;
       gboolean all_eos = TRUE;
       gboolean seen_data;
@@ -565,7 +565,7 @@
       stream->segment.position = timestamp;
 
       for (l = self->streams; l; l = l->next) {
-        GstStream *ostream = l->data;
+        GstSyncStream *ostream = l->data;
 
         all_eos = all_eos && ostream->is_eos;
         if (!all_eos)
@@ -576,7 +576,7 @@
         GST_DEBUG_OBJECT (self, "All streams are EOS -- forwarding");
         self->eos = TRUE;
         for (l = self->streams; l; l = l->next) {
-          GstStream *ostream = l->data;
+          GstSyncStream *ostream = l->data;
           /* local snapshot of current pads */
           gst_object_ref (ostream->srcpad);
           pads = g_slist_prepend (pads, ostream->srcpad);
@@ -585,7 +585,7 @@
       if (pads) {
         GstPad *pad;
         GSList *epad;
-        GstStream *ostream;
+        GstSyncStream *ostream;
 
         ret = TRUE;
         epad = pads;
@@ -650,7 +650,7 @@
   GstStreamSynchronizer *self = GST_STREAM_SYNCHRONIZER (parent);
   GstPad *opad;
   GstFlowReturn ret = GST_FLOW_ERROR;
-  GstStream *stream;
+  GstSyncStream *stream;
   GstClockTime duration = GST_CLOCK_TIME_NONE;
   GstClockTime timestamp = GST_CLOCK_TIME_NONE;
   GstClockTime timestamp_end = GST_CLOCK_TIME_NONE;
@@ -723,7 +723,7 @@
     }
 
     for (l = self->streams; l; l = l->next) {
-      GstStream *ostream = l->data;
+      GstSyncStream *ostream = l->data;
       gint64 position;
 
       if (!ostream->is_eos || ostream->eos_sent ||
@@ -766,14 +766,14 @@
     GstPadTemplate * temp, const gchar * name, const GstCaps * caps)
 {
   GstStreamSynchronizer *self = GST_STREAM_SYNCHRONIZER (element);
-  GstStream *stream;
+  GstSyncStream *stream;
   gchar *tmp;
 
   GST_STREAM_SYNCHRONIZER_LOCK (self);
   GST_DEBUG_OBJECT (self, "Requesting new pad for stream %d",
       self->current_stream_number);
 
-  stream = g_slice_new0 (GstStream);
+  stream = g_slice_new0 (GstSyncStream);
   stream->transform = self;
   stream->stream_number = self->current_stream_number;
   g_cond_init (&stream->stream_finish_cond);
@@ -830,7 +830,7 @@
 /* Must be called with lock! */
 static void
 gst_stream_synchronizer_release_stream (GstStreamSynchronizer * self,
-    GstStream * stream)
+    GstSyncStream * stream)
 {
   GList *l;
 
@@ -861,7 +861,7 @@
   gst_element_remove_pad (GST_ELEMENT_CAST (self), stream->sinkpad);
 
   g_cond_clear (&stream->stream_finish_cond);
-  g_slice_free (GstStream, stream);
+  g_slice_free (GstSyncStream, stream);
 
   /* NOTE: In theory we have to check here if all streams
    * are EOS but the one that was removed wasn't and then
@@ -880,7 +880,7 @@
 gst_stream_synchronizer_release_pad (GstElement * element, GstPad * pad)
 {
   GstStreamSynchronizer *self = GST_STREAM_SYNCHRONIZER (element);
-  GstStream *stream;
+  GstSyncStream *stream;
 
   GST_STREAM_SYNCHRONIZER_LOCK (self);
   stream = gst_pad_get_element_private (pad);
@@ -923,7 +923,7 @@
       self->flushing = TRUE;
       self->shutdown = TRUE;
       for (l = self->streams; l; l = l->next) {
-        GstStream *ostream = l->data;
+        GstSyncStream *ostream = l->data;
         g_cond_broadcast (&ostream->stream_finish_cond);
       }
       GST_STREAM_SYNCHRONIZER_UNLOCK (self);
@@ -945,7 +945,7 @@
 
       GST_STREAM_SYNCHRONIZER_LOCK (self);
       for (l = self->streams; l; l = l->next) {
-        GstStream *stream = l->data;
+        GstSyncStream *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. */
@@ -967,7 +967,7 @@
       GST_STREAM_SYNCHRONIZER_LOCK (self);
       self->send_gap_event = FALSE;
       for (l = self->streams; l; l = l->next) {
-        GstStream *stream = l->data;
+        GstSyncStream *stream = l->data;
 
         gst_segment_init (&stream->segment, GST_FORMAT_UNDEFINED);
         stream->gap_duration = GST_CLOCK_TIME_NONE;
diff --git a/gst/tcp/gstmultifdsink.c b/gst/tcp/gstmultifdsink.c
index c7b591f..2b1b44d 100644
--- a/gst/tcp/gstmultifdsink.c
+++ b/gst/tcp/gstmultifdsink.c
@@ -952,7 +952,7 @@
 
           res = fcntl (fd, F_GETFL, &flags);
           if (res == -1) {
-            GST_WARNING_OBJECT (sink, "fnctl failed for %d, removing: %s (%d)",
+            GST_WARNING_OBJECT (sink, "fcntl failed for %d, removing: %s (%d)",
                 fd, g_strerror (errno), errno);
             if (errno == EBADF) {
               mhclient->status = GST_CLIENT_STATUS_ERROR;
diff --git a/gst/tcp/gstmultisocketsink.c b/gst/tcp/gstmultisocketsink.c
index cf5a4a5..f9acc13 100644
--- a/gst/tcp/gstmultisocketsink.c
+++ b/gst/tcp/gstmultisocketsink.c
@@ -136,10 +136,14 @@
   LAST_SIGNAL
 };
 
+#define DEFAULT_SEND_DISPATCHED FALSE
+#define DEFAULT_SEND_MESSAGES   FALSE
+
 enum
 {
   PROP_0,
-
+  PROP_SEND_DISPATCHED,
+  PROP_SEND_MESSAGES,
   PROP_LAST
 };
 
@@ -181,6 +185,8 @@
     GstMultiHandleClient * mhclient);
 static void gst_multi_socket_sink_hash_removing (GstMultiHandleSink * mhsink,
     GstMultiHandleClient * mhclient);
+static void gst_multi_socket_sink_stop_sending (GstMultiSocketSink * sink,
+    GstSocketClient * client);
 
 static gboolean gst_multi_socket_sink_socket_condition (GstMultiSinkHandle
     handle, GIOCondition condition, GstMultiSocketSink * sink);
@@ -188,6 +194,9 @@
 static gboolean gst_multi_socket_sink_unlock (GstBaseSink * bsink);
 static gboolean gst_multi_socket_sink_unlock_stop (GstBaseSink * bsink);
 
+static gboolean gst_multi_socket_sink_propose_allocation (GstBaseSink * bsink,
+    GstQuery * query);
+
 static void gst_multi_socket_sink_set_property (GObject * object, guint prop_id,
     const GValue * value, GParamSpec * pspec);
 static void gst_multi_socket_sink_get_property (GObject * object, guint prop_id,
@@ -217,6 +226,41 @@
   gobject_class->finalize = gst_multi_socket_sink_finalize;
 
   /**
+   * GstMultiSocketSink:send-dispatched:
+   *
+   * Sends a GstNetworkMessageDispatched event upstream whenever a buffer
+   * is sent to a client.
+   * The event is a CUSTOM event name GstNetworkMessageDispatched and
+   * contains:
+   *
+   *   "object"  G_TYPE_OBJECT     : the object identifying the client
+   *   "buffer"  GST_TYPE_BUFFER   : the buffer sent to the client
+   *
+   * Since: 1.8.0
+   */
+  g_object_class_install_property (gobject_class, PROP_SEND_DISPATCHED,
+      g_param_spec_boolean ("send-dispatched", "Send Dispatched",
+          "If GstNetworkMessageDispatched events should be pushed",
+          DEFAULT_SEND_DISPATCHED, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+  /**
+   * GstMultiSocketSink:send-messages:
+   *
+   * Sends a GstNetworkMessage event upstream whenever a buffer
+   * is received from a client.
+   * The event is a CUSTOM event name GstNetworkMessage and contains:
+   *
+   *   "object"  G_TYPE_OBJECT     : the object identifying the client
+   *   "buffer"  GST_TYPE_BUFFER   : the buffer with data received from the
+   *                                 client
+   *
+   * Since: 1.8.0
+   */
+  g_object_class_install_property (gobject_class, PROP_SEND_MESSAGES,
+      g_param_spec_boolean ("send-messages", "Send Messages",
+          "If GstNetworkMessage events should be pushed", DEFAULT_SEND_MESSAGES,
+          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+
+  /**
    * GstMultiSocketSink::add:
    * @gstmultisocketsink: the multisocketsink element to emit this signal on
    * @socket:             the socket to add to multisocketsink
@@ -355,6 +399,8 @@
   gstbasesink_class->unlock = GST_DEBUG_FUNCPTR (gst_multi_socket_sink_unlock);
   gstbasesink_class->unlock_stop =
       GST_DEBUG_FUNCPTR (gst_multi_socket_sink_unlock_stop);
+  gstbasesink_class->propose_allocation =
+      GST_DEBUG_FUNCPTR (gst_multi_socket_sink_propose_allocation);
 
   klass->add = GST_DEBUG_FUNCPTR (gst_multi_socket_sink_add);
   klass->add_full = GST_DEBUG_FUNCPTR (gst_multi_socket_sink_add_full);
@@ -402,6 +448,8 @@
   mhsink->handle_hash = g_hash_table_new (g_direct_hash, g_int_equal);
 
   this->cancellable = g_cancellable_new ();
+  this->send_dispatched = DEFAULT_SEND_DISPATCHED;
+  this->send_messages = DEFAULT_SEND_MESSAGES;
 }
 
 static void
@@ -555,38 +603,49 @@
 gst_multi_socket_sink_handle_client_read (GstMultiSocketSink * sink,
     GstSocketClient * client)
 {
-  gboolean ret;
-  gchar dummy[256];
+  gboolean ret, do_event;
+  gchar dummy[256], *mem, *omem;
   gssize nread;
   GError *err = NULL;
   gboolean first = TRUE;
   GstMultiHandleClient *mhclient = (GstMultiHandleClient *) client;
+  gssize navail, maxmem;
 
   GST_DEBUG_OBJECT (sink, "%s select reports client read", mhclient->debug);
 
   ret = TRUE;
 
+  navail = g_socket_get_available_bytes (mhclient->handle.socket);
+  if (navail <= 0)
+    return TRUE;
+
+  /* only collect the data in a buffer when we need to send it with an event */
+  do_event = sink->send_messages;
+  if (do_event) {
+    omem = mem = g_malloc (navail);
+    maxmem = navail;
+  } else {
+    mem = dummy;
+    maxmem = sizeof (dummy);
+  }
+
   /* just Read 'n' Drop, could also just drop the client as it's not supposed
    * to write to us except for closing the socket, I guess it's because we
    * like to listen to our customers. */
-  do {
-    gssize navail;
-
+  while (navail > 0) {
     GST_DEBUG_OBJECT (sink, "%s client wants us to read", mhclient->debug);
 
-    navail = g_socket_get_available_bytes (mhclient->handle.socket);
-    if (navail <= 0)
-      break;
-
     nread =
-        g_socket_receive (mhclient->handle.socket, dummy, MIN (navail,
-            sizeof (dummy)), sink->cancellable, &err);
+        g_socket_receive (mhclient->handle.socket, mem, MIN (navail,
+            maxmem), sink->cancellable, &err);
+
     if (first && nread == 0) {
       /* client sent close, so remove it */
       GST_DEBUG_OBJECT (sink, "%s client asked for close, removing",
           mhclient->debug);
       mhclient->status = GST_CLIENT_STATUS_CLOSED;
       ret = FALSE;
+      break;
     } else if (nread < 0) {
       GST_WARNING_OBJECT (sink, "%s could not read: %s",
           mhclient->debug, err->message);
@@ -594,10 +653,29 @@
       ret = FALSE;
       break;
     }
+    navail -= nread;
+    if (do_event)
+      mem += nread;
     first = FALSE;
-  } while (nread > 0);
+  }
   g_clear_error (&err);
 
+  if (do_event) {
+    if (ret) {
+      GstBuffer *buf;
+      GstEvent *ev;
+
+      buf = gst_buffer_new_wrapped (omem, maxmem);
+      ev = gst_event_new_custom (GST_EVENT_CUSTOM_UPSTREAM,
+          gst_structure_new ("GstNetworkMessage",
+              "object", G_TYPE_OBJECT, mhclient->handle.socket,
+              "buffer", GST_TYPE_BUFFER, buf, NULL));
+      gst_buffer_unref (buf);
+
+      gst_pad_push_event (GST_BASE_SINK_PAD (sink), ev);
+    } else
+      g_free (omem);
+  }
   return ret;
 }
 
@@ -764,12 +842,7 @@
       if (mhclient->bufpos == -1) {
         /* client is too fast, remove from write queue until new buffer is
          * available */
-        /* FIXME: specific */
-        if (client->source) {
-          g_source_destroy (client->source);
-          g_source_unref (client->source);
-          client->source = NULL;
-        }
+        gst_multi_socket_sink_stop_sending (sink, client);
 
         /* if we flushed out all of the client buffers, we can stop */
         if (mhclient->flushcount == 0)
@@ -793,13 +866,7 @@
             mhclient->bufpos = position;
           } else {
             /* cannot send data to this client yet */
-            /* FIXME: specific */
-            if (client->source) {
-              g_source_destroy (client->source);
-              g_source_unref (client->source);
-              client->source = NULL;
-            }
-
+            gst_multi_socket_sink_stop_sending (sink, client);
             return TRUE;
           }
         }
@@ -866,6 +933,13 @@
               mhclient->handle.socket, wrote);
           mhclient->bufoffset += wrote;
         } else {
+          if (sink->send_dispatched) {
+            gst_pad_push_event (GST_BASE_SINK_PAD (mhsink),
+                gst_event_new_custom (GST_EVENT_CUSTOM_UPSTREAM,
+                    gst_structure_new ("GstNetworkMessageDispatched",
+                        "object", G_TYPE_OBJECT, mhclient->handle.socket,
+                        "buffer", GST_TYPE_BUFFER, head, NULL)));
+          }
           /* complete buffer was written, we can proceed to the next one */
           mhclient->sending = g_slist_remove (mhclient->sending, head);
           gst_buffer_unref (head);
@@ -909,37 +983,58 @@
 }
 
 static void
+ensure_condition (GstMultiSocketSink * sink, GstSocketClient * client,
+    GIOCondition condition)
+{
+  GstMultiHandleClient *mhclient = (GstMultiHandleClient *) client;
+
+  if (client->condition == condition)
+    return;
+
+  if (client->source) {
+    g_source_destroy (client->source);
+    g_source_unref (client->source);
+  }
+  if (condition && sink->main_context) {
+    client->source = g_socket_create_source (mhclient->handle.socket,
+        condition, sink->cancellable);
+    g_source_set_callback (client->source,
+        (GSourceFunc) gst_multi_socket_sink_socket_condition,
+        gst_object_ref (sink), (GDestroyNotify) gst_object_unref);
+    g_source_attach (client->source, sink->main_context);
+  } else {
+    client->source = NULL;
+    condition = 0;
+  }
+  client->condition = condition;
+}
+
+static void
 gst_multi_socket_sink_hash_adding (GstMultiHandleSink * mhsink,
     GstMultiHandleClient * mhclient)
 {
   GstMultiSocketSink *sink = GST_MULTI_SOCKET_SINK (mhsink);
   GstSocketClient *client = (GstSocketClient *) (mhclient);
 
-  if (!sink->main_context)
-    return;
-
-  if (!client->source) {
-    client->source =
-        g_socket_create_source (mhclient->handle.socket,
-        G_IO_IN | G_IO_OUT | G_IO_PRI | G_IO_ERR | G_IO_HUP, sink->cancellable);
-    g_source_set_callback (client->source,
-        (GSourceFunc) gst_multi_socket_sink_socket_condition,
-        gst_object_ref (sink), (GDestroyNotify) gst_object_unref);
-    g_source_attach (client->source, sink->main_context);
-  }
+  ensure_condition (sink, client,
+      G_IO_IN | G_IO_OUT | G_IO_PRI | G_IO_ERR | G_IO_HUP);
 }
 
 static void
 gst_multi_socket_sink_hash_removing (GstMultiHandleSink * mhsink,
     GstMultiHandleClient * mhclient)
 {
+  GstMultiSocketSink *sink = GST_MULTI_SOCKET_SINK (mhsink);
   GstSocketClient *client = (GstSocketClient *) (mhclient);
 
-  if (client->source) {
-    g_source_destroy (client->source);
-    g_source_unref (client->source);
-    client->source = NULL;
-  }
+  ensure_condition (sink, client, 0);
+}
+
+static void
+gst_multi_socket_sink_stop_sending (GstMultiSocketSink * sink,
+    GstSocketClient * client)
+{
+  ensure_condition (sink, client, G_IO_IN | G_IO_PRI | G_IO_ERR | G_IO_HUP);
 }
 
 /* Handle the clients. This is called when a socket becomes ready
@@ -987,14 +1082,16 @@
     gst_multi_handle_sink_remove_client_link (mhsink, clink);
     ret = FALSE;
     goto done;
-  } else if ((condition & G_IO_IN) || (condition & G_IO_PRI)) {
+  }
+  if ((condition & G_IO_IN) || (condition & G_IO_PRI)) {
     /* handle client read */
     if (!gst_multi_socket_sink_handle_client_read (sink, client)) {
       gst_multi_handle_sink_remove_client_link (mhsink, clink);
       ret = FALSE;
       goto done;
     }
-  } else if ((condition & G_IO_OUT)) {
+  }
+  if ((condition & G_IO_OUT)) {
     /* handle client write */
     if (!gst_multi_socket_sink_handle_client_write (sink, client)) {
       gst_multi_handle_sink_remove_client_link (mhsink, clink);
@@ -1075,8 +1172,15 @@
 gst_multi_socket_sink_set_property (GObject * object, guint prop_id,
     const GValue * value, GParamSpec * pspec)
 {
-  switch (prop_id) {
+  GstMultiSocketSink *sink = GST_MULTI_SOCKET_SINK (object);
 
+  switch (prop_id) {
+    case PROP_SEND_DISPATCHED:
+      sink->send_dispatched = g_value_get_boolean (value);
+      break;
+    case PROP_SEND_MESSAGES:
+      sink->send_messages = g_value_get_boolean (value);
+      break;
     default:
       G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
       break;
@@ -1087,7 +1191,15 @@
 gst_multi_socket_sink_get_property (GObject * object, guint prop_id,
     GValue * value, GParamSpec * pspec)
 {
+  GstMultiSocketSink *sink = GST_MULTI_SOCKET_SINK (object);
+
   switch (prop_id) {
+    case PROP_SEND_DISPATCHED:
+      g_value_set_boolean (value, sink->send_dispatched);
+      break;
+    case PROP_SEND_MESSAGES:
+      g_value_set_boolean (value, sink->send_messages);
+      break;
     default:
       G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
       break;
@@ -1178,3 +1290,13 @@
 
   return TRUE;
 }
+
+static gboolean
+gst_multi_socket_sink_propose_allocation (GstBaseSink * bsink, GstQuery * query)
+{
+  /* we support some meta */
+  gst_query_add_allocation_meta (query, GST_NET_CONTROL_MESSAGE_META_API_TYPE,
+      NULL);
+
+  return TRUE;
+}
diff --git a/gst/tcp/gstmultisocketsink.h b/gst/tcp/gstmultisocketsink.h
index e1d25ec..c89844d 100644
--- a/gst/tcp/gstmultisocketsink.h
+++ b/gst/tcp/gstmultisocketsink.h
@@ -54,6 +54,7 @@
   GstMultiHandleClient client;
 
   GSource *source;
+  GIOCondition condition;
 } GstSocketClient;
 
 /**
@@ -67,6 +68,8 @@
   /*< private >*/
   GMainContext *main_context;
   GCancellable *cancellable;
+  gboolean send_messages;
+  gboolean send_dispatched;
 };
 
 struct _GstMultiSocketSinkClass {
diff --git a/gst/tcp/gstsocketsrc.c b/gst/tcp/gstsocketsrc.c
index 149ced1..bb85402 100644
--- a/gst/tcp/gstsocketsrc.c
+++ b/gst/tcp/gstsocketsrc.c
@@ -65,11 +65,14 @@
     GST_STATIC_CAPS_ANY);
 
 
+#define DEFAULT_SEND_MESSAGES FALSE
+
 enum
 {
   PROP_0,
   PROP_SOCKET,
   PROP_CAPS,
+  PROP_SEND_MESSAGES
 };
 
 enum
@@ -87,6 +90,7 @@
 static void gst_socket_src_finalize (GObject * gobject);
 
 static GstCaps *gst_socketsrc_getcaps (GstBaseSrc * src, GstCaps * filter);
+static gboolean gst_socketsrc_event (GstBaseSrc * src, GstEvent * event);
 static GstFlowReturn gst_socket_src_fill (GstPushSrc * psrc,
     GstBuffer * outbuf);
 static gboolean gst_socket_src_unlock (GstBaseSrc * bsrc);
@@ -126,6 +130,24 @@
           "The caps of the source pad", GST_TYPE_CAPS,
           G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
 
+  /**
+   * GstSocketSrc:send-messages:
+   *
+   * Control if the source will handle GstNetworkMessage events.
+   * The event is a CUSTOM event named 'GstNetworkMessage' and contains:
+   *
+   *   "buffer", GST_TYPE_BUFFER    : the buffer with data to send
+   *
+   * The buffer in the event will be sent on the socket. This allows
+   * for simple bidirectional communication.
+   *
+   * Since: 1.8.0
+   **/
+  g_object_class_install_property (gobject_class, PROP_SEND_MESSAGES,
+      g_param_spec_boolean ("send-messages", "Send Messages",
+          "If GstNetworkMessage events should be handled",
+          DEFAULT_SEND_MESSAGES, 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,
@@ -140,6 +162,7 @@
       "Thomas Vander Stichele <thomas at apestaart dot org>, "
       "William Manley <will@williammanley.net>");
 
+  gstbasesrc_class->event = gst_socketsrc_event;
   gstbasesrc_class->get_caps = gst_socketsrc_getcaps;
   gstbasesrc_class->unlock = gst_socket_src_unlock;
   gstbasesrc_class->unlock_stop = gst_socket_src_unlock_stop;
@@ -154,6 +177,7 @@
 {
   this->socket = NULL;
   this->cancellable = g_cancellable_new ();
+  this->send_messages = DEFAULT_SEND_MESSAGES;
 }
 
 static void
@@ -169,6 +193,59 @@
   G_OBJECT_CLASS (parent_class)->finalize (gobject);
 }
 
+static gboolean
+gst_socketsrc_event (GstBaseSrc * bsrc, GstEvent * event)
+{
+  GstSocketSrc *src;
+  gboolean res = FALSE;
+
+  src = GST_SOCKET_SRC (bsrc);
+
+  switch (GST_EVENT_TYPE (event)) {
+    case GST_EVENT_CUSTOM_UPSTREAM:
+      if (src->send_messages && gst_event_has_name (event, "GstNetworkMessage")) {
+        const GstStructure *str = gst_event_get_structure (event);
+        GSocket *socket;
+
+        GST_OBJECT_LOCK (src);
+        if ((socket = src->socket))
+          g_object_ref (socket);
+        GST_OBJECT_UNLOCK (src);
+
+        if (socket) {
+          GstBuffer *buf;
+          GstMapInfo map;
+          GError *err = NULL;
+          gssize ret;
+
+          gst_structure_get (str, "buffer", GST_TYPE_BUFFER, &buf, NULL);
+
+          if (buf) {
+            gst_buffer_map (buf, &map, GST_MAP_READ);
+            GST_LOG ("sending buffer of size %" G_GSIZE_FORMAT, map.size);
+            ret = g_socket_send_with_blocking (socket, (gchar *) map.data,
+                map.size, FALSE, src->cancellable, &err);
+            gst_buffer_unmap (buf, &map);
+
+            if (ret == -1) {
+              GST_WARNING ("could not send message: %s", err->message);
+              g_clear_error (&err);
+              res = FALSE;
+            } else
+              res = TRUE;
+            gst_buffer_unref (buf);
+          }
+          g_object_unref (socket);
+        }
+      }
+      break;
+    default:
+      res = GST_BASE_SRC_CLASS (parent_class)->event (bsrc, event);
+      break;
+  }
+  return res;
+}
+
 static GstCaps *
 gst_socketsrc_getcaps (GstBaseSrc * src, GstCaps * filter)
 {
@@ -344,6 +421,9 @@
       gst_pad_mark_reconfigure (GST_BASE_SRC_PAD (socketsrc));
       break;
     }
+    case PROP_SEND_MESSAGES:
+      socketsrc->send_messages = g_value_get_boolean (value);
+      break;
     default:
       G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
       break;
@@ -365,6 +445,9 @@
       gst_value_set_caps (value, socketsrc->caps);
       GST_OBJECT_UNLOCK (socketsrc);
       break;
+    case PROP_SEND_MESSAGES:
+      g_value_set_boolean (value, socketsrc->send_messages);
+      break;
     default:
       G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
       break;
diff --git a/gst/tcp/gstsocketsrc.h b/gst/tcp/gstsocketsrc.h
index 9529e12..02f56d6 100644
--- a/gst/tcp/gstsocketsrc.h
+++ b/gst/tcp/gstsocketsrc.h
@@ -50,6 +50,7 @@
  /*< private >*/
   GstCaps *caps;
   GSocket *socket;
+  gboolean send_messages;
   GCancellable *cancellable;
 };
 
diff --git a/gst/typefind/gsttypefindfunctions.c b/gst/typefind/gsttypefindfunctions.c
index 2bedf18..29f51c7 100644
--- a/gst/typefind/gsttypefindfunctions.c
+++ b/gst/typefind/gsttypefindfunctions.c
@@ -2338,10 +2338,15 @@
             (GST_MPEGTS_TYPEFIND_MAX_SYNC * 4)
 
 #define MPEGTS_HDR_SIZE 4
-/* Check for sync byte, error_indicator == 0 and packet has payload */
-#define IS_MPEGTS_HEADER(data) (((data)[0] == 0x47) && \
-                                (((data)[1] & 0x80) == 0x00) && \
-                                (((data)[3] & 0x30) != 0x00))
+/* Check for sync byte, error_indicator == 0 and packet has payload.
+ * Adaptation control field (data[3] & 0x30) may be zero for TS packets with
+ * null PIDs. Still, these streams are valid TS streams (for null packets,
+ * AFC is supposed to be 0x1, but the spec also says decoders should just
+ * discard any packets with AFC = 0x00) */
+#define IS_MPEGTS_HEADER(data) (data[0] == 0x47 && \
+                                (data[1] & 0x80) == 0x00 && \
+                                ((data[3] & 0x30) != 0x00 || \
+                                ((data[3] & 0x30) == 0x00 && (data[1] & 0x1f) == 0x1f && (data[2] & 0xff) == 0xff)))
 
 /* Helper function to search ahead at intervals of packet_size for mpegts
  * headers */
diff --git a/gst/videorate/gstvideorate.c b/gst/videorate/gstvideorate.c
index 9b9f260..2c17ba4 100644
--- a/gst/videorate/gstvideorate.c
+++ b/gst/videorate/gstvideorate.c
@@ -728,10 +728,6 @@
           videorate->dup += count - 1;
           if (!videorate->silent)
             gst_video_rate_notify_duplicate (videorate);
-        } else if (count == 0) {
-          videorate->drop++;
-          if (!videorate->silent)
-            gst_video_rate_notify_drop (videorate);
         }
         /* clean up for the new one; _chain will resume from the new start */
         gst_video_rate_swap_prev (videorate, NULL, 0);
@@ -1319,7 +1315,6 @@
       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);
@@ -1327,7 +1322,6 @@
     case PROP_MAX_RATE:
       g_atomic_int_set (&videorate->max_rate, g_value_get_int (value));
       goto reconfigure;
-      break;
     default:
       G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
       break;
diff --git a/gst/videotestsrc/gstvideotestsrc.c b/gst/videotestsrc/gstvideotestsrc.c
index 136617a..56bb473 100644
--- a/gst/videotestsrc/gstvideotestsrc.c
+++ b/gst/videotestsrc/gstvideotestsrc.c
@@ -313,15 +313,82 @@
 static GstCaps *
 gst_video_test_src_src_fixate (GstBaseSrc * bsrc, GstCaps * caps)
 {
+  GstVideoTestSrc *src = GST_VIDEO_TEST_SRC (bsrc);
   GstStructure *structure;
 
-  caps = gst_caps_make_writable (caps);
+  /* Check if foreground color has alpha, if it is the case,
+   * force color format with an alpha channel downstream */
+  if (src->foreground_color >> 24 != 255) {
+    guint i;
+    GstCaps *alpha_only_caps = gst_caps_new_empty ();
 
+    for (i = 0; i < gst_caps_get_size (caps); i++) {
+      const GstVideoFormatInfo *info;
+      const GValue *formats =
+          gst_structure_get_value (gst_caps_get_structure (caps, i),
+          "format");
+
+      if (GST_VALUE_HOLDS_LIST (formats)) {
+        GValue possible_formats = { 0, };
+        guint list_size = gst_value_list_get_size (formats);
+        guint index;
+
+        g_value_init (&possible_formats, GST_TYPE_LIST);
+        for (index = 0; index < list_size; index++) {
+          const GValue *list_item = gst_value_list_get_value (formats, index);
+          info =
+              gst_video_format_get_info (gst_video_format_from_string
+              (g_value_get_string (list_item)));
+          if (GST_VIDEO_FORMAT_INFO_HAS_ALPHA (info)) {
+            GValue tmp = { 0, };
+
+            gst_value_init_and_copy (&tmp, list_item);
+            gst_value_list_append_value (&possible_formats, &tmp);
+          }
+        }
+
+        if (gst_value_list_get_size (&possible_formats)) {
+          GstStructure *astruct =
+              gst_structure_copy (gst_caps_get_structure (caps, i));
+
+          gst_structure_set_value (astruct, "format", &possible_formats);
+          gst_caps_append_structure (alpha_only_caps, astruct);
+        }
+
+      } else if (G_VALUE_HOLDS_STRING (formats)) {
+        info =
+            gst_video_format_get_info (gst_video_format_from_string
+            (g_value_get_string (formats)));
+
+        if (GST_VIDEO_FORMAT_INFO_HAS_ALPHA (info)) {
+          gst_caps_append_structure (alpha_only_caps,
+              gst_structure_copy (gst_caps_get_structure (caps, i)));
+        }
+      } else {
+        g_assert_not_reached ();
+        GST_WARNING ("Unexpected type for video 'format' field: %s",
+            G_VALUE_TYPE_NAME (formats));
+      }
+    }
+
+    if (gst_caps_is_empty (alpha_only_caps)) {
+      GST_WARNING_OBJECT (src,
+          "Foreground color contains alpha, but downstream can't support alpha.");
+    } else {
+      gst_caps_replace (&caps, alpha_only_caps);
+    }
+  }
+
+  caps = gst_caps_make_writable (caps);
   structure = gst_caps_get_structure (caps, 0);
 
   gst_structure_fixate_field_nearest_int (structure, "width", 320);
   gst_structure_fixate_field_nearest_int (structure, "height", 240);
-  gst_structure_fixate_field_nearest_fraction (structure, "framerate", 30, 1);
+
+  if (gst_structure_has_field (structure, "framerate"))
+    gst_structure_fixate_field_nearest_fraction (structure, "framerate", 30, 1);
+  else
+    gst_structure_set (structure, "framerate", GST_TYPE_FRACTION, 30, 1, NULL);
 
   if (gst_structure_has_field (structure, "pixel-aspect-ratio"))
     gst_structure_fixate_field_nearest_fraction (structure,
diff --git a/po/af.gmo b/po/af.gmo
index dd59d93..a259c36 100644
--- a/po/af.gmo
+++ b/po/af.gmo
Binary files differ
diff --git a/po/af.po b/po/af.po
index 2d0e8e2..a39e6b5 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: 2015-12-14 19:08+0100\n"
+"POT-Creation-Date: 2015-12-24 12:56+0100\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"
@@ -600,6 +600,9 @@
 msgid "change subtitle track"
 msgstr ""
 
+msgid "seek to beginning"
+msgstr ""
+
 msgid "show keyboard shortcuts"
 msgstr ""
 
diff --git a/po/az.gmo b/po/az.gmo
index c833cb6..e683328 100644
--- a/po/az.gmo
+++ b/po/az.gmo
Binary files differ
diff --git a/po/az.po b/po/az.po
index 7f877e9..f60e034 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: 2015-12-14 19:08+0100\n"
+"POT-Creation-Date: 2015-12-24 12:56+0100\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"
@@ -601,6 +601,9 @@
 msgid "change subtitle track"
 msgstr ""
 
+msgid "seek to beginning"
+msgstr ""
+
 msgid "show keyboard shortcuts"
 msgstr ""
 
diff --git a/po/bg.gmo b/po/bg.gmo
index 25216bd..faef1ee 100644
--- a/po/bg.gmo
+++ b/po/bg.gmo
Binary files differ
diff --git a/po/bg.po b/po/bg.po
index 5c00ded..29eaa9e 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: 2015-12-14 19:08+0100\n"
+"POT-Creation-Date: 2015-12-24 12:56+0100\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"
@@ -603,6 +603,9 @@
 msgid "change subtitle track"
 msgstr "Субтитри, формат Kate"
 
+msgid "seek to beginning"
+msgstr ""
+
 msgid "show keyboard shortcuts"
 msgstr ""
 
diff --git a/po/ca.gmo b/po/ca.gmo
index 2e49407..4f422c3 100644
--- a/po/ca.gmo
+++ b/po/ca.gmo
Binary files differ
diff --git a/po/ca.po b/po/ca.po
index 56641fc..1b1be87 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: 2015-12-14 19:08+0100\n"
+"POT-Creation-Date: 2015-12-24 12:56+0100\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"
@@ -616,6 +616,9 @@
 msgid "change subtitle track"
 msgstr "Format de subtítols Kate"
 
+msgid "seek to beginning"
+msgstr ""
+
 msgid "show keyboard shortcuts"
 msgstr ""
 
diff --git a/po/cs.gmo b/po/cs.gmo
index 877c303..e989636 100644
--- a/po/cs.gmo
+++ b/po/cs.gmo
Binary files differ
diff --git a/po/cs.po b/po/cs.po
index cf74855..06e08e8 100644
--- a/po/cs.po
+++ b/po/cs.po
@@ -10,7 +10,7 @@
 msgstr ""
 "Project-Id-Version: gst-plugins-base-1.5.2\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2015-12-14 19:08+0100\n"
+"POT-Creation-Date: 2015-12-24 12:56+0100\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"
@@ -602,6 +602,9 @@
 msgid "change subtitle track"
 msgstr "změnit stopu titulků"
 
+msgid "seek to beginning"
+msgstr ""
+
 msgid "show keyboard shortcuts"
 msgstr "zobrazit klávesové zkratky"
 
diff --git a/po/da.gmo b/po/da.gmo
index 49d09bb..b22e6f2 100644
--- a/po/da.gmo
+++ b/po/da.gmo
Binary files differ
diff --git a/po/da.po b/po/da.po
index 6cc65c4..2550ba1 100644
--- a/po/da.po
+++ b/po/da.po
@@ -33,7 +33,7 @@
 msgstr ""
 "Project-Id-Version: gst-plugins-base 1.5.2\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2015-12-14 19:08+0100\n"
+"POT-Creation-Date: 2015-12-24 12:56+0100\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"
@@ -638,6 +638,9 @@
 msgid "change subtitle track"
 msgstr "ændr undertekstspor"
 
+msgid "seek to beginning"
+msgstr ""
+
 msgid "show keyboard shortcuts"
 msgstr "vis genvejstaster"
 
diff --git a/po/de.gmo b/po/de.gmo
index 7fbc0ef..956d0b6 100644
--- a/po/de.gmo
+++ b/po/de.gmo
Binary files differ
diff --git a/po/de.po b/po/de.po
index c01afef..3ef84a0 100644
--- a/po/de.po
+++ b/po/de.po
@@ -9,7 +9,7 @@
 msgstr ""
 "Project-Id-Version: gst-plugins-base 1.5.2\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2015-12-14 19:08+0100\n"
+"POT-Creation-Date: 2015-12-24 12:56+0100\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"
@@ -605,6 +605,9 @@
 msgid "change subtitle track"
 msgstr "Untertitel wechseln"
 
+msgid "seek to beginning"
+msgstr ""
+
 msgid "show keyboard shortcuts"
 msgstr "Tastenkombinationen anzeigen"
 
diff --git a/po/el.gmo b/po/el.gmo
index 50f608a..ef98cdf 100644
--- a/po/el.gmo
+++ b/po/el.gmo
Binary files differ
diff --git a/po/el.po b/po/el.po
index d125ec7..1f53429 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: 2015-12-14 19:08+0100\n"
+"POT-Creation-Date: 2015-12-24 12:56+0100\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"
@@ -621,6 +621,9 @@
 msgid "change subtitle track"
 msgstr "Μορφή υποτίτλων Kate"
 
+msgid "seek to beginning"
+msgstr ""
+
 msgid "show keyboard shortcuts"
 msgstr ""
 
diff --git a/po/en_GB.gmo b/po/en_GB.gmo
index 1b9d761..0ad2149 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 0354232..5923930 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: 2015-12-14 19:08+0100\n"
+"POT-Creation-Date: 2015-12-24 12:56+0100\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"
@@ -599,6 +599,9 @@
 msgid "change subtitle track"
 msgstr ""
 
+msgid "seek to beginning"
+msgstr ""
+
 msgid "show keyboard shortcuts"
 msgstr ""
 
diff --git a/po/eo.gmo b/po/eo.gmo
index 2ffd719..22e4f4a 100644
--- a/po/eo.gmo
+++ b/po/eo.gmo
Binary files differ
diff --git a/po/eo.po b/po/eo.po
index 30d2d8f..0134ced 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: 2015-12-14 19:08+0100\n"
+"POT-Creation-Date: 2015-12-24 12:56+0100\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"
@@ -594,6 +594,9 @@
 msgid "change subtitle track"
 msgstr ""
 
+msgid "seek to beginning"
+msgstr ""
+
 msgid "show keyboard shortcuts"
 msgstr ""
 
diff --git a/po/es.gmo b/po/es.gmo
index 3dc6498..fe9bd79 100644
--- a/po/es.gmo
+++ b/po/es.gmo
Binary files differ
diff --git a/po/es.po b/po/es.po
index 5c701e3..f234c38 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: 2015-12-14 19:08+0100\n"
+"POT-Creation-Date: 2015-12-24 12:56+0100\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"
@@ -604,6 +604,9 @@
 msgid "change subtitle track"
 msgstr "Formato de subtítulos kate"
 
+msgid "seek to beginning"
+msgstr ""
+
 msgid "show keyboard shortcuts"
 msgstr ""
 
diff --git a/po/eu.gmo b/po/eu.gmo
index 890505a..ef46630 100644
--- a/po/eu.gmo
+++ b/po/eu.gmo
Binary files differ
diff --git a/po/eu.po b/po/eu.po
index a782c6d..53dc5f5 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: 2015-12-14 19:08+0100\n"
+"POT-Creation-Date: 2015-12-24 12:56+0100\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"
@@ -606,6 +606,9 @@
 msgid "change subtitle track"
 msgstr "'Kate' azpititulu-formatua"
 
+msgid "seek to beginning"
+msgstr ""
+
 msgid "show keyboard shortcuts"
 msgstr ""
 
diff --git a/po/fi.gmo b/po/fi.gmo
index 78328a7..bbd7d95 100644
--- a/po/fi.gmo
+++ b/po/fi.gmo
Binary files differ
diff --git a/po/fi.po b/po/fi.po
index f38c0f6..e1b8f34 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: 2015-12-14 19:08+0100\n"
+"POT-Creation-Date: 2015-12-24 12:56+0100\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"
@@ -608,6 +608,9 @@
 msgid "change subtitle track"
 msgstr "Kate-tekstitysmuoto"
 
+msgid "seek to beginning"
+msgstr ""
+
 msgid "show keyboard shortcuts"
 msgstr ""
 
diff --git a/po/fr.gmo b/po/fr.gmo
index 0ea50e8..1b49c63 100644
--- a/po/fr.gmo
+++ b/po/fr.gmo
Binary files differ
diff --git a/po/fr.po b/po/fr.po
index 3990818..5ce7384 100644
--- a/po/fr.po
+++ b/po/fr.po
@@ -10,7 +10,7 @@
 msgstr ""
 "Project-Id-Version: gst-plugins-base 1.4.1\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2015-12-14 19:08+0100\n"
+"POT-Creation-Date: 2015-12-24 12:56+0100\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"
@@ -619,6 +619,9 @@
 msgid "change subtitle track"
 msgstr "Format de sous-titres Kate"
 
+msgid "seek to beginning"
+msgstr ""
+
 msgid "show keyboard shortcuts"
 msgstr ""
 
diff --git a/po/gl.gmo b/po/gl.gmo
index f7e55c6..1993f2f 100644
--- a/po/gl.gmo
+++ b/po/gl.gmo
Binary files differ
diff --git a/po/gl.po b/po/gl.po
index 98a4825..823fd0b 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: 2015-12-14 19:08+0100\n"
+"POT-Creation-Date: 2015-12-24 12:56+0100\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"
@@ -604,6 +604,9 @@
 msgid "change subtitle track"
 msgstr "Formato de subtítulos Kate"
 
+msgid "seek to beginning"
+msgstr ""
+
 msgid "show keyboard shortcuts"
 msgstr ""
 
diff --git a/po/gst-plugins-base-1.0.pot b/po/gst-plugins-base-1.0.pot
index e248527..1ffa8ab 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.6.2\n"
+"Project-Id-Version: gst-plugins-base 1.7.1\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2015-12-14 19:08+0100\n"
+"POT-Creation-Date: 2015-12-24 12:56+0100\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"
@@ -82,11 +82,11 @@
 msgid "Could not read CD."
 msgstr ""
 
-#: ext/ogg/gstoggdemux.c:4834
+#: ext/ogg/gstoggdemux.c:4859
 msgid "Internal data stream error."
 msgstr ""
 
-#: gst/encoding/gstencodebin.c:1571 gst/playback/gstplaybin2.c:3362
+#: gst/encoding/gstencodebin.c:1579 gst/playback/gstplaybin2.c:3362
 #: 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
@@ -101,11 +101,11 @@
 msgid "Missing element '%s' - check your GStreamer installation."
 msgstr ""
 
-#: gst/playback/gstdecodebin2.c:1872
+#: gst/playback/gstdecodebin2.c:1882
 msgid "Could not determine type of stream"
 msgstr ""
 
-#: gst/playback/gstdecodebin2.c:2843
+#: gst/playback/gstdecodebin2.c:2835
 msgid "This appears to be a text file"
 msgstr ""
 
@@ -203,7 +203,7 @@
 msgid "Error while sending data to \"%s:%d\"."
 msgstr ""
 
-#: gst-libs/gst/audio/gstaudiobasesrc.c:863
+#: gst-libs/gst/audio/gstaudiobasesrc.c:866
 msgid "Can't record audio fast enough"
 msgstr ""
 
@@ -289,127 +289,127 @@
 msgid "Kate subtitle format"
 msgstr ""
 
-#: gst-libs/gst/pbutils/descriptions.c:451
-#: gst-libs/gst/pbutils/descriptions.c:454
-#: gst-libs/gst/pbutils/descriptions.c:504
+#: gst-libs/gst/pbutils/descriptions.c:452
+#: gst-libs/gst/pbutils/descriptions.c:455
+#: gst-libs/gst/pbutils/descriptions.c:505
 msgid "Uncompressed video"
 msgstr ""
 
-#: gst-libs/gst/pbutils/descriptions.c:459
+#: gst-libs/gst/pbutils/descriptions.c:460
 msgid "Uncompressed gray"
 msgstr ""
 
-#: gst-libs/gst/pbutils/descriptions.c:482
+#: gst-libs/gst/pbutils/descriptions.c:483
 #, c-format
 msgid "Uncompressed packed YUV %s"
 msgstr ""
 
-#: gst-libs/gst/pbutils/descriptions.c:484
+#: gst-libs/gst/pbutils/descriptions.c:485
 #, c-format
 msgid "Uncompressed semi-planar YUV %s"
 msgstr ""
 
-#: gst-libs/gst/pbutils/descriptions.c:486
+#: gst-libs/gst/pbutils/descriptions.c:487
 #, c-format
 msgid "Uncompressed planar YUV %s"
 msgstr ""
 
-#: gst-libs/gst/pbutils/descriptions.c:497
+#: gst-libs/gst/pbutils/descriptions.c:498
 #, c-format
 msgid "Uncompressed palettized %d-bit %s"
 msgstr ""
 
-#: gst-libs/gst/pbutils/descriptions.c:500
+#: gst-libs/gst/pbutils/descriptions.c:501
 #, c-format
 msgid "Uncompressed %d-bit %s"
 msgstr ""
 
-#: gst-libs/gst/pbutils/descriptions.c:582
+#: gst-libs/gst/pbutils/descriptions.c:583
 #, c-format
 msgid "DivX MPEG-4 Version %d"
 msgstr ""
 
-#: gst-libs/gst/pbutils/descriptions.c:829
+#: gst-libs/gst/pbutils/descriptions.c:830
 msgid "Uncompressed audio"
 msgstr ""
 
-#: gst-libs/gst/pbutils/descriptions.c:835
+#: gst-libs/gst/pbutils/descriptions.c:836
 #, c-format
 msgid "Raw %d-bit %s audio"
 msgstr ""
 
-#: gst-libs/gst/pbutils/descriptions.c:935
+#: gst-libs/gst/pbutils/descriptions.c:936
 msgid "Audio CD source"
 msgstr ""
 
-#: gst-libs/gst/pbutils/descriptions.c:938
+#: gst-libs/gst/pbutils/descriptions.c:939
 msgid "DVD source"
 msgstr ""
 
-#: gst-libs/gst/pbutils/descriptions.c:941
+#: gst-libs/gst/pbutils/descriptions.c:942
 msgid "Real Time Streaming Protocol (RTSP) source"
 msgstr ""
 
-#: gst-libs/gst/pbutils/descriptions.c:945
+#: gst-libs/gst/pbutils/descriptions.c:946
 msgid "Microsoft Media Server (MMS) protocol source"
 msgstr ""
 
-#: gst-libs/gst/pbutils/descriptions.c:953
+#: gst-libs/gst/pbutils/descriptions.c:954
 #, c-format
 msgid "%s protocol source"
 msgstr ""
 
-#: gst-libs/gst/pbutils/descriptions.c:1025
+#: gst-libs/gst/pbutils/descriptions.c:1026
 #, c-format
 msgid "%s video RTP depayloader"
 msgstr ""
 
-#: gst-libs/gst/pbutils/descriptions.c:1027
+#: gst-libs/gst/pbutils/descriptions.c:1028
 #, c-format
 msgid "%s audio RTP depayloader"
 msgstr ""
 
-#: gst-libs/gst/pbutils/descriptions.c:1029
+#: gst-libs/gst/pbutils/descriptions.c:1030
 #, c-format
 msgid "%s RTP depayloader"
 msgstr ""
 
-#: gst-libs/gst/pbutils/descriptions.c:1036
+#: gst-libs/gst/pbutils/descriptions.c:1037
 #, c-format
 msgid "%s demuxer"
 msgstr ""
 
-#: gst-libs/gst/pbutils/descriptions.c:1038
+#: gst-libs/gst/pbutils/descriptions.c:1039
 #, c-format
 msgid "%s decoder"
 msgstr ""
 
-#: gst-libs/gst/pbutils/descriptions.c:1076
+#: gst-libs/gst/pbutils/descriptions.c:1077
 #, c-format
 msgid "%s video RTP payloader"
 msgstr ""
 
-#: gst-libs/gst/pbutils/descriptions.c:1078
+#: gst-libs/gst/pbutils/descriptions.c:1079
 #, c-format
 msgid "%s audio RTP payloader"
 msgstr ""
 
-#: gst-libs/gst/pbutils/descriptions.c:1080
+#: gst-libs/gst/pbutils/descriptions.c:1081
 #, c-format
 msgid "%s RTP payloader"
 msgstr ""
 
-#: gst-libs/gst/pbutils/descriptions.c:1087
+#: gst-libs/gst/pbutils/descriptions.c:1088
 #, c-format
 msgid "%s muxer"
 msgstr ""
 
-#: gst-libs/gst/pbutils/descriptions.c:1089
+#: gst-libs/gst/pbutils/descriptions.c:1090
 #, c-format
 msgid "%s encoder"
 msgstr ""
 
-#: gst-libs/gst/pbutils/descriptions.c:1121
+#: gst-libs/gst/pbutils/descriptions.c:1122
 #, c-format
 msgid "GStreamer element %s"
 msgstr ""
@@ -659,7 +659,7 @@
 msgid "Initial key in which the sound starts"
 msgstr ""
 
-#: tools/gst-device-monitor.c:141 tools/gst-play.c:1105
+#: tools/gst-device-monitor.c:141 tools/gst-play.c:1108
 msgid "Print version information and exit"
 msgstr ""
 
@@ -683,7 +683,7 @@
 msgstr ""
 
 #: tools/gst-play.c:339 tools/gst-play.c:385 tools/gst-play.c:737
-#: tools/gst-play.c:1019
+#: tools/gst-play.c:1020
 msgid "Reached end of play list."
 msgstr ""
 
@@ -780,54 +780,58 @@
 msgstr ""
 
 #: tools/gst-play.c:976
+msgid "seek to beginning"
+msgstr ""
+
+#: tools/gst-play.c:977
 msgid "show keyboard shortcuts"
 msgstr ""
 
-#: tools/gst-play.c:979
+#: tools/gst-play.c:980
 msgid "Interactive mode - keyboard controls:"
 msgstr ""
 
-#: tools/gst-play.c:1107
+#: tools/gst-play.c:1110
 msgid "Video sink to use (default is autovideosink)"
 msgstr ""
 
-#: tools/gst-play.c:1109
+#: tools/gst-play.c:1112
 msgid "Audio sink to use (default is autoaudiosink)"
 msgstr ""
 
-#: tools/gst-play.c:1111
+#: tools/gst-play.c:1114
 msgid "Enable gapless playback"
 msgstr ""
 
-#: tools/gst-play.c:1113
+#: tools/gst-play.c:1116
 msgid "Shuffle playlist"
 msgstr ""
 
-#: tools/gst-play.c:1116
+#: tools/gst-play.c:1119
 msgid "Disable interactive control via the keyboard"
 msgstr ""
 
-#: tools/gst-play.c:1118
+#: tools/gst-play.c:1121
 msgid "Volume"
 msgstr ""
 
-#: tools/gst-play.c:1120
+#: tools/gst-play.c:1123
 msgid "Playlist file containing input media files"
 msgstr ""
 
-#: tools/gst-play.c:1122
+#: tools/gst-play.c:1125
 msgid "Do not print any output (apart from errors)"
 msgstr ""
 
-#: tools/gst-play.c:1191
+#: tools/gst-play.c:1196
 #, c-format
 msgid "Usage: %s FILE1|URI1 [FILE2|URI2] [FILE3|URI3] ..."
 msgstr ""
 
-#: tools/gst-play.c:1195
+#: tools/gst-play.c:1200
 msgid "You must provide at least one filename or URI to play."
 msgstr ""
 
-#: tools/gst-play.c:1234
+#: tools/gst-play.c:1239
 msgid "Press 'k' to see a list of keyboard shortcuts.\n"
 msgstr ""
diff --git a/po/hr.gmo b/po/hr.gmo
index 7db02f9..014248f 100644
--- a/po/hr.gmo
+++ b/po/hr.gmo
Binary files differ
diff --git a/po/hr.po b/po/hr.po
index a9cf2d8..39ab41c 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: 2015-12-14 19:08+0100\n"
+"POT-Creation-Date: 2015-12-24 12:56+0100\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"
@@ -603,6 +603,9 @@
 msgid "change subtitle track"
 msgstr "Kate oblik titlova"
 
+msgid "seek to beginning"
+msgstr ""
+
 msgid "show keyboard shortcuts"
 msgstr ""
 
diff --git a/po/hu.gmo b/po/hu.gmo
index 8fa93a7..0f0fa2a 100644
--- a/po/hu.gmo
+++ b/po/hu.gmo
Binary files differ
diff --git a/po/hu.po b/po/hu.po
index 93650d3..5c17ce7 100644
--- a/po/hu.po
+++ b/po/hu.po
@@ -9,7 +9,7 @@
 msgstr ""
 "Project-Id-Version: gst-plugins-base 1.5.2\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2015-12-14 19:08+0100\n"
+"POT-Creation-Date: 2015-12-24 12:56+0100\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"
@@ -599,6 +599,9 @@
 msgid "change subtitle track"
 msgstr "feliratsáv megváltoztatása"
 
+msgid "seek to beginning"
+msgstr ""
+
 msgid "show keyboard shortcuts"
 msgstr "gyorsbillentyűk megjelenítése"
 
diff --git a/po/id.gmo b/po/id.gmo
index a248286..0078dca 100644
--- a/po/id.gmo
+++ b/po/id.gmo
Binary files differ
diff --git a/po/id.po b/po/id.po
index 87a9b14..affb03b 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: 2015-12-14 19:08+0100\n"
+"POT-Creation-Date: 2015-12-24 12:56+0100\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"
@@ -599,6 +599,9 @@
 msgid "change subtitle track"
 msgstr "Format subjudul Kate"
 
+msgid "seek to beginning"
+msgstr ""
+
 msgid "show keyboard shortcuts"
 msgstr ""
 
diff --git a/po/it.gmo b/po/it.gmo
index 9294961..b9d144a 100644
--- a/po/it.gmo
+++ b/po/it.gmo
Binary files differ
diff --git a/po/it.po b/po/it.po
index e3ebb5e..331ddba 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: 2015-12-14 19:08+0100\n"
+"POT-Creation-Date: 2015-12-24 12:56+0100\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"
@@ -635,6 +635,9 @@
 msgid "change subtitle track"
 msgstr "Sottotitoli formato Kate"
 
+msgid "seek to beginning"
+msgstr ""
+
 msgid "show keyboard shortcuts"
 msgstr ""
 
diff --git a/po/ja.gmo b/po/ja.gmo
index 43d6be7..fd28684 100644
--- a/po/ja.gmo
+++ b/po/ja.gmo
Binary files differ
diff --git a/po/ja.po b/po/ja.po
index 29c19b9..c3f954d 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: 2015-12-14 19:08+0100\n"
+"POT-Creation-Date: 2015-12-24 12:56+0100\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"
@@ -606,6 +606,9 @@
 msgid "change subtitle track"
 msgstr "Kate 字幕形式"
 
+msgid "seek to beginning"
+msgstr ""
+
 msgid "show keyboard shortcuts"
 msgstr ""
 
diff --git a/po/lt.gmo b/po/lt.gmo
index 85d78fa..d0ec3b4 100644
--- a/po/lt.gmo
+++ b/po/lt.gmo
Binary files differ
diff --git a/po/lt.po b/po/lt.po
index ccf3249..d406381 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: 2015-12-14 19:08+0100\n"
+"POT-Creation-Date: 2015-12-24 12:56+0100\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"
@@ -610,6 +610,9 @@
 msgid "change subtitle track"
 msgstr "Sami titrų formatas"
 
+msgid "seek to beginning"
+msgstr ""
+
 msgid "show keyboard shortcuts"
 msgstr ""
 
diff --git a/po/lv.gmo b/po/lv.gmo
index 5a67748..8ed93ff 100644
--- a/po/lv.gmo
+++ b/po/lv.gmo
Binary files differ
diff --git a/po/lv.po b/po/lv.po
index 454093b..3dbb8ee 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: 2015-12-14 19:08+0100\n"
+"POT-Creation-Date: 2015-12-24 12:56+0100\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"
@@ -601,6 +601,9 @@
 msgid "change subtitle track"
 msgstr "Kate subtitru formāts"
 
+msgid "seek to beginning"
+msgstr ""
+
 msgid "show keyboard shortcuts"
 msgstr ""
 
diff --git a/po/nb.gmo b/po/nb.gmo
index 14bfcc2..efa0bcd 100644
--- a/po/nb.gmo
+++ b/po/nb.gmo
Binary files differ
diff --git a/po/nb.po b/po/nb.po
index caf6572..2019014 100644
--- a/po/nb.po
+++ b/po/nb.po
@@ -8,7 +8,7 @@
 msgstr ""
 "Project-Id-Version: gst-plugins-base 1.5.2\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2015-12-14 19:08+0100\n"
+"POT-Creation-Date: 2015-12-24 12:56+0100\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"
@@ -597,6 +597,9 @@
 msgid "change subtitle track"
 msgstr "endre undertekstspor"
 
+msgid "seek to beginning"
+msgstr ""
+
 msgid "show keyboard shortcuts"
 msgstr "vis hurtigtaster"
 
diff --git a/po/nl.gmo b/po/nl.gmo
index 736c27c..2d8d3d2 100644
--- a/po/nl.gmo
+++ b/po/nl.gmo
Binary files differ
diff --git a/po/nl.po b/po/nl.po
index f3bfe57..5883b51 100644
--- a/po/nl.po
+++ b/po/nl.po
@@ -6,7 +6,7 @@
 msgstr ""
 "Project-Id-Version: gst-plugins-base 1.6.0\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2015-12-14 19:08+0100\n"
+"POT-Creation-Date: 2015-12-24 12:56+0100\n"
 "PO-Revision-Date: 2015-10-17 12:35+0200\n"
 "Last-Translator: Freek de Kruijf <f.de.kruijf@gmail.com>\n"
 "Language-Team: Dutch <vertaling@vrijschrift.org>\n"
@@ -606,6 +606,9 @@
 msgid "change subtitle track"
 msgstr "ondertiteltrack wijzigen"
 
+msgid "seek to beginning"
+msgstr ""
+
 msgid "show keyboard shortcuts"
 msgstr "sneltoetsen tonen"
 
diff --git a/po/or.gmo b/po/or.gmo
index b459b9a..3eb6c19 100644
--- a/po/or.gmo
+++ b/po/or.gmo
Binary files differ
diff --git a/po/or.po b/po/or.po
index 3d786e4..b4e2165 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: 2015-12-14 19:08+0100\n"
+"POT-Creation-Date: 2015-12-24 12:56+0100\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"
@@ -601,6 +601,9 @@
 msgid "change subtitle track"
 msgstr ""
 
+msgid "seek to beginning"
+msgstr ""
+
 msgid "show keyboard shortcuts"
 msgstr ""
 
diff --git a/po/pl.gmo b/po/pl.gmo
index 65c9f5b..688dddb 100644
--- a/po/pl.gmo
+++ b/po/pl.gmo
Binary files differ
diff --git a/po/pl.po b/po/pl.po
index 576d2d9..ba59cb2 100644
--- a/po/pl.po
+++ b/po/pl.po
@@ -6,7 +6,7 @@
 msgstr ""
 "Project-Id-Version: gst-plugins-base 1.5.2\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2015-12-14 19:08+0100\n"
+"POT-Creation-Date: 2015-12-24 12:56+0100\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"
@@ -604,6 +604,9 @@
 msgid "change subtitle track"
 msgstr "zmiana ścieżki podpisów"
 
+msgid "seek to beginning"
+msgstr ""
+
 msgid "show keyboard shortcuts"
 msgstr "wyświetlenie skrótów klawiatury"
 
diff --git a/po/pt_BR.gmo b/po/pt_BR.gmo
index 678d1cd..8a408f7 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 b3f2381..14436ae 100644
--- a/po/pt_BR.po
+++ b/po/pt_BR.po
@@ -11,7 +11,7 @@
 msgstr ""
 "Project-Id-Version: gst-plugins-base-1.4.1\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2015-12-14 19:08+0100\n"
+"POT-Creation-Date: 2015-12-24 12:56+0100\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."
@@ -614,6 +614,9 @@
 msgid "change subtitle track"
 msgstr "Formato de legendas Kate"
 
+msgid "seek to beginning"
+msgstr ""
+
 msgid "show keyboard shortcuts"
 msgstr ""
 
diff --git a/po/ro.gmo b/po/ro.gmo
index b5045f1..215e9b4 100644
--- a/po/ro.gmo
+++ b/po/ro.gmo
Binary files differ
diff --git a/po/ro.po b/po/ro.po
index fe7e061..3822fe7 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: 2015-12-14 19:08+0100\n"
+"POT-Creation-Date: 2015-12-24 12:56+0100\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"
@@ -603,6 +603,9 @@
 msgid "change subtitle track"
 msgstr "Format subtitrare Kate"
 
+msgid "seek to beginning"
+msgstr ""
+
 msgid "show keyboard shortcuts"
 msgstr ""
 
diff --git a/po/ru.gmo b/po/ru.gmo
index 55a9c0a..b84010a 100644
--- a/po/ru.gmo
+++ b/po/ru.gmo
Binary files differ
diff --git a/po/ru.po b/po/ru.po
index 285e774..00afb9a 100644
--- a/po/ru.po
+++ b/po/ru.po
@@ -8,7 +8,7 @@
 msgstr ""
 "Project-Id-Version: gst-plugins-base 1.5.2\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2015-12-14 19:08+0100\n"
+"POT-Creation-Date: 2015-12-24 12:56+0100\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"
@@ -602,6 +602,9 @@
 msgid "change subtitle track"
 msgstr "изменить дорожку субтитров"
 
+msgid "seek to beginning"
+msgstr ""
+
 msgid "show keyboard shortcuts"
 msgstr "показать клавиатурные сокращения"
 
diff --git a/po/sk.gmo b/po/sk.gmo
index af2b64a..7058afb 100644
--- a/po/sk.gmo
+++ b/po/sk.gmo
Binary files differ
diff --git a/po/sk.po b/po/sk.po
index 688db18..0b9e991 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: 2015-12-14 19:08+0100\n"
+"POT-Creation-Date: 2015-12-24 12:56+0100\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"
@@ -598,6 +598,9 @@
 msgid "change subtitle track"
 msgstr "Formát titulkov Kate"
 
+msgid "seek to beginning"
+msgstr ""
+
 msgid "show keyboard shortcuts"
 msgstr ""
 
diff --git a/po/sl.gmo b/po/sl.gmo
index 465e84c..f59aab6 100644
--- a/po/sl.gmo
+++ b/po/sl.gmo
Binary files differ
diff --git a/po/sl.po b/po/sl.po
index 1ec73a2..54818d1 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: 2015-12-14 19:08+0100\n"
+"POT-Creation-Date: 2015-12-24 12:56+0100\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"
@@ -599,6 +599,9 @@
 msgid "change subtitle track"
 msgstr "Oblika podnapisov Kate"
 
+msgid "seek to beginning"
+msgstr ""
+
 msgid "show keyboard shortcuts"
 msgstr ""
 
diff --git a/po/sq.gmo b/po/sq.gmo
index 8c3d067..e0c816b 100644
--- a/po/sq.gmo
+++ b/po/sq.gmo
Binary files differ
diff --git a/po/sq.po b/po/sq.po
index 79d2ce8..a1ffb60 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: 2015-12-14 19:08+0100\n"
+"POT-Creation-Date: 2015-12-24 12:56+0100\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"
@@ -599,6 +599,9 @@
 msgid "change subtitle track"
 msgstr ""
 
+msgid "seek to beginning"
+msgstr ""
+
 msgid "show keyboard shortcuts"
 msgstr ""
 
diff --git a/po/sr.gmo b/po/sr.gmo
index 1e8bbb6..815dc69 100644
--- a/po/sr.gmo
+++ b/po/sr.gmo
Binary files differ
diff --git a/po/sr.po b/po/sr.po
index a51da5a..1c39f12 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: 2015-12-14 19:08+0100\n"
+"POT-Creation-Date: 2015-12-24 12:56+0100\n"
 "PO-Revision-Date: 2014-09-13 10:45+0200\n"
 "Last-Translator: Мирослав Николић <miroslavnikolic@rocketmail.com>\n"
 "Language-Team: Serbian <(nothing)>\n"
@@ -599,6 +599,9 @@
 msgid "change subtitle track"
 msgstr "Кејт запис превода"
 
+msgid "seek to beginning"
+msgstr ""
+
 msgid "show keyboard shortcuts"
 msgstr ""
 
diff --git a/po/sv.gmo b/po/sv.gmo
index 7c4cebf..8f8fd13 100644
--- a/po/sv.gmo
+++ b/po/sv.gmo
Binary files differ
diff --git a/po/sv.po b/po/sv.po
index 8b2fd00..b18ae65 100644
--- a/po/sv.po
+++ b/po/sv.po
@@ -9,7 +9,7 @@
 msgstr ""
 "Project-Id-Version: gst-plugins-base 1.6.0\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2015-12-14 19:08+0100\n"
+"POT-Creation-Date: 2015-12-24 12:56+0100\n"
 "PO-Revision-Date: 2015-11-01 00:49+0100\n"
 "Last-Translator: Sebastian Rasmussen <sebras@gmail.com>\n"
 "Language-Team: Swedish <tp-sv@listor.tp-sv.se>\n"
@@ -597,6 +597,9 @@
 msgid "change subtitle track"
 msgstr "byt undertextspår"
 
+msgid "seek to beginning"
+msgstr ""
+
 msgid "show keyboard shortcuts"
 msgstr "visa tangentbordsgenvägar"
 
diff --git a/po/tr.gmo b/po/tr.gmo
index bb67362..5b0e422 100644
--- a/po/tr.gmo
+++ b/po/tr.gmo
Binary files differ
diff --git a/po/tr.po b/po/tr.po
index 71f062b..3dade98 100644
--- a/po/tr.po
+++ b/po/tr.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: 2015-12-14 19:08+0100\n"
+"POT-Creation-Date: 2015-12-24 12:56+0100\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"
@@ -599,6 +599,9 @@
 msgid "change subtitle track"
 msgstr "Kate altyazı kipi"
 
+msgid "seek to beginning"
+msgstr ""
+
 msgid "show keyboard shortcuts"
 msgstr ""
 
diff --git a/po/uk.gmo b/po/uk.gmo
index 26203f1..7715295 100644
--- a/po/uk.gmo
+++ b/po/uk.gmo
Binary files differ
diff --git a/po/uk.po b/po/uk.po
index c165504..293ac24 100644
--- a/po/uk.po
+++ b/po/uk.po
@@ -8,7 +8,7 @@
 msgstr ""
 "Project-Id-Version: gst-plugins-base 1.5.2\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2015-12-14 19:08+0100\n"
+"POT-Creation-Date: 2015-12-24 12:56+0100\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"
@@ -614,6 +614,9 @@
 msgid "change subtitle track"
 msgstr "змінити доріжку субтитрів"
 
+msgid "seek to beginning"
+msgstr ""
+
 msgid "show keyboard shortcuts"
 msgstr "показати клавіатурні скорочення"
 
diff --git a/po/vi.gmo b/po/vi.gmo
index 9556606..d580698 100644
--- a/po/vi.gmo
+++ b/po/vi.gmo
Binary files differ
diff --git a/po/vi.po b/po/vi.po
index a59fe47..8f2838b 100644
--- a/po/vi.po
+++ b/po/vi.po
@@ -9,7 +9,7 @@
 msgstr ""
 "Project-Id-Version: gst-plugins-base 1.5.2\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2015-12-14 19:08+0100\n"
+"POT-Creation-Date: 2015-12-24 12:56+0100\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"
@@ -606,6 +606,9 @@
 msgid "change subtitle track"
 msgstr "đổi phụ đề rãnh"
 
+msgid "seek to beginning"
+msgstr ""
+
 msgid "show keyboard shortcuts"
 msgstr "hiện phím tắt"
 
diff --git a/po/zh_CN.gmo b/po/zh_CN.gmo
index ffb622b..adfdf5a 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 b7b8939..00dbbb5 100644
--- a/po/zh_CN.po
+++ b/po/zh_CN.po
@@ -7,7 +7,7 @@
 msgstr ""
 "Project-Id-Version: gst-plugins-base 1.6.0\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2015-12-14 19:08+0100\n"
+"POT-Creation-Date: 2015-12-24 12:56+0100\n"
 "PO-Revision-Date: 2015-10-16 19:29+0800\n"
 "Last-Translator: Tianze Wang <zwpwjwtz@126.com>\n"
 "Language-Team: Chinese (simplified) <i18n-zh@googlegroups.com>\n"
@@ -589,6 +589,9 @@
 msgid "change subtitle track"
 msgstr "改变字幕轨"
 
+msgid "seek to beginning"
+msgstr ""
+
 msgid "show keyboard shortcuts"
 msgstr "显示键盘快捷键"
 
diff --git a/tests/check/Makefile.am b/tests/check/Makefile.am
index e47a2ad..1a51fc6 100644
--- a/tests/check/Makefile.am
+++ b/tests/check/Makefile.am
@@ -140,7 +140,7 @@
 endif
 
 if HAVE_ORC
-check_orc = orc/video orc/audio orc/adder orc/audioconvert orc/volume orc/videotestsrc
+check_orc = orc/video orc/audio orc/adder orc/volume orc/videotestsrc
 else
 check_orc =
 endif
@@ -194,6 +194,7 @@
 	libs/audiocdsrc \
 	libs/audiodecoder \
 	libs/audioencoder \
+	libs/baseaudiovisualizer \
 	libs/discoverer \
 	libs/fft \
 	libs/navigation \
@@ -342,6 +343,16 @@
 	$(GST_BASE_LIBS) \
 	$(LDADD)
 
+libs_baseaudiovisualizer_SOURCES = libs/baseaudiovisualizer.c
+libs_baseaudiovisualizer_CFLAGS = \
+        $(GST_PLUGINS_BASE_CFLAGS) \
+        $(GST_BASE_CFLAGS) $(GST_CONTROLLER_CFLAGS) $(GST_CFLAGS) $(AM_CFLAGS)
+libs_baseaudiovisualizer_LDADD = \
+        $(top_builddir)/gst-libs/gst/audio/libgstaudio-@GST_API_VERSION@.la \
+        $(top_builddir)/gst-libs/gst/video/libgstvideo-@GST_API_VERSION@.la \
+        $(GST_BASE_LIBS) $(GST_CONTROLLER_LIBS) \
+        $(GST_LIBS) $(LDADD)
+
 libs_discoverer_CFLAGS = \
 	$(GST_PLUGINS_BASE_CFLAGS) \
 	$(AM_CFLAGS) \
@@ -652,9 +663,6 @@
 orc_adder_CFLAGS = $(ORC_CFLAGS)
 orc_adder_LDADD = $(ORC_LIBS) -lorc-test-0.4
 nodist_orc_adder_SOURCES = orc/adder.c
-orc_audioconvert_CFLAGS = $(ORC_CFLAGS)
-orc_audioconvert_LDADD = $(ORC_LIBS) -lorc-test-0.4
-nodist_orc_audioconvert_SOURCES = orc/audioconvert.c
 orc_volume_CFLAGS = $(ORC_CFLAGS)
 orc_volume_LDADD = $(ORC_LIBS) -lorc-test-0.4
 nodist_orc_volume_SOURCES = orc/volume.c
@@ -674,10 +682,6 @@
 	$(MKDIR_P) orc/
 	$(ORCC) --test -o $@ $<
 
-orc/audioconvert.c: $(top_srcdir)/gst/audioconvert/gstaudioconvertorc.orc
-	$(MKDIR_P) orc/
-	$(ORCC) --test -o $@ $<
-
 orc/volume.c: $(top_srcdir)/gst/volume/gstvolumeorc.orc
 	$(MKDIR_P) orc/
 	$(ORCC) --test -o $@ $<
diff --git a/tests/check/Makefile.in b/tests/check/Makefile.in
index e86ded5..8bef044 100644
--- a/tests/check/Makefile.in
+++ b/tests/check/Makefile.in
@@ -94,10 +94,10 @@
 	generic/states$(EXEEXT) libs/libsabi$(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/audioencoder$(EXEEXT) libs/baseaudiovisualizer$(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) \
@@ -200,8 +200,8 @@
 @USE_VORBIS_TRUE@	elements/vorbistag$(EXEEXT)
 @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/videotestsrc$(EXEEXT)
+@HAVE_ORC_TRUE@	orc/adder$(EXEEXT) orc/volume$(EXEEXT) \
+@HAVE_ORC_TRUE@	orc/videotestsrc$(EXEEXT)
 @USE_LIBVISUAL_TRUE@am__EXEEXT_24 = elements/libvisual$(EXEEXT)
 PROGRAMS = $(noinst_PROGRAMS)
 elements_adder_SOURCES = elements/adder.c
@@ -467,6 +467,18 @@
 	$(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
 	$(libs_audioencoder_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) \
 	-o $@
+am_libs_baseaudiovisualizer_OBJECTS =  \
+	libs/libs_baseaudiovisualizer-baseaudiovisualizer.$(OBJEXT)
+libs_baseaudiovisualizer_OBJECTS =  \
+	$(am_libs_baseaudiovisualizer_OBJECTS)
+libs_baseaudiovisualizer_DEPENDENCIES = $(top_builddir)/gst-libs/gst/audio/libgstaudio-@GST_API_VERSION@.la \
+	$(top_builddir)/gst-libs/gst/video/libgstvideo-@GST_API_VERSION@.la \
+	$(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
+	$(am__DEPENDENCIES_1) $(am__DEPENDENCIES_2)
+libs_baseaudiovisualizer_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
+	$(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
+	$(libs_baseaudiovisualizer_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
+	$(LDFLAGS) -o $@
 libs_discoverer_SOURCES = libs/discoverer.c
 libs_discoverer_OBJECTS = libs/libs_discoverer-discoverer.$(OBJEXT)
 libs_discoverer_DEPENDENCIES = $(top_builddir)/gst-libs/gst/pbutils/libgstpbutils-@GST_API_VERSION@.la \
@@ -632,14 +644,6 @@
 orc_audio_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
 	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(orc_audio_CFLAGS) \
 	$(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
-nodist_orc_audioconvert_OBJECTS =  \
-	orc/orc_audioconvert-audioconvert.$(OBJEXT)
-orc_audioconvert_OBJECTS = $(nodist_orc_audioconvert_OBJECTS)
-orc_audioconvert_DEPENDENCIES = $(am__DEPENDENCIES_1)
-orc_audioconvert_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
-	$(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
-	$(orc_audioconvert_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) \
-	-o $@
 nodist_orc_video_OBJECTS = orc/orc_video-video.$(OBJEXT)
 orc_video_OBJECTS = $(nodist_orc_video_OBJECTS)
 orc_video_DEPENDENCIES = $(am__DEPENDENCIES_1)
@@ -806,15 +810,15 @@
 	elements/vorbistag.c generic/clock-selection.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 \
+	libs/audioencoder.c $(libs_baseaudiovisualizer_SOURCES) \
+	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_videotestsrc_SOURCES) \
+	$(nodist_orc_video_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 \
@@ -834,16 +838,17 @@
 	elements/vorbistag.c generic/clock-selection.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 \
+	libs/audioencoder.c $(libs_baseaudiovisualizer_SOURCES) \
+	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 \
@@ -1435,7 +1440,7 @@
 @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/videotestsrc
+@HAVE_ORC_TRUE@check_orc = orc/video orc/audio orc/adder orc/volume orc/videotestsrc
 @USE_PLUGIN_GIO_FALSE@check_gio = 
 @USE_PLUGIN_GIO_TRUE@check_gio = pipelines/gio
 @USE_PLUGIN_APP_FALSE@check_app = 
@@ -1550,6 +1555,17 @@
 	$(GST_BASE_LIBS) \
 	$(LDADD)
 
+libs_baseaudiovisualizer_SOURCES = libs/baseaudiovisualizer.c
+libs_baseaudiovisualizer_CFLAGS = \
+        $(GST_PLUGINS_BASE_CFLAGS) \
+        $(GST_BASE_CFLAGS) $(GST_CONTROLLER_CFLAGS) $(GST_CFLAGS) $(AM_CFLAGS)
+
+libs_baseaudiovisualizer_LDADD = \
+        $(top_builddir)/gst-libs/gst/audio/libgstaudio-@GST_API_VERSION@.la \
+        $(top_builddir)/gst-libs/gst/video/libgstvideo-@GST_API_VERSION@.la \
+        $(GST_BASE_LIBS) $(GST_CONTROLLER_LIBS) \
+        $(GST_LIBS) $(LDADD)
+
 libs_discoverer_CFLAGS = \
 	$(GST_PLUGINS_BASE_CFLAGS) \
 	$(AM_CFLAGS) \
@@ -1855,9 +1871,6 @@
 orc_adder_CFLAGS = $(ORC_CFLAGS)
 orc_adder_LDADD = $(ORC_LIBS) -lorc-test-0.4
 nodist_orc_adder_SOURCES = orc/adder.c
-orc_audioconvert_CFLAGS = $(ORC_CFLAGS)
-orc_audioconvert_LDADD = $(ORC_LIBS) -lorc-test-0.4
-nodist_orc_audioconvert_SOURCES = orc/audioconvert.c
 orc_volume_CFLAGS = $(ORC_CFLAGS)
 orc_volume_LDADD = $(ORC_LIBS) -lorc-test-0.4
 nodist_orc_volume_SOURCES = orc/volume.c
@@ -2133,6 +2146,12 @@
 libs/audioencoder$(EXEEXT): $(libs_audioencoder_OBJECTS) $(libs_audioencoder_DEPENDENCIES) $(EXTRA_libs_audioencoder_DEPENDENCIES) libs/$(am__dirstamp)
 	@rm -f libs/audioencoder$(EXEEXT)
 	$(AM_V_CCLD)$(libs_audioencoder_LINK) $(libs_audioencoder_OBJECTS) $(libs_audioencoder_LDADD) $(LIBS)
+libs/libs_baseaudiovisualizer-baseaudiovisualizer.$(OBJEXT):  \
+	libs/$(am__dirstamp) libs/$(DEPDIR)/$(am__dirstamp)
+
+libs/baseaudiovisualizer$(EXEEXT): $(libs_baseaudiovisualizer_OBJECTS) $(libs_baseaudiovisualizer_DEPENDENCIES) $(EXTRA_libs_baseaudiovisualizer_DEPENDENCIES) libs/$(am__dirstamp)
+	@rm -f libs/baseaudiovisualizer$(EXEEXT)
+	$(AM_V_CCLD)$(libs_baseaudiovisualizer_LINK) $(libs_baseaudiovisualizer_OBJECTS) $(libs_baseaudiovisualizer_LDADD) $(LIBS)
 libs/libs_discoverer-discoverer.$(OBJEXT): libs/$(am__dirstamp) \
 	libs/$(DEPDIR)/$(am__dirstamp)
 
@@ -2265,12 +2284,6 @@
 orc/audio$(EXEEXT): $(orc_audio_OBJECTS) $(orc_audio_DEPENDENCIES) $(EXTRA_orc_audio_DEPENDENCIES) orc/$(am__dirstamp)
 	@rm -f orc/audio$(EXEEXT)
 	$(AM_V_CCLD)$(orc_audio_LINK) $(orc_audio_OBJECTS) $(orc_audio_LDADD) $(LIBS)
-orc/orc_audioconvert-audioconvert.$(OBJEXT): orc/$(am__dirstamp) \
-	orc/$(DEPDIR)/$(am__dirstamp)
-
-orc/audioconvert$(EXEEXT): $(orc_audioconvert_OBJECTS) $(orc_audioconvert_DEPENDENCIES) $(EXTRA_orc_audioconvert_DEPENDENCIES) orc/$(am__dirstamp)
-	@rm -f orc/audioconvert$(EXEEXT)
-	$(AM_V_CCLD)$(orc_audioconvert_LINK) $(orc_audioconvert_OBJECTS) $(orc_audioconvert_LDADD) $(LIBS)
 orc/orc_video-video.$(OBJEXT): orc/$(am__dirstamp) \
 	orc/$(DEPDIR)/$(am__dirstamp)
 
@@ -2401,6 +2414,7 @@
 @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@
 @AMDEP_TRUE@@am__include@ @am__quote@libs/$(DEPDIR)/libs_audioencoder-audioencoder.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@libs/$(DEPDIR)/libs_baseaudiovisualizer-baseaudiovisualizer.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@libs/$(DEPDIR)/libs_discoverer-discoverer.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@libs/$(DEPDIR)/libs_fft-fft.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@libs/$(DEPDIR)/libs_libsabi-libsabi.Po@am__quote@
@@ -2421,7 +2435,6 @@
 @AMDEP_TRUE@@am__include@ @am__quote@libs/$(DEPDIR)/libs_xmpwriter-xmpwriter.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@orc/$(DEPDIR)/orc_adder-adder.Po@am__quote@
 @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_videotestsrc-videotestsrc.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@orc/$(DEPDIR)/orc_volume-volume.Po@am__quote@
@@ -2810,6 +2823,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) $(libs_audioencoder_CFLAGS) $(CFLAGS) -c -o libs/libs_audioencoder-audioencoder.obj `if test -f 'libs/audioencoder.c'; then $(CYGPATH_W) 'libs/audioencoder.c'; else $(CYGPATH_W) '$(srcdir)/libs/audioencoder.c'; fi`
 
+libs/libs_baseaudiovisualizer-baseaudiovisualizer.o: libs/baseaudiovisualizer.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libs_baseaudiovisualizer_CFLAGS) $(CFLAGS) -MT libs/libs_baseaudiovisualizer-baseaudiovisualizer.o -MD -MP -MF libs/$(DEPDIR)/libs_baseaudiovisualizer-baseaudiovisualizer.Tpo -c -o libs/libs_baseaudiovisualizer-baseaudiovisualizer.o `test -f 'libs/baseaudiovisualizer.c' || echo '$(srcdir)/'`libs/baseaudiovisualizer.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) libs/$(DEPDIR)/libs_baseaudiovisualizer-baseaudiovisualizer.Tpo libs/$(DEPDIR)/libs_baseaudiovisualizer-baseaudiovisualizer.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='libs/baseaudiovisualizer.c' object='libs/libs_baseaudiovisualizer-baseaudiovisualizer.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libs_baseaudiovisualizer_CFLAGS) $(CFLAGS) -c -o libs/libs_baseaudiovisualizer-baseaudiovisualizer.o `test -f 'libs/baseaudiovisualizer.c' || echo '$(srcdir)/'`libs/baseaudiovisualizer.c
+
+libs/libs_baseaudiovisualizer-baseaudiovisualizer.obj: libs/baseaudiovisualizer.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libs_baseaudiovisualizer_CFLAGS) $(CFLAGS) -MT libs/libs_baseaudiovisualizer-baseaudiovisualizer.obj -MD -MP -MF libs/$(DEPDIR)/libs_baseaudiovisualizer-baseaudiovisualizer.Tpo -c -o libs/libs_baseaudiovisualizer-baseaudiovisualizer.obj `if test -f 'libs/baseaudiovisualizer.c'; then $(CYGPATH_W) 'libs/baseaudiovisualizer.c'; else $(CYGPATH_W) '$(srcdir)/libs/baseaudiovisualizer.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) libs/$(DEPDIR)/libs_baseaudiovisualizer-baseaudiovisualizer.Tpo libs/$(DEPDIR)/libs_baseaudiovisualizer-baseaudiovisualizer.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='libs/baseaudiovisualizer.c' object='libs/libs_baseaudiovisualizer-baseaudiovisualizer.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libs_baseaudiovisualizer_CFLAGS) $(CFLAGS) -c -o libs/libs_baseaudiovisualizer-baseaudiovisualizer.obj `if test -f 'libs/baseaudiovisualizer.c'; then $(CYGPATH_W) 'libs/baseaudiovisualizer.c'; else $(CYGPATH_W) '$(srcdir)/libs/baseaudiovisualizer.c'; fi`
+
 libs/libs_discoverer-discoverer.o: libs/discoverer.c
 @am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libs_discoverer_CFLAGS) $(CFLAGS) -MT libs/libs_discoverer-discoverer.o -MD -MP -MF libs/$(DEPDIR)/libs_discoverer-discoverer.Tpo -c -o libs/libs_discoverer-discoverer.o `test -f 'libs/discoverer.c' || echo '$(srcdir)/'`libs/discoverer.c
 @am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) libs/$(DEPDIR)/libs_discoverer-discoverer.Tpo libs/$(DEPDIR)/libs_discoverer-discoverer.Po
@@ -3090,20 +3117,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_audio_CFLAGS) $(CFLAGS) -c -o orc/orc_audio-audio.obj `if test -f 'orc/audio.c'; then $(CYGPATH_W) 'orc/audio.c'; else $(CYGPATH_W) '$(srcdir)/orc/audio.c'; fi`
 
-orc/orc_audioconvert-audioconvert.o: orc/audioconvert.c
-@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(orc_audioconvert_CFLAGS) $(CFLAGS) -MT orc/orc_audioconvert-audioconvert.o -MD -MP -MF orc/$(DEPDIR)/orc_audioconvert-audioconvert.Tpo -c -o orc/orc_audioconvert-audioconvert.o `test -f 'orc/audioconvert.c' || echo '$(srcdir)/'`orc/audioconvert.c
-@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) orc/$(DEPDIR)/orc_audioconvert-audioconvert.Tpo orc/$(DEPDIR)/orc_audioconvert-audioconvert.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='orc/audioconvert.c' object='orc/orc_audioconvert-audioconvert.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_audioconvert_CFLAGS) $(CFLAGS) -c -o orc/orc_audioconvert-audioconvert.o `test -f 'orc/audioconvert.c' || echo '$(srcdir)/'`orc/audioconvert.c
-
-orc/orc_audioconvert-audioconvert.obj: orc/audioconvert.c
-@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(orc_audioconvert_CFLAGS) $(CFLAGS) -MT orc/orc_audioconvert-audioconvert.obj -MD -MP -MF orc/$(DEPDIR)/orc_audioconvert-audioconvert.Tpo -c -o orc/orc_audioconvert-audioconvert.obj `if test -f 'orc/audioconvert.c'; then $(CYGPATH_W) 'orc/audioconvert.c'; else $(CYGPATH_W) '$(srcdir)/orc/audioconvert.c'; fi`
-@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) orc/$(DEPDIR)/orc_audioconvert-audioconvert.Tpo orc/$(DEPDIR)/orc_audioconvert-audioconvert.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='orc/audioconvert.c' object='orc/orc_audioconvert-audioconvert.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_audioconvert_CFLAGS) $(CFLAGS) -c -o orc/orc_audioconvert-audioconvert.obj `if test -f 'orc/audioconvert.c'; then $(CYGPATH_W) 'orc/audioconvert.c'; else $(CYGPATH_W) '$(srcdir)/orc/audioconvert.c'; fi`
-
 orc/orc_video-video.o: orc/video.c
 @am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(orc_video_CFLAGS) $(CFLAGS) -MT orc/orc_video-video.o -MD -MP -MF orc/$(DEPDIR)/orc_video-video.Tpo -c -o orc/orc_video-video.o `test -f 'orc/video.c' || echo '$(srcdir)/'`orc/video.c
 @am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) orc/$(DEPDIR)/orc_video-video.Tpo orc/$(DEPDIR)/orc_video-video.Po
@@ -3529,6 +3542,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/baseaudiovisualizer.log: libs/baseaudiovisualizer$(EXEEXT)
+	@p='libs/baseaudiovisualizer$(EXEEXT)'; \
+	b='libs/baseaudiovisualizer'; \
+	$(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+	--log-file $$b.log --trs-file $$b.trs \
+	$(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+	"$$tst" $(AM_TESTS_FD_REDIRECT)
 libs/discoverer.log: libs/discoverer$(EXEEXT)
 	@p='libs/discoverer$(EXEEXT)'; \
 	b='libs/discoverer'; \
@@ -3914,13 +3934,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/audioconvert.log: orc/audioconvert$(EXEEXT)
-	@p='orc/audioconvert$(EXEEXT)'; \
-	b='orc/audioconvert'; \
-	$(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/volume.log: orc/volume$(EXEEXT)
 	@p='orc/volume$(EXEEXT)'; \
 	b='orc/volume'; \
@@ -4179,7 +4192,7 @@
 	--show-possibly-lost=no                                 \
 	--leak-resolution=high --num-callers=20			\
 	./$* 2>&1 | tee $$valgrind_log ;			\
-	if grep "==" $$valgrind_log > /dev/null 2>&1; then	\
+	if grep "^==" $$valgrind_log > /dev/null 2>&1; then	\
 	    rm $$valgrind_log;					\
 	    exit 1;						\
 	fi ;							\
@@ -4384,10 +4397,6 @@
 	$(MKDIR_P) orc/
 	$(ORCC) --test -o $@ $<
 
-orc/audioconvert.c: $(top_srcdir)/gst/audioconvert/gstaudioconvertorc.orc
-	$(MKDIR_P) orc/
-	$(ORCC) --test -o $@ $<
-
 orc/volume.c: $(top_srcdir)/gst/volume/gstvolumeorc.orc
 	$(MKDIR_P) orc/
 	$(ORCC) --test -o $@ $<
diff --git a/tests/check/elements/audioconvert.c b/tests/check/elements/audioconvert.c
index 5c450c4..ee1f003 100644
--- a/tests/check/elements/audioconvert.c
+++ b/tests/check/elements/audioconvert.c
@@ -747,9 +747,9 @@
   {
     gint16 in[] = { 0, -32768, 16384, -16384 };
     gdouble out[] = { 0.0,
-      (gdouble) (-32768L << 16) / 2147483647.0, /* ~ -1.0 */
-      (gdouble) (16384L << 16) / 2147483647.0,  /* ~  0.5 */
-      (gdouble) (-16384L << 16) / 2147483647.0, /* ~ -0.5 */
+      (gdouble) (-32768L << 16) / 2147483648.0, /* ~ -1.0 */
+      (gdouble) (16384L << 16) / 2147483648.0,  /* ~  0.5 */
+      (gdouble) (-16384L << 16) / 2147483648.0, /* ~ -0.5 */
     };
 
     RUN_CONVERSION ("16 signed to 64 float",
@@ -759,9 +759,9 @@
   {
     gint32 in[] = { 0, (-1L << 31), (1L << 30), (-1L << 30) };
     gdouble out[] = { 0.0,
-      (gdouble) (-1L << 31) / 2147483647.0,     /* ~ -1.0 */
-      (gdouble) (1L << 30) / 2147483647.0,      /* ~  0.5 */
-      (gdouble) (-1L << 30) / 2147483647.0,     /* ~ -0.5 */
+      (gdouble) (-1L << 31) / 2147483648.0,     /* ~ -1.0 */
+      (gdouble) (1L << 30) / 2147483648.0,      /* ~  0.5 */
+      (gdouble) (-1L << 30) / 2147483648.0,     /* ~ -0.5 */
     };
 
     RUN_CONVERSION ("32 signed to 64 float",
diff --git a/tests/check/elements/subparse.c b/tests/check/elements/subparse.c
index 23e99b6..306b7f8 100644
--- a/tests/check/elements/subparse.c
+++ b/tests/check/elements/subparse.c
@@ -105,7 +105,13 @@
       360 * GST_SECOND, 480 * GST_SECOND, "Rock &amp; Roll"}, {
         "28\n00:10:00,000 --> 00:11:00,000\n"
         "<font \"#0000FF\"><joj>This is </xxx>in blue but <5</font>\n\n",
-      600 * GST_SECOND, 660 * GST_SECOND, "This is in blue but &lt;5"}
+      600 * GST_SECOND, 660 * GST_SECOND, "This is in blue but &lt;5"}, {
+        /* closing tags should be recognised properly even if there's a space */
+        "29\n00:11:00,000 --> 00:12:00,000\n" "<i>italics</ i>\n\n",
+      660 * GST_SECOND, 720 * GST_SECOND, "<i>italics</i>"}, {
+        /* closing tags should be escaped and fixed up if not recognised */
+        "30\n00:12:00,000 --> 00:12:01,000\n" "<i>italics</ x>\n\n",
+      720 * GST_SECOND, 721 * GST_SECOND, "<i>italics&lt;/ x&gt;</i>"},
 };
 
 /* starts with chunk number 0 (not exactly according to spec) */
diff --git a/tests/check/gst/typefindfunctions.c b/tests/check/gst/typefindfunctions.c
index 9c1dc0e..7f4df8c 100644
--- a/tests/check/gst/typefindfunctions.c
+++ b/tests/check/gst/typefindfunctions.c
@@ -149,6 +149,7 @@
   GST_LOG ("reading file '%s'", path);
   if (!g_file_get_contents (path, &data, &data_len, &err)) {
     g_error ("error loading test file: %s", err->message);
+    g_clear_error (&err);
   }
 
   buf = gst_buffer_new ();
diff --git a/tests/check/libs/audiodecoder.c b/tests/check/libs/audiodecoder.c
index 3f210b7..cd7bbb4 100644
--- a/tests/check/libs/audiodecoder.c
+++ b/tests/check/libs/audiodecoder.c
@@ -24,13 +24,10 @@
 #endif
 #include <gst/gst.h>
 #include <gst/check/gstcheck.h>
+#include <gst/check/gstharness.h>
 #include <gst/audio/audio.h>
 #include <gst/app/app.h>
 
-static GstPad *mysrcpad, *mysinkpad;
-static GstElement *dec;
-static GList *events = NULL;
-
 #define TEST_MSECS_PER_SAMPLE 44100
 
 #define RESTRICTED_CAPS_RATE 44100
@@ -201,37 +198,29 @@
 {
 }
 
-static gboolean
-_mysinkpad_event (GstPad * pad, GstObject * parent, GstEvent * event)
-{
-  events = g_list_append (events, event);
-  return TRUE;
-}
-
-static void
+static GstHarness *
 setup_audiodecodertester (GstStaticPadTemplate * sinktemplate,
     GstStaticPadTemplate * srctemplate)
 {
+  GstHarness * h;
+  GstElement * dec;
+
   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);
+  h = gst_harness_new_full (dec, srctemplate, "sink", sinktemplate, "src");
 
-  gst_pad_set_event_function (mysinkpad, _mysinkpad_event);
-}
+  gst_harness_set_src_caps (h,
+      gst_caps_new_simple ("audio/x-test-custom",
+          "channels", G_TYPE_INT, 2,
+          "rate", G_TYPE_INT, 44100,
+          NULL));
 
-static void
-cleanup_audiodecodertest (void)
-{
-  gst_pad_set_active (mysrcpad, FALSE);
-  gst_pad_set_active (mysinkpad, FALSE);
-  gst_check_teardown_src_pad (dec);
-  gst_check_teardown_sink_pad (dec);
-  gst_check_teardown_element (dec);
+  gst_object_unref (dec);
+  return h;
 }
 
 static GstBuffer *
@@ -252,52 +241,24 @@
   return buffer;
 }
 
-static void
-send_startup_events (void)
-{
-  GstCaps *caps;
+#define NUM_BUFFERS 10
 
-  fail_unless (gst_pad_push_event (mysrcpad,
-          gst_event_new_stream_start ("randomvalue")));
-
-  /* push caps */
-  caps =
-      gst_caps_new_simple ("audio/x-test-custom", "channels", G_TYPE_INT, 2,
-      "rate", G_TYPE_INT, 44100, NULL);
-  fail_unless (gst_pad_push_event (mysrcpad, gst_event_new_caps (caps)));
-  gst_caps_unref (caps);
-}
-
-#define NUM_BUFFERS 1000
 GST_START_TEST (audiodecoder_playback)
 {
-  GstSegment segment;
   GstBuffer *buffer;
   guint64 i;
 
-  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)));
+  GstHarness *h = setup_audiodecodertester (NULL, NULL);
 
   /* push buffers, the data is actually a number so we can track them */
   for (i = 0; i < NUM_BUFFERS; i++) {
     GstMapInfo map;
     guint64 num;
 
-    buffer = create_test_buffer (i);
-
-    fail_unless (gst_pad_push (mysrcpad, buffer) == GST_FLOW_OK);
+    fail_unless (gst_harness_push (h, create_test_buffer (i)) == GST_FLOW_OK);
 
     /* check that buffer was received by our source pad */
-    buffer = buffers->data;
+    buffer = gst_harness_pull (h);
 
     gst_buffer_map (buffer, &map, GST_MAP_READ);
 
@@ -311,26 +272,27 @@
     gst_buffer_unmap (buffer, &map);
 
     gst_buffer_unref (buffer);
-    buffers = g_list_delete_link (buffers, buffers);
   }
 
-  fail_unless (gst_pad_push_event (mysrcpad, gst_event_new_eos ()));
+  fail_unless (gst_harness_push_event (h, gst_event_new_eos ()));
 
-  fail_unless (buffers == NULL);
+  fail_unless_equals_int (0, gst_harness_buffers_in_queue (h));
 
-  cleanup_audiodecodertest ();
+  gst_harness_teardown (h);
 }
 
 GST_END_TEST;
 
+
 static void
-check_audiodecoder_negotiation (void)
+check_audiodecoder_negotiation (GstHarness * h)
 {
   gboolean received_caps = FALSE;
-  GList *iter;
+  guint i;
+  guint events_received = gst_harness_events_received (h);
 
-  for (iter = events; iter; iter = g_list_next (iter)) {
-    GstEvent *event = iter->data;
+  for (i = 0; i < events_received; i++) {
+    GstEvent *event = gst_harness_pull_event (h);
 
     if (GST_EVENT_TYPE (event) == GST_EVENT_CAPS) {
       GstCaps *caps;
@@ -348,175 +310,112 @@
       fail_unless (channels == 2, "%d != %d", channels, 2);
 
       received_caps = TRUE;
+      gst_event_unref (event);
       break;
     }
+    gst_event_unref (event);
   }
   fail_unless (received_caps);
 }
 
 GST_START_TEST (audiodecoder_negotiation_with_buffer)
 {
-  GstSegment segment;
-  GstBuffer *buffer;
-
-  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)));
+  GstHarness *h = setup_audiodecodertester (NULL, NULL);
 
   /* push a buffer event to force audiodecoder to push a caps event */
-  buffer = create_test_buffer (0);
-  fail_unless (gst_pad_push (mysrcpad, buffer) == GST_FLOW_OK);
+  fail_unless (gst_harness_push (h, create_test_buffer (0)) == GST_FLOW_OK);
 
-  check_audiodecoder_negotiation ();
+  check_audiodecoder_negotiation (h);
 
-  cleanup_audiodecodertest ();
-  g_list_free_full (buffers, (GDestroyNotify) gst_buffer_unref);
+  gst_harness_teardown (h);
 }
 
 GST_END_TEST;
 
-
 GST_START_TEST (audiodecoder_negotiation_with_gap_event)
 {
-  GstSegment segment;
-
-  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)));
+  GstHarness *h = setup_audiodecodertester (NULL, NULL);
 
   /* push a gap event to force audiodecoder to push a caps event */
-  fail_unless (gst_pad_push_event (mysrcpad, gst_event_new_gap (0,
+  fail_unless (gst_harness_push_event (h, gst_event_new_gap (0,
               GST_SECOND)));
-  fail_unless (buffers == NULL);
+  fail_unless_equals_int (0, gst_harness_buffers_in_queue (h));
 
-  check_audiodecoder_negotiation ();
+  check_audiodecoder_negotiation (h);
 
-  cleanup_audiodecodertest ();
+  gst_harness_teardown (h);
 }
 
 GST_END_TEST;
 
-
 GST_START_TEST (audiodecoder_delayed_negotiation_with_gap_event)
 {
-  GstSegment segment;
+  GstHarness *h = setup_audiodecodertester (NULL, NULL);
 
-  setup_audiodecodertester (NULL, NULL);
-
-  ((GstAudioDecoderTester *) dec)->setoutputformat_on_decoding = TRUE;
-
-  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)));
+  ((GstAudioDecoderTester *) h->element)->setoutputformat_on_decoding = TRUE;
 
   /* push a gap event to force audiodecoder to push a caps event */
-  fail_unless (gst_pad_push_event (mysrcpad, gst_event_new_gap (0,
+  fail_unless (gst_harness_push_event (h, gst_event_new_gap (0,
               GST_SECOND)));
-  fail_unless (buffers == NULL);
+  fail_unless_equals_int (0, gst_harness_buffers_in_queue (h));
 
-  check_audiodecoder_negotiation ();
+  check_audiodecoder_negotiation (h);
 
-  cleanup_audiodecodertest ();
+  gst_harness_teardown (h);
 }
 
 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)));
+  GstHarness *h = setup_audiodecodertester (NULL, NULL);
 
   /* push a gap */
-  fail_unless (gst_pad_push_event (mysrcpad, gst_event_new_gap (0,
+  fail_unless (gst_harness_push_event (h, gst_event_new_gap (0,
               GST_SECOND)));
-  events_iter = events;
+
   /* make sure the usual events have been received */
   {
-    GstEvent *sstart = events_iter->data;
+    GstEvent *sstart = gst_harness_pull_event (h);
     fail_unless (GST_EVENT_TYPE (sstart) == GST_EVENT_STREAM_START);
-    events_iter = g_list_next (events_iter);
+    gst_event_unref (sstart);
   }
   {
-    GstEvent *caps_event = events_iter->data;
+    GstEvent *caps_event = gst_harness_pull_event (h);
     fail_unless (GST_EVENT_TYPE (caps_event) == GST_EVENT_CAPS);
-    events_iter = g_list_next (events_iter);
+    gst_event_unref (caps_event);
   }
   {
-    GstEvent *segment_event = events_iter->data;
+    GstEvent *segment_event = gst_harness_pull_event (h);
     fail_unless (GST_EVENT_TYPE (segment_event) == GST_EVENT_SEGMENT);
-    events_iter = g_list_next (events_iter);
+    gst_event_unref (segment_event);
   }
 
   /* Make sure the gap was pushed */
   {
-    GstEvent *gap = events_iter->data;
+    GstEvent *gap = gst_harness_pull_event (h);
     fail_unless (GST_EVENT_TYPE (gap) == GST_EVENT_GAP);
-    events_iter = g_list_next (events_iter);
+    gst_event_unref (gap);
   }
-  fail_unless (events_iter == NULL);
+  fail_unless_equals_int (0, gst_harness_events_in_queue (h));
 
-  cleanup_audiodecodertest ();
+  gst_harness_teardown (h);
 }
 
 GST_END_TEST;
 
+/*
+
+*/
 
 static void
 _audiodecoder_flush_events (gboolean send_buffers)
 {
-  GstSegment segment;
-  GstBuffer *buffer;
   guint i;
-  GList *events_iter;
   GstMessage *msg;
 
-  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)));
+  GstHarness *h = setup_audiodecodertester (NULL, NULL);
 
   if (send_buffers) {
     /* push buffers, the data is actually a number so we can track them */
@@ -525,69 +424,82 @@
         GstTagList *tags;
 
         tags = gst_tag_list_new (GST_TAG_TRACK_NUMBER, i, NULL);
-        fail_unless (gst_pad_push_event (mysrcpad, gst_event_new_tag (tags)));
+        fail_unless (gst_harness_push_event (h, gst_event_new_tag (tags)));
       } else {
-        buffer = create_test_buffer (i);
-
-        fail_unless (gst_pad_push (mysrcpad, buffer) == GST_FLOW_OK);
+        fail_unless (gst_harness_push (h, create_test_buffer (i)) == GST_FLOW_OK);
       }
     }
   } else {
     /* push sticky event */
     GstTagList *tags;
     tags = gst_tag_list_new (GST_TAG_TRACK_NUMBER, 0, NULL);
-    fail_unless (gst_pad_push_event (mysrcpad, gst_event_new_tag (tags)));
+    fail_unless (gst_harness_push_event (h, gst_event_new_tag (tags)));
   }
 
-  msg =
-      gst_message_new_element (GST_OBJECT (mysrcpad),
+  msg = gst_message_new_element (GST_OBJECT (h->element),
       gst_structure_new_empty ("test"));
-  fail_unless (gst_pad_push_event (mysrcpad,
+  fail_unless (gst_harness_push_event (h,
           gst_event_new_sink_message ("test", msg)));
   gst_message_unref (msg);
 
-  fail_unless (gst_pad_push_event (mysrcpad, gst_event_new_eos ()));
+  fail_unless (gst_harness_push_event (h, gst_event_new_eos ()));
 
-  events_iter = events;
   /* make sure the usual events have been received */
   {
-    GstEvent *sstart = events_iter->data;
+    GstEvent *sstart = gst_harness_pull_event (h);
     fail_unless (GST_EVENT_TYPE (sstart) == GST_EVENT_STREAM_START);
-    events_iter = g_list_next (events_iter);
+    gst_event_unref (sstart);
   }
   if (send_buffers) {
     {
-      GstEvent *caps_event = events_iter->data;
+      GstEvent *caps_event = gst_harness_pull_event (h);
       fail_unless (GST_EVENT_TYPE (caps_event) == GST_EVENT_CAPS);
-      events_iter = g_list_next (events_iter);
+      gst_event_unref (caps_event);
     }
     {
-      GstEvent *segment_event = events_iter->data;
+      GstEvent *segment_event = gst_harness_pull_event (h);
       fail_unless (GST_EVENT_TYPE (segment_event) == GST_EVENT_SEGMENT);
-      events_iter = g_list_next (events_iter);
+      gst_event_unref (segment_event);
     }
+
     for (int i = 0; i < NUM_BUFFERS / 10; i++) {
-      GstEvent *tag_event = events_iter->data;
+      GstEvent *tag_event = gst_harness_pull_event (h);
       fail_unless (GST_EVENT_TYPE (tag_event) == GST_EVENT_TAG);
-      events_iter = g_list_next (events_iter);
+      gst_event_unref (tag_event);
+    }
+  } else {
+    {
+      GstEvent *segment_event = gst_harness_pull_event (h);
+      fail_unless (GST_EVENT_TYPE (segment_event) == GST_EVENT_SEGMENT);
+      gst_event_unref (segment_event);
+    }
+    {
+      GstEvent *tag_event = gst_harness_pull_event (h);
+      fail_unless (GST_EVENT_TYPE (tag_event) == GST_EVENT_TAG);
+      gst_event_unref (tag_event);
     }
   }
-  {
-    GstEvent *eos_event = g_list_last (events_iter)->data;
 
+  {
+    GstEvent *sink_msg_event = gst_harness_pull_event (h);
+    fail_unless (GST_EVENT_TYPE (sink_msg_event) == GST_EVENT_SINK_MESSAGE);
+    gst_event_unref (sink_msg_event);
+  }
+
+  {
+    GstEvent *eos_event = gst_harness_pull_event (h);
     fail_unless (GST_EVENT_TYPE (eos_event) == GST_EVENT_EOS);
-    events_iter = g_list_next (events_iter);
+    gst_event_unref (eos_event);
   }
 
   /* check that EOS was received */
-  fail_unless (GST_PAD_IS_EOS (mysrcpad));
-  fail_unless (gst_pad_push_event (mysrcpad, gst_event_new_flush_start ()));
-  fail_unless (GST_PAD_IS_EOS (mysrcpad));
+  fail_unless (GST_PAD_IS_EOS (h->srcpad));
+  fail_unless (gst_harness_push_event (h, gst_event_new_flush_start ()));
+  fail_unless (GST_PAD_IS_EOS (h->srcpad));
 
   /* Check that we have tags */
   {
-    GstEvent *tags = gst_pad_get_sticky_event (mysrcpad, GST_EVENT_TAG, 0);
-
+    GstEvent *tags = gst_pad_get_sticky_event (h->srcpad, GST_EVENT_TAG, 0);
     fail_unless (tags != NULL);
     gst_event_unref (tags);
   }
@@ -595,71 +507,39 @@
   /* Check that we still have a segment set */
   {
     GstEvent *segment =
-        gst_pad_get_sticky_event (mysrcpad, GST_EVENT_SEGMENT, 0);
-
+        gst_pad_get_sticky_event (h->srcpad, GST_EVENT_SEGMENT, 0);
     fail_unless (segment != NULL);
     gst_event_unref (segment);
   }
 
-  fail_unless (gst_pad_push_event (mysrcpad, gst_event_new_flush_stop (TRUE)));
-  fail_if (GST_PAD_IS_EOS (mysrcpad));
+  fail_unless (gst_harness_push_event (h, gst_event_new_flush_stop (TRUE)));
+  fail_if (GST_PAD_IS_EOS (h->srcpad));
 
   /* Check that the segment was flushed on FLUSH_STOP */
   {
     GstEvent *segment =
-        gst_pad_get_sticky_event (mysrcpad, GST_EVENT_SEGMENT, 0);
-
+        gst_pad_get_sticky_event (h->srcpad, GST_EVENT_SEGMENT, 0);
     fail_unless (segment == NULL);
   }
 
   /* Check the tags were not lost on FLUSH_STOP */
   {
-    GstEvent *tags = gst_pad_get_sticky_event (mysrcpad, GST_EVENT_TAG, 0);
-
+    GstEvent *tags = gst_pad_get_sticky_event (h->srcpad, GST_EVENT_TAG, 0);
     fail_unless (tags != NULL);
     gst_event_unref (tags);
-
   }
 
-  g_list_free_full (events, (GDestroyNotify) gst_event_unref);
-  events = NULL;
-
-  g_list_free_full (buffers, (GDestroyNotify) gst_buffer_unref);
-  buffers = NULL;
-
-  gst_element_set_state (dec, GST_STATE_NULL);
-  cleanup_audiodecodertest ();
-}
-
-/* An element should always push its segment before sending EOS */
-GST_START_TEST (audiodecoder_eos_events_no_buffers)
-{
-  GstSegment segment;
-  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 ();
-
-  gst_segment_init (&segment, GST_FORMAT_TIME);
-  fail_unless (gst_pad_push_event (mysrcpad, gst_event_new_segment (&segment)));
-  fail_unless (gst_pad_push_event (mysrcpad, gst_event_new_eos ()));
-
-  fail_unless (GST_PAD_IS_EOS (mysinkpad));
-
-  {
-    GstEvent *segment_event =
-        gst_pad_get_sticky_event (mysinkpad, GST_EVENT_SEGMENT, 0);
-    fail_unless (segment_event != NULL);
-    gst_event_unref (segment_event);
+  if (send_buffers) {
+    fail_unless_equals_int (NUM_BUFFERS - NUM_BUFFERS / 10,
+        gst_harness_buffers_in_queue (h));
+  } else {
+    fail_unless_equals_int (0, gst_harness_buffers_in_queue (h));
   }
 
-  gst_element_set_state (dec, GST_STATE_NULL);
-  cleanup_audiodecodertest ();
-}
+  fail_unless_equals_int (2, gst_harness_events_in_queue (h));
 
-GST_END_TEST;
+  gst_harness_teardown (h);
+}
 
 GST_START_TEST (audiodecoder_flush_events_no_buffers)
 {
@@ -675,6 +555,25 @@
 
 GST_END_TEST;
 
+/* An element should always push its segment before sending EOS */
+GST_START_TEST (audiodecoder_eos_events_no_buffers)
+{
+  GstHarness *h = setup_audiodecodertester (NULL, NULL);
+
+  fail_unless (gst_harness_push_event (h, gst_event_new_eos ()));
+  fail_unless (GST_PAD_IS_EOS (h->sinkpad));
+
+  {
+    GstEvent *segment_event =
+        gst_pad_get_sticky_event (h->sinkpad, GST_EVENT_SEGMENT, 0);
+    fail_unless (segment_event != NULL);
+    gst_event_unref (segment_event);
+  }
+
+  gst_harness_teardown (h);
+}
+
+GST_END_TEST;
 
 GST_START_TEST (audiodecoder_buffer_after_segment)
 {
@@ -683,18 +582,12 @@
   guint64 i;
   GstClockTime pos;
 
-  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 ();
+  GstHarness *h = setup_audiodecodertester (NULL, NULL);
 
   /* push a new segment */
   gst_segment_init (&segment, GST_FORMAT_TIME);
   segment.stop = GST_SECOND;
-  fail_unless (gst_pad_push_event (mysrcpad, gst_event_new_segment (&segment)));
+  fail_unless (gst_harness_push_event (h, gst_event_new_segment (&segment)));
 
   /* push buffers, the data is actually a number so we can track them */
   i = 0;
@@ -706,10 +599,10 @@
     buffer = create_test_buffer (i);
     pos = GST_BUFFER_TIMESTAMP (buffer) + GST_BUFFER_DURATION (buffer);
 
-    fail_unless (gst_pad_push (mysrcpad, buffer) == GST_FLOW_OK);
+    fail_unless (gst_harness_push (h, buffer) == GST_FLOW_OK);
 
     /* check that buffer was received by our source pad */
-    buffer = buffers->data;
+    buffer = gst_harness_pull (h);
 
     gst_buffer_map (buffer, &map, GST_MAP_READ);
 
@@ -723,54 +616,39 @@
     gst_buffer_unmap (buffer, &map);
 
     gst_buffer_unref (buffer);
-    buffers = g_list_delete_link (buffers, buffers);
     i++;
   }
 
   /* this buffer is after the segment */
   buffer = create_test_buffer (i++);
-  fail_unless (gst_pad_push (mysrcpad, buffer) == GST_FLOW_EOS);
+  fail_unless (gst_harness_push (h, buffer) == GST_FLOW_EOS);
 
-  fail_unless (gst_pad_push_event (mysrcpad, gst_event_new_eos ()));
+  fail_unless (gst_harness_push_event (h, gst_event_new_eos ()));
+  fail_unless_equals_int (0, gst_harness_buffers_in_queue (h));
 
-  fail_unless (buffers == NULL);
-
-  cleanup_audiodecodertest ();
+  gst_harness_teardown (h);
 }
 
 GST_END_TEST;
 
 GST_START_TEST (audiodecoder_output_too_many_frames)
 {
-  GstSegment segment;
   GstBuffer *buffer;
   guint64 i;
 
-  setup_audiodecodertester (NULL, NULL);
+  GstHarness *h = setup_audiodecodertester (NULL, NULL);
 
-  ((GstAudioDecoderTester *) dec)->output_too_many_frames = TRUE;
-
-  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)));
+  ((GstAudioDecoderTester *) h->element)->output_too_many_frames = TRUE;
 
   /* push buffers, the data is actually a number so we can track them */
   for (i = 0; i < 3; i++) {
     GstMapInfo map;
     guint64 num;
 
-    buffer = create_test_buffer (i);
-
-    fail_unless (gst_pad_push (mysrcpad, buffer) == GST_FLOW_OK);
+    fail_unless (gst_harness_push (h, create_test_buffer (i)) == GST_FLOW_OK);
 
     /* check that buffer was received by our source pad */
-    buffer = buffers->data;
+    buffer = gst_harness_pull (h);
 
     gst_buffer_map (buffer, &map, GST_MAP_READ);
 
@@ -784,14 +662,12 @@
     gst_buffer_unmap (buffer, &map);
 
     gst_buffer_unref (buffer);
-    buffers = g_list_delete_link (buffers, buffers);
   }
 
-  fail_unless (gst_pad_push_event (mysrcpad, gst_event_new_eos ()));
+  fail_unless (gst_harness_push_event (h, gst_event_new_eos ()));
+  fail_unless_equals_int (0, gst_harness_buffers_in_queue (h));
 
-  fail_unless (buffers == NULL);
-
-  cleanup_audiodecodertest ();
+  gst_harness_teardown (h);
 }
 
 GST_END_TEST;
@@ -803,13 +679,9 @@
   GstStructure *structure;
   gint rate, channels;
 
-  setup_audiodecodertester (&sinktemplate_restricted, NULL);
+  GstHarness *h = 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);
+  caps = gst_pad_peer_query_caps (h->srcpad, NULL);
   fail_unless (caps != NULL);
 
   structure = gst_caps_get_structure (caps, 0);
@@ -823,17 +695,18 @@
 
   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);
+  caps = gst_pad_peer_query_caps (h->srcpad, filter);
   fail_unless (caps != NULL);
   fail_unless (gst_caps_is_empty (caps));
   gst_caps_unref (caps);
   gst_caps_unref (filter);
 
-  cleanup_audiodecodertest ();
+  gst_harness_teardown (h);
 }
 
 GST_END_TEST;
 
+
 static void
 _get_int_range (GstStructure * s, const gchar * field, gint * min_v,
     gint * max_v)
@@ -857,13 +730,9 @@
   gint rate_min, channels_min;
   gint rate_max, channels_max;
 
-  setup_audiodecodertester (&sinktemplate_with_range, NULL);
+  GstHarness *h = 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);
+  caps = gst_pad_peer_query_caps (h->srcpad, NULL);
   fail_unless (caps != NULL);
 
   structure = gst_caps_get_structure (caps, 0);
@@ -879,7 +748,7 @@
   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);
+  caps = gst_pad_peer_query_caps (h->srcpad, filter);
   fail_unless (caps != NULL);
   structure = gst_caps_get_structure (caps, 0);
   fail_unless (gst_structure_get_int (structure, "rate", &rate));
@@ -892,13 +761,13 @@
   /* 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);
+  caps = gst_pad_peer_query_caps (h->srcpad, filter);
   fail_unless (caps != NULL);
   fail_unless (gst_caps_is_empty (caps));
   gst_caps_unref (caps);
   gst_caps_unref (filter);
 
-  cleanup_audiodecodertest ();
+  gst_harness_teardown (h);
 }
 
 GST_END_TEST;
@@ -916,16 +785,12 @@
   GstAudioDecoderClass *klass;
   GstCaps *expected_caps;
 
-  setup_audiodecodertester (&sinktemplate_restricted, NULL);
+  GstHarness *h = setup_audiodecodertester (&sinktemplate_restricted, NULL);
 
-  klass = GST_AUDIO_DECODER_CLASS (GST_AUDIO_DECODER_GET_CLASS (dec));
+  klass = GST_AUDIO_DECODER_CLASS (GST_AUDIO_DECODER_GET_CLASS (h->element));
   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);
+  caps = gst_pad_peer_query_caps (h->srcpad, NULL);
   fail_unless (caps != NULL);
 
   expected_caps = gst_caps_from_string (GETCAPS_CAPS_STR);
@@ -933,7 +798,7 @@
   gst_caps_unref (expected_caps);
   gst_caps_unref (caps);
 
-  cleanup_audiodecodertest ();
+  gst_harness_teardown (h);
 }
 
 GST_END_TEST;
@@ -969,21 +834,10 @@
 {
   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)));
+  GstHarness *h = setup_audiodecodertester (NULL, NULL);
 
   /* =======================================================================
    * SCENARIO 0: global tags passthrough; check upstream/decoder tag merging
@@ -992,14 +846,14 @@
   /* 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,
+  fail_unless (gst_harness_push_event (h,
           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)));
+  fail_unless (gst_harness_push_event (h, gst_event_new_tag (tags)));
   tags = NULL;
 
   /* decoder tags: override/add AUDIO_CODEC, BITRATE and MAXIMUM_BITRATE */
@@ -1008,24 +862,24 @@
 
     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),
+    gst_audio_decoder_merge_tags (GST_AUDIO_DECODER (h->element),
         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);
+  fail_unless (gst_harness_push (h, create_test_buffer (0)) == GST_FLOW_OK);
+  gst_buffer_unref (gst_harness_pull (h));
 
   /* check global tags: should not have been tampered with */
-  tags = pad_get_sticky_tags (mysinkpad, GST_TAG_SCOPE_GLOBAL);
+  tags = pad_get_sticky_tags (h->sinkpad, 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));
+  gst_tag_list_unref (tags);
 
   /* check merged stream tags */
-  tags = pad_get_sticky_tags (mysinkpad, GST_TAG_SCOPE_STREAM);
+  tags = pad_get_sticky_tags (h->sinkpad, 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 */
@@ -1054,14 +908,14 @@
   /* 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)));
+  fail_unless (gst_harness_push_event (h, 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);
+  tags = pad_get_sticky_tags (h->sinkpad, 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 */
@@ -1092,18 +946,17 @@
 
     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),
+    gst_audio_decoder_merge_tags (GST_AUDIO_DECODER (h->element),
         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);
+  fail_unless (gst_harness_push (h, create_test_buffer (2)) == GST_FLOW_OK);
+  gst_buffer_unref (gst_harness_pull (h));
 
   /* check updated merged stream tags, the decoder bits should be different */
-  tags = pad_get_sticky_tags (mysinkpad, GST_TAG_SCOPE_STREAM);
+  tags = pad_get_sticky_tags (h->sinkpad, 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) */
@@ -1128,15 +981,14 @@
    * ================================================================= */
 
   /* also tests if the stream-start event clears the upstream tags */
-  fail_unless (gst_pad_push_event (mysrcpad, gst_event_new_stream_start ("x")));
+  fail_unless (gst_harness_push_event (h, 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);
+  fail_unless (gst_harness_push (h, create_test_buffer (3)) == GST_FLOW_OK);
+  gst_buffer_unref (gst_harness_pull (h));
 
   /* check updated merged stream tags, should be just decoder tags now */
-  tags = pad_get_sticky_tags (mysinkpad, GST_TAG_SCOPE_STREAM);
+  tags = pad_get_sticky_tags (h->sinkpad, 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));
@@ -1155,11 +1007,11 @@
   s = NULL;
 
   /* clean up */
-  fail_unless (gst_pad_push_event (mysrcpad, gst_event_new_eos ()));
-  fail_unless (buffers == NULL);
+  fail_unless (gst_harness_push_event (h, gst_event_new_eos ()));
+  fail_unless_equals_int (0, gst_harness_buffers_in_queue (h));
 
-  cleanup_audiodecodertest ();
   gst_tag_list_unref (global_tags);
+  gst_harness_teardown (h);
 }
 
 GST_END_TEST;
@@ -1172,21 +1024,25 @@
 
   suite_add_tcase (s, tc);
   tcase_add_test (tc, audiodecoder_playback);
-  tcase_add_test (tc, audiodecoder_flush_events_no_buffers);
-  tcase_add_test (tc, audiodecoder_eos_events_no_buffers);
-  tcase_add_test (tc, audiodecoder_flush_events);
   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_flush_events_no_buffers);
+  tcase_add_test (tc, audiodecoder_flush_events);
+
+  tcase_add_test (tc, audiodecoder_eos_events_no_buffers);
   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);
 
+  tcase_add_test (tc, audiodecoder_tag_handling);
+
   return s;
 }
 
diff --git a/tests/check/libs/audioencoder.c b/tests/check/libs/audioencoder.c
index 2ca9520..cdcb531 100644
--- a/tests/check/libs/audioencoder.c
+++ b/tests/check/libs/audioencoder.c
@@ -24,13 +24,10 @@
 #endif
 #include <gst/gst.h>
 #include <gst/check/gstcheck.h>
+#include <gst/check/gstharness.h>
 #include <gst/audio/audio.h>
 #include <gst/app/app.h>
 
-static GstPad *mysrcpad, *mysinkpad;
-static GstElement *enc;
-static GList *events = NULL;
-
 #define TEST_AUDIO_RATE 44100
 #define TEST_AUDIO_CHANNELS 2
 #define TEST_AUDIO_FORMAT "S16LE"
@@ -138,16 +135,12 @@
 {
 }
 
-static gboolean
-_mysinkpad_event (GstPad * pad, GstObject * parent, GstEvent * event)
-{
-  events = g_list_append (events, event);
-  return TRUE;
-}
-
-static void
+static GstHarness *
 setup_audioencodertester (void)
 {
+  GstHarness * h;
+  GstElement * enc;
+
   static GstStaticPadTemplate sinktemplate = GST_STATIC_PAD_TEMPLATE ("sink",
       GST_PAD_SINK,
       GST_PAD_ALWAYS,
@@ -160,26 +153,18 @@
       );
 
   enc = g_object_new (GST_AUDIO_ENCODER_TESTER_TYPE, NULL);
-  mysrcpad = gst_check_setup_src_pad (enc, &srctemplate);
-  mysinkpad = gst_check_setup_sink_pad (enc, &sinktemplate);
+  h = gst_harness_new_full (enc, &srctemplate, "sink", &sinktemplate, "src");
 
-  gst_pad_set_event_function (mysinkpad, _mysinkpad_event);
-}
+  gst_harness_set_src_caps (h,
+      gst_caps_new_simple ("audio/x-raw",
+      "rate", G_TYPE_INT, TEST_AUDIO_RATE,
+      "channels", G_TYPE_INT, TEST_AUDIO_CHANNELS,
+      "format", G_TYPE_STRING, TEST_AUDIO_FORMAT,
+      "layout", G_TYPE_STRING, "interleaved",
+      NULL));
 
-static void
-cleanup_audioencodertest (void)
-{
-  gst_pad_set_active (mysrcpad, FALSE);
-  gst_pad_set_active (mysinkpad, FALSE);
-
-  gst_element_set_state (enc, GST_STATE_NULL);
-
-  gst_check_teardown_src_pad (enc);
-  gst_check_teardown_sink_pad (enc);
-  gst_check_teardown_element (enc);
-
-  g_list_free_full (events, (GDestroyNotify) gst_event_unref);
-  events = NULL;
+  gst_object_unref (enc);
+  return h;
 }
 
 static GstBuffer *
@@ -204,60 +189,31 @@
   return buffer;
 }
 
-static void
-send_startup_events (void)
-{
-  GstCaps *caps;
-
-  fail_unless (gst_pad_push_event (mysrcpad,
-          gst_event_new_stream_start ("randomvalue")));
-
-  /* push caps */
-  caps =
-      gst_caps_new_simple ("audio/x-raw", "rate", G_TYPE_INT,
-      TEST_AUDIO_RATE, "channels", G_TYPE_INT, TEST_AUDIO_CHANNELS, "format",
-      G_TYPE_STRING, "S16LE", "layout", G_TYPE_STRING, "interleaved", NULL);
-  fail_unless (gst_pad_push_event (mysrcpad, gst_event_new_caps (caps)));
-  gst_caps_unref (caps);
-}
-
 #define NUM_BUFFERS 100
 GST_START_TEST (audioencoder_playback)
 {
-  GstSegment segment;
   GstBuffer *buffer;
   guint64 i;
-  GList *iter;
+  guint buffers_available;
 
-  setup_audioencodertester ();
-
-  gst_pad_set_active (mysrcpad, TRUE);
-  gst_element_set_state (enc, 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)));
+  GstHarness * h = setup_audioencodertester ();
 
   /* push buffers, the data is actually a number so we can track them */
   for (i = 0; i < NUM_BUFFERS; i++) {
-    buffer = create_test_buffer (i);
-
-    fail_unless (gst_pad_push (mysrcpad, buffer) == GST_FLOW_OK);
+    fail_unless (gst_harness_push (h, create_test_buffer (i)) == GST_FLOW_OK);
   }
 
-  fail_unless (gst_pad_push_event (mysrcpad, gst_event_new_eos ()));
+  fail_unless (gst_harness_push_event (h, gst_event_new_eos ()));
 
   /* check that all buffers were received by our source pad */
-  fail_unless (g_list_length (buffers) == NUM_BUFFERS);
-  i = 0;
-  for (iter = buffers; iter; iter = g_list_next (iter)) {
+  buffers_available = gst_harness_buffers_in_queue (h);
+  fail_unless_equals_int (NUM_BUFFERS, buffers_available);
+
+  for (i = 0; i < buffers_available; i++) {
     GstMapInfo map;
     guint64 num;
 
-    buffer = iter->data;
+    buffer = gst_harness_pull (h);
 
     gst_buffer_map (buffer, &map, GST_MAP_READ);
 
@@ -267,13 +223,10 @@
     fail_unless (GST_BUFFER_DURATION (buffer) == GST_SECOND);
 
     gst_buffer_unmap (buffer, &map);
-    i++;
+    gst_buffer_unref (buffer);
   }
 
-  g_list_free_full (buffers, (GDestroyNotify) gst_buffer_unref);
-  buffers = NULL;
-
-  cleanup_audioencodertest ();
+  gst_harness_teardown (h);
 }
 
 GST_END_TEST;
@@ -281,22 +234,9 @@
 
 GST_START_TEST (audioencoder_flush_events)
 {
-  GstSegment segment;
-  GstBuffer *buffer;
   guint i;
-  GList *events_iter;
 
-  setup_audioencodertester ();
-
-  gst_pad_set_active (mysrcpad, TRUE);
-  gst_element_set_state (enc, 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)));
+  GstHarness *h = setup_audioencodertester ();
 
   /* push buffers, the data is actually a number so we can track them */
   for (i = 0; i < NUM_BUFFERS; i++) {
@@ -304,42 +244,39 @@
       GstTagList *tags;
 
       tags = gst_tag_list_new (GST_TAG_TRACK_NUMBER, i, NULL);
-      fail_unless (gst_pad_push_event (mysrcpad, gst_event_new_tag (tags)));
+      fail_unless (gst_harness_push_event (h, gst_event_new_tag (tags)));
     } else {
-      buffer = create_test_buffer (i);
-
-      fail_unless (gst_pad_push (mysrcpad, buffer) == GST_FLOW_OK);
+      fail_unless (gst_harness_push (h, create_test_buffer (i)) == GST_FLOW_OK);
     }
   }
 
-  fail_unless (gst_pad_push_event (mysrcpad, gst_event_new_eos ()));
+  fail_unless (gst_harness_push_event (h, gst_event_new_eos ()));
 
-  events_iter = events;
   /* make sure the usual events have been received */
   {
-    GstEvent *sstart = events_iter->data;
+    GstEvent *sstart = gst_harness_pull_event (h);
     fail_unless (GST_EVENT_TYPE (sstart) == GST_EVENT_STREAM_START);
-    events_iter = g_list_next (events_iter);
+    gst_event_unref (sstart);
   }
   {
-    GstEvent *caps_event = events_iter->data;
+    GstEvent *caps_event = gst_harness_pull_event (h);
     fail_unless (GST_EVENT_TYPE (caps_event) == GST_EVENT_CAPS);
-    events_iter = g_list_next (events_iter);
+    gst_event_unref (caps_event);
   }
   {
-    GstEvent *segment_event = events_iter->data;
+    GstEvent *segment_event = gst_harness_pull_event (h);
     fail_unless (GST_EVENT_TYPE (segment_event) == GST_EVENT_SEGMENT);
-    events_iter = g_list_next (events_iter);
+    gst_event_unref (segment_event);
   }
 
   /* check that EOS was received */
-  fail_unless (GST_PAD_IS_EOS (mysrcpad));
-  fail_unless (gst_pad_push_event (mysrcpad, gst_event_new_flush_start ()));
-  fail_unless (GST_PAD_IS_EOS (mysrcpad));
+  fail_unless (GST_PAD_IS_EOS (h->srcpad));
+  fail_unless (gst_harness_push_event (h, gst_event_new_flush_start ()));
+  fail_unless (GST_PAD_IS_EOS (h->srcpad));
 
   /* Check that we have tags */
   {
-    GstEvent *tags = gst_pad_get_sticky_event (mysrcpad, GST_EVENT_TAG, 0);
+    GstEvent *tags = gst_pad_get_sticky_event (h->srcpad, GST_EVENT_TAG, 0);
 
     fail_unless (tags != NULL);
     gst_event_unref (tags);
@@ -348,36 +285,33 @@
   /* Check that we still have a segment set */
   {
     GstEvent *segment =
-        gst_pad_get_sticky_event (mysrcpad, GST_EVENT_SEGMENT, 0);
+        gst_pad_get_sticky_event (h->srcpad, GST_EVENT_SEGMENT, 0);
 
     fail_unless (segment != NULL);
     gst_event_unref (segment);
   }
 
-  fail_unless (gst_pad_push_event (mysrcpad, gst_event_new_flush_stop (TRUE)));
-  fail_if (GST_PAD_IS_EOS (mysrcpad));
+  fail_unless (gst_harness_push_event (h, gst_event_new_flush_stop (TRUE)));
+  fail_if (GST_PAD_IS_EOS (h->srcpad));
 
   /* Check that the segment was flushed on FLUSH_STOP */
   {
     GstEvent *segment =
-        gst_pad_get_sticky_event (mysrcpad, GST_EVENT_SEGMENT, 0);
+        gst_pad_get_sticky_event (h->srcpad, GST_EVENT_SEGMENT, 0);
 
     fail_unless (segment == NULL);
   }
 
   /* Check the tags were not lost on FLUSH_STOP */
   {
-    GstEvent *tags = gst_pad_get_sticky_event (mysrcpad, GST_EVENT_TAG, 0);
+    GstEvent *tags = gst_pad_get_sticky_event (h->srcpad, GST_EVENT_TAG, 0);
 
     fail_unless (tags != NULL);
     gst_event_unref (tags);
 
   }
 
-  g_list_free_full (buffers, (GDestroyNotify) gst_buffer_unref);
-  buffers = NULL;
-
-  cleanup_audioencodertest ();
+  gst_harness_teardown (h);
 }
 
 GST_END_TEST;
@@ -385,39 +319,27 @@
 /* make sure tags sent right before eos are pushed */
 GST_START_TEST (audioencoder_tags_before_eos)
 {
-  GstSegment segment;
-  GstBuffer *buffer;
   GstTagList *tags;
+  GstEvent *event;
 
-  setup_audioencodertester ();
-
-  gst_pad_set_active (mysrcpad, TRUE);
-  gst_element_set_state (enc, 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)));
+  GstHarness *h = setup_audioencodertester ();
 
   /* push buffer */
-  buffer = create_test_buffer (0);
-  fail_unless (gst_pad_push (mysrcpad, buffer) == GST_FLOW_OK);
+  fail_unless (gst_harness_push (h, create_test_buffer (0)) == GST_FLOW_OK);
 
   /* clean received events list */
-  g_list_free_full (events, (GDestroyNotify) gst_event_unref);
-  events = NULL;
+  while ((event = gst_harness_try_pull_event (h)))
+    gst_event_unref (event);
 
   /* push a tag event */
   tags = gst_tag_list_new (GST_TAG_COMMENT, "test-comment", NULL);
-  fail_unless (gst_pad_push_event (mysrcpad, gst_event_new_tag (tags)));
+  fail_unless (gst_harness_push_event (h, gst_event_new_tag (tags)));
 
-  fail_unless (gst_pad_push_event (mysrcpad, gst_event_new_eos ()));
+  fail_unless (gst_harness_push_event (h, gst_event_new_eos ()));
 
   /* check that the tag was received */
   {
-    GstEvent *tag_event = events->data;
+    GstEvent *tag_event = gst_harness_pull_event (h);
     gchar *str;
 
     fail_unless (GST_EVENT_TYPE (tag_event) == GST_EVENT_TAG);
@@ -425,14 +347,10 @@
     fail_unless (gst_tag_list_get_string (tags, GST_TAG_COMMENT, &str));
     fail_unless (strcmp (str, "test-comment") == 0);
     g_free (str);
+    gst_event_unref (tag_event);
   }
 
-  g_list_free_full (buffers, (GDestroyNotify) gst_buffer_unref);
-  buffers = NULL;
-  g_list_free_full (events, (GDestroyNotify) gst_event_unref);
-  events = NULL;
-
-  cleanup_audioencodertest ();
+  gst_harness_teardown (h);
 }
 
 GST_END_TEST;
@@ -440,43 +358,30 @@
 /* make sure events sent right before eos are pushed */
 GST_START_TEST (audioencoder_events_before_eos)
 {
-  GstSegment segment;
-  GstBuffer *buffer;
   GstMessage *msg;
+  GstEvent *event;
 
-  setup_audioencodertester ();
-
-  gst_pad_set_active (mysrcpad, TRUE);
-  gst_element_set_state (enc, 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)));
+  GstHarness *h = setup_audioencodertester ();
 
   /* push buffer */
-  buffer = create_test_buffer (0);
-  fail_unless (gst_pad_push (mysrcpad, buffer) == GST_FLOW_OK);
+  fail_unless (gst_harness_push (h, create_test_buffer (0)) == GST_FLOW_OK);
 
   /* clean received events list */
-  g_list_free_full (events, (GDestroyNotify) gst_event_unref);
-  events = NULL;
+  while ((event = gst_harness_try_pull_event (h)))
+    gst_event_unref (event);
 
   /* push a serialized event */
-  msg =
-      gst_message_new_element (GST_OBJECT (mysrcpad),
+  msg = gst_message_new_element (GST_OBJECT (h->element),
       gst_structure_new_empty ("test"));
-  fail_unless (gst_pad_push_event (mysrcpad,
+  fail_unless (gst_harness_push_event (h,
           gst_event_new_sink_message ("sink-test", msg)));
   gst_message_unref (msg);
 
-  fail_unless (gst_pad_push_event (mysrcpad, gst_event_new_eos ()));
+  fail_unless (gst_harness_push_event (h, gst_event_new_eos ()));
 
   /* check that the tag was received */
   {
-    GstEvent *msg_event = events->data;
+    GstEvent *msg_event = gst_harness_pull_event (h);
     const GstStructure *structure;
 
     fail_unless (GST_EVENT_TYPE (msg_event) == GST_EVENT_SINK_MESSAGE);
@@ -485,14 +390,10 @@
     structure = gst_message_get_structure (msg);
     fail_unless (gst_structure_has_name (structure, "test"));
     gst_message_unref (msg);
+    gst_event_unref (msg_event);
   }
 
-  g_list_free_full (buffers, (GDestroyNotify) gst_buffer_unref);
-  buffers = NULL;
-  g_list_free_full (events, (GDestroyNotify) gst_event_unref);
-  events = NULL;
-
-  cleanup_audioencodertest ();
+  gst_harness_teardown (h);
 }
 
 GST_END_TEST;
diff --git a/tests/check/libs/baseaudiovisualizer.c b/tests/check/libs/baseaudiovisualizer.c
new file mode 100644
index 0000000..2fc1a28
--- /dev/null
+++ b/tests/check/libs/baseaudiovisualizer.c
@@ -0,0 +1,178 @@
+/* GStreamer
+ * Copyright (C) <2011> Stefan Kost <ensonic@users.sf.net>
+ *
+ * unit test for the baseaudiovisualizer class
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#include "../../gst-libs/gst/pbutils/gstaudiovisualizer.c"
+#undef GST_CAT_DEFAULT
+
+#include <gst/check/gstcheck.h>
+#include <string.h>
+
+/* dummy subclass for testing */
+
+#define GST_TYPE_TEST_SCOPE            (gst_test_scope_get_type())
+#define GST_TEST_SCOPE(obj)            (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_TEST_SCOPE,GstTestScope))
+#define GST_TEST_SCOPE_CLASS(klass)    (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_TEST_SCOPE,GstTestScopeClass))
+typedef struct _GstTestScope GstTestScope;
+typedef struct _GstTestScopeClass GstTestScopeClass;
+
+struct _GstTestScope
+{
+  GstAudioVisualizer parent;
+};
+
+struct _GstTestScopeClass
+{
+  GstAudioVisualizerClass parent_class;
+};
+
+static GstStaticPadTemplate gst_test_scope_src_template =
+GST_STATIC_PAD_TEMPLATE ("src",
+    GST_PAD_SRC,
+    GST_PAD_ALWAYS,
+    GST_STATIC_CAPS (GST_VIDEO_CAPS_MAKE ("xRGB"))
+    );
+
+static GstStaticPadTemplate gst_test_scope_sink_template =
+GST_STATIC_PAD_TEMPLATE ("sink",
+    GST_PAD_SINK,
+    GST_PAD_ALWAYS,
+    GST_STATIC_CAPS ("audio/x-raw, "
+        "format = (string) " GST_AUDIO_NE (S16) ", "
+        "layout = (string) interleaved, "
+        "channels = (int) 2, "
+        "channel-mask = (bitmask) 3, " "rate = (int) 44100")
+    );
+
+static GType gst_test_scope_get_type (void);
+
+G_DEFINE_TYPE (GstTestScope, gst_test_scope, GST_TYPE_AUDIO_VISUALIZER);
+
+static void
+gst_test_scope_class_init (GstTestScopeClass * g_class)
+{
+  GstElementClass *element_class = GST_ELEMENT_CLASS (g_class);
+
+  gst_element_class_set_static_metadata (element_class, "test scope",
+      "Visualization",
+      "Dummy test scope", "Stefan Kost <ensonic@users.sf.net>");
+
+  gst_element_class_add_pad_template (element_class,
+      gst_static_pad_template_get (&gst_test_scope_src_template));
+  gst_element_class_add_pad_template (element_class,
+      gst_static_pad_template_get (&gst_test_scope_sink_template));
+}
+
+static void
+gst_test_scope_init (GstTestScope * scope)
+{
+  /* do nothing */
+}
+
+/* tests */
+#define CAPS "audio/x-raw, "  \
+        "format = (string) " GST_AUDIO_NE (S16) ", " \
+        "layout = (string) interleaved, " \
+        "rate = (int) 44100, " \
+        "channels = (int) 2, " \
+        "channel-mask = (bitmask) 3"
+
+static GstStaticPadTemplate sinktemplate = GST_STATIC_PAD_TEMPLATE ("sink",
+    GST_PAD_SINK,
+    GST_PAD_ALWAYS,
+    GST_STATIC_CAPS ("video/x-raw, "
+        "format = (string) xRGB, "
+        "width = (int) 320, "
+        "height = (int) 240, " "framerate = (fraction) 30/1")
+    );
+static GstStaticPadTemplate srctemplate = GST_STATIC_PAD_TEMPLATE ("src",
+    GST_PAD_SRC,
+    GST_PAD_ALWAYS,
+    GST_STATIC_CAPS (CAPS)
+    );
+
+GST_START_TEST (count_in_out)
+{
+  GstElement *elem;
+  GstPad *srcpad, *sinkpad;
+  GstBuffer *buffer;
+  GstCaps *caps;
+
+  /* setup up */
+  elem = gst_check_setup_element ("testscope");
+  srcpad = gst_check_setup_src_pad (elem, &srctemplate);
+  sinkpad = gst_check_setup_sink_pad (elem, &sinktemplate);
+  gst_pad_set_active (srcpad, TRUE);
+  gst_pad_set_active (sinkpad, TRUE);
+
+  fail_unless (gst_element_set_state (elem,
+          GST_STATE_PLAYING) == GST_STATE_CHANGE_SUCCESS,
+      "could not set to playing");
+
+  caps = gst_caps_from_string (CAPS);
+  gst_check_setup_events (srcpad, elem, caps, GST_FORMAT_TIME);
+  gst_caps_unref (caps);
+
+  /* push 1s audio to get 30 video-frames */
+  buffer = gst_buffer_new_and_alloc (44100 * 2 * sizeof (gint16));
+  ASSERT_BUFFER_REFCOUNT (buffer, "buffer", 1);
+
+  /* pushing gives away my reference ... */
+  fail_unless (gst_pad_push (srcpad, buffer) == GST_FLOW_OK);
+  /* ... but it ends up being collected on the global buffer list */
+  ASSERT_BUFFER_REFCOUNT (buffer, "buffer", 1);
+  fail_unless_equals_int (g_list_length (buffers), 30);
+
+  /* clean up */
+  g_list_foreach (buffers, (GFunc) gst_mini_object_unref, NULL);
+  g_list_free (buffers);
+  buffers = NULL;
+
+  gst_pad_set_active (srcpad, FALSE);
+  gst_pad_set_active (sinkpad, FALSE);
+  gst_check_teardown_src_pad (elem);
+  gst_check_teardown_sink_pad (elem);
+  gst_check_teardown_element (elem);
+}
+
+GST_END_TEST;
+
+static void
+baseaudiovisualizer_init (void)
+{
+  gst_element_register (NULL, "testscope", GST_RANK_NONE, GST_TYPE_TEST_SCOPE);
+}
+
+static Suite *
+baseaudiovisualizer_suite (void)
+{
+  Suite *s = suite_create ("baseaudiovisualizer");
+  TCase *tc_chain = tcase_create ("general");
+
+  suite_add_tcase (s, tc_chain);
+  tcase_add_checked_fixture (tc_chain, baseaudiovisualizer_init, NULL);
+
+  tcase_add_test (tc_chain, count_in_out);
+
+  return s;
+}
+
+
+GST_CHECK_MAIN (baseaudiovisualizer);
diff --git a/tests/check/libs/rtpbasedepayload.c b/tests/check/libs/rtpbasedepayload.c
index 32d967a..003f2f0 100644
--- a/tests/check/libs/rtpbasedepayload.c
+++ b/tests/check/libs/rtpbasedepayload.c
@@ -326,6 +326,7 @@
   GstBuffer *buf = gst_rtp_buffer_new_allocate (0, 0, 0);
   GstRTPBuffer rtp = { NULL };
   gboolean mapped = FALSE;
+  gboolean extra_ref = FALSE;
   va_list var_args;
 
   va_start (var_args, field);
@@ -360,6 +361,8 @@
       } else if (!g_strcmp0 (field, "ssrc")) {
         guint32 ssrc = va_arg (var_args, guint);
         gst_rtp_buffer_set_ssrc (&rtp, ssrc);
+      } else if (!g_strcmp0 (field, "extra-ref")) {
+        extra_ref = va_arg (var_args, gboolean);
       } else {
         fail ("test cannot set unknown buffer field '%s'", field);
       }
@@ -372,7 +375,13 @@
     gst_rtp_buffer_unmap (&rtp);
   }
 
+  if (extra_ref)
+    gst_buffer_ref (buf);
+
   fail_unless_equals_int (gst_pad_push (state->srcpad, buf), expected);
+
+  if (extra_ref)
+    gst_buffer_unref (buf);
 }
 
 #define push_buffer(state, field, ...) \
@@ -845,6 +854,41 @@
 }
 
 GST_END_TEST
+/* rtp base depayloader should set DISCONT flag on buffer in case of a large
+ * sequence number gap, and it's not set already by upstream. This tests a
+ * certain code path where the buffer needs to be made writable to set the
+ * DISCONT flag.
+ */
+GST_START_TEST (rtp_base_depayload_seq_discont_test)
+{
+  State *state;
+
+  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 (0x1234), "seq", 1, NULL);
+
+  push_rtp_buffer (state,
+      "extra-ref", TRUE,
+      "pts", 2 * GST_SECOND,
+      "rtptime", G_GUINT64_CONSTANT (0x1234) + DEFAULT_CLOCK_RATE / 2,
+      "seq", 33333, 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", 2 * GST_SECOND, "discont", TRUE, NULL);
+
+  destroy_depayloader (state);
+}
+
+GST_END_TEST
 /* a depayloader that receives identical caps events simply ignores the latter
  * events without propagating them downstream.
  */
@@ -1125,8 +1169,7 @@
   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);
+      "npt-stop", G_GUINT64_CONSTANT (4321), "clock-base", 1234, NULL);
 
   validate_event (4, "flush-start", NULL);
 
@@ -1160,6 +1203,7 @@
   tcase_add_test (tc_chain, rtp_base_depayload_without_negotiation_test);
 
   tcase_add_test (tc_chain, rtp_base_depayload_packet_lost_test);
+  tcase_add_test (tc_chain, rtp_base_depayload_seq_discont_test);
 
   tcase_add_test (tc_chain, rtp_base_depayload_repeated_caps_test);
   tcase_add_test (tc_chain, rtp_base_depayload_npt_test);
diff --git a/tests/check/libs/rtpbasepayload.c b/tests/check/libs/rtpbasepayload.c
index 900b0b9..cb38be3 100644
--- a/tests/check/libs/rtpbasepayload.c
+++ b/tests/check/libs/rtpbasepayload.c
@@ -287,6 +287,14 @@
       fail_unless (gst_structure_get_uint (gst_caps_get_structure (caps, 0),
               "ssrc", &ssrc));
       fail_unless_equals_int (ssrc, expected);
+    } else if (!g_strcmp0 (field, "a-framerate")) {
+      const gchar *expected = va_arg (var_args, const gchar *);
+      GstCaps *caps;
+      const gchar *framerate;
+      gst_event_parse_caps (event, &caps);
+      framerate = gst_structure_get_string (gst_caps_get_structure (caps, 0),
+          "a-framerate");
+      fail_unless_equals_string (framerate, expected);
     } else {
       fail ("test cannot validate unknown event field '%s'", field);
     }
@@ -1764,6 +1772,90 @@
 
 GST_END_TEST;
 
+/* push a single buffer to the payloader which should successfully payload it
+ * into an RTP packet. besides the payloaded RTP packet there should be the
+ * three events initial events: stream-start, caps and segment. because of that
+ * the input caps has framerate this will be propagated to an a-framerate field
+ * on the output caps.
+ */
+GST_START_TEST (rtp_base_payload_framerate_attribute)
+{
+  State *state;
+
+  state = create_payloader ("video/x-raw,framerate=(fraction)1/4", &sinktmpl,
+      "perfect-rtptime", FALSE,
+      NULL);
+
+  set_state (state, GST_STATE_PLAYING);
+
+  push_buffer (state,
+      "pts", 0 * GST_SECOND,
+      NULL);
+
+  set_state (state, GST_STATE_NULL);
+
+  validate_buffers_received (1);
+
+  validate_buffer (0,
+      "pts", 0 * GST_SECOND,
+      NULL);
+
+  validate_events_received (3);
+
+  validate_normal_start_events (0);
+
+  validate_event (1, "caps",
+      "a-framerate", "0.25",
+      NULL);
+
+  destroy_payloader (state);
+}
+
+GST_END_TEST;
+
+/* push a single buffer to the payloader which should successfully payload it
+ * into an RTP packet. besides the payloaded RTP packet there should be the
+ * three events initial events: stream-start, caps and segment. because of that
+ * the input caps has both framerate and max-framerate set the a-framerate field
+ * on the output caps will correspond to the value of the max-framerate field.
+ */
+GST_START_TEST (rtp_base_payload_max_framerate_attribute)
+{
+  State *state;
+
+  state = create_payloader (
+      "video/x-raw,framerate=(fraction)0/1,max-framerate=(fraction)1/8",
+      &sinktmpl,
+      "perfect-rtptime", FALSE,
+      NULL);
+
+  set_state (state, GST_STATE_PLAYING);
+
+  push_buffer (state,
+      "pts", 0 * GST_SECOND,
+      NULL);
+
+  set_state (state, GST_STATE_NULL);
+
+  validate_buffers_received (1);
+
+  validate_buffer (0,
+      "pts", 0 * GST_SECOND,
+      NULL);
+
+  validate_events_received (3);
+
+  validate_normal_start_events (0);
+
+  validate_event (1, "caps",
+      "a-framerate", "0.125",
+      NULL);
+
+  destroy_payloader (state);
+}
+
+GST_END_TEST;
+
 static Suite *
 rtp_basepayloading_suite (void)
 {
@@ -1798,6 +1890,9 @@
   tcase_add_test (tc_chain, rtp_base_payload_property_ptime_multiple_test);
   tcase_add_test (tc_chain, rtp_base_payload_property_stats_test);
 
+  tcase_add_test (tc_chain, rtp_base_payload_framerate_attribute);
+  tcase_add_test (tc_chain, rtp_base_payload_max_framerate_attribute);
+
   return s;
 }
 
diff --git a/tests/check/libs/rtspconnection.c b/tests/check/libs/rtspconnection.c
index ee3c18c..d24fd54 100644
--- a/tests/check/libs/rtspconnection.c
+++ b/tests/check/libs/rtspconnection.c
@@ -603,6 +603,69 @@
 
 GST_END_TEST;
 
+GST_START_TEST (test_rtspconnection_send_receive_check_headers)
+{
+  GSocketConnection *input_conn = NULL;
+  GSocketConnection *output_conn = NULL;
+  GSocket *input_sock;
+  GSocket *output_sock;
+  GstRTSPConnection *rtsp_output_conn;
+  GstRTSPConnection *rtsp_input_conn;
+  GstRTSPMessage *msg;
+  gchar *header_val;
+
+  create_connection (&input_conn, &output_conn);
+  input_sock = g_socket_connection_get_socket (input_conn);
+  fail_unless (input_sock != NULL);
+  output_sock = g_socket_connection_get_socket (output_conn);
+  fail_unless (output_sock != NULL);
+
+  fail_unless (gst_rtsp_connection_create_from_socket (input_sock, "127.0.0.1",
+          4444, NULL, &rtsp_input_conn) == GST_RTSP_OK);
+  fail_unless (rtsp_input_conn != NULL);
+
+  fail_unless (gst_rtsp_connection_create_from_socket (output_sock, "127.0.0.1",
+          4444, NULL, &rtsp_output_conn) == GST_RTSP_OK);
+  fail_unless (rtsp_output_conn != NULL);
+
+  /* send request message */
+  fail_unless (gst_rtsp_message_new_request (&msg, GST_RTSP_SETUP,
+          "rtsp://example.com/") == GST_RTSP_OK);
+  fail_unless (gst_rtsp_message_add_header (msg, GST_RTSP_HDR_BLOCKSIZE,
+          "1024") == GST_RTSP_OK);
+  fail_unless (gst_rtsp_message_add_header_by_name (msg, "Custom-Header",
+          "lol") == GST_RTSP_OK);
+  fail_unless (gst_rtsp_connection_send (rtsp_output_conn, msg,
+          NULL) == GST_RTSP_OK);
+  fail_unless (gst_rtsp_message_free (msg) == GST_RTSP_OK);
+  msg = NULL;
+
+  /* receive request message and make sure it is correct */
+  fail_unless (gst_rtsp_message_new (&msg) == GST_RTSP_OK);
+  fail_unless (gst_rtsp_connection_receive (rtsp_input_conn, msg, NULL) ==
+      GST_RTSP_OK);
+  fail_unless (gst_rtsp_message_get_type (msg) == GST_RTSP_MESSAGE_REQUEST);
+  /* check headers */
+  fail_unless (gst_rtsp_message_get_header (msg, GST_RTSP_HDR_BLOCKSIZE,
+          &header_val, 0) == GST_RTSP_OK);
+  fail_unless (!g_strcmp0 (header_val, "1024"));
+  fail_unless (gst_rtsp_message_get_header_by_name (msg, "Custom-Header",
+          &header_val, 0) == GST_RTSP_OK);
+  fail_unless (!g_strcmp0 (header_val, "lol"));
+  fail_unless (gst_rtsp_message_free (msg) == GST_RTSP_OK);
+  msg = NULL;
+
+  fail_unless (gst_rtsp_connection_close (rtsp_input_conn) == GST_RTSP_OK);
+  fail_unless (gst_rtsp_connection_free (rtsp_input_conn) == GST_RTSP_OK);
+  fail_unless (gst_rtsp_connection_close (rtsp_output_conn) == GST_RTSP_OK);
+  fail_unless (gst_rtsp_connection_free (rtsp_output_conn) == GST_RTSP_OK);
+
+  g_object_unref (input_conn);
+  g_object_unref (output_conn);
+}
+
+GST_END_TEST;
+
 GST_START_TEST (test_rtspconnection_connect)
 {
   ServiceData *data;
@@ -809,6 +872,7 @@
   tcase_add_test (tc_chain, test_rtspconnection_tunnel_setup);
   tcase_add_test (tc_chain, test_rtspconnection_tunnel_setup_post_first);
   tcase_add_test (tc_chain, test_rtspconnection_send_receive);
+  tcase_add_test (tc_chain, test_rtspconnection_send_receive_check_headers);
   tcase_add_test (tc_chain, test_rtspconnection_connect);
   tcase_add_test (tc_chain, test_rtspconnection_poll);
   tcase_add_test (tc_chain, test_rtspconnection_backlog);
diff --git a/tests/check/libs/tag.c b/tests/check/libs/tag.c
index 16b5dcf..e8244bf 100644
--- a/tests/check/libs/tag.c
+++ b/tests/check/libs/tag.c
@@ -686,6 +686,65 @@
 
 GST_END_TEST;
 
+GST_START_TEST (test_id3v2_priv_tag)
+{
+  const guint8 id3v2[] = {
+    0x49, 0x44, 0x33, 0x04, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x3f, 0x50, 0x52, 0x49, 0x56, 0x00, 0x00,
+    0x00, 0x35, 0x00, 0x00, 0x63, 0x6f, 0x6d, 0x2e,
+    0x61, 0x70, 0x70, 0x6c, 0x65, 0x2e, 0x73, 0x74,
+    0x72, 0x65, 0x61, 0x6d, 0x69, 0x6e, 0x67, 0x2e,
+    0x74, 0x72, 0x61, 0x6e, 0x73, 0x70, 0x6f, 0x72,
+    0x74, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x54,
+    0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0d, 0xbb,
+    0xa0
+  };
+  const GstStructure *s;
+  GstTagList *tags;
+  GstSample *sample = NULL;
+  GstBuffer *buf;
+  GstMapInfo map;
+  gchar *owner = NULL;
+
+  buf = gst_buffer_new_allocate (NULL, sizeof (id3v2), NULL);
+  gst_buffer_fill (buf, 0, id3v2, sizeof (id3v2));
+
+  tags = gst_tag_list_from_id3v2_tag (buf);
+  gst_buffer_unref (buf);
+
+  fail_if (tags == NULL, "Failed to parse ID3 tag");
+
+  GST_LOG ("tags: %" GST_PTR_FORMAT, tags);
+
+  if (!gst_tag_list_get_sample (tags, GST_TAG_PRIVATE_DATA, &sample))
+    g_error ("Failed to get PRIVATE_DATA tag");
+
+  s = gst_sample_get_info (sample);
+  buf = gst_sample_get_buffer (sample);
+
+  if (!gst_structure_has_name (s, "ID3PrivateFrame"))
+    g_error ("wrong info name");
+
+  gst_structure_get (s, "owner", G_TYPE_STRING, &owner, NULL);
+  fail_unless (owner != NULL);
+
+  fail_unless_equals_string (owner,
+      "com.apple.streaming.transportStreamTimestamp");
+
+  fail_unless_equals_int (gst_buffer_get_size (buf), 8);
+
+  gst_buffer_map (buf, &map, GST_MAP_READ);
+  GST_MEMDUMP ("private data", map.data, map.size);
+  fail_unless_equals_uint64 (GST_READ_UINT64_BE (map.data), 0x0dbba0);
+  gst_buffer_unmap (buf, &map);
+  g_free (owner);
+
+  gst_sample_unref (sample);
+  gst_tag_list_unref (tags);
+}
+
+GST_END_TEST
 GST_START_TEST (test_language_utils)
 {
   gchar **lang_codes, **c;
@@ -1799,6 +1858,7 @@
   tcase_add_test (tc_chain, test_vorbis_tags);
   tcase_add_test (tc_chain, test_id3_tags);
   tcase_add_test (tc_chain, test_id3v1_utf8_tag);
+  tcase_add_test (tc_chain, test_id3v2_priv_tag);
   tcase_add_test (tc_chain, test_language_utils);
   tcase_add_test (tc_chain, test_license_utils);
   tcase_add_test (tc_chain, test_xmp_formatting);
diff --git a/tests/check/libs/video.c b/tests/check/libs/video.c
index 5acf115..b8decf1 100644
--- a/tests/check/libs/video.c
+++ b/tests/check/libs/video.c
@@ -2515,16 +2515,16 @@
   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);
+    fail_unless_equals_int (data[i], 0x80);
+    fail_unless_equals_int (data[i + 1], 0x80);
+    fail_unless_equals_int (data[i + 2], 0x80);
+    fail_unless_equals_int (data[i + 3], 0x80);
 #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);
+    fail_unless_equals_int (data[i + 1], 0x80);
+    fail_unless_equals_int (data[i + 2], 0x80);
+    fail_unless_equals_int (data[i + 3], 0x80);
 #endif
     if ((i + 4) == (4 * (((((y > 0) ? (y + temp_height) : temp_height) -
                         1) * VIDEO_WIDTH) + ((x >
@@ -2635,6 +2635,60 @@
 
 GST_END_TEST;
 
+GST_START_TEST (test_overlay_composition_over_transparency)
+{
+  GstVideoOverlayComposition *comp1;
+  GstVideoOverlayRectangle *rect1;
+  GstBuffer *pix1, *pix2;
+  GstVideoInfo vinfo;
+  guint8 *data;
+
+  GstVideoFrame video_frame;
+  guint fwidth = 200, height = 50, swidth = 100;
+
+  memset (&video_frame, 0, sizeof (GstVideoFrame));
+
+  pix1 = gst_buffer_new_and_alloc (fwidth * sizeof (guint32) * height);
+  gst_buffer_memset (pix1, 0, 0x00, gst_buffer_get_size (pix1));
+  gst_video_info_init (&vinfo);
+  gst_video_info_set_format (&vinfo, GST_VIDEO_OVERLAY_COMPOSITION_FORMAT_RGB,
+      fwidth, height);
+  gst_video_frame_map (&video_frame, &vinfo, pix1, GST_MAP_READWRITE);
+  gst_buffer_unref (pix1);
+
+  pix2 = gst_buffer_new_and_alloc (swidth * sizeof (guint32) * height);
+  gst_buffer_memset (pix2, 0, 0xFF, gst_buffer_get_size (pix2));
+  gst_buffer_add_video_meta (pix2, GST_VIDEO_FRAME_FLAG_NONE,
+      GST_VIDEO_OVERLAY_COMPOSITION_FORMAT_RGB, swidth, height);
+  rect1 = gst_video_overlay_rectangle_new_raw (pix2, swidth, 0,
+      swidth, height, GST_VIDEO_OVERLAY_FORMAT_FLAG_NONE);
+
+  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);
+  gst_buffer_unref (pix2);
+
+  data = GST_VIDEO_FRAME_PLANE_DATA (&video_frame, 0);
+
+  fail_unless_equals_int (data[0], 0x00);
+  fail_unless_equals_int (data[1], 0x00);
+  fail_unless_equals_int (data[2], 0x00);
+  fail_unless_equals_int (data[3], 0x00);
+
+  data += swidth * sizeof (guint32);
+
+  fail_unless_equals_int (data[0], 0xFF);
+  fail_unless_equals_int (data[1], 0xFF);
+  fail_unless_equals_int (data[2], 0xFF);
+  fail_unless_equals_int (data[3], 0xFF);
+
+  gst_video_frame_unmap (&video_frame);
+}
+
+GST_END_TEST;
+
+
 static Suite *
 video_suite (void)
 {
@@ -2668,6 +2722,7 @@
   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);
+  tcase_add_test (tc_chain, test_overlay_composition_over_transparency);
 
   return s;
 }
diff --git a/tests/examples/encoding/encoding.c b/tests/examples/encoding/encoding.c
index 1861f81..a7f80af 100644
--- a/tests/examples/encoding/encoding.c
+++ b/tests/examples/encoding/encoding.c
@@ -55,8 +55,7 @@
     desc = gst_pb_utils_get_codec_description (caps);
     g_print ("  %s - %s\n", desc, tmpstr);
     g_free (tmpstr);
-    if (desc)
-      g_free (desc);
+    g_free (desc);
     gst_caps_remove_structure (caps, 0);
   }
   g_print ("\n");
@@ -73,8 +72,7 @@
     desc = gst_pb_utils_get_codec_description (caps);
     g_print ("  %s - %s\n", desc, tmpstr);
     g_free (tmpstr);
-    if (desc)
-      g_free (desc);
+    g_free (desc);
     gst_caps_remove_structure (caps, 0);
   }
   g_print ("\n");
@@ -91,8 +89,7 @@
     desc = gst_pb_utils_get_codec_description (caps);
     g_print ("  %s - %s\n", desc, tmpstr);
     g_free (tmpstr);
-    if (desc)
-      g_free (desc);
+    g_free (desc);
     gst_caps_remove_structure (caps, 0);
   }
   g_print ("\n");
@@ -399,6 +396,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);
   }
 
diff --git a/tests/examples/playback/playback-test.c b/tests/examples/playback/playback-test.c
index d458c2b..a238003 100644
--- a/tests/examples/playback/playback-test.c
+++ b/tests/examples/playback/playback-test.c
@@ -163,8 +163,6 @@
   GList *paths, *current_path;
   GList *sub_paths, *current_sub_path;
 
-  gchar *audiosink_str, *videosink_str;
-
   /* Internal state */
   gint64 position, duration;
 
@@ -1466,6 +1464,7 @@
     /* save the pixbuf */
     gdk_pixbuf_save (pixbuf, "snapshot.png", "png", &error, NULL);
     gst_buffer_unmap (buffer, &map);
+    g_clear_error (&error);
 
   done:
     gst_sample_unref (sample);
@@ -3369,9 +3368,6 @@
 static void
 reset_app (PlaybackApp * app)
 {
-  g_free (app->audiosink_str);
-  g_free (app->videosink_str);
-
   g_list_free (app->formats);
 
   g_mutex_clear (&app->state_mutex);
@@ -3414,6 +3410,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);
   }
   g_option_context_free (ctx);
diff --git a/tests/examples/seek/jsseek.c b/tests/examples/seek/jsseek.c
index 72bca95..8a472af 100644
--- a/tests/examples/seek/jsseek.c
+++ b/tests/examples/seek/jsseek.c
@@ -961,9 +961,8 @@
 make_parselaunch_pipeline (const gchar * description)
 {
   GstElement *pipeline;
-  GError *error = NULL;
 
-  pipeline = gst_parse_launch (description, &error);
+  pipeline = gst_parse_launch (description, NULL);
 
   seekable_elements = g_list_prepend (seekable_elements, pipeline);
 
@@ -2057,9 +2056,7 @@
     /* save the pixbuf */
     gdk_pixbuf_save (pixbuf, "snapshot.png", "png", &error, NULL);
     gst_buffer_unmap (buffer, &map);
-
-    /* save the pixbuf */
-    gdk_pixbuf_save (pixbuf, "snapshot.png", "png", &error, NULL);
+    g_clear_error (&error);
 
   done:
     gst_buffer_unref (buffer);
@@ -2624,7 +2621,7 @@
       &bytes_read, &err);
   if (err) {
     g_print ("error reading from joystick: %s", err->message);
-    g_error_free (err);
+    g_clear_error (&err);
     return FALSE;
   } else if (bytes_read != sizeof (struct js_event)) {
     g_print ("error reading joystick, read %u bytes of %u\n",
@@ -2678,6 +2675,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);
   }
   g_option_context_free (ctx);
diff --git a/tests/examples/seek/scrubby.c b/tests/examples/seek/scrubby.c
index c5c8d67..f9b8c8c 100644
--- a/tests/examples/seek/scrubby.c
+++ b/tests/examples/seek/scrubby.c
@@ -235,7 +235,7 @@
 
   diff = cur_time - prev_time;
 
-  GST_DEBUG ("diff: %" GST_TIME_FORMAT, GST_TIME_ARGS (diff));
+  GST_DEBUG ("diff: %" GST_STIME_FORMAT, GST_STIME_ARGS (diff));
 
   start = prev_range * duration / RANGE_PREC;
   /* play 50 milliseconds */
@@ -456,6 +456,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);
   }
 
diff --git a/tests/icles/stress-playbin.c b/tests/icles/stress-playbin.c
index 24498f9..00bc48e 100644
--- a/tests/icles/stress-playbin.c
+++ b/tests/icles/stress-playbin.c
@@ -34,7 +34,7 @@
 
         gst_message_parse_error (msg, &gerror, &debug);
         gst_object_default_error (GST_MESSAGE_SRC (msg), gerror, debug);
-        g_error_free (gerror);
+        g_clear_error (&gerror);
         g_free (debug);
         break;
       }
@@ -103,6 +103,8 @@
   g_option_context_add_group (ctx, gst_init_get_option_group ());
   if (!g_option_context_parse (ctx, &argc, &argv, &err)) {
     g_print ("Error initializing: %s\n", GST_STR_NULL (err->message));
+    g_option_context_free (ctx);
+    g_clear_error (&err);
     exit (1);
   }
   g_option_context_free (ctx);
diff --git a/tests/icles/test-effect-switch.c b/tests/icles/test-effect-switch.c
index 79b423d..fc54a4d 100644
--- a/tests/icles/test-effect-switch.c
+++ b/tests/icles/test-effect-switch.c
@@ -128,7 +128,7 @@
 
       gst_message_parse_error (msg, &err, &dbg);
       gst_object_default_error (msg->src, err, dbg);
-      g_error_free (err);
+      g_clear_error (&err);
       g_free (dbg);
       g_main_loop_quit (loop);
       break;
@@ -158,6 +158,8 @@
   g_option_context_add_group (ctx, gst_init_get_option_group ());
   if (!g_option_context_parse (ctx, &argc, &argv, &err)) {
     g_print ("Error initializing: %s\n", err->message);
+    g_option_context_free (ctx);
+    g_clear_error (&err);
     return 1;
   }
   g_option_context_free (ctx);
diff --git a/tools/gst-device-monitor.c b/tools/gst-device-monitor.c
index c4a1d5e..b09f9f8 100644
--- a/tools/gst-device-monitor.c
+++ b/tools/gst-device-monitor.c
@@ -166,6 +166,8 @@
   g_option_context_add_group (ctx, gst_init_get_option_group ());
   if (!g_option_context_parse (ctx, &argc, &argv, &err)) {
     g_print ("Error initializing: %s\n", GST_STR_NULL (err->message));
+    g_option_context_free (ctx);
+    g_clear_error (&err);
     return 1;
   }
   g_option_context_free (ctx);
@@ -210,6 +212,7 @@
       g_strfreev (filters);
     }
   }
+  g_strfreev (args);
 
   g_print ("Probing devices...\n\n");
 
@@ -227,7 +230,7 @@
 
       device_added (device);
       gst_object_unref (device);
-      devices = g_list_remove_link (devices, devices);
+      devices = g_list_delete_link (devices, devices);
     }
   } else {
     g_print ("No devices found!\n");
diff --git a/tools/gst-discoverer.c b/tools/gst-discoverer.c
index 16468ae..37bb985 100644
--- a/tools/gst-discoverer.c
+++ b/tools/gst-discoverer.c
@@ -487,7 +487,7 @@
 
     if (err) {
       g_warning ("Couldn't convert filename to URI: %s\n", err->message);
-      g_error_free (err);
+      g_clear_error (&err);
       return;
     }
   } else {
@@ -498,9 +498,9 @@
     g_print ("Analyzing %s\n", uri);
     info = gst_discoverer_discover_uri (dc, uri, &err);
     print_info (info, err);
-    if (err)
-      g_error_free (err);
-    gst_discoverer_info_unref (info);
+    g_clear_error (&err);
+    if (info)
+      gst_discoverer_info_unref (info);
   } else {
     gst_discoverer_discover_uri_async (dc, uri);
   }
diff --git a/tools/gst-play.c b/tools/gst-play.c
index 15c9aa2..5e6dac6 100644
--- a/tools/gst-play.c
+++ b/tools/gst-play.c
@@ -352,7 +352,7 @@
       g_printerr ("WARNING %s\n", err->message);
       if (dbg != NULL)
         g_printerr ("WARNING debug information: %s\n", dbg);
-      g_error_free (err);
+      g_clear_error (&err);
       g_free (dbg);
       break;
     }
@@ -368,7 +368,7 @@
       g_printerr ("ERROR %s for %s\n", err->message, play->uris[play->cur_idx]);
       if (dbg != NULL)
         g_printerr ("ERROR debug information: %s\n", dbg);
-      g_error_free (err);
+      g_clear_error (&err);
       g_free (dbg);
 
       /* flush any other error messages from the bus and clean up */
@@ -973,6 +973,7 @@
     "a", N_("change audio track")}, {
     "v", N_("change video track")}, {
     "s", N_("change subtitle track")}, {
+    "0", N_("seek to beginning")}, {
   "k", N_("show keyboard shortcuts")},};
   guint i, chars_to_pad, desc_len, max_desc_len = 0;
 
@@ -1063,7 +1064,9 @@
     case 's':
       play_cycle_track_selection (play, GST_PLAY_TRACK_TYPE_SUBTITLE);
       break;
-      /* fall through */
+    case '0':
+      play_do_seek (play, 0, play->rate, play->trick_mode);
+      break;
     default:
       if (strcmp (key_input, GST_PLAY_KB_ARROW_RIGHT) == 0) {
         relative_seek (play, +0.08);
@@ -1139,6 +1142,8 @@
   g_option_context_add_group (ctx, gst_init_get_option_group ());
   if (!g_option_context_parse (ctx, &argc, &argv, &err)) {
     g_print ("Error initializing: %s\n", GST_STR_NULL (err->message));
+    g_option_context_free (ctx);
+    g_clear_error (&err);
     return 1;
   }
   g_option_context_free (ctx);
diff --git a/win32/common/_stdint.h b/win32/common/_stdint.h
index c1bf0bc..06e809a 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.6.2"
-/* generated using gnu compiler gcc (Debian 5.3.1-3) 5.3.1 20151207 */
+#define _GENERATED_STDINT_H "gst-plugins-base 1.7.1"
+/* generated using gnu compiler gcc-5 (Debian 5.3.1-4) 5.3.1 20151219 */
 #define _STDINT_HAVE_STDINT_H 1
 #include <stdint.h>
 #endif
diff --git a/win32/common/audio-enumtypes.c b/win32/common/audio-enumtypes.c
index 63a12ec..c113912 100644
--- a/win32/common/audio-enumtypes.c
+++ b/win32/common/audio-enumtypes.c
@@ -6,7 +6,10 @@
 #include "audio.h"
 #include "audio-format.h"
 #include "audio-channels.h"
+#include "audio-channel-mix.h"
+#include "audio-converter.h"
 #include "audio-info.h"
+#include "audio-quantize.h"
 #include "gstaudioringbuffer.h"
 
 /* enumerations from "audio-format.h" */
@@ -97,12 +100,14 @@
 {
   static volatile gsize g_define_type_id__volatile = 0;
   if (g_once_init_enter (&g_define_type_id__volatile)) {
-    static const GEnumValue values[] = {
+    static const GFlagsValue values[] = {
       {GST_AUDIO_PACK_FLAG_NONE, "GST_AUDIO_PACK_FLAG_NONE", "none"},
+      {GST_AUDIO_PACK_FLAG_TRUNCATE_RANGE, "GST_AUDIO_PACK_FLAG_TRUNCATE_RANGE",
+          "truncate-range"},
       {0, NULL, NULL}
     };
     GType g_define_type_id =
-        g_enum_register_static ("GstAudioPackFlags", values);
+        g_flags_register_static ("GstAudioPackFlags", values);
     g_once_init_leave (&g_define_type_id__volatile, g_define_type_id);
   }
   return g_define_type_id__volatile;
@@ -191,6 +196,49 @@
   return g_define_type_id__volatile;
 }
 
+/* enumerations from "audio-channel-mix.h" */
+GType
+gst_audio_channel_mix_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_AUDIO_CHANNEL_MIX_FLAGS_NONE, "GST_AUDIO_CHANNEL_MIX_FLAGS_NONE",
+          "none"},
+      {GST_AUDIO_CHANNEL_MIX_FLAGS_NON_INTERLEAVED,
+          "GST_AUDIO_CHANNEL_MIX_FLAGS_NON_INTERLEAVED", "non-interleaved"},
+      {GST_AUDIO_CHANNEL_MIX_FLAGS_UNPOSITIONED_IN,
+          "GST_AUDIO_CHANNEL_MIX_FLAGS_UNPOSITIONED_IN", "unpositioned-in"},
+      {GST_AUDIO_CHANNEL_MIX_FLAGS_UNPOSITIONED_OUT,
+          "GST_AUDIO_CHANNEL_MIX_FLAGS_UNPOSITIONED_OUT", "unpositioned-out"},
+      {0, NULL, NULL}
+    };
+    GType g_define_type_id =
+        g_flags_register_static ("GstAudioChannelMixFlags", values);
+    g_once_init_leave (&g_define_type_id__volatile, g_define_type_id);
+  }
+  return g_define_type_id__volatile;
+}
+
+/* enumerations from "audio-converter.h" */
+GType
+gst_audio_converter_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_AUDIO_CONVERTER_FLAG_NONE, "GST_AUDIO_CONVERTER_FLAG_NONE", "none"},
+      {GST_AUDIO_CONVERTER_FLAG_SOURCE_WRITABLE,
+          "GST_AUDIO_CONVERTER_FLAG_SOURCE_WRITABLE", "source-writable"},
+      {0, NULL, NULL}
+    };
+    GType g_define_type_id =
+        g_flags_register_static ("GstAudioConverterFlags", values);
+    g_once_init_leave (&g_define_type_id__volatile, g_define_type_id);
+  }
+  return g_define_type_id__volatile;
+}
+
 /* enumerations from "audio-info.h" */
 GType
 gst_audio_flags_get_type (void)
@@ -227,6 +275,67 @@
   return g_define_type_id__volatile;
 }
 
+/* enumerations from "audio-quantize.h" */
+GType
+gst_audio_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_AUDIO_DITHER_NONE, "GST_AUDIO_DITHER_NONE", "none"},
+      {GST_AUDIO_DITHER_RPDF, "GST_AUDIO_DITHER_RPDF", "rpdf"},
+      {GST_AUDIO_DITHER_TPDF, "GST_AUDIO_DITHER_TPDF", "tpdf"},
+      {GST_AUDIO_DITHER_TPDF_HF, "GST_AUDIO_DITHER_TPDF_HF", "tpdf-hf"},
+      {0, NULL, NULL}
+    };
+    GType g_define_type_id =
+        g_enum_register_static ("GstAudioDitherMethod", values);
+    g_once_init_leave (&g_define_type_id__volatile, g_define_type_id);
+  }
+  return g_define_type_id__volatile;
+}
+
+GType
+gst_audio_noise_shaping_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_AUDIO_NOISE_SHAPING_NONE, "GST_AUDIO_NOISE_SHAPING_NONE", "none"},
+      {GST_AUDIO_NOISE_SHAPING_ERROR_FEEDBACK,
+          "GST_AUDIO_NOISE_SHAPING_ERROR_FEEDBACK", "error-feedback"},
+      {GST_AUDIO_NOISE_SHAPING_SIMPLE, "GST_AUDIO_NOISE_SHAPING_SIMPLE",
+          "simple"},
+      {GST_AUDIO_NOISE_SHAPING_MEDIUM, "GST_AUDIO_NOISE_SHAPING_MEDIUM",
+          "medium"},
+      {GST_AUDIO_NOISE_SHAPING_HIGH, "GST_AUDIO_NOISE_SHAPING_HIGH", "high"},
+      {0, NULL, NULL}
+    };
+    GType g_define_type_id =
+        g_enum_register_static ("GstAudioNoiseShapingMethod", values);
+    g_once_init_leave (&g_define_type_id__volatile, g_define_type_id);
+  }
+  return g_define_type_id__volatile;
+}
+
+GType
+gst_audio_quantize_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_AUDIO_QUANTIZE_FLAG_NONE, "GST_AUDIO_QUANTIZE_FLAG_NONE", "none"},
+      {GST_AUDIO_QUANTIZE_FLAG_NON_INTERLEAVED,
+          "GST_AUDIO_QUANTIZE_FLAG_NON_INTERLEAVED", "non-interleaved"},
+      {0, NULL, NULL}
+    };
+    GType g_define_type_id =
+        g_flags_register_static ("GstAudioQuantizeFlags", values);
+    g_once_init_leave (&g_define_type_id__volatile, g_define_type_id);
+  }
+  return g_define_type_id__volatile;
+}
+
 /* enumerations from "gstaudioringbuffer.h" */
 GType
 gst_audio_ring_buffer_state_get_type (void)
diff --git a/win32/common/audio-enumtypes.h b/win32/common/audio-enumtypes.h
index a323a87..1b51e1c 100644
--- a/win32/common/audio-enumtypes.h
+++ b/win32/common/audio-enumtypes.h
@@ -20,12 +20,28 @@
 GType gst_audio_channel_position_get_type (void);
 #define GST_TYPE_AUDIO_CHANNEL_POSITION (gst_audio_channel_position_get_type())
 
+/* enumerations from "audio-channel-mix.h" */
+GType gst_audio_channel_mix_flags_get_type (void);
+#define GST_TYPE_AUDIO_CHANNEL_MIX_FLAGS (gst_audio_channel_mix_flags_get_type())
+
+/* enumerations from "audio-converter.h" */
+GType gst_audio_converter_flags_get_type (void);
+#define GST_TYPE_AUDIO_CONVERTER_FLAGS (gst_audio_converter_flags_get_type())
+
 /* enumerations from "audio-info.h" */
 GType gst_audio_flags_get_type (void);
 #define GST_TYPE_AUDIO_FLAGS (gst_audio_flags_get_type())
 GType gst_audio_layout_get_type (void);
 #define GST_TYPE_AUDIO_LAYOUT (gst_audio_layout_get_type())
 
+/* enumerations from "audio-quantize.h" */
+GType gst_audio_dither_method_get_type (void);
+#define GST_TYPE_AUDIO_DITHER_METHOD (gst_audio_dither_method_get_type())
+GType gst_audio_noise_shaping_method_get_type (void);
+#define GST_TYPE_AUDIO_NOISE_SHAPING_METHOD (gst_audio_noise_shaping_method_get_type())
+GType gst_audio_quantize_flags_get_type (void);
+#define GST_TYPE_AUDIO_QUANTIZE_FLAGS (gst_audio_quantize_flags_get_type())
+
 /* enumerations from "gstaudioringbuffer.h" */
 GType gst_audio_ring_buffer_state_get_type (void);
 #define GST_TYPE_AUDIO_RING_BUFFER_STATE (gst_audio_ring_buffer_state_get_type())
diff --git a/win32/common/config.h b/win32/common/config.h
index a99eca4..e9feeec 100644
--- a/win32/common/config.h
+++ b/win32/common/config.h
@@ -59,6 +59,9 @@
 /* system wide data directory */
 #define GST_DATADIR PREFIX "\\share"
 
+/* Define if extra runtime checks should be enabled */
+#undef GST_ENABLE_EXTRA_CHECKS
+
 /* Extra platform specific plugin suffix */
 #undef GST_EXTRA_MODULE_SUFFIX
 
@@ -87,7 +90,7 @@
 #define GST_PACKAGE_ORIGIN "Unknown package origin"
 
 /* GStreamer package release date/time for plugins as YYYY-MM-DD */
-#define GST_PACKAGE_RELEASE_DATETIME "2015-12-14"
+#define GST_PACKAGE_RELEASE_DATETIME "2015-12-24"
 
 /* Define if static plugins should be built */
 #undef GST_PLUGIN_BUILD_STATIC
@@ -185,9 +188,6 @@
 /* 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
 
@@ -337,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.6.2"
+#define PACKAGE_STRING "GStreamer Base Plug-ins 1.7.1"
 
 /* Define to the one symbol short name of this package. */
 #define PACKAGE_TARNAME "gst-plugins-base"
@@ -346,7 +346,7 @@
 #undef PACKAGE_URL
 
 /* Define to the version of this package. */
-#define PACKAGE_VERSION "1.6.2"
+#define PACKAGE_VERSION "1.7.1"
 
 /* directory where plugins are located */
 #ifdef _DEBUG
@@ -380,7 +380,7 @@
 #undef USE_TREMOLO
 
 /* Version number of package */
-#define VERSION "1.6.2"
+#define VERSION "1.7.1"
 
 /* Define WORDS_BIGENDIAN to 1 if your processor stores words with the most
    significant byte first (like Motorola and SPARC, unlike Intel). */
diff --git a/win32/common/libgstaudio.def b/win32/common/libgstaudio.def
index 93031a0..aa71f67 100644
--- a/win32/common/libgstaudio.def
+++ b/win32/common/libgstaudio.def
@@ -27,17 +27,34 @@
 	gst_audio_cd_src_add_track
 	gst_audio_cd_src_get_type
 	gst_audio_cd_src_mode_get_type
+	gst_audio_channel_get_fallback_mask
+	gst_audio_channel_mix_flags_get_type
+	gst_audio_channel_mix_free
+	gst_audio_channel_mix_is_passthrough
+	gst_audio_channel_mix_new
+	gst_audio_channel_mix_samples
 	gst_audio_channel_position_get_type
 	gst_audio_channel_positions_from_mask
 	gst_audio_channel_positions_to_mask
 	gst_audio_channel_positions_to_valid_order
 	gst_audio_check_valid_channel_positions
+	gst_audio_clipping_meta_api_get_type
+	gst_audio_clipping_meta_get_info
 	gst_audio_clock_adjust
 	gst_audio_clock_get_time
 	gst_audio_clock_get_type
 	gst_audio_clock_invalidate
 	gst_audio_clock_new
 	gst_audio_clock_reset
+	gst_audio_converter_flags_get_type
+	gst_audio_converter_free
+	gst_audio_converter_get_config
+	gst_audio_converter_get_in_frames
+	gst_audio_converter_get_max_latency
+	gst_audio_converter_get_out_frames
+	gst_audio_converter_new
+	gst_audio_converter_samples
+	gst_audio_converter_set_config
 	gst_audio_decoder_allocate_output_buffer
 	gst_audio_decoder_finish_frame
 	gst_audio_decoder_get_allocator
@@ -68,6 +85,7 @@
 	gst_audio_decoder_set_plc_aware
 	gst_audio_decoder_set_tolerance
 	gst_audio_decoder_set_use_default_pad_acceptcaps
+	gst_audio_dither_method_get_type
 	gst_audio_downmix_meta_api_get_type
 	gst_audio_downmix_meta_get_info
 	gst_audio_encoder_allocate_output_buffer
@@ -127,7 +145,12 @@
 	gst_audio_info_set_format
 	gst_audio_info_to_caps
 	gst_audio_layout_get_type
+	gst_audio_noise_shaping_method_get_type
 	gst_audio_pack_flags_get_type
+	gst_audio_quantize_flags_get_type
+	gst_audio_quantize_free
+	gst_audio_quantize_new
+	gst_audio_quantize_samples
 	gst_audio_reorder_channels
 	gst_audio_ring_buffer_acquire
 	gst_audio_ring_buffer_activate
@@ -164,6 +187,7 @@
 	gst_audio_ring_buffer_stop
 	gst_audio_sink_get_type
 	gst_audio_src_get_type
+	gst_buffer_add_audio_clipping_meta
 	gst_buffer_add_audio_downmix_meta
 	gst_buffer_get_audio_downmix_meta_for_channels
 	gst_stream_volume_convert_volume
diff --git a/win32/common/libgstpbutils.def b/win32/common/libgstpbutils.def
index 774b1d3..785bfb4 100644
--- a/win32/common/libgstpbutils.def
+++ b/win32/common/libgstpbutils.def
@@ -1,4 +1,6 @@
 EXPORTS
+	gst_audio_visualizer_get_type
+	gst_audio_visualizer_shader_get_type
 	gst_codec_utils_aac_caps_set_level_and_profile
 	gst_codec_utils_aac_get_index_from_sample_rate
 	gst_codec_utils_aac_get_level
@@ -16,6 +18,11 @@
 	gst_codec_utils_mpeg4video_caps_set_level_and_profile
 	gst_codec_utils_mpeg4video_get_level
 	gst_codec_utils_mpeg4video_get_profile
+	gst_codec_utils_opus_create_caps
+	gst_codec_utils_opus_create_caps_from_header
+	gst_codec_utils_opus_create_header
+	gst_codec_utils_opus_parse_caps
+	gst_codec_utils_opus_parse_header
 	gst_discoverer_audio_info_get_bitrate
 	gst_discoverer_audio_info_get_channels
 	gst_discoverer_audio_info_get_depth
diff --git a/win32/common/libgstrtsp.def b/win32/common/libgstrtsp.def
index aa307cc..355a9ef 100644
--- a/win32/common/libgstrtsp.def
+++ b/win32/common/libgstrtsp.def
@@ -4,6 +4,7 @@
 	gst_rtsp_connection_clear_auth_params
 	gst_rtsp_connection_close
 	gst_rtsp_connection_connect
+	gst_rtsp_connection_connect_with_response
 	gst_rtsp_connection_create
 	gst_rtsp_connection_create_from_socket
 	gst_rtsp_connection_do_tunnel
diff --git a/win32/common/libgstvideo.def b/win32/common/libgstvideo.def
index 39b031f..7b25d99 100644
--- a/win32/common/libgstvideo.def
+++ b/win32/common/libgstvideo.def
@@ -1,5 +1,6 @@
 EXPORTS
 	_gst_video_decoder_error
+	gst_buffer_add_video_affine_transformation_meta
 	gst_buffer_add_video_gl_texture_upload_meta
 	gst_buffer_add_video_meta
 	gst_buffer_add_video_meta_full
@@ -51,6 +52,9 @@
 	gst_navigation_send_event
 	gst_navigation_send_key_event
 	gst_navigation_send_mouse_event
+	gst_video_affine_transformation_meta_api_get_type
+	gst_video_affine_transformation_meta_apply_matrix
+	gst_video_affine_transformation_meta_get_info
 	gst_video_alignment_reset
 	gst_video_alpha_mode_get_type
 	gst_video_blend
diff --git a/win32/common/pbutils-enumtypes.c b/win32/common/pbutils-enumtypes.c
index 99a6f1d..0f0bc93 100644
--- a/win32/common/pbutils-enumtypes.c
+++ b/win32/common/pbutils-enumtypes.c
@@ -11,6 +11,7 @@
 #include "install-plugins.h"
 #include "missing-plugins.h"
 #include "gstdiscoverer.h"
+#include "gstaudiovisualizer.h"
 
 /* enumerations from "install-plugins.h" */
 GType
@@ -89,3 +90,46 @@
   }
   return g_define_type_id__volatile;
 }
+
+/* enumerations from "gstaudiovisualizer.h" */
+GType
+gst_audio_visualizer_shader_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_AUDIO_VISUALIZER_SHADER_NONE, "GST_AUDIO_VISUALIZER_SHADER_NONE",
+          "none"},
+      {GST_AUDIO_VISUALIZER_SHADER_FADE, "GST_AUDIO_VISUALIZER_SHADER_FADE",
+          "fade"},
+      {GST_AUDIO_VISUALIZER_SHADER_FADE_AND_MOVE_UP,
+          "GST_AUDIO_VISUALIZER_SHADER_FADE_AND_MOVE_UP", "fade-and-move-up"},
+      {GST_AUDIO_VISUALIZER_SHADER_FADE_AND_MOVE_DOWN,
+            "GST_AUDIO_VISUALIZER_SHADER_FADE_AND_MOVE_DOWN",
+          "fade-and-move-down"},
+      {GST_AUDIO_VISUALIZER_SHADER_FADE_AND_MOVE_LEFT,
+            "GST_AUDIO_VISUALIZER_SHADER_FADE_AND_MOVE_LEFT",
+          "fade-and-move-left"},
+      {GST_AUDIO_VISUALIZER_SHADER_FADE_AND_MOVE_RIGHT,
+            "GST_AUDIO_VISUALIZER_SHADER_FADE_AND_MOVE_RIGHT",
+          "fade-and-move-right"},
+      {GST_AUDIO_VISUALIZER_SHADER_FADE_AND_MOVE_HORIZ_OUT,
+            "GST_AUDIO_VISUALIZER_SHADER_FADE_AND_MOVE_HORIZ_OUT",
+          "fade-and-move-horiz-out"},
+      {GST_AUDIO_VISUALIZER_SHADER_FADE_AND_MOVE_HORIZ_IN,
+            "GST_AUDIO_VISUALIZER_SHADER_FADE_AND_MOVE_HORIZ_IN",
+          "fade-and-move-horiz-in"},
+      {GST_AUDIO_VISUALIZER_SHADER_FADE_AND_MOVE_VERT_OUT,
+            "GST_AUDIO_VISUALIZER_SHADER_FADE_AND_MOVE_VERT_OUT",
+          "fade-and-move-vert-out"},
+      {GST_AUDIO_VISUALIZER_SHADER_FADE_AND_MOVE_VERT_IN,
+            "GST_AUDIO_VISUALIZER_SHADER_FADE_AND_MOVE_VERT_IN",
+          "fade-and-move-vert-in"},
+      {0, NULL, NULL}
+    };
+    GType g_define_type_id =
+        g_enum_register_static ("GstAudioVisualizerShader", 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 1ca0476..27754b0 100644
--- a/win32/common/pbutils-enumtypes.h
+++ b/win32/common/pbutils-enumtypes.h
@@ -17,6 +17,10 @@
 #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())
+
+/* enumerations from "gstaudiovisualizer.h" */
+GType gst_audio_visualizer_shader_get_type (void);
+#define GST_TYPE_AUDIO_VISUALIZER_SHADER (gst_audio_visualizer_shader_get_type())
 G_END_DECLS
 
 #endif /* __PB_UTILS_ENUM_TYPES_H__ */